mirror of
https://framagit.org/hubzilla/core.git
synced 2026-06-23 01:36:14 -04:00
Compare commits
53 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6de327402b | ||
|
|
131ce826c3 | ||
|
|
a3f4ad9ea0 | ||
|
|
ec3b1131d9 | ||
|
|
74c0345009 | ||
|
|
628b03da29 | ||
|
|
bd59fb0b4e | ||
|
|
443b436be8 | ||
|
|
343f3059e6 | ||
|
|
ba22d3e9b6 | ||
|
|
657af3024e | ||
|
|
7d82a34538 | ||
|
|
a0b788e96a | ||
|
|
b63aa3079b | ||
|
|
2171686284 | ||
|
|
b382edc61d | ||
|
|
5ae21d04b0 | ||
|
|
2980f852aa | ||
|
|
5e07ebe7fa | ||
|
|
e9088bd52e | ||
|
|
92ea7fcfb1 | ||
|
|
64181c7cf1 | ||
|
|
8a0c7b3fe1 | ||
|
|
587e790892 | ||
|
|
f73a83aa55 | ||
|
|
513cf2b8e2 | ||
|
|
7d4e07df79 | ||
|
|
8211bc09d4 | ||
|
|
5705005ca3 | ||
|
|
79b4642b32 | ||
|
|
c9981ff0e1 | ||
|
|
0948b061fe | ||
|
|
a537e78f14 | ||
|
|
25edeebf2b | ||
|
|
a7a4727591 | ||
|
|
bc2afb21e1 | ||
|
|
64fe93b9eb | ||
|
|
33d2a852c9 | ||
|
|
300679c053 | ||
|
|
f9c85c52f3 | ||
|
|
98985b2761 | ||
|
|
8fe00d428d | ||
|
|
02229482b8 | ||
|
|
9a5c1aa02f | ||
|
|
a46e340a13 | ||
|
|
70c3cd99ac | ||
|
|
e89bbde575 | ||
|
|
2ee1e2af72 | ||
|
|
c3ad21c548 | ||
|
|
635a24dff4 | ||
|
|
a03423794a | ||
|
|
d4e723a8eb | ||
|
|
ded9f18b8a |
28
CHANGELOG
28
CHANGELOG
@@ -1,3 +1,31 @@
|
||||
Hubzilla 5.6.1 (2021-06-04)
|
||||
- Update spanish translations
|
||||
- Fix login name label if register email verification is disabled
|
||||
- Fix zotinfo issue with deleted channels
|
||||
- Make pubstream ordering configurable
|
||||
- Fix article summary duplicated when editing
|
||||
- Update polish translations
|
||||
- Fix admin setting for invitations not displayed correctly
|
||||
- Fix registration in invite only mode
|
||||
- Fix notifications not returning offset -1 when returning early
|
||||
- Fix direct messages for items imported via sync
|
||||
- Bring back the channel protocols hooks
|
||||
- Fix security headers switching
|
||||
- Fix magic auth for delegated channels
|
||||
- Introduce drop_query_params() for secure query parameter removal
|
||||
- PHP8 fixes (ongoing)
|
||||
- Fix menu wrapping regression
|
||||
|
||||
Addons
|
||||
- LDAPauth: fix regression creating an account
|
||||
- Twitter: allow feeds crossposting
|
||||
- Twitter: fix posting when post by default is disabled
|
||||
- Pubcrawl: add litepub directMessage attribute
|
||||
- Pubcrawl: allow xchan/hubloc upgrades from e.g. ostatus
|
||||
- Diaspora: fix possible issue with missing hublocs
|
||||
- Diaspora: refine dispatching of public of public items
|
||||
|
||||
|
||||
Hubzilla 5.6 (2021-05-11)
|
||||
- Improve postgres hubloc queries
|
||||
- Implement automatic duplicate singleton hubloc removal
|
||||
|
||||
@@ -55,6 +55,7 @@ class Cron {
|
||||
db_utcnow()
|
||||
);
|
||||
|
||||
require_once('include/account.php');
|
||||
remove_expired_registrations();
|
||||
|
||||
$interval = get_config('system', 'delivery_interval', 3);
|
||||
|
||||
@@ -29,6 +29,7 @@ class Onedirsync {
|
||||
|
||||
if (!$r)
|
||||
return;
|
||||
|
||||
if (($r[0]['ud_flags'] & UPDATE_FLAGS_UPDATED) || (!$r[0]['ud_addr']))
|
||||
return;
|
||||
|
||||
@@ -59,13 +60,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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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 left join hubloc on xchan_hash = hubloc_hash where hubloc_id_url = '%s' limit 1",
|
||||
$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;
|
||||
}
|
||||
|
||||
@@ -2924,7 +2924,19 @@ class Libzot {
|
||||
];
|
||||
|
||||
$ret['channel_role'] = get_pconfig($e['channel_id'], 'system', 'permissions_role', 'custom');
|
||||
$ret['protocols'] = ['zot6', 'zot'];
|
||||
|
||||
$hookinfo = [
|
||||
'channel_id' => $id,
|
||||
'protocols' => ['zot6', 'zot']
|
||||
];
|
||||
/**
|
||||
* @hooks channel_protocols
|
||||
* * \e int \b channel_id
|
||||
* * \e array \b protocols
|
||||
*/
|
||||
call_hooks('channel_protocols', $hookinfo);
|
||||
|
||||
$ret['protocols'] = $hookinfo['protocols'];
|
||||
$ret['searchable'] = $searchable;
|
||||
$ret['adult_content'] = $adult_channel;
|
||||
$ret['public_forum'] = $public_forum;
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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'),
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -745,10 +745,10 @@ class Item extends Controller {
|
||||
|
||||
if($parent_item) {
|
||||
$acl->set($parent_item);
|
||||
$private = intval($acl->is_private() || $parent_item['item_private']);
|
||||
$public_policy = $parent_item['public_policy'];
|
||||
$owner_hash = $parent_item['owner_xchan'];
|
||||
$webpage = $parent_item['item_type'];
|
||||
$private = intval($parent_item['item_private']);
|
||||
$public_policy = $parent_item['public_policy'];
|
||||
$owner_hash = $parent_item['owner_xchan'];
|
||||
$webpage = $parent_item['item_type'];
|
||||
}
|
||||
|
||||
if((! $allow_empty) && (! strlen($body))) {
|
||||
|
||||
@@ -40,7 +40,7 @@ class Magic extends Controller {
|
||||
goaway($dest);
|
||||
}
|
||||
|
||||
$basepath = $parsed['scheme'] . '://' . $parsed['host'] . (($parsed['port']) ? ':' . $parsed['port'] : '');
|
||||
$basepath = $parsed['scheme'] . '://' . $parsed['host'] . (isset($parsed['port']) ? ':' . $parsed['port'] : '');
|
||||
$owapath = SConfig::get($basepath,'system','openwebauth', $basepath . '/owa');
|
||||
|
||||
// This is ready-made for a plugin that provides a blacklist or "ask me" before blindly authenticating.
|
||||
@@ -110,6 +110,7 @@ class Magic extends Controller {
|
||||
$headers['(request-target)'] = 'post ' . '/owa';
|
||||
|
||||
$headers = HTTPSig::create_sig($headers,$channel['channel_prvkey'], channel_url($channel),true,'sha512');
|
||||
$redirects = 0;
|
||||
$x = z_post_url($owapath,$data,$redirects,[ 'headers' => $headers ]);
|
||||
logger('owa fetch returned: ' . print_r($x,true),LOGGER_DATA);
|
||||
if ($x['success']) {
|
||||
|
||||
@@ -5,18 +5,18 @@ namespace Zotlabs\Module;
|
||||
class Manage extends \Zotlabs\Web\Controller {
|
||||
|
||||
function get() {
|
||||
|
||||
|
||||
if((! get_account_id()) || ($_SESSION['delegate'])) {
|
||||
notice( t('Permission denied.') . EOL);
|
||||
return;
|
||||
}
|
||||
|
||||
nav_set_selected('Channel Manager', 'settings/manage');
|
||||
|
||||
|
||||
require_once('include/security.php');
|
||||
|
||||
|
||||
$change_channel = ((argc() > 1) ? intval(argv(1)) : 0);
|
||||
|
||||
|
||||
if((argc() > 2) && (argv(2) === 'default')) {
|
||||
$r = q("select channel_id from channel where channel_id = %d and channel_account_id = %d limit 1",
|
||||
intval($change_channel),
|
||||
@@ -31,7 +31,7 @@ class Manage extends \Zotlabs\Web\Controller {
|
||||
goaway(z_root() . '/manage');
|
||||
}
|
||||
|
||||
|
||||
|
||||
if($change_channel) {
|
||||
|
||||
$r = change_channel($change_channel);
|
||||
@@ -45,29 +45,29 @@ class Manage extends \Zotlabs\Web\Controller {
|
||||
}
|
||||
goaway(z_root());
|
||||
}
|
||||
|
||||
|
||||
$channels = null;
|
||||
|
||||
|
||||
$r = q("select channel.*, xchan.* from channel left join xchan on channel.channel_hash = xchan.xchan_hash where channel.channel_account_id = %d and channel_removed = 0 order by channel_name ",
|
||||
intval(get_account_id())
|
||||
);
|
||||
|
||||
|
||||
$account = \App::get_account();
|
||||
|
||||
|
||||
if($r && count($r)) {
|
||||
$channels = $r;
|
||||
for($x = 0; $x < count($channels); $x ++) {
|
||||
$channels[$x]['link'] = 'manage/' . intval($channels[$x]['channel_id']);
|
||||
$channels[$x]['default'] = (($channels[$x]['channel_id'] == $account['account_default_channel']) ? "1" : '');
|
||||
$channels[$x]['default'] = (($channels[$x]['channel_id'] == $account['account_default_channel']) ? "1" : '');
|
||||
$channels[$x]['default_links'] = '1';
|
||||
|
||||
|
||||
|
||||
|
||||
$c = q("SELECT id, item_wall FROM item
|
||||
WHERE item_unseen = 1 and uid = %d " . item_normal(),
|
||||
intval($channels[$x]['channel_id'])
|
||||
);
|
||||
|
||||
if($c) {
|
||||
|
||||
if($c) {
|
||||
foreach ($c as $it) {
|
||||
if(intval($it['item_wall']))
|
||||
$channels[$x]['home'] ++;
|
||||
@@ -75,25 +75,25 @@ class Manage extends \Zotlabs\Web\Controller {
|
||||
$channels[$x]['network'] ++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
$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($channels[$x]['channel_id'])
|
||||
);
|
||||
|
||||
|
||||
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 ",
|
||||
@@ -101,7 +101,7 @@ class Manage extends \Zotlabs\Web\Controller {
|
||||
dbesc(datetime_convert('UTC', date_default_timezone_get(), 'now + 7 days')),
|
||||
dbesc(datetime_convert('UTC', date_default_timezone_get(), 'now - 1 days'))
|
||||
);
|
||||
|
||||
|
||||
if($events) {
|
||||
$channels[$x]['all_events'] = count($events);
|
||||
|
||||
@@ -128,7 +128,7 @@ class Manage extends \Zotlabs\Web\Controller {
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
$r = q("select count(channel_id) as total from channel where channel_account_id = %d and channel_removed = 0",
|
||||
intval(get_account_id())
|
||||
@@ -140,23 +140,23 @@ class Manage extends \Zotlabs\Web\Controller {
|
||||
else {
|
||||
$channel_usage_message = '';
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
$create = array( 'new_channel', t('Create a new channel'), t('Create New'));
|
||||
|
||||
|
||||
$delegates = null;
|
||||
|
||||
if(local_channel()) {
|
||||
$delegates = q("select * from abook left join xchan on abook_xchan = xchan_hash where
|
||||
$delegates = q("select * from abook left join xchan on abook_xchan = xchan_hash where
|
||||
abook_channel = %d and abook_xchan in ( select xchan from abconfig where chan = %d and cat = 'their_perms' and k = 'delegate' and v = '1' )",
|
||||
intval(local_channel()),
|
||||
intval(local_channel())
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
if($delegates) {
|
||||
for($x = 0; $x < count($delegates); $x ++) {
|
||||
$delegates[$x]['link'] = 'magic?f=&bdest=' . bin2hex($delegates[$x]['xchan_url'])
|
||||
$delegates[$x]['link'] = 'magic?f=&bdest=' . bin2hex($delegates[$x]['xchan_url'] . '?zid=' . get_my_address() . '&delegate=' . urlencode($delegates[$x]['xchan_addr']))
|
||||
. '&delegate=' . urlencode($delegates[$x]['xchan_addr']);
|
||||
$delegates[$x]['channel_name'] = $delegates[$x]['xchan_name'];
|
||||
$delegates[$x]['delegate'] = 1;
|
||||
@@ -165,7 +165,7 @@ class Manage extends \Zotlabs\Web\Controller {
|
||||
else {
|
||||
$delegates = null;
|
||||
}
|
||||
|
||||
|
||||
$o = replace_macros(get_markup_template('channels.tpl'), array(
|
||||
'$header' => t('Channel Manager'),
|
||||
'$msg_selected' => t('Current Channel'),
|
||||
@@ -181,9 +181,9 @@ class Manage extends \Zotlabs\Web\Controller {
|
||||
'$delegated_desc' => t('Delegated Channel'),
|
||||
'$delegates' => $delegates
|
||||
));
|
||||
|
||||
|
||||
return $o;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -876,7 +876,7 @@ class Photos extends \Zotlabs\Web\Controller {
|
||||
$prevlink = '';
|
||||
$nextlink = '';
|
||||
|
||||
if($_GET['order'] === 'posted')
|
||||
if(isset($_GET['order']) && $_GET['order'] === 'posted')
|
||||
$order = 'ASC';
|
||||
else
|
||||
$order = 'DESC';
|
||||
@@ -901,8 +901,8 @@ class Photos extends \Zotlabs\Web\Controller {
|
||||
}
|
||||
}
|
||||
|
||||
$prevlink = z_root() . '/photos/' . \App::$data['channel']['channel_address'] . '/image/' . $prvnxt[$prv]['hash'] . (($_GET['order'] === 'posted') ? '?f=&order=posted' : '');
|
||||
$nextlink = z_root() . '/photos/' . \App::$data['channel']['channel_address'] . '/image/' . $prvnxt[$nxt]['hash'] . (($_GET['order'] === 'posted') ? '?f=&order=posted' : '');
|
||||
$prevlink = z_root() . '/photos/' . \App::$data['channel']['channel_address'] . '/image/' . $prvnxt[$prv]['hash'] . (($order == 'ASC') ? '?f=&order=posted' : '');
|
||||
$nextlink = z_root() . '/photos/' . \App::$data['channel']['channel_address'] . '/image/' . $prvnxt[$nxt]['hash'] . (($order == 'ASC') ? '?f=&order=posted' : '');
|
||||
}
|
||||
|
||||
|
||||
@@ -987,7 +987,7 @@ class Photos extends \Zotlabs\Web\Controller {
|
||||
}
|
||||
|
||||
$tags = array();
|
||||
if($link_item['term']) {
|
||||
if(x($link_item, 'term')) {
|
||||
$cnt = 0;
|
||||
foreach($link_item['term'] as $t) {
|
||||
$tags[$cnt] = array(0 => format_term_for_display($t));
|
||||
|
||||
@@ -197,7 +197,7 @@ class Pubstream extends \Zotlabs\Web\Controller {
|
||||
|
||||
if($update) {
|
||||
|
||||
$ordering = "commented";
|
||||
$ordering = get_config('system', 'pubstream_ordering', 'commented');
|
||||
|
||||
if($load) {
|
||||
if($mid) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -108,7 +108,8 @@ class Sse extends Controller {
|
||||
echo 'data: {}';
|
||||
echo "\n\n";
|
||||
|
||||
ob_end_flush();
|
||||
if(ob_get_length() > 0)
|
||||
ob_end_flush();
|
||||
flush();
|
||||
|
||||
if(connection_status() != CONNECTION_NORMAL || connection_aborted()) {
|
||||
|
||||
@@ -144,11 +144,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;
|
||||
@@ -216,11 +220,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;
|
||||
@@ -287,11 +295,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;
|
||||
@@ -359,15 +371,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;
|
||||
}
|
||||
}
|
||||
|
||||
21
boot.php
21
boot.php
@@ -52,7 +52,7 @@ require_once('include/attach.php');
|
||||
require_once('include/bbcode.php');
|
||||
|
||||
define ( 'PLATFORM_NAME', 'hubzilla' );
|
||||
define ( 'STD_VERSION', '5.6' );
|
||||
define ( 'STD_VERSION', '5.6.1' );
|
||||
define ( 'ZOT_REVISION', '6.0' );
|
||||
|
||||
define ( 'DB_UPDATE_VERSION', 1245 );
|
||||
@@ -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
|
||||
@@ -2420,10 +2423,10 @@ function construct_page() {
|
||||
|
||||
// security headers - see https://securityheaders.io
|
||||
|
||||
if(App::get_scheme() === 'https' && App::$config['system']['transport_security_header'])
|
||||
if(App::get_scheme() === 'https' && isset(App::$config['system']['transport_security_header']) && intval(App::$config['system']['transport_security_header']) == 1)
|
||||
header("Strict-Transport-Security: max-age=31536000");
|
||||
|
||||
if(isset(App::$config['system']['content_security_policy'])) {
|
||||
if(isset(App::$config['system']['content_security_policy']) && intval(App::$config['system']['content_security_policy']) == 1) {
|
||||
$cspsettings = [
|
||||
'script-src' => [ "'self'", "'unsafe-inline'", "'unsafe-eval'" ],
|
||||
'style-src' => [ "'self'", "'unsafe-inline'" ],
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<dl class="dl-horizontal">
|
||||
<dt>Ogólne</dt>
|
||||
<dd>
|
||||
Statystyki kolejki pokazują, ile postów znajduje się w kolejce do dostarczenia
|
||||
do innych węzłów. Priorytet jest powiązany z liczbą nieudanych prób dostawy.
|
||||
Statystyki kolejki pokazują, ile wpisów znajduje się w kolejce w celu dostarczenia
|
||||
ich do innych portali. Priorytet jest związany z liczbą nieudanych prób dostawy.
|
||||
</dd>
|
||||
</dl>
|
||||
@@ -1,9 +1,9 @@
|
||||
<dl class="dl-horizontal">
|
||||
<dt><a href="/help/member/member_guide#Tokeny_dost_pu_go_cia">Tokeny dostępu gościa</a></dt>
|
||||
<dd>
|
||||
Aby ułatwić udostępnianie prywatnych zasobów osobom niebędącym członkami
|
||||
lub członkami sfederyzowanych węzłów (węzłów) i zapewnić zabezpieczone
|
||||
wykrywaniem danych identyfikacyjnych, Hubzilla zawiera mechanizm tworzenia
|
||||
Aby ułatwić udostępnianie prywatnych zasobów osobom niebędących członkami
|
||||
tego portalu lub sfederyzowanych portali (hubów) i zapewnić zabezpieczone
|
||||
wykrywaniem danych identyfikacyjnych, Hubzilla posiada mechanizm tworzenia
|
||||
i zarządzania tymczasowymi ("jednorazowymi") loginami, zwanymi "tokenami
|
||||
dostępu Zot”. Tokeny te, będące swojego rodzaju danymi uwierzytelniającymi,
|
||||
mogą być używane do uwierzytelniania w serwisie Hubzilla wyłącznie w celu
|
||||
|
||||
@@ -87,6 +87,7 @@ Options are:
|
||||
[*= system.proc_run_use_exec ] If 1, use the exec system call in proc_run to run background tasks. By default we use proc_open and proc_close. On some (currently rare) systems this does not work well.
|
||||
[*= system.projecthome ] Display the project page on your home page for logged out viewers.
|
||||
[*= system.projecthome ] Set the project homepage as the homepage of your hub. (Obsolete)
|
||||
[*= system.pubstream_ordering ] Set pubstream ordering. Possible values 'commented' (default), 'created' and 'edited'.
|
||||
[*= system.register_link ] path to direct to from the "register" link on the login form. On closed sites this will direct to 'pubsites'. For open sites it will normally redirect to 'register' but you may change this to a custom site page offering subscriptions or whatever.
|
||||
[*= system.reserved_channels ] Don't allow members to register channels with this comma separated list of names (no spaces)
|
||||
[*= system.sellpage ] A URL shown in the public sites list to sell your hub - display service classes, etc.
|
||||
|
||||
@@ -156,7 +156,7 @@ Dodatkowe sekcje i pola wyboru profilu. Rozszerza to zakres informacji profilowy
|
||||
|
||||
**Import/Eksport proflilu**
|
||||
|
||||
Możliwość zaimportowania lub wyeksportowania swojego profilu na inne serwisy (węzły sieci Zot). Funkcjonalność ta związana jest z nomadycznością tożsamości internetowej w $Projectname. Domyślnie Twoja tożsamość "podróżuje" z Tobą, gdy przeglądasz matrycę zdalnych witryn - tam też wiedzą kim jesteś i mogą wyświetlać Ci treści, które tylko Ty widzisz. Dzięki rozszerzonemu udostępnianiu tożsamości możesz dostarczyć te informacje do dowolnej odwiedzanej witryny z poziomu swojej matrycy.
|
||||
Możliwość zaimportowania lub wyeksportowania swojego profilu na inne serwisy (portale sieci Zot). Funkcjonalność ta związana jest z nomadycznością tożsamości internetowej w $Projectname. Domyślnie Twoja tożsamość "podróżuje" z Tobą, gdy przeglądasz matrycę zdalnych witryn - tam też wiedzą kim jesteś i mogą wyświetlać Ci treści, które tylko Ty widzisz. Dzięki rozszerzonemu udostępnianiu tożsamości możesz dostarczyć te informacje do dowolnej odwiedzanej witryny z poziomu swojej matrycy.
|
||||
|
||||
**Wiele profili**
|
||||
|
||||
|
||||
@@ -2,20 +2,20 @@
|
||||
|
||||
Domyślnie $Projectname używa katalogów dostępnych w Internecie, które funkcjonują jako kanały.
|
||||
|
||||
Istnieją pewne scenariusze, w których może być potrzebny własny serwer katalogów, do którego można by podłączyć wiele węzłów. Ogranicza to dostęp tylko do kanałów w węzłach podłączonych do tego serwera katalogowego.
|
||||
Istnieją pewne scenariusze, w których może być potrzebny własny serwer katalogów, do którego można by podłączyć wiele portali. Ogranicza to dostęp tylko do kanałów w portalipodłączonych do tego serwera katalogowego.
|
||||
|
||||
##Instrukcje dotyczące konfigurowania jednego węzła jako katalogu podstawowego dla wielu węzłów prywatnych.##
|
||||
##Instrukcje dotyczące konfigurowania jednego portalu jako katalogu podstawowego dla wielu portali prywatnych.##
|
||||
***
|
||||
|
||||
|
||||
* W węźle, który będzie serwerem katalogów, otwórz plik .htconfig.php i ustaw:
|
||||
* Na portalu , który będzie serwerem katalogów, otwórz plik .htconfig.php i ustaw:
|
||||
|
||||
`App::$config['system']['directory_mode'] = DIRECTORY_MODE_PRIMARY;`
|
||||
|
||||
|
||||
Domyślnie, opcja ta powinna już być ustawiona na **DIRECTORY_MODE_NORMAL**, więc po prostu wystarczy tylko ustawić nową wartość: **DIRECTORY_MODE_PRIMARY**
|
||||
|
||||
* Następnie, w każdym węźle (w tym na serwerze katalogowym), w terminalu, przejdź do folderu, w którym jest zainstalowany kod węzła i uruchomić usługę katalogową:
|
||||
* Następnie, na każdym portalu (w tym na serwerze katalogowym), w terminalu, przejdź do folderu z kodem $Projectname i uruchom usługę katalogową:
|
||||
|
||||
`util/config system directory_realm YOURREALMNAME`
|
||||
|
||||
@@ -27,17 +27,17 @@ Istnieją pewne scenariusze, w których może być potrzebny własny serwer kata
|
||||
|
||||
(**THEPASSWORD** jest hasłem dla dziedziny katalogowej)
|
||||
|
||||
**UWAGA:** Trzeba użyć tej samej nazwy dziedziny i hasła dla każdego węzła
|
||||
**UWAGA:** Trzeba użyć tej samej nazwy dziedziny i hasła dla każdego portalu
|
||||
|
||||
* Na koniec, dla każdego węzła "klienckiego", uruchom (z terminala):
|
||||
* Na koniec, dla każdego portalu "klienckiego", uruchom (z terminala):
|
||||
|
||||
`util/config system directory_server https://theaddressofyourdirectoryserver.com`
|
||||
|
||||
***
|
||||
Teraz, gdy przeglądasz katalog każdego węzła, powinien on pokazywać tylko kanały, które istnieją w węzłach ustawionej domeny katalogowej. Do tej pory testowałem to z dwoma węzłami i wydaje się, że działa dobrze.
|
||||
Kanały utworzone w każdym węźle są odzwierciedlane w katalogu głównym, a następnie w katalogu wszystkich węzłów klienckich
|
||||
Teraz, gdy przeglądasz katalog każdego portalu, powinien on pokazywać tylko kanały, które istnieją w portalach ustawionej domeny katalogowej. Do tej pory testowałem to z dwoma portalami i wydaje się, że działa dobrze.
|
||||
Kanały utworzone w każdym portalu są odzwierciedlane w katalogu głównym, a następnie w katalogu wszystkich portali klienckich
|
||||
|
||||
##Problemy##
|
||||
***
|
||||
|
||||
Kiedy tworzyłem pierwszy węzeł, był on uruchomiony i działał przez około godzinę, zanim zmieniłem go na PRIMARY_MODE, a po zmianie w katalogu nadal było kilka kanałów z całej matrycy. Usunąłem je z tabeli xchan i wydaje się, że rozwiązało to problem.
|
||||
Kiedy tworzyłem pierwszy portal, był on uruchomiony i działał przez około godzinę, zanim zmieniłem go na PRIMARY_MODE, a po zmianie w katalogu nadal było kilka kanałów z całej sieci. Usunąłem je z tabeli xchan i wydaje się, że rozwiązało to problem.
|
||||
|
||||
@@ -4,69 +4,43 @@ Tłumaczenie $Projectname
|
||||
Procedura tłumaczenia na język polski
|
||||
-------------------------------------
|
||||
|
||||
Tłumaczenie interfejsu użytkownika, ekranów kontekstowej pomocy oraz dokumentacji
|
||||
na język polski odbiega nieco od ogólnej procedury przyjetej w $Projectname.
|
||||
Po prostu, zrezygnowano z przygotowania pliku translacyjnego hmessages.po
|
||||
za pośrednictwem serwisu [Transifex][1], tak jak to jest zalecane w $Projectname
|
||||
i posłużono się sporządzeniem tych plików przy pomocy ogólnie dostępnych narzędzi
|
||||
translacyjnych przeznaczonych do tworzenia plików [gettext](https://www.gnu.org/software/gettext/) (rozszerzenia .po, .mo, .pot), takich jak [poedit](https://poedit.net/) i inne.
|
||||
Tłumaczenie interfejsu użytkownika, ekranów kontekstowej pomocy oraz dokumentacji na język polski odbiega nieco od ogólnej procedury przyjetej w $Projectname. Po prostu, zrezygnowano z przygotowania pliku translacyjnego hmessages.po za pośrednictwem serwisu [Transifex][1], tak jak to jest zalecane w $Projectname i posłużono się sporządzeniem tych plików przy pomocy ogólnie dostępnych narzędzi translacyjnych przeznaczonych do tworzenia plików [gettext](https://www.gnu.org/software/gettext/) rozszerzenia .po, .mo, .pot), takich jak [poedit](https://poedit.net/) i inne.
|
||||
|
||||
Trzeba podkreślić, że to odstępstwo dotyczy przygotowania pliku hmessages.po
|
||||
i organizacji prac nad tłumaczeniem.
|
||||
Trzeba podkreślić, że to odstępstwo dotyczy przygotowania pliku hmessages.po i organizacji prac nad tłumaczeniem.
|
||||
|
||||
Tłumaczenie $Projectname na język polski jest obecnie wydzielone w odrębny podprojekt,
|
||||
utrzymywany w [repozytorium na GitHub](https://github.com/astabski/hubzilla-pl)
|
||||
Tłumaczenie $Projectname na język polski jest obecnie wydzielone w odrębny podprojekt, utrzymywany w [repozytorium na GitHub] https://github.com/astabski/hubzilla-pl)
|
||||
|
||||
Projekt ten obejmuje wszystkie pliki potrzebne do przetłumaczenia interfesju użytkownika,
|
||||
pomocy kontekstowej i oficjalnej dokumentacji, zawarte w następujących katalogach
|
||||
kodu $Projectname:
|
||||
Projekt ten obejmuje wszystkie pliki potrzebne do przetłumaczenia interfesju użytkownika, pomocy kontekstowej i oficjalnej dokumentacji, zawarte w następujących katalogach kodu $Projectname:
|
||||
|
||||
- view/pl
|
||||
- doc/context/pl
|
||||
- doc/macros/pl
|
||||
- doc/pl
|
||||
|
||||
Projekt ten jest obecnie podstawą oficjalnego polskiego tłumaczenia $Projectname.
|
||||
Po każdej istotnej zmianie, osoba kierująca projektem tłumaczenia zgłasza odpowiednie
|
||||
żądanie PR do drzewa żródłowego $Projectname.
|
||||
Projekt ten jest obecnie podstawą oficjalnego polskiego tłumaczenia $Projectname. Po każdej istotnej zmianie, osoba kierująca projektem tłumaczenia zgłasza odpowiednie żądanie PR do drzewa żródłowego $Projectname.
|
||||
|
||||
### Zgłaszanie poprawek
|
||||
|
||||
Jeśli chcesz zgłosić jakieś zmiany w istniejącym tekście tłumaczenia, otwórz
|
||||
nową sprawę na stronie https://github.com/astabski/hubzilla-pl/issues i podaj tam
|
||||
szczegóły proponowanych zmian.
|
||||
Jeśli chcesz zgłosić jakieś zmiany w istniejącym tekście tłumaczenia, otwórz nową sprawę na stronie https://github.com/astabski/hubzilla-pl/issues i podaj tam szczegóły proponowanych zmian.
|
||||
|
||||
Możesz też dokonać poprawek w tym projekcie, zgłaszając odpowiednio przygotowane
|
||||
żądanie PR.
|
||||
Możesz też dokonać poprawek w tym projekcie, zgłaszając odpowiednio przygotowane żądanie PR.
|
||||
|
||||
### Nowe tłumaczenia
|
||||
|
||||
Jeśli chcesz pomóc, tworząc tłumaczenia jeszcze nie przetłumaczonych dokumentów
|
||||
$Projectname, dołącz do projektu https://github.com/astabski/hubzilla-pl. W tym
|
||||
celu umieść na stronie https://github.com/astabski/hubzilla-pl/issues odpowiednią
|
||||
wiadomość. Otrzymasz odpowiedź z dokładną instrukcją.
|
||||
Jeśli chcesz pomóc, tworząc tłumaczenia jeszcze nie przetłumaczonych dokumentów $Projectname, dołącz do projektu https://github.com/astabski/hubzilla-pl. W tym celu umieść na stronie https://github.com/astabski/hubzilla-pl/issues odpowiednią wiadomość. Otrzymasz odpowiedź z dokładną instrukcją.
|
||||
|
||||
Ogólne zasady tłumaczeń obowiązujące w $Projectname
|
||||
---------------------------------------------------
|
||||
|
||||
Jeśli chcesz samodzielnie przenieść swoją pracę do drzewa źródłowego $Projectname,
|
||||
skontaktuj się z zespołem $Projectname i zadaj pytania.
|
||||
Jeśli chcesz samodzielnie przenieść swoją pracę do drzewa źródłowego $Projectname, skontaktuj się z zespołem $Projectname i zadaj pytania.
|
||||
|
||||
Proces jest tłumaczenia prosty, a oprogramowanie $Projectname jest dostarczane ze
|
||||
wszystkimi niezbędnymi narzędziami.
|
||||
Proces jest tłumaczenia prosty, a oprogramowanie $Projectname jest dostarczane ze wszystkimi niezbędnymi narzędziami.
|
||||
|
||||
Lokalizacją przetłumaczonych plików jest w kodzie źródłowym katalog `/view/LNG-CODE/`,
|
||||
gdzie `LNG-CODE` jest używanym kodem języka, np. `de` dla niemieckiego lub `fr`
|
||||
dla francuskiego.
|
||||
Lokalizacją przetłumaczonych plików jest w kodzie źródłowym katalog `/view/LNG-CODE/`, gdzie `LNG-CODE` jest używanym kodem języka, np. `de` dla niemieckiego albo `pl` dla polskiego.
|
||||
|
||||
W przypadku szablonów wiadomości e-mail (pliki `*.tpl`) po prostu trzeba umieścić
|
||||
je w katalogu i gotowe. Przetłumaczone łańcuchy pochodzą z pliku `hmessages.po`
|
||||
z serwisu Transifex, który należy przetłumaczyć na plik PHP używany przez $Projectname.
|
||||
Aby to zrobić, trzeba umieścić plik w wymienionym wyżej katalogu i użyć narzędzia
|
||||
`po2php` z katalogu `util` w instalacji $Projectname.
|
||||
W przypadku szablonów wiadomości e-mail (pliki `*.tpl`) po prostu trzeba umieścić je w katalogu i gotowe. Przetłumaczone łańcuchy pochodzą z pliku `hmessages.po` z serwisu Transifex, który należy przetłumaczyć na plik PHP używany przez $Projectname. Aby to zrobić, trzeba umieścić plik w wymienionym wyżej katalogu i użyć narzędzia `po2php` z katalogu `util` w instalacji $Projectname.
|
||||
|
||||
Zakładając, że chcesz przetłumaczyć polską wersję umieszczoną pliku
|
||||
`view/pl/hmessages.po`, wykonaj następujące czynności.
|
||||
Zakładając, że chcesz przetłumaczyć polską wersję umieszczoną pliku `view/pl/hmessages.po`, wykonaj następujące czynności.
|
||||
|
||||
1. Przejdź w wierszu polecenia do katalogu głównego instalacji $Projectname
|
||||
|
||||
@@ -89,10 +63,8 @@ Zakładając, że chcesz przetłumaczyć polską wersję umieszczoną pliku
|
||||
Narzędzia
|
||||
---------
|
||||
|
||||
Oprócz skryptu po2php, jest jeszcze w katalogu "util" w drzewie źródłowym $Projectname
|
||||
kilka narzędzi do tłumaczenia. Jeśli tylko chcesz przetłumacz $Projectname na inny
|
||||
język, którego nie potrzebujesz najbardziej, ale da Ci to wyobrażenie o procesie
|
||||
tłumaczenia $Projectname.
|
||||
Oprócz skryptu po2php, jest jeszcze w katalogu "util" w drzewie źródłowym $Projectname kilka narzędzi do tłumaczenia. Jeśli tylko chcesz przetłumacz $Projectname na inny język, którego nie potrzebujesz najbardziej, ale da Ci to wyobrażenie o procesie
|
||||
tłumaczenia $Projectname.
|
||||
|
||||
Więcej informacji można znaleźć w pliku utils/README.
|
||||
|
||||
|
||||
@@ -1,11 +1,8 @@
|
||||
[h3]Co to jest $Projectname?[/h3]
|
||||
$Projectname to bezpłatny i otwartoźródłowy zestaw aplikacji i usług internetowych działających na specjalnym serwerze internetowym, zwanym "węzłem", który może łączyć się z innymi węzłami w sfederalizowanej sieci internetowej.
|
||||
$Projectname zapewnia użytkownikom zaawansowaną komunikację, tożsamości i usługę kontroli dostępu, które bezproblemowo współpracują w różnych domenach i niezależnych
|
||||
serwisach internetowych. $Projectname pozwala użytkownikom publikować treści, [b]publicznie[/b] lub [b]prywatnie[/b], w swoich "kanałach" (ang. channels), które są zabezpieczonymi kryptograficznie tożsamościami zapewniającymi
|
||||
uwierzytelnianie uzytkowników niezależnie od węzłów, które hostują te kanały. To rewolucyjne uwolnienie tożsamości inernetowej z poszczególnych serwerów i domen jest nazywane "tożsamością nomadyczną" i jest oparte na protokole Zot - nowej strukturze
|
||||
zdecentralizowanej kontroli dostępu ze szczegółowymi, rozszerzalnymi uprawnieniami.
|
||||
Z praktycznego punktu widzenia członków danego węzła, korzystających z oprogramowania $Projectname, oferuje ono szereg znanych,
|
||||
zintegrowanych aplikacji i usług internetowych, w tym:
|
||||
$Projectname Hubzilla to bezpłatny i otwartoźródłowy zestaw aplikacji i usług internetowych, które można wdrożyć na własnym serwerze internetowym jako samodzielny portal społecznościowy, zwanym też "hubem". Portal ten może łączyć się z innymi portalami tego typu, tworząc sfederowaną sieć społecznościową.
|
||||
$Projectname zapewnia użytkownikom zaawansowaną komunikację, tożsamości i usługę kontroli dostępu, które bezproblemowo współpracują w różnych domenach i niezależnych serwisach internetowych.
|
||||
$Projectname pozwala użytkownikom komunikować się i publikować treści w swoich "kanałach" z możliwością bardzo szczegółowej kontroli dostępu. Kanały są zabezpieczonymi kryptograficznie tożsamościami internetowymi, zapewniającymi uwierzytelnianie użytkowników niezależnie od portali na których są hostowane. To rewolucyjne uwolnienie tożsamości inernetowej z poszczególnych serwerów i domen jest nazywane "tożsamością nomadyczną" i jest oparte na protokole Zot - nowej strukturze zdecentralizowanej kontroli dostępu ze szczegółowymi, rozszerzalnymi uprawnieniami.
|
||||
Z praktycznego punktu widzenia członków danego portalu, korzystających z oprogramowania $Projectname, oferuje ono szereg znanych, zintegrowanych aplikacji i usług internetowych, w tym:
|
||||
[ul]
|
||||
[li]wątki dyskusyjne w sieciach społecznościowych[/li]
|
||||
[li]przechowywanie plików w chmurze[/li]
|
||||
@@ -13,30 +10,25 @@ zintegrowanych aplikacji i usług internetowych, w tym:
|
||||
[li]hosting stron internetowych z systemem zarządzania treścią[/li]
|
||||
[li]wiki[/li]
|
||||
[li]i dużo więcej ...[/li][/ul]
|
||||
Chociaż wszystkie te aplikacje i usługi można znaleźć w innych pakietach oprogramowania, tylko $Projectname pozwala ustawić uprawnienia dla grup i osób, [b]które mogą nawet nie mieć kont na Twoim węźle[/b]! W typowych aplikacjach internetowych, jeśli chcesz udostępniać rzeczy prywatnie w Internecie, osoby, którym udostępniasz dane, muszą mieć konta na serwerze, na którym znajdują się Twoje dane; w przeciwnym razie serwer nie może uwierzytelniać odwiedzających witrynę, aby wiedzieć, czy przyznać im dostęp. $Projectname rozwiązuje ten problem za pomocą zaawansowanego systemu zdalnego uwierzytelniania, który weryfikuje tożsamość odwiedzających, wykorzystując techniki obejmujące kryptografię klucza publicznego.
|
||||
Chociaż wszystkie te aplikacje i usługi można znaleźć w innych pakietach oprogramowania, tylko $Projectname pozwala ustawić uprawnienia dla grup i osób, [b]które mogą nawet nie mieć kont na Twoim portalu[/b]! W typowych aplikacjach internetowych, jeśli chcesz udostępniać rzeczy prywatnie w Internecie, osoby, którym udostępniasz dane, muszą mieć konta na serwerze, na którym znajdują się Twoje dane; w przeciwnym razie serwer nie może uwierzytelniać odwiedzających witrynę, aby wiedzieć, czy przyznać im dostęp. $Projectname rozwiązuje ten problem za pomocą zaawansowanego systemu zdalnego uwierzytelniania, który weryfikuje tożsamość odwiedzających, wykorzystując techniki obejmujące kryptografię klucza publicznego.
|
||||
Dzięki oferowanym aplikacjom, $Projectname świetnie się nadaje do budowy platformy komunikacyjno-publikacyjnej o charkterze społecznościowym dla realnych grup społecznych, takich jak rodziny, lokalne grupy, organizacje społeczne, środowiska szkolne, wspólnoty mieszkańców czy wspólnoty religijne.
|
||||
|
||||
[h3]Stos programów[/h3]
|
||||
Pakiet oprogramowania $Projectname jest stosunkowo standardową aplikacją serwerową napisaną głównie w PHP i MySQL,
|
||||
[url=https://framagit.org/$Projectname/core/blob/master/install/INSTALL.txt]wymagającą niewiele więcej niż serwera WWW,
|
||||
bazy danych zgodnej z MySQL i środowiska wykonawczego PHP[/url]. System został zaprojektowany tak, aby był łatwy do
|
||||
zainstalowania przez osoby z podstawowymi umiejętnościami administrowania witryną, na typowych platformach współdzielonego
|
||||
hostingu, z uwzglednieniem szerokiej gamy sprzętu komputerowego. Można go również łatwo rozszerzyć za pomocą wtyczek i motywów
|
||||
oraz innych narzędzi zewnętrznych.
|
||||
Pakiet oprogramowania $Projectname jest stosunkowo standardową aplikacją serwerową napisaną głównie w PHP i MySQL, wymagającą niewiele więcej niż [url=https://framagit.org/$Projectname/core/blob/master/install/INSTALL.txt]serwera WWW, bazy danych zgodnej z MySQL i środowiska wykonawczego PHP[/url]. System został zaprojektowany tak, aby był łatwy do zainstalowania przez osoby z podstawowymi umiejętnościami administrowania witryną, na typowych platformach współdzielonego hostingu, z uwzglednieniem szerokiej gamy sprzętu komputerowego. Można go również łatwo rozszerzyć za pomocą wtyczek i motywów oraz innych narzędzi zewnętrznych.
|
||||
|
||||
[h3]Słownik[/h3]
|
||||
[dl terms="b"]
|
||||
[*= węzeł ([i]ang. hub[/i])] Instancja oprogramowania $Projectname działająca na standardowym serwerze WWW
|
||||
[*= portal, hub ([i]ang. hub[/i])] Instancja oprogramowania $Projectname działająca na standardowym serwerze WWW
|
||||
|
||||
[*= sieć Zot, sieć ([i]w oryginale ang., grid[/i])] Globalna sieć węzłów, które wymieniają między sobą informacje za pomocą protokołu Zot. Nie są to tylko węzły oparte na $Projectname, ale wszystkie węzły implementujace protokół Zot.
|
||||
[*= sieć Zot, sieć ([i]w oryginale ang., grid[/i])] Globalna sieć portali, które wymieniają między sobą informacje za pomocą protokołu Zot. Nie są to tylko portale oparte na $Projectname, ale wszystkie portale implementujące protokół Zot.
|
||||
|
||||
[*= kanał ([i]ang. channel[/i])] Forma organizacji treści i techniczny odpowiednik tożsamości. Kanał może mieć formę osobistej witryny internetowej, bloga, forum i innych znanych form publikowania treści. Kanały mogą łączyć się z innymi kanałami w celu udostępniania informacji z możliwością ustawiania bardzo szczegółowych uprawnień dostępu.
|
||||
|
||||
[*= klon ([i]ang. clone[/i])] Kanały mogą mieć klony innych na innych niezależnych węzłach. Komunikacja współdzielona z kanałem jest synchronizowana między klonami kanału, co umożliwia kanałowi wysyłanie i odbieranie wiadomości oraz dostęp do współdzielonych treści z wielu węzłów. Zapewnia to odporność na awarie sieci i sprzętu, które mogą stanowić poważny problem w przypadku serwerów WWW utrzymywanych na prywatnych serwerach w hostingu współdzielonym lub o ograniczonych zasobach. Klonowanie umożliwia też całkowite przeniesienie kanału z jednego węzła na drugi, z zabraniem wszystkich danych i połączeń. Zobacz "tożsamość nomadyczna".
|
||||
[*= klon ([i]ang. clone[/i])] Kanały mogą mieć klony innych na innych niezależnych portalach. Komunikacja współdzielona z kanałem jest synchronizowana między klonami kanału, co umożliwia kanałowi wysyłanie i odbieranie wiadomości oraz dostęp do współdzielonych treści z wielu portali. Zapewnia to odporność na awarie sieci i sprzętu, które mogą stanowić poważny problem w przypadku serwerów WWW utrzymywanych na prywatnych serwerach w hostingu współdzielonym lub o ograniczonych zasobach. Klonowanie umożliwia też całkowite przeniesienie kanału z jednego portalu na drugi, z zabraniem wszystkich danych i połączeń. Zobacz "tożsamość nomadyczna".
|
||||
|
||||
[*= konto ([i]ang. account[/i])] Umowny rejestr zawierajacy dane rejestracyjne i ewentualnie inne dane użytkownika serwisu internetowego, ściśle związane z umową jaką zwiera użytkownik z operatorem (właścicielem) serwisu o świadczenie usług drogą internetową. Posiadanie konta umożliwia użytkownikowi korzystanie z usług serwisu. Nie jest to pojęcie specyficzne dla platformy Hubzilla ale ma tu znaczenie węższe i należy go odróżniać od profilu lub tożsamości użytkownika. W Hubzilla, użytkownik (w ramach swojego konta) może mieć wiele tożsamości i te tożsamości utrzymywać na wielu odrębnych serwisach w sieci Zotm, w sposób zsynchronizowany. Na tych serwisach użytkownik musi mieć odrębne konta.
|
||||
[*= konto ([i]ang. account[/i])] Umowny rejestr zawierajacy dane rejestracyjne i ewentualnie inne dane użytkownika serwisu internetowego (portalu), ściśle związane z umową jaką zwiera użytkownik z operatorem (właścicielem) serwisu o świadczenie usług drogą internetową. Posiadanie konta umożliwia użytkownikowi korzystanie z usług serwisu. Nie jest to pojęcie specyficzne dla platformy Hubzilla ale ma tu znaczenie węższe i należy go odróżniać od profilu lub tożsamości użytkownika. W Hubzilla, użytkownik (w ramach swojego konta) może mieć wiele tożsamości i te tożsamości utrzymywać na wielu odrębnych portalach w sieci Zot, w sposób zsynchronizowany. Na tych portalach użytkownik musi mieć odrębne konta.
|
||||
|
||||
[*= tożsamość nomadyczna ([i]ang. nomadic identity[/i])] Możliwość uwierzytelniania i łatwej migracji tożsamości pomiędzy niezależnymi węzłami i domenami internetowymi. Tożsamość nomadyczna zapewnia prawdziwą własność tożsamości internetową, ponieważ tożsamości kontrolowane przez konto w węźle nie są ściśle związane z węzłem. Węzeł bardziej przypomina "hosta" kanałów. W serwisie $Projectname nie masz "konta" na serwerze, tak jak na typowych serwisach internetowych - posiadasz tożsamość, którą możesz przenosić w całej sieci za pomocą mechanizmu klonowania.
|
||||
[*= tożsamość nomadyczna ([i]ang. nomadic identity[/i])] Możliwość uwierzytelniania i łatwej migracji tożsamości pomiędzy niezależnymi portalami i domenami internetowymi. Tożsamość nomadyczna zapewnia prawdziwą własność tożsamości internetową, ponieważ tożsamości kontrolowane przez konto na portalu nie są ściśle związane z tym portalem. Portal bardziej przypomina "hosta" kanałów. W serwisie $Projectname nie masz "konta" na serwerze, tak jak na typowych serwisach internetowych - posiadasz tożsamość, którą możesz przenosić w całej sieci za pomocą mechanizmu klonowania.
|
||||
|
||||
[*= [url=[baseurl]/help/developer/zot_protocol]Protokół Zot[/url]] Nowy protokół, oparty na JSON, do wdrażania bezpiecznej, zdecentralizowanej komunikacji i usług. Różni się od wielu innych protokołów komunikacyjnych, budując komunikację na podstawie zdecentralizowanej struktury tożsamości i uwierzytelniania. Składnik uwierzytelniania jest koncepcyjnie podobny do OpenID, ale jest odizolowany od tożsamości opartej na DNS. Tam, gdzie to możliwe, zdalne uwierzytelnianie jest ciche i niewidoczne. Zapewnia to mechanizm kontroli dostępu rozproszonego na skalę sieci WWW, który jest dyskretny.
|
||||
[/dl]
|
||||
@@ -106,7 +98,7 @@ Wpisy i wiadomości mogą być tworzone z datą wygaśnięcia, po którym zostan
|
||||
[h4]Federalizacja usług (Service Federation)[/h4]
|
||||
Oprócz dodatkowych łączników między wpisami z różnych alternatywnych sieci, istnieje natywna obsługa importu treści z kanałów RSS i Atom i wykorzystywania jej do tworzenia specjalnych kanałów. Dostępne są również wtyczki do komunikacji z innymi sieciami za pomocą protokołów Diaspora i GNU-Social (OStatus). Sieci te nie obsługują tożsamości nomadycznej ani kontroli dostępu między domenami. Jednak podstawowa komunikacja jest obsługiwana: do i z Diaspora, Friendica, GNU-Social, Mastodon i innych dostawców, którzy używają tych protokołów.
|
||||
|
||||
Istnieje również eksperymentalna obsługa uwierzytelniania OpenID, której można używać na listach kontroli dostępu. To jest jeszcze w trakcie tworzenia, ale poeksperymentować można. Twój węzeł $Projectname może być używany jako dostawca OpenID do uwierzytelniania członków w zewnętrznych usługach korzystających z tej technologii.
|
||||
Istnieje również eksperymentalna obsługa uwierzytelniania OpenID, której można używać na listach kontroli dostępu. To jest jeszcze w trakcie tworzenia, ale poeksperymentować można. Twój portal $Projectname może być używany jako dostawca OpenID do uwierzytelniania członków w zewnętrznych usługach korzystających z tej technologii.
|
||||
|
||||
Kanały mogą mieć uprawnienia, aby stać się "kanałami pochodnymi", w przypadku gdy dwa lub więcej istniejących kanałów łączy się, tworząc nowy kanał tematyczny.
|
||||
|
||||
@@ -118,7 +110,7 @@ Nasza implementacja grup prywatności jest podobna do "kręgów" w Google i "asp
|
||||
Zapewniamy łatwy dostęp do katalogu członków i udostępniamy zdecentralizowane narzędzia, które mogą dostarczać "sugestie" znajomych. Katalogi to zwykłe serwisy $Projectname, które zdecydowały się zaakceptować rolę serwera katalogowego. Wymaga to więcej zasobów niż większość typowych serwisów, więc nie jest to ustawienie domyślne. Katalogi są synchronizowane i dublowane, dzięki czemu wszystkie zawierają aktualne informacje o całej sieci (z zastrzeżeniem normalnych opóźnień propagacji). Więcej na ten temat znajdziesz w artykule [Konfiguracja katalogu](/help/pl/directories).
|
||||
|
||||
[h4]TLS/SSL[/h4]
|
||||
W przypadku węzłów $Projectname, które używają TLS/SSL, komunikacja między klientem a serwerem jest szyfrowana za pomocą protokołu TLS/SSL. Biorąc pod uwagę niedawno ujawnione w mediach fakty dotyczące powszechnego, globalnego nadzoru i obchodzenia szyfrowania przez NSA i GCHQ, uzasadnione jest założenie, że komunikacja chroniona przez HTTPS może być zagrożona na różne sposoby. W konsekwencji prywatna komunikacja jest szyfrowana na wyższym poziomie przed wysłaniem na zewnątrz.
|
||||
W przypadku portali $Projectname, które używają TLS/SSL, komunikacja między klientem a serwerem jest szyfrowana za pomocą protokołu TLS/SSL. Biorąc pod uwagę niedawno ujawnione w mediach fakty dotyczące powszechnego, globalnego nadzoru i obchodzenia szyfrowania przez NSA i GCHQ, uzasadnione jest założenie, że komunikacja chroniona przez HTTPS może być zagrożona na różne sposoby. W konsekwencji prywatna komunikacja jest szyfrowana na wyższym poziomie przed wysłaniem na zewnątrz.
|
||||
|
||||
[h4]Konfiguracja kanałów[/h4]
|
||||
Podczas tworzenia kanału wybierana jest rola, która stosuje szereg wstępnie skonfigurowanych ustawień zabezpieczeń i prywatności. Są one wybierane z uwzględnieniem najlepszych praktyk, aby zachować prywatność na żądanym poziomie.
|
||||
@@ -143,25 +135,25 @@ Fora to zazwyczaj kanały, w których może uczestniczyć wielu autorów. Obecni
|
||||
Fora mogą być tworzone przez każdego i używane w dowolnym celu. Katalog zawiera opcję wyszukiwania forów publicznych. Fora prywatne mogą być publikowane tylko dla członków i często tylko przez nich widoczne.
|
||||
|
||||
[h4]Klonowanie tożsamości[/h4]
|
||||
Kanały platformy $Projectname nazywane są [i]tożsamościami nomadycznymi[/i], ponieważ tożsamość członka (jego profil i związany z nim kanał) nie jest powiązana z węzłem, w którym tożsamość została pierwotnie utworzona. Na przykład, kiedy tworzysz konto na Facebooku lub Gmailu, jest ono ściśle powiązane z tymi usługami - mie możesz używać tych usług poza Facebook.com czy Gmail.com. Z drugiej strony załóżmy, że masz konto na serwisie Hubzillahub.com i w ramach tego konta utworzyłeś kanał o nazwie [code]jacek@Hubzillahub.com[/code]. Możesz sklonować go do innego węzła Hubzilla, wybierając tę samą lub inną nazwę, np. [code]blogJacka@SomeHubzillahub.info[/code].
|
||||
Kanały platformy $Projectname nazywane są [i]tożsamościami nomadycznymi[/i], ponieważ tożsamość członka (jego profil i związany z nim kanał) nie jest powiązana z portalem, w którym tożsamość została pierwotnie utworzona. Na przykład, kiedy tworzysz konto na Facebooku lub Gmailu, jest ono ściśle powiązane z tymi usługami - mie możesz używać tych usług poza Facebook.com czy Gmail.com. Z drugiej strony załóżmy, że masz konto na serwisie Hubzillahub.com i w ramach tego konta utworzyłeś kanał o nazwie [code]jacek@Hubzillahub.com[/code]. Możesz sklonować go do innego portalu Hubzilla, wybierając tę samą lub inną nazwę, np. [code]blogJacka@SomeHubzillahub.info[/code].
|
||||
|
||||
Z drugiej strony załóżmy, że utworzyłeś tożsamość $Projectname o nazwie [code]tina@$Projectnamehub.com[/code]. Możesz sklonować ją do innego węzła $Projectname, wybierając tę samą lub inną nazwę, np. [code]liveForever@Some$ProjectnameHub.info[/code].
|
||||
Z drugiej strony załóżmy, że utworzyłeś tożsamość $Projectname o nazwie [code]tina@$Projectnamehub.com[/code]. Możesz sklonować ją do innego portalu $Projectname, wybierając tę samą lub inną nazwę, np. [code]liveForever@Some$ProjectnameHub.info[/code].
|
||||
|
||||
Oba kanały są teraz zsynchronizowane, co oznacza, że wszystkie Twoje kontakty i preferencje zostaną zduplikowane na klonie. Nie ma znaczenia, czy wyślesz wpis z pierwotnego centrum, czy z nowego. Wpisy będą dublowane na obu kontach.
|
||||
|
||||
To dość rewolucyjna funkcja, jeśli weźmiemy pod uwagę kilka scenariuszy:
|
||||
|
||||
- Co się stanie, jeśli węzeł, na którym oparta jest tożsamość, nagle przestanie działać? Bez sklonowania tożsamości członek tego węzła nie będzie mógł się komunikować, dopóki węzeł nie wróci do trybu online (bez wątpienia wielu z Was widziało i przeklęło "Fail Whale" na Twitterze). Dzięki klonowaniu wystarczy zalogować się na sklonowane konto, a życie toczy się normalnie.
|
||||
- Co się stanie, jeśli portal, na którym oparta jest tożsamość, nagle przestanie działać? Bez sklonowania tożsamości członek tego portalu nie będzie mógł się komunikować, dopóki portal nie wróci do trybu online (bez wątpienia wielu z Was widziało i przeklęło "Fail Whale" na Twitterze). Dzięki klonowaniu wystarczy zalogować się na sklonowane konto, a życie toczy się normalnie.
|
||||
|
||||
- Administrator twojego węzła nie może już sobie pozwolić na opłacanie swojego bezpłatnego i publicznego węzła $Projectname. Zapowiada, że węzeł zostanie zamknięty za dwa tygodnie. Dzięki temu masz wystarczająco dużo czasu na sklonowanie swojej tożsamośc i zachowanie relacji, znajomych i treści z zamykanego serwisu $Projectname.
|
||||
- Administrator twojego portalu nie może już sobie pozwolić na opłacanie swojego bezpłatnego i publicznego portalu $Projectname. Zapowiada, że portal zostanie zamknięty za dwa tygodnie. Dzięki temu masz wystarczająco dużo czasu na sklonowanie swojej tożsamośc i zachowanie relacji, znajomych i treści z zamykanego serwisu $Projectname.
|
||||
|
||||
- A jeśli Twoja tożsamość podlega rządowej cenzurze? Twój dostawca węzła może zostać zmuszony do usunięcia Twojego konta wraz z wszelkimi tożsamościami i powiązanymi danymi. Dzięki klonowaniu, $Projectname stawia opór cenzurze. Możesz mieć setki klonów, jeśli chcesz, wszystkie nazwane inaczej i istniejące w wielu różnych węzłach, rozrzuconych po Internecie.
|
||||
- A jeśli Twoja tożsamość podlega rządowej cenzurze? Operator Twojego portalu może zostać zmuszony do usunięcia Twojego konta wraz z wszelkimi tożsamościami i powiązanymi danymi. Dzięki klonowaniu, $Projectname stawia opór cenzurze. Możesz mieć setki klonów, jeśli chcesz, wszystkie nazwane inaczej i istniejące w wielu różnych portalach, rozrzuconych po Internecie.
|
||||
|
||||
$Projectname oferuje interesujące nowe możliwości prywatności. Więcej informacji można znaleźć na stronie "Najlepsze praktyki w komunikacji prywatnej".
|
||||
Obowiązują pewne zastrzeżenia. Aby uzyskać pełne wyjaśnienie klonowania tożsamości, przeczytaj stronę "JAK SKLONOWAĆ SWOJĄ TOŻSAMOŚĆ".
|
||||
|
||||
[h4]Wiele profili[/h4]
|
||||
Można utworzyć dowolną liczbę profili zawierających różne informacje, które mogą być widoczne dla niektórych Twoich kontaktów i znajomych. Profil "domyślny" może być widoczny dla każdego i może zawierać ograniczone informacje, a więcej informacji jest dostępnych dla wybranych grup lub osób. Oznacza to, że profil (i zawartość witryny), który widzą Twoi znajomi pijący piwo, może być inny niż to, co widzą Twoi współpracownicy, a także zupełnie inny niż to, co jest widoczne dla ogółu społeczeństwa.
|
||||
Można utworzyć dowolną liczbę profili zawierających różne informacje, które mogą być widoczne dla niektórych Twoich kontaktów i znajomych. Profil "domyślny" może być widoczny dla każdego i zawierać tylko ograniczone informacje o Tobie. Natomiast dodatkowe profile, dostępne dla wybranych grup lub osób, mogą juz zawierać dodatkowe informacje. Oznacza to, że profil (i przypisane mu treści), który widzą Twoi znajomi pijący piwo, może być inny niż to, co widzą Twoi współpracownicy, a także zupełnie inny niż to, co jest widoczne dla ogółu internautów.
|
||||
|
||||
[h4]Kopia zapasowa konta[/h4]
|
||||
|
||||
@@ -171,7 +163,7 @@ $Projectname oferuje prosty sposób wykonywania kopii zapasowej konta za jednym
|
||||
Konta można natychmiast usunąć, klikając link. Otóż to. Wszystkie powiązane treści są następnie usuwane z sieci (w tym wpisy i wszelkie inne treści utworzone przez usunięty profil). W zależności od liczby posiadanych połączeń proces usuwania zdalnej zawartości może zająć trochę czasu, ale zaplanowany jest tak szybko, jak to możliwe.
|
||||
|
||||
[h4]Usuwanie treści[/h4]
|
||||
Wszelkie treści utworzone w Hubzilli pozostają pod kontrolą członka (lub kanału), który je pierwotnie utworzył. W dowolnym momencie członek może usunąć wiadomość lub zakres wiadomości. Proces usuwania zapewnia, że treść zostanie usunięta, niezależnie od tego, czy została opublikowana w głównym (macierzystym) węźle kanału, czy w innym węźle, gdzie kanał został zdalnie uwierzytelniony za pośrednictwem Zot (protokół komunikacji i uwierzytelniania $Projectname).
|
||||
Wszelkie treści utworzone w Hubzilli pozostają pod kontrolą członka (lub kanału), który je pierwotnie utworzył. W dowolnym momencie członek może usunąć wiadomość lub zakres wiadomości. Proces usuwania zapewnia, że treść zostanie usunięta, niezależnie od tego, czy została opublikowana w głównym (macierzystym) portalu kanału, czy w innym portalu, gdzie kanał został zdalnie uwierzytelniony za pośrednictwem Zot (protokół komunikacji i uwierzytelniania $Projectname).
|
||||
|
||||
[h4]Media[/h4]
|
||||
Podobnie jak każdy inny nowoczesny system blogowania, sieć społecznościowa lub usługa mikroblogowania, $Projectname obsługuje przesyłanie plików, osadzanie filmów, łączenie stron internetowych.
|
||||
|
||||
@@ -26,25 +26,25 @@ Głosowanie społeczności nie zawsze zapewnia Powszechnie akceptowany wynik i m
|
||||
|
||||
Q: Kto może widzieć moją treść?
|
||||
|
||||
A: Domyślnie KAŻDY w Internecie, chyba że ograniczysz do niej dostęp. $Projectname pozwala wybrać żądany poziom prywatności. Treści podlegające ograniczeniom NIE będą widoczne dla "sieci szpiegowskich" i reklamodawców. Będą chroniona przed podsłuchem przez osoby wpisronne - najlepiej jak potrafimy. Administratorzy centrów z wystarczającymi umiejętnościami i cierpliwością MOGĄ być w stanie podsłuchiwać niektóre prywatne wiadomości, ale muszą dołożyć starań, aby to zrobić. W $Projectname istnieją tryby prywatności, które są nawet odporne na podsłuchiwanie przez wykwalifikowanych i zdeterminowanych administratorów węzłów.
|
||||
A: Domyślnie KAŻDY w Internecie, chyba że ograniczysz do niej dostęp. $Projectname pozwala wybrać żądany poziom prywatności. Treści podlegające ograniczeniom NIE będą widoczne dla "sieci szpiegowskich" i reklamodawców. Będą chroniona przed podsłuchem przez osoby postronne - najlepiej jak potrafimy. Administratorzy portali z wystarczającymi umiejętnościami i cierpliwością MOGĄ być w stanie podsłuchiwać niektóre prywatne wiadomości, ale muszą dołożyć starań, aby to zrobić. W $Projectname istnieją tryby prywatności, które są nawet odporne na podsłuchiwanie przez wykwalifikowanych i zdeterminowanych administratorów portali.
|
||||
|
||||
Q: Czy moje treści mogą zostać ocenzurowane?
|
||||
|
||||
A: Z założenie, $Projectname (jako sieć) NIE MOŻE cenzurować twoich treści. Administratorzy serwerów i węzłów podlegają lokalnemu prawodawstwu i MOGĄ usunąć budzące zastrzeżenia treści ze swojego serwisu (węzła). Każdy może zostać administratorem węzła, w tym Ty. Dlatego publikuj treści, które w innym przypadku mogłyby zostać ocenzurowane. Nadal MOŻESZ podlegać lokalnemu prawodawstwu.
|
||||
A: Z założenie, $Projectname (jako sieć) NIE MOŻE cenzurować twoich treści. Administratorzy serwerów i portali podlegają lokalnemu prawodawstwu i MOGĄ usunąć budzące zastrzeżenia treści ze swojego portalu. Każdy może zostać administratorem portalu, w tym Ty. Dlatego publikuj treści, które w innym przypadku mogłyby zostać ocenzurowane. Nadal MOŻESZ podlegać lokalnemu prawodawstwu.
|
||||
|
||||
[h5]Definicje[/h5]
|
||||
|
||||
**$Projectname**
|
||||
|
||||
Inaczej nazywana "siecią", $Projectname jest zbiorem pojedynczych komputerów (serwerów) (czyli **węzłów**. ang. *hubs*), które łączą się razem, tworząc większą sieć kooperacyjną.
|
||||
Inaczej nazywane "platformą $Projectname", jest oprogramowaniem do budowania portali internetowych zdolnych do tworzenia zdecenralizowanych sieci społecznościowych. Poszczególne portale są węzłami tej sieci (ang. *hubs*) i mogą łączyć się z innymi federacyjnymi sieciami społecznościowymi, tworząc razem globalną sieć społecznosciową, zwaną "Fediverse".
|
||||
|
||||
**węzeł** (ang. *hub*)
|
||||
**portal, hub** (ang. *hub*)
|
||||
|
||||
Pojedynczy komputer lub serwer podłączony do $Projectname. Jest on dostarczany przez **administratora węzła** i może być publiczny lub prywatny, płatnu lub bezpłatny.
|
||||
Implementacja $Projectname na serwerze internetowym. Stanowi serwis internetowy sieci WWW. Jest on dostarczany przez **operatora portalu** i może być publiczny lub prywatny, płatnu lub bezpłatny.
|
||||
|
||||
*administrator węzła**
|
||||
*administrator portalu**
|
||||
|
||||
Operator systemu pojedynczego węzła.
|
||||
Osoba wyznaczona przez operator portalu do zarządzania portalem.
|
||||
|
||||
[h5]Polityki[/h5]
|
||||
|
||||
@@ -54,7 +54,7 @@ Wszelkie informacje lub cokolwiek zamieszczone przez Ciebie w $Projectname MOŻE
|
||||
|
||||
Twoje zdjęcie profilowe, nazwa Twojego kanału i lokalizacja (adres URL lub adres sieciowy) Twojego kanału są widoczne dla każdego w internecie, a kontrola prywatności nie wpływa na wyświetlanie tych elementów.
|
||||
|
||||
MOŻESZ dodatkowo podać inne informacje profilowe. Wszelkie informacje, które podajesz w swoim „domyślnym” lub **publicznym profilu** MOGĄ zostać przesłane do innych węzłów w $Projectname i dodatkowo MOGĄ zostać wyświetlone w katalogu kanałów. Możesz ograniczyć wyświetlanie tych informacji profilowych. Może być ograniczone tylko do członków twojego węzła lub tylko połączeń (znajomych) lub innych ograniczonych grup widzów, zgodnie z twoim życzeniem. Jeśli chcesz, aby Twój profil był ograniczony, musisz ustawić odpowiednie ustawienia prywatności lub po prostu NIE podawać dodatkowych informacji.
|
||||
MOŻESZ dodatkowo podać inne informacje profilowe. Wszelkie informacje, które podajesz w swoim „domyślnym” lub **publicznym profilu** MOGĄ zostać przesłane do innych portali w $Projectname i dodatkowo MOGĄ zostać wyświetlone w katalogu kanałów. Możesz ograniczyć wyświetlanie tych informacji profilowych. Może być ograniczone tylko do członków twojego portalu lub tylko połączeń (znajomych) lub innych ograniczonych grup widzów, zgodnie z twoim życzeniem. Jeśli chcesz, aby Twój profil był ograniczony, musisz ustawić odpowiednie ustawienia prywatności lub po prostu NIE podawać dodatkowych informacji.
|
||||
|
||||
**Treść**
|
||||
|
||||
@@ -68,27 +68,27 @@ Komentarze do wpisów stworzonych przez innych oraz wpisy oznaczone jako wpisy n
|
||||
|
||||
**Informacja prywatna**
|
||||
|
||||
Programiści $Projectname zapewnią, że każda dostarczona przez Ciebie zawartość oznaczona jako PRYWATNA będzie chroniona przed podsłuchem - najlepiej jak potrafią. Zawartość kanału prywatnego MOŻE być widoczna w bazie danych każdego zaangażowanego administratora węzła, ale prywatne wiadomości są ukrywane w bazie danych. To ostatnie oznacza, że jest to bardzo trudne, ale NIE niemożliwe, aby te treści były widoczne dla administratora węzła. Treść kanału prywatnego i wiadomości prywatne są również usuwane z powiadomień e-mail. Pełne szyfrowanie jest oferowane jako funkcja opcjonalna i NIE MOŻE być widoczne, nawet dla zdeterminowanego administratora.
|
||||
Programiści $Projectname zapewnią, że każda dostarczona przez Ciebie zawartość oznaczona jako PRYWATNA będzie chroniona przed podsłuchem - najlepiej jak potrafią. Zawartość kanału prywatnego MOŻE być widoczna w bazie danych każdego zaangażowanego administratora portalu, ale prywatne wiadomości są ukrywane w bazie danych. To ostatnie oznacza, że jest to bardzo trudne, ale NIE niemożliwe, aby te treści były widoczne dla administratora portalu. Treść kanału prywatnego i wiadomości prywatne są również usuwane z powiadomień e-mail. Pełne szyfrowanie jest oferowane jako funkcja opcjonalna i NIE MOŻE być widoczne, nawet dla zdeterminowanego administratora.
|
||||
|
||||
[h5]Prywatność tożsamości[/h5]
|
||||
|
||||
Prywatność dla Twojej tożsamości to kolejny aspekt. Ponieważ masz zdecentralizowaną tożsamość w $Projectname, Twoja prywatność wykracza poza domowy węzeł. Jeśli chcesz mieć pełną kontrolę nad swoją prywatnością i bezpieczeństwem, powinieneś uruchomić własny węzeł na dedykowanym serwerze. Dla wielu osób jest to skomplikowane ale może poszerzyć ich możliwości techniczne. Wymieńmy więc kilka środków ostrożności, które możesz podjąć, aby zapewnić sobie jak największą prywatność.
|
||||
Prywatność dla Twojej tożsamości to kolejny aspekt. Ponieważ masz zdecentralizowaną tożsamość w $Projectname, Twoja prywatność wykracza poza Twój portal. Jeśli chcesz mieć pełną kontrolę nad swoją prywatnością i bezpieczeństwem, powinieneś uruchomić własny portal na dedykowanym serwerze. Dla wielu osób jest to skomplikowane ale może poszerzyć ich możliwości techniczne. Wymieńmy więc kilka środków ostrożności, które możesz podjąć, aby zapewnić sobie jak największą prywatność.
|
||||
|
||||
Zdecentralizowana tożsamość ma wiele zalet i daje wiele interesujących funkcji, ale powinieneś być świadomy faktu, że Twoja tożsamość jest znana innym węzłom w sieci $Projectname. Jedną z tych zalet jest to, że inne kanały mogą udostępniać dostosowane treści i umożliwiać oglądanie prywatnych rzeczy (takich jak prywatne zdjęcia, które inni chcą Ci udostępnić). Z tego powodu te kanały muszą wiedzieć, kim jesteś. Ale rozumiemy, że czasami te inne kanały wiedzą od Ciebie więcej, niż byś sobie tego życzył. Na przykład wtyczka Visage, która może poinformować właściciela kanału o ostatniej wizycie w jego profilu. Możesz łatwo zrezygnować z tego niskiego poziomu i uważamy, że jest to nieszkodliwe śledzenie.
|
||||
Zdecentralizowana tożsamość ma wiele zalet i daje wiele interesujących funkcji, ale powinieneś być świadomy faktu, że Twoja tożsamość jest znana innym portalom w sieci $Projectname. Jedną z tych zalet jest to, że inne kanały mogą udostępniać dostosowane treści i umożliwiać oglądanie prywatnych rzeczy (takich jak prywatne zdjęcia, które inni chcą Ci udostępnić). Z tego powodu te kanały muszą wiedzieć, kim jesteś. Ale rozumiemy, że czasami te inne kanały wiedzą od Ciebie więcej, niż byś sobie tego życzył. Na przykład wtyczka Visage, która może poinformować właściciela kanału o ostatniej wizycie w jego profilu. Możesz łatwo zrezygnować z tego niskiego poziomu i uważamy, że jest to nieszkodliwe śledzenie.
|
||||
|
||||
* Możesz włączyć [url=http://donottrack.us/]Do Not Track (DNT)[/url] w swojej przeglądarce internetowej. Szanujemy tą nową propozycję polityki prywatności. Wszystkie nowoczesne przeglądarki obsługują DNT. Znajdziesz to w ustawieniach prywatności swojej przeglądarki lub możesz zapoznać się z instrukcją przeglądarki internetowej. Nie wpłynie to na funkcjonalność $Projectname. To ustawienie jest prawdopodobnie wystarczające dla większości ludzi.
|
||||
|
||||
* Możesz [url=[baseurl]/settings]wyłączyć publikację[/url] swojego kanału w naszym katalogu kanałów. Jeśli chcesz, aby ludzie mogli znaleźć Twój kanał, podaj im adres swojego kanału. Uważamy, że jest to dobra wskazówka, że wolisz dodatkową prywatność i automatycznie włączasz opcję "Nie śledź", jeśli tak jest.
|
||||
|
||||
* Możesz mieć zablokowany węzeł. Oznacza to, że wszystkie kanały i treści w tym wężle nie są publiczne ani widoczne dla świata zewnętrznego. To jest coś, co może zrobić tylko administrator węzła. Szanujemy to również i automatycznie włączamy opcję "Nie śledź:, jeśli jest ustawiona.
|
||||
* Możesz mieć zablokowany portal. Oznacza to, że wszystkie kanały i treści na tym portalu nie są publiczne ani widoczne dla świata zewnętrznego. To jest coś, co może zrobić tylko administrator portalu. Szanujemy to również i automatycznie włączamy opcję "Nie śledź:, jeśli jest ustawiona.
|
||||
|
||||
[h5]Cenzura[/h5]
|
||||
|
||||
$Projectname to globalna sieć obejmująca wszystkie religie i kultury. Nie oznacza to, że każdy członek sieci czuje się tak samo jak Ty w spornych kwestiach, a niektórzy ludzie mogą MOCNO sprzeciwić się publikowanym przez Ciebie treściom. Ogólnie rzecz biorąc, jeśli chcesz opublikować coś, o czym wiesz, że nie jest powszechnie akceptowane, najlepszym rozwiązaniem jest ograniczenie odbiorców za pomocą kontroli prywatności do małego kręgu znajomych.
|
||||
|
||||
$Projectname jako dostawca sieci nie może cenzurować zawartości. Jednak administratorzy węzłów MOGĄ cenzurować wszelkie treści, które pojawiają się w ich węźle, aby zachować zgodność z lokalnym prawem, a nawet osobistym osądem. Ich decyzja jest ostateczna. Jeśli masz problemy z jakimkolwiek administratorem węzła, możesz przenieść swoje konto i wpisy do innej witryny, która jest bardziej zgodna z Twoimi oczekiwaniami. Sprawdzaj (okresowo) [Warunki świadczenia usług](help/TermsOfService) swojego węzła, aby poznać wszelkie zasady lub wytyczne. Jeśli Twoje treści składają się z materiałów, które są nielegalne lub mogą powodować problemy, MOCNO zachęcamy do hostowania własnych (zostań administratorem własnego węzła). Mimo to. możesz stwierdzić, że Twoje treści są zablokowane w niektórych węzłach, ale $Projectname jako sieć nie może wogóle zablokować ich publikowania.
|
||||
$Projectname jako dostawca sieci nie może cenzurować zawartości. Jednak administratorzy portali MOGĄ cenzurować wszelkie treści, które pojawiają się w ich portalu, aby zachować zgodność z lokalnym prawem, a nawet osobistym osądem. Ich decyzja jest ostateczna. Jeśli masz problemy z jakimkolwiek administratorem portali, możesz przenieść swoje konto i wpisy do innej witryny, która jest bardziej zgodna z Twoimi oczekiwaniami. Sprawdzaj (okresowo) [Warunki świadczenia usług](help/TermsOfService) swojego portalu, aby poznać wszelkie zasady lub wytyczne. Jeśli Twoje treści składają się z materiałów, które są nielegalne lub mogą powodować problemy, MOCNO zachęcamy do hostowania własnych (zostań administratorem własnego portalu). Mimo to. możesz stwierdzić, że Twoje treści są zablokowane w niektórych portalach, ale $Projectname jako sieć nie może w ogóle zablokować ich publikowania.
|
||||
|
||||
$Projectname ZALECA, aby administratorzy węzłów zapewnili okres karencji wynoszący 1-2 dni między ostrzeżeniem właściciela konta o treści, którą należy usunąć, a fizycznym usunięciem lub wyłączeniem konta. Dzięki temu właściciel treści będzie mógł wyeksportować metadane swojego kanału i zaimportować je do innej witryny. W rzadkich przypadkach treść może mieć taki charakter, że uzasadnia natychmiastowe zamknięcie konta. To jest decyzja właściciela węzła, a nie decyzja $Projectname.
|
||||
W $Projectname ZALECA się, aby administratorzy portali zapewnili okres karencji wynoszący 1-2 dni między ostrzeżeniem właściciela konta o treści, którą należy usunąć, a fizycznym usunięciem lub wyłączeniem konta. Dzięki temu właściciel treści będzie mógł wyeksportować metadane swojego kanału i zaimportować je do innej witryny. W rzadkich przypadkach treść może mieć taki charakter, że uzasadnia natychmiastowe zamknięcie konta. To jest decyzja właściciela portalu, a nie decyzja $Projectname.
|
||||
|
||||
Jeśli zazwyczaj i regularnie publikujesz treści dla dorosłych lub obraźliwe, MOCNO zachęcamy do oznaczenia swojego konta jako „NSFW” (Not Safe For Work). Zapobiegnie to wyświetlaniu Twojego zdjęcia profilowego w katalogu, z wyjątkiem przeglądających, którzy zdecydowali się wyłączyć „tryb bezpieczny”. Jeśli administratorzy katalogu uznają Twoje zdjęcie profilowe za nieobyczajne lub obraźliwe, administrator katalogu MOŻE oznaczyć Twoje zdjęcie profilowe jako NSFW. Obecnie nie ma oficjalnego mechanizmu do zakwestionowania lub cofnięcia tej decyzji, dlatego NALEŻY oznaczyć własne konto jako NSFW, jeśli może być nieodpowiednie dla ogółu odbiorców.
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
[size=large][b]Konta, profile i kanały[/b][/size]
|
||||
|
||||
Po zarejestrowaniu [i]konta[/i], trzeba również utworzyć [i]profil[/i] i [i]kanał[/i].
|
||||
Po zarejestrowaniu [i]konta[/i], trzeba również utworzyć [i]profil[/i] i [i]kanał[/i]. Na wielu portalach $Projectname Twój kanał jest zakładany automatycznie, ale to i tak wymaga Twojej interwencji. Profil będzie wymagał uzupełnienia lub poprawienia danych, podobnie jak automatycznie założony kanał.
|
||||
|
||||
[b]Konto[/b]
|
||||
W serwisie &Projectname masz [i]jedno[/i] konto. Składa się z Twojego konta e-mail i hasła. Za pomocą swojego konta uzyskujesz dostęp do swojego profilu i kanału.
|
||||
Na portalu $Projectname masz [i]jedno[/i] konto. Składa się z Twojego adresu e-mail i hasła. Za pomocą swojego konta uzyskujesz dostęp do swojego profilu i kanału.
|
||||
|
||||
[i]Pomyśl o swoim koncie jak o sposobie uwierzytelniania w jednym serwisie $Projectname. Pozwala to na takie rzeczy, jak tworzenie profili i kanałów, za pomocą których możesz łączyć się z innymi osobami.[/i]
|
||||
[i]Pomyśl o swoim koncie jak o sposobie uwierzytelniania na którymkolwiek portalu $Projectname. Pozwala ono na takie rzeczy, jak tworzenie profili i kanałów, za pomocą których możesz łączyć się z innymi osobami.[/i]
|
||||
|
||||
[b]Profil[/b]
|
||||
Z pewnością masz już doświadczenie w rejestrowaniu się w jakichś usługach internetowych, takich jak fora lub społeczności internetowe. We wszystkich przypadkach trzeba było podać pewne informacje o sobie, takie jak data urodzenia, kraj, wiek i upodobania. [observer=1]Jeśli chcesz, możesz zobaczyć swój profil tutaj: [baseurl]/profile/[observer.webname] i edytować go, klikając ikonę ołówka obok swojego awatara.[/observer]
|
||||
@@ -13,7 +13,7 @@ W przeciwieństwie do innych usług, $Projectname oferuje Ci możliwość tworze
|
||||
[i]Potraktuj swój profil jako podstawowe informacje o sobie, które przekazujesz innym osobom.[/i]
|
||||
|
||||
[b]Kanał[/b]
|
||||
Podczas rejestracji tworzysz swój pierwszy [i]kanał[/i]. Podobnie jak w przypadku profili, możesz mieć kilka kanałów. Na początku może to być nieco zagmatwane, ale wyjaśnijmy to. Masz już jeden kanał. Możesz używać go dla publicznie, aby komunikować się z ludźmi w codziennym życiu. Ale być może jesteś zapalonym czytelnikiem książek i wielu ludzi się tym nudzi. Otwierasz więc [i]drugi kanał[/i] tylko dla miłośników książek, na którym wszyscy mogą rozmawiać o książkach tyle, ile chcesz. Oczywiście jest to nowy strumień wpisów, z nowym profilem (... lub nowymi profilami ...) i zupełnie innymi kontaktami. Niektóre połączenia mogą istnieć w obu kanałach, ale będą takie, które dotyczą tylko jednego z nich. Ty sam po prostu przełączasz się między nimi, tak jak w prawdziwym życiu, kiedy rozmawiasz z ludźmi, których spotykasz na ulicy lub z osobami, które spotykasz specjalnie, aby porozmawiać o książkach. Możesz nawet połączyć się ze sobą lub lepiej: z innym kanałem. :)
|
||||
Podczas rejestracji tworzysz swój pierwszy [i]kanał[/i]. Zostaje on przyporządkowany do domyślnego profilu. Podobnie jak w przypadku profili, możesz mieć kilka kanałów (jeśli parametry konta to dopuszczają). Na początku może to być nieco zagmatwane, ale wyjaśnijmy to. Masz już jeden kanał. Możesz używać go publicznie, aby komunikować się z osobami w codziennym życiu. Ale być może, jesteś zapalonym czytelnikiem książek i wielu ludzi się tym nudzi. Otwierasz więc [i]drugi kanał[/i] tylko dla miłośników książek, na którym wszyscy mogą rozmawiać o książkach tyle, ile chcesz. Oczywiście jest to nowy strumień wpisów, z nowym profilem (... lub nowymi profilami ...) i zupełnie innymi kontaktami. Niektóre połączenia mogą istnieć w obu kanałach, ale będą takie, które dotyczą tylko jednego z nich. Ty sam po prostu przełączasz się między nimi, tak jak w prawdziwym życiu, kiedy rozmawiasz z ludźmi, których spotykasz na ulicy lub z osobami, które spotykasz specjalnie, aby porozmawiać o książkach. Możesz nawet połączyć się ze sobą lub lepiej: z innym kanałem. :)
|
||||
[i]Pomyśl o kanale jako o różnych przestrzeniach poświęconych różnym tematom, w których spotykasz się z różnymi ludźmi.[/i]
|
||||
|
||||
#include doc/macros/pl/main_footer.bb;
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
[*] calc - kalkulator naukowy
|
||||
[*] chess - interaktywne gry w szachy z uwzględnieniem tożsamości międzydomenowej
|
||||
[*] chords - generowanie wykresów palcowania i alternatyw dla każdego znanego akordu gitarowego
|
||||
[*] custom_home - ustawianie własnej strony jako strony początkowej węzła
|
||||
[*] custom_home - ustawianie własnej strony jako strony początkowej portalu
|
||||
[*] diaspora - emulator protokołu Diaspora
|
||||
[*] dirstats - wyświetlanie interesujących statystyk generowanych przez serwer katalogowy
|
||||
[*] docs - alternatywne strony dokumentacji
|
||||
@@ -18,7 +18,7 @@
|
||||
[*] dreamhost - zapewnia bardziej niezawodną usługę na hostingu współdzielonym Dreamhost
|
||||
[*] dwpost - krzyżowe wpisy do Dreamwidth
|
||||
[*] emojione - zezwala na uzywanie emojis jako emotikonów
|
||||
[*] extcron - stosowanie zewnętrznej usługi cron do uruchamiania zaplanowanych zadań węzła
|
||||
[*] extcron - stosowanie zewnętrznej usługi cron do uruchamiania zaplanowanych zadań portalu
|
||||
[*] firefox - dostarcza link do zainstalowania API Sharing Firefoxa
|
||||
[*] flattrwidget - dostarcza przyciski "Flattr Us"
|
||||
[*] flip - tworzenie odwróconego tekstu
|
||||
@@ -28,7 +28,7 @@
|
||||
[*] gnusoc - protokół GNU-Social (OStatus). W tworzeniu.
|
||||
[*] hexit - narzędzie do konwersji szesnastkowej
|
||||
[*] hilite - umożliwia podświetlanie bloków kodu, specyficzne dla języka programowania, zawartych we wpisach
|
||||
[*] hubwall - wysyłanie wiadomosci e-mail administratora na wszystkie konta w węźle
|
||||
[*] hubwall - wysyłanie wiadomosci e-mail administratora na wszystkie konta w portalu
|
||||
[*] ijpost - krzyżówe wpisy do Insanejournal
|
||||
[*] irc - połączenie z czatami IRC
|
||||
[*] jappixmini - czat XMPP
|
||||
@@ -81,7 +81,7 @@
|
||||
[*] statusnet - wpisy krzyżówe do GNU-social i StatusNet [zrl=[baseurl]/help/addons_gnusocial]Posting To Gnu Social[/zrl]
|
||||
[*] std_embeds - umożłiwia niefiltrowane osadzanie dla popularnych dostawców strumieni, takich jak youtube, vimeo i soundcloud
|
||||
[*] superblock - bardzo zalecane - całkowite blokowanie obraźliwuch kanałów w swoim strumieniu
|
||||
[*] testdrive - zmienia węzęł w witrynę testową z kontami, które wygasają po okresie próbnym
|
||||
[*] testdrive - zmienia portal w witrynę testową z kontami, które wygasają po okresie próbnym
|
||||
[*] tictac - 3D tic-tac-toe
|
||||
[*] torch - aplikacja podświetlania (flashlight)
|
||||
[*] tour - prezentacja funkcji dla nowych członków
|
||||
|
||||
@@ -20,7 +20,7 @@ POWINNO się używać SSL. Jeśli używasz SSL, MUSISZ użyć certyfikatu uznawa
|
||||
|
||||
Przetestuj swój certyfikat przed instalacją. Narzędzie internetowe do testowania certyfikatu jest dostępne pod adresem http://www.digicert.com/help/. Odwiedzając witrynę po raz pierwszy, użyj adresu URL SSL (https://), jeśli protokół SSL jest dostępny. Pozwoli to uniknąć późniejszych problemów. Procedura instalacji nie pozwoli na użycie certyfikatu, który nie jest zaufany dla przeglądarki.
|
||||
|
||||
To ograniczenie zostało wprowadzone, ponieważ Twoje publiczne wpisy mogą zawierać odniesienia do obrazów na Twoim węźle. Inni członkowie przeglądający swój strumień na innych węzłach otrzymają w swojej przeglądarce ostrzeżenia, jeśli Twój certyfikat nie jest zaufany. To może zmylić wiele osób, ponieważ jest to zdecentralizowana sieć i otrzymają ostrzeżenie o Twoim węźle podczas przeglądania własnego węzła i mogą pomyśleć, że ich własny węzeł ma problem. Te ostrzeżenia są bardzo techniczne i przerażające dla niektórych osób, z których wielu nie będzie wiedziało, jak postępować i podporządkuje się zaleceniom przeglądarki. Jest to destrukcyjne dla społeczności. Zdajemy sobie sprawę z problemów związanych z obecną infrastrukturą certyfikatów i zgadzamy się, że istnieje wiele problemów, ale to nie zmienia wymagania - szyfrowanie połączeń HTTP jest konieczne.
|
||||
To ograniczenie zostało wprowadzone, ponieważ Twoje publiczne wpisy mogą zawierać odniesienia do obrazów na Twoim portalu. Inni członkowie przeglądający swój strumień na innych portalach otrzymają w swojej przeglądarce ostrzeżenia, jeśli Twój certyfikat nie jest zaufany. To może zmylić wiele osób, ponieważ jest to zdecentralizowana sieć i otrzymają ostrzeżenie o Twoim portalu podczas przeglądania własnego portalu i mogą pomyśleć, że ich własny portal ma problem. Te ostrzeżenia są bardzo techniczne i przerażające dla niektórych osób, z których wielu nie będzie wiedziało, jak postępować i podporządkuje się zaleceniom przeglądarki. Jest to destrukcyjne dla społeczności. Zdajemy sobie sprawę z problemów związanych z obecną infrastrukturą certyfikatów i zgadzamy się, że istnieje wiele problemów, ale to nie zmienia wymagania - szyfrowanie połączeń HTTP jest konieczne.
|
||||
|
||||
Bezpłatne certyfikaty zgodne z przeglądarkami są dostępne od dostawców, takich jak StartSSL czy LetsEncrypt.
|
||||
|
||||
@@ -30,7 +30,7 @@ Jeśli używasz LetsEncrypt do dostarczania certyfikatów i tworzenia pliku pod
|
||||
|
||||
### Wdrożenie
|
||||
|
||||
Nowy węzeł można wdrożyć na kilka sposobów:
|
||||
Nowy portal można wdrożyć na kilka sposobów:
|
||||
|
||||
* ręczna inastalaja na istniejącym serwerze;
|
||||
* automatyczna instalacja na istniejącym serwerze przy użyciu skryptu instalacyjnego;
|
||||
@@ -313,7 +313,7 @@ Na stronie katalogu kanałów może pojawiać się chmura słów kluczowych. Je
|
||||
|
||||
util/config system disable_directory_keywords 1
|
||||
|
||||
Jeśli twój węzeł pracuje w trybie autonomicznym, ponieważ nie chcesz łączyć się z globalną siecią, możesz zamiast tego ustawić opcję systemową _directory_server_ na wartość pustą:
|
||||
Jeśli twój portal pracuje w trybie autonomicznym, ponieważ nie chcesz łączyć się z globalną siecią, możesz zamiast tego ustawić opcję systemową _directory_server_ na wartość pustą:
|
||||
|
||||
util/config system directory_server ""
|
||||
|
||||
@@ -327,7 +327,7 @@ Istnieje kilka sposobów, w jakie może to się nie powieść i pozostawić syst
|
||||
|
||||
Ze względów bezpieczeństwa w systemie nie ma strony internetowej ani interfejsu, który daje dostęp administratora. Jeśli potrzebujesz poprawić sytuację, w której system nie ma konta administratora, musisz to zrobić edytując tabelę kont w bazie danych. Nie ma innego wyjścia. Aby to zrobić, będziesz musiał zlokalizować wpis w tabeli kont, który należy do żądanego administratora i ustawić _account_roles_ dla tego wpisu na _4096_. Będziesz wtedy mógł uzyskać dostęp do strony administratora z menu profilu twojego systemu lub bezpośrednio na ścieżce _/admin_.
|
||||
|
||||
Węzeł może mieć wielu administratorów i nie ma ograniczeń co do ich liczby. Powtórz powyższą procedurę dla każdego konta, któremu chcesz przyznać uprawnienia administracyjne.
|
||||
Portal może mieć wielu administratorów i nie ma ograniczeń co do ich liczby. Powtórz powyższą procedurę dla każdego konta, któremu chcesz przyznać uprawnienia administracyjne.
|
||||
|
||||
### Rozwiązywanie problemów
|
||||
|
||||
@@ -350,17 +350,17 @@ Na dole dostarczonego pliku *.htconfig.php* znajduje się kilka linii, które, j
|
||||
|
||||
**Trzeci to "dziennik aplikacji"**. Jest to używane przez Hubzillę do zgłaszania tego, co dzieje się w programie i zwykle zapisywane są tu wszelkie trudności lub nieoczekiwane dane, które otrzymaliśmy. Jego nazwę (ścieżkę) trzeba podać na stronie "Administracja - Logi" (/admin/logs), np. *hubzilla.log* wskazuje na plik o tej nazwie zlokalizowany w katalogu głównym Hubzilla. Czasem zgłaszane są tu również komunikaty o stanie "pulsu", aby wskazać, że osiągnęliśmy określony punkt w skrypcie. Jest to dla nas najważniejszy plik dziennika, ponieważ tworzymy go samodzielnie wyłącznie w celu zgłaszania stanu zadań w tle i wszystkiego, co wydaje się dziwne lub nie na miejscu. Te błędy mogą być "śmiertelne", ale też niegroźne i po prostu nieoczekiwane. Jeśli wykonujesz zadanie i występuje problem, daj nam znać, co znajduje się w tym pliku, gdy wystąpił problem. Proszę nie wysyłaj nam 100 milionów zrzutów, bo tylko nas wkurzysz! Tylko kilka odpowiednich wierszy, ab można było wykluczyć kilkaset tysięcy wierszy kodu i skoncentrować się na tym, gdzie zaczyna się pojawiać problem.
|
||||
|
||||
To są dzienniki Twojego serwisu. Zgłaszamy poważne problemy na każdym poziomie dziennika. Gorąco polecam poziom dziennika *DEBUG* dla większości witryn. Dostarcza on trochę dodatkowych informacji i nie tworzy dużych plików dziennika. Kiedy pojawia się problem, który uniemożliwia wszelkie próby śledzenia, możesz wtedy włączyć na krótki czas poziom *DATA*, aby uchwycić wszystkie szczegóły struktur, z którymi mieliśmy do czynienia w tym czasie. Ten poziom dziennika zajmuje dużo miejsca, więc jest zalecany tylko na krótkie okresy lub w przypadku witryn testowych dla programistów.
|
||||
To są dzienniki Twojego serwisu. Zgłaszamy poważne problemy na każdym poziomie dziennika. Gorąco polecamy poziom dziennika *DEBUG* dla większości witryn. Dostarcza on trochę dodatkowych informacji i nie tworzy dużych plików dziennika. Kiedy pojawia się problem, który uniemożliwia wszelkie próby śledzenia, możesz wtedy włączyć na krótki czas poziom *DATA*, aby uchwycić wszystkie szczegóły struktur, z którymi mieliśmy do czynienia w tym czasie. Ten poziom dziennika zajmuje dużo miejsca, więc jest zalecany tylko na krótkie okresy lub w przypadku witryn testowych dla programistów.
|
||||
|
||||
Zalecam skonfigurowanie *logrotate* zarówno dla dziennika php, jak i dziennika aplikacji. Zazwyczaj co tydzień lub dwa zaglądam do *dbfail.out*, naprawiam zgłoszone problemy i zaczynam od nowego pliku. Podobnie jest z plikiem dziennika PHP. Odwołuję się do tego od czasu do czasu, aby sprawdzić, czy jest coś, co wymaga naprawy.
|
||||
Zalecamy skonfigurowanie *logrotate* zarówno dla dziennika php, jak i dziennika aplikacji. Zazwyczaj co tydzień lub dwa zaglądam do *dbfail.out*, naprawiam zgłoszone problemy i zaczynam od nowego pliku. Podobnie jest z plikiem dziennika PHP. Odwołuję się do tego od czasu do czasu, aby sprawdzić, czy jest coś, co wymaga naprawy.
|
||||
|
||||
Jeśli coś pójdzie nie tak i nie jest to błąd krytyczny, patrzę na plik dziennika aplikacji. Często robię to:
|
||||
Jeśli coś pójdzie nie tak i nie jest to błąd krytyczny, warto zajrzeć do pliku dziennika aplikacji. Można zrobić to tak:
|
||||
|
||||
```
|
||||
tail -f logfile.out
|
||||
```
|
||||
|
||||
ponieważ powtarza operację, która ma problemy. Często wstawiam w kodzie dodatkowe instrukcje rejestracji, jeśli nie ma żadnej wskazówki, co się dzieje. Nawet coś tak prostego jak "got here" lub drukuję wartości zmiennej, która może być podejrzana. Ty też możesz to zrobić - wręcz zachęcam Cię do tego. Gdy już znajdziesz to, czego potrzebujesz, możesz wykonać:
|
||||
ponieważ powtarzaja się wpisy dla operacju, która ma problemy. MOzna wstawić w kodzie dodatkowe instrukcje rejestracji, jeśli nie ma żadnej wskazówki, co się dzieje. Nawet coś tak prostego jak "got here" lub wydrukować wartości zmiennej, która może być podejrzana. Zachecamy aby to robić. Gdy już znajdziesz to, czego potrzebujesz, możesz wykonać:
|
||||
|
||||
```
|
||||
git checkout file.php
|
||||
|
||||
@@ -1,17 +1,10 @@
|
||||
### Narzędzia migawek węzła
|
||||
### Narzędzia migawek portalu
|
||||
|
||||
Programiści Hubzilli często muszą przełączać się między gałęziami, które mogą
|
||||
mieć niekompatybilne schematy lub zawartość bazy danych. Poniższe dwa skrypty
|
||||
tworzą i przywracają pełne migawki instancji Hubzilli, w tym zarówno główny
|
||||
katalog sieciowy, jak i stan całej bazy danych. Każdy skrypt wymaga pliku
|
||||
konfiguracyjnego o nazwie *hub-snapshot.conf* znajdującego się w tym samym
|
||||
folderze i zawiera on określone katalogi i szczegóły bazy danych węzłaa.
|
||||
Programiści Hubzilli często muszą przełączać się między gałęziami, które mogą mieć niekompatybilne schematy lub zawartość bazy danych. Poniższe dwa skrypty tworzą i przywracają pełne migawki instancji Hubzilli, w tym zarówno główny katalog sieciowy, jak i stan całej bazy danych. Każdy skrypt wymaga pliku konfiguracyjnego o nazwie *hub-snapshot.conf* znajdującego się w tym samym folderze i zawiera on określone katalogi i szczegóły bazy danych portalu.
|
||||
|
||||
### Konfiguracja
|
||||
|
||||
Format pliku konfiguracyjnego jest bardzo ścisły. Między nazwą zmiennej a
|
||||
wartością nie może być spacji. Zastąp tylko treść w cudzysłowach swoją
|
||||
konfiguracją. Zapisz ten plik jako *hub-snapshot.conf* obok skryptów.
|
||||
Format pliku konfiguracyjnego jest bardzo ścisły. Między nazwą zmiennej a wartością nie może być spacji. Zastąp tylko treść w cudzysłowach swoją konfiguracją. Zapisz ten plik jako *hub-snapshot.conf* obok skryptów.
|
||||
|
||||
# Location of hub root. Typically this is the location of the Hubzilla repo clone.
|
||||
HUBROOT="/var/www/"
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
[h2]Dokumentacja dla administratorów węzła[/h2]
|
||||
[h3]Wdrozenie swojego węzła[/h3]
|
||||
[h2]Dokumentacja dla administratorów portalu[/h2]
|
||||
[h3]Wdrożenie swojego portalu[/h3]
|
||||
[zrl=[baseurl]/help/install]Instalacja[/zrl]
|
||||
[zrl=[baseurl]/help/red2pi]Instalowanie $Projectname na Raspberry Pi[/zrl]
|
||||
[zrl=[baseurl]/help/Hubzilla_on_OpenShift]$Projectname na OpenShift[/zrl]
|
||||
[h3]Utrzymywanie swojego węzła[/h3]
|
||||
[h3]Utrzymywanie swojego portalu[/h3]
|
||||
[zrl=[baseurl]/help/troubleshooting]Wskazówki dotyczące rozwiązywania problemów[/zrl]
|
||||
[zrl=[baseurl]/help/theme_management]Zarządzanie motywami[/zrl]
|
||||
[zrl=[baseurl]/help/hidden_configs]Poprawianie ukrytych konfiguracji $Projectname[/zrl]
|
||||
|
||||
@@ -5,13 +5,13 @@
|
||||
|
||||
$Projectname Community Server to oprogramowanie typu Open Source, które jest utrzymywane przez "społeczność" - zasadniczo nieopłacanych ochotników. Nikt nie jest odpowiedzialny za naprawianie błędów. Pracujemy razem, aby oprogramowanie i sieć działały płynnie i bez błędów. Jesteś członkiem tej społeczności, więc potrzebujemy również Twojej pomocy, aby zapewnić wysokiej jakości oprogramowanie. Nie ma mitycznych "programistów", którzy w magiczny sposób wszystko naprawiają. Do nas wszystkich należy włączenie się i pomoc.
|
||||
|
||||
Pierwszą rzeczą, którą musisz zrobić, jest porozimieć się z administratorem węzła - osobą, która obsługuje Twoją witrynę i zarządza nią. Znajdują się ona w wyjątkowej sytuacji, ponieważ ma dostęp do wewnętrznego oprogramowania i bazy danych oraz [b]plików dziennika[/b] i będzie musiała zaangażować się w naprawę problemu. Inne osoby "w sieci" nie mogą naprawdę Ci tym pomóc. Pierwszą rzeczą, jaką musi zrobić administrator węzła, jest przejrzenie dzienników i podjecie próby odtworzenia problemu. Dlatego staraj się być tak pomocny i uprzejmy, jak to tylko możliwe, pomagając mu przyjrzeć się problemowi.
|
||||
Pierwszą rzeczą, którą musisz zrobić, jest porozimieć się z administratorem portalu - osobą, która obsługuje Twoją witrynę i zarządza nią. Znajdują się ona w wyjątkowej sytuacji, ponieważ ma dostęp do wewnętrznego oprogramowania i bazy danych oraz [b]plików dziennika[/b] i będzie musiała zaangażować się w naprawę problemu. Inne osoby "w sieci" nie mogą naprawdę Ci tym pomóc. Pierwszą rzeczą, jaką musi zrobić administrator węzła, jest przejrzenie dzienników i podjecie próby odtworzenia problemu. Dlatego staraj się być tak pomocny i uprzejmy, jak to tylko możliwe, pomagając mu przyjrzeć się problemowi.
|
||||
|
||||
Aby znaleźć swojego administratora węzła (jeśli nie wiesz, kim on jest), zajrzyj na [url=[baseurl]/siteinfo]tą stronę[/url]. Jeśli nie podał on żadnych informacji kontaktowych na tej stronie lub nie podał "Impressum", zobacz [url=[baseurl]/siteinfo.json]podsumowanie informacji o tej witrynie[/url] znajdujące się pod nagłówkiem "admin:".
|
||||
Aby znaleźć swojego administratora portalu (jeśli nie wiesz, kim on jest), zajrzyj na [url=[baseurl]/siteinfo]tą stronę[/url]. Jeśli nie podał on żadnych informacji kontaktowych na tej stronie lub nie podał "Impressum", zobacz [url=[baseurl]/siteinfo.json]podsumowanie informacji o tej witrynie[/url] znajdujące się pod nagłówkiem "admin:".
|
||||
|
||||
Zdecydowanie zaleca się, aby administratorzy węzła wypełniali raporty o błędach, tak aby możliwe było dołączenie odpowiedniego plik dziennika i informacji z bazy danych istotnych dla problemu oraz aby byli oni gotowi do wypróbowania rozwiązań i testów uzupełniających. Bez tego poziomu współpracy rozwiązanie problemu może nie być możliwe.
|
||||
Zdecydowanie zaleca się, aby administratorzy portali wypełniali raporty o błędach, tak aby możliwe było dołączenie odpowiedniego plik dziennika i informacji z bazy danych istotnych dla problemu oraz aby byli oni gotowi do wypróbowania rozwiązań i testów uzupełniających. Bez tego poziomu współpracy rozwiązanie problemu może nie być możliwe.
|
||||
|
||||
[h3]Jestem administratorem węzła, co mam zrobić?[/h3]
|
||||
[h3]Jestem administratorem portalu, co mam zrobić?[/h3]
|
||||
|
||||
Oprogramowania zapewniające tą usługę sieciową jest typu Open Source i jest dostępne do wglądu. Zachęcamy wszystkich do zapoznania się z kodem i zobaczenia, jak wszystko działa i sprawdzenia, czy nie robimy nic złego lub niedbałego. Jeśli został zgłoszony komunikat o błędzie, często można przeszukać pliki źródłowe tego komunikatu o błędzie i dowiedzieć się, co go spowodowało. Dzięki tym informacjom i plikom dziennika serwisu możliwe będzie ustalenie sekwencji zdarzeń prowadzących do błędu. Problem mogą powodować również serwisy zewnętrzne i jego źródłem wcale nie musi być Twój serwis, ale inne miejsce w sieci. Spróbuj określić punkty końcowe komunikacji (węzły lub serwisy), których dotyczy problem i skontaktuj się z administratorem tego serwisu lub tych serwisów. Spróbuj podać czas zdarzenia, w którym coś poszło nie tak, aby można go było znaleźć w dziennikach. Współpracuj z innymi administratorami, aby spróbować znaleźć przyczynę problemu. Pliki dziennika są Twoim przyjacielem. Kiedy w oprogramowaniu dzieje się coś, czego się nie spodziewaliśmy, prawie zawsze zostało to zarejestrowane.
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
[url=https://framagit.org/hubzilla/addons]Witryna dodatków[/url]
|
||||
[url=[baseurl]/help/credits]Podziękowania od $Projectname[/url]
|
||||
[h3]O tym węźle $Projectname[/h3]
|
||||
[zrl=[baseurl]/help/TermsOfService]Warunki świadczenia usług dla tego węzła[/zrl]
|
||||
[zrl=[baseurl]/help/TermsOfService]Warunki świadczenia usług dla tego portalu[/zrl]
|
||||
[zrl=[baseurl]/siteinfo]Inormacja o węźle (/siteinfo)[/zrl]
|
||||
[zrl=[baseurl]/siteinfo/json]Szczegółowe informacje techniczne w formacie JSON(/siteinfo/json)[/zrl]
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ W przypadku konfiguracji witryny, innym rozwiązaniem jest dodanie wiersza w pli
|
||||
[h2]Konfiguracja kanału (pconfig)[/h2]
|
||||
|
||||
[dl terms="mb"]
|
||||
[*= system.always_my_theme ] Stosowanie własnego motywu podczas oglądania kanałów na tym samym węźle. Jest to realizowane w dość pomysłowy sposób, gdy przegląda się kanały w motywie zależnym od Comanche.
|
||||
[*= system.always_my_theme ] Stosowanie własnego motywu podczas oglądania kanałów na tym samym portalu. Jest to realizowane w dość pomysłowy sposób, gdy przegląda się kanały w motywie zależnym od Comanche.
|
||||
[*= system.blocked ] Blokowanie tablicy xchans przez ten kanał. Z technicznego punktu widzenia jest to ukryta konfiguracja i nie należy tutaj nic zmieniać, ale niektóre dodatki (w szczególności superblok) udostępniają ją w interfejsie użytkownika.
|
||||
[*= system.default_cipher ] Ustawienie domyślnego szyfrowania E2EE dla elementów.
|
||||
[*= system.display_friend_count ] Ustawienie liczby połączeń wyświetlanych przez widżecie połączeń profilu.
|
||||
@@ -45,14 +45,14 @@ W przypadku konfiguracji witryny, innym rozwiązaniem jest dodanie wiersza w pli
|
||||
[*= system.admin_email ] Określenie adresu e-mail administratora tej witryny. Jest to wstęþnie ustawiane podczas instalacji.
|
||||
[*= system.authlog ] Plik dziennika używany do rejestrowania błędów uwierzytelniania. Służy do podłączania do oprogramowania po stronie serwera, takiego jak fail2ban. Błędy uwierzytelniania są nadal rejestrowane w dziennikach głównych.
|
||||
[*= system.auto_channel_create ] Dodanie elementów formularza niezbędnych do utworzenia pierwszego kanał na stronie rejestracji konta i utwórzemoa go (ewentualnie po sprawdzeniu przez e-mail lub po zatwierdzeniu przez administratora). Wyklucza to możliwość importowania kanału z innej witryny jako pierwszego utworzonego kanału w tej witrynie dla nowego konta. Użyj wraz z opcją system.default_permissions_role, aby usprawnić rejestrację.
|
||||
[*= system.auto_follow ] Przy utworzeniu pierwszego kanału automatycznie obserwuj kanały tutaj wymienione - listę stron internetowych oddzielonych przecinkami (adresów w postaci członek@węzeł).
|
||||
[*= system.blacklisted_sites ] Węzły, dla których ma być całkowicie zablokowany dostęp do tego węzła - tablica adresów URL.
|
||||
[*= system.auto_follow ] Przy utworzeniu pierwszego kanału automatycznie obserwuj kanały tutaj wymienione - listę stron internetowych oddzielonych przecinkami (adresów w postaci członek@portal).
|
||||
[*= system.blacklisted_sites ] Portale, dla których ma być całkowicie zablokowany dostęp do tego portalu - tablica adresów URL.
|
||||
[*= system.block_public_search ] Podobne do block_public, z tą różnicą, że blokuje tylko publiczny dostęp do funkcji wyszukiwania. Przydatne w przypadku serwisów, które chcą być publiczne, ale bez możliwości publicznego przeszukiwania treści.
|
||||
[*= system.cron_hour ] Określenie godziny, w której ma być uruchamiany cron_daily. Domyślnie, bez konfiguracji Cron będzie uruchamiany o północy czasu UTC.
|
||||
[*= system.default_permissions_role ] Jeśli ustawiono prawidłową nazwę roli uprawnień, użyj tą rolę dla pierwszego kanału utworzonego przez nowe konto i nie pytaj o 'Typ kanału' w formularzu tworzenia kanału. Przykłady prawidłowych nazw to: 'social', 'social_restricted', 'social_private', 'forum', 'forum_restricted' i 'forum_private'. Więcej informacji znadziesz [tutaj](/help/roles).
|
||||
[*= system.default_profile_photo ] Ustawienie zdjęcia profilowego, dla nowych kanałów. Powinna być to nazwa katalogu znajdującego się w images/default_profile_photos/ lub lub być pustą wartością. Jeśli opcja nie jest ustawione, zakłada się, że stosowany będzie obrazek 'rainbow_man'.
|
||||
[*= system.directorytags ] Ustawienie liczby tagów słów kluczowych wyświetlanych na stronie katalogu. Wartość domyślna to 50.
|
||||
[*= system.disable_directory_keywords ] Jeśli '1', nie pokazuj słów kluczowych z katalogu. Jeśli węzeł jest serwerem katalogowym, nie zezwalaj na zwracanie znaczników do żadnych klientów katalogu. Nie ustawiaj tego dla serwerów katalogowych w dziedzinie RED_GLOBAL.
|
||||
[*= system.disable_directory_keywords ] Jeśli '1', nie pokazuj słów kluczowych z katalogu. Jeśli portal jest serwerem katalogowym, nie zezwalaj na zwracanie znaczników do żadnych klientów katalogu. Nie ustawiaj tego dla serwerów katalogowych w dziedzinie RED_GLOBAL.
|
||||
[*= system.disable_discover_tab ] Pozwala to całkowicie wyłączyć możliwość wykrywania treści publicznych z witryn zewnętrznych.
|
||||
[*= system.disable_dreport ] Jeśli '1', nie przechowuj raportów doręczenia ani nie stosuj do nich odnośników.
|
||||
[*= system.dlogfile ] Plik dziennika używany do rejestrowania błędów programistycznych. Dokładnie to samo, co rejestrator w innym przypadku. To nie jest magia i wymaga własnych instrukcji logowania. Narzędzie programistyczne.
|
||||
@@ -62,7 +62,7 @@ W przypadku konfiguracji witryny, innym rozwiązaniem jest dodanie wiersza w pli
|
||||
[*= system.photo_storage_type] Jeśli '1', użyj systemu plików, zamiast bazy danych SQL, do przechowywania miniatur. Wartość domyślna to '0'. Wprowadzono w wersji 4.2.
|
||||
[*= system.hidden_version_siteinfo ] Jeśli true, nie wyświetlaj wersji oprogramowania na stronach informacji o witrynie (system.hide_version również ukrywa wersję na tych stronach, ale to ustawienie *tylko* ukrywa wersję na stronach informacji o witrynie).
|
||||
[*= system.hide_help ] Nie wyświetlaj linku do stron pomocy na pasku nawigacyjnym.
|
||||
[*= system.hide_in_statistics ] Poinformuj serwery statystyk, aby całkowicie ukryły ten węzeł na liście węzłów.
|
||||
[*= system.hide_in_statistics ] Poinformuj serwery statystyk, aby całkowicie ukryły ten portal na liście portali.
|
||||
[*= system.hide_version ] Jeśli true, nie zgłaszaj wersji oprogramowania na stronach internetowych ani w narzędziach. (*) Trzeba to ustawić w .htconfig.php.
|
||||
[*= system.ignore_imagick ] Zignoruj imagick i używaj GD, nawet jeśli imagick jest zainstalowany na serwerze. Zapobiega to niektórym problemom z plikami PNG w starszych wersjach programu imagick.
|
||||
[*= system.max_daily_registrations ] Ustaw maksymalną liczbę nowych rejestracji dozwolonych w jednym dniu. Przydatne, aby zapobiec nadmiernej subskrypcji po nagłym nagłośnieniu projektu.
|
||||
@@ -83,7 +83,7 @@ W przypadku konfiguracji witryny, innym rozwiązaniem jest dodanie wiersza w pli
|
||||
[*= system.poke_basic ] Zmniejsz liczbę wyrażeń szturchnięć ("poke verbs") do dokładnie 1 ("poke"). Wyłącz inne wyrażenia.
|
||||
[*= system.proc_run_use_exec ] Jeśli 1, użycie wywołania systemowego exec w proc_run do uruchomienia zadania w tle. Domyślnie używamy proc_open i proc_close. W niektórych (obecnie rzadkich) systemach nie działa to dobrze.
|
||||
[*= system.projecthome ] Wyświetl stronę projektu na swojej stronie głównej dla wylogowanych osób.
|
||||
[*= system.projecthome ] Ustaw stronę główną projektu jako stronę główną swojego węzła. (Przestarzałe)
|
||||
[*= system.projecthome ] Ustaw stronę główną projektu jako stronę główną swojego portalu. (Przestarzałe)
|
||||
[*= system.register_link ] Ścieżka do strony z linku "Zarejestruj się" w formularzu logowania. W zamkniętych witrynach będzie to przekierowywać do 'pubsites'. W przypadku otwartych witryn zwykle przekierowuje do strony 'register', ale można to zmienić na niestandardową stronę oferującą subskrypcje lub cokolwiek innego.
|
||||
[*= system.reserved_channels ] Nie zezwalaj członkom na rejestrowanie kanałów o nazwach wyszczególnionych na tej liście nazw rozddzielanych przecinkami (bez spacji).
|
||||
[*= system.sellpage ] Adres URL wyświetlany na liście witryn publicznych, prowadzący do strony z cenami usług - parametry kont i ich cena itp.
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
[img][baseurl]/images/hubzilla-banner.png[/img]
|
||||
|
||||
[zrl=[baseurl]/help/about]Co to jest $Projectname?[/zrl]
|
||||
$Projectname to bezpłatny i otwartoźródłowy zestaw aplikacji i usług internetowych działających na specjalnym serwerze internetowym, zwanym "węzłem" ([i]ang. hub[/i]), który może łączyć się z innymi węzłami w sfederalizowanej sieci internetowej.
|
||||
$Projectname to bezpłatny i otwartoźródłowy zestaw aplikacji i usług internetowych działających na specjalnym serwerze internetowym, zwanym "portale" lub hubem ([i]ang. hub[/i]), który może łączyć się z innymi portalami w sfederalizowanej sieci internetowej.
|
||||
|
||||
[zrl=[baseurl]/help/features]Możliwości $Projectname[/zrl]
|
||||
$Projectname zapewnia użytkownikom zaawansowaną komunikację, tożsamości i usług kontroli dostępu, które bezproblemowo współpracują w różnych domenach i niezależnych witrynach internetowych. Pozwala użytkownikom [b]publicznie[/b] lub [b]prywatnie[/b] publikować treści za pośrednictwem "kanałów" (ang. channel), które są podstawowymi, zabezpieczonymi kryptograficznie tożsamościami zapewniającymi uwierzytelnianie niezależnie od węzłów, które je hostują. To rewolucyjne wyzwolenie tożsamości online z poszczególnych serwerów i domen jest nazywane "tożsamością nomadyczną" i jest oparte na protokole Zot, nowej strukturze zdecentralizowanej kontroli dostępu ze szczegółowymi, rozszerzalnymi uprawnieniami.
|
||||
Z praktycznego punktu widzenia członków danego węzła, korzystających z oprogramowania $Projectname, oferuje ono szereg znanych, zintegrowanych aplikacji i usług internetowych, w tym:
|
||||
$Projectname zapewnia użytkownikom zaawansowaną komunikację, tożsamości i usług kontroli dostępu, które bezproblemowo współpracują w różnych domenach i niezależnych witrynach internetowych. Pozwala użytkownikom [b]publicznie[/b] lub [b]prywatnie[/b] publikować treści za pośrednictwem "kanałów" (ang. channel), które są podstawowymi, zabezpieczonymi kryptograficznie tożsamościami zapewniającymi uwierzytelnianie niezależnie od portali, które je hostują. To rewolucyjne wyzwolenie tożsamości online z poszczególnych serwerów i domen jest nazywane "tożsamością nomadyczną" i jest oparte na protokole Zot, nowej strukturze zdecentralizowanej kontroli dostępu ze szczegółowymi, rozszerzalnymi uprawnieniami.
|
||||
Z praktycznego punktu widzenia członków danego portalu, korzystających z oprogramowania $Projectname, oferuje ono szereg znanych, zintegrowanych aplikacji i usług internetowych, w tym:
|
||||
[ul]
|
||||
[li]wątki dyskusyjne w sieciach społecznościowych[/li]
|
||||
[li]przechowywanie plików w chmurze[/li]
|
||||
@@ -13,7 +13,7 @@ Z praktycznego punktu widzenia członków danego węzła, korzystających z opro
|
||||
[li]hosting stron internetowych z systemem zarządzania treścią[/li]
|
||||
[li]wiki[/li]
|
||||
[li]i dużo więcej ...[/li][/ul]
|
||||
Chociaż wszystkie te aplikacje i usługi można znaleźć w innych pakietach oprogramowania, tylko $Projectname pozwala ustawić uprawnienia dla grup i osób, [b]które mogą nawet nie mieć kont na Twoim węźle[/b]! W typowych aplikacjach internetowych, jeśli chcesz udostępniać rzeczy prywatnie w Internecie, osoby, którym udostępniasz dane, muszą mieć konta na serwerze, na którym znajdują się Twoje dane; w przeciwnym razie serwer nie może uwierzytelniać odwiedzających witrynę, aby wiedzieć, czy przyznać im dostęp. $Projectname rozwiązuje ten problem za pomocą zaawansowanego systemu zdalnego uwierzytelniania, który weryfikuje tożsamość odwiedzających, wykorzystując techniki obejmujące kryptografię klucza publicznego.
|
||||
Chociaż wszystkie te aplikacje i usługi można znaleźć w innych pakietach oprogramowania, tylko $Projectname pozwala ustawić uprawnienia dla grup i osób, [b]które mogą nawet nie mieć kont na Twoim portalu[/b]! W typowych aplikacjach internetowych, jeśli chcesz udostępniać rzeczy prywatnie w Internecie, osoby, którym udostępniasz dane, muszą mieć konta na serwerze, na którym znajdują się Twoje dane; w przeciwnym razie serwer nie może uwierzytelniać odwiedzających witrynę, aby wiedzieć, czy przyznać im dostęp. $Projectname rozwiązuje ten problem za pomocą zaawansowanego systemu zdalnego uwierzytelniania, który weryfikuje tożsamość odwiedzających, wykorzystując techniki obejmujące kryptografię klucza publicznego.
|
||||
Dzięki oferowanym aplikacjom, $Projectname świetnie się nadaje do budowy platformy komunikacyjno-publikacyjnej o charkterze społecznościowym dla realnych grup społecznych, takich jak rodziny, lokalne grupy, organizacje społeczne, środowiska szkolne, wspólnoty mieszkańców czy wspólnoty religijne.
|
||||
|
||||
[zrl=[baseurl]/help/what_is_zot]Co to jest Zot?[/zrl]
|
||||
|
||||
@@ -318,7 +318,7 @@ Utwórz spis treści na stronie internetowej lub stronie wiki. Proszę zapoznać
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>[nobb][rpost=title]Tekst do publikacji[/rpost][/nobb]</code><br>
|
||||
Obserwator wróci do swojego macierzystego węzła, aby wprowadzić wpis z określonym tytułem i treścią. Obie opcje są opcjonalne</td><td><a href="[baseurl]/rpost?f=&title=title&body=Text+to+post" target="_blank">[baseurl]/rpost?f=&title=title&body=Text+to+post</a></td>
|
||||
Obserwator wróci do swojego macierzystego portalu, aby wprowadzić wpis z określonym tytułem i treścią. Obie opcje są opcjonalne</td><td><a href="[baseurl]/rpost?f=&title=title&body=Text+to+post" target="_blank">[baseurl]/rpost?f=&title=title&body=Text+to+post</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Wymaga to wtyczki <a href="https://framagit.org/hubzilla/addons/tree/master/qrator"><strong>qrator</strong></a>.<br><code>[qr]tekst do publikacji[/qr]</code></td><td><img src="/doc/member/assets/qr_text_to_post.png"></td>
|
||||
|
||||
@@ -175,7 +175,7 @@ Odwiedź profil tego kanału, klikając jego zdjęcie w katalogu, matrycy lub ko
|
||||
|
||||
Aby połączyć się z kanałami w innych sieciach niż sieć $Projectname:
|
||||
|
||||
Proces łączenia się z kanałami w innych sieciach (takich jak GNU-Social, Mastodon czy Diaspora) jest podobny - wpisz odpowiednie "webbie" do pola "Dodaj nowe połączenia" na stronie "Połączenia". Jednak zanim to zrobisz, odwiedź stronę "Ustawienia" ("Ustawienia funkcji i dodatków") i upewnij się, że w Twoim węźle jest dostępny odpowiedni protokół (Diaspora, GNU-Social/OStatus lub ActivityPub) i [b][i]jest aktywowany[/i] dla Twojego kanału[/b]. Te sieci (protokoły) nie obsługują migracji kont i niezależności lokalizacji, więc jeśli przeniesiesz lokalizację lub sklonujesz swój kanał w inne miejsce, komunikacja z tymi połączeniami może się nie udać. Z tego powodu protokoły te nie są domyślnie aktywowane, ale ich aktywacja wymaga Twojej zgodą. Aktywacja tych protokołów wiąże się z podjęciem ważkiego rozstrzygniecia korzyści płynących z kmunikowania się ze znajomymi w tych sieciach a z drugiej strony, zapewnieniem odporności konta na awarie serwera.
|
||||
Proces łączenia się z kanałami w innych sieciach (takich jak GNU-Social, Mastodon czy Diaspora) jest podobny - wpisz odpowiednie "webbie" do pola "Dodaj nowe połączenia" na stronie "Połączenia". Jednak zanim to zrobisz, odwiedź stronę "Ustawienia" ("Ustawienia funkcji i dodatków") i upewnij się, że w Twoim portalu jest dostępny odpowiedni protokół (Diaspora, GNU-Social/OStatus lub ActivityPub) i [b][i]jest aktywowany[/i] dla Twojego kanału[/b]. Te sieci (protokoły) nie obsługują migracji kont i niezależności lokalizacji, więc jeśli przeniesiesz lokalizację lub sklonujesz swój kanał w inne miejsce, komunikacja z tymi połączeniami może się nie udać. Z tego powodu protokoły te nie są domyślnie aktywowane, ale ich aktywacja wymaga Twojej zgodą. Aktywacja tych protokołów wiąże się z podjęciem ważkiego rozstrzygniecia korzyści płynących z kmunikowania się ze znajomymi w tych sieciach a z drugiej strony, zapewnieniem odporności konta na awarie serwera.
|
||||
|
||||
Niektóre rodzaje komunikacji oferują więcej niż jeden protokół. Jeśli chcesz połączyć się z kimś na Mastodonie (na przykład), możesz użyć do komunikacji protokołu "Ostatus" lub "AactivityPub". Generalnie, protokół "ActivityPub" zapewnia lepszą obsługę niż "Ostatus", ale Hubzilla często wybiera pierwszy protokół, który odkryje i może to nie być to, czego chcesz. Możesz połączyć się z kimś przez określony protokół, poprzedzając nazwę protokołu w nawiasach kwadratowych na tym "webbie". Na przykład:
|
||||
|
||||
@@ -189,7 +189,7 @@ Niektóre rodzaje komunikacji oferują więcej niż jeden protokół. Jeśli chc
|
||||
|
||||
Aby połączyć zię z kanałami RSS:
|
||||
|
||||
Administrator węzła może zezwolić na łączenie się z kanałami RSS. Proces łączenia się z kanałem RSS jest taki sam, z wyjątkiem wpisania (lub wklejenia) adresu URL kanału w polu "Dodaj nowe połączenie". Kanały są przetwarzane tylko raz lub dwa razy dziennie, a administrator węzła może nałożyć ograniczenia na liczbę dodawanych kanałów.
|
||||
Administrator portalu może zezwolić na łączenie się z kanałami RSS. Proces łączenia się z kanałem RSS jest taki sam, z wyjątkiem wpisania (lub wklejenia) adresu URL kanału w polu "Dodaj nowe połączenie". Kanały są przetwarzane tylko raz lub dwa razy dziennie, a administrator portalu może nałożyć ograniczenia na liczbę dodawanych kanałów.
|
||||
|
||||
[h4][b]Blokowanie, ignorowanie, archiwizowanie i ukrywanie kanałów[/b][/h4]
|
||||
|
||||
@@ -235,7 +235,7 @@ Zdecydowanie zalecamy skorzystanie z ustawień "typowej sieci społecznościowej
|
||||
|
||||
[*= Każdy w Twojej książce adresowej ] Każdy, kto nie znajduje się w Twojej książce adresowej ma odmowę dostępu, ale każdy kogo zaakceptujesz jako kontakt, uzyska zezwolenie. Jest to sposób stosowany na większości starszych platform.
|
||||
|
||||
[*= Każdy na tym węźle ] Każdy, kto ma kanał w tym samym węźle co Ty, będzie miał pozwolenie. Każdemu, kto jest zarejestrowany na innym węźle, odmawia się dostępu.
|
||||
[*= Każdy na tym portalu ] Każdy, kto ma kanał w tym samym portalu co Ty, będzie miał pozwolenie. Każdemu, kto jest zarejestrowany na innym portalu, odmawia się dostępu.
|
||||
|
||||
[*= Każdy w tej sieci ] Każdy w sieci $Projectname będzie miał zatwierdzone to pozwolenie. Nawet zupełnie obce osoby. Jednak każdemu, kto nie jest zalogowany (uwierzytelniony), tego dostępu się odmiawia.
|
||||
|
||||
@@ -291,7 +291,7 @@ Ekran edycji połączenia oferuje suwak do wyboru stopnia "zaprzyjaźnienia" z p
|
||||
Suwak na stronie matrycy ma zarówno wartość minimalną, jak i maksymalną. Wpisy będą wyświetlane tylko od osób mieszczących się w tym zakresie. Zaprzyjaźnienie nie ma związku z uprawnieniami i jest przydatna tylko w połączeniu z funkcją narzędzia zaprzyjaźnienia.
|
||||
|
||||
[h3]Tokeny dostępu gościa[/h3]
|
||||
Tokeny dostępu gościa (czasami nazywane "tokenami dostępu Zot") umożliwiają udostępnianie pliku, folderu, zdjęcia, albumu lub kanału określonej osobie lub grupie osób, które nie są członkami węzła Hubzilli. Te tokeny umożliwiają udostępnianie poszczególnych elementów poprzez wysłanie linku zawierającego token w adresie URL; alternatywnie, osoby mogą faktycznie logować się przy użyciu poświadczeń tokena, po czym mogą bezproblemowo przeglądać zawartość udostępnioną temu tokenowi.
|
||||
Tokeny dostępu gościa (czasami nazywane "tokenami dostępu Zot") umożliwiają udostępnianie pliku, folderu, zdjęcia, albumu lub kanału określonej osobie lub grupie osób, które nie są członkami portalu Hubzilli. Te tokeny umożliwiają udostępnianie poszczególnych elementów poprzez wysłanie linku zawierającego token w adresie URL; alternatywnie, osoby mogą faktycznie logować się przy użyciu poświadczeń tokena, po czym mogą bezproblemowo przeglądać zawartość udostępnioną temu tokenowi.
|
||||
|
||||
W celu utworzenia tokenów dostępu gościa i zarządzać nimi, otwórz stronę ustawień "Tokeny dostępu gościa". Przy każdym załadowaniu strony generowany jest losowy token, który umożliwia utworzenie specjalnego adresu URL zawierającego ten token i opcjonalnie określenie daty wygaśnięcia. Istniejące tokeny są wymienione poniżej okna dialogowego i można je edytować, wybierać lub usuwać.
|
||||
|
||||
@@ -440,7 +440,7 @@ wytworzy taki HTML:
|
||||
|
||||
[h4][b]Narzędzie importy elementów strony internetowej[/b][/h4]
|
||||
|
||||
Istnieją dwie metody importowania elementów strony internetowej: przesyłanie pliku ZIP lub odwoływanie się do plików we własnym magazynu plików w serwisie. Obie metody wymagają określenia elementów strony sieci internetowej przy użyciu określonej struktury folderów. Narzędzie importu umożliwia zaimportowanie wszystkich elementów niezbędnych do zbudowania całej witryny lub zestawu witryn. Celem jest uwzględnienie zewnętrznego tworzenia stron internetowych, a także narzędzi upraszczających i automatyzujących wdrażanie w węźle.
|
||||
Istnieją dwie metody importowania elementów strony internetowej: przesyłanie pliku ZIP lub odwoływanie się do plików we własnym magazynu plików w serwisie. Obie metody wymagają określenia elementów strony sieci internetowej przy użyciu określonej struktury folderów. Narzędzie importu umożliwia zaimportowanie wszystkich elementów niezbędnych do zbudowania całej witryny lub zestawu witryn. Celem jest uwzględnienie zewnętrznego tworzenia stron internetowych, a także narzędzi upraszczających i automatyzujących wdrażanie na portalu.
|
||||
|
||||
[h5][b] Struktura folderu [/b][/h5]
|
||||
Definicje elementów muszą być przechowywane w katalogu głównym repozytorium w folderach o nazwie odpowiadającej typowi elementu:
|
||||
@@ -818,7 +818,7 @@ WebDAV umożliwia kopiowanie plików bezpośrednio do lub z systemu operacyjnego
|
||||
|
||||
[h4][b]Dostęp CalDAV i CardDAV na Androidzie[/b][/h4]
|
||||
|
||||
Możesz zsynchronizować swój kalendarz i kontakty w systemie Android ze swoim węzłem.
|
||||
Możesz zsynchronizować swój kalendarz i kontakty w systemie Android ze swoim portalem.
|
||||
|
||||
Poniższe kroki zostały przetestowane pod kątem zasosowania [url=https://f-droid.org/en/packages/at.bitfire.davdroid/] DAVdroid [/url]:
|
||||
|
||||
@@ -882,7 +882,7 @@ aby uwzględnić katalog zdalny, dodając:
|
||||
[baseurl]/dav/ /mount/point davfs user,noauto,uid=<DesktopUser>,file_mode=600,dir_mode=700 0 1
|
||||
[/code]
|
||||
|
||||
gdzie [baseurl] jest adresem URL węzła, /mount/point to lokalizacja, w której chcesz zamontować katalog zdalny, a <DesktopUser> to użytkownik, którego logujesz się na swoim komputerze. Miej na uwadze, że jeśli montujesz jako zwykły użytkownik (nie root), punkt montowania musi znajdować się w twoim katalogu domowym.
|
||||
gdzie [baseurl] jest adresem URL portalu, /mount/point to lokalizacja, w której chcesz zamontować katalog zdalny, a <DesktopUser> to użytkownik, którego logujesz się na swoim komputerze. Miej na uwadze, że jeśli montujesz jako zwykły użytkownik (nie root), punkt montowania musi znajdować się w twoim katalogu domowym.
|
||||
|
||||
Przyjmijmy, że chcesz zamontować swój magazyn plików w katalogu o nazwie 'cloud' w swoim katalogu domowym, a Twoja nazwa użytkownika to 'bob'. Zapis w fstab będzie następujący:
|
||||
|
||||
@@ -906,7 +906,7 @@ i dodaj tam swoje dane uwierzytelniania w katalogu zdalnym:
|
||||
[baseurl]/dav <username> <password>
|
||||
[/code]
|
||||
|
||||
gdzie <username> i <password> to nazwa użytkownika i hasło [i]na Twoim kanale w węźle[/i].
|
||||
gdzie <username> i <password> to nazwa użytkownika i hasło [i]na Twoim kanale w portalu[/i].
|
||||
|
||||
Nie pozwól, aby ten plik mógł być zapisywany przez kogoś nieupoważnionego:
|
||||
|
||||
@@ -937,18 +937,18 @@ Jeśli to nadal nie zadziała, wyłącz pamięć podręczną. Pamiętaj, że ma
|
||||
Jeśli [i]nadal[/i] to nie działa, jest jeszcze jedna rzecz, której możesz spróbować. (Ten jest spowodowany błędem w starszych wersjach samego dav2fs, więc aktualizacja do nowej wersji może również pomóc). Włącz słabe usuwanie etagów, ustawiając [code]drop_weak_etags 1[]/code. Odmontuj i ponownie podłącz swój system plików, aby zastosować zmiany.
|
||||
|
||||
[h5][b]Dolphin[/b][/h5]
|
||||
Dolphin Browser to przeglądarka internetowa dla Android i iOS. Odwiedź w niej [code]webdavs://example.com/dav[/code], gdzie [code]example.com[/code] to URL do Twojego węzła.
|
||||
Dolphin Browser to przeglądarka internetowa dla Android i iOS. Odwiedź w niej [code]webdavs://example.com/dav[/code], gdzie [code]example.com[/code] to URL do Twojego portalu.
|
||||
|
||||
Gdy zostaniesz poproszony o podanie nazwy użytkownika i hasła, wprowadź nazwę swojego kanału (pierwszą część swojej strony internetowej - bez znaku @ i nazwy domeny) i hasło do swojego normalnego konta.
|
||||
|
||||
Pamiętaj, że jeśli jesteś już zalogowany do interfejsu WWW przez Konqueror, nie zostaniesz poproszony o dalsze uwierzytelnianie.
|
||||
|
||||
[h5][b]Konqueror[/b][/h5]
|
||||
Konqueror to przeglądarka internetowa, meadżer plików i przeglądarka dokumentów dla środowiska KDE. Wystarczy odwiedzić w niej serwis [code]webdavs://example.com/dav[/code] po zalogowaniu się do swojego węzła, gdzie [code]example.com[/code] to adres URL węzła.
|
||||
Konqueror to przeglądarka internetowa, meadżer plików i przeglądarka dokumentów dla środowiska KDE. Wystarczy odwiedzić w niej serwis [code]webdavs://example.com/dav[/code] po zalogowaniu się do swojego portalu, gdzie [code]example.com[/code] to adres URL portalu.
|
||||
|
||||
Jeśli jesteś zalogowany do swojego węzła w normalny sposób, nie jest wymagane dalsze uwierzytelnianie.
|
||||
Jeśli jesteś zalogowany do swojego portalu w normalny sposób, nie jest wymagane dalsze uwierzytelnianie.
|
||||
|
||||
Ponadto, jeśli ktoś uwierzytelnił się w innym węźle podczas normalnej sesji przeglądarki, Twoja tożsamość zostanie również przekazana do magazynu plików dla tych węzłów - co oznacza, że możesz uzyskać dostęp do wszelkich prywatnych plików na dowolnym serwerze, o ile masz uprawnienia do ich przeglądania i pod warunkiem, że odwiedziłeś tę witrynę wcześniej podczas sesji.
|
||||
Ponadto, jeśli ktoś uwierzytelnił się w innym portalu podczas normalnej sesji przeglądarki, Twoja tożsamość zostanie również przekazana do magazynu plików dla tych portali - co oznacza, że możesz uzyskać dostęp do wszelkich prywatnych plików na dowolnym serwerze, o ile masz uprawnienia do ich przeglądania i pod warunkiem, że odwiedziłeś tę witrynę wcześniej podczas sesji.
|
||||
|
||||
Ta funkcja jest zwykle ograniczona do interfejsu sieciowego i nie jest dostępna dla żadnego innego środowiska graficznego niż KDE.
|
||||
|
||||
@@ -1009,7 +1009,7 @@ Będziesz musiał potwierdzić swoje hasło i kanał, na którym jesteś obecnie
|
||||
|
||||
[hl][i][b]To jest nieodwracalne.[/b][/i][/hl]
|
||||
|
||||
Jeśli masz klony tożsamości na innych węzłach, nie zostaną one usuniete. Operacja ta spowoduje tylko usunięcie tej instancji kanału, która istnieje w węźle, na którym dokonujesz usunięcia kanału.
|
||||
Jeśli masz klony tożsamości na innych portalach, nie zostaną one usuniete. Operacja ta spowoduje tylko usunięcie tej instancji kanału, która istnieje w portalu, na którym dokonujesz usunięcia kanału.
|
||||
|
||||
[h4][b]Usuniecie konta[/b][/h4]
|
||||
|
||||
@@ -1019,5 +1019,5 @@ Będziesz musiał potwierdzić swoje hasło i konto, na którym jesteś obecnie
|
||||
|
||||
[hl][i][b]To jest nieodwracalne.[/b][/i][/hl]
|
||||
|
||||
Wszystkie Twoje kanały zostaną usunięte. Jeśli masz klony tożsamości na innych węzłach - nie zostaną one usuniete. Operacja ta powoduje tylko usunięcie instancji kanałów, które istnieją w węźle, na którym dokonujesz tą operację.
|
||||
Wszystkie Twoje kanały zostaną usunięte. Jeśli masz klony tożsamości na innych portalach - nie zostaną one usuniete. Operacja ta powoduje tylko usunięcie instancji kanałów, które istnieją w portalu, na którym dokonujesz tą operację.
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
<div id="administrators" class="doco-section">
|
||||
<div class="flex-column">
|
||||
<a class="nav-link" href="/help/admin/administrator_guide">Przewodnik</a>
|
||||
<a class="nav-link" href="/help/admin/hub_snapshots">Migawki węzła</a>
|
||||
<a class="nav-link" href="/help/admin/hub_snapshots">Migawki portalu</a>
|
||||
<a class="nav-link" href="/help/database">Baza danych</a>
|
||||
<a class="nav-link" href="/help/hidden_configs">Dodatkowa konfiguracja</a>
|
||||
</div>
|
||||
|
||||
@@ -48,7 +48,7 @@ function check_account_email($email) {
|
||||
$result['message'] = t('The provided email address is already registered at this site');
|
||||
}
|
||||
|
||||
$register = q("select reg_did2 from register where reg_vital = 1 and reg_did2 = '%s' limit 1",
|
||||
$register = q("select reg_did2 from register where reg_vital = 1 and reg_did2 = '%s' and reg_didx = 'e' limit 1",
|
||||
dbesc($email)
|
||||
);
|
||||
if ($register) {
|
||||
|
||||
@@ -1407,7 +1407,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;
|
||||
}
|
||||
@@ -1516,8 +1516,11 @@ function profile_load($nickname, $profile = '') {
|
||||
|
||||
if($p[0]['keywords']) {
|
||||
$keywords = str_replace(array('#',',',' ',',,'),array('',' ',',',','),$p[0]['keywords']);
|
||||
if(strlen($keywords) && $can_view_profile)
|
||||
if(strlen($keywords) && $can_view_profile) {
|
||||
if(! isset(App::$page['htmlhead']))
|
||||
App::$page['htmlhead'] = '';
|
||||
App::$page['htmlhead'] .= '<meta name="keywords" content="' . htmlentities($keywords,ENT_COMPAT,'UTF-8') . '" />' . "\r\n" ;
|
||||
}
|
||||
}
|
||||
|
||||
App::$profile = $p[0];
|
||||
@@ -2534,7 +2537,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)
|
||||
);
|
||||
|
||||
|
||||
@@ -296,7 +296,7 @@ function get_atom_author($feed, $item) {
|
||||
|
||||
$rawauthor = $item->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10,'author');
|
||||
|
||||
if($rawauthor && $rawauthor[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['link']) {
|
||||
if($rawauthor && isset($rawauthor[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['link'])) {
|
||||
$base = $rawauthor[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['link'];
|
||||
foreach($base as $link) {
|
||||
if(!x($author, 'author_photo') || ! $author['author_photo']) {
|
||||
@@ -336,7 +336,7 @@ function get_atom_author($feed, $item) {
|
||||
|
||||
if(! x($author,'author_link') || ! x($author,'author_photo')) {
|
||||
$rawauthor = $feed->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_10,'author');
|
||||
if($rawauthor && $rawauthor[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['link']) {
|
||||
if($rawauthor && isset($rawauthor[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['link'])) {
|
||||
$base = $rawauthor[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['link'];
|
||||
foreach($base as $link) {
|
||||
if($link['attribs']['']['rel'] === 'alternate' && (! $author['author_link'])) {
|
||||
@@ -372,16 +372,16 @@ function get_atom_author($feed, $item) {
|
||||
if(! $rawowner)
|
||||
$rawowner = $item->get_item_tags(NAMESPACE_ZOT, 'owner');
|
||||
|
||||
if($rawowner[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'])
|
||||
if(isset($rawowner[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data']))
|
||||
$author['owner_name'] = unxmlify($rawowner[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data']);
|
||||
elseif($rawowner[0]['child'][NAMESPACE_DFRN]['name'][0]['data'])
|
||||
elseif(isset($rawowner[0]['child'][NAMESPACE_DFRN]['name'][0]['data']))
|
||||
$author['owner_name'] = unxmlify($rawowner[0]['child'][NAMESPACE_DFRN]['name'][0]['data']);
|
||||
if($rawowner[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'])
|
||||
if(isset($rawowner[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data']))
|
||||
$author['owner_link'] = unxmlify($rawowner[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data']);
|
||||
elseif($rawowner[0]['child'][NAMESPACE_DFRN]['uri'][0]['data'])
|
||||
elseif(isset($rawowner[0]['child'][NAMESPACE_DFRN]['uri'][0]['data']))
|
||||
$author['owner_link'] = unxmlify($rawowner[0]['child'][NAMESPACE_DFRN]['uri'][0]['data']);
|
||||
|
||||
if($rawowner[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['link']) {
|
||||
if(isset($rawowner[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['link'])) {
|
||||
$base = $rawowner[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['link'];
|
||||
|
||||
foreach($base as $link) {
|
||||
|
||||
@@ -702,7 +702,6 @@ function get_item_elements($x,$allow_code = false) {
|
||||
$arr['mid'] = (($x['message_id']) ? htmlspecialchars($x['message_id'], ENT_COMPAT,'UTF-8',false) : '');
|
||||
$arr['parent_mid'] = (($x['message_top']) ? htmlspecialchars($x['message_top'], ENT_COMPAT,'UTF-8',false) : '');
|
||||
$arr['thr_parent'] = (($x['message_parent']) ? htmlspecialchars($x['message_parent'], ENT_COMPAT,'UTF-8',false) : '');
|
||||
|
||||
$arr['plink'] = (($x['permalink']) ? htmlspecialchars($x['permalink'], ENT_COMPAT,'UTF-8',false) : '');
|
||||
$arr['location'] = (($x['location']) ? htmlspecialchars($x['location'], ENT_COMPAT,'UTF-8',false) : '');
|
||||
$arr['coord'] = (($x['longlat']) ? htmlspecialchars($x['longlat'], ENT_COMPAT,'UTF-8',false) : '');
|
||||
@@ -718,17 +717,12 @@ function get_item_elements($x,$allow_code = false) {
|
||||
$arr['comment_policy'] = (($x['comment_scope']) ? htmlspecialchars($x['comment_scope'], ENT_COMPAT,'UTF-8',false) : 'contacts');
|
||||
|
||||
$arr['sig'] = (($x['signature']) ? htmlspecialchars($x['signature'], ENT_COMPAT,'UTF-8',false) : '');
|
||||
|
||||
$arr['obj'] = activity_sanitise($x['object']);
|
||||
$arr['target'] = activity_sanitise($x['target']);
|
||||
|
||||
$arr['attach'] = activity_sanitise($x['attach']);
|
||||
$arr['term'] = decode_tags($x['tags']);
|
||||
$arr['iconfig'] = decode_item_meta($x['meta']);
|
||||
|
||||
$arr['item_private'] = ((array_key_exists('flags',$x) && is_array($x['flags']) && in_array('private',$x['flags'])) ? 1 : 0);
|
||||
|
||||
$arr['item_flags'] = 0;
|
||||
$arr['item_flags'] = 0;
|
||||
|
||||
if(array_key_exists('flags',$x)) {
|
||||
|
||||
@@ -749,6 +743,12 @@ function get_item_elements($x,$allow_code = false) {
|
||||
if(in_array('hidden',$x['flags']))
|
||||
$arr['item_hidden'] = 1;
|
||||
|
||||
if(in_array('private', $x['flags']))
|
||||
$arr['item_private'] = 1;
|
||||
|
||||
if(in_array('private', $x['flags']) && in_array('direct', $x['flags']))
|
||||
$arr['item_private'] = 2;
|
||||
|
||||
}
|
||||
|
||||
// Here's the deal - the site might be down or whatever but if there's a new person you've never
|
||||
@@ -971,7 +971,7 @@ function import_author_xchan($x) {
|
||||
if($y)
|
||||
return $y;
|
||||
|
||||
if(!$y && !isset($x['network']) || $x['network'] === 'zot') {
|
||||
if(!isset($x['network']) || $x['network'] === 'zot') {
|
||||
$y = import_author_zot($x);
|
||||
}
|
||||
|
||||
@@ -981,11 +981,14 @@ function import_author_xchan($x) {
|
||||
$r = q("SELECT xchan_hash FROM xchan WHERE xchan_url = '%s' AND xchan_network = 'zot6'",
|
||||
dbesc($x['url'])
|
||||
);
|
||||
if(! $r)
|
||||
// TODO: fix dupplicate with line 960
|
||||
if(!$r)
|
||||
discover_by_webbie($x['url'], 'zot6');
|
||||
}
|
||||
|
||||
return $y;
|
||||
if($y)
|
||||
return $y;
|
||||
|
||||
}
|
||||
|
||||
// perform zot6 discovery
|
||||
@@ -1336,7 +1339,13 @@ function encode_item_xchan($xchan) {
|
||||
$ret['id_sig'] = $xchan['xchan_guid_sig'];
|
||||
$ret['key'] = $xchan['xchan_pubkey'];
|
||||
|
||||
return $ret;
|
||||
$hookdata = [
|
||||
'encoded_xchan' => $ret
|
||||
];
|
||||
|
||||
call_hooks('encode_item_xchan', $hookdata);
|
||||
|
||||
return $hookdata['encoded_xchan'];
|
||||
}
|
||||
|
||||
function encode_item_terms($terms,$mirror = false) {
|
||||
@@ -1551,6 +1560,8 @@ function encode_item_flags($item) {
|
||||
$ret[] = 'obscured';
|
||||
if(intval($item['item_private']))
|
||||
$ret[] = 'private';
|
||||
if(intval($item['item_private']) === 2)
|
||||
$ret[] = 'direct';
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ function menu_fetch($name,$uid,$observer_xchan) {
|
||||
);
|
||||
if($r) {
|
||||
$x = q("select * from menu_item where mitem_menu_id = %d and mitem_channel_id = %d
|
||||
$sql_options
|
||||
$sql_options
|
||||
order by mitem_order asc, mitem_desc asc",
|
||||
intval($r[0]['menu_id']),
|
||||
intval($uid)
|
||||
@@ -26,7 +26,7 @@ function menu_fetch($name,$uid,$observer_xchan) {
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
function menu_element($channel,$menu) {
|
||||
|
||||
$arr = array();
|
||||
@@ -67,7 +67,7 @@ function menu_element($channel,$menu) {
|
||||
}
|
||||
$arr['items'][] = $entry;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $arr;
|
||||
}
|
||||
@@ -111,7 +111,7 @@ function menu_render($menu, $class='', $edit = false, $var = array()) {
|
||||
$menu['items'][$x]['mitem_desc'] = zidify_links(smilies(bbcode($menu['items'][$x]['mitem_desc'])));
|
||||
}
|
||||
|
||||
$wrap = (! x($var, 'wrap') || $var['wrap'] === 'none' ? false : true);
|
||||
$wrap = ((isset($var['wrap']) && $var['wrap'] === 'none') ? false : true);
|
||||
|
||||
$ret = replace_macros(get_markup_template('usermenu.tpl'),array(
|
||||
'$menu' => $menu['menu'],
|
||||
@@ -168,7 +168,7 @@ function menu_create($arr) {
|
||||
|
||||
$t = datetime_convert();
|
||||
|
||||
$r = q("insert into menu ( menu_name, menu_desc, menu_flags, menu_channel_id, menu_created, menu_edited )
|
||||
$r = q("insert into menu ( menu_name, menu_desc, menu_flags, menu_channel_id, menu_created, menu_edited )
|
||||
values( '%s', '%s', %d, %d, '%s', '%s' )",
|
||||
dbesc($menu_name),
|
||||
dbesc($menu_desc),
|
||||
@@ -260,7 +260,7 @@ function menu_edit($arr) {
|
||||
}
|
||||
|
||||
return q("update menu set menu_name = '%s', menu_desc = '%s', menu_flags = %d, menu_edited = '%s'
|
||||
where menu_id = %d and menu_channel_id = %d",
|
||||
where menu_id = %d and menu_channel_id = %d",
|
||||
dbesc($menu_name),
|
||||
dbesc($menu_desc),
|
||||
intval($menu_flags),
|
||||
@@ -295,7 +295,7 @@ function menu_delete_id($menu_id, $uid) {
|
||||
intval($menu_id),
|
||||
intval($uid)
|
||||
);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -304,11 +304,11 @@ function menu_add_item($menu_id, $uid, $arr) {
|
||||
|
||||
$mitem_link = escape_tags($arr['mitem_link']);
|
||||
$mitem_desc = escape_tags($arr['mitem_desc']);
|
||||
$mitem_order = intval($arr['mitem_order']);
|
||||
$mitem_order = intval($arr['mitem_order']);
|
||||
$mitem_flags = intval($arr['mitem_flags']);
|
||||
|
||||
if(local_channel() == $uid) {
|
||||
$channel = App::get_channel();
|
||||
$channel = App::get_channel();
|
||||
}
|
||||
|
||||
$acl = new Zotlabs\Access\AccessList($channel);
|
||||
@@ -344,12 +344,12 @@ function menu_edit_item($menu_id, $uid, $arr) {
|
||||
$mitem_id = intval($arr['mitem_id']);
|
||||
$mitem_link = escape_tags($arr['mitem_link']);
|
||||
$mitem_desc = escape_tags($arr['mitem_desc']);
|
||||
$mitem_order = intval($arr['mitem_order']);
|
||||
$mitem_order = intval($arr['mitem_order']);
|
||||
$mitem_flags = intval($arr['mitem_flags']);
|
||||
|
||||
|
||||
if(local_channel() == $uid) {
|
||||
$channel = App::get_channel();
|
||||
$channel = App::get_channel();
|
||||
}
|
||||
|
||||
$acl = new Zotlabs\Access\AccessList($channel);
|
||||
@@ -403,7 +403,7 @@ function menu_sync_packet($uid,$observer_hash,$menu_id,$delete = false) {
|
||||
$r = menu_fetch_id($menu_id,$uid);
|
||||
$c = channelx_by_n($uid);
|
||||
if($r) {
|
||||
$m = menu_fetch($r['menu_name'],$uid,$observer_hash);
|
||||
$m = menu_fetch($r['menu_name'],$uid,$observer_hash);
|
||||
if($m) {
|
||||
if($delete)
|
||||
$m['menu_delete'] = 1;
|
||||
|
||||
@@ -1118,9 +1118,9 @@ function discover_by_url($url, $arr = null) {
|
||||
/**
|
||||
* @brief
|
||||
*
|
||||
* @param string $webbie
|
||||
* @param string $webbie (TODO: explain)
|
||||
* @param string $protocol (optional) default empty
|
||||
* @return boolean
|
||||
* @return boolean|string (TODO: explain)
|
||||
*/
|
||||
function discover_by_webbie($webbie, $protocol = '') {
|
||||
|
||||
|
||||
@@ -62,6 +62,8 @@
|
||||
$ogimagetype = $channel['xchan_photo_mimetype'];
|
||||
}
|
||||
|
||||
if (! isset(App::$page['htmlhead']))
|
||||
App::$page['htmlhead'] = '';
|
||||
App::$page['htmlhead'] .= '<meta property="og:title" content="' . htmlspecialchars((isset($ogtitle) ? $ogtitle : $channel['channel_name'])) . '">' . "\r\n";
|
||||
App::$page['htmlhead'] .= '<meta property="og:image" content="' . $ogimage . '">' . "\r\n";
|
||||
App::$page['htmlhead'] .= '<meta property="og:image:type" content="' . $ogimagetype . '">' . "\r\n";
|
||||
|
||||
@@ -89,20 +89,24 @@ function zid($s, $address = '') {
|
||||
}
|
||||
|
||||
|
||||
function strip_query_param($s,$param) {
|
||||
return preg_replace('/[\?&]' . $param . '=(.*?)(&|$)/ism','$2',$s);
|
||||
function strip_query_param($s, $param) {
|
||||
return drop_query_params($s, [$param]);
|
||||
//return preg_replace('/[\?&]' . $param . '=(.*?)(&|$)/ism','$2',$s);
|
||||
}
|
||||
|
||||
function strip_zids($s) {
|
||||
return preg_replace('/[\?&]zid=(.*?)(&|$)/ism','$2',$s);
|
||||
return drop_query_params($s, ['zid']);
|
||||
//return preg_replace('/[\?&]zid=(.*?)(&|$)/ism','$2',$s);
|
||||
}
|
||||
|
||||
function strip_owt($s) {
|
||||
return preg_replace('/[\?&]owt=(.*?)(&|$)/ism','$2',$s);
|
||||
return drop_query_params($s, ['owt']);
|
||||
//return preg_replace('/[\?&]owt=(.*?)(&|$)/ism','$2',$s);
|
||||
}
|
||||
|
||||
function strip_zats($s) {
|
||||
return preg_replace('/[\?&]zat=(.*?)(&|$)/ism','$2',$s);
|
||||
return drop_query_params($s, ['zat']);
|
||||
//return preg_replace('/[\?&]zat=(.*?)(&|$)/ism','$2',$s);
|
||||
}
|
||||
|
||||
function strip_escaped_zids($s) {
|
||||
@@ -112,12 +116,51 @@ function strip_escaped_zids($s) {
|
||||
|
||||
|
||||
function clean_query_string($s = '') {
|
||||
|
||||
$x = (($s) ? $s : \App::$query_string);
|
||||
return drop_query_params($x, ['zid', 'owt', 'zat', 'sort', 'f']);
|
||||
|
||||
/*
|
||||
$x = strip_zids(($s) ? $s : \App::$query_string);
|
||||
$x = strip_owt($x);
|
||||
$x = strip_zats($x);
|
||||
$x = strip_query_param($x,'sort');
|
||||
|
||||
return strip_query_param($x,'f');
|
||||
*/
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Remove parameters from query string.
|
||||
*
|
||||
* @param string $s
|
||||
* The query string
|
||||
* @param array $p
|
||||
* $p array of parameters to remove
|
||||
* @return string
|
||||
*/
|
||||
|
||||
function drop_query_params($s, $p) {
|
||||
$parsed = parse_url($s);
|
||||
|
||||
$query = '';
|
||||
$query_args = null;
|
||||
if(isset($parsed['query'])) {
|
||||
parse_str($parsed['query'], $query_args);
|
||||
}
|
||||
|
||||
if(is_array($query_args)) {
|
||||
foreach($query_args as $k => $v) {
|
||||
if(in_array($k, $p))
|
||||
continue;
|
||||
$query .= (($query) ? '&' : '') . urlencode($k) . '=' . urlencode($v);
|
||||
}
|
||||
}
|
||||
|
||||
if($query)
|
||||
$parsed['query'] = $query;
|
||||
|
||||
return unparse_url($parsed);
|
||||
}
|
||||
|
||||
|
||||
|
||||
26812
util/hmessages.po
26812
util/hmessages.po
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -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["<a href=\"pubsites\">Register at another affiliated hub.</a>"] = "<a href=\"pubsites\">Registrarse en otro hub afiliado.</a>";
|
||||
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 <a href=\"import\">import an existing channel</a> from another location."] = "O <a href=\"import\">importar un canal </a> 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.";
|
||||
|
||||
Binary file not shown.
2159
view/pl/hmessages.po
2159
view/pl/hmessages.po
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -12,7 +12,7 @@ $db_type = '{{$dbtype}}'; // liczba całkowita. 0 lub nieustawienie dla mysql, 1
|
||||
|
||||
/*
|
||||
* Uwaga: wiele z poniższych ustawień będzie dostępnych w panelu administracyjnym
|
||||
* po pomyślnej instalacji serwisu. Po ustawieniu w panelu administracyjnym, opcje
|
||||
* po pomyślnej instalacji portalu. Po ustawieniu w panelu administracyjnym, opcje
|
||||
* te są przechowywane w DB - a ustawienie DB zastępują wszelkie odpowiadające
|
||||
* in ustawienie w tym pliku
|
||||
*
|
||||
@@ -28,7 +28,7 @@ $db_type = '{{$dbtype}}'; // liczba całkowita. 0 lub nieustawienie dla mysql, 1
|
||||
|
||||
App::$config['system']['timezone'] = '{{$timezone}}';
|
||||
|
||||
// Jaki jest adres URL Twojego serwisu? NIE DODAWAJ KOŃCOWEGO UKOŚNIKA!
|
||||
// Jaki jest adres URL Twojego portalu? NIE DODAWAJ KOŃCOWEGO UKOŚNIKA!
|
||||
|
||||
App::$config['system']['baseurl'] = '{{$siteurl}}';
|
||||
App::$config['system']['sitename'] = "Hubzilla";
|
||||
@@ -37,7 +37,7 @@ App::$config['system']['location_hash'] = '{{$site_id}}';
|
||||
// Te wiersze ustawiają dodatkowe nagłówki bezpieczeństwa, które mają być
|
||||
// wysyłane ze wszystkimi odpowiedziami. Możesz ustawić transport_security_header
|
||||
// na 0, jeśli twój serwer już wysyła ten nagłówek. Może okazać się konieczne
|
||||
// wyłączenie content_security_policy, jeśłi chcesz uruchamiać wtyczkę Piwik
|
||||
// wyłączenie content_security_policy, jeśli chcesz uruchamiać wtyczkę Piwik
|
||||
// umieszczać na stronach inne zasoby zewnętrzne.
|
||||
|
||||
App::$config['system']['transport_security_header'] = 1;
|
||||
@@ -61,18 +61,18 @@ App::$config['system']['admin_email'] = '{{$adminmail}}';
|
||||
|
||||
App::$config['system']['verify_email'] = 1;
|
||||
|
||||
// Ograniczenia dostępu do serwisu. Domyślnie będziemy tworzyć witryny prywatne.
|
||||
// Ograniczenia dostępu do portalu. Domyślnie tworzone są portale prywatne.
|
||||
// Masz do wyboru ACCESS_PRIVATE, ACCESS_PAID, ACCESS_TIERED i ACCESS_FREE.
|
||||
// Jeśli opuścisz ustawienie REGISTER_OPEN powyżej, każdy bedzie się mógł
|
||||
// zarejestrować na Twoim serwisiewitryna, jednak serwis ten nie będzie nigdzie
|
||||
// wyświetlany jako węzeł z otwartą resjestracją.
|
||||
// Używamy polityki dostępu do systemu (poniżej) aby określić, czy serwis ma być
|
||||
// umieszczony w katalogu jako otwarty węzeł, w którym każdy może tworzyć konta.
|
||||
// zarejestrować na Twoim portalu, jednak portal ten nie będzie nigdzie
|
||||
// wyświetlany jako portal z otwartą resjestracją.
|
||||
// Używamy polityki dostępu do systemu (poniżej) aby określić, czy portal ma być
|
||||
// umieszczony w katalogu jako portal otwarty, w którym każdy może tworzyć konta.
|
||||
// Twój wybór, to: paid, tiered lub free.
|
||||
|
||||
App::$config['system']['access_policy'] = ACCESS_PRIVATE;
|
||||
|
||||
// Jeśli prowadzisz witrynę publiczną, możesz zezwolić, aby ludzie byli kierowani
|
||||
// Jeśli prowadzisz portal publiczny, możesz zezwolić, aby osoby były kierowane
|
||||
// do "strony sprzedaży", na której można szczegółowo opisać funkcje, zasady lub
|
||||
// plany usług. To musi być bezwzględny adres URL zaczynający się od http:// lub
|
||||
// https: //.
|
||||
|
||||
1
view/pl/invite.casual.subject.tpl
Normal file
1
view/pl/invite.casual.subject.tpl
Normal file
@@ -0,0 +1 @@
|
||||
Dołącz do nas na {{$projectname}} {{$invite_loc}}
|
||||
16
view/pl/invite.casual.tpl
Normal file
16
view/pl/invite.casual.tpl
Normal file
@@ -0,0 +1,16 @@
|
||||
{{* nieformalny szablon PL, serdecznego zaproszenia dla tych co mnie znają *}}
|
||||
Dołącz do mojej społeczności na {{$projectname}}.
|
||||
{{$linktxt}} {{$invite_where}}
|
||||
|
||||
Musisz podać ten kod zaproszenia:
|
||||
{{$invite_code}}
|
||||
|
||||
lub:
|
||||
|
||||
1. Zarejestruj się na jakimś innym portalu {{$projectname}}
|
||||
(wszystkie są ze sobą połączone).
|
||||
2. Wprowadź mój adres sieciowy {{$Projectname}} w polu wyszukiwania portalu.
|
||||
{{$invite_whereami}}
|
||||
lub odwiedź {{$invite_whoami}}
|
||||
3. Kliknij [Connect]
|
||||
|
||||
1
view/pl/invite.formal.subject.tpl
Normal file
1
view/pl/invite.formal.subject.tpl
Normal file
@@ -0,0 +1 @@
|
||||
Zaproszenie na Twój dostęp do sieci na {{$invite_loc}}
|
||||
32
view/pl/invite.formal.tpl
Normal file
32
view/pl/invite.formal.tpl
Normal file
@@ -0,0 +1,32 @@
|
||||
{{* Formalny szablon PL zaproszenia o bardzo uprzejmej formie, dla takich osób jak członkowie firmy lub partnerzy biznesowi *}}
|
||||
Proszę o dołączenie do platformy komunikacyjnej {{$projectname}}. Ta wiadomość
|
||||
zawiera niezbędne dane dla pierwszego połączenia.
|
||||
|
||||
Portal jest osiągalny pod adresem: {{$invite_whereami}}
|
||||
|
||||
Twój dostęp został przygotowany z kodem zaproszenia
|
||||
|
||||
{{$invite_code}}
|
||||
|
||||
który należy wpisać w polu formularza rejestracyjnego, po uprzednim kliknięciu
|
||||
linku "Mam kod zaproszenia". Proszę podać również swój adres e-mail w następnym polu.
|
||||
Chcemy Cię poinformować, że kod zaproszenia jest powiązany z Twoim adresem e-mail
|
||||
i jest niezbywalny.
|
||||
|
||||
W formularzu tym musisz podać hasło do konta, które jest i powinno pozostać znane
|
||||
tylko Tobie. Gwiazdkowane hasło należy wpisać dwukrotnie, aby zapobiec błędnemu
|
||||
wpisaniu hasła. Hasło to będzie później wymagane podczas logowania się na portalu.
|
||||
|
||||
Po wysłaniu formularza rejestracyjnego, otrzymasz na swój adres e-mail następną
|
||||
wiadomość z kodem weryfikacyjnym, który jest odnośnikiem do formularza, w którym
|
||||
trzeba będzie podać swój adres e-mail. Ten rodzaj niedogodności pomaga zwiększyć
|
||||
bezpieczeństwo portalu.
|
||||
|
||||
Twoja rejestracja będzie musiała być zatwierdzona przez administratora portalu.
|
||||
Prosimy o cierpliwość, ponieważ nie zostanie to wykonane natychmiast.
|
||||
|
||||
Z poważaniem,
|
||||
i życzeniami odniesienia jak największego sukcesu na naszym portalu
|
||||
|
||||
Zrzeczenie się:
|
||||
...
|
||||
1
view/pl/invite.material.subject.tpl
Normal file
1
view/pl/invite.material.subject.tpl
Normal file
@@ -0,0 +1 @@
|
||||
Zaproszenie {{$invite_loc}}
|
||||
1
view/pl/invite.material.tpl
Normal file
1
view/pl/invite.material.tpl
Normal file
@@ -0,0 +1 @@
|
||||
{{* szablon PL dla zaproszenia zawierającego niezbędne dane potrzebne do zarejestrowania się *}}
|
||||
@@ -14,10 +14,11 @@ Cайт: {{$siteurl}}
|
||||
{{$hash}}
|
||||
|
||||
|
||||
{{if $due}}{{$due}}{{/ if}}
|
||||
|
||||
{{if $timeframe}}
|
||||
Этот код действителен с {{$timeframe.0}} UTC и до {{$timeframe.1}} UTC.
|
||||
|
||||
|
||||
{{/if}}
|
||||
Если вы зарегистрировали эту учетную запись, введите код подтверждения при запросе или перейдите по следующей ссылке:
|
||||
|
||||
{{$siteurl}}/regate/{{$mail}}
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
{{include file="field_checkbox.tpl" field=$remember_me}}
|
||||
<button type="submit" name="submit" class="btn btn-block btn-primary">{{$login}}</button>
|
||||
</div>
|
||||
<div id="login-extra-links">
|
||||
{{if $register}}<a href="{{$register.link}}" title="{{$register.title}}" id="register-link" class="pull-right">{{$register.desc}}</a>{{/if}}
|
||||
<div id="login-extra-links" class="clearfix">
|
||||
{{if $register}}<a href="{{$register.link}}" title="{{$register.title}}" id="register-link" class="float-right">{{$register.desc}}</a>{{/if}}
|
||||
<a href="lostpass" title="{{$lostpass}}" id="lost-password-link" >{{$lostlink}}</a>
|
||||
</div>
|
||||
<hr>
|
||||
|
||||
Reference in New Issue
Block a user