From d692ed634a8c922aba327e15ec671c85d1ad1e76 Mon Sep 17 00:00:00 2001 From: Mario Date: Sun, 23 May 2021 19:44:37 +0000 Subject: some cleanup --- include/items.php | 51 +++++++++++---------------------------------------- 1 file changed, 11 insertions(+), 40 deletions(-) diff --git a/include/items.php b/include/items.php index d6dd517ba..5f80b9f51 100644 --- a/include/items.php +++ b/include/items.php @@ -758,35 +758,17 @@ function get_item_elements($x,$allow_code = false) { // and not enough info to be able to look you up from your hash - which is the only thing stored with the post. $xchan_hash = import_author_xchan($x['author']); - if($xchan_hash) { + if($xchan_hash) $arr['author_xchan'] = $xchan_hash; - } - else { + else return []; - } - // save a potentially expensive lookup if author == owner - $legacy_sig = false; - $owner_hash = ''; - if(isset($x['owner']['id']) && isset($x['owner']['key']) && isset($x['owner']['network']) && $x['owner']['network'] === 'zot6') { - $owner_hash = Libzot::make_xchan_hash($x['owner']['id'], $x['owner']['key']); - } - else { - $owner_hash = make_xchan_hash($x['owner']['guid'],$x['owner']['guid_sig']); - $legacy_sig = true; - } - - if($arr['author_xchan'] === $owner_hash) { - $arr['owner_xchan'] = $arr['author_xchan']; + $xchan_hash = import_author_xchan($x['owner']); + if($xchan_hash) { + $arr['owner_xchan'] = $xchan_hash; } else { - $xchan_hash = import_author_xchan($x['owner']); - if($xchan_hash) { - $arr['owner_xchan'] = $xchan_hash; - } - else { - return []; - } + return []; } // Check signature on the body text received. @@ -800,20 +782,12 @@ function get_item_elements($x,$allow_code = false) { // check the supplied signature against the supplied content. // Note that we will purify the content which could change it. - $r = q("select xchan_pubkey, xchan_network from xchan where xchan_hash = '%s' limit 1", + $r = q("SELECT xchan_pubkey FROM xchan WHERE xchan_hash = '%s' LIMIT 1", dbesc($arr['author_xchan']) ); - if($r) { - if($r[0]['xchan_pubkey'] && $r[0]['xchan_network'] === 'zot6') { - $item_verified = false; - if($legacy_sig) { - $item_verified = Crypto::verify($x['body'], base64url_decode($arr['sig']), $r[0]['xchan_pubkey']); - } - else { - $item_verified = Libzot::verify($x['body'], $arr['sig'], $r[0]['xchan_pubkey']); - } - - if($item_verified) { + if ($r) { + if ($r[0]['xchan_pubkey']) { + if (Libzot::verify($x['body'], $arr['sig'], $r[0]['xchan_pubkey'])) { $arr['item_verified'] = 1; } else { @@ -1325,16 +1299,13 @@ function translate_scope($scope) { * @return array an associative array */ function encode_item_xchan($xchan) { - $ret = array(); + $ret = []; $ret['name'] = $xchan['xchan_name']; $ret['address'] = $xchan['xchan_addr']; $ret['url'] = $xchan['xchan_url']; $ret['network'] = $xchan['xchan_network']; $ret['photo'] = [ 'mimetype' => $xchan['xchan_photo_mimetype'], 'src' => $xchan['xchan_photo_m'] ]; - $ret['guid'] = $xchan['xchan_guid']; - $ret['guid_sig'] = $xchan['xchan_guid_sig']; - $ret['id'] = $xchan['xchan_guid']; $ret['id_sig'] = $xchan['xchan_guid_sig']; $ret['key'] = $xchan['xchan_pubkey']; -- cgit v1.2.3 From 0b7d343c7c16a73c72bc55b3507c1e7d1798c1db Mon Sep 17 00:00:00 2001 From: Mario Date: Sun, 23 May 2021 20:10:43 +0000 Subject: remove mail and some hubzilla < 5.0 quirks from notifier --- Zotlabs/Daemon/Notifier.php | 54 ++++----------------------------------------- 1 file changed, 4 insertions(+), 50 deletions(-) diff --git a/Zotlabs/Daemon/Notifier.php b/Zotlabs/Daemon/Notifier.php index 741078422..818512572 100644 --- a/Zotlabs/Daemon/Notifier.php +++ b/Zotlabs/Daemon/Notifier.php @@ -53,7 +53,6 @@ require_once('include/bbcode.php'); * event (in events.php) * expire (in items.php) * like (in like.php, poke.php) - * mail (in message.php) * tag (in photos.php, poke.php, tagger.php) * tgroup (in items.php) * wall-new (in photos.php, item.php) @@ -71,7 +70,6 @@ require_once('include/bbcode.php'); * expire channel_id * relay item_id (item was relayed to owner, we will deliver it as owner) * single_activity item_id (deliver to a singleton network from the appropriate clone) - * single_mail mail_id (deliver to a singleton network from the appropriate clone) * location channel_id * request channel_id xchan_hash message_id * rating xlink_id @@ -101,37 +99,12 @@ class Notifier { $deliveries = []; $request = false; - $mail = false; $location = false; $recipients = []; $normal_mode = true; $packet_type = 'undefined'; - if ($cmd === 'mail' || $cmd === 'single_mail') { - $normal_mode = false; - $mail = true; - $private = true; - $message = q("SELECT * FROM mail WHERE id = %d LIMIT 1", - intval($item_id) - ); - if (!$message) { - return; - } - xchan_mail_query($message[0]); - $uid = $message[0]['channel_id']; - $recipients[] = $message[0]['from_xchan']; // include clones - $recipients[] = $message[0]['to_xchan']; - $item = $message[0]; - $encoded_item = encode_mail($item); - - $s = q("select * from channel where channel_id = %d limit 1", - intval($uid) - ); - if ($s) - $channel = $s[0]; - - } - elseif ($cmd === 'request') { + if ($cmd === 'request') { $channel_id = $item_id; $xchan = $argv[3]; $request_message_id = $argv[4]; @@ -521,8 +494,7 @@ class Notifier { 'relay_to_owner' => $relay_to_owner, 'uplink' => $uplink, 'cmd' => $cmd, - 'mail' => $mail, - 'single' => (($cmd === 'single_mail' || $cmd === 'single_activity') ? true : false), + 'single' => (($cmd === 'single_activity') ? true : false), 'location' => $location, 'request' => $request, 'normal_mode' => $normal_mode, @@ -666,8 +638,7 @@ class Notifier { 'relay_to_owner' => $relay_to_owner, 'uplink' => $uplink, 'cmd' => $cmd, - 'mail' => $mail, - 'single' => (($cmd === 'single_mail' || $cmd === 'single_activity') ? true : false), + 'single' => (($cmd === 'single_activity') ? true : false), 'location' => $location, 'request' => $request, 'normal_mode' => $normal_mode, @@ -695,7 +666,7 @@ class Notifier { // will invoke a delivery to those connections which are connected to just that // hub instance. - if ($cmd === 'single_mail' || $cmd === 'single_activity') { + if ($cmd === 'single_activity') { continue; } @@ -785,23 +756,6 @@ class Notifier { } } - - // remove this after most hubs have updated to version 5.0 - if (stripos($hub['site_project'], 'hubzilla') !== false && version_compare($hub['site_version'], '4.7.3', '<=')) { - if ($encoded_item['type'] === 'mail') { - $encoded_item['from']['network'] = 'zot'; - $encoded_item['from']['guid_sig'] = str_replace('sha256.', '', $encoded_item['from']['guid_sig']); - } - else { - $encoded_item['owner']['network'] = 'zot'; - $encoded_item['owner']['guid_sig'] = str_replace('sha256.', '', $encoded_item['owner']['guid_sig']); - if (strpos($encoded_item['author']['url'], z_root()) === 0) { - $encoded_item['author']['network'] = 'zot'; - $encoded_item['author']['guid_sig'] = str_replace('sha256.', '', $encoded_item['author']['guid_sig']); - } - } - } - Queue::insert( [ 'hash' => $hash, -- cgit v1.2.3 From d40686e5d00b816bfa01282c69e8d34ddc9d3616 Mon Sep 17 00:00:00 2001 From: Mario Date: Sun, 23 May 2021 20:31:03 +0000 Subject: remove request command from notifier --- Zotlabs/Daemon/Notifier.php | 36 +++--------------------------------- include/zot.php | 2 +- 2 files changed, 4 insertions(+), 34 deletions(-) diff --git a/Zotlabs/Daemon/Notifier.php b/Zotlabs/Daemon/Notifier.php index 818512572..3b84896d8 100644 --- a/Zotlabs/Daemon/Notifier.php +++ b/Zotlabs/Daemon/Notifier.php @@ -15,14 +15,7 @@ require_once('include/bbcode.php'); /* - * This file was at one time responsible for doing all deliveries, but this caused - * big problems on shared hosting systems, where the process might get killed by the - * hosting provider and nothing would get delivered. - * It now only delivers one message under certain cases, and invokes a queued - * delivery mechanism (include/deliver.php) to deliver individual contacts at - * controlled intervals. - * This has a much better chance of surviving random processes getting killed - * by the hosting provider. + * Notifier - message dispatch and preparation for delivery * * The basic flow is: * Identify the type of message @@ -104,23 +97,7 @@ class Notifier { $normal_mode = true; $packet_type = 'undefined'; - if ($cmd === 'request') { - $channel_id = $item_id; - $xchan = $argv[3]; - $request_message_id = $argv[4]; - - $s = q("select * from channel where channel_id = %d limit 1", - intval($channel_id) - ); - if ($s) - $channel = $s[0]; - - $private = true; - $recipients[] = $xchan; - $packet_type = 'request'; - $normal_mode = false; - } - elseif ($cmd === 'keychange') { + if ($cmd === 'keychange') { $channel = channelx_by_n($item_id); $r = q("select abook_xchan from abook where abook_channel = %d", @@ -496,7 +473,6 @@ class Notifier { 'cmd' => $cmd, 'single' => (($cmd === 'single_activity') ? true : false), 'location' => $location, - 'request' => $request, 'normal_mode' => $normal_mode, 'packet_type' => $packet_type, 'walltowall' => $walltowall, @@ -640,7 +616,6 @@ class Notifier { 'cmd' => $cmd, 'single' => (($cmd === 'single_activity') ? true : false), 'location' => $location, - 'request' => $request, 'normal_mode' => $normal_mode, 'packet_type' => $packet_type, 'walltowall' => $walltowall, @@ -691,16 +666,11 @@ class Notifier { $packet = zot_build_packet($channel, $packet_type, (($packet_recips) ? $packet_recips : null)); } } + if ($packet_type === 'keychange' && $hub['hubloc_network'] === 'zot') { $pmsg = get_pconfig($channel['channel_id'], 'system', 'keychange'); $packet = zot_build_packet($channel, $packet_type, (($packet_recips) ? $packet_recips : null)); } - elseif ($packet_type === 'request' && $hub['hubloc_network'] === 'zot') { - $env = (($hub_env && $hub_env[$hub['hubloc_host'] . $hub['hubloc_sitekey']]) ? $hub_env[$hub['hubloc_host'] . $hub['hubloc_sitekey']] : ''); - $packet = zot_build_packet($channel, $packet_type, $env, $hub['hubloc_sitekey'], $hub['site_crypto'], - $hash, ['message_id' => $request_message_id] - ); - } if ($packet) { Queue::insert( diff --git a/include/zot.php b/include/zot.php index 634561fa3..5c1cde812 100644 --- a/include/zot.php +++ b/include/zot.php @@ -1907,7 +1907,7 @@ function process_delivery($sender, $arr, $deliveries, $relay, $public = false, $ if((! $relay) && (! $request) && (! $local_public) && perm_is_allowed($channel['channel_id'],$sender['hash'],'send_stream')) { - Zotlabs\Daemon\Master::Summon(array('Notifier', 'request', $channel['channel_id'], $sender['hash'], $arr['parent_mid'])); + //Zotlabs\Daemon\Master::Summon(array('Notifier', 'request', $channel['channel_id'], $sender['hash'], $arr['parent_mid'])); } continue; } -- cgit v1.2.3 From ea215697edabd4788d497d2f22000b06cfe26fdd Mon Sep 17 00:00:00 2001 From: Mario Date: Sun, 23 May 2021 20:36:00 +0000 Subject: remove location command from notifier --- Zotlabs/Daemon/Notifier.php | 28 ---------------------------- 1 file changed, 28 deletions(-) diff --git a/Zotlabs/Daemon/Notifier.php b/Zotlabs/Daemon/Notifier.php index 3b84896d8..a163fb5bd 100644 --- a/Zotlabs/Daemon/Notifier.php +++ b/Zotlabs/Daemon/Notifier.php @@ -165,32 +165,6 @@ class Notifier { $private = false; $packet_type = 'refresh'; } - elseif ($cmd === 'location') { - logger('notifier: location: ' . $item_id); - $s = q("select * from channel where channel_id = %d limit 1", - intval($item_id) - ); - if ($s) - $channel = $s[0]; - - $uid = $item_id; - $recipients = []; - - $r = q("select abook_xchan from abook where abook_channel = %d", - intval($uid) - ); - if ($r) { - foreach ($r as $rr) { - $recipients[] = $rr['abook_xchan']; - } - } - - $encoded_item = ['locations' => Libzot::encode_locations($channel), 'type' => 'location', 'encoding' => 'zot']; - $target_item = ['aid' => $channel['channel_account_id'], 'uid' => $channel['channel_id']]; - $private = false; - $packet_type = 'location'; - $location = true; - } elseif ($cmd === 'purge') { $xchan = $argv[3]; logger('notifier: purge: ' . $item_id . ' => ' . $xchan); @@ -472,7 +446,6 @@ class Notifier { 'uplink' => $uplink, 'cmd' => $cmd, 'single' => (($cmd === 'single_activity') ? true : false), - 'location' => $location, 'normal_mode' => $normal_mode, 'packet_type' => $packet_type, 'walltowall' => $walltowall, @@ -615,7 +588,6 @@ class Notifier { 'uplink' => $uplink, 'cmd' => $cmd, 'single' => (($cmd === 'single_activity') ? true : false), - 'location' => $location, 'normal_mode' => $normal_mode, 'packet_type' => $packet_type, 'walltowall' => $walltowall, -- cgit v1.2.3 From a47a81db6f9c6f0f21e81e7085b9345a4c67dd58 Mon Sep 17 00:00:00 2001 From: Mario Date: Tue, 25 May 2021 11:13:13 +0000 Subject: more notifier work --- Zotlabs/Daemon/Notifier.php | 482 +++++++++++++++++++------------------------- 1 file changed, 209 insertions(+), 273 deletions(-) diff --git a/Zotlabs/Daemon/Notifier.php b/Zotlabs/Daemon/Notifier.php index a163fb5bd..0f367103e 100644 --- a/Zotlabs/Daemon/Notifier.php +++ b/Zotlabs/Daemon/Notifier.php @@ -6,10 +6,8 @@ use Zotlabs\Lib\Libzot; use Zotlabs\Lib\Activity; use Zotlabs\Lib\Queue; -require_once('include/queue_fn.php'); require_once('include/html2plain.php'); require_once('include/conversation.php'); -require_once('include/zot.php'); require_once('include/items.php'); require_once('include/bbcode.php'); @@ -55,7 +53,6 @@ require_once('include/bbcode.php'); * ZOT * permission_create abook_id * permission_accept abook_id - * permission_reject abook_id * permission_update abook_id * refresh_all channel_id * purge channel_id xchan_hash @@ -73,10 +70,20 @@ require_once('include/bbcode.php'); class Notifier { + static public $deliveries = []; + static public $recipients = []; + static public $env_recips = []; + static public $packet_type = 'activity'; + static public $encoding = 'activitystreams'; + static public $encoded_item = null; + static public $channel = null; + static public $private = false; + static public function run($argc, $argv) { - if ($argc < 3) + if ($argc < 3) { return; + } logger('notifier: invoked: ' . print_r($argv, true), LOGGER_DEBUG); @@ -84,23 +91,26 @@ class Notifier { $item_id = $argv[2]; - if (!$item_id) + if (!$item_id) { return; + } - $sys = get_sys_channel(); - $deliveries = []; + self::$deliveries = []; + self::$recipients = []; + self::$env_recips = []; + self::$packet_type = 'activity'; + self::$encoding = 'activitystreams'; + self::$encoded_item = null; + self::$channel = null; + self::$private = false; - $request = false; - $location = false; - $recipients = []; - $normal_mode = true; - $packet_type = 'undefined'; + $sys = get_sys_channel(); + $normal_mode = true; if ($cmd === 'keychange') { - $channel = channelx_by_n($item_id); - - $r = q("select abook_xchan from abook where abook_channel = %d", + self::$channel = channelx_by_n($item_id); + $r = q("select abook_xchan from abook where abook_channel = %d", intval($item_id) ); if ($r) { @@ -108,30 +118,38 @@ class Notifier { $recipients[] = $rr['abook_xchan']; } } - $private = false; - $packet_type = 'keychange'; - $normal_mode = false; + self::$private = false; + self::$packet_type = 'keychange'; + self::$encoded_item = get_pconfig(self::$channel['channel_id'], 'system', 'keychange'); + self::$encoding = 'zot'; + $normal_mode = false; } - elseif (in_array($cmd, ['permission_update', 'permission_reject', 'permission_accept', 'permission_create'])) { + elseif (in_array($cmd, ['permission_update', 'permission_accept', 'permission_create'])) { // Get the (single) recipient $r = q("select * from abook left join xchan on abook_xchan = xchan_hash where abook_id = %d and abook_self = 0", intval($item_id) ); if ($r) { - $uid = $r[0]['abook_channel']; + $recip = $r[0]; + // Get the sender - $channel = channelx_by_n($uid); - if ($channel) { - $perm_update = ['sender' => $channel, 'recipient' => $r[0], 'success' => false, 'deliveries' => '']; - - if ($cmd === 'permission_create') - call_hooks('permissions_create', $perm_update); - elseif ($cmd === 'permission_accept') - call_hooks('permissions_accept', $perm_update); - elseif ($cmd === 'permission_reject') - call_hooks('permissions_reject', $perm_update); - else - call_hooks('permissions_update', $perm_update); + self::$channel = channelx_by_n($recip['abook_channel']); + if (self::$channel) { + $perm_update = ['sender' => self::$channel, 'recipient' => $recip, 'success' => false, 'deliveries' => '']; + + switch ($cmd) { + case 'permission_create': + call_hooks('permissions_create', $perm_update); + break; + case 'permission_accept': + call_hooks('permissions_accept', $perm_update); + break; + case 'permission_update': + call_hooks('permissions_update', $perm_update); + break; + default: + break; + } if ($perm_update['success']) { if ($perm_update['deliveries']) { @@ -141,29 +159,29 @@ class Notifier { return; } else { - $recipients[] = $r[0]['abook_xchan']; - $private = false; - $packet_type = 'refresh'; - $packet_recips = [['guid' => $r[0]['xchan_guid'], 'guid_sig' => $r[0]['xchan_guid_sig'], 'hash' => $r[0]['xchan_hash']]]; + self::$recipients[] = $recip['abook_xchan']; + self::$private = false; + self::$packet_type = 'refresh'; + self::$env_recips = [$recip['xchan_hash']]; } } } } elseif ($cmd === 'refresh_all') { logger('notifier: refresh_all: ' . $item_id); - $uid = $item_id; - $channel = channelx_by_n($item_id); - $r = q("select abook_xchan from abook where abook_channel = %d", - intval($uid) + self::$channel = channelx_by_n($item_id); + + $r = q("select abook_xchan from abook where abook_channel = %d", + intval($item_id) ); if ($r) { foreach ($r as $rr) { - $recipients[] = $rr['abook_xchan']; + self::$recipients[] = $rr['abook_xchan']; } } - $private = false; - $packet_type = 'refresh'; + self::$private = false; + self::$packet_type = 'refresh'; } elseif ($cmd === 'purge') { $xchan = $argv[3]; @@ -172,33 +190,27 @@ class Notifier { return; } - $channel = channelx_by_n($item_id); - $recipients[] = $xchan; - $private = true; - $packet_type = 'purge'; - $packet_recips[] = ['hash' => $xchan]; + self::$channel = channelx_by_n($item_id); + self::$recipients = [$xchan]; + self::$private = true; + self::$packet_type = 'purge'; } elseif ($cmd === 'purge_all') { - logger('notifier: purge_all: ' . $item_id); - $channel = channelx_by_n($item_id); + self::$channel = channelx_by_n($item_id); + self::$recipients = []; + self::$private = false; + self::$packet_type = 'purge'; - $recipients = []; - $r = q("select abook_xchan from abook where abook_channel = %d and abook_self = 0", + $r = q("select abook_xchan from abook where abook_channel = %d and abook_self = 0", intval($item_id) ); if (!$r) { return; } foreach ($r as $rr) { - $recipients[] = $rr['abook_xchan']; - $packet_recips[] = ['hash' => $rr['abook_xchan']]; + self::$recipients[] = $rr['abook_xchan']; } - - $private = false; - $packet_type = 'purge'; - - } else { @@ -206,15 +218,14 @@ class Notifier { // Fetch the target item - $r = q("SELECT * FROM item WHERE id = %d and parent != 0 LIMIT 1", + $r = q("SELECT * FROM item WHERE id = %d AND parent != 0", intval($item_id) ); - - if (!$r) + if (!$r) { return; + } xchan_query($r); - $r = fetch_post_tags($r); $target_item = $r[0]; @@ -269,11 +280,12 @@ class Notifier { $s = q("select * from channel left join xchan on channel_hash = xchan_hash where channel_id = %d limit 1", intval($target_item['uid']) ); - if ($s) - $channel = $s[0]; + if ($s) { + self::$channel = $s[0]; + } - if ($channel['channel_hash'] !== $target_item['author_xchan'] && $channel['channel_hash'] !== $target_item['owner_xchan']) { - logger("notifier: Sending channel {$channel['channel_hash']} is not owner {$target_item['owner_xchan']} or author {$target_item['author_xchan']}", LOGGER_NORMAL, LOG_WARNING); + if (self::$channel['channel_hash'] !== $target_item['author_xchan'] && self::$channel['channel_hash'] !== $target_item['owner_xchan']) { + logger("notifier: Sending channel " . self::$channel['channel_hash'] . " is not owner {$target_item['owner_xchan']} or author {$target_item['author_xchan']}", LOGGER_NORMAL, LOG_WARNING); return; } @@ -283,12 +295,13 @@ class Notifier { } else { // fetch the parent item - $r = q("SELECT * from item where id = %d order by id asc", + $r = q("SELECT * FROM item WHERE id = %d", intval($target_item['parent']) ); - if (!$r) + if (!$r) { return; + } if (strpos($r[0]['postopts'], 'nodeliver') !== false) { logger('notifier: target item is undeliverable', LOGGER_DEBUG, LOG_NOTICE); @@ -303,20 +316,17 @@ class Notifier { } // avoid looping of discover items 12/4/2014 - - if ($sys && $parent_item['uid'] == $sys['channel_id']) + if ($sys && $parent_item['uid'] == $sys['channel_id']) { return; + } - $encoded_item = encode_item($target_item); - + $m = get_iconfig($target_item, 'activitypub', 'signed_data'); // Re-use existing signature unless the activity type changed to a Tombstone, which won't verify. - $m = ((intval($target_item['item_deleted'])) ? '' : get_iconfig($target_item, 'activitypub', 'signed_data')); - - if ($m) { - $activity = json_decode($m, true); + if ($m && (!intval($target_item['item_deleted']))) { + self::$encoded_item = json_decode($m, true); } else { - $activity = array_merge(['@context' => [ + self::$encoded_item = array_merge(['@context' => [ ACTIVITYSTREAMS_JSONLD_REV, 'https://w3id.org/security/v1', z_root() . ZOT_APSCHEMA_REV @@ -325,7 +335,7 @@ class Notifier { } logger('target_item: ' . print_r($target_item, true), LOGGER_DEBUG); - logger('encoded: ' . print_r($activity, true), LOGGER_DEBUG); + logger('encoded: ' . print_r(self::$encoded_item, true), LOGGER_DEBUG); // Send comments to the owner to re-deliver to everybody in the conversation // We only do this if the item in question originated on this site. This prevents looping. @@ -336,9 +346,9 @@ class Notifier { // flag on comments for an extended period. So we'll also call comment_local_origin() which looks at // the hostname in the message_id and provides a second (fallback) opinion. - $relay_to_owner = (((!$top_level_post) && (intval($target_item['item_origin'])) && comment_local_origin($target_item)) ? true : false); - - $uplink = false; + $relay_to_owner = (!$top_level_post && intval($target_item['item_origin']) && comment_local_origin($target_item)); + $uplink = false; + $upstream = false; // $cmd === 'relay' indicates the owner is sending it to the original recipients // don't allow the item in the relay command to relay to owner under any circumstances, it will loop @@ -350,27 +360,34 @@ class Notifier { if (($cmd === 'uplink') && intval($parent_item['item_uplink']) && (!$top_level_post)) { logger('notifier: uplink'); - $uplink = true; + $uplink = true; + self::$packet_type = 'response'; } if (($relay_to_owner || $uplink) && ($cmd !== 'relay')) { logger('notifier: followup relay', LOGGER_DEBUG); - $recipients = [($uplink) ? $parent_item['source_xchan'] : $parent_item['owner_xchan']]; - $private = true; - if (!$encoded_item['flags']) - $encoded_item['flags'] = []; - $encoded_item['flags'][] = 'relay'; - $upstream = true; + $sendto = (($uplink) ? $parent_item['source_xchan'] : $parent_item['owner_xchan']); + self::$recipients = [$sendto]; + self::$private = true; + $upstream = true; + self::$packet_type = 'response'; } else { - logger('notifier: normal distribution', LOGGER_DEBUG); - if ($cmd === 'relay') - logger('notifier: owner relay'); - $upstream = false; + if ($cmd === 'relay') { + logger('owner relay (downstream delivery)'); + } + else { + logger('normal (downstream) distribution', LOGGER_DEBUG); + } + + if ($parent_item && $parent_item['item_private'] !== $target_item['item_private']) { + logger('conversation privacy mismatch - downstream delivery prevented'); + return; + } + // if our parent is a tag_delivery recipient, uplink to the original author causing // a delivery fork. - - if (($parent_item) && intval($parent_item['item_uplink']) && (!$top_level_post) && ($cmd !== 'uplink')) { + if ($parent_item && intval($parent_item['item_uplink']) && !$top_level_post && $cmd !== 'uplink') { // don't uplink a relayed post to the relay owner if ($parent_item['source_xchan'] !== $parent_item['owner_xchan']) { logger('notifier: uplinking this item'); @@ -378,77 +395,70 @@ class Notifier { } } - $private = false; - $recipients = collect_recipients($parent_item, $private); + self::$private = false; + self::$recipients = collect_recipients($parent_item, self::$private); + + // FIXME add any additional recipients such as mentions, etc. if ($top_level_post) { // remove clones who will receive the post via sync - $recipients = array_diff($recipients, [$target_item['owner_xchan']]); + self::$recipients = array_values(array_diff(self::$recipients, [$target_item['owner_xchan']])); } - // FIXME add any additional recipients such as mentions, etc. - + // don't send deletions onward for other people's stuff + if (intval($target_item['item_deleted']) && (!intval($target_item['item_wall']))) { + logger('notifier: ignoring delete notification for non-wall item', LOGGER_NORMAL, LOG_NOTICE); + return; + } } } - $walltowall = (($top_level_post && $channel['xchan_hash'] === $target_item['author_xchan']) ? true : false); - // Generic delivery section, we have an encoded item and recipients // Now start the delivery process - $x = $encoded_item; - $x['title'] = 'private'; - $x['body'] = 'private'; - logger('notifier: encoded item: ' . print_r($x, true), LOGGER_DATA, LOG_DEBUG); + logger('encoded item: ' . print_r(self::$encoded_item, true), LOGGER_DATA, LOG_DEBUG); - //logger('notifier: encoded activity: ' . print_r($activity,true), LOGGER_DATA, LOG_DEBUG); - - stringify_array_elms($recipients); - if (!$recipients) { + stringify_array_elms(self::$recipients); + if (!self::$recipients) { logger('no recipients'); return; } - // logger('notifier: recipients: ' . print_r($recipients,true), LOGGER_NORMAL, LOG_DEBUG); - - $env_recips = (($private) ? [] : null); + // logger('recipients: ' . print_r(self::$recipients,true), LOGGER_NORMAL, LOG_DEBUG); - $details = q("select xchan_hash, xchan_network, xchan_addr, xchan_guid, xchan_guid_sig from xchan where xchan_hash in (" . protect_sprintf(implode(',', $recipients)) . ")"); + if (!count(self::$env_recips)) { + self::$env_recips = ((self::$private) ? [] : null); + } $recip_list = []; + $details = dbq("select xchan_hash, xchan_network, xchan_addr, xchan_guid, xchan_guid_sig from xchan where xchan_hash in (" . protect_sprintf(implode(',', self::$recipients)) . ")"); + if ($details) { foreach ($details as $d) { $recip_list[] = $d['xchan_addr'] . ' (' . $d['xchan_hash'] . ')'; - if ($private) { - $env_recips[] = [ - 'guid' => $d['xchan_guid'], - 'guid_sig' => $d['xchan_guid_sig'], - 'hash' => $d['xchan_hash'] - ]; + if (self::$private) { + self::$env_recips[] = $d['xchan_hash']; } } } $narr = [ - 'channel' => $channel, + 'channel' => self::$channel, 'upstream' => $upstream, - 'env_recips' => $env_recips, - 'packet_recips' => $packet_recips, - 'recipients' => $recipients, - 'item' => $item, + 'env_recips' => self::$env_recips, + 'recipients' => self::$recipients, 'target_item' => $target_item, 'parent_item' => $parent_item, 'top_level_post' => $top_level_post, - 'private' => $private, + 'private' => self::$private, 'relay_to_owner' => $relay_to_owner, 'uplink' => $uplink, 'cmd' => $cmd, - 'single' => (($cmd === 'single_activity') ? true : false), + 'single' => ($cmd === 'single_activity'), 'normal_mode' => $normal_mode, - 'packet_type' => $packet_type, - 'walltowall' => $walltowall, + 'packet_type' => self::$packet_type, 'queued' => [] ]; @@ -460,13 +470,13 @@ class Notifier { // notifier_process can alter the recipient list - $recipients = $narr['recipients']; - $env_recips = $narr['env_recips']; - $packet_recips = $narr['packet_recips']; + self::$recipients = $narr['recipients']; + self::$env_recips = $narr['env_recips']; - if (($private) && (!$env_recips)) { + if (self::$private && !self::$env_recips) { // shouldn't happen logger('notifier: private message with no envelope recipients.' . print_r($argv, true), LOGGER_NORMAL, LOG_NOTICE); + return; } logger('notifier: recipients (may be delivered to more if public): ' . print_r($recip_list, true), LOGGER_DEBUG); @@ -475,15 +485,15 @@ class Notifier { // Now we have collected recipients (except for external mentions, FIXME) // Let's reduce this to a set of hubs; checking that the site is not dead. - $hubs = q("select hubloc.*, site.site_crypto, site.site_flags, site.site_version, site.site_project, site.site_dead from hubloc left join site on site_url = hubloc_url - where hubloc_hash in (" . protect_sprintf(implode(',', $recipients)) . ") + $hubs = q("select hubloc.*, site.site_crypto, site.site_flags, site.site_dead from hubloc left join site on site_url = hubloc_url + where hubloc_hash in (" . protect_sprintf(implode(',', self::$recipients)) . ") and hubloc_error = 0 and hubloc_deleted = 0" ); // public posts won't make it to the local public stream unless there's a recipient on this site. // This code block sees if it's a public post and localhost is missing, and if so adds an entry for the local sys channel to the $hubs list - if (!$private) { + if (!self::$private) { $found_localhost = false; if ($hubs) { foreach ($hubs as $h) { @@ -494,12 +504,12 @@ class Notifier { } } if (!$found_localhost) { - $localhub = q("select hubloc.*, site.site_crypto, site.site_flags, site.site_version, site.site_project, site.site_dead from hubloc - left join site on site_url = hubloc_url where hubloc_id_url = '%s' and hubloc_error = 0 and hubloc_deleted = 0", + $localhub = q("select hubloc.*, site.site_crypto, site.site_flags, site.site_dead from hubloc left join site on site_url = hubloc_url + where hubloc_id_url = '%s' and hubloc_error = 0 and hubloc_deleted = 0", dbesc(z_root() . '/channel/sys') ); if ($localhub) { - $hubs = array_merge($hubs, $localhub); + $hubs = array_merge($localhub, $hubs); } } } @@ -524,33 +534,24 @@ class Notifier { $dead = []; // known dead hubs - report them as undeliverable foreach ($hubs as $hub) { - - if (intval($hub['site_dead'])) { + if (isset($hub['site_dead']) && intval($hub['site_dead'])) { $dead[] = $hub; continue; } - if ($env_recips) { - foreach ($env_recips as $er) { - if ($hub['hubloc_hash'] === $er['hash']) { - if (!array_key_exists($hub['hubloc_host'] . $hub['hubloc_sitekey'], $hub_env)) { - $hub_env[$hub['hubloc_host'] . $hub['hubloc_sitekey']] = []; + if (self::$env_recips) { + foreach (self::$env_recips as $er) { + if ($hub['hubloc_hash'] === $er) { + if (!array_key_exists($hub['hubloc_site_id'], $hub_env)) { + $hub_env[$hub['hubloc_site_id']] = []; } - $hub_env[$hub['hubloc_host'] . $hub['hubloc_sitekey']][] = $er; + $hub_env[$hub['hubloc_site_id']][] = $er; } } } - - if ($hub['hubloc_network'] == 'zot') { + if ($hub['hubloc_network'] === 'zot6') { if (!in_array($hub['hubloc_sitekey'], $keys)) { - $hublist[] = $hub['hubloc_host'] . ' ' . $hub['hubloc_network']; - $dhubs[] = $hub; - $keys[] = $hub['hubloc_sitekey']; - } - } - else { - if (!in_array($hub['hubloc_url'], $urls)) { if ($hub['hubloc_url'] === z_root()) { //deliver to local hub first array_unshift($hublist, $hub['hubloc_host'] . ' ' . $hub['hubloc_network']); @@ -560,7 +561,14 @@ class Notifier { $hublist[] = $hub['hubloc_host'] . ' ' . $hub['hubloc_network']; $dhubs[] = $hub; } - $urls[] = $hub['hubloc_url']; + $keys[] = $hub['hubloc_sitekey']; + } + } + else { + if (!in_array($hub['hubloc_url'], $urls)) { + $hublist[] = $hub['hubloc_host'] . ' ' . $hub['hubloc_network']; + $dhubs[] = $hub; + $urls[] = $hub['hubloc_url']; } } } @@ -571,30 +579,26 @@ class Notifier { logger('notifier_hub: ' . $hub['hubloc_url'], LOGGER_DEBUG); - if (!in_array($hub['hubloc_network'], ['zot', 'zot6'])) { + if ($hub['hubloc_network'] !== 'zot6') { $narr = [ - 'channel' => $channel, + 'channel' => self::$channel, 'upstream' => $upstream, - 'env_recips' => $env_recips, - 'packet_recips' => $packet_recips, - 'recipients' => $recipients, - 'item' => $item, + 'env_recips' => self::$env_recips, + 'recipients' => self::$recipients, 'target_item' => $target_item, 'parent_item' => $parent_item, 'hub' => $hub, 'top_level_post' => $top_level_post, - 'private' => $private, + 'private' => self::$private, 'relay_to_owner' => $relay_to_owner, 'uplink' => $uplink, 'cmd' => $cmd, - 'single' => (($cmd === 'single_activity') ? true : false), + 'single' => $cmd === 'single_activity', 'normal_mode' => $normal_mode, - 'packet_type' => $packet_type, - 'walltowall' => $walltowall, + 'packet_type' => self::$packet_type, 'queued' => [] ]; - call_hooks('notifier_hub', $narr); if ($narr['queued']) { foreach ($narr['queued'] as $pq) @@ -617,127 +621,58 @@ class Notifier { continue; } - if (!in_array($hub['hubloc_network'], ['zot', 'zot6'])) { - continue; - } - - // Do not change this to a uuid as long as we have traditional zot servers - // in the loop. The signature verification step can't handle dashes in the - // hashes. - - $hash = random_string(48); - - $packet = null; - $pmsg = ''; - - if ($packet_type === 'refresh' || $packet_type === 'purge') { - if ($hub['hubloc_network'] === 'zot6') { - $packet = Libzot::build_packet($channel, $packet_type, ids_to_array($packet_recips, 'hash')); - } - else { - $packet = zot_build_packet($channel, $packet_type, (($packet_recips) ? $packet_recips : null)); - } - } + // default: zot protocol - if ($packet_type === 'keychange' && $hub['hubloc_network'] === 'zot') { - $pmsg = get_pconfig($channel['channel_id'], 'system', 'keychange'); - $packet = zot_build_packet($channel, $packet_type, (($packet_recips) ? $packet_recips : null)); - } + $hash = new_uuid(); - if ($packet) { - Queue::insert( - [ - 'hash' => $hash, - 'account_id' => $channel['channel_account_id'], - 'channel_id' => $channel['channel_id'], - 'posturl' => $hub['hubloc_callback'], - 'driver' => $hub['hubloc_network'], - 'notify' => $packet, - 'msg' => (($pmsg) ? json_encode($pmsg) : '') - ] - ); + $env = (($hub_env && $hub_env[$hub['hubloc_site_id']]) ? $hub_env[$hub['hubloc_site_id']] : ''); + if ((self::$private) && (!$env)) { + continue; } - else { - $env = (($hub_env && $hub_env[$hub['hubloc_host'] . $hub['hubloc_sitekey']]) ? $hub_env[$hub['hubloc_host'] . $hub['hubloc_sitekey']] : ''); - - if ($hub['hubloc_network'] === 'zot6') { - $zenv = []; - if ($env) { - foreach ($env as $e) { - $zenv[] = $e['hash']; - } - } - - $packet_type = (($upstream || $uplink) ? 'response' : 'activity'); - - // block zot private reshares from zot6, as this could cause a number of privacy issues - // due to parenting differences between the reshare implementations. In zot a reshare is - // a standalone parent activity and in zot6 it is a followup/child of the original activity. - // For public reshares, some comments to the reshare on the zot fork will not make it to zot6 - // due to these different message models. This cannot be prevented at this time. - if ($packet_type === 'activity' && $activity['type'] === 'Announce' && intval($target_item['item_private'])) { - continue; - } - - $packet = Libzot::build_packet($channel, $packet_type, $zenv, $activity, 'activitystreams', (($private) ? $hub['hubloc_sitekey'] : null), $hub['site_crypto']); - } - else { - // currently zot6 delivery is only performed on normal items and not sync items or mail or anything else - // Eventually we will do this for all deliveries, but for now ensure this is precisely what we are dealing - // with before switching to zot6 as the primary zot6 handler checks for the existence of a message delivery report - // to trigger dequeue'ing - - $z6 = (($encoded_item && $encoded_item['type'] === 'activity' && (!array_key_exists('allow_cid', $encoded_item))) ? true : false); - if ($z6) { - $packet = zot6_build_packet($channel, 'notify', $env, json_encode($encoded_item), (($private) ? $hub['hubloc_sitekey'] : null), $hub['site_crypto'], $hash); - } - else { - $packet = zot_build_packet($channel, 'notify', $env, (($private) ? $hub['hubloc_sitekey'] : null), $hub['site_crypto'], $hash); + $packet = Libzot::build_packet(self::$channel, self::$packet_type, $env, self::$encoded_item, self::$encoding, ((self::$private) ? $hub['hubloc_sitekey'] : null), $hub['site_crypto']); - } - } + Queue::insert( + [ + 'hash' => $hash, + 'account_id' => self::$channel['channel_account_id'], + 'channel_id' => self::$channel['channel_id'], + 'posturl' => $hub['hubloc_callback'], + 'notify' => $packet, + 'msg' => EMPTY_STR + ] + ); - Queue::insert( - [ - 'hash' => $hash, - 'account_id' => $target_item['aid'], - 'channel_id' => $target_item['uid'], - 'posturl' => $hub['hubloc_callback'], - 'driver' => $hub['hubloc_network'], - 'notify' => $packet, - 'msg' => json_encode($encoded_item) - ] + // only create delivery reports for normal undeleted items + if (is_array($target_item) && (!$target_item['item_deleted']) && (!get_config('system', 'disable_dreport'))) { + q("insert into dreport ( dreport_mid, dreport_site, dreport_recip, dreport_name, dreport_result, dreport_time, dreport_xchan, dreport_queue ) + values ( '%s', '%s','%s','%s','%s','%s','%s','%s' ) ", + dbesc($target_item['mid']), + dbesc($hub['hubloc_host']), + dbesc($hub['hubloc_host']), + dbesc($hub['hubloc_host']), + dbesc('queued'), + dbesc(datetime_convert()), + dbesc(self::$channel['channel_hash']), + dbesc($hash) ); - - // only create delivery reports for normal undeleted items - if (is_array($target_item) && array_key_exists('postopts', $target_item) && (!$target_item['item_deleted']) && (!get_config('system', 'disable_dreport'))) { - q("insert into dreport ( dreport_mid, dreport_site, dreport_recip, dreport_result, dreport_time, dreport_xchan, dreport_queue ) values ( '%s','%s','%s','%s','%s','%s','%s' ) ", - dbesc($target_item['mid']), - dbesc($hub['hubloc_host']), - dbesc($hub['hubloc_host']), - dbesc('queued'), - dbesc(datetime_convert()), - dbesc($channel['channel_hash']), - dbesc($hash) - ); - } } - $deliveries[] = $hash; + self::$deliveries[] = $hash; + } if ($normal_mode) { + // This wastes a process if there are no delivery hooks configured, so check this before launching the new process $x = q("select * from hook where hook = 'notifier_normal'"); if ($x) { Master::Summon(['Deliver_hooks', $target_item['id']]); } } - if ($deliveries) - do_delivery($deliveries); - - logger('notifier: basic loop complete.', LOGGER_DEBUG); + if (self::$deliveries) { + do_delivery(self::$deliveries); + } if ($dead) { foreach ($dead as $deceased) { @@ -750,8 +685,8 @@ class Notifier { dbesc($deceased['hubloc_host']), dbesc('undeliverable/unresponsive site'), dbesc(datetime_convert()), - dbesc($channel['channel_hash']), - dbesc(random_string(48)) + dbesc(self::$channel['channel_hash']), + dbesc(new_uuid()) ); } } @@ -760,6 +695,7 @@ class Notifier { call_hooks('notifier_end', $target_item); logger('notifer: complete.'); + return; } -- cgit v1.2.3 From 2486a9c914520188d751ac30cad91774302f0c01 Mon Sep 17 00:00:00 2001 From: Mario Date: Tue, 25 May 2021 11:15:22 +0000 Subject: php8: fix un maintained id3 parser --- vendor/lukasreschke/id3parser/src/getID3/getid3_lib.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/vendor/lukasreschke/id3parser/src/getID3/getid3_lib.php b/vendor/lukasreschke/id3parser/src/getID3/getid3_lib.php index b50ed30cc..08cb36e03 100644 --- a/vendor/lukasreschke/id3parser/src/getID3/getid3_lib.php +++ b/vendor/lukasreschke/id3parser/src/getID3/getid3_lib.php @@ -85,11 +85,11 @@ class getid3_lib // http://www.scri.fsu.edu/~jac/MAD3401/Backgrnd/binary.html if (strpos($binarypointnumber, '.') === false) { $binarypointnumber = '0.'.$binarypointnumber; - } elseif ($binarypointnumber{0} == '.') { + } elseif ($binarypointnumber[0] == '.') { $binarypointnumber = '0'.$binarypointnumber; } $exponent = 0; - while (($binarypointnumber{0} != '1') || (substr($binarypointnumber, 1, 1) != '.')) { + while (($binarypointnumber[0] != '1') || (substr($binarypointnumber, 1, 1) != '.')) { if (substr($binarypointnumber, 1, 1) == '.') { $exponent--; $binarypointnumber = substr($binarypointnumber, 2, 1).'.'.substr($binarypointnumber, 3); @@ -97,7 +97,7 @@ class getid3_lib $pointpos = strpos($binarypointnumber, '.'); $exponent += ($pointpos - 1); $binarypointnumber = str_replace('.', '', $binarypointnumber); - $binarypointnumber = $binarypointnumber{0}.'.'.substr($binarypointnumber, 1); + $binarypointnumber = $binarypointnumber[0].'.'.substr($binarypointnumber, 1); } } $binarypointnumber = str_pad(substr($binarypointnumber, 0, $maxbits + 2), $maxbits + 2, '0', STR_PAD_RIGHT); -- cgit v1.2.3 From 846d99cfce30a304eef876edb08978b1109c9da4 Mon Sep 17 00:00:00 2001 From: Mario Date: Tue, 25 May 2021 11:24:16 +0000 Subject: php8: more fix unmaintained id3 parser --- vendor/lukasreschke/id3parser/src/getID3/getid3_lib.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vendor/lukasreschke/id3parser/src/getID3/getid3_lib.php b/vendor/lukasreschke/id3parser/src/getID3/getid3_lib.php index 08cb36e03..377a84508 100644 --- a/vendor/lukasreschke/id3parser/src/getID3/getid3_lib.php +++ b/vendor/lukasreschke/id3parser/src/getID3/getid3_lib.php @@ -166,7 +166,7 @@ class getid3_lib if (!$bitword) { return 0; } - $signbit = $bitword{0}; + $signbit = $bitword[0]; switch (strlen($byteword) * 8) { case 32: @@ -317,7 +317,7 @@ class getid3_lib public static function Bin2Dec($binstring, $signed=false) { $signmult = 1; if ($signed) { - if ($binstring{0} == '1') { + if ($binstring[0] == '1') { $signmult = -1; } $binstring = substr($binstring, 1); -- cgit v1.2.3 From 175001eccdae4fbc92aa95aae74d57cfece6196a Mon Sep 17 00:00:00 2001 From: Mario Date: Tue, 25 May 2021 11:47:26 +0000 Subject: php8: even more fix unmaintained id3 parser --- .../id3parser/src/getID3/getid3_lib.php | 84 +++++++++++----------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/vendor/lukasreschke/id3parser/src/getID3/getid3_lib.php b/vendor/lukasreschke/id3parser/src/getID3/getid3_lib.php index 377a84508..2cb3b2d09 100644 --- a/vendor/lukasreschke/id3parser/src/getID3/getid3_lib.php +++ b/vendor/lukasreschke/id3parser/src/getID3/getid3_lib.php @@ -183,7 +183,7 @@ class getid3_lib // 80-bit Apple SANE format // http://www.mactech.com/articles/mactech/Vol.06/06.01/SANENormalized/ $exponentstring = substr($bitword, 1, 15); - $isnormalized = intval($bitword{16}); + $isnormalized = intval($bitword[16]); $fractionstring = substr($bitword, 17, 63); $exponent = pow(2, self::Bin2Dec($exponentstring) - 16383); $fraction = $isnormalized + self::DecimalBinary2Float($fractionstring); @@ -243,10 +243,10 @@ class getid3_lib } for ($i = 0; $i < $bytewordlen; $i++) { if ($synchsafe) { // disregard MSB, effectively 7-bit bytes - //$intvalue = $intvalue | (ord($byteword{$i}) & 0x7F) << (($bytewordlen - 1 - $i) * 7); // faster, but runs into problems past 2^31 on 32-bit systems - $intvalue += (ord($byteword{$i}) & 0x7F) * pow(2, ($bytewordlen - 1 - $i) * 7); + //$intvalue = $intvalue | (ord($byteword[$i]) & 0x7F) << (($bytewordlen - 1 - $i) * 7); // faster, but runs into problems past 2^31 on 32-bit systems + $intvalue += (ord($byteword[$i]) & 0x7F) * pow(2, ($bytewordlen - 1 - $i) * 7); } else { - $intvalue += ord($byteword{$i}) * pow(256, ($bytewordlen - 1 - $i)); + $intvalue += ord($byteword[$i]) * pow(256, ($bytewordlen - 1 - $i)); } } if ($signed && !$synchsafe) { @@ -273,7 +273,7 @@ class getid3_lib $binvalue = ''; $bytewordlen = strlen($byteword); for ($i = 0; $i < $bytewordlen; $i++) { - $binvalue .= str_pad(decbin(ord($byteword{$i})), 8, '0', STR_PAD_LEFT); + $binvalue .= str_pad(decbin(ord($byteword[$i]})), 8, '0', STR_PAD_LEFT); } return $binvalue; } @@ -538,7 +538,7 @@ class getid3_lib $newcharstring .= "\xEF\xBB\xBF"; } for ($i = 0; $i < strlen($string); $i++) { - $charval = ord($string{$i}); + $charval = ord($string[$i]); $newcharstring .= self::iconv_fallback_int_utf8($charval); } return $newcharstring; @@ -551,7 +551,7 @@ class getid3_lib $newcharstring .= "\xFE\xFF"; } for ($i = 0; $i < strlen($string); $i++) { - $newcharstring .= "\x00".$string{$i}; + $newcharstring .= "\x00".$string[$i]; } return $newcharstring; } @@ -563,7 +563,7 @@ class getid3_lib $newcharstring .= "\xFF\xFE"; } for ($i = 0; $i < strlen($string); $i++) { - $newcharstring .= $string{$i}."\x00"; + $newcharstring .= $string[$i]."\x00"; } return $newcharstring; } @@ -583,27 +583,27 @@ class getid3_lib $offset = 0; $stringlength = strlen($string); while ($offset < $stringlength) { - if ((ord($string{$offset}) | 0x07) == 0xF7) { + if ((ord($string[$offset]) | 0x07) == 0xF7) { // 11110bbb 10bbbbbb 10bbbbbb 10bbbbbb - $charval = ((ord($string{($offset + 0)}) & 0x07) << 18) & - ((ord($string{($offset + 1)}) & 0x3F) << 12) & - ((ord($string{($offset + 2)}) & 0x3F) << 6) & - (ord($string{($offset + 3)}) & 0x3F); + $charval = ((ord($string[($offset + 0)]) & 0x07) << 18) & + ((ord($string[($offset + 1)]) & 0x3F) << 12) & + ((ord($string[($offset + 2)]) & 0x3F) << 6) & + (ord($string[($offset + 3)]) & 0x3F); $offset += 4; - } elseif ((ord($string{$offset}) | 0x0F) == 0xEF) { + } elseif ((ord($string[$offset]) | 0x0F) == 0xEF) { // 1110bbbb 10bbbbbb 10bbbbbb - $charval = ((ord($string{($offset + 0)}) & 0x0F) << 12) & - ((ord($string{($offset + 1)}) & 0x3F) << 6) & - (ord($string{($offset + 2)}) & 0x3F); + $charval = ((ord($string[($offset + 0)]) & 0x0F) << 12) & + ((ord($string[($offset + 1)]) & 0x3F) << 6) & + (ord($string[($offset + 2)]) & 0x3F); $offset += 3; - } elseif ((ord($string{$offset}) | 0x1F) == 0xDF) { + } elseif ((ord($string[$offset]) | 0x1F) == 0xDF) { // 110bbbbb 10bbbbbb - $charval = ((ord($string{($offset + 0)}) & 0x1F) << 6) & - (ord($string{($offset + 1)}) & 0x3F); + $charval = ((ord($string[($offset + 0)]) & 0x1F) << 6) & + (ord($string[($offset + 1)]) & 0x3F); $offset += 2; - } elseif ((ord($string{$offset}) | 0x7F) == 0x7F) { + } elseif ((ord($string[$offset]) | 0x7F) == 0x7F) { // 0bbbbbbb - $charval = ord($string{$offset}); + $charval = ord($string[$offset]); $offset += 1; } else { // error? throw some kind of warning here? @@ -626,27 +626,27 @@ class getid3_lib $offset = 0; $stringlength = strlen($string); while ($offset < $stringlength) { - if ((ord($string{$offset}) | 0x07) == 0xF7) { + if ((ord($string[$offset]) | 0x07) == 0xF7) { // 11110bbb 10bbbbbb 10bbbbbb 10bbbbbb - $charval = ((ord($string{($offset + 0)}) & 0x07) << 18) & - ((ord($string{($offset + 1)}) & 0x3F) << 12) & - ((ord($string{($offset + 2)}) & 0x3F) << 6) & - (ord($string{($offset + 3)}) & 0x3F); + $charval = ((ord($string[($offset + 0)]) & 0x07) << 18) & + ((ord($string[($offset + 1)]) & 0x3F) << 12) & + ((ord($string[($offset + 2)]) & 0x3F) << 6) & + (ord($string[($offset + 3)]) & 0x3F); $offset += 4; - } elseif ((ord($string{$offset}) | 0x0F) == 0xEF) { + } elseif ((ord($string[$offset]) | 0x0F) == 0xEF) { // 1110bbbb 10bbbbbb 10bbbbbb - $charval = ((ord($string{($offset + 0)}) & 0x0F) << 12) & - ((ord($string{($offset + 1)}) & 0x3F) << 6) & - (ord($string{($offset + 2)}) & 0x3F); + $charval = ((ord($string[($offset + 0)]) & 0x0F) << 12) & + ((ord($string[($offset + 1)]) & 0x3F) << 6) & + (ord($string[($offset + 2)]) & 0x3F); $offset += 3; - } elseif ((ord($string{$offset}) | 0x1F) == 0xDF) { + } elseif ((ord($string[$offset]) | 0x1F) == 0xDF) { // 110bbbbb 10bbbbbb - $charval = ((ord($string{($offset + 0)}) & 0x1F) << 6) & - (ord($string{($offset + 1)}) & 0x3F); + $charval = ((ord($string[($offset + 0)]) & 0x1F) << 6) & + (ord($string[($offset + 1)]) & 0x3F); $offset += 2; - } elseif ((ord($string{$offset}) | 0x7F) == 0x7F) { + } elseif ((ord($string[$offset]) | 0x7F) == 0x7F) { // 0bbbbbbb - $charval = ord($string{$offset}); + $charval = ord($string[$offset]); $offset += 1; } else { // error? throw some kind of warning here? @@ -669,27 +669,27 @@ class getid3_lib $offset = 0; $stringlength = strlen($string); while ($offset < $stringlength) { - if ((ord($string{$offset}) | 0x07) == 0xF7) { + if ((ord($string[$offset]) | 0x07) == 0xF7) { // 11110bbb 10bbbbbb 10bbbbbb 10bbbbbb $charval = ((ord($string{($offset + 0)}) & 0x07) << 18) & ((ord($string{($offset + 1)}) & 0x3F) << 12) & ((ord($string{($offset + 2)}) & 0x3F) << 6) & (ord($string{($offset + 3)}) & 0x3F); $offset += 4; - } elseif ((ord($string{$offset}) | 0x0F) == 0xEF) { + } elseif ((ord($string[$offset]) | 0x0F) == 0xEF) { // 1110bbbb 10bbbbbb 10bbbbbb $charval = ((ord($string{($offset + 0)}) & 0x0F) << 12) & ((ord($string{($offset + 1)}) & 0x3F) << 6) & (ord($string{($offset + 2)}) & 0x3F); $offset += 3; - } elseif ((ord($string{$offset}) | 0x1F) == 0xDF) { + } elseif ((ord($string[$offset]) | 0x1F) == 0xDF) { // 110bbbbb 10bbbbbb $charval = ((ord($string{($offset + 0)}) & 0x1F) << 6) & (ord($string{($offset + 1)}) & 0x3F); $offset += 2; - } elseif ((ord($string{$offset}) | 0x7F) == 0x7F) { + } elseif ((ord($string[$offset]) | 0x7F) == 0x7F) { // 0bbbbbbb - $charval = ord($string{$offset}); + $charval = ord($string[$offset]); $offset += 1; } else { // error? maybe throw some warning here? @@ -886,7 +886,7 @@ class getid3_lib case 'UTF-8': $strlen = strlen($string); for ($i = 0; $i < $strlen; $i++) { - $char_ord_val = ord($string{$i}); + $char_ord_val = ord($string[$i]); $charval = 0; if ($char_ord_val < 0x80) { $charval = $char_ord_val; -- cgit v1.2.3 From d863ba1b2a62ec9f73cc8915dfdb8727368b6b8d Mon Sep 17 00:00:00 2001 From: Mario Date: Tue, 25 May 2021 12:04:32 +0000 Subject: syntax error --- vendor/lukasreschke/id3parser/src/getID3/getid3_lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/lukasreschke/id3parser/src/getID3/getid3_lib.php b/vendor/lukasreschke/id3parser/src/getID3/getid3_lib.php index 2cb3b2d09..40a1c4ba4 100644 --- a/vendor/lukasreschke/id3parser/src/getID3/getid3_lib.php +++ b/vendor/lukasreschke/id3parser/src/getID3/getid3_lib.php @@ -273,7 +273,7 @@ class getid3_lib $binvalue = ''; $bytewordlen = strlen($byteword); for ($i = 0; $i < $bytewordlen; $i++) { - $binvalue .= str_pad(decbin(ord($byteword[$i]})), 8, '0', STR_PAD_LEFT); + $binvalue .= str_pad(decbin(ord($byteword[$i])), 8, '0', STR_PAD_LEFT); } return $binvalue; } -- cgit v1.2.3 From 51ad4fac01f2cab6cd2e949e61010aa1ebb615f8 Mon Sep 17 00:00:00 2001 From: Mario Date: Tue, 25 May 2021 12:08:58 +0000 Subject: php8: even even more fix unmaintained id3 parser --- .../id3parser/src/getID3/getid3_lib.php | 30 +++++++++++----------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/vendor/lukasreschke/id3parser/src/getID3/getid3_lib.php b/vendor/lukasreschke/id3parser/src/getID3/getid3_lib.php index 40a1c4ba4..ca7dd30ed 100644 --- a/vendor/lukasreschke/id3parser/src/getID3/getid3_lib.php +++ b/vendor/lukasreschke/id3parser/src/getID3/getid3_lib.php @@ -671,21 +671,21 @@ class getid3_lib while ($offset < $stringlength) { if ((ord($string[$offset]) | 0x07) == 0xF7) { // 11110bbb 10bbbbbb 10bbbbbb 10bbbbbb - $charval = ((ord($string{($offset + 0)}) & 0x07) << 18) & - ((ord($string{($offset + 1)}) & 0x3F) << 12) & - ((ord($string{($offset + 2)}) & 0x3F) << 6) & - (ord($string{($offset + 3)}) & 0x3F); + $charval = ((ord($string[($offset + 0)]) & 0x07) << 18) & + ((ord($string[($offset + 1)]) & 0x3F) << 12) & + ((ord($string[($offset + 2)]) & 0x3F) << 6) & + (ord($string[($offset + 3)]) & 0x3F); $offset += 4; } elseif ((ord($string[$offset]) | 0x0F) == 0xEF) { // 1110bbbb 10bbbbbb 10bbbbbb - $charval = ((ord($string{($offset + 0)}) & 0x0F) << 12) & - ((ord($string{($offset + 1)}) & 0x3F) << 6) & - (ord($string{($offset + 2)}) & 0x3F); + $charval = ((ord($string[($offset + 0)]) & 0x0F) << 12) & + ((ord($string[($offset + 1)]) & 0x3F) << 6) & + (ord($string[($offset + 2)]) & 0x3F); $offset += 3; } elseif ((ord($string[$offset]) | 0x1F) == 0xDF) { // 110bbbbb 10bbbbbb - $charval = ((ord($string{($offset + 0)}) & 0x1F) << 6) & - (ord($string{($offset + 1)}) & 0x3F); + $charval = ((ord($string[($offset + 0)]) & 0x1F) << 6) & + (ord($string[($offset + 1)]) & 0x3F); $offset += 2; } elseif ((ord($string[$offset]) | 0x7F) == 0x7F) { // 0bbbbbbb @@ -892,16 +892,16 @@ class getid3_lib $charval = $char_ord_val; } elseif ((($char_ord_val & 0xF0) >> 4) == 0x0F && $i+3 < $strlen) { $charval = (($char_ord_val & 0x07) << 18); - $charval += ((ord($string{++$i}) & 0x3F) << 12); - $charval += ((ord($string{++$i}) & 0x3F) << 6); - $charval += (ord($string{++$i}) & 0x3F); + $charval += ((ord($string[++$i]) & 0x3F) << 12); + $charval += ((ord($string[++$i]) & 0x3F) << 6); + $charval += (ord($string[++$i]) & 0x3F); } elseif ((($char_ord_val & 0xE0) >> 5) == 0x07 && $i+2 < $strlen) { $charval = (($char_ord_val & 0x0F) << 12); - $charval += ((ord($string{++$i}) & 0x3F) << 6); - $charval += (ord($string{++$i}) & 0x3F); + $charval += ((ord($string[++$i]) & 0x3F) << 6); + $charval += (ord($string[++$i]) & 0x3F); } elseif ((($char_ord_val & 0xC0) >> 6) == 0x03 && $i+1 < $strlen) { $charval = (($char_ord_val & 0x1F) << 6); - $charval += (ord($string{++$i}) & 0x3F); + $charval += (ord($string[++$i]) & 0x3F); } if (($charval >= 32) && ($charval <= 127)) { $HTMLstring .= htmlentities(chr($charval)); -- cgit v1.2.3 From a29dbaba216d0049757ba548932af23e3df1d0bd Mon Sep 17 00:00:00 2001 From: Mario Date: Tue, 25 May 2021 12:17:45 +0000 Subject: disable mod post for now --- Zotlabs/Module/Post.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Zotlabs/Module/Post.php b/Zotlabs/Module/Post.php index f67cbf020..207d23e24 100644 --- a/Zotlabs/Module/Post.php +++ b/Zotlabs/Module/Post.php @@ -17,6 +17,7 @@ require_once('include/zot.php'); class Post extends \Zotlabs\Web\Controller { function init() { + return; if(array_key_exists('auth', $_REQUEST)) { $x = new \Zotlabs\Zot\Auth($_REQUEST); exit; @@ -24,6 +25,7 @@ class Post extends \Zotlabs\Web\Controller { } function post() { + return; if(array_key_exists('data',$_REQUEST)) { $z = new \Zotlabs\Zot\Receiver($_REQUEST['data'], get_config('system', 'prvkey'), new \Zotlabs\Zot\ZotHandler()); exit; -- cgit v1.2.3 From 8d8523684c2a1eed1cdff2573c9fa9bfbb7959de Mon Sep 17 00:00:00 2001 From: Mario Date: Wed, 26 May 2021 08:51:35 +0000 Subject: more id3parser --- vendor/lukasreschke/id3parser/src/getID3/Tags/getid3_id3v2.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vendor/lukasreschke/id3parser/src/getID3/Tags/getid3_id3v2.php b/vendor/lukasreschke/id3parser/src/getID3/Tags/getid3_id3v2.php index 31742b7f2..1911b6001 100644 --- a/vendor/lukasreschke/id3parser/src/getID3/Tags/getid3_id3v2.php +++ b/vendor/lukasreschke/id3parser/src/getID3/Tags/getid3_id3v2.php @@ -51,8 +51,8 @@ class getid3_id3v2 extends getid3_handler $header = $this->fread(10); if (substr($header, 0, 3) == 'ID3' && strlen($header) == 10) { - $thisfile_id3v2['majorversion'] = ord($header{3}); - $thisfile_id3v2['minorversion'] = ord($header{4}); + $thisfile_id3v2['majorversion'] = ord($header[3]); + $thisfile_id3v2['minorversion'] = ord($header[4]); // shortcut $id3v2_majorversion = &$thisfile_id3v2['majorversion']; -- cgit v1.2.3 From ec02eda11323fe27d2b23e6d289eb3d97c9eddc9 Mon Sep 17 00:00:00 2001 From: Mario Date: Wed, 26 May 2021 09:36:13 +0000 Subject: handle_tag(): only use xchans with xhchan_deleted = 0 --- Zotlabs/Module/Item.php | 2 ++ include/text.php | 24 ++++++++++++------------ 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/Zotlabs/Module/Item.php b/Zotlabs/Module/Item.php index 73a943039..518352667 100644 --- a/Zotlabs/Module/Item.php +++ b/Zotlabs/Module/Item.php @@ -822,6 +822,8 @@ class Item extends Controller { $post_tags = []; + + if($mimetype === 'text/bbcode') { require_once('include/text.php'); diff --git a/include/text.php b/include/text.php index 622c44f14..d2ab8bc72 100644 --- a/include/text.php +++ b/include/text.php @@ -2903,7 +2903,7 @@ function handle_tag(&$body, &$str_tags, $profile_uid, $tag, $in_network = true) $newname = substr($name,1); $newname = substr($newname,0,-1); - $r = q("select * from xchan where xchan_addr = '%s' or xchan_url = '%s'", + $r = q("SELECT * FROM xchan WHERE xchan_addr = '%s' OR xchan_url = '%s' AND xchan_deleted = 0", dbesc($newname), dbesc($newname) ); @@ -2929,18 +2929,18 @@ function handle_tag(&$body, &$str_tags, $profile_uid, $tag, $in_network = true) // select someone from this user's contacts by name - $r = q("SELECT * FROM abook left join xchan on abook_xchan = xchan_hash - WHERE xchan_name = '%s' AND abook_channel = %d ", - dbesc($newname), - intval($profile_uid) + $r = q("SELECT * FROM abook LEFT JOIN xchan ON abook_xchan = xchan_hash + WHERE xchan_name = '%s' AND abook_channel = %d AND xchan_deleted = 0", + dbesc($newname), + intval($profile_uid) ); // select anybody by full hubloc_addr if((! $r) && strpos($newname,'@')) { - $r = q("SELECT * FROM xchan left join hubloc on xchan_hash = hubloc_hash - WHERE hubloc_addr = '%s' ", - dbesc($newname) + $r = q("SELECT * FROM xchan LEFT JOIN hubloc ON xchan_hash = hubloc_hash + WHERE hubloc_addr = '%s' AND xchan_deleted = 0 ", + dbesc($newname) ); } @@ -2950,10 +2950,10 @@ function handle_tag(&$body, &$str_tags, $profile_uid, $tag, $in_network = true) // strip user-supplied wildcards before running a wildcard search $newname = str_replace('%','',$newname); - $r = q("SELECT * FROM abook left join xchan on abook_xchan = xchan_hash - WHERE xchan_addr like ('%s') AND abook_channel = %d ", - dbesc(((strpos($newname,'@')) ? $newname : $newname . '@%')), - intval($profile_uid) + $r = q("SELECT * FROM abook LEFT JOIN xchan ON abook_xchan = xchan_hash + WHERE xchan_addr LIKE ('%s') AND abook_channel = %d AND xchan_deleted = 0", + dbesc(((strpos($newname,'@')) ? $newname : $newname . '@%')), + intval($profile_uid) ); } -- cgit v1.2.3 From b7f124072fd8d4fec5b0c1ec1e56b3b854f640e7 Mon Sep 17 00:00:00 2001 From: Mario Date: Wed, 26 May 2021 11:25:36 +0000 Subject: import_author_xchan(): do not import legacy zot --- Zotlabs/Lib/Libzot.php | 6 ++--- include/items.php | 72 +++++++++++++------------------------------------- 2 files changed, 22 insertions(+), 56 deletions(-) diff --git a/Zotlabs/Lib/Libzot.php b/Zotlabs/Lib/Libzot.php index c7d001d21..5cd304679 100644 --- a/Zotlabs/Lib/Libzot.php +++ b/Zotlabs/Lib/Libzot.php @@ -2664,9 +2664,9 @@ class Libzot { // we may only end up with one; which results in posts with no author name or photo and are a bit // of a hassle to repair. If either or both are missing, do a full discovery probe. - //if (!array_key_exists('id', $x)) { - //return import_author_activitypub($x); - //} + if(!isset($x['id']) && !isset($x['key']) && !isset($x['id_sig'])) { + return false; + } $hash = self::make_xchan_hash($x['id'], $x['key']); diff --git a/include/items.php b/include/items.php index 5f80b9f51..a45a266a7 100644 --- a/include/items.php +++ b/include/items.php @@ -909,71 +909,37 @@ function get_item_elements($x,$allow_code = false) { function import_author_xchan($x) { - $arr = [ - 'xchan' => $x, - 'xchan_hash' => '' - ]; - /** - * @hooks import_author_xchan - * Called when looking up an author of a post by xchan_hash to ensure they have an xchan record on our site. - * * \e array \b xchan - * * \e string \b xchan_hash - Thre returned value - */ - call_hooks('import_author_xchan', $arr); - if($arr['xchan_hash']) { - return $arr['xchan_hash']; + if (!$x) { + return false; } $y = false; - if((isset($x['id']) && isset($x['key'])) && (!isset($x['network']) || $x['network'] === 'zot6')) { + if (!array_key_exists('network', $x) || $x['network'] === 'zot6') { $y = Libzot::import_author_zot($x); } - if(!$y && isset($x['url']) && isset($x['network']) && $x['network'] === 'zot6') { - $r = q("SELECT xchan_hash FROM xchan WHERE xchan_url = '%s' AND xchan_network = 'zot6'", - dbesc($x['url']) - ); - if($r) - $y = $r[0]['xchan_hash']; - else - $y = discover_by_webbie($x['url'], 'zot6'); - } - - // if we were told that it's a zot6 connection, don't probe/import anything else - - if($y) + // if we were told that it's a zot connection, don't probe/import anything else + if (array_key_exists('network', $x) && $x['network'] === 'zot6') return $y; - if(!isset($x['network']) || $x['network'] === 'zot') { - $y = import_author_zot($x); - } - - if(isset($x['network']) || $x['network'] === 'zot') { - if($x['url']) { - // check if we already have the zot6 xchan of this xchan_url. if not import it. - $r = q("SELECT xchan_hash FROM xchan WHERE xchan_url = '%s' AND xchan_network = 'zot6'", - dbesc($x['url']) - ); - // TODO: fix dupplicate with line 960 - if(!$r) - discover_by_webbie($x['url'], 'zot6'); - } - - if($y) - return $y; - - } + $hookinfo = [ + 'xchan' => $x, + 'xchan_hash' => '' + ]; - // perform zot6 discovery - if($x['url']) { - $y = discover_by_webbie($x['url'], 'zot6'); - if($y) { - return $y; - } + /** + * @hooks import_author_xchan + * Called when looking up an author of a post by xchan_hash to ensure they have an xchan record on our site. + * * \e array \b xchan + * * \e string \b xchan_hash - Thre returned value + */ + call_hooks('import_author_xchan', $hookinfo); + if($hookinfo['xchan_hash']) { + return $hookinfo['xchan_hash']; } - if($x['network'] === 'rss') { + if(!$y && array_key_exists('network', $x) && $x['network'] === 'rss') { $y = import_author_rss($x); } -- cgit v1.2.3 From b742910107720797b05ec69ae626b420699e0630 Mon Sep 17 00:00:00 2001 From: Mario Date: Wed, 26 May 2021 11:28:33 +0000 Subject: remove legacy zot from supported protocols --- Zotlabs/Lib/Libzot.php | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/Zotlabs/Lib/Libzot.php b/Zotlabs/Lib/Libzot.php index 5cd304679..e44a82b71 100644 --- a/Zotlabs/Lib/Libzot.php +++ b/Zotlabs/Lib/Libzot.php @@ -2927,7 +2927,7 @@ class Libzot { $hookinfo = [ 'channel_id' => $id, - 'protocols' => ['zot6', 'zot'] + 'protocols' => ['zot6'] ]; /** * @hooks channel_protocols @@ -3231,11 +3231,6 @@ class Libzot { return $v; } } - foreach ($arr as $v) { - if ($v[$check] === 'zot') { - return $v; - } - } return $arr[0]; -- cgit v1.2.3 From 1fa4bc9ac024983d4748262f98c6ddf323ad327c Mon Sep 17 00:00:00 2001 From: Mario Date: Wed, 26 May 2021 12:18:59 +0000 Subject: remove most legacy zot quirks --- Zotlabs/Daemon/Onedirsync.php | 2 +- Zotlabs/Daemon/Onepoll.php | 10 +++----- Zotlabs/Daemon/Poller.php | 11 ++++---- Zotlabs/Lib/Activity.php | 2 +- Zotlabs/Lib/Apps.php | 2 +- Zotlabs/Lib/Connect.php | 2 +- Zotlabs/Module/Connedit.php | 11 +++----- Zotlabs/Module/Fhublocs.php | 17 ------------ Zotlabs/Module/Import.php | 59 +----------------------------------------- include/bookmarks.php | 2 +- include/channel.php | 60 +++---------------------------------------- include/connections.php | 2 +- include/conversation.php | 2 -- include/import.php | 2 +- include/items.php | 2 +- include/network.php | 25 ------------------ include/permissions.php | 4 +-- include/socgraph.php | 40 ++++++++++------------------- include/text.php | 2 +- include/xchan.php | 7 ----- include/zid.php | 2 +- 21 files changed, 42 insertions(+), 224 deletions(-) diff --git a/Zotlabs/Daemon/Onedirsync.php b/Zotlabs/Daemon/Onedirsync.php index f29fbe5b8..01879a470 100644 --- a/Zotlabs/Daemon/Onedirsync.php +++ b/Zotlabs/Daemon/Onedirsync.php @@ -72,7 +72,7 @@ class Onedirsync { // we might have to pull this out some day, but for now update_directory_entry() // runs zot_finger() and is kind of zot specific - if ($h && !in_array($h['hubloc_network'], ['zot6', 'zot'])) + if ($h && $h['hubloc_network'] !== 'zot6') return; Libzotdir::update_directory_entry($r[0]); diff --git a/Zotlabs/Daemon/Onepoll.php b/Zotlabs/Daemon/Onepoll.php index d747e65f3..0fd695e17 100644 --- a/Zotlabs/Daemon/Onepoll.php +++ b/Zotlabs/Daemon/Onepoll.php @@ -75,16 +75,12 @@ class Onepoll { return; } - if (!in_array($contact['xchan_network'], ['zot', 'zot6'])) + if ($contact['xchan_network'] !== 'zot6')) return; // update permissions - if ($contact['xchan_network'] === 'zot6') - $x = Libzot::refresh($contact, $importer); - - if ($contact['xchan_network'] === 'zot') - $x = zot_refresh($contact, $importer); + $x = Libzot::refresh($contact, $importer); $responded = false; $updated = datetime_convert(); @@ -125,7 +121,7 @@ class Onepoll { if (!$can_send_stream) $fetch_feed = false; - if ($fetch_feed && $contact['xchan_network'] !== 'zot') { + if ($fetch_feed) { $max = intval(get_config('system', 'max_imported_posts', 30)); diff --git a/Zotlabs/Daemon/Poller.php b/Zotlabs/Daemon/Poller.php index 762f1349c..88213a7c9 100644 --- a/Zotlabs/Daemon/Poller.php +++ b/Zotlabs/Daemon/Poller.php @@ -69,11 +69,11 @@ class Poller { abook.abook_channel, abook.abook_id, abook.abook_archived, abook.abook_pending, abook.abook_ignored, abook.abook_blocked, xchan.xchan_network, - account.account_lastlog, account.account_flags - FROM abook LEFT JOIN xchan on abook_xchan = xchan_hash + account.account_lastlog, account.account_flags + FROM abook LEFT JOIN xchan on abook_xchan = xchan_hash LEFT JOIN account on abook_account = account_id where abook_self = 0 - $sql_extra + $sql_extra AND (( account_flags = %d ) OR ( account_flags = %d )) $abandon_sql ORDER BY $randfunc", intval(ACCOUNT_OK), intval(ACCOUNT_UNVERIFIED) // FIXME @@ -102,8 +102,7 @@ class Poller { continue; } - - if (!in_array($contact['xchan_network'], ['zot', 'zot6'])) + if ($contact['xchan_network'] !== 'zot6') continue; if ($c == $t) { @@ -191,7 +190,7 @@ class Poller { set_config('system', 'lastpoll', datetime_convert()); - //All done - clear the lockfile + //All done - clear the lockfile @unlink($lockfile); diff --git a/Zotlabs/Lib/Activity.php b/Zotlabs/Lib/Activity.php index 6e8344def..500e99ee8 100644 --- a/Zotlabs/Lib/Activity.php +++ b/Zotlabs/Lib/Activity.php @@ -3496,7 +3496,7 @@ class Activity { static function find_best_identity($xchan) { if (filter_var($xchan, FILTER_VALIDATE_URL)) { - $r = q("select hubloc_hash, hubloc_network from hubloc where hubloc_id_url = '%s' and hubloc_network in ('zot6', 'zot') and hubloc_deleted = 0", + $r = q("select hubloc_hash, hubloc_network from hubloc where hubloc_id_url = '%s' and hubloc_network = 'zot6' and hubloc_deleted = 0", dbesc($xchan) ); if ($r) { diff --git a/Zotlabs/Lib/Apps.php b/Zotlabs/Lib/Apps.php index 5ef4ecc8d..bd51f0896 100644 --- a/Zotlabs/Lib/Apps.php +++ b/Zotlabs/Lib/Apps.php @@ -524,7 +524,7 @@ class Apps { } elseif(remote_channel()) { $observer = \App::get_observer(); - if($observer && in_array($observer['xchan_network'], ['zot6', 'zot'])) { + if($observer && $observer['xchan_network'] === 'zot6') { // some folks might have xchan_url redirected offsite, use the connurl $x = parse_url($observer['xchan_connurl']); if($x) { diff --git a/Zotlabs/Lib/Connect.php b/Zotlabs/Lib/Connect.php index 21bec171b..38fe69995 100644 --- a/Zotlabs/Lib/Connect.php +++ b/Zotlabs/Lib/Connect.php @@ -146,7 +146,7 @@ class Connect { } - $allowed = ((in_array($xchan['xchan_network'],['rss','zot','zot6'])) ? 1 : 0); + $allowed = ((in_array($xchan['xchan_network'],['rss', 'zot6'])) ? 1 : 0); $hookdata = ['channel_id' => $uid, 'follow_address' => $url, 'xchan' => $xchan, 'allowed' => $allowed, 'singleton' => 0]; call_hooks('follow_allow',$hookdata); diff --git a/Zotlabs/Module/Connedit.php b/Zotlabs/Module/Connedit.php index 44211c8b9..61fe4a889 100644 --- a/Zotlabs/Module/Connedit.php +++ b/Zotlabs/Module/Connedit.php @@ -478,16 +478,11 @@ class Connedit extends Controller { } if($cmd === 'refresh') { - if($orig_record[0]['xchan_network'] === 'zot') { - if(! zot_refresh($orig_record[0],App::get_channel())) - notice( t('Refresh failed - channel is currently unavailable.') ); - } - elseif($orig_record[0]['xchan_network'] === 'zot6') { + if($orig_record[0]['xchan_network'] === 'zot6') { if(! Libzot::refresh($orig_record[0],App::get_channel())) notice( t('Refresh failed - channel is currently unavailable.') ); } else { - // if you are on a different network we'll force a refresh of the connection basic info Master::Summon(array('Notifier','permission_update',$contact_id)); } @@ -667,7 +662,7 @@ class Connedit extends Controller { ); - if(in_array($contact['xchan_network'], ['zot6', 'zot'])) { + if($contact['xchan_network'] === 'zot6') { $tools['fetchvc'] = [ 'label' => t('Fetch Vcard'), 'url' => z_root() . '/connedit/' . $contact['abook_id'] . '/fetchvc', @@ -841,7 +836,7 @@ class Connedit extends Controller { $locstr = unpunify($contact['xchan_url']); $clone_warn = ''; - $clonable = (in_array($contact['xchan_network'],['zot', 'zot6', 'rss']) ? true : false); + $clonable = (in_array($contact['xchan_network'], ['zot6', 'rss']); if(! $clonable) { $clone_warn = ''; $clone_warn .= ((intval($contact['abook_not_here'])) diff --git a/Zotlabs/Module/Fhublocs.php b/Zotlabs/Module/Fhublocs.php index 42dac5b12..4918f751b 100644 --- a/Zotlabs/Module/Fhublocs.php +++ b/Zotlabs/Module/Fhublocs.php @@ -59,23 +59,6 @@ class Fhublocs extends \Zotlabs\Web\Controller { // Create a verified hub location pointing to this site. -/* - $h = hubloc_store_lowlevel( - [ - 'hubloc_guid' => $rr['channel_guid'], - 'hubloc_guid_sig' => $rr['channel_guid_sig'], - 'hubloc_hash' => $rr['channel_hash'], - 'hubloc_addr' => channel_reddress($rr), - 'hubloc_network' => 'zot', - 'hubloc_primary' => $primary, - 'hubloc_url' => z_root(), - 'hubloc_url_sig' => base64url_encode(Crypto::sign(z_root(),$rr['channel_prvkey'])), - 'hubloc_host' => \App::get_hostname(), - 'hubloc_callback' => z_root() . '/post', - 'hubloc_sitekey' => $sitekey - ] - ); -*/ $h = hubloc_store_lowlevel( [ 'hubloc_guid' => $rr['channel_guid'], diff --git a/Zotlabs/Module/Import.php b/Zotlabs/Module/Import.php index 4622a588d..76d4fa733 100644 --- a/Zotlabs/Module/Import.php +++ b/Zotlabs/Module/Import.php @@ -212,35 +212,8 @@ class Import extends \Zotlabs\Web\Controller { // create new hubloc for the new channel at this site if(array_key_exists('channel',$data)) { - if($channel['channel_portable_id']) { - $r = hubloc_store_lowlevel( - [ - 'hubloc_guid' => $channel['channel_guid'], - 'hubloc_guid_sig' => $channel['channel_guid_sig'], - 'hubloc_hash' => $channel['channel_portable_id'], - 'hubloc_addr' => channel_reddress($channel), - 'hubloc_network' => 'zot', - 'hubloc_primary' => (($seize) ? 1 : 0), - 'hubloc_url' => z_root(), - 'hubloc_url_sig' => base64url_encode(Crypto::sign(z_root(),$channel['channel_prvkey'])), - 'hubloc_host' => \App::get_hostname(), - 'hubloc_callback' => z_root() . '/post', - 'hubloc_sitekey' => get_config('system','pubkey'), - 'hubloc_updated' => datetime_convert(), - 'hubloc_id_url' => channel_url($channel) - ] - ); - // reset the original primary hubloc if it is being seized - if($seize) { - $r = q("update hubloc set hubloc_primary = 0 where hubloc_primary = 1 and hubloc_hash = '%s' and hubloc_url != '%s' ", - dbesc($channel['channel_portable_id']), - dbesc(z_root()) - ); - } - } - - // create a new zot6 hubloc if we have got a channel_portable_id + // create a new zot6 hubloc $r = hubloc_store_lowlevel( [ @@ -285,28 +258,6 @@ class Import extends \Zotlabs\Web\Controller { dbesc($channel['channel_portable_id']) ); - if($channel['channel_portable_id']) { - $r = xchan_store_lowlevel( - [ - 'xchan_hash' => $channel['channel_portable_id'], - 'xchan_guid' => $channel['channel_guid'], - 'xchan_guid_sig' => $channel['channel_guid_sig'], - 'xchan_pubkey' => $channel['channel_pubkey'], - 'xchan_photo_l' => z_root() . "/photo/profile/l/" . $channel['channel_id'], - 'xchan_photo_m' => z_root() . "/photo/profile/m/" . $channel['channel_id'], - 'xchan_photo_s' => z_root() . "/photo/profile/s/" . $channel['channel_id'], - 'xchan_addr' => channel_reddress($channel), - 'xchan_url' => z_root() . '/channel/' . $channel['channel_address'], - 'xchan_connurl' => z_root() . '/poco/' . $channel['channel_address'], - 'xchan_follow' => z_root() . '/follow?f=&url=%s', - 'xchan_name' => $channel['channel_name'], - 'xchan_network' => 'zot', - 'xchan_photo_date' => datetime_convert(), - 'xchan_name_date' => datetime_convert() - ] - ); - } - $r = xchan_store_lowlevel( [ 'xchan_hash' => $channel['channel_hash'], @@ -336,14 +287,6 @@ class Import extends \Zotlabs\Web\Controller { if($xchans) { foreach($xchans as $xchan) { - if($xchan['xchan_network'] === 'zot') { - $hash = make_xchan_hash($xchan['xchan_guid'],$xchan['xchan_guid_sig']); - if($hash !== $xchan['xchan_hash']) { - logger('forged xchan: ' . print_r($xchan,true)); - continue; - } - } - if($xchan['xchan_network'] === 'zot6') { $zhash = Libzot::make_xchan_hash($xchan['xchan_guid'],$xchan['xchan_pubkey']); if($zhash !== $xchan['xchan_hash']) { diff --git a/include/bookmarks.php b/include/bookmarks.php index 207cf5a33..95043ae89 100644 --- a/include/bookmarks.php +++ b/include/bookmarks.php @@ -68,7 +68,7 @@ function bookmark_add($channel,$sender,$taxonomy,$private,$opts = null) { function get_bookmark_link($observer) { - if((! $observer) || !in_array($observer['xchan_network'], ['zot6', 'zot'])) + if(!$observer || $observer['xchan_network'] !== 'zot6') return ''; $h = @parse_url($observer['xchan_url']); diff --git a/include/channel.php b/include/channel.php index 804d8c63a..085aa5ea5 100644 --- a/include/channel.php +++ b/include/channel.php @@ -275,7 +275,7 @@ function create_identity($arr) { 'channel_guid' => $guid, 'channel_guid_sig' => $sig, 'channel_hash' => $hash, - 'channel_portable_id' => $zhash, + 'channel_portable_id' => '', 'channel_prvkey' => $key['prvkey'], 'channel_pubkey' => $key['pubkey'], 'channel_pageflags' => intval($pageflags), @@ -337,26 +337,6 @@ function create_identity($arr) { // Create a verified hub location pointing to this site. - $r = hubloc_store_lowlevel( - [ - 'hubloc_guid' => $guid, - 'hubloc_guid_sig' => $zsig, - 'hubloc_hash' => $zhash, - 'hubloc_id_url' => channel_url($ret['channel']), - 'hubloc_addr' => channel_reddress($ret['channel']), - 'hubloc_primary' => intval($primary), - 'hubloc_url' => z_root(), - 'hubloc_url_sig' => base64url_encode(Crypto::sign(z_root(),$ret['channel']['channel_prvkey'])), - 'hubloc_host' => App::get_hostname(), - 'hubloc_callback' => z_root() . '/post', - 'hubloc_sitekey' => get_config('system','pubkey'), - 'hubloc_network' => 'zot', - 'hubloc_updated' => datetime_convert() - ] - ); - if(! $r) - logger('Unable to store hub location (zot)'); - $r = hubloc_store_lowlevel( [ 'hubloc_guid' => $guid, @@ -381,30 +361,6 @@ function create_identity($arr) { $newuid = $ret['channel']['channel_id']; - $r = xchan_store_lowlevel( - [ - 'xchan_hash' => $zhash, - 'xchan_guid' => $guid, - 'xchan_guid_sig' => $zsig, - 'xchan_pubkey' => $key['pubkey'], - 'xchan_photo_mimetype' => (($photo_type) ? $photo_type : 'image/png'), - 'xchan_photo_l' => z_root() . "/photo/profile/l/{$newuid}", - 'xchan_photo_m' => z_root() . "/photo/profile/m/{$newuid}", - 'xchan_photo_s' => z_root() . "/photo/profile/s/{$newuid}", - 'xchan_addr' => channel_reddress($ret['channel']), - 'xchan_url' => z_root() . '/channel/' . $ret['channel']['channel_address'], - 'xchan_follow' => z_root() . '/follow?f=&url=%s', - 'xchan_connurl' => z_root() . '/poco/' . $ret['channel']['channel_address'], - 'xchan_name' => $ret['channel']['channel_name'], - 'xchan_network' => 'zot', - 'xchan_photo_date' => datetime_convert(), - 'xchan_name_date' => datetime_convert(), - 'xchan_system' => $system - ] - ); - if(! $r) - logger('Unable to store xchan (zot)'); - $r = xchan_store_lowlevel( [ 'xchan_hash' => $hash, @@ -981,12 +937,6 @@ function identity_basic_export($channel_id, $sections = null, $zap_compat = fals } - // pick up the zot xchan and hublocs also - - if($ret['channel']['channel_portable_id'] && ! $zot_compat) { - $xchans[] = $ret['channel']['channel_portable_id']; - } - stringify_array_elms($xchans); } @@ -2936,9 +2886,8 @@ function channel_remove($channel_id, $local = true, $unset_session = false) { logger('deleting hublocs',LOGGER_DEBUG); - $r = q("UPDATE hubloc SET hubloc_deleted = 1 WHERE (hubloc_hash = '%s' OR hubloc_hash = '%s') AND hubloc_url = '%s' ", + $r = q("UPDATE hubloc SET hubloc_deleted = 1 WHERE hubloc_hash = '%s' AND hubloc_url = '%s' ", dbesc($channel['channel_hash']), - dbesc($channel['channel_portable_id']), dbesc(z_root()) ); @@ -2953,9 +2902,8 @@ function channel_remove($channel_id, $local = true, $unset_session = false) { $hublocs = count($r); if(! $hublocs) { - $r = q("UPDATE xchan SET xchan_deleted = 1 WHERE xchan_hash = '%s' OR xchan_hash = '%s'", - dbesc($channel['channel_hash']), - dbesc($channel['channel_portable_id']) + $r = q("UPDATE xchan SET xchan_deleted = 1 WHERE xchan_hash = '%s'", + dbesc($channel['channel_hash']) ); } diff --git a/include/connections.php b/include/connections.php index 87db7faa9..a1b27e301 100644 --- a/include/connections.php +++ b/include/connections.php @@ -212,7 +212,7 @@ function mark_orphan_hubsxchans() { return; $r = q("UPDATE hubloc SET hubloc_error = 1 WHERE hubloc_error = 0 - AND hubloc_network IN ('zot6', 'zot') AND hubloc_connected < %s - INTERVAL %s", + AND hubloc_network = 'zot6' AND hubloc_connected < %s - INTERVAL %s", db_utcnow(), db_quoteinterval('36 day') ); diff --git a/include/conversation.php b/include/conversation.php index 04aa1ef5a..9fc70c511 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -1022,8 +1022,6 @@ function author_is_pmable($xchan, $abook) { if($x['result'] !== 'unset') return $x['result']; - if($xchan['xchan_network'] === 'zot' && get_observer_hash()) - return true; return false; } diff --git a/include/import.php b/include/import.php index 379789109..022440676 100644 --- a/include/import.php +++ b/include/import.php @@ -778,7 +778,7 @@ function sync_items($channel, $items, $relocate = null) { // to avoid confusing with cloned channels $size = count($items); for($i = 0; $i < $size; $i++) { - if(($items[$i]['owner']['network'] != 'zot') && ($items[$i]['owner']['network'] != 'zot6')) { + if($items[$i]['owner']['network'] !== 'zot6') { $r = q("SELECT * FROM abook WHERE abook_channel = %d AND abook_xchan = ( SELECT xchan_hash FROM xchan WHERE xchan_guid = '%s' LIMIT 1 ) AND abook_not_here = 0 AND abook_ignored = 0 AND abook_blocked = 0", diff --git a/include/items.php b/include/items.php index a45a266a7..2ee259e51 100644 --- a/include/items.php +++ b/include/items.php @@ -132,7 +132,7 @@ function collect_recipients($item, &$private_envelope,$include_groups = true) { case 'sit': case 'any': case 'con': - if(!in_array($rr['xchan_network'], ['zot6', 'zot'])) + if($rr['xchan_network'] !== 'zot6') break; case 'pub': case '': diff --git a/include/network.php b/include/network.php index 77b7c49d6..194b50885 100644 --- a/include/network.php +++ b/include/network.php @@ -1159,31 +1159,6 @@ function discover_by_webbie($webbie, $protocol = '') { } } } - - foreach($x['links'] as $link) { - if(array_key_exists('rel',$link)) { - - // If we discover zot - don't search further; grab the info and get out of - // here. - - if($link['rel'] === PROTOCOL_ZOT && ((! $protocol) || (strtolower($protocol) === 'zot'))) { - logger('zot found for ' . $webbie, LOGGER_DEBUG); - if(array_key_exists('zot',$x) && $x['zot']['success']) { - $i = import_xchan($x['zot']); - return true; - } - else { - $z = z_fetch_url($link['href']); - if($z['success']) { - $j = json_decode($z['body'],true); - $i = import_xchan($j); - return true; - } - } - } - } - } - } logger('webfinger: ' . print_r($x,true), LOGGER_DATA, LOG_INFO); diff --git a/include/permissions.php b/include/permissions.php index 9dd503132..33b385490 100644 --- a/include/permissions.php +++ b/include/permissions.php @@ -157,7 +157,7 @@ function get_all_perms($uid, $observer_xchan, $check_siteblock = true, $default_ // If we're still here, we have an observer, check the network. if($channel_perm & PERMS_NETWORK) { - if($x && in_array($x[0]['xchan_network'],[ 'zot','zot6'])) { + if($x && $x[0]['xchan_network'] === 'zot6') { $ret[$perm_name] = true; continue; } @@ -366,7 +366,7 @@ function perm_is_allowed($uid, $observer_xchan, $permission, $check_siteblock = // If we're still here, we have an observer, check the network. if($channel_perm & PERMS_NETWORK) { - if ($x && in_array($x[0]['xchan_network'], ['zot','zot6'])) + if ($x && $x[0]['xchan_network'] === 'zot6') return true; } diff --git a/include/socgraph.php b/include/socgraph.php index aaea4550c..03681ff57 100644 --- a/include/socgraph.php +++ b/include/socgraph.php @@ -24,7 +24,7 @@ require_once('include/zot.php'); * * Once the global contact is stored add (if necessary) the contact linkage which associates * the given uid, cid to the global contact entry. There can be many uid/cid combinations - * pointing to the same global contact id. + * pointing to the same global contact id. * * @param string $xchan * @param string $url @@ -127,14 +127,14 @@ function poco_load($xchan = '', $url = null) { $profile_url = $url['value']; continue; } - if(in_array($url['type'], ['zot','zot6'] )) { + if($url['type'] === 'zot6') { $network = $url['type']; $address = str_replace('acct:' , '', $url['value']); continue; } } } - if(x($entry,'photos') && is_array($entry['photos'])) { + if(x($entry,'photos') && is_array($entry['photos'])) { foreach($entry['photos'] as $photo) { if($photo['type'] == 'profile') { $profile_photo = $photo['value']; @@ -145,7 +145,7 @@ function poco_load($xchan = '', $url = null) { if((! $name) || (! $profile_url) || (! $profile_photo) || (! $hash) || (! $address)) { logger('poco_load: missing data'); - continue; + continue; } $x = q("select xchan_hash from xchan where xchan_hash = '%s' limit 1", @@ -168,18 +168,6 @@ function poco_load($xchan = '', $url = null) { continue; } } - if($network === 'zot') { - $j = Zotlabs\Zot\Finger::run($address,null); - if($j['success']) { - import_xchan($j); - } - $x = q("select xchan_hash from xchan where xchan_hash = '%s' limit 1", - dbesc($hash) - ); - if(! $x) { - continue; - } - } } else { continue; @@ -242,7 +230,7 @@ function common_friends($uid,$xchan,$start = 0,$limit=100000000,$shuffle = false if($shuffle) $sql_extra = " order by $rand "; else - $sql_extra = " order by xchan_name asc "; + $sql_extra = " order by xchan_name asc "; $r = q("SELECT * from xchan left join xlink on xlink_link = xchan_hash where xlink_xchan = '%s' and xlink_static = 0 and xlink_link in (select abook_xchan from abook where abook_xchan != '%s' and abook_channel = %d and abook_self = 0 ) $sql_extra limit %d offset %d", @@ -329,8 +317,8 @@ function update_suggestions() { if($ret['success']) { // We will grab fresh data once a day via the poller. Remove anything over a week old because - // the targets may have changed their preferences and don't want to be suggested - and they - // may have simply gone away. + // the targets may have changed their preferences and don't want to be suggested - and they + // may have simply gone away. $r = q("delete from xlink where xlink_xchan = '' and xlink_updated < %s - INTERVAL %s and xlink_static = 0", db_utcnow(), db_quoteinterval('7 DAY') @@ -413,11 +401,11 @@ function poco($a,$extended = false) { $sql_extra = sprintf(" and abook_id = %d and abook_hidden = 0 and abook_pending = 0 ",intval($cid)); if($system_mode) { - $r = q("SELECT count(*) as total from abook where abook_self = 1 + $r = q("SELECT count(*) as total from abook where abook_self = 1 and abook_channel in (select uid from pconfig where cat = 'system' and k = 'suggestme' and v = '1') "); } else { - $r = q("SELECT count(*) as total from abook where abook_channel = %d + $r = q("SELECT count(*) as total from abook where abook_channel = %d $sql_extra ", intval($channel_id) ); @@ -437,14 +425,14 @@ function poco($a,$extended = false) { $itemsPerPage = ((x($_GET,'count') && intval($_GET['count'])) ? intval($_GET['count']) : $totalResults); if($system_mode) { - $r = q("SELECT abook.*, xchan.* from abook left join xchan on abook_xchan = xchan_hash where abook_self = 1 - and abook_channel in (select uid from pconfig where cat = 'system' and k = 'suggestme' and v = '1') + $r = q("SELECT abook.*, xchan.* from abook left join xchan on abook_xchan = xchan_hash where abook_self = 1 + and abook_channel in (select uid from pconfig where cat = 'system' and k = 'suggestme' and v = '1') limit %d offset %d ", intval($itemsPerPage), intval($startIndex) ); } else { - $r = q("SELECT abook.*, xchan.* from abook left join xchan on abook_xchan = xchan_hash where abook_channel = %d + $r = q("SELECT abook.*, xchan.* from abook left join xchan on abook_xchan = xchan_hash where abook_channel = %d $sql_extra LIMIT %d OFFSET %d", intval($channel_id), intval($itemsPerPage), @@ -513,7 +501,7 @@ function poco($a,$extended = false) { $entry['urls'] = array(array('value' => $rr['xchan_url'], 'type' => 'profile')); $network = $rr['xchan_network']; if($rr['xchan_addr']) - $entry['urls'][] = array('value' => 'acct:' . $rr['xchan_addr'], 'type' => $network); + $entry['urls'][] = array('value' => 'acct:' . $rr['xchan_addr'], 'type' => $network); } if($fields_ret['preferredUsername']) $entry['preferredUsername'] = substr($rr['xchan_addr'],0,strpos($rr['xchan_addr'],'@')); @@ -536,7 +524,7 @@ function poco($a,$extended = false) { if($format === 'json') { header('Content-type: application/json'); echo json_encode($ret); - killme(); + killme(); } else http_status_exit(500); diff --git a/include/text.php b/include/text.php index d2ab8bc72..35a65bcfb 100644 --- a/include/text.php +++ b/include/text.php @@ -2067,7 +2067,7 @@ function get_plink($item,$conversation_mode = true) { $zidify = true; - if(array_key_exists('author',$item) && in_array($item['author']['xchan_network'], ['zot6', 'zot']) === false) + if(array_key_exists('author',$item) && $item['author']['xchan_network'] !== 'zot6') $zidify = false; if(x($item,$key)) { diff --git a/include/xchan.php b/include/xchan.php index 07fdb8b47..a32064303 100644 --- a/include/xchan.php +++ b/include/xchan.php @@ -85,13 +85,6 @@ function xchan_store($arr) { } } - if($arr['network'] === 'zot') { - if((! $arr['key']) || (! Crypto::verify($arr['guid'],base64url_decode($arr['guid_sig']),$arr['key']))) { - logger('Unable to verify signature for ' . $arr['hash']); - return false; - } - } - $columns = db_columns('xchan'); $x = []; diff --git a/include/zid.php b/include/zid.php index 0a33280ee..422683c95 100644 --- a/include/zid.php +++ b/include/zid.php @@ -14,7 +14,7 @@ function is_matrix_url($url) { if(array_key_exists($m['host'],$remembered)) return $remembered[$m['host']]; - $r = q("select hubloc_url from hubloc where hubloc_host = '%s' and hubloc_network in ('zot', 'zot6') limit 1", + $r = q("select hubloc_url from hubloc where hubloc_host = '%s' and hubloc_network = 'zot6' limit 1", dbesc($m['host']) ); if($r) { -- cgit v1.2.3 From 3c5f840cf0b0995228cb296bbd9de3244d8947b5 Mon Sep 17 00:00:00 2001 From: Mario Date: Wed, 26 May 2021 12:29:15 +0000 Subject: typo --- Zotlabs/Daemon/Onepoll.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Zotlabs/Daemon/Onepoll.php b/Zotlabs/Daemon/Onepoll.php index 0fd695e17..10fe395bc 100644 --- a/Zotlabs/Daemon/Onepoll.php +++ b/Zotlabs/Daemon/Onepoll.php @@ -75,7 +75,7 @@ class Onepoll { return; } - if ($contact['xchan_network'] !== 'zot6')) + if ($contact['xchan_network'] !== 'zot6') return; // update permissions -- cgit v1.2.3 From 84c5f57d2243ff8aa335e37fd5c6cb1b6d64e7d1 Mon Sep 17 00:00:00 2001 From: Mario Date: Wed, 26 May 2021 17:54:07 +0000 Subject: php8: more id3 parser fixes --- Zotlabs/Daemon/Thumbnail.php | 1 - .../id3parser/src/getID3/Tags/getid3_id3v2.php | 16 ++++++++-------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/Zotlabs/Daemon/Thumbnail.php b/Zotlabs/Daemon/Thumbnail.php index 72034b870..3688e8ae5 100644 --- a/Zotlabs/Daemon/Thumbnail.php +++ b/Zotlabs/Daemon/Thumbnail.php @@ -45,7 +45,6 @@ class Thumbnail { return; } - $default_controller = null; $files = glob('Zotlabs/Thumbs/*.php'); diff --git a/vendor/lukasreschke/id3parser/src/getID3/Tags/getid3_id3v2.php b/vendor/lukasreschke/id3parser/src/getID3/Tags/getid3_id3v2.php index 1911b6001..a767a5e06 100644 --- a/vendor/lukasreschke/id3parser/src/getID3/Tags/getid3_id3v2.php +++ b/vendor/lukasreschke/id3parser/src/getID3/Tags/getid3_id3v2.php @@ -71,7 +71,7 @@ class getid3_id3v2 extends getid3_handler } - $id3_flags = ord($header{5}); + $id3_flags = ord($header[5]); switch ($id3v2_majorversion) { case 2: // %ab000000 in v2.2 @@ -422,11 +422,11 @@ class getid3_id3v2 extends getid3_handler $footer = $this->fread(10); if (substr($footer, 0, 3) == '3DI') { $thisfile_id3v2['footer'] = true; - $thisfile_id3v2['majorversion_footer'] = ord($footer{3}); - $thisfile_id3v2['minorversion_footer'] = ord($footer{4}); + $thisfile_id3v2['majorversion_footer'] = ord($footer[3]); + $thisfile_id3v2['minorversion_footer'] = ord($footer[4]); } if ($thisfile_id3v2['majorversion_footer'] <= 4) { - $id3_flags = ord(substr($footer{5})); + $id3_flags = ord(substr($footer[5])); $thisfile_id3v2_flags['unsynch_footer'] = (bool) ($id3_flags & 0x80); $thisfile_id3v2_flags['extfoot_footer'] = (bool) ($id3_flags & 0x40); $thisfile_id3v2_flags['experim_footer'] = (bool) ($id3_flags & 0x20); @@ -1025,7 +1025,7 @@ class getid3_id3v2 extends getid3_handler $parsedFrame['lyrics'][$timestampindex]['data'] = substr($frame_remainingdata, $frame_offset, $frame_terminatorpos - $frame_offset); $frame_remainingdata = substr($frame_remainingdata, $frame_terminatorpos + strlen($this->TextEncodingTerminatorLookup($frame_textencoding))); - if (($timestampindex == 0) && (ord($frame_remainingdata{0}) != 0)) { + if (($timestampindex == 0) && (ord($frame_remainingdata[0]) != 0)) { // timestamp probably omitted for first data item } else { $parsedFrame['lyrics'][$timestampindex]['timestamp'] = getid3_lib::BigEndian2Int(substr($frame_remainingdata, 0, 4)); @@ -3334,10 +3334,10 @@ class getid3_id3v2 extends getid3_handler public static function IsANumber($numberstring, $allowdecimal=false, $allownegative=false) { for ($i = 0; $i < strlen($numberstring); $i++) { - if ((chr($numberstring{$i}) < chr('0')) || (chr($numberstring{$i}) > chr('9'))) { - if (($numberstring{$i} == '.') && $allowdecimal) { + if ((chr($numberstring[$i]) < chr('0')) || (chr($numberstring[$i]) > chr('9'))) { + if (($numberstring[$i] == '.') && $allowdecimal) { // allowed - } elseif (($numberstring{$i} == '-') && $allownegative && ($i == 0)) { + } elseif (($numberstring[$i] == '-') && $allownegative && ($i == 0)) { // allowed } else { return false; -- cgit v1.2.3 From ff34a787c34c757b8959bbe51a485890e2345902 Mon Sep 17 00:00:00 2001 From: Mario Date: Wed, 26 May 2021 18:02:29 +0000 Subject: php8: more id3 parser fixes --- vendor/lukasreschke/id3parser/src/getID3/Tags/getid3_id3v1.php | 2 +- vendor/lukasreschke/id3parser/src/getID3/Tags/getid3_id3v2.php | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/vendor/lukasreschke/id3parser/src/getID3/Tags/getid3_id3v1.php b/vendor/lukasreschke/id3parser/src/getID3/Tags/getid3_id3v1.php index 18e850af1..944885b4f 100644 --- a/vendor/lukasreschke/id3parser/src/getID3/Tags/getid3_id3v1.php +++ b/vendor/lukasreschke/id3parser/src/getID3/Tags/getid3_id3v1.php @@ -39,7 +39,7 @@ class getid3_id3v1 extends getid3_handler // If second-last byte of comment field is null and last byte of comment field is non-null // then this is ID3v1.1 and the comment field is 28 bytes long and the 30th byte is the track number - if (($id3v1tag{125} === "\x00") && ($id3v1tag{126} !== "\x00")) { + if (($id3v1tag[125] === "\x00") && ($id3v1tag[126] !== "\x00")) { $ParsedID3v1['track'] = ord(substr($ParsedID3v1['comment'], 29, 1)); $ParsedID3v1['comment'] = substr($ParsedID3v1['comment'], 0, 28); } diff --git a/vendor/lukasreschke/id3parser/src/getID3/Tags/getid3_id3v2.php b/vendor/lukasreschke/id3parser/src/getID3/Tags/getid3_id3v2.php index a767a5e06..c1e982137 100644 --- a/vendor/lukasreschke/id3parser/src/getID3/Tags/getid3_id3v2.php +++ b/vendor/lukasreschke/id3parser/src/getID3/Tags/getid3_id3v2.php @@ -252,7 +252,7 @@ class getid3_id3v2 extends getid3_handler $thisfile_id3v2['padding']['length'] = strlen($framedata); $thisfile_id3v2['padding']['valid'] = true; for ($i = 0; $i < $thisfile_id3v2['padding']['length']; $i++) { - if ($framedata{$i} != "\x00") { + if ($framedata[$i] != "\x00") { $thisfile_id3v2['padding']['valid'] = false; $thisfile_id3v2['padding']['errorpos'] = $thisfile_id3v2['padding']['start'] + $i; $info['warning'][] = 'Invalid ID3v2 padding found at offset '.$thisfile_id3v2['padding']['errorpos'].' (the remaining '.($thisfile_id3v2['padding']['length'] - $i).' bytes are considered invalid)'; @@ -314,7 +314,7 @@ class getid3_id3v2 extends getid3_handler $len = strlen($framedata); for ($i = 0; $i < $len; $i++) { - if ($framedata{$i} != "\x00") { + if ($framedata[$i]!= "\x00") { $thisfile_id3v2['padding']['valid'] = false; $thisfile_id3v2['padding']['errorpos'] = $thisfile_id3v2['padding']['start'] + $i; $info['warning'][] = 'Invalid ID3v2 padding found at offset '.$thisfile_id3v2['padding']['errorpos'].' (the remaining '.($thisfile_id3v2['padding']['length'] - $i).' bytes are considered invalid)'; @@ -648,7 +648,7 @@ class getid3_id3v2 extends getid3_handler //unset($parsedFrame['data']); do not unset, may be needed elsewhere, e.g. for replaygain - } elseif ($parsedFrame['frame_name']{0} == 'T') { // 4.2. T??[?] Text information frame + } elseif ($parsedFrame['frame_name'][0] == 'T') { // 4.2. T??[?] Text information frame // There may only be one text information frame of its kind in an tag. //
@@ -750,7 +750,7 @@ class getid3_id3v2 extends getid3_handler unset($parsedFrame['data']); - } elseif ($parsedFrame['frame_name']{0} == 'W') { // 4.3. W??? URL link frames + } elseif ($parsedFrame['frame_name'][0] == 'W') { // 4.3. W??? URL link frames // There may only be one URL link frame of its kind in a tag, // except when stated otherwise in the frame description //
Date: Wed, 26 May 2021 19:02:13 +0000 Subject: remove more legacy zot quirks --- Zotlabs/Daemon/Cron.php | 5 ---- Zotlabs/Daemon/Cron_daily.php | 2 -- Zotlabs/Lib/DReport.php | 3 +-- Zotlabs/Lib/Libzotdir.php | 18 ++++++--------- Zotlabs/Module/Dreport.php | 53 +++++++++++++++++++++---------------------- Zotlabs/Module/Import.php | 5 ++-- Zotlabs/Module/Locs.php | 10 ++++---- include/api_auth.php | 11 ++++----- include/channel.php | 11 ++++----- include/security.php | 3 +-- 10 files changed, 49 insertions(+), 72 deletions(-) diff --git a/Zotlabs/Daemon/Cron.php b/Zotlabs/Daemon/Cron.php index 5c0330806..29a8902b0 100644 --- a/Zotlabs/Daemon/Cron.php +++ b/Zotlabs/Daemon/Cron.php @@ -165,11 +165,6 @@ class Cron { } } - - // check if any connections transitioned to zot6 and upgrade the connections to zot6 at this hub if so. - require_once('include/connections.php'); - z6trans_connections(); - require_once('include/attach.php'); attach_upgrade(); diff --git a/Zotlabs/Daemon/Cron_daily.php b/Zotlabs/Daemon/Cron_daily.php index bebccca9d..d1b74a032 100644 --- a/Zotlabs/Daemon/Cron_daily.php +++ b/Zotlabs/Daemon/Cron_daily.php @@ -95,8 +95,6 @@ class Cron_daily { remove_obsolete_hublocs(); remove_duplicate_singleton_hublocs(); - z6_discover(); - $date = datetime_convert(); call_hooks('cron_daily', $date); diff --git a/Zotlabs/Lib/DReport.php b/Zotlabs/Lib/DReport.php index 7515d3292..2263529b2 100644 --- a/Zotlabs/Lib/DReport.php +++ b/Zotlabs/Lib/DReport.php @@ -87,8 +87,7 @@ class DReport { // Is the sender one of our channels? - $c = q("select channel_id from channel where channel_hash = '%s' or channel_portable_id = '%s' limit 1", - dbesc($dr['sender']), + $c = q("select channel_id from channel where channel_hash = '%s' limit 1", dbesc($dr['sender']) ); diff --git a/Zotlabs/Lib/Libzotdir.php b/Zotlabs/Lib/Libzotdir.php index 41c0a54e9..e095502dd 100644 --- a/Zotlabs/Lib/Libzotdir.php +++ b/Zotlabs/Lib/Libzotdir.php @@ -345,7 +345,7 @@ class Libzotdir { logger('local_dir_update: uid: ' . $uid, LOGGER_DEBUG); - $p = q("select channel.channel_hash, channel_address, channel_timezone, channel_portable_id, profile.* from profile left join channel on channel_id = uid where uid = %d and is_default = 1", + $p = q("select channel.channel_hash, channel_address, channel_timezone, profile.* from profile left join channel on channel_id = uid where uid = %d and is_default = 1", intval($uid) ); @@ -354,7 +354,6 @@ class Libzotdir { if ($p) { $hash = $p[0]['channel_hash']; - $legacy_hash = $p[0]['channel_portable_id']; $profile['description'] = $p[0]['pdesc']; $profile['birthday'] = $p[0]['dob']; @@ -393,10 +392,9 @@ class Libzotdir { ); if(intval($r[0]['xchan_hidden']) != $hidden) { - $r = q("update xchan set xchan_hidden = %d where xchan_hash in ('%s', '%s')", + $r = q("update xchan set xchan_hidden = %d where xchan_hash = '%s'", intval($hidden), - dbesc($hash), - dbesc($legacy_hash) + dbesc($hash) ); } @@ -410,13 +408,11 @@ class Libzotdir { } else { // they may have made it private - q("delete from xprof where xprof_hash in ('%s', '%s')", - dbesc($hash), - dbesc($legacy_hash) + q("delete from xprof where xprof_hash = '%s'", + dbesc($hash) ); - q("delete from xtag where xtag_hash in ('%s', '%s')", - dbesc($hash), - dbesc($legacy_hash) + q("delete from xtag where xtag_hash = '%s'", + dbesc($hash) ); } diff --git a/Zotlabs/Module/Dreport.php b/Zotlabs/Module/Dreport.php index 0fc36dc29..2c087cdb5 100644 --- a/Zotlabs/Module/Dreport.php +++ b/Zotlabs/Module/Dreport.php @@ -5,16 +5,16 @@ namespace Zotlabs\Module; class Dreport extends \Zotlabs\Web\Controller { function get() { - + if(! local_channel()) { notice( t('Permission denied') . EOL); return; } - + $table = 'item'; - + $channel = \App::get_channel(); - + $mid = ((argc() > 1) ? argv(1) : ''); $encoded_mid = ''; @@ -31,7 +31,7 @@ class Dreport extends \Zotlabs\Web\Controller { $mid = @base64url_decode(substr($mid,4)); } - if($mid) { + 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 )) ", dbesc($mid), intval($channel['channel_id']), @@ -53,13 +53,13 @@ class Dreport extends \Zotlabs\Web\Controller { $mid = @base64url_decode(substr($mid,4)); } - - + + if(! $mid) { notice( t('Invalid message') . EOL); return; } - + switch($table) { case 'item': $i = q("select id from item where mid = '%s' and ( author_xchan = '%s' or ( owner_xchan = '%s' and item_wall = 1 )) ", @@ -77,30 +77,29 @@ class Dreport extends \Zotlabs\Web\Controller { default: break; } - + if(! $i) { notice( t('Permission denied') . EOL); return; } - - $r = q("select * from dreport where (dreport_xchan = '%s' or dreport_xchan = '%s') and dreport_mid = '%s'", - dbesc($channel['channel_hash']), - dbesc($channel['channel_portable_id']), + + $r = q("select * from dreport where dreport_xchan = '%s' and dreport_mid = '%s'", + dbesc($channel['channel_hash']) dbesc($mid) ); - + if(! $r) { notice( t('no results') . EOL); // return; } - + for($x = 0; $x < count($r); $x++ ) { - + // This has two purposes: 1. make the delivery report strings translateable, and // 2. assign an ordering to item delivery results so we can group them and provide // a readable report with more interesting events listed toward the top and lesser // interesting items towards the bottom - + switch($r[$x]['dreport_result']) { case 'channel sync processed': $r[$x]['gravity'] = 0; @@ -146,13 +145,13 @@ class Dreport extends \Zotlabs\Web\Controller { break; } } - + usort($r,'self::dreport_gravity_sort'); $entries = array(); foreach($r as $rr) { - $entries[] = [ - 'name' => escape_tags($rr['dreport_name'] ?: $rr['dreport_recip']), + $entries[] = [ + 'name' => escape_tags($rr['dreport_name'] ?: $rr['dreport_recip']), 'result' => escape_tags($rr['dreport_result']), 'time' => escape_tags(datetime_convert('UTC',date_default_timezone_get(),$rr['dreport_time'])) ]; @@ -167,14 +166,14 @@ class Dreport extends \Zotlabs\Web\Controller { '$push' => t('Redeliver'), '$entries' => $entries )); - - + + return $o; - - - + + + } - + private static function dreport_gravity_sort($a,$b) { if($a['gravity'] == $b['gravity']) { if($a['dreport_name'] === $b['dreport_name']) @@ -183,5 +182,5 @@ class Dreport extends \Zotlabs\Web\Controller { } return (($a['gravity'] > $b['gravity']) ? 1 : (-1)); } - + } diff --git a/Zotlabs/Module/Import.php b/Zotlabs/Module/Import.php index 76d4fa733..bfd248a0f 100644 --- a/Zotlabs/Module/Import.php +++ b/Zotlabs/Module/Import.php @@ -253,9 +253,8 @@ class Import extends \Zotlabs\Web\Controller { // replace any existing xchan we may have on this site if we're seizing control - $r = q("delete from xchan where ( xchan_hash = '%s' or xchan_hash = '%s' ) ", - dbesc($channel['channel_hash']), - dbesc($channel['channel_portable_id']) + $r = q("delete from xchan where xchan_hash = '%s'", + dbesc($channel['channel_hash']) ); $r = xchan_store_lowlevel( diff --git a/Zotlabs/Module/Locs.php b/Zotlabs/Module/Locs.php index 2dd359c95..59b872982 100644 --- a/Zotlabs/Module/Locs.php +++ b/Zotlabs/Module/Locs.php @@ -28,9 +28,8 @@ class Locs extends Controller { return; } - q("UPDATE hubloc SET hubloc_primary = 0 WHERE hubloc_primary = 1 AND (hubloc_hash = '%s' OR hubloc_hash = '%s')", - dbesc($channel['channel_hash']), - dbesc($channel['channel_portable_id']) + q("UPDATE hubloc SET hubloc_primary = 0 WHERE hubloc_primary = 1 AND hubloc_hash = '%s'", + dbesc($channel['channel_hash']) ); q("UPDATE hubloc SET hubloc_primary = 1 WHERE hubloc_id = %d AND hubloc_hash = '%s'", @@ -81,10 +80,9 @@ class Locs extends Controller { } } - q("UPDATE hubloc SET hubloc_deleted = 1 WHERE hubloc_id_url = '%s' AND (hubloc_hash = '%s' OR hubloc_hash = '%s')", + q("UPDATE hubloc SET hubloc_deleted = 1 WHERE hubloc_id_url = '%s' AND hubloc_hash = '%s'", dbesc($r[0]['hubloc_id_url']), - dbesc($channel['channel_hash']), - dbesc($channel['channel_portable_id']) + dbesc($channel['channel_hash']) ); Master::Summon( [ 'Notifier', 'refresh_all', $channel['channel_id'] ] ); return; diff --git a/include/api_auth.php b/include/api_auth.php index 9235bd28c..4928e6a85 100644 --- a/include/api_auth.php +++ b/include/api_auth.php @@ -27,7 +27,7 @@ function api_login(&$a){ if ($server->verifyResourceRequest($request)) { $token = $server->getAccessTokenData($request); $uid = $token['user_id']; - $r = q("SELECT * FROM channel WHERE channel_id = %d LIMIT 1", + $r = q("SELECT * FROM channel WHERE channel_id = %d LIMIT 1", intval($uid) ); if (count($r)) { @@ -41,7 +41,7 @@ function api_login(&$a){ $_SESSION['uid'] = $record['channel_id']; $_SESSION['addr'] = $_SERVER['REMOTE_ADDR']; - $x = q("select * from account where account_id = %d LIMIT 1", + $x = q("select * from account where account_id = %d LIMIT 1", intval($record['channel_account_id']) ); if ($x) { @@ -102,9 +102,6 @@ function api_login(&$a){ ); if($r) { $c = channelx_by_hash($r[0]['hubloc_hash']); - if (! $c) { - $c = channelx_by_portid($r[0]['hubloc_hash']); - } if($c) { $a = q("select * from account where account_id = %d limit 1", intval($c['channel_account_id']) @@ -116,7 +113,7 @@ function api_login(&$a){ } } - if($record) { + if($record) { $verified = \Zotlabs\Web\HTTPSig::verify('',$record['channel']['channel_pubkey']); if(! ($verified && $verified['header_signed'] && $verified['header_valid'])) { $record = null; @@ -164,4 +161,4 @@ function retry_basic_auth($method = 'Basic') { header('HTTP/1.0 401 Unauthorized'); echo('This api requires login'); killme(); -} \ No newline at end of file +} diff --git a/include/channel.php b/include/channel.php index 085aa5ea5..f051ded58 100644 --- a/include/channel.php +++ b/include/channel.php @@ -2794,15 +2794,12 @@ function channel_remove($channel_id, $local = true, $unset_session = false) { logger('deleting hublocs',LOGGER_DEBUG); - $r = q("UPDATE hubloc SET hubloc_deleted = 1 WHERE hubloc_hash = '%s' OR hubloc_hash = '%s'", - dbesc($channel['channel_hash']), - dbesc($channel['channel_portable_id']) - + $r = q("UPDATE hubloc SET hubloc_deleted = 1 WHERE hubloc_hash = '%s'", + dbesc($channel['channel_hash']) ); - $r = q("UPDATE xchan SET xchan_deleted = 1 WHERE xchan_hash = '%s' OR xchan_hash = '%s'", - dbesc($channel['channel_hash']), - dbesc($channel['channel_portable_id']) + $r = q("UPDATE xchan SET xchan_deleted = 1 WHERE xchan_hash = '%s'", + dbesc($channel['channel_hash']) ); Master::Summon(array('Notifier','purge_all',$channel_id)); diff --git a/include/security.php b/include/security.php index f433f8094..b6c0f1511 100644 --- a/include/security.php +++ b/include/security.php @@ -681,12 +681,11 @@ function get_security_ids($channel_id, $ob_hash) { ]; if ($channel_id) { - $ch = q("select channel_hash, channel_portable_id from channel where channel_id = %d", + $ch = q("select channel_hash from channel where channel_id = %d", intval($channel_id) ); if ($ch) { $ret['channel_id'][] = $ch[0]['channel_hash']; - $ret['channel_id'][] = $ch[0]['channel_portable_id']; } } -- cgit v1.2.3 From 4e4bffe5c5e04e40a0a4c9bc7190704f404225e8 Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 27 May 2021 07:52:18 +0000 Subject: deprecate queue_deliver() --- Zotlabs/Daemon/Deliver.php | 4 +- Zotlabs/Daemon/Queue.php | 17 ++++----- Zotlabs/Lib/Queue.php | 92 ++++++++++++---------------------------------- 3 files changed, 34 insertions(+), 79 deletions(-) diff --git a/Zotlabs/Daemon/Deliver.php b/Zotlabs/Daemon/Deliver.php index f8149ee69..400ef697b 100644 --- a/Zotlabs/Daemon/Deliver.php +++ b/Zotlabs/Daemon/Deliver.php @@ -2,7 +2,7 @@ namespace Zotlabs\Daemon; -require_once('include/queue_fn.php'); +use Zotlabs\Lib\Queue; class Deliver { @@ -23,7 +23,7 @@ class Deliver { ); if ($r) { - queue_deliver($r[0], true); + Queue::deliver($r[0], true); } } diff --git a/Zotlabs/Daemon/Queue.php b/Zotlabs/Daemon/Queue.php index e1f4b73de..72d857bbc 100644 --- a/Zotlabs/Daemon/Queue.php +++ b/Zotlabs/Daemon/Queue.php @@ -2,8 +2,7 @@ namespace Zotlabs\Daemon; -require_once('include/queue_fn.php'); -require_once('include/zot.php'); +use Zotlabs\Lib\Queue; class Queue { @@ -48,17 +47,17 @@ class Queue { else { // For the first 12 hours we'll try to deliver every 15 minutes - // After that, we'll only attempt delivery once per hour. - // This currently only handles the default queue drivers ('zot' or '') which we will group by posturl + // After that, we'll only attempt delivery once per hour. + // This currently only handles the default queue drivers ('zot' or '') which we will group by posturl // so that we don't start off a thousand deliveries for a couple of dead hubs. // The zot driver will deliver everything destined for a single hub once contact is made (*if* contact is made). // Other drivers will have to do something different here and may need their own query. - // Note: this requires some tweaking as new posts to long dead hubs once a day will keep them in the + // Note: this requires some tweaking as new posts to long dead hubs once a day will keep them in the // "every 15 minutes" category. We probably need to prioritise them when inserted into the queue // or just prior to this query based on recent and long-term delivery history. If we have good reason to believe - // the site is permanently down, there's no reason to attempt delivery at all, or at most not more than once - // or twice a day. + // the site is permanently down, there's no reason to attempt delivery at all, or at most not more than once + // or twice a day. $sqlrandfunc = db_getfunc('rand'); @@ -67,7 +66,7 @@ class Queue { ); while ($r) { foreach ($r as $rv) { - queue_deliver($rv); + Queue::deliver($rv); } $r = q("SELECT *,$sqlrandfunc as rn FROM outq WHERE outq_delivered = 0 and outq_scheduled < %s order by rn limit 1", db_utcnow() @@ -78,7 +77,7 @@ class Queue { return; foreach ($r as $rv) { - queue_deliver($rv); + Queue::deliver($rv); } } } diff --git a/Zotlabs/Lib/Queue.php b/Zotlabs/Lib/Queue.php index 373a7d304..35eb1e264 100644 --- a/Zotlabs/Lib/Queue.php +++ b/Zotlabs/Lib/Queue.php @@ -2,6 +2,9 @@ namespace Zotlabs\Lib; +use Zotlabs\Zot6\Receiver; +use Zotlabs\Zot6\Zot6Handler; + class Queue { static function update($id, $add_priority = 0) { @@ -28,19 +31,19 @@ class Queue { $might_be_down = ((datetime_convert('UTC','UTC',$y[0]['earliest']) < datetime_convert('UTC','UTC','now - 2 days')) ? true : false); - // Set all other records for this destination way into the future. + // Set all other records for this destination way into the future. // The queue delivers by destination. We'll keep one queue item for // this destination (this one) with a shorter delivery. If we succeed // once, we'll try to deliver everything for that destination. - // The delivery will be set to at most once per hour, and if the + // The delivery will be set to at most once per hour, and if the // queue item is less than 12 hours old, we'll schedule for fifteen - // minutes. + // minutes. q("UPDATE outq SET outq_scheduled = '%s' WHERE outq_posturl = '%s'", dbesc(datetime_convert('UTC','UTC','now + 5 days')), dbesc($x[0]['outq_posturl']) ); - + $since = datetime_convert('UTC','UTC',$x[0]['outq_created']); if(($might_be_down) || ($since < datetime_convert('UTC','UTC','now - 12 hour'))) { @@ -50,9 +53,9 @@ class Queue { $next = datetime_convert('UTC','UTC','now + ' . intval($add_priority) . ' minutes'); } - q("UPDATE outq SET outq_updated = '%s', - outq_priority = outq_priority + %d, - outq_scheduled = '%s' + q("UPDATE outq SET outq_updated = '%s', + outq_priority = outq_priority + %d, + outq_scheduled = '%s' WHERE outq_hash = '%s'", dbesc(datetime_convert()), @@ -66,7 +69,7 @@ class Queue { static function remove($id,$channel_id = 0) { logger('queue: remove queue item ' . $id,LOGGER_DEBUG); $sql_extra = (($channel_id) ? " and outq_channel = " . intval($channel_id) . " " : ''); - + q("DELETE FROM outq WHERE outq_hash = '%s' $sql_extra", dbesc($id) ); @@ -75,7 +78,7 @@ class Queue { static function remove_by_posturl($posturl) { logger('queue: remove queue posturl ' . $posturl,LOGGER_DEBUG); - + q("DELETE FROM outq WHERE outq_posturl = '%s' ", dbesc($posturl) ); @@ -88,7 +91,7 @@ class Queue { $sql_extra = (($channel['channel_id']) ? " and outq_channel = " . intval($channel['channel_id']) . " " : ''); // Set the next scheduled run date so far in the future that it will be expired - // long before it ever makes it back into the delivery chain. + // long before it ever makes it back into the delivery chain. q("update outq set outq_delivered = 1, outq_updated = '%s', outq_scheduled = '%s' where outq_hash = '%s' $sql_extra ", dbesc(datetime_convert()), @@ -108,7 +111,7 @@ class Queue { } $x = q("insert into outq ( outq_hash, outq_account, outq_channel, outq_driver, outq_posturl, outq_async, outq_priority, - outq_created, outq_updated, outq_scheduled, outq_notify, outq_msg ) + outq_created, outq_updated, outq_scheduled, outq_notify, outq_msg ) values ( '%s', %d, %d, '%s', '%s', %d, %d, '%s', '%s', '%s', '%s', '%s' )", dbesc($arr['hash']), intval($arr['account_id']), @@ -133,7 +136,7 @@ class Queue { $base = null; $h = parse_url($outq['outq_posturl']); - if($h !== false) + if($h !== false) $base = $h['scheme'] . '://' . $h['host'] . (isset($h['port']) ? ':' . $h['port'] : ''); if(($base) && ($base !== z_root()) && ($immediate)) { @@ -147,7 +150,7 @@ class Queue { return; } if($y[0]['site_update'] < datetime_convert('UTC','UTC','now - 1 month')) { - self::update($outq['outq_hash'],10); + self::update($outq['outq_hash'], 10); logger('immediate delivery deferred for site ' . $base); return; } @@ -158,12 +161,12 @@ class Queue { // your site has existed. Since we don't know for sure what these sites are, // call them unknown - site_store_lowlevel( + site_store_lowlevel( [ 'site_url' => $base, 'site_update' => datetime_convert(), 'site_dead' => 0, - 'site_type' => intval(($outq['outq_driver'] === 'post') ? SITE_TYPE_NOTZOT : SITE_TYPE_UNKNOWN), + 'site_type' => SITE_TYPE_UNKNOWN, 'site_crypto' => '' ] ); @@ -171,65 +174,17 @@ class Queue { } $arr = array('outq' => $outq, 'base' => $base, 'handled' => false, 'immediate' => $immediate); - call_hooks('queue_deliver',$arr); + call_hooks('queue_deliver', $arr); if($arr['handled']) return; - // "post" queue driver - used for diaspora and friendica-over-diaspora communications. - - if($outq['outq_driver'] === 'post') { - $result = z_post_url($outq['outq_posturl'],$outq['outq_msg']); - if($result['success'] && $result['return_code'] < 300) { - logger('deliver: queue post success to ' . $outq['outq_posturl'], LOGGER_DEBUG); - if($base) { - q("update site set site_update = '%s', site_dead = 0 where site_url = '%s' ", - dbesc(datetime_convert()), - dbesc($base) - ); - } - q("update dreport set dreport_result = '%s', dreport_time = '%s' where dreport_queue = '%s'", - dbesc('accepted for delivery'), - dbesc(datetime_convert()), - dbesc($outq['outq_hash']) - ); - self::remove($outq['outq_hash']); - - // server is responding - see if anything else is going to this destination and is piled up - // and try to send some more. We're relying on the fact that do_delivery() results in an - // immediate delivery otherwise we could get into a queue loop. - - if(! $immediate) { - $x = q("select outq_hash from outq where outq_posturl = '%s' and outq_delivered = 0", - dbesc($outq['outq_posturl']) - ); - - $piled_up = array(); - if($x) { - foreach($x as $xx) { - $piled_up[] = $xx['outq_hash']; - } - } - if($piled_up) { - // call do_delivery() with the force flag - do_delivery($piled_up, true); - } - } - } - else { - logger('deliver: queue post returned ' . $result['return_code'] - . ' from ' . $outq['outq_posturl'],LOGGER_DEBUG); - self::update($outq['outq_hash'],10); - } - return; - } - // normal zot delivery logger('deliver: dest: ' . $outq['outq_posturl'], LOGGER_DEBUG); if($outq['outq_posturl'] === z_root() . '/zot') { // local delivery - $zot = new \Zotlabs\Zot6\Receiver(new \Zotlabs\Zot6\Zot6Handler(),$outq['outq_notify']); + $zot = new Receiver(new Zot6Handler(), $outq['outq_notify']); $result = $zot->run(); logger('returned_json: ' . json_encode($result,JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES), LOGGER_DATA); logger('deliver: local zot delivery succeeded to ' . $outq['outq_posturl']); @@ -246,7 +201,8 @@ class Queue { $host_crypto = null; if($channel && $base) { - $h = q("select hubloc_sitekey, site_crypto from hubloc left join site on hubloc_url = site_url where site_url = '%s' and hubloc_sitekey != '' order by hubloc_id desc limit 1", + $h = q("SELECT hubloc_sitekey, site_crypto FROM hubloc LEFT JOIN site ON hubloc_url = site_url + WHERE site_url = '%s' AND hubloc_network = 'zot6' ORDER BY hubloc_id DESC LIMIT 1", dbesc($base) ); if($h) { @@ -256,7 +212,7 @@ class Queue { $msg = $outq['outq_notify']; - $result = Libzot::zot($outq['outq_posturl'],$msg,$channel,$host_crypto); + $result = Libzot::zot($outq['outq_posturl'], $msg, $channel, $host_crypto); if($result['success']) { logger('deliver: remote zot delivery succeeded to ' . $outq['outq_posturl']); @@ -265,7 +221,7 @@ class Queue { else { logger('deliver: remote zot delivery failed to ' . $outq['outq_posturl']); logger('deliver: remote zot delivery fail data: ' . print_r($result,true), LOGGER_DATA); - self::update($outq['outq_hash'],10); + self::update($outq['outq_hash'], 10); } } return; -- cgit v1.2.3 From 4099549609b6ca2e6ee3c95d79449426ed3a77cb Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 27 May 2021 07:58:56 +0000 Subject: remove deprecated rating code --- Zotlabs/Daemon/Ratenotif.php | 126 ----------------------------- Zotlabs/Module/Connedit.php | 3 - Zotlabs/Module/Prate.php | 107 ------------------------ Zotlabs/Module/Rate.php | 174 ---------------------------------------- Zotlabs/Module/Ratings.php | 109 ------------------------- Zotlabs/Module/Ratingsearch.php | 78 ------------------ 6 files changed, 597 deletions(-) delete mode 100644 Zotlabs/Daemon/Ratenotif.php delete mode 100644 Zotlabs/Module/Prate.php delete mode 100644 Zotlabs/Module/Rate.php delete mode 100644 Zotlabs/Module/Ratings.php delete mode 100644 Zotlabs/Module/Ratingsearch.php diff --git a/Zotlabs/Daemon/Ratenotif.php b/Zotlabs/Daemon/Ratenotif.php deleted file mode 100644 index 8afde2c4c..000000000 --- a/Zotlabs/Daemon/Ratenotif.php +++ /dev/null @@ -1,126 +0,0 @@ - 'rating', - 'encoding' => 'zot', - 'target' => $r[0]['xlink_link'], - 'rating' => intval($r[0]['xlink_rating']), - 'rating_text' => $r[0]['xlink_rating_text'], - 'signature' => $r[0]['xlink_sig'], - 'edited' => $r[0]['xlink_updated'] - ); - } - - $channel = channelx_by_hash($r[0]['xlink_xchan']); - if(! $channel) { - logger('no channel'); - return; - } - - - $primary = get_directory_primary(); - - if(! $primary) - return; - - - $interval = ((get_config('system','delivery_interval') !== false) - ? intval(get_config('system','delivery_interval')) : 2 ); - - $deliveries_per_process = intval(get_config('system','delivery_batch_count')); - - if($deliveries_per_process <= 0) - $deliveries_per_process = 1; - - $deliver = array(); - - $x = z_fetch_url($primary . '/regdir'); - if($x['success']) { - $j = json_decode($x['body'],true); - if($j && $j['success'] && is_array($j['directories'])) { - - foreach($j['directories'] as $h) { - if($h == z_root()) - continue; - - $hash = random_string(); - $n = zot_build_packet($channel,'notify',null,null,'',$hash); - - queue_insert(array( - 'hash' => $hash, - 'account_id' => $channel['channel_account_id'], - 'channel_id' => $channel['channel_id'], - 'posturl' => $h . '/post', - 'notify' => $n, - 'msg' => json_encode($encoded_item) - )); - - - $x = q("select count(outq_hash) as total from outq where outq_delivered = 0"); - if(intval($x[0]['total']) > intval(get_config('system','force_queue_threshold',300))) { - logger('immediate delivery deferred.', LOGGER_DEBUG, LOG_INFO); - update_queue_item($hash); - continue; - } - - $deliver[] = $hash; - - if(count($deliver) >= $deliveries_per_process) { - Master::Summon(array('Deliver',$deliver)); - $deliver = array(); - if($interval) - @time_sleep_until(microtime(true) + (float) $interval); - } - } - - // catch any stragglers - - if(count($deliver)) { - Master::Summon(array('Deliver',$deliver)); - } - } - } - - logger('ratenotif: complete.'); - return; - - } -} diff --git a/Zotlabs/Module/Connedit.php b/Zotlabs/Module/Connedit.php index 61fe4a889..82cecd3e1 100644 --- a/Zotlabs/Module/Connedit.php +++ b/Zotlabs/Module/Connedit.php @@ -220,9 +220,6 @@ class Connedit extends Controller { if($z) $record = $z[0]['xlink_id']; } - if($record) { - Master::Summon(array('Ratenotif','rating',$record)); - } } if(($_REQUEST['pending']) && intval($orig_record[0]['abook_pending'])) { diff --git a/Zotlabs/Module/Prate.php b/Zotlabs/Module/Prate.php deleted file mode 100644 index 8b71657b8..000000000 --- a/Zotlabs/Module/Prate.php +++ /dev/null @@ -1,107 +0,0 @@ - $r[0]['xlink_rating'],'rating_text' => $r[0]['xlink_rating_text'])); - killme(); - } - - function post() { - - if(! local_channel()) - return; - - $channel = \App::get_channel(); - - $target = trim($_REQUEST['target']); - if(! $target) - return; - - if($target === $channel['channel_hash']) - return; - - $rating = intval($_POST['rating']); - if($rating < (-10)) - $rating = (-10); - if($rating > 10) - $rating = 10; - - $rating_text = trim(escape_tags($_REQUEST['rating_text'])); - - $signed = $target . '.' . $rating . '.' . $rating_text; - - $sig = base64url_encode(Crypto::sign($signed,$channel['channel_prvkey'])); - - - $z = q("select * from xlink where xlink_xchan = '%s' and xlink_link = '%s' and xlink_static = 1 limit 1", - dbesc($channel['channel_hash']), - dbesc($target) - ); - if($z) { - $record = $z[0]['xlink_id']; - $w = q("update xlink set xlink_rating = '%d', xlink_rating_text = '%s', xlink_sig = '%s', xlink_updated = '%s' - where xlink_id = %d", - intval($rating), - dbesc($rating_text), - dbesc($sig), - dbesc(datetime_convert()), - intval($record) - ); - } - else { - $w = q("insert into xlink ( xlink_xchan, xlink_link, xlink_rating, xlink_rating_text, xlink_sig, xlink_updated, xlink_static ) values ( '%s', '%s', %d, '%s', '%s', '%s', 1 ) ", - dbesc($channel['channel_hash']), - dbesc($target), - intval($rating), - dbesc($rating_text), - dbesc($sig), - dbesc(datetime_convert()) - ); - $z = q("select * from xlink where xlink_xchan = '%s' and xlink_link = '%s' and xlink_static = 1 limit 1", - dbesc($channel['channel_hash']), - dbesc($orig_record[0]['abook_xchan']) - ); - if($z) - $record = $z[0]['xlink_id']; - } - if($record) { - \Zotlabs\Daemon\Master::Summon(array('Ratenotif','rating',$record)); - } - - json_return_and_die(array('result' => true));; - } - - - - - - - - - - - - -} diff --git a/Zotlabs/Module/Rate.php b/Zotlabs/Module/Rate.php deleted file mode 100644 index d29c370fc..000000000 --- a/Zotlabs/Module/Rate.php +++ /dev/null @@ -1,174 +0,0 @@ - 10) - $rating = 10; - - $rating_text = trim(escape_tags($_REQUEST['rating_text'])); - - $signed = \App::$data['target'] . '.' . $rating . '.' . $rating_text; - - $sig = base64url_encode(Crypto::sign($signed,$channel['channel_prvkey'])); - - $z = q("select * from xlink where xlink_xchan = '%s' and xlink_link = '%s' and xlink_static = 1 limit 1", - dbesc($channel['channel_hash']), - dbesc(\App::$data['target']) - ); - - if($z) { - $record = $z[0]['xlink_id']; - $w = q("update xlink set xlink_rating = '%d', xlink_rating_text = '%s', xlink_sig = '%s', xlink_updated = '%s' - where xlink_id = %d", - intval($rating), - dbesc($rating_text), - dbesc($sig), - dbesc(datetime_convert()), - intval($record) - ); - } - else { - $w = q("insert into xlink ( xlink_xchan, xlink_link, xlink_rating, xlink_rating_text, xlink_sig, xlink_updated, xlink_static ) values ( '%s', '%s', %d, '%s', '%s', '%s', 1 ) ", - dbesc($channel['channel_hash']), - dbesc(\App::$data['target']), - intval($rating), - dbesc($rating_text), - dbesc($sig), - dbesc(datetime_convert()) - ); - $z = q("select * from xlink where xlink_xchan = '%s' and xlink_link = '%s' and xlink_static = 1 limit 1", - dbesc($channel['channel_hash']), - dbesc(\App::$data['target']) - ); - if($z) - $record = $z[0]['xlink_id']; - } - - if($record) { - \Zotlabs\Daemon\Master::Summon(array('Ratenotif','rating',$record)); - } - - } - - function get() { - - if(! local_channel()) { - notice( t('Permission denied.') . EOL); - return; - } - - // if(! \App::$data['target']) { - // notice( t('No recipients.') . EOL); - // return; - // } - - $rating_enabled = get_config('system','rating_enabled'); - if(! $rating_enabled) { - notice('Ratings are disabled on this site.'); - return; - } - - $channel = \App::get_channel(); - - $r = q("select * from xlink where xlink_xchan = '%s' and xlink_link = '%s' and xlink_static = 1", - dbesc($channel['channel_hash']), - dbesc(\App::$data['target']) - ); - if($r) { - \App::$data['xlink'] = $r[0]; - $rating_val = $r[0]['xlink_rating']; - $rating_text = $r[0]['xlink_rating_text']; - } - else { - $rating_val = 0; - $rating_text = ''; - } - - if($rating_enabled) { - $rating = replace_macros(get_markup_template('rating_slider.tpl'),array( - '$min' => -10, - '$val' => $rating_val - )); - } - else { - $rating = false; - } - - $o = replace_macros(get_markup_template('rating_form.tpl'),array( - '$header' => t('Rating'), - '$website' => t('Website:'), - '$site' => ((\App::$data['site']) ? '' . \App::$data['site']['site_url'] . '' : ''), - 'target' => \App::$data['target'], - '$tgt_name' => ((\App::$poi && \App::$poi['xchan_name']) ? \App::$poi['xchan_name'] : sprintf( t('Remote Channel [%s] (not yet known on this site)'), substr(\App::$data['target'],0,16))), - '$lbl_rating' => t('Rating (this information is public)'), - '$lbl_rating_txt' => t('Optionally explain your rating (this information is public)'), - '$rating_txt' => $rating_text, - '$rating' => $rating, - '$rating_val' => $rating_val, - '$slide' => $slide, - '$submit' => t('Submit') - )); - - return $o; - - } -} diff --git a/Zotlabs/Module/Ratings.php b/Zotlabs/Module/Ratings.php deleted file mode 100644 index 055b16ca3..000000000 --- a/Zotlabs/Module/Ratings.php +++ /dev/null @@ -1,109 +0,0 @@ - 1) - $hash = argv(1); - - if(! $hash) { - notice('Must supply a channel identififier.'); - return; - } - - $results = false; - - $x = z_fetch_url($url . '/ratingsearch/' . urlencode($hash)); - - - if($x['success']) - $results = json_decode($x['body'],true); - - - if((! $results) || (! $results['success'])) { - - notice('No results.'); - return; - } - - if(array_key_exists('xchan_hash',$results['target'])) - \App::$poi = $results['target']; - - $friends = array(); - $others = array(); - - if($results['ratings']) { - foreach($results['ratings'] as $n) { - if(is_array(\App::$contacts) && array_key_exists($n['xchan_hash'],\App::$contacts)) - $friends[] = $n; - else - $others[] = $n; - } - } - - \App::$data = array('target' => $results['target'], 'results' => array_merge($friends,$others)); - - if(! \App::$data['results']) { - notice( t('No ratings') . EOL); - } - - return; - } - - - - - - function get() { - - if(observer_prohibited()) { - notice( t('Public access denied.') . EOL); - return; - } - - $rating_enabled = get_config('system','rating_enabled'); - - if(! $rating_enabled) - return; - - $site_target = ((array_key_exists('target',\App::$data) && array_key_exists('site_url',\App::$data['target'])) ? - '' . \App::$data['target']['site_url'] . '' : ''); - - - $o = replace_macros(get_markup_template('prep.tpl'),array( - '$header' => t('Ratings'), - '$rating_lbl' => t('Rating: ' ), - '$website' => t('Website: '), - '$site' => $site_target, - '$rating_text_lbl' => t('Description: '), - '$raters' => \App::$data['results'] - )); - - return $o; - } - - -} diff --git a/Zotlabs/Module/Ratingsearch.php b/Zotlabs/Module/Ratingsearch.php deleted file mode 100644 index dcbfd6a9b..000000000 --- a/Zotlabs/Module/Ratingsearch.php +++ /dev/null @@ -1,78 +0,0 @@ - false); - - $dirmode = intval(get_config('system','directory_mode')); - - if($dirmode == DIRECTORY_MODE_NORMAL) { - $ret['message'] = 'This site is not a directory server.'; - json_return_and_die($ret); - } - - if(argc() > 1) - $hash = argv(1); - - if(! $hash) { - $ret['message'] = 'No channel identifier'; - json_return_and_die($ret); - } - - if(strpos($hash,'@')) { - $r = q("select * from hubloc where hubloc_addr = '%s' limit 1", - dbesc($hash) - ); - if($r) - $hash = $r[0]['hubloc_hash']; - } - - $p = q("select * from xchan where xchan_hash like '%s'", - dbesc($hash . '%') - ); - - if($p) - $target = $p[0]['xchan_hash']; - else { - $p = q("select * from site where site_url like '%s' and site_type = %d ", - dbesc('%' . $hash), - intval(SITE_TYPE_ZOT) - ); - if($p) { - $target = strtolower($hash); - } - else { - $ret['message'] = 'Rating target not found'; - json_return_and_die($ret); - } - } - - if($p) - $ret['target'] = $p[0]; - - $ret['success'] = true; - - $r = q("select * from xlink left join xchan on xlink_xchan = xchan_hash - where xlink_link = '%s' and xlink_rating != 0 and xlink_static = 1 - and xchan_hidden = 0 and xchan_orphan = 0 and xchan_deleted = 0 - order by xchan_name asc", - dbesc($target) - ); - - if($r) { - $ret['ratings'] = $r; - } - else - $ret['ratings'] = array(); - - json_return_and_die($ret); - - } - - -} -- cgit v1.2.3 From 7171d790f46e48f1cd7c1d7fe638610faab86b82 Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 27 May 2021 08:02:54 +0000 Subject: import Lib/Queue as LibQueue --- Zotlabs/Daemon/Queue.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Zotlabs/Daemon/Queue.php b/Zotlabs/Daemon/Queue.php index 72d857bbc..41aaf45ed 100644 --- a/Zotlabs/Daemon/Queue.php +++ b/Zotlabs/Daemon/Queue.php @@ -2,7 +2,7 @@ namespace Zotlabs\Daemon; -use Zotlabs\Lib\Queue; +use Zotlabs\Lib\Queue as LibQueue; class Queue { @@ -66,7 +66,7 @@ class Queue { ); while ($r) { foreach ($r as $rv) { - Queue::deliver($rv); + LibQueue::deliver($rv); } $r = q("SELECT *,$sqlrandfunc as rn FROM outq WHERE outq_delivered = 0 and outq_scheduled < %s order by rn limit 1", db_utcnow() @@ -77,7 +77,7 @@ class Queue { return; foreach ($r as $rv) { - Queue::deliver($rv); + LibQueue::deliver($rv); } } } -- cgit v1.2.3 From 43ef82aaaa78cf5b11325183d1a05af1e6888fd0 Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 27 May 2021 08:19:22 +0000 Subject: remove zfinger --- Zotlabs/Module/Well_known.php | 36 ++++++++++++++---------------------- Zotlabs/Module/Zfinger.php | 43 ------------------------------------------- 2 files changed, 14 insertions(+), 65 deletions(-) delete mode 100644 Zotlabs/Module/Zfinger.php diff --git a/Zotlabs/Module/Well_known.php b/Zotlabs/Module/Well_known.php index 0d7b222b8..af59b76e0 100644 --- a/Zotlabs/Module/Well_known.php +++ b/Zotlabs/Module/Well_known.php @@ -5,36 +5,28 @@ namespace Zotlabs\Module; class Well_known extends \Zotlabs\Web\Controller { function init(){ - + if(argc() > 1) { - + $arr = array('server' => $_SERVER, 'request' => $_REQUEST); call_hooks('well_known', $arr); - - + + if(! check_siteallowed($_SERVER['REMOTE_ADDR'])) { logger('well_known: site not allowed. ' . $_SERVER['REMOTE_ADDR']); killme(); } - + // from php.net re: REMOTE_HOST: - // Note: Your web server must be configured to create this variable. For example in Apache - // you'll need HostnameLookups On inside httpd.conf for it to exist. See also gethostbyaddr(). - + // Note: Your web server must be configured to create this variable. For example in Apache + // you'll need HostnameLookups On inside httpd.conf for it to exist. See also gethostbyaddr(). + if(get_config('system','siteallowed_remote_host') && (! check_siteallowed($_SERVER['REMOTE_HOST']))) { logger('well_known: site not allowed. ' . $_SERVER['REMOTE_HOST']); killme(); } - + switch(argv(1)) { - case 'zot-info': - \App::$argc -= 1; - array_shift(\App::$argv); - \App::$argv[0] = 'zfinger'; - $module = new \Zotlabs\Module\Zfinger(); - $module->init(); - break; - case 'webfinger': \App::$argc -= 1; array_shift(\App::$argv); @@ -42,7 +34,7 @@ class Well_known extends \Zotlabs\Web\Controller { $module = new \Zotlabs\Module\Wfinger(); $module->init(); break; - + case 'host-meta': \App::$argc -= 1; array_shift(\App::$argv); @@ -63,7 +55,7 @@ class Well_known extends \Zotlabs\Web\Controller { case 'dnt-policy.txt': echo file_get_contents('doc/dnt-policy.txt'); killme(); - + case 'caldav': case 'carddav': if ($_SERVER['REQUEST_METHOD'] == 'PROPFIND') { @@ -73,16 +65,16 @@ class Well_known extends \Zotlabs\Web\Controller { default: if(file_exists(\App::$cmd)) { - echo file_get_contents(\App::$cmd); + echo file_get_contents(\App::$cmd); killme(); } elseif(file_exists(\App::$cmd . '.php')) require_once(\App::$cmd . '.php'); break; - + } } - + http_status_exit(404); } } diff --git a/Zotlabs/Module/Zfinger.php b/Zotlabs/Module/Zfinger.php deleted file mode 100644 index ce7117ad8..000000000 --- a/Zotlabs/Module/Zfinger.php +++ /dev/null @@ -1,43 +0,0 @@ - $v) { - header($k . ': ' . $v); - } - } - - echo $ret; - killme(); - - } - -} -- cgit v1.2.3 From 9ea60ba79f41cbe82628292f9010be0c2a06ba05 Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 27 May 2021 08:27:33 +0000 Subject: deprecate make_xchan_hash() --- Zotlabs/Zot6/Zot6Handler.php | 2 +- include/channel.php | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/Zotlabs/Zot6/Zot6Handler.php b/Zotlabs/Zot6/Zot6Handler.php index bd321c4b1..d95009784 100644 --- a/Zotlabs/Zot6/Zot6Handler.php +++ b/Zotlabs/Zot6/Zot6Handler.php @@ -174,7 +174,7 @@ class Zot6Handler implements IHandler { $old = null; if(Libzot::verify($data['old_guid'],$data['old_guid_sig'],$data['old_key'])) { - $oldhash = make_xchan_hash($data['old_guid'],$data['old_key']); + $oldhash = Libzot::make_xchan_hash($data['old_guid'],$data['old_key']); $old = q("select * from xchan where xchan_hash = '%s' limit 1", dbesc($oldhash) ); diff --git a/include/channel.php b/include/channel.php index f051ded58..e02467125 100644 --- a/include/channel.php +++ b/include/channel.php @@ -235,10 +235,6 @@ function create_identity($arr) { $guid = Libzot::new_uid($nick); $key = Crypto::new_keypair(4096); - // legacy zot - $zsig = base64url_encode(Crypto::sign($guid,$key['prvkey'])); - $zhash = make_xchan_hash($guid,$zsig); - // zot6 $sig = Libzot::sign($guid,$key['prvkey']); $hash = Libzot::make_xchan_hash($guid,$key['pubkey']); -- cgit v1.2.3 From 0a09f507fc6e1ad10f7bbc7097e22e9249bdcefa Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 27 May 2021 08:30:00 +0000 Subject: remove zping --- Zotlabs/Module/Zping.php | 33 --------------------------------- 1 file changed, 33 deletions(-) delete mode 100644 Zotlabs/Module/Zping.php diff --git a/Zotlabs/Module/Zping.php b/Zotlabs/Module/Zping.php deleted file mode 100644 index d6128fa66..000000000 --- a/Zotlabs/Module/Zping.php +++ /dev/null @@ -1,33 +0,0 @@ - Date: Thu, 27 May 2021 08:39:23 +0000 Subject: deprecate import_xchan() --- Zotlabs/Module/Probe.php | 60 --------- include/dir_fns.php | 25 +--- include/follow.php | 325 ----------------------------------------------- 3 files changed, 1 insertion(+), 409 deletions(-) delete mode 100644 Zotlabs/Module/Probe.php delete mode 100644 include/follow.php diff --git a/Zotlabs/Module/Probe.php b/Zotlabs/Module/Probe.php deleted file mode 100644 index 3bc4dac72..000000000 --- a/Zotlabs/Module/Probe.php +++ /dev/null @@ -1,60 +0,0 @@ -' . t('Remote Diagnostics App') . ' (' . t('Not Installed') . '):
'; - $o .= t('Perform diagnostics on remote channels'); - return $o; - } - } - - nav_set_selected('Remote Diagnostics'); - - $o .= '

Remote Diagnostics

'; - - $o .= '
'; - $o .= 'Lookup address: '; - $o .= '
'; - - $o .= '

'; - - if(x($_GET,'addr')) { - $channel = App::get_channel(); - $addr = trim($_GET['addr']); - $do_import = ((intval($_GET['import']) && is_site_admin()) ? true : false); - - $j = \Zotlabs\Zot\Finger::run($addr,$channel,false); - - $o .= '
';
-			if(! $j['success']) {
-				$o .= "https connection failed. Trying again with auto failover to http.\r\n\r\n";
-				$j = \Zotlabs\Zot\Finger::run($addr,$channel,true);
-				if(! $j['success']) {
-					return $o;
-				}
-			}
-			if($do_import && $j)
-				$x = import_xchan($j);
-			if($j && $j['permissions'] && $j['permissions']['iv'])
-				$j['permissions'] = json_decode(Crypto::unencapsulate($j['permissions'],$channel['channel_prvkey']),true);
-			$o .= str_replace("\n",'
',print_r($j,true)); - $o .= '
'; - } - return $o; - } - -} diff --git a/include/dir_fns.php b/include/dir_fns.php index 8326415ed..84b0e6d93 100644 --- a/include/dir_fns.php +++ b/include/dir_fns.php @@ -330,24 +330,12 @@ function update_directory_entry($ud) { if ($ud['ud_addr'] && (! ($ud['ud_flags'] & UPDATE_FLAGS_DELETED))) { $success = false; - - // directory migration phase 1 (Macgirvin - 29-JUNE-2019) - // fetch zot6 info (if available) as well as historical zot info (if available) - // Once this has been running for > 1 month on the primary directory we can deprecate the historical info and - // modify the directory search to only return zot6 entries, and also modify this function - // to *only* fetch the zot6 entries. - // Otherwise we'll be showing duplicates or have a mostly empty directory for a good chunk of - // the transition period. Directory server load will likely increase "moderately" during this transition. - // The one month counter begins when the primary directory has upgraded to a release which uses this code. - // Hubzilla channels running traditional zot which have not upgraded can or will be dropped from the directory or - // "not found" at the end of the transition period as the directory will only serve zot6 entries at that time. - $uri = Webfinger::zot_url($ud['ud_addr']); + if($uri) { $record = Zotfinger::exec($uri); // Check the HTTP signature - $hsig = $record['signature']; if($hsig && $hsig['signer'] === $uri && $hsig['header_valid'] === true && $hsig['content_valid'] === true) { $x = Libzot::import_xchan($record['data'], 0, $ud); @@ -356,17 +344,6 @@ function update_directory_entry($ud) { } } } - $x = \Zotlabs\Zot\Finger::run($ud['ud_addr'], ''); - if ($x['success']) { - import_xchan($x, 0, $ud); - $success = true; - } - if (! $success) { - q("update updates set ud_last = '%s' where ud_addr = '%s'", - dbesc(datetime_convert()), - dbesc($ud['ud_addr']) - ); - } } } diff --git a/include/follow.php b/include/follow.php deleted file mode 100644 index 64ae8f7f1..000000000 --- a/include/follow.php +++ /dev/null @@ -1,325 +0,0 @@ - false, 'message' => '' ]; - - $my_perms = false; - $is_zot = false; - $protocol = ''; - - - if(substr($url,0,1) === '[') { - $x = strpos($url,']'); - if($x) { - $protocol = substr($url,1,$x-1); - $url = substr($url,$x+1); - } - } - - $is_http = ((strpos($url,'://') !== false) ? true : false); - - if($is_http && substr($url,-1,1) === '/') - $url = substr($url,0,-1); - - if(! allowed_url($url)) { - $result['message'] = t('Channel is blocked on this site.'); - return $result; - } - - if(! $url) { - $result['message'] = t('Channel location missing.'); - return $result; - } - - - // check service class limits - - $r = q("select count(*) as total from abook where abook_channel = %d and abook_self = 0 ", - intval($uid) - ); - if($r) - $total_channels = $r[0]['total']; - - if(! service_class_allows($uid,'total_channels',$total_channels)) { - $result['message'] = upgrade_message(); - return $result; - } - - - $arr = array('url' => $url, 'protocol', 'channel' => array()); - - call_hooks('follow_init', $arr); - - if($arr['channel']['success']) - $ret = $arr['channel']; - elseif((! $is_http) && ((! $protocol) || (strtolower($protocol) === 'zot'))) - $ret = Zotlabs\Zot\Finger::run($url,$channel); - - if($ret && is_array($ret) && $ret['success']) { - $is_zot = true; - $j = $ret; - } - - $p = \Zotlabs\Access\Permissions::connect_perms($uid); - $my_perms = $p['perms']; - - if($is_zot && $j) { - - logger('follow: ' . $url . ' ' . print_r($j,true), LOGGER_DEBUG); - - - if(! ($j['success'] && $j['guid'])) { - $result['message'] = t('Response from remote channel was incomplete.'); - logger('mod_follow: ' . $result['message']); - return $result; - } - - // Premium channel, set confirm before callback to avoid recursion - - if(array_key_exists('connect_url',$j) && (! $confirm)) { - if($interactive) { - goaway(zid($j['connect_url'])); - } - else { - $result['message'] = t('Premium channel - please visit:') . ' ' . zid($j['connect_url']); - logger('mod_follow: ' . $result['message']); - return $result; - } - } - - - - // do we have an xchan and hubloc? - // If not, create them. - - $x = import_xchan($j); - - if(array_key_exists('deleted',$j) && intval($j['deleted'])) { - $result['message'] = t('Channel was deleted and no longer exists.'); - return $result; - } - - if(! $x['success']) - return $x; - - $xchan_hash = $x['hash']; - - if( array_key_exists('permissions',$j) && array_key_exists('data',$j['permissions'])) { - $permissions = Crypto::unencapsulate(array( - 'data' => $j['permissions']['data'], - 'alg' => $j['permissions']['alg'], - 'key' => $j['permissions']['key'], - 'iv' => $j['permissions']['iv']), - $channel['channel_prvkey']); - if($permissions) - $permissions = json_decode($permissions,true); - logger('decrypted permissions: ' . print_r($permissions,true), LOGGER_DATA); - } - else - $permissions = $j['permissions']; - - if(is_array($permissions) && $permissions) { - foreach($permissions as $k => $v) { - set_abconfig($channel['channel_uid'],$xchan_hash,'their_perms',$k,intval($v)); - } - } - } - else { - - $xchan_hash = ''; - $sql_options = (($protocol) ? " and xchan_network = '" . dbesc($protocol) . "' " : ''); - - - $r = q("select * from xchan where (xchan_addr = '%s' or xchan_url = '%s') $sql_options ", - dbesc($url), - dbesc($url) - ); - - if(! $r) { - - // attempt network auto-discovery - - $wf = discover_by_webbie($url,$protocol); - - if((! $wf) && ($is_http)) { - - // try RSS discovery - - $feeds = get_config('system','feed_contacts'); - - if(($feeds) && ($protocol === '' || $protocol === 'feed' || $protocol === 'rss')) { - $d = discover_by_url($url); - } - else { - $result['message'] = t('Remote channel or protocol unavailable.'); - return $result; - } - } - - if($wf || $d) { - $r = q("select * from xchan where xchan_hash = '%s' or xchan_url = '%s'", - dbesc(($wf) ? $wf : $url), - dbesc($url) - ); - } - } - - $xchan = zot_record_preferred($r,'xchan_network'); - - // if discovery was a success we should have an xchan record in $r - - if($xchan) { - $xchan_hash = $xchan['xchan_hash']; - $their_perms = 0; - } - } - - if(! $xchan_hash) { - $result['message'] = t('Channel discovery failed.'); - logger('follow: ' . $result['message']); - return $result; - } - - $allowed = (($is_zot || in_array($xchan['xchan_network'],['rss','zot6'])) ? 1 : 0); - - $x = array('channel_id' => $uid, 'follow_address' => $url, 'xchan' => $xchan, 'allowed' => $allowed, 'singleton' => 0); - - call_hooks('follow_allow',$x); - - if(! $x['allowed']) { - $result['message'] = t('Protocol disabled.'); - return $result; - } - - $singleton = intval($x['singleton']); - - $aid = $channel['channel_account_id']; - $hash = $channel['channel_hash']; - $default_group = $channel['channel_default_group']; - - if($hash == $xchan_hash) { - $result['message'] = t('Cannot connect to yourself.'); - return $result; - } - - if($xchan['xchan_network'] === 'rss') { - - // check service class feed limits - - $r = q("select count(*) as total from abook where abook_account = %d and abook_feed = 1 ", - intval($aid) - ); - if($r) - $total_feeds = $r[0]['total']; - - if(! service_class_allows($uid,'total_feeds',$total_feeds)) { - $result['message'] = upgrade_message(); - return $result; - } - - // Always set these "remote" permissions for feeds since we cannot interact with them - // to negotiate a suitable permission response - - set_abconfig($uid,$xchan_hash,'their_perms','view_stream',1); - set_abconfig($uid,$xchan_hash,'their_perms','republish',1); - - } - - $profile_assign = get_pconfig($uid,'system','profile_assign',''); - - - $r = q("select abook_id, abook_xchan, abook_pending, abook_instance from abook - where abook_xchan = '%s' and abook_channel = %d limit 1", - dbesc($xchan_hash), - intval($uid) - ); - - if($r) { - - $abook_instance = $r[0]['abook_instance']; - - if(($singleton) && strpos($abook_instance,z_root()) === false) { - if($abook_instance) - $abook_instance .= ','; - $abook_instance .= z_root(); - - $x = q("update abook set abook_instance = '%s', abook_not_here = 0 where abook_id = %d", - dbesc($abook_instance), - intval($r[0]['abook_id']) - ); - } - - if(intval($r[0]['abook_pending'])) { - $x = q("update abook set abook_pending = 0 where abook_id = %d", - intval($r[0]['abook_id']) - ); - } - } - else { - $closeness = get_pconfig($uid,'system','new_abook_closeness',80); - - $r = abook_store_lowlevel( - [ - 'abook_account' => intval($aid), - 'abook_channel' => intval($uid), - 'abook_closeness' => intval($closeness), - 'abook_xchan' => $xchan_hash, - 'abook_profile' => $profile_assign, - 'abook_feed' => intval(($xchan['xchan_network'] === 'rss') ? 1 : 0), - 'abook_created' => datetime_convert(), - 'abook_updated' => datetime_convert(), - 'abook_instance' => (($singleton) ? z_root() : '') - ] - ); - } - - if(! $r) - logger('mod_follow: abook creation failed'); - - if($my_perms) { - foreach($my_perms as $k => $v) { - set_abconfig($uid,$xchan_hash,'my_perms',$k,$v); - } - } - - $r = q("select abook.*, xchan.* from abook left join xchan on abook_xchan = xchan_hash - where abook_xchan = '%s' and abook_channel = %d limit 1", - dbesc($xchan_hash), - intval($uid) - ); - - if($r) { - $result['abook'] = $r[0]; - Zotlabs\Daemon\Master::Summon(array('Notifier', 'permission_create', $result['abook']['abook_id'])); - } - - $arr = array('channel_id' => $uid, 'channel' => $channel, 'abook' => $result['abook']); - - call_hooks('follow', $arr); - - /** If there is a default group for this channel, add this connection to it */ - - if($default_group) { - require_once('include/group.php'); - $g = group_rec_byhash($uid,$default_group); - if($g) - group_add_member($uid,'',$xchan_hash,$g['id']); - } - - $result['success'] = true; - return $result; -} -- cgit v1.2.3 From adba56a5e539bfc958bd0f2f9f7d807d38c189f9 Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 27 May 2021 08:55:52 +0000 Subject: remove mod events --- Zotlabs/Module/Events.php | 750 ---------------------------------------------- 1 file changed, 750 deletions(-) delete mode 100644 Zotlabs/Module/Events.php diff --git a/Zotlabs/Module/Events.php b/Zotlabs/Module/Events.php deleted file mode 100644 index 681d6887d..000000000 --- a/Zotlabs/Module/Events.php +++ /dev/null @@ -1,750 +0,0 @@ -set($x[0]); - - $created = $x[0]['created']; - $edited = datetime_convert(); - - if($x[0]['allow_cid'] === '<' . $channel['channel_hash'] . '>' - && $x[0]['allow_gid'] === '' && $x[0]['deny_cid'] === '' && $x[0]['deny_gid'] === '') { - $share = false; - } - else { - $share = true; - } - } - else { - $created = $edited = datetime_convert(); - if($share) { - $acl->set_from_array($_POST); - } - else { - $acl->set(array('allow_cid' => '<' . $channel['channel_hash'] . '>', 'allow_gid' => '', 'deny_cid' => '', 'deny_gid' => '')); - } - } - - $post_tags = array(); - $channel = \App::get_channel(); - $ac = $acl->get(); - - if(strlen($categories)) { - $cats = explode(',',$categories); - foreach($cats as $cat) { - $post_tags[] = array( - 'uid' => $profile_uid, - 'ttype' => TERM_CATEGORY, - 'otype' => TERM_OBJ_POST, - 'term' => trim($cat), - 'url' => $channel['xchan_url'] . '?f=&cat=' . urlencode(trim($cat)) - ); - } - } - - $datarray = array(); - $datarray['dtstart'] = $start; - $datarray['dtend'] = $finish; - $datarray['summary'] = $summary; - $datarray['description'] = $desc; - $datarray['location'] = $location; - $datarray['etype'] = $type; - $datarray['adjust'] = $adjust; - $datarray['nofinish'] = $nofinish; - $datarray['uid'] = local_channel(); - $datarray['account'] = get_account_id(); - $datarray['event_xchan'] = $channel['channel_hash']; - $datarray['allow_cid'] = $ac['allow_cid']; - $datarray['allow_gid'] = $ac['allow_gid']; - $datarray['deny_cid'] = $ac['deny_cid']; - $datarray['deny_gid'] = $ac['deny_gid']; - $datarray['private'] = (($acl->is_private()) ? 1 : 0); - $datarray['id'] = $event_id; - $datarray['created'] = $created; - $datarray['edited'] = $edited; - - if(intval($_REQUEST['preview'])) { - $html = format_event_html($datarray); - echo $html; - killme(); - } - - $event = event_store_event($datarray); - - if($post_tags) - $datarray['term'] = $post_tags; - - $item_id = event_store_item($datarray,$event); - - if($item_id) { - $r = q("select * from item where id = %d", - intval($item_id) - ); - if($r) { - xchan_query($r); - $sync_item = fetch_post_tags($r); - $z = q("select * from event where event_hash = '%s' and uid = %d limit 1", - dbesc($r[0]['resource_id']), - intval($channel['channel_id']) - ); - if($z) { - build_sync_packet($channel['channel_id'],array('event_item' => array(encode_item($sync_item[0],true)),'event' => $z)); - } - } - } - - if($share) - \Zotlabs\Daemon\Master::Summon(array('Notifier','event',$item_id)); - - } - - - - function get() { - - // this module is deprecated - return; - - if(argc() > 2 && argv(1) == 'ical') { - $event_id = argv(2); - - require_once('include/security.php'); - $sql_extra = permissions_sql(local_channel()); - - $r = q("select * from event where event_hash = '%s' $sql_extra limit 1", - dbesc($event_id) - ); - if($r) { - header('Content-type: text/calendar'); - header('content-disposition: attachment; filename="' . t('event') . '-' . $event_id . '.ics"' ); - echo ical_wrapper($r); - killme(); - } - else { - notice( t('Event not found.') . EOL ); - return; - } - } - - if(! local_channel()) { - notice( t('Permission denied.') . EOL); - return; - } - - \App::$profile_uid = local_channel(); - nav_set_selected('Events'); - - - if((argc() > 2) && (argv(1) === 'ignore') && intval(argv(2))) { - $r = q("update event set dismissed = 1 where id = %d and uid = %d", - intval(argv(2)), - intval(local_channel()) - ); - } - - if((argc() > 2) && (argv(1) === 'unignore') && intval(argv(2))) { - $r = q("update event set dismissed = 0 where id = %d and uid = %d", - intval(argv(2)), - intval(local_channel()) - ); - } - - $first_day = feature_enabled(local_channel(), 'events_cal_first_day'); - $first_day = (($first_day) ? $first_day : 0); - - $htpl = get_markup_template('event_head.tpl'); - \App::$page['htmlhead'] .= replace_macros($htpl,array( - '$baseurl' => z_root(), - '$module_url' => '/events', - '$modparams' => 1, - '$lang' => \App::$language, - '$first_day' => $first_day - )); - - $o = ''; - - $channel = \App::get_channel(); - - $mode = 'view'; - $y = 0; - $m = 0; - $ignored = ((x($_REQUEST,'ignored')) ? " and dismissed = " . intval($_REQUEST['ignored']) . " " : ''); - - - // logger('args: ' . print_r(\App::$argv,true)); - - - - if(argc() > 1) { - if(argc() > 2 && argv(1) === 'add') { - $mode = 'add'; - $item_id = intval(argv(2)); - } - if(argc() > 2 && argv(1) === 'drop') { - $mode = 'drop'; - $event_id = argv(2); - } - if(argc() > 2 && intval(argv(1)) && intval(argv(2))) { - $mode = 'view'; - $y = intval(argv(1)); - $m = intval(argv(2)); - } - if(argc() <= 2) { - $mode = 'view'; - $event_id = argv(1); - } - } - - if($mode === 'add') { - event_addtocal($item_id,local_channel()); - killme(); - } - - if($mode == 'view') { - - /* edit/create form */ - if($event_id) { - $r = q("SELECT * FROM event WHERE event_hash = '%s' AND uid = %d LIMIT 1", - dbesc($event_id), - intval(local_channel()) - ); - if(count($r)) - $orig_event = $r[0]; - } - - $channel = \App::get_channel(); - - // Passed parameters overrides anything found in the DB - if(!x($orig_event)) - $orig_event = array(); - - // In case of an error the browser is redirected back here, with these parameters filled in with the previous values - /* - if(x($_REQUEST,'nofinish')) $orig_event['nofinish'] = $_REQUEST['nofinish']; - if(x($_REQUEST,'adjust')) $orig_event['adjust'] = $_REQUEST['adjust']; - if(x($_REQUEST,'summary')) $orig_event['summary'] = $_REQUEST['summary']; - if(x($_REQUEST,'description')) $orig_event['description'] = $_REQUEST['description']; - if(x($_REQUEST,'location')) $orig_event['location'] = $_REQUEST['location']; - if(x($_REQUEST,'start')) $orig_event['dtstart'] = $_REQUEST['start']; - if(x($_REQUEST,'finish')) $orig_event['dtend'] = $_REQUEST['finish']; - if(x($_REQUEST,'type')) $orig_event['etype'] = $_REQUEST['type']; - */ - - $n_checked = ((x($orig_event) && $orig_event['nofinish']) ? ' checked="checked" ' : ''); - $a_checked = ((x($orig_event) && $orig_event['adjust']) ? ' checked="checked" ' : ''); - $t_orig = ((x($orig_event)) ? $orig_event['summary'] : ''); - $d_orig = ((x($orig_event)) ? $orig_event['description'] : ''); - $l_orig = ((x($orig_event)) ? $orig_event['location'] : ''); - $eid = ((x($orig_event)) ? $orig_event['id'] : 0); - $event_xchan = ((x($orig_event)) ? $orig_event['event_xchan'] : $channel['channel_hash']); - $mid = ((x($orig_event)) ? $orig_event['mid'] : ''); - - if(! x($orig_event)) { - $sh_checked = ''; - $a_checked = ' checked="checked" '; - } - else { - $sh_checked = ((($orig_event['allow_cid'] === '<' . $channel['channel_hash'] . '>' || (! $orig_event['allow_cid'])) && (! $orig_event['allow_gid']) && (! $orig_event['deny_cid']) && (! $orig_event['deny_gid'])) ? '' : ' checked="checked" ' ); - } - - if($orig_event['event_xchan']) - $sh_checked .= ' disabled="disabled" '; - - $sdt = ((x($orig_event)) ? $orig_event['dtstart'] : 'now'); - - $fdt = ((x($orig_event)) ? $orig_event['dtend'] : '+1 hour'); - - $tz = date_default_timezone_get(); - if(x($orig_event)) - $tz = (($orig_event['adjust']) ? date_default_timezone_get() : 'UTC'); - - $syear = datetime_convert('UTC', $tz, $sdt, 'Y'); - $smonth = datetime_convert('UTC', $tz, $sdt, 'm'); - $sday = datetime_convert('UTC', $tz, $sdt, 'd'); - $shour = datetime_convert('UTC', $tz, $sdt, 'H'); - $sminute = datetime_convert('UTC', $tz, $sdt, 'i'); - - $stext = datetime_convert('UTC',$tz,$sdt); - $stext = substr($stext,0,14) . "00:00"; - - $fyear = datetime_convert('UTC', $tz, $fdt, 'Y'); - $fmonth = datetime_convert('UTC', $tz, $fdt, 'm'); - $fday = datetime_convert('UTC', $tz, $fdt, 'd'); - $fhour = datetime_convert('UTC', $tz, $fdt, 'H'); - $fminute = datetime_convert('UTC', $tz, $fdt, 'i'); - - $ftext = datetime_convert('UTC',$tz,$fdt); - $ftext = substr($ftext,0,14) . "00:00"; - - $type = ((x($orig_event)) ? $orig_event['etype'] : 'event'); - - $f = get_config('system','event_input_format'); - if(! $f) - $f = 'ymd'; - - $catsenabled = feature_enabled(local_channel(),'categories'); - - $category = ''; - - if($catsenabled && x($orig_event)){ - $itm = q("select * from item where resource_type = 'event' and resource_id = '%s' and uid = %d limit 1", - dbesc($orig_event['event_hash']), - intval(local_channel()) - ); - $itm = fetch_post_tags($itm); - if($itm) { - $cats = get_terms_oftype($itm[0]['term'], TERM_CATEGORY); - foreach ($cats as $cat) { - if(strlen($category)) - $category .= ', '; - $category .= $cat['term']; - } - } - } - - require_once('include/acl_selectors.php'); - - $acl = new \Zotlabs\Access\AccessList($channel); - $perm_defaults = $acl->get(); - - $permissions = ((x($orig_event)) ? $orig_event : $perm_defaults); - - $tpl = get_markup_template('event_form.tpl'); - - $form = replace_macros($tpl,array( - '$post' => z_root() . '/events', - '$eid' => $eid, - '$type' => $type, - '$xchan' => $event_xchan, - '$mid' => $mid, - '$event_hash' => $event_id, - '$summary' => array('summary', (($event_id) ? t('Edit event title') : t('Event title')), $t_orig, t('Required'), '*'), - '$catsenabled' => $catsenabled, - '$placeholdercategory' => t('Categories (comma-separated list)'), - '$c_text' => (($event_id) ? t('Edit Category') : t('Category')), - '$category' => $category, - '$required' => '*', - '$s_dsel' => datetimesel($f,new \DateTime(),\DateTime::createFromFormat('Y',$syear+5),\DateTime::createFromFormat('Y-m-d H:i',"$syear-$smonth-$sday $shour:$sminute"), (($event_id) ? t('Edit start date and time') : t('Start date and time')), 'start_text',true,true,'','',true,$first_day), - '$n_text' => t('Finish date and time are not known or not relevant'), - '$n_checked' => $n_checked, - '$f_dsel' => datetimesel($f,new \DateTime(),\DateTime::createFromFormat('Y',$fyear+5),\DateTime::createFromFormat('Y-m-d H:i',"$fyear-$fmonth-$fday $fhour:$fminute"), (($event_id) ? t('Edit finish date and time') : t('Finish date and time')),'finish_text',true,true,'start_text','',false,$first_day), - '$nofinish' => array('nofinish', t('Finish date and time are not known or not relevant'), $n_checked, '', array(t('No'),t('Yes')), 'onclick="enableDisableFinishDate();"'), - '$adjust' => array('adjust', t('Adjust for viewer timezone'), $a_checked, t('Important for events that happen in a particular place. Not practical for global holidays.'), array(t('No'),t('Yes'))), - '$a_text' => t('Adjust for viewer timezone'), - '$d_text' => (($event_id) ? t('Edit Description') : t('Description')), - '$d_orig' => $d_orig, - '$l_text' => (($event_id) ? t('Edit Location') : t('Location')), - '$l_orig' => $l_orig, - '$t_orig' => $t_orig, - '$preview' => t('Preview'), - '$perms_label' => t('Permission settings'), - // populating the acl dialog was a permission description from view_stream because Cal.php, which - // displays events, says "since we don't currently have an event permission - use the stream permission" - '$acl' => (($orig_event['event_xchan']) ? '' : populate_acl(((x($orig_event)) ? $orig_event : $perm_defaults), false, \Zotlabs\Lib\PermissionDescription::fromGlobalPermission('view_stream'))), - - '$allow_cid' => acl2json($permissions['allow_cid']), - '$allow_gid' => acl2json($permissions['allow_gid']), - '$deny_cid' => acl2json($permissions['deny_cid']), - '$deny_gid' => acl2json($permissions['deny_gid']), - '$tz_choose' => feature_enabled(local_channel(),'event_tz_select'), - '$timezone' => array('timezone_select' , t('Timezone:'), date_default_timezone_get(), '', get_timezones()), - - '$lockstate' => (($acl->is_private()) ? 'lock' : 'unlock'), - - '$submit' => t('Submit'), - '$advanced' => t('Advanced Options') - - )); - /* end edit/create form */ - - $thisyear = datetime_convert('UTC',date_default_timezone_get(),'now','Y'); - $thismonth = datetime_convert('UTC',date_default_timezone_get(),'now','m'); - if(! $y) - $y = intval($thisyear); - if(! $m) - $m = intval($thismonth); - - $export = false; - if(argc() === 4 && argv(3) === 'export') - $export = true; - - // Put some limits on dates. The PHP date functions don't seem to do so well before 1900. - // An upper limit was chosen to keep search engines from exploring links millions of years in the future. - - if($y < 1901) - $y = 1900; - if($y > 2099) - $y = 2100; - - $nextyear = $y; - $nextmonth = $m + 1; - if($nextmonth > 12) { - $nextmonth = 1; - $nextyear ++; - } - - $prevyear = $y; - if($m > 1) - $prevmonth = $m - 1; - else { - $prevmonth = 12; - $prevyear --; - } - - $dim = get_dim($y,$m); - $start = sprintf('%d-%d-%d %d:%d:%d',$y,$m,1,0,0,0); - $finish = sprintf('%d-%d-%d %d:%d:%d',$y,$m,$dim,23,59,59); - - - if (argv(1) === 'json'){ - if (x($_GET,'start')) $start = $_GET['start']; - if (x($_GET,'end')) $finish = $_GET['end']; - } - - $start = datetime_convert('UTC','UTC',$start); - $finish = datetime_convert('UTC','UTC',$finish); - - $adjust_start = datetime_convert('UTC', date_default_timezone_get(), $start); - $adjust_finish = datetime_convert('UTC', date_default_timezone_get(), $finish); - - if (x($_GET,'id')){ - $r = q("SELECT event.*, item.plink, item.item_flags, item.author_xchan, item.owner_xchan - from event left join item on resource_id = event_hash where resource_type = 'event' and event.uid = %d and event.id = %d limit 1", - intval(local_channel()), - intval($_GET['id']) - ); - } elseif($export) { - $r = q("SELECT * from event where uid = %d - AND (( adjust = 0 AND ( dtend >= '%s' or nofinish = 1 ) AND dtstart <= '%s' ) - OR ( adjust = 1 AND ( dtend >= '%s' or nofinish = 1 ) AND dtstart <= '%s' )) ", - intval(local_channel()), - dbesc($start), - dbesc($finish), - dbesc($adjust_start), - dbesc($adjust_finish) - ); - } - else { - // fixed an issue with "nofinish" events not showing up in the calendar. - // There's still an issue if the finish date crosses the end of month. - // Noting this for now - it will need to be fixed here and in Friendica. - // Ultimately the finish date shouldn't be involved in the query. - - $r = q("SELECT event.*, item.plink, item.item_flags, item.author_xchan, item.owner_xchan - from event left join item on event_hash = resource_id - where resource_type = 'event' and event.uid = %d and event.uid = item.uid $ignored - AND (( adjust = 0 AND ( dtend >= '%s' or nofinish = 1 ) AND dtstart <= '%s' ) - OR ( adjust = 1 AND ( dtend >= '%s' or nofinish = 1 ) AND dtstart <= '%s' )) ", - intval(local_channel()), - dbesc($start), - dbesc($finish), - dbesc($adjust_start), - dbesc($adjust_finish) - ); - } - - $links = array(); - - if($r && ! $export) { - xchan_query($r); - $r = fetch_post_tags($r,true); - - $r = sort_by_date($r); - } - - if($r) { - foreach($r as $rr) { - $j = (($rr['adjust']) ? datetime_convert('UTC',date_default_timezone_get(),$rr['dtstart'], 'j') : datetime_convert('UTC','UTC',$rr['dtstart'],'j')); - if(! x($links,$j)) - $links[$j] = z_root() . '/' . \App::$cmd . '#link-' . $j; - } - } - - $events=array(); - - $last_date = ''; - $fmt = t('l, F j'); - - if($r) { - - foreach($r as $rr) { - - $j = (($rr['adjust']) ? datetime_convert('UTC',date_default_timezone_get(),$rr['dtstart'], 'j') : datetime_convert('UTC','UTC',$rr['dtstart'],'j')); - $d = (($rr['adjust']) ? datetime_convert('UTC',date_default_timezone_get(),$rr['dtstart'], $fmt) : datetime_convert('UTC','UTC',$rr['dtstart'],$fmt)); - $d = day_translate($d); - - $start = (($rr['adjust']) ? datetime_convert('UTC',date_default_timezone_get(),$rr['dtstart'], 'c') : datetime_convert('UTC','UTC',$rr['dtstart'],'c')); - if ($rr['nofinish']){ - $end = null; - } else { - $end = (($rr['adjust']) ? datetime_convert('UTC',date_default_timezone_get(),$rr['dtend'], 'c') : datetime_convert('UTC','UTC',$rr['dtend'],'c')); - - // give a fake end to birthdays so they get crammed into a - // single day on the calendar - - if($rr['etype'] === 'birthday') - $end = null; - } - - - $is_first = ($d !== $last_date); - - $last_date = $d; - - $edit = ((local_channel() && $rr['author_xchan'] == get_observer_hash()) ? array(z_root().'/events/'.$rr['event_hash'].'?expandform=1',t('Edit event'),'','') : false); - - $drop = array(z_root().'/events/drop/'.$rr['event_hash'],t('Delete event'),'',''); - - $title = strip_tags(html_entity_decode(zidify_links(bbcode($rr['summary'])),ENT_QUOTES,'UTF-8')); - if(! $title) { - list($title, $_trash) = explode("$rr['id'], - 'hash' => $rr['event_hash'], - 'start'=> $start, - 'end' => $end, - 'drop' => $drop, - 'allDay' => false, - 'title' => $title, - - 'j' => $j, - 'd' => $d, - 'edit' => $edit, - 'is_first'=>$is_first, - 'item'=>$rr, - 'html'=>$html, - 'plink' => array($rr['plink'],t('Link to Source'),'',''), - ); - - } - } - - if($export) { - header('Content-type: text/calendar'); - header('content-disposition: attachment; filename="' . t('calendar') . '-' . $channel['channel_address'] . '.ics"' ); - echo ical_wrapper($r); - killme(); - } - - if (\App::$argv[1] === 'json'){ - echo json_encode($events); killme(); - } - - // links: array('href', 'text', 'extra css classes', 'title') - if (x($_GET,'id')){ - $tpl = get_markup_template("event.tpl"); - } - else { - $tpl = get_markup_template("events-js.tpl"); - } - - $o = replace_macros($tpl, array( - '$baseurl' => z_root(), - '$new_event' => array(z_root().'/events',(($event_id) ? t('Edit Event') : t('Create Event')),'',''), - '$previus' => array(z_root()."/events/$prevyear/$prevmonth",t('Previous'),'',''), - '$next' => array(z_root()."/events/$nextyear/$nextmonth",t('Next'),'',''), - '$export' => array(z_root()."/events/$y/$m/export",t('Export'),'',''), - '$calendar' => cal($y,$m,$links, ' eventcal'), - '$events' => $events, - '$view_label' => t('View'), - '$month' => t('Month'), - '$week' => t('Week'), - '$day' => t('Day'), - '$prev' => t('Previous'), - '$next' => t('Next'), - '$today' => t('Today'), - '$form' => $form, - '$expandform' => ((x($_GET,'expandform')) ? true : false), - )); - - if (x($_GET,'id')){ echo $o; killme(); } - - return $o; - } - - if($mode === 'drop' && $event_id) { - $r = q("SELECT * FROM event WHERE event_hash = '%s' AND uid = %d LIMIT 1", - dbesc($event_id), - intval(local_channel()) - ); - - $sync_event = $r[0]; - - if($r) { - $r = q("delete from event where event_hash = '%s' and uid = %d", - dbesc($event_id), - intval(local_channel()) - ); - if($r) { - $r = q("update item set resource_type = '', resource_id = '' where resource_type = 'event' and resource_id = '%s' and uid = %d", - dbesc($event_id), - intval(local_channel()) - ); - $sync_event['event_deleted'] = 1; - build_sync_packet(0,array('event' => array($sync_event))); - - info( t('Event removed') . EOL); - } - else { - notice( t('Failed to remove event' ) . EOL); - } - goaway(z_root() . '/events'); - } - } - - } - -} -- cgit v1.2.3 From 6a7e06f11cb200d4ed1ea29688a3d8eaf98c45ea Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 27 May 2021 09:09:52 +0000 Subject: deprecate get_rpost_path() --- Zotlabs/Module/Rpost.php | 4 +++- include/bbcode.php | 5 +++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Zotlabs/Module/Rpost.php b/Zotlabs/Module/Rpost.php index 031270845..ff306d138 100644 --- a/Zotlabs/Module/Rpost.php +++ b/Zotlabs/Module/Rpost.php @@ -1,6 +1,8 @@ $arg) { diff --git a/include/bbcode.php b/include/bbcode.php index 228af7faa..5873d5e68 100644 --- a/include/bbcode.php +++ b/include/bbcode.php @@ -5,6 +5,7 @@ */ use Zotlabs\Lib\SvgSanitizer; +use Zotlabs\Lib\Libzot; require_once('include/oembed.php'); require_once('include/event.php'); @@ -616,9 +617,9 @@ function bb_ShareAttributesSimple($match) { function rpost_callback($match) { if ($match[2]) { - return str_replace($match[0], get_rpost_path(App::get_observer()) . '&title=' . urlencode($match[2]) . '&body=' . urlencode($match[3]), $match[0]); + return str_replace($match[0], Libzot::get_rpost_path(App::get_observer()) . '&title=' . urlencode($match[2]) . '&body=' . urlencode($match[3]), $match[0]); } else { - return str_replace($match[0], get_rpost_path(App::get_observer()) . '&body=' . urlencode($match[3]), $match[0]); + return str_replace($match[0], Libzot::get_rpost_path(App::get_observer()) . '&body=' . urlencode($match[3]), $match[0]); } } -- cgit v1.2.3 From 16146af0392a33b90edce1fd7136b19d5d683c31 Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 27 May 2021 09:18:46 +0000 Subject: deprecate remove_queue_by_posturl() --- Zotlabs/Module/Admin/Queue.php | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/Zotlabs/Module/Admin/Queue.php b/Zotlabs/Module/Admin/Queue.php index 5a47413ee..a4ce1b950 100644 --- a/Zotlabs/Module/Admin/Queue.php +++ b/Zotlabs/Module/Admin/Queue.php @@ -7,30 +7,30 @@ namespace Zotlabs\Module\Admin; class Queue { - + function get() { $o = ''; - + $expert = ((array_key_exists('expert',$_REQUEST)) ? intval($_REQUEST['expert']) : 0); - + if($_REQUEST['drophub']) { hubloc_mark_as_down($_REQUEST['drophub']); - remove_queue_by_posturl($_REQUEST['drophub']); + Queue::remove_by_posturl($_REQUEST['drophub']); } - + if($_REQUEST['emptyhub']) { - remove_queue_by_posturl($_REQUEST['emptyhub']); + Queue::remove_by_posturl($_REQUEST['emptyhub']); } - - $r = q("select count(outq_posturl) as total, max(outq_priority) as priority, outq_posturl from outq + + $r = q("select count(outq_posturl) as total, max(outq_priority) as priority, outq_posturl from outq where outq_delivered = 0 group by outq_posturl order by total desc"); - + for($x = 0; $x < count($r); $x ++) { $r[$x]['eurl'] = urlencode($r[$x]['outq_posturl']); $r[$x]['connected'] = datetime_convert('UTC',date_default_timezone_get(),$r[$x]['connected'],'Y-m-d'); } - + $o = replace_macros(get_markup_template('admin_queue.tpl'), array( '$banner' => t('Queue Statistics'), '$numentries' => t('Total Entries'), @@ -43,11 +43,11 @@ class Queue { '$entries' => $r, '$expert' => $expert )); - + return $o; } - -} \ No newline at end of file + +} -- cgit v1.2.3 From 67cf9f6caf225f64d31dda838ecbd3f22d9feba9 Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 27 May 2021 09:22:38 +0000 Subject: deprecate find_upstream_directory() --- include/socgraph.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/socgraph.php b/include/socgraph.php index 03681ff57..278b80773 100644 --- a/include/socgraph.php +++ b/include/socgraph.php @@ -306,7 +306,7 @@ function update_suggestions() { $url = z_root() . '/sitelist'; } else { - $directory = find_upstream_directory($dirmode); + $directory = Libzotdir::find_upstream_directory($dirmode); $url = $directory['url'] . '/sitelist'; } if(! $url) -- cgit v1.2.3 From 37558e24f8ca8eb4b74037e5ce245d3343fb5a52 Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 27 May 2021 09:30:57 +0000 Subject: remove dir_fns includes --- Zotlabs/Daemon/Onedirsync.php | 4 - Zotlabs/Module/Acl.php | 1 - Zotlabs/Module/Directory.php | 1 - Zotlabs/Module/Dirsearch.php | 198 +++++++++++++++++++++--------------------- Zotlabs/Module/Pubsites.php | 1 - Zotlabs/Widget/Dirtags.php | 2 - include/socgraph.php | 2 - 7 files changed, 97 insertions(+), 112 deletions(-) diff --git a/Zotlabs/Daemon/Onedirsync.php b/Zotlabs/Daemon/Onedirsync.php index 01879a470..9ab8ebb54 100644 --- a/Zotlabs/Daemon/Onedirsync.php +++ b/Zotlabs/Daemon/Onedirsync.php @@ -5,10 +5,6 @@ namespace Zotlabs\Daemon; use Zotlabs\Lib\Libzot; use Zotlabs\Lib\Libzotdir; -require_once('include/zot.php'); -require_once('include/dir_fns.php'); - - class Onedirsync { static public function run($argc, $argv) { diff --git a/Zotlabs/Module/Acl.php b/Zotlabs/Module/Acl.php index fb95b0504..862a97bdc 100644 --- a/Zotlabs/Module/Acl.php +++ b/Zotlabs/Module/Acl.php @@ -438,7 +438,6 @@ class Acl extends \Zotlabs\Web\Controller { } if(! $url) { - require_once("include/dir_fns.php"); $directory = Libzotdir::find_upstream_directory($dirmode); $url = $directory['url'] . '/dirsearch'; } diff --git a/Zotlabs/Module/Directory.php b/Zotlabs/Module/Directory.php index e1555fc2d..b39887c9e 100644 --- a/Zotlabs/Module/Directory.php +++ b/Zotlabs/Module/Directory.php @@ -8,7 +8,6 @@ use Zotlabs\Lib\Libzotdir; require_once('include/socgraph.php'); -require_once('include/dir_fns.php'); require_once('include/bbcode.php'); require_once('include/html2plain.php'); diff --git a/Zotlabs/Module/Dirsearch.php b/Zotlabs/Module/Dirsearch.php index 804d7af5c..3cccaca37 100644 --- a/Zotlabs/Module/Dirsearch.php +++ b/Zotlabs/Module/Dirsearch.php @@ -4,26 +4,22 @@ namespace Zotlabs\Module; use App; use Zotlabs\Web\Controller; -require_once('include/dir_fns.php'); - - - class Dirsearch extends Controller { function init() { App::set_pager_itemspage(30); - + } - + function get() { - + $ret = array('success' => false); - + // logger('request: ' . print_r($_REQUEST,true)); - - + + $dirmode = intval(get_config('system','directory_mode')); - + if($dirmode == DIRECTORY_MODE_NORMAL) { $ret['message'] = t('This site is not a directory server'); json_return_and_die($ret); @@ -31,24 +27,24 @@ class Dirsearch extends Controller { $access_token = $_REQUEST['t']; - + $token = get_config('system','realm_token'); if($token && $access_token != $token) { $ret['message'] = t('This directory server requires an access token'); json_return_and_die($ret); } - - + + if(argc() > 1 && argv(1) === 'sites') { $ret = $this->list_public_sites(); json_return_and_die($ret); } - + $sql_extra = ''; - - + + $tables = array('name','address','locale','region','postcode','country','gender','marital','sexual','keywords'); - + if($_REQUEST['query']) { $advanced = $this->dir_parse_query($_REQUEST['query']); if($advanced) { @@ -64,9 +60,9 @@ class Dirsearch extends Controller { } } } - + $hash = ((x($_REQUEST['hash'])) ? $_REQUEST['hash'] : ''); - + $name = ((x($_REQUEST,'name')) ? $_REQUEST['name'] : ''); $hub = ((x($_REQUEST,'hub')) ? $_REQUEST['hub'] : ''); $address = ((x($_REQUEST,'address')) ? $_REQUEST['address'] : ''); @@ -82,16 +78,16 @@ class Dirsearch extends Controller { $agele = ((x($_REQUEST,'agele')) ? intval($_REQUEST['agele']) : 0 ); $kw = ((x($_REQUEST,'kw')) ? intval($_REQUEST['kw']) : 0 ); $forums = ((array_key_exists('pubforums',$_REQUEST)) ? intval($_REQUEST['pubforums']) : 0); - + if(get_config('system','disable_directory_keywords')) $kw = 0; - - + + // by default use a safe search $safe = ((x($_REQUEST,'safe'))); // ? intval($_REQUEST['safe']) : 1 ); if ($safe === false) $safe = 1; - + if(array_key_exists('sync',$_REQUEST)) { if($_REQUEST['sync']) $sync = datetime_convert('UTC','UTC',$_REQUEST['sync']); @@ -100,7 +96,7 @@ class Dirsearch extends Controller { } else $sync = false; - + if(($dirmode == DIRECTORY_MODE_STANDALONE) && (! $hub)) { $hub = \App::get_hostname(); } @@ -109,13 +105,13 @@ class Dirsearch extends Controller { $hub_query = " and xchan_hash in (select hubloc_hash from hubloc where hubloc_host = '" . protect_sprintf(dbesc($hub)) . "') "; else $hub_query = ''; - + $sort_order = ((x($_REQUEST,'order')) ? $_REQUEST['order'] : ''); - + $joiner = ' OR '; if($_REQUEST['and']) $joiner = ' AND '; - + if($name) $sql_extra .= $this->dir_query_build($joiner,'xchan_name',$name); if($address) @@ -136,58 +132,58 @@ class Dirsearch extends Controller { $sql_extra .= $this->dir_query_build($joiner,'xprof_sexual',$sexual); if($keywords) $sql_extra .= $this->dir_query_build($joiner,'xprof_keywords',$keywords); - - - // we only support an age range currently. You must set both agege - // (greater than or equal) and agele (less than or equal) - + + + // we only support an age range currently. You must set both agege + // (greater than or equal) and agele (less than or equal) + if($agele && $agege) { $sql_extra .= " $joiner ( xprof_age <= " . intval($agele) . " "; $sql_extra .= " AND xprof_age >= " . intval($agege) . ") "; } - - + + if($hash) { $sql_extra = " AND xchan_hash like '" . dbesc($hash) . protect_sprintf('%') . "' "; } - - + + $perpage = (($_REQUEST['n']) ? $_REQUEST['n'] : 60); $page = (($_REQUEST['p']) ? intval($_REQUEST['p'] - 1) : 0); $startrec = (($page+1) * $perpage) - $perpage; $limit = (($_REQUEST['limit']) ? intval($_REQUEST['limit']) : 0); $return_total = ((x($_REQUEST,'return_total')) ? intval($_REQUEST['return_total']) : 0); - + // mtime is not currently working - + $mtime = ((x($_REQUEST,'mtime')) ? datetime_convert('UTC','UTC',$_REQUEST['mtime']) : ''); - - // ok a separate tag table won't work. + + // ok a separate tag table won't work. // merge them into xprof - + $ret['success'] = true; - + // If &limit=n, return at most n entries // If &return_total=1, we count matching entries and return that as 'total_items' for use in pagination. // By default we return one page (default 80 items maximum) and do not count total entries - + $logic = ((strlen($sql_extra)) ? 'false' : 'true'); - + if($hash) $logic = 'true'; - + if($dirmode == DIRECTORY_MODE_STANDALONE) { $sql_extra .= " and xchan_addr like '%%" . \App::get_hostname() . "' "; } - + $safesql = (($safe > 0) ? " and xchan_censored = 0 and xchan_selfcensored = 0 " : ''); if($safe < 0) $safesql = " and ( xchan_censored = 1 OR xchan_selfcensored = 1 ) "; - + if($forums) $safesql .= " and xchan_pubforum = " . ((intval($forums)) ? '1 ' : '0 '); - - if($limit) + + if($limit) $qlimit = " LIMIT $limit "; else { $qlimit = " LIMIT " . intval($perpage) . " OFFSET " . intval($startrec); @@ -198,24 +194,24 @@ class Dirsearch extends Controller { } } } - + if($sort_order == 'normal') { $order = " order by xchan_name asc "; - - // Start the alphabetic search at 'A' + + // Start the alphabetic search at 'A' // This will make a handful of channels whose names begin with // punctuation un-searchable in this mode - + $safesql .= " and ascii(substring(xchan_name FROM 1 FOR 1)) > 64 "; } elseif($sort_order == 'reverse') $order = " order by xchan_name desc "; elseif($sort_order == 'reversedate') $order = " order by xchan_name_date asc "; - else + else $order = " order by xchan_name_date desc "; - - + + if($sync) { $spkt = array('transactions' => array()); $r = q("select * from updates where ud_date >= '%s' and ud_guid != '' order by ud_date desc", @@ -228,7 +224,7 @@ class Dirsearch extends Controller { $flags[] = 'deleted'; if($rr['ud_flags'] & UPDATE_FLAGS_FORCED) $flags[] = 'forced'; - + $spkt['transactions'][] = array( 'hash' => $rr['ud_hash'], 'address' => $rr['ud_addr'], @@ -245,7 +241,7 @@ class Dirsearch extends Controller { $spkt['ratings'] = array(); foreach($r as $rr) { $spkt['ratings'][] = array( - 'type' => 'rating', + 'type' => 'rating', 'encoding' => 'zot', 'channel' => $rr['xlink_xchan'], 'target' => $rr['xlink_link'], @@ -259,37 +255,37 @@ class Dirsearch extends Controller { json_return_and_die($spkt); } else { - - $r = q("SELECT xchan.*, xprof.* from xchan left join xprof on xchan_hash = xprof_hash - where ( $logic $sql_extra ) $hub_query and xchan_network = 'zot6' and xchan_system = 0 and xchan_hidden = 0 and xchan_orphan = 0 and xchan_deleted = 0 + + $r = q("SELECT xchan.*, xprof.* from xchan left join xprof on xchan_hash = xprof_hash + where ( $logic $sql_extra ) $hub_query and xchan_network = 'zot6' and xchan_system = 0 and xchan_hidden = 0 and xchan_orphan = 0 and xchan_deleted = 0 $safesql $order $qlimit " ); - - - + + + $ret['page'] = $page + 1; - $ret['records'] = count($r); + $ret['records'] = count($r); } - - - + + + if($r) { - + $entries = array(); - + foreach($r as $rr) { - + $entry = array(); - + $pc = q("select count(xlink_rating) as total_ratings from xlink where xlink_link = '%s' and xlink_rating != 0 and xlink_static = 1 group by xlink_rating", dbesc($rr['xchan_hash']) ); - + if($pc) $entry['total_ratings'] = intval($pc[0]['total_ratings']); else $entry['total_ratings'] = 0; - + $entry['name'] = $rr['xchan_name']; $entry['hash'] = $rr['xchan_hash']; $entry['censored'] = $rr['xchan_censored']; @@ -313,11 +309,11 @@ class Dirsearch extends Controller { $entry['homepage'] = $rr['xprof_homepage']; $entry['hometown'] = $rr['xprof_hometown']; $entry['keywords'] = $rr['xprof_keywords']; - + $entries[] = $entry; - + } - + $ret['results'] = $entries; if($kw) { $k = dir_tagadelic($kw, $hub); @@ -328,30 +324,30 @@ class Dirsearch extends Controller { } } } - } - + } + json_return_and_die($ret); } - + function dir_query_build($joiner,$field,$s) { $ret = ''; if(trim($s)) $ret .= dbesc($joiner) . " " . dbesc($field) . " like '" . protect_sprintf( '%' . dbesc($s) . '%' ) . "' "; return $ret; } - + function dir_flag_build($joiner,$field,$bit,$s) { return dbesc($joiner) . " ( " . dbesc($field) . " & " . intval($bit) . " ) " . ((intval($s)) ? '>' : '=' ) . " 0 "; } - - + + function dir_parse_query($s) { - + $ret = array(); $curr = array(); $all = explode(' ',$s); $quoted_string = false; - + if($all) { foreach($all as $q) { if($quoted_string === false) { @@ -382,7 +378,7 @@ class Dirsearch extends Controller { $ret[] = $curr; $curr = array(); continue; - } + } else { $ret[] = $curr; $curr = array(); @@ -405,15 +401,15 @@ class Dirsearch extends Controller { logger('dir_parse_query:' . print_r($ret,true),LOGGER_DATA); return $ret; } - - - - - - - + + + + + + + function list_public_sites() { - + $rand = db_getfunc('rand'); $realm = get_directory_realm(); if($realm == DIRECTORY_REALM) { @@ -428,16 +424,16 @@ class Dirsearch extends Controller { intval(SITE_TYPE_ZOT) ); } - + $ret = array('success' => false); - + if($r) { $ret['success'] = true; $ret['sites'] = array(); $insecure = array(); - + foreach($r as $rr) { - + if($rr['site_access'] == ACCESS_FREE) $access = 'free'; elseif($rr['site_access'] == ACCESS_PAID) @@ -446,14 +442,14 @@ class Dirsearch extends Controller { $access = 'tiered'; else $access = 'private'; - + if($rr['site_register'] == REGISTER_OPEN) $register = 'open'; elseif($rr['site_register'] == REGISTER_APPROVE) $register = 'approve'; else $register = 'closed'; - + if(strpos($rr['site_url'],'https://') !== false) $ret['sites'][] = array('url' => $rr['site_url'], 'access' => $access, 'register' => $register, 'sellpage' => $rr['site_sellpage'], 'location' => $rr['site_location'], 'project' => $rr['site_project'], 'version' => $rr['site_version']); else diff --git a/Zotlabs/Module/Pubsites.php b/Zotlabs/Module/Pubsites.php index 4b64d9af6..fd5aeaa72 100644 --- a/Zotlabs/Module/Pubsites.php +++ b/Zotlabs/Module/Pubsites.php @@ -6,7 +6,6 @@ use Zotlabs\Lib\Libzotdir; class Pubsites extends \Zotlabs\Web\Controller { function get() { - require_once('include/dir_fns.php'); $dirmode = intval(get_config('system','directory_mode')); if(($dirmode == DIRECTORY_MODE_PRIMARY) || ($dirmode == DIRECTORY_MODE_STANDALONE)) { diff --git a/Zotlabs/Widget/Dirtags.php b/Zotlabs/Widget/Dirtags.php index f211d5942..246c47dde 100644 --- a/Zotlabs/Widget/Dirtags.php +++ b/Zotlabs/Widget/Dirtags.php @@ -2,8 +2,6 @@ namespace Zotlabs\Widget; -require_once('include/dir_fns.php'); - class Dirtags { function widget($arr) { diff --git a/include/socgraph.php b/include/socgraph.php index 278b80773..5b913dcfd 100644 --- a/include/socgraph.php +++ b/include/socgraph.php @@ -5,8 +5,6 @@ use Zotlabs\Lib\Libzot; use Zotlabs\Lib\Libzotdir; use Zotlabs\Lib\Zotfinger; -require_once('include/dir_fns.php'); -require_once('include/zot.php'); /** * poco_load -- cgit v1.2.3 From c9d4802bf14cd135a75f89e4aa06976dfd628af5 Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 27 May 2021 09:33:22 +0000 Subject: =?UTF-8?q?=C3=83remove=20queue=5Ffn=20includes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Zotlabs/Module/Admin.php | 1 - 1 file changed, 1 deletion(-) diff --git a/Zotlabs/Module/Admin.php b/Zotlabs/Module/Admin.php index 44c10b339..59a9e22b2 100644 --- a/Zotlabs/Module/Admin.php +++ b/Zotlabs/Module/Admin.php @@ -8,7 +8,6 @@ namespace Zotlabs\Module; -require_once('include/queue_fn.php'); require_once('include/account.php'); /** -- cgit v1.2.3 From 7776283a479e24955f45eb9993d93d4dde87956a Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 27 May 2021 09:45:39 +0000 Subject: remove zot includes --- Zotlabs/Module/Authtest.php | 31 ++++++++++----------- Zotlabs/Module/Fhublocs.php | 1 - Zotlabs/Module/Import.php | 1 - Zotlabs/Module/Notes.php | 1 - Zotlabs/Module/Profiles.php | 1 - Zotlabs/Module/Rbmark.php | 67 ++++++++++++++++++++++----------------------- Zotlabs/Module/Rpost.php | 1 - Zotlabs/Module/Settings.php | 45 +++++++++++++++--------------- Zotlabs/Module/Wfinger.php | 8 ++---- include/bbcode.php | 1 - include/channel.php | 1 - util/fresh | 23 ++++++++-------- util/pconfig | 3 +- 13 files changed, 84 insertions(+), 100 deletions(-) diff --git a/Zotlabs/Module/Authtest.php b/Zotlabs/Module/Authtest.php index 239ae3bdb..d85af09dc 100644 --- a/Zotlabs/Module/Authtest.php +++ b/Zotlabs/Module/Authtest.php @@ -1,41 +1,38 @@ Magic-Auth Diagnostic'; - + if(! local_channel()) { notice( t('Permission denied.') . EOL); return $o; } - + $o .= '
'; $o .= 'Target URL: '; - $o .= '
'; - + $o .= ''; + $o .= '

'; - + if(x($_GET,'dest')) { if(strpos($_GET['dest'],'@')) { $_GET['dest'] = $_REQUEST['dest'] = 'https://' . substr($_GET['dest'],strpos($_GET['dest'],'@')+1) . '/channel/' . substr($_GET['dest'],0,strpos($_GET['dest'],'@')); } - + $_REQUEST['test'] = 1; $mod = new Magic(); $x = $mod->init($a); $o .= 'Local Setup returns: ' . print_r($x,true); - - - + + + if($x['url']) { $z = z_fetch_url($x['url'] . '&test=1'); if($z['success']) { @@ -50,12 +47,12 @@ class Authtest extends \Zotlabs\Web\Controller { $o .= 'fetch url failure.' . print_r($z,true); } } - + if(! $auth_success) $o .= 'Authentication Failed!' . EOL; } - + return str_replace("\n",'
',$o); } - + } diff --git a/Zotlabs/Module/Fhublocs.php b/Zotlabs/Module/Fhublocs.php index 4918f751b..9dcece715 100644 --- a/Zotlabs/Module/Fhublocs.php +++ b/Zotlabs/Module/Fhublocs.php @@ -3,7 +3,6 @@ namespace Zotlabs\Module; use Zotlabs\Lib\Libzot; -require_once('include/zot.php'); require_once('include/crypto.php'); /* fix missing or damaged hublocs */ diff --git a/Zotlabs/Module/Import.php b/Zotlabs/Module/Import.php index bfd248a0f..59db7b4be 100644 --- a/Zotlabs/Module/Import.php +++ b/Zotlabs/Module/Import.php @@ -2,7 +2,6 @@ namespace Zotlabs\Module; -require_once('include/zot.php'); require_once('include/channel.php'); require_once('include/import.php'); require_once('include/perm_upgrade.php'); diff --git a/Zotlabs/Module/Notes.php b/Zotlabs/Module/Notes.php index b448cff83..452e3df60 100644 --- a/Zotlabs/Module/Notes.php +++ b/Zotlabs/Module/Notes.php @@ -38,7 +38,6 @@ class Notes extends Controller { // push updates to channel clones if((argc() > 1) && (argv(1) === 'sync')) { - require_once('include/zot.php'); Libsync::build_sync_packet(); } diff --git a/Zotlabs/Module/Profiles.php b/Zotlabs/Module/Profiles.php index 9aa342223..452af4d78 100644 --- a/Zotlabs/Module/Profiles.php +++ b/Zotlabs/Module/Profiles.php @@ -600,7 +600,6 @@ class Profiles extends \Zotlabs\Web\Controller { intval(local_channel()) ); if($r) { - require_once('include/zot.php'); Libsync::build_sync_packet(local_channel(),array('profile' => $r)); } diff --git a/Zotlabs/Module/Rbmark.php b/Zotlabs/Module/Rbmark.php index 226cef69e..87b774495 100644 --- a/Zotlabs/Module/Rbmark.php +++ b/Zotlabs/Module/Rbmark.php @@ -6,12 +6,11 @@ require_once('include/crypto.php'); require_once('include/items.php'); require_once('include/taxonomy.php'); require_once('include/conversation.php'); -require_once('include/zot.php'); require_once('include/bookmarks.php'); /** * remote bookmark - * + * * https://yoursite/rbmark?f=&title=&url=&private=&remote_return= * * This can be called via either GET or POST, use POST for long body content as suhosin often limits GET parameter length @@ -31,45 +30,45 @@ class Rbmark extends \Zotlabs\Web\Controller { function post() { if($_POST['submit'] !== t('Save')) return; - + logger('rbmark_post: ' . print_r($_REQUEST,true)); - + $channel = \App::get_channel(); - + $t = array('url' => escape_tags($_REQUEST['url']),'term' => escape_tags($_REQUEST['title'])); bookmark_add($channel,$channel,$t,((x($_REQUEST,'private')) ? intval($_REQUEST['private']) : 0), array('menu_id' => ((x($_REQUEST,'menu_id')) ? intval($_REQUEST['menu_id']) : 0), 'menu_name' => ((x($_REQUEST,'menu_name')) ? escape_tags($_REQUEST['menu_name']) : ''), 'ischat' => ((x($_REQUEST['ischat'])) ? intval($_REQUEST['ischat']) : 0) )); - + goaway(z_root() . '/bookmarks'); - + } - - + + function get() { - + $o = ''; - + if(! local_channel()) { - + // The login procedure is going to bugger our $_REQUEST variables // so save them in the session. - + if(array_key_exists('url',$_REQUEST)) { $_SESSION['bookmark'] = $_REQUEST; } return login(); } - + // If we have saved rbmark session variables, but nothing in the current $_REQUEST, recover the saved variables - + if((! array_key_exists('url',$_REQUEST)) && (array_key_exists('bookmark',$_SESSION))) { $_REQUEST = $_SESSION['bookmark']; unset($_SESSION['bookmark']); } - + if($_REQUEST['remote_return']) { $_SESSION['remote_return'] = $_REQUEST['remote_return']; } @@ -78,12 +77,12 @@ class Rbmark extends \Zotlabs\Web\Controller { goaway($_SESSION['remote_return']); goaway(z_root() . '/bookmarks'); } - + $channel = \App::get_channel(); - - + + $m = menu_list($channel['channel_id'],'',MENU_BOOKMARK); - + $menus = array(); if($m) { $menus = array(0 => ''); @@ -92,10 +91,10 @@ class Rbmark extends \Zotlabs\Web\Controller { } } $menu_select = array('menu_id',t('Select a bookmark folder'),false,'',$menus); - - + + $o .= replace_macros(get_markup_template('rbmark.tpl'), array( - + '$header' => t('Save Bookmark'), '$url' => array('url',t('URL of bookmark'),escape_tags($_REQUEST['url'])), '$title' => array('title',t('Description'),escape_tags($_REQUEST['title'])), @@ -104,18 +103,18 @@ class Rbmark extends \Zotlabs\Web\Controller { '$submit' => t('Save'), '$menu_name' => array('menu_name',t('Or enter new bookmark folder name'),'',''), '$menus' => $menu_select - + )); - - - - - - + + + + + + return $o; - + } - - - + + + } diff --git a/Zotlabs/Module/Rpost.php b/Zotlabs/Module/Rpost.php index ff306d138..80ad289b2 100644 --- a/Zotlabs/Module/Rpost.php +++ b/Zotlabs/Module/Rpost.php @@ -8,7 +8,6 @@ require_once('include/crypto.php'); require_once('include/items.php'); require_once('include/taxonomy.php'); require_once('include/conversation.php'); -require_once('include/zot.php'); /** * remote post diff --git a/Zotlabs/Module/Settings.php b/Zotlabs/Module/Settings.php index 79031c98f..624cbb0c1 100644 --- a/Zotlabs/Module/Settings.php +++ b/Zotlabs/Module/Settings.php @@ -1,7 +1,6 @@ sm = new \Zotlabs\Web\SubModule(); } - - + + function post() { - + if(! local_channel()) return; - + if($_SESSION['delegate']) return; - + // logger('mod_settings: ' . print_r($_REQUEST,true)); - + if(argc() > 1) { if($this->sm->call('post') !== false) { return; } } - + goaway(z_root() . '/settings' ); return; // NOTREACHED } - - - + + + function get() { - + nav_set_selected('Settings'); - + if((! local_channel()) || ($_SESSION['delegate'])) { notice( t('Permission denied.') . EOL ); return login(); } - - + + $channel = \App::get_channel(); if($channel) head_set_icon($channel['xchan_photo_s']); - + $o = $this->sm->call('get'); if($o !== false) return $o; $o = ''; - - } + + } } diff --git a/Zotlabs/Module/Wfinger.php b/Zotlabs/Module/Wfinger.php index 46da7f007..6dedc1ef1 100644 --- a/Zotlabs/Module/Wfinger.php +++ b/Zotlabs/Module/Wfinger.php @@ -1,8 +1,6 @@ 1) { - for($x = 1; $x < argc(); $x ++) { + for($x = 1; $x < argc(); $x ++) { $r = q("select * from abook left join xchan on abook_xchan = xchan_hash where abook_id = %d and abook_channel = %d", intval(argv($x)), intval(local_channel()) ); - if($r) echo jindent(json_encode($r[0])) . "\n"; + if($r) echo jindent(json_encode($r[0])) . "\n"; } } else { @@ -144,12 +143,12 @@ function process_command($line) { default: break; - } + } } - + function fresh_help() { if(argc() == 1) { @@ -161,4 +160,4 @@ function fresh_help() { echo "quit|exit - terminate fresh\n"; } -} \ No newline at end of file +} diff --git a/util/pconfig b/util/pconfig index c2027adaf..13fd1e99b 100755 --- a/util/pconfig +++ b/util/pconfig @@ -14,7 +14,6 @@ if(!file_exists('include/cli_startup.php')) { require_once('include/cli_startup.php'); -require_once('include/zot.php'); cli_startup(); @@ -36,7 +35,7 @@ Usage: util/pconfig Displays all of the the channel's config entries util/pconfig - Displays all of the channel's config entries for the specified family + Displays all of the channel's config entries for the specified family (system, database, etc) util/pconfig -- cgit v1.2.3 From 9d96793e1ab93a9b0ef67eaa713e5e814ac5170c Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 27 May 2021 09:48:50 +0000 Subject: update fresh --- util/fresh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/util/fresh b/util/fresh index 173bdf2af..6e2c6f897 100755 --- a/util/fresh +++ b/util/fresh @@ -62,7 +62,7 @@ function process_command($line) { case 'help': fresh_help(); break; - +/* case 'finger': if(argv(1)) { $x = Zotlabs\Zot\Finger::run(argv(1),$channel); @@ -70,7 +70,7 @@ function process_command($line) { echo jindent($x); } break; - +*/ case 'login': if(argv(1)) { echo 'Password: '; @@ -154,7 +154,7 @@ function fresh_help() { if(argc() == 1) { echo "help - this text\n"; echo "login email_address - login with email_address, prompts for password\n"; - echo "finger channel_address - lookup channel_address remotely\n"; +// echo "finger channel_address - lookup channel_address remotely\n"; echo "channel new_channel - change active channel to new_channel (nickname)\n"; echo "conn [id1] [id2...] - without args list connections, or report detail of connection id1 (etc.)\n"; echo "quit|exit - terminate fresh\n"; -- cgit v1.2.3 From 2765a0a9fd9d243108c44b9fcfda24bcae80e703 Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 27 May 2021 10:50:53 +0000 Subject: missing includes --- Zotlabs/Daemon/Onepoll.php | 1 + Zotlabs/Lib/Activity.php | 1 + 2 files changed, 2 insertions(+) diff --git a/Zotlabs/Daemon/Onepoll.php b/Zotlabs/Daemon/Onepoll.php index 10fe395bc..9b4bee558 100644 --- a/Zotlabs/Daemon/Onepoll.php +++ b/Zotlabs/Daemon/Onepoll.php @@ -8,6 +8,7 @@ use Zotlabs\Lib\ASCollection; use Zotlabs\Lib\Libzot; require_once('include/socgraph.php'); +require_once('include/feedutils.php'); class Onepoll { diff --git a/Zotlabs/Lib/Activity.php b/Zotlabs/Lib/Activity.php index 500e99ee8..a24c17815 100644 --- a/Zotlabs/Lib/Activity.php +++ b/Zotlabs/Lib/Activity.php @@ -11,6 +11,7 @@ use Zotlabs\Web\HTTPSig; require_once('include/event.php'); require_once('include/html2plain.php'); +require_once('include/items.php'); class Activity { -- cgit v1.2.3 From d9920fce3ab136170341f34861e815cee4cab13b Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 27 May 2021 11:10:09 +0000 Subject: missing include --- include/feedutils.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/feedutils.php b/include/feedutils.php index f489030b6..d31836983 100644 --- a/include/feedutils.php +++ b/include/feedutils.php @@ -14,6 +14,8 @@ * @return string with an atom feed */ +require_once('include/items.php'); + function get_public_feed($channel, $params) { if(! $params) -- cgit v1.2.3 From 3cb0613d041a96d6348a82aa62b6629d88414575 Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 27 May 2021 11:16:29 +0000 Subject: mising use statement --- Zotlabs/Module/Admin/Queue.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Zotlabs/Module/Admin/Queue.php b/Zotlabs/Module/Admin/Queue.php index a4ce1b950..baa50591f 100644 --- a/Zotlabs/Module/Admin/Queue.php +++ b/Zotlabs/Module/Admin/Queue.php @@ -2,7 +2,7 @@ namespace Zotlabs\Module\Admin; - +use Zotlabs\Lib\Queue as LibQueue; class Queue { @@ -16,11 +16,11 @@ class Queue { if($_REQUEST['drophub']) { hubloc_mark_as_down($_REQUEST['drophub']); - Queue::remove_by_posturl($_REQUEST['drophub']); + LibQueue::remove_by_posturl($_REQUEST['drophub']); } if($_REQUEST['emptyhub']) { - Queue::remove_by_posturl($_REQUEST['emptyhub']); + LibQueue::remove_by_posturl($_REQUEST['emptyhub']); } $r = q("select count(outq_posturl) as total, max(outq_priority) as priority, outq_posturl from outq -- cgit v1.2.3 From 9d5732400fcd2624fe371889e728083ce0a7f7a2 Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 27 May 2021 11:21:30 +0000 Subject: remove mod message --- Zotlabs/Module/Message.php | 108 --------------------------------------------- 1 file changed, 108 deletions(-) delete mode 100644 Zotlabs/Module/Message.php diff --git a/Zotlabs/Module/Message.php b/Zotlabs/Module/Message.php deleted file mode 100644 index 5856bfbdf..000000000 --- a/Zotlabs/Module/Message.php +++ /dev/null @@ -1,108 +0,0 @@ - $rr['id'], - 'from_name' => $rr['from']['xchan_name'], - 'from_url' => chanlink_hash($rr['from_xchan']), - 'from_photo' => $rr['from']['xchan_photo_s'], - 'to_name' => $rr['to']['xchan_name'], - 'to_url' => chanlink_hash($rr['to_xchan']), - 'to_photo' => $rr['to']['xchan_photo_s'], - 'subject' => (($rr['seen']) ? $rr['title'] : '' . $rr['title'] . ''), - 'delete' => t('Delete conversation'), - 'body' => zidify_links(smilies(bbcode($rr['body']))), - 'date' => datetime_convert('UTC',date_default_timezone_get(),$rr['created'], t('D, d M Y - g:i A')), - 'seen' => $rr['seen'] - ); - } - - - $tpl = get_markup_template('mail_head.tpl'); - $o = replace_macros($tpl, array( - '$header' => $header, - '$messages' => $messages - )); - - - $o .= alt_pager(count($r)); - - return $o; - - return; - - } - */ - - return; - } - -} -- cgit v1.2.3 From cee2e6327808c0f6f6d1d37f95c962d682a8ecec Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 27 May 2021 11:30:27 +0000 Subject: fix typo --- Zotlabs/Module/Dreport.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Zotlabs/Module/Dreport.php b/Zotlabs/Module/Dreport.php index 2c087cdb5..50d1647c8 100644 --- a/Zotlabs/Module/Dreport.php +++ b/Zotlabs/Module/Dreport.php @@ -84,7 +84,7 @@ class Dreport extends \Zotlabs\Web\Controller { } $r = q("select * from dreport where dreport_xchan = '%s' and dreport_mid = '%s'", - dbesc($channel['channel_hash']) + dbesc($channel['channel_hash']), dbesc($mid) ); -- cgit v1.2.3 From 2db3e4ca48e4a396cc1fbade4e296bcb5c193e88 Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 27 May 2021 11:49:09 +0000 Subject: fix test --- tests/unit/includes/FeedutilsTest.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/unit/includes/FeedutilsTest.php b/tests/unit/includes/FeedutilsTest.php index e9826a73d..bda0bf425 100644 --- a/tests/unit/includes/FeedutilsTest.php +++ b/tests/unit/includes/FeedutilsTest.php @@ -4,6 +4,8 @@ namespace Zotlabs\Tests\Unit\includes; use Zotlabs\Tests\Unit\UnitTestCase; +require_once('include/feedutils.php'); + /** * @brief Unit Test case for include/feedutils.php file. */ -- cgit v1.2.3 From 7d1b240954cea20fa580912213da4be1d07ef4ba Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 27 May 2021 12:07:29 +0000 Subject: fix typo --- Zotlabs/Module/Connedit.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Zotlabs/Module/Connedit.php b/Zotlabs/Module/Connedit.php index 82cecd3e1..8910adfa8 100644 --- a/Zotlabs/Module/Connedit.php +++ b/Zotlabs/Module/Connedit.php @@ -833,7 +833,7 @@ class Connedit extends Controller { $locstr = unpunify($contact['xchan_url']); $clone_warn = ''; - $clonable = (in_array($contact['xchan_network'], ['zot6', 'rss']); + $clonable = in_array($contact['xchan_network'], ['zot6', 'rss']); if(! $clonable) { $clone_warn = ''; $clone_warn .= ((intval($contact['abook_not_here'])) -- cgit v1.2.3 From bf74a7530340e6d1566e93bd9eab56a2f1038c85 Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 27 May 2021 12:25:23 +0000 Subject: bump version --- boot.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boot.php b/boot.php index 622784e9c..bf59151bb 100644 --- a/boot.php +++ b/boot.php @@ -52,7 +52,7 @@ require_once('include/attach.php'); require_once('include/bbcode.php'); define ( 'PLATFORM_NAME', 'hubzilla' ); -define ( 'STD_VERSION', '5.7' ); +define ( 'STD_VERSION', '5.7.1' ); define ( 'ZOT_REVISION', '6.0' ); define ( 'DB_UPDATE_VERSION', 1245 ); -- cgit v1.2.3 From 2fb3d6ddf5e72b97fbbdfbc65cdaba90ff73d4b8 Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 27 May 2021 15:40:28 +0000 Subject: remove zot6/finger --- Zotlabs/Zot6/Finger.php | 145 ------------------------------------------------ 1 file changed, 145 deletions(-) delete mode 100644 Zotlabs/Zot6/Finger.php diff --git a/Zotlabs/Zot6/Finger.php b/Zotlabs/Zot6/Finger.php deleted file mode 100644 index cec3f98ab..000000000 --- a/Zotlabs/Zot6/Finger.php +++ /dev/null @@ -1,145 +0,0 @@ - true) or array('success' => false); - */ - - static public function run($webbie, $channel = null, $autofallback = true) { - - $ret = array('success' => false); - - self::$token = random_string(); - - if (strpos($webbie, '@') === false) { - $address = $webbie; - $host = \App::get_hostname(); - } else { - $address = substr($webbie,0,strpos($webbie,'@')); - $host = substr($webbie,strpos($webbie,'@')+1); - if(strpos($host,'/')) - $host = substr($host,0,strpos($host,'/')); - } - - $xchan_addr = $address . '@' . $host; - - if ((! $address) || (! $xchan_addr)) { - logger('zot_finger: no address :' . $webbie); - - return $ret; - } - - logger('using xchan_addr: ' . $xchan_addr, LOGGER_DATA, LOG_DEBUG); - - // potential issue here; the xchan_addr points to the primary hub. - // The webbie we were called with may not, so it might not be found - // unless we query for hubloc_addr instead of xchan_addr - - $r = q("select xchan.*, hubloc.* from xchan - left join hubloc on xchan_hash = hubloc_hash - where xchan_addr = '%s' and hubloc_primary = 1 limit 1", - dbesc($xchan_addr) - ); - - if($r) { - $url = $r[0]['hubloc_url']; - - if($r[0]['hubloc_network'] && $r[0]['hubloc_network'] !== 'zot') { - logger('zot_finger: alternate network: ' . $webbie); - logger('url: ' . $url . ', net: ' . var_export($r[0]['hubloc_network'],true), LOGGER_DATA, LOG_DEBUG); - return $ret; - } - } else { - $url = 'https://' . $host; - } - - $rhs = '/.well-known/zot-info'; - $https = ((strpos($url,'https://') === 0) ? true : false); - - logger('zot_finger: ' . $address . ' at ' . $url, LOGGER_DEBUG); - - if ($channel) { - $postvars = array( - 'address' => $address, - 'target' => $channel['channel_guid'], - 'target_sig' => $channel['channel_guid_sig'], - 'key' => $channel['channel_pubkey'], - 'token' => self::$token - ); - - $headers = []; - $headers['X-Zot-Channel'] = $channel['channel_address'] . '@' . \App::get_hostname(); - $headers['X-Zot-Nonce'] = random_string(); - $xhead = HTTPSig::create_sig($headers,$channel['channel_prvkey'], channel_url($channel)); - - $retries = 0; - - $result = z_post_url($url . $rhs,$postvars,$retries, [ 'headers' => $xhead ]); - - if ((! $result['success']) && ($autofallback)) { - if ($https) { - logger('zot_finger: https failed. falling back to http'); - $result = z_post_url('http://' . $host . $rhs,$postvars, $retries, [ 'headers' => $xhead ]); - } - } - } - else { - $rhs .= '?f=&address=' . urlencode($address) . '&token=' . self::$token; - - $result = z_fetch_url($url . $rhs); - if((! $result['success']) && ($autofallback)) { - if($https) { - logger('zot_finger: https failed. falling back to http'); - $result = z_fetch_url('http://' . $host . $rhs); - } - } - } - - if(! $result['success']) { - logger('zot_finger: no results'); - - return $ret; - } - - $x = json_decode($result['body'], true); - - $verify = HTTPSig::verify($result,(($x) ? $x['key'] : '')); - - if($x && (! $verify['header_valid'])) { - $signed_token = ((is_array($x) && array_key_exists('signed_token', $x)) ? $x['signed_token'] : null); - if($signed_token) { - $valid = zot_verify('token.' . self::$token, base64url_decode($signed_token), $x['key']); - if(! $valid) { - logger('invalid signed token: ' . $url . $rhs, LOGGER_NORMAL, LOG_ERR); - - return $ret; - } - } - else { - logger('No signed token from ' . $url . $rhs, LOGGER_NORMAL, LOG_WARNING); - return $ret; - } - } - - return $x; - } - -} -- cgit v1.2.3 From 3eb1b9d168644ed4fd8bca5de8360c7ededbacfc Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 27 May 2021 17:42:28 +0000 Subject: remove reply_message_request(), implement force_refresh and minor fixes --- Zotlabs/Daemon/Onepoll.php | 19 ++++----- Zotlabs/Zot6/IHandler.php | 10 ++--- Zotlabs/Zot6/Receiver.php | 18 ++++----- Zotlabs/Zot6/Zot6Handler.php | 95 ++++++-------------------------------------- 4 files changed, 34 insertions(+), 108 deletions(-) diff --git a/Zotlabs/Daemon/Onepoll.php b/Zotlabs/Daemon/Onepoll.php index 9b4bee558..4aebf64b0 100644 --- a/Zotlabs/Daemon/Onepoll.php +++ b/Zotlabs/Daemon/Onepoll.php @@ -45,7 +45,7 @@ class Onepoll { return; } - $contact = array_shift($contacts); + $contact = $contacts[0]; $importer_uid = $contact['abook_channel']; $r = q("SELECT * from channel left join xchan on channel_hash = xchan_hash where channel_id = %d limit 1", @@ -106,21 +106,20 @@ class Onepoll { return; $fetch_feed = true; - $x = null; // They haven't given us permission to see their stream - $can_view_stream = intval(get_abconfig($importer_uid, $contact['abook_xchan'], 'their_perms', 'view_stream')); - if (!$can_view_stream) + if (!$can_view_stream) { $fetch_feed = false; + } // we haven't given them permission to send us their stream - $can_send_stream = intval(get_abconfig($importer_uid, $contact['abook_xchan'], 'my_perms', 'send_stream')); - if (!$can_send_stream) + if (!$can_send_stream) { $fetch_feed = false; + } if ($fetch_feed) { @@ -129,8 +128,8 @@ class Onepoll { if (intval($max)) { $cl = get_xconfig($contact['abook_xchan'], 'activitypub', 'collections'); - if (is_array($cl) && $cl) { - $url = ((array_key_exists('outbox', $cl)) ? $cl['outbox'] : ''); + if (is_array($cl) && array_key_exists('outbox', $cl)) { + $url = $cl['outbox']; } else { $url = str_replace('/poco/', '/zotfeed/', $contact['xchan_connurl']); @@ -160,8 +159,10 @@ class Onepoll { // update the poco details for this connection $r = q("SELECT xlink_id from xlink where xlink_xchan = '%s' and xlink_updated > %s - INTERVAL %s and xlink_static = 0 limit 1", intval($contact['xchan_hash']), - db_utcnow(), db_quoteinterval('1 DAY') + db_utcnow(), + db_quoteinterval('1 DAY') ); + if (!$r) { poco_load($contact['xchan_hash'], $contact['xchan_connurl']); } diff --git a/Zotlabs/Zot6/IHandler.php b/Zotlabs/Zot6/IHandler.php index 53b6caa89..4e7738926 100644 --- a/Zotlabs/Zot6/IHandler.php +++ b/Zotlabs/Zot6/IHandler.php @@ -4,15 +4,13 @@ namespace Zotlabs\Zot6; interface IHandler { - function Notify($data,$hub); + function Notify($data, $hub); - function Request($data,$hub); + function Rekey($sender, $data, $hub); - function Rekey($sender,$data,$hub); + function Refresh($sender, $recipients, $hub, $force); - function Refresh($sender,$recipients,$hub); - - function Purge($sender,$recipients,$hub); + function Purge($sender, $recipients, $hub); } diff --git a/Zotlabs/Zot6/Receiver.php b/Zotlabs/Zot6/Receiver.php index 6440c5da5..964c61651 100644 --- a/Zotlabs/Zot6/Receiver.php +++ b/Zotlabs/Zot6/Receiver.php @@ -7,7 +7,6 @@ use Zotlabs\Lib\Crypto; use Zotlabs\Lib\Libzot; use Zotlabs\Web\HTTPSig; - class Receiver { protected $data; @@ -174,21 +173,20 @@ class Receiver { function Dispatch() { switch ($this->messagetype) { - - case 'request': - $this->response = $this->handler->Request($this->data,$this->hub); - break; - case 'purge': - $this->response = $this->handler->Purge($this->sender,$this->recipients,$this->hub); + $this->response = $this->handler->Purge($this->sender, $this->recipients, $this->hub); break; case 'refresh': - $this->response = $this->handler->Refresh($this->sender,$this->recipients,$this->hub); + $this->response = $this->handler->Refresh($this->sender, $this->recipients, $this->hub, false); + break; + + case 'force_refresh': + $this->response = $this->handler->Refresh($this->sender, $this->recipients, $this->hub, true); break; case 'rekey': - $this->response = $this->handler->Rekey($this->sender, $this->data,$this->hub); + $this->response = $this->handler->Rekey($this->sender, $this->data, $this->hub); break; case 'activity': @@ -196,7 +194,7 @@ class Receiver { case 'sync': default: if ($this->sender) { - $this->response = $this->handler->Notify($this->data,$this->hub); + $this->response = $this->handler->Notify($this->data, $this->hub); } break; diff --git a/Zotlabs/Zot6/Zot6Handler.php b/Zotlabs/Zot6/Zot6Handler.php index d95009784..32953f226 100644 --- a/Zotlabs/Zot6/Zot6Handler.php +++ b/Zotlabs/Zot6/Zot6Handler.php @@ -7,24 +7,20 @@ use Zotlabs\Lib\Queue; class Zot6Handler implements IHandler { - function Notify($data,$hub) { - return self::reply_notify($data,$hub); + function Notify($data, $hub) { + return self::reply_notify($data, $hub); } - function Request($data,$hub) { - return self::reply_message_request($data,$hub); + function Rekey($sender, $data, $hub) { + return self::reply_rekey_request($sender, $data, $hub); } - function Rekey($sender,$data,$hub) { - return self::reply_rekey_request($sender,$data,$hub); + function Refresh($sender, $recipients, $hub, $force) { + return self::reply_refresh($sender, $recipients, $hub, $force); } - function Refresh($sender,$recipients,$hub) { - return self::reply_refresh($sender,$recipients,$hub); - } - - function Purge($sender,$recipients,$hub) { - return self::reply_purge($sender,$recipients,$hub); + function Purge($sender, $recipients, $hub) { + return self::reply_purge($sender, $recipients, $hub); } @@ -38,7 +34,7 @@ class Zot6Handler implements IHandler { logger('notify received from ' . $hub['hubloc_url']); - $x = Libzot::fetch($data); + $x = Libzot::fetch($data, $hub); $ret['delivery_report'] = $x; @@ -62,7 +58,7 @@ class Zot6Handler implements IHandler { * * @return array */ - static function reply_refresh($sender, $recipients, $hub) { + static function reply_refresh($sender, $recipients, $hub, $force) { $ret = array('success' => false); if($recipients) { @@ -76,86 +72,19 @@ class Zot6Handler implements IHandler { dbesc($recip) ); /// @FIXME $msgtype is undefined - $x = Libzot::refresh( [ 'hubloc_id_url' => $hub['hubloc_id_url'] ], $r[0], (($msgtype === 'force_refresh') ? true : false)); + $x = Libzot::refresh([ 'hubloc_id_url' => $hub['hubloc_id_url']], $r[0], $force)); } } else { // system wide refresh /// @FIXME $msgtype is undefined - $x = Libzot::refresh( [ 'hubloc_id_url' => $hub['hubloc_id_url'] ], null, (($msgtype === 'force_refresh') ? true : false)); + $x = Libzot::refresh(['hubloc_id_url' => $hub['hubloc_id_url']], null, $force); } $ret['success'] = true; return $ret; } - - - /** - * @brief Process a message request. - * - * If a site receives a comment to a post but finds they have no parent to attach it with, they - * may send a 'request' packet containing the message_id of the missing parent. This is the handler - * for that packet. We will create a message_list array of the entire conversation starting with - * the missing parent and invoke delivery to the sender of the packet. - * - * Zotlabs/Daemon/Deliver.php (for local delivery) and - * mod/post.php???? @fixme (for web delivery) detect the existence of - * this 'message_list' at the destination and split it into individual messages which are - * processed/delivered in order. - * - * @param array $data - * @param array $hub - * @return array - */ - static function reply_message_request($data, $hub) { - $ret = [ 'success' => false ]; - - $message_id = EMPTY_STR; - - if(array_key_exists('data',$data)) - $ptr = $data['data']; - if(is_array($ptr) && array_key_exists(0,$ptr)) { - $ptr = $ptr[0]; - } - if(is_string($ptr)) { - $message_id = $ptr; - } - if(is_array($ptr) && array_key_exists('id',$ptr)) { - $message_id = $ptr['id']; - } - - if (! $message_id) { - $ret['message'] = 'no message_id'; - logger('no message_id'); - return $ret; - } - - $sender = $hub['hubloc_hash']; - - /* - * Find the local channel in charge of this post (the first and only recipient of the request packet) - */ - - $arr = $data['recipients'][0]; - - $c = q("select * from channel left join xchan on channel_hash = xchan_hash where channel_hash = '%s' limit 1", - dbesc($arr['portable_id']) - ); - if (! $c) { - logger('recipient channel not found.'); - $ret['message'] .= 'recipient not found.' . EOL; - return $ret; - } - - /* - * fetch the requested conversation - */ - $messages = zot_feed($c[0]['channel_id'], $sender, [ 'message_id' => $data['message_id'], 'encoding' => 'activitystreams' ]); - - return (($messages) ? : [] ); - } - static function rekey_request($sender,$data,$hub) { $ret = array('success' => false); -- cgit v1.2.3 From 190fc4e3c4cd68cc73a0509b4b6e53a7696f5a0c Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 27 May 2021 17:44:24 +0000 Subject: fix typo --- Zotlabs/Zot6/Zot6Handler.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Zotlabs/Zot6/Zot6Handler.php b/Zotlabs/Zot6/Zot6Handler.php index 32953f226..779944bf0 100644 --- a/Zotlabs/Zot6/Zot6Handler.php +++ b/Zotlabs/Zot6/Zot6Handler.php @@ -72,7 +72,7 @@ class Zot6Handler implements IHandler { dbesc($recip) ); /// @FIXME $msgtype is undefined - $x = Libzot::refresh([ 'hubloc_id_url' => $hub['hubloc_id_url']], $r[0], $force)); + $x = Libzot::refresh([ 'hubloc_id_url' => $hub['hubloc_id_url']], $r[0], $force); } } else { -- cgit v1.2.3 From 3ab8632d3bd82306b8b82f652da329af4fdd4333 Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 27 May 2021 19:20:07 +0000 Subject: update mail widgets to not require include message and minor fixes --- Zotlabs/Widget/Conversations.php | 175 +++++++++++++++++++++++++++++---------- Zotlabs/Widget/Mailmenu.php | 4 +- view/tpl/mail_conv.tpl | 6 +- view/tpl/message_side.tpl | 2 + view/tpl/msg-header.tpl | 5 +- view/tpl/prv_message.tpl | 3 + 6 files changed, 146 insertions(+), 49 deletions(-) diff --git a/Zotlabs/Widget/Conversations.php b/Zotlabs/Widget/Conversations.php index 267d50fa0..3dc260b50 100644 --- a/Zotlabs/Widget/Conversations.php +++ b/Zotlabs/Widget/Conversations.php @@ -9,67 +9,154 @@ class Conversations { if (! local_channel()) return; - if(argc() > 1) { + switch(argv(1)) { + case 'inbox': + $mailbox = 'inbox'; + $header = t('Received Messages'); + break; + case 'outbox': + $mailbox = 'outbox'; + $header = t('Sent Messages'); + break; + default: + $mailbox = 'combined'; + $header = t('Conversations'); + break; + } + + $o = ''; + + // private_messages_list() can do other more complicated stuff, for now keep it simple + $r = self::private_messages_list(local_channel(), $mailbox, \App::$pager['start'], \App::$pager['itemspage']); + + if(! $r) { + info( t('No messages.') . EOL); + return $o; + } + + $messages = []; + + foreach($r as $rr) { + + $selected = ((argc() == 3) ? intval(argv(2)) == intval($rr['id']) : $r[0]['id'] == $rr['id']); + + $messages[] = [ + 'mailbox' => $mailbox, + 'id' => $rr['id'], + 'from_name' => $rr['from']['xchan_name'], + 'from_url' => chanlink_hash($rr['from_xchan']), + 'from_photo' => $rr['from']['xchan_photo_s'], + 'to_name' => $rr['to']['xchan_name'], + 'to_url' => chanlink_hash($rr['to_xchan']), + 'to_photo' => $rr['to']['xchan_photo_s'], + 'subject' => (($rr['seen']) ? $rr['title'] : '' . $rr['title'] . ''), + 'delete' => t('Delete conversation'), + 'body' => $rr['body'], + 'date' => datetime_convert('UTC',date_default_timezone_get(),$rr['created'], 'c'), + 'seen' => $rr['seen'], + 'selected' => ((argv(1) != 'new') ? $selected : '') + ]; + } + + $tpl = get_markup_template('mail_head.tpl'); + $o .= replace_macros($tpl, [ + '$header' => $header, + '$messages' => $messages + ]); + + return $o; + } + + function private_messages_list($uid, $mailbox = '', $start = 0, $numitems = 0) { + + $where = ''; + $limit = ''; + + $t0 = dba_timer(); + + if($numitems) + $limit = " LIMIT " . intval($numitems) . " OFFSET " . intval($start); + + if($mailbox !== '') { + $x = q("select channel_hash from channel where channel_id = %d limit 1", + intval($uid) + ); + + if(! $x) + return array(); + + $channel_hash = dbesc($x[0]['channel_hash']); + $local_channel = intval(local_channel()); + + switch($mailbox) { - switch(argv(1)) { case 'inbox': - $mailbox = 'inbox'; - $header = t('Received Messages'); + $sql = "SELECT * FROM mail WHERE channel_id = $local_channel AND from_xchan != '$channel_hash' ORDER BY created DESC $limit"; break; + case 'outbox': - $mailbox = 'outbox'; - $header = t('Sent Messages'); + $sql = "SELECT * FROM mail WHERE channel_id = $local_channel AND from_xchan = '$channel_hash' ORDER BY created DESC $limit"; break; + + case 'combined': default: - $mailbox = 'combined'; - $header = t('Conversations'); + $parents = q("SELECT mail.parent_mid FROM mail LEFT JOIN conv ON mail.conv_guid = conv.guid WHERE mail.mid = mail.parent_mid AND mail.channel_id = %d ORDER BY conv.updated DESC $limit", + intval($local_channel) + ); break; } - require_once('include/message.php'); + } - $o = ''; + $r = null; - // private_messages_list() can do other more complicated stuff, for now keep it simple - $r = private_messages_list(local_channel(), $mailbox, \App::$pager['start'], \App::$pager['itemspage']); + if($parents) { + foreach($parents as $parent) { + $all = q("SELECT * FROM mail WHERE parent_mid = '%s' AND channel_id = %d ORDER BY created DESC limit 1", + dbesc($parent['parent_mid']), + intval($local_channel) + ); - if(! $r) { - info( t('No messages.') . EOL); - return $o; + if($all) { + foreach($all as $single) { + $r[] = $single; + } + } } + } + elseif($sql) { + $r = q($sql); + } - $messages = []; - - foreach($r as $rr) { - - $selected = ((argc() == 3) ? intval(argv(2)) == intval($rr['id']) : $r[0]['id'] == $rr['id']); - - $messages[] = [ - 'mailbox' => $mailbox, - 'id' => $rr['id'], - 'from_name' => $rr['from']['xchan_name'], - 'from_url' => chanlink_hash($rr['from_xchan']), - 'from_photo' => $rr['from']['xchan_photo_s'], - 'to_name' => $rr['to']['xchan_name'], - 'to_url' => chanlink_hash($rr['to_xchan']), - 'to_photo' => $rr['to']['xchan_photo_s'], - 'subject' => (($rr['seen']) ? $rr['title'] : '' . $rr['title'] . ''), - 'delete' => t('Delete conversation'), - 'body' => $rr['body'], - 'date' => datetime_convert('UTC',date_default_timezone_get(),$rr['created'], 'c'), - 'seen' => $rr['seen'], - 'selected' => ((argv(1) != 'new') ? $selected : '') - ]; - } + if(! $r) { + return array(); + } - $tpl = get_markup_template('mail_head.tpl'); - $o .= replace_macros($tpl, [ - '$header' => $header, - '$messages' => $messages - ]); + $chans = array(); + foreach($r as $rr) { + $s = "'" . dbesc(trim($rr['from_xchan'])) . "'"; + if(! in_array($s,$chans)) + $chans[] = $s; + $s = "'" . dbesc(trim($rr['to_xchan'])) . "'"; + if(! in_array($s,$chans)) + $chans[] = $s; + } + $c = q("select * from xchan where xchan_hash in (" . protect_sprintf(implode(',',$chans)) . ")"); + + foreach($r as $k => $rr) { + $r[$k]['from'] = find_xchan_in_array($rr['from_xchan'],$c); + $r[$k]['to'] = find_xchan_in_array($rr['to_xchan'],$c); + $r[$k]['seen'] = intval($rr['mail_seen']); + if(intval($r[$k]['mail_obscured'])) { + if($r[$k]['title']) + $r[$k]['title'] = base64url_decode(str_rot47($r[$k]['title'])); + if($r[$k]['body']) + $r[$k]['body'] = base64url_decode(str_rot47($r[$k]['body'])); + } } - return $o; + + return $r; } } diff --git a/Zotlabs/Widget/Mailmenu.php b/Zotlabs/Widget/Mailmenu.php index 512f7d9c0..ca022c807 100644 --- a/Zotlabs/Widget/Mailmenu.php +++ b/Zotlabs/Widget/Mailmenu.php @@ -14,7 +14,7 @@ class Mailmenu { '$combined' => array( 'label' => t('Combined View'), 'url' => z_root() . '/mail/combined', - 'sel' => (argv(1) == 'combined'), + 'sel' => (argv(1) == 'combined' || argc() == 1), ), '$inbox' => array( 'label' => t('Inbox'), @@ -26,11 +26,13 @@ class Mailmenu { 'url' => z_root() . '/mail/outbox', 'sel' => (argv(1) == 'outbox'), ), +/* '$new' => array( 'label' => t('New Message'), 'url' => z_root() . '/mail/new', 'sel'=> (argv(1) == 'new'), ) +*/ )); } } diff --git a/view/tpl/mail_conv.tpl b/view/tpl/mail_conv.tpl index b0497fe99..adc7734ec 100644 --- a/view/tpl/mail_conv.tpl +++ b/view/tpl/mail_conv.tpl @@ -24,9 +24,11 @@ diff --git a/view/tpl/msg-header.tpl b/view/tpl/msg-header.tpl index e8542b087..d49303453 100644 --- a/view/tpl/msg-header.tpl +++ b/view/tpl/msg-header.tpl @@ -1,3 +1,4 @@ +{{** @@ -73,9 +74,9 @@ function addmailtext(data) { var currentText = $("#prvmail-text").val(); $("#prvmail-text").val(currentText + data); - } + } - +**}} diff --git a/view/tpl/prv_message.tpl b/view/tpl/prv_message.tpl index b8c81539d..ea7de0b4c 100644 --- a/view/tpl/prv_message.tpl +++ b/view/tpl/prv_message.tpl @@ -1,3 +1,5 @@ +{{** + {{if $new}}
@@ -105,3 +107,4 @@
{{/if}} +**}} -- cgit v1.2.3 From 2f7e875eb4297ff1f7cdefab3a0e0ed2fb6fe08d Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 27 May 2021 19:45:34 +0000 Subject: remove mod post --- Zotlabs/Module/Post.php | 36 ------------------------------------ 1 file changed, 36 deletions(-) delete mode 100644 Zotlabs/Module/Post.php diff --git a/Zotlabs/Module/Post.php b/Zotlabs/Module/Post.php deleted file mode 100644 index 207d23e24..000000000 --- a/Zotlabs/Module/Post.php +++ /dev/null @@ -1,36 +0,0 @@ - Date: Thu, 27 May 2021 19:48:19 +0000 Subject: remove include/zot --- include/zot.php | 5400 ------------------------------------------------------- 1 file changed, 5400 deletions(-) delete mode 100644 include/zot.php diff --git a/include/zot.php b/include/zot.php deleted file mode 100644 index 5c1cde812..000000000 --- a/include/zot.php +++ /dev/null @@ -1,5400 +0,0 @@ - string, 'guid_sig' => string ); empty for public posts - * @param string $remote_key - * optional public site key of target hub used to encrypt entire packet - * NOTE: remote_key and encrypted packets are required for 'auth_check' packets, optional for all others - * @param string $methods - * optional comma separated list of encryption methods @ref zot_best_algorithm() - * @param string $secret - * random string, required for packets which require verification/callback - * e.g. 'pickup', 'purge', 'notify', 'auth_check'. Packet types 'ping', 'force_refresh', and 'refresh' do not require verification - * @param string $extra - * @returns string json encoded zot packet - */ -function zot_build_packet($channel, $type = 'notify', $recipients = null, $remote_key = null, $methods = '', $secret = null, $extra = null) { - - $sig_method = get_config('system','signature_algorithm','sha256'); - - $data = [ - 'type' => $type, - 'sender' => [ - 'guid' => $channel['channel_guid'], - 'guid_sig' => base64url_encode(Crypto::sign($channel['channel_guid'],$channel['channel_prvkey'],$sig_method)), - 'url' => z_root(), - 'url_sig' => base64url_encode(Crypto::sign(z_root(),$channel['channel_prvkey'],$sig_method)), - 'sitekey' => get_config('system','pubkey') - ], - 'callback' => '/post', - 'version' => Zotlabs\Lib\System::get_zot_revision(), - 'encryption' => Crypto::methods(), - 'signing' => Crypto::signing_methods() - ]; - - if ($recipients) { - for ($x = 0; $x < count($recipients); $x ++) - unset($recipients[$x]['hash']); - - $data['recipients'] = $recipients; - } - - if ($secret) { - $data['secret'] = preg_replace('/[^0-9a-fA-F]/','',$secret); - $data['secret_sig'] = base64url_encode(Crypto::sign($secret,$channel['channel_prvkey'],$sig_method)); - } - - if ($extra) { - foreach ($extra as $k => $v) - $data[$k] = $v; - } - - logger('zot_build_packet: ' . print_r($data,true), LOGGER_DATA, LOG_DEBUG); - - // Hush-hush ultra top-secret mode - - if($remote_key) { - $algorithm = zot_best_algorithm($methods); - $data = Crypto::encapsulate(json_encode($data),$remote_key, $algorithm); - } - - return json_encode($data); -} - - -/** - * @brief Builds a zot6 notification packet. - * - * Builds a zot6 notification packet that you can either store in the queue with - * a message array or call zot_zot to immediately zot it to the other side. - * - * @param array $channel - * sender channel structure - * @param string $type - * packet type: one of 'ping', 'pickup', 'purge', 'refresh', 'keychange', 'force_refresh', 'notify', 'auth_check' - * @param array $recipients - * envelope information, array ( 'guid' => string, 'guid_sig' => string ); empty for public posts - * @param string $msg - * optional message - * @param string $remote_key - * optional public site key of target hub used to encrypt entire packet - * NOTE: remote_key and encrypted packets are required for 'auth_check' packets, optional for all others - * @param string $methods - * optional comma separated list of encryption methods @ref zot_best_algorithm() - * @param string $secret - * random string, required for packets which require verification/callback - * e.g. 'pickup', 'purge', 'notify', 'auth_check'. Packet types 'ping', 'force_refresh', and 'refresh' do not require verification - * @param string $extra - * @returns string json encoded zot packet - */ -function zot6_build_packet($channel, $type = 'notify', $recipients = null, $msg = '', $remote_key = null, $methods = '', $secret = null, $extra = null) { - - $sig_method = get_config('system','signature_algorithm','sha256'); - - $data = [ - 'type' => $type, - 'sender' => [ - 'guid' => $channel['channel_guid'], - 'guid_sig' => base64url_encode(Crypto::sign($channel['channel_guid'],$channel['channel_prvkey'],$sig_method)), - 'url' => z_root(), - 'url_sig' => base64url_encode(Crypto::sign(z_root(),$channel['channel_prvkey'],$sig_method)), - 'sitekey' => get_config('system','pubkey') - ], - 'callback' => '/post', - 'version' => Zotlabs\Lib\System::get_zot_revision(), - 'encryption' => Crypto::methods(), - 'signing' => Crypto::signing_methods() - ]; - - if ($recipients) { - for ($x = 0; $x < count($recipients); $x ++) - unset($recipients[$x]['hash']); - - $data['recipients'] = $recipients; - } - - if($msg) { - $data['msg'] = $msg; - } - - if ($secret) { - $data['secret'] = preg_replace('/[^0-9a-fA-F]/','',$secret); - $data['secret_sig'] = base64url_encode(Crypto::sign($secret,$channel['channel_prvkey'],$sig_method)); - } - - if ($extra) { - foreach ($extra as $k => $v) - $data[$k] = $v; - } - - logger('zot6_build_packet: ' . print_r($data,true), LOGGER_DATA, LOG_DEBUG); - - // Hush-hush ultra top-secret mode - - if($remote_key) { - $algorithm = zot_best_algorithm($methods); - $data = Crypto::encapsulate(json_encode($data),$remote_key, $algorithm); - } - - return json_encode($data); -} - - - - -/** - * @brief Choose best encryption function from those available on both sites. - * - * @param string $methods - * comma separated list of encryption methods - * @return string first match from our site method preferences Crypto::methods() array - * of a method which is common to both sites; or 'aes256cbc' if no matches are found. - */ -function zot_best_algorithm($methods) { - - $x = [ - 'methods' => $methods, - 'result' => '' - ]; - /** - * @hooks zot_best_algorithm - * Called when negotiating crypto algorithms with remote sites. - * * \e string \b methods - comma separated list of encryption methods - * * \e string \b result - the algorithm to return - */ - call_hooks('zot_best_algorithm', $x); - - if($x['result']) - return $x['result']; - - if($methods) { - $x = explode(',', $methods); - if($x) { - $y = Crypto::methods(); - if($y) { - foreach($y as $yv) { - $yv = trim($yv); - if(in_array($yv, $x)) { - return($yv); - } - } - } - } - } - - return 'aes256cbc'; -} - - -/** - * @brief - * - * @see z_post_url() - * - * @param string $url - * @param array $data - * @param array $channel (optional if using zot6 delivery) - * @param array $crypto (optional if encrypted httpsig, requires hubloc_sitekey and site_crypto elements) - * @return array see z_post_url() for returned data format - */ -function zot_zot($url, $data, $channel = null,$crypto = null) { - - $headers = []; - - if($channel) { - $headers['X-Zot-Token'] = random_string(); - $headers['X-Zot-Digest'] = \Zotlabs\Web\HTTPSig::generate_digest_header($data); - $h = \Zotlabs\Web\HTTPSig::create_sig($headers,$channel['channel_prvkey'],'acct:' . channel_reddress($channel),false,'sha512',(($crypto) ? [ 'key' => $crypto['hubloc_sitekey'], 'algorithm' => $crypto['site_crypto'] ] : false)); - } - - $redirects = 0; - return z_post_url($url, array('data' => $data),$redirects,((empty($h)) ? [] : [ 'headers' => $h ])); -} - -/** - * @brief Refreshes after permission changed or friending, etc. - * - * The top half of this function is similar to \\Zotlabs\\Zot\\Finger::run() and could potentially be - * consolidated. - * - * zot_refresh is typically invoked when somebody has changed permissions of a channel and they are notified - * to fetch new permissions via a finger/discovery operation. This may result in a new connection - * (abook entry) being added to a local channel and it may result in auto-permissions being granted. - * - * Friending in zot is accomplished by sending a refresh packet to a specific channel which indicates a - * permission change has been made by the sender which affects the target channel. The hub controlling - * the target channel does targetted discovery (a zot-finger request requesting permissions for the local - * channel). These are decoded here, and if necessary and abook structure (addressbook) is created to store - * the permissions assigned to this channel. - * - * Initially these abook structures are created with a 'pending' flag, so that no reverse permissions are - * implied until this is approved by the owner channel. A channel can also auto-populate permissions in - * return and send back a refresh packet of its own. This is used by forum and group communication channels - * so that friending and membership in the channel's "club" is automatic. - * - * @param array $them => xchan structure of sender - * @param array $channel => local channel structure of target recipient, required for "friending" operations - * @param array $force (optional) default false - * - * @return boolean - * * \b true if successful - * * otherwise \b false - */ -function zot_refresh($them, $channel = null, $force = false) { - - if (array_key_exists('xchan_network', $them) && ($them['xchan_network'] !== 'zot')) { - logger('not got zot. ' . $them['xchan_name']); - return true; - } - - logger('them: ' . print_r($them,true), LOGGER_DATA, LOG_DEBUG); - if ($channel) - logger('channel: ' . print_r($channel,true), LOGGER_DATA, LOG_DEBUG); - - $url = null; - - if ($them['hubloc_url']) { - $url = $them['hubloc_url']; - } - else { - $r = null; - - // if they re-installed the server we could end up with the wrong record - pointing to the old install. - // We'll order by reverse id to try and pick off the newest one first and hopefully end up with the - // correct hubloc. If this doesn't work we may have to re-write this section to try them all. - - if(array_key_exists('xchan_addr',$them) && $them['xchan_addr']) { - $r = q("select hubloc_url, hubloc_primary from hubloc where hubloc_addr = '%s' order by hubloc_id desc", - dbesc($them['xchan_addr']) - ); - } - if(! $r) { - $r = q("select hubloc_url, hubloc_primary from hubloc where hubloc_hash = '%s' order by hubloc_id desc", - dbesc($them['xchan_hash']) - ); - } - - if ($r) { - foreach ($r as $rr) { - if (intval($rr['hubloc_primary'])) { - $url = $rr['hubloc_url']; - break; - } - } - if (! $url) - $url = $r[0]['hubloc_url']; - } - } - if (! $url) { - logger('zot_refresh: no url'); - return false; - } - - $s = q("select site_dead from site where site_url = '%s' limit 1", - dbesc($url) - ); - - if($s && intval($s[0]['site_dead']) && (! $force)) { - logger('zot_refresh: site ' . $url . ' is marked dead and force flag is not set. Cancelling operation.'); - return false; - } - - - $token = random_string(); - - $postvars = []; - - $postvars['token'] = $token; - - if($channel) { - $postvars['target'] = $channel['xchan_guid']; - $postvars['target_sig'] = str_replace('sha256.', '', $channel['xchan_guid_sig']); - $postvars['key'] = $channel['channel_pubkey']; - } - - if (array_key_exists('xchan_addr',$them) && $them['xchan_addr']) - $postvars['address'] = $them['xchan_addr']; - if (array_key_exists('xchan_hash',$them) && $them['xchan_hash']) - $postvars['guid_hash'] = $them['xchan_hash']; - if (array_key_exists('xchan_guid',$them) && $them['xchan_guid'] - && array_key_exists('xchan_guid_sig',$them) && $them['xchan_guid_sig']) { - $postvars['guid'] = $them['xchan_guid']; - $postvars['guid_sig'] = $them['xchan_guid_sig']; - } - - $rhs = '/.well-known/zot-info'; - - logger('zot_refresh: ' . $url, LOGGER_DATA, LOG_INFO); - - $result = z_post_url($url . $rhs,$postvars); - - if ($result['success']) { - - $j = json_decode($result['body'],true); - - if (! (($j) && ($j['success']))) { - logger('Result not decodable'); - return false; - } - - logger('zot-info: ' . print_r($result,true), LOGGER_DATA, LOG_DEBUG); - - $signed_token = ((is_array($j) && array_key_exists('signed_token',$j)) ? $j['signed_token'] : null); - if($signed_token) { - $valid = Crypto::verify('token.' . $token,base64url_decode($signed_token),$j['key']); - if(! $valid) { - logger('invalid signed token: ' . $url . $rhs, LOGGER_NORMAL, LOG_ERR); - return false; - } - } - else { - logger('No signed token from ' . $url . $rhs, LOGGER_NORMAL, LOG_WARNING); - return false; - } - - $x = import_xchan($j, (($force) ? UPDATE_FLAGS_FORCED : UPDATE_FLAGS_UPDATED)); - - if(! $x['success']) - return false; - - if($channel) { - if($j['permissions']['data']) { - $permissions = Crypto::unencapsulate( - [ - 'encrypted' => true, - 'data' => $j['permissions']['data'], - 'key' => $j['permissions']['key'], - 'iv' => $j['permissions']['iv'], - 'alg' => $j['permissions']['alg'] - ], - $channel['channel_prvkey']); - if($permissions) { - $permissions = json_decode($permissions,true); - } - logger('decrypted permissions: ' . print_r($permissions,true), LOGGER_DATA, LOG_DEBUG); - } - else - $permissions = $j['permissions']; - - if($permissions && is_array($permissions)) { - $old_read_stream_perm = get_abconfig($channel['channel_id'],$x['hash'],'their_perms','view_stream'); - - foreach($permissions as $k => $v) { - set_abconfig($channel['channel_id'],$x['hash'],'their_perms',$k,$v); - } - } - - if(array_key_exists('profile',$j) && array_key_exists('next_birthday',$j['profile'])) { - $next_birthday = datetime_convert('UTC','UTC',$j['profile']['next_birthday']); - } - else { - $next_birthday = NULL_DATE; - } - - $profile_assign = get_pconfig($channel['channel_id'],'system','profile_assign',''); - - // Keep original perms to check if we need to notify them - $previous_perms = get_all_perms($channel['channel_id'],$x['hash'],false); - - $r = q("select * from abook where abook_xchan = '%s' and abook_channel = %d and abook_self = 0 limit 1", - dbesc($x['hash']), - intval($channel['channel_id']) - ); - - if($r) { - - // connection exists - - // if the dob is the same as what we have stored (disregarding the year), keep the one - // we have as we may have updated the year after sending a notification; and resetting - // to the one we just received would cause us to create duplicated events. - - if(substr($r[0]['abook_dob'],5) == substr($next_birthday,5)) - $next_birthday = $r[0]['abook_dob']; - - $y = q("update abook set abook_dob = '%s' - where abook_xchan = '%s' and abook_channel = %d - and abook_self = 0 ", - dbescdate($next_birthday), - dbesc($x['hash']), - intval($channel['channel_id']) - ); - - if(! $y) - logger('abook update failed'); - else { - // if we were just granted read stream permission and didn't have it before, try to pull in some posts - if((! $old_read_stream_perm) && (intval($permissions['view_stream']))) - Zotlabs\Daemon\Master::Summon(array('Onepoll',$r[0]['abook_id'])); - } - } - else { - - $p = \Zotlabs\Access\Permissions::connect_perms($channel['channel_id']); - - $my_perms = $p['perms']; - $automatic = $p['automatic']; - - // new connection - - if($my_perms) { - foreach($my_perms as $k => $v) { - set_abconfig($channel['channel_id'],$x['hash'],'my_perms',$k,$v); - } - } - - $closeness = get_pconfig($channel['channel_id'],'system','new_abook_closeness'); - if($closeness === false) - $closeness = 80; - - $y = abook_store_lowlevel( - [ - 'abook_account' => intval($channel['channel_account_id']), - 'abook_channel' => intval($channel['channel_id']), - 'abook_closeness' => intval($closeness), - 'abook_xchan' => $x['hash'], - 'abook_profile' => $profile_assign, - 'abook_created' => datetime_convert(), - 'abook_updated' => datetime_convert(), - 'abook_dob' => $next_birthday, - 'abook_pending' => intval(($automatic) ? 0 : 1) - ] - ); - - if($y) { - logger("New introduction received for {$channel['channel_name']}"); - $new_perms = get_all_perms($channel['channel_id'],$x['hash'],false); - - // Send a clone sync packet and a permissions update if permissions have changed - - $new_connection = q("select * from abook left join xchan on abook_xchan = xchan_hash where abook_xchan = '%s' and abook_channel = %d and abook_self = 0 order by abook_created desc limit 1", - dbesc($x['hash']), - intval($channel['channel_id']) - ); - - if($new_connection) { - if(! \Zotlabs\Access\Permissions::PermsCompare($new_perms,$previous_perms)) - Zotlabs\Daemon\Master::Summon(array('Notifier','permission_create',$new_connection[0]['abook_id'])); - Zotlabs\Lib\Enotify::submit( - [ - 'type' => NOTIFY_INTRO, - 'from_xchan' => $x['hash'], - 'to_xchan' => $channel['channel_portable_id'], - 'link' => z_root() . '/connedit/' . $new_connection[0]['abook_id'] - ] - ); - - if(intval($permissions['view_stream'])) { - if(intval(get_pconfig($channel['channel_id'],'perm_limits','send_stream') & PERMS_PENDING) - || (! intval($new_connection[0]['abook_pending']))) - Zotlabs\Daemon\Master::Summon(array('Onepoll',$new_connection[0]['abook_id'])); - } - - - // If there is a default group for this channel, add this connection to it - // for pending connections this will happens at acceptance time. - - if(! intval($new_connection[0]['abook_pending'])) { - $default_group = $channel['channel_default_group']; - if($default_group) { - require_once('include/group.php'); - $g = group_rec_byhash($channel['channel_id'],$default_group); - if($g) - group_add_member($channel['channel_id'],'',$x['hash'],$g['id']); - } - } - - unset($new_connection[0]['abook_id']); - unset($new_connection[0]['abook_account']); - unset($new_connection[0]['abook_channel']); - - $abconfig = load_abconfig($channel['channel_id'],$new_connection['abook_xchan']); - if($abconfig) - $new_connection['abconfig'] = $abconfig; - - build_sync_packet($channel['channel_id'], array('abook' => $new_connection)); - } - } - } - } - return true; - } - - return false; -} - -/** - * @brief Look up if channel is known and previously verified. - * - * A guid and a url, both signed by the sender, distinguish a known sender at a - * known location. - * This function looks these up to see if the channel is known and therefore - * previously verified. If not, we will need to verify it. - * - * @param array $arr an associative array which must contain: - * * \e string \b guid => guid of conversant - * * \e string \b guid_sig => guid signed with conversant's private key - * * \e string \b url => URL of the origination hub of this communication - * * \e string \b url_sig => URL signed with conversant's private key - * @param boolean $multiple (optional) default false - * - * @return array|null - * * null if site is blacklisted or not found - * * otherwise an array with an hubloc record - */ -function zot_gethub($arr, $multiple = false) { - - if($arr['guid'] && $arr['guid_sig'] && $arr['url'] && $arr['url_sig']) { - - if(! check_siteallowed($arr['url'])) { - logger('blacklisted site: ' . $arr['url']); - return null; - } - - $limit = (($multiple) ? '' : ' limit 1 '); - $sitekey = ((array_key_exists('sitekey',$arr) && $arr['sitekey']) ? " and hubloc_sitekey = '" . dbesc(protect_sprintf($arr['sitekey'])) . "' " : ''); - - $r = q("select hubloc.*, site.site_crypto from hubloc left join site on hubloc_url = site_url - where hubloc_guid = '%s' and hubloc_guid_sig = '%s' - and hubloc_url = '%s' and hubloc_url_sig = '%s' and hubloc_network = 'zot' - $sitekey $limit", - dbesc($arr['guid']), - dbesc($arr['guid_sig']), - dbesc($arr['url']), - dbesc($arr['url_sig']) - ); - if($r) { - logger('Found', LOGGER_DEBUG); - return (($multiple) ? $r : $r[0]); - } - } - logger('Not found: ' . print_r($arr,true), LOGGER_DEBUG); - - return false; -} - -/** - * @brief Registers an unknown hub. - * - * A communication has been received which has an unknown (to us) sender. - * Perform discovery based on our calculated hash of the sender at the - * origination address. This will fetch the discovery packet of the sender, - * which contains the public key we need to verify our guid and url signatures. - * - * @param array $arr an associative array which must contain: - * * \e string \b guid => guid of conversant - * * \e string \b guid_sig => guid signed with conversant's private key - * * \e string \b url => URL of the origination hub of this communication - * * \e string \b url_sig => URL signed with conversant's private key - * - * @return array An associative array with - * * \b success boolean true or false - * * \b message (optional) error string only if success is false - */ -function zot_register_hub($arr) { - - $result = [ 'success' => false ]; - - if($arr['url'] && $arr['url_sig'] && $arr['guid'] && $arr['guid_sig']) { - - $sig_methods = ((array_key_exists('signing',$arr) && is_array($arr['signing'])) ? $arr['signing'] : [ 'sha256' ]); - - $guid_hash = make_xchan_hash($arr['guid'],$arr['guid_sig']); - - $url = $arr['url'] . '/.well-known/zot-info/?f=&guid_hash=' . $guid_hash; - - logger('zot_register_hub: ' . $url, LOGGER_DEBUG); - - $x = z_fetch_url($url); - - logger('zot_register_hub: ' . print_r($x,true), LOGGER_DATA, LOG_DEBUG); - - if($x['success']) { - $record = json_decode($x['body'],true); - - /* - * We now have a key - only continue registration if our signatures are valid - * AND the guid and guid sig in the returned packet match those provided in - * our current communication. - */ - - foreach($sig_methods as $method) { - if((Crypto::verify($arr['guid'],base64url_decode($arr['guid_sig']),$record['key'],$method)) - && (Crypto::verify($arr['url'],base64url_decode($arr['url_sig']),$record['key'],$method)) - && ($arr['guid'] === $record['guid']) - && ($arr['guid_sig'] === $record['guid_sig'])) { - $c = import_xchan($record); - if($c['success']) - $result['success'] = true; - } - else { - logger('Failure to verify returned packet using ' . $method); - } - } - } - } - - return $result; -} - -/** - * @brief Takes an associative array of a fetched discovery packet and updates - * all internal data structures which need to be updated as a result. - * - * @param array $arr => json_decoded discovery packet - * @param int $ud_flags - * Determines whether to create a directory update record if any changes occur, default is UPDATE_FLAGS_UPDATED - * $ud_flags = UPDATE_FLAGS_FORCED indicates a forced refresh where we unconditionally create a directory update record - * this typically occurs once a month for each channel as part of a scheduled ping to notify the directory - * that the channel still exists - * @param array $ud_arr - * If set [typically by update_directory_entry()] indicates a specific update table row and more particularly - * contains a particular address (ud_addr) which needs to be updated in that table. - * - * @return array An associative array with: - * * \e boolean \b success boolean true or false - * * \e string \b message (optional) error string only if success is false - */ -function import_xchan($arr, $ud_flags = UPDATE_FLAGS_UPDATED, $ud_arr = null) { - - /** - * @hooks import_xchan - * Called when processing the result of zot_finger() to store the result - * * \e array - */ - call_hooks('import_xchan', $arr); - - $ret = array('success' => false); - $dirmode = intval(get_config('system','directory_mode')); - - $changed = false; - $what = ''; - - if(! (is_array($arr) && array_key_exists('success',$arr) && $arr['success'])) { - logger('Invalid data packet: ' . print_r($arr,true)); - $ret['message'] = t('Invalid data packet'); - return $ret; - } - - if(! ($arr['guid'] && $arr['guid_sig'])) { - logger('No identity information provided. ' . print_r($arr,true)); - return $ret; - } - - $xchan_hash = make_xchan_hash($arr['guid'],$arr['guid_sig']); - $arr['hash'] = $xchan_hash; - - $import_photos = false; - - $sig_methods = ((array_key_exists('signing',$arr) && is_array($arr['signing'])) ? $arr['signing'] : [ 'sha256' ]); - $verified = false; - - foreach($sig_methods as $method) { - if(! Crypto::verify($arr['guid'],base64url_decode($arr['guid_sig']),$arr['key'],$method)) { - logger('Unable to verify channel signature for ' . $arr['address'] . ' using ' . $method); - continue; - } - else { - $verified = true; - } - } - if(! $verified) { - $ret['message'] = t('Unable to verify channel signature'); - return $ret; - } - - logger('import_xchan: ' . $xchan_hash, LOGGER_DEBUG); - - $r = q("select * from xchan where xchan_hash = '%s' limit 1", - dbesc($xchan_hash) - ); - - if(! array_key_exists('connect_url', $arr)) - $arr['connect_url'] = ''; - - if(strpos($arr['address'],'/') !== false) - $arr['address'] = substr($arr['address'],0,strpos($arr['address'],'/')); - - if($r) { - if($r[0]['xchan_photo_date'] != $arr['photo_updated']) - $import_photos = true; - - // if we import an entry from a site that's not ours and either or both of us is off the grid - hide the entry. - /** @TODO: check if we're the same directory realm, which would mean we are allowed to see it */ - - $dirmode = get_config('system','directory_mode'); - - if((($arr['site']['directory_mode'] === 'standalone') || ($dirmode & DIRECTORY_MODE_STANDALONE)) && ($arr['site']['url'] != z_root())) - $arr['searchable'] = false; - - $hidden = (1 - intval($arr['searchable'])); - - $hidden_changed = $adult_changed = $deleted_changed = $pubforum_changed = 0; - - if(intval($r[0]['xchan_hidden']) != (1 - intval($arr['searchable']))) - $hidden_changed = 1; - if(intval($r[0]['xchan_selfcensored']) != intval($arr['adult_content'])) - $adult_changed = 1; - if(intval($r[0]['xchan_deleted']) != intval($arr['deleted'])) - $deleted_changed = 1; - if(intval($r[0]['xchan_pubforum']) != intval($arr['public_forum'])) - $pubforum_changed = 1; - - if($arr['protocols']) { - $protocols = implode(',',$arr['protocols']); - if($protocols !== 'zot') { - set_xconfig($xchan_hash,'system','protocols',$protocols); - } - else { - del_xconfig($xchan_hash,'system','protocols'); - } - } - - if(($r[0]['xchan_name_date'] != $arr['name_updated']) - || ($r[0]['xchan_connurl'] != $arr['connections_url']) - || ($r[0]['xchan_addr'] != $arr['address']) - || ($r[0]['xchan_follow'] != $arr['follow_url']) - || ($r[0]['xchan_connpage'] != $arr['connect_url']) - || ($r[0]['xchan_url'] != $arr['url']) - || $hidden_changed || $adult_changed || $deleted_changed || $pubforum_changed ) { - $rup = q("update xchan set xchan_name = '%s', xchan_name_date = '%s', xchan_connurl = '%s', xchan_follow = '%s', - xchan_connpage = '%s', xchan_hidden = %d, xchan_selfcensored = %d, xchan_deleted = %d, xchan_pubforum = %d, - xchan_addr = '%s', xchan_url = '%s' where xchan_hash = '%s'", - dbesc(($arr['name']) ? $arr['name'] : '-'), - dbesc($arr['name_updated']), - dbesc($arr['connections_url']), - dbesc($arr['follow_url']), - dbesc($arr['connect_url']), - intval(1 - intval($arr['searchable'])), - intval($arr['adult_content']), - intval($arr['deleted']), - intval($arr['public_forum']), - dbesc($arr['address']), - dbesc($arr['url']), - dbesc($xchan_hash) - ); - - logger('Update: existing: ' . print_r($r[0],true), LOGGER_DATA, LOG_DEBUG); - logger('Update: new: ' . print_r($arr,true), LOGGER_DATA, LOG_DEBUG); - $what .= 'xchan '; - $changed = true; - } - } - else { - $import_photos = true; - - if((($arr['site']['directory_mode'] === 'standalone') - || ($dirmode & DIRECTORY_MODE_STANDALONE)) - && ($arr['site']['url'] != z_root())) - $arr['searchable'] = false; - - $x = xchan_store_lowlevel( - [ - 'xchan_hash' => $xchan_hash, - 'xchan_guid' => $arr['guid'], - 'xchan_guid_sig' => $arr['guid_sig'], - 'xchan_pubkey' => $arr['key'], - 'xchan_photo_mimetype' => $arr['photo_mimetype'], - 'xchan_photo_l' => $arr['photo'], - 'xchan_addr' => $arr['address'], - 'xchan_url' => $arr['url'], - 'xchan_connurl' => $arr['connections_url'], - 'xchan_follow' => $arr['follow_url'], - 'xchan_connpage' => $arr['connect_url'], - 'xchan_name' => (($arr['name']) ? $arr['name'] : '-'), - 'xchan_network' => 'zot', - 'xchan_photo_date' => $arr['photo_updated'], - 'xchan_name_date' => $arr['name_updated'], - 'xchan_hidden' => intval(1 - intval($arr['searchable'])), - 'xchan_selfcensored' => $arr['adult_content'], - 'xchan_deleted' => $arr['deleted'], - 'xchan_pubforum' => $arr['public_forum'] - ] - ); - - $what .= 'new_xchan'; - $changed = true; - } - - if($import_photos) { - - require_once('include/photo/photo_driver.php'); - - // see if this is a channel clone that's hosted locally - which we treat different from other xchans/connections - - $local = q("select channel_account_id, channel_id from channel where channel_portable_id = '%s' limit 1", - dbesc($xchan_hash) - ); - - if($local) { - // @FIXME This should be removed in future when profile photo update by file sync procedure will be applied - // on most hubs in the network - // <--- - $ph = z_fetch_url($arr['photo'], true); - - if($ph['success']) { - - // Do not fetch already received thumbnails - $x = q("SELECT resource_id FROM photo WHERE uid = %d AND imgscale = %d AND filesize = %d LIMIT 1", - intval($local[0]['channel_id']), - intval(PHOTO_RES_PROFILE_300), - strlen($ph['body']) - ); - - if($x) - $hash = $x[0]['resource_id']; - else - $hash = import_channel_photo($ph['body'], $arr['photo_mimetype'], $local[0]['channel_account_id'], $local[0]['channel_id']); - } - - if($hash) { - // unless proven otherwise - $is_default_profile = 1; - - $profile = q("select is_default from profile where aid = %d and uid = %d limit 1", - intval($local[0]['channel_account_id']), - intval($local[0]['channel_id']) - ); - if($profile) { - if(! intval($profile[0]['is_default'])) - $is_default_profile = 0; - } - - // If setting for the default profile, unset the profile photo flag from any other photos I own - if($is_default_profile) { - q("UPDATE photo SET photo_usage = %d WHERE photo_usage = %d AND resource_id != '%s' AND aid = %d AND uid = %d", - intval(PHOTO_NORMAL), - intval(PHOTO_PROFILE), - dbesc($hash), - intval($local[0]['channel_account_id']), - intval($local[0]['channel_id']) - ); - } - } - // ---> - - // reset the names in case they got messed up when we had a bug in this function - $photos = array( - z_root() . '/photo/profile/l/' . $local[0]['channel_id'], - z_root() . '/photo/profile/m/' . $local[0]['channel_id'], - z_root() . '/photo/profile/s/' . $local[0]['channel_id'], - $arr['photo_mimetype'], - false - ); - } - else { - $photos = import_xchan_photo($arr['photo'], $xchan_hash); - } - if($photos) { - if($photos[4]) { - // importing the photo failed somehow. Leave the photo_date alone so we can try again at a later date. - // This often happens when somebody joins the matrix with a bad cert. - $r = q("update xchan set xchan_photo_l = '%s', xchan_photo_m = '%s', xchan_photo_s = '%s', xchan_photo_mimetype = '%s' - where xchan_hash = '%s'", - dbesc($photos[0]), - dbesc($photos[1]), - dbesc($photos[2]), - dbesc($photos[3]), - dbesc($xchan_hash) - ); - } - else { - $r = q("update xchan set xchan_photo_date = '%s', xchan_photo_l = '%s', xchan_photo_m = '%s', xchan_photo_s = '%s', xchan_photo_mimetype = '%s' - where xchan_hash = '%s'", - dbescdate(datetime_convert('UTC','UTC',$arr['photo_updated'])), - dbesc($photos[0]), - dbesc($photos[1]), - dbesc($photos[2]), - dbesc($photos[3]), - dbesc($xchan_hash) - ); - } - $what .= 'photo '; - $changed = true; - } - } - - // what we are missing for true hub independence is for any changes in the primary hub to - // get reflected not only in the hublocs, but also to update the URLs and addr in the appropriate xchan - - $s = sync_locations($arr, $arr); - - if($s) { - if($s['change_message']) - $what .= $s['change_message']; - if($s['changed']) - $changed = $s['changed']; - if($s['message']) - $ret['message'] .= $s['message']; - } - - // Which entries in the update table are we interested in updating? - - $address = (($ud_arr && $ud_arr['ud_addr']) ? $ud_arr['ud_addr'] : $arr['address']); - - - // Are we a directory server of some kind? - - $other_realm = false; - $realm = get_directory_realm(); - if(array_key_exists('site',$arr) - && array_key_exists('realm',$arr['site']) - && (strpos($arr['site']['realm'],$realm) === false)) - $other_realm = true; - - if($dirmode != DIRECTORY_MODE_NORMAL) { - - // We're some kind of directory server. However we can only add directory information - // if the entry is in the same realm (or is a sub-realm). Sub-realms are denoted by - // including the parent realm in the name. e.g. 'RED_GLOBAL:foo' would allow an entry to - // be in directories for the local realm (foo) and also the RED_GLOBAL realm. - - if(array_key_exists('profile',$arr) && is_array($arr['profile']) && (! $other_realm)) { - $profile_changed = import_directory_profile($xchan_hash,$arr['profile'],$address,$ud_flags, 1); - if($profile_changed) { - $what .= 'profile '; - $changed = true; - } - } - else { - logger('Profile not available - hiding'); - // they may have made it private - $r = q("delete from xprof where xprof_hash = '%s'", - dbesc($xchan_hash) - ); - $r = q("delete from xtag where xtag_hash = '%s' and xtag_flags = 0", - dbesc($xchan_hash) - ); - } - } - - if(array_key_exists('site',$arr) && is_array($arr['site'])) { - $profile_changed = import_site($arr['site'],$arr['key']); - if($profile_changed) { - $what .= 'site '; - $changed = true; - } - } - - if(($changed) || ($ud_flags == UPDATE_FLAGS_FORCED)) { - $guid = random_string() . '@' . App::get_hostname(); - update_modtime($xchan_hash,$guid,$address,$ud_flags); - logger('Changed: ' . $what,LOGGER_DEBUG); - } - elseif(! $ud_flags) { - // nothing changed but we still need to update the updates record - q("update updates set ud_flags = ( ud_flags | %d ) where ud_addr = '%s' and not (ud_flags & %d) > 0 ", - intval(UPDATE_FLAGS_UPDATED), - dbesc($address), - intval(UPDATE_FLAGS_UPDATED) - ); - } - - if(! x($ret,'message')) { - $ret['success'] = true; - $ret['hash'] = $xchan_hash; - } - - logger('Result: ' . print_r($ret,true), LOGGER_DATA, LOG_DEBUG); - return $ret; -} - -/** - * @brief Called immediately after sending a zot message which is using queue processing. - * - * Updates the queue item according to the response result and logs any information - * returned to aid communications troubleshooting. - * - * @param string $hub - url of site we just contacted - * @param array $arr - output of z_post_url() - * @param array $outq - The queue structure attached to this request - */ -function zot_process_response($hub, $arr, $outq) { - - if(! $arr['success']) { - logger('Failed: ' . $hub); - return; - } - - $dreport = true; - - $x = json_decode($arr['body'], true); - - if(! $x) { - logger('No json from ' . $hub); - logger('Headers: ' . print_r($arr['header'], true), LOGGER_DATA, LOG_DEBUG); - } - - if(is_array($x) && array_key_exists('delivery_report',$x) && is_array($x['delivery_report'])) { - - if(array_key_exists('iv',$x['delivery_report'])) { - $x['delivery_report']['encrypted'] = true; - $j = Crypto::unencapsulate($x['delivery_report'],get_config('system','prvkey')); - if($j) { - $x['delivery_report'] = json_decode($j,true); - } - if(! (is_array($x['delivery_report']) && count($x['delivery_report']))) { - logger('encrypted delivery report could not be decrypted'); - $dreport = false; - } - } - - if($dreport) { - foreach($x['delivery_report'] as $xx) { - call_hooks('dreport_process',$xx); - if(is_array($xx) && array_key_exists('message_id',$xx) && DReport::is_storable($xx)) { - - // legacy zot recipients add a space and their name to the xchan. split those if true. - $legacy_recipient = strpos($xx['recipient'], ' '); - if($legacy_recipient !== false) { - $legacy_recipient_parts = explode(' ', $xx['recipient'], 2); - $xx['recipient'] = $legacy_recipient_parts[0]; - $xx['name'] = $legacy_recipient_parts[1]; - } - - q("insert into dreport ( dreport_mid, dreport_site, dreport_recip, dreport_name, dreport_result, dreport_time, dreport_xchan ) values ( '%s', '%s','%s','%s','%s','%s','%s' ) ", - dbesc($xx['message_id']), - dbesc($xx['location']), - dbesc($xx['recipient']), - dbesc($xx['name']), - dbesc($xx['status']), - dbesc(datetime_convert('UTC','UTC',$xx['date'])), - dbesc($xx['sender']) - ); - } - } - } - } - - - if($dreport) { - // we have a more descriptive delivery report, so discard the per hub 'queued' report. - q("delete from dreport where dreport_queue = '%s' ", - dbesc($outq['outq_hash']) - ); - } - - // update the timestamp for this site - - q("update site set site_dead = 0, site_update = '%s' where site_url = '%s'", - dbesc(datetime_convert()), - dbesc(dirname($hub)) - ); - - // synchronous message types are handled immediately - // async messages remain in the queue until processed. - - if(intval($outq['outq_async'])) - remove_queue_item($outq['outq_hash'],$outq['outq_channel']); - - logger('zot_process_response: ' . print_r($x,true), LOGGER_DEBUG); -} - -/** - * @brief - * - * We received a notification packet (in mod_post) that a message is waiting for us, and we've verified the sender. - * Check if the site is using zot6 delivery and includes a verified HTTP Signature, signed content, and a 'msg' field, - * and also that the signer and the sender match. - * If that happens, we do not need to fetch/pickup the message - we have it already and it is verified. - * Translate it into the form we need for zot_import() and import it. - * - * Otherwise send back a pickup message, using our message tracking ID ($arr['secret']), which we will sign with our site - * private key. - * The entire pickup message is encrypted with the remote site's public key. - * If everything checks out on the remote end, we will receive back a packet containing one or more messages, - * which will be processed and delivered before this function ultimately returns. - * - * @see zot_import() - * - * @param array $arr - * decrypted and json decoded notify packet from remote site - * @return array from zot_import() - */ -function zot_fetch($arr) { - - logger('zot_fetch: ' . print_r($arr,true), LOGGER_DATA, LOG_DEBUG); - - $url = $arr['sender']['url'] . $arr['callback']; - - $import = null; - $hubs = null; - - $zret = zot6_check_sig(); - - if($zret['success'] && $zret['hubloc'] && $zret['hubloc']['hubloc_guid'] === $arr['sender']['guid'] && $arr['msg']) { - - logger('zot6_delivery',LOGGER_DEBUG); - logger('zot6_data: ' . print_r($arr,true),LOGGER_DATA); - - $ret['collected'] = true; - - $import = [ 'success' => true, 'body' => json_encode( [ 'success' => true, 'pickup' => [ [ 'notify' => $arr, 'message' => json_decode($arr['msg'],true) ] ] ] ) ]; - $hubs = [ $zret['hubloc'] ] ; - } - - if(! $hubs) { - // set $multiple param on zot_gethub() to return all matching hubs - // This allows us to recover from re-installs when a redundant (but invalid) hubloc for - // this identity is widely dispersed throughout the network. - - $hubs = zot_gethub($arr['sender'],true); - } - - if(! $hubs) { - logger('No hub: ' . print_r($arr['sender'],true)); - return; - } - - foreach($hubs as $hub) { - - if(! $import) { - $secret = substr(preg_replace('/[^0-9a-fA-F]/','',$arr['secret']),0,64); - - $data = [ - 'type' => 'pickup', - 'url' => z_root(), - 'callback_sig' => base64url_encode(Crypto::sign(z_root() . '/post', get_config('system','prvkey'))), - 'callback' => z_root() . '/post', - 'secret' => $secret, - 'secret_sig' => base64url_encode(Crypto::sign($secret, get_config('system','prvkey'))) - ]; - - $algorithm = zot_best_algorithm($hub['site_crypto']); - $datatosend = json_encode(Crypto::encapsulate(json_encode($data),$hub['hubloc_sitekey'], $algorithm)); - - $import = zot_zot($url,$datatosend); - - } - else { - $algorithm = zot_best_algorithm($hub['site_crypto']); - } - - $result = zot_import($import, $arr['sender']['url']); - - if($result) { - $result = Crypto::encapsulate(json_encode($result),$hub['hubloc_sitekey'], $algorithm); - return $result; - } - - } - - return; -} - -/** - * @brief Process incoming array of messages. - * - * Process an incoming array of messages which were obtained via pickup, and - * import, update, delete as directed. - * - * The message types handled here are 'activity' (e.g. posts), 'mail', - * 'profile', 'location' and 'channel_sync'. - * - * @param array $arr - * 'pickup' structure returned from remote site - * @param string $sender_url - * the url specified by the sender in the initial communication. - * We will verify the sender and url in each returned message structure and - * also verify that all the messages returned match the site url that we are - * currently processing. - * - * @returns array - * Suitable for logging remotely, enumerating the processing results of each message/recipient combination - * * [0] => \e string $channel_portable_id - * * [1] => \e string $delivery_status - * * [2] => \e string $address - */ -function zot_import($arr, $sender_url) { - - $data = json_decode($arr['body'], true); - - if(! $data) { - logger('Empty body'); - return array(); - } - - if(array_key_exists('iv', $data)) { - $data['encrypted'] = true; - $data = json_decode(Crypto::unencapsulate($data,get_config('system','prvkey')),true); - } - - if(! is_array($data)) { - logger('decode error'); - return array(); - } - - if(! $data['success']) { - if($data['message']) - logger('remote pickup failed: ' . $data['message']); - return false; - } - - $incoming = $data['pickup']; - - $return = array(); - - if(is_array($incoming)) { - foreach($incoming as $i) { - if(! is_array($i)) { - logger('incoming is not an array'); - continue; - } - - $result = null; - - if(array_key_exists('iv',$i['notify'])) { - $i['notify']['encrypted'] = true; - $i['notify'] = json_decode(Crypto::unencapsulate($i['notify'],get_config('system','prvkey')),true); - } - - logger('Notify: ' . print_r($i['notify'],true), LOGGER_DATA, LOG_DEBUG); - - if(! is_array($i['notify'])) { - logger('decode error'); - continue; - } - - - $hub = zot_gethub($i['notify']['sender']); - if((! $hub) || ($hub['hubloc_url'] != $sender_url)) { - logger('Potential forgery: wrong site for sender: ' . $sender_url . ' != ' . print_r($i['notify'],true)); - continue; - } - - $message_request = ((array_key_exists('message_id',$i['notify'])) ? true : false); - if($message_request) - logger('processing message request'); - - $i['notify']['sender']['hash'] = make_xchan_hash($i['notify']['sender']['guid'],$i['notify']['sender']['guid_sig']); - $deliveries = null; - - if(array_key_exists('message',$i) && array_key_exists('type',$i['message']) && $i['message']['type'] === 'rating') { - // rating messages are processed only by directory servers - logger('Rating received: ' . print_r($arr,true), LOGGER_DATA, LOG_DEBUG); - $result = process_rating_delivery($i['notify']['sender'],$i['message']); - continue; - } - - if(array_key_exists('recipients',$i['notify']) && count($i['notify']['recipients'])) { - logger('specific recipients'); - $recip_arr = array(); - foreach($i['notify']['recipients'] as $recip) { - if(is_array($recip)) { - $recip_arr[] = make_xchan_hash($recip['guid'],$recip['guid_sig']); - } - } - - $r = false; - if($recip_arr) { - stringify_array_elms($recip_arr); - $recips = implode(',',$recip_arr); - $r = q("select channel_portable_id as hash from channel where channel_portable_id in ( " . $recips . " ) - and channel_removed = 0 "); - } - - if(! $r) { - logger('recips: no recipients on this site'); - continue; - } - - // It's a specifically targetted post. If we were sent a public_scope hint (likely), - // get rid of it so that it doesn't get stored and cause trouble. - - if(($i) && is_array($i) && array_key_exists('message',$i) && is_array($i['message']) - && $i['message']['type'] === 'activity' && array_key_exists('public_scope',$i['message'])) - unset($i['message']['public_scope']); - - $deliveries = $r; - - // We found somebody on this site that's in the recipient list. - - } - else { - if(($i['message']) && (array_key_exists('flags',$i['message'])) && (in_array('private',$i['message']['flags'])) && $i['message']['type'] === 'activity') { - if(array_key_exists('public_scope',$i['message']) && $i['message']['public_scope'] === 'public') { - // This should not happen but until we can stop it... - logger('private message was delivered with no recipients.'); - continue; - } - } - - 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 - - $deliveries = allowed_public_recips($i); - - if($i['message'] && array_key_exists('type',$i['message']) && $i['message']['type'] === 'location') { - $sys = get_sys_channel(); - $deliveries = array(array('hash' => $sys['xchan_hash'])); - } - - // if the scope is anything but 'public' we're going to store it as private regardless - // of the private flag on the post. - - if($i['message'] && array_key_exists('public_scope',$i['message']) - && $i['message']['public_scope'] !== 'public') { - - if(! array_key_exists('flags',$i['message'])) - $i['message']['flags'] = array(); - if(! in_array('private',$i['message']['flags'])) - $i['message']['flags'][] = 'private'; - } - } - - // Go through the hash array and remove duplicates. array_unique() won't do this because the array is more than one level. - - $no_dups = array(); - if($deliveries) { - foreach($deliveries as $d) { - if(! is_array($d)) { - logger('Delivery hash array is not an array: ' . print_r($d,true)); - continue; - } - if(! in_array($d['hash'],$no_dups)) - $no_dups[] = $d['hash']; - } - - if($no_dups) { - $deliveries = array(); - foreach($no_dups as $n) { - $deliveries[] = array('hash' => $n); - } - } - } - - if(! $deliveries) { - logger('No deliveries on this site'); - continue; - } - - if($i['message']) { - if($i['message']['type'] === 'activity') { - $arr = get_item_elements($i['message']); - - $v = validate_item_elements($i['message'],$arr); - - if(! $v['success']) { - logger('Activity rejected: ' . $v['message'] . ' ' . print_r($i['message'],true)); - continue; - } - - logger('Activity received: ' . print_r($arr,true), LOGGER_DATA, LOG_DEBUG); - logger('Activity recipients: ' . print_r($deliveries,true), LOGGER_DATA, LOG_DEBUG); - - $relay = ((array_key_exists('flags',$i['message']) && in_array('relay',$i['message']['flags'])) ? true : false); - $result = process_delivery($i['notify']['sender'],$arr,$deliveries,$relay,false,$message_request); - } - elseif($i['message']['type'] === 'mail') { - $arr = get_mail_elements($i['message']); - - logger('Mail received: ' . print_r($arr,true), LOGGER_DATA, LOG_DEBUG); - logger('Mail recipients: ' . print_r($deliveries,true), LOGGER_DATA, LOG_DEBUG); - - $result = process_mail_delivery($i['notify']['sender'],$arr,$deliveries); - } - elseif($i['message']['type'] === 'profile') { - $arr = get_profile_elements($i['message']); - - logger('Profile received: ' . print_r($arr,true), LOGGER_DATA, LOG_DEBUG); - logger('Profile recipients: ' . print_r($deliveries,true), LOGGER_DATA, LOG_DEBUG); - - $result = process_profile_delivery($i['notify']['sender'],$arr,$deliveries); - } - elseif($i['message']['type'] === 'channel_sync') { - // $arr = get_channelsync_elements($i['message']); - - $arr = $i['message']; - - logger('Channel sync received: ' . print_r($arr,true), LOGGER_DATA, LOG_DEBUG); - logger('Channel sync recipients: ' . print_r($deliveries,true), LOGGER_DATA, LOG_DEBUG); - - $result = process_channel_sync_delivery($i['notify']['sender'],$arr,$deliveries); - } - elseif($i['message']['type'] === 'location') { - $arr = $i['message']; - - logger('Location message received: ' . print_r($arr,true), LOGGER_DATA, LOG_DEBUG); - logger('Location message recipients: ' . print_r($deliveries,true), LOGGER_DATA, LOG_DEBUG); - - $result = process_location_delivery($i['notify']['sender'],$arr,$deliveries); - } - } - if($result){ - $return = array_merge($return, $result); - } - } - } - - return $return; -} - -/** - * @brief - * - * A public message with no listed recipients can be delivered to anybody who - * has PERMS_NETWORK for that type of post, PERMS_AUTHED (in-network senders are - * by definition authenticated) or PERMS_SITE and is one the same site, - * or PERMS_SPECIFIC and the sender is a contact who is granted permissions via - * their connection permissions in the address book. - * Here we take a given message and construct a list of hashes of everybody - * on the site that we should try and deliver to. - * Some of these will be rejected, but this gives us a place to start. - * - * @param array $msg - * @return NULL|array - */ -function public_recips($msg) { - - require_once('include/channel.php'); - - $check_mentions = false; - $include_sys = false; - - if($msg['message']['type'] === 'activity') { - $disable_discover_tab = get_config('system','disable_discover_tab') || get_config('system','disable_discover_tab') === false; - if(! $disable_discover_tab) - $include_sys = true; - - $perm = 'send_stream'; - - if(array_key_exists('flags',$msg['message']) && in_array('thread_parent', $msg['message']['flags'])) { - // check mention recipient permissions on top level posts only - $check_mentions = true; - } - else { - - // This doesn't look like it works so I have to explain what happened. These are my - // notes (below) from when I got this section of code working. You would think that - // we only have to find those with the requisite stream or comment permissions, - // depending on whether this is a top-level post or a comment - but you would be wrong. - - // ... so public_recips and allowed_public_recips is working so much better - // than before, but was still not quite right. We seem to be getting all the right - // results for top-level posts now, but comments aren't getting through on channels - // for which we've allowed them to send us their stream, but not comment on our posts. - // The reason is we were seeing if they could comment - and we only need to do that if - // we own the post. If they own the post, we only need to check if they can send us their stream. - - // if this is a comment and it wasn't sent by the post owner, check to see who is allowing them to comment. - // We should have one specific recipient and this step shouldn't be needed unless somebody stuffed up - // their software. We may need this step to protect us from bad guys intentionally stuffing up their software. - // If it is sent by the post owner, we don't need to do this. We only need to see who is receiving the - // owner's stream (which was already set above) - as they control the comment permissions, not us. - - // Note that by doing this we introduce another bug because some public forums have channel_w_stream - // permissions set to themselves only. We also need in this function to add these public forums to the - // public recipient list based on if they are tagged or not and have tag permissions. This is complicated - // by the fact that this activity doesn't have the public forum tag. It's the parent activity that - // contains the tag. we'll solve that further below. - - if($msg['notify']['sender']['guid_sig'] != $msg['message']['owner']['guid_sig']) { - $perm = 'post_comments'; - } - } - } - elseif($msg['message']['type'] === 'mail') - $perm = 'post_mail'; - - $r = array(); - - $c = q("select channel_id, channel_portable_id from channel where channel_removed = 0"); - if($c) { - foreach($c as $cc) { - if(perm_is_allowed($cc['channel_id'],$msg['notify']['sender']['hash'],$perm)) { - $r[] = [ 'hash' => $cc['channel_portable_id'] ]; - } - } - } - - // logger('message: ' . print_r($msg['message'],true)); - - if($include_sys && array_key_exists('public_scope',$msg['message']) && $msg['message']['public_scope'] === 'public') { - $sys = get_sys_channel(); - if($sys) - $r[] = [ 'hash' => $sys['channel_portable_id'] ]; - } - - // look for any public mentions on this site - // They will get filtered by tgroup_check() so we don't need to check permissions now - - if($check_mentions) { - // It's a top level post. Look at the tags. See if any of them are mentions and are on this hub. - if($msg['message']['tags']) { - if(is_array($msg['message']['tags']) && $msg['message']['tags']) { - foreach($msg['message']['tags'] as $tag) { - if(($tag['type'] === 'mention' || $tag['type'] === 'forum') && (strpos($tag['url'],z_root()) !== false)) { - $address = basename($tag['url']); - if($address) { - $z = q("select channel_portable_id as hash from channel where channel_address = '%s' - and channel_removed = 0 limit 1", - dbesc($address) - ); - if($z) - $r = array_merge($r,$z); - } - } - } - } - } - } - else { - // This is a comment. We need to find any parent with ITEM_UPLINK set. But in fact, let's just return - // everybody that stored a copy of the parent. This way we know we're covered. We'll check the - // comment permissions when we deliver them. - - if($msg['message']['message_top']) { - $z = q("select owner_xchan as hash from item where parent_mid = '%s' ", - dbesc($msg['message']['message_top']) - ); - if($z) - $r = array_merge($r,$z); - } - } - - // There are probably a lot of duplicates in $r at this point. We need to filter those out. - // It's a bit of work since it's a multi-dimensional array - - if($r) { - $uniq = array(); - - foreach($r as $rr) { - if(! in_array($rr['hash'],$uniq)) - $uniq[] = $rr['hash']; - } - $r = array(); - foreach($uniq as $rr) { - $r[] = array('hash' => $rr); - } - } - - logger('public_recips: ' . print_r($r,true), LOGGER_DATA, LOG_DEBUG); - return $r; -} - -/** - * @brief This is the second part of public_recips(). - * - * We'll find all the channels willing to accept public posts from us, then - * match them against the sender privacy scope and see who in that list that - * the sender is allowing. - * - * @see public_recipes() - * @param array $msg - * @return array - */ -function allowed_public_recips($msg) { - - logger('allowed_public_recips: ' . print_r($msg,true),LOGGER_DATA, LOG_DEBUG); - - if(array_key_exists('public_scope',$msg['message'])) - $scope = $msg['message']['public_scope']; - - // Mail won't have a public scope. - // in fact, it's doubtful mail will ever get here since it almost universally - // has a recipient, but in fact we don't require this, so it's technically - // possible to send mail to anybody that's listening. - - $recips = public_recips($msg); - - if(! $recips) - return $recips; - - if($msg['message']['type'] === 'mail') - return $recips; - - if($scope === 'public' || $scope === 'network: red' || $scope === 'authenticated') - return $recips; - - if(strpos($scope,'site:') === 0) { - if(($scope === 'site: ' . App::get_hostname()) && ($msg['notify']['sender']['url'] === z_root())) - return $recips; - else - return array(); - } - - $hash = make_xchan_hash($msg['notify']['sender']['guid'],$msg['notify']['sender']['guid_sig']); - - if($scope === 'self') { - foreach($recips as $r) - if($r['hash'] === $hash) - return array('hash' => $hash); - } - - // note: we shouldn't ever see $scope === 'specific' in this function, but handle it anyway - - if($scope === 'contacts' || $scope === 'any connections' || $scope === 'specific') { - $condensed_recips = array(); - foreach($recips as $rr) - $condensed_recips[] = $rr['hash']; - - $results = array(); - $r = q("select channel_portable_id as hash, channel_id from channel left join abook on abook_channel = channel_id where abook_xchan = '%s' and channel_removed = 0 ", - dbesc($hash) - ); - if($r) { - foreach($r as $rr) { - $cfg = get_abconfig($rr['channel_id'],$rr['hash'],'their_perms','view_stream'); - if((! $cfg) && $scope !== 'any connections') - continue; - if(in_array($rr['hash'],$condensed_recips)) - $results[] = array('hash' => $rr['hash']); - } - } - return $results; - } - - return array(); -} - -/** - * @brief - * - * @param array $sender - * @param array $arr - * @param array $deliveries - * @param boolean $relay - * @param boolean $public (optional) default false - * @param boolean $request (optional) default false - * @return array - */ -function process_delivery($sender, $arr, $deliveries, $relay, $public = false, $request = false) { - - $result = array(); - - $result['site'] = z_root(); - - // We've validated the sender. Now make sure that the sender is the owner or author - - if(! $public) { - if($sender['hash'] != $arr['owner_xchan'] && $sender['hash'] != $arr['author_xchan']) { - logger("Sender {$sender['hash']} is not owner {$arr['owner_xchan']} or author {$arr['author_xchan']} - mid {$arr['mid']}"); - return; - } - } - - foreach($deliveries as $d) { - $local_public = $public; - - $DR = new Zotlabs\Lib\DReport(z_root(),$sender['hash'],$d['hash'],$arr['mid']); - - $channel = channelx_by_portid($d['hash']); - - if(! $channel) { - $DR->update('recipient not found'); - $result[] = $DR->get(); - continue; - } - - $DR->set_name($channel['channel_name'] . ' <' . channel_reddress($channel) . '>'); - - /* blacklisted channels get a permission denied, no special message to tip them off */ - - if(! check_channelallowed($sender['hash'])) { - $DR->update('permission denied'); - $result[] = $DR->get(); - continue; - } - - /** - * @FIXME: Somehow we need to block normal message delivery from our clones, as the delivered - * message doesn't have ACL information in it as the cloned copy does. That copy - * will normally arrive first via sync delivery, but this isn't guaranteed. - * There's a chance the current delivery could take place before the cloned copy arrives - * hence the item could have the wrong ACL and *could* be used in subsequent deliveries or - * access checks. So far all attempts at identifying this situation precisely - * have caused issues with delivery of relayed comments. - */ - -// if(($d['hash'] === $sender['hash']) && ($sender['url'] !== z_root()) && (! $relay)) { -// $DR->update('self delivery ignored'); -// $result[] = $DR->get(); -// continue; -// } - - // allow public postings to the sys channel regardless of permissions, but not - // for comments travelling upstream. Wait and catch them on the way down. - // They may have been blocked by the owner. - - 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['hash']) - ); - // don't import sys channel posts from selfcensored authors - if($r && (intval($r[0]['xchan_selfcensored']))) { - $local_public = false; - continue; - } - if(! \Zotlabs\Lib\MessageFilter::evaluate($arr,get_config('system','pubstream_incl'),get_config('system','pubstream_excl'))) { - $local_public = false; - continue; - } - } - - $tag_delivery = tgroup_check($channel['channel_id'],$arr); - - $perm = 'send_stream'; - if(($arr['mid'] !== $arr['parent_mid']) && ($relay)) - $perm = 'post_comments'; - - // This is our own post, possibly coming from a channel clone - - if($arr['owner_xchan'] == $d['hash']) { - $arr['item_wall'] = 1; - } - else { - $arr['item_wall'] = 0; - } - - - if ((! $tag_delivery) && (! $local_public)) { - $allowed = (perm_is_allowed($channel['channel_id'],$sender['hash'],$perm)); - - if((! $allowed) && $perm == 'post_comments') { - $parent = q("select * from item where mid = '%s' and uid = %d limit 1", - dbesc($arr['parent_mid']), - intval($channel['channel_id']) - ); - if ($parent) { - $allowed = can_comment_on_post($sender['hash'],$parent[0]); - } - } - - if (! $allowed) { - logger("permission denied for delivery to channel {$channel['channel_id']} {$channel['channel_address']}"); - $DR->update('permission denied'); - $result[] = $DR->get(); - continue; - } - } - - if($arr['mid'] != $arr['parent_mid']) { - - // check source route. - // We are only going to accept comments from this sender if the comment has the same route as the top-level-post, - // this is so that permissions mismatches between senders apply to the entire conversation - // As a side effect we will also do a preliminary check that we have the top-level-post, otherwise - // processing it is pointless. - - $r = q("select route, id from item where mid = '%s' and uid = %d limit 1", - dbesc($arr['parent_mid']), - intval($channel['channel_id']) - ); - if(! $r) { - $DR->update('comment parent not found'); - $result[] = $DR->get(); - - // We don't seem to have a copy of this conversation or at least the parent - // - so request a copy of the entire conversation to date. - // Don't do this if it's a relay post as we're the ones who are supposed to - // have the copy and we don't want the request to loop. - // Also don't do this if this comment came from a conversation request packet. - // It's possible that comments are allowed but posting isn't and that could - // cause a conversation fetch loop. We can detect these packets since they are - // delivered via a 'notify' packet type that has a message_id element in the - // initial zot packet (just like the corresponding 'request' packet type which - // makes the request). - // We'll also check the send_stream permission - because if it isn't allowed, - // the top level post is unlikely to be imported and - // this is just an exercise in futility. - - if((! $relay) && (! $request) && (! $local_public) - && perm_is_allowed($channel['channel_id'],$sender['hash'],'send_stream')) { - //Zotlabs\Daemon\Master::Summon(array('Notifier', 'request', $channel['channel_id'], $sender['hash'], $arr['parent_mid'])); - } - continue; - } - if($relay) { - // reset the route in case it travelled a great distance upstream - // use our parent's route so when we go back downstream we'll match - // with whatever route our parent has. - $arr['route'] = $r[0]['route']; - } - else { - - // going downstream check that we have the same upstream provider that - // sent it to us originally. Ignore it if it came from another source - // (with potentially different permissions). - // only compare the last hop since it could have arrived at the last location any number of ways. - // Always accept empty routes and firehose items (route contains 'undefined') . - - $existing_route = explode(',', $r[0]['route']); - $routes = count($existing_route); - if($routes) { - $last_hop = array_pop($existing_route); - $last_prior_route = implode(',',$existing_route); - } - else { - $last_hop = ''; - $last_prior_route = ''; - } - - if(in_array('undefined',$existing_route) || $last_hop == 'undefined' || $sender['hash'] == 'undefined') - $last_hop = ''; - - $current_route = (($arr['route']) ? $arr['route'] . ',' : '') . $sender['hash']; - - if($last_hop && $last_hop != $sender['hash']) { - logger('comment route mismatch: parent route = ' . $r[0]['route'] . ' expected = ' . $current_route, LOGGER_DEBUG); - logger('comment route mismatch: parent msg = ' . $r[0]['id'],LOGGER_DEBUG); - $DR->update('comment route mismatch'); - $result[] = $DR->get(); - continue; - } - - // we'll add sender['hash'] onto this when we deliver it. $last_prior_route now has the previously stored route - // *except* for the sender['hash'] which would've been the last hop before it got to us. - - $arr['route'] = $last_prior_route; - } - } - - $ab = q("select * from abook where abook_channel = %d and abook_xchan = '%s'", - intval($channel['channel_id']), - dbesc($arr['owner_xchan']) - ); - - if(! $ab) { - - $best_owner_xchan = find_best_zot_identity($arr['owner_xchan']); - - $ab = q("select * from abook where abook_channel = %d and abook_xchan = '%s'", - intval($channel['channel_id']), - dbesc($best_owner_xchan) - ); - - if($ab) { - logger('rewrite owner: ' . $arr['owner_xchan'] . ' > ' . $best_owner_xchan); - $arr['owner_xchan'] = $best_owner_xchan; - } - } - - $best_author_xchan = find_best_zot_identity($arr['author_xchan']); - - $ab_author = q("select * from abook where abook_channel = %d and abook_xchan = '%s'", - intval($channel['channel_id']), - dbesc($best_author_xchan) - ); - - if($ab_author) { - logger('rewrite author: ' . $arr['author_xchan'] . ' > ' . $best_author_xchan); - $arr['author_xchan'] = $best_author_xchan; - } - - $abook = (($ab) ? $ab[0] : null); - - if(intval($arr['item_deleted'])) { - - // remove_community_tag is a no-op if this isn't a community tag activity - remove_community_tag($sender,$arr,$channel['channel_id']); - - // set these just in case we need to store a fresh copy of the deleted post. - // This could happen if the delete got here before the original post did. - - $arr['aid'] = $channel['channel_account_id']; - $arr['uid'] = $channel['channel_id']; - - $item_id = delete_imported_item($sender,$arr,$channel['channel_id'],$relay); - $DR->update(($item_id) ? 'deleted' : 'delete_failed'); - $result[] = $DR->get(); - - if($relay && $item_id) { - logger('process_delivery: invoking relay'); - Zotlabs\Daemon\Master::Summon(array('Notifier','relay',intval($item_id))); - $DR->update('relayed'); - $result[] = $DR->get(); - } - - continue; - } - - - $r = q("select * from item where mid = '%s' and uid = %d limit 1", - dbesc($arr['mid']), - intval($channel['channel_id']) - ); - if($r) { - // We already have this post. - $item_id = $r[0]['id']; - - if(intval($r[0]['item_deleted'])) { - // It was deleted locally. - $DR->update('update ignored'); - $result[] = $DR->get(); - - continue; - } - // Maybe it has been edited? - elseif($arr['edited'] > $r[0]['edited']) { - $arr['id'] = $r[0]['id']; - $arr['uid'] = $channel['channel_id']; - if(($arr['mid'] == $arr['parent_mid']) && (! post_is_importable($arr,$abook))) { - $DR->update('update ignored'); - $result[] = $DR->get(); - } - else { - $item_result = update_imported_item($sender,$arr,$r[0],$channel['channel_id'],$tag_delivery); - $DR->update('updated'); - $result[] = $DR->get(); - if(! $relay) - add_source_route($item_id,$sender['hash']); - } - } - else { - $DR->update('update ignored'); - $result[] = $DR->get(); - - // We need this line to ensure wall-to-wall comments are relayed (by falling through to the relay bit), - // and at the same time not relay any other relayable posts more than once, because to do so is very wasteful. - if(! intval($r[0]['item_origin'])) - continue; - } - } - else { - $arr['aid'] = $channel['channel_account_id']; - $arr['uid'] = $channel['channel_id']; - - // if it's a sourced post, call the post_local hooks as if it were - // posted locally so that crosspost connectors will be triggered. - - if(check_item_source($arr['uid'], $arr) || ($channel['xchan_pubforum'] == 1)) { - /** - * @hooks post_local - * Called when an item has been posted on this machine via mod/item.php (also via API). - * * \e array with an item - */ - call_hooks('post_local', $arr); - } - - $item_id = 0; - - if(($arr['mid'] == $arr['parent_mid']) && (! post_is_importable($arr,$abook))) { - $DR->update('post ignored'); - $result[] = $DR->get(); - } - else { - $item_result = item_store($arr); - if($item_result['success']) { - $item_id = $item_result['item_id']; - $parr = [ - 'item_id' => $item_id, - 'item' => $arr, - 'sender' => $sender, - 'channel' => $channel - ]; - /** - * @hooks activity_received - * Called when an activity (post, comment, like, etc.) has been received from a zot source. - * * \e int \b item_id - * * \e array \b item - * * \e array \b sender - * * \e array \b channel - */ - call_hooks('activity_received', $parr); - // don't add a source route if it's a relay or later recipients will get a route mismatch - if(! $relay) - add_source_route($item_id,$sender['hash']); - } - $DR->update(($item_id) ? 'posted' : 'storage failed: ' . $item_result['message']); - $result[] = $DR->get(); - } - } - - // preserve conversations with which you are involved from expiration - - $stored = (($item_result && $item_result['item']) ? $item_result['item'] : false); - if((is_array($stored)) && ($stored['id'] != $stored['parent']) - && ($stored['author_xchan'] === $channel['channel_portable_id'])) { - retain_item($stored['item']['parent']); - } - - if($relay && $item_id) { - logger('Invoking relay'); - Zotlabs\Daemon\Master::Summon(array('Notifier','relay',intval($item_id))); - $DR->addto_update('relayed'); - $result[] = $DR->get(); - } - } - - if(! $deliveries) - $result[] = array('', 'no recipients', '', $arr['mid']); - - logger('Local results: ' . print_r($result, true), LOGGER_DEBUG); - - return $result; -} - -/** - * @brief Remove community tag. - * - * @param array $sender an associative array with - * * \e string \b hash a xchan_hash - * @param array $arr an associative array - * * \e int \b verb - * * \e int \b obj_type - * * \e int \b mid - * @param int $uid - */ -function remove_community_tag($sender, $arr, $uid) { - - if(! (activity_match($arr['verb'], ACTIVITY_TAG) && ($arr['obj_type'] == ACTIVITY_OBJ_TAGTERM))) - return; - - logger('remove_community_tag: invoked'); - - if(! get_pconfig($uid,'system','blocktags')) { - logger('Permission denied.'); - return; - } - - $r = q("select * from item where mid = '%s' and uid = %d limit 1", - dbesc($arr['mid']), - intval($uid) - ); - if(! $r) { - logger('No item'); - return; - } - - if(($sender['hash'] != $r[0]['owner_xchan']) && ($sender['hash'] != $r[0]['author_xchan'])) { - logger('Sender not authorised.'); - return; - } - - $i = $r[0]; - - if($i['target']) - $i['target'] = json_decode($i['target'],true); - if($i['object']) - $i['object'] = json_decode($i['object'],true); - - if(! ($i['target'] && $i['object'])) { - logger('No target/object'); - return; - } - - $message_id = $i['target']['id']; - - $r = q("select id from item where mid = '%s' and uid = %d limit 1", - dbesc($message_id), - intval($uid) - ); - if(! $r) { - logger('No parent message'); - return; - } - - q("delete from term where uid = %d and oid = %d and otype = %d and ttype in ( %d, %d ) and term = '%s' and url = '%s'", - intval($uid), - intval($r[0]['id']), - intval(TERM_OBJ_POST), - intval(TERM_HASHTAG), - intval(TERM_COMMUNITYTAG), - dbesc($i['object']['title']), - dbesc(get_rel_link($i['object']['link'],'alternate')) - ); -} - -/** - * @brief Updates an imported item. - * - * @see item_store_update() - * - * @param array $sender - * @param array $item - * @param array $orig - * @param int $uid - * @param boolean $tag_delivery - */ -function update_imported_item($sender, $item, $orig, $uid, $tag_delivery) { - - // If this is a comment being updated, remove any privacy information - // so that item_store_update will set it from the original. - - if($item['mid'] !== $item['parent_mid']) { - unset($item['allow_cid']); - unset($item['allow_gid']); - unset($item['deny_cid']); - unset($item['deny_gid']); - unset($item['item_private']); - } - - // we need the tag_delivery check for downstream flowing posts as the stored post - // may have a different owner than the one being transmitted. - - if(($sender['hash'] != $orig['owner_xchan'] && $sender['hash'] != $orig['author_xchan']) && (! $tag_delivery)) { - logger('sender is not owner or author'); - return; - } - - - $x = item_store_update($item); - - // If we're updating an event that we've saved locally, we store the item info first - // because event_addtocal will parse the body to get the 'new' event details - - if($orig['resource_type'] === 'event') { - $res = event_addtocal($orig['id'], $uid); - if(! $res) - logger('update event: failed'); - } - - if(! $x['item_id']) - logger('update_imported_item: failed: ' . $x['message']); - else - logger('update_imported_item'); - - return $x; -} - -/** - * @brief Deletes an imported item. - * - * @param array $sender - * * \e string \b hash a xchan_hash - * @param array $item - * @param int $uid - * @param boolean $relay - * @return boolean|int post_id - */ -function delete_imported_item($sender, $item, $uid, $relay) { - - logger('invoked', LOGGER_DEBUG); - - $ownership_valid = false; - $item_found = false; - $post_id = 0; - - $r = q("select * from item where ( author_xchan = '%s' or owner_xchan = '%s' or source_xchan = '%s' ) - and mid = '%s' and uid = %d limit 1", - dbesc($sender['hash']), - dbesc($sender['hash']), - dbesc($sender['hash']), - dbesc($item['mid']), - intval($uid) - ); - - if($r) { - - $stored = $r[0]; - - if($stored['author_xchan'] === $sender['hash'] || $stored['owner_xchan'] === $sender['hash'] || $stored['source_xchan'] === $sender['hash']) - $ownership_valid = true; - - $post_id = $stored['id']; - $item_found = true; - } - else { - - // perhaps the item is still in transit and the delete notification got here before the actual item did. Store it with the deleted flag set. - // item_store() won't try to deliver any notifications or start delivery chains if this flag is set. - // This means we won't end up with potentially even more delivery threads trying to push this delete notification. - // But this will ensure that if the (undeleted) original post comes in at a later date, we'll reject it because it will have an older timestamp. - - logger('delete received for non-existent item - storing item data.'); - - if($item['author_xchan'] === $sender['hash'] || $item['owner_xchan'] === $sender['hash'] || $item['source_xchan'] === $sender['hash']) { - $ownership_valid = true; - $item_result = item_store($item); - $post_id = $item_result['item_id']; - } - } - - if($ownership_valid === false) { - logger('delete_imported_item: failed: ownership issue'); - return false; - } - - if ($stored['resource_type'] === 'event') { - $i = q("SELECT * FROM event WHERE event_hash = '%s' AND uid = %d LIMIT 1", - dbesc($stored['resource_id']), - intval($uid) - ); - if ($i) { - if ($i[0]['event_xchan'] === $sender['hash']) { - q("delete from event where event_hash = '%s' and uid = %d", - dbesc($stored['resource_id']), - intval($uid) - ); - } - else { - logger('delete linked event: not owner'); - return; - } - } - } - - require_once('include/items.php'); - - if($item_found) { - if(intval($stored['item_deleted'])) { - logger('delete_imported_item: item was already deleted'); - if(! $relay) - return false; - - // This is a bit hackish, but may have to suffice until the notification/delivery loop is optimised - // a bit further. We're going to strip the ITEM_ORIGIN on this item if it's a comment, because - // it was already deleted, and we're already relaying, and this ensures that no other process or - // code path downstream can relay it again (causing a loop). Since it's already gone it's not coming - // back, and we aren't going to (or shouldn't at any rate) delete it again in the future - so losing - // this information from the metadata should have no other discernible impact. - - if (($stored['id'] != $stored['parent']) && intval($stored['item_origin'])) { - q("update item set item_origin = 0 where id = %d and uid = %d", - intval($stored['id']), - intval($stored['uid']) - ); - } - } - - require_once('include/items.php'); - - // Use phased deletion to set the deleted flag, call both tag_deliver and the notifier to notify downstream channels - // and then clean up after ourselves with a cron job after several days to do the delete_item_lowlevel() (DROPITEM_PHASE2). - - drop_item($post_id, false, DROPITEM_PHASE1); - tag_deliver($uid, $post_id); - } - - return $post_id; -} - -function process_mail_delivery($sender, $arr, $deliveries) { - - $result = array(); - - if($sender['hash'] != $arr['from_xchan']) { - logger('process_mail_delivery: sender is not mail author'); - return; - } - - foreach($deliveries as $d) { - - $DR = new Zotlabs\Lib\DReport(z_root(),$sender['hash'],$d['hash'],$arr['mid']); - - $r = q("select * from channel where channel_portable_id = '%s' limit 1", - dbesc($d['hash']) - ); - - if(! $r) { - $DR->update('recipient not found'); - $result[] = $DR->get(); - continue; - } - - $channel = $r[0]; - $DR->set_name($channel['channel_name'] . ' <' . channel_reddress($channel) . '>'); - - /* blacklisted channels get a permission denied, no special message to tip them off */ - - if(! check_channelallowed($sender['hash'])) { - $DR->update('permission denied'); - $result[] = $DR->get(); - continue; - } - - - if(! perm_is_allowed($channel['channel_id'],$sender['hash'],'post_mail')) { - - /* - * Always allow somebody to reply if you initiated the conversation. It's anti-social - * and a bit rude to send a private message to somebody and block their ability to respond. - * If you are being harrassed and want to put an end to it, delete the conversation. - */ - - $return = false; - if($arr['parent_mid']) { - $return = q("select * from mail where mid = '%s' and channel_id = %d limit 1", - dbesc($arr['parent_mid']), - intval($channel['channel_id']) - ); - } - if(! $return) { - logger("permission denied for mail delivery {$channel['channel_id']}"); - $DR->update('permission denied'); - $result[] = $DR->get(); - continue; - } - } - - $r = q("select id, conv_guid from mail where mid = '%s' and channel_id = %d limit 1", - dbesc($arr['mid']), - intval($channel['channel_id']) - ); - if($r) { - if(intval($arr['mail_recalled'])) { - msg_drop($r[0]['id'], $channel['channel_id'], $r[0]['conv_guid']); - $DR->update('mail recalled'); - $result[] = $DR->get(); - logger('mail_recalled'); - } - else { - $DR->update('duplicate mail received'); - $result[] = $DR->get(); - logger('duplicate mail received'); - } - continue; - } - else { - $arr['account_id'] = $channel['channel_account_id']; - $arr['channel_id'] = $channel['channel_id']; - $item_id = mail_store($arr); - $DR->update('mail delivered'); - $result[] = $DR->get(); - } - } - - return $result; -} - -/** - * @brief Processes delivery of rating. - * - * @param array $sender - * * \e string \b hash a xchan_hash - * @param array $arr - */ -function process_rating_delivery($sender, $arr) { - - logger('process_rating_delivery: ' . print_r($arr,true)); - - if(! $arr['target']) - return; - - $z = q("select xchan_pubkey from xchan where xchan_hash = '%s' limit 1", - dbesc($sender['hash']) - ); - - if((! $z) || (! Crypto::verify($arr['target'] . '.' . $arr['rating'] . '.' . $arr['rating_text'], base64url_decode($arr['signature']),$z[0]['xchan_pubkey']))) { - logger('failed to verify rating'); - return; - } - - $r = q("select * from xlink where xlink_xchan = '%s' and xlink_link = '%s' and xlink_static = 1 limit 1", - dbesc($sender['hash']), - dbesc($arr['target']) - ); - - if($r) { - if($r[0]['xlink_updated'] >= $arr['edited']) { - logger('rating message duplicate'); - return; - } - - $x = q("update xlink set xlink_rating = %d, xlink_rating_text = '%s', xlink_sig = '%s', xlink_updated = '%s' where xlink_id = %d", - intval($arr['rating']), - dbesc($arr['rating_text']), - dbesc($arr['signature']), - dbesc(datetime_convert()), - intval($r[0]['xlink_id']) - ); - logger('rating updated'); - } - else { - $x = q("insert into xlink ( xlink_xchan, xlink_link, xlink_rating, xlink_rating_text, xlink_sig, xlink_updated, xlink_static ) - values( '%s', '%s', %d, '%s', '%s', '%s', 1 ) ", - dbesc($sender['hash']), - dbesc($arr['target']), - intval($arr['rating']), - dbesc($arr['rating_text']), - dbesc($arr['signature']), - dbesc(datetime_convert()) - ); - logger('rating created'); - } -} - -/** - * @brief Processes delivery of profile. - * - * @see import_directory_profile() - * @param array $sender an associative array - * * \e string \b hash a xchan_hash - * @param array $arr - * @param array $deliveries (unused) - */ -function process_profile_delivery($sender, $arr, $deliveries) { - - logger('process_profile_delivery', LOGGER_DEBUG); - - $r = q("select xchan_addr from xchan where xchan_hash = '%s' limit 1", - dbesc($sender['hash']) - ); - if($r) - import_directory_profile($sender['hash'], $arr, $r[0]['xchan_addr'], UPDATE_FLAGS_UPDATED, 0); -} - - -/** - * @brief - * - * @param array $sender an associative array - * * \e string \b hash a xchan_hash - * @param array $arr - * @param array $deliveries (unused) deliveries is irrelevant - */ -function process_location_delivery($sender, $arr, $deliveries) { - - // deliveries is irrelevant - logger('process_location_delivery', LOGGER_DEBUG); - - $r = q("select xchan_pubkey from xchan where xchan_hash = '%s' limit 1", - dbesc($sender['hash']) - ); - if($r) - $sender['key'] = $r[0]['xchan_pubkey']; - - if(array_key_exists('locations',$arr) && $arr['locations']) { - $x = sync_locations($sender,$arr,true); - logger('results: ' . print_r($x,true), LOGGER_DEBUG); - if($x['changed']) { - $guid = random_string() . '@' . App::get_hostname(); - update_modtime($sender['hash'],$sender['guid'],$arr['locations'][0]['address'],UPDATE_FLAGS_UPDATED); - } - } -} - -/** - * @brief Checks for a moved UNO channel and sets the channel_moved flag. - * - * Currently the effect of this flag is to turn the channel into 'read-only' mode. - * New content will not be processed (there was still an issue with blocking the - * ability to post comments as of 10-Mar-2016). - * We do not physically remove the channel at this time. The hub admin may choose - * to do so, but is encouraged to allow a grace period of several days in case there - * are any issues migrating content. This packet will generally be received by the - * original site when the basic channel import has been processed. - * - * This will only be executed on the UNO system which is the old location - * if a new location is reported and there is only one location record. - * The rest of the hubloc syncronisation will be handled within - * sync_locations - * - * @param string $sender_hash A channel hash - * @param array $locations - */ -function check_location_move($sender_hash, $locations) { - - if(! $locations) - return; - - if(count($locations) != 1) - return; - - $loc = $locations[0]; - - $r = q("select * from channel where channel_portable_id = '%s' limit 1", - dbesc($sender_hash) - ); - - if(! $r) - return; - - if($loc['url'] !== z_root()) { - $x = q("update channel set channel_moved = '%s' where channel_portable_id = '%s' limit 1", - dbesc($loc['url']), - dbesc($sender_hash) - ); - - // federation plugins may wish to notify connections - // of the move on singleton networks - - $arr = [ - 'channel' => $r[0], - 'locations' => $locations - ]; - /** - * @hooks location_move - * Called when a new location has been provided to a UNO channel (indicating a move rather than a clone). - * * \e array \b channel - * * \e array \b locations - */ - call_hooks('location_move', $arr); - } -} - - -/** - * @brief Synchronises locations. - * - * @param array $sender - * @param array $arr - * @param boolean $absolute (optional) default false - * @return array - */ -function sync_locations($sender, $arr, $absolute = false) { - - $ret = array(); - - if($arr['locations']) { - - if($absolute) - check_location_move($sender['hash'],$arr['locations']); - - $xisting = q("select hubloc_id, hubloc_url, hubloc_sitekey from hubloc where hubloc_hash = '%s'", - dbesc($sender['hash']) - ); - - // See if a primary is specified - - $has_primary = false; - foreach($arr['locations'] as $location) { - if($location['primary']) { - $has_primary = true; - break; - } - } - - // Ensure that they have one primary hub - - if(! $has_primary) - $arr['locations'][0]['primary'] = true; - - foreach($arr['locations'] as $location) { - if(! Crypto::verify($location['url'],base64url_decode($location['url_sig']),$sender['key'])) { - logger('Unable to verify site signature for ' . $location['url']); - $ret['message'] .= sprintf( t('Unable to verify site signature for %s'), $location['url']) . EOL; - continue; - } - - for($x = 0; $x < count($xisting); $x ++) { - if(($xisting[$x]['hubloc_url'] === $location['url']) - && ($xisting[$x]['hubloc_sitekey'] === $location['sitekey'])) { - $xisting[$x]['updated'] = true; - } - } - - if(! $location['sitekey']) { - logger('Empty hubloc sitekey. ' . print_r($location,true)); - continue; - } - - // Catch some malformed entries from the past which still exist - - if(strpos($location['address'],'/') !== false) - $location['address'] = substr($location['address'],0,strpos($location['address'],'/')); - - // match as many fields as possible in case anything at all changed. - - $r = q("select * from hubloc where hubloc_hash = '%s' and hubloc_guid = '%s' and hubloc_guid_sig = '%s' and hubloc_url = '%s' and hubloc_url_sig = '%s' and hubloc_host = '%s' and hubloc_addr = '%s' and hubloc_callback = '%s' and hubloc_sitekey = '%s' ", - dbesc($sender['hash']), - dbesc($sender['guid']), - dbesc($sender['guid_sig']), - dbesc($location['url']), - dbesc($location['url_sig']), - dbesc($location['host']), - dbesc($location['address']), - dbesc($location['callback']), - dbesc($location['sitekey']) - ); - if($r) { - logger('Hub exists: ' . $location['url'], LOGGER_DEBUG); - - // update connection timestamp if this is the site we're talking to - // This only happens when called from import_xchan - - $current_site = false; - - $t = datetime_convert('UTC','UTC','now - 15 minutes'); - - if(array_key_exists('site',$arr) && $location['url'] == $arr['site']['url']) { - q("update hubloc set hubloc_connected = '%s', hubloc_updated = '%s' where hubloc_id = %d and hubloc_connected < '%s'", - dbesc(datetime_convert()), - dbesc(datetime_convert()), - intval($r[0]['hubloc_id']), - dbesc($t) - ); - $current_site = true; - } - - if($current_site && intval($r[0]['hubloc_error'])) { - q("update hubloc set hubloc_error = 0 where hubloc_id = %d", - intval($r[0]['hubloc_id']) - ); - if(intval($r[0]['hubloc_orphancheck'])) { - q("update hubloc set hubloc_orphancheck = 0 where hubloc_id = %d", - intval($r[0]['hubloc_id']) - ); - } - q("update xchan set xchan_orphan = 0 where xchan_orphan = 1 and xchan_hash = '%s'", - dbesc($sender['hash']) - ); - } - - // Remove pure duplicates - if(count($r) > 1) { - for($h = 1; $h < count($r); $h ++) { - q("delete from hubloc where hubloc_id = %d", - intval($r[$h]['hubloc_id']) - ); - $what .= 'duplicate_hubloc_removed '; - $changed = true; - } - } - - if(intval($r[0]['hubloc_primary']) && (! $location['primary'])) { - $m = q("update hubloc set hubloc_primary = 0, hubloc_updated = '%s' where hubloc_id = %d", - dbesc(datetime_convert()), - intval($r[0]['hubloc_id']) - ); - $r[0]['hubloc_primary'] = intval($location['primary']); - hubloc_change_primary($r[0]); - $what .= 'primary_hub '; - $changed = true; - } - elseif((! intval($r[0]['hubloc_primary'])) && ($location['primary'])) { - $m = q("update hubloc set hubloc_primary = 1, hubloc_updated = '%s' where hubloc_id = %d", - dbesc(datetime_convert()), - intval($r[0]['hubloc_id']) - ); - // make sure hubloc_change_primary() has current data - $r[0]['hubloc_primary'] = intval($location['primary']); - hubloc_change_primary($r[0]); - $what .= 'primary_hub '; - $changed = true; - } - elseif($absolute) { - // Absolute sync - make sure the current primary is correctly reflected in the xchan - $pr = hubloc_change_primary($r[0]); - if($pr) { - $what .= 'xchan_primary '; - $changed = true; - } - } - if(intval($r[0]['hubloc_deleted']) && (! intval($location['deleted']))) { - $n = q("update hubloc set hubloc_deleted = 0, hubloc_updated = '%s' where hubloc_id = %d", - dbesc(datetime_convert()), - intval($r[0]['hubloc_id']) - ); - $what .= 'undelete_hub '; - $changed = true; - } - elseif((! intval($r[0]['hubloc_deleted'])) && (intval($location['deleted']))) { - logger('deleting hubloc: ' . $r[0]['hubloc_addr']); - $n = q("update hubloc set hubloc_deleted = 1, hubloc_updated = '%s' where hubloc_id = %d", - dbesc(datetime_convert()), - intval($r[0]['hubloc_id']) - ); - $what .= 'delete_hub '; - $changed = true; - } - continue; - } - - // Existing hubs are dealt with. Now let's process any new ones. - // New hub claiming to be primary. Make it so by removing any existing primaries. - - if(intval($location['primary'])) { - $r = q("update hubloc set hubloc_primary = 0, hubloc_updated = '%s' where hubloc_hash = '%s' and hubloc_primary = 1", - dbesc(datetime_convert()), - dbesc($sender['hash']) - ); - } - logger('New hub: ' . $location['url']); - - $addr_arr = explode('@', $location['address']); - - $r = hubloc_store_lowlevel( - [ - 'hubloc_guid' => $sender['guid'], - 'hubloc_guid_sig' => $sender['guid_sig'], - 'hubloc_hash' => $sender['hash'], - 'hubloc_addr' => $location['address'], - 'hubloc_network' => 'zot', - 'hubloc_primary' => intval($location['primary']), - 'hubloc_url' => $location['url'], - 'hubloc_url_sig' => $location['url_sig'], - 'hubloc_host' => $location['host'], - 'hubloc_callback' => $location['callback'], - 'hubloc_sitekey' => $location['sitekey'], - 'hubloc_updated' => datetime_convert(), - 'hubloc_connected' => datetime_convert(), - 'hubloc_id_url' => $location['url'] . '/channel/' . $addr_arr[0] - ] - ); - - $what .= 'newhub '; - $changed = true; - - if($location['primary']) { - $r = q("select * from hubloc where hubloc_addr = '%s' and hubloc_sitekey = '%s' limit 1", - dbesc($location['address']), - dbesc($location['sitekey']) - ); - if($r) - hubloc_change_primary($r[0]); - } - } - - // get rid of any hubs we have for this channel which weren't reported. - - if($absolute && $xisting) { - foreach($xisting as $x) { - if(! array_key_exists('updated',$x)) { - logger('Deleting unreferenced hub location ' . $x['hubloc_addr']); - $r = q("update hubloc set hubloc_deleted = 1, hubloc_updated = '%s' where hubloc_id = %d", - dbesc(datetime_convert()), - intval($x['hubloc_id']) - ); - $what .= 'removed_hub '; - $changed = true; - } - } - } - } - else { - logger('No locations to sync!'); - } - - $ret['change_message'] = $what; - $ret['changed'] = $changed; - - return $ret; -} - -/** - * @brief Returns an array with all known distinct hubs for this channel. - * - * @see zot_get_hublocs() - * @param array $channel an associative array which must contain - * * \e string \b channel_portable_id the hash of the channel - * @return array an array with associative arrays - */ -function zot_encode_locations($channel) { - $ret = array(); - - $x = zot_get_hublocs($channel['channel_portable_id']); - - if($x && count($x)) { - foreach($x as $hub) { - - // if this is a local channel that has been deleted, the hubloc is no good - make sure it is marked deleted - // so that nobody tries to use it. - - if(intval($channel['channel_removed']) && $hub['hubloc_url'] === z_root()) - $hub['hubloc_deleted'] = 1; - - $ret[] = [ - 'host' => $hub['hubloc_host'], - 'address' => $hub['hubloc_addr'], - 'primary' => (intval($hub['hubloc_primary']) ? true : false), - 'url' => $hub['hubloc_url'], - 'url_sig' => $hub['hubloc_url_sig'], - 'callback' => $hub['hubloc_callback'], - 'sitekey' => $hub['hubloc_sitekey'], - 'deleted' => (intval($hub['hubloc_deleted']) ? true : false) - ]; - } - } - - return $ret; -} - -/** - * @brief Imports a directory profile. - * - * @param string $hash - * @param array $profile - * @param string $addr - * @param number $ud_flags (optional) UPDATE_FLAGS_UPDATED - * @param number $suppress_update (optional) default 0 - * @return boolean $updated if something changed - */ -function import_directory_profile($hash, $profile, $addr, $ud_flags = UPDATE_FLAGS_UPDATED, $suppress_update = 0) { - - logger('import_directory_profile', LOGGER_DEBUG); - if (! $hash) - return false; - - $arr = array(); - - $arr['xprof_hash'] = $hash; - $arr['xprof_dob'] = (($profile['birthday'] === '0000-00-00') ? $profile['birthday'] : datetime_convert('','',$profile['birthday'],'Y-m-d')); // !!!! check this for 0000 year - $arr['xprof_age'] = (($profile['age']) ? intval($profile['age']) : 0); - $arr['xprof_desc'] = (($profile['description']) ? htmlspecialchars($profile['description'], ENT_COMPAT,'UTF-8',false) : ''); - $arr['xprof_gender'] = (($profile['gender']) ? htmlspecialchars($profile['gender'], ENT_COMPAT,'UTF-8',false) : ''); - $arr['xprof_marital'] = (($profile['marital']) ? htmlspecialchars($profile['marital'], ENT_COMPAT,'UTF-8',false) : ''); - $arr['xprof_sexual'] = (($profile['sexual']) ? htmlspecialchars($profile['sexual'], ENT_COMPAT,'UTF-8',false) : ''); - $arr['xprof_locale'] = (($profile['locale']) ? htmlspecialchars($profile['locale'], ENT_COMPAT,'UTF-8',false) : ''); - $arr['xprof_region'] = (($profile['region']) ? htmlspecialchars($profile['region'], ENT_COMPAT,'UTF-8',false) : ''); - $arr['xprof_postcode'] = (($profile['postcode']) ? htmlspecialchars($profile['postcode'], ENT_COMPAT,'UTF-8',false) : ''); - $arr['xprof_country'] = (($profile['country']) ? htmlspecialchars($profile['country'], ENT_COMPAT,'UTF-8',false) : ''); - $arr['xprof_about'] = (($profile['about']) ? htmlspecialchars($profile['about'], ENT_COMPAT,'UTF-8',false) : ''); - $arr['xprof_homepage'] = (($profile['homepage']) ? htmlspecialchars($profile['homepage'], ENT_COMPAT,'UTF-8',false) : ''); - $arr['xprof_hometown'] = (($profile['hometown']) ? htmlspecialchars($profile['hometown'], ENT_COMPAT,'UTF-8',false) : ''); - - $clean = array(); - if (array_key_exists('keywords', $profile) and is_array($profile['keywords'])) { - import_directory_keywords($hash,$profile['keywords']); - foreach ($profile['keywords'] as $kw) { - $kw = trim(htmlspecialchars($kw,ENT_COMPAT, 'UTF-8', false)); - $kw = trim($kw, ','); - $clean[] = $kw; - } - } - - $arr['xprof_keywords'] = implode(' ',$clean); - - // Self censored, make it so - // These are not translated, so the German "erwachsenen" keyword will not censor the directory profile. Only the English form - "adult". - - - if(in_arrayi('nsfw',$clean) || in_arrayi('adult',$clean)) { - q("update xchan set xchan_selfcensored = 1 where xchan_hash = '%s'", - dbesc($hash) - ); - } - - $r = q("select * from xprof where xprof_hash = '%s' limit 1", - dbesc($hash) - ); - - if ($arr['xprof_age'] > 150) - $arr['xprof_age'] = 150; - if ($arr['xprof_age'] < 0) - $arr['xprof_age'] = 0; - - if ($r) { - $update = false; - foreach ($r[0] as $k => $v) { - if ((array_key_exists($k,$arr)) && ($arr[$k] != $v)) { - logger('import_directory_profile: update ' . $k . ' => ' . $arr[$k]); - $update = true; - break; - } - } - if ($update) { - q("update xprof set - xprof_desc = '%s', - xprof_dob = '%s', - xprof_age = %d, - xprof_gender = '%s', - xprof_marital = '%s', - xprof_sexual = '%s', - xprof_locale = '%s', - xprof_region = '%s', - xprof_postcode = '%s', - xprof_country = '%s', - xprof_about = '%s', - xprof_homepage = '%s', - xprof_hometown = '%s', - xprof_keywords = '%s' - where xprof_hash = '%s'", - dbesc($arr['xprof_desc']), - dbesc($arr['xprof_dob']), - intval($arr['xprof_age']), - dbesc($arr['xprof_gender']), - dbesc($arr['xprof_marital']), - dbesc($arr['xprof_sexual']), - dbesc($arr['xprof_locale']), - dbesc($arr['xprof_region']), - dbesc($arr['xprof_postcode']), - dbesc($arr['xprof_country']), - dbesc($arr['xprof_about']), - dbesc($arr['xprof_homepage']), - dbesc($arr['xprof_hometown']), - dbesc($arr['xprof_keywords']), - dbesc($arr['xprof_hash']) - ); - } - } else { - $update = true; - logger('New profile'); - q("insert into xprof (xprof_hash, xprof_desc, xprof_dob, xprof_age, xprof_gender, xprof_marital, xprof_sexual, xprof_locale, xprof_region, xprof_postcode, xprof_country, xprof_about, xprof_homepage, xprof_hometown, xprof_keywords) values ('%s', '%s', '%s', %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s') ", - dbesc($arr['xprof_hash']), - dbesc($arr['xprof_desc']), - dbesc($arr['xprof_dob']), - intval($arr['xprof_age']), - dbesc($arr['xprof_gender']), - dbesc($arr['xprof_marital']), - dbesc($arr['xprof_sexual']), - dbesc($arr['xprof_locale']), - dbesc($arr['xprof_region']), - dbesc($arr['xprof_postcode']), - dbesc($arr['xprof_country']), - dbesc($arr['xprof_about']), - dbesc($arr['xprof_homepage']), - dbesc($arr['xprof_hometown']), - dbesc($arr['xprof_keywords']) - ); - } - - $d = [ - 'xprof' => $arr, - 'profile' => $profile, - 'update' => $update - ]; - /** - * @hooks import_directory_profile - * Called when processing delivery of a profile structure from an external source (usually for directory storage). - * * \e array \b xprof - * * \e array \b profile - * * \e boolean \b update - */ - call_hooks('import_directory_profile', $d); - - if (($d['update']) && (! $suppress_update)) - update_modtime($arr['xprof_hash'],random_string() . '@' . App::get_hostname(), $addr, $ud_flags); - - return $d['update']; -} - -/** - * @brief - * - * @param string $hash An xtag_hash - * @param array $keywords - */ -function import_directory_keywords($hash, $keywords) { - - $existing = array(); - $r = q("select * from xtag where xtag_hash = '%s' and xtag_flags = 0", - dbesc($hash) - ); - - if($r) { - foreach($r as $rr) - $existing[] = $rr['xtag_term']; - } - - $clean = array(); - foreach($keywords as $kw) { - $kw = trim(htmlspecialchars($kw,ENT_COMPAT, 'UTF-8', false)); - $kw = trim($kw, ','); - $clean[] = $kw; - } - - foreach($existing as $x) { - if(! in_array($x, $clean)) - $r = q("delete from xtag where xtag_hash = '%s' and xtag_term = '%s' and xtag_flags = 0", - dbesc($hash), - dbesc($x) - ); - } - foreach($clean as $x) { - if(! in_array($x, $existing)) { - $r = q("insert into xtag ( xtag_hash, xtag_term, xtag_flags) values ( '%s' ,'%s', 0 )", - dbesc($hash), - dbesc($x) - ); - } - } -} - -/** - * @brief - * - * @param string $hash - * @param string $guid - * @param string $addr - * @param int $flags (optional) default 0 - */ -function update_modtime($hash, $guid, $addr, $flags = 0) { - - $dirmode = intval(get_config('system', 'directory_mode')); - - if($dirmode == DIRECTORY_MODE_NORMAL) - return; - - if($flags) { - q("insert into updates (ud_hash, ud_guid, ud_date, ud_flags, ud_addr ) values ( '%s', '%s', '%s', %d, '%s' )", - dbesc($hash), - dbesc($guid), - dbesc(datetime_convert()), - intval($flags), - dbesc($addr) - ); - } - else { - q("update updates set ud_flags = ( ud_flags | %d ) where ud_addr = '%s' and not (ud_flags & %d)>0 ", - intval(UPDATE_FLAGS_UPDATED), - dbesc($addr), - intval(UPDATE_FLAGS_UPDATED) - ); - } -} - -/** - * @brief - * - * @param array $arr - * @param string $pubkey - * @return boolean true if updated or inserted - */ -function import_site($arr, $pubkey) { - if( (! is_array($arr)) || (! $arr['url']) || (! $arr['url_sig'])) - return false; - - if(! Crypto::verify($arr['url'], base64url_decode($arr['url_sig']), $pubkey)) { - logger('Bad url_sig'); - return false; - } - - $update = false; - $exists = false; - - $r = q("select * from site where site_url = '%s' limit 1", - dbesc($arr['url']) - ); - if($r) { - $exists = true; - $siterecord = $r[0]; - } - - $site_directory = 0; - if($arr['directory_mode'] == 'normal') - $site_directory = DIRECTORY_MODE_NORMAL; - if($arr['directory_mode'] == 'primary') - $site_directory = DIRECTORY_MODE_PRIMARY; - if($arr['directory_mode'] == 'secondary') - $site_directory = DIRECTORY_MODE_SECONDARY; - if($arr['directory_mode'] == 'standalone') - $site_directory = DIRECTORY_MODE_STANDALONE; - - $register_policy = 0; - if($arr['register_policy'] == 'closed') - $register_policy = REGISTER_CLOSED; - if($arr['register_policy'] == 'open') - $register_policy = REGISTER_OPEN; - if($arr['register_policy'] == 'approve') - $register_policy = REGISTER_APPROVE; - - $access_policy = 0; - if(array_key_exists('access_policy',$arr)) { - if($arr['access_policy'] === 'private') - $access_policy = ACCESS_PRIVATE; - if($arr['access_policy'] === 'paid') - $access_policy = ACCESS_PAID; - if($arr['access_policy'] === 'free') - $access_policy = ACCESS_FREE; - if($arr['access_policy'] === 'tiered') - $access_policy = ACCESS_TIERED; - } - - // don't let insecure sites register as public hubs - - if(strpos($arr['url'],'https://') === false) - $access_policy = ACCESS_PRIVATE; - - if($access_policy != ACCESS_PRIVATE) { - $x = z_fetch_url($arr['url'] . '/siteinfo.json'); - if(! $x['success']) - $access_policy = ACCESS_PRIVATE; - } - - $directory_url = htmlspecialchars($arr['directory_url'],ENT_COMPAT,'UTF-8',false); - $url = htmlspecialchars(strtolower($arr['url']),ENT_COMPAT,'UTF-8',false); - $sellpage = htmlspecialchars($arr['sellpage'],ENT_COMPAT,'UTF-8',false); - $site_location = htmlspecialchars($arr['location'],ENT_COMPAT,'UTF-8',false); - $site_realm = htmlspecialchars($arr['realm'],ENT_COMPAT,'UTF-8',false); - $site_project = htmlspecialchars($arr['project'],ENT_COMPAT,'UTF-8',false); - $site_crypto = ((array_key_exists('encryption',$arr) && is_array($arr['encryption'])) ? htmlspecialchars(implode(',',$arr['encryption']),ENT_COMPAT,'UTF-8',false) : ''); - $site_version = ((array_key_exists('version',$arr)) ? htmlspecialchars($arr['version'],ENT_COMPAT,'UTF-8',false) : ''); - - // You can have one and only one primary directory per realm. - // Downgrade any others claiming to be primary. As they have - // flubbed up this badly already, don't let them be directory servers at all. - - if(($site_directory === DIRECTORY_MODE_PRIMARY) - && ($site_realm === get_directory_realm()) - && ($arr['url'] != get_directory_primary())) { - $site_directory = DIRECTORY_MODE_NORMAL; - } - - $site_flags = $site_directory; - - if(array_key_exists('zot',$arr)) { - set_sconfig($arr['url'],'system','zot_version',$arr['zot']); - } - - if($exists) { - if(($siterecord['site_flags'] != $site_flags) - || ($siterecord['site_access'] != $access_policy) - || ($siterecord['site_directory'] != $directory_url) - || ($siterecord['site_sellpage'] != $sellpage) - || ($siterecord['site_location'] != $site_location) - || ($siterecord['site_register'] != $register_policy) - || ($siterecord['site_project'] != $site_project) - || ($siterecord['site_realm'] != $site_realm) - || ($siterecord['site_crypto'] != $site_crypto) - || ($siterecord['site_version'] != $site_version) ) { - - $update = true; - -// logger('import_site: input: ' . print_r($arr,true)); -// logger('import_site: stored: ' . print_r($siterecord,true)); - - $r = q("update site set site_dead = 0, site_location = '%s', site_flags = %d, site_access = %d, site_directory = '%s', site_register = %d, site_update = '%s', site_sellpage = '%s', site_realm = '%s', site_type = %d, site_project = '%s', site_version = '%s', site_crypto = '%s' - where site_url = '%s'", - dbesc($site_location), - intval($site_flags), - intval($access_policy), - dbesc($directory_url), - intval($register_policy), - dbesc(datetime_convert()), - dbesc($sellpage), - dbesc($site_realm), - intval(SITE_TYPE_ZOT), - dbesc($site_project), - dbesc($site_version), - dbesc($site_crypto), - dbesc($url) - ); - if(! $r) { - logger('Update failed. ' . print_r($arr,true)); - } - } - else { - // update the timestamp to indicate we communicated with this site - q("update site set site_dead = 0, site_update = '%s' where site_url = '%s'", - dbesc(datetime_convert()), - dbesc($url) - ); - } - } - else { - $update = true; - - $r = site_store_lowlevel( - [ - 'site_location' => $site_location, - 'site_url' => $url, - 'site_access' => intval($access_policy), - 'site_flags' => intval($site_flags), - 'site_update' => datetime_convert(), - 'site_directory' => $directory_url, - 'site_register' => intval($register_policy), - 'site_sellpage' => $sellpage, - 'site_realm' => $site_realm, - 'site_type' => intval(SITE_TYPE_ZOT), - 'site_project' => $site_project, - 'site_version' => $site_version, - 'site_crypto' => $site_crypto - ] - ); - - if(! $r) { - logger('Record create failed. ' . print_r($arr,true)); - } - } - - return $update; -} - - -/** - * @brief Builds and sends a sync packet. - * - * Send a zot packet to all hubs where this channel is duplicated, refreshing - * such things as personal settings, channel permissions, address book updates, etc. - * - * @param int $uid (optional) default 0 - * @param array $packet (optional) default null - * @param boolean $groups_changed (optional) default false - */ -function build_sync_packet($uid = 0, $packet = null, $groups_changed = false) { - - logger('build_sync_packet'); - - $keychange = (($packet && array_key_exists('keychange',$packet)) ? true : false); - if($keychange) { - logger('keychange sync'); - } - - if(! $uid) - $uid = local_channel(); - - if(! $uid) - return; - - $r = q("select * from channel where channel_id = %d limit 1", - intval($uid) - ); - if(! $r) - return; - - $channel = $r[0]; - - // don't provide these in the export - - unset($channel['channel_active']); - unset($channel['channel_password']); - unset($channel['channel_salt']); - - translate_channel_perms_outbound($channel); - if($packet && array_key_exists('abook',$packet) && $packet['abook']) { - for($x = 0; $x < count($packet['abook']); $x ++) { - translate_abook_perms_outbound($packet['abook'][$x]); - } - } - - if(intval($channel['channel_removed'])) - return; - - $h = q("select hubloc.*, site.site_crypto, site.site_version, site.site_project from hubloc left join site on site_url = hubloc_url where hubloc_hash = '%s' and hubloc_deleted = 0", - dbesc(($keychange) ? $packet['keychange']['old_hash'] : $channel['channel_portable_id']) - ); - - if(! $h) - return; - - $synchubs = array(); - - foreach($h as $x) { - if($x['hubloc_host'] == App::get_hostname()) - continue; - - if(stripos($x['site_project'], 'hubzilla') !== false && version_compare($x['site_version'], '4.7.3', '<=')) { - - logger('Dismiss sync due to incompatible version.'); - // logger(print_r($x,true)); - continue; - - } - - $y = q("select site_dead from site where site_url = '%s' limit 1", - dbesc($x['hubloc_url']) - ); - - if((! $y) || ($y[0]['site_dead'] == 0)) - $synchubs[] = $x; - } - - if(! $synchubs) - return; - - $r = q("select xchan_guid, xchan_guid_sig from xchan where xchan_hash = '%s' limit 1", - dbesc($channel['channel_portable_id']) - ); - - if(! $r) - return; - - $env_recips = array(); - $env_recips[] = array('guid' => $r[0]['xchan_guid'],'guid_sig' => $r[0]['xchan_guid_sig']); - - if($packet) - logger('packet: ' . print_r($packet, true),LOGGER_DATA, LOG_DEBUG); - - $info = (($packet) ? $packet : array()); - $info['type'] = 'channel_sync'; - $info['encoding'] = 'red'; // note: not zot, this packet is very platform specific - $info['relocate'] = ['channel_address' => $channel['channel_address'], 'url' => z_root() ]; - - if(array_key_exists($uid,App::$config) && array_key_exists('transient',App::$config[$uid])) { - $settings = App::$config[$uid]['transient']; - if($settings) { - $info['config'] = $settings; - } - } - - if($channel) { - $info['channel'] = array(); - foreach($channel as $k => $v) { - - // filter out any joined tables like xchan - - if(strpos($k,'channel_') !== 0) - continue; - - // don't pass these elements, they should not be synchronised - - - $disallowed = [ - 'channel_id','channel_account_id','channel_primary','channel_address', - 'channel_deleted','channel_removed','channel_system' - ]; - - if(! $keychange) { - $disallowed[] = 'channel_prvkey'; - } - - if(in_array($k,$disallowed)) - continue; - - $info['channel'][$k] = $v; - } - } - - if($groups_changed) { - $r = q("select hash as collection, visible, deleted, gname as name from pgrp where uid = %d", - intval($uid) - ); - if($r) - $info['collections'] = $r; - - $r = q("select pgrp.hash as collection, pgrp_member.xchan as member from pgrp left join pgrp_member on pgrp.id = pgrp_member.gid where pgrp_member.uid = %d", - intval($uid) - ); - if($r) - $info['collection_members'] = $r; - } - - $interval = ((get_config('system','delivery_interval') !== false) - ? intval(get_config('system','delivery_interval')) : 2 ); - - logger('Packet: ' . print_r($info,true), LOGGER_DATA, LOG_DEBUG); - - $total = count($synchubs); - - foreach($synchubs as $hub) { - $hash = random_string(); - $n = zot_build_packet($channel,'notify',$env_recips,$hub['hubloc_sitekey'],$hub['site_crypto'],$hash); - queue_insert(array( - 'hash' => $hash, - 'account_id' => $channel['channel_account_id'], - 'channel_id' => $channel['channel_id'], - 'posturl' => $hub['hubloc_callback'], - 'notify' => $n, - 'msg' => json_encode($info) - )); - - - $x = q("select count(outq_hash) as total from outq where outq_delivered = 0"); - if(intval($x[0]['total']) > intval(get_config('system','force_queue_threshold',3000))) { - logger('immediate delivery deferred.', LOGGER_DEBUG, LOG_INFO); - update_queue_item($hash); - continue; - } - - - Zotlabs\Daemon\Master::Summon(array('Deliver', $hash)); - $total = $total - 1; - - if($interval && $total) - @time_sleep_until(microtime(true) + (float) $interval); - } -} - -/** - * @brief - * - * @param array $sender - * @param array $arr - * @param array $deliveries - * @return array - */ -function process_channel_sync_delivery($sender, $arr, $deliveries) { - - require_once('include/import.php'); - - /** @FIXME this will sync red structures (channel, pconfig and abook). - Eventually we need to make this application agnostic. */ - - $result = []; - - $keychange = ((array_key_exists('keychange',$arr)) ? true : false); - - foreach ($deliveries as $d) { - $r = q("select * from channel where channel_hash = '%s' limit 1", - dbesc(($keychange) ? $arr['keychange']['old_hash'] : $d['hash']) - ); - - if (! $r) { - $result[] = array($d['hash'],'not found'); - continue; - } - - $channel = $r[0]; - - $max_friends = service_class_fetch($channel['channel_id'],'total_channels'); - $max_feeds = account_service_class_fetch($channel['channel_account_id'],'total_feeds'); - - if($channel['channel_hash'] != $sender['hash']) { - logger('Possible forgery. Sender ' . $sender['hash'] . ' is not ' . $channel['channel_hash']); - $result[] = array($d['hash'],'channel mismatch',$channel['channel_name'],''); - continue; - } - - if($keychange) { - // verify the keychange operation - if(! Crypto::verify($arr['channel']['channel_pubkey'],base64url_decode($arr['keychange']['new_sig']),$channel['channel_prvkey'])) { - logger('sync keychange: verification failed'); - continue; - } - - $sig = base64url_encode(Crypto::sign($channel['channel_guid'],$arr['channel']['channel_prvkey'])); - $hash = make_xchan_hash($channel['channel_guid'],$sig); - - - $r = q("update channel set channel_prvkey = '%s', channel_pubkey = '%s', channel_guid_sig = '%s', - channel_hash = '%s' where channel_id = %d", - dbesc($arr['channel']['channel_prvkey']), - dbesc($arr['channel']['channel_pubkey']), - dbesc($sig), - dbesc($hash), - intval($channel['channel_id']) - ); - if(! $r) { - logger('keychange sync: channel update failed'); - continue; - } - - $r = q("select * from channel where channel_id = %d", - intval($channel['channel_id']) - ); - - if(! $r) { - logger('keychange sync: channel retrieve failed'); - continue; - } - - $channel = $r[0]; - - $h = q("select * from hubloc where hubloc_hash = '%s' and hubloc_url = '%s' ", - dbesc($arr['keychange']['old_hash']), - dbesc(z_root()) - ); - - if($h) { - foreach($h as $hv) { - $hv['hubloc_guid_sig'] = $sig; - $hv['hubloc_hash'] = $hash; - $hv['hubloc_url_sig'] = base64url_encode(Crypto::sign(z_root(),$channel['channel_prvkey'])); - hubloc_store_lowlevel($hv); - } - } - - $x = q("select * from xchan where xchan_hash = '%s' ", - dbesc($arr['keychange']['old_hash']) - ); - - $check = q("select * from xchan where xchan_hash = '%s'", - dbesc($hash) - ); - - if(($x) && (! $check)) { - $oldxchan = $x[0]; - foreach($x as $xv) { - $xv['xchan_guid_sig'] = $sig; - $xv['xchan_hash'] = $hash; - $xv['xchan_pubkey'] = $channel['channel_pubkey']; - xchan_store_lowlevel($xv); - $newxchan = $xv; - } - } - - $a = q("select * from abook where abook_xchan = '%s' and abook_self = 1", - dbesc($arr['keychange']['old_hash']) - ); - - if($a) { - q("update abook set abook_xchan = '%s' where abook_id = %d", - dbesc($hash), - intval($a[0]['abook_id']) - ); - } - - xchan_change_key($oldxchan,$newxchan,$arr['keychange']); - - // keychange operations can end up in a confused state if you try and sync anything else - // besides the channel keys, so ignore any other packets. - - continue; - } - - // if the clone is active, so are we - - if(substr($channel['channel_active'],0,10) !== substr(datetime_convert(),0,10)) { - q("UPDATE channel set channel_active = '%s' where channel_id = %d", - dbesc(datetime_convert()), - intval($channel['channel_id']) - ); - } - - if(array_key_exists('config',$arr) && is_array($arr['config']) && count($arr['config'])) { - foreach($arr['config'] as $cat => $k) { - - $pconfig_updated = []; - $pconfig_del = []; - - foreach($arr['config'][$cat] as $k => $v) { - - if (strpos($k,'pcfgud:')===0) { - - $realk = substr($k,7); - $pconfig_updated[$realk] = $v; - unset($arr['config'][$cat][$k]); - - } - - if (strpos($k,'pcfgdel:')===0) { - $realk = substr($k,8); - $pconfig_del[$realk] = datetime_convert(); - unset($arr['config'][$cat][$k]); - } - } - - foreach($arr['config'][$cat] as $k => $v) { - - if (!isset($pconfig_updated[$k])) { - $pconfig_updated[$k] = NULL; - } - - set_pconfig($channel['channel_id'],$cat,$k,$v,$pconfig_updated[$k]); - - } - - foreach($pconfig_del as $k => $updated) { - del_pconfig($channel['channel_id'],$cat,$k,$updated); - } - - } - } - - if(array_key_exists('obj',$arr) && $arr['obj']) - sync_objs($channel,$arr['obj']); - - if(array_key_exists('likes',$arr) && $arr['likes']) - import_likes($channel,$arr['likes']); - - if(array_key_exists('app',$arr) && $arr['app']) - sync_apps($channel,$arr['app']); - - if(array_key_exists('addressbook',$arr) && $arr['addressbook']) - sync_addressbook($channel,$arr['addressbook']); - - if(array_key_exists('calendar',$arr) && $arr['calendar']) - sync_calendar($channel,$arr['calendar']); - - if(array_key_exists('chatroom',$arr) && $arr['chatroom']) - sync_chatrooms($channel,$arr['chatroom']); - - if(array_key_exists('conv',$arr) && $arr['conv']) - import_conv($channel,$arr['conv']); - - if(array_key_exists('mail',$arr) && $arr['mail']) - sync_mail($channel,$arr['mail']); - - if(array_key_exists('event',$arr) && $arr['event']) - sync_events($channel,$arr['event']); - - if(array_key_exists('event_item',$arr) && $arr['event_item']) - sync_items($channel,$arr['event_item'],((array_key_exists('relocate',$arr)) ? $arr['relocate'] : null)); - - if(array_key_exists('item',$arr) && $arr['item']) - sync_items($channel,$arr['item'],((array_key_exists('relocate',$arr)) ? $arr['relocate'] : null)); - - // deprecated, maintaining for a few months for upward compatibility - // this should sync webpages, but the logic is a bit subtle - - if(array_key_exists('item_id',$arr) && $arr['item_id']) - sync_items($channel,$arr['item_id']); - - if(array_key_exists('menu',$arr) && $arr['menu']) - sync_menus($channel,$arr['menu']); - - if(array_key_exists('file',$arr) && $arr['file']) - sync_files($channel,$arr['file']); - - if(array_key_exists('wiki',$arr) && $arr['wiki']) - sync_items($channel,$arr['wiki'],((array_key_exists('relocate',$arr)) ? $arr['relocate'] : null)); - - if(array_key_exists('channel',$arr) && is_array($arr['channel']) && count($arr['channel'])) { - - $remote_channel = $arr['channel']; - $remote_channel['channel_id'] = $channel['channel_id']; - translate_channel_perms_inbound($remote_channel); - - - if(array_key_exists('channel_pageflags',$arr['channel']) && intval($arr['channel']['channel_pageflags'])) { - // Several pageflags are site-specific and cannot be sync'd. - // Only allow those bits which are shareable from the remote and then - // logically OR with the local flags - - $arr['channel']['channel_pageflags'] = $arr['channel']['channel_pageflags'] & (PAGE_HIDDEN|PAGE_AUTOCONNECT|PAGE_APPLICATION|PAGE_PREMIUM|PAGE_ADULT); - $arr['channel']['channel_pageflags'] = $arr['channel']['channel_pageflags'] | $channel['channel_pageflags']; - } - - $disallowed = [ - 'channel_id', 'channel_account_id', 'channel_primary', 'channel_prvkey', - 'channel_address', 'channel_notifyflags', 'channel_removed', 'channel_deleted', - 'channel_system', 'channel_r_stream', 'channel_r_profile', 'channel_r_abook', - 'channel_r_storage', 'channel_r_pages', 'channel_w_stream', 'channel_w_wall', - 'channel_w_comment', 'channel_w_mail', 'channel_w_like', 'channel_w_tagwall', - 'channel_w_chat', 'channel_w_storage', 'channel_w_pages', 'channel_a_republish', - 'channel_a_delegate', 'channel_moved', 'channel_r_photos', 'channel_w_photos' - ]; - - $clean = array(); - foreach($arr['channel'] as $k => $v) { - if(in_array($k,$disallowed)) - continue; - $clean[$k] = $v; - } - if(count($clean)) { - foreach($clean as $k => $v) { - $r = dbq("UPDATE channel set " . dbesc($k) . " = '" . dbesc($v) - . "' where channel_id = " . intval($channel['channel_id']) ); - } - } - } - - if(array_key_exists('abook',$arr) && is_array($arr['abook']) && count($arr['abook'])) { - $total_friends = 0; - $total_feeds = 0; - - $r = q("select abook_id, abook_feed from abook where abook_channel = %d", - intval($channel['channel_id']) - ); - if($r) { - // don't count yourself - $total_friends = ((count($r) > 0) ? count($r) - 1 : 0); - foreach($r as $rr) - if(intval($rr['abook_feed'])) - $total_feeds ++; - } - - - $disallowed = array('abook_id','abook_account','abook_channel','abook_rating','abook_rating_text','abook_not_here'); - - foreach($arr['abook'] as $abook) { - - $abconfig = null; - - if(array_key_exists('abconfig',$abook) && is_array($abook['abconfig']) && count($abook['abconfig'])) - $abconfig = $abook['abconfig']; - - if(! array_key_exists('abook_blocked',$abook)) { - // convert from redmatrix - $abook['abook_blocked'] = (($abook['abook_flags'] & 0x0001) ? 1 : 0); - $abook['abook_ignored'] = (($abook['abook_flags'] & 0x0002) ? 1 : 0); - $abook['abook_hidden'] = (($abook['abook_flags'] & 0x0004) ? 1 : 0); - $abook['abook_archived'] = (($abook['abook_flags'] & 0x0008) ? 1 : 0); - $abook['abook_pending'] = (($abook['abook_flags'] & 0x0010) ? 1 : 0); - $abook['abook_unconnected'] = (($abook['abook_flags'] & 0x0020) ? 1 : 0); - $abook['abook_self'] = (($abook['abook_flags'] & 0x0080) ? 1 : 0); - $abook['abook_feed'] = (($abook['abook_flags'] & 0x0100) ? 1 : 0); - } - - $clean = array(); - if($abook['abook_xchan'] && $abook['entry_deleted']) { - logger('Removing abook entry for ' . $abook['abook_xchan']); - - $r = q("select abook_id, abook_feed from abook where abook_xchan = '%s' and abook_channel = %d and abook_self = 0 limit 1", - dbesc($abook['abook_xchan']), - intval($channel['channel_id']) - ); - if($r) { - contact_remove($channel['channel_id'],$r[0]['abook_id']); - if($total_friends) - $total_friends --; - if(intval($r[0]['abook_feed'])) - $total_feeds --; - } - continue; - } - - // Perform discovery if the referenced xchan hasn't ever been seen on this hub. - // This relies on the undocumented behaviour that red sites send xchan info with the abook - // and import_author_xchan will look them up on all federated networks - - if($abook['abook_xchan'] && $abook['xchan_addr']) { - $h = zot_get_hublocs($abook['abook_xchan']); - if(! $h) { - $xhash = import_author_xchan(encode_item_xchan($abook)); - if(! $xhash) { - logger('Import of ' . $abook['xchan_addr'] . ' failed.'); - continue; - } - } - } - - foreach($abook as $k => $v) { - if(in_array($k,$disallowed) || (strpos($k,'abook') !== 0)) - continue; - $clean[$k] = $v; - } - - if(! array_key_exists('abook_xchan',$clean)) - continue; - - if(array_key_exists('abook_instance',$clean) && $clean['abook_instance'] && strpos($clean['abook_instance'],z_root()) === false) { - $clean['abook_not_here'] = 1; - } - - - $r = q("select * from abook where abook_xchan = '%s' and abook_channel = %d limit 1", - dbesc($clean['abook_xchan']), - intval($channel['channel_id']) - ); - - // make sure we have an abook entry for this xchan on this system - - if(! $r) { - if($max_friends !== false && $total_friends > $max_friends) { - logger('total_channels service class limit exceeded'); - continue; - } - if($max_feeds !== false && intval($clean['abook_feed']) && $total_feeds > $max_feeds) { - logger('total_feeds service class limit exceeded'); - continue; - } - abook_store_lowlevel( - [ - 'abook_xchan' => $clean['abook_xchan'], - 'abook_account' => $channel['channel_account_id'], - 'abook_channel' => $channel['channel_id'] - ] - ); - $total_friends ++; - if(intval($clean['abook_feed'])) - $total_feeds ++; - } - - if(count($clean)) { - foreach($clean as $k => $v) { - if($k == 'abook_dob') - $v = dbescdate($v); - - $r = dbq("UPDATE abook set " . dbesc($k) . " = '" . dbesc($v) - . "' where abook_xchan = '" . dbesc($clean['abook_xchan']) . "' and abook_channel = " . intval($channel['channel_id'])); - } - } - - // This will set abconfig vars if the sender is using old-style fixed permissions - // using the raw abook record as passed to us. New-style permissions will fall through - // and be set using abconfig - - translate_abook_perms_inbound($channel,$abook); - - if($abconfig) { - /// @fixme does not handle sync of del_abconfig - foreach($abconfig as $abc) { - set_abconfig($channel['channel_id'],$abc['xchan'],$abc['cat'],$abc['k'],$abc['v']); - } - } - } - } - - // sync collections (privacy groups) oh joy... - - if(array_key_exists('collections',$arr) && is_array($arr['collections']) && count($arr['collections'])) { - $x = q("select * from pgrp where uid = %d", - intval($channel['channel_id']) - ); - foreach($arr['collections'] as $cl) { - $found = false; - if($x) { - foreach($x as $y) { - if($cl['collection'] == $y['hash']) { - $found = true; - break; - } - } - if($found) { - if(($y['gname'] != $cl['name']) - || ($y['visible'] != $cl['visible']) - || ($y['deleted'] != $cl['deleted'])) { - q("update pgrp set gname = '%s', visible = %d, deleted = %d where hash = '%s' and uid = %d", - dbesc($cl['name']), - intval($cl['visible']), - intval($cl['deleted']), - dbesc($cl['collection']), - intval($channel['channel_id']) - ); - } - if(intval($cl['deleted']) && (! intval($y['deleted']))) { - q("delete from pgrp_member where gid = %d", - intval($y['id']) - ); - } - } - } - if(! $found) { - $r = q("INSERT INTO pgrp ( hash, uid, visible, deleted, gname ) - VALUES( '%s', %d, %d, %d, '%s' ) ", - dbesc($cl['collection']), - intval($channel['channel_id']), - intval($cl['visible']), - intval($cl['deleted']), - dbesc($cl['name']) - ); - } - - // now look for any collections locally which weren't in the list we just received. - // They need to be removed by marking deleted and removing the members. - // This shouldn't happen except for clones created before this function was written. - - if($x) { - $found_local = false; - foreach($x as $y) { - foreach($arr['collections'] as $cl) { - if($cl['collection'] == $y['hash']) { - $found_local = true; - break; - } - } - if(! $found_local) { - q("delete from pgrp_member where gid = %d", - intval($y['id']) - ); - q("update pgrp set deleted = 1 where id = %d and uid = %d", - intval($y['id']), - intval($channel['channel_id']) - ); - } - } - } - } - - // reload the group list with any updates - $x = q("select * from pgrp where uid = %d", - intval($channel['channel_id']) - ); - - // now sync the members - - if(array_key_exists('collection_members', $arr) - && is_array($arr['collection_members']) - && count($arr['collection_members'])) { - - // first sort into groups keyed by the group hash - $members = array(); - foreach($arr['collection_members'] as $cm) { - if(! array_key_exists($cm['collection'],$members)) - $members[$cm['collection']] = array(); - - $members[$cm['collection']][] = $cm['member']; - } - - // our group list is already synchronised - if($x) { - foreach($x as $y) { - - // for each group, loop on members list we just received - if(isset($y['hash']) && isset($members[$y['hash']])) { - foreach($members[$y['hash']] as $member) { - $found = false; - $z = q("select xchan from pgrp_member where gid = %d and uid = %d and xchan = '%s' limit 1", - intval($y['id']), - intval($channel['channel_id']), - dbesc($member) - ); - if($z) - $found = true; - - // if somebody is in the group that wasn't before - add them - - if(! $found) { - q("INSERT INTO pgrp_member (uid, gid, xchan) - VALUES( %d, %d, '%s' ) ", - intval($channel['channel_id']), - intval($y['id']), - dbesc($member) - ); - } - } - } - - // now retrieve a list of members we have on this site - $m = q("select xchan from pgrp_member where gid = %d and uid = %d", - intval($y['id']), - intval($channel['channel_id']) - ); - if($m) { - foreach($m as $mm) { - // if the local existing member isn't in the list we just received - remove them - if(! in_array($mm['xchan'],$members[$y['hash']])) { - q("delete from pgrp_member where xchan = '%s' and gid = %d and uid = %d", - dbesc($mm['xchan']), - intval($y['id']), - intval($channel['channel_id']) - ); - } - } - } - } - } - } - } - - if(array_key_exists('profile',$arr) && is_array($arr['profile']) && count($arr['profile'])) { - - $disallowed = array('id','aid','uid','guid'); - - foreach($arr['profile'] as $profile) { - - $x = q("select * from profile where profile_guid = '%s' and uid = %d limit 1", - dbesc($profile['profile_guid']), - intval($channel['channel_id']) - ); - if(! $x) { - profile_store_lowlevel( - [ - 'aid' => $channel['channel_account_id'], - 'uid' => $channel['channel_id'], - 'profile_guid' => $profile['profile_guid'], - ] - ); - - $x = q("select * from profile where profile_guid = '%s' and uid = %d limit 1", - dbesc($profile['profile_guid']), - intval($channel['channel_id']) - ); - if(! $x) - continue; - } - $clean = array(); - foreach($profile as $k => $v) { - if(in_array($k,$disallowed)) - continue; - - if($profile['is_default'] && in_array($k,['photo','thumb'])) - continue; - - if($k === 'name') - $clean['fullname'] = $v; - elseif($k === 'with') - $clean['partner'] = $v; - elseif($k === 'work') - $clean['employment'] = $v; - elseif(array_key_exists($k,$x[0])) - $clean[$k] = $v; - - /** - * @TODO - * We also need to import local photos if a custom photo is selected - */ - - if((strpos($profile['thumb'],'/photo/profile/l/') !== false) || intval($profile['is_default'])) { - $profile['photo'] = z_root() . '/photo/profile/l/' . $channel['channel_id']; - $profile['thumb'] = z_root() . '/photo/profile/m/' . $channel['channel_id']; - } - else { - $profile['photo'] = z_root() . '/photo/' . basename($profile['photo']); - $profile['thumb'] = z_root() . '/photo/' . basename($profile['thumb']); - } - } - - if(count($clean)) { - foreach($clean as $k => $v) { - $r = dbq("UPDATE profile set " . TQUOT . dbesc($k) . TQUOT . " = '" . dbesc($v) - . "' where profile_guid = '" . dbesc($profile['profile_guid']) - . "' and uid = " . intval($channel['channel_id'])); - } - } - } - } - - $addon = ['channel' => $channel, 'data' => $arr]; - /** - * @hooks process_channel_sync_delivery - * Called when accepting delivery of a 'sync packet' containing structure and table updates from a channel clone. - * * \e array \b channel - * * \e array \b data - */ - call_hooks('process_channel_sync_delivery', $addon); - - // we should probably do this for all items, but usually we only send one. - - if(array_key_exists('item',$arr) && is_array($arr['item'][0])) { - $DR = new Zotlabs\Lib\DReport(z_root(),$d['hash'],$d['hash'],$arr['item'][0]['message_id'],'channel sync processed'); - $DR->set_name($channel['channel_name'] . ' <' . channel_reddress($channel) . '>'); - } - else - $DR = new Zotlabs\Lib\DReport(z_root(),$d['hash'],$d['hash'],'sync packet','channel sync delivered'); - - $result[] = $DR->get(); - } - - return $result; -} - -/** - * @brief Returns path to /rpost - * - * @todo We probably should make rpost discoverable. - * - * @param array $observer - * * \e string \b xchan_url - * @return string - */ -function get_rpost_path($observer) { - if(! $observer) - return ''; - - $parsed = parse_url($observer['xchan_url']); - - return $parsed['scheme'] . '://' . $parsed['host'] . (($parsed['port']) ? ':' . $parsed['port'] : '') . '/rpost?f='; -} - -/** - * @brief - * - * @param array $x - * @return boolean|string return false or a hash - */ -function import_author_zot($x) { - - // Check that we have both a hubloc and xchan record - as occasionally storage calls will fail and - // we may only end up with one; which results in posts with no author name or photo and are a bit - // of a hassle to repair. If either or both are missing, do a full discovery probe. - - $hash = make_xchan_hash($x['guid'],$x['guid_sig']); - - // also - this function may get passed a profile url as 'url' and zot_refresh wants a hubloc_url (site baseurl), - // so deconstruct the url (if we have one) and rebuild it with just the baseurl components. - - if(array_key_exists('url',$x)) { - $m = parse_url($x['url']); - $desturl = $m['scheme'] . '://' . $m['host']; - } - - $r1 = q("select hubloc_url, hubloc_updated, site_dead from hubloc left join site on - hubloc_url = site_url where hubloc_guid = '%s' and hubloc_guid_sig = '%s' and hubloc_primary = 1 limit 1", - dbesc($x['guid']), - dbesc($x['guid_sig']) - ); - - $r2 = q("select xchan_hash from xchan where xchan_guid = '%s' and xchan_guid_sig = '%s' limit 1", - dbesc($x['guid']), - dbesc($x['guid_sig']) - ); - - $site_dead = false; - - if($r1 && intval($r1[0]['site_dead'])) { - $site_dead = true; - } - - // We have valid and somewhat fresh information. - - if($r1 && $r2 && $r1[0]['hubloc_updated'] > datetime_convert('UTC','UTC','now - 1 week')) { - logger('in cache', LOGGER_DEBUG); - return $hash; - } - - logger('not in cache or cache stale - probing: ' . print_r($x,true), LOGGER_DEBUG,LOG_INFO); - - // The primary hub may be dead. Try to find another one associated with this identity that is - // still alive. If we find one, use that url for the discovery/refresh probe. Otherwise, the dead site - // is all we have and there is no point probing it. Just return the hash indicating we have a - // cached entry and the identity is valid. It's just unreachable until they bring back their - // server from the grave or create another clone elsewhere. - - if($site_dead) { - logger('dead site - ignoring', LOGGER_DEBUG,LOG_INFO); - - $r = q("select hubloc_url from hubloc left join site on hubloc_url = site_url - where hubloc_hash = '%s' and site_dead = 0", - dbesc($hash) - ); - if($r) { - logger('found another site that is not dead: ' . $r[0]['hubloc_url'], LOGGER_DEBUG,LOG_INFO); - $desturl = $r[0]['hubloc_url']; - } - else { - return $hash; - } - } - - - $them = array('hubloc_url' => $desturl, 'xchan_guid' => $x['guid'], 'xchan_guid_sig' => $x['guid_sig']); - if(zot_refresh($them)) - return $hash; - - return false; -} - -/** - * @brief Process a message request. - * - * If a site receives a comment to a post but finds they have no parent to attach it with, they - * may send a 'request' packet containing the message_id of the missing parent. This is the handler - * for that packet. We will create a message_list array of the entire conversation starting with - * the missing parent and invoke delivery to the sender of the packet. - * - * include/deliver.php (for local delivery) and mod/post.php (for web delivery) detect the existence of - * this 'message_list' at the destination and split it into individual messages which are - * processed/delivered in order. - * - * Called from mod/post.php - * - * @param array $data - * @return array - */ -function zot_reply_message_request($data) { - $ret = array('success' => false); - - if (! $data['message_id']) { - $ret['message'] = 'no message_id'; - logger('no message_id'); - json_return_and_die($ret); - } - - $sender = $data['sender']; - $sender_hash = make_xchan_hash($sender['guid'], $sender['guid_sig']); - - /* - * Find the local channel in charge of this post (the first and only recipient of the request packet) - */ - - $arr = $data['recipients'][0]; - $recip_hash = make_xchan_hash($arr['guid'],$arr['guid_sig']); - $c = q("select * from channel left join xchan on channel_portable_id = xchan_hash where channel_portable_id = '%s' limit 1", - dbesc($recip_hash) - ); - if (! $c) { - logger('recipient channel not found.'); - $ret['message'] .= 'recipient not found.' . EOL; - json_return_and_die($ret); - } - - /* - * fetch the requested conversation - */ - - $messages = zot_feed($c[0]['channel_id'],$sender_hash,array('message_id' => $data['message_id'])); - - if ($messages) { - $env_recips = null; - - $r = q("select hubloc.*, site.site_crypto from hubloc left join site on hubloc_url = site_url where hubloc_hash = '%s' and hubloc_error = 0 and hubloc_deleted = 0 and site.site_dead = 0 ", - dbesc($sender_hash) - ); - if (! $r) { - logger('no hubs'); - json_return_and_die($ret); - } - $hubs = $r; - - $private = ((array_key_exists('flags', $messages[0]) && in_array('private',$messages[0]['flags'])) ? true : false); - if($private) - $env_recips = array('guid' => $sender['guid'], 'guid_sig' => $sender['guid_sig'], 'hash' => $sender_hash); - - $data_packet = json_encode(array('message_list' => $messages)); - - foreach($hubs as $hub) { - $hash = random_string(); - - /* - * create a notify packet and drop the actual message packet in the queue for pickup - */ - - $n = zot_build_packet($c[0],'notify',$env_recips,(($private) ? $hub['hubloc_sitekey'] : null),$hub['site_crypto'],$hash,array('message_id' => $data['message_id'])); - - queue_insert(array( - 'hash' => $hash, - 'account_id' => $c[0]['channel_account_id'], - 'channel_id' => $c[0]['channel_id'], - 'posturl' => $hub['hubloc_callback'], - 'notify' => $n, - 'msg' => $data_packet - )); - - - $x = q("select count(outq_hash) as total from outq where outq_delivered = 0"); - if(intval($x[0]['total']) > intval(get_config('system','force_queue_threshold',3000))) { - logger('immediate delivery deferred.', LOGGER_DEBUG, LOG_INFO); - update_queue_item($hash); - continue; - } - - /* - * invoke delivery to send out the notify packet - */ - - Zotlabs\Daemon\Master::Summon(array('Deliver', $hash)); - } - } - $ret['success'] = true; - json_return_and_die($ret); -} - -function zot_rekey_request($sender,$data) { - - $ret = array('success' => false); - - // newsig is newkey signed with oldkey - - // The original xchan will remain. In Zot/Receiver we will have imported the new xchan and hubloc to verify - // the packet authenticity. What we will do now is verify that the keychange operation was signed by the - // oldkey, and if so change all the abook, abconfig, group, and permission elements which reference the - // old xchan_hash. - - if((! $data['old_key']) && (! $data['new_key']) && (! $data['new_sig'])) - json_return_and_die($ret); - - $oldhash = make_xchan_hash($data['old_guid'],$data['old_guid_sig']); - - $r = q("select * from xchan where xchan_hash = '%s' limit 1", - dbesc($oldhash) - ); - - if(! $r) { - json_return_and_die($ret); - } - - $xchan = $r[0]; - - if(! Crypto::verify($data['new_key'],base64url_decode($data['new_sig']),$xchan['xchan_pubkey'])) { - json_return_and_die($ret); - } - - $newhash = make_xchan_hash($sender['guid'],$sender['guid_sig']); - - $r = q("select * from xchan where xchan_hash = '%s' limit 1", - dbesc($newhash) - ); - - $newxchan = $r[0]; - - xchan_change_key($xchan,$newxchan,$data); - - $ret['success'] = true; - json_return_and_die($ret); -} - - -function zotinfo($arr) { - - $ret = array('success' => false); - - $sig_method = get_config('system','signature_algorithm','sha256'); - - $zhash = ((x($arr,'guid_hash')) ? $arr['guid_hash'] : ''); - $zguid = ((x($arr,'guid')) ? $arr['guid'] : ''); - $zguid_sig = ((x($arr,'guid_sig')) ? $arr['guid_sig'] : ''); - $zaddr = ((x($arr,'address')) ? $arr['address'] : ''); - $ztarget = ((x($arr,'target')) ? $arr['target'] : ''); - $zsig = ((x($arr,'target_sig')) ? $arr['target_sig'] : ''); - $zkey = ((x($arr,'key')) ? $arr['key'] : ''); - $mindate = ((x($arr,'mindate')) ? $arr['mindate'] : ''); - $token = ((x($arr,'token')) ? $arr['token'] : ''); - - $feed = ((x($arr,'feed')) ? intval($arr['feed']) : 0); - - if($ztarget) { - if((! $zkey) || (! $zsig) || (! Crypto::verify($ztarget,base64url_decode($zsig),$zkey))) { - logger('zfinger: invalid target signature'); - $ret['message'] = t("invalid target signature"); - return($ret); - } - } - - $ztarget_hash = (($ztarget && $zsig) ? make_xchan_hash($ztarget,$zsig) : '' ); - - $r = null; - - if(strlen($zhash)) { - $r = q("select channel.*, xchan.* from channel left join xchan on channel_portable_id = xchan_hash - where channel_portable_id = '%s' limit 1", - dbesc($zhash) - ); - } - elseif(strlen($zguid) && strlen($zguid_sig)) { - $r = q("select channel.*, xchan.* from channel left join xchan on channel_portable_id = xchan_hash - where channel_guid = '%s' and channel_guid_sig = '%s' limit 1", - dbesc($zguid), - dbesc('sha256.' . $zguid_sig) - ); - } - elseif(strlen($zaddr)) { - if(strpos($zaddr,'[system]') === false) { /* normal address lookup */ - $r = q("select channel.*, xchan.* from channel left join xchan on channel_portable_id = xchan_hash - where ( channel_address = '%s' or xchan_addr = '%s' ) limit 1", - dbesc($zaddr), - dbesc($zaddr) - ); - } - - else { - - /** - * The special address '[system]' will return a system channel if one has been defined, - * Or the first valid channel we find if there are no system channels. - * - * This is used by magic-auth if we have no prior communications with this site - and - * returns an identity on this site which we can use to create a valid hub record so that - * we can exchange signed messages. The precise identity is irrelevant. It's the hub - * information that we really need at the other end - and this will return it. - * - */ - - $r = q("select channel.*, xchan.* from channel left join xchan on channel_portable_id = xchan_hash - where channel_system = 1 order by channel_id limit 1"); - if(! $r) { - $r = q("select channel.*, xchan.* from channel left join xchan on channel_portable_id = xchan_hash - where channel_removed = 0 order by channel_id limit 1"); - } - } - } - else { - $ret['message'] = 'Invalid request'; - return($ret); - } - - if(! $r) { - $ret['message'] = 'Item not found.'; - return($ret); - } - - $e = $r[0]; - - $id = $e['channel_id']; - - $x = [ - 'channel_id' => $id, - 'protocols' => ['zot'] - ]; - /** - * @hooks channel_protocols - * * \e int \b channel_id - * * \e array \b protocols - */ - call_hooks('channel_protocols', $x); - - $protocols = $x['protocols']; - - $sys_channel = (intval($e['channel_system']) ? true : false); - $special_channel = (($e['channel_pageflags'] & PAGE_PREMIUM) ? true : false); - $adult_channel = (($e['channel_pageflags'] & PAGE_ADULT) ? true : false); - $censored = (($e['channel_pageflags'] & PAGE_CENSORED) ? true : false); - $searchable = (($e['channel_pageflags'] & PAGE_HIDDEN) ? false : true); - $deleted = (intval($e['xchan_deleted']) ? true : false); - - if($deleted || $censored || $sys_channel) - $searchable = false; - - $public_forum = false; - - $role = get_pconfig($e['channel_id'],'system','permissions_role'); - if($role === 'forum' || $role === 'repository') { - $public_forum = true; - } - else { - // check if it has characteristics of a public forum based on custom permissions. - $m = \Zotlabs\Access\Permissions::FilledAutoperms($e['channel_id']); - if($m) { - foreach($m as $k => $v) { - if($k == 'tag_deliver' && intval($v) == 1) - $ch ++; - if($k == 'send_stream' && intval($v) == 0) - $ch ++; - } - if($ch == 2) - $public_forum = true; - } - } - - - // This is for birthdays and keywords, but must check access permissions - $p = q("select * from profile where uid = %d and is_default = 1", - intval($e['channel_id']) - ); - - $profile = array(); - - if($p) { - - if(! intval($p[0]['publish'])) - $searchable = false; - - $profile['description'] = $p[0]['pdesc']; - $profile['birthday'] = $p[0]['dob']; - if(($profile['birthday'] != '0000-00-00') && (($bd = z_birthday($p[0]['dob'],'UTC')) !== '')) - $profile['next_birthday'] = $bd; - - if($age = age($p[0]['dob'],$e['channel_timezone'],'')) - $profile['age'] = $age; - - $profile['gender'] = $p[0]['gender']; - $profile['marital'] = $p[0]['marital']; - $profile['sexual'] = $p[0]['sexual']; - $profile['locale'] = $p[0]['locality']; - $profile['region'] = $p[0]['region']; - $profile['postcode'] = $p[0]['postal_code']; - $profile['country'] = $p[0]['country_name']; - $profile['about'] = $p[0]['about']; - $profile['homepage'] = $p[0]['homepage']; - $profile['hometown'] = $p[0]['hometown']; - - if($p[0]['keywords']) { - $tags = array(); - $k = explode(' ',$p[0]['keywords']); - if($k) { - foreach($k as $kk) { - if(trim($kk," \t\n\r\0\x0B,")) { - $tags[] = trim($kk," \t\n\r\0\x0B,"); - } - } - } - if($tags) - $profile['keywords'] = $tags; - } - } - - $ret['success'] = true; - - // Communication details - - if($token) - $ret['signed_token'] = base64url_encode(Crypto::sign('token.' . $token,$e['channel_prvkey'],$sig_method)); - - - $ret['guid'] = $e['xchan_guid']; - $ret['guid_sig'] = $e['xchan_guid_sig']; - $ret['key'] = $e['xchan_pubkey']; - $ret['name'] = $e['xchan_name']; - $ret['name_updated'] = $e['xchan_name_date']; - $ret['address'] = $e['xchan_addr']; - $ret['photo_mimetype'] = $e['xchan_photo_mimetype']; - $ret['photo'] = $e['xchan_photo_l']; - $ret['photo_updated'] = $e['xchan_photo_date']; - $ret['url'] = $e['xchan_url']; - $ret['connections_url']= (($e['xchan_connurl']) ? $e['xchan_connurl'] : z_root() . '/poco/' . $e['channel_address']); - $ret['follow_url'] = $e['xchan_follow']; - $ret['target'] = $ztarget; - $ret['target_sig'] = $zsig; - $ret['searchable'] = $searchable; - $ret['protocols'] = $protocols; - $ret['adult_content'] = $adult_channel; - $ret['public_forum'] = $public_forum; - if($deleted) - $ret['deleted'] = $deleted; - - if(intval($e['channel_removed'])) - $ret['deleted_locally'] = true; - - - // premium or other channel desiring some contact with potential followers before connecting. - // This is a template - %s will be replaced with the follow_url we discover for the return channel. - - if($special_channel) { - $ret['connect_url'] = (($e['xchan_connpage']) ? $e['xchan_connpage'] : z_root() . '/connect/' . $e['channel_address']); - } - // This is a template for our follow url, %s will be replaced with a webbie - - if(! $ret['follow_url']) - $ret['follow_url'] = z_root() . '/follow?f=&url=%s'; - - $permissions = get_all_perms($e['channel_id'],$ztarget_hash,false,false); - - if($ztarget_hash) { - $permissions['connected'] = false; - $b = q("select * from abook where abook_xchan = '%s' and abook_channel = %d and abook_pending = 0 limit 1", - dbesc($ztarget_hash), - intval($e['channel_id']) - ); - if($b) - $permissions['connected'] = true; - } - - // encrypt this with the default aes256cbc since we cannot be sure at this point which - // algorithms are preferred for communications with the remote site; notably - // because ztarget refers to an xchan and we don't necessarily know the origination - // location. - - $ret['permissions'] = (($ztarget && $zkey) ? crypto_encapsulate(json_encode($permissions),$zkey,) : $permissions); - - if($permissions['view_profile']) - $ret['profile'] = $profile; - - // array of (verified) hubs this channel uses - - $x = zot_encode_locations($e); - if($x) - $ret['locations'] = $x; - - $ret['site'] = zot_site_info($e['channel_prvkey']); - - check_zotinfo($e,$x,$ret); - - /** - * @hooks zot_finger - * Called when a zot-info packet has been requested (this is our webfinger discovery mechanism). - * * \e array The final return array - */ - call_hooks('zot_finger', $ret); - - return($ret); -} - - -function zot_site_info($channel_key = '') { - - $signing_key = get_config('system','prvkey'); - $sig_method = get_config('system','signature_algorithm','sha256'); - - $ret = []; - $ret['site'] = []; - $ret['site']['url'] = z_root(); - if($channel_key) { - $ret['site']['url_sig'] = base64url_encode(Crypto::sign(z_root(),$channel_key,$sig_method)); - } - $ret['site']['url_site_sig'] = base64url_encode(Crypto::sign(z_root(),$signing_key,$sig_method)); - $ret['site']['post'] = z_root() . '/post'; - $ret['site']['openWebAuth'] = z_root() . '/owa'; - $ret['site']['authRedirect'] = z_root() . '/magic'; - $ret['site']['key'] = get_config('system','pubkey'); - - $dirmode = get_config('system','directory_mode'); - if(($dirmode === false) || ($dirmode == DIRECTORY_MODE_NORMAL)) - $ret['site']['directory_mode'] = 'normal'; - - if($dirmode == DIRECTORY_MODE_PRIMARY) - $ret['site']['directory_mode'] = 'primary'; - elseif($dirmode == DIRECTORY_MODE_SECONDARY) - $ret['site']['directory_mode'] = 'secondary'; - elseif($dirmode == DIRECTORY_MODE_STANDALONE) - $ret['site']['directory_mode'] = 'standalone'; - if($dirmode != DIRECTORY_MODE_NORMAL) - $ret['site']['directory_url'] = z_root() . '/dirsearch'; - - - $ret['site']['encryption'] = Crypto::methods(); - $ret['site']['signing'] = Crypto::signing_methods(); - $ret['site']['zot'] = Zotlabs\Lib\System::get_zot_revision(); - - // hide detailed site information if you're off the grid - - if($dirmode != DIRECTORY_MODE_STANDALONE) { - - $register_policy = intval(get_config('system','register_policy')); - - if($register_policy == REGISTER_CLOSED) - $ret['site']['register_policy'] = 'closed'; - if($register_policy == REGISTER_APPROVE) - $ret['site']['register_policy'] = 'approve'; - if($register_policy == REGISTER_OPEN) - $ret['site']['register_policy'] = 'open'; - - - $access_policy = intval(get_config('system','access_policy')); - - if($access_policy == ACCESS_PRIVATE) - $ret['site']['access_policy'] = 'private'; - if($access_policy == ACCESS_PAID) - $ret['site']['access_policy'] = 'paid'; - if($access_policy == ACCESS_FREE) - $ret['site']['access_policy'] = 'free'; - if($access_policy == ACCESS_TIERED) - $ret['site']['access_policy'] = 'tiered'; - - $ret['site']['accounts'] = account_total(); - - require_once('include/channel.php'); - $ret['site']['channels'] = channel_total(); - - $ret['site']['admin'] = get_config('system','admin_email'); - - $visible_plugins = array(); - if(is_array(App::$plugins) && count(App::$plugins)) { - $r = q("select * from addon where hidden = 0"); - if($r) - foreach($r as $rr) - $visible_plugins[] = $rr['aname']; - } - - $ret['site']['plugins'] = $visible_plugins; - $ret['site']['sitehash'] = get_config('system','location_hash'); - $ret['site']['sitename'] = get_config('system','sitename'); - $ret['site']['sellpage'] = get_config('system','sellpage'); - $ret['site']['location'] = get_config('system','site_location'); - $ret['site']['realm'] = get_directory_realm(); - $ret['site']['project'] = Zotlabs\Lib\System::get_platform_name() . ' ' . Zotlabs\Lib\System::get_server_role(); - $ret['site']['version'] = Zotlabs\Lib\System::get_project_version(); - - } - - return $ret['site']; -} - -/** - * @brief - * - * @param array $channel - * @param array $locations - * @param[out] array $ret - * \e array \b locations result of zot_encode_locations() - */ -function check_zotinfo($channel, $locations, &$ret) { - -// logger('locations: ' . print_r($locations,true),LOGGER_DATA, LOG_DEBUG); - - // This function will likely expand as we find more things to detect and fix. - // 1. Because magic-auth is reliant on it, ensure that the system channel has a valid hubloc - // Force this to be the case if anything is found to be wrong with it. - - /// @FIXME ensure that the system channel exists in the first place and has an xchan - - if($channel['channel_system']) { - // the sys channel must have a location (hubloc) - $valid_location = false; - if((count($locations) === 1) && ($locations[0]['primary']) && (! $locations[0]['deleted'])) { - if((Crypto::verify($locations[0]['url'],base64url_decode($locations[0]['url_sig']),$channel['channel_pubkey'])) - && ($locations[0]['sitekey'] === get_config('system','pubkey')) - && ($locations[0]['url'] === z_root())) - $valid_location = true; - else - logger('sys channel: invalid url signature'); - } - - if((! $locations) || (! $valid_location)) { - - logger('System channel locations are not valid. Attempting repair.'); - - // Don't trust any existing records. Just get rid of them, but only do this - // for the sys channel as normal channels will be trickier. - - q("delete from hubloc where hubloc_hash = '%s'", - dbesc($channel['channel_portable_id']) - ); - - $r = hubloc_store_lowlevel( - [ - 'hubloc_guid' => $channel['channel_guid'], - 'hubloc_guid_sig' => $channel['channel_guid_sig'], - 'hubloc_hash' => $channel['channel_portable_id'], - 'hubloc_addr' => channel_reddress($channel), - 'hubloc_network' => 'zot', - 'hubloc_primary' => 1, - 'hubloc_url' => z_root(), - 'hubloc_url_sig' => base64url_encode(Crypto::sign(z_root(),$channel['channel_prvkey'])), - 'hubloc_host' => App::get_hostname(), - 'hubloc_callback' => z_root() . '/post', - 'hubloc_sitekey' => get_config('system','pubkey'), - 'hubloc_updated' => datetime_convert(), - ] - ); - - if($r) { - $x = zot_encode_locations($channel); - if($x) { - $ret['locations'] = $x; - } - } - else { - logger('Unable to store sys hub location'); - } - } - } -} - -/** - * @brief - * - * @param array $dr - * @return boolean - */ -function delivery_report_is_storable($dr) { - - if(get_config('system', 'disable_dreport')) - return false; - - /** - * @hooks dreport_is_storable - * Called before storing a dreport record to determine whether to store it. - * * \e array - */ - call_hooks('dreport_is_storable', $dr); - - // let plugins accept or reject - if neither, continue on - if(array_key_exists('accept',$dr) && intval($dr['accept'])) - return true; - if(array_key_exists('reject',$dr) && intval($dr['reject'])) - return false; - - if(! ($dr['sender'])) - return false; - - // Is the sender one of our channels? - - $c = q("select channel_id from channel where channel_portable_id = '%s' limit 1", - dbesc($dr['sender']) - ); - if(! $c) - return false; - - - // is the recipient one of our connections, or do we want to store every report? - - $r = explode(' ', $dr['recipient']); - $rxchan = $r[0]; - $pcf = get_pconfig($c[0]['channel_id'],'system','dreport_store_all'); - if($pcf) - return true; - - // We always add ourself as a recipient to private and relayed posts - // So if a remote site says they can't find us, that's no big surprise - // and just creates a lot of extra report noise - - if(($dr['location'] !== z_root()) && ($dr['sender'] === $rxchan) && ($dr['status'] === 'recipient_not_found')) - return false; - - // If you have a private post with a recipient list, every single site is going to report - // back a failed delivery for anybody on that list that isn't local to them. We're only - // concerned about this if we have a local hubloc record which says we expected them to - // have a channel on that site. - - $r = q("select hubloc_id from hubloc where hubloc_hash = '%s' and hubloc_url = '%s'", - dbesc($rxchan), - dbesc($dr['location']) - ); - if((! $r) && ($dr['status'] === 'recipient_not_found')) - return false; - - $r = q("select abook_id from abook where abook_xchan = '%s' and abook_channel = %d limit 1", - dbesc($rxchan), - intval($c[0]['channel_id']) - ); - if($r) - return true; - - return false; -} - - -/** - * @brief - * - * @param array $hub - * @param string $sitekey (optional, default empty) - * - * @return string hubloc_url - */ -function update_hub_connected($hub, $sitekey = '') { - - if($sitekey) { - - /* - * This hub has now been proven to be valid. - * Any hub with the same URL and a different sitekey cannot be valid. - * Get rid of them (mark them deleted). There's a good chance they were re-installs. - */ - - q("update hubloc set hubloc_deleted = 1, hubloc_error = 1 where hubloc_url = '%s' and hubloc_sitekey != '%s' ", - dbesc($hub['hubloc_url']), - dbesc($sitekey) - ); - - } - else { - $sitekey = $hub['sitekey']; - } - - // $sender['sitekey'] is a new addition to the protocol to distinguish - // hublocs coming from re-installed sites. Older sites will not provide - // this field and we have to still mark them valid, since we can't tell - // if this hubloc has the same sitekey as the packet we received. - - - // Update our DB to show when we last communicated successfully with this hub - // This will allow us to prune dead hubs from using up resources - - $t = datetime_convert('UTC', 'UTC', 'now - 15 minutes'); - - $r = q("update hubloc set hubloc_connected = '%s' where hubloc_id = %d and hubloc_sitekey = '%s' and hubloc_connected < '%s' ", - dbesc(datetime_convert()), - intval($hub['hubloc_id']), - dbesc($sitekey), - dbesc($t) - ); - - // a dead hub came back to life - reset any tombstones we might have - - if(intval($hub['hubloc_error'])) { - q("update hubloc set hubloc_error = 0 where hubloc_id = %d and hubloc_sitekey = '%s' ", - intval($hub['hubloc_id']), - dbesc($sitekey) - ); - if(intval($hub['hubloc_orphancheck'])) { - q("update hubloc set hubloc_orphancheck = 0 where hubloc_id = %d and hubloc_sitekey = '%s' ", - intval($hub['hubloc_id']), - dbesc($sitekey) - ); - } - q("update xchan set xchan_orphan = 0 where xchan_orphan = 1 and xchan_hash = '%s'", - dbesc($hub['hubloc_hash']) - ); - } - - return $hub['hubloc_url']; -} - -/** - * @brief Useful to get a health check on a remote site. - * - * This will let us know if any important communication details - * that we may have stored are no longer valid, regardless of xchan details. - * - * @return json_return_and_die() - */ -function zot_reply_ping() { - - $ret = array('success'=> false); - - logger('POST: got ping send pong now back: ' . z_root() , LOGGER_DEBUG ); - - $ret['success'] = true; - $ret['site'] = array(); - $ret['site']['url'] = z_root(); - $ret['site']['url_sig'] = base64url_encode(Crypto::sign(z_root(),get_config('system','prvkey'))); - $ret['site']['sitekey'] = get_config('system','pubkey'); - - json_return_and_die($ret); -} - -function zot_reply_pickup($data) { - - $ret = array('success'=> false); - - /* - * The 'pickup' message arrives with a tracking ID which is associated with a particular outq_hash - * First verify that that the returned signatures verify, then check that we have an outbound queue item - * with the correct hash. - * If everything verifies, find any/all outbound messages in the queue for this hubloc and send them back - */ - - if((! $data['secret']) || (! $data['secret_sig'])) { - $ret['message'] = 'no verification signature'; - logger('mod_zot: pickup: ' . $ret['message'], LOGGER_DEBUG); - - json_return_and_die($ret); - } - - $r = q("select distinct hubloc_sitekey from hubloc where hubloc_url = '%s' and hubloc_callback = '%s' and hubloc_sitekey != '' group by hubloc_sitekey ", - dbesc($data['url']), - dbesc($data['callback']) - ); - if(! $r) { - $ret['message'] = 'site not found'; - logger('mod_zot: pickup: ' . $ret['message']); - - json_return_and_die($ret); - } - - foreach ($r as $hubsite) { - - // verify the url_sig - // If the server was re-installed at some point, there could be multiple hubs with the same url and callback. - // Only one will have a valid key. - - $forgery = true; - $secret_fail = true; - - $sitekey = $hubsite['hubloc_sitekey']; - - logger('mod_zot: Checking sitekey: ' . $sitekey, LOGGER_DATA, LOG_DEBUG); - - if(Crypto::verify($data['callback'],base64url_decode($data['callback_sig']),$sitekey)) { - $forgery = false; - } - if(Crypto::verify($data['secret'],base64url_decode($data['secret_sig']),$sitekey)) { - $secret_fail = false; - } - if((! $forgery) && (! $secret_fail)) - break; - } - - if($forgery) { - $ret['message'] = 'possible site forgery'; - logger('mod_zot: pickup: ' . $ret['message']); - - json_return_and_die($ret); - } - - if($secret_fail) { - $ret['message'] = 'secret validation failed'; - logger('mod_zot: pickup: ' . $ret['message']); - - json_return_and_die($ret); - } - - /* - * If we made it to here, the signatures verify, but we still don't know if the tracking ID is valid. - * It wouldn't be an error if the tracking ID isn't found, because we may have sent this particular - * queue item with another pickup (after the tracking ID for the other pickup was verified). - */ - - $r = q("select outq_posturl from outq where outq_hash = '%s' and outq_posturl = '%s' limit 1", - dbesc($data['secret']), - dbesc($data['callback']) - ); - - if(! $r) { - $ret['message'] = 'nothing to pick up'; - logger('mod_zot: pickup: ' . $ret['message']); - - json_return_and_die($ret); - } - - /* - * Everything is good if we made it here, so find all messages that are going to this location - * and send them all - or a reasonable number if there are a lot so we don't overflow memory. - */ - - $r = q("select * from outq where outq_posturl = '%s' limit 100", - dbesc($data['callback']) - ); - - if($r) { - logger('mod_zot: successful pickup message received from ' . $data['callback'] . ' ' . count($r) . ' message(s) picked up', LOGGER_DEBUG); - - $ret['success'] = true; - $ret['pickup'] = array(); - foreach($r as $rr) { - if($rr['outq_msg']) { - $x = json_decode($rr['outq_msg'],true); - - if(! $x) - continue; - - if(is_array($x) && array_key_exists('message_list',$x)) { - foreach($x['message_list'] as $xx) { - $ret['pickup'][] = array('notify' => json_decode($rr['outq_notify'],true),'message' => $xx); - } - } - else - $ret['pickup'][] = array('notify' => json_decode($rr['outq_notify'],true),'message' => $x); - - remove_queue_item($rr['outq_hash']); - } - } - } - - // It's possible that we have more than 100 messages waiting to be sent. - - // See if there are any more messages in the queue. - $x = q("select * from outq where outq_posturl = '%s' order by outq_created limit 1", - dbesc($data['callback']) - ); - - // If so, kick off a new delivery notification for the next batch - if ($x) { - logger("Send additional pickup request.", LOGGER_DEBUG); - queue_deliver($x[0],true); - } - - // this is a bit of a hack because we don't have the hubloc_url here, only the callback url. - // worst case is we'll end up using aes256cbc if they've got a different post endpoint - - $x = q("select site_crypto from site where site_url = '%s' limit 1", - dbesc(str_replace('/post','',$data['callback'])) - ); - $algorithm = zot_best_algorithm(($x) ? $x[0]['site_crypto'] : ''); - - $encrypted = Crypto::encapsulate(json_encode($ret),$sitekey,$algorithm); - - json_return_and_die($encrypted); - // @FIXME: There is a possibility that the transmission will get interrupted - // and fail - in which case this packet of messages will be lost. - /* pickup: end */ -} - - - -function zot_reply_auth_check($data,$encrypted_packet) { - - $ret = array('success' => false); - - /* - * Requestor visits /magic/?dest=somewhere on their own site with a browser - * magic redirects them to $destsite/post [with auth args....] - * $destsite sends an auth_check packet to originator site - * The auth_check packet is handled here by the originator's site - * - the browser session is still waiting - * inside $destsite/post for everything to verify - * If everything checks out we'll return a token to $destsite - * and then $destsite will verify the token, authenticate the browser - * session and then redirect to the original destination. - * If authentication fails, the redirection to the original destination - * will still take place but without authentication. - */ - logger('mod_zot: auth_check', LOGGER_DEBUG); - - if (! $encrypted_packet) { - logger('mod_zot: auth_check packet was not encrypted.'); - $ret['message'] .= 'no packet encryption' . EOL; - - json_return_and_die($ret); - } - - $arr = $data['sender']; - $sender_hash = make_xchan_hash($arr['guid'],$arr['guid_sig']); - - // garbage collect any old unused notifications - - /** - * @TODO This was and should be 10 minutes but my hosting provider has time lag between the DB and - * the web server. We should probably convert this to webserver time rather than DB time so - * that the different clocks won't affect it and allow us to keep the time short. - */ - Zotlabs\Lib\Verify::purge('auth', '30 MINUTE'); - - $y = q("select xchan_pubkey from xchan where xchan_hash = '%s' limit 1", - dbesc($sender_hash) - ); - - // We created a unique hash in mod/magic.php when we invoked remote auth, and stored it in - // the verify table. It is now coming back to us as 'secret' and is signed by a channel at the other end. - // First verify their signature. We will have obtained a zot-info packet from them as part of the sender - // verification. - - if ((! $y) || (! Crypto::verify($data['secret'], base64url_decode($data['secret_sig']),$y[0]['xchan_pubkey']))) { - logger('mod_zot: auth_check: sender not found or secret_sig invalid.'); - $ret['message'] .= 'sender not found or sig invalid ' . print_r($y,true) . EOL; - - json_return_and_die($ret); - } - - // There should be exactly one recipient, the original auth requestor - /// @FIXME $recipients is undefined here. - $ret['message'] .= 'recipients ' . print_r($recipients,true) . EOL; - - if ($data['recipients']) { - - $arr = $data['recipients'][0]; - $recip_hash = make_xchan_hash($arr['guid'], $arr['guid_sig']); - $c = q("select channel_id, channel_account_id, channel_prvkey from channel where channel_portable_id = '%s' limit 1", - dbesc($recip_hash) - ); - if (! $c) { - logger('mod_zot: auth_check: recipient channel not found.'); - $ret['message'] .= 'recipient not found.' . EOL; - - json_return_and_die($ret); - } - - $confirm = base64url_encode(Crypto::sign($data['secret'] . $recip_hash,$c[0]['channel_prvkey'])); - - // This additionally checks for forged sites since we already stored the expected result in meta - // and we've already verified that this is them via zot_gethub() and that their key signed our token - - $z = Zotlabs\Lib\Verify::match('auth',$c[0]['channel_id'],$data['secret'],$data['sender']['url']); - if (! $z) { - logger('mod_zot: auth_check: verification key not found.'); - $ret['message'] .= 'verification key not found' . EOL; - - json_return_and_die($ret); - } - - $u = q("select account_service_class from account where account_id = %d limit 1", - intval($c[0]['channel_account_id']) - ); - - logger('mod_zot: auth_check: success', LOGGER_DEBUG); - $ret['success'] = true; - $ret['confirm'] = $confirm; - if ($u && $u[0]['account_service_class']) - $ret['service_class'] = $u[0]['account_service_class']; - - // Set "do not track" flag if this site or this channel's profile is restricted - // in some way - - if (intval(get_config('system','block_public'))) - $ret['DNT'] = true; - if (! perm_is_allowed($c[0]['channel_id'],'','view_profile')) - $ret['DNT'] = true; - if (get_pconfig($c[0]['channel_id'],'system','do_not_track')) - $ret['DNT'] = true; - if (get_pconfig($c[0]['channel_id'],'system','hide_online_status')) - $ret['DNT'] = true; - - json_return_and_die($ret); - } - - json_return_and_die($ret); -} - -/** - * @brief - * - * @param array $sender - * @param array $recipients - * - * return json_return_and_die() - */ -function zot_reply_purge($sender, $recipients) { - - $ret = array('success' => false); - - if ($recipients) { - // basically this means "unfriend" - foreach ($recipients as $recip) { - $r = q("select channel.*,xchan.* from channel - left join xchan on channel_portable_id = xchan_hash - where channel_guid = '%s' and channel_guid_sig = '%s' limit 1", - dbesc($recip['guid']), - dbesc($recip['guid_sig']) - ); - if ($r) { - $r = q("select abook_id from abook where uid = %d and abook_xchan = '%s' limit 1", - intval($r[0]['channel_id']), - dbesc(make_xchan_hash($sender['guid'],$sender['guid_sig'])) - ); - if ($r) { - contact_remove($r[0]['channel_id'],$r[0]['abook_id']); - } - } - } - $ret['success'] = true; - } - else { - // Unfriend everybody - basically this means the channel has committed suicide - $arr = $sender; - $sender_hash = make_xchan_hash($arr['guid'],$arr['guid_sig']); - - remove_all_xchan_resources($sender_hash); - - $ret['success'] = true; - } - - json_return_and_die($ret); -} - -/** - * @brief Remote channel info (such as permissions or photo or something) - * has been updated. Grab a fresh copy and sync it. - * - * The difference between refresh and force_refresh is that force_refresh - * unconditionally creates a directory update record, even if no changes were - * detected upon processing. - * - * @param array $sender - * @param array $recipients - * - * @return json_return_and_die() - */ -function zot_reply_refresh($sender, $recipients) { - - $ret = array('success' => false); - - if($recipients) { - - // This would be a permissions update, typically for one connection - - foreach ($recipients as $recip) { - $r = q("select channel.*,xchan.* from channel - left join xchan on channel_portable_id = xchan_hash - where xchan_guid = '%s' and xchan_guid_sig = '%s' limit 1", - dbesc($recip['guid']), - dbesc($recip['guid_sig']) - ); - $x = zot_refresh(array( - 'xchan_guid' => $sender['guid'], - 'xchan_guid_sig' => $sender['guid_sig'], - 'hubloc_url' => $sender['url'] - ), $r[0], (($msgtype === 'force_refresh') ? true : false)); - } - } - else { - // system wide refresh - - $x = zot_refresh(array( - 'xchan_guid' => $sender['guid'], - 'xchan_guid_sig' => $sender['guid_sig'], - 'hubloc_url' => $sender['url'] - ), null, (($msgtype === 'force_refresh') ? true : false)); - } - - $ret['success'] = true; - json_return_and_die($ret); -} - - -function zot6_check_sig() { - - $ret = [ 'success' => false ]; - - logger('server: ' . print_r($_SERVER,true), LOGGER_DATA); - - if(array_key_exists('HTTP_SIGNATURE',$_SERVER)) { - $sigblock = \Zotlabs\Web\HTTPSig::parse_sigheader($_SERVER['HTTP_SIGNATURE']); - if($sigblock) { - $keyId = $sigblock['keyId']; - logger('keyID: ' . $keyId); - if($keyId) { - $r = q("select hubloc.*, site_crypto from hubloc left join site on hubloc_url = site_url - where hubloc_addr = '%s' ", - dbesc(str_replace('acct:','',$keyId)) - ); - if($r) { - foreach($r as $hubloc) { - $verified = \Zotlabs\Web\HTTPSig::verify('',$hubloc['xchan_pubkey']); - if($verified && $verified['header_signed'] && $verified['header_valid'] && $verified['content_signed'] && $verified['content_valid']) { - logger('zot6 verified'); - $ret['hubloc'] = $hubloc; - $ret['success'] = true; - return $ret; - } - } - } - } - } - } - - return $ret; -} - -function zot_reply_notify($data) { - - $ret = array('success' => false); - - logger('notify received from ' . $data['sender']['url']); - - $async = get_config('system','queued_fetch'); - - if($async) { - // add to receive queue - // qreceive_add($data); - } - else { - $x = zot_fetch($data); - $ret['delivery_report'] = $x; - } - - $ret['success'] = true; - json_return_and_die($ret); -} - - -function zot_record_preferred($arr, $check = 'hubloc_network') { - - if(! $arr) { - return $arr; - } - - foreach($arr as $v) { - if($v[$check] === 'zot') { - return $v; - } - } - foreach($arr as $v) { - if($v[$check] === 'zot6') { - return $v; - } - } - - return $arr[0]; - -} - -function find_best_zot_identity($xchan) { - - $r = q("select hubloc_addr from hubloc where hubloc_hash = '%s' and hubloc_network in ('zot6', 'zot') and hubloc_deleted = 0", - dbesc($xchan) - ); - - if ($r) { - - $r = q("select hubloc_hash, hubloc_network from hubloc where hubloc_addr = '%s' and hubloc_network in ('zot6', 'zot') and hubloc_deleted = 0", - dbesc($r[0]['hubloc_addr']) - ); - if ($r) { - $r = Libzot::zot_record_preferred($r); - logger('find_best_zot_identity: ' . $xchan . ' > ' . $r['hubloc_hash']); - return $r['hubloc_hash']; - } - } - - return $xchan; -} -- cgit v1.2.3 From 1aa626f0e8d6b316eb6d0a7e98b54e04ffb07013 Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 27 May 2021 19:49:44 +0000 Subject: remove include/message --- include/items.php | 1 - 1 file changed, 1 deletion(-) diff --git a/include/items.php b/include/items.php index 2ee259e51..ba4e79a75 100644 --- a/include/items.php +++ b/include/items.php @@ -21,7 +21,6 @@ use Zotlabs\Daemon\Master; require_once('include/bbcode.php'); require_once('include/oembed.php'); require_once('include/crypto.php'); -require_once('include/message.php'); require_once('include/feedutils.php'); require_once('include/photo/photo_driver.php'); require_once('include/permissions.php'); -- cgit v1.2.3 From 7ad0a1e5577e1e2a394a64b9ff5d0ba8c81cc153 Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 27 May 2021 19:50:35 +0000 Subject: remove include/message (the file) --- include/message.php | 566 ---------------------------------------------------- 1 file changed, 566 deletions(-) delete mode 100644 include/message.php diff --git a/include/message.php b/include/message.php deleted file mode 100644 index e6c9ed8ee..000000000 --- a/include/message.php +++ /dev/null @@ -1,566 +0,0 @@ - t('Download binary/encrypted content'), - '$url' => z_root() . '/mail/' . $item['id'] . '/download' - ]); -} - - -// send a private message - - -function send_message($uid = 0, $recipient = '', $body = '', $subject = '', $replyto = '', $expires = NULL_DATE, $mimetype = 'text/bbcode', $raw = false, $sig = '') { - - $ret = array('success' => false); - $is_reply = false; - - $observer_hash = get_observer_hash(); - - if($uid) { - $r = q("select * from channel where channel_id = %d limit 1", - intval($uid) - ); - if($r) - $channel = $r[0]; - } - else { - $channel = App::get_channel(); - } - - if(! $channel) { - $ret['message'] = t('Unable to determine sender.'); - return $ret; - } - - - $body = cleanup_bbcode($body); - $results = linkify_tags($body, $uid); - - if(! $raw) { - if(preg_match_all("/\[attachment\](.*?)\[\/attachment\]/",((strpos($body,'[/crypt]')) ? $_POST['media_str'] : $body),$match)) { - $attaches = $match[1]; - } - } - - $attachments = ''; - - if((! $raw) && preg_match_all('/(\[attachment\](.*?)\[\/attachment\])/',$body,$match)) { - $attachments = array(); - foreach($match[2] as $mtch) { - $hash = substr($mtch,0,strpos($mtch,',')); - $rev = intval(substr($mtch,strpos($mtch,','))); - $r = attach_by_hash_nodata($hash,get_observer_hash(),$rev); - if($r['success']) { - $attachments[] = array( - 'href' => z_root() . '/attach/' . $r['data']['hash'], - 'length' => $r['data']['filesize'], - 'type' => $r['data']['filetype'], - 'title' => urlencode($r['data']['filename']), - 'revision' => $r['data']['revision'] - ); - } - $body = trim(str_replace($match[1],'',$body)); - } - } - - $jattach = (($attachments) ? json_encode($attachments) : ''); - - - if(! $recipient) { - $ret['message'] = t('No recipient provided.'); - return $ret; - } - - if(! strlen($subject)) - $subject = t('[no subject]'); - - - // look for any existing conversation structure - - $conv_guid = ''; - - if(strlen($replyto)) { - $is_reply = true; - $r = q("select conv_guid from mail where channel_id = %d and ( mid = '%s' or parent_mid = '%s' ) limit 1", - intval(local_channel()), - dbesc($replyto), - dbesc($replyto) - ); - if($r) { - $conv_guid = $r[0]['conv_guid']; - } - } - - if(! $conv_guid) { - - // create a new conversation - - $retconv = create_conversation($channel,$recipient,$subject); - if($retconv) { - $conv_guid = $retconv['guid']; - } - } - - if(! $retconv) { - $r = q("select * from conv where guid = '%s' and uid = %d limit 1", - dbesc($conv_guid), - intval(local_channel()) - ); - if($r) { - $retconv = $r[0]; - } - } - - if(! $retconv) { - $ret['message'] = 'conversation not found'; - return $ret; - } - - $c = q("update conv set updated = '%s' where guid = '%s' and uid = %d", - dbesc(datetime_convert()), - dbesc($conv_guid), - intval(local_channel()) - ); - - // generate a unique message_id - - do { - $dups = false; - $hash = random_string(); - - $mid = $hash . '@' . App::get_hostname(); - - $r = q("SELECT id FROM mail WHERE mid = '%s' LIMIT 1", - dbesc($mid)); - if(count($r)) - $dups = true; - } while($dups == true); - - - if(! strlen($replyto)) { - $replyto = $mid; - } - - /** - * - * When a photo was uploaded into the message using the (profile wall) ajax - * uploader, The permissions are initially set to disallow anybody but the - * owner from seeing it. This is because the permissions may not yet have been - * set for the post. If it's private, the photo permissions should be set - * appropriately. But we didn't know the final permissions on the post until - * now. So now we'll look for links of uploaded messages that are in the - * post and set them to the same permissions as the post itself. - * - */ - - $match = null; - $images = null; - if(preg_match_all("/\[zmg\=([0-9]*)x([0-9]*)\](.*?)\[\/zmg\]/",((strpos($body,'[/crypt]')) ? $_POST['media_str'] : $body),$match)) - $images = $match[3]; - - $match = false; - - - if($subject) - $subject = str_rot47(base64url_encode($subject)); - if(($body )&& (! $raw)) - $body = str_rot47(base64url_encode($body)); - - $mimetype = ''; //placeholder - - $r = q("INSERT INTO mail ( account_id, conv_guid, mail_obscured, channel_id, from_xchan, to_xchan, mail_mimetype, title, body, sig, attach, mid, parent_mid, created, expires, mail_isreply, mail_raw ) - VALUES ( %d, '%s', %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d )", - intval($channel['channel_account_id']), - dbesc($conv_guid), - intval(1), - intval($channel['channel_id']), - dbesc($channel['channel_hash']), - dbesc($recipient), - dbesc(($mimetype)? $mimetype : 'text/bbcode'), - dbesc($subject), - dbesc($body), - dbesc($sig), - dbesc($jattach), - dbesc($mid), - dbesc($replyto), - dbesc(datetime_convert()), - dbescdate($expires), - intval($is_reply), - intval($raw) - ); - - // verify the save - - $r = q("SELECT * FROM mail WHERE mid = '%s' and channel_id = %d LIMIT 1", - dbesc($mid), - intval($channel['channel_id']) - ); - if($r) { - $post_id = $r[0]['id']; - $retmail = $r[0]; - xchan_mail_query($retmail); - } - else { - $ret['message'] = t('Stored post could not be verified.'); - return $ret; - } - - if($images) { - foreach($images as $image) { - if(! stristr($image,z_root() . '/photo/')) - continue; - $image_uri = substr($image, strrpos($image, '/') + 1); - $image_uri = substr($image_uri, 0, strpos($image_uri, '.') - 2); - $r = q("UPDATE photo SET allow_cid = '%s' WHERE resource_id = '%s' AND uid = %d and allow_cid = '%s'", - dbesc('<' . $recipient . '>'), - dbesc($image_uri), - intval($channel['channel_id']), - dbesc('<' . $channel['channel_hash'] . '>') - ); - $r = q("UPDATE attach SET allow_cid = '%s' WHERE hash = '%s' AND is_photo = 1 and uid = %d and allow_cid = '%s'", - dbesc('<' . $recipient . '>'), - dbesc($image_uri), - intval($channel['channel_id']), - dbesc('<' . $channel['channel_hash'] . '>') - ); - } - } - - if($attaches) { - foreach($attaches as $attach) { - $hash = substr($attach,0,strpos($attach,',')); - $rev = intval(substr($attach,strpos($attach,','))); - attach_store($channel,$observer_hash,$options = 'update', array( - 'hash' => $hash, - 'revision' => $rev, - 'allow_cid' => '<' . $recipient . '>', - - )); - } - } - - Zotlabs\Daemon\Master::Summon(array('Notifier','mail',$post_id)); - - $ret['success'] = true; - $ret['message_item'] = intval($post_id); - $ret['conv'] = $retconv; - $ret['mail'] = $retmail; - - return $ret; - -} - -function create_conversation($channel,$recipient,$subject) { - - // create a new conversation - - $conv_guid = random_string(); - - $recip = q("select * from xchan where xchan_hash = '%s' limit 1", - dbesc($recipient) - ); - if($recip) - $recip_handle = $recip[0]['xchan_addr']; - - $sender_handle = channel_reddress($channel); - - $handles = $recip_handle . ';' . $sender_handle; - - if($subject) - $nsubject = str_rot47(base64url_encode($subject)); - - $r = q("insert into conv (uid,guid,creator,created,updated,subject,recips) values(%d, '%s', '%s', '%s', '%s', '%s', '%s') ", - intval($channel['channel_id']), - dbesc($conv_guid), - dbesc($sender_handle), - dbesc(datetime_convert()), - dbesc(datetime_convert()), - dbesc($nsubject), - dbesc($handles) - ); - - $r = q("select * from conv where guid = '%s' and uid = %d limit 1", - dbesc($conv_guid), - intval($channel['channel_id']) - ); - - return $r[0]; - -} - - -function private_messages_list($uid, $mailbox = '', $start = 0, $numitems = 0) { - - $where = ''; - $limit = ''; - - $t0 = dba_timer(); - - if($numitems) - $limit = " LIMIT " . intval($numitems) . " OFFSET " . intval($start); - - if($mailbox !== '') { - $x = q("select channel_hash from channel where channel_id = %d limit 1", - intval($uid) - ); - - if(! $x) - return array(); - - $channel_hash = dbesc($x[0]['channel_hash']); - $local_channel = intval(local_channel()); - - switch($mailbox) { - - case 'inbox': - $sql = "SELECT * FROM mail WHERE channel_id = $local_channel AND from_xchan != '$channel_hash' ORDER BY created DESC $limit"; - break; - - case 'outbox': - $sql = "SELECT * FROM mail WHERE channel_id = $local_channel AND from_xchan = '$channel_hash' ORDER BY created DESC $limit"; - break; - - case 'combined': - default: - $parents = q("SELECT mail.parent_mid FROM mail LEFT JOIN conv ON mail.conv_guid = conv.guid WHERE mail.mid = mail.parent_mid AND mail.channel_id = %d ORDER BY conv.updated DESC $limit", - intval($local_channel) - ); - break; - } - - } - - $r = null; - - if($parents) { - foreach($parents as $parent) { - $all = q("SELECT * FROM mail WHERE parent_mid = '%s' AND channel_id = %d ORDER BY created DESC limit 1", - dbesc($parent['parent_mid']), - intval($local_channel) - ); - - if($all) { - foreach($all as $single) { - $r[] = $single; - } - } - } - } - elseif($sql) { - $r = q($sql); - } - - if(! $r) { - return array(); - } - - $chans = array(); - foreach($r as $rr) { - $s = "'" . dbesc(trim($rr['from_xchan'])) . "'"; - if(! in_array($s,$chans)) - $chans[] = $s; - $s = "'" . dbesc(trim($rr['to_xchan'])) . "'"; - if(! in_array($s,$chans)) - $chans[] = $s; - } - - $c = q("select * from xchan where xchan_hash in (" . protect_sprintf(implode(',',$chans)) . ")"); - - foreach($r as $k => $rr) { - $r[$k]['from'] = find_xchan_in_array($rr['from_xchan'],$c); - $r[$k]['to'] = find_xchan_in_array($rr['to_xchan'],$c); - $r[$k]['seen'] = intval($rr['mail_seen']); - if(intval($r[$k]['mail_obscured'])) { - if($r[$k]['title']) - $r[$k]['title'] = base64url_decode(str_rot47($r[$k]['title'])); - if($r[$k]['body']) - $r[$k]['body'] = base64url_decode(str_rot47($r[$k]['body'])); - } - } - - return $r; -} - - - -function private_messages_fetch_message($channel_id, $messageitem_id, $updateseen = false) { - - $messages = q("select * from mail where id = %d and channel_id = %d order by created asc", - dbesc($messageitem_id), - intval($channel_id) - ); - - if(! $messages) - return array(); - - $chans = array(); - foreach($messages as $rr) { - $s = "'" . dbesc(trim($rr['from_xchan'])) . "'"; - if(! in_array($s,$chans)) - $chans[] = $s; - $s = "'" . dbesc(trim($rr['to_xchan'])) . "'"; - if(! in_array($s,$chans)) - $chans[] = $s; - } - - $c = q("select * from xchan where xchan_hash in (" . protect_sprintf(implode(',',$chans)) . ")"); - - foreach($messages as $k => $message) { - $messages[$k]['from'] = find_xchan_in_array($message['from_xchan'],$c); - $messages[$k]['to'] = find_xchan_in_array($message['to_xchan'],$c); - if(intval($messages[$k]['mail_obscured'])) { - if($messages[$k]['title']) - $messages[$k]['title'] = base64url_decode(str_rot47($messages[$k]['title'])); - if($messages[$k]['body']) - $messages[$k]['body'] = base64url_decode(str_rot47($messages[$k]['body'])); - } - } - - - if($updateseen) { - $r = q("UPDATE mail SET mail_seen = 1 where mail_seen = 0 and id = %d AND channel_id = %d", - dbesc($messageitem_id), - intval($channel_id) - ); - } - - return $messages; - -} - - -function private_messages_drop($channel_id, $messageitem_id, $drop_conversation = false) { - - - $x = q("select * from mail where id = %d and channel_id = %d limit 1", - intval($messageitem_id), - intval($channel_id) - ); - if(! $x) - return false; - - $conversation = null; - - if($x[0]['conv_guid']) { - $y = q("select * from conv where guid = '%s' and uid = %d limit 1", - dbesc($x[0]['conv_guid']), - intval($channel_id) - ); - if($y) { - $conversation = $y[0]; - $conversation['subject'] = base64url_decode(str_rot47($conversation['subject'])); - } - } - - if($drop_conversation) { - $m = array(); - $m['conv'] = array($conversation); - $m['conv'][0]['deleted'] = 1; - - $z = q("select * from mail where parent_mid = '%s' and channel_id = %d", - dbesc($x[0]['parent_mid']), - intval($channel_id) - ); - if($z) { - if($x[0]['conv_guid']) { - q("delete from conv where guid = '%s' and uid = %d", - dbesc($x[0]['conv_guid']), - intval($channel_id) - ); - } - $m['mail'] = array(); - foreach($z as $zz) { - xchan_mail_query($zz); - $zz['mail_deleted'] = 1; - $m['mail'][] = encode_mail($zz,true); - } - q("DELETE FROM mail WHERE parent_mid = '%s' AND channel_id = %d ", - dbesc($x[0]['parent_mid']), - intval($channel_id) - ); - } - build_sync_packet($channel_id,$m); - return true; - } - else { - xchan_mail_query($x[0]); - $x[0]['mail_deleted'] = true; - msg_drop($messageitem_id, $channel_id, $x[0]['conv_guid']); - build_sync_packet($channel_id,array('mail' => array(encode_mail($x,true)))); - return true; - } - return false; - -} - - -function private_messages_fetch_conversation($channel_id, $messageitem_id, $updateseen = false) { - - // find the parent_mid of the message being requested - - $r = q("SELECT parent_mid from mail WHERE channel_id = %d and id = %d limit 1", - intval($channel_id), - intval($messageitem_id) - ); - - if(! $r) - return array(); - - $messages = q("select * from mail where parent_mid = '%s' and channel_id = %d order by created asc", - dbesc($r[0]['parent_mid']), - intval($channel_id) - ); - - if(! $messages) - return array(); - - $chans = array(); - foreach($messages as $rr) { - $s = "'" . dbesc(trim($rr['from_xchan'])) . "'"; - if(! in_array($s,$chans)) - $chans[] = $s; - $s = "'" . dbesc(trim($rr['to_xchan'])) . "'"; - if(! in_array($s,$chans)) - $chans[] = $s; - } - - - $c = q("select * from xchan where xchan_hash in (" . protect_sprintf(implode(',',$chans)) . ")"); - - foreach($messages as $k => $message) { - $messages[$k]['from'] = find_xchan_in_array($message['from_xchan'],$c); - $messages[$k]['to'] = find_xchan_in_array($message['to_xchan'],$c); - if(intval($messages[$k]['mail_obscured'])) { - if($messages[$k]['title']) - $messages[$k]['title'] = base64url_decode(str_rot47($messages[$k]['title'])); - if($messages[$k]['body']) - $messages[$k]['body'] = base64url_decode(str_rot47($messages[$k]['body'])); - } - if($messages[$k]['mail_raw']) - $messages[$k]['body'] = mail_prepare_binary([ 'id' => $messages[$k]['id'] ]); - - } - - - - if($updateseen) { - $r = q("UPDATE mail SET mail_seen = 1 where mail_seen = 0 and parent_mid = '%s' AND channel_id = %d", - dbesc($r[0]['parent_mid']), - intval($channel_id) - ); - } - - return $messages; - -} - -- cgit v1.2.3 From 8ca487115f70450d9b9f1642fc259da9431eb170 Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 27 May 2021 19:50:53 +0000 Subject: remove include/msglib --- include/msglib.php | 28 ---------------------------- 1 file changed, 28 deletions(-) delete mode 100644 include/msglib.php diff --git a/include/msglib.php b/include/msglib.php deleted file mode 100644 index f0bf523de..000000000 --- a/include/msglib.php +++ /dev/null @@ -1,28 +0,0 @@ - Date: Thu, 27 May 2021 19:55:06 +0000 Subject: remove zot --- Zotlabs/Zot/Auth.php | 363 --------------------------------------------- Zotlabs/Zot/Finger.php | 155 ------------------- Zotlabs/Zot/IHandler.php | 24 --- Zotlabs/Zot/Receiver.php | 304 ------------------------------------- Zotlabs/Zot/ZotHandler.php | 39 ----- 5 files changed, 885 deletions(-) delete mode 100644 Zotlabs/Zot/Auth.php delete mode 100644 Zotlabs/Zot/Finger.php delete mode 100644 Zotlabs/Zot/IHandler.php delete mode 100644 Zotlabs/Zot/Receiver.php delete mode 100644 Zotlabs/Zot/ZotHandler.php diff --git a/Zotlabs/Zot/Auth.php b/Zotlabs/Zot/Auth.php deleted file mode 100644 index 6ce2174f7..000000000 --- a/Zotlabs/Zot/Auth.php +++ /dev/null @@ -1,363 +0,0 @@ -test = ((array_key_exists('test',$req)) ? intval($req['test']) : 0); - $this->test_results = array('success' => false); - $this->debug_msg = ''; - - $this->success = false; - $this->address = $req['auth']; - $this->desturl = $req['dest']; - $this->sec = $req['sec']; - $this->version = $req['version']; - $this->delegate = $req['delegate']; - - $c = get_sys_channel(); - if(! $c) { - logger('unable to obtain response (sys) channel'); - $this->Debug('no local channels found.'); - $this->Finalise(); - } - - if(strpbrk($this->sec,'.:')) { - logger('illegal security context'); - $this->Debug('illegal security context.'); - $this->Finalise(); - } - - $x = $this->GetHublocs($this->address); - - if($x) { - foreach($x as $xx) { - if($this->Verify($c,$xx)) - break; - } - } - - /** - * @FIXME we really want to save the return_url in the session before we - * visit rmagic. This does however prevent a recursion if you visit - * rmagic directly, as it would otherwise send you back here again. - * But z_root() probably isn't where you really want to go. - */ - - if(strstr($this->desturl,z_root() . '/rmagic')) - goaway(z_root()); - - $this->Finalise(); - - } - - function GetHublocs($address) { - - // Try and find a hubloc for the person attempting to auth. - // Since we're matching by address, we have to return all entries - // some of which may be from re-installed hubs; and we'll need to - // try each sequentially to see if one can pass the test - - $x = q("select * from hubloc left join xchan on xchan_hash = hubloc_hash - where hubloc_addr = '%s' order by hubloc_id desc", - dbesc($address) - ); - - if(! $x) { - // finger them if they can't be found. - $j = Finger::run($address, null); - if ($j['success']) { - import_xchan($j); - $x = q("select * from hubloc left join xchan on xchan_hash = hubloc_hash - where hubloc_addr = '%s' order by hubloc_id desc", - dbesc($address) - ); - } - } - if(! $x) { - logger('mod_zot: auth: unable to finger ' . $address); - $this->Debug('no hubloc found for ' . $address . ' and probing failed.'); - $this->Finalise(); - } - - return $x; - } - - - function Verify($channel,$hubloc) { - - logger('auth request received from ' . $hubloc['hubloc_addr'] ); - - $this->remote = remote_channel(); - $this->remote_service_class = ''; - $this->remote_level = 0; - $this->remote_hub = $hubloc['hubloc_url']; - $this->dnt = 0; - - if(! $this->sec) { - logger('missing security context.'); - if($this->test) - $this->Debug('missing security context.'); - return false; - } - - - // check credentials and access - - // If they are already authenticated and haven't changed credentials, - // we can save an expensive network round trip and improve performance. - - // Also check that they are coming from the same site as they authenticated with originally. - - $already_authed = (((remote_channel()) && ($hubloc['hubloc_hash'] == remote_channel()) - && ($hubloc['hubloc_url'] === $_SESSION['remote_hub'])) ? true : false); - - if($this->delegate && $this->delegate !== $_SESSION['delegate_channel']) - $already_authed = false; - - if($already_authed) - return true; - - if(local_channel()) { - - // tell them to logout if they're logged in locally as anything but the target remote account - // in which case just shut up because they don't need to be doing this at all. - - if (\App::$channel['channel_hash'] == $hubloc['xchan_hash']) { - return true; - } - else { - logger('already authenticated locally as somebody else.'); - notice( t('Remote authentication blocked. You are logged into this site locally. Please logout and retry.') . EOL); - if($this->test) { - $this->Debug('already logged in locally with a conflicting identity.'); - return false; - } - } - return false; - } - - // Auth packets MUST use ultra top-secret hush-hush mode - e.g. the entire packet is encrypted using the - // site private key - // The actual channel sending the packet ($c[0]) is not important, but this provides a - // generic zot packet with a sender which can be verified - - $x = q("select site_crypto from site where site_url = '%s' limit 1", - dbesc($hubloc['hubloc_url']) - ); - - $p = zot_build_packet($channel,$type = 'auth_check', - array(array('guid' => $hubloc['hubloc_guid'],'guid_sig' => $hubloc['hubloc_guid_sig'])), - $hubloc['hubloc_sitekey'], (($x) ? $x[0]['site_crypto'] : ''), $this->sec); - - $this->Debug('auth check packet created using sitekey ' . $hubloc['hubloc_sitekey']); - $this->Debug('packet contents: ' . $p); - - $result = zot_zot($hubloc['hubloc_callback'],$p); - if(! $result['success']) { - logger('auth_check callback failed.'); - if($this->test) - $this->Debug('auth check request to your site returned .' . print_r($result, true)); - return false; - } - - $j = json_decode($result['body'], true); - if(! $j) { - logger('auth_check json data malformed.'); - if($this->test) - $this->Debug('json malformed: ' . $result['body']); - return false; - } - - $this->Debug('auth check request returned ' . print_r($j, true)); - - if(! $j['success']) - return false; - - // legit response, but we do need to check that this wasn't answered by a man-in-middle - - if (! Crypto::verify($this->sec . $hubloc['xchan_hash'],base64url_decode($j['confirm']),$hubloc['xchan_pubkey'])) { - logger('final confirmation failed.'); - if($this->test) - $this->Debug('final confirmation failed. ' . $sec . print_r($j,true) . print_r($hubloc,true)); - return false; - } - - if (array_key_exists('service_class',$j)) - $this->remote_service_class = $j['service_class']; - if (array_key_exists('level',$j)) - $this->remote_level = $j['level']; - if (array_key_exists('DNT',$j)) - $this->dnt = $j['DNT']; - - - // log them in - - if ($this->test) { - // testing only - return the success result - $this->test_results['success'] = true; - $this->Debug('Authentication Success!'); - $this->Finalise(); - } - - $_SESSION['authenticated'] = 1; - - // check for delegation and if all is well, log them in locally with delegation restrictions - - $this->delegate_success = false; - - if($this->delegate) { - $r = q("select * from channel left join xchan on channel_hash = xchan_hash where xchan_addr = '%s' limit 1", - dbesc($this->delegate) - ); - if ($r && intval($r[0]['channel_id'])) { - $allowed = perm_is_allowed($r[0]['channel_id'],$hubloc['xchan_hash'],'delegate'); - if($allowed) { - $_SESSION['delegate_channel'] = $r[0]['channel_id']; - $_SESSION['delegate'] = $hubloc['xchan_hash']; - $_SESSION['account_id'] = intval($r[0]['channel_account_id']); - require_once('include/security.php'); - // this will set the local_channel authentication in the session - change_channel($r[0]['channel_id']); - $this->delegate_success = true; - } - } - } - - if (! $this->delegate_success) { - // normal visitor (remote_channel) login session credentials - $_SESSION['visitor_id'] = $hubloc['xchan_hash']; - $_SESSION['my_url'] = $hubloc['xchan_url']; - $_SESSION['my_address'] = $this->address; - $_SESSION['remote_service_class'] = $this->remote_service_class; - $_SESSION['remote_level'] = $this->remote_level; - $_SESSION['remote_hub'] = $this->remote_hub; - $_SESSION['DNT'] = $this->dnt; - } - - $arr = array('xchan' => $hubloc, 'url' => $this->desturl, 'session' => $_SESSION); - call_hooks('magic_auth_success',$arr); - \App::set_observer($hubloc); - require_once('include/security.php'); - \App::set_groups(init_groups_visitor($_SESSION['visitor_id'])); - info(sprintf( t('Welcome %s. Remote authentication successful.'),$hubloc['xchan_name'])); - logger('mod_zot: auth success from ' . $hubloc['xchan_addr']); - $this->success = true; - return true; - } - - function Debug($msg) { - $this->debug_msg .= $msg . EOL; - } - - - function Finalise() { - - if($this->test) { - $this->test_results['message'] = $this->debug_msg; - json_return_and_die($this->test_results); - } - - goaway($this->desturl); - } - -} - - -/** - * - * Magic Auth - * ========== - * - * So-called "magic auth" takes place by a special exchange. On the site where the "channel to be authenticated" lives (e.g. $mysite), - * a redirection is made via $mysite/magic to the zot endpoint of the remote site ($remotesite) with special GET parameters. - * - * The endpoint is typically https://$remotesite/post - or whatever was specified as the callback url in prior communications - * (we will bootstrap an address and fetch a zot info packet if possible where no prior communications exist) - * - * Five GET parameters are supplied: - * * auth => the urlencoded webbie (channel@host.domain) of the channel requesting access - * * dest => the desired destination URL (urlencoded) - * * sec => a random string which is also stored on $mysite for use during the verification phase. - * * version => the zot revision - * * delegate => optional urlencoded webbie of a local channel to invoke delegation rights for - * - * * test => (optional 1 or 0 - debugs the authentication exchange and returns a json response instead of redirecting the browser session) - * - * When this packet is received, an "auth-check" zot message is sent to $mysite. - * (e.g. if $_GET['auth'] is foobar@podunk.edu, a zot packet is sent to the podunk.edu zot endpoint, which is typically /post) - * If no information has been recorded about the requesting identity a zot information packet will be retrieved before - * continuing. - * - * The sender of this packet is an arbitrary/random site channel. The recipients will be a single recipient corresponding - * to the guid and guid_sig we have associated with the requesting auth identity - * - * \code{.json} - * { - * "type":"auth_check", - * "sender":{ - * "guid":"kgVFf_...", - * "guid_sig":"PT9-TApz...", - * "url":"http:\/\/podunk.edu", - * "url_sig":"T8Bp7j...", - * "sitekey":"aMtgKTiirXrICP..." - * }, - * "recipients":{ - * { - * "guid":"ZHSqb...", - * "guid_sig":"JsAAXi..." - * } - * } - * "callback":"\/post", - * "version":1, - * "secret":"1eaa661", - * "secret_sig":"eKV968b1..." - * } - * \endcode - * - * auth_check messages MUST use encapsulated encryption. This message is sent to the origination site, which checks the 'secret' to see - * if it is the same as the 'sec' which it passed originally. It also checks the secret_sig which is the secret signed by the - * destination channel's private key and base64url encoded. If everything checks out, a json packet is returned: - * - * \code{.json} - * { - * "success":1, - * "confirm":"q0Ysovd1u...", - * "service_class":(optional) - * "level":(optional) - * "DNT": (optional do-not-track - 1 or 0) - * } - * \endcode - * - * 'confirm' in this case is the base64url encoded RSA signature of the concatenation of 'secret' with the - * base64url encoded whirlpool hash of the requestor's guid and guid_sig; signed with the source channel private key. - * This prevents a man-in-the-middle from inserting a rogue success packet. Upon receipt and successful - * verification of this packet, the destination site will redirect to the original destination URL and indicate a successful remote login. - * Service_class can be used by cooperating sites to provide different access rights based on account rights and subscription plans. It is - * a string whose contents are not defined by protocol. Example: "basic" or "gold". - * - * @param[in,out] \App &$a - */ diff --git a/Zotlabs/Zot/Finger.php b/Zotlabs/Zot/Finger.php deleted file mode 100644 index cadde5415..000000000 --- a/Zotlabs/Zot/Finger.php +++ /dev/null @@ -1,155 +0,0 @@ - true) or array('success' => false); - */ - - static public function run($webbie, $channel = null, $autofallback = true) { - - $ret = array('success' => false); - - self::$token = random_string(); - - if (strpos($webbie, '@') === false) { - $address = $webbie; - $host = \App::get_hostname(); - } else { - $address = substr($webbie,0,strpos($webbie,'@')); - $host = substr($webbie,strpos($webbie,'@')+1); - if(strpos($host,'/')) - $host = substr($host,0,strpos($host,'/')); - } - - $xchan_addr = $address . '@' . $host; - - if ((! $address) || (! $xchan_addr)) { - logger('zot_finger: no address :' . $webbie); - - return $ret; - } - - logger('using xchan_addr: ' . $xchan_addr, LOGGER_DATA, LOG_DEBUG); - - // potential issue here; the xchan_addr points to the primary hub. - // The webbie we were called with may not, so it might not be found - // unless we query for hubloc_addr instead of xchan_addr - - $r = q("select xchan.*, hubloc.* from xchan - left join hubloc on xchan_hash = hubloc_hash - where xchan_addr = '%s' and hubloc_primary = 1 and hubloc_deleted = 0 and hubloc_network = 'zot' limit 1", - dbesc($xchan_addr) - ); - - if($r) { - $url = $r[0]['hubloc_url']; - - if($r[0]['hubloc_network'] && $r[0]['hubloc_network'] !== 'zot') { - logger('zot_finger: alternate network: ' . $webbie); - logger('url: ' . $url . ', net: ' . var_export($r[0]['hubloc_network'],true), LOGGER_DATA, LOG_DEBUG); - return $ret; - } - } else { - $url = 'https://' . $host; - } - - $m = parse_url($url); - if($m) { - $parsed_host = strtolower($m['host']); - } - - $rhs = '/.well-known/zot-info'; - $https = ((strpos($url,'https://') === 0) ? true : false); - - logger('zot_finger: ' . $address . ' at ' . $url, LOGGER_DEBUG); - - if ($channel) { - $postvars = array( - 'address' => $address, - 'target' => $channel['channel_guid'], - 'target_sig' => $channel['channel_guid_sig'], - 'key' => $channel['channel_pubkey'], - 'token' => self::$token - ); - - $headers = []; - $headers['X-Zot-Channel'] = $channel['channel_address'] . '@' . \App::get_hostname(); - $headers['X-Zot-Nonce'] = random_string(); - $headers['Host'] = $parsed_host; - - $xhead = HTTPSig::create_sig($headers,$channel['channel_prvkey'],'acct:' . channel_reddress($channel)); - - $retries = 0; - - $result = z_post_url($url . $rhs,$postvars,$retries, [ 'headers' => $xhead ]); - - if ((! $result['success']) && ($autofallback)) { - if ($https) { - logger('zot_finger: https failed. falling back to http'); - $result = z_post_url('http://' . $host . $rhs,$postvars, $retries, [ 'headers' => $xhead ]); - } - } - } - else { - $rhs .= '?f=&address=' . urlencode($address) . '&token=' . self::$token; - - $result = z_fetch_url($url . $rhs); - if((! $result['success']) && ($autofallback)) { - if($https) { - logger('zot_finger: https failed. falling back to http'); - $result = z_fetch_url('http://' . $host . $rhs); - } - } - } - - if(! $result['success']) { - logger('zot_finger: no results'); - - return $ret; - } - - $x = json_decode($result['body'], true); - - $verify = HTTPSig::verify($result,(($x) ? $x['key'] : '')); - - if($x && (! $verify['header_valid'])) { - $signed_token = ((is_array($x) && array_key_exists('signed_token', $x)) ? $x['signed_token'] : null); - if($signed_token) { - $valid = Crypto::verify('token.' . self::$token, base64url_decode($signed_token), $x['key']); - if(! $valid) { - logger('invalid signed token: ' . $url . $rhs, LOGGER_NORMAL, LOG_ERR); - - return $ret; - } - } - else { - logger('No signed token from ' . $url . $rhs, LOGGER_NORMAL, LOG_WARNING); - return $ret; - } - } - - return $x; - } - -} diff --git a/Zotlabs/Zot/IHandler.php b/Zotlabs/Zot/IHandler.php deleted file mode 100644 index dd82f5be6..000000000 --- a/Zotlabs/Zot/IHandler.php +++ /dev/null @@ -1,24 +0,0 @@ -error = false; - $this->validated = false; - $this->messagetype = ''; - $this->response = array('success' => false); - - $this->handler = $handler; - - if(! is_array($data)) - $data = json_decode($data,true); - - if($data && is_array($data)) { - $this->encrypted = ((array_key_exists('iv',$data)) ? true : false); - - if($this->encrypted) { - $data['encrypted'] = true; - $this->data = @json_decode(@Crypto::unencapsulate($data,$prvkey),true); - } - if(! $this->data) - $this->data = $data; - - if($this->data && is_array($this->data) && array_key_exists('type',$this->data)) - $this->messagetype = $this->data['type']; - } - if(! $this->messagetype) - $this->error = true; - - if($this->data) { - $this->sender = ((array_key_exists('sender',$this->data)) ? $this->data['sender'] : null); - $this->recipients = ((array_key_exists('recipients',$this->data)) ? $this->data['recipients'] : null); - } - - if($this->sender) - $this->ValidateSender(); - - $this->Dispatch(); - } - - function ValidateSender() { - $hubs = zot_gethub($this->sender,true); - if (! $hubs) { - - /* Have never seen this guid or this guid coming from this location. Check it and register it. */ - /* (!!) this will validate the sender. */ - - $result = zot_register_hub($this->sender); - - if ((! $result['success']) || (! ($hubs = zot_gethub($this->sender,true)))) { - $this->response['message'] = 'Hub not available.'; - json_return_and_die($this->response); - } - } - foreach($hubs as $hub) { - update_hub_connected($hub,((array_key_exists('sitekey',$this->sender)) ? $this->sender['sitekey'] : '')); - } - $this->validated = true; - } - - - function Dispatch() { - - /* Handle tasks which don't require sender validation */ - - switch($this->messagetype) { - case 'ping': - /* no validation needed */ - $this->handler->Ping(); - break; - case 'pickup': - /* perform site validation, as opposed to sender validation */ - $this->handler->Pickup($this->data); - break; - - default: - if(! $this->validated) { - $this->response['message'] = 'Sender not valid'; - json_return_and_die($this->response); - } - break; - } - - /* Now handle tasks which require sender validation */ - - switch($this->messagetype) { - - case 'auth_check': - $this->handler->AuthCheck($this->data,$this->encrypted); - break; - - case 'request': - $this->handler->Request($this->data); - break; - - case 'purge': - $this->handler->Purge($this->sender,$this->recipients); - break; - - case 'refresh': - case 'force_refresh': - $this->handler->Refresh($this->sender,$this->recipients); - break; - - case 'notify': - $this->handler->Notify($this->data); - break; - - case 'rekey': - $this->handler->Rekey($this->sender, $this->data); - break; - - default: - $this->response['message'] = 'Not implemented'; - json_return_and_die($this->response); - break; - } - - } -} - - - -/** - * @brief zot communications and messaging. - * - * Sender HTTP posts to this endpoint ($site/post typically) with 'data' parameter set to json zot message packet. - * This packet is optionally encrypted, which we will discover if the json has an 'iv' element. - * $contents => array( 'alg' => 'aes256cbc', 'iv' => initialisation vector, 'key' => decryption key, 'data' => encrypted data); - * $contents->iv and $contents->key are random strings encrypted with this site's RSA public key and then base64url encoded. - * - * Once decrypted, one will find the normal json_encoded zot message packet. - * - * Defined packet types are: notify, purge, refresh, force_refresh, auth_check, ping, and pickup - * - * Standard packet: (used by notify, purge, refresh, force_refresh, and auth_check) - * \code{.json} - * { - * "type": "notify", - * "sender":{ - * "guid":"kgVFf_1...", - * "guid_sig":"PT9-TApzp...", - * "url":"http:\/\/podunk.edu", - * "url_sig":"T8Bp7j5...", - * }, - * "recipients": { optional recipient array }, - * "callback":"\/post", - * "version":"1.2", - * "encryption":["aes256cbc"], - * "secret":"1eaa...", - * "secret_sig": "df89025470fac8..." - * } - * \endcode - * - * Signature fields are all signed with the sender channel private key and base64url encoded. - * Recipients are arrays of guid and guid_sig, which were previously signed with the recipients private - * key and base64url encoded and later obtained via channel discovery. Absence of recipients indicates - * a public message or visible to all potential listeners on this site. - * - * "pickup" packet: - * The pickup packet is sent in response to a notify packet from another site - * \code{.json} - * { - * "type":"pickup", - * "url":"http:\/\/example.com", - * "callback":"http:\/\/example.com\/post", - * "callback_sig":"teE1_fLI...", - * "secret":"1eaa...", - * "secret_sig":"O7nB4_..." - * } - * \endcode - * - * In the pickup packet, the sig fields correspond to the respective data - * element signed with this site's system private key and then base64url encoded. - * The "secret" is the same as the original secret from the notify packet. - * - * If verification is successful, a json structure is returned containing a - * success indicator and an array of type 'pickup'. - * Each pickup element contains the original notify request and a message field - * whose contents are dependent on the message type. - * - * This JSON array is AES encapsulated using the site public key of the site - * that sent the initial zot pickup packet. - * Using the above example, this would be example.com. - * - * \code{.json} - * { - * "success":1, - * "pickup":{ - * "notify":{ - * "type":"notify", - * "sender":{ - * "guid":"kgVFf_...", - * "guid_sig":"PT9-TApz...", - * "url":"http:\/\/z.podunk.edu", - * "url_sig":"T8Bp7j5D..." - * }, - * "callback":"\/post", - * "version":1, - * "secret":"1eaa661..." - * }, - * "message":{ - * "type":"activity", - * "message_id":"10b049ce384cbb2da9467319bc98169ab36290b8bbb403aa0c0accd9cb072e76@podunk.edu", - * "message_top":"10b049ce384cbb2da9467319bc98169ab36290b8bbb403aa0c0accd9cb072e76@podunk.edu", - * "message_parent":"10b049ce384cbb2da9467319bc98169ab36290b8bbb403aa0c0accd9cb072e76@podunk.edu", - * "created":"2012-11-20 04:04:16", - * "edited":"2012-11-20 04:04:16", - * "title":"", - * "body":"Hi Nickordo", - * "app":"", - * "verb":"post", - * "object_type":"", - * "target_type":"", - * "permalink":"", - * "location":"", - * "longlat":"", - * "owner":{ - * "name":"Indigo", - * "address":"indigo@podunk.edu", - * "url":"http:\/\/podunk.edu", - * "photo":{ - * "mimetype":"image\/jpeg", - * "src":"http:\/\/podunk.edu\/photo\/profile\/m\/5" - * }, - * "guid":"kgVFf_...", - * "guid_sig":"PT9-TAp...", - * }, - * "author":{ - * "name":"Indigo", - * "address":"indigo@podunk.edu", - * "url":"http:\/\/podunk.edu", - * "photo":{ - * "mimetype":"image\/jpeg", - * "src":"http:\/\/podunk.edu\/photo\/profile\/m\/5" - * }, - * "guid":"kgVFf_...", - * "guid_sig":"PT9-TAp..." - * } - * } - * } - * } - * \endcode - * - * Currently defined message types are 'activity', 'mail', 'profile', 'location' - * and 'channel_sync', which each have different content schemas. - * - * Ping packet: - * A ping packet does not require any parameters except the type. It may or may - * not be encrypted. - * - * \code{.json} - * { - * "type": "ping" - * } - * \endcode - * - * On receipt of a ping packet a ping response will be returned: - * - * \code{.json} - * { - * "success" : 1, - * "site" { - * "url": "http:\/\/podunk.edu", - * "url_sig": "T8Bp7j5...", - * "sitekey": "-----BEGIN PUBLIC KEY----- - * MIICIjANBgkqhkiG9w0BAQE..." - * } - * } - * \endcode - * - * The ping packet can be used to verify that a site has not been re-installed, and to - * initiate corrective action if it has. The url_sig is signed with the site private key - * and base64url encoded - and this should verify with the enclosed sitekey. Failure to - * verify indicates the site is corrupt or otherwise unable to communicate using zot. - * This return packet is not otherwise verified, so should be compared with other - * results obtained from this site which were verified prior to taking action. For instance - * if you have one verified result with this signature and key, and other records for this - * url which have different signatures and keys, it indicates that the site was re-installed - * and corrective action may commence (remove or mark invalid any entries with different - * signatures). - * If you have no records which match this url_sig and key - no corrective action should - * be taken as this packet may have been returned by an imposter. - * - * @param[in,out] App &$a - */ - diff --git a/Zotlabs/Zot/ZotHandler.php b/Zotlabs/Zot/ZotHandler.php deleted file mode 100644 index ab8815b3d..000000000 --- a/Zotlabs/Zot/ZotHandler.php +++ /dev/null @@ -1,39 +0,0 @@ - Date: Thu, 27 May 2021 19:58:34 +0000 Subject: composer dump autoload --- vendor/composer/autoload_classmap.php | 18 +----------------- vendor/composer/autoload_static.php | 18 +----------------- 2 files changed, 2 insertions(+), 34 deletions(-) diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index 19900534d..cccf3a7bc 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -1105,7 +1105,6 @@ return array( 'Zotlabs\\Daemon\\Onepoll' => $baseDir . '/Zotlabs/Daemon/Onepoll.php', 'Zotlabs\\Daemon\\Poller' => $baseDir . '/Zotlabs/Daemon/Poller.php', 'Zotlabs\\Daemon\\Queue' => $baseDir . '/Zotlabs/Daemon/Queue.php', - 'Zotlabs\\Daemon\\Ratenotif' => $baseDir . '/Zotlabs/Daemon/Ratenotif.php', 'Zotlabs\\Daemon\\Thumbnail' => $baseDir . '/Zotlabs/Daemon/Thumbnail.php', 'Zotlabs\\Extend\\Hook' => $baseDir . '/Zotlabs/Extend/Hook.php', 'Zotlabs\\Extend\\Route' => $baseDir . '/Zotlabs/Extend/Route.php', @@ -1229,7 +1228,6 @@ return array( 'Zotlabs\\Module\\Embed' => $baseDir . '/Zotlabs/Module/Embed.php', 'Zotlabs\\Module\\Embedphotos' => $baseDir . '/Zotlabs/Module/Embedphotos.php', 'Zotlabs\\Module\\Event' => $baseDir . '/Zotlabs/Module/Event.php', - 'Zotlabs\\Module\\Events' => $baseDir . '/Zotlabs/Module/Events.php', 'Zotlabs\\Module\\Fbrowser' => $baseDir . '/Zotlabs/Module/Fbrowser.php', 'Zotlabs\\Module\\Feed' => $baseDir . '/Zotlabs/Module/Feed.php', 'Zotlabs\\Module\\Fhubloc_id_url' => $baseDir . '/Zotlabs/Module/Fhubloc_id_url.php', @@ -1266,7 +1264,6 @@ return array( 'Zotlabs\\Module\\Magic' => $baseDir . '/Zotlabs/Module/Magic.php', 'Zotlabs\\Module\\Manage' => $baseDir . '/Zotlabs/Module/Manage.php', 'Zotlabs\\Module\\Menu' => $baseDir . '/Zotlabs/Module/Menu.php', - 'Zotlabs\\Module\\Message' => $baseDir . '/Zotlabs/Module/Message.php', 'Zotlabs\\Module\\Mitem' => $baseDir . '/Zotlabs/Module/Mitem.php', 'Zotlabs\\Module\\Moderate' => $baseDir . '/Zotlabs/Module/Moderate.php', 'Zotlabs\\Module\\Mood' => $baseDir . '/Zotlabs/Module/Mood.php', @@ -1297,11 +1294,8 @@ return array( 'Zotlabs\\Module\\Ping' => $baseDir . '/Zotlabs/Module/Ping.php', 'Zotlabs\\Module\\Poco' => $baseDir . '/Zotlabs/Module/Poco.php', 'Zotlabs\\Module\\Poke' => $baseDir . '/Zotlabs/Module/Poke.php', - 'Zotlabs\\Module\\Post' => $baseDir . '/Zotlabs/Module/Post.php', 'Zotlabs\\Module\\Poster' => $baseDir . '/Zotlabs/Module/Poster.php', - 'Zotlabs\\Module\\Prate' => $baseDir . '/Zotlabs/Module/Prate.php', 'Zotlabs\\Module\\Pretheme' => $baseDir . '/Zotlabs/Module/Pretheme.php', - 'Zotlabs\\Module\\Probe' => $baseDir . '/Zotlabs/Module/Probe.php', 'Zotlabs\\Module\\Profile' => $baseDir . '/Zotlabs/Module/Profile.php', 'Zotlabs\\Module\\Profile_photo' => $baseDir . '/Zotlabs/Module/Profile_photo.php', 'Zotlabs\\Module\\Profiles' => $baseDir . '/Zotlabs/Module/Profiles.php', @@ -1309,9 +1303,6 @@ return array( 'Zotlabs\\Module\\Pubsites' => $baseDir . '/Zotlabs/Module/Pubsites.php', 'Zotlabs\\Module\\Pubstream' => $baseDir . '/Zotlabs/Module/Pubstream.php', 'Zotlabs\\Module\\Randprof' => $baseDir . '/Zotlabs/Module/Randprof.php', - 'Zotlabs\\Module\\Rate' => $baseDir . '/Zotlabs/Module/Rate.php', - 'Zotlabs\\Module\\Ratings' => $baseDir . '/Zotlabs/Module/Ratings.php', - 'Zotlabs\\Module\\Ratingsearch' => $baseDir . '/Zotlabs/Module/Ratingsearch.php', 'Zotlabs\\Module\\Rbmark' => $baseDir . '/Zotlabs/Module/Rbmark.php', 'Zotlabs\\Module\\React' => $baseDir . '/Zotlabs/Module/React.php', 'Zotlabs\\Module\\Regate' => $baseDir . '/Zotlabs/Module/Regate.php', @@ -1385,11 +1376,9 @@ return array( 'Zotlabs\\Module\\Xrd' => $baseDir . '/Zotlabs/Module/Xrd.php', 'Zotlabs\\Module\\Xref' => $baseDir . '/Zotlabs/Module/Xref.php', 'Zotlabs\\Module\\Z6trans' => $baseDir . '/Zotlabs/Module/Z6trans.php', - 'Zotlabs\\Module\\Zfinger' => $baseDir . '/Zotlabs/Module/Zfinger.php', 'Zotlabs\\Module\\Zot' => $baseDir . '/Zotlabs/Module/Zot.php', 'Zotlabs\\Module\\Zot_probe' => $baseDir . '/Zotlabs/Module/Zot_probe.php', 'Zotlabs\\Module\\Zotfeed' => $baseDir . '/Zotlabs/Module/Zotfeed.php', - 'Zotlabs\\Module\\Zping' => $baseDir . '/Zotlabs/Module/Zping.php', 'Zotlabs\\Photo\\PhotoDriver' => $baseDir . '/Zotlabs/Photo/PhotoDriver.php', 'Zotlabs\\Photo\\PhotoGd' => $baseDir . '/Zotlabs/Photo/PhotoGd.php', 'Zotlabs\\Photo\\PhotoImagick' => $baseDir . '/Zotlabs/Photo/PhotoImagick.php', @@ -1657,6 +1646,7 @@ return array( 'Zotlabs\\Update\\_1242' => $baseDir . '/Zotlabs/Update/_1242.php', 'Zotlabs\\Update\\_1243' => $baseDir . '/Zotlabs/Update/_1243.php', 'Zotlabs\\Update\\_1244' => $baseDir . '/Zotlabs/Update/_1244.php', + 'Zotlabs\\Update\\_1245' => $baseDir . '/Zotlabs/Update/_1245.php', 'Zotlabs\\Web\\Controller' => $baseDir . '/Zotlabs/Web/Controller.php', 'Zotlabs\\Web\\HTTPHeaders' => $baseDir . '/Zotlabs/Web/HTTPHeaders.php', 'Zotlabs\\Web\\HTTPSig' => $baseDir . '/Zotlabs/Web/HTTPSig.php', @@ -1731,15 +1721,9 @@ return array( 'Zotlabs\\Widget\\Wiki_page_history' => $baseDir . '/Zotlabs/Widget/Wiki_page_history.php', 'Zotlabs\\Widget\\Wiki_pages' => $baseDir . '/Zotlabs/Widget/Wiki_pages.php', 'Zotlabs\\Widget\\Zcard' => $baseDir . '/Zotlabs/Widget/Zcard.php', - 'Zotlabs\\Zot6\\Finger' => $baseDir . '/Zotlabs/Zot6/Finger.php', 'Zotlabs\\Zot6\\IHandler' => $baseDir . '/Zotlabs/Zot6/IHandler.php', 'Zotlabs\\Zot6\\Receiver' => $baseDir . '/Zotlabs/Zot6/Receiver.php', 'Zotlabs\\Zot6\\Zot6Handler' => $baseDir . '/Zotlabs/Zot6/Zot6Handler.php', - 'Zotlabs\\Zot\\Auth' => $baseDir . '/Zotlabs/Zot/Auth.php', - 'Zotlabs\\Zot\\Finger' => $baseDir . '/Zotlabs/Zot/Finger.php', - 'Zotlabs\\Zot\\IHandler' => $baseDir . '/Zotlabs/Zot/IHandler.php', - 'Zotlabs\\Zot\\Receiver' => $baseDir . '/Zotlabs/Zot/Receiver.php', - 'Zotlabs\\Zot\\ZotHandler' => $baseDir . '/Zotlabs/Zot/ZotHandler.php', 'phpseclib\\Crypt\\AES' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/AES.php', 'phpseclib\\Crypt\\Base' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/Base.php', 'phpseclib\\Crypt\\Blowfish' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/Blowfish.php', diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index 2d71ba507..eb89becdf 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -1295,7 +1295,6 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Zotlabs\\Daemon\\Onepoll' => __DIR__ . '/../..' . '/Zotlabs/Daemon/Onepoll.php', 'Zotlabs\\Daemon\\Poller' => __DIR__ . '/../..' . '/Zotlabs/Daemon/Poller.php', 'Zotlabs\\Daemon\\Queue' => __DIR__ . '/../..' . '/Zotlabs/Daemon/Queue.php', - 'Zotlabs\\Daemon\\Ratenotif' => __DIR__ . '/../..' . '/Zotlabs/Daemon/Ratenotif.php', 'Zotlabs\\Daemon\\Thumbnail' => __DIR__ . '/../..' . '/Zotlabs/Daemon/Thumbnail.php', 'Zotlabs\\Extend\\Hook' => __DIR__ . '/../..' . '/Zotlabs/Extend/Hook.php', 'Zotlabs\\Extend\\Route' => __DIR__ . '/../..' . '/Zotlabs/Extend/Route.php', @@ -1419,7 +1418,6 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Zotlabs\\Module\\Embed' => __DIR__ . '/../..' . '/Zotlabs/Module/Embed.php', 'Zotlabs\\Module\\Embedphotos' => __DIR__ . '/../..' . '/Zotlabs/Module/Embedphotos.php', 'Zotlabs\\Module\\Event' => __DIR__ . '/../..' . '/Zotlabs/Module/Event.php', - 'Zotlabs\\Module\\Events' => __DIR__ . '/../..' . '/Zotlabs/Module/Events.php', 'Zotlabs\\Module\\Fbrowser' => __DIR__ . '/../..' . '/Zotlabs/Module/Fbrowser.php', 'Zotlabs\\Module\\Feed' => __DIR__ . '/../..' . '/Zotlabs/Module/Feed.php', 'Zotlabs\\Module\\Fhubloc_id_url' => __DIR__ . '/../..' . '/Zotlabs/Module/Fhubloc_id_url.php', @@ -1456,7 +1454,6 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Zotlabs\\Module\\Magic' => __DIR__ . '/../..' . '/Zotlabs/Module/Magic.php', 'Zotlabs\\Module\\Manage' => __DIR__ . '/../..' . '/Zotlabs/Module/Manage.php', 'Zotlabs\\Module\\Menu' => __DIR__ . '/../..' . '/Zotlabs/Module/Menu.php', - 'Zotlabs\\Module\\Message' => __DIR__ . '/../..' . '/Zotlabs/Module/Message.php', 'Zotlabs\\Module\\Mitem' => __DIR__ . '/../..' . '/Zotlabs/Module/Mitem.php', 'Zotlabs\\Module\\Moderate' => __DIR__ . '/../..' . '/Zotlabs/Module/Moderate.php', 'Zotlabs\\Module\\Mood' => __DIR__ . '/../..' . '/Zotlabs/Module/Mood.php', @@ -1487,11 +1484,8 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Zotlabs\\Module\\Ping' => __DIR__ . '/../..' . '/Zotlabs/Module/Ping.php', 'Zotlabs\\Module\\Poco' => __DIR__ . '/../..' . '/Zotlabs/Module/Poco.php', 'Zotlabs\\Module\\Poke' => __DIR__ . '/../..' . '/Zotlabs/Module/Poke.php', - 'Zotlabs\\Module\\Post' => __DIR__ . '/../..' . '/Zotlabs/Module/Post.php', 'Zotlabs\\Module\\Poster' => __DIR__ . '/../..' . '/Zotlabs/Module/Poster.php', - 'Zotlabs\\Module\\Prate' => __DIR__ . '/../..' . '/Zotlabs/Module/Prate.php', 'Zotlabs\\Module\\Pretheme' => __DIR__ . '/../..' . '/Zotlabs/Module/Pretheme.php', - 'Zotlabs\\Module\\Probe' => __DIR__ . '/../..' . '/Zotlabs/Module/Probe.php', 'Zotlabs\\Module\\Profile' => __DIR__ . '/../..' . '/Zotlabs/Module/Profile.php', 'Zotlabs\\Module\\Profile_photo' => __DIR__ . '/../..' . '/Zotlabs/Module/Profile_photo.php', 'Zotlabs\\Module\\Profiles' => __DIR__ . '/../..' . '/Zotlabs/Module/Profiles.php', @@ -1499,9 +1493,6 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Zotlabs\\Module\\Pubsites' => __DIR__ . '/../..' . '/Zotlabs/Module/Pubsites.php', 'Zotlabs\\Module\\Pubstream' => __DIR__ . '/../..' . '/Zotlabs/Module/Pubstream.php', 'Zotlabs\\Module\\Randprof' => __DIR__ . '/../..' . '/Zotlabs/Module/Randprof.php', - 'Zotlabs\\Module\\Rate' => __DIR__ . '/../..' . '/Zotlabs/Module/Rate.php', - 'Zotlabs\\Module\\Ratings' => __DIR__ . '/../..' . '/Zotlabs/Module/Ratings.php', - 'Zotlabs\\Module\\Ratingsearch' => __DIR__ . '/../..' . '/Zotlabs/Module/Ratingsearch.php', 'Zotlabs\\Module\\Rbmark' => __DIR__ . '/../..' . '/Zotlabs/Module/Rbmark.php', 'Zotlabs\\Module\\React' => __DIR__ . '/../..' . '/Zotlabs/Module/React.php', 'Zotlabs\\Module\\Regate' => __DIR__ . '/../..' . '/Zotlabs/Module/Regate.php', @@ -1575,11 +1566,9 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Zotlabs\\Module\\Xrd' => __DIR__ . '/../..' . '/Zotlabs/Module/Xrd.php', 'Zotlabs\\Module\\Xref' => __DIR__ . '/../..' . '/Zotlabs/Module/Xref.php', 'Zotlabs\\Module\\Z6trans' => __DIR__ . '/../..' . '/Zotlabs/Module/Z6trans.php', - 'Zotlabs\\Module\\Zfinger' => __DIR__ . '/../..' . '/Zotlabs/Module/Zfinger.php', 'Zotlabs\\Module\\Zot' => __DIR__ . '/../..' . '/Zotlabs/Module/Zot.php', 'Zotlabs\\Module\\Zot_probe' => __DIR__ . '/../..' . '/Zotlabs/Module/Zot_probe.php', 'Zotlabs\\Module\\Zotfeed' => __DIR__ . '/../..' . '/Zotlabs/Module/Zotfeed.php', - 'Zotlabs\\Module\\Zping' => __DIR__ . '/../..' . '/Zotlabs/Module/Zping.php', 'Zotlabs\\Photo\\PhotoDriver' => __DIR__ . '/../..' . '/Zotlabs/Photo/PhotoDriver.php', 'Zotlabs\\Photo\\PhotoGd' => __DIR__ . '/../..' . '/Zotlabs/Photo/PhotoGd.php', 'Zotlabs\\Photo\\PhotoImagick' => __DIR__ . '/../..' . '/Zotlabs/Photo/PhotoImagick.php', @@ -1847,6 +1836,7 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Zotlabs\\Update\\_1242' => __DIR__ . '/../..' . '/Zotlabs/Update/_1242.php', 'Zotlabs\\Update\\_1243' => __DIR__ . '/../..' . '/Zotlabs/Update/_1243.php', 'Zotlabs\\Update\\_1244' => __DIR__ . '/../..' . '/Zotlabs/Update/_1244.php', + 'Zotlabs\\Update\\_1245' => __DIR__ . '/../..' . '/Zotlabs/Update/_1245.php', 'Zotlabs\\Web\\Controller' => __DIR__ . '/../..' . '/Zotlabs/Web/Controller.php', 'Zotlabs\\Web\\HTTPHeaders' => __DIR__ . '/../..' . '/Zotlabs/Web/HTTPHeaders.php', 'Zotlabs\\Web\\HTTPSig' => __DIR__ . '/../..' . '/Zotlabs/Web/HTTPSig.php', @@ -1921,15 +1911,9 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Zotlabs\\Widget\\Wiki_page_history' => __DIR__ . '/../..' . '/Zotlabs/Widget/Wiki_page_history.php', 'Zotlabs\\Widget\\Wiki_pages' => __DIR__ . '/../..' . '/Zotlabs/Widget/Wiki_pages.php', 'Zotlabs\\Widget\\Zcard' => __DIR__ . '/../..' . '/Zotlabs/Widget/Zcard.php', - 'Zotlabs\\Zot6\\Finger' => __DIR__ . '/../..' . '/Zotlabs/Zot6/Finger.php', 'Zotlabs\\Zot6\\IHandler' => __DIR__ . '/../..' . '/Zotlabs/Zot6/IHandler.php', 'Zotlabs\\Zot6\\Receiver' => __DIR__ . '/../..' . '/Zotlabs/Zot6/Receiver.php', 'Zotlabs\\Zot6\\Zot6Handler' => __DIR__ . '/../..' . '/Zotlabs/Zot6/Zot6Handler.php', - 'Zotlabs\\Zot\\Auth' => __DIR__ . '/../..' . '/Zotlabs/Zot/Auth.php', - 'Zotlabs\\Zot\\Finger' => __DIR__ . '/../..' . '/Zotlabs/Zot/Finger.php', - 'Zotlabs\\Zot\\IHandler' => __DIR__ . '/../..' . '/Zotlabs/Zot/IHandler.php', - 'Zotlabs\\Zot\\Receiver' => __DIR__ . '/../..' . '/Zotlabs/Zot/Receiver.php', - 'Zotlabs\\Zot\\ZotHandler' => __DIR__ . '/../..' . '/Zotlabs/Zot/ZotHandler.php', 'phpseclib\\Crypt\\AES' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/Crypt/AES.php', 'phpseclib\\Crypt\\Base' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/Crypt/Base.php', 'phpseclib\\Crypt\\Blowfish' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/Crypt/Blowfish.php', -- cgit v1.2.3 From d06d22c7c96020fff4acb0030aa6b5b07ead351e Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 27 May 2021 20:06:22 +0000 Subject: bump version --- boot.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boot.php b/boot.php index bf59151bb..f51abe2f8 100644 --- a/boot.php +++ b/boot.php @@ -52,7 +52,7 @@ require_once('include/attach.php'); require_once('include/bbcode.php'); define ( 'PLATFORM_NAME', 'hubzilla' ); -define ( 'STD_VERSION', '5.7.1' ); +define ( 'STD_VERSION', '5.9.0' ); define ( 'ZOT_REVISION', '6.0' ); define ( 'DB_UPDATE_VERSION', 1245 ); -- cgit v1.2.3 From 30f258b3f9f51af3cfc66e3e7318ec506a2905d7 Mon Sep 17 00:00:00 2001 From: Mario Date: Fri, 28 May 2021 07:19:49 +0000 Subject: add check for type --- Zotlabs/Lib/Activity.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Zotlabs/Lib/Activity.php b/Zotlabs/Lib/Activity.php index a24c17815..41e394dbc 100644 --- a/Zotlabs/Lib/Activity.php +++ b/Zotlabs/Lib/Activity.php @@ -650,7 +650,7 @@ class Activity { $atts = ((is_array($item['attach'])) ? $item['attach'] : json_decode($item['attach'], true)); if ($atts) { foreach ($atts as $att) { - if (strpos($att['type'], 'image')) { + if (isset($att['type']) && strpos($att['type'], 'image')) { $ret[] = ['type' => 'Image', 'url' => $att['href']]; } else { -- cgit v1.2.3 From d289994da4b7717199abf8bf8d43b1a021f250fe Mon Sep 17 00:00:00 2001 From: Mario Date: Fri, 28 May 2021 07:22:49 +0000 Subject: missing include --- Zotlabs/Daemon/Expire.php | 1 + 1 file changed, 1 insertion(+) diff --git a/Zotlabs/Daemon/Expire.php b/Zotlabs/Daemon/Expire.php index c4ff8aec6..99fe68b6f 100644 --- a/Zotlabs/Daemon/Expire.php +++ b/Zotlabs/Daemon/Expire.php @@ -2,6 +2,7 @@ namespace Zotlabs\Daemon; +require_once('include/items.php'); class Expire { -- cgit v1.2.3 From 0718ac514d2421a96ab191f874a0cd8b120a5a78 Mon Sep 17 00:00:00 2001 From: Mario Date: Fri, 28 May 2021 08:11:40 +0000 Subject: remove deprecated mail code --- Zotlabs/Lib/Libsync.php | 3 - Zotlabs/Lib/Libzot.php | 86 ------------ Zotlabs/Module/Import.php | 6 - Zotlabs/Module/Manage.php | 11 -- Zotlabs/Module/Sse_bs.php | 31 ----- Zotlabs/Widget/Notifications.php | 17 +-- include/channel.php | 25 ---- include/conversation.php | 3 - include/import.php | 79 ----------- include/items.php | 289 --------------------------------------- include/text.php | 30 ---- view/tpl/channel.tpl | 4 - 12 files changed, 1 insertion(+), 583 deletions(-) diff --git a/Zotlabs/Lib/Libsync.php b/Zotlabs/Lib/Libsync.php index 5455aa2ea..67603a0e3 100644 --- a/Zotlabs/Lib/Libsync.php +++ b/Zotlabs/Lib/Libsync.php @@ -255,9 +255,6 @@ class Libsync { if (array_key_exists('chatroom', $arr) && $arr['chatroom']) sync_chatrooms($channel, $arr['chatroom']); - if (array_key_exists('conv', $arr) && $arr['conv']) - import_conv($channel, $arr['conv']); - if (array_key_exists('mail', $arr) && $arr['mail']) sync_mail($channel, $arr['mail']); diff --git a/Zotlabs/Lib/Libzot.php b/Zotlabs/Lib/Libzot.php index e44a82b71..b04c0ea3c 100644 --- a/Zotlabs/Lib/Libzot.php +++ b/Zotlabs/Lib/Libzot.php @@ -1377,8 +1377,6 @@ class Libzot { $check_mentions = true; } } - elseif ($msg['type'] === 'mail') - $perm = 'post_mail'; $r = []; @@ -2210,90 +2208,6 @@ class Libzot { return $post_id; } - static function process_mail_delivery($sender, $arr, $deliveries) { - - $result = []; - - if ($sender != $arr['from_xchan']) { - logger('process_mail_delivery: sender is not mail author'); - return; - } - - foreach ($deliveries as $d) { - - $DR = new DReport(z_root(), $sender, $d, $arr['mid']); - - $r = q("select * from channel where channel_hash = '%s' limit 1", - dbesc($d['hash']) - ); - - if (!$r) { - $DR->update('recipient not found'); - $result[] = $DR->get(); - continue; - } - - $channel = $r[0]; - $DR->set_name($channel['channel_name'] . ' <' . channel_reddress($channel) . '>'); - - - if (!perm_is_allowed($channel['channel_id'], $sender, 'post_mail')) { - - /* - * Always allow somebody to reply if you initiated the conversation. It's anti-social - * and a bit rude to send a private message to somebody and block their ability to respond. - * If you are being harrassed and want to put an end to it, delete the conversation. - */ - - $return = false; - if ($arr['parent_mid']) { - $return = q("select * from mail where mid = '%s' and channel_id = %d limit 1", - dbesc($arr['parent_mid']), - intval($channel['channel_id']) - ); - } - if (!$return) { - logger("permission denied for mail delivery {$channel['channel_id']}"); - $DR->update('permission denied'); - $result[] = $DR->get(); - continue; - } - } - - - $r = q("select id from mail where mid = '%s' and channel_id = %d limit 1", - dbesc($arr['mid']), - intval($channel['channel_id']) - ); - if ($r) { - if (intval($arr['mail_recalled'])) { - $x = q("delete from mail where id = %d and channel_id = %d", - intval($r[0]['id']), - intval($channel['channel_id']) - ); - $DR->update('mail recalled'); - $result[] = $DR->get(); - logger('mail_recalled'); - } - else { - $DR->update('duplicate mail received'); - $result[] = $DR->get(); - logger('duplicate mail received'); - } - continue; - } - else { - $arr['account_id'] = $channel['channel_account_id']; - $arr['channel_id'] = $channel['channel_id']; - $item_id = mail_store($arr); - $DR->update('mail delivered'); - $result[] = $DR->get(); - } - } - - return $result; - } - /** * @brief Processes delivery of profile. diff --git a/Zotlabs/Module/Import.php b/Zotlabs/Module/Import.php index 59db7b4be..77a9ec844 100644 --- a/Zotlabs/Module/Import.php +++ b/Zotlabs/Module/Import.php @@ -494,12 +494,6 @@ class Import extends \Zotlabs\Web\Controller { if(is_array($data['chatroom'])) import_chatrooms($channel,$data['chatroom']); - if(is_array($data['conv'])) - import_conv($channel,$data['conv']); - - if(is_array($data['mail'])) - import_mail($channel,$data['mail']); - if(is_array($data['event'])) import_events($channel,$data['event']); diff --git a/Zotlabs/Module/Manage.php b/Zotlabs/Module/Manage.php index bc2034b95..d67b47437 100644 --- a/Zotlabs/Module/Manage.php +++ b/Zotlabs/Module/Manage.php @@ -84,16 +84,6 @@ class Manage extends \Zotlabs\Web\Controller { if($intr) $channels[$x]['intros'] = intval($intr[0]['total']); - - $mails = q("SELECT count(id) as total from mail WHERE channel_id = %d AND mail_seen = 0 and from_xchan != '%s' ", - intval($channels[$x]['channel_id']), - dbesc($channels[$x]['channel_hash']) - ); - - if($mails) - $channels[$x]['mail'] = intval($mails[0]['total']); - - $events = q("SELECT etype, dtstart, adjust FROM event WHERE event.uid = %d AND dtstart < '%s' AND dtstart > '%s' and dismissed = 0 ORDER BY dtstart ASC ", @@ -175,7 +165,6 @@ class Manage extends \Zotlabs\Web\Controller { '$msg_make_default' => t('Make Default'), '$create' => $create, '$all_channels' => $channels, - '$mail_format' => t('%d new messages'), '$intros_format' => t('%d new introductions'), '$channel_usage_message' => $channel_usage_message, '$delegated_desc' => t('Delegated Channel'), diff --git a/Zotlabs/Module/Sse_bs.php b/Zotlabs/Module/Sse_bs.php index cc67c8eb7..4c903aa2c 100644 --- a/Zotlabs/Module/Sse_bs.php +++ b/Zotlabs/Module/Sse_bs.php @@ -100,7 +100,6 @@ class Sse_bs extends Controller { self::bs_forums(), self::bs_pubs($pubs), self::bs_files(), - self::bs_mail(), self::bs_all_events(), self::bs_register(), self::bs_info_notice() @@ -618,36 +617,6 @@ class Sse_bs extends Controller { } - function bs_mail() { - - $result['mail']['notifications'] = []; - $result['mail']['count'] = 0; - $result['mail']['offset'] = -1; - - if(! self::$uid) - return $result; - - if(! (self::$vnotify & VNOTIFY_MAIL)) - return $result; - - $r = q("select mail.*, xchan.* from mail left join xchan on xchan_hash = from_xchan - where channel_id = %d and mail_seen = 0 and mail_deleted = 0 - and from_xchan != '%s' order by created desc", - intval(self::$uid), - dbesc(self::$ob_hash) - ); - - if($r) { - foreach($r as $rr) { - $result['mail']['notifications'][] = Enotify::format_mail($rr); - } - $result['mail']['count'] = count($r); - } - - return $result; - - } - function bs_all_events() { $result['all_events']['notifications'] = []; diff --git a/Zotlabs/Widget/Notifications.php b/Zotlabs/Widget/Notifications.php index dd5a6cd46..d59312148 100644 --- a/Zotlabs/Widget/Notifications.php +++ b/Zotlabs/Widget/Notifications.php @@ -67,21 +67,6 @@ class Notifications { ] ]; - $notifications[] = [ - 'type' => 'mail', - 'icon' => 'envelope', - 'severity' => 'danger', - 'label' => t('New Mails'), - 'title' => t('New Mails Notifications'), - 'viewall' => [ - 'url' => 'mail/combined', - 'label' => t('View your private mails') - ], - 'markall' => [ - 'label' => t('Mark all messages seen') - ] - ]; - $notifications[] = [ 'type' => 'all_events', 'icon' => 'calendar', @@ -187,4 +172,4 @@ class Notifications { } } - + diff --git a/include/channel.php b/include/channel.php index e44fa01f2..91e2c37bd 100644 --- a/include/channel.php +++ b/include/channel.php @@ -770,7 +770,6 @@ function get_default_export_sections() { 'chatrooms', 'events', 'webpages', - 'mail', 'wikis' ]; @@ -1091,30 +1090,6 @@ function identity_basic_export($channel_id, $sections = null, $zap_compat = fals } } - if(in_array('mail',$sections)) { - $r = q("select * from conv where uid = %d", - intval($channel_id) - ); - if($r) { - for($x = 0; $x < count($r); $x ++) { - $r[$x]['subject'] = base64url_decode(str_rot47($r[$x]['subject'])); - } - $ret['conv'] = $r; - } - - $r = q("select * from mail where channel_id = %d", - intval($channel_id) - ); - if($r) { - $m = array(); - foreach($r as $rr) { - xchan_mail_query($rr); - $m[] = encode_mail($rr,true); - } - $ret['mail'] = $m; - } - } - if(in_array('wikis',$sections)) { $r = q("select * from item where resource_type like 'nwiki%%' and uid = %d order by created", intval($channel_id) diff --git a/include/conversation.php b/include/conversation.php index 9fc70c511..a5fdb5fa1 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -1057,9 +1057,6 @@ function thread_author_menu($item, $mode = '') { $follow_url = z_root() . '/follow/?f=&url=' . urlencode($url) . '&interactive=0'; } } - if($item['uid'] > 0 && author_is_pmable($item['author'],$contact)) { - $pm_url = z_root() . '/mail/new/?f=&hash=' . urlencode($item['author_xchan']); - } } if($contact) { diff --git a/include/import.php b/include/import.php index 022440676..bf7f47c3e 100644 --- a/include/import.php +++ b/include/import.php @@ -1089,85 +1089,6 @@ function import_likes($channel, $likes) { } } -function import_conv($channel,$convs) { - if($channel && $convs) { - foreach($convs as $conv) { - if($conv['deleted']) { - q("delete from conv where guid = '%s' and uid = %d", - dbesc($conv['guid']), - intval($channel['channel_id']) - ); - continue; - } - - unset($conv['id']); - - $conv['uid'] = $channel['channel_id']; - $conv['subject'] = str_rot47(base64url_encode($conv['subject'])); - - $r = q("select id from conv where guid = '%s' and uid = %d limit 1", - dbesc($conv['guid']), - intval($channel['channel_id']) - ); - if($r) - continue; - - create_table_from_array('conv',$conv); - } - } -} - -/** - * @brief Import mails. - * - * @param array $channel - * @param array $mails - * @param boolean $sync (optional) default false - */ -function import_mail($channel, $mails, $sync = false) { - if($channel && $mails) { - foreach($mails as $mail) { - if(array_key_exists('flags',$mail) && in_array('deleted',$mail['flags'])) { - q("delete from mail where mid = '%s' and uid = %d", - dbesc($mail['message_id']), - intval($channel['channel_id']) - ); - continue; - } - if(array_key_exists('flags',$mail) && in_array('recalled',$mail['flags'])) { - q("update mail set mail_recalled = 1 where mid = '%s' and uid = %d", - dbesc($mail['message_id']), - intval($channel['channel_id']) - ); - continue; - } - - $m = get_mail_elements($mail); - if(! $m) - continue; - - $m['account_id'] = $channel['channel_account_id']; - $m['channel_id'] = $channel['channel_id']; - - $mail_id = mail_store($m); - if($sync && $mail_id) { - Zotlabs\Daemon\Master::Summon(array('Notifier','single_mail',$mail_id)); - } - } - } -} - -/** - * @brief Synchronise mails. - * - * @see import_mail() - * @param array $channel - * @param array $mails - */ -function sync_mail($channel, $mails) { - import_mail($channel, $mails, true); -} - /** * @brief Synchronise files. * diff --git a/include/items.php b/include/items.php index ba4e79a75..5bb99c91c 100644 --- a/include/items.php +++ b/include/items.php @@ -1502,143 +1502,6 @@ function encode_item_flags($item) { return $ret; } -function encode_mail($item,$extended = false) { - $x = []; - $x['type'] = 'mail'; - $x['encoding'] = 'zot'; - - if(array_key_exists('mail_obscured',$item) && intval($item['mail_obscured'])) { - if($item['title']) - $item['title'] = base64url_decode(str_rot47($item['title'])); - if($item['body']) - $item['body'] = base64url_decode(str_rot47($item['body'])); - } - - $x['message_id'] = $item['mid']; - $x['message_parent'] = $item['parent_mid']; - $x['created'] = $item['created']; - $x['expires'] = $item['expires']; - $x['title'] = $item['title']; - $x['body'] = $item['body']; - $x['from'] = encode_item_xchan($item['from']); - $x['to'] = encode_item_xchan($item['to']); - $x['raw'] = $item['mail_raw']; - $x['mimetype'] = $item['mail_mimetype']; - $x['sig'] = $item['sig']; - - if($item['attach']) - $x['attach'] = json_decode($item['attach'],true); - - $x['flags'] = array(); - - if(intval($item['mail_recalled'])) { - $x['flags'][] = 'recalled'; - $x['title'] = ''; - $x['body'] = ''; - } - - if($extended) { - $x['conv_guid'] = $item['conv_guid']; - if(intval($item['mail_deleted'])) - $x['flags'][] = 'deleted'; - if(intval($item['mail_replied'])) - $x['flags'][] = 'replied'; - if(intval($item['mail_isreply'])) - $x['flags'][] = 'isreply'; - if(intval($item['mail_seen'])) - $x['flags'][] = 'seen'; - } - - return $x; -} - - - -function get_mail_elements($x) { - - $arr = array(); - - if(intval($x['raw'])) { - $arr['mail_raw'] = intval($x['raw']); - $arr['body'] = $x['body']; - } - else { - $arr['body'] = (($x['body']) ? htmlspecialchars($x['body'], ENT_COMPAT,'UTF-8',false) : ''); - - $maxlen = get_max_import_size(); - - if($maxlen && mb_strlen($arr['body']) > $maxlen) { - $arr['body'] = mb_substr($arr['body'],0,$maxlen,'UTF-8'); - logger('message length exceeds max_import_size: truncated'); - } - } - - $arr['title'] = (($x['title'])? htmlspecialchars($x['title'],ENT_COMPAT,'UTF-8',false) : ''); - $arr['mail_mimetype'] = (($x['mimetype']) ? htmlspecialchars($x['mimetype'],ENT_COMPAT,'UTF-8',false) : 'text/bbcode'); - $arr['conv_guid'] = (($x['conv_guid'])? htmlspecialchars($x['conv_guid'],ENT_COMPAT,'UTF-8',false) : ''); - - $arr['created'] = datetime_convert('UTC','UTC',$x['created']); - if((! array_key_exists('expires',$x)) || ($x['expires'] <= NULL_DATE)) - $arr['expires'] = NULL_DATE; - else - $arr['expires'] = datetime_convert('UTC','UTC',$x['expires']); - - $arr['mail_flags'] = 0; - - if(array_key_exists('sig',$x)) - $arr['sig'] = $x['sig']; - - if($x['flags'] && is_array($x['flags'])) { - if(in_array('recalled',$x['flags'])) { - $arr['mail_recalled'] = 1; - } - if(in_array('replied',$x['flags'])) { - $arr['mail_replied'] = 1; - } - if(in_array('isreply',$x['flags'])) { - $arr['mail_isreply'] = 1; - } - if(in_array('seen',$x['flags'])) { - $arr['mail_seen'] = 1; - } - if(in_array('deleted',$x['flags'])) { - $arr['mail_deleted'] = 1; - } - } - - $key = get_config('system','pubkey'); - $arr['mail_obscured'] = 1; - if($arr['body']) { - $arr['body'] = str_rot47(base64url_encode($arr['body'])); - } - - if($arr['title']) { - $arr['title'] = str_rot47(base64url_encode($arr['title'])); - } - if($arr['created'] > datetime_convert()) - $arr['created'] = datetime_convert(); - - - $arr['mid'] = (($x['message_id']) ? htmlspecialchars($x['message_id'], ENT_COMPAT,'UTF-8',false) : ''); - $arr['parent_mid'] = (($x['message_parent']) ? htmlspecialchars($x['message_parent'], ENT_COMPAT,'UTF-8',false) : ''); - - if($x['attach']) - $arr['attach'] = activity_sanitise($x['attach']); - - if(($xchan_hash = import_author_xchan($x['from'])) !== false) - $arr['from_xchan'] = $xchan_hash; - else - return array(); - - if(($xchan_hash = import_author_xchan($x['to'])) !== false) - $arr['to_xchan'] = $xchan_hash; - else - return array(); - - return $arr; -} - - function get_profile_elements($x) { $arr = array(); @@ -3513,158 +3376,6 @@ function post_is_importable($item,$abook) { } - -function mail_store($arr) { - - if(! $arr['channel_id']) { - logger('mail_store: no uid'); - return 0; - } - - $channel = channelx_by_n($arr['channel_id']); - - if(! $arr['mail_obscured']) { - if((strpos($arr['body'],'<') !== false) || (strpos($arr['body'],'>') !== false)) - $arr['body'] = escape_tags($arr['body']); - } - - if(array_key_exists('attach',$arr)) { - if(is_array($arr['attach'])) { - $arr['attach'] = json_encode($arr['attach']); - } - } - else { - $arr['attach'] = ''; - } - - $arr['account_id'] = ((x($arr,'account_id')) ? intval($arr['account_id']) : 0); - $arr['mid'] = ((x($arr,'mid')) ? notags(trim($arr['mid'])) : random_string()); - $arr['from_xchan'] = ((x($arr,'from_xchan')) ? notags(trim($arr['from_xchan'])) : ''); - $arr['to_xchan'] = ((x($arr,'to_xchan')) ? notags(trim($arr['to_xchan'])) : ''); - $arr['created'] = ((x($arr,'created') !== false) ? datetime_convert('UTC','UTC',$arr['created']) : datetime_convert()); - $arr['expires'] = ((x($arr,'expires') !== false) ? datetime_convert('UTC','UTC',$arr['expires']) : NULL_DATE); - $arr['title'] = ((x($arr,'title')) ? trim($arr['title']) : ''); - $arr['parent_mid'] = ((x($arr,'parent_mid')) ? notags(trim($arr['parent_mid'])) : ''); - $arr['body'] = ((x($arr,'body')) ? trim($arr['body']) : ''); - $arr['sig'] = ((x($arr,'sig')) ? trim($arr['sig']) : ''); - $arr['conv_guid'] = ((x($arr,'conv_guid')) ? trim($arr['conv_guid']) : ''); - $arr['mail_mimetype'] = ((x($arr,'mail_mimetype')) ? trim($arr['mail_mimetype']) : 'text/bbcode'); - - $arr['mail_flags'] = ((x($arr,'mail_flags')) ? intval($arr['mail_flags']) : 0 ); - $arr['mail_raw'] = ((x($arr,'mail_raw')) ? intval($arr['mail_raw']) : 0 ); - - - if($arr['parent_mid']) { - $parent_item = q("select * from mail where mid = '%s' and channel_id = %d limit 1", - dbesc($arr['parent_mid']), - intval($arr['channel_id']) - ); - if(($parent_item) && (! $arr['conv_guid'])) { - $arr['conv_guid'] = $parent_item[0]['conv_guid']; - } - } - else { - logger('mail_store: missing parent'); - $arr['parent_mid'] = $arr['mid']; - } - - if($arr['from_xchan'] === $channel['channel_hash']) - $conversant = $arr['to_xchan']; - else - $conversant = $arr['from_xchan']; - - - if(! $arr['conv_guid']) { - $x = create_conversation($channel,$conversant,(($arr['title']) ? base64url_decode(str_rot47($arr['title'])) : '')); - $arr['conv_guid'] = (($x) ? $x['guid'] : ''); - } - - - $r = q("SELECT id FROM mail WHERE mid = '%s' AND channel_id = %d LIMIT 1", - dbesc($arr['mid']), - intval($arr['channel_id']) - ); - - if($r) { - logger('Duplicate item ignored. ' . print_r($arr,true)); - return 0; - } - - if(! $r && $arr['mail_recalled'] == 1) { - logger('Recalled item not found. ' . print_r($arr,true)); - return 0; - } - - /** - * @hooks post_mail - * Called when a mail message has been composed. - */ - call_hooks('post_mail', $arr); - - if(x($arr,'cancel')) { - logger('Post cancelled by plugin.'); - return 0; - } - - logger('mail_store: ' . print_r($arr,true), LOGGER_DATA); - - create_table_from_array('mail', $arr); - - // find the item we just created - - $r = q("SELECT id FROM mail WHERE mid = '%s' AND channel_id = %d ORDER BY id ASC ", - $arr['mid'], // already dbesc'd - intval($arr['channel_id']) - ); - - if($r) { - $current_post = $r[0]['id']; - logger('Created item ' . $current_post, LOGGER_DEBUG); - $arr['id'] = $current_post; // for notification - } - else { - logger('Could not locate created item'); - return 0; - } - if(count($r) > 1) { - logger('Duplicated post occurred. Removing duplicates.'); - q("DELETE FROM mail WHERE mid = '%s' AND channel_id = %d AND id != %d ", - $arr['mid'], - intval($arr['channel_id']), - intval($current_post) - ); - } - else { - - $notif_params = array( - 'from_xchan' => $arr['from_xchan'], - 'to_xchan' => $arr['to_xchan'], - 'type' => NOTIFY_MAIL, - 'item' => $arr, - 'verb' => ACTIVITY_POST, - 'otype' => 'mail' - ); - - Enotify::submit($notif_params); - } - - if($arr['conv_guid']) { - $c = q("update conv set updated = '%s' where guid = '%s' and uid = %d", - dbesc(datetime_convert()), - dbesc($arr['conv_guid']), - intval($arr['channel_id']) - ); - } - - /** - * @hooks post_mail_end - * Called when a mail message has been delivered. - */ - call_hooks('post_mail_end', $arr); - return $current_post; -} - - function fix_private_photos($s, $uid, $item = null, $cid = 0) { logger('fix_private_photos', LOGGER_DEBUG); diff --git a/include/text.php b/include/text.php index 35a65bcfb..2584a94b9 100644 --- a/include/text.php +++ b/include/text.php @@ -1523,15 +1523,6 @@ function unobscure(&$item) { return; } -function unobscure_mail(&$item) { - if(array_key_exists('mail_obscured',$item) && intval($item['mail_obscured'])) { - if($item['title']) - $item['title'] = base64url_decode(str_rot47($item['title'])); - if($item['body']) - $item['body'] = base64url_decode(str_rot47($item['body'])); - } -} - function theme_attachments(&$item) { @@ -2555,27 +2546,6 @@ function xchan_query(&$items, $abook = true, $effective_uid = 0) { } } -function xchan_mail_query(&$item) { - $arr = array(); - $chans = null; - if($item) { - if($item['from_xchan'] && (! in_array("'" . dbesc($item['from_xchan']) . "'",$arr))) - $arr[] = "'" . dbesc($item['from_xchan']) . "'"; - if($item['to_xchan'] && (! in_array("'" . dbesc($item['to_xchan']) . "'",$arr))) - $arr[] = "'" . dbesc($item['to_xchan']) . "'"; - } - - if(count($arr)) { - $chans = q("select xchan.*,hubloc.* from xchan left join hubloc on hubloc_hash = xchan_hash - where xchan_hash in (" . protect_sprintf(implode(',', $arr)) . ") and hubloc_primary = 1"); - } - if($chans) { - $item['from'] = find_xchan_in_array($item['from_xchan'],$chans); - $item['to'] = find_xchan_in_array($item['to_xchan'],$chans); - } -} - - function find_xchan_in_array($xchan,$arr) { if(count($arr)) { foreach($arr as $x) { diff --git a/view/tpl/channel.tpl b/view/tpl/channel.tpl index 63e09ec05..0ff52831d 100644 --- a/view/tpl/channel.tpl +++ b/view/tpl/channel.tpl @@ -36,10 +36,6 @@
{{if !$channel.delegate}} -
{{if $channel.intros != 0}}{{/if}}{{$channel.intros|string_format:$intros_format}}{{if $channel.intros != 0}}{{/if}} -- cgit v1.2.3 From f1aace5a22368a703e562169f855a0e387c5b93a Mon Sep 17 00:00:00 2001 From: Mario Date: Fri, 28 May 2021 08:28:32 +0000 Subject: remove unobscure() --- Zotlabs/Lib/MessageFilter.php | 2 - Zotlabs/Module/Photos.php | 2 - Zotlabs/Module/Webpages.php | 197 +++++++++++++++++++++--------------------- include/conversation.php | 3 - include/import.php | 5 -- include/items.php | 1 - include/text.php | 9 -- 7 files changed, 98 insertions(+), 121 deletions(-) diff --git a/Zotlabs/Lib/MessageFilter.php b/Zotlabs/Lib/MessageFilter.php index 750d6d424..21e6ca26a 100644 --- a/Zotlabs/Lib/MessageFilter.php +++ b/Zotlabs/Lib/MessageFilter.php @@ -11,8 +11,6 @@ class MessageFilter { require_once('include/html2plain.php'); - unobscure($item); - $text = prepare_text($item['body'],$item['mimetype']); $text = html2plain(($item['title']) ? $item['title'] . ' ' . $text : $text); diff --git a/Zotlabs/Module/Photos.php b/Zotlabs/Module/Photos.php index e62accb06..3aad70d18 100644 --- a/Zotlabs/Module/Photos.php +++ b/Zotlabs/Module/Photos.php @@ -1178,10 +1178,8 @@ class Photos extends \Zotlabs\Web\Controller { if($observer['xchan_hash'] === $item['author_xchan'] || $observer['xchan_hash'] === $item['owner_xchan']) $drop = replace_macros(get_markup_template('photo_drop.tpl'), array('$id' => $item['id'], '$delete' => t('Delete'))); - $name_e = $profile_name; $title_e = $item['title']; - unobscure($item); $body_e = prepare_text($item['body'],$item['mimetype']); $comments .= replace_macros($template,array( diff --git a/Zotlabs/Module/Webpages.php b/Zotlabs/Module/Webpages.php index 787ed5850..72deba305 100644 --- a/Zotlabs/Module/Webpages.php +++ b/Zotlabs/Module/Webpages.php @@ -15,26 +15,26 @@ require_once('include/acl_selectors.php'); class Webpages extends Controller { function init() { - + if(argc() > 1 && argv(1) === 'sys' && is_site_admin()) { $sys = get_sys_channel(); if($sys && intval($sys['channel_id'])) { App::$is_sys = true; } } - + if(argc() > 1) $which = argv(1); else return; - + profile_load($which); - + } - - + + function get() { - + if(! App::$profile) { notice( t('Requested profile is not available.') . EOL ); App::$error = 404; @@ -53,13 +53,13 @@ class Webpages extends Controller { nav_set_selected('Webpages'); $which = argv(1); - + $_SESSION['return_url'] = App::$query_string; - + $uid = local_channel(); $owner = 0; $observer = App::get_observer(); - + $channel = App::get_channel(); switch ($_SESSION['action']) { @@ -74,7 +74,7 @@ class Webpages extends Controller { '$blocks' => $_SESSION['blocks'], )); return $o; - + case 'importselected': $_SESSION['action'] = null; break; @@ -85,7 +85,7 @@ class Webpages extends Controller { break; } require_once('include/import.php'); - + $pages = get_webpage_elements($channel, 'pages'); $layouts = get_webpage_elements($channel, 'layouts'); $blocks = get_webpage_elements($channel, 'blocks'); @@ -99,13 +99,13 @@ class Webpages extends Controller { )); $_SESSION['export'] = null; return $o; - + default : $_SESSION['action'] = null; break; } - - + + if(App::$is_sys && is_site_admin()) { $sys = get_sys_channel(); if($sys && intval($sys['channel_id'])) { @@ -114,7 +114,7 @@ class Webpages extends Controller { $observer = $sys; } } - + if(! $owner) { // Figure out who the page owner is. $r = q("select channel_id from channel where channel_address = '%s'", @@ -124,24 +124,24 @@ class Webpages extends Controller { $owner = intval($r[0]['channel_id']); } } - + $ob_hash = (($observer) ? $observer['xchan_hash'] : ''); - + $perms = get_all_perms($owner,$ob_hash); - + if(! $perms['write_pages']) { notice( t('Permission denied.') . EOL); return; } - + $mimetype = (($_REQUEST['mimetype']) ? $_REQUEST['mimetype'] : get_pconfig($owner,'system','page_mimetype')); - + $layout = (($_REQUEST['layout']) ? $_REQUEST['layout'] : get_pconfig($owner,'system','page_layout')); - + // Create a status editor (for now - we'll need a WYSIWYG eventually) to create pages - // Nickname is set to the observers xchan, and profile_uid to the owner's. + // Nickname is set to the observers xchan, and profile_uid to the owner's. // This lets you post pages at other people's channels. - + if((! $channel) && ($uid) && ($uid == App::$profile_uid)) { $channel = App::get_channel(); } @@ -156,12 +156,12 @@ class Webpages extends Controller { else { $channel_acl = [ 'allow_cid' => '', 'allow_gid' => '', 'deny_cid' => '', 'deny_gid' => '' ]; } - + $is_owner = ($uid && $uid == $owner); $o = ''; - + $x = array( 'webpage' => ITEM_TYPE_WEBPAGE, 'is_owner' => true, @@ -183,23 +183,23 @@ class Webpages extends Controller { 'bbco_autocomplete' => 'bbcode', 'bbcode' => true ); - + if($_REQUEST['title']) $x['title'] = $_REQUEST['title']; if($_REQUEST['body']) $x['body'] = $_REQUEST['body']; if($_REQUEST['pagetitle']) $x['pagetitle'] = $_REQUEST['pagetitle']; - - - // Get a list of webpages. We can't display all them because endless scroll makes that unusable, + + + // Get a list of webpages. We can't display all them because endless scroll makes that unusable, // so just list titles and an edit link. - - + + $sql_extra = item_permissions_sql($owner); - - $r = q("select * from iconfig left join item on iconfig.iid = item.id - where item.uid = %d and iconfig.cat = 'system' and iconfig.k = 'WEBPAGE' and item_type = %d + + $r = q("select * from iconfig left join item on iconfig.iid = item.id + where item.uid = %d and iconfig.cat = 'system' and iconfig.k = 'WEBPAGE' and item_type = %d $sql_extra order by item.created desc", intval($owner), intval(ITEM_TYPE_WEBPAGE) @@ -211,14 +211,13 @@ class Webpages extends Controller { $editor = status_editor($a,$x,false,'Webpages'); $pages = null; - + if($r) { $pages = array(); foreach($r as $rr) { - unobscure($rr); - + $lockstate = (($rr['allow_cid'] || $rr['allow_gid'] || $rr['deny_cid'] || $rr['deny_gid']) ? 'lock' : 'unlock'); - + $element_arr = array( 'type' => 'webpage', 'title' => $rr['title'], @@ -243,11 +242,11 @@ class Webpages extends Controller { ); } } - - + + //Build the base URL for edit links $url = z_root() . '/editwebpage/' . $which; - + $o .= replace_macros(get_markup_template('webpagelist.tpl'), array( '$listtitle' => t('Webpages'), '$baseurl' => $url, @@ -266,19 +265,19 @@ class Webpages extends Controller { '$created_txt' => t('Created'), '$edited_txt' => t('Edited') )); - + return $o; } - + function post() { $action = $_REQUEST['action']; if( $action ){ switch ($action) { case 'scan': - + // the state of this variable tracks whether website files have been scanned (null, true, false) - $cloud = null; - + $cloud = null; + // Website files are to be imported from an uploaded zip file if(($_FILES) && array_key_exists('zip_file',$_FILES) && isset($_POST['w_upload'])) { $source = $_FILES["zip_file"]["tmp_name"]; @@ -306,8 +305,8 @@ class Webpages extends Controller { } else { notice( t('Error opening zip file') . EOL); return null; - } - } + } + } // Website files are to be imported from the channel cloud files if (($_POST) && array_key_exists('path',$_POST) && isset($_POST['cloudsubmit'])) { @@ -321,7 +320,7 @@ class Webpages extends Controller { $cloud = true; } - + // If the website files were uploaded or specified in the cloud files, then $cloud // should be either true or false if ($cloud !== null) { @@ -345,24 +344,24 @@ class Webpages extends Controller { notice( t('No webpage elements detected.') . EOL); $_SESSION['action'] = null; } - + } - + // If the website elements were imported from a zip file, delete the temporary decompressed files if ($cloud === false && $website && $elements) { $_SESSION['tempimportpath'] = $website; //rrmdir($website); // Delete the temporary decompressed files } - + break; - + case 'importselected': require_once('include/import.php'); $channel = App::get_channel(); - + // Import layout first so that pages that reference new layouts will find - // the mid of layout items in the database - + // the mid of layout items in the database + // Obtain the user-selected layouts to import and import them $checkedlayouts = $_POST['layout']; $layouts = []; @@ -380,7 +379,7 @@ class Webpages extends Controller { } } $_SESSION['import_layouts'] = $layouts; - + // Obtain the user-selected blocks to import and import them $checkedblocks = $_POST['block']; $blocks = []; @@ -398,7 +397,7 @@ class Webpages extends Controller { } } $_SESSION['import_blocks'] = $blocks; - + // Obtain the user-selected pages to import and import them $checkedpages = $_POST['page']; $pages = []; @@ -424,9 +423,9 @@ class Webpages extends Controller { unset($_SESSION['tempimportpath']); } break; - + case 'exportzipfile': - + if(isset($_POST['w_download'])) { $_SESSION['action'] = 'export_select_list'; $_SESSION['export'] = 'zipfile'; @@ -436,45 +435,45 @@ class Webpages extends Controller { $filename = 'website.zip'; } $_SESSION['zipfilename'] = $filename; - + } - + break; - + case 'exportcloud': if(isset($_POST['exportcloudpath']) && $_POST['exportcloudpath'] !== '') { $_SESSION['action'] = 'export_select_list'; $_SESSION['export'] = 'cloud'; $_SESSION['exportcloudpath'] = filter_var($_POST['exportcloudpath'], FILTER_SANITIZE_ENCODED); } - + break; - + case 'cloud': case 'zipfile': - + $channel = App::get_channel(); - + $tmp_folder_name = random_string(10); $zip_folder_name = random_string(10); $zip_filename = $_SESSION['zipfilename']; $tmp_folderpath = '/tmp/' . $tmp_folder_name; $zip_folderpath = '/tmp/' . $zip_folder_name; - if (!mkdir($zip_folderpath, 0770, false)) { + if (!mkdir($zip_folderpath, 0770, false)) { logger('Error creating zip file export folder: ' . $zip_folderpath, LOGGER_NORMAL); json_return_and_die(array('message' => 'Error creating zip file export folder')); } $zip_filepath = '/tmp/' . $zip_folder_name . '/' . $zip_filename; - + $checkedblocks = $_POST['block']; $blocks = []; if (!empty($checkedblocks)) { foreach ($checkedblocks as $mid) { - $b = q("select iconfig.v, iconfig.k, mimetype, title, body from iconfig - left join item on item.id = iconfig.iid + $b = q("select iconfig.v, iconfig.k, mimetype, title, body from iconfig + left join item on item.id = iconfig.iid where mid = '%s' and item.uid = %d and iconfig.cat = 'system' and iconfig.k = 'BUILDBLOCK' order by iconfig.v asc limit 1", dbesc($mid), - intval($channel['channel_id']) + intval($channel['channel_id']) ); if($b) { $b = $b[0]; @@ -514,25 +513,25 @@ class Webpages extends Controller { $block_filepath = $tmp_blockfolder . '/' . $block_filename; $blockinfo['json']['contentfile'] = $block_filename; $block_jsonpath = $tmp_blockfolder . '/block.json'; - if (!is_dir($tmp_blockfolder) && !mkdir($tmp_blockfolder, 0770, true)) { + if (!is_dir($tmp_blockfolder) && !mkdir($tmp_blockfolder, 0770, true)) { logger('Error creating temp export folder: ' . $tmp_blockfolder, LOGGER_NORMAL); json_return_and_die(array('message' => 'Error creating temp export folder')); } file_put_contents($block_filepath, $blockinfo['body']); - file_put_contents($block_jsonpath, json_encode($blockinfo['json'], JSON_UNESCAPED_SLASHES)); + file_put_contents($block_jsonpath, json_encode($blockinfo['json'], JSON_UNESCAPED_SLASHES)); } } } - + $checkedlayouts = $_POST['layout']; $layouts = []; if (!empty($checkedlayouts)) { foreach ($checkedlayouts as $mid) { - $l = q("select iconfig.v, iconfig.k, mimetype, title, body from iconfig - left join item on item.id = iconfig.iid + $l = q("select iconfig.v, iconfig.k, mimetype, title, body from iconfig + left join item on item.id = iconfig.iid where mid = '%s' and item.uid = %d and iconfig.cat = 'system' and iconfig.k = 'PDL' order by iconfig.v asc limit 1", dbesc($mid), - intval($channel['channel_id']) + intval($channel['channel_id']) ); if($l) { $l = $l[0]; @@ -558,38 +557,38 @@ class Webpages extends Controller { $layout_filepath = $tmp_layoutfolder . '/' . $layout_filename; $layoutinfo['json']['contentfile'] = $layout_filename; $layout_jsonpath = $tmp_layoutfolder . '/layout.json'; - if (!is_dir($tmp_layoutfolder) && !mkdir($tmp_layoutfolder, 0770, true)) { + if (!is_dir($tmp_layoutfolder) && !mkdir($tmp_layoutfolder, 0770, true)) { logger('Error creating temp export folder: ' . $tmp_layoutfolder, LOGGER_NORMAL); json_return_and_die(array('message' => 'Error creating temp export folder')); } file_put_contents($layout_filepath, $layoutinfo['body']); - file_put_contents($layout_jsonpath, json_encode($layoutinfo['json'], JSON_UNESCAPED_SLASHES)); + file_put_contents($layout_jsonpath, json_encode($layoutinfo['json'], JSON_UNESCAPED_SLASHES)); } } } - + $checkedpages = $_POST['page']; $pages = []; if (!empty($checkedpages)) { foreach ($checkedpages as $mid) { - - $p = q("select * from iconfig left join item on iconfig.iid = item.id + + $p = q("select * from iconfig left join item on iconfig.iid = item.id where item.uid = %d and item.mid = '%s' and iconfig.cat = 'system' and iconfig.k = 'WEBPAGE' and item_type = %d", intval($channel['channel_id']), dbesc($mid), intval(ITEM_TYPE_WEBPAGE) ); - + if($p) { foreach ($p as $pp) { // Get the associated layout $layoutinfo = array(); if($pp['layout_mid']) { - $l = q("select iconfig.v, iconfig.k, mimetype, title, body from iconfig - left join item on item.id = iconfig.iid + $l = q("select iconfig.v, iconfig.k, mimetype, title, body from iconfig + left join item on item.id = iconfig.iid where mid = '%s' and item.uid = %d and iconfig.cat = 'system' and iconfig.k = 'PDL' order by iconfig.v asc limit 1", dbesc($pp['layout_mid']), - intval($channel['channel_id']) + intval($channel['channel_id']) ); if($l) { $l = $l[0]; @@ -614,12 +613,12 @@ class Webpages extends Controller { $layout_filepath = $tmp_layoutfolder . '/' . $layout_filename; $layoutinfo['json']['contentfile'] = $layout_filename; $layout_jsonpath = $tmp_layoutfolder . '/layout.json'; - if (!is_dir($tmp_layoutfolder) && !mkdir($tmp_layoutfolder, 0770, true)) { + if (!is_dir($tmp_layoutfolder) && !mkdir($tmp_layoutfolder, 0770, true)) { logger('Error creating temp export folder: ' . $tmp_layoutfolder, LOGGER_NORMAL); json_return_and_die(array('message' => 'Error creating temp export folder')); } file_put_contents($layout_filepath, $layoutinfo['body']); - file_put_contents($layout_jsonpath, json_encode($layoutinfo['json'], JSON_UNESCAPED_SLASHES)); + file_put_contents($layout_jsonpath, json_encode($layoutinfo['json'], JSON_UNESCAPED_SLASHES)); } } switch ($pp['mimetype']) { @@ -660,14 +659,14 @@ class Webpages extends Controller { $page_filepath = $tmp_pagefolder . '/' . $page_filename; $page_jsonpath = $tmp_pagefolder . '/page.json'; $pageinfo['json']['contentfile'] = $page_filename; - if (!is_dir($tmp_pagefolder) && !mkdir($tmp_pagefolder, 0770, true)) { + if (!is_dir($tmp_pagefolder) && !mkdir($tmp_pagefolder, 0770, true)) { logger('Error creating temp export folder: ' . $tmp_pagefolder, LOGGER_NORMAL); json_return_and_die(array('message' => 'Error creating temp export folder')); } file_put_contents($page_filepath, $pageinfo['body']); file_put_contents($page_jsonpath, json_encode($pageinfo['json'], JSON_UNESCAPED_SLASHES)); } - } + } } } if($action === 'zipfile') { @@ -686,23 +685,23 @@ class Webpages extends Controller { if(!$dirpath) { $x = attach_mkdirp($channel, $channel['channel_hash'], array('pathname' => $cloudpath)); $folder_hash = (($x['success']) ? $x['data']['hash'] : ''); - + if (!$x['success']) { logger('Failed to create cloud file folder', LOGGER_NORMAL); } $dirpath = get_dirpath_by_cloudpath($channel, $cloudpath); if (!is_dir($dirpath)) { logger('Failed to create cloud file folder', LOGGER_NORMAL); - } + } } - + $success = copy_folder_to_cloudfiles($channel, $channel['channel_hash'], $tmp_folderpath, $cloudpath); } } if(!$success) { logger('Error exporting webpage elements', LOGGER_NORMAL); } - + rrmdir($zip_folderpath); rrmdir($tmp_folderpath); // delete temporary files killme(); @@ -710,9 +709,9 @@ class Webpages extends Controller { default : break; } - + } - + } - + } diff --git a/include/conversation.php b/include/conversation.php index a5fdb5fa1..39ff8d7ad 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -1688,9 +1688,6 @@ function prepare_page($item) { // ... other possible options } - // prepare_body calls unobscure() as a side effect. Do it here so that - // the template will get passed an unobscured title. - $body = prepare_body($item, [ 'newwin' => false ]); if(App::$page['template'] == 'none') { $tpl = 'page_display_empty.tpl'; diff --git a/include/import.php b/include/import.php index bf7f47c3e..ae7b2787a 100644 --- a/include/import.php +++ b/include/import.php @@ -1846,7 +1846,6 @@ function get_webpage_elements($channel, $type = 'all') { $elements['pages'] = array(); $pages = array(); foreach($r as $rr) { - unobscure($rr); //$lockstate = (($rr['allow_cid'] || $rr['allow_gid'] || $rr['deny_cid'] || $rr['deny_gid']) ? 'lock' : 'unlock'); @@ -1894,8 +1893,6 @@ function get_webpage_elements($channel, $type = 'all') { $elements['layouts'] = array(); foreach($r as $rr) { - unobscure($rr); - $elements['layouts'][] = array( 'type' => 'layout', 'description' => $rr['title'], // description of the layout @@ -1931,8 +1928,6 @@ function get_webpage_elements($channel, $type = 'all') { $elements['blocks'] = array(); foreach($r as $rr) { - unobscure($rr); - $elements['blocks'][] = array( 'type' => 'block', 'title' => $rr['title'], diff --git a/include/items.php b/include/items.php index 5bb99c91c..15de6c730 100644 --- a/include/items.php +++ b/include/items.php @@ -2711,7 +2711,6 @@ function tag_deliver($uid, $item_id) { // At this point we've determined that the person receiving this post was mentioned in it or it is a union. // Now let's check if this mention was inside a reshare so we don't spam a forum - // If it's private we may have to unobscure it momentarily so that we can parse it. $body = preg_replace('/\[share(.*?)\[\/share\]/','',$item['body']); diff --git a/include/text.php b/include/text.php index 2584a94b9..8dc5ee188 100644 --- a/include/text.php +++ b/include/text.php @@ -1515,15 +1515,6 @@ function link_compare($a, $b) { return false; } -// Given an item array, convert the body element from bbcode to html and add smilie icons. -// If attach is true, also add icons for item attachments - - -function unobscure(&$item) { - return; -} - - function theme_attachments(&$item) { $s = ''; -- cgit v1.2.3 From 69ef7cf1680cebed3512e918de30c09ac9ce0be4 Mon Sep 17 00:00:00 2001 From: Mario Date: Fri, 28 May 2021 08:42:08 +0000 Subject: remove more mail leftovers --- view/js/main.js | 22 ++-------------------- view/js/mod_mail.js | 7 ------- 2 files changed, 2 insertions(+), 27 deletions(-) delete mode 100644 view/js/mod_mail.js diff --git a/view/js/main.js b/view/js/main.js index 6c418b213..a20c82593 100644 --- a/view/js/main.js +++ b/view/js/main.js @@ -1446,24 +1446,6 @@ function preview_post() { return true; } -function preview_mail() { - $("#mail-preview").val("1"); - $("#mail-preview-content").show(); - $.post( - "mail", - $("#prvmail-form").serialize(), - function(data) { - if(data.preview) { - $("#mail-preview-content").html(data.preview); - $("#mail-preview-content" + " a").click(function() { return false; }); - } - }, - "json" - ); - $("#mail-preview").val("0"); - return true; -} - function bin2hex(s) { // Converts the binary representation of data to hex // @@ -1817,7 +1799,7 @@ function sse_bs_notifications(e, replace, followup) { function sse_handleNotifications(obj, replace, followup) { - var primary_notifications = ['dm', 'home', 'intros', 'register', 'mail', 'notify', 'files']; + 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); @@ -1951,7 +1933,7 @@ function sse_updateNotifications(type, mid) { } function sse_setNotificationsStatus() { - var primary_notifications = ['dm', 'home', 'intros', 'register', 'mail', 'notify', 'files']; + 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); diff --git a/view/js/mod_mail.js b/view/js/mod_mail.js deleted file mode 100644 index 917e5414c..000000000 --- a/view/js/mod_mail.js +++ /dev/null @@ -1,7 +0,0 @@ -$(document).ready(function() { - $("#recip").name_autocomplete(baseurl + '/acl', 'm', false, function(data) { - $("#recip-complete").val(data.xid); - }); - $('#prvmail-text').bbco_autocomplete('bbcode'); - $("#prvmail-text").editor_autocomplete(baseurl+"/acl"); -}); -- cgit v1.2.3 From 19bb96121b852d9bb3eb879cd7fe903e77805c4a Mon Sep 17 00:00:00 2001 From: Mario Date: Fri, 28 May 2021 09:58:18 +0000 Subject: move mark notifications read code to mod notifications --- Zotlabs/Module/Notifications.php | 50 +++++++++++++++++++++++++++++++++++++++- view/js/main.js | 4 ++-- 2 files changed, 51 insertions(+), 3 deletions(-) diff --git a/Zotlabs/Module/Notifications.php b/Zotlabs/Module/Notifications.php index 8ecf5760a..c08628b47 100644 --- a/Zotlabs/Module/Notifications.php +++ b/Zotlabs/Module/Notifications.php @@ -8,10 +8,58 @@ class Notifications extends \Zotlabs\Web\Controller { function get() { if(! local_channel()) { - notice( t('Permission denied.') . EOL); return; } + // ajax mark all unseen items read + if(x($_REQUEST, 'markRead')) { + switch($_REQUEST['markRead']) { + case 'dm': + $r = q("UPDATE item SET item_unseen = 0 WHERE uid = %d AND item_unseen = 1 AND item_private = 2", + intval(local_channel()) + ); + break; + case 'network': + $r = q("UPDATE item SET item_unseen = 0 WHERE uid = %d AND item_unseen = 1 AND item_private IN (0, 1)", + intval(local_channel()) + ); + break; + case 'home': + $r = q("UPDATE item SET item_unseen = 0 WHERE uid = %d AND item_unseen = 1 AND item_wall = 1 AND item_private IN (0, 1)", + intval(local_channel()) + ); + break; + case 'all_events': + $evdays = intval(get_pconfig(local_channel(), 'system', 'evdays', 3)); + $r = q("UPDATE event SET dismissed = 1 WHERE uid = %d AND dismissed = 0 AND dtstart < '%s' AND dtstart > '%s' ", + intval(local_channel()), + dbesc(datetime_convert('UTC', date_default_timezone_get(), 'now + ' . intval($evdays) . ' days')), + dbesc(datetime_convert('UTC', date_default_timezone_get(), 'now - 1 days')) + ); + break; + case 'notify': + $r = q("UPDATE notify SET seen = 1 WHERE seen = 0 AND uid = %d", + intval(local_channel()) + ); + break; + case 'pubs': + unset($_SESSION['static_loadtime']); + break; + default: + break; + } + killme(); + } + + // ajax mark all comments of a parent item read + if(x($_REQUEST, 'markItemRead') && local_channel()) { + $r = q("UPDATE item SET item_unseen = 0 WHERE uid = %d AND parent = %d", + intval(local_channel()), + intval($_REQUEST['markItemRead']) + ); + killme(); + } + nav_set_selected('Notifications'); $o = ''; diff --git a/view/js/main.js b/view/js/main.js index a20c82593..0897fbd21 100644 --- a/view/js/main.js +++ b/view/js/main.js @@ -537,7 +537,7 @@ function closeMenu(theID) { } function markRead(notifType) { - $.get('ping?f=&markRead='+notifType); + $.get('notifications?f=&markRead='+notifType); $('.' + notifType + '-button').fadeOut(function() { $("." + notifType + "-update").html('0'); $('#nav-' + notifType + '-menu').html(''); @@ -548,7 +548,7 @@ function markRead(notifType) { } function markItemRead(itemId) { - $.get('ping?f=&markItemRead='+itemId); + $.get('notifications?f=&markItemRead='+itemId); $('.unseen-wall-indicator-'+itemId).remove(); } -- cgit v1.2.3 From f72b8ce30fbbcd672f09eaf9de41e8881ec622ad Mon Sep 17 00:00:00 2001 From: Mario Date: Fri, 28 May 2021 10:02:05 +0000 Subject: notifications: if we have to return early, make sure to set offset to -1 to prevent looping --- Zotlabs/Module/Sse_bs.php | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/Zotlabs/Module/Sse_bs.php b/Zotlabs/Module/Sse_bs.php index 4c903aa2c..3316a6beb 100644 --- a/Zotlabs/Module/Sse_bs.php +++ b/Zotlabs/Module/Sse_bs.php @@ -143,11 +143,15 @@ class Sse_bs extends Controller { $result['network']['notifications'] = []; $result['network']['count'] = 0; - if(! self::$uid) + if(! self::$uid) { + $result['network']['offset'] = -1; return $result; + } - if(! (self::$vnotify & VNOTIFY_NETWORK)) + if(! (self::$vnotify & VNOTIFY_NETWORK)) { + $result['network']['offset'] = -1; return $result; + } $limit = intval(self::$limit); $offset = self::$offset; @@ -215,11 +219,15 @@ class Sse_bs extends Controller { $result['dm']['notifications'] = []; $result['dm']['count'] = 0; - if(! self::$uid) + if(! self::$uid) { + $result['dm']['offset'] = -1; return $result; + } - if(! (self::$vnotify & VNOTIFY_MAIL)) + if(! (self::$vnotify & VNOTIFY_MAIL)) { + $result['dm']['offset'] = -1; return $result; + } $limit = intval(self::$limit); $offset = self::$offset; @@ -286,11 +294,15 @@ class Sse_bs extends Controller { $result['home']['notifications'] = []; $result['home']['count'] = 0; - if(! self::$uid) + if(! self::$uid) { + $result['home']['offset'] = -1; return $result; + } - if(! (self::$vnotify & VNOTIFY_CHANNEL)) + if(! (self::$vnotify & VNOTIFY_CHANNEL)) { + $result['home']['offset'] = -1; return $result; + } $limit = intval(self::$limit); $offset = self::$offset; @@ -358,15 +370,19 @@ class Sse_bs extends Controller { $result['pubs']['notifications'] = []; $result['pubs']['count'] = 0; - if(! (self::$vnotify & VNOTIFY_PUBS)) + if(! (self::$vnotify & VNOTIFY_PUBS)) { + $result['pubs']['offset'] = -1; return $result; + } if((observer_prohibited(true))) { + $result['pubs']['offset'] = -1; return $result; } if(! intval(get_config('system','open_pubstream',1))) { if(! get_observer_hash()) { + $result['pubs']['offset'] = -1; return $result; } } -- cgit v1.2.3 From ccf3ed185ffc2ac40ac5159dfd847fc2f2c5d9be Mon Sep 17 00:00:00 2001 From: Mario Date: Fri, 28 May 2021 17:18:03 +0000 Subject: remove mod ping --- Zotlabs/Module/Ping.php | 707 ------------------------------------------------ 1 file changed, 707 deletions(-) delete mode 100644 Zotlabs/Module/Ping.php diff --git a/Zotlabs/Module/Ping.php b/Zotlabs/Module/Ping.php deleted file mode 100644 index 6e8042eaf..000000000 --- a/Zotlabs/Module/Ping.php +++ /dev/null @@ -1,707 +0,0 @@ - $m); - } - unset($_SESSION['sysmsg']); - } - if(x($_SESSION, 'sysmsg_info')){ - foreach ($_SESSION['sysmsg_info'] as $m){ - $result['info'][] = array('message' => $m); - } - unset($_SESSION['sysmsg_info']); - } - if(! ($vnotify & VNOTIFY_INFO)) - $result['info'] = array(); - if(! ($vnotify & VNOTIFY_ALERT)) - $result['notice'] = array(); - - if(\App::$install) { - echo json_encode($result); - killme(); - } - - /** - * Update chat presence indication (if applicable) - */ - - if(get_observer_hash() && (! $result['invalid'])) { - $r = q("select cp_id, cp_room from chatpresence where cp_xchan = '%s' and cp_client = '%s' and cp_room = 0 limit 1", - dbesc(get_observer_hash()), - dbesc($_SERVER['REMOTE_ADDR']) - ); - $basic_presence = false; - if($r) { - $basic_presence = true; - q("update chatpresence set cp_last = '%s' where cp_id = %d", - dbesc(datetime_convert()), - intval($r[0]['cp_id']) - ); - } - if(! $basic_presence) { - q("insert into chatpresence ( cp_xchan, cp_last, cp_status, cp_client) - values( '%s', '%s', '%s', '%s' ) ", - dbesc(get_observer_hash()), - dbesc(datetime_convert()), - dbesc('online'), - dbesc($_SERVER['REMOTE_ADDR']) - ); - } - } - - /** - * Chatpresence continued... if somebody hasn't pinged recently, they've most likely left the page - * and shouldn't count as online anymore. We allow an expection for bots. - */ - - q("delete from chatpresence where cp_last < %s - INTERVAL %s and cp_client != 'auto' ", - db_utcnow(), db_quoteinterval('3 MINUTE') - ); - - - $sql_extra = ''; - if(! ($vnotify & VNOTIFY_LIKE)) - $sql_extra = " AND verb NOT IN ('" . dbesc(ACTIVITY_LIKE) . "', '" . dbesc(ACTIVITY_DISLIKE) . "') "; - - if(local_channel()) { - $notify_pubs = ($vnotify & VNOTIFY_PUBS) && can_view_public_stream() && Apps::system_app_installed(local_channel(), 'Public Stream'); - } - else { - $notify_pubs = can_view_public_stream(); - } - - if($notify_pubs) { - $sys = get_sys_channel(); - - $pubs = q("SELECT count(id) as total from item - WHERE uid = %d - AND item_unseen = 1 - AND author_xchan != '%s' - AND created > '" . datetime_convert('UTC','UTC',$_SESSION['static_loadtime']) . "' - $item_normal - $sql_extra", - intval($sys['channel_id']), - dbesc(get_observer_hash()) - ); - - if($pubs) - $result['pubs'] = intval($pubs[0]['total']); - } - - - - if((argc() > 1) && (argv(1) === 'pubs') && ($notify_pubs)) { - $sys = get_sys_channel(); - $result = array(); - - $r = q("SELECT * FROM item - WHERE uid = %d - AND item_unseen = 1 - AND author_xchan != '%s' - AND created > '" . datetime_convert('UTC','UTC',$_SESSION['static_loadtime']) . "' - $item_normal - $sql_extra - ORDER BY created DESC - LIMIT 300", - intval($sys['channel_id']), - dbesc(get_observer_hash()) - ); - - if($r) { - xchan_query($r); - foreach($r as $rr) { - $rr['llink'] = str_replace('display/', 'pubstream/?f=&mid=', $rr['llink']); - $result[] = \Zotlabs\Lib\Enotify::format($rr); - } - } - -// logger('ping (network||home): ' . print_r($result, true), LOGGER_DATA); - echo json_encode(array('notify' => $result)); - killme(); - } - - $t1 = dba_timer(); - - if((! local_channel()) || ($result['invalid'])) { - echo json_encode($result); - killme(); - } - - /** - * Everything following is only permitted under the context of a locally authenticated site member. - */ - - /** - * Handle "mark all xyz notifications read" requests. - */ - - // mark all items read - if(x($_REQUEST, 'markRead') && local_channel()) { - switch($_REQUEST['markRead']) { - case 'network': - $r = q("UPDATE item SET item_unseen = 0 WHERE uid = %d AND item_unseen = 1", - intval(local_channel()) - ); - break; - case 'home': - $r = q("UPDATE item SET item_unseen = 0 WHERE uid = %d AND item_unseen = 1 AND item_wall = 1", - intval(local_channel()) - ); - break; - case 'mail': - $r = q("UPDATE mail SET mail_seen = 1 WHERE channel_id = %d AND mail_seen = 0", - intval(local_channel()) - ); - break; - case 'all_events': - $r = q("UPDATE event SET dismissed = 1 WHERE uid = %d AND dismissed = 0 AND dtstart < '%s' AND dtstart > '%s' ", - intval(local_channel()), - dbesc(datetime_convert('UTC', date_default_timezone_get(), 'now + ' . intval($evdays) . ' days')), - dbesc(datetime_convert('UTC', date_default_timezone_get(), 'now - 1 days')) - ); - break; - case 'notify': - $r = q("update notify set seen = 1 where uid = %d", - intval(local_channel()) - ); - break; - case 'pubs': - unset($_SESSION['static_loadtime']); - break; - default: - break; - } - } - - if(x($_REQUEST, 'markItemRead') && local_channel()) { - $r = q("UPDATE item SET item_unseen = 0 WHERE uid = %d AND parent = %d", - intval(local_channel()), - intval($_REQUEST['markItemRead']) - ); - } - - /** - * URL ping/something will return detail for "something", e.g. a json list with which to populate a notification - * dropdown menu. - */ - if(argc() > 1 && argv(1) === 'notify') { - $t = q("SELECT * FROM notify WHERE uid = %d AND seen = 0 ORDER BY CREATED DESC", - intval(local_channel()) - ); - - if($t) { - foreach($t as $tt) { - $message = trim(strip_tags(bbcode($tt['msg']))); - - if(strpos($message, $tt['xname']) === 0) - $message = substr($message, strlen($tt['xname']) + 1); - - $mid = basename($tt['link']); - $mid = ((strpos($mid, 'b64.') === 0) ? @base64url_decode(substr($mid, 4)) : $mid); - - if(in_array($tt['verb'], [ACTIVITY_LIKE, ACTIVITY_DISLIKE])) { - // we need the thread parent - $r = q("select thr_parent from item where mid = '%s' and uid = %d limit 1", - dbesc($mid), - intval(local_channel()) - ); - $b64mid = ((strpos($r[0]['thr_parent'], 'b64.') === 0) ? $r[0]['thr_parent'] : 'b64.' . base64url_encode($r[0]['thr_parent'])); - } - else { - $b64mid = ((strpos($mid, 'b64.') === 0) ? $mid : 'b64.' . base64url_encode($mid)); - } - - $notifs[] = array( - 'notify_link' => z_root() . '/notify/view/' . $tt['id'], - 'name' => $tt['xname'], - 'url' => $tt['url'], - 'photo' => $tt['photo'], - 'when' => relative_date($tt['created']), - 'hclass' => (($tt['seen']) ? 'notify-seen' : 'notify-unseen'), - 'b64mid' => (($tt['otype'] == 'item') ? $b64mid : 'undefined'), - 'notify_id' => (($tt['otype'] == 'item') ? $tt['id'] : 'undefined'), - 'message' => $message - ); - } - } - - echo json_encode(array('notify' => $notifs)); - killme(); - } - - if(argc() > 1 && argv(1) === 'mail') { - $channel = \App::get_channel(); - $t = q("select mail.*, xchan.* from mail left join xchan on xchan_hash = from_xchan - where channel_id = %d and mail_seen = 0 and mail_deleted = 0 - and from_xchan != '%s' order by created desc limit 50", - intval(local_channel()), - dbesc($channel['channel_hash']) - ); - - if($t) { - foreach($t as $zz) { - $notifs[] = array( - 'notify_link' => z_root() . '/mail/' . $zz['id'], - 'name' => $zz['xchan_name'], - 'addr' => $zz['xchan_addr'], - 'url' => $zz['xchan_url'], - 'photo' => $zz['xchan_photo_s'], - 'when' => relative_date($zz['created']), - 'hclass' => (intval($zz['mail_seen']) ? 'notify-seen' : 'notify-unseen'), - 'message' => t('sent you a private message'), - ); - } - } - - echo json_encode(array('notify' => $notifs)); - killme(); - } - - if(argc() > 1 && (argv(1) === 'network' || argv(1) === 'home')) { - $result = array(); - - if(argv(1) === 'home') { - $sql_extra .= ' and item_wall = 1 '; - } - - $r = q("SELECT * FROM item - WHERE uid = %d - AND item_unseen = 1 - AND author_xchan != '%s' - $item_normal - $sql_extra - ORDER BY created DESC - LIMIT 300", - intval(local_channel()), - dbesc($ob_hash) - ); - - if($r) { - xchan_query($r); - foreach($r as $item) { - $result[] = \Zotlabs\Lib\Enotify::format($item); - } - } -// logger('ping (network||home): ' . print_r($result, true), LOGGER_DATA); - echo json_encode(array('notify' => $result)); - killme(); - } - - if(argc() > 1 && (argv(1) === 'intros')) { - $result = array(); - - $r = q("SELECT * FROM abook left join xchan on abook.abook_xchan = xchan.xchan_hash where abook_channel = %d and abook_pending = 1 and abook_self = 0 and abook_ignored = 0 and xchan_deleted = 0 and xchan_orphan = 0 ORDER BY abook_created DESC LIMIT 50", - intval(local_channel()) - ); - - if($r) { - foreach($r as $rr) { - $result[] = array( - 'notify_link' => z_root() . '/connections/ifpending', - 'name' => $rr['xchan_name'], - 'addr' => $rr['xchan_addr'], - 'url' => $rr['xchan_url'], - 'photo' => $rr['xchan_photo_s'], - 'when' => relative_date($rr['abook_created']), - 'hclass' => ('notify-unseen'), - 'message' => t('added your channel') - ); - } - } - logger('ping (intros): ' . print_r($result, true), LOGGER_DATA); - echo json_encode(array('notify' => $result)); - killme(); - } - - if((argc() > 1 && (argv(1) === 'register')) && is_site_admin()) { - $result = array(); - - $r = q("SELECT account_email, account_created from account where (account_flags & %d) > 0", - intval(ACCOUNT_PENDING) - ); - if($r) { - foreach($r as $rr) { - $result[] = array( - 'notify_link' => z_root() . '/admin/accounts', - 'name' => $rr['account_email'], - 'addr' => $rr['account_email'], - 'url' => '', - 'photo' => z_root() . '/' . get_default_profile_photo(48), - 'when' => relative_date($rr['account_created']), - 'hclass' => ('notify-unseen'), - 'message' => t('requires approval') - ); - } - } - logger('ping (register): ' . print_r($result, true), LOGGER_DATA); - echo json_encode(array('notify' => $result)); - killme(); - } - - if(argc() > 1 && (argv(1) === 'all_events')) { - $bd_format = t('g A l F d') ; // 8 AM Friday January 18 - - $result = array(); - - $r = q("SELECT * FROM event left join xchan on event_xchan = xchan_hash - WHERE event.uid = %d AND dtstart < '%s' AND dtstart > '%s' and dismissed = 0 - and etype in ( 'event', 'birthday' ) - ORDER BY dtstart DESC LIMIT 1000", - intval(local_channel()), - dbesc(datetime_convert('UTC', date_default_timezone_get(), 'now + ' . intval($evdays) . ' days')), - dbesc(datetime_convert('UTC', date_default_timezone_get(), 'now - 1 days')) - ); - - if($r) { - foreach($r as $rr) { - - $strt = datetime_convert('UTC', (($rr['adjust']) ? date_default_timezone_get() : 'UTC'), $rr['dtstart']); - $today = ((substr($strt, 0, 10) === datetime_convert('UTC', date_default_timezone_get(), 'now', 'Y-m-d')) ? true : false); - $when = day_translate(datetime_convert('UTC', (($rr['adjust']) ? date_default_timezone_get() : 'UTC'), $rr['dtstart'], $bd_format)) . (($today) ? ' ' . t('[today]') : ''); - - $result[] = array( - 'notify_link' => z_root() . '/cdav/calendar/' . $rr['event_hash'], - 'name' => $rr['xchan_name'], - 'addr' => $rr['xchan_addr'], - 'url' => $rr['xchan_url'], - 'photo' => $rr['xchan_photo_s'], - 'when' => $when, - 'hclass' => ('notify-unseen'), - 'message' => t('posted an event') - ); - } - } - logger('ping (all_events): ' . print_r($result, true), LOGGER_DATA); - echo json_encode(array('notify' => $result)); - killme(); - } - - if(argc() > 1 && (argv(1) === 'files')) { - $result = array(); - - $r = q("SELECT item.created, xchan.xchan_name, xchan.xchan_addr, xchan.xchan_url, xchan.xchan_photo_s FROM item - LEFT JOIN xchan on author_xchan = xchan_hash - WHERE item.verb = '%s' - AND item.obj_type = '%s' - AND item.uid = %d - AND item.owner_xchan != '%s' - AND item.item_unseen = 1", - dbesc(ACTIVITY_POST), - dbesc(ACTIVITY_OBJ_FILE), - intval(local_channel()), - dbesc($ob_hash) - ); - if($r) { - foreach($r as $rr) { - $result[] = array( - 'notify_link' => z_root() . '/sharedwithme', - 'name' => $rr['xchan_name'], - 'addr' => $rr['xchan_addr'], - 'url' => $rr['xchan_url'], - 'photo' => $rr['xchan_photo_s'], - 'when' => relative_date($rr['created']), - 'hclass' => ('notify-unseen'), - 'message' => t('shared a file with you') - ); - } - } - logger('ping (files): ' . print_r($result, true), LOGGER_DATA); - echo json_encode(array('notify' => $result)); - killme(); - } - - /** - * Normal ping - just the counts, no detail - */ - if($vnotify & VNOTIFY_SYSTEM) { - $t = q("select count(*) as total from notify where uid = %d and seen = 0", - intval(local_channel()) - ); - if($t) - $result['notify'] = intval($t[0]['total']); - } - - $t2 = dba_timer(); - - if($vnotify & VNOTIFY_FILES) { - $files = q("SELECT count(id) as total FROM item - WHERE verb = '%s' - AND obj_type = '%s' - AND uid = %d - AND owner_xchan != '%s' - AND item_unseen = 1", - dbesc(ACTIVITY_POST), - dbesc(ACTIVITY_OBJ_FILE), - intval(local_channel()), - dbesc($ob_hash) - ); - if($files) - $result['files'] = intval($files[0]['total']); - } - - $t3 = dba_timer(); - - if($vnotify & (VNOTIFY_NETWORK|VNOTIFY_CHANNEL)) { - - $r = q("SELECT id, item_wall FROM item - WHERE uid = %d and item_unseen = 1 - $item_normal - $sql_extra - AND author_xchan != '%s'", - intval(local_channel()), - dbesc($ob_hash) - ); - - if($r) { - $arr = array('items' => $r); - call_hooks('network_ping', $arr); - - foreach ($r as $it) { - if(intval($it['item_wall'])) - $result['home'] ++; - else - $result['network'] ++; - } - } - } - if(! ($vnotify & VNOTIFY_NETWORK)) - $result['network'] = 0; - if(! ($vnotify & VNOTIFY_CHANNEL)) - $result['home'] = 0; - - $t4 = dba_timer(); - - if($vnotify & VNOTIFY_INTRO) { - $intr = q("SELECT COUNT(abook.abook_id) AS total FROM abook left join xchan on abook.abook_xchan = xchan.xchan_hash where abook_channel = %d and abook_pending = 1 and abook_self = 0 and abook_ignored = 0 and xchan_deleted = 0 and xchan_orphan = 0 ", - intval(local_channel()) - ); - - $t5 = dba_timer(); - - if($intr) - $result['intros'] = intval($intr[0]['total']); - } - - $t6 = dba_timer(); - $channel = \App::get_channel(); - - if($vnotify & VNOTIFY_MAIL) { - $mails = q("SELECT count(id) as total from mail - WHERE channel_id = %d AND mail_seen = 0 and from_xchan != '%s' ", - intval(local_channel()), - dbesc($channel['channel_hash']) - ); - if($mails) - $result['mail'] = intval($mails[0]['total']); - } - - if($vnotify & VNOTIFY_REGISTER) { - if (\App::$config['system']['register_policy'] == REGISTER_APPROVE && is_site_admin()) { - $regs = q("SELECT count(account_id) as total from account where (account_flags & %d) > 0", - intval(ACCOUNT_PENDING) - ); - if($regs) - $result['register'] = intval($regs[0]['total']); - } - } - - $t7 = dba_timer(); - - if($vnotify & (VNOTIFY_EVENT|VNOTIFY_EVENTTODAY|VNOTIFY_BIRTHDAY)) { - $events = q("SELECT etype, dtstart, adjust FROM event - WHERE event.uid = %d AND dtstart < '%s' AND dtstart > '%s' and dismissed = 0 - and etype in ( 'event', 'birthday' ) - ORDER BY dtstart ASC ", - intval(local_channel()), - dbesc(datetime_convert('UTC', date_default_timezone_get(), 'now + ' . intval($evdays) . ' days')), - dbesc(datetime_convert('UTC', date_default_timezone_get(), 'now - 1 days')) - ); - - if($events) { - $result['all_events'] = count($events); - - if($result['all_events']) { - $str_now = datetime_convert('UTC', date_default_timezone_get(), 'now', 'Y-m-d'); - foreach($events as $x) { - $bd = false; - if($x['etype'] === 'birthday') { - $result['birthdays'] ++; - $bd = true; - } - else { - $result['events'] ++; - } - if(datetime_convert('UTC', ((intval($x['adjust'])) ? date_default_timezone_get() : 'UTC'), $x['dtstart'], 'Y-m-d') === $str_now) { - $result['all_events_today'] ++; - if($bd) - $result['birthdays_today'] ++; - else - $result['events_today'] ++; - } - } - } - } - } - if(! ($vnotify & VNOTIFY_EVENT)) - $result['all_events'] = $result['events'] = 0; - if(! ($vnotify & VNOTIFY_EVENTTODAY)) - $result['all_events_today'] = $result['events_today'] = 0; - if(! ($vnotify & VNOTIFY_BIRTHDAY)) - $result['birthdays'] = 0; - - - - if($vnotify & VNOTIFY_FORUMS) { - $forums = get_forum_channels(local_channel()); - - if($forums) { - $item_normal = item_normal(); - $fcount = count($forums); - $forums['total'] = 0; - - for($x = 0; $x < $fcount; $x ++) { - $p = q("SELECT oid AS parent FROM term WHERE uid = %d AND ttype = %d AND term = '%s'", - intval(local_channel()), - intval(TERM_FORUM), - dbesc($forums[$x]['xchan_name']) - ); - - $p_str = ids_to_querystr($p, 'parent'); - $p_sql = (($p_str) ? "OR parent IN ( $p_str )" : ''); - - $r = q("select count(id) as unseen from item - where uid = %d and ( owner_xchan = '%s' OR author_xchan = '%s' $p_sql ) and item_unseen = 1 $item_normal $sql_extra", - intval(local_channel()), - dbesc($forums[$x]['xchan_hash']), - dbesc($forums[$x]['xchan_hash']) - ); - if($r[0]['unseen']) { - $forums[$x]['notify_link'] = (($forums[$x]['private_forum']) ? $forums[$x]['xchan_url'] : z_root() . '/network/?f=&pf=1&unseen=1&cid=' . $forums[$x]['abook_id']); - $forums[$x]['name'] = $forums[$x]['xchan_name']; - $forums[$x]['addr'] = $forums[$x]['xchan_addr']; - $forums[$x]['url'] = $forums[$x]['xchan_url']; - $forums[$x]['photo'] = $forums[$x]['xchan_photo_s']; - $forums[$x]['unseen'] = $r[0]['unseen']; - $forums[$x]['private_forum'] = (($forums[$x]['private_forum']) ? 'lock' : ''); - $forums[$x]['message'] = (($forums[$x]['private_forum']) ? t('Private forum') : t('Public forum')); - - $forums['total'] = $forums['total'] + $r[0]['unseen']; - - unset($forums[$x]['abook_id']); - unset($forums[$x]['xchan_hash']); - unset($forums[$x]['xchan_name']); - unset($forums[$x]['xchan_url']); - unset($forums[$x]['xchan_photo_s']); - - //if($forums[$x]['private_forum']) - // unset($forums[$x]['private_forum']); - - } - else { - unset($forums[$x]); - } - } - $result['forums'] = $forums['total']; - unset($forums['total']); - - $result['forums_sub'] = $forums; - } - } - - $x = json_encode($result); - - $t8 = dba_timer(); - -// logger('ping timer: ' . sprintf('%01.4f %01.4f %01.4f %01.4f %01.4f %01.4f %01.4f %01.4f',$t8 - $t7, $t7 - $t6, $t6 - $t5, $t5 - $t4, $t4 - $t3, $t3 - $t2, $t2 - $t1, $t1 - $t0)); - - echo $x; - killme(); - } - -} -- cgit v1.2.3 From e1721b8496ec61aeb5f3967abfbb88b952357dfe Mon Sep 17 00:00:00 2001 From: Mario Date: Fri, 28 May 2021 20:14:15 +0000 Subject: remove masto hack - it does not make sense in threaded view --- Zotlabs/Lib/Activity.php | 31 +++++++------------------------ 1 file changed, 7 insertions(+), 24 deletions(-) diff --git a/Zotlabs/Lib/Activity.php b/Zotlabs/Lib/Activity.php index 41e394dbc..3c1b140a0 100644 --- a/Zotlabs/Lib/Activity.php +++ b/Zotlabs/Lib/Activity.php @@ -1743,14 +1743,9 @@ class Activity { static function create_note($channel, $observer_hash, $act) { $s = []; - - // Mastodon only allows visibility in public timelines if the public inbox is listed in the 'to' field. - // They are hidden in the public timeline if the public inbox is listed in the 'cc' field. - // This is not part of the activitypub protocol - we might change this to show all public posts in pubstream at some point. - $pubstream = ((is_array($act->obj) && array_key_exists('to', $act->obj) && in_array(ACTIVITY_PUBLIC_INBOX, $act->obj['to'])) ? true : false); $is_sys_channel = is_sys_channel($channel['channel_id']); - $parent = ((array_key_exists('inReplyTo', $act->obj)) ? urldecode($act->obj['inReplyTo']) : ''); + if ($parent) { $r = q("select * from item where uid = %d and ( mid = '%s' or mid = '%s' ) limit 1", @@ -1765,7 +1760,7 @@ class Activity { } if ($r[0]['owner_xchan'] === $channel['channel_hash']) { - if (!perm_is_allowed($channel['channel_id'], $observer_hash, 'send_stream') && !($is_sys_channel && $pubstream)) { + if (!perm_is_allowed($channel['channel_id'], $observer_hash, 'send_stream') && !$is_sys_channel) { logger('no comment permission.'); return; } @@ -1777,7 +1772,7 @@ class Activity { } else { - if (!perm_is_allowed($channel['channel_id'], $observer_hash, 'send_stream') && !($is_sys_channel && $pubstream)) { + if (!perm_is_allowed($channel['channel_id'], $observer_hash, 'send_stream') && !$is_sys_channel) { logger('no permission'); return; } @@ -2546,12 +2541,6 @@ class Activity { return; }*/ - // Mastodon only allows visibility in public timelines if the public inbox is listed in the 'to' field. - // They are hidden in the public timeline if the public inbox is listed in the 'cc' field. - // This is not part of the activitypub protocol - we might change this to show all public posts in pubstream at some point. - - $pubstream = ((is_array($act->obj) && array_key_exists('to', $act->obj) && in_array(ACTIVITY_PUBLIC_INBOX, $act->obj['to'])) ? true : false); - // TODO: this his handled in pubcrawl atm. // very unpleasant and imperfect way of determining a Mastodon DM /*if ($act->raw_recips && array_key_exists('to',$act->raw_recips) && is_array($act->raw_recips['to']) && count($act->raw_recips['to']) === 1 && $act->raw_recips['to'][0] === channel_url($channel) && ! $act->raw_recips['cc']) { @@ -2612,7 +2601,7 @@ class Activity { $allowed = true; // reject public stream comments that weren't sent by the conversation owner - if ($is_sys_channel && $pubstream && $item['owner_xchan'] !== $observer_hash && !$fetch_parents) { + if ($is_sys_channel && $item['owner_xchan'] !== $observer_hash && !$fetch_parents) { $allowed = false; } } @@ -2627,7 +2616,7 @@ class Activity { // The $item['item_fetched'] flag is set in fetch_and_store_parents(). // In this case we should check against author permissions because sender is not owner. - if (perm_is_allowed($channel['channel_id'], (($item['item_fetched']) ? $item['author_xchan'] : $observer_hash), 'send_stream') || ($is_sys_channel && $pubstream)) { + if (perm_is_allowed($channel['channel_id'], (($item['item_fetched']) ? $item['author_xchan'] : $observer_hash), 'send_stream') || $is_sys_channel) { $allowed = true; } // TODO: not implemented @@ -2765,7 +2754,7 @@ class Activity { $fetch = false; // TODO: debug // if (perm_is_allowed($channel['channel_id'],$observer_hash,'send_stream') && (PConfig::Get($channel['channel_id'],'system','hyperdrive',true) || $act->type === 'Announce')) { - if (perm_is_allowed($channel['channel_id'], $observer_hash, 'send_stream') || ($is_sys_channel && $pubstream)) { + if (perm_is_allowed($channel['channel_id'], $observer_hash, 'send_stream') || $is_sys_channel) { $fetch = (($fetch_parents) ? self::fetch_and_store_parents($channel, $observer_hash, $item, $force) : false); } if ($fetch) { @@ -3074,15 +3063,9 @@ class Activity { static function announce_note($channel, $observer_hash, $act) { $s = []; - $is_sys_channel = is_sys_channel($channel['channel_id']); - // Mastodon only allows visibility in public timelines if the public inbox is listed in the 'to' field. - // They are hidden in the public timeline if the public inbox is listed in the 'cc' field. - // This is not part of the activitypub protocol - we might change this to show all public posts in pubstream at some point. - $pubstream = ((is_array($act->obj) && array_key_exists('to', $act->obj) && in_array(ACTIVITY_PUBLIC_INBOX, $act->obj['to'])) ? true : false); - - if (!perm_is_allowed($channel['channel_id'], $observer_hash, 'send_stream') && !($is_sys_channel && $pubstream)) { + if (!perm_is_allowed($channel['channel_id'], $observer_hash, 'send_stream') && !$is_sys_channel) { logger('no permission'); return; } -- cgit v1.2.3 From 43c941d3704196bdcc82ff9fceeb17de5d905707 Mon Sep 17 00:00:00 2001 From: Mario Date: Fri, 28 May 2021 20:15:34 +0000 Subject: fix notifier for non-zot hublocs --- Zotlabs/Daemon/Notifier.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Zotlabs/Daemon/Notifier.php b/Zotlabs/Daemon/Notifier.php index 0f367103e..28948ec48 100644 --- a/Zotlabs/Daemon/Notifier.php +++ b/Zotlabs/Daemon/Notifier.php @@ -602,7 +602,7 @@ class Notifier { call_hooks('notifier_hub', $narr); if ($narr['queued']) { foreach ($narr['queued'] as $pq) - $deliveries[] = $pq; + self::$deliveries[] = $pq; } continue; -- cgit v1.2.3 From 3d2b923102726d91508aa03edd0459948af704c6 Mon Sep 17 00:00:00 2001 From: Mario Date: Sat, 29 May 2021 06:20:28 +0000 Subject: notifier fixes --- Zotlabs/Daemon/Notifier.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Zotlabs/Daemon/Notifier.php b/Zotlabs/Daemon/Notifier.php index 28948ec48..0ae887932 100644 --- a/Zotlabs/Daemon/Notifier.php +++ b/Zotlabs/Daemon/Notifier.php @@ -115,7 +115,7 @@ class Notifier { ); if ($r) { foreach ($r as $rr) { - $recipients[] = $rr['abook_xchan']; + self::$recipients[] = $rr['abook_xchan']; } } self::$private = false; @@ -153,8 +153,8 @@ class Notifier { if ($perm_update['success']) { if ($perm_update['deliveries']) { - $deliveries[] = $perm_update['deliveries']; - do_delivery($deliveries); + self::$deliveries[] = $perm_update['deliveries']; + do_delivery(self::$deliveries); } return; } @@ -465,7 +465,7 @@ class Notifier { call_hooks('notifier_process', $narr); if ($narr['queued']) { foreach ($narr['queued'] as $pq) - $deliveries[] = $pq; + self::$deliveries[] = $pq; } // notifier_process can alter the recipient list -- cgit v1.2.3 From 3fe2a2b181ec2f96b5950560fc50859d6b3ff78a Mon Sep 17 00:00:00 2001 From: Mario Date: Mon, 31 May 2021 07:12:36 +0000 Subject: do not overwrite the original rawmsg iconfig that came with the item --- Zotlabs/Lib/Libzot.php | 4 ---- include/help.php | 1 + 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/Zotlabs/Lib/Libzot.php b/Zotlabs/Lib/Libzot.php index b04c0ea3c..d5768cc84 100644 --- a/Zotlabs/Lib/Libzot.php +++ b/Zotlabs/Lib/Libzot.php @@ -1270,10 +1270,6 @@ class Libzot { if ($AS->data['signed_data']) { IConfig::Set($arr, 'activitypub', 'signed_data', $AS->data['signed_data'], false); - $j = json_decode($AS->data['signed_data'], true); - if ($j) { - IConfig::Set($arr, 'activitypub', 'rawmsg', json_encode(JSalmon::unpack($j['data'])), true); - } } logger('Activity received: ' . print_r($arr, true), LOGGER_DATA, LOG_DEBUG); diff --git a/include/help.php b/include/help.php index 38facb04a..6daf81b8e 100644 --- a/include/help.php +++ b/include/help.php @@ -2,6 +2,7 @@ use \Michelf\MarkdownExtra; +require_once('include/items.php'); /** * @brief -- cgit v1.2.3 From 5ee1c3f2c8590caa70ec34046ef5c75dacac3642 Mon Sep 17 00:00:00 2001 From: Mario Date: Mon, 31 May 2021 10:03:34 +0200 Subject: include items.php in boot since it is required almost everywhere --- boot.php | 1 + 1 file changed, 1 insertion(+) diff --git a/boot.php b/boot.php index f51abe2f8..bb2d094ea 100644 --- a/boot.php +++ b/boot.php @@ -50,6 +50,7 @@ require_once('include/xchan.php'); require_once('include/hubloc.php'); require_once('include/attach.php'); require_once('include/bbcode.php'); +require_once('include/items.php'); define ( 'PLATFORM_NAME', 'hubzilla' ); define ( 'STD_VERSION', '5.9.0' ); -- cgit v1.2.3 From baabb3a8730708634385abdb366a45c6e234e154 Mon Sep 17 00:00:00 2001 From: Mario Date: Mon, 31 May 2021 10:14:26 +0200 Subject: fix admin button state not displayed correctly --- Zotlabs/Module/Admin/Site.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Zotlabs/Module/Admin/Site.php b/Zotlabs/Module/Admin/Site.php index 3b2632411..76e117a84 100644 --- a/Zotlabs/Module/Admin/Site.php +++ b/Zotlabs/Module/Admin/Site.php @@ -480,12 +480,12 @@ class Site { '$invitation_only' => [ 'invitation_only', t("Require invite code"), - $invitation_only + get_config('system', 'invitation_only', 0) ], '$invitation_also' => [ 'invitation_also', t("Allow invite code"), - $invitation_also + get_config('system', 'invitation_also', 0) ], '$verify_email' => [ 'verify_email', -- cgit v1.2.3 From b3df15a3c6e017ce3858ee484c6d2d70a5f18a17 Mon Sep 17 00:00:00 2001 From: Mario Vavti Date: Wed, 2 Jun 2021 09:41:57 +0200 Subject: fix regression where authors from non zot6, activitypub networks got dismissed (e.g. relayed diaspora comments) --- Zotlabs/Lib/ActivityStreams.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Zotlabs/Lib/ActivityStreams.php b/Zotlabs/Lib/ActivityStreams.php index a5fb4a756..2324a8136 100644 --- a/Zotlabs/Lib/ActivityStreams.php +++ b/Zotlabs/Lib/ActivityStreams.php @@ -304,11 +304,12 @@ class ActivityStreams { // SECURITY: If we have already stored the actor profile, re-generate it // from cached data - don't refetch it from the network - $r = q("select * from xchan join hubloc on xchan_hash = hubloc_hash where hubloc_network in ('zot6', 'activitypub') and hubloc_id_url = '%s'", + $r = q("select * from xchan join hubloc on xchan_hash = hubloc_hash where hubloc_id_url = '%s'", dbesc($x) ); if ($r) { - $y = Activity::encode_person($r[0]); + $r = Libzot::zot_record_preferred($r); + $y = Activity::encode_person($r); $y['cached'] = true; return $y; } -- cgit v1.2.3 From 50c14d353b30d0dcd7c761884d797dc0fe90f777 Mon Sep 17 00:00:00 2001 From: Mario Date: Wed, 2 Jun 2021 08:31:43 +0000 Subject: fix article summary duplicated when editing - issue #1577 --- Zotlabs/Module/Article_edit.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Zotlabs/Module/Article_edit.php b/Zotlabs/Module/Article_edit.php index efa02e1c1..97c87f2ba 100644 --- a/Zotlabs/Module/Article_edit.php +++ b/Zotlabs/Module/Article_edit.php @@ -85,7 +85,6 @@ class Article_edit extends \Zotlabs\Web\Controller { $mimetype = $itm[0]['mimetype']; - $summary = (($itm[0]['summary']) ? '[summary]' . $itm[0]['summary'] . '[/summary]' . "\r\n" : ''); $content = $itm[0]['body']; $rp = 'articles/' . $channel['channel_address']; @@ -109,7 +108,7 @@ class Article_edit extends \Zotlabs\Web\Controller { 'ptyp' => $itm[0]['type'], 'mimeselect' => false, 'mimetype' => $itm[0]['mimetype'], - 'body' => $summary . undo_post_tagging($content), + 'body' => undo_post_tagging($content), 'post_id' => $post_id, 'visitor' => true, 'title' => htmlspecialchars($itm[0]['title'],ENT_COMPAT,'UTF-8'), -- cgit v1.2.3 From 33463152e844f98b933401c394cc0e111893a077 Mon Sep 17 00:00:00 2001 From: Mario Date: Wed, 2 Jun 2021 17:58:46 +0000 Subject: fix issue where a deleted channel will return 404 before returning zotinfo --- Zotlabs/Daemon/Onedirsync.php | 4 ++-- Zotlabs/Module/Channel.php | 19 +++++++++++++++--- Zotlabs/Module/Removeme.php | 46 +++++++++++++++++++++---------------------- include/channel.php | 4 ++-- 4 files changed, 43 insertions(+), 30 deletions(-) diff --git a/Zotlabs/Daemon/Onedirsync.php b/Zotlabs/Daemon/Onedirsync.php index 9ab8ebb54..2681b8b2b 100644 --- a/Zotlabs/Daemon/Onedirsync.php +++ b/Zotlabs/Daemon/Onedirsync.php @@ -25,6 +25,7 @@ class Onedirsync { if (!$r) return; + if (($r[0]['ud_flags'] & UPDATE_FLAGS_UPDATED) || (!$r[0]['ud_addr'])) return; @@ -55,13 +56,12 @@ class Onedirsync { $h = Libzot::zot_record_preferred($h); - if (($h) && ($h['hubloc_status'] & HUBLOC_OFFLINE)) { + if (($h) && (($h['hubloc_status'] & HUBLOC_OFFLINE) || $h['hubloc_deleted'] || $h['hubloc_error']) ) { q("update updates set ud_flags = ( ud_flags | %d ) where ud_addr = '%s' and ( ud_flags & %d ) = 0 ", intval(UPDATE_FLAGS_UPDATED), dbesc($r[0]['ud_addr']), intval(UPDATE_FLAGS_UPDATED) ); - return; } diff --git a/Zotlabs/Module/Channel.php b/Zotlabs/Module/Channel.php index a7deb4f6b..20cbe0b5c 100644 --- a/Zotlabs/Module/Channel.php +++ b/Zotlabs/Module/Channel.php @@ -46,14 +46,22 @@ class Channel extends Controller { } $profile = 0; - $channel = App::get_channel(); if ((local_channel()) && (argc() > 2) && (argv(2) === 'view')) { + $channel = App::get_channel(); $which = $channel['channel_address']; $profile = argv(1); } - $channel = channelx_by_nick($which); + + // Do not use channelx_by_nick() here since it will dismiss deleted channels. + // We need to provide zotinfo for deleted channels so that directories can pick up the info. + $r = q("SELECT * FROM channel left join xchan on channel_hash = xchan_hash WHERE channel_address = '%s' LIMIT 1", + dbesc($which) + ); + + $channel = $r[0]; + if (!$channel) { http_status_exit(404, 'Not found'); } @@ -83,12 +91,17 @@ class Channel extends Controller { 'Digest' => HTTPSig::generate_digest_header($data), '(request-target)' => strtolower($_SERVER['REQUEST_METHOD']) . ' ' . $_SERVER['REQUEST_URI'] ]; - $h = HTTPSig::create_sig($headers, $channel['channel_prvkey'], channel_url($channel)); + + $h = HTTPSig::create_sig($headers, $channel['channel_prvkey'], channel_url($channel)); HTTPSig::set_headers($h); echo $data; killme(); } + if ($channel['channel_removed']) { + http_status_exit(404, 'Not found'); + } + if (ActivityStreams::is_as_request($channel)) { // Somebody may attempt an ActivityStreams fetch on one of our message permalinks diff --git a/Zotlabs/Module/Removeme.php b/Zotlabs/Module/Removeme.php index 876d61ca6..a0697675b 100644 --- a/Zotlabs/Module/Removeme.php +++ b/Zotlabs/Module/Removeme.php @@ -5,54 +5,54 @@ namespace Zotlabs\Module; class Removeme extends \Zotlabs\Web\Controller { function post() { - + if(! local_channel()) return; - + if($_SESSION['delegate']) return; - + if((! x($_POST,'qxz_password')) || (! strlen(trim($_POST['qxz_password'])))) return; - + if((! x($_POST,'verify')) || (! strlen(trim($_POST['verify'])))) return; - + if($_POST['verify'] !== $_SESSION['remove_account_verify']) return; - - + + $account = \App::get_account(); - - + + $x = account_verify_password($account['account_email'],$_POST['qxz_password']); if(! ($x && $x['account'])) return; - + if($account['account_password_changed'] > NULL_DATE) { $d1 = datetime_convert('UTC','UTC','now - 48 hours'); - if($account['account_password_changed'] > d1) { + if($account['account_password_changed'] > $d1) { notice( t('Channel removals are not allowed within 48 hours of changing the account password.') . EOL); return; } } - + $global_remove = 0; //intval($_POST['global']); channel_remove(local_channel(),1 - $global_remove,true); - + } - - + + function get() { - + if(! local_channel()) goaway(z_root()); - + $hash = random_string(); - + $_SESSION['remove_account_verify'] = $hash; - + $tpl = get_markup_template('removeme.tpl'); $o .= replace_macros($tpl, array( '$basedir' => z_root(), @@ -63,9 +63,9 @@ class Removeme extends \Zotlabs\Web\Controller { // '$global' => [ 'global', t('Remove this channel and all its clones from the network'), false, t('By default only the instance of the channel located on this hub will be removed from the network'), [ t('No'),t('Yes') ] ], '$submit' => t('Remove Channel') )); - - return $o; - + + return $o; + } - + } diff --git a/include/channel.php b/include/channel.php index 91e2c37bd..c9391c0d0 100644 --- a/include/channel.php +++ b/include/channel.php @@ -1327,7 +1327,7 @@ function profile_load($nickname, $profile = '') { if(! $user) { logger('profile error: ' . App::$query_string, LOGGER_DEBUG); - notice( t('Requested channel is not available.') . EOL ); + notice( t('Requested channel is not available') . EOL ); App::$error = 404; return; } @@ -2457,7 +2457,7 @@ function channelx_by_nick($nick) { return App::$channel; } - $r = q("SELECT * FROM channel left join xchan on channel_hash = xchan_hash WHERE channel_address = '%s' and channel_removed = 0 LIMIT 1", + $r = q("SELECT * FROM channel left join xchan on channel_hash = xchan_hash WHERE channel_address = '%s' and channel_removed = 0 LIMIT 1", dbesc($nick) ); -- cgit v1.2.3 From 440f7bacd62cd277e8d9d4341675e8c5f5e7485a Mon Sep 17 00:00:00 2001 From: Mario Vavti Date: Thu, 3 Jun 2021 10:59:12 +0200 Subject: directory improvements --- Zotlabs/Daemon/Onedirsync.php | 6 +-- Zotlabs/Lib/Libzotdir.php | 11 +++++- Zotlabs/Module/Dirsearch.php | 85 ++++++++++++++++--------------------------- 3 files changed, 44 insertions(+), 58 deletions(-) diff --git a/Zotlabs/Daemon/Onedirsync.php b/Zotlabs/Daemon/Onedirsync.php index 9ab8ebb54..35d0ae604 100644 --- a/Zotlabs/Daemon/Onedirsync.php +++ b/Zotlabs/Daemon/Onedirsync.php @@ -25,6 +25,7 @@ class Onedirsync { if (!$r) return; + if (($r[0]['ud_flags'] & UPDATE_FLAGS_UPDATED) || (!$r[0]['ud_addr'])) return; @@ -50,18 +51,17 @@ class Onedirsync { // ignore doing an update if this ud_addr refers to a known dead hubloc $h = q("select * from hubloc where hubloc_addr = '%s'", - dbesc($r[0]['ud_addr']) + dbesc($r[0]['ud_addr']), ); $h = Libzot::zot_record_preferred($h); - if (($h) && ($h['hubloc_status'] & HUBLOC_OFFLINE)) { + if (($h) && (($h['hubloc_status'] & HUBLOC_OFFLINE) || $h['hubloc_deleted'] || $h['hubloc_error'])) { q("update updates set ud_flags = ( ud_flags | %d ) where ud_addr = '%s' and ( ud_flags & %d ) = 0 ", intval(UPDATE_FLAGS_UPDATED), dbesc($r[0]['ud_addr']), intval(UPDATE_FLAGS_UPDATED) ); - return; } diff --git a/Zotlabs/Lib/Libzotdir.php b/Zotlabs/Lib/Libzotdir.php index e095502dd..9042bcd16 100644 --- a/Zotlabs/Lib/Libzotdir.php +++ b/Zotlabs/Lib/Libzotdir.php @@ -207,8 +207,6 @@ class Libzotdir { ); } - - // If there are no directory servers, setup the fallback master /** @FIXME What to do if we're in a different realm? */ @@ -249,6 +247,7 @@ class Libzotdir { $syncdate = (($rr['site_sync'] <= NULL_DATE) ? datetime_convert('UTC','UTC','now - 2 days') : $rr['site_sync']); $x = z_fetch_url($rr['site_directory'] . '?f=&sync=' . urlencode($syncdate) . (($token) ? '&t=' . $token : '')); + if (! $x['success']) continue; @@ -319,6 +318,14 @@ class Libzotdir { } if(array_path_exists('signature/signer',$zf) && $zf['signature']['signer'] === $href && intval($zf['signature']['header_valid'])) { $xc = Libzot::import_xchan($zf['data'], 0, $ud); + // This is a workaround for a missing xchan_updated column + // TODO: implement xchan_updated in the xchan table and update this column instead + if($zf['data']['primary_location']['address'] && $zf['data']['primary_location']['url']) { + q("UPDATE hubloc SET hubloc_updated = '%s' WHERE hubloc_id_url = '%s' AND hubloc_primary = 1", + dbesc(datetime_convert()), + dbesc($zf['data']['primary_location']['url']) + ); + } } else { q("update updates set ud_last = '%s' where ud_addr = '%s'", diff --git a/Zotlabs/Module/Dirsearch.php b/Zotlabs/Module/Dirsearch.php index 3cccaca37..5d748fb80 100644 --- a/Zotlabs/Module/Dirsearch.php +++ b/Zotlabs/Module/Dirsearch.php @@ -256,65 +256,44 @@ class Dirsearch extends Controller { } else { - $r = q("SELECT xchan.*, xprof.* from xchan left join xprof on xchan_hash = xprof_hash - where ( $logic $sql_extra ) $hub_query and xchan_network = 'zot6' and xchan_system = 0 and xchan_hidden = 0 and xchan_orphan = 0 and xchan_deleted = 0 - $safesql $order $qlimit " + $r = q("SELECT + xchan.xchan_name as name, + xchan.xchan_hash as hash, + xchan.xchan_censored as censored, + xchan.xchan_selfcensored as selfcensored, + xchan.xchan_pubforum as public_forum, + xchan.xchan_url as url, + xchan.xchan_photo_l as photo_l, + xchan.xchan_photo_m as photo, + xchan.xchan_addr as address, + xprof.xprof_desc as description, + xprof.xprof_locale as locale, + xprof.xprof_region as region, + xprof.xprof_postcode as postcode, + xprof.xprof_country as country, + xprof.xprof_dob as birthday, + xprof.xprof_age as age, + xprof.xprof_gender as gender, + xprof.xprof_marital as marital, + xprof.xprof_sexual as sexual, + xprof.xprof_about as about, + xprof.xprof_homepage as homepage, + xprof.xprof_hometown as hometown, + xprof.xprof_keywords as keywords + from xchan left join xprof on xchan_hash = xprof_hash left join hubloc on hubloc_hash = xchan_hash + where hubloc_primary = 1 and hubloc_updated > %s - INTERVAL %s and ( $logic $sql_extra ) $hub_query and xchan_network = 'zot6' and xchan_system = 0 and xchan_hidden = 0 and xchan_orphan = 0 and xchan_deleted = 0 + $safesql $order $qlimit", + db_utcnow(), + db_quoteinterval('30 DAY') ); - - - $ret['page'] = $page + 1; - $ret['records'] = count($r); } - - if($r) { + $ret['results'] = $r; + $ret['page'] = $page + 1; + $ret['records'] = count($r); - $entries = array(); - - foreach($r as $rr) { - - $entry = array(); - - $pc = q("select count(xlink_rating) as total_ratings from xlink where xlink_link = '%s' and xlink_rating != 0 and xlink_static = 1 group by xlink_rating", - dbesc($rr['xchan_hash']) - ); - - if($pc) - $entry['total_ratings'] = intval($pc[0]['total_ratings']); - else - $entry['total_ratings'] = 0; - - $entry['name'] = $rr['xchan_name']; - $entry['hash'] = $rr['xchan_hash']; - $entry['censored'] = $rr['xchan_censored']; - $entry['selfcensored'] = $rr['xchan_selfcensored']; - $entry['public_forum'] = (intval($rr['xchan_pubforum']) ? true : false); - $entry['url'] = $rr['xchan_url']; - $entry['photo_l'] = $rr['xchan_photo_l']; - $entry['photo'] = $rr['xchan_photo_m']; - $entry['address'] = $rr['xchan_addr']; - $entry['description'] = $rr['xprof_desc']; - $entry['locale'] = $rr['xprof_locale']; - $entry['region'] = $rr['xprof_region']; - $entry['postcode'] = $rr['xprof_postcode']; - $entry['country'] = $rr['xprof_country']; - $entry['birthday'] = $rr['xprof_dob']; - $entry['age'] = $rr['xprof_age']; - $entry['gender'] = $rr['xprof_gender']; - $entry['marital'] = $rr['xprof_marital']; - $entry['sexual'] = $rr['xprof_sexual']; - $entry['about'] = $rr['xprof_about']; - $entry['homepage'] = $rr['xprof_homepage']; - $entry['hometown'] = $rr['xprof_hometown']; - $entry['keywords'] = $rr['xprof_keywords']; - - $entries[] = $entry; - - } - - $ret['results'] = $entries; if($kw) { $k = dir_tagadelic($kw, $hub); if($k) { -- cgit v1.2.3 From d882bad706542eb1e64c24567b8bf112f6cebb89 Mon Sep 17 00:00:00 2001 From: Mario Date: Fri, 4 Jun 2021 07:43:23 +0000 Subject: fix login name label for the case when system.verify_email is disabled --- Zotlabs/Daemon/Directory.php | 2 +- boot.php | 15 +++++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/Zotlabs/Daemon/Directory.php b/Zotlabs/Daemon/Directory.php index 1f307b273..35d184206 100644 --- a/Zotlabs/Daemon/Directory.php +++ b/Zotlabs/Daemon/Directory.php @@ -74,7 +74,7 @@ class Directory { * the directory packet. That means we'll try again on the next poll run. */ - $hash = random_string(); + $hash = new_uuid(); Queue::insert(array( 'hash' => $hash, diff --git a/boot.php b/boot.php index bb2d094ea..66ccd4309 100644 --- a/boot.php +++ b/boot.php @@ -1710,21 +1710,24 @@ function login($register = false, $form_id = 'main-login', $hiddens = false, $lo $_SESSION['login_return_url'] = App::$query_string; } - $o .= replace_macros($tpl,array( + $email_required = get_config('system', 'verify_email'); + $lname_label = (($email_required) ? t('Email or nickname') : t('Nickname')); + + $o .= replace_macros($tpl, [ '$dest_url' => $dest_url, '$login_page' => $login_page, '$logout' => t('Logout'), '$login' => t('Login'), '$remote_login' => t('Remote Authentication'), '$form_id' => $form_id, - '$lname' => array('username', t('Login/Email') , '', ''), - '$lpassword' => array('password', t('Password'), '', ''), - '$remember_me' => array((($login_page) ? 'remember' : 'remember_me'), t('Remember me'), '', '',array(t('No'),t('Yes'))), + '$lname' => ['username', $lname_label], + '$lpassword' => ['password', t('Password')], + '$remember_me' => [(($login_page) ? 'remember' : 'remember_me'), t('Remember me'), '', '', [t('No'),t('Yes')]], '$hiddens' => $hiddens, '$register' => $reg, '$lostpass' => t('Forgot your password?'), - '$lostlink' => t('Password Reset'), - )); + '$lostlink' => (($email_required) ? t('Password Reset') : ''), + ]); /** * @hooks login_hook -- cgit v1.2.3 From 3d1684fa942812e2d6f053cbfb6de9fdc00ea79c Mon Sep 17 00:00:00 2001 From: Mario Date: Fri, 4 Jun 2021 07:44:37 +0000 Subject: Revert "fix login name label for the case when system.verify_email is disabled" This reverts commit d882bad706542eb1e64c24567b8bf112f6cebb89. --- Zotlabs/Daemon/Directory.php | 2 +- boot.php | 15 ++++++--------- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/Zotlabs/Daemon/Directory.php b/Zotlabs/Daemon/Directory.php index 35d184206..1f307b273 100644 --- a/Zotlabs/Daemon/Directory.php +++ b/Zotlabs/Daemon/Directory.php @@ -74,7 +74,7 @@ class Directory { * the directory packet. That means we'll try again on the next poll run. */ - $hash = new_uuid(); + $hash = random_string(); Queue::insert(array( 'hash' => $hash, diff --git a/boot.php b/boot.php index 66ccd4309..bb2d094ea 100644 --- a/boot.php +++ b/boot.php @@ -1710,24 +1710,21 @@ function login($register = false, $form_id = 'main-login', $hiddens = false, $lo $_SESSION['login_return_url'] = App::$query_string; } - $email_required = get_config('system', 'verify_email'); - $lname_label = (($email_required) ? t('Email or nickname') : t('Nickname')); - - $o .= replace_macros($tpl, [ + $o .= replace_macros($tpl,array( '$dest_url' => $dest_url, '$login_page' => $login_page, '$logout' => t('Logout'), '$login' => t('Login'), '$remote_login' => t('Remote Authentication'), '$form_id' => $form_id, - '$lname' => ['username', $lname_label], - '$lpassword' => ['password', t('Password')], - '$remember_me' => [(($login_page) ? 'remember' : 'remember_me'), t('Remember me'), '', '', [t('No'),t('Yes')]], + '$lname' => array('username', t('Login/Email') , '', ''), + '$lpassword' => array('password', t('Password'), '', ''), + '$remember_me' => array((($login_page) ? 'remember' : 'remember_me'), t('Remember me'), '', '',array(t('No'),t('Yes'))), '$hiddens' => $hiddens, '$register' => $reg, '$lostpass' => t('Forgot your password?'), - '$lostlink' => (($email_required) ? t('Password Reset') : ''), - ]); + '$lostlink' => t('Password Reset'), + )); /** * @hooks login_hook -- cgit v1.2.3 From e44bf42c646c018e00e8f0a2895a6c29522361a6 Mon Sep 17 00:00:00 2001 From: Mario Date: Fri, 4 Jun 2021 07:45:33 +0000 Subject: fix login name label for the case when system.verify_email is disabled --- boot.php | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/boot.php b/boot.php index bb2d094ea..66ccd4309 100644 --- a/boot.php +++ b/boot.php @@ -1710,21 +1710,24 @@ function login($register = false, $form_id = 'main-login', $hiddens = false, $lo $_SESSION['login_return_url'] = App::$query_string; } - $o .= replace_macros($tpl,array( + $email_required = get_config('system', 'verify_email'); + $lname_label = (($email_required) ? t('Email or nickname') : t('Nickname')); + + $o .= replace_macros($tpl, [ '$dest_url' => $dest_url, '$login_page' => $login_page, '$logout' => t('Logout'), '$login' => t('Login'), '$remote_login' => t('Remote Authentication'), '$form_id' => $form_id, - '$lname' => array('username', t('Login/Email') , '', ''), - '$lpassword' => array('password', t('Password'), '', ''), - '$remember_me' => array((($login_page) ? 'remember' : 'remember_me'), t('Remember me'), '', '',array(t('No'),t('Yes'))), + '$lname' => ['username', $lname_label], + '$lpassword' => ['password', t('Password')], + '$remember_me' => [(($login_page) ? 'remember' : 'remember_me'), t('Remember me'), '', '', [t('No'),t('Yes')]], '$hiddens' => $hiddens, '$register' => $reg, '$lostpass' => t('Forgot your password?'), - '$lostlink' => t('Password Reset'), - )); + '$lostlink' => (($email_required) ? t('Password Reset') : ''), + ]); /** * @hooks login_hook -- cgit v1.2.3 From 10f8fe89738e4fe22baa1e3a879ba77313ecb27c Mon Sep 17 00:00:00 2001 From: Mario Date: Fri, 4 Jun 2021 07:46:36 +0000 Subject: use uuid for hash --- Zotlabs/Daemon/Directory.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Zotlabs/Daemon/Directory.php b/Zotlabs/Daemon/Directory.php index 1f307b273..35d184206 100644 --- a/Zotlabs/Daemon/Directory.php +++ b/Zotlabs/Daemon/Directory.php @@ -74,7 +74,7 @@ class Directory { * the directory packet. That means we'll try again on the next poll run. */ - $hash = random_string(); + $hash = new_uuid(); Queue::insert(array( 'hash' => $hash, -- cgit v1.2.3 From 343f3059e6df65c4c97ca7ab359addeb5d0e1cf5 Mon Sep 17 00:00:00 2001 From: Mario Date: Fri, 4 Jun 2021 07:45:33 +0000 Subject: fix login name label for the case when system.verify_email is disabled (cherry picked from commit e44bf42c646c018e00e8f0a2895a6c29522361a6) --- boot.php | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/boot.php b/boot.php index 622784e9c..ec380992f 100644 --- a/boot.php +++ b/boot.php @@ -1709,21 +1709,24 @@ function login($register = false, $form_id = 'main-login', $hiddens = false, $lo $_SESSION['login_return_url'] = App::$query_string; } - $o .= replace_macros($tpl,array( + $email_required = get_config('system', 'verify_email'); + $lname_label = (($email_required) ? t('Email or nickname') : t('Nickname')); + + $o .= replace_macros($tpl, [ '$dest_url' => $dest_url, '$login_page' => $login_page, '$logout' => t('Logout'), '$login' => t('Login'), '$remote_login' => t('Remote Authentication'), '$form_id' => $form_id, - '$lname' => array('username', t('Login/Email') , '', ''), - '$lpassword' => array('password', t('Password'), '', ''), - '$remember_me' => array((($login_page) ? 'remember' : 'remember_me'), t('Remember me'), '', '',array(t('No'),t('Yes'))), + '$lname' => ['username', $lname_label], + '$lpassword' => ['password', t('Password')], + '$remember_me' => [(($login_page) ? 'remember' : 'remember_me'), t('Remember me'), '', '', [t('No'),t('Yes')]], '$hiddens' => $hiddens, '$register' => $reg, '$lostpass' => t('Forgot your password?'), - '$lostlink' => t('Password Reset'), - )); + '$lostlink' => (($email_required) ? t('Password Reset') : ''), + ]); /** * @hooks login_hook -- cgit v1.2.3 From 993d64801136aa4bde4f4422ae4f07d224a91a62 Mon Sep 17 00:00:00 2001 From: mjfriaza Date: Tue, 1 Jun 2021 11:57:11 +0200 Subject: Update Spanish --- view/es-es/hmessages.po | 2709 +++++++++++++++++++++++++++-------------------- view/es-es/hstrings.php | 199 +++- 2 files changed, 1687 insertions(+), 1221 deletions(-) diff --git a/view/es-es/hmessages.po b/view/es-es/hmessages.po index 8c730d058..a9d2fdd48 100644 --- a/view/es-es/hmessages.po +++ b/view/es-es/hmessages.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the hubzilla package. # # Translators: -# Alfonso Martínez , 2015 +# Alfonso Martínez, 2015 # inboxwall , 2015 # jeroenpraat, 2015 # Manuel Jiménez Friaza , 2017-2021 @@ -14,8 +14,8 @@ msgid "" msgstr "" "Project-Id-Version: hubzilla\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-23 10:52+0000\n" -"PO-Revision-Date: 2021-02-24 09:30+0000\n" +"POT-Creation-Date: 2021-04-29 08:26+0000\n" +"PO-Revision-Date: 2021-05-14 18:05+0000\n" "Last-Translator: Manuel Jiménez Friaza \n" "Language-Team: Spanish (Spain) (http://www.transifex.com/Friendica/hubzilla/language/es_ES/)\n" "MIME-Version: 1.0\n" @@ -24,15 +24,12 @@ msgstr "" "Language: es_ES\n" "Plural-Forms: nplurals=2; plural=(n != 1 ? 1 : 0);\n" - - - #: ../../view/theme/redbasic/php/config.php:15 #: ../../addon/cart/submodules/orderoptions.php:335 #: ../../addon/cart/submodules/orderoptions.php:359 #: ../../addon/cart/submodules/orderoptions.php:435 #: ../../addon/cart/submodules/orderoptions.php:459 -#: ../../include/text.php:3382 ../../Zotlabs/Module/Admin/Site.php:191 +#: ../../include/text.php:3395 ../../Zotlabs/Module/Admin/Site.php:251 msgid "Default" msgstr "Predeterminado" @@ -90,8 +87,8 @@ msgstr "Focus (predefinido)" #: ../../Zotlabs/Widget/Wiki_pages.php:99 #: ../../Zotlabs/Widget/Eventstools.php:16 ../../Zotlabs/Module/Tokens.php:188 #: ../../Zotlabs/Module/Import_items.php:129 -#: ../../Zotlabs/Module/Import.php:646 ../../Zotlabs/Module/Setup.php:304 -#: ../../Zotlabs/Module/Setup.php:344 ../../Zotlabs/Module/Group.php:151 +#: ../../Zotlabs/Module/Import.php:647 ../../Zotlabs/Module/Setup.php:306 +#: ../../Zotlabs/Module/Setup.php:346 ../../Zotlabs/Module/Group.php:151 #: ../../Zotlabs/Module/Group.php:167 ../../Zotlabs/Module/Oauth.php:111 #: ../../Zotlabs/Module/Chat.php:209 ../../Zotlabs/Module/Chat.php:248 #: ../../Zotlabs/Module/Poke.php:217 ../../Zotlabs/Module/Mitem.php:259 @@ -100,24 +97,25 @@ msgstr "Focus (predefinido)" #: ../../Zotlabs/Module/Admin/Themes.php:158 #: ../../Zotlabs/Module/Admin/Features.php:66 #: ../../Zotlabs/Module/Admin/Security.php:120 -#: ../../Zotlabs/Module/Admin/Accounts.php:168 -#: ../../Zotlabs/Module/Admin/Site.php:293 +#: ../../Zotlabs/Module/Admin/Accounts.php:309 +#: ../../Zotlabs/Module/Admin/Site.php:412 #: ../../Zotlabs/Module/Admin/Logs.php:84 #: ../../Zotlabs/Module/Admin/Channels.php:147 #: ../../Zotlabs/Module/Admin/Account_edit.php:73 #: ../../Zotlabs/Module/Admin/Profs.php:178 #: ../../Zotlabs/Module/Admin/Addons.php:442 -#: ../../Zotlabs/Module/Events.php:501 ../../Zotlabs/Module/Permcats.php:129 -#: ../../Zotlabs/Module/Mood.php:158 ../../Zotlabs/Module/Appman.php:155 +#: ../../Zotlabs/Module/Regate.php:384 ../../Zotlabs/Module/Events.php:501 +#: ../../Zotlabs/Module/Permcats.php:129 ../../Zotlabs/Module/Mood.php:158 +#: ../../Zotlabs/Module/Appman.php:155 #: ../../Zotlabs/Module/Email_validation.php:40 #: ../../Zotlabs/Module/Photos.php:1058 ../../Zotlabs/Module/Photos.php:1098 #: ../../Zotlabs/Module/Photos.php:1216 ../../Zotlabs/Module/Profiles.php:725 -#: ../../Zotlabs/Module/Invite.php:168 ../../Zotlabs/Module/Xchan.php:15 +#: ../../Zotlabs/Module/Invite.php:550 ../../Zotlabs/Module/Xchan.php:15 #: ../../Zotlabs/Module/Affinity.php:87 ../../Zotlabs/Module/Rate.php:168 #: ../../Zotlabs/Module/Settings/Network.php:62 #: ../../Zotlabs/Module/Settings/Features.php:48 #: ../../Zotlabs/Module/Settings/Channel.php:495 -#: ../../Zotlabs/Module/Settings/Account.php:103 +#: ../../Zotlabs/Module/Settings/Account.php:107 #: ../../Zotlabs/Module/Settings/Events.php:42 #: ../../Zotlabs/Module/Settings/Manage.php:43 #: ../../Zotlabs/Module/Settings/Channel_home.php:91 @@ -132,7 +130,7 @@ msgstr "Focus (predefinido)" #: ../../Zotlabs/Module/Defperms.php:266 ../../Zotlabs/Module/Pconfig.php:116 #: ../../Zotlabs/Module/Oauth2.php:116 ../../Zotlabs/Module/Thing.php:328 #: ../../Zotlabs/Module/Thing.php:381 ../../Zotlabs/Module/Pdledit.php:108 -#: ../../Zotlabs/Module/Wiki.php:215 ../../Zotlabs/Module/Connedit.php:897 +#: ../../Zotlabs/Module/Wiki.php:214 ../../Zotlabs/Module/Connedit.php:897 #: ../../Zotlabs/Module/Locs.php:132 ../../Zotlabs/Module/Sources.php:125 #: ../../Zotlabs/Module/Sources.php:162 ../../Zotlabs/Lib/ThreadItem.php:827 #: ../../Zotlabs/Storage/Browser.php:382 @@ -189,29 +187,29 @@ msgstr "Estrechar la barra de navegación" #: ../../addon/libertree/Mod_Libertree.php:59 #: ../../addon/socialauth/Mod_SocialAuth.php:214 #: ../../addon/ljpost/Mod_Ljpost.php:63 ../../addon/ljpost/Mod_Ljpost.php:67 -#: ../../addon/ljpost/Mod_Ljpost.php:71 ../../include/conversation.php:1469 +#: ../../addon/ljpost/Mod_Ljpost.php:71 ../../include/conversation.php:1468 #: ../../include/dir_fns.php:144 ../../include/dir_fns.php:145 -#: ../../include/dir_fns.php:146 ../../Zotlabs/Module/Import.php:635 -#: ../../Zotlabs/Module/Import.php:639 ../../Zotlabs/Module/Import.php:640 -#: ../../Zotlabs/Module/Mitem.php:176 ../../Zotlabs/Module/Mitem.php:177 -#: ../../Zotlabs/Module/Mitem.php:256 ../../Zotlabs/Module/Mitem.php:257 -#: ../../Zotlabs/Module/Filestorage.php:203 +#: ../../include/dir_fns.php:146 ../../Zotlabs/Module/Import.php:636 +#: ../../Zotlabs/Module/Import.php:640 ../../Zotlabs/Module/Import.php:641 +#: ../../Zotlabs/Module/Register.php:536 ../../Zotlabs/Module/Mitem.php:176 +#: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:256 +#: ../../Zotlabs/Module/Mitem.php:257 ../../Zotlabs/Module/Filestorage.php:203 #: ../../Zotlabs/Module/Filestorage.php:211 -#: ../../Zotlabs/Module/Admin/Site.php:259 ../../Zotlabs/Module/Events.php:478 +#: ../../Zotlabs/Module/Admin/Site.php:319 ../../Zotlabs/Module/Events.php:478 #: ../../Zotlabs/Module/Events.php:479 ../../Zotlabs/Module/Api.php:99 #: ../../Zotlabs/Module/Photos.php:673 ../../Zotlabs/Module/Profiles.php:683 #: ../../Zotlabs/Module/Settings/Channel.php:311 #: ../../Zotlabs/Module/Settings/Display.php:88 #: ../../Zotlabs/Module/Menu.php:163 ../../Zotlabs/Module/Menu.php:222 -#: ../../Zotlabs/Module/Defperms.php:198 ../../Zotlabs/Module/Wiki.php:227 -#: ../../Zotlabs/Module/Wiki.php:228 ../../Zotlabs/Module/Connedit.php:404 +#: ../../Zotlabs/Module/Defperms.php:198 ../../Zotlabs/Module/Wiki.php:226 +#: ../../Zotlabs/Module/Wiki.php:227 ../../Zotlabs/Module/Connedit.php:404 #: ../../Zotlabs/Module/Connedit.php:789 ../../Zotlabs/Module/Sources.php:124 #: ../../Zotlabs/Module/Sources.php:159 ../../Zotlabs/Lib/Libzotdir.php:165 #: ../../Zotlabs/Lib/Libzotdir.php:166 ../../Zotlabs/Lib/Libzotdir.php:168 #: ../../Zotlabs/Storage/Browser.php:310 ../../Zotlabs/Storage/Browser.php:311 #: ../../Zotlabs/Storage/Browser.php:312 ../../Zotlabs/Storage/Browser.php:389 #: ../../Zotlabs/Storage/Browser.php:391 ../../Zotlabs/Storage/Browser.php:552 -#: ../../boot.php:1716 +#: ../../boot.php:1721 msgid "No" msgstr "No" @@ -257,28 +255,28 @@ msgstr "No" #: ../../addon/libertree/Mod_Libertree.php:59 #: ../../addon/socialauth/Mod_SocialAuth.php:214 #: ../../addon/ljpost/Mod_Ljpost.php:63 ../../addon/ljpost/Mod_Ljpost.php:67 -#: ../../addon/ljpost/Mod_Ljpost.php:71 ../../include/conversation.php:1469 +#: ../../addon/ljpost/Mod_Ljpost.php:71 ../../include/conversation.php:1468 #: ../../include/dir_fns.php:144 ../../include/dir_fns.php:145 -#: ../../include/dir_fns.php:146 ../../Zotlabs/Module/Import.php:635 -#: ../../Zotlabs/Module/Import.php:639 ../../Zotlabs/Module/Import.php:640 -#: ../../Zotlabs/Module/Mitem.php:176 ../../Zotlabs/Module/Mitem.php:177 -#: ../../Zotlabs/Module/Mitem.php:256 ../../Zotlabs/Module/Mitem.php:257 -#: ../../Zotlabs/Module/Filestorage.php:203 +#: ../../include/dir_fns.php:146 ../../Zotlabs/Module/Import.php:636 +#: ../../Zotlabs/Module/Import.php:640 ../../Zotlabs/Module/Import.php:641 +#: ../../Zotlabs/Module/Register.php:536 ../../Zotlabs/Module/Mitem.php:176 +#: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:256 +#: ../../Zotlabs/Module/Mitem.php:257 ../../Zotlabs/Module/Filestorage.php:203 #: ../../Zotlabs/Module/Filestorage.php:211 -#: ../../Zotlabs/Module/Admin/Site.php:261 ../../Zotlabs/Module/Events.php:478 +#: ../../Zotlabs/Module/Admin/Site.php:321 ../../Zotlabs/Module/Events.php:478 #: ../../Zotlabs/Module/Events.php:479 ../../Zotlabs/Module/Api.php:98 #: ../../Zotlabs/Module/Photos.php:673 ../../Zotlabs/Module/Profiles.php:683 #: ../../Zotlabs/Module/Settings/Channel.php:311 #: ../../Zotlabs/Module/Settings/Display.php:88 #: ../../Zotlabs/Module/Menu.php:163 ../../Zotlabs/Module/Menu.php:222 -#: ../../Zotlabs/Module/Defperms.php:198 ../../Zotlabs/Module/Wiki.php:227 -#: ../../Zotlabs/Module/Wiki.php:228 ../../Zotlabs/Module/Connedit.php:404 +#: ../../Zotlabs/Module/Defperms.php:198 ../../Zotlabs/Module/Wiki.php:226 +#: ../../Zotlabs/Module/Wiki.php:227 ../../Zotlabs/Module/Connedit.php:404 #: ../../Zotlabs/Module/Sources.php:124 ../../Zotlabs/Module/Sources.php:159 #: ../../Zotlabs/Lib/Libzotdir.php:165 ../../Zotlabs/Lib/Libzotdir.php:166 #: ../../Zotlabs/Lib/Libzotdir.php:168 ../../Zotlabs/Storage/Browser.php:310 #: ../../Zotlabs/Storage/Browser.php:311 ../../Zotlabs/Storage/Browser.php:312 #: ../../Zotlabs/Storage/Browser.php:389 ../../Zotlabs/Storage/Browser.php:391 -#: ../../Zotlabs/Storage/Browser.php:552 ../../boot.php:1716 +#: ../../Zotlabs/Storage/Browser.php:552 ../../boot.php:1721 msgid "Yes" msgstr "Sí" @@ -433,7 +431,7 @@ msgid "Channel Reputation" msgstr "Reputación del canal" #: ../../addon/channelreputation/channelreputation.php:233 -#: ../../include/acl_selectors.php:155 ../../Zotlabs/Widget/Pinned.php:160 +#: ../../include/acl_selectors.php:156 ../../Zotlabs/Widget/Pinned.php:158 #: ../../Zotlabs/Module/Photos.php:1275 ../../Zotlabs/Lib/ThreadItem.php:497 #: ../../Zotlabs/Storage/Browser.php:411 msgid "Close" @@ -489,17 +487,17 @@ msgstr "App Superblock" #: ../../addon/xmpp/Mod_Xmpp.php:35 ../../Zotlabs/Module/Tokens.php:99 #: ../../Zotlabs/Module/Group.php:107 ../../Zotlabs/Module/Oauth.php:100 #: ../../Zotlabs/Module/Chat.php:100 ../../Zotlabs/Module/Poke.php:165 -#: ../../Zotlabs/Module/Cdav.php:876 ../../Zotlabs/Module/Webpages.php:48 +#: ../../Zotlabs/Module/Cdav.php:877 ../../Zotlabs/Module/Webpages.php:48 #: ../../Zotlabs/Module/Pubstream.php:20 ../../Zotlabs/Module/Permcats.php:63 -#: ../../Zotlabs/Module/Lang.php:17 ../../Zotlabs/Module/Uexport.php:61 +#: ../../Zotlabs/Module/Lang.php:17 ../../Zotlabs/Module/Uexport.php:62 #: ../../Zotlabs/Module/Mood.php:134 ../../Zotlabs/Module/Cards.php:51 #: ../../Zotlabs/Module/Articles.php:52 ../../Zotlabs/Module/Bookmarks.php:78 -#: ../../Zotlabs/Module/Probe.php:19 ../../Zotlabs/Module/Invite.php:110 -#: ../../Zotlabs/Module/Notes.php:57 ../../Zotlabs/Module/Affinity.php:52 -#: ../../Zotlabs/Module/Defperms.php:190 ../../Zotlabs/Module/Oauth2.php:106 -#: ../../Zotlabs/Module/Randprof.php:29 ../../Zotlabs/Module/Pdledit.php:43 -#: ../../Zotlabs/Module/Wiki.php:52 ../../Zotlabs/Module/Suggest.php:40 -#: ../../Zotlabs/Module/Sources.php:88 +#: ../../Zotlabs/Module/Probe.php:19 ../../Zotlabs/Module/Invite.php:56 +#: ../../Zotlabs/Module/Invite.php:310 ../../Zotlabs/Module/Notes.php:57 +#: ../../Zotlabs/Module/Affinity.php:52 ../../Zotlabs/Module/Defperms.php:190 +#: ../../Zotlabs/Module/Oauth2.php:106 ../../Zotlabs/Module/Randprof.php:29 +#: ../../Zotlabs/Module/Pdledit.php:43 ../../Zotlabs/Module/Wiki.php:52 +#: ../../Zotlabs/Module/Suggest.php:40 ../../Zotlabs/Module/Sources.php:88 msgid "Not Installed" msgstr "No instalado/a" @@ -593,7 +591,7 @@ msgid "View Profile" msgstr "Ver el perfil" #: ../../addon/openclipatar/openclipatar.php:58 ../../include/nav.php:120 -#: ../../include/channel.php:1543 +#: ../../include/channel.php:1567 msgid "Edit Profile" msgstr "Editar el perfil" @@ -711,8 +709,8 @@ msgstr "Mínimo 100, por defecto 100 microsegundos" msgid "Queueworker Settings" msgstr "Configuración del gestor de procesos de trabajo en cola" -#: ../../addon/queueworker/Mod_Queueworker.php:116 ../../include/text.php:1152 -#: ../../include/text.php:1164 ../../Zotlabs/Widget/Notes.php:23 +#: ../../addon/queueworker/Mod_Queueworker.php:116 ../../include/text.php:1145 +#: ../../include/text.php:1157 ../../Zotlabs/Widget/Notes.php:23 #: ../../Zotlabs/Module/Admin/Profs.php:94 #: ../../Zotlabs/Module/Admin/Profs.php:114 ../../Zotlabs/Module/Cards.php:113 #: ../../Zotlabs/Module/Filer.php:54 ../../Zotlabs/Module/Articles.php:117 @@ -767,7 +765,7 @@ msgstr "Galería" msgid "Photo Gallery" msgstr "Galería de fotos" -#: ../../addon/gallery/Mod_Gallery.php:49 ../../include/channel.php:1440 +#: ../../addon/gallery/Mod_Gallery.php:49 ../../include/channel.php:1464 #: ../../Zotlabs/Module/Hcard.php:12 ../../Zotlabs/Module/Editwebpage.php:32 #: ../../Zotlabs/Module/Profile.php:27 ../../Zotlabs/Module/Webpages.php:39 #: ../../Zotlabs/Module/Filestorage.php:59 ../../Zotlabs/Module/Connect.php:17 @@ -798,7 +796,7 @@ msgstr "Establecer un planeta aleatorio del Imperio de la Guerra de las Galaxias #: ../../addon/openid/Mod_Id.php:53 ../../addon/mail/Mod_Mail.php:26 #: ../../addon/pumpio/pumpio.php:44 ../../addon/keepout/keepout.php:36 -#: ../../include/photos.php:27 ../../include/items.php:4001 +#: ../../include/photos.php:27 ../../include/items.php:4087 #: ../../include/attach.php:156 ../../include/attach.php:205 #: ../../include/attach.php:278 ../../include/attach.php:329 #: ../../include/attach.php:424 ../../include/attach.php:438 @@ -808,12 +806,12 @@ msgstr "Establecer un planeta aleatorio del Imperio de la Guerra de las Galaxias #: ../../Zotlabs/Module/Attach_edit.php:90 #: ../../Zotlabs/Module/Attach_edit.php:99 #: ../../Zotlabs/Module/Attach_edit.php:106 -#: ../../Zotlabs/Module/Network.php:19 ../../Zotlabs/Module/Register.php:80 -#: ../../Zotlabs/Module/Setup.php:206 +#: ../../Zotlabs/Module/Network.php:19 ../../Zotlabs/Module/Register.php:197 +#: ../../Zotlabs/Module/Setup.php:208 #: ../../Zotlabs/Module/Viewconnections.php:28 #: ../../Zotlabs/Module/Viewconnections.php:33 -#: ../../Zotlabs/Module/Channel.php:209 ../../Zotlabs/Module/Channel.php:364 -#: ../../Zotlabs/Module/Channel.php:403 ../../Zotlabs/Module/Group.php:15 +#: ../../Zotlabs/Module/Channel.php:209 ../../Zotlabs/Module/Channel.php:365 +#: ../../Zotlabs/Module/Channel.php:404 ../../Zotlabs/Module/Group.php:15 #: ../../Zotlabs/Module/Group.php:31 ../../Zotlabs/Module/Card_edit.php:51 #: ../../Zotlabs/Module/Editwebpage.php:68 #: ../../Zotlabs/Module/Editwebpage.php:89 @@ -822,8 +820,8 @@ msgstr "Establecer un planeta aleatorio del Imperio de la Guerra de las Galaxias #: ../../Zotlabs/Module/Chat.php:118 #: ../../Zotlabs/Module/Channel_calendar.php:232 #: ../../Zotlabs/Module/Like.php:242 ../../Zotlabs/Module/Poke.php:157 -#: ../../Zotlabs/Module/Item.php:496 ../../Zotlabs/Module/Item.php:515 -#: ../../Zotlabs/Module/Item.php:525 ../../Zotlabs/Module/Item.php:1436 +#: ../../Zotlabs/Module/Item.php:506 ../../Zotlabs/Module/Item.php:525 +#: ../../Zotlabs/Module/Item.php:535 ../../Zotlabs/Module/Item.php:1444 #: ../../Zotlabs/Module/Mitem.php:129 ../../Zotlabs/Module/Profile.php:99 #: ../../Zotlabs/Module/Profile.php:114 #: ../../Zotlabs/Module/Sharedwithme.php:19 @@ -837,7 +835,7 @@ msgstr "Establecer un planeta aleatorio del Imperio de la Guerra de las Galaxias #: ../../Zotlabs/Module/Achievements.php:34 #: ../../Zotlabs/Module/Events.php:277 ../../Zotlabs/Module/Manage.php:10 #: ../../Zotlabs/Module/Authtest.php:16 ../../Zotlabs/Module/Viewsrc.php:19 -#: ../../Zotlabs/Module/Moderate.php:15 ../../Zotlabs/Module/Display.php:428 +#: ../../Zotlabs/Module/Moderate.php:15 ../../Zotlabs/Module/Display.php:420 #: ../../Zotlabs/Module/Common.php:38 ../../Zotlabs/Module/New_channel.php:105 #: ../../Zotlabs/Module/New_channel.php:130 #: ../../Zotlabs/Module/Service_limits.php:11 @@ -856,14 +854,14 @@ msgstr "Establecer un planeta aleatorio del Imperio de la Guerra de las Galaxias #: ../../Zotlabs/Module/Page.php:34 ../../Zotlabs/Module/Page.php:133 #: ../../Zotlabs/Module/Profiles.php:200 ../../Zotlabs/Module/Profiles.php:637 #: ../../Zotlabs/Module/Articles.php:89 ../../Zotlabs/Module/Bookmarks.php:70 -#: ../../Zotlabs/Module/Invite.php:21 ../../Zotlabs/Module/Invite.php:102 +#: ../../Zotlabs/Module/Invite.php:51 ../../Zotlabs/Module/Invite.php:302 #: ../../Zotlabs/Module/Block.php:24 ../../Zotlabs/Module/Block.php:74 #: ../../Zotlabs/Module/Rate.php:115 ../../Zotlabs/Module/Menu.php:130 #: ../../Zotlabs/Module/Menu.php:141 ../../Zotlabs/Module/Defperms.php:182 #: ../../Zotlabs/Module/Thing.php:282 ../../Zotlabs/Module/Thing.php:302 #: ../../Zotlabs/Module/Thing.php:343 ../../Zotlabs/Module/Pdledit.php:35 -#: ../../Zotlabs/Module/Wiki.php:59 ../../Zotlabs/Module/Wiki.php:285 -#: ../../Zotlabs/Module/Wiki.php:428 ../../Zotlabs/Module/Suggest.php:32 +#: ../../Zotlabs/Module/Wiki.php:59 ../../Zotlabs/Module/Wiki.php:284 +#: ../../Zotlabs/Module/Wiki.php:427 ../../Zotlabs/Module/Suggest.php:32 #: ../../Zotlabs/Module/Connedit.php:397 #: ../../Zotlabs/Module/Notifications.php:11 #: ../../Zotlabs/Module/Layouts.php:71 ../../Zotlabs/Module/Layouts.php:78 @@ -874,12 +872,12 @@ msgid "Permission denied." msgstr "Acceso denegado." #: ../../addon/openid/Mod_Id.php:85 ../../include/selectors.php:60 -#: ../../include/selectors.php:77 ../../include/channel.php:1723 +#: ../../include/selectors.php:77 ../../include/channel.php:1747 msgid "Male" msgstr "Hombre" #: ../../addon/openid/Mod_Id.php:87 ../../include/selectors.php:60 -#: ../../include/selectors.php:77 ../../include/channel.php:1721 +#: ../../include/selectors.php:77 ../../include/channel.php:1745 msgid "Female" msgstr "Mujer" @@ -927,9 +925,9 @@ msgstr "Nombre completo" #: ../../addon/openid/MysqlProvider.php:56 #: ../../addon/openid/MysqlProvider.php:57 #: ../../addon/redred/Mod_Redred.php:71 ../../addon/rtof/Mod_Rtof.php:57 -#: ../../include/network.php:1764 ../../Zotlabs/Module/Cdav.php:1376 -#: ../../Zotlabs/Module/Admin/Accounts.php:171 -#: ../../Zotlabs/Module/Admin/Accounts.php:183 +#: ../../include/network.php:1768 ../../Zotlabs/Module/Cdav.php:1377 +#: ../../Zotlabs/Module/Admin/Accounts.php:316 +#: ../../Zotlabs/Module/Admin/Accounts.php:330 #: ../../Zotlabs/Module/Profiles.php:789 ../../Zotlabs/Module/Connedit.php:920 msgid "Email" msgstr "Correo electrónico" @@ -1149,7 +1147,7 @@ msgstr "Tenga en cuenta que las estadísticas de Diaspora y Friendica se refiere msgid "Channel is required." msgstr "Se requiere un canal." -#: ../../addon/redred/Mod_Redred.php:29 ../../Zotlabs/Module/Network.php:322 +#: ../../addon/redred/Mod_Redred.php:29 ../../Zotlabs/Module/Network.php:326 msgid "Invalid channel." msgstr "El canal no es válido." @@ -1207,7 +1205,7 @@ msgstr "Se han importado las fotos" #: ../../include/items.php:441 ../../Zotlabs/Module/Import_items.php:120 #: ../../Zotlabs/Module/Profperm.php:28 ../../Zotlabs/Module/Group.php:99 #: ../../Zotlabs/Module/Like.php:342 ../../Zotlabs/Module/Cloud.php:123 -#: ../../Zotlabs/Module/Share.php:72 ../../Zotlabs/Module/Subthread.php:86 +#: ../../Zotlabs/Module/Share.php:72 ../../Zotlabs/Module/Subthread.php:89 #: ../../Zotlabs/Module/Dreport.php:10 ../../Zotlabs/Module/Dreport.php:82 #: ../../Zotlabs/Web/WebServer.php:115 msgid "Permission denied" @@ -1253,10 +1251,10 @@ msgid "0 or blank to import all available" msgstr "0 o en blanco para importar todos los disponibles" #: ../../addon/redphotos/redphotohelper.php:71 -#: ../../addon/pubcrawl/as.php:2049 ../../addon/diaspora/Receiver.php:1641 -#: ../../include/text.php:2253 ../../include/conversation.php:128 +#: ../../addon/pubcrawl/as.php:2101 ../../addon/diaspora/Receiver.php:1649 +#: ../../include/text.php:2254 ../../include/conversation.php:128 #: ../../Zotlabs/Module/Like.php:439 ../../Zotlabs/Module/Tagger.php:71 -#: ../../Zotlabs/Module/Subthread.php:112 ../../Zotlabs/Lib/Activity.php:3229 +#: ../../Zotlabs/Module/Subthread.php:115 ../../Zotlabs/Lib/Activity.php:3264 msgid "photo" msgstr "foto" @@ -1388,7 +1386,7 @@ msgid "Post to GNU social" msgstr "Publicar en GNU social" #: ../../addon/statusnet/statusnet.php:593 -#: ../../Zotlabs/Module/Admin/Site.php:301 +#: ../../Zotlabs/Module/Admin/Site.php:420 msgid "Site name" msgstr "Nombre del sitio" @@ -1453,7 +1451,7 @@ msgstr "Publicar en WordPress" #: ../../addon/wppost/wppost.php:173 ../../addon/wppost/Mod_Wppost.php:98 #: ../../addon/dwpost/Mod_Dwpost.php:69 ../../addon/dwpost/dwpost.php:134 -#: ../../addon/ljpost/ljpost.php:134 ../../Zotlabs/Module/Wiki.php:384 +#: ../../addon/ljpost/ljpost.php:134 ../../Zotlabs/Module/Wiki.php:383 msgid "Source" msgstr "Fuente" @@ -1576,16 +1574,16 @@ msgstr "Modificado desde la fecha yyyy-mm-dd" msgid "Until modified date yyyy-mm-dd" msgstr "Modificado hasta la fecha yyyy-mm-dd" -#: ../../addon/hsse/hsse.php:82 ../../include/conversation.php:1331 +#: ../../addon/hsse/hsse.php:82 ../../include/conversation.php:1332 msgid "Set your location" msgstr "Establecer su ubicación" -#: ../../addon/hsse/hsse.php:83 ../../include/conversation.php:1332 +#: ../../addon/hsse/hsse.php:83 ../../include/conversation.php:1333 msgid "Clear browser location" msgstr "Eliminar los datos de localización geográfica del navegador" #: ../../addon/hsse/hsse.php:95 ../../addon/mail/Mod_Mail.php:167 -#: ../../addon/mail/Mod_Mail.php:310 ../../include/conversation.php:1344 +#: ../../addon/mail/Mod_Mail.php:310 ../../include/conversation.php:1345 #: ../../Zotlabs/Module/Article_edit.php:100 #: ../../Zotlabs/Module/Card_edit.php:101 #: ../../Zotlabs/Module/Editwebpage.php:143 ../../Zotlabs/Module/Chat.php:220 @@ -1593,129 +1591,129 @@ msgstr "Eliminar los datos de localización geográfica del navegador" msgid "Insert web link" msgstr "Insertar enlace web" -#: ../../addon/hsse/hsse.php:99 ../../include/conversation.php:1348 +#: ../../addon/hsse/hsse.php:99 ../../include/conversation.php:1349 msgid "Embed (existing) photo from your photo albums" msgstr "Insertar una foto de sus álbumes" #: ../../addon/hsse/hsse.php:134 ../../addon/mail/Mod_Mail.php:120 -#: ../../addon/mail/Mod_Mail.php:241 ../../include/conversation.php:1383 +#: ../../addon/mail/Mod_Mail.php:241 ../../include/conversation.php:1382 #: ../../Zotlabs/Module/Chat.php:218 msgid "Please enter a link URL:" msgstr "Por favor, introduzca la dirección del enlace:" -#: ../../addon/hsse/hsse.php:135 ../../include/conversation.php:1384 +#: ../../addon/hsse/hsse.php:135 ../../include/conversation.php:1383 msgid "Tag term:" msgstr "Término de la etiqueta:" -#: ../../addon/hsse/hsse.php:136 ../../include/conversation.php:1385 +#: ../../addon/hsse/hsse.php:136 ../../include/conversation.php:1384 msgid "Where are you right now?" msgstr "¿Donde está ahora?" -#: ../../addon/hsse/hsse.php:139 ../../include/conversation.php:1388 +#: ../../addon/hsse/hsse.php:139 ../../include/conversation.php:1387 #: ../../Zotlabs/Module/Profile_photo.php:509 -#: ../../Zotlabs/Module/Cover_photo.php:430 ../../Zotlabs/Module/Wiki.php:403 +#: ../../Zotlabs/Module/Cover_photo.php:430 ../../Zotlabs/Module/Wiki.php:402 msgid "Choose images to embed" msgstr "Elegir imágenes para incluir" -#: ../../addon/hsse/hsse.php:140 ../../include/conversation.php:1389 +#: ../../addon/hsse/hsse.php:140 ../../include/conversation.php:1388 #: ../../Zotlabs/Module/Profile_photo.php:510 -#: ../../Zotlabs/Module/Cover_photo.php:431 ../../Zotlabs/Module/Wiki.php:404 +#: ../../Zotlabs/Module/Cover_photo.php:431 ../../Zotlabs/Module/Wiki.php:403 msgid "Choose an album" msgstr "Elegir un álbum" -#: ../../addon/hsse/hsse.php:141 ../../include/conversation.php:1390 +#: ../../addon/hsse/hsse.php:141 ../../include/conversation.php:1389 msgid "Choose a different album..." msgstr "Elegir un álbum diferente..." -#: ../../addon/hsse/hsse.php:142 ../../include/conversation.php:1391 +#: ../../addon/hsse/hsse.php:142 ../../include/conversation.php:1390 #: ../../Zotlabs/Module/Profile_photo.php:512 -#: ../../Zotlabs/Module/Cover_photo.php:433 ../../Zotlabs/Module/Wiki.php:406 +#: ../../Zotlabs/Module/Cover_photo.php:433 ../../Zotlabs/Module/Wiki.php:405 msgid "Error getting album list" msgstr "Error al obtener la lista de álbumes" -#: ../../addon/hsse/hsse.php:143 ../../include/conversation.php:1392 +#: ../../addon/hsse/hsse.php:143 ../../include/conversation.php:1391 #: ../../Zotlabs/Module/Profile_photo.php:513 -#: ../../Zotlabs/Module/Cover_photo.php:434 ../../Zotlabs/Module/Wiki.php:407 +#: ../../Zotlabs/Module/Cover_photo.php:434 ../../Zotlabs/Module/Wiki.php:406 msgid "Error getting photo link" msgstr "Error al obtener el enlace de la foto" -#: ../../addon/hsse/hsse.php:144 ../../include/conversation.php:1393 +#: ../../addon/hsse/hsse.php:144 ../../include/conversation.php:1392 #: ../../Zotlabs/Module/Profile_photo.php:514 -#: ../../Zotlabs/Module/Cover_photo.php:435 ../../Zotlabs/Module/Wiki.php:408 +#: ../../Zotlabs/Module/Cover_photo.php:435 ../../Zotlabs/Module/Wiki.php:407 msgid "Error getting album" msgstr "Error al obtener el álbum" -#: ../../addon/hsse/hsse.php:145 ../../include/conversation.php:1394 +#: ../../addon/hsse/hsse.php:145 ../../include/conversation.php:1393 msgid "Comments enabled" msgstr "Comentarios habilitados" -#: ../../addon/hsse/hsse.php:146 ../../include/conversation.php:1395 +#: ../../addon/hsse/hsse.php:146 ../../include/conversation.php:1394 msgid "Comments disabled" msgstr "Comentarios deshabilitados" -#: ../../addon/hsse/hsse.php:153 ../../include/conversation.php:1405 +#: ../../addon/hsse/hsse.php:153 ../../include/conversation.php:1404 #: ../../Zotlabs/Module/Webpages.php:262 ../../Zotlabs/Module/Events.php:486 #: ../../Zotlabs/Module/Photos.php:1099 ../../Zotlabs/Lib/ThreadItem.php:837 msgid "Preview" msgstr "Previsualizar" -#: ../../addon/hsse/hsse.php:186 ../../include/conversation.php:1438 +#: ../../addon/hsse/hsse.php:186 ../../include/conversation.php:1437 #: ../../Zotlabs/Widget/Cdav.php:136 ../../Zotlabs/Module/Webpages.php:256 #: ../../Zotlabs/Module/Blocks.php:161 ../../Zotlabs/Module/Photos.php:1078 -#: ../../Zotlabs/Module/Wiki.php:301 ../../Zotlabs/Module/Layouts.php:194 +#: ../../Zotlabs/Module/Wiki.php:300 ../../Zotlabs/Module/Layouts.php:194 msgid "Share" msgstr "Compartir" -#: ../../addon/hsse/hsse.php:195 ../../include/conversation.php:1447 +#: ../../addon/hsse/hsse.php:195 ../../include/conversation.php:1446 msgid "Page link name" msgstr "Nombre del enlace de la página" -#: ../../addon/hsse/hsse.php:198 ../../include/conversation.php:1450 +#: ../../addon/hsse/hsse.php:198 ../../include/conversation.php:1449 msgid "Post as" msgstr "Publicar como" -#: ../../addon/hsse/hsse.php:200 ../../include/conversation.php:1452 +#: ../../addon/hsse/hsse.php:200 ../../include/conversation.php:1451 #: ../../Zotlabs/Lib/ThreadItem.php:828 msgid "Bold" msgstr "Negrita" -#: ../../addon/hsse/hsse.php:201 ../../include/conversation.php:1453 +#: ../../addon/hsse/hsse.php:201 ../../include/conversation.php:1452 #: ../../Zotlabs/Lib/ThreadItem.php:829 msgid "Italic" msgstr "Itálico " -#: ../../addon/hsse/hsse.php:202 ../../include/conversation.php:1454 +#: ../../addon/hsse/hsse.php:202 ../../include/conversation.php:1453 #: ../../Zotlabs/Lib/ThreadItem.php:830 msgid "Underline" msgstr "Subrayar" -#: ../../addon/hsse/hsse.php:203 ../../include/conversation.php:1455 +#: ../../addon/hsse/hsse.php:203 ../../include/conversation.php:1454 #: ../../Zotlabs/Lib/ThreadItem.php:831 msgid "Quote" msgstr "Citar" -#: ../../addon/hsse/hsse.php:204 ../../include/conversation.php:1456 +#: ../../addon/hsse/hsse.php:204 ../../include/conversation.php:1455 #: ../../Zotlabs/Lib/ThreadItem.php:832 msgid "Code" msgstr "Código" -#: ../../addon/hsse/hsse.php:205 ../../include/conversation.php:1457 +#: ../../addon/hsse/hsse.php:205 ../../include/conversation.php:1456 #: ../../Zotlabs/Lib/ThreadItem.php:834 msgid "Attach/Upload file" msgstr "Adjuntar/cargar fichero" -#: ../../addon/hsse/hsse.php:208 ../../include/conversation.php:1460 -#: ../../Zotlabs/Module/Wiki.php:400 +#: ../../addon/hsse/hsse.php:208 ../../include/conversation.php:1459 +#: ../../Zotlabs/Module/Wiki.php:399 msgid "Embed an image from your albums" msgstr "Incluir una imagen de sus álbumes" #: ../../addon/hsse/hsse.php:209 ../../addon/hsse/hsse.php:258 -#: ../../include/conversation.php:1461 ../../include/conversation.php:1516 +#: ../../include/conversation.php:1460 ../../include/conversation.php:1515 #: ../../Zotlabs/Module/Article_edit.php:131 #: ../../Zotlabs/Module/Fbrowser.php:66 ../../Zotlabs/Module/Fbrowser.php:88 #: ../../Zotlabs/Module/Card_edit.php:132 ../../Zotlabs/Module/Oauth.php:112 #: ../../Zotlabs/Module/Oauth.php:138 ../../Zotlabs/Module/Editwebpage.php:169 -#: ../../Zotlabs/Module/Cdav.php:1058 ../../Zotlabs/Module/Cdav.php:1390 +#: ../../Zotlabs/Module/Cdav.php:1059 ../../Zotlabs/Module/Cdav.php:1391 #: ../../Zotlabs/Module/Tagrm.php:15 ../../Zotlabs/Module/Tagrm.php:138 #: ../../Zotlabs/Module/Editpost.php:111 #: ../../Zotlabs/Module/Admin/Addons.php:427 @@ -1724,32 +1722,32 @@ msgstr "Incluir una imagen de sus álbumes" #: ../../Zotlabs/Module/Editlayout.php:140 #: ../../Zotlabs/Module/Cover_photo.php:428 #: ../../Zotlabs/Module/Profiles.php:803 ../../Zotlabs/Module/Oauth2.php:117 -#: ../../Zotlabs/Module/Oauth2.php:145 ../../Zotlabs/Module/Wiki.php:368 -#: ../../Zotlabs/Module/Wiki.php:401 ../../Zotlabs/Module/Connedit.php:934 +#: ../../Zotlabs/Module/Oauth2.php:145 ../../Zotlabs/Module/Wiki.php:367 +#: ../../Zotlabs/Module/Wiki.php:400 ../../Zotlabs/Module/Connedit.php:934 #: ../../Zotlabs/Storage/Browser.php:383 msgid "Cancel" msgstr "Cancelar" #: ../../addon/hsse/hsse.php:210 ../../addon/hsse/hsse.php:257 -#: ../../include/conversation.php:1462 ../../include/conversation.php:1515 +#: ../../include/conversation.php:1461 ../../include/conversation.php:1514 #: ../../Zotlabs/Module/Profile_photo.php:508 -#: ../../Zotlabs/Module/Cover_photo.php:429 ../../Zotlabs/Module/Wiki.php:402 +#: ../../Zotlabs/Module/Cover_photo.php:429 ../../Zotlabs/Module/Wiki.php:401 msgid "OK" msgstr "OK" -#: ../../addon/hsse/hsse.php:212 ../../include/conversation.php:1464 +#: ../../addon/hsse/hsse.php:212 ../../include/conversation.php:1463 msgid "Toggle voting" msgstr "Cambiar votación" -#: ../../addon/hsse/hsse.php:215 ../../include/conversation.php:1471 +#: ../../addon/hsse/hsse.php:215 ../../include/conversation.php:1470 msgid "Disable comments" msgstr "Dehabilitar los comentarios" -#: ../../addon/hsse/hsse.php:216 ../../include/conversation.php:1472 +#: ../../addon/hsse/hsse.php:216 ../../include/conversation.php:1471 msgid "Toggle comments" msgstr "Activar o desactivar los comentarios" -#: ../../addon/hsse/hsse.php:221 ../../include/conversation.php:1478 +#: ../../addon/hsse/hsse.php:221 ../../include/conversation.php:1477 #: ../../Zotlabs/Module/Article_edit.php:117 #: ../../Zotlabs/Module/Card_edit.php:118 #: ../../Zotlabs/Module/Editblock.php:129 ../../Zotlabs/Module/Photos.php:674 @@ -1757,30 +1755,30 @@ msgstr "Activar o desactivar los comentarios" msgid "Title (optional)" msgstr "Título (opcional)" -#: ../../addon/hsse/hsse.php:224 ../../include/conversation.php:1482 +#: ../../addon/hsse/hsse.php:224 ../../include/conversation.php:1481 msgid "Categories (optional, comma-separated list)" msgstr "Temas (opcional, lista separada por comas)" -#: ../../addon/hsse/hsse.php:225 ../../include/conversation.php:1483 +#: ../../addon/hsse/hsse.php:225 ../../include/conversation.php:1482 #: ../../Zotlabs/Module/Events.php:487 msgid "Permission settings" msgstr "Configuración de permisos" -#: ../../addon/hsse/hsse.php:247 ../../include/conversation.php:1505 +#: ../../addon/hsse/hsse.php:247 ../../include/conversation.php:1504 msgid "Other networks and post services" msgstr "Otras redes y servicios de publicación" #: ../../addon/hsse/hsse.php:250 ../../addon/mail/Mod_Mail.php:171 -#: ../../addon/mail/Mod_Mail.php:314 ../../include/conversation.php:1508 +#: ../../addon/mail/Mod_Mail.php:314 ../../include/conversation.php:1507 msgid "Set expiration date" msgstr "Configurar fecha de caducidad" -#: ../../addon/hsse/hsse.php:253 ../../include/conversation.php:1511 +#: ../../addon/hsse/hsse.php:253 ../../include/conversation.php:1510 msgid "Set publish date" msgstr "Establecer la fecha de publicación" #: ../../addon/hsse/hsse.php:255 ../../addon/mail/Mod_Mail.php:173 -#: ../../addon/mail/Mod_Mail.php:316 ../../include/conversation.php:1513 +#: ../../addon/mail/Mod_Mail.php:316 ../../include/conversation.php:1512 #: ../../Zotlabs/Module/Chat.php:219 ../../Zotlabs/Lib/ThreadItem.php:841 msgid "Encrypt text" msgstr "Cifrar texto" @@ -1896,37 +1894,37 @@ msgstr "Generador QR" msgid "Enter some text" msgstr "Escribir algún texto" -#: ../../addon/pubcrawl/as.php:1183 ../../include/cdav.php:158 +#: ../../addon/pubcrawl/as.php:1189 ../../include/cdav.php:158 #: ../../include/cdav.php:159 ../../include/cdav.php:167 #: ../../include/conversation.php:1214 ../../Zotlabs/Widget/Album.php:84 -#: ../../Zotlabs/Widget/Pinned.php:270 ../../Zotlabs/Widget/Portfolio.php:95 +#: ../../Zotlabs/Widget/Pinned.php:268 ../../Zotlabs/Widget/Portfolio.php:95 #: ../../Zotlabs/Module/Embedphotos.php:177 #: ../../Zotlabs/Module/Photos.php:793 ../../Zotlabs/Module/Photos.php:1255 -#: ../../Zotlabs/Lib/Activity.php:1529 ../../Zotlabs/Lib/Apps.php:1112 +#: ../../Zotlabs/Lib/Activity.php:1552 ../../Zotlabs/Lib/Apps.php:1112 #: ../../Zotlabs/Lib/Apps.php:1196 msgid "Unknown" msgstr "Desconocido" -#: ../../addon/pubcrawl/as.php:1475 ../../addon/pubcrawl/as.php:1887 -#: ../../addon/pubcrawl/as.php:2095 ../../include/network.php:1763 -#: ../../Zotlabs/Lib/Activity.php:3079 ../../Zotlabs/Lib/Activity.php:3271 +#: ../../addon/pubcrawl/as.php:1490 ../../addon/pubcrawl/as.php:1939 +#: ../../addon/pubcrawl/as.php:2147 ../../include/network.php:1767 +#: ../../Zotlabs/Lib/Activity.php:3114 ../../Zotlabs/Lib/Activity.php:3306 msgid "ActivityPub" msgstr "ActivityPub" -#: ../../addon/pubcrawl/as.php:2049 ../../addon/diaspora/Receiver.php:1641 -#: ../../Zotlabs/Module/Like.php:439 ../../Zotlabs/Module/Subthread.php:112 +#: ../../addon/pubcrawl/as.php:2101 ../../addon/diaspora/Receiver.php:1649 +#: ../../Zotlabs/Module/Like.php:439 ../../Zotlabs/Module/Subthread.php:115 msgid "status" msgstr "el mensaje de estado " -#: ../../addon/pubcrawl/as.php:2086 ../../addon/diaspora/Receiver.php:1587 +#: ../../addon/pubcrawl/as.php:2138 ../../addon/diaspora/Receiver.php:1595 #: ../../include/conversation.php:174 ../../Zotlabs/Module/Like.php:471 -#: ../../Zotlabs/Lib/Activity.php:3262 +#: ../../Zotlabs/Lib/Activity.php:3297 #, php-format msgid "%1$s likes %2$s's %3$s" msgstr "A %1$s le gusta %3$s de %2$s" -#: ../../addon/pubcrawl/as.php:2088 ../../include/conversation.php:177 -#: ../../Zotlabs/Module/Like.php:473 ../../Zotlabs/Lib/Activity.php:3264 +#: ../../addon/pubcrawl/as.php:2140 ../../include/conversation.php:177 +#: ../../Zotlabs/Module/Like.php:473 ../../Zotlabs/Lib/Activity.php:3299 #, php-format msgid "%1$s doesn't like %2$s's %3$s" msgstr "A %1$s no le gusta %3$s de %2$s" @@ -2219,12 +2217,12 @@ msgstr "Reunámonos aquí" #: ../../Zotlabs/Widget/Wiki_page_history.php:22 #: ../../Zotlabs/Module/Group.php:155 ../../Zotlabs/Module/Oauth.php:113 #: ../../Zotlabs/Module/Oauth.php:139 ../../Zotlabs/Module/Chat.php:257 -#: ../../Zotlabs/Module/Cdav.php:1372 +#: ../../Zotlabs/Module/Cdav.php:1373 #: ../../Zotlabs/Module/Sharedwithme.php:106 #: ../../Zotlabs/Module/Admin/Channels.php:159 #: ../../Zotlabs/Module/Oauth2.php:118 ../../Zotlabs/Module/Oauth2.php:146 -#: ../../Zotlabs/Module/Wiki.php:218 ../../Zotlabs/Module/Connedit.php:916 -#: ../../Zotlabs/Lib/NativeWikiPage.php:563 +#: ../../Zotlabs/Module/Wiki.php:217 ../../Zotlabs/Module/Connedit.php:916 +#: ../../Zotlabs/Lib/NativeWikiPage.php:576 #: ../../Zotlabs/Storage/Browser.php:377 msgid "Name" msgstr "Nombre" @@ -2232,7 +2230,7 @@ msgstr "Nombre" #: ../../addon/rendezvous/rendezvous.php:173 #: ../../addon/cart/submodules/hzservices.php:655 #: ../../addon/cart/submodules/manualcat.php:260 -#: ../../Zotlabs/Module/Cdav.php:1014 ../../Zotlabs/Module/Events.php:481 +#: ../../Zotlabs/Module/Cdav.php:1015 ../../Zotlabs/Module/Events.php:481 #: ../../Zotlabs/Module/Appman.php:145 ../../Zotlabs/Module/Rbmark.php:101 msgid "Description" msgstr "Descripción" @@ -2313,7 +2311,7 @@ msgid "You have no rendezvous. Press the button above to create a rendezvous!" msgstr "No tiene ninguna cita. ¡Presione el botón de arriba para crear una!" #: ../../addon/rendezvous/rendezvous.php:401 -#: ../../Zotlabs/Module/Setup.php:718 +#: ../../Zotlabs/Module/Setup.php:720 msgid "Errors encountered creating database tables." msgstr "Se han encontrado errores al crear las tablas de la base de datos." @@ -2373,10 +2371,11 @@ msgid "To:" msgstr "Para:" #: ../../addon/mail/Mod_Mail.php:161 ../../addon/mail/Mod_Mail.php:303 +#: ../../Zotlabs/Module/Invite.php:542 msgid "Subject:" msgstr "Asunto:" -#: ../../addon/mail/Mod_Mail.php:164 ../../Zotlabs/Module/Invite.php:157 +#: ../../addon/mail/Mod_Mail.php:164 ../../Zotlabs/Module/Invite.php:539 msgid "Your message:" msgstr "Su mensaje:" @@ -2848,7 +2847,8 @@ msgstr "Etiqueta" #: ../../addon/cart/submodules/orderoptions.php:358 #: ../../addon/cart/submodules/orderoptions.php:434 #: ../../addon/cart/submodules/orderoptions.php:458 -#: ../../include/datetime.php:211 ../../Zotlabs/Module/Events.php:468 +#: ../../include/js_strings.php:123 ../../include/datetime.php:211 +#: ../../Zotlabs/Module/Register.php:522 ../../Zotlabs/Module/Events.php:468 #: ../../Zotlabs/Module/Events.php:473 ../../Zotlabs/Module/Appman.php:143 #: ../../Zotlabs/Module/Appman.php:144 ../../Zotlabs/Module/Profiles.php:747 #: ../../Zotlabs/Module/Profiles.php:751 @@ -3086,7 +3086,7 @@ msgid "Unable to create a unique channel address. Import failed." msgstr "No se ha podido crear una dirección de canal única. Ha fallado la importación." #: ../../addon/diaspora/import_diaspora.php:142 -#: ../../Zotlabs/Module/Import.php:594 +#: ../../Zotlabs/Module/Import.php:595 msgid "Import completed." msgstr "Importación completada." @@ -3109,6 +3109,12 @@ msgstr "App Protocolo Diaspora" msgid "Allow any Diaspora member to comment or like your public posts" msgstr "Permitir que cualquier miembro de Diaspora comente o ponga un like en sus entradas públicas" +#: ../../addon/diaspora/Mod_Diaspora.php:77 +msgid "" +"If this setting is disabled only your contacts will be able to comment or " +"like your public posts" +msgstr "Si esta configuración está desactivada, sólo sus contactos podrán comentar o dar a \"me gusta\" en sus publicaciones públicas" + #: ../../addon/diaspora/Mod_Diaspora.php:81 msgid "Prevent your hashtags from being redirected to other sites" msgstr "Impedir que sus \"hashtags\" sean redirigidos a otros sitios " @@ -3126,22 +3132,22 @@ msgstr "\"Hashtags\" seguidos (separados por comas, sin incluir #)" msgid "Diaspora Protocol" msgstr "Protocolo Diaspora" -#: ../../addon/diaspora/Receiver.php:1591 +#: ../../addon/diaspora/Receiver.php:1599 #, php-format msgid "%1$s dislikes %2$s's %3$s" msgstr "a %1$s no le gusta el %3$s de %2$s" -#: ../../addon/diaspora/Receiver.php:2218 ../../Zotlabs/Module/Like.php:481 +#: ../../addon/diaspora/Receiver.php:2226 ../../Zotlabs/Module/Like.php:481 #, php-format msgid "%1$s is attending %2$s's %3$s" msgstr "%3$s de %2$s: %1$s participa" -#: ../../addon/diaspora/Receiver.php:2220 ../../Zotlabs/Module/Like.php:483 +#: ../../addon/diaspora/Receiver.php:2228 ../../Zotlabs/Module/Like.php:483 #, php-format msgid "%1$s is not attending %2$s's %3$s" msgstr "%3$s de %2$s: %1$s no participa" -#: ../../addon/diaspora/Receiver.php:2222 ../../Zotlabs/Module/Like.php:485 +#: ../../addon/diaspora/Receiver.php:2230 ../../Zotlabs/Module/Like.php:485 #, php-format msgid "%1$s may attend %2$s's %3$s" msgstr "%3$s de %2$s: %1$s quizá participe" @@ -3230,7 +3236,7 @@ msgid "Web link." msgstr "Enlace Web." #: ../../addon/workflow/workflow.php:2617 -#: ../../addon/workflow/workflow.php:2678 ../../Zotlabs/Module/Cdav.php:1374 +#: ../../addon/workflow/workflow.php:2678 ../../Zotlabs/Module/Cdav.php:1375 #: ../../Zotlabs/Module/Connedit.php:918 msgid "Title" msgstr "Título" @@ -3363,7 +3369,9 @@ msgctxt "opensearch" msgid "$Projectname" msgstr "$Projectname" -#: ../../addon/opensearch/opensearch.php:42 ../../Zotlabs/Module/Home.php:87 +#: ../../addon/opensearch/opensearch.php:42 +#: ../../Zotlabs/Module/Invite.php:225 ../../Zotlabs/Module/Invite.php:494 +#: ../../Zotlabs/Module/Invite.php:508 ../../Zotlabs/Module/Home.php:87 #: ../../Zotlabs/Module/Home.php:95 ../../Zotlabs/Lib/Enotify.php:66 msgid "$Projectname" msgstr "$Projectname" @@ -3436,7 +3444,7 @@ msgid "New registration" msgstr "Nuevo registro" #: ../../addon/notifyadmin/notifyadmin.php:40 -#: ../../Zotlabs/Module/Invite.php:90 +#: ../../Zotlabs/Module/Invite.php:252 #, php-format msgid "%s : Message delivery failed." msgstr "%s : Falló el envío del mensaje." @@ -3451,7 +3459,7 @@ msgid "Not allowed." msgstr "No permitido/a." #: ../../addon/flashcards/Mod_Flashcards.php:254 -#: ../../include/acl_selectors.php:153 ../../Zotlabs/Module/Chat.php:241 +#: ../../include/acl_selectors.php:154 ../../Zotlabs/Module/Chat.php:241 #: ../../Zotlabs/Module/Filestorage.php:195 #: ../../Zotlabs/Module/Photos.php:678 ../../Zotlabs/Module/Photos.php:1047 #: ../../Zotlabs/Module/Thing.php:321 ../../Zotlabs/Module/Thing.php:374 @@ -3465,12 +3473,12 @@ msgid "Set/edit permissions" msgstr "Establecer/editar los permisos" #: ../../addon/flashcards/Mod_Flashcards.php:284 -#: ../../addon/flashcards/Mod_Flashcards.php:285 ../../include/items.php:3924 +#: ../../addon/flashcards/Mod_Flashcards.php:285 ../../include/items.php:4010 #: ../../Zotlabs/Module/Filestorage.php:29 #: ../../Zotlabs/Module/Admin/Themes.php:72 #: ../../Zotlabs/Module/Admin/Addons.php:260 #: ../../Zotlabs/Module/Viewsrc.php:25 ../../Zotlabs/Module/Display.php:42 -#: ../../Zotlabs/Module/Display.php:432 ../../Zotlabs/Module/Admin.php:62 +#: ../../Zotlabs/Module/Display.php:424 ../../Zotlabs/Module/Admin.php:62 #: ../../Zotlabs/Module/Thing.php:96 msgid "Item not found." msgstr "Elemento no encontrado." @@ -3933,10 +3941,10 @@ msgstr "Publicar en Livejournal" msgid "Posted by" msgstr "Publicado por " -#: ../../addon/mdpost/mdpost.php:41 ../../include/text.php:2117 +#: ../../addon/mdpost/mdpost.php:41 ../../include/text.php:2118 #: ../../Zotlabs/Widget/Wiki_pages.php:38 -#: ../../Zotlabs/Widget/Wiki_pages.php:95 ../../Zotlabs/Module/Wiki.php:217 -#: ../../Zotlabs/Module/Wiki.php:371 +#: ../../Zotlabs/Widget/Wiki_pages.php:95 ../../Zotlabs/Module/Wiki.php:216 +#: ../../Zotlabs/Module/Wiki.php:370 msgid "Markdown" msgstr "Markdown" @@ -4057,11 +4065,11 @@ msgstr "Ajustes de XMPP" msgid "Invalid data packet" msgstr "Paquete de datos no válido" -#: ../../include/zot.php:805 ../../Zotlabs/Lib/Libzot.php:656 +#: ../../include/zot.php:805 ../../Zotlabs/Lib/Libzot.php:655 msgid "Unable to verify channel signature" msgstr "No ha sido posible de verificar la firma del canal" -#: ../../include/zot.php:2663 ../../Zotlabs/Lib/Libsync.php:737 +#: ../../include/zot.php:2663 ../../Zotlabs/Lib/Libsync.php:740 #, php-format msgid "Unable to verify site signature for %s" msgstr "No ha sido posible de verificar la firma del sitio para %s" @@ -4094,278 +4102,278 @@ msgstr "más antiguas" msgid "newer" msgstr "más recientes" -#: ../../include/text.php:1025 +#: ../../include/text.php:1018 msgid "No connections" msgstr "Sin conexiones" -#: ../../include/text.php:1037 ../../include/features.php:133 +#: ../../include/text.php:1030 ../../include/features.php:133 #: ../../Zotlabs/Module/Connections.php:375 ../../Zotlabs/Lib/Apps.php:333 msgid "Connections" msgstr "Conexiones" -#: ../../include/text.php:1045 ../../Zotlabs/Module/Viewconnections.php:80 +#: ../../include/text.php:1038 ../../Zotlabs/Module/Viewconnections.php:80 #: ../../Zotlabs/Module/Connections.php:289 msgid "Accepts" msgstr "Se acepta" -#: ../../include/text.php:1048 ../../Zotlabs/Module/Viewconnections.php:83 +#: ../../include/text.php:1041 ../../Zotlabs/Module/Viewconnections.php:83 #: ../../Zotlabs/Module/Connections.php:292 msgid "Comments" msgstr "Comentarios" -#: ../../include/text.php:1053 ../../Zotlabs/Module/Viewconnections.php:88 +#: ../../include/text.php:1046 ../../Zotlabs/Module/Viewconnections.php:88 #: ../../Zotlabs/Module/Connections.php:297 msgid "Stream items" msgstr "Elementos del stream" -#: ../../include/text.php:1058 ../../Zotlabs/Module/Viewconnections.php:93 +#: ../../include/text.php:1051 ../../Zotlabs/Module/Viewconnections.php:93 #: ../../Zotlabs/Module/Connections.php:302 msgid "Wall posts" msgstr "Entradas del Muro" -#: ../../include/text.php:1062 ../../Zotlabs/Module/Viewconnections.php:97 +#: ../../include/text.php:1055 ../../Zotlabs/Module/Viewconnections.php:97 #: ../../Zotlabs/Module/Connections.php:306 msgid "Nothing" msgstr "Nada" -#: ../../include/text.php:1077 +#: ../../include/text.php:1070 #, php-format msgid "View all %s connections" msgstr "Ver todas las %s conexiones" -#: ../../include/text.php:1140 +#: ../../include/text.php:1133 #, php-format msgid "Network: %s" msgstr "Red %s" -#: ../../include/text.php:1151 ../../include/text.php:1163 -#: ../../include/nav.php:194 ../../include/acl_selectors.php:148 +#: ../../include/text.php:1144 ../../include/text.php:1156 +#: ../../include/nav.php:194 ../../include/acl_selectors.php:149 #: ../../Zotlabs/Widget/Sitesearch.php:31 -#: ../../Zotlabs/Widget/Activity_filter.php:193 -#: ../../Zotlabs/Module/Search.php:46 ../../Zotlabs/Module/Connections.php:379 +#: ../../Zotlabs/Widget/Activity_filter.php:203 +#: ../../Zotlabs/Module/Search.php:45 ../../Zotlabs/Module/Connections.php:379 #: ../../Zotlabs/Lib/Apps.php:353 msgid "Search" msgstr "Buscar" -#: ../../include/text.php:1243 ../../include/text.php:1247 +#: ../../include/text.php:1236 ../../include/text.php:1240 msgid "poke" msgstr "un toque" -#: ../../include/text.php:1243 ../../include/text.php:1247 +#: ../../include/text.php:1236 ../../include/text.php:1240 #: ../../include/conversation.php:267 msgid "poked" msgstr "ha dado un toque a" -#: ../../include/text.php:1248 +#: ../../include/text.php:1241 msgid "ping" msgstr "un \"ping\"" -#: ../../include/text.php:1248 +#: ../../include/text.php:1241 msgid "pinged" msgstr "ha enviado un \"ping\" a" -#: ../../include/text.php:1249 +#: ../../include/text.php:1242 msgid "prod" msgstr "una incitación " -#: ../../include/text.php:1249 +#: ../../include/text.php:1242 msgid "prodded" msgstr "ha incitado a " -#: ../../include/text.php:1250 +#: ../../include/text.php:1243 msgid "slap" msgstr "una bofetada " -#: ../../include/text.php:1250 +#: ../../include/text.php:1243 msgid "slapped" msgstr "ha abofeteado a " -#: ../../include/text.php:1251 +#: ../../include/text.php:1244 msgid "finger" msgstr "un \"finger\" " -#: ../../include/text.php:1251 +#: ../../include/text.php:1244 msgid "fingered" msgstr "envió un \"finger\" a" -#: ../../include/text.php:1252 +#: ../../include/text.php:1245 msgid "rebuff" msgstr "un reproche" -#: ../../include/text.php:1252 +#: ../../include/text.php:1245 msgid "rebuffed" msgstr "ha hecho un reproche a " -#: ../../include/text.php:1275 +#: ../../include/text.php:1268 msgid "happy" msgstr "feliz " -#: ../../include/text.php:1276 +#: ../../include/text.php:1269 msgid "sad" msgstr "triste " -#: ../../include/text.php:1277 +#: ../../include/text.php:1270 msgid "mellow" msgstr "tranquilo/a" -#: ../../include/text.php:1278 +#: ../../include/text.php:1271 msgid "tired" msgstr "cansado/a " -#: ../../include/text.php:1279 +#: ../../include/text.php:1272 msgid "perky" msgstr "vivaz" -#: ../../include/text.php:1280 +#: ../../include/text.php:1273 msgid "angry" msgstr "enfadado/a" -#: ../../include/text.php:1281 +#: ../../include/text.php:1274 msgid "stupefied" msgstr "asombrado/a" -#: ../../include/text.php:1282 +#: ../../include/text.php:1275 msgid "puzzled" msgstr "perplejo/a" -#: ../../include/text.php:1283 +#: ../../include/text.php:1276 msgid "interested" msgstr "interesado/a" -#: ../../include/text.php:1284 +#: ../../include/text.php:1277 msgid "bitter" msgstr "amargado/a" -#: ../../include/text.php:1285 +#: ../../include/text.php:1278 msgid "cheerful" msgstr "alegre" -#: ../../include/text.php:1286 +#: ../../include/text.php:1279 msgid "alive" msgstr "animado/a" -#: ../../include/text.php:1287 +#: ../../include/text.php:1280 msgid "annoyed" msgstr "molesto/a" -#: ../../include/text.php:1288 +#: ../../include/text.php:1281 msgid "anxious" msgstr "ansioso/a" -#: ../../include/text.php:1289 +#: ../../include/text.php:1282 msgid "cranky" msgstr "de mal humor" -#: ../../include/text.php:1290 +#: ../../include/text.php:1283 msgid "disturbed" msgstr "perturbado/a" -#: ../../include/text.php:1291 +#: ../../include/text.php:1284 msgid "frustrated" msgstr "frustrado/a" -#: ../../include/text.php:1292 +#: ../../include/text.php:1285 msgid "depressed" msgstr "deprimido/a" -#: ../../include/text.php:1293 +#: ../../include/text.php:1286 msgid "motivated" msgstr "motivado/a" -#: ../../include/text.php:1294 +#: ../../include/text.php:1287 msgid "relaxed" msgstr "relajado/a" -#: ../../include/text.php:1295 +#: ../../include/text.php:1288 msgid "surprised" msgstr "sorprendido/a" -#: ../../include/text.php:1483 ../../include/js_strings.php:99 +#: ../../include/text.php:1476 ../../include/js_strings.php:99 msgid "Monday" msgstr "lunes" -#: ../../include/text.php:1483 ../../include/js_strings.php:100 +#: ../../include/text.php:1476 ../../include/js_strings.php:100 msgid "Tuesday" msgstr "martes" -#: ../../include/text.php:1483 ../../include/js_strings.php:101 +#: ../../include/text.php:1476 ../../include/js_strings.php:101 msgid "Wednesday" msgstr "miércoles" -#: ../../include/text.php:1483 ../../include/js_strings.php:102 +#: ../../include/text.php:1476 ../../include/js_strings.php:102 msgid "Thursday" msgstr "jueves" -#: ../../include/text.php:1483 ../../include/js_strings.php:103 +#: ../../include/text.php:1476 ../../include/js_strings.php:103 msgid "Friday" msgstr "viernes" -#: ../../include/text.php:1483 ../../include/js_strings.php:104 +#: ../../include/text.php:1476 ../../include/js_strings.php:104 msgid "Saturday" msgstr "sábado" -#: ../../include/text.php:1483 ../../include/js_strings.php:98 +#: ../../include/text.php:1476 ../../include/js_strings.php:98 msgid "Sunday" msgstr "domingo" -#: ../../include/text.php:1487 ../../include/js_strings.php:74 +#: ../../include/text.php:1480 ../../include/js_strings.php:74 msgid "January" msgstr "enero" -#: ../../include/text.php:1487 ../../include/js_strings.php:75 +#: ../../include/text.php:1480 ../../include/js_strings.php:75 msgid "February" msgstr "febrero" -#: ../../include/text.php:1487 ../../include/js_strings.php:76 +#: ../../include/text.php:1480 ../../include/js_strings.php:76 msgid "March" msgstr "marzo" -#: ../../include/text.php:1487 ../../include/js_strings.php:77 +#: ../../include/text.php:1480 ../../include/js_strings.php:77 msgid "April" msgstr "abril" -#: ../../include/text.php:1487 +#: ../../include/text.php:1480 msgid "May" msgstr "mayo" -#: ../../include/text.php:1487 ../../include/js_strings.php:79 +#: ../../include/text.php:1480 ../../include/js_strings.php:79 msgid "June" msgstr "junio" -#: ../../include/text.php:1487 ../../include/js_strings.php:80 +#: ../../include/text.php:1480 ../../include/js_strings.php:80 msgid "July" msgstr "julio" -#: ../../include/text.php:1487 ../../include/js_strings.php:81 +#: ../../include/text.php:1480 ../../include/js_strings.php:81 msgid "August" msgstr "agosto" -#: ../../include/text.php:1487 ../../include/js_strings.php:82 +#: ../../include/text.php:1480 ../../include/js_strings.php:82 msgid "September" msgstr "septiembre" -#: ../../include/text.php:1487 ../../include/js_strings.php:83 +#: ../../include/text.php:1480 ../../include/js_strings.php:83 msgid "October" msgstr "octubre" -#: ../../include/text.php:1487 ../../include/js_strings.php:84 +#: ../../include/text.php:1480 ../../include/js_strings.php:84 msgid "November" msgstr "noviembre" -#: ../../include/text.php:1487 ../../include/js_strings.php:85 +#: ../../include/text.php:1480 ../../include/js_strings.php:85 msgid "December" msgstr "diciembre" -#: ../../include/text.php:1561 +#: ../../include/text.php:1556 msgid "Unknown Attachment" msgstr "Adjunto no reconocido" -#: ../../include/text.php:1563 ../../Zotlabs/Module/Sharedwithme.php:108 +#: ../../include/text.php:1558 ../../Zotlabs/Module/Sharedwithme.php:108 #: ../../Zotlabs/Storage/Browser.php:379 msgid "Size" msgstr "Tamaño" -#: ../../include/text.php:1563 ../../include/feedutils.php:873 +#: ../../include/text.php:1558 ../../include/feedutils.php:872 msgid "unknown" msgstr "desconocido" @@ -4373,71 +4381,71 @@ msgstr "desconocido" msgid "remove category" msgstr "eliminar el tema" -#: ../../include/text.php:1675 +#: ../../include/text.php:1676 msgid "remove from file" msgstr "eliminar del fichero" -#: ../../include/text.php:1844 ../../include/message.php:13 +#: ../../include/text.php:1845 ../../include/message.php:13 msgid "Download binary/encrypted content" msgstr "Descargar contenido binario o cifrado" -#: ../../include/text.php:1915 +#: ../../include/text.php:1916 msgid "Poll has ended." msgstr "La encuesta ha terminado" -#: ../../include/text.php:1918 +#: ../../include/text.php:1919 #, php-format msgid "Poll ends: %s" msgstr "Finales de la encuesta: %s" -#: ../../include/text.php:1923 ../../Zotlabs/Lib/ThreadItem.php:446 +#: ../../include/text.php:1924 ../../Zotlabs/Lib/ThreadItem.php:446 msgid "Vote" msgstr "Votar" -#: ../../include/text.php:2075 ../../Zotlabs/Module/Events.php:669 +#: ../../include/text.php:2076 ../../Zotlabs/Module/Events.php:669 msgid "Link to Source" msgstr "Enlazar con la entrada en su ubicación original" -#: ../../include/text.php:2097 ../../include/language.php:424 +#: ../../include/text.php:2098 ../../include/language.php:428 msgid "default" msgstr "por defecto" -#: ../../include/text.php:2105 +#: ../../include/text.php:2106 msgid "Page layout" msgstr "Plantilla de la página" -#: ../../include/text.php:2105 +#: ../../include/text.php:2106 msgid "You can create your own with the layouts tool" msgstr "Puede crear su propia disposición gráfica con la herramienta de plantillas" -#: ../../include/text.php:2115 ../../Zotlabs/Widget/Wiki_pages.php:38 -#: ../../Zotlabs/Widget/Wiki_pages.php:95 ../../Zotlabs/Module/Wiki.php:217 -#: ../../Zotlabs/Module/Wiki.php:371 +#: ../../include/text.php:2116 ../../Zotlabs/Widget/Wiki_pages.php:38 +#: ../../Zotlabs/Widget/Wiki_pages.php:95 ../../Zotlabs/Module/Wiki.php:216 +#: ../../Zotlabs/Module/Wiki.php:370 msgid "BBcode" msgstr "BBcode" -#: ../../include/text.php:2116 +#: ../../include/text.php:2117 msgid "HTML" msgstr "HTML" -#: ../../include/text.php:2118 ../../Zotlabs/Widget/Wiki_pages.php:38 -#: ../../Zotlabs/Widget/Wiki_pages.php:95 ../../Zotlabs/Module/Wiki.php:217 +#: ../../include/text.php:2119 ../../Zotlabs/Widget/Wiki_pages.php:38 +#: ../../Zotlabs/Widget/Wiki_pages.php:95 ../../Zotlabs/Module/Wiki.php:216 msgid "Text" msgstr "Texto" -#: ../../include/text.php:2119 +#: ../../include/text.php:2120 msgid "Comanche Layout" msgstr "Plantilla de Comanche" -#: ../../include/text.php:2124 +#: ../../include/text.php:2125 msgid "PHP" msgstr "PHP" -#: ../../include/text.php:2133 +#: ../../include/text.php:2134 msgid "Page content type" msgstr "Tipo de contenido de la página" -#: ../../include/text.php:2256 ../../include/event.php:1259 +#: ../../include/text.php:2257 ../../include/event.php:1259 #: ../../include/conversation.php:132 #: ../../Zotlabs/Module/Channel_calendar.php:221 #: ../../Zotlabs/Module/Like.php:441 ../../Zotlabs/Module/Tagger.php:75 @@ -4445,110 +4453,110 @@ msgstr "Tipo de contenido de la página" msgid "event" msgstr "el/su evento" -#: ../../include/text.php:2259 ../../include/conversation.php:158 -#: ../../include/bbcode.php:543 ../../include/markdown.php:204 -#: ../../Zotlabs/Module/Tagger.php:79 ../../Zotlabs/Lib/Activity.php:3229 +#: ../../include/text.php:2260 ../../include/conversation.php:158 +#: ../../include/bbcode.php:555 ../../include/markdown.php:204 +#: ../../Zotlabs/Module/Tagger.php:79 ../../Zotlabs/Lib/Activity.php:3264 msgid "post" msgstr "la entrada" -#: ../../include/text.php:2261 ../../include/conversation.php:160 +#: ../../include/text.php:2262 ../../include/conversation.php:160 #: ../../Zotlabs/Module/Tagger.php:81 msgid "comment" msgstr "el comentario" -#: ../../include/text.php:2266 +#: ../../include/text.php:2267 msgid "activity" msgstr "la/su actividad" -#: ../../include/text.php:2269 +#: ../../include/text.php:2270 msgid "poll" msgstr "encuesta" -#: ../../include/text.php:2370 +#: ../../include/text.php:2383 msgid "a-z, 0-9, -, and _ only" msgstr "a-z, 0-9, -, and _ only" -#: ../../include/text.php:2696 +#: ../../include/text.php:2709 msgid "Design Tools" msgstr "Herramientas de diseño web" -#: ../../include/text.php:2699 ../../Zotlabs/Module/Blocks.php:154 +#: ../../include/text.php:2712 ../../Zotlabs/Module/Blocks.php:154 msgid "Blocks" msgstr "Bloques" -#: ../../include/text.php:2700 ../../Zotlabs/Module/Menu.php:171 +#: ../../include/text.php:2713 ../../Zotlabs/Module/Menu.php:171 msgid "Menus" msgstr "Menús" -#: ../../include/text.php:2701 ../../Zotlabs/Module/Layouts.php:184 +#: ../../include/text.php:2714 ../../Zotlabs/Module/Layouts.php:184 msgid "Layouts" msgstr "Plantillas" -#: ../../include/text.php:2702 +#: ../../include/text.php:2715 msgid "Pages" msgstr "Páginas" -#: ../../include/text.php:2714 +#: ../../include/text.php:2727 msgid "Import" msgstr "Importar" -#: ../../include/text.php:2715 +#: ../../include/text.php:2728 msgid "Import website..." msgstr "Importar un sitio web..." -#: ../../include/text.php:2716 +#: ../../include/text.php:2729 msgid "Select folder to import" msgstr "Seleccionar la carpeta que se va a importar" -#: ../../include/text.php:2717 +#: ../../include/text.php:2730 msgid "Import from a zipped folder:" msgstr "Importar desde una carpeta comprimida: " -#: ../../include/text.php:2718 +#: ../../include/text.php:2731 msgid "Import from cloud files:" msgstr "Importar desde los ficheros en la nube: " -#: ../../include/text.php:2719 +#: ../../include/text.php:2732 msgid "/cloud/channel/path/to/folder" msgstr "/cloud/canal/ruta/a la/carpeta" -#: ../../include/text.php:2720 +#: ../../include/text.php:2733 msgid "Enter path to website files" msgstr "Ruta a los ficheros del sitio web" -#: ../../include/text.php:2721 +#: ../../include/text.php:2734 msgid "Select folder" msgstr "Seleccionar la carpeta" -#: ../../include/text.php:2722 +#: ../../include/text.php:2735 msgid "Export website..." msgstr "Exportar un sitio web..." -#: ../../include/text.php:2723 +#: ../../include/text.php:2736 msgid "Export to a zip file" msgstr "Exportar a un fichero comprimido .zip" -#: ../../include/text.php:2724 +#: ../../include/text.php:2737 msgid "website.zip" msgstr "sitio_web.zip" -#: ../../include/text.php:2725 +#: ../../include/text.php:2738 msgid "Enter a name for the zip file." msgstr "Escriba un nombre para el fichero zip." -#: ../../include/text.php:2726 +#: ../../include/text.php:2739 msgid "Export to cloud files" msgstr "Exportar a la nube de ficheros" -#: ../../include/text.php:2727 +#: ../../include/text.php:2740 msgid "/path/to/export/folder" msgstr "/ruta/para/exportar/carpeta" -#: ../../include/text.php:2728 +#: ../../include/text.php:2741 msgid "Enter a path to a cloud files destination." msgstr "Escriba una ruta de destino a la nube de ficheros." -#: ../../include/text.php:2729 +#: ../../include/text.php:2742 msgid "Specify folder" msgstr "Especificar una carpeta" @@ -4570,7 +4578,7 @@ msgid "Finishes:" msgstr "Finaliza:" #: ../../include/event.php:63 ../../include/event.php:134 -#: ../../include/channel.php:1634 ../../Zotlabs/Module/Directory.php:354 +#: ../../include/channel.php:1658 ../../Zotlabs/Module/Directory.php:354 msgid "Location:" msgstr "Ubicación:" @@ -4611,13 +4619,13 @@ msgid "Cancelled" msgstr "Cancelado/a" #: ../../include/event.php:1422 ../../include/connections.php:734 -#: ../../Zotlabs/Module/Cdav.php:1381 ../../Zotlabs/Module/Profiles.php:794 +#: ../../Zotlabs/Module/Cdav.php:1382 ../../Zotlabs/Module/Profiles.php:794 #: ../../Zotlabs/Module/Connedit.php:925 msgid "Mobile" msgstr "Móvil" #: ../../include/event.php:1423 ../../include/connections.php:735 -#: ../../Zotlabs/Module/Cdav.php:1382 ../../Zotlabs/Module/Profiles.php:795 +#: ../../Zotlabs/Module/Cdav.php:1383 ../../Zotlabs/Module/Profiles.php:795 #: ../../Zotlabs/Module/Connedit.php:926 msgid "Home" msgstr "Inicio" @@ -4631,7 +4639,7 @@ msgid "Home, Fax" msgstr "Fax particular" #: ../../include/event.php:1426 ../../include/connections.php:738 -#: ../../Zotlabs/Module/Cdav.php:1383 ../../Zotlabs/Module/Profiles.php:796 +#: ../../Zotlabs/Module/Cdav.php:1384 ../../Zotlabs/Module/Profiles.php:796 #: ../../Zotlabs/Module/Connedit.php:927 msgid "Work" msgstr "Trabajo" @@ -4648,7 +4656,7 @@ msgstr "Fax de trabajo" #: ../../include/selectors.php:60 ../../include/selectors.php:77 #: ../../include/selectors.php:115 ../../include/selectors.php:151 #: ../../include/connections.php:741 ../../include/connections.php:748 -#: ../../Zotlabs/Module/Cdav.php:1384 ../../Zotlabs/Module/Profiles.php:797 +#: ../../Zotlabs/Module/Cdav.php:1385 ../../Zotlabs/Module/Profiles.php:797 #: ../../Zotlabs/Module/Connedit.php:928 #: ../../Zotlabs/Access/PermissionRoles.php:310 msgid "Other" @@ -4666,8 +4674,8 @@ msgstr "Desactivado" msgid "On" msgstr "Activado" -#: ../../include/features.php:82 ../../include/nav.php:464 -#: ../../include/nav.php:467 ../../Zotlabs/Lib/Apps.php:346 +#: ../../include/features.php:82 ../../include/nav.php:463 +#: ../../include/nav.php:466 ../../Zotlabs/Lib/Apps.php:346 msgid "Calendar" msgstr "Calendario" @@ -4707,11 +4715,11 @@ msgstr "Nube de etiquetas" msgid "Provide a personal tag cloud on your channel page" msgstr "Proveer nube de etiquetas personal en su página de canal" -#: ../../include/features.php:124 ../../include/features.php:359 +#: ../../include/features.php:124 ../../include/features.php:358 msgid "Use blog/list mode" msgstr "Usar el modo blog/lista" -#: ../../include/features.php:125 ../../include/features.php:360 +#: ../../include/features.php:125 ../../include/features.php:359 msgid "Comments will be displayed separately" msgstr "Los comentarios se mostrarán por separado" @@ -4783,195 +4791,195 @@ msgstr "Temas de las entradas" msgid "Add categories to your posts" msgstr "Añadir temas a sus publicaciones" -#: ../../include/features.php:219 +#: ../../include/features.php:218 msgid "Large Photos" msgstr "Fotos de gran tamaño" -#: ../../include/features.php:220 +#: ../../include/features.php:219 msgid "" "Include large (1024px) photo thumbnails in posts. If not enabled, use small " "(640px) photo thumbnails" msgstr "Incluir miniaturas de fotos grandes (1024px) en publicaciones. Si no está habilitado, usar miniaturas pequeñas (640px)" -#: ../../include/features.php:227 +#: ../../include/features.php:226 msgid "Even More Encryption" msgstr "Más cifrado todavía" -#: ../../include/features.php:228 +#: ../../include/features.php:227 msgid "" "Allow optional encryption of content end-to-end with a shared secret key" msgstr "Permitir cifrado adicional de contenido \"punto-a-punto\" con una clave secreta compartida." -#: ../../include/features.php:235 +#: ../../include/features.php:234 msgid "Disable Comments" msgstr "Deshabilitar comentarios" -#: ../../include/features.php:236 +#: ../../include/features.php:235 msgid "Provide the option to disable comments for a post" msgstr "Proporcionar la opción de desactivar los comentarios para una entrada" -#: ../../include/features.php:243 +#: ../../include/features.php:242 msgid "Delayed Posting" msgstr "Publicación aplazada" -#: ../../include/features.php:244 +#: ../../include/features.php:243 msgid "Allow posts to be published at a later date" msgstr "Permitir mensajes que se publicarán en una fecha posterior" -#: ../../include/features.php:251 +#: ../../include/features.php:250 msgid "Content Expiration" msgstr "Caducidad del contenido" -#: ../../include/features.php:252 +#: ../../include/features.php:251 msgid "Remove posts/comments and/or private messages at a future time" msgstr "Eliminar publicaciones/comentarios y/o mensajes privados más adelante" -#: ../../include/features.php:259 +#: ../../include/features.php:258 msgid "Suppress Duplicate Posts/Comments" msgstr "Prevenir entradas o comentarios duplicados" -#: ../../include/features.php:260 +#: ../../include/features.php:259 msgid "" "Prevent posts with identical content to be published with less than two " "minutes in between submissions." msgstr "Prevenir que entradas con contenido idéntico se publiquen con menos de dos minutos de intervalo." -#: ../../include/features.php:267 +#: ../../include/features.php:266 msgid "Auto-save drafts of posts and comments" msgstr "Guardar automáticamente borradores de entradas y comentarios" -#: ../../include/features.php:268 +#: ../../include/features.php:267 msgid "" "Automatically saves post and comment drafts in local browser storage to help" " prevent accidental loss of compositions" msgstr "Guarda automáticamente los borradores de comentarios y publicaciones en el almacenamiento del navegador local para ayudar a evitar la pérdida accidental de composiciones." -#: ../../include/features.php:277 +#: ../../include/features.php:276 msgid "Manage" msgstr "Gestionar" -#: ../../include/features.php:281 +#: ../../include/features.php:280 msgid "Navigation Channel Select" msgstr "Navegación por el selector de canales" -#: ../../include/features.php:282 +#: ../../include/features.php:281 msgid "Change channels directly from within the navigation dropdown menu" msgstr "Cambiar de canales directamente desde el menú de navegación desplegable" -#: ../../include/features.php:291 ../../Zotlabs/Module/Connections.php:333 +#: ../../include/features.php:290 ../../Zotlabs/Module/Connections.php:333 msgid "Network" msgstr "Red" -#: ../../include/features.php:295 +#: ../../include/features.php:294 msgid "Events Filter" msgstr "Filtro de eventos" -#: ../../include/features.php:296 +#: ../../include/features.php:295 msgid "Ability to display only events" msgstr "Capacidad para mostrar solo eventos" -#: ../../include/features.php:303 +#: ../../include/features.php:302 msgid "Polls Filter" msgstr "Filtro de encuestas" -#: ../../include/features.php:304 +#: ../../include/features.php:303 msgid "Ability to display only polls" msgstr "Capacidad para mostrar solo encuestas" -#: ../../include/features.php:311 ../../Zotlabs/Widget/Savedsearch.php:83 +#: ../../include/features.php:310 ../../Zotlabs/Widget/Savedsearch.php:83 msgid "Saved Searches" msgstr "Búsquedas guardadas" -#: ../../include/features.php:312 +#: ../../include/features.php:311 msgid "Save search terms for re-use" msgstr "Guardar términos de búsqueda para su reutilización" -#: ../../include/features.php:319 ../../include/contact_widgets.php:53 -#: ../../Zotlabs/Widget/Activity_filter.php:179 +#: ../../include/features.php:318 ../../include/contact_widgets.php:53 +#: ../../Zotlabs/Widget/Activity_filter.php:189 #: ../../Zotlabs/Widget/Filer.php:28 msgid "Saved Folders" msgstr "Carpetas guardadas" -#: ../../include/features.php:320 +#: ../../include/features.php:319 msgid "Ability to file posts under folders" msgstr "Capacidad de archivar entradas en carpetas" -#: ../../include/features.php:327 +#: ../../include/features.php:326 msgid "Alternate Stream Order" msgstr "Orden de stream alternativo" -#: ../../include/features.php:328 +#: ../../include/features.php:327 msgid "" "Ability to order the stream by last post date, last comment date or " "unthreaded activities" msgstr "Posibilidad de ordenar el stream por última fecha de publicación, última fecha de comentario o actividades sin hilo" -#: ../../include/features.php:335 +#: ../../include/features.php:334 msgid "Contact Filter" msgstr "Filtro de contactos" -#: ../../include/features.php:336 +#: ../../include/features.php:335 msgid "Ability to display only posts of a selected contact" msgstr "Posibilidad de mostrar sólo los mensajes de un contacto seleccionado" -#: ../../include/features.php:343 +#: ../../include/features.php:342 msgid "Forum Filter" msgstr "Filtro de foro" -#: ../../include/features.php:344 +#: ../../include/features.php:343 msgid "Ability to display only posts of a specific forum" msgstr "Posibilidad de mostrar sólo los mensajes de un foro específico" -#: ../../include/features.php:351 +#: ../../include/features.php:350 msgid "Personal Posts Filter" msgstr "Filtro de entradas personales" -#: ../../include/features.php:352 +#: ../../include/features.php:351 msgid "Ability to display only posts that you've interacted on" msgstr "Posibilidad de mostrar sólo los mensajes en los que usted haya interactuado" -#: ../../include/features.php:369 ../../include/nav.php:445 +#: ../../include/features.php:368 ../../include/nav.php:444 #: ../../Zotlabs/Module/Fbrowser.php:29 ../../Zotlabs/Lib/Apps.php:345 msgid "Photos" msgstr "Fotos" -#: ../../include/features.php:373 +#: ../../include/features.php:372 msgid "Photo Location" msgstr "Ubicación de las fotos" -#: ../../include/features.php:374 +#: ../../include/features.php:373 msgid "If location data is available on uploaded photos, link this to a map." msgstr "Si los datos de ubicación están disponibles en las fotos subidas, enlazar estas a un mapa." -#: ../../include/features.php:383 ../../Zotlabs/Lib/Apps.php:363 +#: ../../include/features.php:382 ../../Zotlabs/Lib/Apps.php:363 msgid "Profiles" msgstr "Perfiles" -#: ../../include/features.php:387 +#: ../../include/features.php:386 msgid "Advanced Profiles" msgstr "Perfiles avanzados" -#: ../../include/features.php:388 +#: ../../include/features.php:387 msgid "Additional profile sections and selections" msgstr "Secciones y selecciones de perfil adicionales" -#: ../../include/features.php:395 +#: ../../include/features.php:394 msgid "Profile Import/Export" msgstr "Importar/Exportar perfil" -#: ../../include/features.php:396 +#: ../../include/features.php:395 msgid "Save and load profile details across sites/channels" msgstr "Guardar y cargar detalles del perfil a través de sitios/canales" -#: ../../include/features.php:403 +#: ../../include/features.php:402 msgid "Multiple Profiles" msgstr "Múltiples perfiles" -#: ../../include/features.php:404 +#: ../../include/features.php:403 msgid "Ability to create multiple profiles" msgstr "Capacidad de crear múltiples perfiles" -#: ../../include/security.php:608 +#: ../../include/security.php:607 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." @@ -5010,7 +5018,7 @@ msgstr "%s contraer" msgid "Password too short" msgstr "Contraseña demasiado corta" -#: ../../include/js_strings.php:12 +#: ../../include/js_strings.php:12 ../../Zotlabs/Module/Register.php:158 msgid "Passwords do not match" msgstr "Las contraseñas no coinciden" @@ -5060,7 +5068,7 @@ msgid "Unsaved changes. Are you sure you wish to leave this page?" msgstr "Cambios no guardados. ¿Está seguro de que desea abandonar la página?" #: ../../include/js_strings.php:25 ../../Zotlabs/Module/Pubsites.php:53 -#: ../../Zotlabs/Module/Cdav.php:1015 ../../Zotlabs/Module/Events.php:483 +#: ../../Zotlabs/Module/Cdav.php:1016 ../../Zotlabs/Module/Events.php:483 #: ../../Zotlabs/Module/Profiles.php:511 ../../Zotlabs/Module/Profiles.php:736 #: ../../Zotlabs/Module/Locs.php:128 msgid "Location" @@ -5120,7 +5128,7 @@ msgstr "Anclado/a" msgid "Pin to the top" msgstr "Anclar en la parte superior" -#: ../../include/js_strings.php:39 ../../Zotlabs/Widget/Pinned.php:157 +#: ../../include/js_strings.php:39 ../../Zotlabs/Widget/Pinned.php:155 #: ../../Zotlabs/Lib/ThreadItem.php:473 msgid "Unpin from the top" msgstr "Desanclar de la parte superior" @@ -5319,12 +5327,16 @@ msgstr "Todos los días" msgid "Please stand by while your download is being prepared." msgstr "Por favor, espere mientras se prepara la descarga." +#: ../../include/js_strings.php:122 +msgid "Email address not valid" +msgstr "Dirección de correo electrónica no válida" + #: ../../include/help.php:80 msgid "Help:" msgstr "Ayuda:" #: ../../include/help.php:117 ../../include/help.php:125 -#: ../../include/nav.php:180 ../../include/nav.php:321 +#: ../../include/nav.php:180 ../../include/nav.php:320 #: ../../Zotlabs/Module/Layouts.php:186 ../../Zotlabs/Lib/Apps.php:348 msgid "Help" msgstr "Ayuda" @@ -5336,7 +5348,7 @@ msgstr "No encontrado" #: ../../include/help.php:132 ../../Zotlabs/Module/Display.php:136 #: ../../Zotlabs/Module/Display.php:153 ../../Zotlabs/Module/Display.php:173 #: ../../Zotlabs/Module/Display.php:179 ../../Zotlabs/Module/Page.php:136 -#: ../../Zotlabs/Module/Block.php:77 ../../Zotlabs/Lib/NativeWikiPage.php:520 +#: ../../Zotlabs/Module/Block.php:77 ../../Zotlabs/Lib/NativeWikiPage.php:533 #: ../../Zotlabs/Web/Router.php:186 msgid "Page not found." msgstr "Página no encontrada." @@ -5369,7 +5381,7 @@ msgctxt "photo_upload" msgid "%1$s posted %2$s to %3$s" msgstr "%1$s ha publicado %2$s en %3$s" -#: ../../include/photos.php:666 ../../include/nav.php:448 +#: ../../include/photos.php:666 ../../include/nav.php:447 msgid "Photo Albums" msgstr "Álbumes de fotos" @@ -5382,43 +5394,43 @@ msgstr "Fotos recientes" msgid "Upload New Photos" msgstr "Subir nuevas fotos" -#: ../../include/network.php:1758 ../../include/network.php:1759 +#: ../../include/network.php:1762 ../../include/network.php:1763 msgid "Friendica" msgstr "Friendica" -#: ../../include/network.php:1760 +#: ../../include/network.php:1764 msgid "OStatus" msgstr "OStatus" -#: ../../include/network.php:1761 +#: ../../include/network.php:1765 msgid "GNU-Social" msgstr "GNU Social" -#: ../../include/network.php:1762 +#: ../../include/network.php:1766 msgid "RSS/Atom" msgstr "RSS/Atom" -#: ../../include/network.php:1765 +#: ../../include/network.php:1769 msgid "Diaspora" msgstr "Diaspora" -#: ../../include/network.php:1766 +#: ../../include/network.php:1770 msgid "Facebook" msgstr "Facebook" -#: ../../include/network.php:1767 +#: ../../include/network.php:1771 msgid "Zot" msgstr "Zot" -#: ../../include/network.php:1768 +#: ../../include/network.php:1772 msgid "LinkedIn" msgstr "LinkedIn" -#: ../../include/network.php:1769 +#: ../../include/network.php:1773 msgid "XMPP/IM" msgstr "XMPP/IM" -#: ../../include/network.php:1770 +#: ../../include/network.php:1774 msgid "MySpace" msgstr "MySpace" @@ -5452,8 +5464,8 @@ msgid_plural "%d invitations available" msgstr[0] "%d invitación pendiente" msgstr[1] "%d invitaciones disponibles" -#: ../../include/contact_widgets.php:16 ../../include/acl_selectors.php:144 -#: ../../Zotlabs/Module/Admin/Site.php:297 +#: ../../include/contact_widgets.php:16 ../../include/acl_selectors.php:145 +#: ../../Zotlabs/Module/Admin/Site.php:416 msgid "Advanced" msgstr "Avanzado" @@ -5508,7 +5520,7 @@ msgstr "Todo" #: ../../include/taxonomy.php:420 ../../include/taxonomy.php:502 #: ../../include/taxonomy.php:522 ../../include/taxonomy.php:543 #: ../../Zotlabs/Widget/Appcategories.php:43 -#: ../../Zotlabs/Module/Cdav.php:1070 ../../Zotlabs/Storage/Browser.php:293 +#: ../../Zotlabs/Module/Cdav.php:1071 ../../Zotlabs/Storage/Browser.php:293 #: ../../Zotlabs/Storage/Browser.php:388 ../../Zotlabs/Storage/Browser.php:403 msgid "Categories" msgstr "Temas" @@ -5522,7 +5534,7 @@ msgstr "Conexiones comunes" msgid "View all %d common connections" msgstr "Ver todas las %d conexiones comunes" -#: ../../include/language.php:437 +#: ../../include/language.php:441 msgid "Select an alternate language" msgstr "Seleccionar un idioma alternativo" @@ -5556,9 +5568,9 @@ msgstr "Administración de canales" msgid "Manage your channels" msgstr "Gestionar sus canales" -#: ../../include/nav.php:104 ../../include/group.php:321 -#: ../../include/acl_selectors.php:86 -#: ../../Zotlabs/Widget/Activity_filter.php:82 +#: ../../include/nav.php:104 ../../include/group.php:327 +#: ../../include/acl_selectors.php:87 +#: ../../Zotlabs/Widget/Activity_filter.php:88 #: ../../Zotlabs/Module/Group.php:142 ../../Zotlabs/Module/Group.php:154 #: ../../Zotlabs/Lib/Group.php:324 ../../Zotlabs/Lib/Apps.php:364 msgid "Privacy Groups" @@ -5580,7 +5592,7 @@ msgid "Account/Channel Settings" msgstr "Ajustes de cuenta/canales" #: ../../include/nav.php:112 ../../include/nav.php:142 -#: ../../include/nav.php:163 ../../boot.php:1710 +#: ../../include/nav.php:163 ../../boot.php:1715 msgid "Logout" msgstr "Finalizar sesión" @@ -5592,7 +5604,7 @@ msgstr "Finalizar esta sesión" msgid "Your profile page" msgstr "Su página del perfil" -#: ../../include/nav.php:118 ../../include/channel.php:1539 +#: ../../include/nav.php:118 ../../include/channel.php:1563 #: ../../Zotlabs/Module/Profiles.php:832 msgid "Edit Profiles" msgstr "Editar perfiles" @@ -5606,7 +5618,7 @@ msgid "Edit your profile" msgstr "Editar su perfil" #: ../../include/nav.php:127 ../../include/nav.php:131 -#: ../../Zotlabs/Lib/Apps.php:336 ../../boot.php:1711 +#: ../../Zotlabs/Lib/Apps.php:336 ../../boot.php:1716 msgid "Login" msgstr "Iniciar sesión" @@ -5622,8 +5634,8 @@ msgstr "Volver a la página principal" msgid "Log me out of this site" msgstr "Salir de este sitio" -#: ../../include/nav.php:168 ../../Zotlabs/Module/Register.php:293 -#: ../../boot.php:1691 +#: ../../include/nav.php:168 ../../Zotlabs/Module/Register.php:566 +#: ../../boot.php:1696 msgid "Register" msgstr "Registrarse" @@ -5647,104 +5659,104 @@ msgstr "Administrador" msgid "Site Setup and Configuration" msgstr "Ajustes y configuración del sitio" -#: ../../include/nav.php:325 ../../Zotlabs/Widget/Notifications.php:182 +#: ../../include/nav.php:324 ../../Zotlabs/Widget/Notifications.php:182 #: ../../Zotlabs/Module/New_channel.php:157 #: ../../Zotlabs/Module/New_channel.php:164 #: ../../Zotlabs/Module/Defperms.php:257 ../../Zotlabs/Module/Connedit.php:862 msgid "Loading" msgstr "Cargando" -#: ../../include/nav.php:331 +#: ../../include/nav.php:330 msgid "@name, !forum, #tag, ?doc, content" msgstr "@nombre, !foro, #tag, ?docs, contenido" -#: ../../include/nav.php:332 +#: ../../include/nav.php:331 msgid "Please wait..." msgstr "Espere por favor…" -#: ../../include/nav.php:338 +#: ../../include/nav.php:337 msgid "Add Apps" msgstr "Añadir aplicaciones" -#: ../../include/nav.php:339 +#: ../../include/nav.php:338 msgid "Arrange Apps" msgstr "Organizar aplicaciones" -#: ../../include/nav.php:340 +#: ../../include/nav.php:339 msgid "Toggle System Apps" msgstr "Alternar aplicaciones de sistema" -#: ../../include/nav.php:422 ../../Zotlabs/Module/Admin/Channels.php:154 +#: ../../include/nav.php:421 ../../Zotlabs/Module/Admin/Channels.php:154 msgid "Channel" msgstr "Canal" -#: ../../include/nav.php:425 +#: ../../include/nav.php:424 msgid "Status Messages and Posts" msgstr "Mensajes de estado y publicaciones" -#: ../../include/nav.php:435 ../../Zotlabs/Module/Help.php:83 +#: ../../include/nav.php:434 ../../Zotlabs/Module/Help.php:83 msgid "About" msgstr "Mi perfil" -#: ../../include/nav.php:438 +#: ../../include/nav.php:437 msgid "Profile Details" msgstr "Detalles del perfil" -#: ../../include/nav.php:453 ../../Zotlabs/Module/Fbrowser.php:85 +#: ../../include/nav.php:452 ../../Zotlabs/Module/Fbrowser.php:85 #: ../../Zotlabs/Lib/Apps.php:340 ../../Zotlabs/Storage/Browser.php:351 msgid "Files" msgstr "Ficheros" -#: ../../include/nav.php:456 +#: ../../include/nav.php:455 msgid "Files and Storage" msgstr "Ficheros y repositorio" -#: ../../include/nav.php:478 ../../include/nav.php:481 +#: ../../include/nav.php:477 ../../include/nav.php:480 #: ../../Zotlabs/Widget/Chatroom_list.php:16 ../../Zotlabs/Lib/Apps.php:330 msgid "Chatrooms" msgstr "Salas de chat" -#: ../../include/nav.php:491 ../../Zotlabs/Lib/Apps.php:329 +#: ../../include/nav.php:490 ../../Zotlabs/Lib/Apps.php:329 msgid "Bookmarks" msgstr "Marcadores" -#: ../../include/nav.php:494 +#: ../../include/nav.php:493 msgid "Saved Bookmarks" msgstr "Marcadores guardados" -#: ../../include/nav.php:502 ../../Zotlabs/Module/Cards.php:207 +#: ../../include/nav.php:501 ../../Zotlabs/Module/Cards.php:207 #: ../../Zotlabs/Lib/Apps.php:326 msgid "Cards" msgstr "Fichas" -#: ../../include/nav.php:505 +#: ../../include/nav.php:504 msgid "View Cards" msgstr "Ver las fichas" -#: ../../include/nav.php:513 ../../Zotlabs/Module/Articles.php:225 +#: ../../include/nav.php:512 ../../Zotlabs/Module/Articles.php:225 #: ../../Zotlabs/Lib/Apps.php:325 msgid "Articles" msgstr "Artículos" -#: ../../include/nav.php:516 +#: ../../include/nav.php:515 msgid "View Articles" msgstr "Ver los artículos" -#: ../../include/nav.php:525 ../../Zotlabs/Module/Webpages.php:252 +#: ../../include/nav.php:524 ../../Zotlabs/Module/Webpages.php:252 #: ../../Zotlabs/Lib/Apps.php:341 msgid "Webpages" msgstr "Páginas web" -#: ../../include/nav.php:528 +#: ../../include/nav.php:527 msgid "View Webpages" msgstr "Ver páginas web" -#: ../../include/nav.php:537 ../../Zotlabs/Widget/Wiki_list.php:15 -#: ../../Zotlabs/Module/Wiki.php:206 +#: ../../include/nav.php:536 ../../Zotlabs/Widget/Wiki_list.php:15 +#: ../../Zotlabs/Module/Wiki.php:205 msgid "Wikis" msgstr "Wikis" -#: ../../include/nav.php:540 ../../Zotlabs/Lib/Apps.php:342 +#: ../../include/nav.php:539 ../../Zotlabs/Lib/Apps.php:342 msgid "Wiki" msgstr "Wiki" @@ -5781,7 +5793,7 @@ msgstr "Edad:" msgid "YYYY-MM-DD or MM-DD" msgstr "AAAA-MM-DD o MM-DD" -#: ../../include/datetime.php:238 ../../boot.php:2715 +#: ../../include/datetime.php:238 ../../boot.php:2730 msgid "never" msgstr "nunca" @@ -6002,9 +6014,9 @@ msgstr "Seleccionar" #: ../../include/conversation.php:730 ../../include/conversation.php:777 #: ../../Zotlabs/Module/Article_edit.php:129 #: ../../Zotlabs/Module/Card_edit.php:130 ../../Zotlabs/Module/Oauth.php:174 -#: ../../Zotlabs/Module/Editwebpage.php:167 ../../Zotlabs/Module/Cdav.php:1056 -#: ../../Zotlabs/Module/Cdav.php:1389 ../../Zotlabs/Module/Webpages.php:257 -#: ../../Zotlabs/Module/Admin/Accounts.php:175 +#: ../../Zotlabs/Module/Editwebpage.php:167 ../../Zotlabs/Module/Cdav.php:1057 +#: ../../Zotlabs/Module/Cdav.php:1390 ../../Zotlabs/Module/Webpages.php:257 +#: ../../Zotlabs/Module/Admin/Accounts.php:320 #: ../../Zotlabs/Module/Admin/Channels.php:149 #: ../../Zotlabs/Module/Admin/Profs.php:176 #: ../../Zotlabs/Module/Blocks.php:162 ../../Zotlabs/Module/Editblock.php:139 @@ -6037,7 +6049,7 @@ msgid "Message signature incorrect" msgstr "Firma de mensaje incorrecta" #: ../../include/conversation.php:776 -#: ../../Zotlabs/Module/Admin/Accounts.php:173 +#: ../../Zotlabs/Module/Admin/Accounts.php:318 #: ../../Zotlabs/Module/Connections.php:343 msgid "Approve" msgstr "Aprobar" @@ -6055,19 +6067,19 @@ msgstr "Temas:" msgid "Filed under:" msgstr "Archivado bajo:" -#: ../../include/conversation.php:809 ../../Zotlabs/Widget/Pinned.php:133 +#: ../../include/conversation.php:809 ../../Zotlabs/Widget/Pinned.php:132 #: ../../Zotlabs/Lib/ThreadItem.php:430 #, php-format msgid "from %s" msgstr "desde %s" -#: ../../include/conversation.php:812 ../../Zotlabs/Widget/Pinned.php:136 +#: ../../include/conversation.php:812 ../../Zotlabs/Widget/Pinned.php:135 #: ../../Zotlabs/Lib/ThreadItem.php:433 #, php-format msgid "last edited: %s" msgstr "último cambio: %s" -#: ../../include/conversation.php:813 ../../Zotlabs/Widget/Pinned.php:137 +#: ../../include/conversation.php:813 ../../Zotlabs/Widget/Pinned.php:136 #: ../../Zotlabs/Lib/ThreadItem.php:434 #, php-format msgid "Expires: %s" @@ -6115,7 +6127,7 @@ msgid "Recent Activity" msgstr "Actividad reciente" #: ../../include/conversation.php:1103 ../../include/connections.php:110 -#: ../../include/channel.php:1619 ../../Zotlabs/Widget/Suggestions.php:46 +#: ../../include/channel.php:1643 ../../Zotlabs/Widget/Suggestions.php:46 #: ../../Zotlabs/Widget/Follow.php:32 ../../Zotlabs/Module/Directory.php:370 #: ../../Zotlabs/Module/Connections.php:350 #: ../../Zotlabs/Module/Suggest.php:71 @@ -6127,6 +6139,7 @@ msgid "Edit Connection" msgstr "Editar conexión" #: ../../include/conversation.php:1123 +#: ../../Zotlabs/Module/Admin/Accounts.php:347 msgid "Message" msgstr "Mensaje" @@ -6185,40 +6198,40 @@ msgstr "A %s le gusta esto." msgid "%s don't like this." msgstr "A %s no le gusta esto." -#: ../../include/conversation.php:1465 +#: ../../include/conversation.php:1464 msgid "Toggle poll" msgstr "Activar o desactivar encuestas" -#: ../../include/conversation.php:1466 +#: ../../include/conversation.php:1465 msgid "Option" msgstr "Opción" -#: ../../include/conversation.php:1467 +#: ../../include/conversation.php:1466 msgid "Add option" msgstr "Añadir una opción" -#: ../../include/conversation.php:1468 +#: ../../include/conversation.php:1467 msgid "Minutes" msgstr "Minutos " -#: ../../include/conversation.php:1468 +#: ../../include/conversation.php:1467 msgid "Hours" msgstr "Horas " -#: ../../include/conversation.php:1468 +#: ../../include/conversation.php:1467 msgid "Days" msgstr "Días " -#: ../../include/conversation.php:1469 +#: ../../include/conversation.php:1468 msgid "Allow multiple answers" msgstr "Permitir respuestas múltiples" -#: ../../include/conversation.php:1479 +#: ../../include/conversation.php:1478 msgid "Summary (optional)" msgstr "Sumario (opcional)" -#: ../../include/conversation.php:1753 ../../include/taxonomy.php:670 -#: ../../include/channel.php:1782 ../../Zotlabs/Module/Photos.php:1136 +#: ../../include/conversation.php:1752 ../../include/taxonomy.php:670 +#: ../../include/channel.php:1806 ../../Zotlabs/Module/Photos.php:1136 #: ../../Zotlabs/Lib/ThreadItem.php:243 msgctxt "noun" msgid "Like" @@ -6226,7 +6239,7 @@ msgid_plural "Likes" msgstr[0] "Me gusta" msgstr[1] "Me gusta" -#: ../../include/conversation.php:1756 ../../Zotlabs/Module/Photos.php:1141 +#: ../../include/conversation.php:1755 ../../Zotlabs/Module/Photos.php:1141 #: ../../Zotlabs/Lib/ThreadItem.php:248 msgctxt "noun" msgid "Dislike" @@ -6234,42 +6247,42 @@ msgid_plural "Dislikes" msgstr[0] "No me gusta" msgstr[1] "No me gusta" -#: ../../include/conversation.php:1759 +#: ../../include/conversation.php:1758 msgctxt "noun" msgid "Attending" msgid_plural "Attending" msgstr[0] "Participaré" msgstr[1] "Participaré" -#: ../../include/conversation.php:1762 +#: ../../include/conversation.php:1761 msgctxt "noun" msgid "Not Attending" msgid_plural "Not Attending" msgstr[0] "No participaré" msgstr[1] "No participaré" -#: ../../include/conversation.php:1765 +#: ../../include/conversation.php:1764 msgctxt "noun" msgid "Undecided" msgid_plural "Undecided" msgstr[0] "Indeciso/a" msgstr[1] "Indecisos/as" -#: ../../include/conversation.php:1768 +#: ../../include/conversation.php:1767 msgctxt "noun" msgid "Agree" msgid_plural "Agrees" msgstr[0] "De acuerdo" msgstr[1] "De acuerdo" -#: ../../include/conversation.php:1771 +#: ../../include/conversation.php:1770 msgctxt "noun" msgid "Disagree" msgid_plural "Disagrees" msgstr[0] "En desacuerdo" msgstr[1] "En desacuerdo" -#: ../../include/conversation.php:1774 +#: ../../include/conversation.php:1773 msgctxt "noun" msgid "Abstain" msgid_plural "Abstains" @@ -6336,11 +6349,11 @@ msgstr "Transexual" msgid "Hermaphrodite" msgstr "Hermafrodita" -#: ../../include/selectors.php:60 ../../include/channel.php:1727 +#: ../../include/selectors.php:60 ../../include/channel.php:1751 msgid "Neuter" msgstr "Neutral" -#: ../../include/selectors.php:60 ../../include/channel.php:1729 +#: ../../include/selectors.php:60 ../../include/channel.php:1753 msgid "Non-specific" msgstr "No especificado" @@ -6437,8 +6450,7 @@ msgid "Sex Addict" msgstr "Con adicción al sexo" #: ../../include/selectors.php:134 ../../include/channel.php:506 -#: ../../include/channel.php:507 ../../include/channel.php:514 -#: ../../Zotlabs/Widget/Affinity.php:32 +#: ../../include/channel.php:509 ../../Zotlabs/Widget/Affinity.php:32 #: ../../Zotlabs/Module/Settings/Channel.php:71 #: ../../Zotlabs/Module/Settings/Channel.php:75 #: ../../Zotlabs/Module/Settings/Channel.php:76 @@ -6547,28 +6559,28 @@ msgid "" "not what you intended, please create another group with a different name." msgstr "Un grupo suprimido con este nombre ha sido restablecido. Es posible que los permisos que ya existen sean aplicados a este grupo y sus futuros miembros. Si no quiere esto, por favor cree otro grupo con un nombre diferente." -#: ../../include/group.php:265 ../../Zotlabs/Lib/Group.php:270 +#: ../../include/group.php:271 ../../Zotlabs/Lib/Group.php:270 msgid "Add new connections to this privacy group" msgstr "Añadir conexiones nuevas a este grupo de canales" -#: ../../include/group.php:299 ../../Zotlabs/Lib/AccessList.php:311 +#: ../../include/group.php:305 ../../Zotlabs/Lib/AccessList.php:311 #: ../../Zotlabs/Lib/Group.php:302 msgid "edit" msgstr "editar" -#: ../../include/group.php:322 ../../Zotlabs/Lib/Group.php:325 +#: ../../include/group.php:328 ../../Zotlabs/Lib/Group.php:325 msgid "Edit group" msgstr "Editar grupo" -#: ../../include/group.php:323 ../../Zotlabs/Lib/Group.php:326 +#: ../../include/group.php:329 ../../Zotlabs/Lib/Group.php:326 msgid "Add privacy group" msgstr "Añadir un grupo de canales" -#: ../../include/group.php:324 ../../Zotlabs/Lib/Group.php:327 +#: ../../include/group.php:330 ../../Zotlabs/Lib/Group.php:327 msgid "Channels not in any privacy group" msgstr "Sin canales en ningún grupo" -#: ../../include/group.php:326 ../../Zotlabs/Widget/Savedsearch.php:84 +#: ../../include/group.php:332 ../../Zotlabs/Widget/Savedsearch.php:84 #: ../../Zotlabs/Lib/AccessList.php:336 ../../Zotlabs/Lib/Group.php:329 msgid "add" msgstr "añadir" @@ -6618,177 +6630,199 @@ msgstr "no me gusta" msgid "dislikes" msgstr "no gusta de" -#: ../../include/items.php:1001 ../../include/items.php:1061 +#: ../../include/items.php:1037 ../../include/items.php:1097 msgid "(Unknown)" msgstr "(Desconocido)" -#: ../../include/items.php:1249 +#: ../../include/items.php:1301 msgid "Visible to anybody on the internet." msgstr "Visible para cualquiera en internet." -#: ../../include/items.php:1251 +#: ../../include/items.php:1303 msgid "Visible to you only." msgstr "Visible sólo para usted." -#: ../../include/items.php:1253 +#: ../../include/items.php:1305 msgid "Visible to anybody in this network." msgstr "Visible para cualquiera en esta red." -#: ../../include/items.php:1255 +#: ../../include/items.php:1307 msgid "Visible to anybody authenticated." msgstr "Visible para cualquiera que esté autenticado." -#: ../../include/items.php:1257 +#: ../../include/items.php:1309 #, php-format msgid "Visible to anybody on %s." msgstr "Visible para cualquiera en %s." -#: ../../include/items.php:1259 +#: ../../include/items.php:1311 msgid "Visible to all connections." msgstr "Visible para todas las conexiones." -#: ../../include/items.php:1261 +#: ../../include/items.php:1313 msgid "Visible to approved connections." msgstr "Visible para las conexiones permitidas." -#: ../../include/items.php:1263 +#: ../../include/items.php:1315 msgid "Visible to specific connections." msgstr "Visible para conexiones específicas." -#: ../../include/items.php:4493 ../../Zotlabs/Module/Group.php:62 +#: ../../include/items.php:4584 ../../Zotlabs/Module/Group.php:62 #: ../../Zotlabs/Module/Group.php:214 msgid "Privacy group not found." msgstr "Grupo de canales no encontrado." -#: ../../include/items.php:4509 +#: ../../include/items.php:4600 msgid "Privacy group is empty." msgstr "El grupo de canales está vacío." -#: ../../include/items.php:4516 +#: ../../include/items.php:4607 #, php-format msgid "Privacy group: %s" msgstr "Grupo de canales: %s" -#: ../../include/items.php:4526 ../../Zotlabs/Module/Connedit.php:860 +#: ../../include/items.php:4617 ../../Zotlabs/Module/Connedit.php:860 #, php-format msgid "Connection: %s" msgstr "Conexión: %s" -#: ../../include/items.php:4528 +#: ../../include/items.php:4619 msgid "Connection not found." msgstr "Conexión no encontrada" -#: ../../include/items.php:4875 ../../Zotlabs/Module/Cover_photo.php:297 +#: ../../include/items.php:4965 ../../Zotlabs/Module/Cover_photo.php:297 msgid "female" msgstr "mujer" -#: ../../include/items.php:4876 ../../Zotlabs/Module/Cover_photo.php:298 +#: ../../include/items.php:4966 ../../Zotlabs/Module/Cover_photo.php:298 #, php-format msgid "%1$s updated her %2$s" msgstr "%1$s ha actualizado su %2$s" -#: ../../include/items.php:4877 ../../Zotlabs/Module/Cover_photo.php:299 +#: ../../include/items.php:4967 ../../Zotlabs/Module/Cover_photo.php:299 msgid "male" msgstr "hombre" -#: ../../include/items.php:4878 ../../Zotlabs/Module/Cover_photo.php:300 +#: ../../include/items.php:4968 ../../Zotlabs/Module/Cover_photo.php:300 #, php-format msgid "%1$s updated his %2$s" msgstr "%1$s ha actualizado su %2$s" -#: ../../include/items.php:4880 ../../Zotlabs/Module/Cover_photo.php:302 +#: ../../include/items.php:4970 ../../Zotlabs/Module/Cover_photo.php:302 #, php-format msgid "%1$s updated their %2$s" msgstr "%1$s ha actualizado su %2$s" -#: ../../include/items.php:4882 +#: ../../include/items.php:4972 msgid "profile photo" msgstr "foto del perfil" -#: ../../include/items.php:5074 +#: ../../include/items.php:5164 #, php-format msgid "[Edited %s]" msgstr "[se ha editado %s]" -#: ../../include/items.php:5074 +#: ../../include/items.php:5164 msgctxt "edit_activity" msgid "Post" msgstr "Publicar" -#: ../../include/items.php:5074 +#: ../../include/items.php:5164 msgctxt "edit_activity" msgid "Comment" msgstr "Comentar" #: ../../include/account.php:38 -msgid "Not a valid email address" -msgstr "Dirección de correo no válida" +msgid "The provided email address is not valid" +msgstr "La dirección de correo electrónico proporcionada no es válida" #: ../../include/account.php:40 -msgid "Your email domain is not among those allowed on this site" -msgstr "Su dirección de correo no pertenece a ninguno de los dominios permitidos en este sitio." +msgid "The provided email domain is not among those allowed on this site" +msgstr "El dominio de correo electrónico proporcionado no está entre los permitidos en este sitio" -#: ../../include/account.php:46 -msgid "Your email address is already registered at this site." -msgstr "Su dirección de correo está ya registrada en este sitio." +#: ../../include/account.php:51 +msgid "The provided email address is already registered at this site" +msgstr "La dirección de correo electrónico proporcionada ya está registrada en este sitio" -#: ../../include/account.php:78 +#: ../../include/account.php:88 msgid "An invitation is required." msgstr "Es obligatorio que le inviten." -#: ../../include/account.php:82 +#: ../../include/account.php:97 msgid "Invitation could not be verified." msgstr "No se ha podido verificar su invitación." -#: ../../include/account.php:158 +#: ../../include/account.php:185 msgid "Please enter the required information." msgstr "Por favor introduzca la información requerida." -#: ../../include/account.php:225 +#: ../../include/account.php:252 ../../include/account.php:360 msgid "Failed to store account information." msgstr "La información de la cuenta no se ha podido guardar." -#: ../../include/account.php:313 +#: ../../include/account.php:429 ../../include/account.php:497 +#: ../../Zotlabs/Module/Register.php:352 #, php-format msgid "Registration confirmation for %s" msgstr "Confirmación de registro para %s" -#: ../../include/account.php:382 +#: ../../include/account.php:572 #, php-format msgid "Registration request at %s" msgstr "Solicitud de registro en %s" -#: ../../include/account.php:404 +#: ../../include/account.php:594 msgid "your registration password" msgstr "su contraseña de registro" -#: ../../include/account.php:410 ../../include/account.php:473 +#: ../../include/account.php:600 ../../include/account.php:689 #, php-format msgid "Registration details for %s" msgstr "Detalles del registro de %s" -#: ../../include/account.php:484 +#: ../../include/account.php:700 msgid "Account approved." msgstr "Cuenta aprobada." -#: ../../include/account.php:524 +#: ../../include/account.php:756 #, php-format msgid "Registration revoked for %s" msgstr "Registro revocado para %s" -#: ../../include/account.php:807 ../../include/account.php:809 +#: ../../include/account.php:763 +#, php-format +msgid "Could not revoke registration for %s" +msgstr "No se ha podido revocar el registro de %s" + +#: ../../include/account.php:1179 ../../include/account.php:1181 msgid "Click here to upgrade." msgstr "Pulse aquí para actualizar" -#: ../../include/account.php:815 +#: ../../include/account.php:1187 msgid "This action exceeds the limits set by your subscription plan." msgstr "Esta acción supera los límites establecidos por su plan de suscripción " -#: ../../include/account.php:820 +#: ../../include/account.php:1192 msgid "This action is not available under your subscription plan." msgstr "Esta acción no está disponible en su plan de suscripción." -#: ../../include/photo/photo_driver.php:434 +#: ../../include/account.php:1252 +msgid "open" +msgstr "abierto" + +#: ../../include/account.php:1252 +msgid "closed" +msgstr "cerrado" + +#: ../../include/account.php:1259 +msgid "Registration is currently" +msgstr "El registro está actualmente " + +#: ../../include/account.php:1268 +msgid "please come back" +msgstr "por favor, vuelva" + +#: ../../include/photo/photo_driver.php:435 #: ../../Zotlabs/Module/Profile_photo.php:147 #: ../../Zotlabs/Module/Profile_photo.php:284 msgid "Profile Photos" @@ -6871,8 +6905,8 @@ msgstr "%sha compartido un/una %scon usted" msgid "%1$s's bookmarks" msgstr "Marcadores de %1$s" -#: ../../include/menu.php:120 ../../include/channel.php:1539 -#: ../../include/channel.php:1543 ../../Zotlabs/Widget/Cdav.php:138 +#: ../../include/menu.php:120 ../../include/channel.php:1563 +#: ../../include/channel.php:1567 ../../Zotlabs/Widget/Cdav.php:138 #: ../../Zotlabs/Widget/Cdav.php:175 ../../Zotlabs/Module/Article_edit.php:98 #: ../../Zotlabs/Module/Group.php:253 ../../Zotlabs/Module/Card_edit.php:99 #: ../../Zotlabs/Module/Oauth.php:173 ../../Zotlabs/Module/Editwebpage.php:142 @@ -6884,84 +6918,84 @@ msgstr "Marcadores de %1$s" #: ../../Zotlabs/Module/Connections.php:363 #: ../../Zotlabs/Module/Connections.php:383 ../../Zotlabs/Module/Menu.php:176 #: ../../Zotlabs/Module/Oauth2.php:194 ../../Zotlabs/Module/Thing.php:268 -#: ../../Zotlabs/Module/Wiki.php:211 ../../Zotlabs/Module/Wiki.php:384 +#: ../../Zotlabs/Module/Wiki.php:210 ../../Zotlabs/Module/Wiki.php:383 #: ../../Zotlabs/Module/Layouts.php:193 ../../Zotlabs/Lib/Apps.php:557 #: ../../Zotlabs/Lib/ThreadItem.php:149 msgid "Edit" msgstr "Editar" -#: ../../include/bbcode.php:221 ../../include/bbcode.php:916 -#: ../../include/bbcode.php:1494 ../../include/bbcode.php:1502 +#: ../../include/bbcode.php:233 ../../include/bbcode.php:928 +#: ../../include/bbcode.php:1525 ../../include/bbcode.php:1533 msgid "Image/photo" msgstr "Imagen/foto" -#: ../../include/bbcode.php:268 ../../include/bbcode.php:1519 +#: ../../include/bbcode.php:280 ../../include/bbcode.php:1550 msgid "Encrypted content" msgstr "Contenido cifrado" -#: ../../include/bbcode.php:322 +#: ../../include/bbcode.php:334 #, php-format msgid "Install %1$s element %2$s" msgstr "Instalar el elemento de%1$s%2$s" -#: ../../include/bbcode.php:326 +#: ../../include/bbcode.php:338 #, php-format msgid "" "This post contains an installable %s element, however you lack permissions " "to install it on this site." msgstr "Esta entrada contiene el elemento instalable %s, sin embargo le faltan permisos para instalarlo en este sitio." -#: ../../include/bbcode.php:336 ../../Zotlabs/Module/Impel.php:43 +#: ../../include/bbcode.php:348 ../../Zotlabs/Module/Impel.php:43 msgid "webpage" msgstr "página web" -#: ../../include/bbcode.php:339 ../../Zotlabs/Module/Impel.php:53 +#: ../../include/bbcode.php:351 ../../Zotlabs/Module/Impel.php:53 msgid "layout" msgstr "plantilla" -#: ../../include/bbcode.php:342 ../../Zotlabs/Module/Impel.php:48 +#: ../../include/bbcode.php:354 ../../Zotlabs/Module/Impel.php:48 msgid "block" msgstr "bloque" -#: ../../include/bbcode.php:345 ../../Zotlabs/Module/Impel.php:60 +#: ../../include/bbcode.php:357 ../../Zotlabs/Module/Impel.php:60 msgid "menu" msgstr "menú" -#: ../../include/bbcode.php:539 +#: ../../include/bbcode.php:551 msgid "card" msgstr "ficha" -#: ../../include/bbcode.php:541 +#: ../../include/bbcode.php:553 msgid "article" msgstr "el artículo" -#: ../../include/bbcode.php:547 ../../include/markdown.php:202 +#: ../../include/bbcode.php:559 ../../include/markdown.php:202 #, php-format msgid "%1$s wrote the following %2$s %3$s" msgstr "%1$s escribió %2$s siguiente %3$s" -#: ../../include/bbcode.php:624 ../../include/bbcode.php:632 +#: ../../include/bbcode.php:636 ../../include/bbcode.php:644 msgid "Click to open/close" msgstr "Pulsar para abrir/cerrar" -#: ../../include/bbcode.php:632 ../../include/markdown.php:255 +#: ../../include/bbcode.php:644 ../../include/markdown.php:255 msgid "spoiler" msgstr "spoiler" -#: ../../include/bbcode.php:645 +#: ../../include/bbcode.php:657 msgid "View article" msgstr "Ver el artículo" -#: ../../include/bbcode.php:645 +#: ../../include/bbcode.php:657 msgid "View summary" msgstr "Ver sumario" -#: ../../include/bbcode.php:1038 ../../include/bbcode.php:1195 -#: ../../Zotlabs/Lib/NativeWikiPage.php:605 +#: ../../include/bbcode.php:1050 ../../include/bbcode.php:1217 +#: ../../Zotlabs/Lib/NativeWikiPage.php:618 msgid "Different viewers will see this text differently" msgstr "Visitantes diferentes verán este texto de forma distinta" -#: ../../include/bbcode.php:1482 +#: ../../include/bbcode.php:1501 msgid "$1 wrote:" msgstr "$1 escribió:" @@ -6981,16 +7015,18 @@ msgstr "Nombre demasiado largo" msgid "No account identifier" msgstr "Ningún identificador de la cuenta" -#: ../../include/channel.php:212 +#: ../../include/channel.php:212 ../../Zotlabs/Module/Register.php:95 msgid "Nickname is required." msgstr "Se requiere un sobrenombre (alias)." -#: ../../include/channel.php:226 ../../include/channel.php:707 +#: ../../include/channel.php:226 ../../include/channel.php:706 +#: ../../Zotlabs/Module/Register.php:100 #: ../../Zotlabs/Module/Changeaddr.php:46 msgid "Reserved nickname. Please choose another." msgstr "Sobrenombre en uso. Por favor, elija otro." -#: ../../include/channel.php:231 ../../include/channel.php:712 +#: ../../include/channel.php:231 ../../include/channel.php:711 +#: ../../Zotlabs/Module/Register.php:105 #: ../../Zotlabs/Module/Changeaddr.php:51 msgid "" "Nickname has unsupported characters or is already being used on this site." @@ -7004,192 +7040,192 @@ msgstr "No ha sido posible recuperar la identidad creada" msgid "Default Profile" msgstr "Perfil principal" -#: ../../include/channel.php:640 ../../include/channel.php:729 +#: ../../include/channel.php:639 ../../include/channel.php:728 msgid "Unable to retrieve modified identity" msgstr "No se puede recuperar la identidad modficada" -#: ../../include/channel.php:1386 +#: ../../include/channel.php:1410 msgid "Requested channel is not available." msgstr "El canal solicitado no está disponible." -#: ../../include/channel.php:1532 ../../Zotlabs/Module/Profiles.php:730 +#: ../../include/channel.php:1556 ../../Zotlabs/Module/Profiles.php:730 msgid "Change profile photo" msgstr "Cambiar la foto del perfil" -#: ../../include/channel.php:1540 +#: ../../include/channel.php:1564 msgid "Create New Profile" msgstr "Crear un nuevo perfil" -#: ../../include/channel.php:1558 ../../Zotlabs/Module/Profiles.php:822 +#: ../../include/channel.php:1582 ../../Zotlabs/Module/Profiles.php:822 msgid "Profile Image" msgstr "Imagen del perfil" -#: ../../include/channel.php:1561 +#: ../../include/channel.php:1585 msgid "Visible to everybody" msgstr "Visible para todos" -#: ../../include/channel.php:1562 ../../Zotlabs/Module/Profiles.php:727 +#: ../../include/channel.php:1586 ../../Zotlabs/Module/Profiles.php:727 #: ../../Zotlabs/Module/Profiles.php:826 msgid "Edit visibility" msgstr "Editar visibilidad" -#: ../../include/channel.php:1638 ../../include/channel.php:1766 +#: ../../include/channel.php:1662 ../../include/channel.php:1790 msgid "Gender:" msgstr "Género:" -#: ../../include/channel.php:1639 ../../include/channel.php:1810 +#: ../../include/channel.php:1663 ../../include/channel.php:1834 msgid "Status:" msgstr "Estado:" -#: ../../include/channel.php:1640 ../../include/channel.php:1834 +#: ../../include/channel.php:1664 ../../include/channel.php:1858 msgid "Homepage:" msgstr "Página personal:" -#: ../../include/channel.php:1641 +#: ../../include/channel.php:1665 msgid "Online Now" msgstr "Ahora en línea" -#: ../../include/channel.php:1694 +#: ../../include/channel.php:1718 msgid "Change your profile photo" msgstr "Cambiar su foto del perfil" -#: ../../include/channel.php:1725 +#: ../../include/channel.php:1749 msgid "Trans" msgstr "Trans" -#: ../../include/channel.php:1764 +#: ../../include/channel.php:1788 #: ../../Zotlabs/Module/Settings/Channel.php:501 msgid "Full Name:" msgstr "Nombre completo:" -#: ../../include/channel.php:1771 +#: ../../include/channel.php:1795 msgid "Like this channel" msgstr "Me gusta este canal" -#: ../../include/channel.php:1795 +#: ../../include/channel.php:1819 msgid "j F, Y" msgstr "j F Y" -#: ../../include/channel.php:1796 +#: ../../include/channel.php:1820 msgid "j F" msgstr "j F" -#: ../../include/channel.php:1803 +#: ../../include/channel.php:1827 msgid "Birthday:" msgstr "Cumpleaños:" -#: ../../include/channel.php:1807 ../../Zotlabs/Module/Directory.php:349 +#: ../../include/channel.php:1831 ../../Zotlabs/Module/Directory.php:349 msgid "Age:" msgstr "Edad:" -#: ../../include/channel.php:1816 +#: ../../include/channel.php:1840 #, php-format msgid "for %1$d %2$s" msgstr "por %1$d %2$s" -#: ../../include/channel.php:1828 +#: ../../include/channel.php:1852 msgid "Tags:" msgstr "Etiquetas:" -#: ../../include/channel.php:1832 +#: ../../include/channel.php:1856 msgid "Sexual Preference:" msgstr "Orientación sexual:" -#: ../../include/channel.php:1836 ../../Zotlabs/Module/Directory.php:367 +#: ../../include/channel.php:1860 ../../Zotlabs/Module/Directory.php:367 msgid "Hometown:" msgstr "Lugar de nacimiento:" -#: ../../include/channel.php:1838 +#: ../../include/channel.php:1862 msgid "Political Views:" msgstr "Posición política:" -#: ../../include/channel.php:1840 +#: ../../include/channel.php:1864 msgid "Religion:" msgstr "Religión:" -#: ../../include/channel.php:1842 ../../Zotlabs/Module/Directory.php:369 +#: ../../include/channel.php:1866 ../../Zotlabs/Module/Directory.php:369 msgid "About:" msgstr "Sobre mí:" -#: ../../include/channel.php:1844 +#: ../../include/channel.php:1868 msgid "Hobbies/Interests:" msgstr "Aficciones o intereses:" -#: ../../include/channel.php:1846 +#: ../../include/channel.php:1870 msgid "Likes:" msgstr "Me gusta:" -#: ../../include/channel.php:1848 +#: ../../include/channel.php:1872 msgid "Dislikes:" msgstr "No me gusta:" -#: ../../include/channel.php:1850 +#: ../../include/channel.php:1874 msgid "Contact information and Social Networks:" msgstr "Información de contacto y redes sociales:" -#: ../../include/channel.php:1852 +#: ../../include/channel.php:1876 msgid "My other channels:" msgstr "Mis otros canales:" -#: ../../include/channel.php:1854 +#: ../../include/channel.php:1878 msgid "Musical interests:" msgstr "Preferencias musicales:" -#: ../../include/channel.php:1856 +#: ../../include/channel.php:1880 msgid "Books, literature:" msgstr "Libros, literatura:" -#: ../../include/channel.php:1858 +#: ../../include/channel.php:1882 msgid "Television:" msgstr "Televisión:" -#: ../../include/channel.php:1860 +#: ../../include/channel.php:1884 msgid "Film/dance/culture/entertainment:" msgstr "Cine, danza, cultura, entretenimiento:" -#: ../../include/channel.php:1862 +#: ../../include/channel.php:1886 msgid "Love/Romance:" msgstr "Vida sentimental o amorosa:" -#: ../../include/channel.php:1864 +#: ../../include/channel.php:1888 msgid "Work/employment:" msgstr "Trabajo:" -#: ../../include/channel.php:1866 +#: ../../include/channel.php:1890 msgid "School/education:" msgstr "Estudios:" -#: ../../include/channel.php:1887 ../../Zotlabs/Module/Profperm.php:113 +#: ../../include/channel.php:1911 ../../Zotlabs/Module/Profperm.php:113 #: ../../Zotlabs/Lib/Apps.php:362 msgid "Profile" msgstr "Perfil" -#: ../../include/channel.php:1889 +#: ../../include/channel.php:1913 msgid "Like this thing" msgstr "Me gusta esto" -#: ../../include/channel.php:1890 ../../Zotlabs/Module/Events.php:699 +#: ../../include/channel.php:1914 ../../Zotlabs/Module/Events.php:699 msgid "Export" msgstr "Exportar" -#: ../../include/channel.php:2329 ../../Zotlabs/Module/Cover_photo.php:304 +#: ../../include/channel.php:2353 ../../Zotlabs/Module/Cover_photo.php:304 msgid "cover photo" msgstr "Imagen de portada del perfil" -#: ../../include/channel.php:2598 ../../Zotlabs/Module/Rmagic.php:96 -#: ../../boot.php:1712 +#: ../../include/channel.php:2622 ../../Zotlabs/Module/Rmagic.php:96 +#: ../../boot.php:1717 msgid "Remote Authentication" msgstr "Acceso desde su servidor" -#: ../../include/channel.php:2599 ../../Zotlabs/Module/Rmagic.php:97 +#: ../../include/channel.php:2623 ../../Zotlabs/Module/Rmagic.php:97 msgid "Enter your channel address (e.g. channel@example.com)" msgstr "Introduzca la dirección del canal (p.ej. canal@ejemplo.com)" -#: ../../include/channel.php:2600 ../../Zotlabs/Module/Rmagic.php:98 +#: ../../include/channel.php:2624 ../../Zotlabs/Module/Rmagic.php:98 msgid "Authenticate" msgstr "Acceder" -#: ../../include/channel.php:2758 ../../Zotlabs/Module/Admin/Accounts.php:91 +#: ../../include/channel.php:2782 ../../Zotlabs/Module/Admin/Accounts.php:184 #, php-format msgid "Account '%s' deleted" msgstr "La cuenta '%s' ha sido eliminada" @@ -7199,49 +7235,49 @@ msgstr "La cuenta '%s' ha sido eliminada" msgid "Visible to your default audience" msgstr "Visible para su público predeterminado." -#: ../../include/acl_selectors.php:99 +#: ../../include/acl_selectors.php:100 msgid "Profile-Based Privacy Groups" msgstr "Grupos de privacidad basados en perfiles" -#: ../../include/acl_selectors.php:118 +#: ../../include/acl_selectors.php:119 msgid "Private Forum" msgstr "Foro privado" -#: ../../include/acl_selectors.php:124 ../../Zotlabs/Widget/Forums.php:100 -#: ../../Zotlabs/Widget/Activity_filter.php:115 +#: ../../include/acl_selectors.php:125 ../../Zotlabs/Widget/Forums.php:100 +#: ../../Zotlabs/Widget/Activity_filter.php:123 #: ../../Zotlabs/Widget/Notifications.php:139 #: ../../Zotlabs/Widget/Notifications.php:140 msgid "Forums" msgstr "Foros" -#: ../../include/acl_selectors.php:135 +#: ../../include/acl_selectors.php:136 #: ../../Zotlabs/Lib/PermissionDescription.php:107 msgid "Only me" msgstr "Sólo yo" -#: ../../include/acl_selectors.php:142 +#: ../../include/acl_selectors.php:143 msgid "Share with" msgstr "Compartir con " -#: ../../include/acl_selectors.php:143 +#: ../../include/acl_selectors.php:144 msgid "Custom selection" msgstr "Selección personalizada" -#: ../../include/acl_selectors.php:145 +#: ../../include/acl_selectors.php:146 msgid "" "Select \"Allow\" to allow viewing. \"Don't allow\" lets you override and " "limit the scope of \"Allow\"." msgstr "Seleccione \"Permitir\" para permitir la visualización. \"No permitir\" le permite anular y limitar el alcance de \"Permitir\"." -#: ../../include/acl_selectors.php:146 ../../Zotlabs/Module/Authorize.php:32 +#: ../../include/acl_selectors.php:147 ../../Zotlabs/Module/Authorize.php:32 msgid "Allow" msgstr "Permitir" -#: ../../include/acl_selectors.php:147 +#: ../../include/acl_selectors.php:148 msgid "Don't allow" msgstr "No permitir" -#: ../../include/acl_selectors.php:180 +#: ../../include/acl_selectors.php:181 #, php-format msgid "" "Post permissions %s cannot be changed %s after a post is shared.
These" @@ -7440,28 +7476,28 @@ msgstr "Compartir esto" msgid "share" msgstr "compartir" -#: ../../Zotlabs/Widget/Pinned.php:123 ../../Zotlabs/Widget/Pinned.php:124 +#: ../../Zotlabs/Widget/Pinned.php:122 ../../Zotlabs/Widget/Pinned.php:123 #, php-format msgid "View %s's profile - %s" msgstr "Ver el perfil de %s - %s" -#: ../../Zotlabs/Widget/Pinned.php:128 ../../Zotlabs/Lib/ThreadItem.php:414 +#: ../../Zotlabs/Widget/Pinned.php:127 ../../Zotlabs/Lib/ThreadItem.php:414 msgid "via" msgstr "mediante" -#: ../../Zotlabs/Widget/Pinned.php:143 ../../Zotlabs/Lib/ThreadItem.php:445 +#: ../../Zotlabs/Widget/Pinned.php:141 ../../Zotlabs/Lib/ThreadItem.php:445 msgid "Attendance Options" msgstr "Opciones de participación o asistencia" -#: ../../Zotlabs/Widget/Pinned.php:144 ../../Zotlabs/Lib/ThreadItem.php:447 +#: ../../Zotlabs/Widget/Pinned.php:142 ../../Zotlabs/Lib/ThreadItem.php:447 msgid "Voting Options" msgstr "Opciones de votación" -#: ../../Zotlabs/Widget/Pinned.php:156 ../../Zotlabs/Lib/ThreadItem.php:471 +#: ../../Zotlabs/Widget/Pinned.php:154 ../../Zotlabs/Lib/ThreadItem.php:471 msgid "Pinned post" msgstr "Entradas ancladas" -#: ../../Zotlabs/Widget/Pinned.php:158 +#: ../../Zotlabs/Widget/Pinned.php:156 msgid "Don't show" msgstr "No mostrar" @@ -7487,7 +7523,7 @@ msgid "Channel Calendar" msgstr "Calendario del canal" #: ../../Zotlabs/Widget/Cdav.php:129 ../../Zotlabs/Widget/Cdav.php:143 -#: ../../Zotlabs/Module/Cdav.php:1055 +#: ../../Zotlabs/Module/Cdav.php:1056 msgid "CalDAV Calendars" msgstr "Calendarios CalDAV" @@ -7508,7 +7544,7 @@ msgid "Create new CalDAV calendar" msgstr "Crear un nuevo calendario CalDAV" #: ../../Zotlabs/Widget/Cdav.php:140 ../../Zotlabs/Widget/Cdav.php:178 -#: ../../Zotlabs/Module/Cdav.php:1059 ../../Zotlabs/Module/Cdav.php:1387 +#: ../../Zotlabs/Module/Cdav.php:1060 ../../Zotlabs/Module/Cdav.php:1388 #: ../../Zotlabs/Module/Webpages.php:254 #: ../../Zotlabs/Module/New_channel.php:189 #: ../../Zotlabs/Module/Blocks.php:159 ../../Zotlabs/Module/Profiles.php:800 @@ -7526,7 +7562,7 @@ msgstr "Nombre del calendario" msgid "Calendar Tools" msgstr "Gestión de calendarios" -#: ../../Zotlabs/Widget/Cdav.php:143 ../../Zotlabs/Module/Cdav.php:1055 +#: ../../Zotlabs/Widget/Cdav.php:143 ../../Zotlabs/Module/Cdav.php:1056 msgid "Channel Calendars" msgstr "Calendarios del canal" @@ -7611,23 +7647,23 @@ msgid "Bookmarked Chatrooms" msgstr "Salas de chat preferidas" #: ../../Zotlabs/Widget/Wiki_page_history.php:23 -#: ../../Zotlabs/Lib/NativeWikiPage.php:564 +#: ../../Zotlabs/Lib/NativeWikiPage.php:577 msgctxt "wiki_history" msgid "Message" msgstr "Mensaje" #: ../../Zotlabs/Widget/Wiki_page_history.php:24 -#: ../../Zotlabs/Lib/NativeWikiPage.php:565 +#: ../../Zotlabs/Lib/NativeWikiPage.php:578 msgid "Date" msgstr "Fecha" #: ../../Zotlabs/Widget/Wiki_page_history.php:25 -#: ../../Zotlabs/Module/Wiki.php:367 ../../Zotlabs/Lib/NativeWikiPage.php:566 +#: ../../Zotlabs/Module/Wiki.php:366 ../../Zotlabs/Lib/NativeWikiPage.php:579 msgid "Revert" msgstr "Revertir" #: ../../Zotlabs/Widget/Wiki_page_history.php:26 -#: ../../Zotlabs/Lib/NativeWikiPage.php:567 +#: ../../Zotlabs/Lib/NativeWikiPage.php:580 msgid "Compare" msgstr "Comparar" @@ -7663,13 +7699,13 @@ msgstr "Nuevo mensaje" msgid "photo/image" msgstr "foto/imagen" -#: ../../Zotlabs/Widget/Admin.php:22 ../../Zotlabs/Module/Admin/Site.php:292 +#: ../../Zotlabs/Widget/Admin.php:22 ../../Zotlabs/Module/Admin/Site.php:411 msgid "Site" msgstr "Sitio" #: ../../Zotlabs/Widget/Admin.php:23 -#: ../../Zotlabs/Module/Admin/Accounts.php:167 -#: ../../Zotlabs/Module/Admin/Accounts.php:180 +#: ../../Zotlabs/Module/Admin/Accounts.php:308 +#: ../../Zotlabs/Module/Admin/Accounts.php:327 #: ../../Zotlabs/Module/Admin.php:96 msgid "Accounts" msgstr "Cuentas" @@ -7680,7 +7716,7 @@ msgstr "Inscripciones de nuevos miembros pendientes de aprobación" #: ../../Zotlabs/Widget/Admin.php:24 #: ../../Zotlabs/Module/Admin/Channels.php:146 -#: ../../Zotlabs/Module/Admin.php:114 +#: ../../Zotlabs/Module/Admin.php:117 msgid "Channels" msgstr "Canales" @@ -7724,85 +7760,85 @@ msgstr "Informes" msgid "Addon Features" msgstr "Características del addon" -#: ../../Zotlabs/Widget/Activity_filter.php:33 +#: ../../Zotlabs/Widget/Activity_filter.php:37 msgid "Direct Messages" msgstr "Mensajes directos" -#: ../../Zotlabs/Widget/Activity_filter.php:37 +#: ../../Zotlabs/Widget/Activity_filter.php:41 msgid "Show direct (private) messages" msgstr "Mostrar mensajes (privados) directos" -#: ../../Zotlabs/Widget/Activity_filter.php:42 +#: ../../Zotlabs/Widget/Activity_filter.php:46 msgid "Events" msgstr "Eventos" -#: ../../Zotlabs/Widget/Activity_filter.php:46 +#: ../../Zotlabs/Widget/Activity_filter.php:50 msgid "Show posts that include events" msgstr "Mostrar entradas que incluyan eventos" -#: ../../Zotlabs/Widget/Activity_filter.php:52 +#: ../../Zotlabs/Widget/Activity_filter.php:56 msgid "Polls" msgstr "Encuestas" -#: ../../Zotlabs/Widget/Activity_filter.php:56 +#: ../../Zotlabs/Widget/Activity_filter.php:60 msgid "Show posts that include polls" msgstr "Mostrar entradas que incluyan encuestas" -#: ../../Zotlabs/Widget/Activity_filter.php:77 +#: ../../Zotlabs/Widget/Activity_filter.php:83 #, php-format msgid "Show posts related to the %s privacy group" msgstr "Mostrar entradas relacionadas con el grupo %s" -#: ../../Zotlabs/Widget/Activity_filter.php:86 +#: ../../Zotlabs/Widget/Activity_filter.php:92 msgid "Show my privacy groups" msgstr "Mostrar mis grupos de canales" -#: ../../Zotlabs/Widget/Activity_filter.php:108 +#: ../../Zotlabs/Widget/Activity_filter.php:116 msgid "Show posts to this forum" msgstr "Mostrar las entradas en este foro" -#: ../../Zotlabs/Widget/Activity_filter.php:119 +#: ../../Zotlabs/Widget/Activity_filter.php:127 msgid "Show forums" msgstr "Mostrar los foros" -#: ../../Zotlabs/Widget/Activity_filter.php:133 +#: ../../Zotlabs/Widget/Activity_filter.php:141 msgid "Starred Posts" msgstr "Entradas preferidas" -#: ../../Zotlabs/Widget/Activity_filter.php:137 +#: ../../Zotlabs/Widget/Activity_filter.php:145 msgid "Show posts that I have starred" msgstr "Mostrar entradas que he señalado como preferidas" -#: ../../Zotlabs/Widget/Activity_filter.php:148 +#: ../../Zotlabs/Widget/Activity_filter.php:156 msgid "Personal Posts" msgstr "Entradas personales" -#: ../../Zotlabs/Widget/Activity_filter.php:152 +#: ../../Zotlabs/Widget/Activity_filter.php:160 msgid "Show posts that mention or involve me" msgstr "Mostrar entradas que me mencionen o involucren" -#: ../../Zotlabs/Widget/Activity_filter.php:173 +#: ../../Zotlabs/Widget/Activity_filter.php:183 #, php-format msgid "Show posts that I have filed to %s" msgstr "Mostrar las entradas que he enviado a %s" -#: ../../Zotlabs/Widget/Activity_filter.php:183 +#: ../../Zotlabs/Widget/Activity_filter.php:193 msgid "Show filed post categories" msgstr "Mostrar los temas de las entradas archivadas" -#: ../../Zotlabs/Widget/Activity_filter.php:197 +#: ../../Zotlabs/Widget/Activity_filter.php:207 msgid "Panel search" msgstr "Panel de búsqueda" -#: ../../Zotlabs/Widget/Activity_filter.php:207 +#: ../../Zotlabs/Widget/Activity_filter.php:217 msgid "Filter by name" msgstr "Filtrar por nombre" -#: ../../Zotlabs/Widget/Activity_filter.php:222 +#: ../../Zotlabs/Widget/Activity_filter.php:232 msgid "Remove active filter" msgstr "Eliminar el filtro activo" -#: ../../Zotlabs/Widget/Activity_filter.php:238 +#: ../../Zotlabs/Widget/Activity_filter.php:248 msgid "Stream Filters" msgstr "Filtros del stream" @@ -8219,29 +8255,29 @@ msgstr "No se puede copiar la carpeta en sí misma." msgid "Can not move folder \"%s\" into itself." msgstr "No se puede mover la carpeta\"%s\" en sí misma." -#: ../../Zotlabs/Module/Network.php:105 +#: ../../Zotlabs/Module/Network.php:107 msgid "No such group" msgstr "No se encuentra el grupo" -#: ../../Zotlabs/Module/Network.php:152 +#: ../../Zotlabs/Module/Network.php:156 msgid "No such channel" msgstr "No se encuentra el canal" -#: ../../Zotlabs/Module/Network.php:164 ../../Zotlabs/Module/Channel.php:221 +#: ../../Zotlabs/Module/Network.php:168 ../../Zotlabs/Module/Channel.php:221 msgid "Search Results For:" msgstr "Buscar resultados para:" -#: ../../Zotlabs/Module/Network.php:205 ../../Zotlabs/Module/Channel.php:256 +#: ../../Zotlabs/Module/Network.php:209 ../../Zotlabs/Module/Channel.php:256 #: ../../Zotlabs/Module/Hq.php:125 ../../Zotlabs/Module/Pubstream.php:95 #: ../../Zotlabs/Module/Display.php:76 msgid "Reset form" msgstr "Reiniciar el formulario" -#: ../../Zotlabs/Module/Network.php:239 +#: ../../Zotlabs/Module/Network.php:243 msgid "Privacy group is empty" msgstr "El grupo de canales está vacío" -#: ../../Zotlabs/Module/Network.php:249 +#: ../../Zotlabs/Module/Network.php:253 msgid "Privacy group: " msgstr "Grupo de canales: " @@ -8278,7 +8314,7 @@ msgid "" msgstr "Utilice este formulario para importar entradas y contenido desde un archivo de exportación." #: ../../Zotlabs/Module/Import_items.php:127 -#: ../../Zotlabs/Module/Import.php:629 +#: ../../Zotlabs/Module/Import.php:630 msgid "File to Upload" msgstr "Fichero para subir" @@ -8291,42 +8327,42 @@ msgstr "Su paquete de servicios solo permite %d canales." msgid "No channel. Import failed." msgstr "No hay canal. La importación ha fallado" -#: ../../Zotlabs/Module/Import.php:622 +#: ../../Zotlabs/Module/Import.php:623 msgid "You must be logged in to use this feature." msgstr "Debe estar registrado para poder usar esta funcionalidad." -#: ../../Zotlabs/Module/Import.php:627 +#: ../../Zotlabs/Module/Import.php:628 msgid "Import Channel" msgstr "Importar canal" -#: ../../Zotlabs/Module/Import.php:628 +#: ../../Zotlabs/Module/Import.php:629 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 "Emplee este formulario para importar un canal desde un servidor/hub diferente. Puede recuperar el canal desde el antiguo servidor/hub a través de la red o proporcionando un fichero de exportación." -#: ../../Zotlabs/Module/Import.php:630 +#: ../../Zotlabs/Module/Import.php:631 msgid "Or provide the old server/hub details" msgstr "O proporcione los detalles de su antiguo servidor/hub" -#: ../../Zotlabs/Module/Import.php:632 +#: ../../Zotlabs/Module/Import.php:633 msgid "Your old identity address (xyz@example.com)" msgstr "Su identidad en el antiguo servidor (canal@ejemplo.com)" -#: ../../Zotlabs/Module/Import.php:633 +#: ../../Zotlabs/Module/Import.php:634 msgid "Your old login email address" msgstr "Su antigua dirección de correo electrónico" -#: ../../Zotlabs/Module/Import.php:634 +#: ../../Zotlabs/Module/Import.php:635 msgid "Your old login password" msgstr "Su antigua contraseña" -#: ../../Zotlabs/Module/Import.php:635 +#: ../../Zotlabs/Module/Import.php:636 msgid "Import a few months of posts if possible (limited by available memory" msgstr "Importar unos meses de mensajes si es posible (limitado por la memoria disponible" -#: ../../Zotlabs/Module/Import.php:637 +#: ../../Zotlabs/Module/Import.php:638 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" @@ -8334,26 +8370,26 @@ msgid "" "primary location for files, photos, and media." msgstr "Para cualquiera de las opciones, elija si hacer de este servidor su nueva dirección primaria, o si su antigua dirección debe continuar con este papel. Usted podrá publicar desde cualquier ubicación, pero sólo una puede estar marcada como la ubicación principal para los ficheros, fotos y otras imágenes o vídeos." -#: ../../Zotlabs/Module/Import.php:639 +#: ../../Zotlabs/Module/Import.php:640 msgid "Make this hub my primary location" msgstr "Convertir este servidor en mi ubicación primaria" -#: ../../Zotlabs/Module/Import.php:640 +#: ../../Zotlabs/Module/Import.php:641 msgid "Move this channel (disable all previous locations)" msgstr "Mover este canal (desactivar todas las ubicaciones anteriores)" -#: ../../Zotlabs/Module/Import.php:641 +#: ../../Zotlabs/Module/Import.php:642 msgid "Use this channel nickname instead of the one provided" msgstr "Usa este alias de canal en lugar del que se proporciona" -#: ../../Zotlabs/Module/Import.php:641 +#: ../../Zotlabs/Module/Import.php:642 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 "Dejar en blanco para mantener su alias de canal . Se le asignará aleatoriamente uno similar si cualquiera de los dos nombres ya está asignado en este sitio." -#: ../../Zotlabs/Module/Import.php:643 +#: ../../Zotlabs/Module/Import.php:644 msgid "" "This process may take several minutes to complete. Please submit the form " "only once and leave this page open until finished." @@ -8380,146 +8416,150 @@ msgstr "php util/z6convert.php" msgid "from the terminal." msgstr "desde la terminal." -#: ../../Zotlabs/Module/Register.php:52 -msgid "Maximum daily site registrations exceeded. Please try again tomorrow." -msgstr "Se ha superado el límite máximo de inscripciones diarias de este sitio. Por favor, pruebe de nuevo mañana." +#: ../../Zotlabs/Module/Register.php:112 +msgid "Email address required" +msgstr "Dirección de correo electrónico requerida" -#: ../../Zotlabs/Module/Register.php:58 -msgid "" -"Please indicate acceptance of the Terms of Service. Registration failed." -msgstr "Por favor, confirme que acepta los Términos del servicio. El registro ha fallado." +#: ../../Zotlabs/Module/Register.php:153 +msgid "No password provided" +msgstr "No se ha proporcionado la contraseña" -#: ../../Zotlabs/Module/Register.php:92 -msgid "Passwords do not match." -msgstr "Las contraseñas no coinciden." +#: ../../Zotlabs/Module/Register.php:176 +msgid "Terms of Service not accepted" +msgstr "No se han aceptado los Términos del servicio" -#: ../../Zotlabs/Module/Register.php:135 -msgid "Registration successful. Continue to create your first channel..." -msgstr "Registro exitoso. Continúe creando tu primer canal..." +#: ../../Zotlabs/Module/Register.php:238 +msgid "Invitation code succesfully applied" +msgstr "El código de invitación se ha aplicado con éxito" -#: ../../Zotlabs/Module/Register.php:138 -msgid "" -"Registration successful. Please check your email for validation " -"instructions." -msgstr "Registro realizado con éxito. Por favor, compruebe su correo electrónico para ver las instrucciones para validarlo." +#: ../../Zotlabs/Module/Register.php:258 +msgid "Invitation not in time or too late" +msgstr "La invitación no llega a tiempo o llega demasiado tarde" -#: ../../Zotlabs/Module/Register.php:145 -msgid "Your registration is pending approval by the site owner." -msgstr "Su registro está pendiente de aprobación por el propietario del sitio." +#: ../../Zotlabs/Module/Register.php:264 +msgid "Invitation email failed" +msgstr "Error en el correo electrónico de invitación" + +#: ../../Zotlabs/Module/Register.php:272 +msgid "Invitation code failed" +msgstr "Código de invitación fallido" + +#: ../../Zotlabs/Module/Register.php:279 +msgid "Invitations are not available" +msgstr "No hay invitaciones disponibles" + +#: ../../Zotlabs/Module/Register.php:305 +msgid "Email address already in use" +msgstr "La dirección de correo electrónico ya está en uso" -#: ../../Zotlabs/Module/Register.php:148 -msgid "Your registration can not be processed." -msgstr "Su registro no puede ser procesado." +#: ../../Zotlabs/Module/Register.php:315 +msgid "Registration on this hub is by invitation only" +msgstr "El registro en este hub solo es posible por invitación" -#: ../../Zotlabs/Module/Register.php:195 +#: ../../Zotlabs/Module/Register.php:423 +msgid "New register request" +msgstr "Nueva solicitud de registro" + +#: ../../Zotlabs/Module/Register.php:441 +msgid "Error creating dId A" +msgstr "Error al crear dId A" + +#: ../../Zotlabs/Module/Register.php:459 msgid "Registration on this hub is disabled." msgstr "El registro está deshabilitado en este sitio." -#: ../../Zotlabs/Module/Register.php:204 +#: ../../Zotlabs/Module/Register.php:468 msgid "Registration on this hub is by approval only." msgstr "El registro en este hub está sometido a aprobación previa." -#: ../../Zotlabs/Module/Register.php:205 ../../Zotlabs/Module/Register.php:214 -msgid "Register at another affiliated hub." -msgstr "Registrarse en otro hub afiliado." +#: ../../Zotlabs/Module/Register.php:469 +msgid "Register at another affiliated hub in case when prefered" +msgstr "Regístrese en otro hub afiliado en caso de que lo prefiera" -#: ../../Zotlabs/Module/Register.php:213 +#: ../../Zotlabs/Module/Register.php:482 msgid "Registration on this hub is by invitation only." msgstr "La inscripción en este hub es sólo posible por invitación." -#: ../../Zotlabs/Module/Register.php:224 -msgid "" -"This site has exceeded the number of allowed daily account registrations. " -"Please try again tomorrow." -msgstr "Este sitio ha excedido el límite de inscripción diaria de cuentas. Por favor, inténtelo de nuevo mañana." +#: ../../Zotlabs/Module/Register.php:483 +msgid "Register at another affiliated hub" +msgstr "Regístrese en otro hub afiliado" -#: ../../Zotlabs/Module/Register.php:239 ../../Zotlabs/Module/Siteinfo.php:28 +#: ../../Zotlabs/Module/Register.php:497 ../../Zotlabs/Module/Siteinfo.php:28 msgid "Terms of Service" msgstr "Términos del servicio" -#: ../../Zotlabs/Module/Register.php:245 +#: ../../Zotlabs/Module/Register.php:503 #, php-format msgid "I accept the %s for this website" msgstr "Acepto los %s de este sitio" -#: ../../Zotlabs/Module/Register.php:252 +#: ../../Zotlabs/Module/Register.php:510 #, php-format msgid "I am over %s years of age and accept the %s for this website" msgstr "Tengo más de %s años de edad y acepto los %s de este sitio web" -#: ../../Zotlabs/Module/Register.php:257 +#: ../../Zotlabs/Module/Register.php:520 msgid "Your email address" msgstr "Su dirección de correo electrónico" -#: ../../Zotlabs/Module/Register.php:258 +#: ../../Zotlabs/Module/Register.php:522 ../../Zotlabs/Module/Oauth.php:117 +#: ../../Zotlabs/Module/Sources.php:123 ../../Zotlabs/Module/Sources.php:158 +msgid "Optional" +msgstr "Opcional" + +#: ../../Zotlabs/Module/Register.php:527 msgid "Choose a password" msgstr "Elija una contraseña" -#: ../../Zotlabs/Module/Register.php:259 +#: ../../Zotlabs/Module/Register.php:528 msgid "Please re-enter your password" msgstr "Por favor, vuelva a escribir su contraseña" -#: ../../Zotlabs/Module/Register.php:260 +#: ../../Zotlabs/Module/Register.php:530 msgid "Please enter your invitation code" msgstr "Por favor, introduzca el código de su invitación" -#: ../../Zotlabs/Module/Register.php:261 -msgid "Your Name" +#: ../../Zotlabs/Module/Register.php:532 +msgid "Your name" msgstr "Su nombre" -#: ../../Zotlabs/Module/Register.php:261 -msgid "Real names are preferred." -msgstr "Se prefieren los nombres reales" +#: ../../Zotlabs/Module/Register.php:532 +msgid "Real name is preferred" +msgstr "Se prefiere el nombre real" -#: ../../Zotlabs/Module/Register.php:263 +#: ../../Zotlabs/Module/Register.php:534 #: ../../Zotlabs/Module/New_channel.php:177 msgid "Choose a short nickname" msgstr "Elija un alias corto" -#: ../../Zotlabs/Module/Register.php:263 -#, php-format +#: ../../Zotlabs/Module/Register.php:534 msgid "" -"Your nickname will be used to create an easy to remember channel address " -"e.g. nickname%s" -msgstr "Su alias se usará para crear una dirección de canal fácil de recordar, p. ej.: alias%s" +"Your nickname will be used to create an easy to remember channel address" +msgstr "Tu alias se utilizará para crear una dirección de canal fácil de recordar" -#: ../../Zotlabs/Module/Register.php:264 -#: ../../Zotlabs/Module/New_channel.php:178 -#: ../../Zotlabs/Module/Settings/Channel.php:537 -msgid "Channel role and privacy" -msgstr "Clase de canal y privacidad" +#: ../../Zotlabs/Module/Register.php:538 +msgid "Why do you want to join this hub?" +msgstr "¿Por qué quiere unirse a este hub?" -#: ../../Zotlabs/Module/Register.php:264 -msgid "" -"Select a channel permission role for your usage needs and privacy " -"requirements." -msgstr "Seleccione unos permisos de rol del canal compatibles con sus necesidades de uso y requisitos de privacidad." +#: ../../Zotlabs/Module/Register.php:538 +msgid "This will help to review your registration" +msgstr "Esto ayudará a revisar su registro" -#: ../../Zotlabs/Module/Register.php:264 -#: ../../Zotlabs/Module/New_channel.php:178 -msgid "Read more about channel permission roles" -msgstr "Leer más sobre los roles y permisos" - -#: ../../Zotlabs/Module/Register.php:265 -msgid "no" -msgstr "no" - -#: ../../Zotlabs/Module/Register.php:265 -msgid "yes" -msgstr "sí" - -#: ../../Zotlabs/Module/Register.php:277 -#: ../../Zotlabs/Module/Admin/Site.php:294 +#: ../../Zotlabs/Module/Register.php:544 +#: ../../Zotlabs/Module/Admin/Site.php:413 msgid "Registration" msgstr "Registro" -#: ../../Zotlabs/Module/Register.php:294 +#: ../../Zotlabs/Module/Register.php:552 +msgid "I have an invite code" +msgstr "Tengo un código de invitación" + +#: ../../Zotlabs/Module/Register.php:599 msgid "" -"This site requires email verification. After completing this form, please " -"check your email for further instructions." -msgstr "Este sitio requiere verificación por correo electrónico. Después de completar este formulario, por favor revise su correo electrónico para más instrucciones." +"This site has exceeded the number of allowed daily account registrations." +msgstr "Este sitio ha superado el número permitido de registros diarios de cuentas." -#: ../../Zotlabs/Module/Search.php:22 +#: ../../Zotlabs/Module/Search.php:21 #: ../../Zotlabs/Module/Viewconnections.php:23 #: ../../Zotlabs/Module/Ratings.php:83 ../../Zotlabs/Module/Display.php:26 #: ../../Zotlabs/Module/Directory.php:73 ../../Zotlabs/Module/Directory.php:78 @@ -8527,425 +8567,425 @@ msgstr "Este sitio requiere verificación por correo electrónico. Después de c msgid "Public access denied." msgstr "Acceso público denegado." -#: ../../Zotlabs/Module/Search.php:251 +#: ../../Zotlabs/Module/Search.php:250 #, php-format msgid "Items tagged with: %s" msgstr "elementos etiquetados con: %s" -#: ../../Zotlabs/Module/Search.php:253 +#: ../../Zotlabs/Module/Search.php:252 #, php-format msgid "Search results for: %s" msgstr "Resultados de la búsqueda para: %s" -#: ../../Zotlabs/Module/Setup.php:167 +#: ../../Zotlabs/Module/Setup.php:169 msgid "$Projectname Server - Setup" msgstr "Servidor $Projectname - Instalación" -#: ../../Zotlabs/Module/Setup.php:171 +#: ../../Zotlabs/Module/Setup.php:173 msgid "Could not connect to database." msgstr "No se ha podido conectar a la base de datos." -#: ../../Zotlabs/Module/Setup.php:175 +#: ../../Zotlabs/Module/Setup.php:177 msgid "" "Could not connect to specified site URL. Possible SSL certificate or DNS " "issue." msgstr "No se puede conectar con la dirección del sitio indicada. Podría tratarse de un problema de SSL o DNS." -#: ../../Zotlabs/Module/Setup.php:182 +#: ../../Zotlabs/Module/Setup.php:184 msgid "Could not create table." msgstr "No se puede crear la tabla." -#: ../../Zotlabs/Module/Setup.php:188 +#: ../../Zotlabs/Module/Setup.php:190 msgid "Your site database has been installed." msgstr "La base de datos del sitio ha sido instalada." -#: ../../Zotlabs/Module/Setup.php:194 +#: ../../Zotlabs/Module/Setup.php:196 msgid "" "You may need to import the file \"install/schema_xxx.sql\" manually using a " "database client." msgstr "Podría tener que importar manualmente el fichero \"install/schema_xxx.sql\" usando un cliente de base de datos." -#: ../../Zotlabs/Module/Setup.php:195 ../../Zotlabs/Module/Setup.php:259 -#: ../../Zotlabs/Module/Setup.php:766 +#: ../../Zotlabs/Module/Setup.php:197 ../../Zotlabs/Module/Setup.php:261 +#: ../../Zotlabs/Module/Setup.php:768 msgid "Please see the file \"install/INSTALL.txt\"." msgstr "Por favor, lea el fichero \"install/INSTALL.txt\"." -#: ../../Zotlabs/Module/Setup.php:256 +#: ../../Zotlabs/Module/Setup.php:258 msgid "System check" msgstr "Verificación del sistema" -#: ../../Zotlabs/Module/Setup.php:260 ../../Zotlabs/Module/Cdav.php:1036 +#: ../../Zotlabs/Module/Setup.php:262 ../../Zotlabs/Module/Cdav.php:1037 #: ../../Zotlabs/Module/Events.php:698 ../../Zotlabs/Module/Events.php:707 #: ../../Zotlabs/Module/Cal.php:204 ../../Zotlabs/Module/Photos.php:956 msgid "Next" msgstr "Siguiente" -#: ../../Zotlabs/Module/Setup.php:261 +#: ../../Zotlabs/Module/Setup.php:263 msgid "Check again" msgstr "Verificar de nuevo" -#: ../../Zotlabs/Module/Setup.php:282 +#: ../../Zotlabs/Module/Setup.php:284 msgid "Database connection" msgstr "Conexión a la base de datos" -#: ../../Zotlabs/Module/Setup.php:283 +#: ../../Zotlabs/Module/Setup.php:285 msgid "" "In order to install $Projectname we need to know how to connect to your " "database." msgstr "Para instalar $Projectname es necesario saber cómo conectar con su base de datos." -#: ../../Zotlabs/Module/Setup.php:284 +#: ../../Zotlabs/Module/Setup.php:286 msgid "" "Please contact your hosting provider or site administrator if you have " "questions about these settings." msgstr "Por favor, contacte con el proveedor de servicios o el administrador del sitio si tiene dudas sobre estos ajustes." -#: ../../Zotlabs/Module/Setup.php:285 +#: ../../Zotlabs/Module/Setup.php:287 msgid "" "The database you specify below should already exist. If it does not, please " "create it before continuing." msgstr "La base de datos que especifique a continuación debe existir ya. Si no es así, por favor, créela antes de seguir." -#: ../../Zotlabs/Module/Setup.php:289 +#: ../../Zotlabs/Module/Setup.php:291 msgid "Database Server Name" msgstr "Nombre del servidor de base de datos" -#: ../../Zotlabs/Module/Setup.php:289 +#: ../../Zotlabs/Module/Setup.php:291 msgid "Default is 127.0.0.1" msgstr "De forma predeterminada es 127.0.0.1" -#: ../../Zotlabs/Module/Setup.php:290 +#: ../../Zotlabs/Module/Setup.php:292 msgid "Database Port" msgstr "Puerto de la base de datos" -#: ../../Zotlabs/Module/Setup.php:290 +#: ../../Zotlabs/Module/Setup.php:292 msgid "Communication port number - use 0 for default" msgstr "Número del puerto de comunicaciones - use 0 como valor por defecto" -#: ../../Zotlabs/Module/Setup.php:291 +#: ../../Zotlabs/Module/Setup.php:293 msgid "Database Login Name" msgstr "Usuario de la base de datos" -#: ../../Zotlabs/Module/Setup.php:292 +#: ../../Zotlabs/Module/Setup.php:294 msgid "Database Login Password" msgstr "Contraseña de acceso a la base de datos" -#: ../../Zotlabs/Module/Setup.php:293 +#: ../../Zotlabs/Module/Setup.php:295 msgid "Database Name" msgstr "Nombre de la base de datos" -#: ../../Zotlabs/Module/Setup.php:294 +#: ../../Zotlabs/Module/Setup.php:296 msgid "Database Type" msgstr "Tipo de base de datos" -#: ../../Zotlabs/Module/Setup.php:296 ../../Zotlabs/Module/Setup.php:336 +#: ../../Zotlabs/Module/Setup.php:298 ../../Zotlabs/Module/Setup.php:338 msgid "Site administrator email address" msgstr "Dirección de correo electrónico del administrador del sitio" -#: ../../Zotlabs/Module/Setup.php:296 ../../Zotlabs/Module/Setup.php:336 +#: ../../Zotlabs/Module/Setup.php:298 ../../Zotlabs/Module/Setup.php:338 msgid "" "Your account email address must match this in order to use the web admin " "panel." msgstr "Su cuenta deberá usar la misma dirección de correo electrónico para poder utilizar el panel de administración web." -#: ../../Zotlabs/Module/Setup.php:297 ../../Zotlabs/Module/Setup.php:338 +#: ../../Zotlabs/Module/Setup.php:299 ../../Zotlabs/Module/Setup.php:340 msgid "Website URL" msgstr "Dirección del sitio web" -#: ../../Zotlabs/Module/Setup.php:297 ../../Zotlabs/Module/Setup.php:338 +#: ../../Zotlabs/Module/Setup.php:299 ../../Zotlabs/Module/Setup.php:340 msgid "Please use SSL (https) URL if available." msgstr "Por favor, use SSL (https) si está disponible." -#: ../../Zotlabs/Module/Setup.php:298 ../../Zotlabs/Module/Setup.php:340 +#: ../../Zotlabs/Module/Setup.php:300 ../../Zotlabs/Module/Setup.php:342 msgid "Please select a default timezone for your website" msgstr "Por favor, selecciones el huso horario por defecto de su sitio web" -#: ../../Zotlabs/Module/Setup.php:325 +#: ../../Zotlabs/Module/Setup.php:327 msgid "Site settings" msgstr "Ajustes del sitio" -#: ../../Zotlabs/Module/Setup.php:379 +#: ../../Zotlabs/Module/Setup.php:381 msgid "PHP version 7.1 or greater is required." msgstr "Se requiere la versión 7.1 o superior de PHP." -#: ../../Zotlabs/Module/Setup.php:380 +#: ../../Zotlabs/Module/Setup.php:382 msgid "PHP version" msgstr "Versión de PHP" -#: ../../Zotlabs/Module/Setup.php:396 +#: ../../Zotlabs/Module/Setup.php:398 msgid "Could not find a command line version of PHP in the web server PATH." msgstr "No se puede encontrar una versión en línea de comandos de PHP en la ruta del servidor web." -#: ../../Zotlabs/Module/Setup.php:397 +#: ../../Zotlabs/Module/Setup.php:399 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 "Si no tiene instalada la versión de línea de comandos de PHP en su servidor, no podrá realizar envíos en segundo plano mediante cron." -#: ../../Zotlabs/Module/Setup.php:401 +#: ../../Zotlabs/Module/Setup.php:403 msgid "PHP executable path" msgstr "Ruta del ejecutable PHP" -#: ../../Zotlabs/Module/Setup.php:401 +#: ../../Zotlabs/Module/Setup.php:403 msgid "" "Enter full path to php executable. You can leave this blank to continue the " "installation." msgstr "Introducir la ruta completa del ejecutable PHP. Puede dejar la línea en blanco para continuar la instalación." -#: ../../Zotlabs/Module/Setup.php:406 +#: ../../Zotlabs/Module/Setup.php:408 msgid "Command line PHP" msgstr "PHP en línea de comandos" -#: ../../Zotlabs/Module/Setup.php:416 +#: ../../Zotlabs/Module/Setup.php:418 msgid "" "Unable to check command line PHP, as shell_exec() is disabled. This is " "required." msgstr "No se puede comprobar la línea de comandos PHP, ya que shell_exec() está deshabilitado. Es necesario que esté activado." -#: ../../Zotlabs/Module/Setup.php:420 +#: ../../Zotlabs/Module/Setup.php:422 msgid "" "The command line version of PHP on your system does not have " "\"register_argc_argv\" enabled." msgstr "La línea de comandos PHP de su sistema no tiene activado \"register_argc_argv\"." -#: ../../Zotlabs/Module/Setup.php:421 +#: ../../Zotlabs/Module/Setup.php:423 msgid "This is required for message delivery to work." msgstr "Esto es necesario para que funcione la transmisión de mensajes." -#: ../../Zotlabs/Module/Setup.php:424 +#: ../../Zotlabs/Module/Setup.php:426 msgid "PHP register_argc_argv" msgstr "PHP register_argc_argv" -#: ../../Zotlabs/Module/Setup.php:444 +#: ../../Zotlabs/Module/Setup.php:446 msgid "" "This is not sufficient to upload larger images or files. You should be able " "to upload at least 4 MB at once." msgstr "Esto no es suficiente para subir imágenes o archivos más grandes. Usted debe ser capaz de subir al menos 4 MB a la vez." -#: ../../Zotlabs/Module/Setup.php:446 +#: ../../Zotlabs/Module/Setup.php:448 #, 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 "La carga máxima que se le permite subir está establecida en %s. El tamaño máximo de un fichero está establecido en %s. Está permitido subir hasta un máximo de %d ficheros de una sola vez." -#: ../../Zotlabs/Module/Setup.php:452 +#: ../../Zotlabs/Module/Setup.php:454 msgid "You can adjust these settings in the server php.ini file." msgstr "Puede ajustar estos valores en el fichero php.ini de su servidor." -#: ../../Zotlabs/Module/Setup.php:454 +#: ../../Zotlabs/Module/Setup.php:456 msgid "PHP upload limits" msgstr "Límites PHP de subida" -#: ../../Zotlabs/Module/Setup.php:477 +#: ../../Zotlabs/Module/Setup.php:479 msgid "" "Error: the \"openssl_pkey_new\" function on this system is not able to " "generate encryption keys" msgstr "Error: La función \"openssl_pkey_new\" en este sistema no es capaz de general claves de cifrado." -#: ../../Zotlabs/Module/Setup.php:478 +#: ../../Zotlabs/Module/Setup.php:480 msgid "" "If running under Windows, please see " "\"http://www.php.net/manual/en/openssl.installation.php\"." msgstr "Si está en un servidor Windows, por favor, lea \"http://www.php.net/manual/en/openssl.installation.php\"." -#: ../../Zotlabs/Module/Setup.php:481 +#: ../../Zotlabs/Module/Setup.php:483 msgid "Generate encryption keys" msgstr "Generar claves de cifrado" -#: ../../Zotlabs/Module/Setup.php:498 +#: ../../Zotlabs/Module/Setup.php:500 msgid "libCurl PHP module" msgstr "módulo libCurl PHP" -#: ../../Zotlabs/Module/Setup.php:499 +#: ../../Zotlabs/Module/Setup.php:501 msgid "GD graphics PHP module" msgstr "módulo PHP GD graphics" -#: ../../Zotlabs/Module/Setup.php:500 +#: ../../Zotlabs/Module/Setup.php:502 msgid "OpenSSL PHP module" msgstr "módulo PHP OpenSSL" -#: ../../Zotlabs/Module/Setup.php:501 +#: ../../Zotlabs/Module/Setup.php:503 msgid "PDO database PHP module" msgstr "Módulo PHP de la base de datos PDO " -#: ../../Zotlabs/Module/Setup.php:502 +#: ../../Zotlabs/Module/Setup.php:504 msgid "mb_string PHP module" msgstr "módulo PHP mb_string" -#: ../../Zotlabs/Module/Setup.php:503 +#: ../../Zotlabs/Module/Setup.php:505 msgid "xml PHP module" msgstr "módulo PHP xml" -#: ../../Zotlabs/Module/Setup.php:504 +#: ../../Zotlabs/Module/Setup.php:506 msgid "zip PHP module" msgstr "Módulo zip PHP" -#: ../../Zotlabs/Module/Setup.php:508 ../../Zotlabs/Module/Setup.php:510 +#: ../../Zotlabs/Module/Setup.php:510 ../../Zotlabs/Module/Setup.php:512 msgid "Apache mod_rewrite module" msgstr "módulo Apache mod_rewrite " -#: ../../Zotlabs/Module/Setup.php:508 +#: ../../Zotlabs/Module/Setup.php:510 msgid "" "Error: Apache webserver mod-rewrite module is required but not installed." msgstr "Error: se necesita el módulo del servidor web Apache mod-rewrite pero no está instalado." -#: ../../Zotlabs/Module/Setup.php:514 ../../Zotlabs/Module/Setup.php:517 +#: ../../Zotlabs/Module/Setup.php:516 ../../Zotlabs/Module/Setup.php:519 msgid "exec" msgstr "ejecutable" -#: ../../Zotlabs/Module/Setup.php:514 +#: ../../Zotlabs/Module/Setup.php:516 msgid "" "Error: exec is required but is either not installed or has been disabled in " "php.ini" msgstr "Error: se necesita un ejecutable pero o no se instaló o está deshabilitado en php.ini" -#: ../../Zotlabs/Module/Setup.php:520 ../../Zotlabs/Module/Setup.php:523 +#: ../../Zotlabs/Module/Setup.php:522 ../../Zotlabs/Module/Setup.php:525 msgid "shell_exec" msgstr "shell_exec" -#: ../../Zotlabs/Module/Setup.php:520 +#: ../../Zotlabs/Module/Setup.php:522 msgid "" "Error: shell_exec is required but is either not installed or has been " "disabled in php.ini" msgstr "Error: se necesita shell_exec pero o no se instaló o está deshabilitado en php.ini" -#: ../../Zotlabs/Module/Setup.php:528 +#: ../../Zotlabs/Module/Setup.php:530 msgid "Error: libCURL PHP module required but not installed." msgstr "Error: se necesita el módulo PHP libCURL pero no está instalado." -#: ../../Zotlabs/Module/Setup.php:532 +#: ../../Zotlabs/Module/Setup.php:534 msgid "" "Error: GD PHP module with JPEG support or ImageMagick graphics library " "required but not installed." msgstr "Error: Se requiere el módulo GD PHP con soporte para JPEG o la biblioteca de gráficos ImageMagick, pero no está instalado." -#: ../../Zotlabs/Module/Setup.php:536 +#: ../../Zotlabs/Module/Setup.php:538 msgid "Error: openssl PHP module required but not installed." msgstr "Error: el módulo PHP openssl es necesario, pero no está instalado." -#: ../../Zotlabs/Module/Setup.php:542 +#: ../../Zotlabs/Module/Setup.php:544 msgid "" "Error: PDO database PHP module missing a driver for either mysql or pgsql." msgstr "Error: El módulo PHP de la base de datos PDO carece de un controlador para mysql o pgsql." -#: ../../Zotlabs/Module/Setup.php:547 +#: ../../Zotlabs/Module/Setup.php:549 msgid "Error: PDO database PHP module required but not installed." msgstr "Error: se necesita el módulo PHP de la base de datos PDO, pero no está instalado." -#: ../../Zotlabs/Module/Setup.php:551 +#: ../../Zotlabs/Module/Setup.php:553 msgid "Error: mb_string PHP module required but not installed." msgstr "Error: el módulo PHP mb_string es necesario, pero no está instalado." -#: ../../Zotlabs/Module/Setup.php:555 +#: ../../Zotlabs/Module/Setup.php:557 msgid "Error: xml PHP module required for DAV but not installed." msgstr "Error: el módulo PHP xml es necesario para DAV, pero no está instalado." -#: ../../Zotlabs/Module/Setup.php:559 +#: ../../Zotlabs/Module/Setup.php:561 msgid "Error: zip PHP module required but not installed." msgstr "Error: se requiere el módulo zip PHP pero no está instalado." -#: ../../Zotlabs/Module/Setup.php:578 ../../Zotlabs/Module/Setup.php:587 +#: ../../Zotlabs/Module/Setup.php:580 ../../Zotlabs/Module/Setup.php:589 msgid ".htconfig.php is writable" msgstr ".htconfig.php tiene permisos de escritura" -#: ../../Zotlabs/Module/Setup.php:583 +#: ../../Zotlabs/Module/Setup.php:585 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 "El instalador web no ha podido crear un fichero llamado “.htconfig.php” en la carpeta base de su servidor." -#: ../../Zotlabs/Module/Setup.php:584 +#: ../../Zotlabs/Module/Setup.php:586 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 "Esto está generalmente ligado a un problema de permisos, a causa del cual el servidor web tiene prohibido modificar ficheros en su carpeta - incluso si usted mismo tiene esos permisos." -#: ../../Zotlabs/Module/Setup.php:585 +#: ../../Zotlabs/Module/Setup.php:587 msgid "Please see install/INSTALL.txt for additional information." msgstr "Por favor, consulte install/INSTALL.txt para más información." -#: ../../Zotlabs/Module/Setup.php:601 +#: ../../Zotlabs/Module/Setup.php:603 msgid "" "This software uses the Smarty3 template engine to render its web views. " "Smarty3 compiles templates to PHP to speed up rendering." msgstr "Este software hace uso del motor de plantillas Smarty3 para diseñar sus plantillas gráficas. Smarty3 compila las plantillas a PHP para acelerar la renderización." -#: ../../Zotlabs/Module/Setup.php:602 +#: ../../Zotlabs/Module/Setup.php:604 #, 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 "Para poder guardar las plantillas compiladas, el servidor web necesita permisos para acceder al directorio %s en la carpeta web principal." -#: ../../Zotlabs/Module/Setup.php:603 ../../Zotlabs/Module/Setup.php:624 +#: ../../Zotlabs/Module/Setup.php:605 ../../Zotlabs/Module/Setup.php:626 msgid "" "Please ensure that the user that your web server runs as (e.g. www-data) has" " write access to this folder." msgstr "Por favor, asegúrese de que el servidor web está siendo ejecutado por un usuario que tenga permisos de escritura sobre esta carpeta (por ejemplo, www-data)." -#: ../../Zotlabs/Module/Setup.php:604 +#: ../../Zotlabs/Module/Setup.php:606 #, 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 "Nota: como medida de seguridad, debe dar al servidor web permisos de escritura solo sobre %s - no sobre el fichero de plantilla (.tpl) que contiene." -#: ../../Zotlabs/Module/Setup.php:607 +#: ../../Zotlabs/Module/Setup.php:609 #, php-format msgid "%s is writable" msgstr "%s tiene permisos de escritura" -#: ../../Zotlabs/Module/Setup.php:623 +#: ../../Zotlabs/Module/Setup.php:625 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 "Este software utiliza el directorio de almacenamiento para guardar los ficheros subidos. El servidor web debe tener acceso de escritura a este directorio en la carpeta de nivel superior" -#: ../../Zotlabs/Module/Setup.php:627 +#: ../../Zotlabs/Module/Setup.php:629 msgid "store is writable" msgstr "\"store\" tiene permisos de escritura" -#: ../../Zotlabs/Module/Setup.php:659 +#: ../../Zotlabs/Module/Setup.php:661 msgid "" "SSL certificate cannot be validated. Fix certificate or disable https access" " to this site." msgstr "El certificado SSL no ha podido ser validado. Corrija este problema o desactive el acceso https a este sitio." -#: ../../Zotlabs/Module/Setup.php:660 +#: ../../Zotlabs/Module/Setup.php:662 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 "Si su servidor soporta conexiones cifradas SSL o si permite conexiones al puerto TCP 443 (el puerto usado por el protocolo https), debe utilizar un certificado válido. No debe usar un certificado firmado por usted mismo." -#: ../../Zotlabs/Module/Setup.php:661 +#: ../../Zotlabs/Module/Setup.php:663 msgid "" "This restriction is incorporated because public posts from you may for " "example contain references to images on your own hub." msgstr "Se ha incorporado esta restricción para evitar que sus entradas públicas hagan referencia a imágenes en su propio servidor." -#: ../../Zotlabs/Module/Setup.php:662 +#: ../../Zotlabs/Module/Setup.php:664 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 "Si su certificado no ha sido reconocido, los miembros de otros sitios (con certificados válidos) recibirán mensajes de aviso en sus propios sitios web." -#: ../../Zotlabs/Module/Setup.php:663 +#: ../../Zotlabs/Module/Setup.php:665 msgid "" "This can cause usability issues elsewhere (not just on your own site) so we " "must insist on this requirement." msgstr "Por razones de compatibilidad (sobre el conjunto de la red, no solo sobre su propio sitio), debemos insistir en estos requisitos." -#: ../../Zotlabs/Module/Setup.php:664 +#: ../../Zotlabs/Module/Setup.php:666 msgid "" "Providers are available that issue free certificates which are browser-" "valid." msgstr "Existen varias Autoridades de Certificación que le pueden proporcionar certificados válidos." -#: ../../Zotlabs/Module/Setup.php:665 +#: ../../Zotlabs/Module/Setup.php:667 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. " @@ -8953,32 +8993,32 @@ msgid "" "server communications." msgstr "Si se tiene la certeza de que el certificado es válido y está firmado por una autoridad de confianza, comprobar para ver si hubo un error al instalar un certificado intermedio. Estos no son normalmente requeridos por los navegadores, pero son necesarios para las comunicaciones de servidor a servidor." -#: ../../Zotlabs/Module/Setup.php:667 +#: ../../Zotlabs/Module/Setup.php:669 msgid "SSL certificate validation" msgstr "validación del certificado SSL" -#: ../../Zotlabs/Module/Setup.php:673 +#: ../../Zotlabs/Module/Setup.php:675 msgid "" "Url rewrite in .htaccess is not working. Check your server " "configuration.Test: " msgstr "No se pueden reescribir las direcciones web en .htaccess. Compruebe la configuración de su servidor:" -#: ../../Zotlabs/Module/Setup.php:676 +#: ../../Zotlabs/Module/Setup.php:678 msgid "Url rewrite is working" msgstr "La reescritura de las direcciones funciona correctamente" -#: ../../Zotlabs/Module/Setup.php:689 +#: ../../Zotlabs/Module/Setup.php:691 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." msgstr "El fichero de configuración de la base de datos .htconfig.php no se ha podido modificar. Por favor, copie el texto generado en un fichero con ese nombre en el directorio raíz de su servidor." -#: ../../Zotlabs/Module/Setup.php:764 +#: ../../Zotlabs/Module/Setup.php:766 msgid "

What next?

" msgstr "

¿Qué sigue?

" -#: ../../Zotlabs/Module/Setup.php:765 +#: ../../Zotlabs/Module/Setup.php:767 msgid "" "IMPORTANT: You will need to [manually] setup a scheduled task for the " "poller." @@ -9032,18 +9072,18 @@ msgstr "Valorar" #: ../../Zotlabs/Module/Pubsites.php:61 ../../Zotlabs/Module/Webpages.php:261 #: ../../Zotlabs/Module/Events.php:702 ../../Zotlabs/Module/Blocks.php:166 -#: ../../Zotlabs/Module/Wiki.php:213 ../../Zotlabs/Module/Wiki.php:409 +#: ../../Zotlabs/Module/Wiki.php:212 ../../Zotlabs/Module/Wiki.php:408 #: ../../Zotlabs/Module/Layouts.php:198 msgid "View" msgstr "Ver" #: ../../Zotlabs/Module/Channel.php:131 ../../Zotlabs/Module/Hcard.php:37 -#: ../../Zotlabs/Module/Profile.php:60 +#: ../../Zotlabs/Module/Profile.php:62 msgid "Posts and comments" msgstr "Publicaciones y comentarios" #: ../../Zotlabs/Module/Channel.php:138 ../../Zotlabs/Module/Hcard.php:44 -#: ../../Zotlabs/Module/Profile.php:67 +#: ../../Zotlabs/Module/Profile.php:69 msgid "Only posts" msgstr "Solo publicaciones" @@ -9051,7 +9091,7 @@ msgstr "Solo publicaciones" msgid "Insufficient permissions. Request redirected to profile page." msgstr "Permisos insuficientes. Petición redirigida a la página del perfil." -#: ../../Zotlabs/Module/Channel.php:482 ../../Zotlabs/Module/Display.php:362 +#: ../../Zotlabs/Module/Channel.php:483 ../../Zotlabs/Module/Display.php:354 msgid "" "You must enable javascript for your browser to be able to view this content." msgstr "Debe habilitar javascript para poder ver este contenido en su navegador." @@ -9218,7 +9258,7 @@ msgid "Key and Secret are required" msgstr "\"Key\" y \"Secret\" son obligatorios" #: ../../Zotlabs/Module/Oauth.php:53 ../../Zotlabs/Module/Oauth.php:137 -#: ../../Zotlabs/Module/Cdav.php:1053 ../../Zotlabs/Module/Cdav.php:1388 +#: ../../Zotlabs/Module/Cdav.php:1054 ../../Zotlabs/Module/Cdav.php:1389 #: ../../Zotlabs/Module/Admin/Addons.php:457 #: ../../Zotlabs/Module/Profiles.php:801 ../../Zotlabs/Module/Oauth2.php:58 #: ../../Zotlabs/Module/Oauth2.php:144 ../../Zotlabs/Module/Connedit.php:932 @@ -9266,11 +9306,6 @@ msgstr "URI de redirección - dejar en blanco a menos que su aplicación especí msgid "Icon url" msgstr "Dirección del icono" -#: ../../Zotlabs/Module/Oauth.php:117 ../../Zotlabs/Module/Sources.php:123 -#: ../../Zotlabs/Module/Sources.php:158 -msgid "Optional" -msgstr "Opcional" - #: ../../Zotlabs/Module/Oauth.php:128 msgid "Application not found." msgstr "Aplicación no encontrada." @@ -9315,7 +9350,7 @@ msgstr "¡Bienvenido a Hubzilla!" msgid "You have got no unseen posts..." msgstr "No tiene ningún mensaje sin leer..." -#: ../../Zotlabs/Module/Pin.php:36 ../../Zotlabs/Module/Item.php:461 +#: ../../Zotlabs/Module/Pin.php:36 ../../Zotlabs/Module/Item.php:471 msgid "Unable to locate original post." msgstr "No ha sido posible encontrar la entrada original." @@ -9373,7 +9408,7 @@ msgid "No chatrooms available" msgstr "No hay salas de chat disponibles" #: ../../Zotlabs/Module/Chat.php:262 ../../Zotlabs/Module/Manage.php:145 -#: ../../Zotlabs/Module/Profiles.php:833 ../../Zotlabs/Module/Wiki.php:214 +#: ../../Zotlabs/Module/Profiles.php:833 ../../Zotlabs/Module/Wiki.php:213 msgid "Create New" msgstr "Crear" @@ -9420,7 +9455,7 @@ msgid "Delete event" msgstr "Borrar evento" #: ../../Zotlabs/Module/Channel_calendar.php:392 -#: ../../Zotlabs/Module/Cdav.php:943 ../../Zotlabs/Module/Cal.php:165 +#: ../../Zotlabs/Module/Cdav.php:944 ../../Zotlabs/Module/Cal.php:165 msgid "Link to source" msgstr "Enlace a la fuente" @@ -9520,168 +9555,168 @@ msgstr "Elegir qué desea enviar al destinatario" msgid "Make this post private" msgstr "Convertir en privado este envío" -#: ../../Zotlabs/Module/Cdav.php:818 ../../Zotlabs/Module/Events.php:28 +#: ../../Zotlabs/Module/Cdav.php:819 ../../Zotlabs/Module/Events.php:28 msgid "Calendar entries imported." msgstr "Entradas de calendario importadas." -#: ../../Zotlabs/Module/Cdav.php:820 ../../Zotlabs/Module/Events.php:30 +#: ../../Zotlabs/Module/Cdav.php:821 ../../Zotlabs/Module/Events.php:30 msgid "No calendar entries found." msgstr "No se han encontrado entradas de calendario." -#: ../../Zotlabs/Module/Cdav.php:876 +#: ../../Zotlabs/Module/Cdav.php:877 msgid "CardDAV App" msgstr "App CarDav" -#: ../../Zotlabs/Module/Cdav.php:877 +#: ../../Zotlabs/Module/Cdav.php:878 msgid "CalDAV capable addressbook" msgstr "Libreta de direcciones compatible con CalDav" -#: ../../Zotlabs/Module/Cdav.php:1009 ../../Zotlabs/Module/Events.php:468 +#: ../../Zotlabs/Module/Cdav.php:1010 ../../Zotlabs/Module/Events.php:468 msgid "Event title" msgstr "Título del evento" -#: ../../Zotlabs/Module/Cdav.php:1010 ../../Zotlabs/Module/Events.php:474 +#: ../../Zotlabs/Module/Cdav.php:1011 ../../Zotlabs/Module/Events.php:474 msgid "Start date and time" msgstr "Fecha y hora de comienzo" -#: ../../Zotlabs/Module/Cdav.php:1011 +#: ../../Zotlabs/Module/Cdav.php:1012 msgid "End date and time" msgstr "Fecha y hora de finalización" -#: ../../Zotlabs/Module/Cdav.php:1012 ../../Zotlabs/Module/Events.php:497 +#: ../../Zotlabs/Module/Cdav.php:1013 ../../Zotlabs/Module/Events.php:497 msgid "Timezone:" msgstr "Zona horaria: " -#: ../../Zotlabs/Module/Cdav.php:1035 ../../Zotlabs/Module/Events.php:697 +#: ../../Zotlabs/Module/Cdav.php:1036 ../../Zotlabs/Module/Events.php:697 #: ../../Zotlabs/Module/Events.php:706 ../../Zotlabs/Module/Cal.php:203 #: ../../Zotlabs/Module/Photos.php:947 msgid "Previous" msgstr "Anterior" -#: ../../Zotlabs/Module/Cdav.php:1037 ../../Zotlabs/Module/Events.php:708 +#: ../../Zotlabs/Module/Cdav.php:1038 ../../Zotlabs/Module/Events.php:708 #: ../../Zotlabs/Module/Cal.php:205 msgid "Today" msgstr "Hoy" -#: ../../Zotlabs/Module/Cdav.php:1038 ../../Zotlabs/Module/Events.php:703 +#: ../../Zotlabs/Module/Cdav.php:1039 ../../Zotlabs/Module/Events.php:703 msgid "Month" msgstr "Mes" -#: ../../Zotlabs/Module/Cdav.php:1039 ../../Zotlabs/Module/Events.php:704 +#: ../../Zotlabs/Module/Cdav.php:1040 ../../Zotlabs/Module/Events.php:704 msgid "Week" msgstr "Semana" -#: ../../Zotlabs/Module/Cdav.php:1040 ../../Zotlabs/Module/Events.php:705 +#: ../../Zotlabs/Module/Cdav.php:1041 ../../Zotlabs/Module/Events.php:705 msgid "Day" msgstr "Día" -#: ../../Zotlabs/Module/Cdav.php:1041 +#: ../../Zotlabs/Module/Cdav.php:1042 msgid "List month" msgstr "Lista mensual" -#: ../../Zotlabs/Module/Cdav.php:1042 +#: ../../Zotlabs/Module/Cdav.php:1043 msgid "List week" msgstr "Lista semanal" -#: ../../Zotlabs/Module/Cdav.php:1043 +#: ../../Zotlabs/Module/Cdav.php:1044 msgid "List day" msgstr "Lista diaria" -#: ../../Zotlabs/Module/Cdav.php:1051 +#: ../../Zotlabs/Module/Cdav.php:1052 msgid "More" msgstr "Más" -#: ../../Zotlabs/Module/Cdav.php:1052 +#: ../../Zotlabs/Module/Cdav.php:1053 msgid "Less" msgstr "Menos" -#: ../../Zotlabs/Module/Cdav.php:1054 +#: ../../Zotlabs/Module/Cdav.php:1055 msgid "Select calendar" msgstr "Seleccionar un calendario" -#: ../../Zotlabs/Module/Cdav.php:1057 +#: ../../Zotlabs/Module/Cdav.php:1058 msgid "Delete all" msgstr "Eliminar todos" -#: ../../Zotlabs/Module/Cdav.php:1060 +#: ../../Zotlabs/Module/Cdav.php:1061 msgid "Sorry! Editing of recurrent events is not yet implemented." msgstr "¡Disculpas! La edición de eventos recurrentes aún no se ha implementado." -#: ../../Zotlabs/Module/Cdav.php:1373 ../../Zotlabs/Module/Connedit.php:917 +#: ../../Zotlabs/Module/Cdav.php:1374 ../../Zotlabs/Module/Connedit.php:917 msgid "Organisation" msgstr "Organización" -#: ../../Zotlabs/Module/Cdav.php:1375 ../../Zotlabs/Module/Profiles.php:788 +#: ../../Zotlabs/Module/Cdav.php:1376 ../../Zotlabs/Module/Profiles.php:788 #: ../../Zotlabs/Module/Connedit.php:919 msgid "Phone" msgstr "Teléfono" -#: ../../Zotlabs/Module/Cdav.php:1377 ../../Zotlabs/Module/Profiles.php:790 +#: ../../Zotlabs/Module/Cdav.php:1378 ../../Zotlabs/Module/Profiles.php:790 #: ../../Zotlabs/Module/Connedit.php:921 msgid "Instant messenger" msgstr "Mensajería instantánea" -#: ../../Zotlabs/Module/Cdav.php:1378 ../../Zotlabs/Module/Profiles.php:791 +#: ../../Zotlabs/Module/Cdav.php:1379 ../../Zotlabs/Module/Profiles.php:791 #: ../../Zotlabs/Module/Connedit.php:922 msgid "Website" msgstr "Sitio web" -#: ../../Zotlabs/Module/Cdav.php:1379 +#: ../../Zotlabs/Module/Cdav.php:1380 #: ../../Zotlabs/Module/Admin/Channels.php:160 #: ../../Zotlabs/Module/Profiles.php:504 ../../Zotlabs/Module/Profiles.php:792 #: ../../Zotlabs/Module/Connedit.php:923 ../../Zotlabs/Module/Locs.php:129 msgid "Address" msgstr "Dirección" -#: ../../Zotlabs/Module/Cdav.php:1380 ../../Zotlabs/Module/Profiles.php:793 +#: ../../Zotlabs/Module/Cdav.php:1381 ../../Zotlabs/Module/Profiles.php:793 #: ../../Zotlabs/Module/Connedit.php:924 msgid "Note" msgstr "Nota" -#: ../../Zotlabs/Module/Cdav.php:1385 ../../Zotlabs/Module/Profiles.php:798 +#: ../../Zotlabs/Module/Cdav.php:1386 ../../Zotlabs/Module/Profiles.php:798 #: ../../Zotlabs/Module/Connedit.php:929 msgid "Add Contact" msgstr "Añadir un contacto" -#: ../../Zotlabs/Module/Cdav.php:1386 ../../Zotlabs/Module/Profiles.php:799 +#: ../../Zotlabs/Module/Cdav.php:1387 ../../Zotlabs/Module/Profiles.php:799 #: ../../Zotlabs/Module/Connedit.php:930 msgid "Add Field" msgstr "Añadir un campo" -#: ../../Zotlabs/Module/Cdav.php:1391 ../../Zotlabs/Module/Connedit.php:935 +#: ../../Zotlabs/Module/Cdav.php:1392 ../../Zotlabs/Module/Connedit.php:935 msgid "P.O. Box" msgstr "Buzón de correos" -#: ../../Zotlabs/Module/Cdav.php:1392 ../../Zotlabs/Module/Connedit.php:936 +#: ../../Zotlabs/Module/Cdav.php:1393 ../../Zotlabs/Module/Connedit.php:936 msgid "Additional" msgstr "Adicional" -#: ../../Zotlabs/Module/Cdav.php:1393 ../../Zotlabs/Module/Connedit.php:937 +#: ../../Zotlabs/Module/Cdav.php:1394 ../../Zotlabs/Module/Connedit.php:937 msgid "Street" msgstr "Calle" -#: ../../Zotlabs/Module/Cdav.php:1394 ../../Zotlabs/Module/Connedit.php:938 +#: ../../Zotlabs/Module/Cdav.php:1395 ../../Zotlabs/Module/Connedit.php:938 msgid "Locality" msgstr "Localidad" -#: ../../Zotlabs/Module/Cdav.php:1395 ../../Zotlabs/Module/Connedit.php:939 +#: ../../Zotlabs/Module/Cdav.php:1396 ../../Zotlabs/Module/Connedit.php:939 msgid "Region" msgstr "Provincia, región o estado" -#: ../../Zotlabs/Module/Cdav.php:1396 ../../Zotlabs/Module/Connedit.php:940 +#: ../../Zotlabs/Module/Cdav.php:1397 ../../Zotlabs/Module/Connedit.php:940 msgid "ZIP Code" msgstr "Código postal" -#: ../../Zotlabs/Module/Cdav.php:1397 ../../Zotlabs/Module/Profiles.php:759 +#: ../../Zotlabs/Module/Cdav.php:1398 ../../Zotlabs/Module/Profiles.php:759 #: ../../Zotlabs/Module/Connedit.php:941 msgid "Country" msgstr "País" -#: ../../Zotlabs/Module/Cdav.php:1456 +#: ../../Zotlabs/Module/Cdav.php:1457 msgid "Default Calendar" msgstr "Calendario por defecto" -#: ../../Zotlabs/Module/Cdav.php:1467 +#: ../../Zotlabs/Module/Cdav.php:1468 msgid "Default Addressbook" msgstr "Agenda de direcciones por defecto" @@ -9699,32 +9734,32 @@ msgctxt "acl" msgid "Profile" msgstr "Perfil" -#: ../../Zotlabs/Module/Item.php:747 +#: ../../Zotlabs/Module/Item.php:757 msgid "Empty post discarded." msgstr "La entrada vacía ha sido desechada." -#: ../../Zotlabs/Module/Item.php:1181 +#: ../../Zotlabs/Module/Item.php:1189 msgid "Duplicate post suppressed." msgstr "Se ha suprimido la entrada duplicada." -#: ../../Zotlabs/Module/Item.php:1326 +#: ../../Zotlabs/Module/Item.php:1334 msgid "System error. Post not saved." msgstr "Error del sistema. La entrada no se ha podido salvar." -#: ../../Zotlabs/Module/Item.php:1360 +#: ../../Zotlabs/Module/Item.php:1368 msgid "Your comment is awaiting approval." msgstr "Su comentario está pendiente de aprobación." -#: ../../Zotlabs/Module/Item.php:1490 +#: ../../Zotlabs/Module/Item.php:1498 msgid "Unable to obtain post information from database." msgstr "No ha sido posible obtener información de la entrada en la base de datos." -#: ../../Zotlabs/Module/Item.php:1497 +#: ../../Zotlabs/Module/Item.php:1505 #, php-format msgid "You have reached your limit of %1$.0f top level posts." msgstr "Ha alcanzado su límite de %1$.0f entradas en la página principal." -#: ../../Zotlabs/Module/Item.php:1504 +#: ../../Zotlabs/Module/Item.php:1512 #, php-format msgid "You have reached your limit of %1$.0f webpages." msgstr "Ha alcanzado su límite de %1$.0f páginas web." @@ -10073,15 +10108,11 @@ msgstr "Canal premium o restringido" msgid "Not found" msgstr "No encontrado" -#: ../../Zotlabs/Module/Cloud.php:126 -msgid "Please refresh page" -msgstr "Por favor, recargue la página" - -#: ../../Zotlabs/Module/Cloud.php:129 +#: ../../Zotlabs/Module/Cloud.php:130 msgid "Unknown error" msgstr "Error desconocido" -#: ../../Zotlabs/Module/Share.php:104 ../../Zotlabs/Lib/Activity.php:2154 +#: ../../Zotlabs/Module/Share.php:104 ../../Zotlabs/Lib/Activity.php:2186 #, php-format msgid "🔁 Repeated %1$s's %2$s" msgstr "🔁 Repetidos %2$sde %1$s" @@ -10125,7 +10156,7 @@ msgid "Do you authorize the app %s to access your channel data?" msgstr "¿Autoriza a la aplicación %s a acceder a los datos de su canal?" #: ../../Zotlabs/Module/Authorize.php:33 -#: ../../Zotlabs/Module/Admin/Accounts.php:174 +#: ../../Zotlabs/Module/Admin/Accounts.php:319 msgid "Deny" msgstr "Rechazar" @@ -10182,13 +10213,13 @@ msgstr "Instantánea de pantalla" #: ../../Zotlabs/Module/Admin/Themes.php:122 #: ../../Zotlabs/Module/Admin/Themes.php:156 #: ../../Zotlabs/Module/Admin/Security.php:98 -#: ../../Zotlabs/Module/Admin/Accounts.php:166 -#: ../../Zotlabs/Module/Admin/Site.php:291 +#: ../../Zotlabs/Module/Admin/Accounts.php:307 +#: ../../Zotlabs/Module/Admin/Site.php:408 #: ../../Zotlabs/Module/Admin/Logs.php:82 #: ../../Zotlabs/Module/Admin/Channels.php:145 #: ../../Zotlabs/Module/Admin/Addons.php:342 #: ../../Zotlabs/Module/Admin/Addons.php:440 -#: ../../Zotlabs/Module/Admin.php:138 +#: ../../Zotlabs/Module/Admin.php:141 msgid "Administration" msgstr "Administración" @@ -10357,526 +10388,690 @@ msgstr "ADVERTENCIA: Las imágenes SVG pueden contener código malicioso." msgid "Allow embedded (inline) PDF files" msgstr "Permitir ficheros PDF incrustados (en línea)" -#: ../../Zotlabs/Module/Admin/Accounts.php:37 +#: ../../Zotlabs/Module/Admin/Accounts.php:128 #, php-format msgid "%s account blocked/unblocked" msgid_plural "%s account blocked/unblocked" msgstr[0] "%s cuenta bloqueada/desbloqueada" msgstr[1] "%s cuenta bloqueada/desbloqueada" -#: ../../Zotlabs/Module/Admin/Accounts.php:44 +#: ../../Zotlabs/Module/Admin/Accounts.php:135 #, php-format msgid "%s account deleted" msgid_plural "%s accounts deleted" msgstr[0] "%s cuentas eliminadas" msgstr[1] "%s cuentas eliminadas" -#: ../../Zotlabs/Module/Admin/Accounts.php:80 +#: ../../Zotlabs/Module/Admin/Accounts.php:171 msgid "Account not found" msgstr "Cuenta no encontrada" -#: ../../Zotlabs/Module/Admin/Accounts.php:99 +#: ../../Zotlabs/Module/Admin/Accounts.php:192 #, php-format msgid "Account '%s' blocked" msgstr "La cuenta '%s' ha sido bloqueada" -#: ../../Zotlabs/Module/Admin/Accounts.php:107 +#: ../../Zotlabs/Module/Admin/Accounts.php:200 #, php-format msgid "Account '%s' unblocked" msgstr "La cuenta '%s' ha sido desbloqueada" -#: ../../Zotlabs/Module/Admin/Accounts.php:169 -#: ../../Zotlabs/Module/Admin/Channels.php:148 -msgid "select all" -msgstr "seleccionar todo" +#: ../../Zotlabs/Module/Admin/Accounts.php:240 +msgid "Unverified" +msgstr "Sin verificar" -#: ../../Zotlabs/Module/Admin/Accounts.php:170 -msgid "Registrations waiting for confirm" -msgstr "Inscripciones en espera de confirmación" +#: ../../Zotlabs/Module/Admin/Accounts.php:243 +msgid "Expired" +msgstr "Caducado/a" -#: ../../Zotlabs/Module/Admin/Accounts.php:171 +#: ../../Zotlabs/Module/Admin/Accounts.php:310 +msgid "Show verified registrations" +msgstr "Mostrar registros verificados" + +#: ../../Zotlabs/Module/Admin/Accounts.php:310 +msgid "Show all registrations" +msgstr "Mostrar todos los registros" + +#: ../../Zotlabs/Module/Admin/Accounts.php:312 +msgid "Select toggle" +msgstr "Seleccionar alternar" + +#: ../../Zotlabs/Module/Admin/Accounts.php:313 +msgid "Deny selected" +msgstr "Denegar seleccionado" + +#: ../../Zotlabs/Module/Admin/Accounts.php:314 +msgid "Approve selected" +msgstr "Aprobar seleccionado" + +#: ../../Zotlabs/Module/Admin/Accounts.php:315 +msgid "All registrations" +msgstr "Todos los registros" + +#: ../../Zotlabs/Module/Admin/Accounts.php:315 +msgid "Verified registrations waiting for approval" +msgstr "Registros verificados en espera de aprobación" + +#: ../../Zotlabs/Module/Admin/Accounts.php:316 msgid "Request date" msgstr "Fecha de solicitud" -#: ../../Zotlabs/Module/Admin/Accounts.php:172 -msgid "No registrations." -msgstr "Sin registros." +#: ../../Zotlabs/Module/Admin/Accounts.php:316 +msgid "Requests" +msgstr "Solicitudes" + +#: ../../Zotlabs/Module/Admin/Accounts.php:317 +msgid "No registrations available" +msgstr "No hay registros disponibles" -#: ../../Zotlabs/Module/Admin/Accounts.php:176 +#: ../../Zotlabs/Module/Admin/Accounts.php:317 +msgid "No verified registrations available" +msgstr "No hay registros verificados disponibles" + +#: ../../Zotlabs/Module/Admin/Accounts.php:321 #: ../../Zotlabs/Module/Connedit.php:629 msgid "Block" msgstr "Bloquear" -#: ../../Zotlabs/Module/Admin/Accounts.php:177 +#: ../../Zotlabs/Module/Admin/Accounts.php:322 #: ../../Zotlabs/Module/Connedit.php:629 msgid "Unblock" msgstr "Desbloquear" -#: ../../Zotlabs/Module/Admin/Accounts.php:182 +#: ../../Zotlabs/Module/Admin/Accounts.php:323 +msgid "Verified" +msgstr "Verificado/a" + +#: ../../Zotlabs/Module/Admin/Accounts.php:324 +msgid "Not yet verified" +msgstr "Aún no se ha verificado" + +#: ../../Zotlabs/Module/Admin/Accounts.php:329 msgid "ID" msgstr "ID" -#: ../../Zotlabs/Module/Admin/Accounts.php:184 -msgid "All Channels" +#: ../../Zotlabs/Module/Admin/Accounts.php:331 +msgid "All channels" msgstr "Todos los canales" -#: ../../Zotlabs/Module/Admin/Accounts.php:185 +#: ../../Zotlabs/Module/Admin/Accounts.php:332 msgid "Register date" msgstr "Fecha de registro" -#: ../../Zotlabs/Module/Admin/Accounts.php:186 +#: ../../Zotlabs/Module/Admin/Accounts.php:333 msgid "Last login" msgstr "Último acceso" -#: ../../Zotlabs/Module/Admin/Accounts.php:187 +#: ../../Zotlabs/Module/Admin/Accounts.php:334 msgid "Expires" msgstr "Caduca" -#: ../../Zotlabs/Module/Admin/Accounts.php:188 -msgid "Service Class" +#: ../../Zotlabs/Module/Admin/Accounts.php:335 +#: ../../Zotlabs/Module/Admin/Account_edit.php:72 +msgid "Service class" msgstr "Clase de servicio" -#: ../../Zotlabs/Module/Admin/Accounts.php:190 +#: ../../Zotlabs/Module/Admin/Accounts.php:337 msgid "" "Selected accounts will be deleted!\\n\\nEverything these accounts had posted" " on this site will be permanently deleted!\\n\\nAre you sure?" msgstr "¡Las cuentas seleccionadas van a ser eliminadas!\\n\\n¡Todo lo que estas cuentas han publicado en este sitio será borrado de forma permanente!\\n\\n¿Está seguro de querer hacerlo?" -#: ../../Zotlabs/Module/Admin/Accounts.php:191 +#: ../../Zotlabs/Module/Admin/Accounts.php:338 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 "¡La cuenta {0} va a ser eliminada!\\n\\n¡Todo lo que esta cuenta ha publicado en este sitio será borrado de forma permanente!\\n\\n¿Está seguro de querer hacerlo?" -#: ../../Zotlabs/Module/Admin/Site.php:165 +#: ../../Zotlabs/Module/Admin/Site.php:112 +msgid "Invalid input" +msgstr "Entrada no válida" + +#: ../../Zotlabs/Module/Admin/Site.php:132 +msgid "Errors" +msgstr "Errores" + +#: ../../Zotlabs/Module/Admin/Site.php:225 msgid "Site settings updated." msgstr "Ajustes del sitio actualizados." -#: ../../Zotlabs/Module/Admin/Site.php:202 +#: ../../Zotlabs/Module/Admin/Site.php:262 #: ../../Zotlabs/Module/Settings/Display.php:118 #, php-format msgid "%s - (Incompatible)" msgstr "%s - (Incompatible)" -#: ../../Zotlabs/Module/Admin/Site.php:209 +#: ../../Zotlabs/Module/Admin/Site.php:269 msgid "mobile" msgstr "móvil" -#: ../../Zotlabs/Module/Admin/Site.php:211 +#: ../../Zotlabs/Module/Admin/Site.php:271 msgid "experimental" msgstr "experimental" -#: ../../Zotlabs/Module/Admin/Site.php:213 +#: ../../Zotlabs/Module/Admin/Site.php:273 msgid "unsupported" msgstr "no soportado" -#: ../../Zotlabs/Module/Admin/Site.php:260 +#: ../../Zotlabs/Module/Admin/Site.php:320 msgid "Yes - with approval" msgstr "Sí - con aprobación" -#: ../../Zotlabs/Module/Admin/Site.php:266 +#: ../../Zotlabs/Module/Admin/Site.php:328 msgid "My site is not a public server" msgstr "Mi sitio no es un servidor público" -#: ../../Zotlabs/Module/Admin/Site.php:267 +#: ../../Zotlabs/Module/Admin/Site.php:329 msgid "My site has paid access only" msgstr "Mi sitio es un servicio de pago" -#: ../../Zotlabs/Module/Admin/Site.php:268 +#: ../../Zotlabs/Module/Admin/Site.php:330 msgid "My site has free access only" msgstr "Mi sitio es un servicio gratuito" -#: ../../Zotlabs/Module/Admin/Site.php:269 +#: ../../Zotlabs/Module/Admin/Site.php:331 msgid "My site offers free accounts with optional paid upgrades" msgstr "Mi sitio ofrece cuentas gratuitas con opciones extra de pago" -#: ../../Zotlabs/Module/Admin/Site.php:283 +#: ../../Zotlabs/Module/Admin/Site.php:345 msgid "Default permission role for new accounts" msgstr "Permisos de rol por defecto para las nuevas cuentas" -#: ../../Zotlabs/Module/Admin/Site.php:283 +#: ../../Zotlabs/Module/Admin/Site.php:345 msgid "" "This role will be used for the first channel created after registration." msgstr "Este rol se utilizará para el primer canal creado después del registro." -#: ../../Zotlabs/Module/Admin/Site.php:295 +#: ../../Zotlabs/Module/Admin/Site.php:353 ../../Zotlabs/Module/Invite.php:398 +msgid "Minute(s)" +msgstr "Minuto(s)" + +#: ../../Zotlabs/Module/Admin/Site.php:354 ../../Zotlabs/Module/Invite.php:399 +msgid "Hour(s)" +msgstr "Hora(s)" + +#: ../../Zotlabs/Module/Admin/Site.php:355 ../../Zotlabs/Module/Invite.php:400 +msgid "Day(s)" +msgstr "Día(s)" + +#: ../../Zotlabs/Module/Admin/Site.php:356 +msgid "Week(s)" +msgstr "Semana(s)" + +#: ../../Zotlabs/Module/Admin/Site.php:357 +msgid "Month(s)" +msgstr "Mes(Meses)" + +#: ../../Zotlabs/Module/Admin/Site.php:358 +msgid "Year(s)" +msgstr "Año(s)" + +#: ../../Zotlabs/Module/Admin/Site.php:366 +msgid "Register verification delay" +msgstr "Retraso en la verificación del registro" + +#: ../../Zotlabs/Module/Admin/Site.php:369 +msgid "Time to wait before a registration can be verified" +msgstr "Tiempo de espera para verificar un registro " + +#: ../../Zotlabs/Module/Admin/Site.php:372 +#: ../../Zotlabs/Module/Admin/Site.php:394 ../../Zotlabs/Module/Invite.php:409 +msgid "duration up from now" +msgstr "duración a partir de ahora " + +#: ../../Zotlabs/Module/Admin/Site.php:388 +msgid "Register verification expiration time" +msgstr "Tiempo de caducidad de la verificación del registro " + +#: ../../Zotlabs/Module/Admin/Site.php:391 +msgid "Time before an unverified registration will expire" +msgstr "Tiempo antes de que caduque un registro no verificado " + +#: ../../Zotlabs/Module/Admin/Site.php:414 msgid "File upload" msgstr "Subir fichero" -#: ../../Zotlabs/Module/Admin/Site.php:296 +#: ../../Zotlabs/Module/Admin/Site.php:415 msgid "Policies" msgstr "Políticas" -#: ../../Zotlabs/Module/Admin/Site.php:303 +#: ../../Zotlabs/Module/Admin/Site.php:422 msgid "Banner/Logo" msgstr "Banner/Logo" -#: ../../Zotlabs/Module/Admin/Site.php:303 +#: ../../Zotlabs/Module/Admin/Site.php:422 msgid "Unfiltered HTML/CSS/JS is allowed" msgstr "Se permite HTML/CSS/JS sin filtrar" -#: ../../Zotlabs/Module/Admin/Site.php:304 +#: ../../Zotlabs/Module/Admin/Site.php:423 msgid "Administrator Information" msgstr "Información del Administrador" -#: ../../Zotlabs/Module/Admin/Site.php:304 +#: ../../Zotlabs/Module/Admin/Site.php:423 msgid "" "Contact information for site administrators. Displayed on siteinfo page. " "BBCode can be used here" msgstr "Información de contacto de los administradores del sitio. Visible en la página \"siteinfo\". Se puede usar BBCode" -#: ../../Zotlabs/Module/Admin/Site.php:305 +#: ../../Zotlabs/Module/Admin/Site.php:424 #: ../../Zotlabs/Module/Siteinfo.php:24 msgid "Site Information" msgstr "Información sobre el sitio" -#: ../../Zotlabs/Module/Admin/Site.php:305 +#: ../../Zotlabs/Module/Admin/Site.php:424 msgid "" "Publicly visible description of this site. Displayed on siteinfo page. " "BBCode can be used here" msgstr "Descripción pública de este sitio. Visible en la página \"siteinfo\". Se puede usar BBCode" -#: ../../Zotlabs/Module/Admin/Site.php:306 +#: ../../Zotlabs/Module/Admin/Site.php:425 msgid "System language" msgstr "Idioma del sistema" -#: ../../Zotlabs/Module/Admin/Site.php:307 +#: ../../Zotlabs/Module/Admin/Site.php:426 msgid "System theme" msgstr "Tema gráfico del sistema" -#: ../../Zotlabs/Module/Admin/Site.php:307 +#: ../../Zotlabs/Module/Admin/Site.php:426 msgid "" "Default system theme - may be over-ridden by user profiles - change theme settings" msgstr "Tema del sistema por defecto - se puede cambiar por cada perfil de usuario - modificar los ajustes del tema" -#: ../../Zotlabs/Module/Admin/Site.php:310 +#: ../../Zotlabs/Module/Admin/Site.php:429 msgid "Allow Feeds as Connections" msgstr "Permitir contenidos RSS como conexiones" -#: ../../Zotlabs/Module/Admin/Site.php:310 +#: ../../Zotlabs/Module/Admin/Site.php:429 msgid "(Heavy system resource usage)" msgstr "(Uso intenso de los recursos del sistema)" -#: ../../Zotlabs/Module/Admin/Site.php:311 +#: ../../Zotlabs/Module/Admin/Site.php:430 msgid "Maximum image size" msgstr "Tamaño máximo de la imagen" -#: ../../Zotlabs/Module/Admin/Site.php:311 +#: ../../Zotlabs/Module/Admin/Site.php:430 msgid "" "Maximum size in bytes of uploaded images. Default is 0, which means no " "limits." msgstr "Tamaño máximo en bytes de la imagen subida. Por defecto, es 0, lo que significa que no hay límites." -#: ../../Zotlabs/Module/Admin/Site.php:312 -msgid "Does this site allow new member registration?" -msgstr "¿Debe este sitio permitir el registro de nuevos miembros?" - -#: ../../Zotlabs/Module/Admin/Site.php:313 -msgid "Invitation only" -msgstr "Solo con una invitación" - -#: ../../Zotlabs/Module/Admin/Site.php:313 -msgid "" -"Only allow new member registrations with an invitation code. Above register " -"policy must be set to Yes." -msgstr "Solo se permiten inscripciones de nuevos miembros con un código de invitación. Además, deben aceptarse los términos del registro marcando \"Sí\"." - -#: ../../Zotlabs/Module/Admin/Site.php:314 +#: ../../Zotlabs/Module/Admin/Site.php:431 msgid "Minimum age" msgstr "Edad mínima" -#: ../../Zotlabs/Module/Admin/Site.php:314 +#: ../../Zotlabs/Module/Admin/Site.php:431 msgid "Minimum age (in years) for who may register on this site." msgstr "Edad mínima (en años) para poder registrarse en este sitio." -#: ../../Zotlabs/Module/Admin/Site.php:315 +#: ../../Zotlabs/Module/Admin/Site.php:432 msgid "Which best describes the types of account offered by this hub?" msgstr "¿Cómo describiría el tipo de servicio ofrecido por este servidor?" -#: ../../Zotlabs/Module/Admin/Site.php:315 +#: ../../Zotlabs/Module/Admin/Site.php:432 msgid "This is displayed on the public server site list." msgstr "Esto se muestra en la lista de sitios de servidores públicos." -#: ../../Zotlabs/Module/Admin/Site.php:316 +#: ../../Zotlabs/Module/Admin/Site.php:438 msgid "Register text" msgstr "Texto del registro" -#: ../../Zotlabs/Module/Admin/Site.php:316 -msgid "Will be displayed prominently on the registration page." -msgstr "Se mostrará de forma destacada en la página de registro." +#: ../../Zotlabs/Module/Admin/Site.php:440 +msgid "This text will be displayed prominently at the registration page" +msgstr "Este texto se mostrará de forma destacada en la página de registro " -#: ../../Zotlabs/Module/Admin/Site.php:318 +#: ../../Zotlabs/Module/Admin/Site.php:444 +msgid "Does this site allow new member registration?" +msgstr "¿Debe este sitio permitir el registro de nuevos miembros?" + +#: ../../Zotlabs/Module/Admin/Site.php:451 +msgid "Configure the registration open days/hours" +msgstr "Configurar los días/horas de apertura del registro" + +#: ../../Zotlabs/Module/Admin/Site.php:453 +msgid "Empty or '-:-' value will keep registration open 24/7 (default)" +msgstr "El valor vacío o \"-:-\" mantendrá el registro abierto 24/7 (por defecto)" + +#: ../../Zotlabs/Module/Admin/Site.php:454 +msgid "" +"Weekdays and hours must be separated by colon ':', From-To ranges with a " +"dash `-` example: 1:800-1200" +msgstr "Los días de la semana y las horas deben separarse con dos puntos ':', los rangos Desde-Hasta con un guión `-` ejemplo: 1:800-1200" + +#: ../../Zotlabs/Module/Admin/Site.php:455 +msgid "" +"Weekday:Hour pairs must be separated by space ' ' example: 1:900-1700 " +"2:900-1700" +msgstr "Los pares día de la semana:hora deben estar separados por un espacio ' ' ejemplo: 1:900-1700 2:900-1700" + +#: ../../Zotlabs/Module/Admin/Site.php:456 +msgid "" +"From-To ranges must be separated by comma ',' example: 1:800-1200,1300-1700 " +"or 1-2,4-5:900-1700" +msgstr "Los rangos desde-hasta deben estar separados por comas ',' ejemplo: 1:800-1200,1300-1700 o 1-2,4-5:900-1700" + +#: ../../Zotlabs/Module/Admin/Site.php:457 +msgid "Advanced examples:" +msgstr "Ejemplos avanzados: " + +#: ../../Zotlabs/Module/Admin/Site.php:457 +#: ../../Zotlabs/Module/Settings/Channel.php:420 +msgid "or" +msgstr "o" + +#: ../../Zotlabs/Module/Admin/Site.php:458 +msgid "Check your configuration" +msgstr "Compruebe su configuración" + +#: ../../Zotlabs/Module/Admin/Site.php:462 +msgid "Max account registrations per day" +msgstr "Máximo de registros de cuentas por día " + +#: ../../Zotlabs/Module/Admin/Site.php:464 +msgid "Unlimited if zero or no value - default 50" +msgstr "Ilimitado si es cero o sin valor - por defecto 50" + +#: ../../Zotlabs/Module/Admin/Site.php:468 +msgid "Max account registrations from same IP" +msgstr "Máximo de registros de cuentas desde la misma IP" + +#: ../../Zotlabs/Module/Admin/Site.php:470 +msgid "Unlimited if zero or no value - default 3" +msgstr "Ilimitado si es cero o sin valor - por defecto 3" + +#: ../../Zotlabs/Module/Admin/Site.php:476 +msgid "Auto channel create" +msgstr "Creación automática de canales" + +#: ../../Zotlabs/Module/Admin/Site.php:478 +msgid "" +"If disabled the channel will be created in a separate step during the " +"registration process" +msgstr "Si se desactiva, el canal se creará en un paso separado durante el proceso de registro" + +#: ../../Zotlabs/Module/Admin/Site.php:482 +msgid "Require invite code" +msgstr "Solicitar código de invitación" + +#: ../../Zotlabs/Module/Admin/Site.php:487 +msgid "Allow invite code" +msgstr "Permitir código de invitación" + +#: ../../Zotlabs/Module/Admin/Site.php:492 +msgid "Require email address" +msgstr "Solicitar dirección de correo electrónico" + +#: ../../Zotlabs/Module/Admin/Site.php:494 +msgid "The provided email address will be verified (recommended)" +msgstr "La dirección de correo electrónico proporcionada será verificada (recomendado)" + +#: ../../Zotlabs/Module/Admin/Site.php:498 +msgid "Abandon account after x days" +msgstr "Abandonar la cuenta después de x días" + +#: ../../Zotlabs/Module/Admin/Site.php:500 +msgid "" +"Will not waste system resources polling external sites for abandonded " +"accounts. Enter 0 for no time limit." +msgstr "Para evitar consumir recursos del sistema intentando poner al día las cuentas abandonadas. Introduzca 0 para no tener límite de tiempo." + +#: ../../Zotlabs/Module/Admin/Site.php:505 msgid "Site homepage to show visitors (default: login box)" msgstr "Página personal que se mostrará a los visitantes (por defecto: la página de identificación)" -#: ../../Zotlabs/Module/Admin/Site.php:318 +#: ../../Zotlabs/Module/Admin/Site.php:505 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." msgstr "ejemplo: 'pubstream' para mostrar el stream público, 'page/sys/home' para mostrar una página web del sistema llamada 'home' o 'include:home.html' para incluir un archivo." -#: ../../Zotlabs/Module/Admin/Site.php:319 +#: ../../Zotlabs/Module/Admin/Site.php:506 msgid "Preserve site homepage URL" msgstr "Preservar la dirección de la página personal" -#: ../../Zotlabs/Module/Admin/Site.php:319 +#: ../../Zotlabs/Module/Admin/Site.php:506 msgid "" "Present the site homepage in a frame at the original location instead of " "redirecting" msgstr "Presenta la página personal del sitio en un marco en la ubicación original, en vez de redirigirla." -#: ../../Zotlabs/Module/Admin/Site.php:320 -msgid "Accounts abandoned after x days" -msgstr "Cuentas abandonadas después de x días" - -#: ../../Zotlabs/Module/Admin/Site.php:320 -msgid "" -"Will not waste system resources polling external sites for abandonded " -"accounts. Enter 0 for no time limit." -msgstr "Para evitar consumir recursos del sistema intentando poner al día las cuentas abandonadas. Introduzca 0 para no tener límite de tiempo." - -#: ../../Zotlabs/Module/Admin/Site.php:321 +#: ../../Zotlabs/Module/Admin/Site.php:507 msgid "Allowed friend domains" msgstr "Dominios amigos permitidos" -#: ../../Zotlabs/Module/Admin/Site.php:321 +#: ../../Zotlabs/Module/Admin/Site.php:507 msgid "" "Comma separated list of domains which are allowed to establish friendships " "with this site. Wildcards are accepted. Empty to allow any domains" msgstr "Lista separada por comas de dominios a los que está permitido establecer relaciones de amistad con este sitio. Se permiten comodines. Dejar en claro para aceptar cualquier dominio." -#: ../../Zotlabs/Module/Admin/Site.php:322 -msgid "Verify Email Addresses" -msgstr "Verificar las direcciones de correo electrónico" - -#: ../../Zotlabs/Module/Admin/Site.php:322 -msgid "" -"Check to verify email addresses used in account registration (recommended)." -msgstr "Activar para la verificación de la dirección de correo electrónico en el registro de una cuenta (recomendado)." - -#: ../../Zotlabs/Module/Admin/Site.php:323 +#: ../../Zotlabs/Module/Admin/Site.php:508 msgid "Force publish" msgstr "Forzar la publicación" -#: ../../Zotlabs/Module/Admin/Site.php:323 +#: ../../Zotlabs/Module/Admin/Site.php:508 msgid "" "Check to force all profiles on this site to be listed in the site directory." msgstr "Intentar forzar todos los perfiles para que sean listados en el directorio de este sitio." -#: ../../Zotlabs/Module/Admin/Site.php:324 +#: ../../Zotlabs/Module/Admin/Site.php:509 msgid "Import Public Streams" msgstr "Importar contenido público" -#: ../../Zotlabs/Module/Admin/Site.php:324 +#: ../../Zotlabs/Module/Admin/Site.php:509 msgid "" "Import and allow access to public content pulled from other sites. Warning: " "this content is unmoderated." msgstr "Importar y permitir acceso al contenido público sacado de otros sitios. Advertencia: este contenido no está moderado, por lo que podría encontrar cosas inapropiadas u ofensivas." -#: ../../Zotlabs/Module/Admin/Site.php:325 +#: ../../Zotlabs/Module/Admin/Site.php:510 msgid "Site only Public Streams" msgstr "Solo contenido público en este sitio" -#: ../../Zotlabs/Module/Admin/Site.php:325 +#: ../../Zotlabs/Module/Admin/Site.php:510 msgid "" "Allow access to public content originating only from this site if Imported " "Public Streams are disabled." msgstr "Permitir el acceso al contenido público originado sólo desde este sitio si los \"streams\" públicos Importados están deshabilitados." -#: ../../Zotlabs/Module/Admin/Site.php:326 +#: ../../Zotlabs/Module/Admin/Site.php:511 msgid "Allow anybody on the internet to access the Public streams" msgstr "Permitir que cualquiera en Internet pueda acceder a los \"streams\" públicos" -#: ../../Zotlabs/Module/Admin/Site.php:326 +#: ../../Zotlabs/Module/Admin/Site.php:511 msgid "" "Disable to require authentication before viewing. Warning: this content is " "unmoderated." msgstr "Desactivar para requerir autenticación antes de la visualización. Advertencia: este contenido no está moderado." -#: ../../Zotlabs/Module/Admin/Site.php:327 +#: ../../Zotlabs/Module/Admin/Site.php:512 msgid "Only import Public stream posts with this text" msgstr "Importar solo entradas del stream púlbico con este texto " -#: ../../Zotlabs/Module/Admin/Site.php:327 -#: ../../Zotlabs/Module/Admin/Site.php:328 +#: ../../Zotlabs/Module/Admin/Site.php:512 +#: ../../Zotlabs/Module/Admin/Site.php:513 #: ../../Zotlabs/Module/Connedit.php:885 ../../Zotlabs/Module/Connedit.php:886 msgid "" "words one per line or #tags or /patterns/ or lang=xx, leave blank to import " "all posts" msgstr "Una sola opción por línea: palabras, #etiquetas, /patrones/ o lang=xx. Dejar en blanco para importarlo todo" -#: ../../Zotlabs/Module/Admin/Site.php:328 +#: ../../Zotlabs/Module/Admin/Site.php:513 msgid "Do not import Public stream posts with this text" msgstr "No importar entradas del stream público con este texto " -#: ../../Zotlabs/Module/Admin/Site.php:331 +#: ../../Zotlabs/Module/Admin/Site.php:516 msgid "Login on Homepage" msgstr "Iniciar sesión en la página personal" -#: ../../Zotlabs/Module/Admin/Site.php:331 +#: ../../Zotlabs/Module/Admin/Site.php:516 msgid "" "Present a login box to visitors on the home page if no other content has " "been configured." msgstr "Presentar a los visitantes una casilla de identificación en la página de inicio, si no se ha configurado otro tipo de contenido." -#: ../../Zotlabs/Module/Admin/Site.php:332 +#: ../../Zotlabs/Module/Admin/Site.php:517 msgid "Enable context help" msgstr "Habilitar la ayuda contextual" -#: ../../Zotlabs/Module/Admin/Site.php:332 +#: ../../Zotlabs/Module/Admin/Site.php:517 msgid "" "Display contextual help for the current page when the help button is " "pressed." msgstr "Ver la ayuda contextual para la página actual cuando se pulse el botón de Ayuda." -#: ../../Zotlabs/Module/Admin/Site.php:334 +#: ../../Zotlabs/Module/Admin/Site.php:519 msgid "Reply-to email address for system generated email." msgstr "Dirección de respuesta para el correo electrónico generado por el sistema." -#: ../../Zotlabs/Module/Admin/Site.php:335 +#: ../../Zotlabs/Module/Admin/Site.php:520 msgid "Sender (From) email address for system generated email." msgstr "Dirección del remitente (From) para el correo electrónico generado por el sistema." -#: ../../Zotlabs/Module/Admin/Site.php:336 +#: ../../Zotlabs/Module/Admin/Site.php:521 msgid "Name of email sender for system generated email." msgstr "Nombre del remitente del correo electrónico generado por el sistema." -#: ../../Zotlabs/Module/Admin/Site.php:338 +#: ../../Zotlabs/Module/Admin/Site.php:523 msgid "Directory Server URL" msgstr "URL del servidor de directorio" -#: ../../Zotlabs/Module/Admin/Site.php:338 +#: ../../Zotlabs/Module/Admin/Site.php:523 msgid "Default directory server" msgstr "Servidor de directorio predeterminado" -#: ../../Zotlabs/Module/Admin/Site.php:340 +#: ../../Zotlabs/Module/Admin/Site.php:525 msgid "Enable SSE Notifications" msgstr "Habilitar notificaciones SSE" -#: ../../Zotlabs/Module/Admin/Site.php:340 +#: ../../Zotlabs/Module/Admin/Site.php:525 msgid "" "If disabled, traditional polling will be used. Warning: this setting might " "not be suited for shared hosting" msgstr "Si está desactivado, se usará el sistema de votación tradicional. Advertencia: esta configuración podría no ser adecuada para el alojamiento compartido" -#: ../../Zotlabs/Module/Admin/Site.php:342 +#: ../../Zotlabs/Module/Admin/Site.php:527 msgid "Proxy user" msgstr "Usuario del proxy" -#: ../../Zotlabs/Module/Admin/Site.php:343 +#: ../../Zotlabs/Module/Admin/Site.php:528 msgid "Proxy URL" msgstr "Dirección del proxy" -#: ../../Zotlabs/Module/Admin/Site.php:344 +#: ../../Zotlabs/Module/Admin/Site.php:529 msgid "Network timeout" msgstr "Tiempo de espera de la red" -#: ../../Zotlabs/Module/Admin/Site.php:344 +#: ../../Zotlabs/Module/Admin/Site.php:529 msgid "Value is in seconds. Set to 0 for unlimited (not recommended)." msgstr "Valor en segundos. Poner a 0 para que no haya tiempo límite (no recomendado)" -#: ../../Zotlabs/Module/Admin/Site.php:345 +#: ../../Zotlabs/Module/Admin/Site.php:530 msgid "Delivery interval" msgstr "Intervalo de entrega" -#: ../../Zotlabs/Module/Admin/Site.php:345 +#: ../../Zotlabs/Module/Admin/Site.php:530 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 "Retrasar los procesos de transmisión en segundo plano por esta cantidad de segundos para reducir la carga del sistema. Recomendado: 4-5 para sitios compartidos, 2-3 para servidores virtuales privados, 0-1 para grandes servidores dedicados." -#: ../../Zotlabs/Module/Admin/Site.php:346 +#: ../../Zotlabs/Module/Admin/Site.php:531 msgid "Deliveries per process" msgstr "Intentos de envío por proceso" -#: ../../Zotlabs/Module/Admin/Site.php:346 +#: ../../Zotlabs/Module/Admin/Site.php:531 msgid "" "Number of deliveries to attempt in a single operating system process. Adjust" " if necessary to tune system performance. Recommend: 1-5." msgstr "Numero de envíos a intentar en un único proceso del sistema operativo. Ajustar si es necesario mejorar el rendimiento. Se recomienda: 1-5." -#: ../../Zotlabs/Module/Admin/Site.php:347 +#: ../../Zotlabs/Module/Admin/Site.php:532 msgid "Queue Threshold" msgstr "Umbral de la cola de espera" -#: ../../Zotlabs/Module/Admin/Site.php:347 +#: ../../Zotlabs/Module/Admin/Site.php:532 msgid "" "Always defer immediate delivery if queue contains more than this number of " "entries." msgstr "Aplazar siempre la entrega inmediata si la cola contiene más de este número de entradas." -#: ../../Zotlabs/Module/Admin/Site.php:348 +#: ../../Zotlabs/Module/Admin/Site.php:533 msgid "Poll interval" msgstr "Intervalo máximo de tiempo entre dos mensajes sucesivos" -#: ../../Zotlabs/Module/Admin/Site.php:348 +#: ../../Zotlabs/Module/Admin/Site.php:533 msgid "" "Delay background polling processes by this many seconds to reduce system " "load. If 0, use delivery interval." msgstr "Retrasar el intervalo de envío en segundo plano, en esta cantidad de segundos, para reducir la carga del sistema. Si es 0, usar el intervalo de entrega." -#: ../../Zotlabs/Module/Admin/Site.php:349 +#: ../../Zotlabs/Module/Admin/Site.php:534 msgid "Path to ImageMagick convert program" msgstr "Ruta al programa de conversión de ImageMagick" -#: ../../Zotlabs/Module/Admin/Site.php:349 +#: ../../Zotlabs/Module/Admin/Site.php:534 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" msgstr "Si está configurado, utilice este programa para generar miniaturas de fotos para imágenes de gran tamaño ( > 4000 píxeles en cualquiera de las dos dimensiones), de lo contrario se puede agotar la memoria. Ejemplo: /usr/bin/convert" -#: ../../Zotlabs/Module/Admin/Site.php:350 +#: ../../Zotlabs/Module/Admin/Site.php:535 msgid "Maximum Load Average" msgstr "Carga media máxima" -#: ../../Zotlabs/Module/Admin/Site.php:350 +#: ../../Zotlabs/Module/Admin/Site.php:535 msgid "" "Maximum system load before delivery and poll processes are deferred - " "default 50." msgstr "Carga máxima del sistema antes de que los procesos de entrega y envío se hayan retardado - por defecto, 50." -#: ../../Zotlabs/Module/Admin/Site.php:351 +#: ../../Zotlabs/Module/Admin/Site.php:536 msgid "Expiration period in days for imported (grid/network) content" msgstr "Caducidad del contenido importado de otros sitios (en días)" -#: ../../Zotlabs/Module/Admin/Site.php:351 +#: ../../Zotlabs/Module/Admin/Site.php:536 msgid "0 for no expiration of imported content" msgstr "0 para que no caduque el contenido importado" -#: ../../Zotlabs/Module/Admin/Site.php:352 +#: ../../Zotlabs/Module/Admin/Site.php:537 msgid "" "Do not expire any posts which have comments less than this many days ago" msgstr "No caduque ningún mensaje que tenga menos comentarios que este hace muchos días" -#: ../../Zotlabs/Module/Admin/Site.php:354 +#: ../../Zotlabs/Module/Admin/Site.php:538 msgid "" "Public servers: Optional landing (marketing) webpage for new registrants" msgstr "Servidores públicos: Página web de acogida (marketing) opcional para nuevos registros" -#: ../../Zotlabs/Module/Admin/Site.php:354 +#: ../../Zotlabs/Module/Admin/Site.php:538 #, php-format msgid "Create this page first. Default is %s/register" msgstr "Crear esta página primero. Por defecto es %s/register" -#: ../../Zotlabs/Module/Admin/Site.php:355 +#: ../../Zotlabs/Module/Admin/Site.php:539 msgid "Page to display after creating a new channel" msgstr "Página a mostrar después de la creación de un nuevo canal" -#: ../../Zotlabs/Module/Admin/Site.php:355 +#: ../../Zotlabs/Module/Admin/Site.php:539 msgid "Default: profiles" msgstr "Perfiles predeterminados" -#: ../../Zotlabs/Module/Admin/Site.php:357 +#: ../../Zotlabs/Module/Admin/Site.php:540 msgid "Optional: site location" msgstr "Opcional: ubicación del sitio" -#: ../../Zotlabs/Module/Admin/Site.php:357 +#: ../../Zotlabs/Module/Admin/Site.php:540 msgid "Region or country" msgstr "Región o país" +#: ../../Zotlabs/Module/Admin/Site.php:625 +#: ../../Zotlabs/Module/Admin/Site.php:626 +msgid "Invalid 24h time value (hhmm/hmm)" +msgstr "Valor de tiempo de 24h no válido (hhmm/hmm)" + #: ../../Zotlabs/Module/Admin/Logs.php:28 msgid "Log settings updated." msgstr "Actualizado el informe de configuraciones." @@ -10953,6 +11148,10 @@ msgstr "Código permitido al canal '%s'" msgid "Channel '%s' code disallowed" msgstr "Código no permitido al canal '%s'" +#: ../../Zotlabs/Module/Admin/Channels.php:148 +msgid "select all" +msgstr "seleccionar todo" + #: ../../Zotlabs/Module/Admin/Channels.php:150 #: ../../Zotlabs/Module/Directory.php:362 msgid "Censor" @@ -11016,10 +11215,6 @@ msgstr "Nueva contraseña otra vez" msgid "Account language (for emails)" msgstr "Idioma de la cuenta (para los correos electrónicos)" -#: ../../Zotlabs/Module/Admin/Account_edit.php:72 -msgid "Service class" -msgstr "Clase de servicio" - #: ../../Zotlabs/Module/Admin/Profs.php:89 msgid "New Profile Field" msgstr "Nuevo campo en el perfil" @@ -11286,6 +11481,129 @@ msgstr "Por favor, introduzca su contraseña para su verificación:" msgid "Remove Channel" msgstr "Eliminar el canal" +#: ../../Zotlabs/Module/Regate.php:81 +msgid "Email resent" +msgstr "Correo electrónico reenviado" + +#: ../../Zotlabs/Module/Regate.php:81 +msgid "Email resend failed" +msgstr "Fallo en el reenvío del correo electrónico" + +#: ../../Zotlabs/Module/Regate.php:105 +msgid "Verify successfull" +msgstr "Verificar que se ha hecho bien" + +#: ../../Zotlabs/Module/Regate.php:149 +msgid "Account successfull created" +msgstr "Cuenta creada con éxito" + +#: ../../Zotlabs/Module/Regate.php:190 +msgid "Channel successfull created" +msgstr "Canal creado con éxito" + +#: ../../Zotlabs/Module/Regate.php:196 +msgid "Automatic channel creation failed. Please create a channel." +msgstr "La creación automática de canales ha fallado. Por favor, cree un canal." + +#: ../../Zotlabs/Module/Regate.php:208 +msgid "Account creation error" +msgstr "Error en la creación de la cuenta" + +#: ../../Zotlabs/Module/Regate.php:220 +msgid "Verify failed" +msgstr "Verificación fallida" + +#: ../../Zotlabs/Module/Regate.php:225 +msgid "Token verification failed" +msgstr "Ha fallado el token de verificación." + +#: ../../Zotlabs/Module/Regate.php:230 +msgid "Request not inside time frame" +msgstr "Solicitud fuera de plazo" + +#: ../../Zotlabs/Module/Regate.php:236 ../../Zotlabs/Module/Regate.php:266 +msgid "Identity unknown" +msgstr "Identidad desconocida" + +#: ../../Zotlabs/Module/Regate.php:242 +msgid "dId2 mistaken" +msgstr "did2 equivocado/a" + +#: ../../Zotlabs/Module/Regate.php:270 +msgid "Your Registration ID" +msgstr "Su ID de registro" + +#: ../../Zotlabs/Module/Regate.php:283 ../../Zotlabs/Module/Regate.php:374 +#: ../../Zotlabs/Module/Regate.php:403 +msgid "Registration verification" +msgstr "Verificación del registro" + +#: ../../Zotlabs/Module/Regate.php:290 ../../Zotlabs/Module/Regate.php:408 +msgid "Hold on, you can start verification in" +msgstr "Espere, puede empezar la verificación en " + +#: ../../Zotlabs/Module/Regate.php:291 +msgid "Please remember your verification token for ID" +msgstr "Por favor, recuerde su token de verificación para la identificación" + +#: ../../Zotlabs/Module/Regate.php:292 +msgid "Token validity" +msgstr "Validez del token" + +#: ../../Zotlabs/Module/Regate.php:328 +msgid "Resend" +msgstr "Reenviar" + +#: ../../Zotlabs/Module/Regate.php:333 +msgid "Registration status" +msgstr "Estado del registro" + +#: ../../Zotlabs/Module/Regate.php:336 +msgid "Verification successful!" +msgstr "¡Verificación exitosa!" + +#: ../../Zotlabs/Module/Regate.php:337 +msgid "Your login ID is" +msgstr "Su ID de acceso es" + +#: ../../Zotlabs/Module/Regate.php:338 +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 "Una vez que su cuenta haya sido aprobada por nuestro administrador, podrá iniciar sesión con su ID de acceso y la contraseña proporcionada." + +#: ../../Zotlabs/Module/Regate.php:350 +msgid "Registration request revoked" +msgstr "Solicitud de registro anulada" + +#: ../../Zotlabs/Module/Regate.php:351 +msgid "Sorry for any inconvience. Thank you for your response." +msgstr "Disculpe las molestias. Gracias por su respuesta." + +#: ../../Zotlabs/Module/Regate.php:375 +msgid "Please enter your verification token for ID" +msgstr "Por favor, introduzca su token de verificación para la identificación" + +#: ../../Zotlabs/Module/Regate.php:385 +msgid "Verification token" +msgstr "Token de verificación " + +#: ../../Zotlabs/Module/Regate.php:396 +msgid "ID expired" +msgstr "ID caducada" + +#: ../../Zotlabs/Module/Regate.php:409 +msgid "You will require the verification token for ID" +msgstr "Necesitará el token de verificación para identificarse" + +#: ../../Zotlabs/Module/Regate.php:417 +msgid "Unknown or expired ID" +msgstr "ID desconocida o caducada" + +#: ../../Zotlabs/Module/Regate.php:428 +msgid "dId2 malformed" +msgstr "did2 malformado/a" + #: ../../Zotlabs/Module/Events.php:468 msgid "Edit event title" msgstr "Editar el título del evento" @@ -11534,7 +11852,7 @@ msgid "" msgstr "Esta cuenta y todos sus canales van a ser eliminados de la red." #: ../../Zotlabs/Module/Removeaccount.php:61 -#: ../../Zotlabs/Module/Settings/Account.php:105 +#: ../../Zotlabs/Module/Settings/Account.php:109 msgid "Remove Account" msgstr "Eliminar cuenta" @@ -11546,30 +11864,30 @@ msgstr "App idioma" msgid "Change UI language" msgstr "Cambiar el idioma de la interfaz de usuario" -#: ../../Zotlabs/Module/Uexport.php:61 +#: ../../Zotlabs/Module/Uexport.php:62 msgid "Channel Export App" msgstr "App Exportación de canales" -#: ../../Zotlabs/Module/Uexport.php:62 +#: ../../Zotlabs/Module/Uexport.php:63 msgid "Export your channel" msgstr "Exportar su canal" -#: ../../Zotlabs/Module/Uexport.php:72 ../../Zotlabs/Module/Uexport.php:73 +#: ../../Zotlabs/Module/Uexport.php:73 ../../Zotlabs/Module/Uexport.php:74 msgid "Export Channel" msgstr "Exportar el canal" -#: ../../Zotlabs/Module/Uexport.php:74 +#: ../../Zotlabs/Module/Uexport.php:75 msgid "" "Export your basic channel information to a file. This acts as a backup of " "your connections, permissions, profile and basic data, which can be used to " "import your data to a new server hub, but does not contain your content." msgstr "Exportar la información básica del canal a un fichero. Este equivale a una copia de seguridad de sus conexiones, el perfil y datos fundamentales, que puede usarse para importar sus datos a un nuevo servidor, pero no incluye su contenido." -#: ../../Zotlabs/Module/Uexport.php:75 +#: ../../Zotlabs/Module/Uexport.php:76 msgid "Export Content" msgstr "Exportar contenidos" -#: ../../Zotlabs/Module/Uexport.php:76 +#: ../../Zotlabs/Module/Uexport.php:77 msgid "" "Export your channel information and recent content to a JSON backup that can" " be restored or imported to another server hub. This backs up all of your " @@ -11578,11 +11896,11 @@ msgid "" " this download to begin." msgstr "Exportar la información sobre su canal y el contenido reciente a un fichero de respaldo JSON, que puede ser restaurado o importado a otro servidor. Este fichero incluye todas sus conexiones, permisos, datos del perfil y publicaciones de varios meses. Puede llegar a ser MUY grande. Por favor, sea paciente, la descarga puede tardar varios minutos en comenzar." -#: ../../Zotlabs/Module/Uexport.php:78 +#: ../../Zotlabs/Module/Uexport.php:79 msgid "Export your posts from a given year." msgstr "Exporta sus publicaciones de un año dado." -#: ../../Zotlabs/Module/Uexport.php:80 +#: ../../Zotlabs/Module/Uexport.php:81 msgid "" "You may also export your posts and conversations for a particular year or " "month. Adjust the date in your browser location bar to select other dates. " @@ -11590,21 +11908,21 @@ msgid "" "please try again selecting a more limited date range." msgstr "También puede exportar sus mensajes y conversaciones durante un año o mes en particular. Ajuste la fecha en la barra de direcciones del navegador para seleccionar otras fechas. Si la exportación falla (posiblemente debido al agotamiento de la memoria del servidor hub), por favor, intente de nuevo la selección de un rango de fechas más pequeño." -#: ../../Zotlabs/Module/Uexport.php:81 +#: ../../Zotlabs/Module/Uexport.php:82 #, php-format msgid "" "To select all posts for a given year, such as this year, visit %2$s" msgstr "Para seleccionar todos los mensajes de un año determinado, como este año, visite %2$s" -#: ../../Zotlabs/Module/Uexport.php:82 +#: ../../Zotlabs/Module/Uexport.php:83 #, php-format msgid "" "To select all posts for a given month, such as January of this year, visit " "%2$s" msgstr "Para seleccionar todos los mensajes de un mes determinado, como el de enero de este año, visite %2$s" -#: ../../Zotlabs/Module/Uexport.php:83 +#: ../../Zotlabs/Module/Uexport.php:84 #, php-format msgid "" "These content files may be imported or restored by visiting %2$s o cualquier sitio que contenga su canal. Para obtener los mejores resultados, por favor, importar o restaurar estos ficheros en orden de fecha (la más antigua primero)." -#: ../../Zotlabs/Module/Display.php:380 +#: ../../Zotlabs/Module/Display.php:372 msgid "Article" msgstr "Artículo" -#: ../../Zotlabs/Module/Display.php:425 +#: ../../Zotlabs/Module/Display.php:417 msgid "Item has been removed." msgstr "Se ha eliminado el elemento." @@ -11664,12 +11982,21 @@ msgstr "Los caracteres permitidos son a-z 0-9, - and _" msgid "Channel name" msgstr "Nombre del canal" +#: ../../Zotlabs/Module/New_channel.php:178 +#: ../../Zotlabs/Module/Settings/Channel.php:537 +msgid "Channel role and privacy" +msgstr "Clase de canal y privacidad" + #: ../../Zotlabs/Module/New_channel.php:178 msgid "" "Select a channel permission role compatible with your usage needs and " "privacy requirements." msgstr "Seleccione unos permisos de rol del canal compatibles con sus necesidades de uso y requisitos de privacidad." +#: ../../Zotlabs/Module/New_channel.php:178 +msgid "Read more about channel permission roles" +msgstr "Leer más sobre los roles y permisos" + #: ../../Zotlabs/Module/New_channel.php:181 msgid "Create a Channel" msgstr "Crear un canal" @@ -11698,7 +12025,7 @@ msgstr "le ha enviado un mensaje privado" msgid "added your channel" msgstr "añadió este canal a sus conexiones" -#: ../../Zotlabs/Module/Ping.php:418 ../../Zotlabs/Lib/Enotify.php:986 +#: ../../Zotlabs/Module/Ping.php:418 msgid "requires approval" msgstr "requiere aprobación" @@ -11719,11 +12046,11 @@ msgstr "publicó un evento" msgid "shared a file with you" msgstr "compartió un archivo con usted" -#: ../../Zotlabs/Module/Ping.php:672 ../../Zotlabs/Module/Sse_bs.php:540 +#: ../../Zotlabs/Module/Ping.php:672 ../../Zotlabs/Module/Sse_bs.php:554 msgid "Private forum" msgstr "Foro privado" -#: ../../Zotlabs/Module/Ping.php:672 ../../Zotlabs/Module/Sse_bs.php:540 +#: ../../Zotlabs/Module/Ping.php:672 ../../Zotlabs/Module/Sse_bs.php:554 msgid "Public forum" msgstr "Foro público" @@ -11857,43 +12184,43 @@ msgstr "Cuentas caducadas" msgid "Expiring accounts" msgstr "Cuentas que caducan" -#: ../../Zotlabs/Module/Admin.php:120 +#: ../../Zotlabs/Module/Admin.php:123 msgid "Message queues" msgstr "Mensajes en cola" -#: ../../Zotlabs/Module/Admin.php:134 +#: ../../Zotlabs/Module/Admin.php:137 msgid "Your software should be updated" msgstr "Debe actualizar su software" -#: ../../Zotlabs/Module/Admin.php:139 +#: ../../Zotlabs/Module/Admin.php:142 msgid "Summary" msgstr "Sumario" -#: ../../Zotlabs/Module/Admin.php:142 +#: ../../Zotlabs/Module/Admin.php:145 msgid "Registered accounts" msgstr "Cuentas registradas" -#: ../../Zotlabs/Module/Admin.php:143 +#: ../../Zotlabs/Module/Admin.php:146 msgid "Pending registrations" msgstr "Registros pendientes" -#: ../../Zotlabs/Module/Admin.php:144 +#: ../../Zotlabs/Module/Admin.php:147 msgid "Registered channels" msgstr "Canales registrados" -#: ../../Zotlabs/Module/Admin.php:145 +#: ../../Zotlabs/Module/Admin.php:148 msgid "Active addons" msgstr "Addons acivos" -#: ../../Zotlabs/Module/Admin.php:146 +#: ../../Zotlabs/Module/Admin.php:149 msgid "Version" msgstr "Versión" -#: ../../Zotlabs/Module/Admin.php:147 +#: ../../Zotlabs/Module/Admin.php:150 msgid "Repository version (master)" msgstr "Versión del repositorio (master)" -#: ../../Zotlabs/Module/Admin.php:148 +#: ../../Zotlabs/Module/Admin.php:151 msgid "Repository version (dev)" msgstr "Versión del repositorio (dev)" @@ -12132,7 +12459,7 @@ msgid "Use a photo from your albums" msgstr "Usar una foto de sus álbumes" #: ../../Zotlabs/Module/Profile_photo.php:511 -#: ../../Zotlabs/Module/Cover_photo.php:432 ../../Zotlabs/Module/Wiki.php:405 +#: ../../Zotlabs/Module/Cover_photo.php:432 ../../Zotlabs/Module/Wiki.php:404 msgid "Choose a different album" msgstr "Elegir un álbum diferente..." @@ -12217,7 +12544,7 @@ msgstr "Archivadas o inaccesibles" #: ../../Zotlabs/Module/Connections.php:83 #: ../../Zotlabs/Module/Connections.php:92 ../../Zotlabs/Module/Menu.php:180 -#: ../../Zotlabs/Module/Notifications.php:50 +#: ../../Zotlabs/Module/Notifications.php:53 msgid "New" msgstr "Nuevas" @@ -12526,7 +12853,7 @@ msgid "" "Password reset failed." msgstr "La solicitud no ha podido ser verificada. (Puede que la haya enviado con anterioridad) El restablecimiento de la contraseña ha fallado." -#: ../../Zotlabs/Module/Lostpass.php:91 ../../boot.php:1720 +#: ../../Zotlabs/Module/Lostpass.php:91 ../../boot.php:1725 msgid "Password Reset" msgstr "Restablecer la contraseña" @@ -12743,7 +13070,7 @@ msgid "Your full name" msgstr "Nombre completo" #: ../../Zotlabs/Module/Profiles.php:752 -msgid "Short title/tescription" +msgid "Short title/description" msgstr "Breve título y descripción" #: ../../Zotlabs/Module/Profiles.php:752 @@ -12842,12 +13169,12 @@ msgstr "Mis otros canales" msgid "Communications" msgstr "Comunicaciones" -#: ../../Zotlabs/Module/Subthread.php:143 +#: ../../Zotlabs/Module/Subthread.php:128 #, php-format msgid "%1$s is following %2$s's %3$s" msgstr "%1$s está siguiendo %3$s de %2$s" -#: ../../Zotlabs/Module/Subthread.php:145 +#: ../../Zotlabs/Module/Subthread.php:130 #, php-format msgid "%1$s stopped following %2$s's %3$s" msgstr "%1$s ha dejado de seguir %3$s de %2$s" @@ -12914,74 +13241,121 @@ msgstr "Nueva dirección del canal" msgid "Rename Channel" msgstr "Renombrar el canal" -#: ../../Zotlabs/Module/Invite.php:37 -msgid "Total invitation limit exceeded." -msgstr "Se ha superado el límite máximo de invitaciones." +#: ../../Zotlabs/Module/Invite.php:56 ../../Zotlabs/Module/Invite.php:310 +msgid "Invite App" +msgstr "Solicitar una app" + +#: ../../Zotlabs/Module/Invite.php:68 +msgid "Register is closed" +msgstr "El registro está cerrado" -#: ../../Zotlabs/Module/Invite.php:61 +#: ../../Zotlabs/Module/Invite.php:102 ../../Zotlabs/Module/Invite.php:549 +msgid "Note, the invitation code is valid up to" +msgstr "Tenga en cuenta que el código de invitación es válido hasta " + +#: ../../Zotlabs/Module/Invite.php:115 #, php-format -msgid "%s : Not a valid email address." -msgstr "%s : No es una dirección de correo electrónico válida. " +msgid "Too many recipients for one invitation (max %d)" +msgstr "Demasiados destinatarios para una invitación (máx %d)" -#: ../../Zotlabs/Module/Invite.php:75 -msgid "Please join us on $Projectname" -msgstr "Únase a nosotros en $Projectname" +#: ../../Zotlabs/Module/Invite.php:119 +msgid "No recipients for this invitation" +msgstr "No hay destinatarios para esta invitación" -#: ../../Zotlabs/Module/Invite.php:85 -msgid "Invitation limit exceeded. Please contact your site administrator." -msgstr "Excedido el límite de invitaciones. Por favor, contacte con el Administrador de su sitio." +#: ../../Zotlabs/Module/Invite.php:133 +#, php-format +msgid "(%s) : Not a valid email address" +msgstr "(%s): No es una dirección de correo electrónico válida" -#: ../../Zotlabs/Module/Invite.php:94 +#: ../../Zotlabs/Module/Invite.php:138 #, php-format -msgid "%d message sent." -msgid_plural "%d messages sent." -msgstr[0] "%d mensajes enviados." -msgstr[1] "%d mensajes enviados." +msgid "(%s) : Not a real email address" +msgstr "(%s) : No es una dirección de correo electrónica real" -#: ../../Zotlabs/Module/Invite.php:110 -msgid "Invite App" -msgstr "Solicitar una app" +#: ../../Zotlabs/Module/Invite.php:145 +#, php-format +msgid "(%s) : Not allowed email address" +msgstr "(%s) : Dirección de correo electrónico no permitida" -#: ../../Zotlabs/Module/Invite.php:111 -msgid "Send email invitations to join this network" -msgstr "Enviar invitaciones por correo electrónico para unirse a esta red" +#: ../../Zotlabs/Module/Invite.php:158 +#, php-format +msgid "(%s) : email address already in use" +msgstr "(%s) : La dirección de correo electrónico ya está en uso" + +#: ../../Zotlabs/Module/Invite.php:165 +#, php-format +msgid "(%s) : Accepted email address" +msgstr "(%s) : Dirección de correo electrónico aceptada" + +#: ../../Zotlabs/Module/Invite.php:257 +#, php-format +msgid "To %s : Message delivery success." +msgstr "To %s : Entrega exitosa del mensaje." + +#: ../../Zotlabs/Module/Invite.php:289 +#, php-format +msgid "%1$d mail(s) sent, %2$d mail error(s)" +msgstr "%1$d correo(s) enviado, %2$d error(es) de correo" -#: ../../Zotlabs/Module/Invite.php:124 +#: ../../Zotlabs/Module/Invite.php:315 +msgid "Invites not proposed by configuration" +msgstr "Invitaciones no propuestas por la configuración" + +#: ../../Zotlabs/Module/Invite.php:316 +msgid "Contact the site admin" +msgstr "Contactar con el administrador del sitio" + +#: ../../Zotlabs/Module/Invite.php:332 +msgid "Invites by users not enabled" +msgstr "Invitaciones de usuarios no habilitadas" + +#: ../../Zotlabs/Module/Invite.php:337 msgid "You have no more invitations available" msgstr "No tiene más invitaciones disponibles" -#: ../../Zotlabs/Module/Invite.php:155 +#: ../../Zotlabs/Module/Invite.php:353 +msgid "Not on xchan" +msgstr "No en xchan" + +#: ../../Zotlabs/Module/Invite.php:386 +msgid "All users invitation limit exceeded." +msgstr "Se ha superado el límite de invitaciones a todos los usuarios." + +#: ../../Zotlabs/Module/Invite.php:404 +msgid "Invitation expires after" +msgstr "La invitación expira después de " + +#: ../../Zotlabs/Module/Invite.php:504 ../../Zotlabs/Module/Invite.php:543 +msgid "Invitation" +msgstr "Invitación" + +#: ../../Zotlabs/Module/Invite.php:534 msgid "Send invitations" msgstr "Enviar invitaciones" -#: ../../Zotlabs/Module/Invite.php:156 -msgid "Enter email addresses, one per line:" -msgstr "Introduzca las direcciones de correo electrónico, una por línea:" - -#: ../../Zotlabs/Module/Invite.php:158 -msgid "Please join my community on $Projectname." -msgstr "Por favor, únase a mi comunidad en $Projectname." +#: ../../Zotlabs/Module/Invite.php:535 +msgid "Invitations I am using" +msgstr "Invitaciones que estoy utilizando " -#: ../../Zotlabs/Module/Invite.php:160 -msgid "You will need to supply this invitation code:" -msgstr "Tendrá que suministrar este código de invitación:" +#: ../../Zotlabs/Module/Invite.php:536 +msgid "Invitations we are using" +msgstr "Invitaciones que usamos " -#: ../../Zotlabs/Module/Invite.php:161 -msgid "" -"1. Register at any $Projectname location (they are all inter-connected)" -msgstr "1. Regístrese en cualquier sitio de $Projectname (están todos interconectados)" +#: ../../Zotlabs/Module/Invite.php:537 +msgid "§ Note, the email(s) sent will be recorded in the system logs" +msgstr "§ Nota: el/los correo(s) electrónicos enviados quedarán registrados en los registros del sistema" -#: ../../Zotlabs/Module/Invite.php:163 -msgid "2. Enter my $Projectname network address into the site searchbar." -msgstr "2. Introduzca mi dirección $Projectname en la caja de búsqueda del sitio." +#: ../../Zotlabs/Module/Invite.php:538 +msgid "Enter email addresses, one per line:" +msgstr "Introduzca las direcciones de correo electrónico, una por línea:" -#: ../../Zotlabs/Module/Invite.php:164 -msgid "or visit" -msgstr "o visitar" +#: ../../Zotlabs/Module/Invite.php:540 +msgid "Invite template" +msgstr "Plantilla de invitación" -#: ../../Zotlabs/Module/Invite.php:166 -msgid "3. Click [Connect]" -msgstr "3. Pulse [conectar]" +#: ../../Zotlabs/Module/Invite.php:548 +msgid "Here you may enter personal notes to the recipient(s)" +msgstr "Aquí puede introducir notas personales para el/los destinatario(s)" #: ../../Zotlabs/Module/Notes.php:57 msgid "Notes App" @@ -13126,10 +13500,6 @@ msgstr "Publicar su perfil principal en el directorio de la red" msgid "Allow us to suggest you as a potential friend to new members?" msgstr "¿Nos permite sugerirle como amigo potencial a los nuevos miembros?" -#: ../../Zotlabs/Module/Settings/Channel.php:420 -msgid "or" -msgstr "o" - #: ../../Zotlabs/Module/Settings/Channel.php:429 msgid "Your channel address is" msgstr "Su dirección de canal es" @@ -13157,7 +13527,6 @@ msgid "Basic Settings" msgstr "Configuración básica" #: ../../Zotlabs/Module/Settings/Channel.php:502 -#: ../../Zotlabs/Module/Settings/Account.php:104 msgid "Email Address:" msgstr "Dirección de correo electrónico:" @@ -13476,59 +13845,63 @@ msgstr "Carpeta por defecto de los ficheros subidos" msgid "Remove this channel." msgstr "Eliminar este canal." -#: ../../Zotlabs/Module/Settings/Account.php:19 +#: ../../Zotlabs/Module/Settings/Account.php:21 msgid "Not valid email." msgstr "Correo electrónico no válido." -#: ../../Zotlabs/Module/Settings/Account.php:22 +#: ../../Zotlabs/Module/Settings/Account.php:24 msgid "Protected email address. Cannot change to that email." msgstr "Dirección de correo electrónico protegida. No se puede cambiar a ella." -#: ../../Zotlabs/Module/Settings/Account.php:31 +#: ../../Zotlabs/Module/Settings/Account.php:33 msgid "System failure storing new email. Please try again." msgstr "Fallo de sistema al guardar el nuevo correo electrónico. Por favor, inténtelo de nuevo." -#: ../../Zotlabs/Module/Settings/Account.php:48 +#: ../../Zotlabs/Module/Settings/Account.php:51 msgid "Password verification failed." msgstr "La comprobación de la contraseña ha fallado." -#: ../../Zotlabs/Module/Settings/Account.php:55 +#: ../../Zotlabs/Module/Settings/Account.php:58 msgid "Passwords do not match. Password unchanged." msgstr "Las contraseñas no coinciden. La contraseña no se ha cambiado." -#: ../../Zotlabs/Module/Settings/Account.php:59 +#: ../../Zotlabs/Module/Settings/Account.php:62 msgid "Empty passwords are not allowed. Password unchanged." msgstr "No se permiten contraseñas vacías. La contraseña no se ha cambiado." -#: ../../Zotlabs/Module/Settings/Account.php:73 +#: ../../Zotlabs/Module/Settings/Account.php:76 msgid "Password changed." msgstr "Contraseña cambiada." -#: ../../Zotlabs/Module/Settings/Account.php:75 +#: ../../Zotlabs/Module/Settings/Account.php:78 msgid "Password update failed. Please try again." msgstr "La actualización de la contraseña ha fallado. Por favor, inténtalo de nuevo." -#: ../../Zotlabs/Module/Settings/Account.php:99 +#: ../../Zotlabs/Module/Settings/Account.php:103 msgid "Account Settings" msgstr "Configuración de la cuenta" -#: ../../Zotlabs/Module/Settings/Account.php:100 +#: ../../Zotlabs/Module/Settings/Account.php:104 msgid "Current Password" msgstr "Contraseña actual" -#: ../../Zotlabs/Module/Settings/Account.php:101 +#: ../../Zotlabs/Module/Settings/Account.php:105 msgid "Enter New Password" msgstr "Escribir una nueva contraseña" -#: ../../Zotlabs/Module/Settings/Account.php:102 +#: ../../Zotlabs/Module/Settings/Account.php:106 msgid "Confirm New Password" msgstr "Confirmar la nueva contraseña" -#: ../../Zotlabs/Module/Settings/Account.php:102 +#: ../../Zotlabs/Module/Settings/Account.php:106 msgid "Leave password fields blank unless changing" msgstr "Dejar en blanco la contraseña a menos que desee cambiarla." -#: ../../Zotlabs/Module/Settings/Account.php:106 +#: ../../Zotlabs/Module/Settings/Account.php:108 +msgid "DId2 or Email Address:" +msgstr "Did2 o dirección de correo electrónico: " + +#: ../../Zotlabs/Module/Settings/Account.php:110 msgid "Remove this account including all its channels" msgstr "Eliminar esta cuenta incluyendo todos sus canales" @@ -14040,135 +14413,135 @@ msgstr "App Wiki" msgid "Provide a wiki for your channel" msgstr "Proporcionar un wiki para su canal" -#: ../../Zotlabs/Module/Wiki.php:133 +#: ../../Zotlabs/Module/Wiki.php:132 msgid "Error retrieving wiki" msgstr "Error al recuperar el wiki" -#: ../../Zotlabs/Module/Wiki.php:140 +#: ../../Zotlabs/Module/Wiki.php:139 msgid "Error creating zip file export folder" msgstr "Error al crear el fichero comprimido zip de la carpeta a exportar" -#: ../../Zotlabs/Module/Wiki.php:191 +#: ../../Zotlabs/Module/Wiki.php:190 msgid "Error downloading wiki: " msgstr "Error al descargar el wiki: " -#: ../../Zotlabs/Module/Wiki.php:212 ../../Zotlabs/Storage/Browser.php:404 +#: ../../Zotlabs/Module/Wiki.php:211 ../../Zotlabs/Storage/Browser.php:404 msgid "Download" msgstr "Descargar" -#: ../../Zotlabs/Module/Wiki.php:216 +#: ../../Zotlabs/Module/Wiki.php:215 msgid "Wiki name" msgstr "Nombre del wiki" -#: ../../Zotlabs/Module/Wiki.php:217 +#: ../../Zotlabs/Module/Wiki.php:216 msgid "Content type" msgstr "Tipo de contenido" -#: ../../Zotlabs/Module/Wiki.php:219 ../../Zotlabs/Storage/Browser.php:378 +#: ../../Zotlabs/Module/Wiki.php:218 ../../Zotlabs/Storage/Browser.php:378 msgid "Type" msgstr "Tipo" -#: ../../Zotlabs/Module/Wiki.php:220 +#: ../../Zotlabs/Module/Wiki.php:219 msgid "Any type" msgstr "Cualquier tipo" -#: ../../Zotlabs/Module/Wiki.php:227 +#: ../../Zotlabs/Module/Wiki.php:226 msgid "Lock content type" msgstr "Tipo de contenido bloqueado" -#: ../../Zotlabs/Module/Wiki.php:228 +#: ../../Zotlabs/Module/Wiki.php:227 msgid "Create a status post for this wiki" msgstr "Crear un mensaje de estado para este wiki" -#: ../../Zotlabs/Module/Wiki.php:229 +#: ../../Zotlabs/Module/Wiki.php:228 msgid "Edit Wiki Name" msgstr "Editar el nombre del wiki" -#: ../../Zotlabs/Module/Wiki.php:274 +#: ../../Zotlabs/Module/Wiki.php:273 msgid "Wiki not found" msgstr "Wiki no encontrado" -#: ../../Zotlabs/Module/Wiki.php:300 +#: ../../Zotlabs/Module/Wiki.php:299 msgid "Rename page" msgstr "Renombrar la página" -#: ../../Zotlabs/Module/Wiki.php:321 +#: ../../Zotlabs/Module/Wiki.php:320 msgid "Error retrieving page content" msgstr "Error al recuperar el contenido de la página" -#: ../../Zotlabs/Module/Wiki.php:329 ../../Zotlabs/Module/Wiki.php:331 +#: ../../Zotlabs/Module/Wiki.php:328 ../../Zotlabs/Module/Wiki.php:330 msgid "New page" msgstr "Nueva página" -#: ../../Zotlabs/Module/Wiki.php:366 +#: ../../Zotlabs/Module/Wiki.php:365 msgid "Revision Comparison" msgstr "Comparación de revisiones" -#: ../../Zotlabs/Module/Wiki.php:374 +#: ../../Zotlabs/Module/Wiki.php:373 msgid "Short description of your changes (optional)" msgstr "Breve descripción de sus cambios (opcional)" -#: ../../Zotlabs/Module/Wiki.php:394 +#: ../../Zotlabs/Module/Wiki.php:393 msgid "New page name" msgstr "Nombre de la nueva página" -#: ../../Zotlabs/Module/Wiki.php:399 +#: ../../Zotlabs/Module/Wiki.php:398 msgid "Embed image from photo albums" msgstr "Incluir una imagen de los álbumes de fotos" -#: ../../Zotlabs/Module/Wiki.php:410 +#: ../../Zotlabs/Module/Wiki.php:409 msgid "History" msgstr "Historial" -#: ../../Zotlabs/Module/Wiki.php:488 +#: ../../Zotlabs/Module/Wiki.php:487 msgid "Error creating wiki. Invalid name." msgstr "Error al crear el wiki: el nombre no es válido." -#: ../../Zotlabs/Module/Wiki.php:495 +#: ../../Zotlabs/Module/Wiki.php:494 msgid "A wiki with this name already exists." msgstr "Ya hay un wiki con este nombre." -#: ../../Zotlabs/Module/Wiki.php:508 +#: ../../Zotlabs/Module/Wiki.php:507 msgid "Wiki created, but error creating Home page." msgstr "Se ha creado el wiki, pero se ha producido un error al crear la página de inicio." -#: ../../Zotlabs/Module/Wiki.php:515 +#: ../../Zotlabs/Module/Wiki.php:514 msgid "Error creating wiki" msgstr "Error al crear el wiki" -#: ../../Zotlabs/Module/Wiki.php:539 +#: ../../Zotlabs/Module/Wiki.php:538 msgid "Error updating wiki. Invalid name." msgstr "Error al actualizar el wiki. Nombre no válido." -#: ../../Zotlabs/Module/Wiki.php:559 +#: ../../Zotlabs/Module/Wiki.php:557 msgid "Error updating wiki" msgstr "Error al actualizar el wiki" -#: ../../Zotlabs/Module/Wiki.php:574 +#: ../../Zotlabs/Module/Wiki.php:572 msgid "Wiki delete permission denied." msgstr "Se ha denegado el permiso para eliminar el wiki." -#: ../../Zotlabs/Module/Wiki.php:584 +#: ../../Zotlabs/Module/Wiki.php:582 msgid "Error deleting wiki" msgstr "Se ha producido un error al eliminar el wiki" -#: ../../Zotlabs/Module/Wiki.php:617 +#: ../../Zotlabs/Module/Wiki.php:615 msgid "New page created" msgstr "Se ha creado la nueva página" -#: ../../Zotlabs/Module/Wiki.php:739 +#: ../../Zotlabs/Module/Wiki.php:741 msgid "Cannot delete Home" msgstr "No se puede eliminar la página principal" -#: ../../Zotlabs/Module/Wiki.php:803 +#: ../../Zotlabs/Module/Wiki.php:817 msgid "Current Revision" msgstr "Revisión actual" -#: ../../Zotlabs/Module/Wiki.php:803 +#: ../../Zotlabs/Module/Wiki.php:817 msgid "Selected Revision" msgstr "Revisión seleccionada" -#: ../../Zotlabs/Module/Wiki.php:853 +#: ../../Zotlabs/Module/Wiki.php:872 msgid "You must be authenticated." msgstr "Debe estar autenticado." @@ -14446,17 +14819,17 @@ msgstr "Última actualización:" msgid "Details" msgstr "Detalles" -#: ../../Zotlabs/Module/Notifications.php:55 +#: ../../Zotlabs/Module/Notifications.php:58 #: ../../Zotlabs/Module/Notify.php:61 msgid "No more system notifications." msgstr "No hay más notificaciones del sistema" -#: ../../Zotlabs/Module/Notifications.php:59 +#: ../../Zotlabs/Module/Notifications.php:62 #: ../../Zotlabs/Module/Notify.php:65 msgid "System Notifications" msgstr "Notificaciones del sistema" -#: ../../Zotlabs/Module/Notifications.php:60 +#: ../../Zotlabs/Module/Notifications.php:63 #: ../../Zotlabs/Lib/ThreadItem.php:484 msgid "Mark all seen" msgstr "Marcar todo como visto" @@ -14674,32 +15047,32 @@ msgctxt "permcat" msgid "publisher" msgstr "editor" -#: ../../Zotlabs/Lib/Activity.php:2131 +#: ../../Zotlabs/Lib/Activity.php:2163 #, php-format msgid "Likes %1$s's %2$s" msgstr "Gusta de %2$sde %1$s" -#: ../../Zotlabs/Lib/Activity.php:2134 +#: ../../Zotlabs/Lib/Activity.php:2166 #, php-format msgid "Doesn't like %1$s's %2$s" msgstr "No le gusta %2$sde %1$s" -#: ../../Zotlabs/Lib/Activity.php:2140 +#: ../../Zotlabs/Lib/Activity.php:2172 #, php-format msgid "Will attend %s's event" msgstr "Asistirá al evento de %s" -#: ../../Zotlabs/Lib/Activity.php:2143 +#: ../../Zotlabs/Lib/Activity.php:2175 #, php-format msgid "Will not attend %s's event" msgstr "No asistirá al evento de %s" -#: ../../Zotlabs/Lib/Activity.php:2146 +#: ../../Zotlabs/Lib/Activity.php:2178 #, php-format msgid "May attend %s's event" msgstr "Puede asistir al evento de %s" -#: ../../Zotlabs/Lib/Activity.php:2149 +#: ../../Zotlabs/Lib/Activity.php:2181 #, php-format msgid "May not attend %s's event" msgstr "Puede no asistir al evento de %s" @@ -14984,6 +15357,10 @@ msgstr "ha editado un comentario %s" msgid "created an event" msgstr "se creó un evento" +#: ../../Zotlabs/Lib/Enotify.php:986 +msgid "verified" +msgstr "verificado" + #: ../../Zotlabs/Lib/Connect.php:271 msgid "error saving data" msgstr "error guardando los datos" @@ -15008,11 +15385,11 @@ msgstr "Sala no encontrada." msgid "Room is full" msgstr "La sala está llena." -#: ../../Zotlabs/Lib/NativeWiki.php:145 +#: ../../Zotlabs/Lib/NativeWiki.php:146 msgid "Wiki updated successfully" msgstr "El wiki se ha actualizado con éxito" -#: ../../Zotlabs/Lib/NativeWiki.php:199 +#: ../../Zotlabs/Lib/NativeWiki.php:206 msgid "Wiki files deleted successfully" msgstr "Se han borrado con éxito los ficheros del wiki" @@ -15165,51 +15542,51 @@ msgstr "(Sin título)" msgid "Wiki page create failed." msgstr "Se ha producido un error en la creación de la página wiki." -#: ../../Zotlabs/Lib/NativeWikiPage.php:122 +#: ../../Zotlabs/Lib/NativeWikiPage.php:123 msgid "Wiki not found." msgstr "No se ha encontrado el wiki." -#: ../../Zotlabs/Lib/NativeWikiPage.php:133 +#: ../../Zotlabs/Lib/NativeWikiPage.php:134 msgid "Destination name already exists" msgstr "El nombre de destino ya existe" -#: ../../Zotlabs/Lib/NativeWikiPage.php:166 -#: ../../Zotlabs/Lib/NativeWikiPage.php:361 +#: ../../Zotlabs/Lib/NativeWikiPage.php:167 +#: ../../Zotlabs/Lib/NativeWikiPage.php:368 msgid "Page not found" msgstr "No se ha encontrado la página" -#: ../../Zotlabs/Lib/NativeWikiPage.php:197 +#: ../../Zotlabs/Lib/NativeWikiPage.php:200 msgid "Error reading page content" msgstr "Se ha producido un error al leer el contenido de la página" -#: ../../Zotlabs/Lib/NativeWikiPage.php:352 -#: ../../Zotlabs/Lib/NativeWikiPage.php:401 -#: ../../Zotlabs/Lib/NativeWikiPage.php:468 -#: ../../Zotlabs/Lib/NativeWikiPage.php:509 +#: ../../Zotlabs/Lib/NativeWikiPage.php:359 +#: ../../Zotlabs/Lib/NativeWikiPage.php:409 +#: ../../Zotlabs/Lib/NativeWikiPage.php:480 +#: ../../Zotlabs/Lib/NativeWikiPage.php:522 msgid "Error reading wiki" msgstr "Se ha producido un error al leer el wiki" -#: ../../Zotlabs/Lib/NativeWikiPage.php:389 +#: ../../Zotlabs/Lib/NativeWikiPage.php:396 msgid "Page update failed." msgstr "Se ha producido un error al actualizar la página." -#: ../../Zotlabs/Lib/NativeWikiPage.php:423 +#: ../../Zotlabs/Lib/NativeWikiPage.php:431 msgid "Nothing deleted" msgstr "No se ha eliminado nada" -#: ../../Zotlabs/Lib/NativeWikiPage.php:489 +#: ../../Zotlabs/Lib/NativeWikiPage.php:501 msgid "Compare: object not found." msgstr "No se ha encontrado un objeto para comparar." -#: ../../Zotlabs/Lib/NativeWikiPage.php:495 +#: ../../Zotlabs/Lib/NativeWikiPage.php:508 msgid "Page updated" msgstr "Se ha actualizado la página" -#: ../../Zotlabs/Lib/NativeWikiPage.php:498 +#: ../../Zotlabs/Lib/NativeWikiPage.php:511 msgid "Untitled" msgstr "Sin título" -#: ../../Zotlabs/Lib/NativeWikiPage.php:504 +#: ../../Zotlabs/Lib/NativeWikiPage.php:517 msgid "Wiki resource_id required for git commit" msgstr "Se necesita Wiki resource_id para el git commit" @@ -15608,40 +15985,40 @@ msgid "" "an existing folder." msgstr "Puede seleccionar los archivos a través del botón de subir o soltarlos aquí mismo o en una carpeta existente." -#: ../../boot.php:1690 +#: ../../boot.php:1695 msgid "Create an account to access services and applications" msgstr "Crear una cuenta para acceder a los servicios y aplicaciones" -#: ../../boot.php:1714 +#: ../../boot.php:1719 msgid "Login/Email" msgstr "Inicio de sesión / Correo electrónico" -#: ../../boot.php:1715 +#: ../../boot.php:1720 msgid "Password" msgstr "Contraseña" -#: ../../boot.php:1716 +#: ../../boot.php:1721 msgid "Remember me" msgstr "Recordarme" -#: ../../boot.php:1719 +#: ../../boot.php:1724 msgid "Forgot your password?" msgstr "¿Olvidó su contraseña?" -#: ../../boot.php:2588 +#: ../../boot.php:2603 #, php-format msgid "[$Projectname] Website SSL error for %s" msgstr "[$Projectname] Error SSL del sitio web en %s" -#: ../../boot.php:2593 +#: ../../boot.php:2608 msgid "Website SSL certificate is not valid. Please correct." msgstr "El certificado SSL del sitio web no es válido. Por favor, solucione el problema." -#: ../../boot.php:2709 +#: ../../boot.php:2724 #, php-format msgid "[$Projectname] Cron tasks not running on %s" msgstr "[$Projectname] Las tareas de Cron no están funcionando en %s" -#: ../../boot.php:2714 +#: ../../boot.php:2729 msgid "Cron/Scheduled tasks not running." msgstr "Las tareas del Planificador/Cron no están funcionando." diff --git a/view/es-es/hstrings.php b/view/es-es/hstrings.php index c41cf9fe9..d61cb65c2 100644 --- a/view/es-es/hstrings.php +++ b/view/es-es/hstrings.php @@ -2,7 +2,7 @@ if(! function_exists("string_plural_select_es_es")) { function string_plural_select_es_es($n){ - return ($n != 1 ? 1 : 0); + return ($n != 1); }} App::$rtl = 0; App::$strings["plural_function_code"] = "(n != 1 ? 1 : 0)"; @@ -611,6 +611,7 @@ App::$strings["Diaspora Protocol Settings updated."] = "Los ajustes del protocol App::$strings["The diaspora protocol does not support location independence. Connections you make within that network may be unreachable from alternate channel locations."] = "El protocolo de Diaspora no admite la independencia de la ubicación. Las conexiones que realice dentro de esa red pueden ser inaccesibles desde ubicaciones de canales alternativos."; App::$strings["Diaspora Protocol App"] = "App Protocolo Diaspora"; App::$strings["Allow any Diaspora member to comment or like your public posts"] = "Permitir que cualquier miembro de Diaspora comente o ponga un like en sus entradas públicas"; +App::$strings["If this setting is disabled only your contacts will be able to comment or like your public posts"] = "Si esta configuración está desactivada, sólo sus contactos podrán comentar o dar a \"me gusta\" en sus publicaciones públicas"; App::$strings["Prevent your hashtags from being redirected to other sites"] = "Impedir que sus \"hashtags\" sean redirigidos a otros sitios "; App::$strings["Sign and forward posts and comments with no existing Diaspora signature"] = "Firmar y enviar entradas y comentarios sin firma de Diaspora"; App::$strings["Followed hashtags (comma separated, do not include the #)"] = "\"Hashtags\" seguidos (separados por comas, sin incluir #)"; @@ -1129,6 +1130,7 @@ App::$strings["__ctx:calendar__ week"] = "semana"; App::$strings["__ctx:calendar__ day"] = "día"; App::$strings["__ctx:calendar__ All day"] = "Todos los días"; App::$strings["Please stand by while your download is being prepared."] = "Por favor, espere mientras se prepara la descarga."; +App::$strings["Email address not valid"] = "Dirección de correo electrónica no válida"; App::$strings["Help:"] = "Ayuda:"; App::$strings["Help"] = "Ayuda"; App::$strings["Not Found"] = "No encontrado"; @@ -1487,9 +1489,9 @@ App::$strings["profile photo"] = "foto del perfil"; App::$strings["[Edited %s]"] = "[se ha editado %s]"; App::$strings["__ctx:edit_activity__ Post"] = "Publicar"; App::$strings["__ctx:edit_activity__ Comment"] = "Comentar"; -App::$strings["Not a valid email address"] = "Dirección de correo no válida"; -App::$strings["Your email domain is not among those allowed on this site"] = "Su dirección de correo no pertenece a ninguno de los dominios permitidos en este sitio."; -App::$strings["Your email address is already registered at this site."] = "Su dirección de correo está ya registrada en este sitio."; +App::$strings["The provided email address is not valid"] = "La dirección de correo electrónico proporcionada no es válida"; +App::$strings["The provided email domain is not among those allowed on this site"] = "El dominio de correo electrónico proporcionado no está entre los permitidos en este sitio"; +App::$strings["The provided email address is already registered at this site"] = "La dirección de correo electrónico proporcionada ya está registrada en este sitio"; App::$strings["An invitation is required."] = "Es obligatorio que le inviten."; App::$strings["Invitation could not be verified."] = "No se ha podido verificar su invitación."; App::$strings["Please enter the required information."] = "Por favor introduzca la información requerida."; @@ -1500,9 +1502,14 @@ App::$strings["your registration password"] = "su contraseña de registro"; App::$strings["Registration details for %s"] = "Detalles del registro de %s"; App::$strings["Account approved."] = "Cuenta aprobada."; App::$strings["Registration revoked for %s"] = "Registro revocado para %s"; +App::$strings["Could not revoke registration for %s"] = "No se ha podido revocar el registro de %s"; App::$strings["Click here to upgrade."] = "Pulse aquí para actualizar"; App::$strings["This action exceeds the limits set by your subscription plan."] = "Esta acción supera los límites establecidos por su plan de suscripción "; App::$strings["This action is not available under your subscription plan."] = "Esta acción no está disponible en su plan de suscripción."; +App::$strings["open"] = "abierto"; +App::$strings["closed"] = "cerrado"; +App::$strings["Registration is currently"] = "El registro está actualmente "; +App::$strings["please come back"] = "por favor, vuelva"; App::$strings["Profile Photos"] = "Fotos del perfil"; App::$strings["Item was not found."] = "Elemento no encontrado."; App::$strings["Unknown error."] = "Error desconocido"; @@ -1863,36 +1870,40 @@ App::$strings["Update to Hubzilla 5.0 step 2"] = "Actualizar a Hubzilla 5.0. Pas App::$strings["To complete the update please run"] = "Para completar la actualización, ejecutar "; App::$strings["php util/z6convert.php"] = "php util/z6convert.php"; App::$strings["from the terminal."] = "desde la terminal."; -App::$strings["Maximum daily site registrations exceeded. Please try again tomorrow."] = "Se ha superado el límite máximo de inscripciones diarias de este sitio. Por favor, pruebe de nuevo mañana."; -App::$strings["Please indicate acceptance of the Terms of Service. Registration failed."] = "Por favor, confirme que acepta los Términos del servicio. El registro ha fallado."; -App::$strings["Passwords do not match."] = "Las contraseñas no coinciden."; -App::$strings["Registration successful. Continue to create your first channel..."] = "Registro exitoso. Continúe creando tu primer canal..."; -App::$strings["Registration successful. Please check your email for validation instructions."] = "Registro realizado con éxito. Por favor, compruebe su correo electrónico para ver las instrucciones para validarlo."; -App::$strings["Your registration is pending approval by the site owner."] = "Su registro está pendiente de aprobación por el propietario del sitio."; -App::$strings["Your registration can not be processed."] = "Su registro no puede ser procesado."; +App::$strings["Email address required"] = "Dirección de correo electrónico requerida"; +App::$strings["No password provided"] = "No se ha proporcionado la contraseña"; +App::$strings["Terms of Service not accepted"] = "No se han aceptado los Términos del servicio"; +App::$strings["Invitation code succesfully applied"] = "El código de invitación se ha aplicado con éxito"; +App::$strings["Invitation not in time or too late"] = "La invitación no llega a tiempo o llega demasiado tarde"; +App::$strings["Invitation email failed"] = "Error en el correo electrónico de invitación"; +App::$strings["Invitation code failed"] = "Código de invitación fallido"; +App::$strings["Invitations are not available"] = "No hay invitaciones disponibles"; +App::$strings["Email address already in use"] = "La dirección de correo electrónico ya está en uso"; +App::$strings["Registration on this hub is by invitation only"] = "El registro en este hub solo es posible por invitación"; +App::$strings["New register request"] = "Nueva solicitud de registro"; +App::$strings["Error creating dId A"] = "Error al crear dId A"; App::$strings["Registration on this hub is disabled."] = "El registro está deshabilitado en este sitio."; App::$strings["Registration on this hub is by approval only."] = "El registro en este hub está sometido a aprobación previa."; -App::$strings["Register at another affiliated hub."] = "Registrarse en otro hub afiliado."; +App::$strings["Register at another affiliated hub in case when prefered"] = "Regístrese en otro hub afiliado en caso de que lo prefiera"; App::$strings["Registration on this hub is by invitation only."] = "La inscripción en este hub es sólo posible por invitación."; -App::$strings["This site has exceeded the number of allowed daily account registrations. Please try again tomorrow."] = "Este sitio ha excedido el límite de inscripción diaria de cuentas. Por favor, inténtelo de nuevo mañana."; +App::$strings["Register at another affiliated hub"] = "Regístrese en otro hub afiliado"; App::$strings["Terms of Service"] = "Términos del servicio"; App::$strings["I accept the %s for this website"] = "Acepto los %s de este sitio"; App::$strings["I am over %s years of age and accept the %s for this website"] = "Tengo más de %s años de edad y acepto los %s de este sitio web"; App::$strings["Your email address"] = "Su dirección de correo electrónico"; +App::$strings["Optional"] = "Opcional"; App::$strings["Choose a password"] = "Elija una contraseña"; App::$strings["Please re-enter your password"] = "Por favor, vuelva a escribir su contraseña"; App::$strings["Please enter your invitation code"] = "Por favor, introduzca el código de su invitación"; -App::$strings["Your Name"] = "Su nombre"; -App::$strings["Real names are preferred."] = "Se prefieren los nombres reales"; +App::$strings["Your name"] = "Su nombre"; +App::$strings["Real name is preferred"] = "Se prefiere el nombre real"; App::$strings["Choose a short nickname"] = "Elija un alias corto"; -App::$strings["Your nickname will be used to create an easy to remember channel address e.g. nickname%s"] = "Su alias se usará para crear una dirección de canal fácil de recordar, p. ej.: alias%s"; -App::$strings["Channel role and privacy"] = "Clase de canal y privacidad"; -App::$strings["Select a channel permission role for your usage needs and privacy requirements."] = "Seleccione unos permisos de rol del canal compatibles con sus necesidades de uso y requisitos de privacidad."; -App::$strings["Read more about channel permission roles"] = "Leer más sobre los roles y permisos"; -App::$strings["no"] = "no"; -App::$strings["yes"] = "sí"; +App::$strings["Your nickname will be used to create an easy to remember channel address"] = "Tu alias se utilizará para crear una dirección de canal fácil de recordar"; +App::$strings["Why do you want to join this hub?"] = "¿Por qué quiere unirse a este hub?"; +App::$strings["This will help to review your registration"] = "Esto ayudará a revisar su registro"; App::$strings["Registration"] = "Registro"; -App::$strings["This site requires email verification. After completing this form, please check your email for further instructions."] = "Este sitio requiere verificación por correo electrónico. Después de completar este formulario, por favor revise su correo electrónico para más instrucciones."; +App::$strings["I have an invite code"] = "Tengo un código de invitación"; +App::$strings["This site has exceeded the number of allowed daily account registrations."] = "Este sitio ha superado el número permitido de registros diarios de cuentas."; App::$strings["Public access denied."] = "Acceso público denegado."; App::$strings["Items tagged with: %s"] = "elementos etiquetados con: %s"; App::$strings["Search results for: %s"] = "Resultados de la búsqueda para: %s"; @@ -2050,7 +2061,6 @@ App::$strings["Automatically generated - change if desired. Max length 20"] = "G App::$strings["Redirect"] = "Redirigir"; App::$strings["Redirect URI - leave blank unless your application specifically requires this"] = "URI de redirección - dejar en blanco a menos que su aplicación específicamente lo requiera"; App::$strings["Icon url"] = "Dirección del icono"; -App::$strings["Optional"] = "Opcional"; App::$strings["Application not found."] = "Aplicación no encontrada."; App::$strings["Connected OAuth Apps"] = "Apps OAuth conectadas"; App::$strings["Client key starts with"] = "La \"client key\" empieza por"; @@ -2238,7 +2248,6 @@ App::$strings["By continuing, I certify that I have complied with any instructio App::$strings["(No specific instructions have been provided by the channel owner.)"] = "(No ha sido proporcionada ninguna instrucción específica por el propietario del canal.)"; App::$strings["Restricted or Premium Channel"] = "Canal premium o restringido"; App::$strings["Not found"] = "No encontrado"; -App::$strings["Please refresh page"] = "Por favor, recargue la página"; App::$strings["Unknown error"] = "Error desconocido"; App::$strings["🔁 Repeated %1\$s's %2\$s"] = "🔁 Repetidos %2\$sde %1\$s"; App::$strings["Post repeated"] = "Entrada repetida"; @@ -2310,20 +2319,33 @@ App::$strings["%s account deleted"] = array( App::$strings["Account not found"] = "Cuenta no encontrada"; App::$strings["Account '%s' blocked"] = "La cuenta '%s' ha sido bloqueada"; App::$strings["Account '%s' unblocked"] = "La cuenta '%s' ha sido desbloqueada"; -App::$strings["select all"] = "seleccionar todo"; -App::$strings["Registrations waiting for confirm"] = "Inscripciones en espera de confirmación"; +App::$strings["Unverified"] = "Sin verificar"; +App::$strings["Expired"] = "Caducado/a"; +App::$strings["Show verified registrations"] = "Mostrar registros verificados"; +App::$strings["Show all registrations"] = "Mostrar todos los registros"; +App::$strings["Select toggle"] = "Seleccionar alternar"; +App::$strings["Deny selected"] = "Denegar seleccionado"; +App::$strings["Approve selected"] = "Aprobar seleccionado"; +App::$strings["All registrations"] = "Todos los registros"; +App::$strings["Verified registrations waiting for approval"] = "Registros verificados en espera de aprobación"; App::$strings["Request date"] = "Fecha de solicitud"; -App::$strings["No registrations."] = "Sin registros."; +App::$strings["Requests"] = "Solicitudes"; +App::$strings["No registrations available"] = "No hay registros disponibles"; +App::$strings["No verified registrations available"] = "No hay registros verificados disponibles"; App::$strings["Block"] = "Bloquear"; App::$strings["Unblock"] = "Desbloquear"; +App::$strings["Verified"] = "Verificado/a"; +App::$strings["Not yet verified"] = "Aún no se ha verificado"; App::$strings["ID"] = "ID"; -App::$strings["All Channels"] = "Todos los canales"; +App::$strings["All channels"] = "Todos los canales"; App::$strings["Register date"] = "Fecha de registro"; App::$strings["Last login"] = "Último acceso"; App::$strings["Expires"] = "Caduca"; -App::$strings["Service Class"] = "Clase de servicio"; +App::$strings["Service class"] = "Clase de servicio"; App::$strings["Selected accounts will be deleted!\\n\\nEverything these accounts had posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "¡Las cuentas seleccionadas van a ser eliminadas!\\n\\n¡Todo lo que estas cuentas han publicado en este sitio será borrado de forma permanente!\\n\\n¿Está seguro de querer hacerlo?"; App::$strings["The account {0} will be deleted!\\n\\nEverything this account has posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "¡La cuenta {0} va a ser eliminada!\\n\\n¡Todo lo que esta cuenta ha publicado en este sitio será borrado de forma permanente!\\n\\n¿Está seguro de querer hacerlo?"; +App::$strings["Invalid input"] = "Entrada no válida"; +App::$strings["Errors"] = "Errores"; App::$strings["Site settings updated."] = "Ajustes del sitio actualizados."; App::$strings["%s - (Incompatible)"] = "%s - (Incompatible)"; App::$strings["mobile"] = "móvil"; @@ -2336,6 +2358,17 @@ App::$strings["My site has free access only"] = "Mi sitio es un servicio gratuit App::$strings["My site offers free accounts with optional paid upgrades"] = "Mi sitio ofrece cuentas gratuitas con opciones extra de pago"; App::$strings["Default permission role for new accounts"] = "Permisos de rol por defecto para las nuevas cuentas"; App::$strings["This role will be used for the first channel created after registration."] = "Este rol se utilizará para el primer canal creado después del registro."; +App::$strings["Minute(s)"] = "Minuto(s)"; +App::$strings["Hour(s)"] = "Hora(s)"; +App::$strings["Day(s)"] = "Día(s)"; +App::$strings["Week(s)"] = "Semana(s)"; +App::$strings["Month(s)"] = "Mes(Meses)"; +App::$strings["Year(s)"] = "Año(s)"; +App::$strings["Register verification delay"] = "Retraso en la verificación del registro"; +App::$strings["Time to wait before a registration can be verified"] = "Tiempo de espera para verificar un registro "; +App::$strings["duration up from now"] = "duración a partir de ahora "; +App::$strings["Register verification expiration time"] = "Tiempo de caducidad de la verificación del registro "; +App::$strings["Time before an unverified registration will expire"] = "Tiempo antes de que caduque un registro no verificado "; App::$strings["File upload"] = "Subir fichero"; App::$strings["Policies"] = "Políticas"; App::$strings["Banner/Logo"] = "Banner/Logo"; @@ -2351,25 +2384,39 @@ App::$strings["Allow Feeds as Connections"] = "Permitir contenidos RSS como cone App::$strings["(Heavy system resource usage)"] = "(Uso intenso de los recursos del sistema)"; App::$strings["Maximum image size"] = "Tamaño máximo de la imagen"; App::$strings["Maximum size in bytes of uploaded images. Default is 0, which means no limits."] = "Tamaño máximo en bytes de la imagen subida. Por defecto, es 0, lo que significa que no hay límites."; -App::$strings["Does this site allow new member registration?"] = "¿Debe este sitio permitir el registro de nuevos miembros?"; -App::$strings["Invitation only"] = "Solo con una invitación"; -App::$strings["Only allow new member registrations with an invitation code. Above register policy must be set to Yes."] = "Solo se permiten inscripciones de nuevos miembros con un código de invitación. Además, deben aceptarse los términos del registro marcando \"Sí\"."; App::$strings["Minimum age"] = "Edad mínima"; App::$strings["Minimum age (in years) for who may register on this site."] = "Edad mínima (en años) para poder registrarse en este sitio."; App::$strings["Which best describes the types of account offered by this hub?"] = "¿Cómo describiría el tipo de servicio ofrecido por este servidor?"; App::$strings["This is displayed on the public server site list."] = "Esto se muestra en la lista de sitios de servidores públicos."; App::$strings["Register text"] = "Texto del registro"; -App::$strings["Will be displayed prominently on the registration page."] = "Se mostrará de forma destacada en la página de registro."; +App::$strings["This text will be displayed prominently at the registration page"] = "Este texto se mostrará de forma destacada en la página de registro "; +App::$strings["Does this site allow new member registration?"] = "¿Debe este sitio permitir el registro de nuevos miembros?"; +App::$strings["Configure the registration open days/hours"] = "Configurar los días/horas de apertura del registro"; +App::$strings["Empty or '-:-' value will keep registration open 24/7 (default)"] = "El valor vacío o \"-:-\" mantendrá el registro abierto 24/7 (por defecto)"; +App::$strings["Weekdays and hours must be separated by colon ':', From-To ranges with a dash `-` example: 1:800-1200"] = "Los días de la semana y las horas deben separarse con dos puntos ':', los rangos Desde-Hasta con un guión `-` ejemplo: 1:800-1200"; +App::$strings["Weekday:Hour pairs must be separated by space ' ' example: 1:900-1700 2:900-1700"] = "Los pares día de la semana:hora deben estar separados por un espacio ' ' ejemplo: 1:900-1700 2:900-1700"; +App::$strings["From-To ranges must be separated by comma ',' example: 1:800-1200,1300-1700 or 1-2,4-5:900-1700"] = "Los rangos desde-hasta deben estar separados por comas ',' ejemplo: 1:800-1200,1300-1700 o 1-2,4-5:900-1700"; +App::$strings["Advanced examples:"] = "Ejemplos avanzados: "; +App::$strings["or"] = "o"; +App::$strings["Check your configuration"] = "Compruebe su configuración"; +App::$strings["Max account registrations per day"] = "Máximo de registros de cuentas por día "; +App::$strings["Unlimited if zero or no value - default 50"] = "Ilimitado si es cero o sin valor - por defecto 50"; +App::$strings["Max account registrations from same IP"] = "Máximo de registros de cuentas desde la misma IP"; +App::$strings["Unlimited if zero or no value - default 3"] = "Ilimitado si es cero o sin valor - por defecto 3"; +App::$strings["Auto channel create"] = "Creación automática de canales"; +App::$strings["If disabled the channel will be created in a separate step during the registration process"] = "Si se desactiva, el canal se creará en un paso separado durante el proceso de registro"; +App::$strings["Require invite code"] = "Solicitar código de invitación"; +App::$strings["Allow invite code"] = "Permitir código de invitación"; +App::$strings["Require email address"] = "Solicitar dirección de correo electrónico"; +App::$strings["The provided email address will be verified (recommended)"] = "La dirección de correo electrónico proporcionada será verificada (recomendado)"; +App::$strings["Abandon account after x days"] = "Abandonar la cuenta después de x días"; +App::$strings["Will not waste system resources polling external sites for abandonded accounts. Enter 0 for no time limit."] = "Para evitar consumir recursos del sistema intentando poner al día las cuentas abandonadas. Introduzca 0 para no tener límite de tiempo."; App::$strings["Site homepage to show visitors (default: login box)"] = "Página personal que se mostrará a los visitantes (por defecto: la página de identificación)"; App::$strings["example: 'pubstream' to show public stream, 'page/sys/home' to show a system webpage called 'home' or 'include:home.html' to include a file."] = "ejemplo: 'pubstream' para mostrar el stream público, 'page/sys/home' para mostrar una página web del sistema llamada 'home' o 'include:home.html' para incluir un archivo."; App::$strings["Preserve site homepage URL"] = "Preservar la dirección de la página personal"; App::$strings["Present the site homepage in a frame at the original location instead of redirecting"] = "Presenta la página personal del sitio en un marco en la ubicación original, en vez de redirigirla."; -App::$strings["Accounts abandoned after x days"] = "Cuentas abandonadas después de x días"; -App::$strings["Will not waste system resources polling external sites for abandonded accounts. Enter 0 for no time limit."] = "Para evitar consumir recursos del sistema intentando poner al día las cuentas abandonadas. Introduzca 0 para no tener límite de tiempo."; App::$strings["Allowed friend domains"] = "Dominios amigos permitidos"; App::$strings["Comma separated list of domains which are allowed to establish friendships with this site. Wildcards are accepted. Empty to allow any domains"] = "Lista separada por comas de dominios a los que está permitido establecer relaciones de amistad con este sitio. Se permiten comodines. Dejar en claro para aceptar cualquier dominio."; -App::$strings["Verify Email Addresses"] = "Verificar las direcciones de correo electrónico"; -App::$strings["Check to verify email addresses used in account registration (recommended)."] = "Activar para la verificación de la dirección de correo electrónico en el registro de una cuenta (recomendado)."; App::$strings["Force publish"] = "Forzar la publicación"; App::$strings["Check to force all profiles on this site to be listed in the site directory."] = "Intentar forzar todos los perfiles para que sean listados en el directorio de este sitio."; App::$strings["Import Public Streams"] = "Importar contenido público"; @@ -2417,6 +2464,7 @@ App::$strings["Page to display after creating a new channel"] = "Página a mostr App::$strings["Default: profiles"] = "Perfiles predeterminados"; App::$strings["Optional: site location"] = "Opcional: ubicación del sitio"; App::$strings["Region or country"] = "Región o país"; +App::$strings["Invalid 24h time value (hhmm/hmm)"] = "Valor de tiempo de 24h no válido (hhmm/hmm)"; App::$strings["Log settings updated."] = "Actualizado el informe de configuraciones."; App::$strings["Clear"] = "Vaciar"; App::$strings["Debugging"] = "Depuración"; @@ -2441,6 +2489,7 @@ App::$strings["Channel '%s' censored"] = "Canal '%s' censurado"; App::$strings["Channel '%s' uncensored"] = "Canal '%s' no censurado"; App::$strings["Channel '%s' code allowed"] = "Código permitido al canal '%s'"; App::$strings["Channel '%s' code disallowed"] = "Código no permitido al canal '%s'"; +App::$strings["select all"] = "seleccionar todo"; App::$strings["Censor"] = "Censurar"; App::$strings["Uncensor"] = "No censurar"; App::$strings["Allow Code"] = "Permitir código"; @@ -2455,7 +2504,6 @@ App::$strings["Account Edit"] = "Editar la cuenta"; App::$strings["New Password"] = "Nueva contraseña"; App::$strings["New Password again"] = "Nueva contraseña otra vez"; App::$strings["Account language (for emails)"] = "Idioma de la cuenta (para los correos electrónicos)"; -App::$strings["Service class"] = "Clase de servicio"; App::$strings["New Profile Field"] = "Nuevo campo en el perfil"; App::$strings["Field nickname"] = "Alias del campo"; App::$strings["System name of field"] = "Nombre del campo en el sistema"; @@ -2515,6 +2563,36 @@ App::$strings["This channel will be completely removed from the network. "] = "E App::$strings["This action is permanent and can not be undone!"] = "¡Esta acción tiene carácter definitivo y no se puede deshacer!"; App::$strings["Please enter your password for verification:"] = "Por favor, introduzca su contraseña para su verificación:"; App::$strings["Remove Channel"] = "Eliminar el canal"; +App::$strings["Email resent"] = "Correo electrónico reenviado"; +App::$strings["Email resend failed"] = "Fallo en el reenvío del correo electrónico"; +App::$strings["Verify successfull"] = "Verificar que se ha hecho bien"; +App::$strings["Account successfull created"] = "Cuenta creada con éxito"; +App::$strings["Channel successfull created"] = "Canal creado con éxito"; +App::$strings["Automatic channel creation failed. Please create a channel."] = "La creación automática de canales ha fallado. Por favor, cree un canal."; +App::$strings["Account creation error"] = "Error en la creación de la cuenta"; +App::$strings["Verify failed"] = "Verificación fallida"; +App::$strings["Token verification failed"] = "Ha fallado el token de verificación."; +App::$strings["Request not inside time frame"] = "Solicitud fuera de plazo"; +App::$strings["Identity unknown"] = "Identidad desconocida"; +App::$strings["dId2 mistaken"] = "did2 equivocado/a"; +App::$strings["Your Registration ID"] = "Su ID de registro"; +App::$strings["Registration verification"] = "Verificación del registro"; +App::$strings["Hold on, you can start verification in"] = "Espere, puede empezar la verificación en "; +App::$strings["Please remember your verification token for ID"] = "Por favor, recuerde su token de verificación para la identificación"; +App::$strings["Token validity"] = "Validez del token"; +App::$strings["Resend"] = "Reenviar"; +App::$strings["Registration status"] = "Estado del registro"; +App::$strings["Verification successful!"] = "¡Verificación exitosa!"; +App::$strings["Your login ID is"] = "Su ID de acceso es"; +App::$strings["After your account has been approved by our administrator you will be able to login with your login ID and your provided password."] = "Una vez que su cuenta haya sido aprobada por nuestro administrador, podrá iniciar sesión con su ID de acceso y la contraseña proporcionada."; +App::$strings["Registration request revoked"] = "Solicitud de registro anulada"; +App::$strings["Sorry for any inconvience. Thank you for your response."] = "Disculpe las molestias. Gracias por su respuesta."; +App::$strings["Please enter your verification token for ID"] = "Por favor, introduzca su token de verificación para la identificación"; +App::$strings["Verification token"] = "Token de verificación "; +App::$strings["ID expired"] = "ID caducada"; +App::$strings["You will require the verification token for ID"] = "Necesitará el token de verificación para identificarse"; +App::$strings["Unknown or expired ID"] = "ID desconocida o caducada"; +App::$strings["dId2 malformed"] = "did2 malformado/a"; App::$strings["Edit event title"] = "Editar el título del evento"; App::$strings["Categories (comma-separated list)"] = "Temas (lista separada por comas)"; App::$strings["Edit Category"] = "Modificar el tema"; @@ -2599,7 +2677,9 @@ App::$strings["Examples: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \ App::$strings["This will be used to create a unique network address (like an email address)."] = "Esto se utilizará para crear una dirección de red única (como una dirección de correo electrónico)."; App::$strings["Allowed characters are a-z 0-9, - and _"] = "Los caracteres permitidos son a-z 0-9, - and _"; App::$strings["Channel name"] = "Nombre del canal"; +App::$strings["Channel role and privacy"] = "Clase de canal y privacidad"; App::$strings["Select a channel permission role compatible with your usage needs and privacy requirements."] = "Seleccione unos permisos de rol del canal compatibles con sus necesidades de uso y requisitos de privacidad."; +App::$strings["Read more about channel permission roles"] = "Leer más sobre los roles y permisos"; App::$strings["Create a Channel"] = "Crear un canal"; App::$strings["A channel is a unique network identity. It can represent a person (social network profile), a forum (group), a business or celebrity page, a newsfeed, and many other things."] = "Un canal es una identidad única en la red. Puede representar a una persona (un perfil de una red social), un foro o grupo, un negocio o una página de una celebridad, un \"feed\" de noticias, y muchas otras cosas."; App::$strings["or import an existing channel from another location."] = "O importar un canal desde otro lugar."; @@ -2852,7 +2932,7 @@ App::$strings["Sexual preference"] = "Preferencia sexual"; App::$strings["Profile name"] = "Nombre del perfil"; App::$strings["This is your default profile."] = "Este es su perfil principal."; App::$strings["Your full name"] = "Nombre completo"; -App::$strings["Short title/tescription"] = "Breve título y descripción"; +App::$strings["Short title/description"] = "Breve título y descripción"; App::$strings["Maximal 190 characters"] = "Máximo de 190 caracteres"; App::$strings["Street address"] = "Dirección"; App::$strings["Locality/City"] = "Ciudad"; @@ -2894,25 +2974,33 @@ App::$strings["Change channel nickname/address"] = "Cambiar el alias o la direcc App::$strings["Any/all connections on other networks will be lost!"] = "¡Cualquier/todas las conexiones en otras redes se perderán!"; App::$strings["New channel address"] = "Nueva dirección del canal"; App::$strings["Rename Channel"] = "Renombrar el canal"; -App::$strings["Total invitation limit exceeded."] = "Se ha superado el límite máximo de invitaciones."; -App::$strings["%s : Not a valid email address."] = "%s : No es una dirección de correo electrónico válida. "; -App::$strings["Please join us on \$Projectname"] = "Únase a nosotros en \$Projectname"; -App::$strings["Invitation limit exceeded. Please contact your site administrator."] = "Excedido el límite de invitaciones. Por favor, contacte con el Administrador de su sitio."; -App::$strings["%d message sent."] = array( - 0 => "%d mensajes enviados.", - 1 => "%d mensajes enviados.", -); App::$strings["Invite App"] = "Solicitar una app"; -App::$strings["Send email invitations to join this network"] = "Enviar invitaciones por correo electrónico para unirse a esta red"; +App::$strings["Register is closed"] = "El registro está cerrado"; +App::$strings["Note, the invitation code is valid up to"] = "Tenga en cuenta que el código de invitación es válido hasta "; +App::$strings["Too many recipients for one invitation (max %d)"] = "Demasiados destinatarios para una invitación (máx %d)"; +App::$strings["No recipients for this invitation"] = "No hay destinatarios para esta invitación"; +App::$strings["(%s) : Not a valid email address"] = "(%s): No es una dirección de correo electrónico válida"; +App::$strings["(%s) : Not a real email address"] = "(%s) : No es una dirección de correo electrónica real"; +App::$strings["(%s) : Not allowed email address"] = "(%s) : Dirección de correo electrónico no permitida"; +App::$strings["(%s) : email address already in use"] = "(%s) : La dirección de correo electrónico ya está en uso"; +App::$strings["(%s) : Accepted email address"] = "(%s) : Dirección de correo electrónico aceptada"; +App::$strings["To %s : Message delivery success."] = "To %s : Entrega exitosa del mensaje."; +App::$strings["%1\$d mail(s) sent, %2\$d mail error(s)"] = "%1\$d correo(s) enviado, %2\$d error(es) de correo"; +App::$strings["Invites not proposed by configuration"] = "Invitaciones no propuestas por la configuración"; +App::$strings["Contact the site admin"] = "Contactar con el administrador del sitio"; +App::$strings["Invites by users not enabled"] = "Invitaciones de usuarios no habilitadas"; App::$strings["You have no more invitations available"] = "No tiene más invitaciones disponibles"; +App::$strings["Not on xchan"] = "No en xchan"; +App::$strings["All users invitation limit exceeded."] = "Se ha superado el límite de invitaciones a todos los usuarios."; +App::$strings["Invitation expires after"] = "La invitación expira después de "; +App::$strings["Invitation"] = "Invitación"; App::$strings["Send invitations"] = "Enviar invitaciones"; +App::$strings["Invitations I am using"] = "Invitaciones que estoy utilizando "; +App::$strings["Invitations we are using"] = "Invitaciones que usamos "; +App::$strings["§ Note, the email(s) sent will be recorded in the system logs"] = "§ Nota: el/los correo(s) electrónicos enviados quedarán registrados en los registros del sistema"; App::$strings["Enter email addresses, one per line:"] = "Introduzca las direcciones de correo electrónico, una por línea:"; -App::$strings["Please join my community on \$Projectname."] = "Por favor, únase a mi comunidad en \$Projectname."; -App::$strings["You will need to supply this invitation code:"] = "Tendrá que suministrar este código de invitación:"; -App::$strings["1. Register at any \$Projectname location (they are all inter-connected)"] = "1. Regístrese en cualquier sitio de \$Projectname (están todos interconectados)"; -App::$strings["2. Enter my \$Projectname network address into the site searchbar."] = "2. Introduzca mi dirección \$Projectname en la caja de búsqueda del sitio."; -App::$strings["or visit"] = "o visitar"; -App::$strings["3. Click [Connect]"] = "3. Pulse [conectar]"; +App::$strings["Invite template"] = "Plantilla de invitación"; +App::$strings["Here you may enter personal notes to the recipient(s)"] = "Aquí puede introducir notas personales para el/los destinatario(s)"; App::$strings["Notes App"] = "App Notas"; App::$strings["A simple notes app with a widget (note: notes are not encrypted)"] = "Una simple aplicación de notas con un widget (aviso: las notas no están encriptadas)"; App::$strings["Xchan Lookup"] = "Búsqueda de canales"; @@ -2946,7 +3034,6 @@ App::$strings["Anybody authenticated"] = "Cualquiera que esté autenticado"; App::$strings["Anybody on the internet"] = "Cualquiera en internet"; App::$strings["Publish your default profile in the network directory"] = "Publicar su perfil principal en el directorio de la red"; App::$strings["Allow us to suggest you as a potential friend to new members?"] = "¿Nos permite sugerirle como amigo potencial a los nuevos miembros?"; -App::$strings["or"] = "o"; App::$strings["Your channel address is"] = "Su dirección de canal es"; App::$strings["Your files/photos are accessible via WebDAV at"] = "Sus archivos y fotos son accesibles a través de WebDAV en "; App::$strings["Automatic membership approval"] = "Aprobación automática de nuevos miembros"; @@ -3042,6 +3129,7 @@ App::$strings["Current Password"] = "Contraseña actual"; App::$strings["Enter New Password"] = "Escribir una nueva contraseña"; App::$strings["Confirm New Password"] = "Confirmar la nueva contraseña"; App::$strings["Leave password fields blank unless changing"] = "Dejar en blanco la contraseña a menos que desee cambiarla."; +App::$strings["DId2 or Email Address:"] = "Did2 o dirección de correo electrónico: "; App::$strings["Remove this account including all its channels"] = "Eliminar esta cuenta incluyendo todos sus canales"; App::$strings["No feature settings configured"] = "No se ha establecido la configuración de los complementos"; App::$strings["Addon Settings"] = "Ajustes de los complementos"; @@ -3380,6 +3468,7 @@ App::$strings["repeated %s's post"] = "repetida la entrada de %s"; App::$strings["edited a post dated %s"] = "ha editado una entrada %s"; App::$strings["edited a comment dated %s"] = "ha editado un comentario %s"; App::$strings["created an event"] = "se creó un evento"; +App::$strings["verified"] = "verificado"; App::$strings["error saving data"] = "error guardando los datos"; App::$strings["Missing room name"] = "Sala de chat sin nombre"; App::$strings["Duplicate room name"] = "Nombre de sala duplicado."; -- cgit v1.2.3 From 443b436be8637c5adc9088e591f9bd3e8b0327a2 Mon Sep 17 00:00:00 2001 From: mjfriaza Date: Tue, 1 Jun 2021 11:57:11 +0200 Subject: Update Spanish (cherry picked from commit 993d64801136aa4bde4f4422ae4f07d224a91a62) --- view/es-es/hmessages.po | 2709 +++++++++++++++++++++++++++-------------------- view/es-es/hstrings.php | 199 +++- 2 files changed, 1687 insertions(+), 1221 deletions(-) diff --git a/view/es-es/hmessages.po b/view/es-es/hmessages.po index 8c730d058..a9d2fdd48 100644 --- a/view/es-es/hmessages.po +++ b/view/es-es/hmessages.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the hubzilla package. # # Translators: -# Alfonso Martínez , 2015 +# Alfonso Martínez, 2015 # inboxwall , 2015 # jeroenpraat, 2015 # Manuel Jiménez Friaza , 2017-2021 @@ -14,8 +14,8 @@ msgid "" msgstr "" "Project-Id-Version: hubzilla\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-23 10:52+0000\n" -"PO-Revision-Date: 2021-02-24 09:30+0000\n" +"POT-Creation-Date: 2021-04-29 08:26+0000\n" +"PO-Revision-Date: 2021-05-14 18:05+0000\n" "Last-Translator: Manuel Jiménez Friaza \n" "Language-Team: Spanish (Spain) (http://www.transifex.com/Friendica/hubzilla/language/es_ES/)\n" "MIME-Version: 1.0\n" @@ -24,15 +24,12 @@ msgstr "" "Language: es_ES\n" "Plural-Forms: nplurals=2; plural=(n != 1 ? 1 : 0);\n" - - - #: ../../view/theme/redbasic/php/config.php:15 #: ../../addon/cart/submodules/orderoptions.php:335 #: ../../addon/cart/submodules/orderoptions.php:359 #: ../../addon/cart/submodules/orderoptions.php:435 #: ../../addon/cart/submodules/orderoptions.php:459 -#: ../../include/text.php:3382 ../../Zotlabs/Module/Admin/Site.php:191 +#: ../../include/text.php:3395 ../../Zotlabs/Module/Admin/Site.php:251 msgid "Default" msgstr "Predeterminado" @@ -90,8 +87,8 @@ msgstr "Focus (predefinido)" #: ../../Zotlabs/Widget/Wiki_pages.php:99 #: ../../Zotlabs/Widget/Eventstools.php:16 ../../Zotlabs/Module/Tokens.php:188 #: ../../Zotlabs/Module/Import_items.php:129 -#: ../../Zotlabs/Module/Import.php:646 ../../Zotlabs/Module/Setup.php:304 -#: ../../Zotlabs/Module/Setup.php:344 ../../Zotlabs/Module/Group.php:151 +#: ../../Zotlabs/Module/Import.php:647 ../../Zotlabs/Module/Setup.php:306 +#: ../../Zotlabs/Module/Setup.php:346 ../../Zotlabs/Module/Group.php:151 #: ../../Zotlabs/Module/Group.php:167 ../../Zotlabs/Module/Oauth.php:111 #: ../../Zotlabs/Module/Chat.php:209 ../../Zotlabs/Module/Chat.php:248 #: ../../Zotlabs/Module/Poke.php:217 ../../Zotlabs/Module/Mitem.php:259 @@ -100,24 +97,25 @@ msgstr "Focus (predefinido)" #: ../../Zotlabs/Module/Admin/Themes.php:158 #: ../../Zotlabs/Module/Admin/Features.php:66 #: ../../Zotlabs/Module/Admin/Security.php:120 -#: ../../Zotlabs/Module/Admin/Accounts.php:168 -#: ../../Zotlabs/Module/Admin/Site.php:293 +#: ../../Zotlabs/Module/Admin/Accounts.php:309 +#: ../../Zotlabs/Module/Admin/Site.php:412 #: ../../Zotlabs/Module/Admin/Logs.php:84 #: ../../Zotlabs/Module/Admin/Channels.php:147 #: ../../Zotlabs/Module/Admin/Account_edit.php:73 #: ../../Zotlabs/Module/Admin/Profs.php:178 #: ../../Zotlabs/Module/Admin/Addons.php:442 -#: ../../Zotlabs/Module/Events.php:501 ../../Zotlabs/Module/Permcats.php:129 -#: ../../Zotlabs/Module/Mood.php:158 ../../Zotlabs/Module/Appman.php:155 +#: ../../Zotlabs/Module/Regate.php:384 ../../Zotlabs/Module/Events.php:501 +#: ../../Zotlabs/Module/Permcats.php:129 ../../Zotlabs/Module/Mood.php:158 +#: ../../Zotlabs/Module/Appman.php:155 #: ../../Zotlabs/Module/Email_validation.php:40 #: ../../Zotlabs/Module/Photos.php:1058 ../../Zotlabs/Module/Photos.php:1098 #: ../../Zotlabs/Module/Photos.php:1216 ../../Zotlabs/Module/Profiles.php:725 -#: ../../Zotlabs/Module/Invite.php:168 ../../Zotlabs/Module/Xchan.php:15 +#: ../../Zotlabs/Module/Invite.php:550 ../../Zotlabs/Module/Xchan.php:15 #: ../../Zotlabs/Module/Affinity.php:87 ../../Zotlabs/Module/Rate.php:168 #: ../../Zotlabs/Module/Settings/Network.php:62 #: ../../Zotlabs/Module/Settings/Features.php:48 #: ../../Zotlabs/Module/Settings/Channel.php:495 -#: ../../Zotlabs/Module/Settings/Account.php:103 +#: ../../Zotlabs/Module/Settings/Account.php:107 #: ../../Zotlabs/Module/Settings/Events.php:42 #: ../../Zotlabs/Module/Settings/Manage.php:43 #: ../../Zotlabs/Module/Settings/Channel_home.php:91 @@ -132,7 +130,7 @@ msgstr "Focus (predefinido)" #: ../../Zotlabs/Module/Defperms.php:266 ../../Zotlabs/Module/Pconfig.php:116 #: ../../Zotlabs/Module/Oauth2.php:116 ../../Zotlabs/Module/Thing.php:328 #: ../../Zotlabs/Module/Thing.php:381 ../../Zotlabs/Module/Pdledit.php:108 -#: ../../Zotlabs/Module/Wiki.php:215 ../../Zotlabs/Module/Connedit.php:897 +#: ../../Zotlabs/Module/Wiki.php:214 ../../Zotlabs/Module/Connedit.php:897 #: ../../Zotlabs/Module/Locs.php:132 ../../Zotlabs/Module/Sources.php:125 #: ../../Zotlabs/Module/Sources.php:162 ../../Zotlabs/Lib/ThreadItem.php:827 #: ../../Zotlabs/Storage/Browser.php:382 @@ -189,29 +187,29 @@ msgstr "Estrechar la barra de navegación" #: ../../addon/libertree/Mod_Libertree.php:59 #: ../../addon/socialauth/Mod_SocialAuth.php:214 #: ../../addon/ljpost/Mod_Ljpost.php:63 ../../addon/ljpost/Mod_Ljpost.php:67 -#: ../../addon/ljpost/Mod_Ljpost.php:71 ../../include/conversation.php:1469 +#: ../../addon/ljpost/Mod_Ljpost.php:71 ../../include/conversation.php:1468 #: ../../include/dir_fns.php:144 ../../include/dir_fns.php:145 -#: ../../include/dir_fns.php:146 ../../Zotlabs/Module/Import.php:635 -#: ../../Zotlabs/Module/Import.php:639 ../../Zotlabs/Module/Import.php:640 -#: ../../Zotlabs/Module/Mitem.php:176 ../../Zotlabs/Module/Mitem.php:177 -#: ../../Zotlabs/Module/Mitem.php:256 ../../Zotlabs/Module/Mitem.php:257 -#: ../../Zotlabs/Module/Filestorage.php:203 +#: ../../include/dir_fns.php:146 ../../Zotlabs/Module/Import.php:636 +#: ../../Zotlabs/Module/Import.php:640 ../../Zotlabs/Module/Import.php:641 +#: ../../Zotlabs/Module/Register.php:536 ../../Zotlabs/Module/Mitem.php:176 +#: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:256 +#: ../../Zotlabs/Module/Mitem.php:257 ../../Zotlabs/Module/Filestorage.php:203 #: ../../Zotlabs/Module/Filestorage.php:211 -#: ../../Zotlabs/Module/Admin/Site.php:259 ../../Zotlabs/Module/Events.php:478 +#: ../../Zotlabs/Module/Admin/Site.php:319 ../../Zotlabs/Module/Events.php:478 #: ../../Zotlabs/Module/Events.php:479 ../../Zotlabs/Module/Api.php:99 #: ../../Zotlabs/Module/Photos.php:673 ../../Zotlabs/Module/Profiles.php:683 #: ../../Zotlabs/Module/Settings/Channel.php:311 #: ../../Zotlabs/Module/Settings/Display.php:88 #: ../../Zotlabs/Module/Menu.php:163 ../../Zotlabs/Module/Menu.php:222 -#: ../../Zotlabs/Module/Defperms.php:198 ../../Zotlabs/Module/Wiki.php:227 -#: ../../Zotlabs/Module/Wiki.php:228 ../../Zotlabs/Module/Connedit.php:404 +#: ../../Zotlabs/Module/Defperms.php:198 ../../Zotlabs/Module/Wiki.php:226 +#: ../../Zotlabs/Module/Wiki.php:227 ../../Zotlabs/Module/Connedit.php:404 #: ../../Zotlabs/Module/Connedit.php:789 ../../Zotlabs/Module/Sources.php:124 #: ../../Zotlabs/Module/Sources.php:159 ../../Zotlabs/Lib/Libzotdir.php:165 #: ../../Zotlabs/Lib/Libzotdir.php:166 ../../Zotlabs/Lib/Libzotdir.php:168 #: ../../Zotlabs/Storage/Browser.php:310 ../../Zotlabs/Storage/Browser.php:311 #: ../../Zotlabs/Storage/Browser.php:312 ../../Zotlabs/Storage/Browser.php:389 #: ../../Zotlabs/Storage/Browser.php:391 ../../Zotlabs/Storage/Browser.php:552 -#: ../../boot.php:1716 +#: ../../boot.php:1721 msgid "No" msgstr "No" @@ -257,28 +255,28 @@ msgstr "No" #: ../../addon/libertree/Mod_Libertree.php:59 #: ../../addon/socialauth/Mod_SocialAuth.php:214 #: ../../addon/ljpost/Mod_Ljpost.php:63 ../../addon/ljpost/Mod_Ljpost.php:67 -#: ../../addon/ljpost/Mod_Ljpost.php:71 ../../include/conversation.php:1469 +#: ../../addon/ljpost/Mod_Ljpost.php:71 ../../include/conversation.php:1468 #: ../../include/dir_fns.php:144 ../../include/dir_fns.php:145 -#: ../../include/dir_fns.php:146 ../../Zotlabs/Module/Import.php:635 -#: ../../Zotlabs/Module/Import.php:639 ../../Zotlabs/Module/Import.php:640 -#: ../../Zotlabs/Module/Mitem.php:176 ../../Zotlabs/Module/Mitem.php:177 -#: ../../Zotlabs/Module/Mitem.php:256 ../../Zotlabs/Module/Mitem.php:257 -#: ../../Zotlabs/Module/Filestorage.php:203 +#: ../../include/dir_fns.php:146 ../../Zotlabs/Module/Import.php:636 +#: ../../Zotlabs/Module/Import.php:640 ../../Zotlabs/Module/Import.php:641 +#: ../../Zotlabs/Module/Register.php:536 ../../Zotlabs/Module/Mitem.php:176 +#: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:256 +#: ../../Zotlabs/Module/Mitem.php:257 ../../Zotlabs/Module/Filestorage.php:203 #: ../../Zotlabs/Module/Filestorage.php:211 -#: ../../Zotlabs/Module/Admin/Site.php:261 ../../Zotlabs/Module/Events.php:478 +#: ../../Zotlabs/Module/Admin/Site.php:321 ../../Zotlabs/Module/Events.php:478 #: ../../Zotlabs/Module/Events.php:479 ../../Zotlabs/Module/Api.php:98 #: ../../Zotlabs/Module/Photos.php:673 ../../Zotlabs/Module/Profiles.php:683 #: ../../Zotlabs/Module/Settings/Channel.php:311 #: ../../Zotlabs/Module/Settings/Display.php:88 #: ../../Zotlabs/Module/Menu.php:163 ../../Zotlabs/Module/Menu.php:222 -#: ../../Zotlabs/Module/Defperms.php:198 ../../Zotlabs/Module/Wiki.php:227 -#: ../../Zotlabs/Module/Wiki.php:228 ../../Zotlabs/Module/Connedit.php:404 +#: ../../Zotlabs/Module/Defperms.php:198 ../../Zotlabs/Module/Wiki.php:226 +#: ../../Zotlabs/Module/Wiki.php:227 ../../Zotlabs/Module/Connedit.php:404 #: ../../Zotlabs/Module/Sources.php:124 ../../Zotlabs/Module/Sources.php:159 #: ../../Zotlabs/Lib/Libzotdir.php:165 ../../Zotlabs/Lib/Libzotdir.php:166 #: ../../Zotlabs/Lib/Libzotdir.php:168 ../../Zotlabs/Storage/Browser.php:310 #: ../../Zotlabs/Storage/Browser.php:311 ../../Zotlabs/Storage/Browser.php:312 #: ../../Zotlabs/Storage/Browser.php:389 ../../Zotlabs/Storage/Browser.php:391 -#: ../../Zotlabs/Storage/Browser.php:552 ../../boot.php:1716 +#: ../../Zotlabs/Storage/Browser.php:552 ../../boot.php:1721 msgid "Yes" msgstr "Sí" @@ -433,7 +431,7 @@ msgid "Channel Reputation" msgstr "Reputación del canal" #: ../../addon/channelreputation/channelreputation.php:233 -#: ../../include/acl_selectors.php:155 ../../Zotlabs/Widget/Pinned.php:160 +#: ../../include/acl_selectors.php:156 ../../Zotlabs/Widget/Pinned.php:158 #: ../../Zotlabs/Module/Photos.php:1275 ../../Zotlabs/Lib/ThreadItem.php:497 #: ../../Zotlabs/Storage/Browser.php:411 msgid "Close" @@ -489,17 +487,17 @@ msgstr "App Superblock" #: ../../addon/xmpp/Mod_Xmpp.php:35 ../../Zotlabs/Module/Tokens.php:99 #: ../../Zotlabs/Module/Group.php:107 ../../Zotlabs/Module/Oauth.php:100 #: ../../Zotlabs/Module/Chat.php:100 ../../Zotlabs/Module/Poke.php:165 -#: ../../Zotlabs/Module/Cdav.php:876 ../../Zotlabs/Module/Webpages.php:48 +#: ../../Zotlabs/Module/Cdav.php:877 ../../Zotlabs/Module/Webpages.php:48 #: ../../Zotlabs/Module/Pubstream.php:20 ../../Zotlabs/Module/Permcats.php:63 -#: ../../Zotlabs/Module/Lang.php:17 ../../Zotlabs/Module/Uexport.php:61 +#: ../../Zotlabs/Module/Lang.php:17 ../../Zotlabs/Module/Uexport.php:62 #: ../../Zotlabs/Module/Mood.php:134 ../../Zotlabs/Module/Cards.php:51 #: ../../Zotlabs/Module/Articles.php:52 ../../Zotlabs/Module/Bookmarks.php:78 -#: ../../Zotlabs/Module/Probe.php:19 ../../Zotlabs/Module/Invite.php:110 -#: ../../Zotlabs/Module/Notes.php:57 ../../Zotlabs/Module/Affinity.php:52 -#: ../../Zotlabs/Module/Defperms.php:190 ../../Zotlabs/Module/Oauth2.php:106 -#: ../../Zotlabs/Module/Randprof.php:29 ../../Zotlabs/Module/Pdledit.php:43 -#: ../../Zotlabs/Module/Wiki.php:52 ../../Zotlabs/Module/Suggest.php:40 -#: ../../Zotlabs/Module/Sources.php:88 +#: ../../Zotlabs/Module/Probe.php:19 ../../Zotlabs/Module/Invite.php:56 +#: ../../Zotlabs/Module/Invite.php:310 ../../Zotlabs/Module/Notes.php:57 +#: ../../Zotlabs/Module/Affinity.php:52 ../../Zotlabs/Module/Defperms.php:190 +#: ../../Zotlabs/Module/Oauth2.php:106 ../../Zotlabs/Module/Randprof.php:29 +#: ../../Zotlabs/Module/Pdledit.php:43 ../../Zotlabs/Module/Wiki.php:52 +#: ../../Zotlabs/Module/Suggest.php:40 ../../Zotlabs/Module/Sources.php:88 msgid "Not Installed" msgstr "No instalado/a" @@ -593,7 +591,7 @@ msgid "View Profile" msgstr "Ver el perfil" #: ../../addon/openclipatar/openclipatar.php:58 ../../include/nav.php:120 -#: ../../include/channel.php:1543 +#: ../../include/channel.php:1567 msgid "Edit Profile" msgstr "Editar el perfil" @@ -711,8 +709,8 @@ msgstr "Mínimo 100, por defecto 100 microsegundos" msgid "Queueworker Settings" msgstr "Configuración del gestor de procesos de trabajo en cola" -#: ../../addon/queueworker/Mod_Queueworker.php:116 ../../include/text.php:1152 -#: ../../include/text.php:1164 ../../Zotlabs/Widget/Notes.php:23 +#: ../../addon/queueworker/Mod_Queueworker.php:116 ../../include/text.php:1145 +#: ../../include/text.php:1157 ../../Zotlabs/Widget/Notes.php:23 #: ../../Zotlabs/Module/Admin/Profs.php:94 #: ../../Zotlabs/Module/Admin/Profs.php:114 ../../Zotlabs/Module/Cards.php:113 #: ../../Zotlabs/Module/Filer.php:54 ../../Zotlabs/Module/Articles.php:117 @@ -767,7 +765,7 @@ msgstr "Galería" msgid "Photo Gallery" msgstr "Galería de fotos" -#: ../../addon/gallery/Mod_Gallery.php:49 ../../include/channel.php:1440 +#: ../../addon/gallery/Mod_Gallery.php:49 ../../include/channel.php:1464 #: ../../Zotlabs/Module/Hcard.php:12 ../../Zotlabs/Module/Editwebpage.php:32 #: ../../Zotlabs/Module/Profile.php:27 ../../Zotlabs/Module/Webpages.php:39 #: ../../Zotlabs/Module/Filestorage.php:59 ../../Zotlabs/Module/Connect.php:17 @@ -798,7 +796,7 @@ msgstr "Establecer un planeta aleatorio del Imperio de la Guerra de las Galaxias #: ../../addon/openid/Mod_Id.php:53 ../../addon/mail/Mod_Mail.php:26 #: ../../addon/pumpio/pumpio.php:44 ../../addon/keepout/keepout.php:36 -#: ../../include/photos.php:27 ../../include/items.php:4001 +#: ../../include/photos.php:27 ../../include/items.php:4087 #: ../../include/attach.php:156 ../../include/attach.php:205 #: ../../include/attach.php:278 ../../include/attach.php:329 #: ../../include/attach.php:424 ../../include/attach.php:438 @@ -808,12 +806,12 @@ msgstr "Establecer un planeta aleatorio del Imperio de la Guerra de las Galaxias #: ../../Zotlabs/Module/Attach_edit.php:90 #: ../../Zotlabs/Module/Attach_edit.php:99 #: ../../Zotlabs/Module/Attach_edit.php:106 -#: ../../Zotlabs/Module/Network.php:19 ../../Zotlabs/Module/Register.php:80 -#: ../../Zotlabs/Module/Setup.php:206 +#: ../../Zotlabs/Module/Network.php:19 ../../Zotlabs/Module/Register.php:197 +#: ../../Zotlabs/Module/Setup.php:208 #: ../../Zotlabs/Module/Viewconnections.php:28 #: ../../Zotlabs/Module/Viewconnections.php:33 -#: ../../Zotlabs/Module/Channel.php:209 ../../Zotlabs/Module/Channel.php:364 -#: ../../Zotlabs/Module/Channel.php:403 ../../Zotlabs/Module/Group.php:15 +#: ../../Zotlabs/Module/Channel.php:209 ../../Zotlabs/Module/Channel.php:365 +#: ../../Zotlabs/Module/Channel.php:404 ../../Zotlabs/Module/Group.php:15 #: ../../Zotlabs/Module/Group.php:31 ../../Zotlabs/Module/Card_edit.php:51 #: ../../Zotlabs/Module/Editwebpage.php:68 #: ../../Zotlabs/Module/Editwebpage.php:89 @@ -822,8 +820,8 @@ msgstr "Establecer un planeta aleatorio del Imperio de la Guerra de las Galaxias #: ../../Zotlabs/Module/Chat.php:118 #: ../../Zotlabs/Module/Channel_calendar.php:232 #: ../../Zotlabs/Module/Like.php:242 ../../Zotlabs/Module/Poke.php:157 -#: ../../Zotlabs/Module/Item.php:496 ../../Zotlabs/Module/Item.php:515 -#: ../../Zotlabs/Module/Item.php:525 ../../Zotlabs/Module/Item.php:1436 +#: ../../Zotlabs/Module/Item.php:506 ../../Zotlabs/Module/Item.php:525 +#: ../../Zotlabs/Module/Item.php:535 ../../Zotlabs/Module/Item.php:1444 #: ../../Zotlabs/Module/Mitem.php:129 ../../Zotlabs/Module/Profile.php:99 #: ../../Zotlabs/Module/Profile.php:114 #: ../../Zotlabs/Module/Sharedwithme.php:19 @@ -837,7 +835,7 @@ msgstr "Establecer un planeta aleatorio del Imperio de la Guerra de las Galaxias #: ../../Zotlabs/Module/Achievements.php:34 #: ../../Zotlabs/Module/Events.php:277 ../../Zotlabs/Module/Manage.php:10 #: ../../Zotlabs/Module/Authtest.php:16 ../../Zotlabs/Module/Viewsrc.php:19 -#: ../../Zotlabs/Module/Moderate.php:15 ../../Zotlabs/Module/Display.php:428 +#: ../../Zotlabs/Module/Moderate.php:15 ../../Zotlabs/Module/Display.php:420 #: ../../Zotlabs/Module/Common.php:38 ../../Zotlabs/Module/New_channel.php:105 #: ../../Zotlabs/Module/New_channel.php:130 #: ../../Zotlabs/Module/Service_limits.php:11 @@ -856,14 +854,14 @@ msgstr "Establecer un planeta aleatorio del Imperio de la Guerra de las Galaxias #: ../../Zotlabs/Module/Page.php:34 ../../Zotlabs/Module/Page.php:133 #: ../../Zotlabs/Module/Profiles.php:200 ../../Zotlabs/Module/Profiles.php:637 #: ../../Zotlabs/Module/Articles.php:89 ../../Zotlabs/Module/Bookmarks.php:70 -#: ../../Zotlabs/Module/Invite.php:21 ../../Zotlabs/Module/Invite.php:102 +#: ../../Zotlabs/Module/Invite.php:51 ../../Zotlabs/Module/Invite.php:302 #: ../../Zotlabs/Module/Block.php:24 ../../Zotlabs/Module/Block.php:74 #: ../../Zotlabs/Module/Rate.php:115 ../../Zotlabs/Module/Menu.php:130 #: ../../Zotlabs/Module/Menu.php:141 ../../Zotlabs/Module/Defperms.php:182 #: ../../Zotlabs/Module/Thing.php:282 ../../Zotlabs/Module/Thing.php:302 #: ../../Zotlabs/Module/Thing.php:343 ../../Zotlabs/Module/Pdledit.php:35 -#: ../../Zotlabs/Module/Wiki.php:59 ../../Zotlabs/Module/Wiki.php:285 -#: ../../Zotlabs/Module/Wiki.php:428 ../../Zotlabs/Module/Suggest.php:32 +#: ../../Zotlabs/Module/Wiki.php:59 ../../Zotlabs/Module/Wiki.php:284 +#: ../../Zotlabs/Module/Wiki.php:427 ../../Zotlabs/Module/Suggest.php:32 #: ../../Zotlabs/Module/Connedit.php:397 #: ../../Zotlabs/Module/Notifications.php:11 #: ../../Zotlabs/Module/Layouts.php:71 ../../Zotlabs/Module/Layouts.php:78 @@ -874,12 +872,12 @@ msgid "Permission denied." msgstr "Acceso denegado." #: ../../addon/openid/Mod_Id.php:85 ../../include/selectors.php:60 -#: ../../include/selectors.php:77 ../../include/channel.php:1723 +#: ../../include/selectors.php:77 ../../include/channel.php:1747 msgid "Male" msgstr "Hombre" #: ../../addon/openid/Mod_Id.php:87 ../../include/selectors.php:60 -#: ../../include/selectors.php:77 ../../include/channel.php:1721 +#: ../../include/selectors.php:77 ../../include/channel.php:1745 msgid "Female" msgstr "Mujer" @@ -927,9 +925,9 @@ msgstr "Nombre completo" #: ../../addon/openid/MysqlProvider.php:56 #: ../../addon/openid/MysqlProvider.php:57 #: ../../addon/redred/Mod_Redred.php:71 ../../addon/rtof/Mod_Rtof.php:57 -#: ../../include/network.php:1764 ../../Zotlabs/Module/Cdav.php:1376 -#: ../../Zotlabs/Module/Admin/Accounts.php:171 -#: ../../Zotlabs/Module/Admin/Accounts.php:183 +#: ../../include/network.php:1768 ../../Zotlabs/Module/Cdav.php:1377 +#: ../../Zotlabs/Module/Admin/Accounts.php:316 +#: ../../Zotlabs/Module/Admin/Accounts.php:330 #: ../../Zotlabs/Module/Profiles.php:789 ../../Zotlabs/Module/Connedit.php:920 msgid "Email" msgstr "Correo electrónico" @@ -1149,7 +1147,7 @@ msgstr "Tenga en cuenta que las estadísticas de Diaspora y Friendica se refiere msgid "Channel is required." msgstr "Se requiere un canal." -#: ../../addon/redred/Mod_Redred.php:29 ../../Zotlabs/Module/Network.php:322 +#: ../../addon/redred/Mod_Redred.php:29 ../../Zotlabs/Module/Network.php:326 msgid "Invalid channel." msgstr "El canal no es válido." @@ -1207,7 +1205,7 @@ msgstr "Se han importado las fotos" #: ../../include/items.php:441 ../../Zotlabs/Module/Import_items.php:120 #: ../../Zotlabs/Module/Profperm.php:28 ../../Zotlabs/Module/Group.php:99 #: ../../Zotlabs/Module/Like.php:342 ../../Zotlabs/Module/Cloud.php:123 -#: ../../Zotlabs/Module/Share.php:72 ../../Zotlabs/Module/Subthread.php:86 +#: ../../Zotlabs/Module/Share.php:72 ../../Zotlabs/Module/Subthread.php:89 #: ../../Zotlabs/Module/Dreport.php:10 ../../Zotlabs/Module/Dreport.php:82 #: ../../Zotlabs/Web/WebServer.php:115 msgid "Permission denied" @@ -1253,10 +1251,10 @@ msgid "0 or blank to import all available" msgstr "0 o en blanco para importar todos los disponibles" #: ../../addon/redphotos/redphotohelper.php:71 -#: ../../addon/pubcrawl/as.php:2049 ../../addon/diaspora/Receiver.php:1641 -#: ../../include/text.php:2253 ../../include/conversation.php:128 +#: ../../addon/pubcrawl/as.php:2101 ../../addon/diaspora/Receiver.php:1649 +#: ../../include/text.php:2254 ../../include/conversation.php:128 #: ../../Zotlabs/Module/Like.php:439 ../../Zotlabs/Module/Tagger.php:71 -#: ../../Zotlabs/Module/Subthread.php:112 ../../Zotlabs/Lib/Activity.php:3229 +#: ../../Zotlabs/Module/Subthread.php:115 ../../Zotlabs/Lib/Activity.php:3264 msgid "photo" msgstr "foto" @@ -1388,7 +1386,7 @@ msgid "Post to GNU social" msgstr "Publicar en GNU social" #: ../../addon/statusnet/statusnet.php:593 -#: ../../Zotlabs/Module/Admin/Site.php:301 +#: ../../Zotlabs/Module/Admin/Site.php:420 msgid "Site name" msgstr "Nombre del sitio" @@ -1453,7 +1451,7 @@ msgstr "Publicar en WordPress" #: ../../addon/wppost/wppost.php:173 ../../addon/wppost/Mod_Wppost.php:98 #: ../../addon/dwpost/Mod_Dwpost.php:69 ../../addon/dwpost/dwpost.php:134 -#: ../../addon/ljpost/ljpost.php:134 ../../Zotlabs/Module/Wiki.php:384 +#: ../../addon/ljpost/ljpost.php:134 ../../Zotlabs/Module/Wiki.php:383 msgid "Source" msgstr "Fuente" @@ -1576,16 +1574,16 @@ msgstr "Modificado desde la fecha yyyy-mm-dd" msgid "Until modified date yyyy-mm-dd" msgstr "Modificado hasta la fecha yyyy-mm-dd" -#: ../../addon/hsse/hsse.php:82 ../../include/conversation.php:1331 +#: ../../addon/hsse/hsse.php:82 ../../include/conversation.php:1332 msgid "Set your location" msgstr "Establecer su ubicación" -#: ../../addon/hsse/hsse.php:83 ../../include/conversation.php:1332 +#: ../../addon/hsse/hsse.php:83 ../../include/conversation.php:1333 msgid "Clear browser location" msgstr "Eliminar los datos de localización geográfica del navegador" #: ../../addon/hsse/hsse.php:95 ../../addon/mail/Mod_Mail.php:167 -#: ../../addon/mail/Mod_Mail.php:310 ../../include/conversation.php:1344 +#: ../../addon/mail/Mod_Mail.php:310 ../../include/conversation.php:1345 #: ../../Zotlabs/Module/Article_edit.php:100 #: ../../Zotlabs/Module/Card_edit.php:101 #: ../../Zotlabs/Module/Editwebpage.php:143 ../../Zotlabs/Module/Chat.php:220 @@ -1593,129 +1591,129 @@ msgstr "Eliminar los datos de localización geográfica del navegador" msgid "Insert web link" msgstr "Insertar enlace web" -#: ../../addon/hsse/hsse.php:99 ../../include/conversation.php:1348 +#: ../../addon/hsse/hsse.php:99 ../../include/conversation.php:1349 msgid "Embed (existing) photo from your photo albums" msgstr "Insertar una foto de sus álbumes" #: ../../addon/hsse/hsse.php:134 ../../addon/mail/Mod_Mail.php:120 -#: ../../addon/mail/Mod_Mail.php:241 ../../include/conversation.php:1383 +#: ../../addon/mail/Mod_Mail.php:241 ../../include/conversation.php:1382 #: ../../Zotlabs/Module/Chat.php:218 msgid "Please enter a link URL:" msgstr "Por favor, introduzca la dirección del enlace:" -#: ../../addon/hsse/hsse.php:135 ../../include/conversation.php:1384 +#: ../../addon/hsse/hsse.php:135 ../../include/conversation.php:1383 msgid "Tag term:" msgstr "Término de la etiqueta:" -#: ../../addon/hsse/hsse.php:136 ../../include/conversation.php:1385 +#: ../../addon/hsse/hsse.php:136 ../../include/conversation.php:1384 msgid "Where are you right now?" msgstr "¿Donde está ahora?" -#: ../../addon/hsse/hsse.php:139 ../../include/conversation.php:1388 +#: ../../addon/hsse/hsse.php:139 ../../include/conversation.php:1387 #: ../../Zotlabs/Module/Profile_photo.php:509 -#: ../../Zotlabs/Module/Cover_photo.php:430 ../../Zotlabs/Module/Wiki.php:403 +#: ../../Zotlabs/Module/Cover_photo.php:430 ../../Zotlabs/Module/Wiki.php:402 msgid "Choose images to embed" msgstr "Elegir imágenes para incluir" -#: ../../addon/hsse/hsse.php:140 ../../include/conversation.php:1389 +#: ../../addon/hsse/hsse.php:140 ../../include/conversation.php:1388 #: ../../Zotlabs/Module/Profile_photo.php:510 -#: ../../Zotlabs/Module/Cover_photo.php:431 ../../Zotlabs/Module/Wiki.php:404 +#: ../../Zotlabs/Module/Cover_photo.php:431 ../../Zotlabs/Module/Wiki.php:403 msgid "Choose an album" msgstr "Elegir un álbum" -#: ../../addon/hsse/hsse.php:141 ../../include/conversation.php:1390 +#: ../../addon/hsse/hsse.php:141 ../../include/conversation.php:1389 msgid "Choose a different album..." msgstr "Elegir un álbum diferente..." -#: ../../addon/hsse/hsse.php:142 ../../include/conversation.php:1391 +#: ../../addon/hsse/hsse.php:142 ../../include/conversation.php:1390 #: ../../Zotlabs/Module/Profile_photo.php:512 -#: ../../Zotlabs/Module/Cover_photo.php:433 ../../Zotlabs/Module/Wiki.php:406 +#: ../../Zotlabs/Module/Cover_photo.php:433 ../../Zotlabs/Module/Wiki.php:405 msgid "Error getting album list" msgstr "Error al obtener la lista de álbumes" -#: ../../addon/hsse/hsse.php:143 ../../include/conversation.php:1392 +#: ../../addon/hsse/hsse.php:143 ../../include/conversation.php:1391 #: ../../Zotlabs/Module/Profile_photo.php:513 -#: ../../Zotlabs/Module/Cover_photo.php:434 ../../Zotlabs/Module/Wiki.php:407 +#: ../../Zotlabs/Module/Cover_photo.php:434 ../../Zotlabs/Module/Wiki.php:406 msgid "Error getting photo link" msgstr "Error al obtener el enlace de la foto" -#: ../../addon/hsse/hsse.php:144 ../../include/conversation.php:1393 +#: ../../addon/hsse/hsse.php:144 ../../include/conversation.php:1392 #: ../../Zotlabs/Module/Profile_photo.php:514 -#: ../../Zotlabs/Module/Cover_photo.php:435 ../../Zotlabs/Module/Wiki.php:408 +#: ../../Zotlabs/Module/Cover_photo.php:435 ../../Zotlabs/Module/Wiki.php:407 msgid "Error getting album" msgstr "Error al obtener el álbum" -#: ../../addon/hsse/hsse.php:145 ../../include/conversation.php:1394 +#: ../../addon/hsse/hsse.php:145 ../../include/conversation.php:1393 msgid "Comments enabled" msgstr "Comentarios habilitados" -#: ../../addon/hsse/hsse.php:146 ../../include/conversation.php:1395 +#: ../../addon/hsse/hsse.php:146 ../../include/conversation.php:1394 msgid "Comments disabled" msgstr "Comentarios deshabilitados" -#: ../../addon/hsse/hsse.php:153 ../../include/conversation.php:1405 +#: ../../addon/hsse/hsse.php:153 ../../include/conversation.php:1404 #: ../../Zotlabs/Module/Webpages.php:262 ../../Zotlabs/Module/Events.php:486 #: ../../Zotlabs/Module/Photos.php:1099 ../../Zotlabs/Lib/ThreadItem.php:837 msgid "Preview" msgstr "Previsualizar" -#: ../../addon/hsse/hsse.php:186 ../../include/conversation.php:1438 +#: ../../addon/hsse/hsse.php:186 ../../include/conversation.php:1437 #: ../../Zotlabs/Widget/Cdav.php:136 ../../Zotlabs/Module/Webpages.php:256 #: ../../Zotlabs/Module/Blocks.php:161 ../../Zotlabs/Module/Photos.php:1078 -#: ../../Zotlabs/Module/Wiki.php:301 ../../Zotlabs/Module/Layouts.php:194 +#: ../../Zotlabs/Module/Wiki.php:300 ../../Zotlabs/Module/Layouts.php:194 msgid "Share" msgstr "Compartir" -#: ../../addon/hsse/hsse.php:195 ../../include/conversation.php:1447 +#: ../../addon/hsse/hsse.php:195 ../../include/conversation.php:1446 msgid "Page link name" msgstr "Nombre del enlace de la página" -#: ../../addon/hsse/hsse.php:198 ../../include/conversation.php:1450 +#: ../../addon/hsse/hsse.php:198 ../../include/conversation.php:1449 msgid "Post as" msgstr "Publicar como" -#: ../../addon/hsse/hsse.php:200 ../../include/conversation.php:1452 +#: ../../addon/hsse/hsse.php:200 ../../include/conversation.php:1451 #: ../../Zotlabs/Lib/ThreadItem.php:828 msgid "Bold" msgstr "Negrita" -#: ../../addon/hsse/hsse.php:201 ../../include/conversation.php:1453 +#: ../../addon/hsse/hsse.php:201 ../../include/conversation.php:1452 #: ../../Zotlabs/Lib/ThreadItem.php:829 msgid "Italic" msgstr "Itálico " -#: ../../addon/hsse/hsse.php:202 ../../include/conversation.php:1454 +#: ../../addon/hsse/hsse.php:202 ../../include/conversation.php:1453 #: ../../Zotlabs/Lib/ThreadItem.php:830 msgid "Underline" msgstr "Subrayar" -#: ../../addon/hsse/hsse.php:203 ../../include/conversation.php:1455 +#: ../../addon/hsse/hsse.php:203 ../../include/conversation.php:1454 #: ../../Zotlabs/Lib/ThreadItem.php:831 msgid "Quote" msgstr "Citar" -#: ../../addon/hsse/hsse.php:204 ../../include/conversation.php:1456 +#: ../../addon/hsse/hsse.php:204 ../../include/conversation.php:1455 #: ../../Zotlabs/Lib/ThreadItem.php:832 msgid "Code" msgstr "Código" -#: ../../addon/hsse/hsse.php:205 ../../include/conversation.php:1457 +#: ../../addon/hsse/hsse.php:205 ../../include/conversation.php:1456 #: ../../Zotlabs/Lib/ThreadItem.php:834 msgid "Attach/Upload file" msgstr "Adjuntar/cargar fichero" -#: ../../addon/hsse/hsse.php:208 ../../include/conversation.php:1460 -#: ../../Zotlabs/Module/Wiki.php:400 +#: ../../addon/hsse/hsse.php:208 ../../include/conversation.php:1459 +#: ../../Zotlabs/Module/Wiki.php:399 msgid "Embed an image from your albums" msgstr "Incluir una imagen de sus álbumes" #: ../../addon/hsse/hsse.php:209 ../../addon/hsse/hsse.php:258 -#: ../../include/conversation.php:1461 ../../include/conversation.php:1516 +#: ../../include/conversation.php:1460 ../../include/conversation.php:1515 #: ../../Zotlabs/Module/Article_edit.php:131 #: ../../Zotlabs/Module/Fbrowser.php:66 ../../Zotlabs/Module/Fbrowser.php:88 #: ../../Zotlabs/Module/Card_edit.php:132 ../../Zotlabs/Module/Oauth.php:112 #: ../../Zotlabs/Module/Oauth.php:138 ../../Zotlabs/Module/Editwebpage.php:169 -#: ../../Zotlabs/Module/Cdav.php:1058 ../../Zotlabs/Module/Cdav.php:1390 +#: ../../Zotlabs/Module/Cdav.php:1059 ../../Zotlabs/Module/Cdav.php:1391 #: ../../Zotlabs/Module/Tagrm.php:15 ../../Zotlabs/Module/Tagrm.php:138 #: ../../Zotlabs/Module/Editpost.php:111 #: ../../Zotlabs/Module/Admin/Addons.php:427 @@ -1724,32 +1722,32 @@ msgstr "Incluir una imagen de sus álbumes" #: ../../Zotlabs/Module/Editlayout.php:140 #: ../../Zotlabs/Module/Cover_photo.php:428 #: ../../Zotlabs/Module/Profiles.php:803 ../../Zotlabs/Module/Oauth2.php:117 -#: ../../Zotlabs/Module/Oauth2.php:145 ../../Zotlabs/Module/Wiki.php:368 -#: ../../Zotlabs/Module/Wiki.php:401 ../../Zotlabs/Module/Connedit.php:934 +#: ../../Zotlabs/Module/Oauth2.php:145 ../../Zotlabs/Module/Wiki.php:367 +#: ../../Zotlabs/Module/Wiki.php:400 ../../Zotlabs/Module/Connedit.php:934 #: ../../Zotlabs/Storage/Browser.php:383 msgid "Cancel" msgstr "Cancelar" #: ../../addon/hsse/hsse.php:210 ../../addon/hsse/hsse.php:257 -#: ../../include/conversation.php:1462 ../../include/conversation.php:1515 +#: ../../include/conversation.php:1461 ../../include/conversation.php:1514 #: ../../Zotlabs/Module/Profile_photo.php:508 -#: ../../Zotlabs/Module/Cover_photo.php:429 ../../Zotlabs/Module/Wiki.php:402 +#: ../../Zotlabs/Module/Cover_photo.php:429 ../../Zotlabs/Module/Wiki.php:401 msgid "OK" msgstr "OK" -#: ../../addon/hsse/hsse.php:212 ../../include/conversation.php:1464 +#: ../../addon/hsse/hsse.php:212 ../../include/conversation.php:1463 msgid "Toggle voting" msgstr "Cambiar votación" -#: ../../addon/hsse/hsse.php:215 ../../include/conversation.php:1471 +#: ../../addon/hsse/hsse.php:215 ../../include/conversation.php:1470 msgid "Disable comments" msgstr "Dehabilitar los comentarios" -#: ../../addon/hsse/hsse.php:216 ../../include/conversation.php:1472 +#: ../../addon/hsse/hsse.php:216 ../../include/conversation.php:1471 msgid "Toggle comments" msgstr "Activar o desactivar los comentarios" -#: ../../addon/hsse/hsse.php:221 ../../include/conversation.php:1478 +#: ../../addon/hsse/hsse.php:221 ../../include/conversation.php:1477 #: ../../Zotlabs/Module/Article_edit.php:117 #: ../../Zotlabs/Module/Card_edit.php:118 #: ../../Zotlabs/Module/Editblock.php:129 ../../Zotlabs/Module/Photos.php:674 @@ -1757,30 +1755,30 @@ msgstr "Activar o desactivar los comentarios" msgid "Title (optional)" msgstr "Título (opcional)" -#: ../../addon/hsse/hsse.php:224 ../../include/conversation.php:1482 +#: ../../addon/hsse/hsse.php:224 ../../include/conversation.php:1481 msgid "Categories (optional, comma-separated list)" msgstr "Temas (opcional, lista separada por comas)" -#: ../../addon/hsse/hsse.php:225 ../../include/conversation.php:1483 +#: ../../addon/hsse/hsse.php:225 ../../include/conversation.php:1482 #: ../../Zotlabs/Module/Events.php:487 msgid "Permission settings" msgstr "Configuración de permisos" -#: ../../addon/hsse/hsse.php:247 ../../include/conversation.php:1505 +#: ../../addon/hsse/hsse.php:247 ../../include/conversation.php:1504 msgid "Other networks and post services" msgstr "Otras redes y servicios de publicación" #: ../../addon/hsse/hsse.php:250 ../../addon/mail/Mod_Mail.php:171 -#: ../../addon/mail/Mod_Mail.php:314 ../../include/conversation.php:1508 +#: ../../addon/mail/Mod_Mail.php:314 ../../include/conversation.php:1507 msgid "Set expiration date" msgstr "Configurar fecha de caducidad" -#: ../../addon/hsse/hsse.php:253 ../../include/conversation.php:1511 +#: ../../addon/hsse/hsse.php:253 ../../include/conversation.php:1510 msgid "Set publish date" msgstr "Establecer la fecha de publicación" #: ../../addon/hsse/hsse.php:255 ../../addon/mail/Mod_Mail.php:173 -#: ../../addon/mail/Mod_Mail.php:316 ../../include/conversation.php:1513 +#: ../../addon/mail/Mod_Mail.php:316 ../../include/conversation.php:1512 #: ../../Zotlabs/Module/Chat.php:219 ../../Zotlabs/Lib/ThreadItem.php:841 msgid "Encrypt text" msgstr "Cifrar texto" @@ -1896,37 +1894,37 @@ msgstr "Generador QR" msgid "Enter some text" msgstr "Escribir algún texto" -#: ../../addon/pubcrawl/as.php:1183 ../../include/cdav.php:158 +#: ../../addon/pubcrawl/as.php:1189 ../../include/cdav.php:158 #: ../../include/cdav.php:159 ../../include/cdav.php:167 #: ../../include/conversation.php:1214 ../../Zotlabs/Widget/Album.php:84 -#: ../../Zotlabs/Widget/Pinned.php:270 ../../Zotlabs/Widget/Portfolio.php:95 +#: ../../Zotlabs/Widget/Pinned.php:268 ../../Zotlabs/Widget/Portfolio.php:95 #: ../../Zotlabs/Module/Embedphotos.php:177 #: ../../Zotlabs/Module/Photos.php:793 ../../Zotlabs/Module/Photos.php:1255 -#: ../../Zotlabs/Lib/Activity.php:1529 ../../Zotlabs/Lib/Apps.php:1112 +#: ../../Zotlabs/Lib/Activity.php:1552 ../../Zotlabs/Lib/Apps.php:1112 #: ../../Zotlabs/Lib/Apps.php:1196 msgid "Unknown" msgstr "Desconocido" -#: ../../addon/pubcrawl/as.php:1475 ../../addon/pubcrawl/as.php:1887 -#: ../../addon/pubcrawl/as.php:2095 ../../include/network.php:1763 -#: ../../Zotlabs/Lib/Activity.php:3079 ../../Zotlabs/Lib/Activity.php:3271 +#: ../../addon/pubcrawl/as.php:1490 ../../addon/pubcrawl/as.php:1939 +#: ../../addon/pubcrawl/as.php:2147 ../../include/network.php:1767 +#: ../../Zotlabs/Lib/Activity.php:3114 ../../Zotlabs/Lib/Activity.php:3306 msgid "ActivityPub" msgstr "ActivityPub" -#: ../../addon/pubcrawl/as.php:2049 ../../addon/diaspora/Receiver.php:1641 -#: ../../Zotlabs/Module/Like.php:439 ../../Zotlabs/Module/Subthread.php:112 +#: ../../addon/pubcrawl/as.php:2101 ../../addon/diaspora/Receiver.php:1649 +#: ../../Zotlabs/Module/Like.php:439 ../../Zotlabs/Module/Subthread.php:115 msgid "status" msgstr "el mensaje de estado " -#: ../../addon/pubcrawl/as.php:2086 ../../addon/diaspora/Receiver.php:1587 +#: ../../addon/pubcrawl/as.php:2138 ../../addon/diaspora/Receiver.php:1595 #: ../../include/conversation.php:174 ../../Zotlabs/Module/Like.php:471 -#: ../../Zotlabs/Lib/Activity.php:3262 +#: ../../Zotlabs/Lib/Activity.php:3297 #, php-format msgid "%1$s likes %2$s's %3$s" msgstr "A %1$s le gusta %3$s de %2$s" -#: ../../addon/pubcrawl/as.php:2088 ../../include/conversation.php:177 -#: ../../Zotlabs/Module/Like.php:473 ../../Zotlabs/Lib/Activity.php:3264 +#: ../../addon/pubcrawl/as.php:2140 ../../include/conversation.php:177 +#: ../../Zotlabs/Module/Like.php:473 ../../Zotlabs/Lib/Activity.php:3299 #, php-format msgid "%1$s doesn't like %2$s's %3$s" msgstr "A %1$s no le gusta %3$s de %2$s" @@ -2219,12 +2217,12 @@ msgstr "Reunámonos aquí" #: ../../Zotlabs/Widget/Wiki_page_history.php:22 #: ../../Zotlabs/Module/Group.php:155 ../../Zotlabs/Module/Oauth.php:113 #: ../../Zotlabs/Module/Oauth.php:139 ../../Zotlabs/Module/Chat.php:257 -#: ../../Zotlabs/Module/Cdav.php:1372 +#: ../../Zotlabs/Module/Cdav.php:1373 #: ../../Zotlabs/Module/Sharedwithme.php:106 #: ../../Zotlabs/Module/Admin/Channels.php:159 #: ../../Zotlabs/Module/Oauth2.php:118 ../../Zotlabs/Module/Oauth2.php:146 -#: ../../Zotlabs/Module/Wiki.php:218 ../../Zotlabs/Module/Connedit.php:916 -#: ../../Zotlabs/Lib/NativeWikiPage.php:563 +#: ../../Zotlabs/Module/Wiki.php:217 ../../Zotlabs/Module/Connedit.php:916 +#: ../../Zotlabs/Lib/NativeWikiPage.php:576 #: ../../Zotlabs/Storage/Browser.php:377 msgid "Name" msgstr "Nombre" @@ -2232,7 +2230,7 @@ msgstr "Nombre" #: ../../addon/rendezvous/rendezvous.php:173 #: ../../addon/cart/submodules/hzservices.php:655 #: ../../addon/cart/submodules/manualcat.php:260 -#: ../../Zotlabs/Module/Cdav.php:1014 ../../Zotlabs/Module/Events.php:481 +#: ../../Zotlabs/Module/Cdav.php:1015 ../../Zotlabs/Module/Events.php:481 #: ../../Zotlabs/Module/Appman.php:145 ../../Zotlabs/Module/Rbmark.php:101 msgid "Description" msgstr "Descripción" @@ -2313,7 +2311,7 @@ msgid "You have no rendezvous. Press the button above to create a rendezvous!" msgstr "No tiene ninguna cita. ¡Presione el botón de arriba para crear una!" #: ../../addon/rendezvous/rendezvous.php:401 -#: ../../Zotlabs/Module/Setup.php:718 +#: ../../Zotlabs/Module/Setup.php:720 msgid "Errors encountered creating database tables." msgstr "Se han encontrado errores al crear las tablas de la base de datos." @@ -2373,10 +2371,11 @@ msgid "To:" msgstr "Para:" #: ../../addon/mail/Mod_Mail.php:161 ../../addon/mail/Mod_Mail.php:303 +#: ../../Zotlabs/Module/Invite.php:542 msgid "Subject:" msgstr "Asunto:" -#: ../../addon/mail/Mod_Mail.php:164 ../../Zotlabs/Module/Invite.php:157 +#: ../../addon/mail/Mod_Mail.php:164 ../../Zotlabs/Module/Invite.php:539 msgid "Your message:" msgstr "Su mensaje:" @@ -2848,7 +2847,8 @@ msgstr "Etiqueta" #: ../../addon/cart/submodules/orderoptions.php:358 #: ../../addon/cart/submodules/orderoptions.php:434 #: ../../addon/cart/submodules/orderoptions.php:458 -#: ../../include/datetime.php:211 ../../Zotlabs/Module/Events.php:468 +#: ../../include/js_strings.php:123 ../../include/datetime.php:211 +#: ../../Zotlabs/Module/Register.php:522 ../../Zotlabs/Module/Events.php:468 #: ../../Zotlabs/Module/Events.php:473 ../../Zotlabs/Module/Appman.php:143 #: ../../Zotlabs/Module/Appman.php:144 ../../Zotlabs/Module/Profiles.php:747 #: ../../Zotlabs/Module/Profiles.php:751 @@ -3086,7 +3086,7 @@ msgid "Unable to create a unique channel address. Import failed." msgstr "No se ha podido crear una dirección de canal única. Ha fallado la importación." #: ../../addon/diaspora/import_diaspora.php:142 -#: ../../Zotlabs/Module/Import.php:594 +#: ../../Zotlabs/Module/Import.php:595 msgid "Import completed." msgstr "Importación completada." @@ -3109,6 +3109,12 @@ msgstr "App Protocolo Diaspora" msgid "Allow any Diaspora member to comment or like your public posts" msgstr "Permitir que cualquier miembro de Diaspora comente o ponga un like en sus entradas públicas" +#: ../../addon/diaspora/Mod_Diaspora.php:77 +msgid "" +"If this setting is disabled only your contacts will be able to comment or " +"like your public posts" +msgstr "Si esta configuración está desactivada, sólo sus contactos podrán comentar o dar a \"me gusta\" en sus publicaciones públicas" + #: ../../addon/diaspora/Mod_Diaspora.php:81 msgid "Prevent your hashtags from being redirected to other sites" msgstr "Impedir que sus \"hashtags\" sean redirigidos a otros sitios " @@ -3126,22 +3132,22 @@ msgstr "\"Hashtags\" seguidos (separados por comas, sin incluir #)" msgid "Diaspora Protocol" msgstr "Protocolo Diaspora" -#: ../../addon/diaspora/Receiver.php:1591 +#: ../../addon/diaspora/Receiver.php:1599 #, php-format msgid "%1$s dislikes %2$s's %3$s" msgstr "a %1$s no le gusta el %3$s de %2$s" -#: ../../addon/diaspora/Receiver.php:2218 ../../Zotlabs/Module/Like.php:481 +#: ../../addon/diaspora/Receiver.php:2226 ../../Zotlabs/Module/Like.php:481 #, php-format msgid "%1$s is attending %2$s's %3$s" msgstr "%3$s de %2$s: %1$s participa" -#: ../../addon/diaspora/Receiver.php:2220 ../../Zotlabs/Module/Like.php:483 +#: ../../addon/diaspora/Receiver.php:2228 ../../Zotlabs/Module/Like.php:483 #, php-format msgid "%1$s is not attending %2$s's %3$s" msgstr "%3$s de %2$s: %1$s no participa" -#: ../../addon/diaspora/Receiver.php:2222 ../../Zotlabs/Module/Like.php:485 +#: ../../addon/diaspora/Receiver.php:2230 ../../Zotlabs/Module/Like.php:485 #, php-format msgid "%1$s may attend %2$s's %3$s" msgstr "%3$s de %2$s: %1$s quizá participe" @@ -3230,7 +3236,7 @@ msgid "Web link." msgstr "Enlace Web." #: ../../addon/workflow/workflow.php:2617 -#: ../../addon/workflow/workflow.php:2678 ../../Zotlabs/Module/Cdav.php:1374 +#: ../../addon/workflow/workflow.php:2678 ../../Zotlabs/Module/Cdav.php:1375 #: ../../Zotlabs/Module/Connedit.php:918 msgid "Title" msgstr "Título" @@ -3363,7 +3369,9 @@ msgctxt "opensearch" msgid "$Projectname" msgstr "$Projectname" -#: ../../addon/opensearch/opensearch.php:42 ../../Zotlabs/Module/Home.php:87 +#: ../../addon/opensearch/opensearch.php:42 +#: ../../Zotlabs/Module/Invite.php:225 ../../Zotlabs/Module/Invite.php:494 +#: ../../Zotlabs/Module/Invite.php:508 ../../Zotlabs/Module/Home.php:87 #: ../../Zotlabs/Module/Home.php:95 ../../Zotlabs/Lib/Enotify.php:66 msgid "$Projectname" msgstr "$Projectname" @@ -3436,7 +3444,7 @@ msgid "New registration" msgstr "Nuevo registro" #: ../../addon/notifyadmin/notifyadmin.php:40 -#: ../../Zotlabs/Module/Invite.php:90 +#: ../../Zotlabs/Module/Invite.php:252 #, php-format msgid "%s : Message delivery failed." msgstr "%s : Falló el envío del mensaje." @@ -3451,7 +3459,7 @@ msgid "Not allowed." msgstr "No permitido/a." #: ../../addon/flashcards/Mod_Flashcards.php:254 -#: ../../include/acl_selectors.php:153 ../../Zotlabs/Module/Chat.php:241 +#: ../../include/acl_selectors.php:154 ../../Zotlabs/Module/Chat.php:241 #: ../../Zotlabs/Module/Filestorage.php:195 #: ../../Zotlabs/Module/Photos.php:678 ../../Zotlabs/Module/Photos.php:1047 #: ../../Zotlabs/Module/Thing.php:321 ../../Zotlabs/Module/Thing.php:374 @@ -3465,12 +3473,12 @@ msgid "Set/edit permissions" msgstr "Establecer/editar los permisos" #: ../../addon/flashcards/Mod_Flashcards.php:284 -#: ../../addon/flashcards/Mod_Flashcards.php:285 ../../include/items.php:3924 +#: ../../addon/flashcards/Mod_Flashcards.php:285 ../../include/items.php:4010 #: ../../Zotlabs/Module/Filestorage.php:29 #: ../../Zotlabs/Module/Admin/Themes.php:72 #: ../../Zotlabs/Module/Admin/Addons.php:260 #: ../../Zotlabs/Module/Viewsrc.php:25 ../../Zotlabs/Module/Display.php:42 -#: ../../Zotlabs/Module/Display.php:432 ../../Zotlabs/Module/Admin.php:62 +#: ../../Zotlabs/Module/Display.php:424 ../../Zotlabs/Module/Admin.php:62 #: ../../Zotlabs/Module/Thing.php:96 msgid "Item not found." msgstr "Elemento no encontrado." @@ -3933,10 +3941,10 @@ msgstr "Publicar en Livejournal" msgid "Posted by" msgstr "Publicado por " -#: ../../addon/mdpost/mdpost.php:41 ../../include/text.php:2117 +#: ../../addon/mdpost/mdpost.php:41 ../../include/text.php:2118 #: ../../Zotlabs/Widget/Wiki_pages.php:38 -#: ../../Zotlabs/Widget/Wiki_pages.php:95 ../../Zotlabs/Module/Wiki.php:217 -#: ../../Zotlabs/Module/Wiki.php:371 +#: ../../Zotlabs/Widget/Wiki_pages.php:95 ../../Zotlabs/Module/Wiki.php:216 +#: ../../Zotlabs/Module/Wiki.php:370 msgid "Markdown" msgstr "Markdown" @@ -4057,11 +4065,11 @@ msgstr "Ajustes de XMPP" msgid "Invalid data packet" msgstr "Paquete de datos no válido" -#: ../../include/zot.php:805 ../../Zotlabs/Lib/Libzot.php:656 +#: ../../include/zot.php:805 ../../Zotlabs/Lib/Libzot.php:655 msgid "Unable to verify channel signature" msgstr "No ha sido posible de verificar la firma del canal" -#: ../../include/zot.php:2663 ../../Zotlabs/Lib/Libsync.php:737 +#: ../../include/zot.php:2663 ../../Zotlabs/Lib/Libsync.php:740 #, php-format msgid "Unable to verify site signature for %s" msgstr "No ha sido posible de verificar la firma del sitio para %s" @@ -4094,278 +4102,278 @@ msgstr "más antiguas" msgid "newer" msgstr "más recientes" -#: ../../include/text.php:1025 +#: ../../include/text.php:1018 msgid "No connections" msgstr "Sin conexiones" -#: ../../include/text.php:1037 ../../include/features.php:133 +#: ../../include/text.php:1030 ../../include/features.php:133 #: ../../Zotlabs/Module/Connections.php:375 ../../Zotlabs/Lib/Apps.php:333 msgid "Connections" msgstr "Conexiones" -#: ../../include/text.php:1045 ../../Zotlabs/Module/Viewconnections.php:80 +#: ../../include/text.php:1038 ../../Zotlabs/Module/Viewconnections.php:80 #: ../../Zotlabs/Module/Connections.php:289 msgid "Accepts" msgstr "Se acepta" -#: ../../include/text.php:1048 ../../Zotlabs/Module/Viewconnections.php:83 +#: ../../include/text.php:1041 ../../Zotlabs/Module/Viewconnections.php:83 #: ../../Zotlabs/Module/Connections.php:292 msgid "Comments" msgstr "Comentarios" -#: ../../include/text.php:1053 ../../Zotlabs/Module/Viewconnections.php:88 +#: ../../include/text.php:1046 ../../Zotlabs/Module/Viewconnections.php:88 #: ../../Zotlabs/Module/Connections.php:297 msgid "Stream items" msgstr "Elementos del stream" -#: ../../include/text.php:1058 ../../Zotlabs/Module/Viewconnections.php:93 +#: ../../include/text.php:1051 ../../Zotlabs/Module/Viewconnections.php:93 #: ../../Zotlabs/Module/Connections.php:302 msgid "Wall posts" msgstr "Entradas del Muro" -#: ../../include/text.php:1062 ../../Zotlabs/Module/Viewconnections.php:97 +#: ../../include/text.php:1055 ../../Zotlabs/Module/Viewconnections.php:97 #: ../../Zotlabs/Module/Connections.php:306 msgid "Nothing" msgstr "Nada" -#: ../../include/text.php:1077 +#: ../../include/text.php:1070 #, php-format msgid "View all %s connections" msgstr "Ver todas las %s conexiones" -#: ../../include/text.php:1140 +#: ../../include/text.php:1133 #, php-format msgid "Network: %s" msgstr "Red %s" -#: ../../include/text.php:1151 ../../include/text.php:1163 -#: ../../include/nav.php:194 ../../include/acl_selectors.php:148 +#: ../../include/text.php:1144 ../../include/text.php:1156 +#: ../../include/nav.php:194 ../../include/acl_selectors.php:149 #: ../../Zotlabs/Widget/Sitesearch.php:31 -#: ../../Zotlabs/Widget/Activity_filter.php:193 -#: ../../Zotlabs/Module/Search.php:46 ../../Zotlabs/Module/Connections.php:379 +#: ../../Zotlabs/Widget/Activity_filter.php:203 +#: ../../Zotlabs/Module/Search.php:45 ../../Zotlabs/Module/Connections.php:379 #: ../../Zotlabs/Lib/Apps.php:353 msgid "Search" msgstr "Buscar" -#: ../../include/text.php:1243 ../../include/text.php:1247 +#: ../../include/text.php:1236 ../../include/text.php:1240 msgid "poke" msgstr "un toque" -#: ../../include/text.php:1243 ../../include/text.php:1247 +#: ../../include/text.php:1236 ../../include/text.php:1240 #: ../../include/conversation.php:267 msgid "poked" msgstr "ha dado un toque a" -#: ../../include/text.php:1248 +#: ../../include/text.php:1241 msgid "ping" msgstr "un \"ping\"" -#: ../../include/text.php:1248 +#: ../../include/text.php:1241 msgid "pinged" msgstr "ha enviado un \"ping\" a" -#: ../../include/text.php:1249 +#: ../../include/text.php:1242 msgid "prod" msgstr "una incitación " -#: ../../include/text.php:1249 +#: ../../include/text.php:1242 msgid "prodded" msgstr "ha incitado a " -#: ../../include/text.php:1250 +#: ../../include/text.php:1243 msgid "slap" msgstr "una bofetada " -#: ../../include/text.php:1250 +#: ../../include/text.php:1243 msgid "slapped" msgstr "ha abofeteado a " -#: ../../include/text.php:1251 +#: ../../include/text.php:1244 msgid "finger" msgstr "un \"finger\" " -#: ../../include/text.php:1251 +#: ../../include/text.php:1244 msgid "fingered" msgstr "envió un \"finger\" a" -#: ../../include/text.php:1252 +#: ../../include/text.php:1245 msgid "rebuff" msgstr "un reproche" -#: ../../include/text.php:1252 +#: ../../include/text.php:1245 msgid "rebuffed" msgstr "ha hecho un reproche a " -#: ../../include/text.php:1275 +#: ../../include/text.php:1268 msgid "happy" msgstr "feliz " -#: ../../include/text.php:1276 +#: ../../include/text.php:1269 msgid "sad" msgstr "triste " -#: ../../include/text.php:1277 +#: ../../include/text.php:1270 msgid "mellow" msgstr "tranquilo/a" -#: ../../include/text.php:1278 +#: ../../include/text.php:1271 msgid "tired" msgstr "cansado/a " -#: ../../include/text.php:1279 +#: ../../include/text.php:1272 msgid "perky" msgstr "vivaz" -#: ../../include/text.php:1280 +#: ../../include/text.php:1273 msgid "angry" msgstr "enfadado/a" -#: ../../include/text.php:1281 +#: ../../include/text.php:1274 msgid "stupefied" msgstr "asombrado/a" -#: ../../include/text.php:1282 +#: ../../include/text.php:1275 msgid "puzzled" msgstr "perplejo/a" -#: ../../include/text.php:1283 +#: ../../include/text.php:1276 msgid "interested" msgstr "interesado/a" -#: ../../include/text.php:1284 +#: ../../include/text.php:1277 msgid "bitter" msgstr "amargado/a" -#: ../../include/text.php:1285 +#: ../../include/text.php:1278 msgid "cheerful" msgstr "alegre" -#: ../../include/text.php:1286 +#: ../../include/text.php:1279 msgid "alive" msgstr "animado/a" -#: ../../include/text.php:1287 +#: ../../include/text.php:1280 msgid "annoyed" msgstr "molesto/a" -#: ../../include/text.php:1288 +#: ../../include/text.php:1281 msgid "anxious" msgstr "ansioso/a" -#: ../../include/text.php:1289 +#: ../../include/text.php:1282 msgid "cranky" msgstr "de mal humor" -#: ../../include/text.php:1290 +#: ../../include/text.php:1283 msgid "disturbed" msgstr "perturbado/a" -#: ../../include/text.php:1291 +#: ../../include/text.php:1284 msgid "frustrated" msgstr "frustrado/a" -#: ../../include/text.php:1292 +#: ../../include/text.php:1285 msgid "depressed" msgstr "deprimido/a" -#: ../../include/text.php:1293 +#: ../../include/text.php:1286 msgid "motivated" msgstr "motivado/a" -#: ../../include/text.php:1294 +#: ../../include/text.php:1287 msgid "relaxed" msgstr "relajado/a" -#: ../../include/text.php:1295 +#: ../../include/text.php:1288 msgid "surprised" msgstr "sorprendido/a" -#: ../../include/text.php:1483 ../../include/js_strings.php:99 +#: ../../include/text.php:1476 ../../include/js_strings.php:99 msgid "Monday" msgstr "lunes" -#: ../../include/text.php:1483 ../../include/js_strings.php:100 +#: ../../include/text.php:1476 ../../include/js_strings.php:100 msgid "Tuesday" msgstr "martes" -#: ../../include/text.php:1483 ../../include/js_strings.php:101 +#: ../../include/text.php:1476 ../../include/js_strings.php:101 msgid "Wednesday" msgstr "miércoles" -#: ../../include/text.php:1483 ../../include/js_strings.php:102 +#: ../../include/text.php:1476 ../../include/js_strings.php:102 msgid "Thursday" msgstr "jueves" -#: ../../include/text.php:1483 ../../include/js_strings.php:103 +#: ../../include/text.php:1476 ../../include/js_strings.php:103 msgid "Friday" msgstr "viernes" -#: ../../include/text.php:1483 ../../include/js_strings.php:104 +#: ../../include/text.php:1476 ../../include/js_strings.php:104 msgid "Saturday" msgstr "sábado" -#: ../../include/text.php:1483 ../../include/js_strings.php:98 +#: ../../include/text.php:1476 ../../include/js_strings.php:98 msgid "Sunday" msgstr "domingo" -#: ../../include/text.php:1487 ../../include/js_strings.php:74 +#: ../../include/text.php:1480 ../../include/js_strings.php:74 msgid "January" msgstr "enero" -#: ../../include/text.php:1487 ../../include/js_strings.php:75 +#: ../../include/text.php:1480 ../../include/js_strings.php:75 msgid "February" msgstr "febrero" -#: ../../include/text.php:1487 ../../include/js_strings.php:76 +#: ../../include/text.php:1480 ../../include/js_strings.php:76 msgid "March" msgstr "marzo" -#: ../../include/text.php:1487 ../../include/js_strings.php:77 +#: ../../include/text.php:1480 ../../include/js_strings.php:77 msgid "April" msgstr "abril" -#: ../../include/text.php:1487 +#: ../../include/text.php:1480 msgid "May" msgstr "mayo" -#: ../../include/text.php:1487 ../../include/js_strings.php:79 +#: ../../include/text.php:1480 ../../include/js_strings.php:79 msgid "June" msgstr "junio" -#: ../../include/text.php:1487 ../../include/js_strings.php:80 +#: ../../include/text.php:1480 ../../include/js_strings.php:80 msgid "July" msgstr "julio" -#: ../../include/text.php:1487 ../../include/js_strings.php:81 +#: ../../include/text.php:1480 ../../include/js_strings.php:81 msgid "August" msgstr "agosto" -#: ../../include/text.php:1487 ../../include/js_strings.php:82 +#: ../../include/text.php:1480 ../../include/js_strings.php:82 msgid "September" msgstr "septiembre" -#: ../../include/text.php:1487 ../../include/js_strings.php:83 +#: ../../include/text.php:1480 ../../include/js_strings.php:83 msgid "October" msgstr "octubre" -#: ../../include/text.php:1487 ../../include/js_strings.php:84 +#: ../../include/text.php:1480 ../../include/js_strings.php:84 msgid "November" msgstr "noviembre" -#: ../../include/text.php:1487 ../../include/js_strings.php:85 +#: ../../include/text.php:1480 ../../include/js_strings.php:85 msgid "December" msgstr "diciembre" -#: ../../include/text.php:1561 +#: ../../include/text.php:1556 msgid "Unknown Attachment" msgstr "Adjunto no reconocido" -#: ../../include/text.php:1563 ../../Zotlabs/Module/Sharedwithme.php:108 +#: ../../include/text.php:1558 ../../Zotlabs/Module/Sharedwithme.php:108 #: ../../Zotlabs/Storage/Browser.php:379 msgid "Size" msgstr "Tamaño" -#: ../../include/text.php:1563 ../../include/feedutils.php:873 +#: ../../include/text.php:1558 ../../include/feedutils.php:872 msgid "unknown" msgstr "desconocido" @@ -4373,71 +4381,71 @@ msgstr "desconocido" msgid "remove category" msgstr "eliminar el tema" -#: ../../include/text.php:1675 +#: ../../include/text.php:1676 msgid "remove from file" msgstr "eliminar del fichero" -#: ../../include/text.php:1844 ../../include/message.php:13 +#: ../../include/text.php:1845 ../../include/message.php:13 msgid "Download binary/encrypted content" msgstr "Descargar contenido binario o cifrado" -#: ../../include/text.php:1915 +#: ../../include/text.php:1916 msgid "Poll has ended." msgstr "La encuesta ha terminado" -#: ../../include/text.php:1918 +#: ../../include/text.php:1919 #, php-format msgid "Poll ends: %s" msgstr "Finales de la encuesta: %s" -#: ../../include/text.php:1923 ../../Zotlabs/Lib/ThreadItem.php:446 +#: ../../include/text.php:1924 ../../Zotlabs/Lib/ThreadItem.php:446 msgid "Vote" msgstr "Votar" -#: ../../include/text.php:2075 ../../Zotlabs/Module/Events.php:669 +#: ../../include/text.php:2076 ../../Zotlabs/Module/Events.php:669 msgid "Link to Source" msgstr "Enlazar con la entrada en su ubicación original" -#: ../../include/text.php:2097 ../../include/language.php:424 +#: ../../include/text.php:2098 ../../include/language.php:428 msgid "default" msgstr "por defecto" -#: ../../include/text.php:2105 +#: ../../include/text.php:2106 msgid "Page layout" msgstr "Plantilla de la página" -#: ../../include/text.php:2105 +#: ../../include/text.php:2106 msgid "You can create your own with the layouts tool" msgstr "Puede crear su propia disposición gráfica con la herramienta de plantillas" -#: ../../include/text.php:2115 ../../Zotlabs/Widget/Wiki_pages.php:38 -#: ../../Zotlabs/Widget/Wiki_pages.php:95 ../../Zotlabs/Module/Wiki.php:217 -#: ../../Zotlabs/Module/Wiki.php:371 +#: ../../include/text.php:2116 ../../Zotlabs/Widget/Wiki_pages.php:38 +#: ../../Zotlabs/Widget/Wiki_pages.php:95 ../../Zotlabs/Module/Wiki.php:216 +#: ../../Zotlabs/Module/Wiki.php:370 msgid "BBcode" msgstr "BBcode" -#: ../../include/text.php:2116 +#: ../../include/text.php:2117 msgid "HTML" msgstr "HTML" -#: ../../include/text.php:2118 ../../Zotlabs/Widget/Wiki_pages.php:38 -#: ../../Zotlabs/Widget/Wiki_pages.php:95 ../../Zotlabs/Module/Wiki.php:217 +#: ../../include/text.php:2119 ../../Zotlabs/Widget/Wiki_pages.php:38 +#: ../../Zotlabs/Widget/Wiki_pages.php:95 ../../Zotlabs/Module/Wiki.php:216 msgid "Text" msgstr "Texto" -#: ../../include/text.php:2119 +#: ../../include/text.php:2120 msgid "Comanche Layout" msgstr "Plantilla de Comanche" -#: ../../include/text.php:2124 +#: ../../include/text.php:2125 msgid "PHP" msgstr "PHP" -#: ../../include/text.php:2133 +#: ../../include/text.php:2134 msgid "Page content type" msgstr "Tipo de contenido de la página" -#: ../../include/text.php:2256 ../../include/event.php:1259 +#: ../../include/text.php:2257 ../../include/event.php:1259 #: ../../include/conversation.php:132 #: ../../Zotlabs/Module/Channel_calendar.php:221 #: ../../Zotlabs/Module/Like.php:441 ../../Zotlabs/Module/Tagger.php:75 @@ -4445,110 +4453,110 @@ msgstr "Tipo de contenido de la página" msgid "event" msgstr "el/su evento" -#: ../../include/text.php:2259 ../../include/conversation.php:158 -#: ../../include/bbcode.php:543 ../../include/markdown.php:204 -#: ../../Zotlabs/Module/Tagger.php:79 ../../Zotlabs/Lib/Activity.php:3229 +#: ../../include/text.php:2260 ../../include/conversation.php:158 +#: ../../include/bbcode.php:555 ../../include/markdown.php:204 +#: ../../Zotlabs/Module/Tagger.php:79 ../../Zotlabs/Lib/Activity.php:3264 msgid "post" msgstr "la entrada" -#: ../../include/text.php:2261 ../../include/conversation.php:160 +#: ../../include/text.php:2262 ../../include/conversation.php:160 #: ../../Zotlabs/Module/Tagger.php:81 msgid "comment" msgstr "el comentario" -#: ../../include/text.php:2266 +#: ../../include/text.php:2267 msgid "activity" msgstr "la/su actividad" -#: ../../include/text.php:2269 +#: ../../include/text.php:2270 msgid "poll" msgstr "encuesta" -#: ../../include/text.php:2370 +#: ../../include/text.php:2383 msgid "a-z, 0-9, -, and _ only" msgstr "a-z, 0-9, -, and _ only" -#: ../../include/text.php:2696 +#: ../../include/text.php:2709 msgid "Design Tools" msgstr "Herramientas de diseño web" -#: ../../include/text.php:2699 ../../Zotlabs/Module/Blocks.php:154 +#: ../../include/text.php:2712 ../../Zotlabs/Module/Blocks.php:154 msgid "Blocks" msgstr "Bloques" -#: ../../include/text.php:2700 ../../Zotlabs/Module/Menu.php:171 +#: ../../include/text.php:2713 ../../Zotlabs/Module/Menu.php:171 msgid "Menus" msgstr "Menús" -#: ../../include/text.php:2701 ../../Zotlabs/Module/Layouts.php:184 +#: ../../include/text.php:2714 ../../Zotlabs/Module/Layouts.php:184 msgid "Layouts" msgstr "Plantillas" -#: ../../include/text.php:2702 +#: ../../include/text.php:2715 msgid "Pages" msgstr "Páginas" -#: ../../include/text.php:2714 +#: ../../include/text.php:2727 msgid "Import" msgstr "Importar" -#: ../../include/text.php:2715 +#: ../../include/text.php:2728 msgid "Import website..." msgstr "Importar un sitio web..." -#: ../../include/text.php:2716 +#: ../../include/text.php:2729 msgid "Select folder to import" msgstr "Seleccionar la carpeta que se va a importar" -#: ../../include/text.php:2717 +#: ../../include/text.php:2730 msgid "Import from a zipped folder:" msgstr "Importar desde una carpeta comprimida: " -#: ../../include/text.php:2718 +#: ../../include/text.php:2731 msgid "Import from cloud files:" msgstr "Importar desde los ficheros en la nube: " -#: ../../include/text.php:2719 +#: ../../include/text.php:2732 msgid "/cloud/channel/path/to/folder" msgstr "/cloud/canal/ruta/a la/carpeta" -#: ../../include/text.php:2720 +#: ../../include/text.php:2733 msgid "Enter path to website files" msgstr "Ruta a los ficheros del sitio web" -#: ../../include/text.php:2721 +#: ../../include/text.php:2734 msgid "Select folder" msgstr "Seleccionar la carpeta" -#: ../../include/text.php:2722 +#: ../../include/text.php:2735 msgid "Export website..." msgstr "Exportar un sitio web..." -#: ../../include/text.php:2723 +#: ../../include/text.php:2736 msgid "Export to a zip file" msgstr "Exportar a un fichero comprimido .zip" -#: ../../include/text.php:2724 +#: ../../include/text.php:2737 msgid "website.zip" msgstr "sitio_web.zip" -#: ../../include/text.php:2725 +#: ../../include/text.php:2738 msgid "Enter a name for the zip file." msgstr "Escriba un nombre para el fichero zip." -#: ../../include/text.php:2726 +#: ../../include/text.php:2739 msgid "Export to cloud files" msgstr "Exportar a la nube de ficheros" -#: ../../include/text.php:2727 +#: ../../include/text.php:2740 msgid "/path/to/export/folder" msgstr "/ruta/para/exportar/carpeta" -#: ../../include/text.php:2728 +#: ../../include/text.php:2741 msgid "Enter a path to a cloud files destination." msgstr "Escriba una ruta de destino a la nube de ficheros." -#: ../../include/text.php:2729 +#: ../../include/text.php:2742 msgid "Specify folder" msgstr "Especificar una carpeta" @@ -4570,7 +4578,7 @@ msgid "Finishes:" msgstr "Finaliza:" #: ../../include/event.php:63 ../../include/event.php:134 -#: ../../include/channel.php:1634 ../../Zotlabs/Module/Directory.php:354 +#: ../../include/channel.php:1658 ../../Zotlabs/Module/Directory.php:354 msgid "Location:" msgstr "Ubicación:" @@ -4611,13 +4619,13 @@ msgid "Cancelled" msgstr "Cancelado/a" #: ../../include/event.php:1422 ../../include/connections.php:734 -#: ../../Zotlabs/Module/Cdav.php:1381 ../../Zotlabs/Module/Profiles.php:794 +#: ../../Zotlabs/Module/Cdav.php:1382 ../../Zotlabs/Module/Profiles.php:794 #: ../../Zotlabs/Module/Connedit.php:925 msgid "Mobile" msgstr "Móvil" #: ../../include/event.php:1423 ../../include/connections.php:735 -#: ../../Zotlabs/Module/Cdav.php:1382 ../../Zotlabs/Module/Profiles.php:795 +#: ../../Zotlabs/Module/Cdav.php:1383 ../../Zotlabs/Module/Profiles.php:795 #: ../../Zotlabs/Module/Connedit.php:926 msgid "Home" msgstr "Inicio" @@ -4631,7 +4639,7 @@ msgid "Home, Fax" msgstr "Fax particular" #: ../../include/event.php:1426 ../../include/connections.php:738 -#: ../../Zotlabs/Module/Cdav.php:1383 ../../Zotlabs/Module/Profiles.php:796 +#: ../../Zotlabs/Module/Cdav.php:1384 ../../Zotlabs/Module/Profiles.php:796 #: ../../Zotlabs/Module/Connedit.php:927 msgid "Work" msgstr "Trabajo" @@ -4648,7 +4656,7 @@ msgstr "Fax de trabajo" #: ../../include/selectors.php:60 ../../include/selectors.php:77 #: ../../include/selectors.php:115 ../../include/selectors.php:151 #: ../../include/connections.php:741 ../../include/connections.php:748 -#: ../../Zotlabs/Module/Cdav.php:1384 ../../Zotlabs/Module/Profiles.php:797 +#: ../../Zotlabs/Module/Cdav.php:1385 ../../Zotlabs/Module/Profiles.php:797 #: ../../Zotlabs/Module/Connedit.php:928 #: ../../Zotlabs/Access/PermissionRoles.php:310 msgid "Other" @@ -4666,8 +4674,8 @@ msgstr "Desactivado" msgid "On" msgstr "Activado" -#: ../../include/features.php:82 ../../include/nav.php:464 -#: ../../include/nav.php:467 ../../Zotlabs/Lib/Apps.php:346 +#: ../../include/features.php:82 ../../include/nav.php:463 +#: ../../include/nav.php:466 ../../Zotlabs/Lib/Apps.php:346 msgid "Calendar" msgstr "Calendario" @@ -4707,11 +4715,11 @@ msgstr "Nube de etiquetas" msgid "Provide a personal tag cloud on your channel page" msgstr "Proveer nube de etiquetas personal en su página de canal" -#: ../../include/features.php:124 ../../include/features.php:359 +#: ../../include/features.php:124 ../../include/features.php:358 msgid "Use blog/list mode" msgstr "Usar el modo blog/lista" -#: ../../include/features.php:125 ../../include/features.php:360 +#: ../../include/features.php:125 ../../include/features.php:359 msgid "Comments will be displayed separately" msgstr "Los comentarios se mostrarán por separado" @@ -4783,195 +4791,195 @@ msgstr "Temas de las entradas" msgid "Add categories to your posts" msgstr "Añadir temas a sus publicaciones" -#: ../../include/features.php:219 +#: ../../include/features.php:218 msgid "Large Photos" msgstr "Fotos de gran tamaño" -#: ../../include/features.php:220 +#: ../../include/features.php:219 msgid "" "Include large (1024px) photo thumbnails in posts. If not enabled, use small " "(640px) photo thumbnails" msgstr "Incluir miniaturas de fotos grandes (1024px) en publicaciones. Si no está habilitado, usar miniaturas pequeñas (640px)" -#: ../../include/features.php:227 +#: ../../include/features.php:226 msgid "Even More Encryption" msgstr "Más cifrado todavía" -#: ../../include/features.php:228 +#: ../../include/features.php:227 msgid "" "Allow optional encryption of content end-to-end with a shared secret key" msgstr "Permitir cifrado adicional de contenido \"punto-a-punto\" con una clave secreta compartida." -#: ../../include/features.php:235 +#: ../../include/features.php:234 msgid "Disable Comments" msgstr "Deshabilitar comentarios" -#: ../../include/features.php:236 +#: ../../include/features.php:235 msgid "Provide the option to disable comments for a post" msgstr "Proporcionar la opción de desactivar los comentarios para una entrada" -#: ../../include/features.php:243 +#: ../../include/features.php:242 msgid "Delayed Posting" msgstr "Publicación aplazada" -#: ../../include/features.php:244 +#: ../../include/features.php:243 msgid "Allow posts to be published at a later date" msgstr "Permitir mensajes que se publicarán en una fecha posterior" -#: ../../include/features.php:251 +#: ../../include/features.php:250 msgid "Content Expiration" msgstr "Caducidad del contenido" -#: ../../include/features.php:252 +#: ../../include/features.php:251 msgid "Remove posts/comments and/or private messages at a future time" msgstr "Eliminar publicaciones/comentarios y/o mensajes privados más adelante" -#: ../../include/features.php:259 +#: ../../include/features.php:258 msgid "Suppress Duplicate Posts/Comments" msgstr "Prevenir entradas o comentarios duplicados" -#: ../../include/features.php:260 +#: ../../include/features.php:259 msgid "" "Prevent posts with identical content to be published with less than two " "minutes in between submissions." msgstr "Prevenir que entradas con contenido idéntico se publiquen con menos de dos minutos de intervalo." -#: ../../include/features.php:267 +#: ../../include/features.php:266 msgid "Auto-save drafts of posts and comments" msgstr "Guardar automáticamente borradores de entradas y comentarios" -#: ../../include/features.php:268 +#: ../../include/features.php:267 msgid "" "Automatically saves post and comment drafts in local browser storage to help" " prevent accidental loss of compositions" msgstr "Guarda automáticamente los borradores de comentarios y publicaciones en el almacenamiento del navegador local para ayudar a evitar la pérdida accidental de composiciones." -#: ../../include/features.php:277 +#: ../../include/features.php:276 msgid "Manage" msgstr "Gestionar" -#: ../../include/features.php:281 +#: ../../include/features.php:280 msgid "Navigation Channel Select" msgstr "Navegación por el selector de canales" -#: ../../include/features.php:282 +#: ../../include/features.php:281 msgid "Change channels directly from within the navigation dropdown menu" msgstr "Cambiar de canales directamente desde el menú de navegación desplegable" -#: ../../include/features.php:291 ../../Zotlabs/Module/Connections.php:333 +#: ../../include/features.php:290 ../../Zotlabs/Module/Connections.php:333 msgid "Network" msgstr "Red" -#: ../../include/features.php:295 +#: ../../include/features.php:294 msgid "Events Filter" msgstr "Filtro de eventos" -#: ../../include/features.php:296 +#: ../../include/features.php:295 msgid "Ability to display only events" msgstr "Capacidad para mostrar solo eventos" -#: ../../include/features.php:303 +#: ../../include/features.php:302 msgid "Polls Filter" msgstr "Filtro de encuestas" -#: ../../include/features.php:304 +#: ../../include/features.php:303 msgid "Ability to display only polls" msgstr "Capacidad para mostrar solo encuestas" -#: ../../include/features.php:311 ../../Zotlabs/Widget/Savedsearch.php:83 +#: ../../include/features.php:310 ../../Zotlabs/Widget/Savedsearch.php:83 msgid "Saved Searches" msgstr "Búsquedas guardadas" -#: ../../include/features.php:312 +#: ../../include/features.php:311 msgid "Save search terms for re-use" msgstr "Guardar términos de búsqueda para su reutilización" -#: ../../include/features.php:319 ../../include/contact_widgets.php:53 -#: ../../Zotlabs/Widget/Activity_filter.php:179 +#: ../../include/features.php:318 ../../include/contact_widgets.php:53 +#: ../../Zotlabs/Widget/Activity_filter.php:189 #: ../../Zotlabs/Widget/Filer.php:28 msgid "Saved Folders" msgstr "Carpetas guardadas" -#: ../../include/features.php:320 +#: ../../include/features.php:319 msgid "Ability to file posts under folders" msgstr "Capacidad de archivar entradas en carpetas" -#: ../../include/features.php:327 +#: ../../include/features.php:326 msgid "Alternate Stream Order" msgstr "Orden de stream alternativo" -#: ../../include/features.php:328 +#: ../../include/features.php:327 msgid "" "Ability to order the stream by last post date, last comment date or " "unthreaded activities" msgstr "Posibilidad de ordenar el stream por última fecha de publicación, última fecha de comentario o actividades sin hilo" -#: ../../include/features.php:335 +#: ../../include/features.php:334 msgid "Contact Filter" msgstr "Filtro de contactos" -#: ../../include/features.php:336 +#: ../../include/features.php:335 msgid "Ability to display only posts of a selected contact" msgstr "Posibilidad de mostrar sólo los mensajes de un contacto seleccionado" -#: ../../include/features.php:343 +#: ../../include/features.php:342 msgid "Forum Filter" msgstr "Filtro de foro" -#: ../../include/features.php:344 +#: ../../include/features.php:343 msgid "Ability to display only posts of a specific forum" msgstr "Posibilidad de mostrar sólo los mensajes de un foro específico" -#: ../../include/features.php:351 +#: ../../include/features.php:350 msgid "Personal Posts Filter" msgstr "Filtro de entradas personales" -#: ../../include/features.php:352 +#: ../../include/features.php:351 msgid "Ability to display only posts that you've interacted on" msgstr "Posibilidad de mostrar sólo los mensajes en los que usted haya interactuado" -#: ../../include/features.php:369 ../../include/nav.php:445 +#: ../../include/features.php:368 ../../include/nav.php:444 #: ../../Zotlabs/Module/Fbrowser.php:29 ../../Zotlabs/Lib/Apps.php:345 msgid "Photos" msgstr "Fotos" -#: ../../include/features.php:373 +#: ../../include/features.php:372 msgid "Photo Location" msgstr "Ubicación de las fotos" -#: ../../include/features.php:374 +#: ../../include/features.php:373 msgid "If location data is available on uploaded photos, link this to a map." msgstr "Si los datos de ubicación están disponibles en las fotos subidas, enlazar estas a un mapa." -#: ../../include/features.php:383 ../../Zotlabs/Lib/Apps.php:363 +#: ../../include/features.php:382 ../../Zotlabs/Lib/Apps.php:363 msgid "Profiles" msgstr "Perfiles" -#: ../../include/features.php:387 +#: ../../include/features.php:386 msgid "Advanced Profiles" msgstr "Perfiles avanzados" -#: ../../include/features.php:388 +#: ../../include/features.php:387 msgid "Additional profile sections and selections" msgstr "Secciones y selecciones de perfil adicionales" -#: ../../include/features.php:395 +#: ../../include/features.php:394 msgid "Profile Import/Export" msgstr "Importar/Exportar perfil" -#: ../../include/features.php:396 +#: ../../include/features.php:395 msgid "Save and load profile details across sites/channels" msgstr "Guardar y cargar detalles del perfil a través de sitios/canales" -#: ../../include/features.php:403 +#: ../../include/features.php:402 msgid "Multiple Profiles" msgstr "Múltiples perfiles" -#: ../../include/features.php:404 +#: ../../include/features.php:403 msgid "Ability to create multiple profiles" msgstr "Capacidad de crear múltiples perfiles" -#: ../../include/security.php:608 +#: ../../include/security.php:607 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." @@ -5010,7 +5018,7 @@ msgstr "%s contraer" msgid "Password too short" msgstr "Contraseña demasiado corta" -#: ../../include/js_strings.php:12 +#: ../../include/js_strings.php:12 ../../Zotlabs/Module/Register.php:158 msgid "Passwords do not match" msgstr "Las contraseñas no coinciden" @@ -5060,7 +5068,7 @@ msgid "Unsaved changes. Are you sure you wish to leave this page?" msgstr "Cambios no guardados. ¿Está seguro de que desea abandonar la página?" #: ../../include/js_strings.php:25 ../../Zotlabs/Module/Pubsites.php:53 -#: ../../Zotlabs/Module/Cdav.php:1015 ../../Zotlabs/Module/Events.php:483 +#: ../../Zotlabs/Module/Cdav.php:1016 ../../Zotlabs/Module/Events.php:483 #: ../../Zotlabs/Module/Profiles.php:511 ../../Zotlabs/Module/Profiles.php:736 #: ../../Zotlabs/Module/Locs.php:128 msgid "Location" @@ -5120,7 +5128,7 @@ msgstr "Anclado/a" msgid "Pin to the top" msgstr "Anclar en la parte superior" -#: ../../include/js_strings.php:39 ../../Zotlabs/Widget/Pinned.php:157 +#: ../../include/js_strings.php:39 ../../Zotlabs/Widget/Pinned.php:155 #: ../../Zotlabs/Lib/ThreadItem.php:473 msgid "Unpin from the top" msgstr "Desanclar de la parte superior" @@ -5319,12 +5327,16 @@ msgstr "Todos los días" msgid "Please stand by while your download is being prepared." msgstr "Por favor, espere mientras se prepara la descarga." +#: ../../include/js_strings.php:122 +msgid "Email address not valid" +msgstr "Dirección de correo electrónica no válida" + #: ../../include/help.php:80 msgid "Help:" msgstr "Ayuda:" #: ../../include/help.php:117 ../../include/help.php:125 -#: ../../include/nav.php:180 ../../include/nav.php:321 +#: ../../include/nav.php:180 ../../include/nav.php:320 #: ../../Zotlabs/Module/Layouts.php:186 ../../Zotlabs/Lib/Apps.php:348 msgid "Help" msgstr "Ayuda" @@ -5336,7 +5348,7 @@ msgstr "No encontrado" #: ../../include/help.php:132 ../../Zotlabs/Module/Display.php:136 #: ../../Zotlabs/Module/Display.php:153 ../../Zotlabs/Module/Display.php:173 #: ../../Zotlabs/Module/Display.php:179 ../../Zotlabs/Module/Page.php:136 -#: ../../Zotlabs/Module/Block.php:77 ../../Zotlabs/Lib/NativeWikiPage.php:520 +#: ../../Zotlabs/Module/Block.php:77 ../../Zotlabs/Lib/NativeWikiPage.php:533 #: ../../Zotlabs/Web/Router.php:186 msgid "Page not found." msgstr "Página no encontrada." @@ -5369,7 +5381,7 @@ msgctxt "photo_upload" msgid "%1$s posted %2$s to %3$s" msgstr "%1$s ha publicado %2$s en %3$s" -#: ../../include/photos.php:666 ../../include/nav.php:448 +#: ../../include/photos.php:666 ../../include/nav.php:447 msgid "Photo Albums" msgstr "Álbumes de fotos" @@ -5382,43 +5394,43 @@ msgstr "Fotos recientes" msgid "Upload New Photos" msgstr "Subir nuevas fotos" -#: ../../include/network.php:1758 ../../include/network.php:1759 +#: ../../include/network.php:1762 ../../include/network.php:1763 msgid "Friendica" msgstr "Friendica" -#: ../../include/network.php:1760 +#: ../../include/network.php:1764 msgid "OStatus" msgstr "OStatus" -#: ../../include/network.php:1761 +#: ../../include/network.php:1765 msgid "GNU-Social" msgstr "GNU Social" -#: ../../include/network.php:1762 +#: ../../include/network.php:1766 msgid "RSS/Atom" msgstr "RSS/Atom" -#: ../../include/network.php:1765 +#: ../../include/network.php:1769 msgid "Diaspora" msgstr "Diaspora" -#: ../../include/network.php:1766 +#: ../../include/network.php:1770 msgid "Facebook" msgstr "Facebook" -#: ../../include/network.php:1767 +#: ../../include/network.php:1771 msgid "Zot" msgstr "Zot" -#: ../../include/network.php:1768 +#: ../../include/network.php:1772 msgid "LinkedIn" msgstr "LinkedIn" -#: ../../include/network.php:1769 +#: ../../include/network.php:1773 msgid "XMPP/IM" msgstr "XMPP/IM" -#: ../../include/network.php:1770 +#: ../../include/network.php:1774 msgid "MySpace" msgstr "MySpace" @@ -5452,8 +5464,8 @@ msgid_plural "%d invitations available" msgstr[0] "%d invitación pendiente" msgstr[1] "%d invitaciones disponibles" -#: ../../include/contact_widgets.php:16 ../../include/acl_selectors.php:144 -#: ../../Zotlabs/Module/Admin/Site.php:297 +#: ../../include/contact_widgets.php:16 ../../include/acl_selectors.php:145 +#: ../../Zotlabs/Module/Admin/Site.php:416 msgid "Advanced" msgstr "Avanzado" @@ -5508,7 +5520,7 @@ msgstr "Todo" #: ../../include/taxonomy.php:420 ../../include/taxonomy.php:502 #: ../../include/taxonomy.php:522 ../../include/taxonomy.php:543 #: ../../Zotlabs/Widget/Appcategories.php:43 -#: ../../Zotlabs/Module/Cdav.php:1070 ../../Zotlabs/Storage/Browser.php:293 +#: ../../Zotlabs/Module/Cdav.php:1071 ../../Zotlabs/Storage/Browser.php:293 #: ../../Zotlabs/Storage/Browser.php:388 ../../Zotlabs/Storage/Browser.php:403 msgid "Categories" msgstr "Temas" @@ -5522,7 +5534,7 @@ msgstr "Conexiones comunes" msgid "View all %d common connections" msgstr "Ver todas las %d conexiones comunes" -#: ../../include/language.php:437 +#: ../../include/language.php:441 msgid "Select an alternate language" msgstr "Seleccionar un idioma alternativo" @@ -5556,9 +5568,9 @@ msgstr "Administración de canales" msgid "Manage your channels" msgstr "Gestionar sus canales" -#: ../../include/nav.php:104 ../../include/group.php:321 -#: ../../include/acl_selectors.php:86 -#: ../../Zotlabs/Widget/Activity_filter.php:82 +#: ../../include/nav.php:104 ../../include/group.php:327 +#: ../../include/acl_selectors.php:87 +#: ../../Zotlabs/Widget/Activity_filter.php:88 #: ../../Zotlabs/Module/Group.php:142 ../../Zotlabs/Module/Group.php:154 #: ../../Zotlabs/Lib/Group.php:324 ../../Zotlabs/Lib/Apps.php:364 msgid "Privacy Groups" @@ -5580,7 +5592,7 @@ msgid "Account/Channel Settings" msgstr "Ajustes de cuenta/canales" #: ../../include/nav.php:112 ../../include/nav.php:142 -#: ../../include/nav.php:163 ../../boot.php:1710 +#: ../../include/nav.php:163 ../../boot.php:1715 msgid "Logout" msgstr "Finalizar sesión" @@ -5592,7 +5604,7 @@ msgstr "Finalizar esta sesión" msgid "Your profile page" msgstr "Su página del perfil" -#: ../../include/nav.php:118 ../../include/channel.php:1539 +#: ../../include/nav.php:118 ../../include/channel.php:1563 #: ../../Zotlabs/Module/Profiles.php:832 msgid "Edit Profiles" msgstr "Editar perfiles" @@ -5606,7 +5618,7 @@ msgid "Edit your profile" msgstr "Editar su perfil" #: ../../include/nav.php:127 ../../include/nav.php:131 -#: ../../Zotlabs/Lib/Apps.php:336 ../../boot.php:1711 +#: ../../Zotlabs/Lib/Apps.php:336 ../../boot.php:1716 msgid "Login" msgstr "Iniciar sesión" @@ -5622,8 +5634,8 @@ msgstr "Volver a la página principal" msgid "Log me out of this site" msgstr "Salir de este sitio" -#: ../../include/nav.php:168 ../../Zotlabs/Module/Register.php:293 -#: ../../boot.php:1691 +#: ../../include/nav.php:168 ../../Zotlabs/Module/Register.php:566 +#: ../../boot.php:1696 msgid "Register" msgstr "Registrarse" @@ -5647,104 +5659,104 @@ msgstr "Administrador" msgid "Site Setup and Configuration" msgstr "Ajustes y configuración del sitio" -#: ../../include/nav.php:325 ../../Zotlabs/Widget/Notifications.php:182 +#: ../../include/nav.php:324 ../../Zotlabs/Widget/Notifications.php:182 #: ../../Zotlabs/Module/New_channel.php:157 #: ../../Zotlabs/Module/New_channel.php:164 #: ../../Zotlabs/Module/Defperms.php:257 ../../Zotlabs/Module/Connedit.php:862 msgid "Loading" msgstr "Cargando" -#: ../../include/nav.php:331 +#: ../../include/nav.php:330 msgid "@name, !forum, #tag, ?doc, content" msgstr "@nombre, !foro, #tag, ?docs, contenido" -#: ../../include/nav.php:332 +#: ../../include/nav.php:331 msgid "Please wait..." msgstr "Espere por favor…" -#: ../../include/nav.php:338 +#: ../../include/nav.php:337 msgid "Add Apps" msgstr "Añadir aplicaciones" -#: ../../include/nav.php:339 +#: ../../include/nav.php:338 msgid "Arrange Apps" msgstr "Organizar aplicaciones" -#: ../../include/nav.php:340 +#: ../../include/nav.php:339 msgid "Toggle System Apps" msgstr "Alternar aplicaciones de sistema" -#: ../../include/nav.php:422 ../../Zotlabs/Module/Admin/Channels.php:154 +#: ../../include/nav.php:421 ../../Zotlabs/Module/Admin/Channels.php:154 msgid "Channel" msgstr "Canal" -#: ../../include/nav.php:425 +#: ../../include/nav.php:424 msgid "Status Messages and Posts" msgstr "Mensajes de estado y publicaciones" -#: ../../include/nav.php:435 ../../Zotlabs/Module/Help.php:83 +#: ../../include/nav.php:434 ../../Zotlabs/Module/Help.php:83 msgid "About" msgstr "Mi perfil" -#: ../../include/nav.php:438 +#: ../../include/nav.php:437 msgid "Profile Details" msgstr "Detalles del perfil" -#: ../../include/nav.php:453 ../../Zotlabs/Module/Fbrowser.php:85 +#: ../../include/nav.php:452 ../../Zotlabs/Module/Fbrowser.php:85 #: ../../Zotlabs/Lib/Apps.php:340 ../../Zotlabs/Storage/Browser.php:351 msgid "Files" msgstr "Ficheros" -#: ../../include/nav.php:456 +#: ../../include/nav.php:455 msgid "Files and Storage" msgstr "Ficheros y repositorio" -#: ../../include/nav.php:478 ../../include/nav.php:481 +#: ../../include/nav.php:477 ../../include/nav.php:480 #: ../../Zotlabs/Widget/Chatroom_list.php:16 ../../Zotlabs/Lib/Apps.php:330 msgid "Chatrooms" msgstr "Salas de chat" -#: ../../include/nav.php:491 ../../Zotlabs/Lib/Apps.php:329 +#: ../../include/nav.php:490 ../../Zotlabs/Lib/Apps.php:329 msgid "Bookmarks" msgstr "Marcadores" -#: ../../include/nav.php:494 +#: ../../include/nav.php:493 msgid "Saved Bookmarks" msgstr "Marcadores guardados" -#: ../../include/nav.php:502 ../../Zotlabs/Module/Cards.php:207 +#: ../../include/nav.php:501 ../../Zotlabs/Module/Cards.php:207 #: ../../Zotlabs/Lib/Apps.php:326 msgid "Cards" msgstr "Fichas" -#: ../../include/nav.php:505 +#: ../../include/nav.php:504 msgid "View Cards" msgstr "Ver las fichas" -#: ../../include/nav.php:513 ../../Zotlabs/Module/Articles.php:225 +#: ../../include/nav.php:512 ../../Zotlabs/Module/Articles.php:225 #: ../../Zotlabs/Lib/Apps.php:325 msgid "Articles" msgstr "Artículos" -#: ../../include/nav.php:516 +#: ../../include/nav.php:515 msgid "View Articles" msgstr "Ver los artículos" -#: ../../include/nav.php:525 ../../Zotlabs/Module/Webpages.php:252 +#: ../../include/nav.php:524 ../../Zotlabs/Module/Webpages.php:252 #: ../../Zotlabs/Lib/Apps.php:341 msgid "Webpages" msgstr "Páginas web" -#: ../../include/nav.php:528 +#: ../../include/nav.php:527 msgid "View Webpages" msgstr "Ver páginas web" -#: ../../include/nav.php:537 ../../Zotlabs/Widget/Wiki_list.php:15 -#: ../../Zotlabs/Module/Wiki.php:206 +#: ../../include/nav.php:536 ../../Zotlabs/Widget/Wiki_list.php:15 +#: ../../Zotlabs/Module/Wiki.php:205 msgid "Wikis" msgstr "Wikis" -#: ../../include/nav.php:540 ../../Zotlabs/Lib/Apps.php:342 +#: ../../include/nav.php:539 ../../Zotlabs/Lib/Apps.php:342 msgid "Wiki" msgstr "Wiki" @@ -5781,7 +5793,7 @@ msgstr "Edad:" msgid "YYYY-MM-DD or MM-DD" msgstr "AAAA-MM-DD o MM-DD" -#: ../../include/datetime.php:238 ../../boot.php:2715 +#: ../../include/datetime.php:238 ../../boot.php:2730 msgid "never" msgstr "nunca" @@ -6002,9 +6014,9 @@ msgstr "Seleccionar" #: ../../include/conversation.php:730 ../../include/conversation.php:777 #: ../../Zotlabs/Module/Article_edit.php:129 #: ../../Zotlabs/Module/Card_edit.php:130 ../../Zotlabs/Module/Oauth.php:174 -#: ../../Zotlabs/Module/Editwebpage.php:167 ../../Zotlabs/Module/Cdav.php:1056 -#: ../../Zotlabs/Module/Cdav.php:1389 ../../Zotlabs/Module/Webpages.php:257 -#: ../../Zotlabs/Module/Admin/Accounts.php:175 +#: ../../Zotlabs/Module/Editwebpage.php:167 ../../Zotlabs/Module/Cdav.php:1057 +#: ../../Zotlabs/Module/Cdav.php:1390 ../../Zotlabs/Module/Webpages.php:257 +#: ../../Zotlabs/Module/Admin/Accounts.php:320 #: ../../Zotlabs/Module/Admin/Channels.php:149 #: ../../Zotlabs/Module/Admin/Profs.php:176 #: ../../Zotlabs/Module/Blocks.php:162 ../../Zotlabs/Module/Editblock.php:139 @@ -6037,7 +6049,7 @@ msgid "Message signature incorrect" msgstr "Firma de mensaje incorrecta" #: ../../include/conversation.php:776 -#: ../../Zotlabs/Module/Admin/Accounts.php:173 +#: ../../Zotlabs/Module/Admin/Accounts.php:318 #: ../../Zotlabs/Module/Connections.php:343 msgid "Approve" msgstr "Aprobar" @@ -6055,19 +6067,19 @@ msgstr "Temas:" msgid "Filed under:" msgstr "Archivado bajo:" -#: ../../include/conversation.php:809 ../../Zotlabs/Widget/Pinned.php:133 +#: ../../include/conversation.php:809 ../../Zotlabs/Widget/Pinned.php:132 #: ../../Zotlabs/Lib/ThreadItem.php:430 #, php-format msgid "from %s" msgstr "desde %s" -#: ../../include/conversation.php:812 ../../Zotlabs/Widget/Pinned.php:136 +#: ../../include/conversation.php:812 ../../Zotlabs/Widget/Pinned.php:135 #: ../../Zotlabs/Lib/ThreadItem.php:433 #, php-format msgid "last edited: %s" msgstr "último cambio: %s" -#: ../../include/conversation.php:813 ../../Zotlabs/Widget/Pinned.php:137 +#: ../../include/conversation.php:813 ../../Zotlabs/Widget/Pinned.php:136 #: ../../Zotlabs/Lib/ThreadItem.php:434 #, php-format msgid "Expires: %s" @@ -6115,7 +6127,7 @@ msgid "Recent Activity" msgstr "Actividad reciente" #: ../../include/conversation.php:1103 ../../include/connections.php:110 -#: ../../include/channel.php:1619 ../../Zotlabs/Widget/Suggestions.php:46 +#: ../../include/channel.php:1643 ../../Zotlabs/Widget/Suggestions.php:46 #: ../../Zotlabs/Widget/Follow.php:32 ../../Zotlabs/Module/Directory.php:370 #: ../../Zotlabs/Module/Connections.php:350 #: ../../Zotlabs/Module/Suggest.php:71 @@ -6127,6 +6139,7 @@ msgid "Edit Connection" msgstr "Editar conexión" #: ../../include/conversation.php:1123 +#: ../../Zotlabs/Module/Admin/Accounts.php:347 msgid "Message" msgstr "Mensaje" @@ -6185,40 +6198,40 @@ msgstr "A %s le gusta esto." msgid "%s don't like this." msgstr "A %s no le gusta esto." -#: ../../include/conversation.php:1465 +#: ../../include/conversation.php:1464 msgid "Toggle poll" msgstr "Activar o desactivar encuestas" -#: ../../include/conversation.php:1466 +#: ../../include/conversation.php:1465 msgid "Option" msgstr "Opción" -#: ../../include/conversation.php:1467 +#: ../../include/conversation.php:1466 msgid "Add option" msgstr "Añadir una opción" -#: ../../include/conversation.php:1468 +#: ../../include/conversation.php:1467 msgid "Minutes" msgstr "Minutos " -#: ../../include/conversation.php:1468 +#: ../../include/conversation.php:1467 msgid "Hours" msgstr "Horas " -#: ../../include/conversation.php:1468 +#: ../../include/conversation.php:1467 msgid "Days" msgstr "Días " -#: ../../include/conversation.php:1469 +#: ../../include/conversation.php:1468 msgid "Allow multiple answers" msgstr "Permitir respuestas múltiples" -#: ../../include/conversation.php:1479 +#: ../../include/conversation.php:1478 msgid "Summary (optional)" msgstr "Sumario (opcional)" -#: ../../include/conversation.php:1753 ../../include/taxonomy.php:670 -#: ../../include/channel.php:1782 ../../Zotlabs/Module/Photos.php:1136 +#: ../../include/conversation.php:1752 ../../include/taxonomy.php:670 +#: ../../include/channel.php:1806 ../../Zotlabs/Module/Photos.php:1136 #: ../../Zotlabs/Lib/ThreadItem.php:243 msgctxt "noun" msgid "Like" @@ -6226,7 +6239,7 @@ msgid_plural "Likes" msgstr[0] "Me gusta" msgstr[1] "Me gusta" -#: ../../include/conversation.php:1756 ../../Zotlabs/Module/Photos.php:1141 +#: ../../include/conversation.php:1755 ../../Zotlabs/Module/Photos.php:1141 #: ../../Zotlabs/Lib/ThreadItem.php:248 msgctxt "noun" msgid "Dislike" @@ -6234,42 +6247,42 @@ msgid_plural "Dislikes" msgstr[0] "No me gusta" msgstr[1] "No me gusta" -#: ../../include/conversation.php:1759 +#: ../../include/conversation.php:1758 msgctxt "noun" msgid "Attending" msgid_plural "Attending" msgstr[0] "Participaré" msgstr[1] "Participaré" -#: ../../include/conversation.php:1762 +#: ../../include/conversation.php:1761 msgctxt "noun" msgid "Not Attending" msgid_plural "Not Attending" msgstr[0] "No participaré" msgstr[1] "No participaré" -#: ../../include/conversation.php:1765 +#: ../../include/conversation.php:1764 msgctxt "noun" msgid "Undecided" msgid_plural "Undecided" msgstr[0] "Indeciso/a" msgstr[1] "Indecisos/as" -#: ../../include/conversation.php:1768 +#: ../../include/conversation.php:1767 msgctxt "noun" msgid "Agree" msgid_plural "Agrees" msgstr[0] "De acuerdo" msgstr[1] "De acuerdo" -#: ../../include/conversation.php:1771 +#: ../../include/conversation.php:1770 msgctxt "noun" msgid "Disagree" msgid_plural "Disagrees" msgstr[0] "En desacuerdo" msgstr[1] "En desacuerdo" -#: ../../include/conversation.php:1774 +#: ../../include/conversation.php:1773 msgctxt "noun" msgid "Abstain" msgid_plural "Abstains" @@ -6336,11 +6349,11 @@ msgstr "Transexual" msgid "Hermaphrodite" msgstr "Hermafrodita" -#: ../../include/selectors.php:60 ../../include/channel.php:1727 +#: ../../include/selectors.php:60 ../../include/channel.php:1751 msgid "Neuter" msgstr "Neutral" -#: ../../include/selectors.php:60 ../../include/channel.php:1729 +#: ../../include/selectors.php:60 ../../include/channel.php:1753 msgid "Non-specific" msgstr "No especificado" @@ -6437,8 +6450,7 @@ msgid "Sex Addict" msgstr "Con adicción al sexo" #: ../../include/selectors.php:134 ../../include/channel.php:506 -#: ../../include/channel.php:507 ../../include/channel.php:514 -#: ../../Zotlabs/Widget/Affinity.php:32 +#: ../../include/channel.php:509 ../../Zotlabs/Widget/Affinity.php:32 #: ../../Zotlabs/Module/Settings/Channel.php:71 #: ../../Zotlabs/Module/Settings/Channel.php:75 #: ../../Zotlabs/Module/Settings/Channel.php:76 @@ -6547,28 +6559,28 @@ msgid "" "not what you intended, please create another group with a different name." msgstr "Un grupo suprimido con este nombre ha sido restablecido. Es posible que los permisos que ya existen sean aplicados a este grupo y sus futuros miembros. Si no quiere esto, por favor cree otro grupo con un nombre diferente." -#: ../../include/group.php:265 ../../Zotlabs/Lib/Group.php:270 +#: ../../include/group.php:271 ../../Zotlabs/Lib/Group.php:270 msgid "Add new connections to this privacy group" msgstr "Añadir conexiones nuevas a este grupo de canales" -#: ../../include/group.php:299 ../../Zotlabs/Lib/AccessList.php:311 +#: ../../include/group.php:305 ../../Zotlabs/Lib/AccessList.php:311 #: ../../Zotlabs/Lib/Group.php:302 msgid "edit" msgstr "editar" -#: ../../include/group.php:322 ../../Zotlabs/Lib/Group.php:325 +#: ../../include/group.php:328 ../../Zotlabs/Lib/Group.php:325 msgid "Edit group" msgstr "Editar grupo" -#: ../../include/group.php:323 ../../Zotlabs/Lib/Group.php:326 +#: ../../include/group.php:329 ../../Zotlabs/Lib/Group.php:326 msgid "Add privacy group" msgstr "Añadir un grupo de canales" -#: ../../include/group.php:324 ../../Zotlabs/Lib/Group.php:327 +#: ../../include/group.php:330 ../../Zotlabs/Lib/Group.php:327 msgid "Channels not in any privacy group" msgstr "Sin canales en ningún grupo" -#: ../../include/group.php:326 ../../Zotlabs/Widget/Savedsearch.php:84 +#: ../../include/group.php:332 ../../Zotlabs/Widget/Savedsearch.php:84 #: ../../Zotlabs/Lib/AccessList.php:336 ../../Zotlabs/Lib/Group.php:329 msgid "add" msgstr "añadir" @@ -6618,177 +6630,199 @@ msgstr "no me gusta" msgid "dislikes" msgstr "no gusta de" -#: ../../include/items.php:1001 ../../include/items.php:1061 +#: ../../include/items.php:1037 ../../include/items.php:1097 msgid "(Unknown)" msgstr "(Desconocido)" -#: ../../include/items.php:1249 +#: ../../include/items.php:1301 msgid "Visible to anybody on the internet." msgstr "Visible para cualquiera en internet." -#: ../../include/items.php:1251 +#: ../../include/items.php:1303 msgid "Visible to you only." msgstr "Visible sólo para usted." -#: ../../include/items.php:1253 +#: ../../include/items.php:1305 msgid "Visible to anybody in this network." msgstr "Visible para cualquiera en esta red." -#: ../../include/items.php:1255 +#: ../../include/items.php:1307 msgid "Visible to anybody authenticated." msgstr "Visible para cualquiera que esté autenticado." -#: ../../include/items.php:1257 +#: ../../include/items.php:1309 #, php-format msgid "Visible to anybody on %s." msgstr "Visible para cualquiera en %s." -#: ../../include/items.php:1259 +#: ../../include/items.php:1311 msgid "Visible to all connections." msgstr "Visible para todas las conexiones." -#: ../../include/items.php:1261 +#: ../../include/items.php:1313 msgid "Visible to approved connections." msgstr "Visible para las conexiones permitidas." -#: ../../include/items.php:1263 +#: ../../include/items.php:1315 msgid "Visible to specific connections." msgstr "Visible para conexiones específicas." -#: ../../include/items.php:4493 ../../Zotlabs/Module/Group.php:62 +#: ../../include/items.php:4584 ../../Zotlabs/Module/Group.php:62 #: ../../Zotlabs/Module/Group.php:214 msgid "Privacy group not found." msgstr "Grupo de canales no encontrado." -#: ../../include/items.php:4509 +#: ../../include/items.php:4600 msgid "Privacy group is empty." msgstr "El grupo de canales está vacío." -#: ../../include/items.php:4516 +#: ../../include/items.php:4607 #, php-format msgid "Privacy group: %s" msgstr "Grupo de canales: %s" -#: ../../include/items.php:4526 ../../Zotlabs/Module/Connedit.php:860 +#: ../../include/items.php:4617 ../../Zotlabs/Module/Connedit.php:860 #, php-format msgid "Connection: %s" msgstr "Conexión: %s" -#: ../../include/items.php:4528 +#: ../../include/items.php:4619 msgid "Connection not found." msgstr "Conexión no encontrada" -#: ../../include/items.php:4875 ../../Zotlabs/Module/Cover_photo.php:297 +#: ../../include/items.php:4965 ../../Zotlabs/Module/Cover_photo.php:297 msgid "female" msgstr "mujer" -#: ../../include/items.php:4876 ../../Zotlabs/Module/Cover_photo.php:298 +#: ../../include/items.php:4966 ../../Zotlabs/Module/Cover_photo.php:298 #, php-format msgid "%1$s updated her %2$s" msgstr "%1$s ha actualizado su %2$s" -#: ../../include/items.php:4877 ../../Zotlabs/Module/Cover_photo.php:299 +#: ../../include/items.php:4967 ../../Zotlabs/Module/Cover_photo.php:299 msgid "male" msgstr "hombre" -#: ../../include/items.php:4878 ../../Zotlabs/Module/Cover_photo.php:300 +#: ../../include/items.php:4968 ../../Zotlabs/Module/Cover_photo.php:300 #, php-format msgid "%1$s updated his %2$s" msgstr "%1$s ha actualizado su %2$s" -#: ../../include/items.php:4880 ../../Zotlabs/Module/Cover_photo.php:302 +#: ../../include/items.php:4970 ../../Zotlabs/Module/Cover_photo.php:302 #, php-format msgid "%1$s updated their %2$s" msgstr "%1$s ha actualizado su %2$s" -#: ../../include/items.php:4882 +#: ../../include/items.php:4972 msgid "profile photo" msgstr "foto del perfil" -#: ../../include/items.php:5074 +#: ../../include/items.php:5164 #, php-format msgid "[Edited %s]" msgstr "[se ha editado %s]" -#: ../../include/items.php:5074 +#: ../../include/items.php:5164 msgctxt "edit_activity" msgid "Post" msgstr "Publicar" -#: ../../include/items.php:5074 +#: ../../include/items.php:5164 msgctxt "edit_activity" msgid "Comment" msgstr "Comentar" #: ../../include/account.php:38 -msgid "Not a valid email address" -msgstr "Dirección de correo no válida" +msgid "The provided email address is not valid" +msgstr "La dirección de correo electrónico proporcionada no es válida" #: ../../include/account.php:40 -msgid "Your email domain is not among those allowed on this site" -msgstr "Su dirección de correo no pertenece a ninguno de los dominios permitidos en este sitio." +msgid "The provided email domain is not among those allowed on this site" +msgstr "El dominio de correo electrónico proporcionado no está entre los permitidos en este sitio" -#: ../../include/account.php:46 -msgid "Your email address is already registered at this site." -msgstr "Su dirección de correo está ya registrada en este sitio." +#: ../../include/account.php:51 +msgid "The provided email address is already registered at this site" +msgstr "La dirección de correo electrónico proporcionada ya está registrada en este sitio" -#: ../../include/account.php:78 +#: ../../include/account.php:88 msgid "An invitation is required." msgstr "Es obligatorio que le inviten." -#: ../../include/account.php:82 +#: ../../include/account.php:97 msgid "Invitation could not be verified." msgstr "No se ha podido verificar su invitación." -#: ../../include/account.php:158 +#: ../../include/account.php:185 msgid "Please enter the required information." msgstr "Por favor introduzca la información requerida." -#: ../../include/account.php:225 +#: ../../include/account.php:252 ../../include/account.php:360 msgid "Failed to store account information." msgstr "La información de la cuenta no se ha podido guardar." -#: ../../include/account.php:313 +#: ../../include/account.php:429 ../../include/account.php:497 +#: ../../Zotlabs/Module/Register.php:352 #, php-format msgid "Registration confirmation for %s" msgstr "Confirmación de registro para %s" -#: ../../include/account.php:382 +#: ../../include/account.php:572 #, php-format msgid "Registration request at %s" msgstr "Solicitud de registro en %s" -#: ../../include/account.php:404 +#: ../../include/account.php:594 msgid "your registration password" msgstr "su contraseña de registro" -#: ../../include/account.php:410 ../../include/account.php:473 +#: ../../include/account.php:600 ../../include/account.php:689 #, php-format msgid "Registration details for %s" msgstr "Detalles del registro de %s" -#: ../../include/account.php:484 +#: ../../include/account.php:700 msgid "Account approved." msgstr "Cuenta aprobada." -#: ../../include/account.php:524 +#: ../../include/account.php:756 #, php-format msgid "Registration revoked for %s" msgstr "Registro revocado para %s" -#: ../../include/account.php:807 ../../include/account.php:809 +#: ../../include/account.php:763 +#, php-format +msgid "Could not revoke registration for %s" +msgstr "No se ha podido revocar el registro de %s" + +#: ../../include/account.php:1179 ../../include/account.php:1181 msgid "Click here to upgrade." msgstr "Pulse aquí para actualizar" -#: ../../include/account.php:815 +#: ../../include/account.php:1187 msgid "This action exceeds the limits set by your subscription plan." msgstr "Esta acción supera los límites establecidos por su plan de suscripción " -#: ../../include/account.php:820 +#: ../../include/account.php:1192 msgid "This action is not available under your subscription plan." msgstr "Esta acción no está disponible en su plan de suscripción." -#: ../../include/photo/photo_driver.php:434 +#: ../../include/account.php:1252 +msgid "open" +msgstr "abierto" + +#: ../../include/account.php:1252 +msgid "closed" +msgstr "cerrado" + +#: ../../include/account.php:1259 +msgid "Registration is currently" +msgstr "El registro está actualmente " + +#: ../../include/account.php:1268 +msgid "please come back" +msgstr "por favor, vuelva" + +#: ../../include/photo/photo_driver.php:435 #: ../../Zotlabs/Module/Profile_photo.php:147 #: ../../Zotlabs/Module/Profile_photo.php:284 msgid "Profile Photos" @@ -6871,8 +6905,8 @@ msgstr "%sha compartido un/una %scon usted" msgid "%1$s's bookmarks" msgstr "Marcadores de %1$s" -#: ../../include/menu.php:120 ../../include/channel.php:1539 -#: ../../include/channel.php:1543 ../../Zotlabs/Widget/Cdav.php:138 +#: ../../include/menu.php:120 ../../include/channel.php:1563 +#: ../../include/channel.php:1567 ../../Zotlabs/Widget/Cdav.php:138 #: ../../Zotlabs/Widget/Cdav.php:175 ../../Zotlabs/Module/Article_edit.php:98 #: ../../Zotlabs/Module/Group.php:253 ../../Zotlabs/Module/Card_edit.php:99 #: ../../Zotlabs/Module/Oauth.php:173 ../../Zotlabs/Module/Editwebpage.php:142 @@ -6884,84 +6918,84 @@ msgstr "Marcadores de %1$s" #: ../../Zotlabs/Module/Connections.php:363 #: ../../Zotlabs/Module/Connections.php:383 ../../Zotlabs/Module/Menu.php:176 #: ../../Zotlabs/Module/Oauth2.php:194 ../../Zotlabs/Module/Thing.php:268 -#: ../../Zotlabs/Module/Wiki.php:211 ../../Zotlabs/Module/Wiki.php:384 +#: ../../Zotlabs/Module/Wiki.php:210 ../../Zotlabs/Module/Wiki.php:383 #: ../../Zotlabs/Module/Layouts.php:193 ../../Zotlabs/Lib/Apps.php:557 #: ../../Zotlabs/Lib/ThreadItem.php:149 msgid "Edit" msgstr "Editar" -#: ../../include/bbcode.php:221 ../../include/bbcode.php:916 -#: ../../include/bbcode.php:1494 ../../include/bbcode.php:1502 +#: ../../include/bbcode.php:233 ../../include/bbcode.php:928 +#: ../../include/bbcode.php:1525 ../../include/bbcode.php:1533 msgid "Image/photo" msgstr "Imagen/foto" -#: ../../include/bbcode.php:268 ../../include/bbcode.php:1519 +#: ../../include/bbcode.php:280 ../../include/bbcode.php:1550 msgid "Encrypted content" msgstr "Contenido cifrado" -#: ../../include/bbcode.php:322 +#: ../../include/bbcode.php:334 #, php-format msgid "Install %1$s element %2$s" msgstr "Instalar el elemento de%1$s%2$s" -#: ../../include/bbcode.php:326 +#: ../../include/bbcode.php:338 #, php-format msgid "" "This post contains an installable %s element, however you lack permissions " "to install it on this site." msgstr "Esta entrada contiene el elemento instalable %s, sin embargo le faltan permisos para instalarlo en este sitio." -#: ../../include/bbcode.php:336 ../../Zotlabs/Module/Impel.php:43 +#: ../../include/bbcode.php:348 ../../Zotlabs/Module/Impel.php:43 msgid "webpage" msgstr "página web" -#: ../../include/bbcode.php:339 ../../Zotlabs/Module/Impel.php:53 +#: ../../include/bbcode.php:351 ../../Zotlabs/Module/Impel.php:53 msgid "layout" msgstr "plantilla" -#: ../../include/bbcode.php:342 ../../Zotlabs/Module/Impel.php:48 +#: ../../include/bbcode.php:354 ../../Zotlabs/Module/Impel.php:48 msgid "block" msgstr "bloque" -#: ../../include/bbcode.php:345 ../../Zotlabs/Module/Impel.php:60 +#: ../../include/bbcode.php:357 ../../Zotlabs/Module/Impel.php:60 msgid "menu" msgstr "menú" -#: ../../include/bbcode.php:539 +#: ../../include/bbcode.php:551 msgid "card" msgstr "ficha" -#: ../../include/bbcode.php:541 +#: ../../include/bbcode.php:553 msgid "article" msgstr "el artículo" -#: ../../include/bbcode.php:547 ../../include/markdown.php:202 +#: ../../include/bbcode.php:559 ../../include/markdown.php:202 #, php-format msgid "%1$s wrote the following %2$s %3$s" msgstr "%1$s escribió %2$s siguiente %3$s" -#: ../../include/bbcode.php:624 ../../include/bbcode.php:632 +#: ../../include/bbcode.php:636 ../../include/bbcode.php:644 msgid "Click to open/close" msgstr "Pulsar para abrir/cerrar" -#: ../../include/bbcode.php:632 ../../include/markdown.php:255 +#: ../../include/bbcode.php:644 ../../include/markdown.php:255 msgid "spoiler" msgstr "spoiler" -#: ../../include/bbcode.php:645 +#: ../../include/bbcode.php:657 msgid "View article" msgstr "Ver el artículo" -#: ../../include/bbcode.php:645 +#: ../../include/bbcode.php:657 msgid "View summary" msgstr "Ver sumario" -#: ../../include/bbcode.php:1038 ../../include/bbcode.php:1195 -#: ../../Zotlabs/Lib/NativeWikiPage.php:605 +#: ../../include/bbcode.php:1050 ../../include/bbcode.php:1217 +#: ../../Zotlabs/Lib/NativeWikiPage.php:618 msgid "Different viewers will see this text differently" msgstr "Visitantes diferentes verán este texto de forma distinta" -#: ../../include/bbcode.php:1482 +#: ../../include/bbcode.php:1501 msgid "$1 wrote:" msgstr "$1 escribió:" @@ -6981,16 +7015,18 @@ msgstr "Nombre demasiado largo" msgid "No account identifier" msgstr "Ningún identificador de la cuenta" -#: ../../include/channel.php:212 +#: ../../include/channel.php:212 ../../Zotlabs/Module/Register.php:95 msgid "Nickname is required." msgstr "Se requiere un sobrenombre (alias)." -#: ../../include/channel.php:226 ../../include/channel.php:707 +#: ../../include/channel.php:226 ../../include/channel.php:706 +#: ../../Zotlabs/Module/Register.php:100 #: ../../Zotlabs/Module/Changeaddr.php:46 msgid "Reserved nickname. Please choose another." msgstr "Sobrenombre en uso. Por favor, elija otro." -#: ../../include/channel.php:231 ../../include/channel.php:712 +#: ../../include/channel.php:231 ../../include/channel.php:711 +#: ../../Zotlabs/Module/Register.php:105 #: ../../Zotlabs/Module/Changeaddr.php:51 msgid "" "Nickname has unsupported characters or is already being used on this site." @@ -7004,192 +7040,192 @@ msgstr "No ha sido posible recuperar la identidad creada" msgid "Default Profile" msgstr "Perfil principal" -#: ../../include/channel.php:640 ../../include/channel.php:729 +#: ../../include/channel.php:639 ../../include/channel.php:728 msgid "Unable to retrieve modified identity" msgstr "No se puede recuperar la identidad modficada" -#: ../../include/channel.php:1386 +#: ../../include/channel.php:1410 msgid "Requested channel is not available." msgstr "El canal solicitado no está disponible." -#: ../../include/channel.php:1532 ../../Zotlabs/Module/Profiles.php:730 +#: ../../include/channel.php:1556 ../../Zotlabs/Module/Profiles.php:730 msgid "Change profile photo" msgstr "Cambiar la foto del perfil" -#: ../../include/channel.php:1540 +#: ../../include/channel.php:1564 msgid "Create New Profile" msgstr "Crear un nuevo perfil" -#: ../../include/channel.php:1558 ../../Zotlabs/Module/Profiles.php:822 +#: ../../include/channel.php:1582 ../../Zotlabs/Module/Profiles.php:822 msgid "Profile Image" msgstr "Imagen del perfil" -#: ../../include/channel.php:1561 +#: ../../include/channel.php:1585 msgid "Visible to everybody" msgstr "Visible para todos" -#: ../../include/channel.php:1562 ../../Zotlabs/Module/Profiles.php:727 +#: ../../include/channel.php:1586 ../../Zotlabs/Module/Profiles.php:727 #: ../../Zotlabs/Module/Profiles.php:826 msgid "Edit visibility" msgstr "Editar visibilidad" -#: ../../include/channel.php:1638 ../../include/channel.php:1766 +#: ../../include/channel.php:1662 ../../include/channel.php:1790 msgid "Gender:" msgstr "Género:" -#: ../../include/channel.php:1639 ../../include/channel.php:1810 +#: ../../include/channel.php:1663 ../../include/channel.php:1834 msgid "Status:" msgstr "Estado:" -#: ../../include/channel.php:1640 ../../include/channel.php:1834 +#: ../../include/channel.php:1664 ../../include/channel.php:1858 msgid "Homepage:" msgstr "Página personal:" -#: ../../include/channel.php:1641 +#: ../../include/channel.php:1665 msgid "Online Now" msgstr "Ahora en línea" -#: ../../include/channel.php:1694 +#: ../../include/channel.php:1718 msgid "Change your profile photo" msgstr "Cambiar su foto del perfil" -#: ../../include/channel.php:1725 +#: ../../include/channel.php:1749 msgid "Trans" msgstr "Trans" -#: ../../include/channel.php:1764 +#: ../../include/channel.php:1788 #: ../../Zotlabs/Module/Settings/Channel.php:501 msgid "Full Name:" msgstr "Nombre completo:" -#: ../../include/channel.php:1771 +#: ../../include/channel.php:1795 msgid "Like this channel" msgstr "Me gusta este canal" -#: ../../include/channel.php:1795 +#: ../../include/channel.php:1819 msgid "j F, Y" msgstr "j F Y" -#: ../../include/channel.php:1796 +#: ../../include/channel.php:1820 msgid "j F" msgstr "j F" -#: ../../include/channel.php:1803 +#: ../../include/channel.php:1827 msgid "Birthday:" msgstr "Cumpleaños:" -#: ../../include/channel.php:1807 ../../Zotlabs/Module/Directory.php:349 +#: ../../include/channel.php:1831 ../../Zotlabs/Module/Directory.php:349 msgid "Age:" msgstr "Edad:" -#: ../../include/channel.php:1816 +#: ../../include/channel.php:1840 #, php-format msgid "for %1$d %2$s" msgstr "por %1$d %2$s" -#: ../../include/channel.php:1828 +#: ../../include/channel.php:1852 msgid "Tags:" msgstr "Etiquetas:" -#: ../../include/channel.php:1832 +#: ../../include/channel.php:1856 msgid "Sexual Preference:" msgstr "Orientación sexual:" -#: ../../include/channel.php:1836 ../../Zotlabs/Module/Directory.php:367 +#: ../../include/channel.php:1860 ../../Zotlabs/Module/Directory.php:367 msgid "Hometown:" msgstr "Lugar de nacimiento:" -#: ../../include/channel.php:1838 +#: ../../include/channel.php:1862 msgid "Political Views:" msgstr "Posición política:" -#: ../../include/channel.php:1840 +#: ../../include/channel.php:1864 msgid "Religion:" msgstr "Religión:" -#: ../../include/channel.php:1842 ../../Zotlabs/Module/Directory.php:369 +#: ../../include/channel.php:1866 ../../Zotlabs/Module/Directory.php:369 msgid "About:" msgstr "Sobre mí:" -#: ../../include/channel.php:1844 +#: ../../include/channel.php:1868 msgid "Hobbies/Interests:" msgstr "Aficciones o intereses:" -#: ../../include/channel.php:1846 +#: ../../include/channel.php:1870 msgid "Likes:" msgstr "Me gusta:" -#: ../../include/channel.php:1848 +#: ../../include/channel.php:1872 msgid "Dislikes:" msgstr "No me gusta:" -#: ../../include/channel.php:1850 +#: ../../include/channel.php:1874 msgid "Contact information and Social Networks:" msgstr "Información de contacto y redes sociales:" -#: ../../include/channel.php:1852 +#: ../../include/channel.php:1876 msgid "My other channels:" msgstr "Mis otros canales:" -#: ../../include/channel.php:1854 +#: ../../include/channel.php:1878 msgid "Musical interests:" msgstr "Preferencias musicales:" -#: ../../include/channel.php:1856 +#: ../../include/channel.php:1880 msgid "Books, literature:" msgstr "Libros, literatura:" -#: ../../include/channel.php:1858 +#: ../../include/channel.php:1882 msgid "Television:" msgstr "Televisión:" -#: ../../include/channel.php:1860 +#: ../../include/channel.php:1884 msgid "Film/dance/culture/entertainment:" msgstr "Cine, danza, cultura, entretenimiento:" -#: ../../include/channel.php:1862 +#: ../../include/channel.php:1886 msgid "Love/Romance:" msgstr "Vida sentimental o amorosa:" -#: ../../include/channel.php:1864 +#: ../../include/channel.php:1888 msgid "Work/employment:" msgstr "Trabajo:" -#: ../../include/channel.php:1866 +#: ../../include/channel.php:1890 msgid "School/education:" msgstr "Estudios:" -#: ../../include/channel.php:1887 ../../Zotlabs/Module/Profperm.php:113 +#: ../../include/channel.php:1911 ../../Zotlabs/Module/Profperm.php:113 #: ../../Zotlabs/Lib/Apps.php:362 msgid "Profile" msgstr "Perfil" -#: ../../include/channel.php:1889 +#: ../../include/channel.php:1913 msgid "Like this thing" msgstr "Me gusta esto" -#: ../../include/channel.php:1890 ../../Zotlabs/Module/Events.php:699 +#: ../../include/channel.php:1914 ../../Zotlabs/Module/Events.php:699 msgid "Export" msgstr "Exportar" -#: ../../include/channel.php:2329 ../../Zotlabs/Module/Cover_photo.php:304 +#: ../../include/channel.php:2353 ../../Zotlabs/Module/Cover_photo.php:304 msgid "cover photo" msgstr "Imagen de portada del perfil" -#: ../../include/channel.php:2598 ../../Zotlabs/Module/Rmagic.php:96 -#: ../../boot.php:1712 +#: ../../include/channel.php:2622 ../../Zotlabs/Module/Rmagic.php:96 +#: ../../boot.php:1717 msgid "Remote Authentication" msgstr "Acceso desde su servidor" -#: ../../include/channel.php:2599 ../../Zotlabs/Module/Rmagic.php:97 +#: ../../include/channel.php:2623 ../../Zotlabs/Module/Rmagic.php:97 msgid "Enter your channel address (e.g. channel@example.com)" msgstr "Introduzca la dirección del canal (p.ej. canal@ejemplo.com)" -#: ../../include/channel.php:2600 ../../Zotlabs/Module/Rmagic.php:98 +#: ../../include/channel.php:2624 ../../Zotlabs/Module/Rmagic.php:98 msgid "Authenticate" msgstr "Acceder" -#: ../../include/channel.php:2758 ../../Zotlabs/Module/Admin/Accounts.php:91 +#: ../../include/channel.php:2782 ../../Zotlabs/Module/Admin/Accounts.php:184 #, php-format msgid "Account '%s' deleted" msgstr "La cuenta '%s' ha sido eliminada" @@ -7199,49 +7235,49 @@ msgstr "La cuenta '%s' ha sido eliminada" msgid "Visible to your default audience" msgstr "Visible para su público predeterminado." -#: ../../include/acl_selectors.php:99 +#: ../../include/acl_selectors.php:100 msgid "Profile-Based Privacy Groups" msgstr "Grupos de privacidad basados en perfiles" -#: ../../include/acl_selectors.php:118 +#: ../../include/acl_selectors.php:119 msgid "Private Forum" msgstr "Foro privado" -#: ../../include/acl_selectors.php:124 ../../Zotlabs/Widget/Forums.php:100 -#: ../../Zotlabs/Widget/Activity_filter.php:115 +#: ../../include/acl_selectors.php:125 ../../Zotlabs/Widget/Forums.php:100 +#: ../../Zotlabs/Widget/Activity_filter.php:123 #: ../../Zotlabs/Widget/Notifications.php:139 #: ../../Zotlabs/Widget/Notifications.php:140 msgid "Forums" msgstr "Foros" -#: ../../include/acl_selectors.php:135 +#: ../../include/acl_selectors.php:136 #: ../../Zotlabs/Lib/PermissionDescription.php:107 msgid "Only me" msgstr "Sólo yo" -#: ../../include/acl_selectors.php:142 +#: ../../include/acl_selectors.php:143 msgid "Share with" msgstr "Compartir con " -#: ../../include/acl_selectors.php:143 +#: ../../include/acl_selectors.php:144 msgid "Custom selection" msgstr "Selección personalizada" -#: ../../include/acl_selectors.php:145 +#: ../../include/acl_selectors.php:146 msgid "" "Select \"Allow\" to allow viewing. \"Don't allow\" lets you override and " "limit the scope of \"Allow\"." msgstr "Seleccione \"Permitir\" para permitir la visualización. \"No permitir\" le permite anular y limitar el alcance de \"Permitir\"." -#: ../../include/acl_selectors.php:146 ../../Zotlabs/Module/Authorize.php:32 +#: ../../include/acl_selectors.php:147 ../../Zotlabs/Module/Authorize.php:32 msgid "Allow" msgstr "Permitir" -#: ../../include/acl_selectors.php:147 +#: ../../include/acl_selectors.php:148 msgid "Don't allow" msgstr "No permitir" -#: ../../include/acl_selectors.php:180 +#: ../../include/acl_selectors.php:181 #, php-format msgid "" "Post permissions %s cannot be changed %s after a post is shared.
These" @@ -7440,28 +7476,28 @@ msgstr "Compartir esto" msgid "share" msgstr "compartir" -#: ../../Zotlabs/Widget/Pinned.php:123 ../../Zotlabs/Widget/Pinned.php:124 +#: ../../Zotlabs/Widget/Pinned.php:122 ../../Zotlabs/Widget/Pinned.php:123 #, php-format msgid "View %s's profile - %s" msgstr "Ver el perfil de %s - %s" -#: ../../Zotlabs/Widget/Pinned.php:128 ../../Zotlabs/Lib/ThreadItem.php:414 +#: ../../Zotlabs/Widget/Pinned.php:127 ../../Zotlabs/Lib/ThreadItem.php:414 msgid "via" msgstr "mediante" -#: ../../Zotlabs/Widget/Pinned.php:143 ../../Zotlabs/Lib/ThreadItem.php:445 +#: ../../Zotlabs/Widget/Pinned.php:141 ../../Zotlabs/Lib/ThreadItem.php:445 msgid "Attendance Options" msgstr "Opciones de participación o asistencia" -#: ../../Zotlabs/Widget/Pinned.php:144 ../../Zotlabs/Lib/ThreadItem.php:447 +#: ../../Zotlabs/Widget/Pinned.php:142 ../../Zotlabs/Lib/ThreadItem.php:447 msgid "Voting Options" msgstr "Opciones de votación" -#: ../../Zotlabs/Widget/Pinned.php:156 ../../Zotlabs/Lib/ThreadItem.php:471 +#: ../../Zotlabs/Widget/Pinned.php:154 ../../Zotlabs/Lib/ThreadItem.php:471 msgid "Pinned post" msgstr "Entradas ancladas" -#: ../../Zotlabs/Widget/Pinned.php:158 +#: ../../Zotlabs/Widget/Pinned.php:156 msgid "Don't show" msgstr "No mostrar" @@ -7487,7 +7523,7 @@ msgid "Channel Calendar" msgstr "Calendario del canal" #: ../../Zotlabs/Widget/Cdav.php:129 ../../Zotlabs/Widget/Cdav.php:143 -#: ../../Zotlabs/Module/Cdav.php:1055 +#: ../../Zotlabs/Module/Cdav.php:1056 msgid "CalDAV Calendars" msgstr "Calendarios CalDAV" @@ -7508,7 +7544,7 @@ msgid "Create new CalDAV calendar" msgstr "Crear un nuevo calendario CalDAV" #: ../../Zotlabs/Widget/Cdav.php:140 ../../Zotlabs/Widget/Cdav.php:178 -#: ../../Zotlabs/Module/Cdav.php:1059 ../../Zotlabs/Module/Cdav.php:1387 +#: ../../Zotlabs/Module/Cdav.php:1060 ../../Zotlabs/Module/Cdav.php:1388 #: ../../Zotlabs/Module/Webpages.php:254 #: ../../Zotlabs/Module/New_channel.php:189 #: ../../Zotlabs/Module/Blocks.php:159 ../../Zotlabs/Module/Profiles.php:800 @@ -7526,7 +7562,7 @@ msgstr "Nombre del calendario" msgid "Calendar Tools" msgstr "Gestión de calendarios" -#: ../../Zotlabs/Widget/Cdav.php:143 ../../Zotlabs/Module/Cdav.php:1055 +#: ../../Zotlabs/Widget/Cdav.php:143 ../../Zotlabs/Module/Cdav.php:1056 msgid "Channel Calendars" msgstr "Calendarios del canal" @@ -7611,23 +7647,23 @@ msgid "Bookmarked Chatrooms" msgstr "Salas de chat preferidas" #: ../../Zotlabs/Widget/Wiki_page_history.php:23 -#: ../../Zotlabs/Lib/NativeWikiPage.php:564 +#: ../../Zotlabs/Lib/NativeWikiPage.php:577 msgctxt "wiki_history" msgid "Message" msgstr "Mensaje" #: ../../Zotlabs/Widget/Wiki_page_history.php:24 -#: ../../Zotlabs/Lib/NativeWikiPage.php:565 +#: ../../Zotlabs/Lib/NativeWikiPage.php:578 msgid "Date" msgstr "Fecha" #: ../../Zotlabs/Widget/Wiki_page_history.php:25 -#: ../../Zotlabs/Module/Wiki.php:367 ../../Zotlabs/Lib/NativeWikiPage.php:566 +#: ../../Zotlabs/Module/Wiki.php:366 ../../Zotlabs/Lib/NativeWikiPage.php:579 msgid "Revert" msgstr "Revertir" #: ../../Zotlabs/Widget/Wiki_page_history.php:26 -#: ../../Zotlabs/Lib/NativeWikiPage.php:567 +#: ../../Zotlabs/Lib/NativeWikiPage.php:580 msgid "Compare" msgstr "Comparar" @@ -7663,13 +7699,13 @@ msgstr "Nuevo mensaje" msgid "photo/image" msgstr "foto/imagen" -#: ../../Zotlabs/Widget/Admin.php:22 ../../Zotlabs/Module/Admin/Site.php:292 +#: ../../Zotlabs/Widget/Admin.php:22 ../../Zotlabs/Module/Admin/Site.php:411 msgid "Site" msgstr "Sitio" #: ../../Zotlabs/Widget/Admin.php:23 -#: ../../Zotlabs/Module/Admin/Accounts.php:167 -#: ../../Zotlabs/Module/Admin/Accounts.php:180 +#: ../../Zotlabs/Module/Admin/Accounts.php:308 +#: ../../Zotlabs/Module/Admin/Accounts.php:327 #: ../../Zotlabs/Module/Admin.php:96 msgid "Accounts" msgstr "Cuentas" @@ -7680,7 +7716,7 @@ msgstr "Inscripciones de nuevos miembros pendientes de aprobación" #: ../../Zotlabs/Widget/Admin.php:24 #: ../../Zotlabs/Module/Admin/Channels.php:146 -#: ../../Zotlabs/Module/Admin.php:114 +#: ../../Zotlabs/Module/Admin.php:117 msgid "Channels" msgstr "Canales" @@ -7724,85 +7760,85 @@ msgstr "Informes" msgid "Addon Features" msgstr "Características del addon" -#: ../../Zotlabs/Widget/Activity_filter.php:33 +#: ../../Zotlabs/Widget/Activity_filter.php:37 msgid "Direct Messages" msgstr "Mensajes directos" -#: ../../Zotlabs/Widget/Activity_filter.php:37 +#: ../../Zotlabs/Widget/Activity_filter.php:41 msgid "Show direct (private) messages" msgstr "Mostrar mensajes (privados) directos" -#: ../../Zotlabs/Widget/Activity_filter.php:42 +#: ../../Zotlabs/Widget/Activity_filter.php:46 msgid "Events" msgstr "Eventos" -#: ../../Zotlabs/Widget/Activity_filter.php:46 +#: ../../Zotlabs/Widget/Activity_filter.php:50 msgid "Show posts that include events" msgstr "Mostrar entradas que incluyan eventos" -#: ../../Zotlabs/Widget/Activity_filter.php:52 +#: ../../Zotlabs/Widget/Activity_filter.php:56 msgid "Polls" msgstr "Encuestas" -#: ../../Zotlabs/Widget/Activity_filter.php:56 +#: ../../Zotlabs/Widget/Activity_filter.php:60 msgid "Show posts that include polls" msgstr "Mostrar entradas que incluyan encuestas" -#: ../../Zotlabs/Widget/Activity_filter.php:77 +#: ../../Zotlabs/Widget/Activity_filter.php:83 #, php-format msgid "Show posts related to the %s privacy group" msgstr "Mostrar entradas relacionadas con el grupo %s" -#: ../../Zotlabs/Widget/Activity_filter.php:86 +#: ../../Zotlabs/Widget/Activity_filter.php:92 msgid "Show my privacy groups" msgstr "Mostrar mis grupos de canales" -#: ../../Zotlabs/Widget/Activity_filter.php:108 +#: ../../Zotlabs/Widget/Activity_filter.php:116 msgid "Show posts to this forum" msgstr "Mostrar las entradas en este foro" -#: ../../Zotlabs/Widget/Activity_filter.php:119 +#: ../../Zotlabs/Widget/Activity_filter.php:127 msgid "Show forums" msgstr "Mostrar los foros" -#: ../../Zotlabs/Widget/Activity_filter.php:133 +#: ../../Zotlabs/Widget/Activity_filter.php:141 msgid "Starred Posts" msgstr "Entradas preferidas" -#: ../../Zotlabs/Widget/Activity_filter.php:137 +#: ../../Zotlabs/Widget/Activity_filter.php:145 msgid "Show posts that I have starred" msgstr "Mostrar entradas que he señalado como preferidas" -#: ../../Zotlabs/Widget/Activity_filter.php:148 +#: ../../Zotlabs/Widget/Activity_filter.php:156 msgid "Personal Posts" msgstr "Entradas personales" -#: ../../Zotlabs/Widget/Activity_filter.php:152 +#: ../../Zotlabs/Widget/Activity_filter.php:160 msgid "Show posts that mention or involve me" msgstr "Mostrar entradas que me mencionen o involucren" -#: ../../Zotlabs/Widget/Activity_filter.php:173 +#: ../../Zotlabs/Widget/Activity_filter.php:183 #, php-format msgid "Show posts that I have filed to %s" msgstr "Mostrar las entradas que he enviado a %s" -#: ../../Zotlabs/Widget/Activity_filter.php:183 +#: ../../Zotlabs/Widget/Activity_filter.php:193 msgid "Show filed post categories" msgstr "Mostrar los temas de las entradas archivadas" -#: ../../Zotlabs/Widget/Activity_filter.php:197 +#: ../../Zotlabs/Widget/Activity_filter.php:207 msgid "Panel search" msgstr "Panel de búsqueda" -#: ../../Zotlabs/Widget/Activity_filter.php:207 +#: ../../Zotlabs/Widget/Activity_filter.php:217 msgid "Filter by name" msgstr "Filtrar por nombre" -#: ../../Zotlabs/Widget/Activity_filter.php:222 +#: ../../Zotlabs/Widget/Activity_filter.php:232 msgid "Remove active filter" msgstr "Eliminar el filtro activo" -#: ../../Zotlabs/Widget/Activity_filter.php:238 +#: ../../Zotlabs/Widget/Activity_filter.php:248 msgid "Stream Filters" msgstr "Filtros del stream" @@ -8219,29 +8255,29 @@ msgstr "No se puede copiar la carpeta en sí misma." msgid "Can not move folder \"%s\" into itself." msgstr "No se puede mover la carpeta\"%s\" en sí misma." -#: ../../Zotlabs/Module/Network.php:105 +#: ../../Zotlabs/Module/Network.php:107 msgid "No such group" msgstr "No se encuentra el grupo" -#: ../../Zotlabs/Module/Network.php:152 +#: ../../Zotlabs/Module/Network.php:156 msgid "No such channel" msgstr "No se encuentra el canal" -#: ../../Zotlabs/Module/Network.php:164 ../../Zotlabs/Module/Channel.php:221 +#: ../../Zotlabs/Module/Network.php:168 ../../Zotlabs/Module/Channel.php:221 msgid "Search Results For:" msgstr "Buscar resultados para:" -#: ../../Zotlabs/Module/Network.php:205 ../../Zotlabs/Module/Channel.php:256 +#: ../../Zotlabs/Module/Network.php:209 ../../Zotlabs/Module/Channel.php:256 #: ../../Zotlabs/Module/Hq.php:125 ../../Zotlabs/Module/Pubstream.php:95 #: ../../Zotlabs/Module/Display.php:76 msgid "Reset form" msgstr "Reiniciar el formulario" -#: ../../Zotlabs/Module/Network.php:239 +#: ../../Zotlabs/Module/Network.php:243 msgid "Privacy group is empty" msgstr "El grupo de canales está vacío" -#: ../../Zotlabs/Module/Network.php:249 +#: ../../Zotlabs/Module/Network.php:253 msgid "Privacy group: " msgstr "Grupo de canales: " @@ -8278,7 +8314,7 @@ msgid "" msgstr "Utilice este formulario para importar entradas y contenido desde un archivo de exportación." #: ../../Zotlabs/Module/Import_items.php:127 -#: ../../Zotlabs/Module/Import.php:629 +#: ../../Zotlabs/Module/Import.php:630 msgid "File to Upload" msgstr "Fichero para subir" @@ -8291,42 +8327,42 @@ msgstr "Su paquete de servicios solo permite %d canales." msgid "No channel. Import failed." msgstr "No hay canal. La importación ha fallado" -#: ../../Zotlabs/Module/Import.php:622 +#: ../../Zotlabs/Module/Import.php:623 msgid "You must be logged in to use this feature." msgstr "Debe estar registrado para poder usar esta funcionalidad." -#: ../../Zotlabs/Module/Import.php:627 +#: ../../Zotlabs/Module/Import.php:628 msgid "Import Channel" msgstr "Importar canal" -#: ../../Zotlabs/Module/Import.php:628 +#: ../../Zotlabs/Module/Import.php:629 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 "Emplee este formulario para importar un canal desde un servidor/hub diferente. Puede recuperar el canal desde el antiguo servidor/hub a través de la red o proporcionando un fichero de exportación." -#: ../../Zotlabs/Module/Import.php:630 +#: ../../Zotlabs/Module/Import.php:631 msgid "Or provide the old server/hub details" msgstr "O proporcione los detalles de su antiguo servidor/hub" -#: ../../Zotlabs/Module/Import.php:632 +#: ../../Zotlabs/Module/Import.php:633 msgid "Your old identity address (xyz@example.com)" msgstr "Su identidad en el antiguo servidor (canal@ejemplo.com)" -#: ../../Zotlabs/Module/Import.php:633 +#: ../../Zotlabs/Module/Import.php:634 msgid "Your old login email address" msgstr "Su antigua dirección de correo electrónico" -#: ../../Zotlabs/Module/Import.php:634 +#: ../../Zotlabs/Module/Import.php:635 msgid "Your old login password" msgstr "Su antigua contraseña" -#: ../../Zotlabs/Module/Import.php:635 +#: ../../Zotlabs/Module/Import.php:636 msgid "Import a few months of posts if possible (limited by available memory" msgstr "Importar unos meses de mensajes si es posible (limitado por la memoria disponible" -#: ../../Zotlabs/Module/Import.php:637 +#: ../../Zotlabs/Module/Import.php:638 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" @@ -8334,26 +8370,26 @@ msgid "" "primary location for files, photos, and media." msgstr "Para cualquiera de las opciones, elija si hacer de este servidor su nueva dirección primaria, o si su antigua dirección debe continuar con este papel. Usted podrá publicar desde cualquier ubicación, pero sólo una puede estar marcada como la ubicación principal para los ficheros, fotos y otras imágenes o vídeos." -#: ../../Zotlabs/Module/Import.php:639 +#: ../../Zotlabs/Module/Import.php:640 msgid "Make this hub my primary location" msgstr "Convertir este servidor en mi ubicación primaria" -#: ../../Zotlabs/Module/Import.php:640 +#: ../../Zotlabs/Module/Import.php:641 msgid "Move this channel (disable all previous locations)" msgstr "Mover este canal (desactivar todas las ubicaciones anteriores)" -#: ../../Zotlabs/Module/Import.php:641 +#: ../../Zotlabs/Module/Import.php:642 msgid "Use this channel nickname instead of the one provided" msgstr "Usa este alias de canal en lugar del que se proporciona" -#: ../../Zotlabs/Module/Import.php:641 +#: ../../Zotlabs/Module/Import.php:642 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 "Dejar en blanco para mantener su alias de canal . Se le asignará aleatoriamente uno similar si cualquiera de los dos nombres ya está asignado en este sitio." -#: ../../Zotlabs/Module/Import.php:643 +#: ../../Zotlabs/Module/Import.php:644 msgid "" "This process may take several minutes to complete. Please submit the form " "only once and leave this page open until finished." @@ -8380,146 +8416,150 @@ msgstr "php util/z6convert.php" msgid "from the terminal." msgstr "desde la terminal." -#: ../../Zotlabs/Module/Register.php:52 -msgid "Maximum daily site registrations exceeded. Please try again tomorrow." -msgstr "Se ha superado el límite máximo de inscripciones diarias de este sitio. Por favor, pruebe de nuevo mañana." +#: ../../Zotlabs/Module/Register.php:112 +msgid "Email address required" +msgstr "Dirección de correo electrónico requerida" -#: ../../Zotlabs/Module/Register.php:58 -msgid "" -"Please indicate acceptance of the Terms of Service. Registration failed." -msgstr "Por favor, confirme que acepta los Términos del servicio. El registro ha fallado." +#: ../../Zotlabs/Module/Register.php:153 +msgid "No password provided" +msgstr "No se ha proporcionado la contraseña" -#: ../../Zotlabs/Module/Register.php:92 -msgid "Passwords do not match." -msgstr "Las contraseñas no coinciden." +#: ../../Zotlabs/Module/Register.php:176 +msgid "Terms of Service not accepted" +msgstr "No se han aceptado los Términos del servicio" -#: ../../Zotlabs/Module/Register.php:135 -msgid "Registration successful. Continue to create your first channel..." -msgstr "Registro exitoso. Continúe creando tu primer canal..." +#: ../../Zotlabs/Module/Register.php:238 +msgid "Invitation code succesfully applied" +msgstr "El código de invitación se ha aplicado con éxito" -#: ../../Zotlabs/Module/Register.php:138 -msgid "" -"Registration successful. Please check your email for validation " -"instructions." -msgstr "Registro realizado con éxito. Por favor, compruebe su correo electrónico para ver las instrucciones para validarlo." +#: ../../Zotlabs/Module/Register.php:258 +msgid "Invitation not in time or too late" +msgstr "La invitación no llega a tiempo o llega demasiado tarde" -#: ../../Zotlabs/Module/Register.php:145 -msgid "Your registration is pending approval by the site owner." -msgstr "Su registro está pendiente de aprobación por el propietario del sitio." +#: ../../Zotlabs/Module/Register.php:264 +msgid "Invitation email failed" +msgstr "Error en el correo electrónico de invitación" + +#: ../../Zotlabs/Module/Register.php:272 +msgid "Invitation code failed" +msgstr "Código de invitación fallido" + +#: ../../Zotlabs/Module/Register.php:279 +msgid "Invitations are not available" +msgstr "No hay invitaciones disponibles" + +#: ../../Zotlabs/Module/Register.php:305 +msgid "Email address already in use" +msgstr "La dirección de correo electrónico ya está en uso" -#: ../../Zotlabs/Module/Register.php:148 -msgid "Your registration can not be processed." -msgstr "Su registro no puede ser procesado." +#: ../../Zotlabs/Module/Register.php:315 +msgid "Registration on this hub is by invitation only" +msgstr "El registro en este hub solo es posible por invitación" -#: ../../Zotlabs/Module/Register.php:195 +#: ../../Zotlabs/Module/Register.php:423 +msgid "New register request" +msgstr "Nueva solicitud de registro" + +#: ../../Zotlabs/Module/Register.php:441 +msgid "Error creating dId A" +msgstr "Error al crear dId A" + +#: ../../Zotlabs/Module/Register.php:459 msgid "Registration on this hub is disabled." msgstr "El registro está deshabilitado en este sitio." -#: ../../Zotlabs/Module/Register.php:204 +#: ../../Zotlabs/Module/Register.php:468 msgid "Registration on this hub is by approval only." msgstr "El registro en este hub está sometido a aprobación previa." -#: ../../Zotlabs/Module/Register.php:205 ../../Zotlabs/Module/Register.php:214 -msgid "Register at another affiliated hub." -msgstr "Registrarse en otro hub afiliado." +#: ../../Zotlabs/Module/Register.php:469 +msgid "Register at another affiliated hub in case when prefered" +msgstr "Regístrese en otro hub afiliado en caso de que lo prefiera" -#: ../../Zotlabs/Module/Register.php:213 +#: ../../Zotlabs/Module/Register.php:482 msgid "Registration on this hub is by invitation only." msgstr "La inscripción en este hub es sólo posible por invitación." -#: ../../Zotlabs/Module/Register.php:224 -msgid "" -"This site has exceeded the number of allowed daily account registrations. " -"Please try again tomorrow." -msgstr "Este sitio ha excedido el límite de inscripción diaria de cuentas. Por favor, inténtelo de nuevo mañana." +#: ../../Zotlabs/Module/Register.php:483 +msgid "Register at another affiliated hub" +msgstr "Regístrese en otro hub afiliado" -#: ../../Zotlabs/Module/Register.php:239 ../../Zotlabs/Module/Siteinfo.php:28 +#: ../../Zotlabs/Module/Register.php:497 ../../Zotlabs/Module/Siteinfo.php:28 msgid "Terms of Service" msgstr "Términos del servicio" -#: ../../Zotlabs/Module/Register.php:245 +#: ../../Zotlabs/Module/Register.php:503 #, php-format msgid "I accept the %s for this website" msgstr "Acepto los %s de este sitio" -#: ../../Zotlabs/Module/Register.php:252 +#: ../../Zotlabs/Module/Register.php:510 #, php-format msgid "I am over %s years of age and accept the %s for this website" msgstr "Tengo más de %s años de edad y acepto los %s de este sitio web" -#: ../../Zotlabs/Module/Register.php:257 +#: ../../Zotlabs/Module/Register.php:520 msgid "Your email address" msgstr "Su dirección de correo electrónico" -#: ../../Zotlabs/Module/Register.php:258 +#: ../../Zotlabs/Module/Register.php:522 ../../Zotlabs/Module/Oauth.php:117 +#: ../../Zotlabs/Module/Sources.php:123 ../../Zotlabs/Module/Sources.php:158 +msgid "Optional" +msgstr "Opcional" + +#: ../../Zotlabs/Module/Register.php:527 msgid "Choose a password" msgstr "Elija una contraseña" -#: ../../Zotlabs/Module/Register.php:259 +#: ../../Zotlabs/Module/Register.php:528 msgid "Please re-enter your password" msgstr "Por favor, vuelva a escribir su contraseña" -#: ../../Zotlabs/Module/Register.php:260 +#: ../../Zotlabs/Module/Register.php:530 msgid "Please enter your invitation code" msgstr "Por favor, introduzca el código de su invitación" -#: ../../Zotlabs/Module/Register.php:261 -msgid "Your Name" +#: ../../Zotlabs/Module/Register.php:532 +msgid "Your name" msgstr "Su nombre" -#: ../../Zotlabs/Module/Register.php:261 -msgid "Real names are preferred." -msgstr "Se prefieren los nombres reales" +#: ../../Zotlabs/Module/Register.php:532 +msgid "Real name is preferred" +msgstr "Se prefiere el nombre real" -#: ../../Zotlabs/Module/Register.php:263 +#: ../../Zotlabs/Module/Register.php:534 #: ../../Zotlabs/Module/New_channel.php:177 msgid "Choose a short nickname" msgstr "Elija un alias corto" -#: ../../Zotlabs/Module/Register.php:263 -#, php-format +#: ../../Zotlabs/Module/Register.php:534 msgid "" -"Your nickname will be used to create an easy to remember channel address " -"e.g. nickname%s" -msgstr "Su alias se usará para crear una dirección de canal fácil de recordar, p. ej.: alias%s" +"Your nickname will be used to create an easy to remember channel address" +msgstr "Tu alias se utilizará para crear una dirección de canal fácil de recordar" -#: ../../Zotlabs/Module/Register.php:264 -#: ../../Zotlabs/Module/New_channel.php:178 -#: ../../Zotlabs/Module/Settings/Channel.php:537 -msgid "Channel role and privacy" -msgstr "Clase de canal y privacidad" +#: ../../Zotlabs/Module/Register.php:538 +msgid "Why do you want to join this hub?" +msgstr "¿Por qué quiere unirse a este hub?" -#: ../../Zotlabs/Module/Register.php:264 -msgid "" -"Select a channel permission role for your usage needs and privacy " -"requirements." -msgstr "Seleccione unos permisos de rol del canal compatibles con sus necesidades de uso y requisitos de privacidad." +#: ../../Zotlabs/Module/Register.php:538 +msgid "This will help to review your registration" +msgstr "Esto ayudará a revisar su registro" -#: ../../Zotlabs/Module/Register.php:264 -#: ../../Zotlabs/Module/New_channel.php:178 -msgid "Read more about channel permission roles" -msgstr "Leer más sobre los roles y permisos" - -#: ../../Zotlabs/Module/Register.php:265 -msgid "no" -msgstr "no" - -#: ../../Zotlabs/Module/Register.php:265 -msgid "yes" -msgstr "sí" - -#: ../../Zotlabs/Module/Register.php:277 -#: ../../Zotlabs/Module/Admin/Site.php:294 +#: ../../Zotlabs/Module/Register.php:544 +#: ../../Zotlabs/Module/Admin/Site.php:413 msgid "Registration" msgstr "Registro" -#: ../../Zotlabs/Module/Register.php:294 +#: ../../Zotlabs/Module/Register.php:552 +msgid "I have an invite code" +msgstr "Tengo un código de invitación" + +#: ../../Zotlabs/Module/Register.php:599 msgid "" -"This site requires email verification. After completing this form, please " -"check your email for further instructions." -msgstr "Este sitio requiere verificación por correo electrónico. Después de completar este formulario, por favor revise su correo electrónico para más instrucciones." +"This site has exceeded the number of allowed daily account registrations." +msgstr "Este sitio ha superado el número permitido de registros diarios de cuentas." -#: ../../Zotlabs/Module/Search.php:22 +#: ../../Zotlabs/Module/Search.php:21 #: ../../Zotlabs/Module/Viewconnections.php:23 #: ../../Zotlabs/Module/Ratings.php:83 ../../Zotlabs/Module/Display.php:26 #: ../../Zotlabs/Module/Directory.php:73 ../../Zotlabs/Module/Directory.php:78 @@ -8527,425 +8567,425 @@ msgstr "Este sitio requiere verificación por correo electrónico. Después de c msgid "Public access denied." msgstr "Acceso público denegado." -#: ../../Zotlabs/Module/Search.php:251 +#: ../../Zotlabs/Module/Search.php:250 #, php-format msgid "Items tagged with: %s" msgstr "elementos etiquetados con: %s" -#: ../../Zotlabs/Module/Search.php:253 +#: ../../Zotlabs/Module/Search.php:252 #, php-format msgid "Search results for: %s" msgstr "Resultados de la búsqueda para: %s" -#: ../../Zotlabs/Module/Setup.php:167 +#: ../../Zotlabs/Module/Setup.php:169 msgid "$Projectname Server - Setup" msgstr "Servidor $Projectname - Instalación" -#: ../../Zotlabs/Module/Setup.php:171 +#: ../../Zotlabs/Module/Setup.php:173 msgid "Could not connect to database." msgstr "No se ha podido conectar a la base de datos." -#: ../../Zotlabs/Module/Setup.php:175 +#: ../../Zotlabs/Module/Setup.php:177 msgid "" "Could not connect to specified site URL. Possible SSL certificate or DNS " "issue." msgstr "No se puede conectar con la dirección del sitio indicada. Podría tratarse de un problema de SSL o DNS." -#: ../../Zotlabs/Module/Setup.php:182 +#: ../../Zotlabs/Module/Setup.php:184 msgid "Could not create table." msgstr "No se puede crear la tabla." -#: ../../Zotlabs/Module/Setup.php:188 +#: ../../Zotlabs/Module/Setup.php:190 msgid "Your site database has been installed." msgstr "La base de datos del sitio ha sido instalada." -#: ../../Zotlabs/Module/Setup.php:194 +#: ../../Zotlabs/Module/Setup.php:196 msgid "" "You may need to import the file \"install/schema_xxx.sql\" manually using a " "database client." msgstr "Podría tener que importar manualmente el fichero \"install/schema_xxx.sql\" usando un cliente de base de datos." -#: ../../Zotlabs/Module/Setup.php:195 ../../Zotlabs/Module/Setup.php:259 -#: ../../Zotlabs/Module/Setup.php:766 +#: ../../Zotlabs/Module/Setup.php:197 ../../Zotlabs/Module/Setup.php:261 +#: ../../Zotlabs/Module/Setup.php:768 msgid "Please see the file \"install/INSTALL.txt\"." msgstr "Por favor, lea el fichero \"install/INSTALL.txt\"." -#: ../../Zotlabs/Module/Setup.php:256 +#: ../../Zotlabs/Module/Setup.php:258 msgid "System check" msgstr "Verificación del sistema" -#: ../../Zotlabs/Module/Setup.php:260 ../../Zotlabs/Module/Cdav.php:1036 +#: ../../Zotlabs/Module/Setup.php:262 ../../Zotlabs/Module/Cdav.php:1037 #: ../../Zotlabs/Module/Events.php:698 ../../Zotlabs/Module/Events.php:707 #: ../../Zotlabs/Module/Cal.php:204 ../../Zotlabs/Module/Photos.php:956 msgid "Next" msgstr "Siguiente" -#: ../../Zotlabs/Module/Setup.php:261 +#: ../../Zotlabs/Module/Setup.php:263 msgid "Check again" msgstr "Verificar de nuevo" -#: ../../Zotlabs/Module/Setup.php:282 +#: ../../Zotlabs/Module/Setup.php:284 msgid "Database connection" msgstr "Conexión a la base de datos" -#: ../../Zotlabs/Module/Setup.php:283 +#: ../../Zotlabs/Module/Setup.php:285 msgid "" "In order to install $Projectname we need to know how to connect to your " "database." msgstr "Para instalar $Projectname es necesario saber cómo conectar con su base de datos." -#: ../../Zotlabs/Module/Setup.php:284 +#: ../../Zotlabs/Module/Setup.php:286 msgid "" "Please contact your hosting provider or site administrator if you have " "questions about these settings." msgstr "Por favor, contacte con el proveedor de servicios o el administrador del sitio si tiene dudas sobre estos ajustes." -#: ../../Zotlabs/Module/Setup.php:285 +#: ../../Zotlabs/Module/Setup.php:287 msgid "" "The database you specify below should already exist. If it does not, please " "create it before continuing." msgstr "La base de datos que especifique a continuación debe existir ya. Si no es así, por favor, créela antes de seguir." -#: ../../Zotlabs/Module/Setup.php:289 +#: ../../Zotlabs/Module/Setup.php:291 msgid "Database Server Name" msgstr "Nombre del servidor de base de datos" -#: ../../Zotlabs/Module/Setup.php:289 +#: ../../Zotlabs/Module/Setup.php:291 msgid "Default is 127.0.0.1" msgstr "De forma predeterminada es 127.0.0.1" -#: ../../Zotlabs/Module/Setup.php:290 +#: ../../Zotlabs/Module/Setup.php:292 msgid "Database Port" msgstr "Puerto de la base de datos" -#: ../../Zotlabs/Module/Setup.php:290 +#: ../../Zotlabs/Module/Setup.php:292 msgid "Communication port number - use 0 for default" msgstr "Número del puerto de comunicaciones - use 0 como valor por defecto" -#: ../../Zotlabs/Module/Setup.php:291 +#: ../../Zotlabs/Module/Setup.php:293 msgid "Database Login Name" msgstr "Usuario de la base de datos" -#: ../../Zotlabs/Module/Setup.php:292 +#: ../../Zotlabs/Module/Setup.php:294 msgid "Database Login Password" msgstr "Contraseña de acceso a la base de datos" -#: ../../Zotlabs/Module/Setup.php:293 +#: ../../Zotlabs/Module/Setup.php:295 msgid "Database Name" msgstr "Nombre de la base de datos" -#: ../../Zotlabs/Module/Setup.php:294 +#: ../../Zotlabs/Module/Setup.php:296 msgid "Database Type" msgstr "Tipo de base de datos" -#: ../../Zotlabs/Module/Setup.php:296 ../../Zotlabs/Module/Setup.php:336 +#: ../../Zotlabs/Module/Setup.php:298 ../../Zotlabs/Module/Setup.php:338 msgid "Site administrator email address" msgstr "Dirección de correo electrónico del administrador del sitio" -#: ../../Zotlabs/Module/Setup.php:296 ../../Zotlabs/Module/Setup.php:336 +#: ../../Zotlabs/Module/Setup.php:298 ../../Zotlabs/Module/Setup.php:338 msgid "" "Your account email address must match this in order to use the web admin " "panel." msgstr "Su cuenta deberá usar la misma dirección de correo electrónico para poder utilizar el panel de administración web." -#: ../../Zotlabs/Module/Setup.php:297 ../../Zotlabs/Module/Setup.php:338 +#: ../../Zotlabs/Module/Setup.php:299 ../../Zotlabs/Module/Setup.php:340 msgid "Website URL" msgstr "Dirección del sitio web" -#: ../../Zotlabs/Module/Setup.php:297 ../../Zotlabs/Module/Setup.php:338 +#: ../../Zotlabs/Module/Setup.php:299 ../../Zotlabs/Module/Setup.php:340 msgid "Please use SSL (https) URL if available." msgstr "Por favor, use SSL (https) si está disponible." -#: ../../Zotlabs/Module/Setup.php:298 ../../Zotlabs/Module/Setup.php:340 +#: ../../Zotlabs/Module/Setup.php:300 ../../Zotlabs/Module/Setup.php:342 msgid "Please select a default timezone for your website" msgstr "Por favor, selecciones el huso horario por defecto de su sitio web" -#: ../../Zotlabs/Module/Setup.php:325 +#: ../../Zotlabs/Module/Setup.php:327 msgid "Site settings" msgstr "Ajustes del sitio" -#: ../../Zotlabs/Module/Setup.php:379 +#: ../../Zotlabs/Module/Setup.php:381 msgid "PHP version 7.1 or greater is required." msgstr "Se requiere la versión 7.1 o superior de PHP." -#: ../../Zotlabs/Module/Setup.php:380 +#: ../../Zotlabs/Module/Setup.php:382 msgid "PHP version" msgstr "Versión de PHP" -#: ../../Zotlabs/Module/Setup.php:396 +#: ../../Zotlabs/Module/Setup.php:398 msgid "Could not find a command line version of PHP in the web server PATH." msgstr "No se puede encontrar una versión en línea de comandos de PHP en la ruta del servidor web." -#: ../../Zotlabs/Module/Setup.php:397 +#: ../../Zotlabs/Module/Setup.php:399 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 "Si no tiene instalada la versión de línea de comandos de PHP en su servidor, no podrá realizar envíos en segundo plano mediante cron." -#: ../../Zotlabs/Module/Setup.php:401 +#: ../../Zotlabs/Module/Setup.php:403 msgid "PHP executable path" msgstr "Ruta del ejecutable PHP" -#: ../../Zotlabs/Module/Setup.php:401 +#: ../../Zotlabs/Module/Setup.php:403 msgid "" "Enter full path to php executable. You can leave this blank to continue the " "installation." msgstr "Introducir la ruta completa del ejecutable PHP. Puede dejar la línea en blanco para continuar la instalación." -#: ../../Zotlabs/Module/Setup.php:406 +#: ../../Zotlabs/Module/Setup.php:408 msgid "Command line PHP" msgstr "PHP en línea de comandos" -#: ../../Zotlabs/Module/Setup.php:416 +#: ../../Zotlabs/Module/Setup.php:418 msgid "" "Unable to check command line PHP, as shell_exec() is disabled. This is " "required." msgstr "No se puede comprobar la línea de comandos PHP, ya que shell_exec() está deshabilitado. Es necesario que esté activado." -#: ../../Zotlabs/Module/Setup.php:420 +#: ../../Zotlabs/Module/Setup.php:422 msgid "" "The command line version of PHP on your system does not have " "\"register_argc_argv\" enabled." msgstr "La línea de comandos PHP de su sistema no tiene activado \"register_argc_argv\"." -#: ../../Zotlabs/Module/Setup.php:421 +#: ../../Zotlabs/Module/Setup.php:423 msgid "This is required for message delivery to work." msgstr "Esto es necesario para que funcione la transmisión de mensajes." -#: ../../Zotlabs/Module/Setup.php:424 +#: ../../Zotlabs/Module/Setup.php:426 msgid "PHP register_argc_argv" msgstr "PHP register_argc_argv" -#: ../../Zotlabs/Module/Setup.php:444 +#: ../../Zotlabs/Module/Setup.php:446 msgid "" "This is not sufficient to upload larger images or files. You should be able " "to upload at least 4 MB at once." msgstr "Esto no es suficiente para subir imágenes o archivos más grandes. Usted debe ser capaz de subir al menos 4 MB a la vez." -#: ../../Zotlabs/Module/Setup.php:446 +#: ../../Zotlabs/Module/Setup.php:448 #, 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 "La carga máxima que se le permite subir está establecida en %s. El tamaño máximo de un fichero está establecido en %s. Está permitido subir hasta un máximo de %d ficheros de una sola vez." -#: ../../Zotlabs/Module/Setup.php:452 +#: ../../Zotlabs/Module/Setup.php:454 msgid "You can adjust these settings in the server php.ini file." msgstr "Puede ajustar estos valores en el fichero php.ini de su servidor." -#: ../../Zotlabs/Module/Setup.php:454 +#: ../../Zotlabs/Module/Setup.php:456 msgid "PHP upload limits" msgstr "Límites PHP de subida" -#: ../../Zotlabs/Module/Setup.php:477 +#: ../../Zotlabs/Module/Setup.php:479 msgid "" "Error: the \"openssl_pkey_new\" function on this system is not able to " "generate encryption keys" msgstr "Error: La función \"openssl_pkey_new\" en este sistema no es capaz de general claves de cifrado." -#: ../../Zotlabs/Module/Setup.php:478 +#: ../../Zotlabs/Module/Setup.php:480 msgid "" "If running under Windows, please see " "\"http://www.php.net/manual/en/openssl.installation.php\"." msgstr "Si está en un servidor Windows, por favor, lea \"http://www.php.net/manual/en/openssl.installation.php\"." -#: ../../Zotlabs/Module/Setup.php:481 +#: ../../Zotlabs/Module/Setup.php:483 msgid "Generate encryption keys" msgstr "Generar claves de cifrado" -#: ../../Zotlabs/Module/Setup.php:498 +#: ../../Zotlabs/Module/Setup.php:500 msgid "libCurl PHP module" msgstr "módulo libCurl PHP" -#: ../../Zotlabs/Module/Setup.php:499 +#: ../../Zotlabs/Module/Setup.php:501 msgid "GD graphics PHP module" msgstr "módulo PHP GD graphics" -#: ../../Zotlabs/Module/Setup.php:500 +#: ../../Zotlabs/Module/Setup.php:502 msgid "OpenSSL PHP module" msgstr "módulo PHP OpenSSL" -#: ../../Zotlabs/Module/Setup.php:501 +#: ../../Zotlabs/Module/Setup.php:503 msgid "PDO database PHP module" msgstr "Módulo PHP de la base de datos PDO " -#: ../../Zotlabs/Module/Setup.php:502 +#: ../../Zotlabs/Module/Setup.php:504 msgid "mb_string PHP module" msgstr "módulo PHP mb_string" -#: ../../Zotlabs/Module/Setup.php:503 +#: ../../Zotlabs/Module/Setup.php:505 msgid "xml PHP module" msgstr "módulo PHP xml" -#: ../../Zotlabs/Module/Setup.php:504 +#: ../../Zotlabs/Module/Setup.php:506 msgid "zip PHP module" msgstr "Módulo zip PHP" -#: ../../Zotlabs/Module/Setup.php:508 ../../Zotlabs/Module/Setup.php:510 +#: ../../Zotlabs/Module/Setup.php:510 ../../Zotlabs/Module/Setup.php:512 msgid "Apache mod_rewrite module" msgstr "módulo Apache mod_rewrite " -#: ../../Zotlabs/Module/Setup.php:508 +#: ../../Zotlabs/Module/Setup.php:510 msgid "" "Error: Apache webserver mod-rewrite module is required but not installed." msgstr "Error: se necesita el módulo del servidor web Apache mod-rewrite pero no está instalado." -#: ../../Zotlabs/Module/Setup.php:514 ../../Zotlabs/Module/Setup.php:517 +#: ../../Zotlabs/Module/Setup.php:516 ../../Zotlabs/Module/Setup.php:519 msgid "exec" msgstr "ejecutable" -#: ../../Zotlabs/Module/Setup.php:514 +#: ../../Zotlabs/Module/Setup.php:516 msgid "" "Error: exec is required but is either not installed or has been disabled in " "php.ini" msgstr "Error: se necesita un ejecutable pero o no se instaló o está deshabilitado en php.ini" -#: ../../Zotlabs/Module/Setup.php:520 ../../Zotlabs/Module/Setup.php:523 +#: ../../Zotlabs/Module/Setup.php:522 ../../Zotlabs/Module/Setup.php:525 msgid "shell_exec" msgstr "shell_exec" -#: ../../Zotlabs/Module/Setup.php:520 +#: ../../Zotlabs/Module/Setup.php:522 msgid "" "Error: shell_exec is required but is either not installed or has been " "disabled in php.ini" msgstr "Error: se necesita shell_exec pero o no se instaló o está deshabilitado en php.ini" -#: ../../Zotlabs/Module/Setup.php:528 +#: ../../Zotlabs/Module/Setup.php:530 msgid "Error: libCURL PHP module required but not installed." msgstr "Error: se necesita el módulo PHP libCURL pero no está instalado." -#: ../../Zotlabs/Module/Setup.php:532 +#: ../../Zotlabs/Module/Setup.php:534 msgid "" "Error: GD PHP module with JPEG support or ImageMagick graphics library " "required but not installed." msgstr "Error: Se requiere el módulo GD PHP con soporte para JPEG o la biblioteca de gráficos ImageMagick, pero no está instalado." -#: ../../Zotlabs/Module/Setup.php:536 +#: ../../Zotlabs/Module/Setup.php:538 msgid "Error: openssl PHP module required but not installed." msgstr "Error: el módulo PHP openssl es necesario, pero no está instalado." -#: ../../Zotlabs/Module/Setup.php:542 +#: ../../Zotlabs/Module/Setup.php:544 msgid "" "Error: PDO database PHP module missing a driver for either mysql or pgsql." msgstr "Error: El módulo PHP de la base de datos PDO carece de un controlador para mysql o pgsql." -#: ../../Zotlabs/Module/Setup.php:547 +#: ../../Zotlabs/Module/Setup.php:549 msgid "Error: PDO database PHP module required but not installed." msgstr "Error: se necesita el módulo PHP de la base de datos PDO, pero no está instalado." -#: ../../Zotlabs/Module/Setup.php:551 +#: ../../Zotlabs/Module/Setup.php:553 msgid "Error: mb_string PHP module required but not installed." msgstr "Error: el módulo PHP mb_string es necesario, pero no está instalado." -#: ../../Zotlabs/Module/Setup.php:555 +#: ../../Zotlabs/Module/Setup.php:557 msgid "Error: xml PHP module required for DAV but not installed." msgstr "Error: el módulo PHP xml es necesario para DAV, pero no está instalado." -#: ../../Zotlabs/Module/Setup.php:559 +#: ../../Zotlabs/Module/Setup.php:561 msgid "Error: zip PHP module required but not installed." msgstr "Error: se requiere el módulo zip PHP pero no está instalado." -#: ../../Zotlabs/Module/Setup.php:578 ../../Zotlabs/Module/Setup.php:587 +#: ../../Zotlabs/Module/Setup.php:580 ../../Zotlabs/Module/Setup.php:589 msgid ".htconfig.php is writable" msgstr ".htconfig.php tiene permisos de escritura" -#: ../../Zotlabs/Module/Setup.php:583 +#: ../../Zotlabs/Module/Setup.php:585 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 "El instalador web no ha podido crear un fichero llamado “.htconfig.php” en la carpeta base de su servidor." -#: ../../Zotlabs/Module/Setup.php:584 +#: ../../Zotlabs/Module/Setup.php:586 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 "Esto está generalmente ligado a un problema de permisos, a causa del cual el servidor web tiene prohibido modificar ficheros en su carpeta - incluso si usted mismo tiene esos permisos." -#: ../../Zotlabs/Module/Setup.php:585 +#: ../../Zotlabs/Module/Setup.php:587 msgid "Please see install/INSTALL.txt for additional information." msgstr "Por favor, consulte install/INSTALL.txt para más información." -#: ../../Zotlabs/Module/Setup.php:601 +#: ../../Zotlabs/Module/Setup.php:603 msgid "" "This software uses the Smarty3 template engine to render its web views. " "Smarty3 compiles templates to PHP to speed up rendering." msgstr "Este software hace uso del motor de plantillas Smarty3 para diseñar sus plantillas gráficas. Smarty3 compila las plantillas a PHP para acelerar la renderización." -#: ../../Zotlabs/Module/Setup.php:602 +#: ../../Zotlabs/Module/Setup.php:604 #, 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 "Para poder guardar las plantillas compiladas, el servidor web necesita permisos para acceder al directorio %s en la carpeta web principal." -#: ../../Zotlabs/Module/Setup.php:603 ../../Zotlabs/Module/Setup.php:624 +#: ../../Zotlabs/Module/Setup.php:605 ../../Zotlabs/Module/Setup.php:626 msgid "" "Please ensure that the user that your web server runs as (e.g. www-data) has" " write access to this folder." msgstr "Por favor, asegúrese de que el servidor web está siendo ejecutado por un usuario que tenga permisos de escritura sobre esta carpeta (por ejemplo, www-data)." -#: ../../Zotlabs/Module/Setup.php:604 +#: ../../Zotlabs/Module/Setup.php:606 #, 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 "Nota: como medida de seguridad, debe dar al servidor web permisos de escritura solo sobre %s - no sobre el fichero de plantilla (.tpl) que contiene." -#: ../../Zotlabs/Module/Setup.php:607 +#: ../../Zotlabs/Module/Setup.php:609 #, php-format msgid "%s is writable" msgstr "%s tiene permisos de escritura" -#: ../../Zotlabs/Module/Setup.php:623 +#: ../../Zotlabs/Module/Setup.php:625 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 "Este software utiliza el directorio de almacenamiento para guardar los ficheros subidos. El servidor web debe tener acceso de escritura a este directorio en la carpeta de nivel superior" -#: ../../Zotlabs/Module/Setup.php:627 +#: ../../Zotlabs/Module/Setup.php:629 msgid "store is writable" msgstr "\"store\" tiene permisos de escritura" -#: ../../Zotlabs/Module/Setup.php:659 +#: ../../Zotlabs/Module/Setup.php:661 msgid "" "SSL certificate cannot be validated. Fix certificate or disable https access" " to this site." msgstr "El certificado SSL no ha podido ser validado. Corrija este problema o desactive el acceso https a este sitio." -#: ../../Zotlabs/Module/Setup.php:660 +#: ../../Zotlabs/Module/Setup.php:662 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 "Si su servidor soporta conexiones cifradas SSL o si permite conexiones al puerto TCP 443 (el puerto usado por el protocolo https), debe utilizar un certificado válido. No debe usar un certificado firmado por usted mismo." -#: ../../Zotlabs/Module/Setup.php:661 +#: ../../Zotlabs/Module/Setup.php:663 msgid "" "This restriction is incorporated because public posts from you may for " "example contain references to images on your own hub." msgstr "Se ha incorporado esta restricción para evitar que sus entradas públicas hagan referencia a imágenes en su propio servidor." -#: ../../Zotlabs/Module/Setup.php:662 +#: ../../Zotlabs/Module/Setup.php:664 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 "Si su certificado no ha sido reconocido, los miembros de otros sitios (con certificados válidos) recibirán mensajes de aviso en sus propios sitios web." -#: ../../Zotlabs/Module/Setup.php:663 +#: ../../Zotlabs/Module/Setup.php:665 msgid "" "This can cause usability issues elsewhere (not just on your own site) so we " "must insist on this requirement." msgstr "Por razones de compatibilidad (sobre el conjunto de la red, no solo sobre su propio sitio), debemos insistir en estos requisitos." -#: ../../Zotlabs/Module/Setup.php:664 +#: ../../Zotlabs/Module/Setup.php:666 msgid "" "Providers are available that issue free certificates which are browser-" "valid." msgstr "Existen varias Autoridades de Certificación que le pueden proporcionar certificados válidos." -#: ../../Zotlabs/Module/Setup.php:665 +#: ../../Zotlabs/Module/Setup.php:667 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. " @@ -8953,32 +8993,32 @@ msgid "" "server communications." msgstr "Si se tiene la certeza de que el certificado es válido y está firmado por una autoridad de confianza, comprobar para ver si hubo un error al instalar un certificado intermedio. Estos no son normalmente requeridos por los navegadores, pero son necesarios para las comunicaciones de servidor a servidor." -#: ../../Zotlabs/Module/Setup.php:667 +#: ../../Zotlabs/Module/Setup.php:669 msgid "SSL certificate validation" msgstr "validación del certificado SSL" -#: ../../Zotlabs/Module/Setup.php:673 +#: ../../Zotlabs/Module/Setup.php:675 msgid "" "Url rewrite in .htaccess is not working. Check your server " "configuration.Test: " msgstr "No se pueden reescribir las direcciones web en .htaccess. Compruebe la configuración de su servidor:" -#: ../../Zotlabs/Module/Setup.php:676 +#: ../../Zotlabs/Module/Setup.php:678 msgid "Url rewrite is working" msgstr "La reescritura de las direcciones funciona correctamente" -#: ../../Zotlabs/Module/Setup.php:689 +#: ../../Zotlabs/Module/Setup.php:691 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." msgstr "El fichero de configuración de la base de datos .htconfig.php no se ha podido modificar. Por favor, copie el texto generado en un fichero con ese nombre en el directorio raíz de su servidor." -#: ../../Zotlabs/Module/Setup.php:764 +#: ../../Zotlabs/Module/Setup.php:766 msgid "

What next?

" msgstr "

¿Qué sigue?

" -#: ../../Zotlabs/Module/Setup.php:765 +#: ../../Zotlabs/Module/Setup.php:767 msgid "" "IMPORTANT: You will need to [manually] setup a scheduled task for the " "poller." @@ -9032,18 +9072,18 @@ msgstr "Valorar" #: ../../Zotlabs/Module/Pubsites.php:61 ../../Zotlabs/Module/Webpages.php:261 #: ../../Zotlabs/Module/Events.php:702 ../../Zotlabs/Module/Blocks.php:166 -#: ../../Zotlabs/Module/Wiki.php:213 ../../Zotlabs/Module/Wiki.php:409 +#: ../../Zotlabs/Module/Wiki.php:212 ../../Zotlabs/Module/Wiki.php:408 #: ../../Zotlabs/Module/Layouts.php:198 msgid "View" msgstr "Ver" #: ../../Zotlabs/Module/Channel.php:131 ../../Zotlabs/Module/Hcard.php:37 -#: ../../Zotlabs/Module/Profile.php:60 +#: ../../Zotlabs/Module/Profile.php:62 msgid "Posts and comments" msgstr "Publicaciones y comentarios" #: ../../Zotlabs/Module/Channel.php:138 ../../Zotlabs/Module/Hcard.php:44 -#: ../../Zotlabs/Module/Profile.php:67 +#: ../../Zotlabs/Module/Profile.php:69 msgid "Only posts" msgstr "Solo publicaciones" @@ -9051,7 +9091,7 @@ msgstr "Solo publicaciones" msgid "Insufficient permissions. Request redirected to profile page." msgstr "Permisos insuficientes. Petición redirigida a la página del perfil." -#: ../../Zotlabs/Module/Channel.php:482 ../../Zotlabs/Module/Display.php:362 +#: ../../Zotlabs/Module/Channel.php:483 ../../Zotlabs/Module/Display.php:354 msgid "" "You must enable javascript for your browser to be able to view this content." msgstr "Debe habilitar javascript para poder ver este contenido en su navegador." @@ -9218,7 +9258,7 @@ msgid "Key and Secret are required" msgstr "\"Key\" y \"Secret\" son obligatorios" #: ../../Zotlabs/Module/Oauth.php:53 ../../Zotlabs/Module/Oauth.php:137 -#: ../../Zotlabs/Module/Cdav.php:1053 ../../Zotlabs/Module/Cdav.php:1388 +#: ../../Zotlabs/Module/Cdav.php:1054 ../../Zotlabs/Module/Cdav.php:1389 #: ../../Zotlabs/Module/Admin/Addons.php:457 #: ../../Zotlabs/Module/Profiles.php:801 ../../Zotlabs/Module/Oauth2.php:58 #: ../../Zotlabs/Module/Oauth2.php:144 ../../Zotlabs/Module/Connedit.php:932 @@ -9266,11 +9306,6 @@ msgstr "URI de redirección - dejar en blanco a menos que su aplicación especí msgid "Icon url" msgstr "Dirección del icono" -#: ../../Zotlabs/Module/Oauth.php:117 ../../Zotlabs/Module/Sources.php:123 -#: ../../Zotlabs/Module/Sources.php:158 -msgid "Optional" -msgstr "Opcional" - #: ../../Zotlabs/Module/Oauth.php:128 msgid "Application not found." msgstr "Aplicación no encontrada." @@ -9315,7 +9350,7 @@ msgstr "¡Bienvenido a Hubzilla!" msgid "You have got no unseen posts..." msgstr "No tiene ningún mensaje sin leer..." -#: ../../Zotlabs/Module/Pin.php:36 ../../Zotlabs/Module/Item.php:461 +#: ../../Zotlabs/Module/Pin.php:36 ../../Zotlabs/Module/Item.php:471 msgid "Unable to locate original post." msgstr "No ha sido posible encontrar la entrada original." @@ -9373,7 +9408,7 @@ msgid "No chatrooms available" msgstr "No hay salas de chat disponibles" #: ../../Zotlabs/Module/Chat.php:262 ../../Zotlabs/Module/Manage.php:145 -#: ../../Zotlabs/Module/Profiles.php:833 ../../Zotlabs/Module/Wiki.php:214 +#: ../../Zotlabs/Module/Profiles.php:833 ../../Zotlabs/Module/Wiki.php:213 msgid "Create New" msgstr "Crear" @@ -9420,7 +9455,7 @@ msgid "Delete event" msgstr "Borrar evento" #: ../../Zotlabs/Module/Channel_calendar.php:392 -#: ../../Zotlabs/Module/Cdav.php:943 ../../Zotlabs/Module/Cal.php:165 +#: ../../Zotlabs/Module/Cdav.php:944 ../../Zotlabs/Module/Cal.php:165 msgid "Link to source" msgstr "Enlace a la fuente" @@ -9520,168 +9555,168 @@ msgstr "Elegir qué desea enviar al destinatario" msgid "Make this post private" msgstr "Convertir en privado este envío" -#: ../../Zotlabs/Module/Cdav.php:818 ../../Zotlabs/Module/Events.php:28 +#: ../../Zotlabs/Module/Cdav.php:819 ../../Zotlabs/Module/Events.php:28 msgid "Calendar entries imported." msgstr "Entradas de calendario importadas." -#: ../../Zotlabs/Module/Cdav.php:820 ../../Zotlabs/Module/Events.php:30 +#: ../../Zotlabs/Module/Cdav.php:821 ../../Zotlabs/Module/Events.php:30 msgid "No calendar entries found." msgstr "No se han encontrado entradas de calendario." -#: ../../Zotlabs/Module/Cdav.php:876 +#: ../../Zotlabs/Module/Cdav.php:877 msgid "CardDAV App" msgstr "App CarDav" -#: ../../Zotlabs/Module/Cdav.php:877 +#: ../../Zotlabs/Module/Cdav.php:878 msgid "CalDAV capable addressbook" msgstr "Libreta de direcciones compatible con CalDav" -#: ../../Zotlabs/Module/Cdav.php:1009 ../../Zotlabs/Module/Events.php:468 +#: ../../Zotlabs/Module/Cdav.php:1010 ../../Zotlabs/Module/Events.php:468 msgid "Event title" msgstr "Título del evento" -#: ../../Zotlabs/Module/Cdav.php:1010 ../../Zotlabs/Module/Events.php:474 +#: ../../Zotlabs/Module/Cdav.php:1011 ../../Zotlabs/Module/Events.php:474 msgid "Start date and time" msgstr "Fecha y hora de comienzo" -#: ../../Zotlabs/Module/Cdav.php:1011 +#: ../../Zotlabs/Module/Cdav.php:1012 msgid "End date and time" msgstr "Fecha y hora de finalización" -#: ../../Zotlabs/Module/Cdav.php:1012 ../../Zotlabs/Module/Events.php:497 +#: ../../Zotlabs/Module/Cdav.php:1013 ../../Zotlabs/Module/Events.php:497 msgid "Timezone:" msgstr "Zona horaria: " -#: ../../Zotlabs/Module/Cdav.php:1035 ../../Zotlabs/Module/Events.php:697 +#: ../../Zotlabs/Module/Cdav.php:1036 ../../Zotlabs/Module/Events.php:697 #: ../../Zotlabs/Module/Events.php:706 ../../Zotlabs/Module/Cal.php:203 #: ../../Zotlabs/Module/Photos.php:947 msgid "Previous" msgstr "Anterior" -#: ../../Zotlabs/Module/Cdav.php:1037 ../../Zotlabs/Module/Events.php:708 +#: ../../Zotlabs/Module/Cdav.php:1038 ../../Zotlabs/Module/Events.php:708 #: ../../Zotlabs/Module/Cal.php:205 msgid "Today" msgstr "Hoy" -#: ../../Zotlabs/Module/Cdav.php:1038 ../../Zotlabs/Module/Events.php:703 +#: ../../Zotlabs/Module/Cdav.php:1039 ../../Zotlabs/Module/Events.php:703 msgid "Month" msgstr "Mes" -#: ../../Zotlabs/Module/Cdav.php:1039 ../../Zotlabs/Module/Events.php:704 +#: ../../Zotlabs/Module/Cdav.php:1040 ../../Zotlabs/Module/Events.php:704 msgid "Week" msgstr "Semana" -#: ../../Zotlabs/Module/Cdav.php:1040 ../../Zotlabs/Module/Events.php:705 +#: ../../Zotlabs/Module/Cdav.php:1041 ../../Zotlabs/Module/Events.php:705 msgid "Day" msgstr "Día" -#: ../../Zotlabs/Module/Cdav.php:1041 +#: ../../Zotlabs/Module/Cdav.php:1042 msgid "List month" msgstr "Lista mensual" -#: ../../Zotlabs/Module/Cdav.php:1042 +#: ../../Zotlabs/Module/Cdav.php:1043 msgid "List week" msgstr "Lista semanal" -#: ../../Zotlabs/Module/Cdav.php:1043 +#: ../../Zotlabs/Module/Cdav.php:1044 msgid "List day" msgstr "Lista diaria" -#: ../../Zotlabs/Module/Cdav.php:1051 +#: ../../Zotlabs/Module/Cdav.php:1052 msgid "More" msgstr "Más" -#: ../../Zotlabs/Module/Cdav.php:1052 +#: ../../Zotlabs/Module/Cdav.php:1053 msgid "Less" msgstr "Menos" -#: ../../Zotlabs/Module/Cdav.php:1054 +#: ../../Zotlabs/Module/Cdav.php:1055 msgid "Select calendar" msgstr "Seleccionar un calendario" -#: ../../Zotlabs/Module/Cdav.php:1057 +#: ../../Zotlabs/Module/Cdav.php:1058 msgid "Delete all" msgstr "Eliminar todos" -#: ../../Zotlabs/Module/Cdav.php:1060 +#: ../../Zotlabs/Module/Cdav.php:1061 msgid "Sorry! Editing of recurrent events is not yet implemented." msgstr "¡Disculpas! La edición de eventos recurrentes aún no se ha implementado." -#: ../../Zotlabs/Module/Cdav.php:1373 ../../Zotlabs/Module/Connedit.php:917 +#: ../../Zotlabs/Module/Cdav.php:1374 ../../Zotlabs/Module/Connedit.php:917 msgid "Organisation" msgstr "Organización" -#: ../../Zotlabs/Module/Cdav.php:1375 ../../Zotlabs/Module/Profiles.php:788 +#: ../../Zotlabs/Module/Cdav.php:1376 ../../Zotlabs/Module/Profiles.php:788 #: ../../Zotlabs/Module/Connedit.php:919 msgid "Phone" msgstr "Teléfono" -#: ../../Zotlabs/Module/Cdav.php:1377 ../../Zotlabs/Module/Profiles.php:790 +#: ../../Zotlabs/Module/Cdav.php:1378 ../../Zotlabs/Module/Profiles.php:790 #: ../../Zotlabs/Module/Connedit.php:921 msgid "Instant messenger" msgstr "Mensajería instantánea" -#: ../../Zotlabs/Module/Cdav.php:1378 ../../Zotlabs/Module/Profiles.php:791 +#: ../../Zotlabs/Module/Cdav.php:1379 ../../Zotlabs/Module/Profiles.php:791 #: ../../Zotlabs/Module/Connedit.php:922 msgid "Website" msgstr "Sitio web" -#: ../../Zotlabs/Module/Cdav.php:1379 +#: ../../Zotlabs/Module/Cdav.php:1380 #: ../../Zotlabs/Module/Admin/Channels.php:160 #: ../../Zotlabs/Module/Profiles.php:504 ../../Zotlabs/Module/Profiles.php:792 #: ../../Zotlabs/Module/Connedit.php:923 ../../Zotlabs/Module/Locs.php:129 msgid "Address" msgstr "Dirección" -#: ../../Zotlabs/Module/Cdav.php:1380 ../../Zotlabs/Module/Profiles.php:793 +#: ../../Zotlabs/Module/Cdav.php:1381 ../../Zotlabs/Module/Profiles.php:793 #: ../../Zotlabs/Module/Connedit.php:924 msgid "Note" msgstr "Nota" -#: ../../Zotlabs/Module/Cdav.php:1385 ../../Zotlabs/Module/Profiles.php:798 +#: ../../Zotlabs/Module/Cdav.php:1386 ../../Zotlabs/Module/Profiles.php:798 #: ../../Zotlabs/Module/Connedit.php:929 msgid "Add Contact" msgstr "Añadir un contacto" -#: ../../Zotlabs/Module/Cdav.php:1386 ../../Zotlabs/Module/Profiles.php:799 +#: ../../Zotlabs/Module/Cdav.php:1387 ../../Zotlabs/Module/Profiles.php:799 #: ../../Zotlabs/Module/Connedit.php:930 msgid "Add Field" msgstr "Añadir un campo" -#: ../../Zotlabs/Module/Cdav.php:1391 ../../Zotlabs/Module/Connedit.php:935 +#: ../../Zotlabs/Module/Cdav.php:1392 ../../Zotlabs/Module/Connedit.php:935 msgid "P.O. Box" msgstr "Buzón de correos" -#: ../../Zotlabs/Module/Cdav.php:1392 ../../Zotlabs/Module/Connedit.php:936 +#: ../../Zotlabs/Module/Cdav.php:1393 ../../Zotlabs/Module/Connedit.php:936 msgid "Additional" msgstr "Adicional" -#: ../../Zotlabs/Module/Cdav.php:1393 ../../Zotlabs/Module/Connedit.php:937 +#: ../../Zotlabs/Module/Cdav.php:1394 ../../Zotlabs/Module/Connedit.php:937 msgid "Street" msgstr "Calle" -#: ../../Zotlabs/Module/Cdav.php:1394 ../../Zotlabs/Module/Connedit.php:938 +#: ../../Zotlabs/Module/Cdav.php:1395 ../../Zotlabs/Module/Connedit.php:938 msgid "Locality" msgstr "Localidad" -#: ../../Zotlabs/Module/Cdav.php:1395 ../../Zotlabs/Module/Connedit.php:939 +#: ../../Zotlabs/Module/Cdav.php:1396 ../../Zotlabs/Module/Connedit.php:939 msgid "Region" msgstr "Provincia, región o estado" -#: ../../Zotlabs/Module/Cdav.php:1396 ../../Zotlabs/Module/Connedit.php:940 +#: ../../Zotlabs/Module/Cdav.php:1397 ../../Zotlabs/Module/Connedit.php:940 msgid "ZIP Code" msgstr "Código postal" -#: ../../Zotlabs/Module/Cdav.php:1397 ../../Zotlabs/Module/Profiles.php:759 +#: ../../Zotlabs/Module/Cdav.php:1398 ../../Zotlabs/Module/Profiles.php:759 #: ../../Zotlabs/Module/Connedit.php:941 msgid "Country" msgstr "País" -#: ../../Zotlabs/Module/Cdav.php:1456 +#: ../../Zotlabs/Module/Cdav.php:1457 msgid "Default Calendar" msgstr "Calendario por defecto" -#: ../../Zotlabs/Module/Cdav.php:1467 +#: ../../Zotlabs/Module/Cdav.php:1468 msgid "Default Addressbook" msgstr "Agenda de direcciones por defecto" @@ -9699,32 +9734,32 @@ msgctxt "acl" msgid "Profile" msgstr "Perfil" -#: ../../Zotlabs/Module/Item.php:747 +#: ../../Zotlabs/Module/Item.php:757 msgid "Empty post discarded." msgstr "La entrada vacía ha sido desechada." -#: ../../Zotlabs/Module/Item.php:1181 +#: ../../Zotlabs/Module/Item.php:1189 msgid "Duplicate post suppressed." msgstr "Se ha suprimido la entrada duplicada." -#: ../../Zotlabs/Module/Item.php:1326 +#: ../../Zotlabs/Module/Item.php:1334 msgid "System error. Post not saved." msgstr "Error del sistema. La entrada no se ha podido salvar." -#: ../../Zotlabs/Module/Item.php:1360 +#: ../../Zotlabs/Module/Item.php:1368 msgid "Your comment is awaiting approval." msgstr "Su comentario está pendiente de aprobación." -#: ../../Zotlabs/Module/Item.php:1490 +#: ../../Zotlabs/Module/Item.php:1498 msgid "Unable to obtain post information from database." msgstr "No ha sido posible obtener información de la entrada en la base de datos." -#: ../../Zotlabs/Module/Item.php:1497 +#: ../../Zotlabs/Module/Item.php:1505 #, php-format msgid "You have reached your limit of %1$.0f top level posts." msgstr "Ha alcanzado su límite de %1$.0f entradas en la página principal." -#: ../../Zotlabs/Module/Item.php:1504 +#: ../../Zotlabs/Module/Item.php:1512 #, php-format msgid "You have reached your limit of %1$.0f webpages." msgstr "Ha alcanzado su límite de %1$.0f páginas web." @@ -10073,15 +10108,11 @@ msgstr "Canal premium o restringido" msgid "Not found" msgstr "No encontrado" -#: ../../Zotlabs/Module/Cloud.php:126 -msgid "Please refresh page" -msgstr "Por favor, recargue la página" - -#: ../../Zotlabs/Module/Cloud.php:129 +#: ../../Zotlabs/Module/Cloud.php:130 msgid "Unknown error" msgstr "Error desconocido" -#: ../../Zotlabs/Module/Share.php:104 ../../Zotlabs/Lib/Activity.php:2154 +#: ../../Zotlabs/Module/Share.php:104 ../../Zotlabs/Lib/Activity.php:2186 #, php-format msgid "🔁 Repeated %1$s's %2$s" msgstr "🔁 Repetidos %2$sde %1$s" @@ -10125,7 +10156,7 @@ msgid "Do you authorize the app %s to access your channel data?" msgstr "¿Autoriza a la aplicación %s a acceder a los datos de su canal?" #: ../../Zotlabs/Module/Authorize.php:33 -#: ../../Zotlabs/Module/Admin/Accounts.php:174 +#: ../../Zotlabs/Module/Admin/Accounts.php:319 msgid "Deny" msgstr "Rechazar" @@ -10182,13 +10213,13 @@ msgstr "Instantánea de pantalla" #: ../../Zotlabs/Module/Admin/Themes.php:122 #: ../../Zotlabs/Module/Admin/Themes.php:156 #: ../../Zotlabs/Module/Admin/Security.php:98 -#: ../../Zotlabs/Module/Admin/Accounts.php:166 -#: ../../Zotlabs/Module/Admin/Site.php:291 +#: ../../Zotlabs/Module/Admin/Accounts.php:307 +#: ../../Zotlabs/Module/Admin/Site.php:408 #: ../../Zotlabs/Module/Admin/Logs.php:82 #: ../../Zotlabs/Module/Admin/Channels.php:145 #: ../../Zotlabs/Module/Admin/Addons.php:342 #: ../../Zotlabs/Module/Admin/Addons.php:440 -#: ../../Zotlabs/Module/Admin.php:138 +#: ../../Zotlabs/Module/Admin.php:141 msgid "Administration" msgstr "Administración" @@ -10357,526 +10388,690 @@ msgstr "ADVERTENCIA: Las imágenes SVG pueden contener código malicioso." msgid "Allow embedded (inline) PDF files" msgstr "Permitir ficheros PDF incrustados (en línea)" -#: ../../Zotlabs/Module/Admin/Accounts.php:37 +#: ../../Zotlabs/Module/Admin/Accounts.php:128 #, php-format msgid "%s account blocked/unblocked" msgid_plural "%s account blocked/unblocked" msgstr[0] "%s cuenta bloqueada/desbloqueada" msgstr[1] "%s cuenta bloqueada/desbloqueada" -#: ../../Zotlabs/Module/Admin/Accounts.php:44 +#: ../../Zotlabs/Module/Admin/Accounts.php:135 #, php-format msgid "%s account deleted" msgid_plural "%s accounts deleted" msgstr[0] "%s cuentas eliminadas" msgstr[1] "%s cuentas eliminadas" -#: ../../Zotlabs/Module/Admin/Accounts.php:80 +#: ../../Zotlabs/Module/Admin/Accounts.php:171 msgid "Account not found" msgstr "Cuenta no encontrada" -#: ../../Zotlabs/Module/Admin/Accounts.php:99 +#: ../../Zotlabs/Module/Admin/Accounts.php:192 #, php-format msgid "Account '%s' blocked" msgstr "La cuenta '%s' ha sido bloqueada" -#: ../../Zotlabs/Module/Admin/Accounts.php:107 +#: ../../Zotlabs/Module/Admin/Accounts.php:200 #, php-format msgid "Account '%s' unblocked" msgstr "La cuenta '%s' ha sido desbloqueada" -#: ../../Zotlabs/Module/Admin/Accounts.php:169 -#: ../../Zotlabs/Module/Admin/Channels.php:148 -msgid "select all" -msgstr "seleccionar todo" +#: ../../Zotlabs/Module/Admin/Accounts.php:240 +msgid "Unverified" +msgstr "Sin verificar" -#: ../../Zotlabs/Module/Admin/Accounts.php:170 -msgid "Registrations waiting for confirm" -msgstr "Inscripciones en espera de confirmación" +#: ../../Zotlabs/Module/Admin/Accounts.php:243 +msgid "Expired" +msgstr "Caducado/a" -#: ../../Zotlabs/Module/Admin/Accounts.php:171 +#: ../../Zotlabs/Module/Admin/Accounts.php:310 +msgid "Show verified registrations" +msgstr "Mostrar registros verificados" + +#: ../../Zotlabs/Module/Admin/Accounts.php:310 +msgid "Show all registrations" +msgstr "Mostrar todos los registros" + +#: ../../Zotlabs/Module/Admin/Accounts.php:312 +msgid "Select toggle" +msgstr "Seleccionar alternar" + +#: ../../Zotlabs/Module/Admin/Accounts.php:313 +msgid "Deny selected" +msgstr "Denegar seleccionado" + +#: ../../Zotlabs/Module/Admin/Accounts.php:314 +msgid "Approve selected" +msgstr "Aprobar seleccionado" + +#: ../../Zotlabs/Module/Admin/Accounts.php:315 +msgid "All registrations" +msgstr "Todos los registros" + +#: ../../Zotlabs/Module/Admin/Accounts.php:315 +msgid "Verified registrations waiting for approval" +msgstr "Registros verificados en espera de aprobación" + +#: ../../Zotlabs/Module/Admin/Accounts.php:316 msgid "Request date" msgstr "Fecha de solicitud" -#: ../../Zotlabs/Module/Admin/Accounts.php:172 -msgid "No registrations." -msgstr "Sin registros." +#: ../../Zotlabs/Module/Admin/Accounts.php:316 +msgid "Requests" +msgstr "Solicitudes" + +#: ../../Zotlabs/Module/Admin/Accounts.php:317 +msgid "No registrations available" +msgstr "No hay registros disponibles" -#: ../../Zotlabs/Module/Admin/Accounts.php:176 +#: ../../Zotlabs/Module/Admin/Accounts.php:317 +msgid "No verified registrations available" +msgstr "No hay registros verificados disponibles" + +#: ../../Zotlabs/Module/Admin/Accounts.php:321 #: ../../Zotlabs/Module/Connedit.php:629 msgid "Block" msgstr "Bloquear" -#: ../../Zotlabs/Module/Admin/Accounts.php:177 +#: ../../Zotlabs/Module/Admin/Accounts.php:322 #: ../../Zotlabs/Module/Connedit.php:629 msgid "Unblock" msgstr "Desbloquear" -#: ../../Zotlabs/Module/Admin/Accounts.php:182 +#: ../../Zotlabs/Module/Admin/Accounts.php:323 +msgid "Verified" +msgstr "Verificado/a" + +#: ../../Zotlabs/Module/Admin/Accounts.php:324 +msgid "Not yet verified" +msgstr "Aún no se ha verificado" + +#: ../../Zotlabs/Module/Admin/Accounts.php:329 msgid "ID" msgstr "ID" -#: ../../Zotlabs/Module/Admin/Accounts.php:184 -msgid "All Channels" +#: ../../Zotlabs/Module/Admin/Accounts.php:331 +msgid "All channels" msgstr "Todos los canales" -#: ../../Zotlabs/Module/Admin/Accounts.php:185 +#: ../../Zotlabs/Module/Admin/Accounts.php:332 msgid "Register date" msgstr "Fecha de registro" -#: ../../Zotlabs/Module/Admin/Accounts.php:186 +#: ../../Zotlabs/Module/Admin/Accounts.php:333 msgid "Last login" msgstr "Último acceso" -#: ../../Zotlabs/Module/Admin/Accounts.php:187 +#: ../../Zotlabs/Module/Admin/Accounts.php:334 msgid "Expires" msgstr "Caduca" -#: ../../Zotlabs/Module/Admin/Accounts.php:188 -msgid "Service Class" +#: ../../Zotlabs/Module/Admin/Accounts.php:335 +#: ../../Zotlabs/Module/Admin/Account_edit.php:72 +msgid "Service class" msgstr "Clase de servicio" -#: ../../Zotlabs/Module/Admin/Accounts.php:190 +#: ../../Zotlabs/Module/Admin/Accounts.php:337 msgid "" "Selected accounts will be deleted!\\n\\nEverything these accounts had posted" " on this site will be permanently deleted!\\n\\nAre you sure?" msgstr "¡Las cuentas seleccionadas van a ser eliminadas!\\n\\n¡Todo lo que estas cuentas han publicado en este sitio será borrado de forma permanente!\\n\\n¿Está seguro de querer hacerlo?" -#: ../../Zotlabs/Module/Admin/Accounts.php:191 +#: ../../Zotlabs/Module/Admin/Accounts.php:338 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 "¡La cuenta {0} va a ser eliminada!\\n\\n¡Todo lo que esta cuenta ha publicado en este sitio será borrado de forma permanente!\\n\\n¿Está seguro de querer hacerlo?" -#: ../../Zotlabs/Module/Admin/Site.php:165 +#: ../../Zotlabs/Module/Admin/Site.php:112 +msgid "Invalid input" +msgstr "Entrada no válida" + +#: ../../Zotlabs/Module/Admin/Site.php:132 +msgid "Errors" +msgstr "Errores" + +#: ../../Zotlabs/Module/Admin/Site.php:225 msgid "Site settings updated." msgstr "Ajustes del sitio actualizados." -#: ../../Zotlabs/Module/Admin/Site.php:202 +#: ../../Zotlabs/Module/Admin/Site.php:262 #: ../../Zotlabs/Module/Settings/Display.php:118 #, php-format msgid "%s - (Incompatible)" msgstr "%s - (Incompatible)" -#: ../../Zotlabs/Module/Admin/Site.php:209 +#: ../../Zotlabs/Module/Admin/Site.php:269 msgid "mobile" msgstr "móvil" -#: ../../Zotlabs/Module/Admin/Site.php:211 +#: ../../Zotlabs/Module/Admin/Site.php:271 msgid "experimental" msgstr "experimental" -#: ../../Zotlabs/Module/Admin/Site.php:213 +#: ../../Zotlabs/Module/Admin/Site.php:273 msgid "unsupported" msgstr "no soportado" -#: ../../Zotlabs/Module/Admin/Site.php:260 +#: ../../Zotlabs/Module/Admin/Site.php:320 msgid "Yes - with approval" msgstr "Sí - con aprobación" -#: ../../Zotlabs/Module/Admin/Site.php:266 +#: ../../Zotlabs/Module/Admin/Site.php:328 msgid "My site is not a public server" msgstr "Mi sitio no es un servidor público" -#: ../../Zotlabs/Module/Admin/Site.php:267 +#: ../../Zotlabs/Module/Admin/Site.php:329 msgid "My site has paid access only" msgstr "Mi sitio es un servicio de pago" -#: ../../Zotlabs/Module/Admin/Site.php:268 +#: ../../Zotlabs/Module/Admin/Site.php:330 msgid "My site has free access only" msgstr "Mi sitio es un servicio gratuito" -#: ../../Zotlabs/Module/Admin/Site.php:269 +#: ../../Zotlabs/Module/Admin/Site.php:331 msgid "My site offers free accounts with optional paid upgrades" msgstr "Mi sitio ofrece cuentas gratuitas con opciones extra de pago" -#: ../../Zotlabs/Module/Admin/Site.php:283 +#: ../../Zotlabs/Module/Admin/Site.php:345 msgid "Default permission role for new accounts" msgstr "Permisos de rol por defecto para las nuevas cuentas" -#: ../../Zotlabs/Module/Admin/Site.php:283 +#: ../../Zotlabs/Module/Admin/Site.php:345 msgid "" "This role will be used for the first channel created after registration." msgstr "Este rol se utilizará para el primer canal creado después del registro." -#: ../../Zotlabs/Module/Admin/Site.php:295 +#: ../../Zotlabs/Module/Admin/Site.php:353 ../../Zotlabs/Module/Invite.php:398 +msgid "Minute(s)" +msgstr "Minuto(s)" + +#: ../../Zotlabs/Module/Admin/Site.php:354 ../../Zotlabs/Module/Invite.php:399 +msgid "Hour(s)" +msgstr "Hora(s)" + +#: ../../Zotlabs/Module/Admin/Site.php:355 ../../Zotlabs/Module/Invite.php:400 +msgid "Day(s)" +msgstr "Día(s)" + +#: ../../Zotlabs/Module/Admin/Site.php:356 +msgid "Week(s)" +msgstr "Semana(s)" + +#: ../../Zotlabs/Module/Admin/Site.php:357 +msgid "Month(s)" +msgstr "Mes(Meses)" + +#: ../../Zotlabs/Module/Admin/Site.php:358 +msgid "Year(s)" +msgstr "Año(s)" + +#: ../../Zotlabs/Module/Admin/Site.php:366 +msgid "Register verification delay" +msgstr "Retraso en la verificación del registro" + +#: ../../Zotlabs/Module/Admin/Site.php:369 +msgid "Time to wait before a registration can be verified" +msgstr "Tiempo de espera para verificar un registro " + +#: ../../Zotlabs/Module/Admin/Site.php:372 +#: ../../Zotlabs/Module/Admin/Site.php:394 ../../Zotlabs/Module/Invite.php:409 +msgid "duration up from now" +msgstr "duración a partir de ahora " + +#: ../../Zotlabs/Module/Admin/Site.php:388 +msgid "Register verification expiration time" +msgstr "Tiempo de caducidad de la verificación del registro " + +#: ../../Zotlabs/Module/Admin/Site.php:391 +msgid "Time before an unverified registration will expire" +msgstr "Tiempo antes de que caduque un registro no verificado " + +#: ../../Zotlabs/Module/Admin/Site.php:414 msgid "File upload" msgstr "Subir fichero" -#: ../../Zotlabs/Module/Admin/Site.php:296 +#: ../../Zotlabs/Module/Admin/Site.php:415 msgid "Policies" msgstr "Políticas" -#: ../../Zotlabs/Module/Admin/Site.php:303 +#: ../../Zotlabs/Module/Admin/Site.php:422 msgid "Banner/Logo" msgstr "Banner/Logo" -#: ../../Zotlabs/Module/Admin/Site.php:303 +#: ../../Zotlabs/Module/Admin/Site.php:422 msgid "Unfiltered HTML/CSS/JS is allowed" msgstr "Se permite HTML/CSS/JS sin filtrar" -#: ../../Zotlabs/Module/Admin/Site.php:304 +#: ../../Zotlabs/Module/Admin/Site.php:423 msgid "Administrator Information" msgstr "Información del Administrador" -#: ../../Zotlabs/Module/Admin/Site.php:304 +#: ../../Zotlabs/Module/Admin/Site.php:423 msgid "" "Contact information for site administrators. Displayed on siteinfo page. " "BBCode can be used here" msgstr "Información de contacto de los administradores del sitio. Visible en la página \"siteinfo\". Se puede usar BBCode" -#: ../../Zotlabs/Module/Admin/Site.php:305 +#: ../../Zotlabs/Module/Admin/Site.php:424 #: ../../Zotlabs/Module/Siteinfo.php:24 msgid "Site Information" msgstr "Información sobre el sitio" -#: ../../Zotlabs/Module/Admin/Site.php:305 +#: ../../Zotlabs/Module/Admin/Site.php:424 msgid "" "Publicly visible description of this site. Displayed on siteinfo page. " "BBCode can be used here" msgstr "Descripción pública de este sitio. Visible en la página \"siteinfo\". Se puede usar BBCode" -#: ../../Zotlabs/Module/Admin/Site.php:306 +#: ../../Zotlabs/Module/Admin/Site.php:425 msgid "System language" msgstr "Idioma del sistema" -#: ../../Zotlabs/Module/Admin/Site.php:307 +#: ../../Zotlabs/Module/Admin/Site.php:426 msgid "System theme" msgstr "Tema gráfico del sistema" -#: ../../Zotlabs/Module/Admin/Site.php:307 +#: ../../Zotlabs/Module/Admin/Site.php:426 msgid "" "Default system theme - may be over-ridden by user profiles - change theme settings" msgstr "Tema del sistema por defecto - se puede cambiar por cada perfil de usuario - modificar los ajustes del tema" -#: ../../Zotlabs/Module/Admin/Site.php:310 +#: ../../Zotlabs/Module/Admin/Site.php:429 msgid "Allow Feeds as Connections" msgstr "Permitir contenidos RSS como conexiones" -#: ../../Zotlabs/Module/Admin/Site.php:310 +#: ../../Zotlabs/Module/Admin/Site.php:429 msgid "(Heavy system resource usage)" msgstr "(Uso intenso de los recursos del sistema)" -#: ../../Zotlabs/Module/Admin/Site.php:311 +#: ../../Zotlabs/Module/Admin/Site.php:430 msgid "Maximum image size" msgstr "Tamaño máximo de la imagen" -#: ../../Zotlabs/Module/Admin/Site.php:311 +#: ../../Zotlabs/Module/Admin/Site.php:430 msgid "" "Maximum size in bytes of uploaded images. Default is 0, which means no " "limits." msgstr "Tamaño máximo en bytes de la imagen subida. Por defecto, es 0, lo que significa que no hay límites." -#: ../../Zotlabs/Module/Admin/Site.php:312 -msgid "Does this site allow new member registration?" -msgstr "¿Debe este sitio permitir el registro de nuevos miembros?" - -#: ../../Zotlabs/Module/Admin/Site.php:313 -msgid "Invitation only" -msgstr "Solo con una invitación" - -#: ../../Zotlabs/Module/Admin/Site.php:313 -msgid "" -"Only allow new member registrations with an invitation code. Above register " -"policy must be set to Yes." -msgstr "Solo se permiten inscripciones de nuevos miembros con un código de invitación. Además, deben aceptarse los términos del registro marcando \"Sí\"." - -#: ../../Zotlabs/Module/Admin/Site.php:314 +#: ../../Zotlabs/Module/Admin/Site.php:431 msgid "Minimum age" msgstr "Edad mínima" -#: ../../Zotlabs/Module/Admin/Site.php:314 +#: ../../Zotlabs/Module/Admin/Site.php:431 msgid "Minimum age (in years) for who may register on this site." msgstr "Edad mínima (en años) para poder registrarse en este sitio." -#: ../../Zotlabs/Module/Admin/Site.php:315 +#: ../../Zotlabs/Module/Admin/Site.php:432 msgid "Which best describes the types of account offered by this hub?" msgstr "¿Cómo describiría el tipo de servicio ofrecido por este servidor?" -#: ../../Zotlabs/Module/Admin/Site.php:315 +#: ../../Zotlabs/Module/Admin/Site.php:432 msgid "This is displayed on the public server site list." msgstr "Esto se muestra en la lista de sitios de servidores públicos." -#: ../../Zotlabs/Module/Admin/Site.php:316 +#: ../../Zotlabs/Module/Admin/Site.php:438 msgid "Register text" msgstr "Texto del registro" -#: ../../Zotlabs/Module/Admin/Site.php:316 -msgid "Will be displayed prominently on the registration page." -msgstr "Se mostrará de forma destacada en la página de registro." +#: ../../Zotlabs/Module/Admin/Site.php:440 +msgid "This text will be displayed prominently at the registration page" +msgstr "Este texto se mostrará de forma destacada en la página de registro " -#: ../../Zotlabs/Module/Admin/Site.php:318 +#: ../../Zotlabs/Module/Admin/Site.php:444 +msgid "Does this site allow new member registration?" +msgstr "¿Debe este sitio permitir el registro de nuevos miembros?" + +#: ../../Zotlabs/Module/Admin/Site.php:451 +msgid "Configure the registration open days/hours" +msgstr "Configurar los días/horas de apertura del registro" + +#: ../../Zotlabs/Module/Admin/Site.php:453 +msgid "Empty or '-:-' value will keep registration open 24/7 (default)" +msgstr "El valor vacío o \"-:-\" mantendrá el registro abierto 24/7 (por defecto)" + +#: ../../Zotlabs/Module/Admin/Site.php:454 +msgid "" +"Weekdays and hours must be separated by colon ':', From-To ranges with a " +"dash `-` example: 1:800-1200" +msgstr "Los días de la semana y las horas deben separarse con dos puntos ':', los rangos Desde-Hasta con un guión `-` ejemplo: 1:800-1200" + +#: ../../Zotlabs/Module/Admin/Site.php:455 +msgid "" +"Weekday:Hour pairs must be separated by space ' ' example: 1:900-1700 " +"2:900-1700" +msgstr "Los pares día de la semana:hora deben estar separados por un espacio ' ' ejemplo: 1:900-1700 2:900-1700" + +#: ../../Zotlabs/Module/Admin/Site.php:456 +msgid "" +"From-To ranges must be separated by comma ',' example: 1:800-1200,1300-1700 " +"or 1-2,4-5:900-1700" +msgstr "Los rangos desde-hasta deben estar separados por comas ',' ejemplo: 1:800-1200,1300-1700 o 1-2,4-5:900-1700" + +#: ../../Zotlabs/Module/Admin/Site.php:457 +msgid "Advanced examples:" +msgstr "Ejemplos avanzados: " + +#: ../../Zotlabs/Module/Admin/Site.php:457 +#: ../../Zotlabs/Module/Settings/Channel.php:420 +msgid "or" +msgstr "o" + +#: ../../Zotlabs/Module/Admin/Site.php:458 +msgid "Check your configuration" +msgstr "Compruebe su configuración" + +#: ../../Zotlabs/Module/Admin/Site.php:462 +msgid "Max account registrations per day" +msgstr "Máximo de registros de cuentas por día " + +#: ../../Zotlabs/Module/Admin/Site.php:464 +msgid "Unlimited if zero or no value - default 50" +msgstr "Ilimitado si es cero o sin valor - por defecto 50" + +#: ../../Zotlabs/Module/Admin/Site.php:468 +msgid "Max account registrations from same IP" +msgstr "Máximo de registros de cuentas desde la misma IP" + +#: ../../Zotlabs/Module/Admin/Site.php:470 +msgid "Unlimited if zero or no value - default 3" +msgstr "Ilimitado si es cero o sin valor - por defecto 3" + +#: ../../Zotlabs/Module/Admin/Site.php:476 +msgid "Auto channel create" +msgstr "Creación automática de canales" + +#: ../../Zotlabs/Module/Admin/Site.php:478 +msgid "" +"If disabled the channel will be created in a separate step during the " +"registration process" +msgstr "Si se desactiva, el canal se creará en un paso separado durante el proceso de registro" + +#: ../../Zotlabs/Module/Admin/Site.php:482 +msgid "Require invite code" +msgstr "Solicitar código de invitación" + +#: ../../Zotlabs/Module/Admin/Site.php:487 +msgid "Allow invite code" +msgstr "Permitir código de invitación" + +#: ../../Zotlabs/Module/Admin/Site.php:492 +msgid "Require email address" +msgstr "Solicitar dirección de correo electrónico" + +#: ../../Zotlabs/Module/Admin/Site.php:494 +msgid "The provided email address will be verified (recommended)" +msgstr "La dirección de correo electrónico proporcionada será verificada (recomendado)" + +#: ../../Zotlabs/Module/Admin/Site.php:498 +msgid "Abandon account after x days" +msgstr "Abandonar la cuenta después de x días" + +#: ../../Zotlabs/Module/Admin/Site.php:500 +msgid "" +"Will not waste system resources polling external sites for abandonded " +"accounts. Enter 0 for no time limit." +msgstr "Para evitar consumir recursos del sistema intentando poner al día las cuentas abandonadas. Introduzca 0 para no tener límite de tiempo." + +#: ../../Zotlabs/Module/Admin/Site.php:505 msgid "Site homepage to show visitors (default: login box)" msgstr "Página personal que se mostrará a los visitantes (por defecto: la página de identificación)" -#: ../../Zotlabs/Module/Admin/Site.php:318 +#: ../../Zotlabs/Module/Admin/Site.php:505 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." msgstr "ejemplo: 'pubstream' para mostrar el stream público, 'page/sys/home' para mostrar una página web del sistema llamada 'home' o 'include:home.html' para incluir un archivo." -#: ../../Zotlabs/Module/Admin/Site.php:319 +#: ../../Zotlabs/Module/Admin/Site.php:506 msgid "Preserve site homepage URL" msgstr "Preservar la dirección de la página personal" -#: ../../Zotlabs/Module/Admin/Site.php:319 +#: ../../Zotlabs/Module/Admin/Site.php:506 msgid "" "Present the site homepage in a frame at the original location instead of " "redirecting" msgstr "Presenta la página personal del sitio en un marco en la ubicación original, en vez de redirigirla." -#: ../../Zotlabs/Module/Admin/Site.php:320 -msgid "Accounts abandoned after x days" -msgstr "Cuentas abandonadas después de x días" - -#: ../../Zotlabs/Module/Admin/Site.php:320 -msgid "" -"Will not waste system resources polling external sites for abandonded " -"accounts. Enter 0 for no time limit." -msgstr "Para evitar consumir recursos del sistema intentando poner al día las cuentas abandonadas. Introduzca 0 para no tener límite de tiempo." - -#: ../../Zotlabs/Module/Admin/Site.php:321 +#: ../../Zotlabs/Module/Admin/Site.php:507 msgid "Allowed friend domains" msgstr "Dominios amigos permitidos" -#: ../../Zotlabs/Module/Admin/Site.php:321 +#: ../../Zotlabs/Module/Admin/Site.php:507 msgid "" "Comma separated list of domains which are allowed to establish friendships " "with this site. Wildcards are accepted. Empty to allow any domains" msgstr "Lista separada por comas de dominios a los que está permitido establecer relaciones de amistad con este sitio. Se permiten comodines. Dejar en claro para aceptar cualquier dominio." -#: ../../Zotlabs/Module/Admin/Site.php:322 -msgid "Verify Email Addresses" -msgstr "Verificar las direcciones de correo electrónico" - -#: ../../Zotlabs/Module/Admin/Site.php:322 -msgid "" -"Check to verify email addresses used in account registration (recommended)." -msgstr "Activar para la verificación de la dirección de correo electrónico en el registro de una cuenta (recomendado)." - -#: ../../Zotlabs/Module/Admin/Site.php:323 +#: ../../Zotlabs/Module/Admin/Site.php:508 msgid "Force publish" msgstr "Forzar la publicación" -#: ../../Zotlabs/Module/Admin/Site.php:323 +#: ../../Zotlabs/Module/Admin/Site.php:508 msgid "" "Check to force all profiles on this site to be listed in the site directory." msgstr "Intentar forzar todos los perfiles para que sean listados en el directorio de este sitio." -#: ../../Zotlabs/Module/Admin/Site.php:324 +#: ../../Zotlabs/Module/Admin/Site.php:509 msgid "Import Public Streams" msgstr "Importar contenido público" -#: ../../Zotlabs/Module/Admin/Site.php:324 +#: ../../Zotlabs/Module/Admin/Site.php:509 msgid "" "Import and allow access to public content pulled from other sites. Warning: " "this content is unmoderated." msgstr "Importar y permitir acceso al contenido público sacado de otros sitios. Advertencia: este contenido no está moderado, por lo que podría encontrar cosas inapropiadas u ofensivas." -#: ../../Zotlabs/Module/Admin/Site.php:325 +#: ../../Zotlabs/Module/Admin/Site.php:510 msgid "Site only Public Streams" msgstr "Solo contenido público en este sitio" -#: ../../Zotlabs/Module/Admin/Site.php:325 +#: ../../Zotlabs/Module/Admin/Site.php:510 msgid "" "Allow access to public content originating only from this site if Imported " "Public Streams are disabled." msgstr "Permitir el acceso al contenido público originado sólo desde este sitio si los \"streams\" públicos Importados están deshabilitados." -#: ../../Zotlabs/Module/Admin/Site.php:326 +#: ../../Zotlabs/Module/Admin/Site.php:511 msgid "Allow anybody on the internet to access the Public streams" msgstr "Permitir que cualquiera en Internet pueda acceder a los \"streams\" públicos" -#: ../../Zotlabs/Module/Admin/Site.php:326 +#: ../../Zotlabs/Module/Admin/Site.php:511 msgid "" "Disable to require authentication before viewing. Warning: this content is " "unmoderated." msgstr "Desactivar para requerir autenticación antes de la visualización. Advertencia: este contenido no está moderado." -#: ../../Zotlabs/Module/Admin/Site.php:327 +#: ../../Zotlabs/Module/Admin/Site.php:512 msgid "Only import Public stream posts with this text" msgstr "Importar solo entradas del stream púlbico con este texto " -#: ../../Zotlabs/Module/Admin/Site.php:327 -#: ../../Zotlabs/Module/Admin/Site.php:328 +#: ../../Zotlabs/Module/Admin/Site.php:512 +#: ../../Zotlabs/Module/Admin/Site.php:513 #: ../../Zotlabs/Module/Connedit.php:885 ../../Zotlabs/Module/Connedit.php:886 msgid "" "words one per line or #tags or /patterns/ or lang=xx, leave blank to import " "all posts" msgstr "Una sola opción por línea: palabras, #etiquetas, /patrones/ o lang=xx. Dejar en blanco para importarlo todo" -#: ../../Zotlabs/Module/Admin/Site.php:328 +#: ../../Zotlabs/Module/Admin/Site.php:513 msgid "Do not import Public stream posts with this text" msgstr "No importar entradas del stream público con este texto " -#: ../../Zotlabs/Module/Admin/Site.php:331 +#: ../../Zotlabs/Module/Admin/Site.php:516 msgid "Login on Homepage" msgstr "Iniciar sesión en la página personal" -#: ../../Zotlabs/Module/Admin/Site.php:331 +#: ../../Zotlabs/Module/Admin/Site.php:516 msgid "" "Present a login box to visitors on the home page if no other content has " "been configured." msgstr "Presentar a los visitantes una casilla de identificación en la página de inicio, si no se ha configurado otro tipo de contenido." -#: ../../Zotlabs/Module/Admin/Site.php:332 +#: ../../Zotlabs/Module/Admin/Site.php:517 msgid "Enable context help" msgstr "Habilitar la ayuda contextual" -#: ../../Zotlabs/Module/Admin/Site.php:332 +#: ../../Zotlabs/Module/Admin/Site.php:517 msgid "" "Display contextual help for the current page when the help button is " "pressed." msgstr "Ver la ayuda contextual para la página actual cuando se pulse el botón de Ayuda." -#: ../../Zotlabs/Module/Admin/Site.php:334 +#: ../../Zotlabs/Module/Admin/Site.php:519 msgid "Reply-to email address for system generated email." msgstr "Dirección de respuesta para el correo electrónico generado por el sistema." -#: ../../Zotlabs/Module/Admin/Site.php:335 +#: ../../Zotlabs/Module/Admin/Site.php:520 msgid "Sender (From) email address for system generated email." msgstr "Dirección del remitente (From) para el correo electrónico generado por el sistema." -#: ../../Zotlabs/Module/Admin/Site.php:336 +#: ../../Zotlabs/Module/Admin/Site.php:521 msgid "Name of email sender for system generated email." msgstr "Nombre del remitente del correo electrónico generado por el sistema." -#: ../../Zotlabs/Module/Admin/Site.php:338 +#: ../../Zotlabs/Module/Admin/Site.php:523 msgid "Directory Server URL" msgstr "URL del servidor de directorio" -#: ../../Zotlabs/Module/Admin/Site.php:338 +#: ../../Zotlabs/Module/Admin/Site.php:523 msgid "Default directory server" msgstr "Servidor de directorio predeterminado" -#: ../../Zotlabs/Module/Admin/Site.php:340 +#: ../../Zotlabs/Module/Admin/Site.php:525 msgid "Enable SSE Notifications" msgstr "Habilitar notificaciones SSE" -#: ../../Zotlabs/Module/Admin/Site.php:340 +#: ../../Zotlabs/Module/Admin/Site.php:525 msgid "" "If disabled, traditional polling will be used. Warning: this setting might " "not be suited for shared hosting" msgstr "Si está desactivado, se usará el sistema de votación tradicional. Advertencia: esta configuración podría no ser adecuada para el alojamiento compartido" -#: ../../Zotlabs/Module/Admin/Site.php:342 +#: ../../Zotlabs/Module/Admin/Site.php:527 msgid "Proxy user" msgstr "Usuario del proxy" -#: ../../Zotlabs/Module/Admin/Site.php:343 +#: ../../Zotlabs/Module/Admin/Site.php:528 msgid "Proxy URL" msgstr "Dirección del proxy" -#: ../../Zotlabs/Module/Admin/Site.php:344 +#: ../../Zotlabs/Module/Admin/Site.php:529 msgid "Network timeout" msgstr "Tiempo de espera de la red" -#: ../../Zotlabs/Module/Admin/Site.php:344 +#: ../../Zotlabs/Module/Admin/Site.php:529 msgid "Value is in seconds. Set to 0 for unlimited (not recommended)." msgstr "Valor en segundos. Poner a 0 para que no haya tiempo límite (no recomendado)" -#: ../../Zotlabs/Module/Admin/Site.php:345 +#: ../../Zotlabs/Module/Admin/Site.php:530 msgid "Delivery interval" msgstr "Intervalo de entrega" -#: ../../Zotlabs/Module/Admin/Site.php:345 +#: ../../Zotlabs/Module/Admin/Site.php:530 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 "Retrasar los procesos de transmisión en segundo plano por esta cantidad de segundos para reducir la carga del sistema. Recomendado: 4-5 para sitios compartidos, 2-3 para servidores virtuales privados, 0-1 para grandes servidores dedicados." -#: ../../Zotlabs/Module/Admin/Site.php:346 +#: ../../Zotlabs/Module/Admin/Site.php:531 msgid "Deliveries per process" msgstr "Intentos de envío por proceso" -#: ../../Zotlabs/Module/Admin/Site.php:346 +#: ../../Zotlabs/Module/Admin/Site.php:531 msgid "" "Number of deliveries to attempt in a single operating system process. Adjust" " if necessary to tune system performance. Recommend: 1-5." msgstr "Numero de envíos a intentar en un único proceso del sistema operativo. Ajustar si es necesario mejorar el rendimiento. Se recomienda: 1-5." -#: ../../Zotlabs/Module/Admin/Site.php:347 +#: ../../Zotlabs/Module/Admin/Site.php:532 msgid "Queue Threshold" msgstr "Umbral de la cola de espera" -#: ../../Zotlabs/Module/Admin/Site.php:347 +#: ../../Zotlabs/Module/Admin/Site.php:532 msgid "" "Always defer immediate delivery if queue contains more than this number of " "entries." msgstr "Aplazar siempre la entrega inmediata si la cola contiene más de este número de entradas." -#: ../../Zotlabs/Module/Admin/Site.php:348 +#: ../../Zotlabs/Module/Admin/Site.php:533 msgid "Poll interval" msgstr "Intervalo máximo de tiempo entre dos mensajes sucesivos" -#: ../../Zotlabs/Module/Admin/Site.php:348 +#: ../../Zotlabs/Module/Admin/Site.php:533 msgid "" "Delay background polling processes by this many seconds to reduce system " "load. If 0, use delivery interval." msgstr "Retrasar el intervalo de envío en segundo plano, en esta cantidad de segundos, para reducir la carga del sistema. Si es 0, usar el intervalo de entrega." -#: ../../Zotlabs/Module/Admin/Site.php:349 +#: ../../Zotlabs/Module/Admin/Site.php:534 msgid "Path to ImageMagick convert program" msgstr "Ruta al programa de conversión de ImageMagick" -#: ../../Zotlabs/Module/Admin/Site.php:349 +#: ../../Zotlabs/Module/Admin/Site.php:534 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" msgstr "Si está configurado, utilice este programa para generar miniaturas de fotos para imágenes de gran tamaño ( > 4000 píxeles en cualquiera de las dos dimensiones), de lo contrario se puede agotar la memoria. Ejemplo: /usr/bin/convert" -#: ../../Zotlabs/Module/Admin/Site.php:350 +#: ../../Zotlabs/Module/Admin/Site.php:535 msgid "Maximum Load Average" msgstr "Carga media máxima" -#: ../../Zotlabs/Module/Admin/Site.php:350 +#: ../../Zotlabs/Module/Admin/Site.php:535 msgid "" "Maximum system load before delivery and poll processes are deferred - " "default 50." msgstr "Carga máxima del sistema antes de que los procesos de entrega y envío se hayan retardado - por defecto, 50." -#: ../../Zotlabs/Module/Admin/Site.php:351 +#: ../../Zotlabs/Module/Admin/Site.php:536 msgid "Expiration period in days for imported (grid/network) content" msgstr "Caducidad del contenido importado de otros sitios (en días)" -#: ../../Zotlabs/Module/Admin/Site.php:351 +#: ../../Zotlabs/Module/Admin/Site.php:536 msgid "0 for no expiration of imported content" msgstr "0 para que no caduque el contenido importado" -#: ../../Zotlabs/Module/Admin/Site.php:352 +#: ../../Zotlabs/Module/Admin/Site.php:537 msgid "" "Do not expire any posts which have comments less than this many days ago" msgstr "No caduque ningún mensaje que tenga menos comentarios que este hace muchos días" -#: ../../Zotlabs/Module/Admin/Site.php:354 +#: ../../Zotlabs/Module/Admin/Site.php:538 msgid "" "Public servers: Optional landing (marketing) webpage for new registrants" msgstr "Servidores públicos: Página web de acogida (marketing) opcional para nuevos registros" -#: ../../Zotlabs/Module/Admin/Site.php:354 +#: ../../Zotlabs/Module/Admin/Site.php:538 #, php-format msgid "Create this page first. Default is %s/register" msgstr "Crear esta página primero. Por defecto es %s/register" -#: ../../Zotlabs/Module/Admin/Site.php:355 +#: ../../Zotlabs/Module/Admin/Site.php:539 msgid "Page to display after creating a new channel" msgstr "Página a mostrar después de la creación de un nuevo canal" -#: ../../Zotlabs/Module/Admin/Site.php:355 +#: ../../Zotlabs/Module/Admin/Site.php:539 msgid "Default: profiles" msgstr "Perfiles predeterminados" -#: ../../Zotlabs/Module/Admin/Site.php:357 +#: ../../Zotlabs/Module/Admin/Site.php:540 msgid "Optional: site location" msgstr "Opcional: ubicación del sitio" -#: ../../Zotlabs/Module/Admin/Site.php:357 +#: ../../Zotlabs/Module/Admin/Site.php:540 msgid "Region or country" msgstr "Región o país" +#: ../../Zotlabs/Module/Admin/Site.php:625 +#: ../../Zotlabs/Module/Admin/Site.php:626 +msgid "Invalid 24h time value (hhmm/hmm)" +msgstr "Valor de tiempo de 24h no válido (hhmm/hmm)" + #: ../../Zotlabs/Module/Admin/Logs.php:28 msgid "Log settings updated." msgstr "Actualizado el informe de configuraciones." @@ -10953,6 +11148,10 @@ msgstr "Código permitido al canal '%s'" msgid "Channel '%s' code disallowed" msgstr "Código no permitido al canal '%s'" +#: ../../Zotlabs/Module/Admin/Channels.php:148 +msgid "select all" +msgstr "seleccionar todo" + #: ../../Zotlabs/Module/Admin/Channels.php:150 #: ../../Zotlabs/Module/Directory.php:362 msgid "Censor" @@ -11016,10 +11215,6 @@ msgstr "Nueva contraseña otra vez" msgid "Account language (for emails)" msgstr "Idioma de la cuenta (para los correos electrónicos)" -#: ../../Zotlabs/Module/Admin/Account_edit.php:72 -msgid "Service class" -msgstr "Clase de servicio" - #: ../../Zotlabs/Module/Admin/Profs.php:89 msgid "New Profile Field" msgstr "Nuevo campo en el perfil" @@ -11286,6 +11481,129 @@ msgstr "Por favor, introduzca su contraseña para su verificación:" msgid "Remove Channel" msgstr "Eliminar el canal" +#: ../../Zotlabs/Module/Regate.php:81 +msgid "Email resent" +msgstr "Correo electrónico reenviado" + +#: ../../Zotlabs/Module/Regate.php:81 +msgid "Email resend failed" +msgstr "Fallo en el reenvío del correo electrónico" + +#: ../../Zotlabs/Module/Regate.php:105 +msgid "Verify successfull" +msgstr "Verificar que se ha hecho bien" + +#: ../../Zotlabs/Module/Regate.php:149 +msgid "Account successfull created" +msgstr "Cuenta creada con éxito" + +#: ../../Zotlabs/Module/Regate.php:190 +msgid "Channel successfull created" +msgstr "Canal creado con éxito" + +#: ../../Zotlabs/Module/Regate.php:196 +msgid "Automatic channel creation failed. Please create a channel." +msgstr "La creación automática de canales ha fallado. Por favor, cree un canal." + +#: ../../Zotlabs/Module/Regate.php:208 +msgid "Account creation error" +msgstr "Error en la creación de la cuenta" + +#: ../../Zotlabs/Module/Regate.php:220 +msgid "Verify failed" +msgstr "Verificación fallida" + +#: ../../Zotlabs/Module/Regate.php:225 +msgid "Token verification failed" +msgstr "Ha fallado el token de verificación." + +#: ../../Zotlabs/Module/Regate.php:230 +msgid "Request not inside time frame" +msgstr "Solicitud fuera de plazo" + +#: ../../Zotlabs/Module/Regate.php:236 ../../Zotlabs/Module/Regate.php:266 +msgid "Identity unknown" +msgstr "Identidad desconocida" + +#: ../../Zotlabs/Module/Regate.php:242 +msgid "dId2 mistaken" +msgstr "did2 equivocado/a" + +#: ../../Zotlabs/Module/Regate.php:270 +msgid "Your Registration ID" +msgstr "Su ID de registro" + +#: ../../Zotlabs/Module/Regate.php:283 ../../Zotlabs/Module/Regate.php:374 +#: ../../Zotlabs/Module/Regate.php:403 +msgid "Registration verification" +msgstr "Verificación del registro" + +#: ../../Zotlabs/Module/Regate.php:290 ../../Zotlabs/Module/Regate.php:408 +msgid "Hold on, you can start verification in" +msgstr "Espere, puede empezar la verificación en " + +#: ../../Zotlabs/Module/Regate.php:291 +msgid "Please remember your verification token for ID" +msgstr "Por favor, recuerde su token de verificación para la identificación" + +#: ../../Zotlabs/Module/Regate.php:292 +msgid "Token validity" +msgstr "Validez del token" + +#: ../../Zotlabs/Module/Regate.php:328 +msgid "Resend" +msgstr "Reenviar" + +#: ../../Zotlabs/Module/Regate.php:333 +msgid "Registration status" +msgstr "Estado del registro" + +#: ../../Zotlabs/Module/Regate.php:336 +msgid "Verification successful!" +msgstr "¡Verificación exitosa!" + +#: ../../Zotlabs/Module/Regate.php:337 +msgid "Your login ID is" +msgstr "Su ID de acceso es" + +#: ../../Zotlabs/Module/Regate.php:338 +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 "Una vez que su cuenta haya sido aprobada por nuestro administrador, podrá iniciar sesión con su ID de acceso y la contraseña proporcionada." + +#: ../../Zotlabs/Module/Regate.php:350 +msgid "Registration request revoked" +msgstr "Solicitud de registro anulada" + +#: ../../Zotlabs/Module/Regate.php:351 +msgid "Sorry for any inconvience. Thank you for your response." +msgstr "Disculpe las molestias. Gracias por su respuesta." + +#: ../../Zotlabs/Module/Regate.php:375 +msgid "Please enter your verification token for ID" +msgstr "Por favor, introduzca su token de verificación para la identificación" + +#: ../../Zotlabs/Module/Regate.php:385 +msgid "Verification token" +msgstr "Token de verificación " + +#: ../../Zotlabs/Module/Regate.php:396 +msgid "ID expired" +msgstr "ID caducada" + +#: ../../Zotlabs/Module/Regate.php:409 +msgid "You will require the verification token for ID" +msgstr "Necesitará el token de verificación para identificarse" + +#: ../../Zotlabs/Module/Regate.php:417 +msgid "Unknown or expired ID" +msgstr "ID desconocida o caducada" + +#: ../../Zotlabs/Module/Regate.php:428 +msgid "dId2 malformed" +msgstr "did2 malformado/a" + #: ../../Zotlabs/Module/Events.php:468 msgid "Edit event title" msgstr "Editar el título del evento" @@ -11534,7 +11852,7 @@ msgid "" msgstr "Esta cuenta y todos sus canales van a ser eliminados de la red." #: ../../Zotlabs/Module/Removeaccount.php:61 -#: ../../Zotlabs/Module/Settings/Account.php:105 +#: ../../Zotlabs/Module/Settings/Account.php:109 msgid "Remove Account" msgstr "Eliminar cuenta" @@ -11546,30 +11864,30 @@ msgstr "App idioma" msgid "Change UI language" msgstr "Cambiar el idioma de la interfaz de usuario" -#: ../../Zotlabs/Module/Uexport.php:61 +#: ../../Zotlabs/Module/Uexport.php:62 msgid "Channel Export App" msgstr "App Exportación de canales" -#: ../../Zotlabs/Module/Uexport.php:62 +#: ../../Zotlabs/Module/Uexport.php:63 msgid "Export your channel" msgstr "Exportar su canal" -#: ../../Zotlabs/Module/Uexport.php:72 ../../Zotlabs/Module/Uexport.php:73 +#: ../../Zotlabs/Module/Uexport.php:73 ../../Zotlabs/Module/Uexport.php:74 msgid "Export Channel" msgstr "Exportar el canal" -#: ../../Zotlabs/Module/Uexport.php:74 +#: ../../Zotlabs/Module/Uexport.php:75 msgid "" "Export your basic channel information to a file. This acts as a backup of " "your connections, permissions, profile and basic data, which can be used to " "import your data to a new server hub, but does not contain your content." msgstr "Exportar la información básica del canal a un fichero. Este equivale a una copia de seguridad de sus conexiones, el perfil y datos fundamentales, que puede usarse para importar sus datos a un nuevo servidor, pero no incluye su contenido." -#: ../../Zotlabs/Module/Uexport.php:75 +#: ../../Zotlabs/Module/Uexport.php:76 msgid "Export Content" msgstr "Exportar contenidos" -#: ../../Zotlabs/Module/Uexport.php:76 +#: ../../Zotlabs/Module/Uexport.php:77 msgid "" "Export your channel information and recent content to a JSON backup that can" " be restored or imported to another server hub. This backs up all of your " @@ -11578,11 +11896,11 @@ msgid "" " this download to begin." msgstr "Exportar la información sobre su canal y el contenido reciente a un fichero de respaldo JSON, que puede ser restaurado o importado a otro servidor. Este fichero incluye todas sus conexiones, permisos, datos del perfil y publicaciones de varios meses. Puede llegar a ser MUY grande. Por favor, sea paciente, la descarga puede tardar varios minutos en comenzar." -#: ../../Zotlabs/Module/Uexport.php:78 +#: ../../Zotlabs/Module/Uexport.php:79 msgid "Export your posts from a given year." msgstr "Exporta sus publicaciones de un año dado." -#: ../../Zotlabs/Module/Uexport.php:80 +#: ../../Zotlabs/Module/Uexport.php:81 msgid "" "You may also export your posts and conversations for a particular year or " "month. Adjust the date in your browser location bar to select other dates. " @@ -11590,21 +11908,21 @@ msgid "" "please try again selecting a more limited date range." msgstr "También puede exportar sus mensajes y conversaciones durante un año o mes en particular. Ajuste la fecha en la barra de direcciones del navegador para seleccionar otras fechas. Si la exportación falla (posiblemente debido al agotamiento de la memoria del servidor hub), por favor, intente de nuevo la selección de un rango de fechas más pequeño." -#: ../../Zotlabs/Module/Uexport.php:81 +#: ../../Zotlabs/Module/Uexport.php:82 #, php-format msgid "" "To select all posts for a given year, such as this year, visit %2$s" msgstr "Para seleccionar todos los mensajes de un año determinado, como este año, visite %2$s" -#: ../../Zotlabs/Module/Uexport.php:82 +#: ../../Zotlabs/Module/Uexport.php:83 #, php-format msgid "" "To select all posts for a given month, such as January of this year, visit " "%2$s" msgstr "Para seleccionar todos los mensajes de un mes determinado, como el de enero de este año, visite %2$s" -#: ../../Zotlabs/Module/Uexport.php:83 +#: ../../Zotlabs/Module/Uexport.php:84 #, php-format msgid "" "These content files may be imported or restored by visiting %2$s o cualquier sitio que contenga su canal. Para obtener los mejores resultados, por favor, importar o restaurar estos ficheros en orden de fecha (la más antigua primero)." -#: ../../Zotlabs/Module/Display.php:380 +#: ../../Zotlabs/Module/Display.php:372 msgid "Article" msgstr "Artículo" -#: ../../Zotlabs/Module/Display.php:425 +#: ../../Zotlabs/Module/Display.php:417 msgid "Item has been removed." msgstr "Se ha eliminado el elemento." @@ -11664,12 +11982,21 @@ msgstr "Los caracteres permitidos son a-z 0-9, - and _" msgid "Channel name" msgstr "Nombre del canal" +#: ../../Zotlabs/Module/New_channel.php:178 +#: ../../Zotlabs/Module/Settings/Channel.php:537 +msgid "Channel role and privacy" +msgstr "Clase de canal y privacidad" + #: ../../Zotlabs/Module/New_channel.php:178 msgid "" "Select a channel permission role compatible with your usage needs and " "privacy requirements." msgstr "Seleccione unos permisos de rol del canal compatibles con sus necesidades de uso y requisitos de privacidad." +#: ../../Zotlabs/Module/New_channel.php:178 +msgid "Read more about channel permission roles" +msgstr "Leer más sobre los roles y permisos" + #: ../../Zotlabs/Module/New_channel.php:181 msgid "Create a Channel" msgstr "Crear un canal" @@ -11698,7 +12025,7 @@ msgstr "le ha enviado un mensaje privado" msgid "added your channel" msgstr "añadió este canal a sus conexiones" -#: ../../Zotlabs/Module/Ping.php:418 ../../Zotlabs/Lib/Enotify.php:986 +#: ../../Zotlabs/Module/Ping.php:418 msgid "requires approval" msgstr "requiere aprobación" @@ -11719,11 +12046,11 @@ msgstr "publicó un evento" msgid "shared a file with you" msgstr "compartió un archivo con usted" -#: ../../Zotlabs/Module/Ping.php:672 ../../Zotlabs/Module/Sse_bs.php:540 +#: ../../Zotlabs/Module/Ping.php:672 ../../Zotlabs/Module/Sse_bs.php:554 msgid "Private forum" msgstr "Foro privado" -#: ../../Zotlabs/Module/Ping.php:672 ../../Zotlabs/Module/Sse_bs.php:540 +#: ../../Zotlabs/Module/Ping.php:672 ../../Zotlabs/Module/Sse_bs.php:554 msgid "Public forum" msgstr "Foro público" @@ -11857,43 +12184,43 @@ msgstr "Cuentas caducadas" msgid "Expiring accounts" msgstr "Cuentas que caducan" -#: ../../Zotlabs/Module/Admin.php:120 +#: ../../Zotlabs/Module/Admin.php:123 msgid "Message queues" msgstr "Mensajes en cola" -#: ../../Zotlabs/Module/Admin.php:134 +#: ../../Zotlabs/Module/Admin.php:137 msgid "Your software should be updated" msgstr "Debe actualizar su software" -#: ../../Zotlabs/Module/Admin.php:139 +#: ../../Zotlabs/Module/Admin.php:142 msgid "Summary" msgstr "Sumario" -#: ../../Zotlabs/Module/Admin.php:142 +#: ../../Zotlabs/Module/Admin.php:145 msgid "Registered accounts" msgstr "Cuentas registradas" -#: ../../Zotlabs/Module/Admin.php:143 +#: ../../Zotlabs/Module/Admin.php:146 msgid "Pending registrations" msgstr "Registros pendientes" -#: ../../Zotlabs/Module/Admin.php:144 +#: ../../Zotlabs/Module/Admin.php:147 msgid "Registered channels" msgstr "Canales registrados" -#: ../../Zotlabs/Module/Admin.php:145 +#: ../../Zotlabs/Module/Admin.php:148 msgid "Active addons" msgstr "Addons acivos" -#: ../../Zotlabs/Module/Admin.php:146 +#: ../../Zotlabs/Module/Admin.php:149 msgid "Version" msgstr "Versión" -#: ../../Zotlabs/Module/Admin.php:147 +#: ../../Zotlabs/Module/Admin.php:150 msgid "Repository version (master)" msgstr "Versión del repositorio (master)" -#: ../../Zotlabs/Module/Admin.php:148 +#: ../../Zotlabs/Module/Admin.php:151 msgid "Repository version (dev)" msgstr "Versión del repositorio (dev)" @@ -12132,7 +12459,7 @@ msgid "Use a photo from your albums" msgstr "Usar una foto de sus álbumes" #: ../../Zotlabs/Module/Profile_photo.php:511 -#: ../../Zotlabs/Module/Cover_photo.php:432 ../../Zotlabs/Module/Wiki.php:405 +#: ../../Zotlabs/Module/Cover_photo.php:432 ../../Zotlabs/Module/Wiki.php:404 msgid "Choose a different album" msgstr "Elegir un álbum diferente..." @@ -12217,7 +12544,7 @@ msgstr "Archivadas o inaccesibles" #: ../../Zotlabs/Module/Connections.php:83 #: ../../Zotlabs/Module/Connections.php:92 ../../Zotlabs/Module/Menu.php:180 -#: ../../Zotlabs/Module/Notifications.php:50 +#: ../../Zotlabs/Module/Notifications.php:53 msgid "New" msgstr "Nuevas" @@ -12526,7 +12853,7 @@ msgid "" "Password reset failed." msgstr "La solicitud no ha podido ser verificada. (Puede que la haya enviado con anterioridad) El restablecimiento de la contraseña ha fallado." -#: ../../Zotlabs/Module/Lostpass.php:91 ../../boot.php:1720 +#: ../../Zotlabs/Module/Lostpass.php:91 ../../boot.php:1725 msgid "Password Reset" msgstr "Restablecer la contraseña" @@ -12743,7 +13070,7 @@ msgid "Your full name" msgstr "Nombre completo" #: ../../Zotlabs/Module/Profiles.php:752 -msgid "Short title/tescription" +msgid "Short title/description" msgstr "Breve título y descripción" #: ../../Zotlabs/Module/Profiles.php:752 @@ -12842,12 +13169,12 @@ msgstr "Mis otros canales" msgid "Communications" msgstr "Comunicaciones" -#: ../../Zotlabs/Module/Subthread.php:143 +#: ../../Zotlabs/Module/Subthread.php:128 #, php-format msgid "%1$s is following %2$s's %3$s" msgstr "%1$s está siguiendo %3$s de %2$s" -#: ../../Zotlabs/Module/Subthread.php:145 +#: ../../Zotlabs/Module/Subthread.php:130 #, php-format msgid "%1$s stopped following %2$s's %3$s" msgstr "%1$s ha dejado de seguir %3$s de %2$s" @@ -12914,74 +13241,121 @@ msgstr "Nueva dirección del canal" msgid "Rename Channel" msgstr "Renombrar el canal" -#: ../../Zotlabs/Module/Invite.php:37 -msgid "Total invitation limit exceeded." -msgstr "Se ha superado el límite máximo de invitaciones." +#: ../../Zotlabs/Module/Invite.php:56 ../../Zotlabs/Module/Invite.php:310 +msgid "Invite App" +msgstr "Solicitar una app" + +#: ../../Zotlabs/Module/Invite.php:68 +msgid "Register is closed" +msgstr "El registro está cerrado" -#: ../../Zotlabs/Module/Invite.php:61 +#: ../../Zotlabs/Module/Invite.php:102 ../../Zotlabs/Module/Invite.php:549 +msgid "Note, the invitation code is valid up to" +msgstr "Tenga en cuenta que el código de invitación es válido hasta " + +#: ../../Zotlabs/Module/Invite.php:115 #, php-format -msgid "%s : Not a valid email address." -msgstr "%s : No es una dirección de correo electrónico válida. " +msgid "Too many recipients for one invitation (max %d)" +msgstr "Demasiados destinatarios para una invitación (máx %d)" -#: ../../Zotlabs/Module/Invite.php:75 -msgid "Please join us on $Projectname" -msgstr "Únase a nosotros en $Projectname" +#: ../../Zotlabs/Module/Invite.php:119 +msgid "No recipients for this invitation" +msgstr "No hay destinatarios para esta invitación" -#: ../../Zotlabs/Module/Invite.php:85 -msgid "Invitation limit exceeded. Please contact your site administrator." -msgstr "Excedido el límite de invitaciones. Por favor, contacte con el Administrador de su sitio." +#: ../../Zotlabs/Module/Invite.php:133 +#, php-format +msgid "(%s) : Not a valid email address" +msgstr "(%s): No es una dirección de correo electrónico válida" -#: ../../Zotlabs/Module/Invite.php:94 +#: ../../Zotlabs/Module/Invite.php:138 #, php-format -msgid "%d message sent." -msgid_plural "%d messages sent." -msgstr[0] "%d mensajes enviados." -msgstr[1] "%d mensajes enviados." +msgid "(%s) : Not a real email address" +msgstr "(%s) : No es una dirección de correo electrónica real" -#: ../../Zotlabs/Module/Invite.php:110 -msgid "Invite App" -msgstr "Solicitar una app" +#: ../../Zotlabs/Module/Invite.php:145 +#, php-format +msgid "(%s) : Not allowed email address" +msgstr "(%s) : Dirección de correo electrónico no permitida" -#: ../../Zotlabs/Module/Invite.php:111 -msgid "Send email invitations to join this network" -msgstr "Enviar invitaciones por correo electrónico para unirse a esta red" +#: ../../Zotlabs/Module/Invite.php:158 +#, php-format +msgid "(%s) : email address already in use" +msgstr "(%s) : La dirección de correo electrónico ya está en uso" + +#: ../../Zotlabs/Module/Invite.php:165 +#, php-format +msgid "(%s) : Accepted email address" +msgstr "(%s) : Dirección de correo electrónico aceptada" + +#: ../../Zotlabs/Module/Invite.php:257 +#, php-format +msgid "To %s : Message delivery success." +msgstr "To %s : Entrega exitosa del mensaje." + +#: ../../Zotlabs/Module/Invite.php:289 +#, php-format +msgid "%1$d mail(s) sent, %2$d mail error(s)" +msgstr "%1$d correo(s) enviado, %2$d error(es) de correo" -#: ../../Zotlabs/Module/Invite.php:124 +#: ../../Zotlabs/Module/Invite.php:315 +msgid "Invites not proposed by configuration" +msgstr "Invitaciones no propuestas por la configuración" + +#: ../../Zotlabs/Module/Invite.php:316 +msgid "Contact the site admin" +msgstr "Contactar con el administrador del sitio" + +#: ../../Zotlabs/Module/Invite.php:332 +msgid "Invites by users not enabled" +msgstr "Invitaciones de usuarios no habilitadas" + +#: ../../Zotlabs/Module/Invite.php:337 msgid "You have no more invitations available" msgstr "No tiene más invitaciones disponibles" -#: ../../Zotlabs/Module/Invite.php:155 +#: ../../Zotlabs/Module/Invite.php:353 +msgid "Not on xchan" +msgstr "No en xchan" + +#: ../../Zotlabs/Module/Invite.php:386 +msgid "All users invitation limit exceeded." +msgstr "Se ha superado el límite de invitaciones a todos los usuarios." + +#: ../../Zotlabs/Module/Invite.php:404 +msgid "Invitation expires after" +msgstr "La invitación expira después de " + +#: ../../Zotlabs/Module/Invite.php:504 ../../Zotlabs/Module/Invite.php:543 +msgid "Invitation" +msgstr "Invitación" + +#: ../../Zotlabs/Module/Invite.php:534 msgid "Send invitations" msgstr "Enviar invitaciones" -#: ../../Zotlabs/Module/Invite.php:156 -msgid "Enter email addresses, one per line:" -msgstr "Introduzca las direcciones de correo electrónico, una por línea:" - -#: ../../Zotlabs/Module/Invite.php:158 -msgid "Please join my community on $Projectname." -msgstr "Por favor, únase a mi comunidad en $Projectname." +#: ../../Zotlabs/Module/Invite.php:535 +msgid "Invitations I am using" +msgstr "Invitaciones que estoy utilizando " -#: ../../Zotlabs/Module/Invite.php:160 -msgid "You will need to supply this invitation code:" -msgstr "Tendrá que suministrar este código de invitación:" +#: ../../Zotlabs/Module/Invite.php:536 +msgid "Invitations we are using" +msgstr "Invitaciones que usamos " -#: ../../Zotlabs/Module/Invite.php:161 -msgid "" -"1. Register at any $Projectname location (they are all inter-connected)" -msgstr "1. Regístrese en cualquier sitio de $Projectname (están todos interconectados)" +#: ../../Zotlabs/Module/Invite.php:537 +msgid "§ Note, the email(s) sent will be recorded in the system logs" +msgstr "§ Nota: el/los correo(s) electrónicos enviados quedarán registrados en los registros del sistema" -#: ../../Zotlabs/Module/Invite.php:163 -msgid "2. Enter my $Projectname network address into the site searchbar." -msgstr "2. Introduzca mi dirección $Projectname en la caja de búsqueda del sitio." +#: ../../Zotlabs/Module/Invite.php:538 +msgid "Enter email addresses, one per line:" +msgstr "Introduzca las direcciones de correo electrónico, una por línea:" -#: ../../Zotlabs/Module/Invite.php:164 -msgid "or visit" -msgstr "o visitar" +#: ../../Zotlabs/Module/Invite.php:540 +msgid "Invite template" +msgstr "Plantilla de invitación" -#: ../../Zotlabs/Module/Invite.php:166 -msgid "3. Click [Connect]" -msgstr "3. Pulse [conectar]" +#: ../../Zotlabs/Module/Invite.php:548 +msgid "Here you may enter personal notes to the recipient(s)" +msgstr "Aquí puede introducir notas personales para el/los destinatario(s)" #: ../../Zotlabs/Module/Notes.php:57 msgid "Notes App" @@ -13126,10 +13500,6 @@ msgstr "Publicar su perfil principal en el directorio de la red" msgid "Allow us to suggest you as a potential friend to new members?" msgstr "¿Nos permite sugerirle como amigo potencial a los nuevos miembros?" -#: ../../Zotlabs/Module/Settings/Channel.php:420 -msgid "or" -msgstr "o" - #: ../../Zotlabs/Module/Settings/Channel.php:429 msgid "Your channel address is" msgstr "Su dirección de canal es" @@ -13157,7 +13527,6 @@ msgid "Basic Settings" msgstr "Configuración básica" #: ../../Zotlabs/Module/Settings/Channel.php:502 -#: ../../Zotlabs/Module/Settings/Account.php:104 msgid "Email Address:" msgstr "Dirección de correo electrónico:" @@ -13476,59 +13845,63 @@ msgstr "Carpeta por defecto de los ficheros subidos" msgid "Remove this channel." msgstr "Eliminar este canal." -#: ../../Zotlabs/Module/Settings/Account.php:19 +#: ../../Zotlabs/Module/Settings/Account.php:21 msgid "Not valid email." msgstr "Correo electrónico no válido." -#: ../../Zotlabs/Module/Settings/Account.php:22 +#: ../../Zotlabs/Module/Settings/Account.php:24 msgid "Protected email address. Cannot change to that email." msgstr "Dirección de correo electrónico protegida. No se puede cambiar a ella." -#: ../../Zotlabs/Module/Settings/Account.php:31 +#: ../../Zotlabs/Module/Settings/Account.php:33 msgid "System failure storing new email. Please try again." msgstr "Fallo de sistema al guardar el nuevo correo electrónico. Por favor, inténtelo de nuevo." -#: ../../Zotlabs/Module/Settings/Account.php:48 +#: ../../Zotlabs/Module/Settings/Account.php:51 msgid "Password verification failed." msgstr "La comprobación de la contraseña ha fallado." -#: ../../Zotlabs/Module/Settings/Account.php:55 +#: ../../Zotlabs/Module/Settings/Account.php:58 msgid "Passwords do not match. Password unchanged." msgstr "Las contraseñas no coinciden. La contraseña no se ha cambiado." -#: ../../Zotlabs/Module/Settings/Account.php:59 +#: ../../Zotlabs/Module/Settings/Account.php:62 msgid "Empty passwords are not allowed. Password unchanged." msgstr "No se permiten contraseñas vacías. La contraseña no se ha cambiado." -#: ../../Zotlabs/Module/Settings/Account.php:73 +#: ../../Zotlabs/Module/Settings/Account.php:76 msgid "Password changed." msgstr "Contraseña cambiada." -#: ../../Zotlabs/Module/Settings/Account.php:75 +#: ../../Zotlabs/Module/Settings/Account.php:78 msgid "Password update failed. Please try again." msgstr "La actualización de la contraseña ha fallado. Por favor, inténtalo de nuevo." -#: ../../Zotlabs/Module/Settings/Account.php:99 +#: ../../Zotlabs/Module/Settings/Account.php:103 msgid "Account Settings" msgstr "Configuración de la cuenta" -#: ../../Zotlabs/Module/Settings/Account.php:100 +#: ../../Zotlabs/Module/Settings/Account.php:104 msgid "Current Password" msgstr "Contraseña actual" -#: ../../Zotlabs/Module/Settings/Account.php:101 +#: ../../Zotlabs/Module/Settings/Account.php:105 msgid "Enter New Password" msgstr "Escribir una nueva contraseña" -#: ../../Zotlabs/Module/Settings/Account.php:102 +#: ../../Zotlabs/Module/Settings/Account.php:106 msgid "Confirm New Password" msgstr "Confirmar la nueva contraseña" -#: ../../Zotlabs/Module/Settings/Account.php:102 +#: ../../Zotlabs/Module/Settings/Account.php:106 msgid "Leave password fields blank unless changing" msgstr "Dejar en blanco la contraseña a menos que desee cambiarla." -#: ../../Zotlabs/Module/Settings/Account.php:106 +#: ../../Zotlabs/Module/Settings/Account.php:108 +msgid "DId2 or Email Address:" +msgstr "Did2 o dirección de correo electrónico: " + +#: ../../Zotlabs/Module/Settings/Account.php:110 msgid "Remove this account including all its channels" msgstr "Eliminar esta cuenta incluyendo todos sus canales" @@ -14040,135 +14413,135 @@ msgstr "App Wiki" msgid "Provide a wiki for your channel" msgstr "Proporcionar un wiki para su canal" -#: ../../Zotlabs/Module/Wiki.php:133 +#: ../../Zotlabs/Module/Wiki.php:132 msgid "Error retrieving wiki" msgstr "Error al recuperar el wiki" -#: ../../Zotlabs/Module/Wiki.php:140 +#: ../../Zotlabs/Module/Wiki.php:139 msgid "Error creating zip file export folder" msgstr "Error al crear el fichero comprimido zip de la carpeta a exportar" -#: ../../Zotlabs/Module/Wiki.php:191 +#: ../../Zotlabs/Module/Wiki.php:190 msgid "Error downloading wiki: " msgstr "Error al descargar el wiki: " -#: ../../Zotlabs/Module/Wiki.php:212 ../../Zotlabs/Storage/Browser.php:404 +#: ../../Zotlabs/Module/Wiki.php:211 ../../Zotlabs/Storage/Browser.php:404 msgid "Download" msgstr "Descargar" -#: ../../Zotlabs/Module/Wiki.php:216 +#: ../../Zotlabs/Module/Wiki.php:215 msgid "Wiki name" msgstr "Nombre del wiki" -#: ../../Zotlabs/Module/Wiki.php:217 +#: ../../Zotlabs/Module/Wiki.php:216 msgid "Content type" msgstr "Tipo de contenido" -#: ../../Zotlabs/Module/Wiki.php:219 ../../Zotlabs/Storage/Browser.php:378 +#: ../../Zotlabs/Module/Wiki.php:218 ../../Zotlabs/Storage/Browser.php:378 msgid "Type" msgstr "Tipo" -#: ../../Zotlabs/Module/Wiki.php:220 +#: ../../Zotlabs/Module/Wiki.php:219 msgid "Any type" msgstr "Cualquier tipo" -#: ../../Zotlabs/Module/Wiki.php:227 +#: ../../Zotlabs/Module/Wiki.php:226 msgid "Lock content type" msgstr "Tipo de contenido bloqueado" -#: ../../Zotlabs/Module/Wiki.php:228 +#: ../../Zotlabs/Module/Wiki.php:227 msgid "Create a status post for this wiki" msgstr "Crear un mensaje de estado para este wiki" -#: ../../Zotlabs/Module/Wiki.php:229 +#: ../../Zotlabs/Module/Wiki.php:228 msgid "Edit Wiki Name" msgstr "Editar el nombre del wiki" -#: ../../Zotlabs/Module/Wiki.php:274 +#: ../../Zotlabs/Module/Wiki.php:273 msgid "Wiki not found" msgstr "Wiki no encontrado" -#: ../../Zotlabs/Module/Wiki.php:300 +#: ../../Zotlabs/Module/Wiki.php:299 msgid "Rename page" msgstr "Renombrar la página" -#: ../../Zotlabs/Module/Wiki.php:321 +#: ../../Zotlabs/Module/Wiki.php:320 msgid "Error retrieving page content" msgstr "Error al recuperar el contenido de la página" -#: ../../Zotlabs/Module/Wiki.php:329 ../../Zotlabs/Module/Wiki.php:331 +#: ../../Zotlabs/Module/Wiki.php:328 ../../Zotlabs/Module/Wiki.php:330 msgid "New page" msgstr "Nueva página" -#: ../../Zotlabs/Module/Wiki.php:366 +#: ../../Zotlabs/Module/Wiki.php:365 msgid "Revision Comparison" msgstr "Comparación de revisiones" -#: ../../Zotlabs/Module/Wiki.php:374 +#: ../../Zotlabs/Module/Wiki.php:373 msgid "Short description of your changes (optional)" msgstr "Breve descripción de sus cambios (opcional)" -#: ../../Zotlabs/Module/Wiki.php:394 +#: ../../Zotlabs/Module/Wiki.php:393 msgid "New page name" msgstr "Nombre de la nueva página" -#: ../../Zotlabs/Module/Wiki.php:399 +#: ../../Zotlabs/Module/Wiki.php:398 msgid "Embed image from photo albums" msgstr "Incluir una imagen de los álbumes de fotos" -#: ../../Zotlabs/Module/Wiki.php:410 +#: ../../Zotlabs/Module/Wiki.php:409 msgid "History" msgstr "Historial" -#: ../../Zotlabs/Module/Wiki.php:488 +#: ../../Zotlabs/Module/Wiki.php:487 msgid "Error creating wiki. Invalid name." msgstr "Error al crear el wiki: el nombre no es válido." -#: ../../Zotlabs/Module/Wiki.php:495 +#: ../../Zotlabs/Module/Wiki.php:494 msgid "A wiki with this name already exists." msgstr "Ya hay un wiki con este nombre." -#: ../../Zotlabs/Module/Wiki.php:508 +#: ../../Zotlabs/Module/Wiki.php:507 msgid "Wiki created, but error creating Home page." msgstr "Se ha creado el wiki, pero se ha producido un error al crear la página de inicio." -#: ../../Zotlabs/Module/Wiki.php:515 +#: ../../Zotlabs/Module/Wiki.php:514 msgid "Error creating wiki" msgstr "Error al crear el wiki" -#: ../../Zotlabs/Module/Wiki.php:539 +#: ../../Zotlabs/Module/Wiki.php:538 msgid "Error updating wiki. Invalid name." msgstr "Error al actualizar el wiki. Nombre no válido." -#: ../../Zotlabs/Module/Wiki.php:559 +#: ../../Zotlabs/Module/Wiki.php:557 msgid "Error updating wiki" msgstr "Error al actualizar el wiki" -#: ../../Zotlabs/Module/Wiki.php:574 +#: ../../Zotlabs/Module/Wiki.php:572 msgid "Wiki delete permission denied." msgstr "Se ha denegado el permiso para eliminar el wiki." -#: ../../Zotlabs/Module/Wiki.php:584 +#: ../../Zotlabs/Module/Wiki.php:582 msgid "Error deleting wiki" msgstr "Se ha producido un error al eliminar el wiki" -#: ../../Zotlabs/Module/Wiki.php:617 +#: ../../Zotlabs/Module/Wiki.php:615 msgid "New page created" msgstr "Se ha creado la nueva página" -#: ../../Zotlabs/Module/Wiki.php:739 +#: ../../Zotlabs/Module/Wiki.php:741 msgid "Cannot delete Home" msgstr "No se puede eliminar la página principal" -#: ../../Zotlabs/Module/Wiki.php:803 +#: ../../Zotlabs/Module/Wiki.php:817 msgid "Current Revision" msgstr "Revisión actual" -#: ../../Zotlabs/Module/Wiki.php:803 +#: ../../Zotlabs/Module/Wiki.php:817 msgid "Selected Revision" msgstr "Revisión seleccionada" -#: ../../Zotlabs/Module/Wiki.php:853 +#: ../../Zotlabs/Module/Wiki.php:872 msgid "You must be authenticated." msgstr "Debe estar autenticado." @@ -14446,17 +14819,17 @@ msgstr "Última actualización:" msgid "Details" msgstr "Detalles" -#: ../../Zotlabs/Module/Notifications.php:55 +#: ../../Zotlabs/Module/Notifications.php:58 #: ../../Zotlabs/Module/Notify.php:61 msgid "No more system notifications." msgstr "No hay más notificaciones del sistema" -#: ../../Zotlabs/Module/Notifications.php:59 +#: ../../Zotlabs/Module/Notifications.php:62 #: ../../Zotlabs/Module/Notify.php:65 msgid "System Notifications" msgstr "Notificaciones del sistema" -#: ../../Zotlabs/Module/Notifications.php:60 +#: ../../Zotlabs/Module/Notifications.php:63 #: ../../Zotlabs/Lib/ThreadItem.php:484 msgid "Mark all seen" msgstr "Marcar todo como visto" @@ -14674,32 +15047,32 @@ msgctxt "permcat" msgid "publisher" msgstr "editor" -#: ../../Zotlabs/Lib/Activity.php:2131 +#: ../../Zotlabs/Lib/Activity.php:2163 #, php-format msgid "Likes %1$s's %2$s" msgstr "Gusta de %2$sde %1$s" -#: ../../Zotlabs/Lib/Activity.php:2134 +#: ../../Zotlabs/Lib/Activity.php:2166 #, php-format msgid "Doesn't like %1$s's %2$s" msgstr "No le gusta %2$sde %1$s" -#: ../../Zotlabs/Lib/Activity.php:2140 +#: ../../Zotlabs/Lib/Activity.php:2172 #, php-format msgid "Will attend %s's event" msgstr "Asistirá al evento de %s" -#: ../../Zotlabs/Lib/Activity.php:2143 +#: ../../Zotlabs/Lib/Activity.php:2175 #, php-format msgid "Will not attend %s's event" msgstr "No asistirá al evento de %s" -#: ../../Zotlabs/Lib/Activity.php:2146 +#: ../../Zotlabs/Lib/Activity.php:2178 #, php-format msgid "May attend %s's event" msgstr "Puede asistir al evento de %s" -#: ../../Zotlabs/Lib/Activity.php:2149 +#: ../../Zotlabs/Lib/Activity.php:2181 #, php-format msgid "May not attend %s's event" msgstr "Puede no asistir al evento de %s" @@ -14984,6 +15357,10 @@ msgstr "ha editado un comentario %s" msgid "created an event" msgstr "se creó un evento" +#: ../../Zotlabs/Lib/Enotify.php:986 +msgid "verified" +msgstr "verificado" + #: ../../Zotlabs/Lib/Connect.php:271 msgid "error saving data" msgstr "error guardando los datos" @@ -15008,11 +15385,11 @@ msgstr "Sala no encontrada." msgid "Room is full" msgstr "La sala está llena." -#: ../../Zotlabs/Lib/NativeWiki.php:145 +#: ../../Zotlabs/Lib/NativeWiki.php:146 msgid "Wiki updated successfully" msgstr "El wiki se ha actualizado con éxito" -#: ../../Zotlabs/Lib/NativeWiki.php:199 +#: ../../Zotlabs/Lib/NativeWiki.php:206 msgid "Wiki files deleted successfully" msgstr "Se han borrado con éxito los ficheros del wiki" @@ -15165,51 +15542,51 @@ msgstr "(Sin título)" msgid "Wiki page create failed." msgstr "Se ha producido un error en la creación de la página wiki." -#: ../../Zotlabs/Lib/NativeWikiPage.php:122 +#: ../../Zotlabs/Lib/NativeWikiPage.php:123 msgid "Wiki not found." msgstr "No se ha encontrado el wiki." -#: ../../Zotlabs/Lib/NativeWikiPage.php:133 +#: ../../Zotlabs/Lib/NativeWikiPage.php:134 msgid "Destination name already exists" msgstr "El nombre de destino ya existe" -#: ../../Zotlabs/Lib/NativeWikiPage.php:166 -#: ../../Zotlabs/Lib/NativeWikiPage.php:361 +#: ../../Zotlabs/Lib/NativeWikiPage.php:167 +#: ../../Zotlabs/Lib/NativeWikiPage.php:368 msgid "Page not found" msgstr "No se ha encontrado la página" -#: ../../Zotlabs/Lib/NativeWikiPage.php:197 +#: ../../Zotlabs/Lib/NativeWikiPage.php:200 msgid "Error reading page content" msgstr "Se ha producido un error al leer el contenido de la página" -#: ../../Zotlabs/Lib/NativeWikiPage.php:352 -#: ../../Zotlabs/Lib/NativeWikiPage.php:401 -#: ../../Zotlabs/Lib/NativeWikiPage.php:468 -#: ../../Zotlabs/Lib/NativeWikiPage.php:509 +#: ../../Zotlabs/Lib/NativeWikiPage.php:359 +#: ../../Zotlabs/Lib/NativeWikiPage.php:409 +#: ../../Zotlabs/Lib/NativeWikiPage.php:480 +#: ../../Zotlabs/Lib/NativeWikiPage.php:522 msgid "Error reading wiki" msgstr "Se ha producido un error al leer el wiki" -#: ../../Zotlabs/Lib/NativeWikiPage.php:389 +#: ../../Zotlabs/Lib/NativeWikiPage.php:396 msgid "Page update failed." msgstr "Se ha producido un error al actualizar la página." -#: ../../Zotlabs/Lib/NativeWikiPage.php:423 +#: ../../Zotlabs/Lib/NativeWikiPage.php:431 msgid "Nothing deleted" msgstr "No se ha eliminado nada" -#: ../../Zotlabs/Lib/NativeWikiPage.php:489 +#: ../../Zotlabs/Lib/NativeWikiPage.php:501 msgid "Compare: object not found." msgstr "No se ha encontrado un objeto para comparar." -#: ../../Zotlabs/Lib/NativeWikiPage.php:495 +#: ../../Zotlabs/Lib/NativeWikiPage.php:508 msgid "Page updated" msgstr "Se ha actualizado la página" -#: ../../Zotlabs/Lib/NativeWikiPage.php:498 +#: ../../Zotlabs/Lib/NativeWikiPage.php:511 msgid "Untitled" msgstr "Sin título" -#: ../../Zotlabs/Lib/NativeWikiPage.php:504 +#: ../../Zotlabs/Lib/NativeWikiPage.php:517 msgid "Wiki resource_id required for git commit" msgstr "Se necesita Wiki resource_id para el git commit" @@ -15608,40 +15985,40 @@ msgid "" "an existing folder." msgstr "Puede seleccionar los archivos a través del botón de subir o soltarlos aquí mismo o en una carpeta existente." -#: ../../boot.php:1690 +#: ../../boot.php:1695 msgid "Create an account to access services and applications" msgstr "Crear una cuenta para acceder a los servicios y aplicaciones" -#: ../../boot.php:1714 +#: ../../boot.php:1719 msgid "Login/Email" msgstr "Inicio de sesión / Correo electrónico" -#: ../../boot.php:1715 +#: ../../boot.php:1720 msgid "Password" msgstr "Contraseña" -#: ../../boot.php:1716 +#: ../../boot.php:1721 msgid "Remember me" msgstr "Recordarme" -#: ../../boot.php:1719 +#: ../../boot.php:1724 msgid "Forgot your password?" msgstr "¿Olvidó su contraseña?" -#: ../../boot.php:2588 +#: ../../boot.php:2603 #, php-format msgid "[$Projectname] Website SSL error for %s" msgstr "[$Projectname] Error SSL del sitio web en %s" -#: ../../boot.php:2593 +#: ../../boot.php:2608 msgid "Website SSL certificate is not valid. Please correct." msgstr "El certificado SSL del sitio web no es válido. Por favor, solucione el problema." -#: ../../boot.php:2709 +#: ../../boot.php:2724 #, php-format msgid "[$Projectname] Cron tasks not running on %s" msgstr "[$Projectname] Las tareas de Cron no están funcionando en %s" -#: ../../boot.php:2714 +#: ../../boot.php:2729 msgid "Cron/Scheduled tasks not running." msgstr "Las tareas del Planificador/Cron no están funcionando." diff --git a/view/es-es/hstrings.php b/view/es-es/hstrings.php index c41cf9fe9..d61cb65c2 100644 --- a/view/es-es/hstrings.php +++ b/view/es-es/hstrings.php @@ -2,7 +2,7 @@ if(! function_exists("string_plural_select_es_es")) { function string_plural_select_es_es($n){ - return ($n != 1 ? 1 : 0); + return ($n != 1); }} App::$rtl = 0; App::$strings["plural_function_code"] = "(n != 1 ? 1 : 0)"; @@ -611,6 +611,7 @@ App::$strings["Diaspora Protocol Settings updated."] = "Los ajustes del protocol App::$strings["The diaspora protocol does not support location independence. Connections you make within that network may be unreachable from alternate channel locations."] = "El protocolo de Diaspora no admite la independencia de la ubicación. Las conexiones que realice dentro de esa red pueden ser inaccesibles desde ubicaciones de canales alternativos."; App::$strings["Diaspora Protocol App"] = "App Protocolo Diaspora"; App::$strings["Allow any Diaspora member to comment or like your public posts"] = "Permitir que cualquier miembro de Diaspora comente o ponga un like en sus entradas públicas"; +App::$strings["If this setting is disabled only your contacts will be able to comment or like your public posts"] = "Si esta configuración está desactivada, sólo sus contactos podrán comentar o dar a \"me gusta\" en sus publicaciones públicas"; App::$strings["Prevent your hashtags from being redirected to other sites"] = "Impedir que sus \"hashtags\" sean redirigidos a otros sitios "; App::$strings["Sign and forward posts and comments with no existing Diaspora signature"] = "Firmar y enviar entradas y comentarios sin firma de Diaspora"; App::$strings["Followed hashtags (comma separated, do not include the #)"] = "\"Hashtags\" seguidos (separados por comas, sin incluir #)"; @@ -1129,6 +1130,7 @@ App::$strings["__ctx:calendar__ week"] = "semana"; App::$strings["__ctx:calendar__ day"] = "día"; App::$strings["__ctx:calendar__ All day"] = "Todos los días"; App::$strings["Please stand by while your download is being prepared."] = "Por favor, espere mientras se prepara la descarga."; +App::$strings["Email address not valid"] = "Dirección de correo electrónica no válida"; App::$strings["Help:"] = "Ayuda:"; App::$strings["Help"] = "Ayuda"; App::$strings["Not Found"] = "No encontrado"; @@ -1487,9 +1489,9 @@ App::$strings["profile photo"] = "foto del perfil"; App::$strings["[Edited %s]"] = "[se ha editado %s]"; App::$strings["__ctx:edit_activity__ Post"] = "Publicar"; App::$strings["__ctx:edit_activity__ Comment"] = "Comentar"; -App::$strings["Not a valid email address"] = "Dirección de correo no válida"; -App::$strings["Your email domain is not among those allowed on this site"] = "Su dirección de correo no pertenece a ninguno de los dominios permitidos en este sitio."; -App::$strings["Your email address is already registered at this site."] = "Su dirección de correo está ya registrada en este sitio."; +App::$strings["The provided email address is not valid"] = "La dirección de correo electrónico proporcionada no es válida"; +App::$strings["The provided email domain is not among those allowed on this site"] = "El dominio de correo electrónico proporcionado no está entre los permitidos en este sitio"; +App::$strings["The provided email address is already registered at this site"] = "La dirección de correo electrónico proporcionada ya está registrada en este sitio"; App::$strings["An invitation is required."] = "Es obligatorio que le inviten."; App::$strings["Invitation could not be verified."] = "No se ha podido verificar su invitación."; App::$strings["Please enter the required information."] = "Por favor introduzca la información requerida."; @@ -1500,9 +1502,14 @@ App::$strings["your registration password"] = "su contraseña de registro"; App::$strings["Registration details for %s"] = "Detalles del registro de %s"; App::$strings["Account approved."] = "Cuenta aprobada."; App::$strings["Registration revoked for %s"] = "Registro revocado para %s"; +App::$strings["Could not revoke registration for %s"] = "No se ha podido revocar el registro de %s"; App::$strings["Click here to upgrade."] = "Pulse aquí para actualizar"; App::$strings["This action exceeds the limits set by your subscription plan."] = "Esta acción supera los límites establecidos por su plan de suscripción "; App::$strings["This action is not available under your subscription plan."] = "Esta acción no está disponible en su plan de suscripción."; +App::$strings["open"] = "abierto"; +App::$strings["closed"] = "cerrado"; +App::$strings["Registration is currently"] = "El registro está actualmente "; +App::$strings["please come back"] = "por favor, vuelva"; App::$strings["Profile Photos"] = "Fotos del perfil"; App::$strings["Item was not found."] = "Elemento no encontrado."; App::$strings["Unknown error."] = "Error desconocido"; @@ -1863,36 +1870,40 @@ App::$strings["Update to Hubzilla 5.0 step 2"] = "Actualizar a Hubzilla 5.0. Pas App::$strings["To complete the update please run"] = "Para completar la actualización, ejecutar "; App::$strings["php util/z6convert.php"] = "php util/z6convert.php"; App::$strings["from the terminal."] = "desde la terminal."; -App::$strings["Maximum daily site registrations exceeded. Please try again tomorrow."] = "Se ha superado el límite máximo de inscripciones diarias de este sitio. Por favor, pruebe de nuevo mañana."; -App::$strings["Please indicate acceptance of the Terms of Service. Registration failed."] = "Por favor, confirme que acepta los Términos del servicio. El registro ha fallado."; -App::$strings["Passwords do not match."] = "Las contraseñas no coinciden."; -App::$strings["Registration successful. Continue to create your first channel..."] = "Registro exitoso. Continúe creando tu primer canal..."; -App::$strings["Registration successful. Please check your email for validation instructions."] = "Registro realizado con éxito. Por favor, compruebe su correo electrónico para ver las instrucciones para validarlo."; -App::$strings["Your registration is pending approval by the site owner."] = "Su registro está pendiente de aprobación por el propietario del sitio."; -App::$strings["Your registration can not be processed."] = "Su registro no puede ser procesado."; +App::$strings["Email address required"] = "Dirección de correo electrónico requerida"; +App::$strings["No password provided"] = "No se ha proporcionado la contraseña"; +App::$strings["Terms of Service not accepted"] = "No se han aceptado los Términos del servicio"; +App::$strings["Invitation code succesfully applied"] = "El código de invitación se ha aplicado con éxito"; +App::$strings["Invitation not in time or too late"] = "La invitación no llega a tiempo o llega demasiado tarde"; +App::$strings["Invitation email failed"] = "Error en el correo electrónico de invitación"; +App::$strings["Invitation code failed"] = "Código de invitación fallido"; +App::$strings["Invitations are not available"] = "No hay invitaciones disponibles"; +App::$strings["Email address already in use"] = "La dirección de correo electrónico ya está en uso"; +App::$strings["Registration on this hub is by invitation only"] = "El registro en este hub solo es posible por invitación"; +App::$strings["New register request"] = "Nueva solicitud de registro"; +App::$strings["Error creating dId A"] = "Error al crear dId A"; App::$strings["Registration on this hub is disabled."] = "El registro está deshabilitado en este sitio."; App::$strings["Registration on this hub is by approval only."] = "El registro en este hub está sometido a aprobación previa."; -App::$strings["Register at another affiliated hub."] = "Registrarse en otro hub afiliado."; +App::$strings["Register at another affiliated hub in case when prefered"] = "Regístrese en otro hub afiliado en caso de que lo prefiera"; App::$strings["Registration on this hub is by invitation only."] = "La inscripción en este hub es sólo posible por invitación."; -App::$strings["This site has exceeded the number of allowed daily account registrations. Please try again tomorrow."] = "Este sitio ha excedido el límite de inscripción diaria de cuentas. Por favor, inténtelo de nuevo mañana."; +App::$strings["Register at another affiliated hub"] = "Regístrese en otro hub afiliado"; App::$strings["Terms of Service"] = "Términos del servicio"; App::$strings["I accept the %s for this website"] = "Acepto los %s de este sitio"; App::$strings["I am over %s years of age and accept the %s for this website"] = "Tengo más de %s años de edad y acepto los %s de este sitio web"; App::$strings["Your email address"] = "Su dirección de correo electrónico"; +App::$strings["Optional"] = "Opcional"; App::$strings["Choose a password"] = "Elija una contraseña"; App::$strings["Please re-enter your password"] = "Por favor, vuelva a escribir su contraseña"; App::$strings["Please enter your invitation code"] = "Por favor, introduzca el código de su invitación"; -App::$strings["Your Name"] = "Su nombre"; -App::$strings["Real names are preferred."] = "Se prefieren los nombres reales"; +App::$strings["Your name"] = "Su nombre"; +App::$strings["Real name is preferred"] = "Se prefiere el nombre real"; App::$strings["Choose a short nickname"] = "Elija un alias corto"; -App::$strings["Your nickname will be used to create an easy to remember channel address e.g. nickname%s"] = "Su alias se usará para crear una dirección de canal fácil de recordar, p. ej.: alias%s"; -App::$strings["Channel role and privacy"] = "Clase de canal y privacidad"; -App::$strings["Select a channel permission role for your usage needs and privacy requirements."] = "Seleccione unos permisos de rol del canal compatibles con sus necesidades de uso y requisitos de privacidad."; -App::$strings["Read more about channel permission roles"] = "Leer más sobre los roles y permisos"; -App::$strings["no"] = "no"; -App::$strings["yes"] = "sí"; +App::$strings["Your nickname will be used to create an easy to remember channel address"] = "Tu alias se utilizará para crear una dirección de canal fácil de recordar"; +App::$strings["Why do you want to join this hub?"] = "¿Por qué quiere unirse a este hub?"; +App::$strings["This will help to review your registration"] = "Esto ayudará a revisar su registro"; App::$strings["Registration"] = "Registro"; -App::$strings["This site requires email verification. After completing this form, please check your email for further instructions."] = "Este sitio requiere verificación por correo electrónico. Después de completar este formulario, por favor revise su correo electrónico para más instrucciones."; +App::$strings["I have an invite code"] = "Tengo un código de invitación"; +App::$strings["This site has exceeded the number of allowed daily account registrations."] = "Este sitio ha superado el número permitido de registros diarios de cuentas."; App::$strings["Public access denied."] = "Acceso público denegado."; App::$strings["Items tagged with: %s"] = "elementos etiquetados con: %s"; App::$strings["Search results for: %s"] = "Resultados de la búsqueda para: %s"; @@ -2050,7 +2061,6 @@ App::$strings["Automatically generated - change if desired. Max length 20"] = "G App::$strings["Redirect"] = "Redirigir"; App::$strings["Redirect URI - leave blank unless your application specifically requires this"] = "URI de redirección - dejar en blanco a menos que su aplicación específicamente lo requiera"; App::$strings["Icon url"] = "Dirección del icono"; -App::$strings["Optional"] = "Opcional"; App::$strings["Application not found."] = "Aplicación no encontrada."; App::$strings["Connected OAuth Apps"] = "Apps OAuth conectadas"; App::$strings["Client key starts with"] = "La \"client key\" empieza por"; @@ -2238,7 +2248,6 @@ App::$strings["By continuing, I certify that I have complied with any instructio App::$strings["(No specific instructions have been provided by the channel owner.)"] = "(No ha sido proporcionada ninguna instrucción específica por el propietario del canal.)"; App::$strings["Restricted or Premium Channel"] = "Canal premium o restringido"; App::$strings["Not found"] = "No encontrado"; -App::$strings["Please refresh page"] = "Por favor, recargue la página"; App::$strings["Unknown error"] = "Error desconocido"; App::$strings["🔁 Repeated %1\$s's %2\$s"] = "🔁 Repetidos %2\$sde %1\$s"; App::$strings["Post repeated"] = "Entrada repetida"; @@ -2310,20 +2319,33 @@ App::$strings["%s account deleted"] = array( App::$strings["Account not found"] = "Cuenta no encontrada"; App::$strings["Account '%s' blocked"] = "La cuenta '%s' ha sido bloqueada"; App::$strings["Account '%s' unblocked"] = "La cuenta '%s' ha sido desbloqueada"; -App::$strings["select all"] = "seleccionar todo"; -App::$strings["Registrations waiting for confirm"] = "Inscripciones en espera de confirmación"; +App::$strings["Unverified"] = "Sin verificar"; +App::$strings["Expired"] = "Caducado/a"; +App::$strings["Show verified registrations"] = "Mostrar registros verificados"; +App::$strings["Show all registrations"] = "Mostrar todos los registros"; +App::$strings["Select toggle"] = "Seleccionar alternar"; +App::$strings["Deny selected"] = "Denegar seleccionado"; +App::$strings["Approve selected"] = "Aprobar seleccionado"; +App::$strings["All registrations"] = "Todos los registros"; +App::$strings["Verified registrations waiting for approval"] = "Registros verificados en espera de aprobación"; App::$strings["Request date"] = "Fecha de solicitud"; -App::$strings["No registrations."] = "Sin registros."; +App::$strings["Requests"] = "Solicitudes"; +App::$strings["No registrations available"] = "No hay registros disponibles"; +App::$strings["No verified registrations available"] = "No hay registros verificados disponibles"; App::$strings["Block"] = "Bloquear"; App::$strings["Unblock"] = "Desbloquear"; +App::$strings["Verified"] = "Verificado/a"; +App::$strings["Not yet verified"] = "Aún no se ha verificado"; App::$strings["ID"] = "ID"; -App::$strings["All Channels"] = "Todos los canales"; +App::$strings["All channels"] = "Todos los canales"; App::$strings["Register date"] = "Fecha de registro"; App::$strings["Last login"] = "Último acceso"; App::$strings["Expires"] = "Caduca"; -App::$strings["Service Class"] = "Clase de servicio"; +App::$strings["Service class"] = "Clase de servicio"; App::$strings["Selected accounts will be deleted!\\n\\nEverything these accounts had posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "¡Las cuentas seleccionadas van a ser eliminadas!\\n\\n¡Todo lo que estas cuentas han publicado en este sitio será borrado de forma permanente!\\n\\n¿Está seguro de querer hacerlo?"; App::$strings["The account {0} will be deleted!\\n\\nEverything this account has posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "¡La cuenta {0} va a ser eliminada!\\n\\n¡Todo lo que esta cuenta ha publicado en este sitio será borrado de forma permanente!\\n\\n¿Está seguro de querer hacerlo?"; +App::$strings["Invalid input"] = "Entrada no válida"; +App::$strings["Errors"] = "Errores"; App::$strings["Site settings updated."] = "Ajustes del sitio actualizados."; App::$strings["%s - (Incompatible)"] = "%s - (Incompatible)"; App::$strings["mobile"] = "móvil"; @@ -2336,6 +2358,17 @@ App::$strings["My site has free access only"] = "Mi sitio es un servicio gratuit App::$strings["My site offers free accounts with optional paid upgrades"] = "Mi sitio ofrece cuentas gratuitas con opciones extra de pago"; App::$strings["Default permission role for new accounts"] = "Permisos de rol por defecto para las nuevas cuentas"; App::$strings["This role will be used for the first channel created after registration."] = "Este rol se utilizará para el primer canal creado después del registro."; +App::$strings["Minute(s)"] = "Minuto(s)"; +App::$strings["Hour(s)"] = "Hora(s)"; +App::$strings["Day(s)"] = "Día(s)"; +App::$strings["Week(s)"] = "Semana(s)"; +App::$strings["Month(s)"] = "Mes(Meses)"; +App::$strings["Year(s)"] = "Año(s)"; +App::$strings["Register verification delay"] = "Retraso en la verificación del registro"; +App::$strings["Time to wait before a registration can be verified"] = "Tiempo de espera para verificar un registro "; +App::$strings["duration up from now"] = "duración a partir de ahora "; +App::$strings["Register verification expiration time"] = "Tiempo de caducidad de la verificación del registro "; +App::$strings["Time before an unverified registration will expire"] = "Tiempo antes de que caduque un registro no verificado "; App::$strings["File upload"] = "Subir fichero"; App::$strings["Policies"] = "Políticas"; App::$strings["Banner/Logo"] = "Banner/Logo"; @@ -2351,25 +2384,39 @@ App::$strings["Allow Feeds as Connections"] = "Permitir contenidos RSS como cone App::$strings["(Heavy system resource usage)"] = "(Uso intenso de los recursos del sistema)"; App::$strings["Maximum image size"] = "Tamaño máximo de la imagen"; App::$strings["Maximum size in bytes of uploaded images. Default is 0, which means no limits."] = "Tamaño máximo en bytes de la imagen subida. Por defecto, es 0, lo que significa que no hay límites."; -App::$strings["Does this site allow new member registration?"] = "¿Debe este sitio permitir el registro de nuevos miembros?"; -App::$strings["Invitation only"] = "Solo con una invitación"; -App::$strings["Only allow new member registrations with an invitation code. Above register policy must be set to Yes."] = "Solo se permiten inscripciones de nuevos miembros con un código de invitación. Además, deben aceptarse los términos del registro marcando \"Sí\"."; App::$strings["Minimum age"] = "Edad mínima"; App::$strings["Minimum age (in years) for who may register on this site."] = "Edad mínima (en años) para poder registrarse en este sitio."; App::$strings["Which best describes the types of account offered by this hub?"] = "¿Cómo describiría el tipo de servicio ofrecido por este servidor?"; App::$strings["This is displayed on the public server site list."] = "Esto se muestra en la lista de sitios de servidores públicos."; App::$strings["Register text"] = "Texto del registro"; -App::$strings["Will be displayed prominently on the registration page."] = "Se mostrará de forma destacada en la página de registro."; +App::$strings["This text will be displayed prominently at the registration page"] = "Este texto se mostrará de forma destacada en la página de registro "; +App::$strings["Does this site allow new member registration?"] = "¿Debe este sitio permitir el registro de nuevos miembros?"; +App::$strings["Configure the registration open days/hours"] = "Configurar los días/horas de apertura del registro"; +App::$strings["Empty or '-:-' value will keep registration open 24/7 (default)"] = "El valor vacío o \"-:-\" mantendrá el registro abierto 24/7 (por defecto)"; +App::$strings["Weekdays and hours must be separated by colon ':', From-To ranges with a dash `-` example: 1:800-1200"] = "Los días de la semana y las horas deben separarse con dos puntos ':', los rangos Desde-Hasta con un guión `-` ejemplo: 1:800-1200"; +App::$strings["Weekday:Hour pairs must be separated by space ' ' example: 1:900-1700 2:900-1700"] = "Los pares día de la semana:hora deben estar separados por un espacio ' ' ejemplo: 1:900-1700 2:900-1700"; +App::$strings["From-To ranges must be separated by comma ',' example: 1:800-1200,1300-1700 or 1-2,4-5:900-1700"] = "Los rangos desde-hasta deben estar separados por comas ',' ejemplo: 1:800-1200,1300-1700 o 1-2,4-5:900-1700"; +App::$strings["Advanced examples:"] = "Ejemplos avanzados: "; +App::$strings["or"] = "o"; +App::$strings["Check your configuration"] = "Compruebe su configuración"; +App::$strings["Max account registrations per day"] = "Máximo de registros de cuentas por día "; +App::$strings["Unlimited if zero or no value - default 50"] = "Ilimitado si es cero o sin valor - por defecto 50"; +App::$strings["Max account registrations from same IP"] = "Máximo de registros de cuentas desde la misma IP"; +App::$strings["Unlimited if zero or no value - default 3"] = "Ilimitado si es cero o sin valor - por defecto 3"; +App::$strings["Auto channel create"] = "Creación automática de canales"; +App::$strings["If disabled the channel will be created in a separate step during the registration process"] = "Si se desactiva, el canal se creará en un paso separado durante el proceso de registro"; +App::$strings["Require invite code"] = "Solicitar código de invitación"; +App::$strings["Allow invite code"] = "Permitir código de invitación"; +App::$strings["Require email address"] = "Solicitar dirección de correo electrónico"; +App::$strings["The provided email address will be verified (recommended)"] = "La dirección de correo electrónico proporcionada será verificada (recomendado)"; +App::$strings["Abandon account after x days"] = "Abandonar la cuenta después de x días"; +App::$strings["Will not waste system resources polling external sites for abandonded accounts. Enter 0 for no time limit."] = "Para evitar consumir recursos del sistema intentando poner al día las cuentas abandonadas. Introduzca 0 para no tener límite de tiempo."; App::$strings["Site homepage to show visitors (default: login box)"] = "Página personal que se mostrará a los visitantes (por defecto: la página de identificación)"; App::$strings["example: 'pubstream' to show public stream, 'page/sys/home' to show a system webpage called 'home' or 'include:home.html' to include a file."] = "ejemplo: 'pubstream' para mostrar el stream público, 'page/sys/home' para mostrar una página web del sistema llamada 'home' o 'include:home.html' para incluir un archivo."; App::$strings["Preserve site homepage URL"] = "Preservar la dirección de la página personal"; App::$strings["Present the site homepage in a frame at the original location instead of redirecting"] = "Presenta la página personal del sitio en un marco en la ubicación original, en vez de redirigirla."; -App::$strings["Accounts abandoned after x days"] = "Cuentas abandonadas después de x días"; -App::$strings["Will not waste system resources polling external sites for abandonded accounts. Enter 0 for no time limit."] = "Para evitar consumir recursos del sistema intentando poner al día las cuentas abandonadas. Introduzca 0 para no tener límite de tiempo."; App::$strings["Allowed friend domains"] = "Dominios amigos permitidos"; App::$strings["Comma separated list of domains which are allowed to establish friendships with this site. Wildcards are accepted. Empty to allow any domains"] = "Lista separada por comas de dominios a los que está permitido establecer relaciones de amistad con este sitio. Se permiten comodines. Dejar en claro para aceptar cualquier dominio."; -App::$strings["Verify Email Addresses"] = "Verificar las direcciones de correo electrónico"; -App::$strings["Check to verify email addresses used in account registration (recommended)."] = "Activar para la verificación de la dirección de correo electrónico en el registro de una cuenta (recomendado)."; App::$strings["Force publish"] = "Forzar la publicación"; App::$strings["Check to force all profiles on this site to be listed in the site directory."] = "Intentar forzar todos los perfiles para que sean listados en el directorio de este sitio."; App::$strings["Import Public Streams"] = "Importar contenido público"; @@ -2417,6 +2464,7 @@ App::$strings["Page to display after creating a new channel"] = "Página a mostr App::$strings["Default: profiles"] = "Perfiles predeterminados"; App::$strings["Optional: site location"] = "Opcional: ubicación del sitio"; App::$strings["Region or country"] = "Región o país"; +App::$strings["Invalid 24h time value (hhmm/hmm)"] = "Valor de tiempo de 24h no válido (hhmm/hmm)"; App::$strings["Log settings updated."] = "Actualizado el informe de configuraciones."; App::$strings["Clear"] = "Vaciar"; App::$strings["Debugging"] = "Depuración"; @@ -2441,6 +2489,7 @@ App::$strings["Channel '%s' censored"] = "Canal '%s' censurado"; App::$strings["Channel '%s' uncensored"] = "Canal '%s' no censurado"; App::$strings["Channel '%s' code allowed"] = "Código permitido al canal '%s'"; App::$strings["Channel '%s' code disallowed"] = "Código no permitido al canal '%s'"; +App::$strings["select all"] = "seleccionar todo"; App::$strings["Censor"] = "Censurar"; App::$strings["Uncensor"] = "No censurar"; App::$strings["Allow Code"] = "Permitir código"; @@ -2455,7 +2504,6 @@ App::$strings["Account Edit"] = "Editar la cuenta"; App::$strings["New Password"] = "Nueva contraseña"; App::$strings["New Password again"] = "Nueva contraseña otra vez"; App::$strings["Account language (for emails)"] = "Idioma de la cuenta (para los correos electrónicos)"; -App::$strings["Service class"] = "Clase de servicio"; App::$strings["New Profile Field"] = "Nuevo campo en el perfil"; App::$strings["Field nickname"] = "Alias del campo"; App::$strings["System name of field"] = "Nombre del campo en el sistema"; @@ -2515,6 +2563,36 @@ App::$strings["This channel will be completely removed from the network. "] = "E App::$strings["This action is permanent and can not be undone!"] = "¡Esta acción tiene carácter definitivo y no se puede deshacer!"; App::$strings["Please enter your password for verification:"] = "Por favor, introduzca su contraseña para su verificación:"; App::$strings["Remove Channel"] = "Eliminar el canal"; +App::$strings["Email resent"] = "Correo electrónico reenviado"; +App::$strings["Email resend failed"] = "Fallo en el reenvío del correo electrónico"; +App::$strings["Verify successfull"] = "Verificar que se ha hecho bien"; +App::$strings["Account successfull created"] = "Cuenta creada con éxito"; +App::$strings["Channel successfull created"] = "Canal creado con éxito"; +App::$strings["Automatic channel creation failed. Please create a channel."] = "La creación automática de canales ha fallado. Por favor, cree un canal."; +App::$strings["Account creation error"] = "Error en la creación de la cuenta"; +App::$strings["Verify failed"] = "Verificación fallida"; +App::$strings["Token verification failed"] = "Ha fallado el token de verificación."; +App::$strings["Request not inside time frame"] = "Solicitud fuera de plazo"; +App::$strings["Identity unknown"] = "Identidad desconocida"; +App::$strings["dId2 mistaken"] = "did2 equivocado/a"; +App::$strings["Your Registration ID"] = "Su ID de registro"; +App::$strings["Registration verification"] = "Verificación del registro"; +App::$strings["Hold on, you can start verification in"] = "Espere, puede empezar la verificación en "; +App::$strings["Please remember your verification token for ID"] = "Por favor, recuerde su token de verificación para la identificación"; +App::$strings["Token validity"] = "Validez del token"; +App::$strings["Resend"] = "Reenviar"; +App::$strings["Registration status"] = "Estado del registro"; +App::$strings["Verification successful!"] = "¡Verificación exitosa!"; +App::$strings["Your login ID is"] = "Su ID de acceso es"; +App::$strings["After your account has been approved by our administrator you will be able to login with your login ID and your provided password."] = "Una vez que su cuenta haya sido aprobada por nuestro administrador, podrá iniciar sesión con su ID de acceso y la contraseña proporcionada."; +App::$strings["Registration request revoked"] = "Solicitud de registro anulada"; +App::$strings["Sorry for any inconvience. Thank you for your response."] = "Disculpe las molestias. Gracias por su respuesta."; +App::$strings["Please enter your verification token for ID"] = "Por favor, introduzca su token de verificación para la identificación"; +App::$strings["Verification token"] = "Token de verificación "; +App::$strings["ID expired"] = "ID caducada"; +App::$strings["You will require the verification token for ID"] = "Necesitará el token de verificación para identificarse"; +App::$strings["Unknown or expired ID"] = "ID desconocida o caducada"; +App::$strings["dId2 malformed"] = "did2 malformado/a"; App::$strings["Edit event title"] = "Editar el título del evento"; App::$strings["Categories (comma-separated list)"] = "Temas (lista separada por comas)"; App::$strings["Edit Category"] = "Modificar el tema"; @@ -2599,7 +2677,9 @@ App::$strings["Examples: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \ App::$strings["This will be used to create a unique network address (like an email address)."] = "Esto se utilizará para crear una dirección de red única (como una dirección de correo electrónico)."; App::$strings["Allowed characters are a-z 0-9, - and _"] = "Los caracteres permitidos son a-z 0-9, - and _"; App::$strings["Channel name"] = "Nombre del canal"; +App::$strings["Channel role and privacy"] = "Clase de canal y privacidad"; App::$strings["Select a channel permission role compatible with your usage needs and privacy requirements."] = "Seleccione unos permisos de rol del canal compatibles con sus necesidades de uso y requisitos de privacidad."; +App::$strings["Read more about channel permission roles"] = "Leer más sobre los roles y permisos"; App::$strings["Create a Channel"] = "Crear un canal"; App::$strings["A channel is a unique network identity. It can represent a person (social network profile), a forum (group), a business or celebrity page, a newsfeed, and many other things."] = "Un canal es una identidad única en la red. Puede representar a una persona (un perfil de una red social), un foro o grupo, un negocio o una página de una celebridad, un \"feed\" de noticias, y muchas otras cosas."; App::$strings["or import an existing channel from another location."] = "O importar un canal desde otro lugar."; @@ -2852,7 +2932,7 @@ App::$strings["Sexual preference"] = "Preferencia sexual"; App::$strings["Profile name"] = "Nombre del perfil"; App::$strings["This is your default profile."] = "Este es su perfil principal."; App::$strings["Your full name"] = "Nombre completo"; -App::$strings["Short title/tescription"] = "Breve título y descripción"; +App::$strings["Short title/description"] = "Breve título y descripción"; App::$strings["Maximal 190 characters"] = "Máximo de 190 caracteres"; App::$strings["Street address"] = "Dirección"; App::$strings["Locality/City"] = "Ciudad"; @@ -2894,25 +2974,33 @@ App::$strings["Change channel nickname/address"] = "Cambiar el alias o la direcc App::$strings["Any/all connections on other networks will be lost!"] = "¡Cualquier/todas las conexiones en otras redes se perderán!"; App::$strings["New channel address"] = "Nueva dirección del canal"; App::$strings["Rename Channel"] = "Renombrar el canal"; -App::$strings["Total invitation limit exceeded."] = "Se ha superado el límite máximo de invitaciones."; -App::$strings["%s : Not a valid email address."] = "%s : No es una dirección de correo electrónico válida. "; -App::$strings["Please join us on \$Projectname"] = "Únase a nosotros en \$Projectname"; -App::$strings["Invitation limit exceeded. Please contact your site administrator."] = "Excedido el límite de invitaciones. Por favor, contacte con el Administrador de su sitio."; -App::$strings["%d message sent."] = array( - 0 => "%d mensajes enviados.", - 1 => "%d mensajes enviados.", -); App::$strings["Invite App"] = "Solicitar una app"; -App::$strings["Send email invitations to join this network"] = "Enviar invitaciones por correo electrónico para unirse a esta red"; +App::$strings["Register is closed"] = "El registro está cerrado"; +App::$strings["Note, the invitation code is valid up to"] = "Tenga en cuenta que el código de invitación es válido hasta "; +App::$strings["Too many recipients for one invitation (max %d)"] = "Demasiados destinatarios para una invitación (máx %d)"; +App::$strings["No recipients for this invitation"] = "No hay destinatarios para esta invitación"; +App::$strings["(%s) : Not a valid email address"] = "(%s): No es una dirección de correo electrónico válida"; +App::$strings["(%s) : Not a real email address"] = "(%s) : No es una dirección de correo electrónica real"; +App::$strings["(%s) : Not allowed email address"] = "(%s) : Dirección de correo electrónico no permitida"; +App::$strings["(%s) : email address already in use"] = "(%s) : La dirección de correo electrónico ya está en uso"; +App::$strings["(%s) : Accepted email address"] = "(%s) : Dirección de correo electrónico aceptada"; +App::$strings["To %s : Message delivery success."] = "To %s : Entrega exitosa del mensaje."; +App::$strings["%1\$d mail(s) sent, %2\$d mail error(s)"] = "%1\$d correo(s) enviado, %2\$d error(es) de correo"; +App::$strings["Invites not proposed by configuration"] = "Invitaciones no propuestas por la configuración"; +App::$strings["Contact the site admin"] = "Contactar con el administrador del sitio"; +App::$strings["Invites by users not enabled"] = "Invitaciones de usuarios no habilitadas"; App::$strings["You have no more invitations available"] = "No tiene más invitaciones disponibles"; +App::$strings["Not on xchan"] = "No en xchan"; +App::$strings["All users invitation limit exceeded."] = "Se ha superado el límite de invitaciones a todos los usuarios."; +App::$strings["Invitation expires after"] = "La invitación expira después de "; +App::$strings["Invitation"] = "Invitación"; App::$strings["Send invitations"] = "Enviar invitaciones"; +App::$strings["Invitations I am using"] = "Invitaciones que estoy utilizando "; +App::$strings["Invitations we are using"] = "Invitaciones que usamos "; +App::$strings["§ Note, the email(s) sent will be recorded in the system logs"] = "§ Nota: el/los correo(s) electrónicos enviados quedarán registrados en los registros del sistema"; App::$strings["Enter email addresses, one per line:"] = "Introduzca las direcciones de correo electrónico, una por línea:"; -App::$strings["Please join my community on \$Projectname."] = "Por favor, únase a mi comunidad en \$Projectname."; -App::$strings["You will need to supply this invitation code:"] = "Tendrá que suministrar este código de invitación:"; -App::$strings["1. Register at any \$Projectname location (they are all inter-connected)"] = "1. Regístrese en cualquier sitio de \$Projectname (están todos interconectados)"; -App::$strings["2. Enter my \$Projectname network address into the site searchbar."] = "2. Introduzca mi dirección \$Projectname en la caja de búsqueda del sitio."; -App::$strings["or visit"] = "o visitar"; -App::$strings["3. Click [Connect]"] = "3. Pulse [conectar]"; +App::$strings["Invite template"] = "Plantilla de invitación"; +App::$strings["Here you may enter personal notes to the recipient(s)"] = "Aquí puede introducir notas personales para el/los destinatario(s)"; App::$strings["Notes App"] = "App Notas"; App::$strings["A simple notes app with a widget (note: notes are not encrypted)"] = "Una simple aplicación de notas con un widget (aviso: las notas no están encriptadas)"; App::$strings["Xchan Lookup"] = "Búsqueda de canales"; @@ -2946,7 +3034,6 @@ App::$strings["Anybody authenticated"] = "Cualquiera que esté autenticado"; App::$strings["Anybody on the internet"] = "Cualquiera en internet"; App::$strings["Publish your default profile in the network directory"] = "Publicar su perfil principal en el directorio de la red"; App::$strings["Allow us to suggest you as a potential friend to new members?"] = "¿Nos permite sugerirle como amigo potencial a los nuevos miembros?"; -App::$strings["or"] = "o"; App::$strings["Your channel address is"] = "Su dirección de canal es"; App::$strings["Your files/photos are accessible via WebDAV at"] = "Sus archivos y fotos son accesibles a través de WebDAV en "; App::$strings["Automatic membership approval"] = "Aprobación automática de nuevos miembros"; @@ -3042,6 +3129,7 @@ App::$strings["Current Password"] = "Contraseña actual"; App::$strings["Enter New Password"] = "Escribir una nueva contraseña"; App::$strings["Confirm New Password"] = "Confirmar la nueva contraseña"; App::$strings["Leave password fields blank unless changing"] = "Dejar en blanco la contraseña a menos que desee cambiarla."; +App::$strings["DId2 or Email Address:"] = "Did2 o dirección de correo electrónico: "; App::$strings["Remove this account including all its channels"] = "Eliminar esta cuenta incluyendo todos sus canales"; App::$strings["No feature settings configured"] = "No se ha establecido la configuración de los complementos"; App::$strings["Addon Settings"] = "Ajustes de los complementos"; @@ -3380,6 +3468,7 @@ App::$strings["repeated %s's post"] = "repetida la entrada de %s"; App::$strings["edited a post dated %s"] = "ha editado una entrada %s"; App::$strings["edited a comment dated %s"] = "ha editado un comentario %s"; App::$strings["created an event"] = "se creó un evento"; +App::$strings["verified"] = "verificado"; App::$strings["error saving data"] = "error guardando los datos"; App::$strings["Missing room name"] = "Sala de chat sin nombre"; App::$strings["Duplicate room name"] = "Nombre de sala duplicado."; -- cgit v1.2.3 From 628b03da29db206ef89026dd35b41ae1eb7d983d Mon Sep 17 00:00:00 2001 From: Mario Date: Fri, 4 Jun 2021 10:25:36 +0200 Subject: fix css issue --- view/tpl/login.tpl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/view/tpl/login.tpl b/view/tpl/login.tpl index 492149abb..1a47d122c 100644 --- a/view/tpl/login.tpl +++ b/view/tpl/login.tpl @@ -7,8 +7,8 @@ {{include file="field_checkbox.tpl" field=$remember_me}}
-