diff options
682 files changed, 12152 insertions, 830 deletions
diff --git a/Zotlabs/Lib/Enotify.php b/Zotlabs/Lib/Enotify.php index 12dbfee7f..6d5e249ef 100644 --- a/Zotlabs/Lib/Enotify.php +++ b/Zotlabs/Lib/Enotify.php @@ -910,14 +910,13 @@ class Enotify { } static public function format_notify($tt) { - $message = trim(strip_tags(bbcode($tt['msg']))); if(strpos($message, $tt['xname']) === 0) $message = substr($message, strlen($tt['xname']) + 1); $x = [ - 'notify_link' => $tt['link'], + 'notify_link' => (($tt['ntype'] === NOTIFY_INTRO) ? z_root() . '/notify/view/' . $tt['id'] : $tt['link']), 'name' => $tt['xname'], 'url' => $tt['url'], 'photo' => $tt['photo'], @@ -929,11 +928,9 @@ class Enotify { ]; return $x; - } static public function format_intros($rr) { - return [ 'notify_link' => z_root() . '/connections#' . $rr['abook_id'], 'name' => $rr['xchan_name'], diff --git a/Zotlabs/Lib/JcsEddsa2022.php b/Zotlabs/Lib/JcsEddsa2022.php index 14f16c94b..c56f093af 100644 --- a/Zotlabs/Lib/JcsEddsa2022.php +++ b/Zotlabs/Lib/JcsEddsa2022.php @@ -7,11 +7,28 @@ use StephenHill\Base58; class JcsEddsa2022 { - public function __construct() { - return $this; - } - + /** + * Sign arbitrary data with the keys of the provided channel. + * + * @param $data The data to be signed. + * @param array $channel A channel as an array of key/value pairs. + * + * @return An array with the following fields: + * - `type`: The type of signature, always `DataIntegrityProof`. + * - `cryptosuite`: The cryptographic algorithm used, always `eddsa-jcs-2022`. + * - `created`: The UTC date and timestamp when the signature was created. + * - `verificationMethod`: The channel URL and the public key separated by a `#`. + * - `proofPurpose`: The purpose of the signature, always `assertionMethod`. + * - `proofValue`: The signature itself. + * + * @throws JcsEddsa2022SignatureException if the channel is missing, or + * don't have valid keys. + */ public function sign($data, $channel): array { + if (!is_array($channel) || !isset($channel['channel_epubkey'], $channel['channel_eprvkey'])) { + throw new JcsEddsa2022SignException('Invalid or missing channel provided.'); + } + $base58 = new Base58(); $pubkey = (new Multibase())->publicKey($channel['channel_epubkey']); $options = [ diff --git a/Zotlabs/Lib/JcsEddsa2022SignException.php b/Zotlabs/Lib/JcsEddsa2022SignException.php new file mode 100644 index 000000000..81d02d631 --- /dev/null +++ b/Zotlabs/Lib/JcsEddsa2022SignException.php @@ -0,0 +1,15 @@ +<?php +/* + * SPDX-FileCopyrightText: 2025 The Hubzilla Community + * SPDX-FileContributor: Harald Eilertsen <haraldei@anduin.net> + * + * SPDX-License-Identifier: MIT + */ + +namespace Zotlabs\Lib; + +use Exception; + +class JcsEddsa2022SignException extends Exception +{ +} diff --git a/Zotlabs/Lib/ThreadItem.php b/Zotlabs/Lib/ThreadItem.php index 5bb658bba..dee64caac 100644 --- a/Zotlabs/Lib/ThreadItem.php +++ b/Zotlabs/Lib/ThreadItem.php @@ -206,9 +206,9 @@ class ThreadItem { } if (in_array($item['obj_type'], ['Event', ACTIVITY_OBJ_EVENT])) { - $response_verbs[] = 'attendyes'; - $response_verbs[] = 'attendno'; - $response_verbs[] = 'attendmaybe'; + $response_verbs[] = 'accept'; + $response_verbs[] = 'reject'; + $response_verbs[] = 'tentativeaccept'; if($this->is_commentable() && $observer) { $isevent = true; $attend = array( t('I will attend'), t('I will not attend'), t('I might attend')); @@ -222,7 +222,6 @@ class ThreadItem { $response_verbs[] = 'comment'; $responses = get_responses($response_verbs, $item); - /* * We should avoid doing this all the time, but it depends on the conversation mode * And the conv mode may change when we change the conv, or it changes its mode @@ -231,7 +230,13 @@ class ThreadItem { $this->check_wall_to_wall(); + $children = $this->get_children(); + $children_count = count($children); + if($this->is_toplevel()) { + $conv->comments_total = $responses['comment']['count'] ?? 0; + $conv->comments_loaded = $children_count; + if((local_channel() && $conv->get_profile_owner() === local_channel()) || (local_channel() && App::$module === 'pubstream')) { $star = [ 'toggle' => t("Toggle Star Status"), @@ -243,7 +248,6 @@ class ThreadItem { $is_comment = true; } - $verified = (intval($item['item_verified']) ? t('Message signature validated') : ''); $forged = ((($item['sig']) && (! intval($item['item_verified']))) ? t('Message signature incorrect') : ''); $unverified = '' ; // (($this->is_wall_to_wall() && (! intval($item['item_verified']))) ? t('Message cannot be verified') : ''); @@ -324,9 +328,8 @@ class ThreadItem { $viewthread = z_root() . '/channel/' . $owner_address . '?f=&mid=' . urlencode(gen_link_id($item['mid'])); $comment_count_txt = ['label' => sprintf(tt('%d comment', '%d comments', $total_children), $total_children), 'count' => $total_children]; - $list_unseen_txt = $unseen_comments ? ['label' => sprintf(t('%d unseen'), $unseen_comments), 'count' => $unseen_comments] : []; - $children = $this->get_children(); + $list_unseen_txt = $unseen_comments ? ['label' => sprintf(t('%d unseen'), $unseen_comments), 'count' => $unseen_comments] : []; $has_tags = (($body['tags'] || $body['categories'] || $body['mentions'] || $body['attachments'] || $body['folders']) ? true : false); @@ -350,6 +353,21 @@ class ThreadItem { $contact = App::$contacts[$item['author_xchan']]; } + $load_more = false; + $load_more_title = ''; + $comments_total_percent = 0; + if ($conv->comments_total > $conv->comments_loaded) { + // provide a load more comments button + $load_more = true; + $load_more_title = sprintf(t('Load the next few of total %d replies'), $conv->comments_total); + $comments_total_percent = round(100 * 3 / $conv->comments_total); + } + + $expand = ''; + if ($this->threaded && !empty($item['comment_count'] && !$this->is_toplevel())) { + $expand = t('Expand Replies'); + } + $tmp_item = array( 'template' => $this->get_template(), 'mode' => $mode, @@ -424,6 +442,7 @@ class ThreadItem { 'share' => $share, 'embed' => $embed, 'rawmid' => $item['mid'], + 'parent_mid' => $item['parent_mid'], 'plink' => get_plink($item), 'edpost' => $edpost, 'star' => ((feature_enabled($conv->get_profile_owner(),'star_posts') && ($item['item_type'] == ITEM_TYPE_POST)) ? $star : ''), @@ -463,18 +482,23 @@ class ThreadItem { 'reaction_str' => [t('Add yours'), t('Remove yours')], 'is_contained' => $this->is_toplevel() && str_contains($item['tgt_type'], 'Collection'), 'observer_activity' => [ - 'like' => intval($item['observer_liked'] ?? 0), - 'dislike' => intval($item['observer_disliked'] ?? 0), - 'announce' => intval($item['observer_announced'] ?? 0), - 'comment' => intval($item['observer_commented'] ?? 0), - 'attendyes' => intval($item['observer_accepted'] ?? 0), - 'attendno' => intval($item['observer_rejected'] ?? 0), - 'attendmaybe' => intval($item['observer_tentativelyaccepted'] ?? 0) + 'like' => intval($item['observer_like_count'] ?? 0), + 'dislike' => intval($item['observer_dislike_count'] ?? 0), + 'announce' => intval($item['observer_announce_count'] ?? 0), + 'comment' => intval($item['observer_comment_count'] ?? 0), + 'accept' => intval($item['observer_accept_count'] ?? 0), + 'reject' => intval($item['observer_reject_count'] ?? 0), + 'tentativeaccept' => intval($item['observer_tentativeaccept_count'] ?? 0) ], 'threaded' => $this->threaded, 'blog_mode' => $this->get_display_mode() === 'list', 'collapse_comments' => t('show less'), - 'expand_comments' => $this->threaded ? t('show more') : t('show all') + 'expand_comments' => $this->threaded ? t('show more') : t('show all'), + 'load_more' => $load_more, + 'load_more_title' => $load_more_title, + 'comments_total' => $conv->comments_total, + 'comments_total_percent' => $comments_total_percent, + 'expand' => $expand ); $arr = array('item' => $item, 'output' => $tmp_item); @@ -483,20 +507,19 @@ class ThreadItem { $result = $arr['output']; $result['children'] = array(); - $nb_children = count($children); - $visible_comments = Config::Get('system', 'expanded_comments', 3); + $visible_comments = 3; // Config::Get('system', 'expanded_comments', 3); - if(($this->get_display_mode() === 'normal') && ($nb_children > 0)) { + if(($this->get_display_mode() === 'normal') && ($children_count > 0)) { foreach($children as $child) { $result['children'][] = $child->get_template_data($thread_level + 1, $conv_flags); } // Collapse - if($thread_level === 1 && $nb_children > $visible_comments) { + if($thread_level === 1 && $children_count > $visible_comments) { $result['children'][0]['comment_firstcollapsed'] = true; $result['children'][0]['num_comments'] = $comment_count_txt['label']; - $result['children'][$nb_children - ($visible_comments + 1)]['comment_lastcollapsed'] = true; + $result['children'][$children_count - ($visible_comments + 1)]['comment_lastcollapsed'] = true; } } diff --git a/Zotlabs/Lib/ThreadStream.php b/Zotlabs/Lib/ThreadStream.php index ee18d8de1..1d968fa1a 100644 --- a/Zotlabs/Lib/ThreadStream.php +++ b/Zotlabs/Lib/ThreadStream.php @@ -25,6 +25,8 @@ class ThreadStream { public $reload = ''; private $cipher = 'AES-128-CCM'; public $mid_uuid_map = []; + public $comments_total = 0; + public $comments_loaded = 0; // $prepared_item is for use by alternate conversation structures such as photos diff --git a/Zotlabs/Module/Channel.php b/Zotlabs/Module/Channel.php index 9671cedf3..f73f25d5f 100644 --- a/Zotlabs/Module/Channel.php +++ b/Zotlabs/Module/Channel.php @@ -337,7 +337,7 @@ class Channel extends Controller { if (($update) && (!$load)) { if ($mid) { - $r = q("SELECT parent AS item_id from item where $identifier = '%s' and uid = %d $item_normal_update + $r = q("SELECT *, parent AS item_id from item where $identifier = '%s' and uid = %d $item_normal_update AND item_wall = 1 $simple_update $permission_sql $sql_extra limit 1", dbesc($mid), intval(App::$profile['profile_uid']) @@ -386,7 +386,7 @@ class Channel extends Controller { if ($noscript_content || $load) { if ($mid) { - $r = q("SELECT parent AS item_id from item where $identifier = '%s' and uid = %d $item_normal + $r = q("SELECT *, parent AS item_id from item where $identifier = '%s' and uid = %d $item_normal AND item_wall = 1 $permission_sql $sql_extra limit 1", dbesc($mid), intval(App::$profile['profile_uid']) @@ -417,12 +417,15 @@ class Channel extends Controller { } } if ($r) { - $parents_str = ids_to_querystr($r, 'item_id'); + $thr_parents = null; + if ($mid) { + $thr_parents = get_recursive_thr_parents($r[0]); + } - $r = items_by_parent_ids($parents_str, permission_sql: $permission_sql, blog_mode: $blog_mode); + $items = items_by_parent_ids($r, $thr_parents, $permission_sql, $blog_mode); - xchan_query($r); - $items = fetch_post_tags($r, true); + xchan_query($items); + $items = fetch_post_tags($items, true); $items = conv_sort($items, $ordering); if ($load && $mid && (!count($items))) { diff --git a/Zotlabs/Module/Display.php b/Zotlabs/Module/Display.php index 07973431c..094466665 100644 --- a/Zotlabs/Module/Display.php +++ b/Zotlabs/Module/Display.php @@ -288,15 +288,12 @@ class Display extends Controller { } if($r) { - $parents_str = ids_to_querystr($r,'item_id'); - if($parents_str) { - $thr_parents = get_recursive_thr_parents($target_item); - $items = items_by_parent_ids($parents_str, $thr_parents, $permission_sql); - - xchan_query($items); - $items = fetch_post_tags($items,true); - $items = conv_sort($items,'created'); - } + $thr_parents = get_recursive_thr_parents($target_item); + $items = items_by_parent_ids($r, $thr_parents, $permission_sql); + + xchan_query($items); + $items = fetch_post_tags($items,true); + $items = conv_sort($items,'created'); } else { $items = array(); diff --git a/Zotlabs/Module/Hq.php b/Zotlabs/Module/Hq.php index 562278973..241a5101a 100644 --- a/Zotlabs/Module/Hq.php +++ b/Zotlabs/Module/Hq.php @@ -201,7 +201,7 @@ class Hq extends \Zotlabs\Web\Controller { if($r) { $thr_parents = get_recursive_thr_parents($target_item); - $items = items_by_parent_ids($r[0]['item_id'], $thr_parents); + $items = items_by_parent_ids($r, $thr_parents); xchan_query($items,true,(($sys_item) ? local_channel() : 0)); $items = fetch_post_tags($items,true); diff --git a/Zotlabs/Module/Like.php b/Zotlabs/Module/Like.php index 218d35f1e..52c559a17 100644 --- a/Zotlabs/Module/Like.php +++ b/Zotlabs/Module/Like.php @@ -22,9 +22,9 @@ class Like extends Controller { 'like' => 'Like', 'dislike' => 'Dislike', 'announce' => ACTIVITY_SHARE, - 'attendyes' => 'Accept', - 'attendno' => 'Reject', - 'attendmaybe' => 'TentativeAccept' + 'accept' => 'Accept', + 'reject' => 'Reject', + 'tentativeaccept' => 'TentativeAccept' ]; // unlike (etc.) reactions are an undo of positive reactions, rather than a negative action. @@ -67,7 +67,7 @@ class Like extends Controller { $items = conv_sort($items, 'commented'); } else { - $item = item_by_item_id($arr['item']['id']); + $item = item_by_item_id($arr['item']['id'], $arr['item']['parent']); xchan_query($item, true); $item = fetch_post_tags($item, true); } @@ -474,11 +474,11 @@ class Like extends Controller { $bodyverb = t('%1$s likes %2$s\'s %3$s'); if ($verb === 'dislike') $bodyverb = t('%1$s doesn\'t like %2$s\'s %3$s'); - if ($verb === 'attendyes') + if ($verb === 'accept') $bodyverb = t('%1$s is attending %2$s\'s %3$s'); - if ($verb === 'attendno') + if ($verb === 'reject') $bodyverb = t('%1$s is not attending %2$s\'s %3$s'); - if ($verb === 'attendmaybe') + if ($verb === 'tentativeaccept') $bodyverb = t('%1$s may attend %2$s\'s %3$s'); if (!isset($bodyverb)) @@ -561,7 +561,7 @@ class Like extends Controller { call_hooks('post_local_end', $arr); - if ($is_rsvp && in_array($verb, ['attendyes', 'attendmaybe'])) { + if ($is_rsvp && in_array($verb, ['accept', 'tentativeaccept'])) { event_addtocal($item_id, local_channel()); } diff --git a/Zotlabs/Module/Network.php b/Zotlabs/Module/Network.php index fd30adccc..f95d92fe2 100644 --- a/Zotlabs/Module/Network.php +++ b/Zotlabs/Module/Network.php @@ -507,9 +507,7 @@ class Network extends \Zotlabs\Web\Controller { // Then fetch all the children of the parents that are on this page if($r) { - $parents_str = ids_to_querystr($r, 'item_id'); - - $items = items_by_parent_ids($parents_str, blog_mode: $blog_mode); + $items = items_by_parent_ids($r, blog_mode: $blog_mode); xchan_query($items, true); $items = fetch_post_tags($items, true); diff --git a/Zotlabs/Module/Pubstream.php b/Zotlabs/Module/Pubstream.php index 79245f9c2..99b8ab587 100644 --- a/Zotlabs/Module/Pubstream.php +++ b/Zotlabs/Module/Pubstream.php @@ -251,10 +251,7 @@ class Pubstream extends \Zotlabs\Web\Controller { $parents_str = ''; if($r) { - - $parents_str = ids_to_querystr($r,'item_id'); - - $items = items_by_parent_ids($parents_str); + $items = items_by_parent_ids($r); // use effective_uid param of xchan_query to help sort out comment permission // for sys_channel owned items. diff --git a/Zotlabs/Module/Request.php b/Zotlabs/Module/Request.php index bfd75ad95..439f56282 100644 --- a/Zotlabs/Module/Request.php +++ b/Zotlabs/Module/Request.php @@ -12,9 +12,9 @@ class Request extends Controller 'like' => 'Like', 'dislike' => 'Dislike', 'announce' => 'Announce', - 'attendyes' => 'Accept', - 'attendno' => 'Reject', - 'attendmaybe' => 'TentativeAccept' + 'accept' => 'Accept', + 'reject' => 'Reject', + 'tentativeaccept' => 'TentativeAccept' ]; if (array_key_exists($verb, $verbs)) { @@ -29,13 +29,24 @@ class Request extends Controller { $mid = $_GET['mid']; $parent = intval($_GET['parent']); + + $offset = null; + if ($_GET['verb'] === 'load') { + $offset = intval($_GET['offset']); + } + $module = strip_tags($_GET['module']); - $items = items_by_thr_parent($mid, $parent); + $items = items_by_thr_parent($mid, $parent, $offset); xchan_query($items); $items = fetch_post_tags($items,true); + if ($module === 'channel') { + $parts = explode('@', $items[0]['owner']['xchan_addr']); + profile_load($parts[0]); + } + $ret['html'] = conversation($items, $module, true, 'r_preview'); json_return_and_die($ret); @@ -44,7 +55,7 @@ class Request extends Controller public function get() : string { - if ($_GET['verb'] === 'comment') { + if (in_array($_GET['verb'], ['comment', 'load'])) { return self::processSubthreadRequest(); } diff --git a/Zotlabs/Render/Theme.php b/Zotlabs/Render/Theme.php index 9403d21a3..2faf3631a 100644 --- a/Zotlabs/Render/Theme.php +++ b/Zotlabs/Render/Theme.php @@ -87,8 +87,13 @@ class Theme { // Find any theme at all and use it. $fallback = array_merge(glob('view/theme/*/css/style.css'), glob('view/theme/*/php/style.php')); - if(count($fallback)) - return(array(str_replace('view/theme/', '', substr($fallback[0], 0, -14)))); + + if (empty($fallback)) { + logger('Unable to find a theme'); + http_status_exit(500, 'internal server error'); + } + + return(array(str_replace('view/theme/', '', substr($fallback[0], 0, -14)))); } diff --git a/Zotlabs/Widget/Messages.php b/Zotlabs/Widget/Messages.php index 761679120..cc1811ffc 100644 --- a/Zotlabs/Widget/Messages.php +++ b/Zotlabs/Widget/Messages.php @@ -86,8 +86,6 @@ class Messages { $entries = []; $limit = 30; $order_sql = 'i.created DESC'; - $dummy_order_sql = ''; - $filter_sql = ''; $loadtime = (($offset) ? $_SESSION['messages_loadtime'] : datetime_convert()); $vnotify = get_pconfig(local_channel(), 'system', 'vnotify', -1); @@ -103,14 +101,18 @@ class Messages { $vnotify_sql_i = " AND i.verb NOT IN ('Dislike', '" . dbesc(ACTIVITY_DISLIKE) . "') "; } + $filter_sql = ''; if($type !== 'filed' && $author) { $filter_sql = " AND (i.owner_xchan = '" . protect_sprintf(dbesc($author)) . "') "; } + $filed_filter_sql = ''; if($type === 'filed' && $file) { $filed_filter_sql = " AND (term.term = '" . protect_sprintf(dbesc($file)) . "') "; } + $dummy_order_sql = ''; + switch($type) { case 'direct': $type_sql = ' AND i.item_private = 2 AND i.item_thread_top = 1 '; diff --git a/Zotlabs/Widget/Notifications.php b/Zotlabs/Widget/Notifications.php index fb256ec99..f9cee6e71 100644 --- a/Zotlabs/Widget/Notifications.php +++ b/Zotlabs/Widget/Notifications.php @@ -30,7 +30,7 @@ class Notifications { 'label' => t('Mark all read') ], 'filter' => [ - 'posts_label' => t('Conversation starters only'), + 'posts_label' => t('Conversation starters'), 'name_label' => t('Filter by name or address') ] ]; @@ -50,7 +50,7 @@ class Notifications { 'label' => t('Mark all seen') ], 'filter' => [ - 'posts_label' => t('Conversation starters only'), + 'posts_label' => t('Conversation starters'), 'name_label' => t('Filter by name or address') ] ]; @@ -69,7 +69,7 @@ class Notifications { 'label' => t('Mark all read') ], 'filter' => [ - 'posts_label' => t('Conversation starters only'), + 'posts_label' => t('Conversation starters'), 'name_label' => t('Filter by name or address') ] ]; @@ -163,7 +163,7 @@ class Notifications { ], */ 'filter' => [ - 'posts_label' => t('Conversation starters only'), + 'posts_label' => t('Conversation starters'), 'name_label' => t('Filter by name or address') ] ]; diff --git a/Zotlabs/Widget/Pinned.php b/Zotlabs/Widget/Pinned.php index 9daf396b8..7b95d3bc6 100644 --- a/Zotlabs/Widget/Pinned.php +++ b/Zotlabs/Widget/Pinned.php @@ -197,12 +197,12 @@ class Pinned { return []; - $r = q("SELECT parent FROM item WHERE uuid IN ( '%s' ) AND uid = %d AND id = parent AND item_private = 0", + $r = q("SELECT parent AS item_id FROM item WHERE uuid IN ( '%s' ) AND uid = %d AND id = parent AND item_private = 0", dbesc(implode(",", $mids_list)), intval($this->uid) ); - return items_by_parent_ids($r[0]['parent'], blog_mode: true); + return items_by_parent_ids($r, blog_mode: true); } diff --git a/Zotlabs/Zot6/Zot6Handler.php b/Zotlabs/Zot6/Zot6Handler.php index 2ef9e3b8d..1716ff84b 100644 --- a/Zotlabs/Zot6/Zot6Handler.php +++ b/Zotlabs/Zot6/Zot6Handler.php @@ -12,7 +12,7 @@ class Zot6Handler implements IHandler { } function Rekey($sender, $data, $hub) { - return self::reply_rekey_request($sender, $data, $hub); + return self::rekey_request($sender, $data, $hub); } function Refresh($sender, $recipients, $hub, $force) { @@ -70,7 +70,7 @@ require_once('include/security.php'); define('PLATFORM_NAME', 'hubzilla'); -define('STD_VERSION', '10.3.34'); +define('STD_VERSION', '10.3.59'); define('ZOT_REVISION', '6.0'); define('DB_UPDATE_VERSION', 1263); @@ -657,8 +657,10 @@ function sys_boot(): bool { // allow somebody to set some initial settings just in case they can't // install without special fiddling - if (App::$install && file_exists('.htpreconfig.php')) + if (App::$install && file_exists('.htpreconfig.php')) { + // @phpstan-ignore include.fileNotFound @include('.htpreconfig.php'); + } if (array_key_exists('default_timezone', get_defined_vars())) { App::$config['system']['timezone'] = $default_timezone; @@ -870,6 +872,9 @@ class App { */ public static $template_engine_instance = []; + /// Page layouts for comanche + public static array $page_layouts = []; + private static $ldelim = [ 'internal' => '', 'smarty3' => '{{' diff --git a/doc/de/SUMMARY.md b/doc/de/SUMMARY.md new file mode 100644 index 000000000..74e5a442a --- /dev/null +++ b/doc/de/SUMMARY.md @@ -0,0 +1,142 @@ +# Summary + +- [Über](./about.md) + - [Grundlegende Konzepte von Hubzilla](./basicconcepts.md) + - [Funktionen](./functions.md) + - [Glossar](./glossary.md) + - [Oberfläche / Bezeichnungen](ui.md) +- [Benutzerhandbuch](./usermanual/overview.md) + - [Anmeldung / Registrierung](./usermanual/registration.md) + - [Konten, Profile, Kanäle](./usermanual/accounts_profiles_channels_basics.md) + - [Kanäle](./usermanual/channels.md) + - [Kanäle erstellen](./usermanual/create_channels.md) + - [Kanalrollen](./usermanual/channel_roles.md) + - [Profile](./usermanual/profiles.md) + - [Einstellungen](./usermanual/settings.md) + - [Konto-Einstellungen](./usermanual/account_settings.md) + - [Kanal-Einstellungen](./usermanual/channel_settings.md) + - [Privacy-Einstellungen](./usermanual/privacy_settings.md) + - [Anzeige-Einstellungen](./usermanual/display_settings.md) + - [Klon-Adressen verwalten](./usermanual/channel_locations.md) + - [Stream-Einstellungen](./usermanual/stream_settings.md) + - [Zusätzliche Funktionen (verborgene Einstellungen)](./usermanual/additional_features.md) + - [Verbinden mit Kanälen](./usermanual/connecting_with_channels.md) + - [Posten](./usermanual/posting.md) + - [Kommentieren](./usermanual/commenting.md) + - [Bilder einfügen](./usermanual/insert_images.md) + - [bbCode](./usermanual/bbcode.md) + - [Das Grid](./usermanual/the_grid.md) + - [Der Stream](./usermanual/the_stream.md) + - [Mit Postings interagieren](./usermanual/interact.md) + - [Repeat](./usermanual/repeat.md) + - [Teilen](./usermanual/share.md) + - [Link zur Quelle](./usermanual/link_to_source.md) + - [In Ordner speichern](./usermanual/save_to_folder.md) + - [Markierungsstatus (Stern) umschalten](./usermanual/toggle_star_status.md) + - [Quellcode anzeigen](./usermanual/show_source_code.md) + - [Unterhaltung folgen / nicht mehr folgen](./usermanual/follow_conversation.md) + - [Löschen](./usermanual/delete.md) + - [Konversationsmerkmale](./usermanual/conversation_features.md) + - [Inhaltsfilter](./usermanual/content_filters.md) + - [Öffentlicher Beitrags-Stream](./usermanual/public_stream.md) + - [Apps](./usermanual/apps.md) + - [wichtige Apps](./usermanual/important_apps.md) + - [Verbindungen](./usermanual/connections.md) + - [Verbindungs-Editor](./usermanual/connection_editor.md) + - [Diaspora-Kompatibilität](./usermanual/diaspora_compat.md) + - [Verzeichnis](./usermanual/directory.md) + - [Erweiterte Verzeichnissuche](./usermanual/AdvancedSearch.md) + - [Kanäle blockieren/ignorieren/archivieren/verstecken](./usermanual/blocking_channels.md) + - [Superblock](./usermanual/superblock.md) + - [Berechtigungen](./usermanual/permissions.md) + - [Berechtigungen für Inhalte](./usermanual/permissions_content.md) + - [Berechtigungen - Benutzerdefinierte Kanalrollen](./usermanual/permissions_channel_roles.md) + - [Berechtigungen - Kontaktrollen](./usermanual/permissions_contact_roles.md) + - [Direktnachrichten](./usermanual/direct_messages.md) + - [Erwähnungen](./usermanual/mentions.md) + - [Tags](./usermanual/tags.md) + - [Bookmarks](./usermanual/bookmarks.md) + - [Suche](./usermanual/search.md) + - [Artikel](./usermanual/article.md) + - [Dateien](./usermanual/files.md) + - [Fotos](./usermanual/photos.md) + - [Cloudspeicher](./usermanual/cloud_storage.md) + - [Galerie](./usermanual/gallery.md) + - [Chaträume](./usermanual/chat_rooms.md) + - [Gastzugang](./usermanual/guest_access.md) + - [Privacy Gruppen](./usermanual/privacy_groups.md) + - [Kalender](./usermanual/calendar.md) + - [Adressbuch](./usermanual/addressbook.md) + - [Wikis](./usermanual/wikis.md) + - [Inhaltswarnung/NSFW](./usermanual/NSFW.md) + - [Klonen](./usermanual/clone.md) + - [Webseiten](./usermanual/websites.md) + - [Comanche Seitenbeschreibungssprache](./usermanual/comanche.md) + - [Verschlüsselung](./usermanual/encryption.md) + - [Tipps zum Schutz der Privatsphäre](./usermanual/protection_of_privacy.md) + - [Kanal löschen](./usermanual/deleting_channel.md) + - [Account löschen](./usermanual/delete_account.md) +- [Tutorials](./tutorials/tutorials.md) + - [Mit Hubzilla Schritt für Schritt ins Fediverse](./tutorials/step_with_hubzilla.md) + - [Hubzilla optisch anpassen](./tutorials/customise_look.md) + - [Ein abgeleitetes Thema erstellen](./tutorials/DerivedTheme1.md) +- [Handbuch für Administratoren](./adminmanual/manual_for_administrators.md) + - [Wo Sie weitere Hilfe finden](./adminmanual/further_help.md) + - [Bevor Sie beginnen](./adminmanual/before_you_start.md) + - [Installation](./adminmanual/installation.md) + - [Anforderungen](./adminmanual/installation_requirements.md) + - [Manuelle Installation](./adminmanual/manual_installation.md) + - [Automatisierte Installation über das Shell-Skript .homeinstall](./adminmanual/automated_installation.md) + - [Installation mittels Docker](./adminmanual/Installation_using_docker.md) + - [Empfohlene Addons](./adminmanual/recommended_addons.md) + - [Föderations Addons](./adminmanual/federation_addons.md) + - [Probleme nach einer Aktualisierung](./adminmanual/problems-following-an-update.md) + - [Service-Klassen](./adminmanual/service_classes.md) + - [Verwaltung der Themen](./adminmanual/theme_management.md) + - [Erstellen von Seitenvorlagen](./adminmanual/Creating-Templates.md) + - [Hubzilla-Entwicklung - ein Leitfaden für das Schemasystem](./adminmanual/Schema-development.md) + - [Grundlegende Widgets](./adminmanual/Widgets.md) + - [Kanal-Verzeichnis](./adminmanual/channel_directory.md) + - [Primäres Verzeichnis](./adminmanual/Primary-Directory.md) + - [Administration](./adminmanual/administration.md) + - [Fehlersuche](./adminmanual/troubleshooting.md) + - [Hub-Snapshot-Tools](./adminmanual/hub_snapshot_tools.md) + - [Datenbank](./adminmanual/database.md) + - [Erweiterte Konfigurationen für Administratoren](./adminmanual/advanced_configurations.md) + - [CLI-Tools (utils)](./adminmanual/CLI_tools.md) + - [Datei-Synchronisation und Klonen](./adminmanual/filesync.md) + - [Nomad - Ein Überblick auf oberer Ebene](./adminmanual/Nomad---A-High-Level-Overview.md) + - [Admin FAQ](./adminmanual/faq_admins.md) +- [Entwickler](./develmanual/developers_guide.md) + - [Wer ist ein Hubzilla-Entwickler? Sollte ich das lesen?](./develmanual/who_is_a_hubzilla_developer.md) + - [Sie möchten Code beisteuern?](./develmanual/dev_beginner.md) + - [Versionen und Releases](./develmanual/versions.md) + - [Git-Repository-Zweige](./develmanual/git_repository.md) + - [Git für Nicht-Entwickler](./develmanual/git_for_non_developers.md) + - [Tools und Arbeitsabläufe für Entwickler](./develmanual/tools_workflows.md) + - [Dokumentation erstellen](./develmanual/doco.md) + - [Übersetzungen](./develmanual/translations.md) + - [Lizenzvergabe](./develmanual/licensing.md) + - [Codierungsstil](./develmanual/coding_style.md) + - [Dateisystem-Layout](./develmanual/file_system_layout.md) + - [Hubzilla-Entwicklung - einige nützliche Grundfunktionen](./develmanual/dev-function-overview.md) + - [Erstellen von Plugins/Addons für Hubzilla](./develmanual/Plugins.md) + - [Testen](./develmanual/testing.md) + - [Erstellen von Protokoll- Föderationsdiensten](./develmanual/federate.md) + - [Verhaltenskodex für Mitwirkende](./develmanual/code_of_conduct.md) + - [Unser Versprechen](./develmanual/our_pledge.md) + - [Unsere Standards](./develmanual/our_standards.md) + - [Unsere Verantwortlichkeiten](./develmanual/our_responsibilities.md) + - [Geltungsbereich](./develmanual/scope.md) + - [Durchsetzung](./develmanual/enforcement.md) + - [Namensnennung](./develmanual/attribution.md) + - [Das Nomad Protokoll](./develmanual/nomad_protocol.md) + - [Technische Einführung](./develmanual/technical_introduction.md) + - [Magic Auth](./develmanual/magic_auth.md) + - [Nomad-Strukturen](./develmanual/nomad_structures.md) + - [Zot API](./develmanual/API.md) + - [Hooks](./develmanual/hooks.md) + - [Noch zu organisierende Informationen](./develmanual/unorganized.md) +- [Das Hubzilla-Projekt](./the_hubzilla_project.md) +- [Credits](./credits.md) +- [Über diesen Hub](./platzhalter.md) diff --git a/doc/de/about.md b/doc/de/about.md new file mode 100644 index 000000000..7ca94690a --- /dev/null +++ b/doc/de/about.md @@ -0,0 +1,88 @@ +# Was ist Hubzilla? + +Hubzilla ist ein dezentralisiertes Kommunikationsnetzwerk mit dem Ziel, Kommunikationsmöglichkeiten bereitzustellen, die Zensur umgehen, die Privatsphäre respektieren und somit frei sind von den Einschränkungen, die die heutigen kommerziellen Kommunikationsgiganten uns auferlegen. Diese stellen in erster Linie Spionagenetzwerke für zahlende Kunden aller Art zur Verfügung und monopolisieren und zentralisieren das ganze Internet – was ursprünglich eben gerade nicht unter den revolutionären Zielen war, die einst zum World Wide Web führten. + +Hubzilla ist frei, kostenlos und Open Source. Es wurde entwickelt, um auf einem Raspberry Pi ebenso zu laufen wie auf den größten AMD- und Intel-Xeon-Multiprozessor-Servern. Es kann für die Kommunikation zwischen einigen wenigen Einzelpersonen genutzt werden oder viele tausend Leute und mehr miteinander verbinden. + +Ein weiteres Ziel ist es, von Können und Ressourcen unabhängig zu sein. Hubzilla ist für den einfachen Computernutzer ebenso leicht bedienbar wie für Systemadministratoren und Entwickler. + +Wie Du es benutzt hängt davon ab, wie Du es benutzen *willst.* + +Hubzilla ist in PHP geschrieben, dadurch ist es einfach, sie auf jedweder heutigen Hosting-Plattform zu installieren, inklusive Self-Hosting zu Hause, auf Shared Servern oder auf virtuellen und dedizierten Servern. + +Mit anderen Worten, Hubzilla kann auf jeder Plattform laufen, die einen Web-Server, eine MySQL-kompatible Datenbank und PHP mitbringt. + +--- + +## Grundlegende Konzepte und Funktionen von Hubzilla + + + +### Kanäle (im Sinne von Identitäten im Gegensatz zu einer App) + +Als Nutzer (d. h. als Privatperson oder als Verein) können Sie eine oder mehrere Web-**Identitäten** erstellen. Die Webpräsenz einer Identität wird innerhalb von Hubzilla gebündelt: Ein Besucher der Web-Identität sieht Inhalte, die mit dieser Identität in Verbindung stehen, an einem Ort, der über das Hauptmenü *Apps* für diese Identität verfügbar ist. + +Intern, innerhalb der Software, wird eine Identität als „Kanal“ bezeichnet. Für einen Besucher bedeutet das Wort „Kanal“ jedoch **eine** bestimmte App, die zu dieser Identität gehört, nämlich die **Pinnwand**, auf der die (möglicherweise) föderierten Beiträge der Identität in einer zeitachsenbasierten Timeline angezeigt werden. + +Im Folgenden verstehen wir Kanäle als Identitäten: Als angemeldeter Benutzer können Sie zwischen Ihren Kanälen wechseln, um die Inhalte für jeden Kanal zu bearbeiten, d. h. Beiträge zu veröffentlichen oder ein oder mehrere Kanalprofile, Websites, Wiki-Seiten und mehr zu erstellen. Pro Kanal können Sie auch Dateien in einer Cloud verwalten, Fotos mit Tags versehen und benennen und die Fotos in einer Webgalerie anzeigen. Ereignisse des Kanals können in einem Kalender angezeigt werden. + + + +### Dezentrales Netzwerk: Zugriff über Grenzen hinweg (Zot/Nomad) vs. Bereitstellung über Grenzen hinweg (Zot/Nomad, ActivityPub und Diaspora) + +Wenn dies erlaubt ist, verbinden sich Identitäten auf Hubzilla über Server- und Verwaltungsgrenzen hinweg über das Kommunikationsprotokoll Zot/Nomad (und, sofern von Ihrem Server bereitgestellt, auch über die Protokolle ActivityPub und Diaspora). + +Mit Ausnahme von Beiträgen/Nachrichten bleiben alle veröffentlichten Inhalte lokal auf Ihrem Server. Sie können Inhalte zwar öffentlich veröffentlichen, aber auch lokale Inhalte nur mit bestimmten Verbindungen teilen. Letzteres ist nur mit Verbindungen über Zot/Nomad (also mit Identitäten auf Hubzilla und Streams) möglich. + + + +### Zugriffskontrolle + +Ihre lokalen Inhalte können von den Zot/Nomad-basierten Verbindungen „besucht“ werden, denen Sie die entsprechende Berechtigung erteilt haben. Indem Sie Ihre Verbindungen Verbindungslisten (sogenannten „Datenschutzgruppen“) zuordnen, können Sie allen Mitgliedern dieser Liste Zugriff auf bestimmte Inhalte gewähren. + +Sie können Beiträge/Nachrichten (auch über die Protokolle ActivityPub oder Disaspora) an eine Verbindung, an eine Datenschutzgruppe oder an die Öffentlichkeit senden, indem Sie eine Zugriffskontrollliste verwenden. + +Es ist möglich, eine Dauer für das Ablaufen eines Beitrags/einer Nachricht festzulegen. Auf diese Weise können Sie den Zugriff zeitlich begrenzen. + + + +### Fernauthentifizierung + +„Kennst du mich? – Ja, ich kenne dich, willkommen!“ +Der Zugriff auf nicht öffentliche Inhalte auf einem Remote-Server sollte nur möglich sein, wenn du dich gegenüber diesem Server authentifizieren kannst. Fediverse-Software, die nur das ActivityPub- oder das Diaspora-Protokoll verwendet, kann jedoch nur Konten vom lokalen Server authentifizieren. +Das Zot-Protokoll hingegen verfügt über einen integrierten Mechanismus namens MagicAuth, der es einem Server ermöglicht, Identitäten, die auf einem anderen (entfernten) Server registriert sind, Zugriff auf Inhalte und Aktionen zu gewähren oder zu verweigern. + + + +### Nomadische Identität + +Das Zot/Nomad-Protokoll ermöglicht es, Ihre Kanäle von dem Hub zu trennen, auf dem Sie sie erstellt haben. Sie können sie auf einen anderen Hub übertragen oder klonen. In diesem Fall existieren die Identität und die Daten des Kanals gleichzeitig an mehreren Orten. Dies sorgt für Ausfallsicherheit der Kanäle, falls ein Hub abgeschaltet wird oder nicht mehr verfügbar ist. + + + +### Modulares Ökosystem durch Apps + + Hubzilla stellt für jede Funktion eine separate **App** zur Verfügung, d. h. die Cloud, Fotos, Galerie, Chat, Wiki, Kalender, Kontakte oder die Verbindungs-App. Ein Serveradministrator entscheidet, welche Apps für die Benutzer dieses Servers verfügbar sein sollen. Ein Benutzer kann dann die verfügbaren Apps installieren oder deinstallieren. + + + +### Zusammenarbeit + +Die folgenden gemeinsamen privaten Bereiche ermöglichen die Arbeit im Team mit Hubzilla: +- Als Benutzer erlauben Sie ausgewählten Verbindungen, Ihre Webseiten und Wiki-Seiten zu lesen und zu bearbeiten. +- Erlauben Sie ihnen, Ihre Dateien, Ihren Kalender und Ihre Kontakte über die Weboberfläche (die Cloud-, Kalender- und Kontakt-Apps) oder WebDAV, CalDAV und CardDAV zu lesen und zu bearbeiten. +- Verwenden Sie Konversations-Threads (Beiträge), die nur für Ihre Kollaborationsgruppe sichtbar sind, indem Sie die Zugriffskontrollliste entsprechend einstellen. + + + +### Cloud-Speicher + +Sie können Dokumente direkt auf Ihrer Website speichern und mit anderen teilen. Öffentlicher, privater oder eingeschränkter Zugriff. Da die Dateien auf Ihrem Domainnamen gespeichert sind, wissen die Empfänger, dass sie von Ihnen stammen. + + + +### Teilen vs. Boosten + +Mit Hubzilla können Sie Beiträge anderer Fediverse-Nutzer (erneut) teilen. Das (erneute) Teilen in Hubzilla ist so, als würden Sie Ihren Freunden Jennie und Omar erzählen, was Giaco gesagt hat. Und dann sagen sie: „Cool, das gefällt mir“. + +Hubzilla ermöglicht auch das Boosten. Etwas zu boosten ist so, als würdest du deinen Freunden Jennie und Omar erzählen, was Giaco gesagt hat, während Giaco und alle seine Freunde und seine Familie (die du nicht kennst) zuhören. Giaco und alle seine Freunde und seine Familie können jetzt mit dir sprechen. diff --git a/doc/de/about/about.bb b/doc/de/about/about.bb deleted file mode 100644 index 27ea4ca9a..000000000 --- a/doc/de/about/about.bb +++ /dev/null @@ -1,23 +0,0 @@ -[h3]Was ist $Projectname?[/h3] - -$Projectname ist ein dezentralisiertes Kommunikationsnetzwerk mit dem Ziel, Kommunikationsmöglichkeiten bereitzustellen, die Zensur umgehen, die Privatsphäre respektieren und somit frei sind von den Einschränkungen, die die heutigen kommerziellen Kommunikationsgiganten uns auferlegen. Diese stellen in erster Linie Spionagenetzwerke für zahlende Kunden aller Art zur Verfügung und monopolisieren und zentralisieren das ganze Internet – was ursprünglich eben gerade nicht unter den revolutionären Zielen war, die einst zum World Wide Web führten. - -$Projectname ist frei, kostenlos und Open Source. Sie wurde entwickelt, um auf einem Raspberry Pi für € 30,– ebenso zu laufen wie auf den größten AMD- und Intel-Xeon-Multiprozessor-Servern. Es kann für die Kommunikation zwischen einigen wenigen Einzelpersonen genutzt werden oder viele tausend Leute und mehr miteinander verbinden. - -Ein weiteres Ziel ist es, von Können und Ressourcen unabhängig zu sein. $Projectname ist für den einfachen Computernutzer ebenso leicht bedienbar wie für Systemadministratoren und Entwickler. - -Wie Du es benutzt hängt davon ab, wie Du es benutzen [i]willst.[/i] - -$Projectname ist in PHP geschrieben, dadurch ist es einfach, sie auf jedweder heutigen Hosting-Plattform zu installieren, inklusive Self-Hosting zu Hause, auf Shared Servern wie bei [url=https://uberspace.de/]Uberspace[/url], [url=http://mediatemple.com/]Media Temple[/url] und [url=http://www.dreamhost.com/]Dreamhost[/url], oder auf virtuellen und dedizierten Servern, wie es sie zum Beispiel bei [url=https://www.linode.com]Linode[/url], [url=http://greenqloud.com]GreenQloud[/url] oder [url=https://aws.amazon.com]Amazon AWS[/url] gibt. - -Mit anderen Worten, $Projectname kann auf jeder Plattform laufen, die einen Web-Server, eine MySQL-kompatible Datenbank und PHP mitbringt. - -Dabei bietet $Projectname einige einzigartige Leckerbissen: - -[b]Ein-Klick-Identifikation:[/b] Du kannst auf andere Server im $Projectname-Netzwerk zugreifen, indem Du einfach auf einen Link dorthin klickst. Die Authentifizierung wird ganz einfach automatisch hinter den Kulissen durchgeführt. Vergiss viele verschiedene Usernamen für verschiedene Seiten und die Passwörter dazu – das tut alles $Projectname für Dich. - -[b]Klone:[/b] Du kannst Deine Online-Identität (oder, wie wir sagen, einen Kanal) klonen. Sie ist nicht mehr länger an einen bestimmten Server, eine Domain oder eine IP-Adresse gebunden. Importiere sie einfach auf einem anderen $Projectname-Server (oder $Projectname-Hub, wie es bei uns heißt) – direkt online oder mit Hilfe eines vorher generierten Exports. Wenn Dein primärer Hub plötzlich nicht mehr online ist, kein Problem, Deine Kontakte, Posts* und Nachrichten* sind automagisch weiterhin unter Deiner geklonten Identität verfügbar und zugreifbar. [i](*: nur Posts und Nachrichten, die nach dem Moment des Klonens erstellt wurden)[/i] - -[b]Privatsphäre:[/b] $Projectname-Identitäten (Zot-IDs) können gelöscht, gesichert/heruntergeladen und geklont werden. Du hast volle Kontrolle über Deine Daten. Wenn Du Dich entscheidest, all Deine Daten und Deine Zot-ID zu löschen, musst Du nur auf einen Link klicken, und sie werden sofort von dem Server gelöscht. Keine Fragen, keine Umstände. - -#include doc/macros/main_footer.bb; diff --git a/doc/de/about_hub.bb b/doc/de/about_hub.bb new file mode 100644 index 000000000..0c1082f51 --- /dev/null +++ b/doc/de/about_hub.bb @@ -0,0 +1,7 @@ +[h3]Site Info[/h3] +[list][*][url=[baseurl]/siteinfo]Site Info[/url] +[*][url=[baseurl]/siteinfo/json]Site Info (JSON format)[/url][/list] +[h3]Terms of Service[/h3] +[list][*][url=[baseurl]/help/TermsOfService]Terms of Service for this hub[/url][/list] +#include doc/SiteTOS.md; + diff --git a/doc/de/adminmanual/CLI_tools.md b/doc/de/adminmanual/CLI_tools.md new file mode 100644 index 000000000..7bd27b5ca --- /dev/null +++ b/doc/de/adminmanual/CLI_tools.md @@ -0,0 +1,103 @@ +### CLI Tools (utils) + +Wer als Administrator Zugang zur Shell hat, kann weitere kleine CLI Tools verwenden, welche sich im Verzeichnis "utils" finden. + +#### addons + +Mit dem Script addons können Sie sich anzeigen lassen, welche Addons installiert und welche vorhanden sind. Außerdem können Sie Addons installieren und deinstallieren, sowie alle Addons neu installieren. + +- `util/addons list` + Anzeige aller installierter Addons +- `util/addons list all` + Anzeige aller Addons , die installiert sind (*) und solcher, die aufgrund von Inkompatibilität deaktiviert sind (!) +- `util/addons install foo` + Installiere das Addon mit dem Namen "foo" +- `util/addons uninstall foo` + Deinstalliere das Addon mit dem Namen "foo" +- `util/addons reinstall` + Reinstalliere alle Addons + +#### admins + +Das Script admins ermöglicht es Ihnen, sich sämtliche Admins des Hub anzeigen zu lassen, sowie weitere Admins hinzuzufügen und bestehende Admins zu entfernen. + +- `util/admins` +- `util/admins list` +- `util/admins add <account_id>` +- `util/admins remove <account_id>` + +#### config / pconfig + +Siehe: [Erweiterte Konfigurationen für Administratoren](/help/de/adminmanual/advanced_configurations.md) + +#### connect + +Mit connect können Sie eine Verbindung zwischen einem Kanal Ihres Hubs mit einem anderen Kanal herstellen. + +- `util/connect <channel_id> <channel@hub>` +- `util/connect <channel_address> <channel@hub>` + +#### dcp + +Mit dcp können Sie Dateien in den Store-Bereich eines Kanals auf Ihrem Hub kopieren. + +- `util/dcp <quelle> <zielverzeichnis>` wobei Zielverzeichnis `store/$nickname/path` oder `$nickname/path` sein muss. + +#### dmkdir + +Mit dmkdir können Sie im Store-Bereich eines Kanals auf Ihrem Hub ein Unterverzeichnis anlegen. + +- `util/dmkdir <directory>` wobei Directory `store/$nickname/path/<directory>` oder `$nickname/path/<directory>` sein muss. + +#### fresh (The Freaking REd Shell) + +Dies funktioniert nur unter Unix/Linux. Wenn das readline-Modul installiert ist, verwenden es dieses für die Eingabe, ansonsten liest es nur von stdin und schreibt nach stdout. +Die Befehle werden der Reihe nach abgearbeitet, bis der Befehl „exit“, „quit“ oder das Ende der Datei erreicht ist. + +Kommandos: + +- `version` + Zeigt die aktuelle Fresh-Version an. +- `login <E-Mail-Adresse>` + Fragt nach einem Passwort und authentifiziert `<E-Mail-Adresse>` als den aktuellen + Benutzer. +- `finger <Kanal-Adresse>` + Führt einen Lookup von `<Kanal-Adresse>` durch und meldet das Ergebnis. +- `channel <Kanal-Nickname>` + Schaltet den aktuellen Kanal auf den Kanal mit dem angegebenen Spitznamen um. +- `conn [<id1> <id2> ...]` +- Ohne Argumente listet dies alle Verbindungen des aktuellen Kanals mit einer ID auf. + Wenn IDs angegeben werden, werden die Details der einzelnen Verbindungen angezeigt. + +#### hz + +Einfaches, minimalistisches Kommandozeilentool, um den Status über die API an hubzilla zu senden. Erfordert curl. + +`hz [<Konfigurationsdatei>]` + +hz benötigt eine Konfigurationsdatei. Sie können entweder eine Datei `.hubzilla` verwenden und den Parameter `<Konfigurationsdatei>` weglassen oder eine Konfigurationsdatei unter einem beliebigen Namen im Hubzilla-Verzeichnis erstellen, deren Namen Sie dann bei Aufruf von hz angeben. + +Format der Konfigurationsdatei: + +``` +USER=<Ihr Benutzername> +PASS=<Ihr Passwort> +HUB=<Domain Ihres Hubs> +``` + +Anschließend können Sie Ihr Posting eingeben und die Eingabe mit Strg-D abschließen. + +#### storageconf + +Mit storageconf können Sie den Speicherort für Thumbnails festlegen (Dateisystem oder Datenbank), sowie die aktuelle Konfiguration abfragen. + +- `util/storageconv stats` + Zeigt den aktuell eingestellten Status +- `util/storageconv fs` + Verschiebt die Thumbnails von der Datenbank ins Dateisystem +- `util/storageconv db` + Verschiebt die Thumbnails vom Dateisystem in die Datenbank + +#### thumbrepair + +thumbrepair erstellt die lokalen Thumbnails neu.
\ No newline at end of file diff --git a/doc/de/adminmanual/Creating-Templates.md b/doc/de/adminmanual/Creating-Templates.md new file mode 100644 index 000000000..61b596e1f --- /dev/null +++ b/doc/de/adminmanual/Creating-Templates.md @@ -0,0 +1,79 @@ +### Erstellen von Seitenvorlagen + +Für eine Seitenvorlage zur Verwendung mit Comanche sind zwei Dateien erforderlich - eine PHP-Vorlage und eine CSS-Datei. Die Seitenvorlagen müssen vom Systemadministrator Ihrer Website installiert werden. +Wählen Sie zunächst einen Namen. In diesem Fall werden wir eine Vorlage erstellen und sie „demo“ nennen. +Sie müssen die Dateien „view/php/demo.php“ und „view/css/demo.css“ erstellen, um die PHP-Vorlage bzw. das CSS zu speichern. +Um eine bessere Vorstellung von diesem Prozess zu bekommen, schauen wir uns eine bestehende Vorlage an - die „Standard“-Vorlage. Diese wird standardmäßig in der gesamten Anwendung verwendet. + +#### **view/php/default.php** + +``` +<!DOCTYPE html > +<html> +<head> + <title><?php if(x($page,'title')) echo $page['title'] ?></title> + <script>var baseurl=„<?php echo z_root() ?>“;</script> + <?php if(x($page,'htmlhead')) echo $page['htmlhead'] ?> +</head> +<body> + <?php if(x($page,'nav')) echo $page['nav']; ?> + <aside id=„region_1“><?php if(x($page,'aside')) echo $page['aside']; ?></aside> + <section id=„region_2“><?php if(x($page,'content')) echo $page['content']; ?> + <div id=„page-footer“></div> + <div id=„pause“></div> + </abschnitt> +<aside id=„region_3“><?php if(x($page,'right_aside')) echo $page['right_aside']; ?></aside> +<footer><?php if(x($page,'footer')) echo $page['footer']; ?></footer> +</body> +</html> +``` + +Hier ist die entsprechende CSS-Datei + +#### **view/php/default.css** + +``` +aside#region_1 { + Anzeige: block; + Breite: 210px; + Position: absolut; + oben: 65px; + links: 0; + margin-left: 10px; +} + +beiseite input[type='text'] { + Breite: 174px; +} +section { + Position: absolut; + top: 65px; + links: 250px; + Anzeige: block; + rechts: 15px; + padding-bottom: 350px; +} +``` + +Wenn Sie sich diese Definitionen ansehen, fallen Ihnen vielleicht einige Dinge auf: + +- Wir haben kein CSS für die Bereiche „nav“, „right_aside“ oder „footer“ angegeben. In dieser Vorlage werden „nav“ und „footer“ die volle Seitenbreite einnehmen, und wir lassen die Größe und Platzierung dieser Elemente durch das Thema steuern. „right_aside“ wird derzeit nicht verwendet. +- Es gibt Elemente auf der Seite wie „page-footer“ und „pause“, für die es keinen sichtbaren Inhalt gibt. Dieser Inhalt wird von Javascript-Elementen stammen. +- Unsere Standardvorlage verwendet eine absolute Positionierung. Modernes Webdesign verwendet häufig „float“-Div-Container, so dass bei der Anzeige auf Geräten mit kleinen Bildschirmen in der Regel keine Bildlaufleisten erforderlich sind. + +Um eine neue Vorlage zu entwerfen, ist es am besten, mit einer bestehenden Vorlage zu beginnen und sie nach Wunsch zu ändern. Genau das werden wir hier tun. +Die Art und Weise, wie Comanche Inhalte innerhalb einer bestimmten Region bereitstellt, ist die Verwendung eines Region-Tags. + +``` +[region=aside][widget=profile][/widget][/region] +``` + +In diesem Beispiel wird ein „Profil“-Widget in der Region „aside“ platziert. In Wirklichkeit wird jedoch der HTML-Code für das Widget in der Code-Variablen **$page['aside']** abgelegt. Unsere Standardseitenvorlage definiert einen Bereich auf der Seite (das CSS positioniert diesen als absolute Seitenleiste) und fügt dann den Inhalt von $page['aside'] ein (falls vorhanden). +Wenn Sie also eine Vorlage mit einem Bereich namens „foo“ erstellen wollten, würden Sie einen Platz dafür auf der Seite vorsehen, dann den Inhalt von $page['foo'] dort einfügen, wo Sie ihn verwenden wollen, und dann mit Comanche angeben + +``` +[region=foo][widget=profile][/widget][/region] +``` + +und dies würde ein Profil-Widget in der von Ihnen erstellten „foo“-Region platzieren. +Verwenden Sie die CSS-Datei, um den Bereich an der gewünschten Stelle auf der Seite zu positionieren und optional seine Größe zu steuern.
\ No newline at end of file diff --git a/doc/de/adminmanual/Installation_using_docker.md b/doc/de/adminmanual/Installation_using_docker.md new file mode 100644 index 000000000..0f59847a6 --- /dev/null +++ b/doc/de/adminmanual/Installation_using_docker.md @@ -0,0 +1,56 @@ +### Installation mittels Docker + +Es besteht die Möglichkeit, Hubzilla komfortabel und bequem als Docker-Container zu installieren. Dafür bietet Saiwal ([sk@hub.utsukta.org](https://hub.utsukta.org/channel/sk)) ein vorkonfigurierte Umgebung für einen Hubzilla-Container an. + +Hauptfeatures sind: + +- Einfache Bereitstellung: Verwenden Sie Docker Compose, um eine voll funktionsfähige Hubzilla-Instanz mit nur wenigen Befehlen einzurichten. +- Benutzerdefinierte Konfiguration: Passen Sie Ihre Hubzilla-Installation ganz einfach mit Umgebungsvariablen für SMTP, Datenbank und mehr an. +- Kontinuierliche Updates: Das Docker-Image ist so aufgebaut, dass es einfach aktualisiert werden kann, wenn neue Änderungen am Hubzilla-Kern oder seinen Abhängigkeiten vorgenommen werden. +- SMTP-Integration: Integrierte Unterstützung für den Versand von E-Mails mit ssmtp, wodurch die Konfiguration von E-Mail-Benachrichtigungen für Ihre Hubzilla-Instanz erleichtert wird. + +Das Repository für den Container befindet sich hier: [**skprg/hubzilla-docker**](https://github.com/skprg/hubzilla-docker) + +#### Das Image von Grund auf neu erstellen + +- Klonen Sie das Repository: + +``` +git clone https://github.com/skprg/hubzilla-docker.git +cd hubzilla-docker +``` + +- Konfigurieren Sie Ihre Umgebung: Aktualisieren Sie die Datei `docker-compose.yml` mit Ihren SMTP- und anderen Einstellungen. +- Erstellen und führen Sie den Container aus: + +``` +docker-compose up --build -d +``` + +#### Vorgefertigtes Image verwenden + +- Ersetzen Sie die folgenden Zeilen in `docker-compose.yml` + +``` +build: + context: . + Dockerfile: Dockerfile +``` + +mit + +``` +image: ghcr.io/skprg/hubzilla-docker:latest +``` + +- Starten Sie den Container: + +``` +docker compose up -d +``` + +Greifen Sie auf Ihre Hubzilla-Instanz zu: Navigieren Sie zu http://localhost (oder der entsprechenden URL), um Ihre Hubzilla-Instanz anzuzeigen. + +#### Weitere Hinweise / Update / Tipps + +Weitere Hinweise, Upgrade-Anweisungen und Tipps finden Sie im oben verlinkten Repository.
\ No newline at end of file diff --git a/doc/de/adminmanual/Nomad---A-High-Level-Overview.md b/doc/de/adminmanual/Nomad---A-High-Level-Overview.md new file mode 100644 index 000000000..c86febf6f --- /dev/null +++ b/doc/de/adminmanual/Nomad---A-High-Level-Overview.md @@ -0,0 +1,111 @@ +### Nomad - Ein Überblick auf oberer Ebene + +Hier ist eine allgemeine Beschreibung der Funktionsweise von Nomad. + +In diesem Beispiel wird „Indigo“ eine öffentliche Nachricht von seiner Website „podunk.edu“ aus versenden. „Nickordo„ ist ein Empfänger auf einer anderen Website (“example.com"). + +Indigo stellt seine Nachricht zuerst auf podunk.edu ein. podunk.edu schaut nach, wer die Nachricht erhalten soll und findet Nickordo. Nickordo postet normalerweise von example.com aus, also fügen wir dieses Ziel zu unserer Liste der Empfänger hinzu. Wir können auch andere Ziele für Nickordo und alle anderen, die Indigos Beiträge verfolgen, hinzufügen. + +In diesem Beispiel stellen wir fest, dass wir nur einen bekannten Empfänger an einem bekannten Ort haben. + +Wir senden ein Paket an example.com: + + + + { + "type":"notify", + "sender":{ + "guid":"kgVFf_1_SSbyqH-BNWjWuhAvJ2EhQBTUdw-Q1LwwssAntr8KTBgBSzNVzUm9_RwuDpxI6X8me_QQhZMf7RfjdA", + "guid_sig":"PT9-TApzpm7QtMxC63MjtdK2nUyxNI0tUoWlOYTFGke3kNdtxSzSvDV4uzq_7SSBtlrNnVMAFx2_1FDgyKawmqVtRPmT7QSXrKOL2oPzL8Hu_nnVVTs_0YOLQJJ0GYACOOK-R5874WuXLEept5-KYg0uShifsvhHnxnPIlDM9lWuZ1hSJTrk3NN9Ds6AKpyNRqf3DUdz81-Xvs8I2kj6y5vfFtm-FPKAqu77XP05r74vGaWbqb1r8zpWC7zxXakVVOHHC4plG6rLINjQzvdSFKCQb5R_xtGsPPfvuE24bv4fvN4ZG2ILvb6X4Dly37WW_HXBqBnUs24mngoTxFaPgNmz1nDQNYQu91-ekX4-BNaovjDx4tP379qIG3-NygHTjFoOMDVUvs-pOPi1kfaoMjmYF2mdZAmVYS2nNLWxbeUymkHXF8lT_iVsJSzyaRFJS1Iqn7zbvwH1iUBjD_pB9EmtNmnUraKrCU9eHES27xTwD-yaaH_GHNc1XwXNbhWJaPFAm35U8ki1Le4WbUVRluFx0qwVqlEF3ieGO84PMidrp51FPm83B_oGt80xpvf6P8Ht5WvVpytjMU8UG7-js8hAzWQeYiK05YTXk-78xg0AO6NoNe_RSRk05zYpF6KlA2yQ_My79rZBv9GFt4kUfIxNjd9OiV1wXdidO7Iaq_Q", + "url":"http:\/\/podunk.edu", + "url_sig":"T8Bp7j5DHHhQDCFcAHXfuhUfGk2P3inPbImwaXXF1xJd3TGgluoXyyKDx6WDm07x0hqbupoAoZB1qBP3_WfvWiJVAK4N1FD77EOYttUEHZ7L43xy5PCpojJQmkppGbPJc2jnTIc_F1vvGvw5fv8gBWZvPqTdb6LWF6FLrzwesZpi7j2rsioZ3wyUkqb5TDZaNNeWQrIEYXrEnWkRI_qTSOzx0dRTsGO6SpU1fPWuOOYMZG8Nh18nay0kLpxReuHCiCdxjXRVvk5k9rkcMbDBJcBovhiSioPKv_yJxcZVBATw3z3TTE95kGi4wxCEenxwhSpvouwa5b0hT7NS4Ay70QaxoKiLb3ZjhZaUUn4igCyZM0h6fllR5I6J_sAQxiMYD0v5ouIlb0u8YVMni93j3zlqMWdDUZ4WgTI7NNbo8ug9NQDHd92TPmSE1TytPTgya3tsFMzwyq0LZ0b-g-zSXWIES__jKQ7vAtIs9EwlPxqJXEDDniZ2AJ6biXRYgE2Kd6W_nmI7w31igwQTms3ecXe5ENI3ckEPUAq__llNnND7mxp5ZrdXzd5HHU9slXwDShYcW3yDeQLEwAVomTGSFpBrCX8W77n9hF3JClkWaeS4QcZ3xUtsSS81yLrp__ifFfQqx9_Be89WVyIOoF4oydr08EkZ8zwlAsbZLG7eLXY" + }, + "callback":"\/post", + "version":1, + "secret":"1eaa6613699be6ebb2adcefa5379c61a3678aa0df89025470fac871431b70467" + } + +In diesem Paket steht das Folgende: + +Ich bin Indigo und hier ist der Beweis. Ich poste von podunk.edu und hier ist der Beweis. Ich habe ein Paket für Sie. Die Kontrollnummer lautet „1eaa6613....“. + +Example.com nimmt dieses Paket an und sagt: „Moment mal - ich kenne Sie nicht. Ich möchte beweisen, wer du bist.“ Example.com stellt also eine Verbindung zu podunk.edu über eine „bekannte URL“ her, die wir für diesen Zweck verwenden, und sucht nach der oben genannten „guid“. Es sollte eine Reihe von Informationen zurückgeben, darunter auch einen öffentlichen Schlüssel. Example.com verwendet diesen Schlüssel, um die Signaturen in der Nachricht zu überprüfen und festzustellen, ob es tatsächlich eine Person namens Indigo bei podunk.edu gibt. Wir müssen dies nur einmal tun. (Beachten Sie, dass Indigo von jedem Ort aus posten kann. Wir müssen nur beweisen, dass es sich um Indigo handelt und dass Indigo beweisen kann, dass er von einem anderen Standort aus postet). + +Dann trennt example.com die Verbindung und weist darauf hin, dass eine Nachricht auf podunk.edu wartet. Entweder sofort oder immer dann, wenn der Drang besteht (je nachdem, wie wichtig Indigo für jemanden auf dieser Website ist), „ruft“ example.com podunk.edu an. Die Nachricht lautet in etwa so: + + + + { + "type":"pickup", + "url":"http:\/\/example.com", + "callback_sig":"teE1_fLIqfyeCuZY4iS7sNU8jUlUuqYOYBiHLarkC99I9K-uSr8DAwVW8ZPZRK-uYdxRMuKFb6cumF_Gt9XjecCPBM8HkoXHOi_VselzJkxPwor4ZPtWYWWaFtRfcAm794LrWjdz62zdESTQd2JJIZWbrli1sUhK801BF3n0Ye6-X1MWhy9EUTVlNimOeRipcuD_srMhUcAXOEbLlrugZ8ovy2YBe6YOXkS8jj0RSFjsOduXAoVhQmNpcobSYsDvaQS3e3MvE6-oXE602zGQhuNLr7DIMt9PCdAeQo-ZM-DHlZGCkGk4O2oQFCXFzGPqLUMWDACGJfTfIWGoh_EJqT_SD5b_Yi_Wk9S1lj7vb-lmxe5JuIf7ezWzHoBT8vswnZxPYlidH2i9wapdzij9il_qqcCWWHIp7q_XkY_Zj52Z4r4gdmiqM-8y1c_1SDX7hrJFRwqL_PKFbEvyi5nMWTEzqp55Tay5Woiv19STK_H_8ufFfD9AOkYnk6rIOMsk9dn3a5tAFpDRyRndXkBWAXwiJjiND2zjue7BFu7Ty40THXcfYRh1a5XrAXcaGeYuagg-8J9tAufu9_LY3qGazFg8kRBVMOn4M8DRKSIhKj7z4MnbYL0s09gREojy4jqWO3VkaOjP2jUGzoPuUDLasudE1ehWFq0K_MTQNavgmp8", + "callback":"http:\/\/example.com\/post", + "secret":"1eaa6613699be6ebb2adcefa5379c61a3678aa0df89025470fac871431b70467", + "secret_sig":"O7nB4_UJHBXi28Suwl9LBZF9hI_9KGVTgehnUlWF1oYMNRnBbVHB9lzUfAoalvp3STbU3xJbtD_S58tv6MfV7J5j2V_S1W5ex3dulmDGB8Pt_7Fe5mbEPmjQFcfv3Eg5dUjYIuDl0TDScfrHyImj7RZIWHbwd7wWVoMzzDa_o33klpYmKZCBvObCh55bRrlFkXZs_dRuOiPwkfX0C6_XES4OyOIYl45V30rdhmf-STrf4L9dKYy_axQ12RIwRcKychvVLwlUJn3bn9lgNXRRU_HTne-09OPcJbUOdcD3DkFoKOxMULBNKPHzsCau0ICYug7S0EP6LpCom_mW78s08LyVA1vYeFZjevBCiGecj57yIAQDYi6_rpWJfihYaWHRN0oqtScUR4Bdf0bQbEHxMs4zAtrOAxfyJCbi6U1pfnGgzXzB9ulOYGnVGNTF7Ey4K7FOZIBtk0ILY2JfvBUaVvVs8ttagOOHmhWhnbCvrnOFlkNdlce7zoJCSUJENUOCYmTRfwB_Jno5fAzRnrsYU3_Z-l1mzniU_OmUPz8mPEh7PwhkqAiVlyaM-q15gn7l2lAIDk9kp2X_iCme7v4V0ADN_DbpaI_0-6mPw5HLbKrCsA-sxlSMB4DO4lDCHYkauj0l25sbfroRWB_hax1O4Q0oWyOlVJLUqEC5nuUJCCE" + } + +Was diese Nachricht aussagt, ist: Hier ist example.com, ich habe einen Beweis, und ich bin hier, um ein Paket abzuholen. Hier ist die Sendungsverfolgungsnummer, und hier ist der Beweis, dass dies die Sendungsverfolgungsnummer ist, die Sie vermutlich an example.com gesendet haben. + +Gut genug. Podunk.edu überprüft die Geschichte und tatsächlich, es ist example.com, und ja, da wartet ein Paket mit dieser Kontrollnummer. Hier ist das Paket... + + + + { + "success":1, + "pickup":{ + "notify":{ + "type":"notify", + "sender":{ + "guid":"kgVFf_1_SSbyqH-BNWjWuhAvJ2EhQBTUdw-Q1LwwssAntr8KTBgBSzNVzUm9_RwuDpxI6X8me_QQhZMf7RfjdA", + "guid_sig":"PT9-TApzpm7QtMxC63MjtdK2nUyxNI0tUoWlOYTFGke3kNdtxSzSvDV4uzq_7SSBtlrNnVMAFx2_1FDgyKawmqVtRPmT7QSXrKOL2oPzL8Hu_nnVVTs_0YOLQJJ0GYACOOK-R5874WuXLEept5-KYg0uShifsvhHnxnPIlDM9lWuZ1hSJTrk3NN9Ds6AKpyNRqf3DUdz81-Xvs8I2kj6y5vfFtm-FPKAqu77XP05r74vGaWbqb1r8zpWC7zxXakVVOHHC4plG6rLINjQzvdSFKCQb5R_xtGsPPfvuE24bv4fvN4ZG2ILvb6X4Dly37WW_HXBqBnUs24mngoTxFaPgNmz1nDQNYQu91-ekX4-BNaovjDx4tP379qIG3-NygHTjFoOMDVUvs-pOPi1kfaoMjmYF2mdZAmVYS2nNLWxbeUymkHXF8lT_iVsJSzyaRFJS1Iqn7zbvwH1iUBjD_pB9EmtNmnUraKrCU9eHES27xTwD-yaaH_GHNc1XwXNbhWJaPFAm35U8ki1Le4WbUVRluFx0qwVqlEF3ieGO84PMidrp51FPm83B_oGt80xpvf6P8Ht5WvVpytjMU8UG7-js8hAzWQeYiK05YTXk-78xg0AO6NoNe_RSRk05zYpF6KlA2yQ_My79rZBv9GFt4kUfIxNjd9OiV1wXdidO7Iaq_Q", + "url":"http:\/\/z.podunk.edu", + "url_sig":"T8Bp7j5DHHhQDCFcAHXfuhUfGk2P3inPbImwaXXF1xJd3TGgluoXyyKDx6WDm07x0hqbupoAoZB1qBP3_WfvWiJVAK4N1FD77EOYttUEHZ7L43xy5PCpojJQmkppGbPJc2jnTIc_F1vvGvw5fv8gBWZvPqTdb6LWF6FLrzwesZpi7j2rsioZ3wyUkqb5TDZaNNeWQrIEYXrEnWkRI_qTSOzx0dRTsGO6SpU1fPWuOOYMZG8Nh18nay0kLpxReuHCiCdxjXRVvk5k9rkcMbDBJcBovhiSioPKv_yJxcZVBATw3z3TTE95kGi4wxCEenxwhSpvouwa5b0hT7NS4Ay70QaxoKiLb3ZjhZaUUn4igCyZM0h6fllR5I6J_sAQxiMYD0v5ouIlb0u8YVMni93j3zlqMWdDUZ4WgTI7NNbo8ug9NQDHd92TPmSE1TytPTgya3tsFMzwyq0LZ0b-g-zSXWIES__jKQ7vAtIs9EwlPxqJXEDDniZ2AJ6biXRYgE2Kd6W_nmI7w31igwQTms3ecXe5ENI3ckEPUAq__llNnND7mxp5ZrdXzd5HHU9slXwDShYcW3yDeQLEwAVomTGSFpBrCX8W77n9hF3JClkWaeS4QcZ3xUtsSS81yLrp__ifFfQqx9_Be89WVyIOoF4oydr08EkZ8zwlAsbZLG7eLXY" + }, + "callback":"\/post", + "version":1, + "secret":"1eaa6613699be6ebb2adcefa5379c61a3678aa0df89025470fac871431b70467" + }, + "message":{ + "message_id":"10b049ce384cbb2da9467319bc98169ab36290b8bbb403aa0c0accd9cb072e76@podunk.edu", + "message_top":"10b049ce384cbb2da9467319bc98169ab36290b8bbb403aa0c0accd9cb072e76@podunk.edu", + "message_parent":"10b049ce384cbb2da9467319bc98169ab36290b8bbb403aa0c0accd9cb072e76@podunk.edu", + "created":"2012-11-20 04:04:16", + "edited":"2012-11-20 04:04:16", + "title":"", + "body":"Hi Nickordo", + "app":"", + "verb":"post", + "object_type":"", + "target_type":"", + "permalink":"", + "location":"", + "longlat":"", + "owner":{ + "name":"Indigo", + "address":"indigo@podunk.edu", + "url":"http:\/\/podunk.edu", + "photo":{ + "mimetype":"image\/jpeg", + "src":"http:\/\/podunk.edu\/photo\/profile\/m\/5" + }, + "guid":"kgVFf_1_SSbyqH-BNWjWuhAvJ2EhQBTUdw-Q1LwwssAntr8KTBgBSzNVzUm9_RwuDpxI6X8me_QQhZMf7RfjdA", + "guid_sig":"PT9-TApzpm7QtMxC63MjtdK2nUyxNI0tUoWlOYTFGke3kNdtxSzSvDV4uzq_7SSBtlrNnVMAFx2_1FDgyKawmqVtRPmT7QSXrKOL2oPzL8Hu_nnVVTs_0YOLQJJ0GYACOOK-R5874WuXLEept5-KYg0uShifsvhHnxnPIlDM9lWuZ1hSJTrk3NN9Ds6AKpyNRqf3DUdz81-Xvs8I2kj6y5vfFtm-FPKAqu77XP05r74vGaWbqb1r8zpWC7zxXakVVOHHC4plG6rLINjQzvdSFKCQb5R_xtGsPPfvuE24bv4fvN4ZG2ILvb6X4Dly37WW_HXBqBnUs24mngoTxFaPgNmz1nDQNYQu91-ekX4-BNaovjDx4tP379qIG3-NygHTjFoOMDVUvs-pOPi1kfaoMjmYF2mdZAmVYS2nNLWxbeUymkHXF8lT_iVsJSzyaRFJS1Iqn7zbvwH1iUBjD_pB9EmtNmnUraKrCU9eHES27xTwD-yaaH_GHNc1XwXNbhWJaPFAm35U8ki1Le4WbUVRluFx0qwVqlEF3ieGO84PMidrp51FPm83B_oGt80xpvf6P8Ht5WvVpytjMU8UG7-js8hAzWQeYiK05YTXk-78xg0AO6NoNe_RSRk05zYpF6KlA2yQ_My79rZBv9GFt4kUfIxNjd9OiV1wXdidO7Iaq_Q" + }, + "author":{ + "name":"Indigo", + "address":"indigo@podunk.edu", + "url":"http:\/\/podunk.edu", + "photo":{ + "mimetype":"image\/jpeg", + "src":"http:\/\/podunk.edu\/photo\/profile\/m\/5" + }, + "guid":"kgVFf_1_SSbyqH-BNWjWuhAvJ2EhQBTUdw-Q1LwwssAntr8KTBgBSzNVzUm9_RwuDpxI6X8me_QQhZMf7RfjdA", + "guid_sig":"PT9-TApzpm7QtMxC63MjtdK2nUyxNI0tUoWlOYTFGke3kNdtxSzSvDV4uzq_7SSBtlrNnVMAFx2_1FDgyKawmqVtRPmT7QSXrKOL2oPzL8Hu_nnVVTs_0YOLQJJ0GYACOOK-R5874WuXLEept5-KYg0uShifsvhHnxnPIlDM9lWuZ1hSJTrk3NN9Ds6AKpyNRqf3DUdz81-Xvs8I2kj6y5vfFtm-FPKAqu77XP05r74vGaWbqb1r8zpWC7zxXakVVOHHC4plG6rLINjQzvdSFKCQb5R_xtGsPPfvuE24bv4fvN4ZG2ILvb6X4Dly37WW_HXBqBnUs24mngoTxFaPgNmz1nDQNYQu91-ekX4-BNaovjDx4tP379qIG3-NygHTjFoOMDVUvs-pOPi1kfaoMjmYF2mdZAmVYS2nNLWxbeUymkHXF8lT_iVsJSzyaRFJS1Iqn7zbvwH1iUBjD_pB9EmtNmnUraKrCU9eHES27xTwD-yaaH_GHNc1XwXNbhWJaPFAm35U8ki1Le4WbUVRluFx0qwVqlEF3ieGO84PMidrp51FPm83B_oGt80xpvf6P8Ht5WvVpytjMU8UG7-js8hAzWQeYiK05YTXk-78xg0AO6NoNe_RSRk05zYpF6KlA2yQ_My79rZBv9GFt4kUfIxNjd9OiV1wXdidO7Iaq_Q" + } + } + } + } + + + +Und das ist das Paket (die ursprüngliche Nachricht). Example.com wandelt diese in eine Form um, die von Nickordo eingesehen werden kann, und benachrichtigt Nickordo, dass es eine neue Nachricht gibt. Podunk.edu **könnte** feststellen, dass noch andere Pakete auf example.com warten. Wenn dies der Fall ist, kann es auch alle anderen wartenden Pakete zu diesem Zeitpunkt versenden. Jedes dieser Pakete ist mit der ursprünglichen Sendungsnummer versehen.
\ No newline at end of file diff --git a/doc/de/adminmanual/Primary-Directory.md b/doc/de/adminmanual/Primary-Directory.md new file mode 100644 index 000000000..9de1d6c98 --- /dev/null +++ b/doc/de/adminmanual/Primary-Directory.md @@ -0,0 +1,35 @@ +### Primäres Verzeichnis + +Standardmäßig verwendet Hubzilla verfügbare Verzeichnisse im Internet, die Ihnen weltweit verfügbare Kanäle anzeigen. + +Es gibt bestimmte Szenarien, in denen Sie Ihren eigenen Verzeichnis-Server benötigen, mit dem Sie mehrere Hubs verbinden können. Dadurch werden die Kanäle, die in allen Ihren Hubs erscheinen, auf die Kanäle der Hubs beschränkt, die mit Ihrem Verzeichnis-Server verbunden sind. + +#### Anleitungen zum Einrichten eines Hubs als primäres Verzeichnis für eine Reihe von privaten Hubs. + +- Öffnen Sie auf dem Hub, der der Directory Server sein wird, die Datei .htconfig.php und setzen Sie + `App::$config['system']['directory_mode'] = DIRECTORY_MODE_PRIMARY;` + +``` +Standardmäßig sollte dies bereits **DIRECTORY_MODE_NORMAL** sein, also ändern Sie diese Zeile einfach in **DIRECTORY_MODE_PRIMARY**. +``` + +- Als Nächstes gehen Sie für jeden Hub (einschließlich des Verzeichnisservers) von einem Terminal aus in den Ordner, in dem er installiert ist, und führen Folgendes aus: + + `util/config system directory_realm YOURREALMNAME` + (**YOURREALMNAME** kann jeder beliebige Name für Ihren Realm sein) + + dann: + + `util/config system realm_token THEPASSWORD` + (**THEPASSWORD** ist das Passwort, das Sie für Ihren Realm verwenden möchten) + **HINWEIS:** Verwenden Sie für jeden Hub denselben Realm-Namen und dasselbe Passwort. + +- Führen Sie schließlich für jeden „Client“-Hub (von einem Terminal aus) aus: + + `util/config system directory_server https://theaddressofyourdirectoryserver.com` + +Wenn Sie sich nun das Verzeichnis jedes Hubs ansehen, sollten nur die Kanäle angezeigt werden, die auf den Hubs in Ihrem Realm existieren. Ich habe bisher mit zwei Hubs getestet, und es scheint gut zu funktionieren. Channels, die in jedem Hub erstellt wurden, werden im Primärverzeichnis und anschließend im Verzeichnis aller Client-Hubs angezeigt. + +#### Probleme + +Als ich den ersten Hub erstellte, lief er etwa eine Stunde lang, bevor ich ihn auf PRIMARY_MODE umstellte, und nachdem ich ihn umgestellt hatte, waren noch einige Kanäle aus der gesamten Matrix im Verzeichnis vorhanden. Ich habe sie aus der xchan-Tabelle gelöscht, und das scheint das Problem behoben zu haben.
\ No newline at end of file diff --git a/doc/de/adminmanual/Schema-development.md b/doc/de/adminmanual/Schema-development.md new file mode 100644 index 000000000..5e2304e61 --- /dev/null +++ b/doc/de/adminmanual/Schema-development.md @@ -0,0 +1,45 @@ +### Hubzilla-Entwicklung - ein Leitfaden für das Schemasystem + +Ein Schema ist, kurz gesagt, eine Sammlung von Einstellungen für eine Reihe von Variablen, die bestimmte Elemente eines Themes definieren. Ein Schema wird so geladen, als wäre es Teil der config.php und hat Zugang zu allen Informationen. Das bedeutet, dass es identitätsbewusst ist und für einige interessante Dinge verwendet werden kann. Man könnte z. B. die Optionen nach Dienstklassen einschränken oder verschiedenen Mitgliedern unterschiedliche Optionen anbieten. + +Standardmäßig filtern wir nur danach, ob der Expertenmodus aktiviert ist oder nicht. Wenn der Expertenmodus aktiviert ist, werden dem Mitglied alle Optionen angezeigt. Ist dies nicht der Fall, stehen nur Schema, Hintergrundbild, Schriftart und Iconset zur Auswahl. + +Ein Schema wird *erst nach* den persönlichen Einstellungen des Mitglieds geladen. Um einem Mitglied die Möglichkeit zu geben, einen bestimmten Aspekt eines Schemas zu überschreiben, würden Sie daher die folgende Syntax verwenden: + +``` + if (! $foo) + $foo = 'bar'; +``` + +Es gibt jedoch Umstände - insbesondere bei positionalen Elementen -, unter denen es wünschenswert (oder notwendig) sein kann, die Einstellungen eines Mitglieds zu überschreiben. In diesem Fall ist die Syntax noch einfacher: + +``` + $foo = 'bar'; +``` + +Die Mitglieder werden Ihnen dies jedoch nicht danken, also verwenden Sie es nur, wenn es erforderlich ist. +Wenn keine persönlichen Optionen eingestellt sind und kein Schema ausgewählt ist, wird zunächst versucht, ein Schema mit dem Dateinamen „default.php“ zu laden. Diese Datei sollte niemals in ein Thema eingebunden werden. Wenn dies der Fall ist, wird es zu Konflikten kommen, wenn andere ihren Code aktualisieren. Vielmehr sollte dies von den Administratoren für jede Seite einzeln festgelegt werden. default.php und default.css MÜSSEN Symlinks zu bestehenden Schemadateien sein. + +Ihr Schema muss - und sollte - nicht alle diese Werte enthalten. Nur die Werte, die von den Standardwerten abweichen, sollten aufgeführt werden. Dies gibt Ihnen einige sehr mächtige Optionen mit sehr wenigen Zeilen Code. + +Beachten Sie, dass die verfügbaren Optionen von Thema zu Thema unterschiedlich sind. Für das Redbasic-Theme sind folgende Optionen verfügbar: + +- nav_colour Die Farbe der Navigationsleiste. Die Optionen sind rot, schwarz und silber. Alternativ kann man $nav_bg_1, $nav_bg_2, $nav_bg_3 und $nav_bg_4 einstellen, um Farbverläufe und Hover-Effekte zu erzielen. +- banner_colour Die Schriftfarbe des Bannerelements. Akzeptiert einen RGB- oder Hex-Wert. +- bgcolour Legt die Hintergrundfarbe des Körpers fest. Akzeptiert einen RGB- oder Hex-Wert. +- background_image Legt ein Hintergrundbild fest. Akzeptiert eine URL oder einen Pfad. +- item_colour Legt die Hintergrundfarbe von Elementen fest. Akzeptiert einen RGB- oder Hex-Wert. +- item_opacity Legt die Deckkraft der Elemente fest. Akzeptiert einen Wert von 0,01 bis 1 +- toolicon_colour Legt die Farbe der Werkzeugsymbole fest. Akzeptiert einen RGB- oder Hex-Wert. +- toolicon_activecolour Legt die Farbe der aktiven oder mit dem Mauszeiger gehaltenen Werkzeugsymbole fest. +- font_size Legt die Größe der Schriftarten in Artikeln und Beiträgen fest. Akzeptiert px oder em. +- body_font_size Legt die Größe der Schriftarten auf der Body-Ebene fest. Akzeptiert px oder em. +- font_colour Legt die Farbe der Schrift fest. Akzeptiert einen RGB- oder Hex-Wert. +- radius Legt den Radius der Ecken fest. Akzeptiert einen Zahlenwert und ist immer in px. +- shadow Legt die Größe der Schatten fest, die bei Inline-Bildern angezeigt werden. Akzeptiert einen numerischen Wert. Hinweis: Schatten werden nicht auf Smileys angewendet. +- converse_width Legt die maximale Breite des Inhaltsbereichs in px fest. +- nav_min_opacity +- top_photo +- antwort_foto + +Wenn eine Datei your_schema_name.css gefunden wird, wird der Inhalt dieser Datei an das Ende von style.css angehängt. Dies gibt dem Schema-Entwickler die Möglichkeit, jede Style-Komponente zu überschreiben.
\ No newline at end of file diff --git a/doc/de/adminmanual/Widgets.md b/doc/de/adminmanual/Widgets.md new file mode 100644 index 000000000..a222a0533 --- /dev/null +++ b/doc/de/adminmanual/Widgets.md @@ -0,0 +1,99 @@ +### Grundlegende Widgets + +Einige/viele dieser Widgets haben Einschränkungen, die die Art der Seite, auf der sie erscheinen können, einschränken oder eine Anmeldung erfordern können + +- clock - zeigt die aktuelle Zeit an + - args: military (1 oder 0) - verwendet 24-Stunden-Zeit anstelle von AM/PM +- profile - zeigt eine Profil-Seitenleiste auf Seiten an, die Profile laden (Seiten mit Nickname in der URL) +- tagcloud - zeigt eine Tagcloud von Webseiten-Elementen an + - args: count - Anzahl der Elemente, die zurückgegeben werden sollen (Standardwert 24) +- collections - Auswahl der Privatsphärengruppe für den aktuell eingeloggten Kanal + - args: mode - eine der Optionen „conversation“, „group“, „abook“ je nach Modul +- suggestions - Freundesvorschläge für den aktuell angemeldeten Kanal +- follow - zeigt ein Textfeld zum Folgen eines anderen Channels an +- notes - privater Notizbereich für den aktuell eingeloggten Kanal, wenn die Funktion private_notes aktiviert ist +- savedsearch - Netzwerk-/Matrixsuche mit Speicherung - muss eingeloggt und die savedsearch-Funktion aktiviert sein +- filer - Auswahl abgelegter Elemente aus dem Netzwerk/Matrix-Stream - muss eingeloggt sein +- archive - Datumsbereichswähler für Netzwerk- und Kanalseiten + - args: 'wall' - 1 oder 0, Begrenzung auf Wall-Posts oder Netzwerk-/Matrix-Posts (Standard) +- fullprofile - wie das aktuelle Profil +- categories - Kategorien-Filter (Channel-Seite) +- tagcloud_wall - Tagcloud nur für Channelseite + - args: 'limit' - Anzahl der Tags, die zurückgegeben werden sollen (Standardwert 50) +- catcloud_wall - Tagcloud für die Kategorien der Kanalseite + - args: 'limit' - Anzahl der zurückzugebenden Kategorien (Standardwert 50) +- affinity - Affinitäts-Schieberegler für die Netzwerk-Seite - muss eingeloggt sein +- settings_menu - Seitenleistenmenü für die Einstellungsseite, muss eingeloggt sein +- mailmenu - Seitenleistenmenü für die Seite mit den privaten Nachrichten - muss eingeloggt sein +- design_tools - Menü für Design-Tools für Seiten zur Erstellung von Webseiten, muss eingeloggt sein +- findpeople - Werkzeuge, um andere Kanäle zu finden +- photo_albums - Liste der Fotoalben des aktuellen Seitenbesitzers mit einem Auswahlmenü +- vcard - Mini-Profil-Seitenleiste für die Person von Interesse (Seitenbesitzer, was auch immer) +- dirsafemode - Werkzeug zur Verzeichnisauswahl - nur auf Verzeichnisseiten +- dirsort - Werkzeug zur Verzeichnisauswahl - nur auf Verzeichnisseiten +- dirtags - Verzeichnis-Werkzeug - nur auf Verzeichnisseiten +- menu_preview - Vorschau eines Menüs - nur auf Menübearbeitungsseiten +- chatroom_list - Liste der Chaträume für den Seitenbesitzer +- bookmarkedchats - Liste der Chaträume mit Lesezeichen, die auf dieser Seite für den aktuellen Betrachter gesammelt wurden +- suggestedchats - „interessante“ Chaträume für den aktuellen Betrachter ausgewählt +- item - zeigt ein einzelnes Webpage-Element nach Mitte oder Seitentitel an + - args: + - channel_id - Kanal, dem der Inhalt gehört, Standard ist die profile_uid + - mid - message_id der anzuzeigenden Webseite (muss eine Webseite sein, kein Konversationselement) + - title - URL-Seitentitel der Webseite (muss entweder title oder mid enthalten) +- photo - Anzeige eines einzelnen Fotos + - args: + - src - URL des Fotos, muss http oder https sein + - zrl - zid-authentifizierter Link verwenden + - style - CSS-Style-String +- cover_photo - zeigt das Titelbild für den ausgewählten Kanal an + - args: + - channel_id - zu verwendender Kanal, Standard ist die profile_uid + - style - CSS-Style-String (standardmäßig wird die Größe dynamisch an die Breite des Bereichs angepasst) + +- photo_rand - zeigt ein zufälliges Foto aus einem Ihrer Fotoalben an. Fotoberechtigungen werden beachtet + - args: + - album - Name des Albums (sehr zu empfehlen, wenn Sie viele Fotos haben) + - scale - typischerweise 0 (Originalgröße), 1 (1024px), 2, (640px) oder 3 (320px) + - style - CSS-Style-String + - channel_id - wenn nicht Ihre eigene +- random_block - zeigt ein zufälliges Blockelement aus Ihrer Sammlung von Webpage Design Tools an. Erlaubnisse werden beachtet. + - args: + - contains - gibt nur Blöcke zurück, die den String contains im Blocknamen enthalten + - channel_id - wenn nicht Ihre eigene +- tasklist - liefert eine Aufgaben- oder To-Do-Liste für den aktuell eingeloggten Channel. + - args: + - all - zeigt erledigte Aufgaben an, wenn all ungleich Null ist. +- forums - liefert eine Liste der verbundenen öffentlichen Foren mit ungesehenen Beiträgen für den aktuell eingeloggten Channel. +- activity - liefert eine Liste der Autoren von ungelesenen Netzwerkinhalten für den aktuell eingeloggten Channel. +- album - stellt ein Widget zur Verfügung, das ein komplettes Fotoalbum aus den Alben des Seitenbesitzers enthält; dies kann zu groß sein, um in einem Seitenleistenbereich dargestellt zu werden, und wird am besten als Widget für einen Inhaltsbereich implementiert. + - args: + - album - Name des Albums + - title - optionaler Titel, wenn nicht vorhanden wird der Albumname verwendet + +#### **Neue Widgets erstellen** + +#### **Klassen-Widgets** + +Um ein klassenbasiertes Widget namens 'slugfish' zu erstellen, erstellen Sie eine Datei mit folgendem Inhalt: + +```php +<?php +namespace Zotlabs\Widget; +class Slugfish { + + function widget($args) { + + ... der Widget-Code kommt hier hin. + ... Die Funktion gibt einen String zurück, der den HTML-Inhalt des Widgets darstellt. + ... $args ist ein benanntes Array, dem alle [var]-Variablen aus dem Layout-Editor übergeben werden + ... Zum Beispiel füllt [widget=slugfish][var=count]3[/var][/widget] $args mit + ... [ 'count' => 3 ] + } + +} + +?> +``` + +Die resultierende Datei kann in Zotlabs/Widgets/Slugfish.php abgelegt werden. Sie kann auch von einem Git-Repository mit util/add_widget_repo verlinkt werden.
\ No newline at end of file diff --git a/doc/de/adminmanual/Zot---A-High-Level-Overview.md b/doc/de/adminmanual/Zot---A-High-Level-Overview.md new file mode 100644 index 000000000..c86febf6f --- /dev/null +++ b/doc/de/adminmanual/Zot---A-High-Level-Overview.md @@ -0,0 +1,111 @@ +### Nomad - Ein Überblick auf oberer Ebene + +Hier ist eine allgemeine Beschreibung der Funktionsweise von Nomad. + +In diesem Beispiel wird „Indigo“ eine öffentliche Nachricht von seiner Website „podunk.edu“ aus versenden. „Nickordo„ ist ein Empfänger auf einer anderen Website (“example.com"). + +Indigo stellt seine Nachricht zuerst auf podunk.edu ein. podunk.edu schaut nach, wer die Nachricht erhalten soll und findet Nickordo. Nickordo postet normalerweise von example.com aus, also fügen wir dieses Ziel zu unserer Liste der Empfänger hinzu. Wir können auch andere Ziele für Nickordo und alle anderen, die Indigos Beiträge verfolgen, hinzufügen. + +In diesem Beispiel stellen wir fest, dass wir nur einen bekannten Empfänger an einem bekannten Ort haben. + +Wir senden ein Paket an example.com: + + + + { + "type":"notify", + "sender":{ + "guid":"kgVFf_1_SSbyqH-BNWjWuhAvJ2EhQBTUdw-Q1LwwssAntr8KTBgBSzNVzUm9_RwuDpxI6X8me_QQhZMf7RfjdA", + "guid_sig":"PT9-TApzpm7QtMxC63MjtdK2nUyxNI0tUoWlOYTFGke3kNdtxSzSvDV4uzq_7SSBtlrNnVMAFx2_1FDgyKawmqVtRPmT7QSXrKOL2oPzL8Hu_nnVVTs_0YOLQJJ0GYACOOK-R5874WuXLEept5-KYg0uShifsvhHnxnPIlDM9lWuZ1hSJTrk3NN9Ds6AKpyNRqf3DUdz81-Xvs8I2kj6y5vfFtm-FPKAqu77XP05r74vGaWbqb1r8zpWC7zxXakVVOHHC4plG6rLINjQzvdSFKCQb5R_xtGsPPfvuE24bv4fvN4ZG2ILvb6X4Dly37WW_HXBqBnUs24mngoTxFaPgNmz1nDQNYQu91-ekX4-BNaovjDx4tP379qIG3-NygHTjFoOMDVUvs-pOPi1kfaoMjmYF2mdZAmVYS2nNLWxbeUymkHXF8lT_iVsJSzyaRFJS1Iqn7zbvwH1iUBjD_pB9EmtNmnUraKrCU9eHES27xTwD-yaaH_GHNc1XwXNbhWJaPFAm35U8ki1Le4WbUVRluFx0qwVqlEF3ieGO84PMidrp51FPm83B_oGt80xpvf6P8Ht5WvVpytjMU8UG7-js8hAzWQeYiK05YTXk-78xg0AO6NoNe_RSRk05zYpF6KlA2yQ_My79rZBv9GFt4kUfIxNjd9OiV1wXdidO7Iaq_Q", + "url":"http:\/\/podunk.edu", + "url_sig":"T8Bp7j5DHHhQDCFcAHXfuhUfGk2P3inPbImwaXXF1xJd3TGgluoXyyKDx6WDm07x0hqbupoAoZB1qBP3_WfvWiJVAK4N1FD77EOYttUEHZ7L43xy5PCpojJQmkppGbPJc2jnTIc_F1vvGvw5fv8gBWZvPqTdb6LWF6FLrzwesZpi7j2rsioZ3wyUkqb5TDZaNNeWQrIEYXrEnWkRI_qTSOzx0dRTsGO6SpU1fPWuOOYMZG8Nh18nay0kLpxReuHCiCdxjXRVvk5k9rkcMbDBJcBovhiSioPKv_yJxcZVBATw3z3TTE95kGi4wxCEenxwhSpvouwa5b0hT7NS4Ay70QaxoKiLb3ZjhZaUUn4igCyZM0h6fllR5I6J_sAQxiMYD0v5ouIlb0u8YVMni93j3zlqMWdDUZ4WgTI7NNbo8ug9NQDHd92TPmSE1TytPTgya3tsFMzwyq0LZ0b-g-zSXWIES__jKQ7vAtIs9EwlPxqJXEDDniZ2AJ6biXRYgE2Kd6W_nmI7w31igwQTms3ecXe5ENI3ckEPUAq__llNnND7mxp5ZrdXzd5HHU9slXwDShYcW3yDeQLEwAVomTGSFpBrCX8W77n9hF3JClkWaeS4QcZ3xUtsSS81yLrp__ifFfQqx9_Be89WVyIOoF4oydr08EkZ8zwlAsbZLG7eLXY" + }, + "callback":"\/post", + "version":1, + "secret":"1eaa6613699be6ebb2adcefa5379c61a3678aa0df89025470fac871431b70467" + } + +In diesem Paket steht das Folgende: + +Ich bin Indigo und hier ist der Beweis. Ich poste von podunk.edu und hier ist der Beweis. Ich habe ein Paket für Sie. Die Kontrollnummer lautet „1eaa6613....“. + +Example.com nimmt dieses Paket an und sagt: „Moment mal - ich kenne Sie nicht. Ich möchte beweisen, wer du bist.“ Example.com stellt also eine Verbindung zu podunk.edu über eine „bekannte URL“ her, die wir für diesen Zweck verwenden, und sucht nach der oben genannten „guid“. Es sollte eine Reihe von Informationen zurückgeben, darunter auch einen öffentlichen Schlüssel. Example.com verwendet diesen Schlüssel, um die Signaturen in der Nachricht zu überprüfen und festzustellen, ob es tatsächlich eine Person namens Indigo bei podunk.edu gibt. Wir müssen dies nur einmal tun. (Beachten Sie, dass Indigo von jedem Ort aus posten kann. Wir müssen nur beweisen, dass es sich um Indigo handelt und dass Indigo beweisen kann, dass er von einem anderen Standort aus postet). + +Dann trennt example.com die Verbindung und weist darauf hin, dass eine Nachricht auf podunk.edu wartet. Entweder sofort oder immer dann, wenn der Drang besteht (je nachdem, wie wichtig Indigo für jemanden auf dieser Website ist), „ruft“ example.com podunk.edu an. Die Nachricht lautet in etwa so: + + + + { + "type":"pickup", + "url":"http:\/\/example.com", + "callback_sig":"teE1_fLIqfyeCuZY4iS7sNU8jUlUuqYOYBiHLarkC99I9K-uSr8DAwVW8ZPZRK-uYdxRMuKFb6cumF_Gt9XjecCPBM8HkoXHOi_VselzJkxPwor4ZPtWYWWaFtRfcAm794LrWjdz62zdESTQd2JJIZWbrli1sUhK801BF3n0Ye6-X1MWhy9EUTVlNimOeRipcuD_srMhUcAXOEbLlrugZ8ovy2YBe6YOXkS8jj0RSFjsOduXAoVhQmNpcobSYsDvaQS3e3MvE6-oXE602zGQhuNLr7DIMt9PCdAeQo-ZM-DHlZGCkGk4O2oQFCXFzGPqLUMWDACGJfTfIWGoh_EJqT_SD5b_Yi_Wk9S1lj7vb-lmxe5JuIf7ezWzHoBT8vswnZxPYlidH2i9wapdzij9il_qqcCWWHIp7q_XkY_Zj52Z4r4gdmiqM-8y1c_1SDX7hrJFRwqL_PKFbEvyi5nMWTEzqp55Tay5Woiv19STK_H_8ufFfD9AOkYnk6rIOMsk9dn3a5tAFpDRyRndXkBWAXwiJjiND2zjue7BFu7Ty40THXcfYRh1a5XrAXcaGeYuagg-8J9tAufu9_LY3qGazFg8kRBVMOn4M8DRKSIhKj7z4MnbYL0s09gREojy4jqWO3VkaOjP2jUGzoPuUDLasudE1ehWFq0K_MTQNavgmp8", + "callback":"http:\/\/example.com\/post", + "secret":"1eaa6613699be6ebb2adcefa5379c61a3678aa0df89025470fac871431b70467", + "secret_sig":"O7nB4_UJHBXi28Suwl9LBZF9hI_9KGVTgehnUlWF1oYMNRnBbVHB9lzUfAoalvp3STbU3xJbtD_S58tv6MfV7J5j2V_S1W5ex3dulmDGB8Pt_7Fe5mbEPmjQFcfv3Eg5dUjYIuDl0TDScfrHyImj7RZIWHbwd7wWVoMzzDa_o33klpYmKZCBvObCh55bRrlFkXZs_dRuOiPwkfX0C6_XES4OyOIYl45V30rdhmf-STrf4L9dKYy_axQ12RIwRcKychvVLwlUJn3bn9lgNXRRU_HTne-09OPcJbUOdcD3DkFoKOxMULBNKPHzsCau0ICYug7S0EP6LpCom_mW78s08LyVA1vYeFZjevBCiGecj57yIAQDYi6_rpWJfihYaWHRN0oqtScUR4Bdf0bQbEHxMs4zAtrOAxfyJCbi6U1pfnGgzXzB9ulOYGnVGNTF7Ey4K7FOZIBtk0ILY2JfvBUaVvVs8ttagOOHmhWhnbCvrnOFlkNdlce7zoJCSUJENUOCYmTRfwB_Jno5fAzRnrsYU3_Z-l1mzniU_OmUPz8mPEh7PwhkqAiVlyaM-q15gn7l2lAIDk9kp2X_iCme7v4V0ADN_DbpaI_0-6mPw5HLbKrCsA-sxlSMB4DO4lDCHYkauj0l25sbfroRWB_hax1O4Q0oWyOlVJLUqEC5nuUJCCE" + } + +Was diese Nachricht aussagt, ist: Hier ist example.com, ich habe einen Beweis, und ich bin hier, um ein Paket abzuholen. Hier ist die Sendungsverfolgungsnummer, und hier ist der Beweis, dass dies die Sendungsverfolgungsnummer ist, die Sie vermutlich an example.com gesendet haben. + +Gut genug. Podunk.edu überprüft die Geschichte und tatsächlich, es ist example.com, und ja, da wartet ein Paket mit dieser Kontrollnummer. Hier ist das Paket... + + + + { + "success":1, + "pickup":{ + "notify":{ + "type":"notify", + "sender":{ + "guid":"kgVFf_1_SSbyqH-BNWjWuhAvJ2EhQBTUdw-Q1LwwssAntr8KTBgBSzNVzUm9_RwuDpxI6X8me_QQhZMf7RfjdA", + "guid_sig":"PT9-TApzpm7QtMxC63MjtdK2nUyxNI0tUoWlOYTFGke3kNdtxSzSvDV4uzq_7SSBtlrNnVMAFx2_1FDgyKawmqVtRPmT7QSXrKOL2oPzL8Hu_nnVVTs_0YOLQJJ0GYACOOK-R5874WuXLEept5-KYg0uShifsvhHnxnPIlDM9lWuZ1hSJTrk3NN9Ds6AKpyNRqf3DUdz81-Xvs8I2kj6y5vfFtm-FPKAqu77XP05r74vGaWbqb1r8zpWC7zxXakVVOHHC4plG6rLINjQzvdSFKCQb5R_xtGsPPfvuE24bv4fvN4ZG2ILvb6X4Dly37WW_HXBqBnUs24mngoTxFaPgNmz1nDQNYQu91-ekX4-BNaovjDx4tP379qIG3-NygHTjFoOMDVUvs-pOPi1kfaoMjmYF2mdZAmVYS2nNLWxbeUymkHXF8lT_iVsJSzyaRFJS1Iqn7zbvwH1iUBjD_pB9EmtNmnUraKrCU9eHES27xTwD-yaaH_GHNc1XwXNbhWJaPFAm35U8ki1Le4WbUVRluFx0qwVqlEF3ieGO84PMidrp51FPm83B_oGt80xpvf6P8Ht5WvVpytjMU8UG7-js8hAzWQeYiK05YTXk-78xg0AO6NoNe_RSRk05zYpF6KlA2yQ_My79rZBv9GFt4kUfIxNjd9OiV1wXdidO7Iaq_Q", + "url":"http:\/\/z.podunk.edu", + "url_sig":"T8Bp7j5DHHhQDCFcAHXfuhUfGk2P3inPbImwaXXF1xJd3TGgluoXyyKDx6WDm07x0hqbupoAoZB1qBP3_WfvWiJVAK4N1FD77EOYttUEHZ7L43xy5PCpojJQmkppGbPJc2jnTIc_F1vvGvw5fv8gBWZvPqTdb6LWF6FLrzwesZpi7j2rsioZ3wyUkqb5TDZaNNeWQrIEYXrEnWkRI_qTSOzx0dRTsGO6SpU1fPWuOOYMZG8Nh18nay0kLpxReuHCiCdxjXRVvk5k9rkcMbDBJcBovhiSioPKv_yJxcZVBATw3z3TTE95kGi4wxCEenxwhSpvouwa5b0hT7NS4Ay70QaxoKiLb3ZjhZaUUn4igCyZM0h6fllR5I6J_sAQxiMYD0v5ouIlb0u8YVMni93j3zlqMWdDUZ4WgTI7NNbo8ug9NQDHd92TPmSE1TytPTgya3tsFMzwyq0LZ0b-g-zSXWIES__jKQ7vAtIs9EwlPxqJXEDDniZ2AJ6biXRYgE2Kd6W_nmI7w31igwQTms3ecXe5ENI3ckEPUAq__llNnND7mxp5ZrdXzd5HHU9slXwDShYcW3yDeQLEwAVomTGSFpBrCX8W77n9hF3JClkWaeS4QcZ3xUtsSS81yLrp__ifFfQqx9_Be89WVyIOoF4oydr08EkZ8zwlAsbZLG7eLXY" + }, + "callback":"\/post", + "version":1, + "secret":"1eaa6613699be6ebb2adcefa5379c61a3678aa0df89025470fac871431b70467" + }, + "message":{ + "message_id":"10b049ce384cbb2da9467319bc98169ab36290b8bbb403aa0c0accd9cb072e76@podunk.edu", + "message_top":"10b049ce384cbb2da9467319bc98169ab36290b8bbb403aa0c0accd9cb072e76@podunk.edu", + "message_parent":"10b049ce384cbb2da9467319bc98169ab36290b8bbb403aa0c0accd9cb072e76@podunk.edu", + "created":"2012-11-20 04:04:16", + "edited":"2012-11-20 04:04:16", + "title":"", + "body":"Hi Nickordo", + "app":"", + "verb":"post", + "object_type":"", + "target_type":"", + "permalink":"", + "location":"", + "longlat":"", + "owner":{ + "name":"Indigo", + "address":"indigo@podunk.edu", + "url":"http:\/\/podunk.edu", + "photo":{ + "mimetype":"image\/jpeg", + "src":"http:\/\/podunk.edu\/photo\/profile\/m\/5" + }, + "guid":"kgVFf_1_SSbyqH-BNWjWuhAvJ2EhQBTUdw-Q1LwwssAntr8KTBgBSzNVzUm9_RwuDpxI6X8me_QQhZMf7RfjdA", + "guid_sig":"PT9-TApzpm7QtMxC63MjtdK2nUyxNI0tUoWlOYTFGke3kNdtxSzSvDV4uzq_7SSBtlrNnVMAFx2_1FDgyKawmqVtRPmT7QSXrKOL2oPzL8Hu_nnVVTs_0YOLQJJ0GYACOOK-R5874WuXLEept5-KYg0uShifsvhHnxnPIlDM9lWuZ1hSJTrk3NN9Ds6AKpyNRqf3DUdz81-Xvs8I2kj6y5vfFtm-FPKAqu77XP05r74vGaWbqb1r8zpWC7zxXakVVOHHC4plG6rLINjQzvdSFKCQb5R_xtGsPPfvuE24bv4fvN4ZG2ILvb6X4Dly37WW_HXBqBnUs24mngoTxFaPgNmz1nDQNYQu91-ekX4-BNaovjDx4tP379qIG3-NygHTjFoOMDVUvs-pOPi1kfaoMjmYF2mdZAmVYS2nNLWxbeUymkHXF8lT_iVsJSzyaRFJS1Iqn7zbvwH1iUBjD_pB9EmtNmnUraKrCU9eHES27xTwD-yaaH_GHNc1XwXNbhWJaPFAm35U8ki1Le4WbUVRluFx0qwVqlEF3ieGO84PMidrp51FPm83B_oGt80xpvf6P8Ht5WvVpytjMU8UG7-js8hAzWQeYiK05YTXk-78xg0AO6NoNe_RSRk05zYpF6KlA2yQ_My79rZBv9GFt4kUfIxNjd9OiV1wXdidO7Iaq_Q" + }, + "author":{ + "name":"Indigo", + "address":"indigo@podunk.edu", + "url":"http:\/\/podunk.edu", + "photo":{ + "mimetype":"image\/jpeg", + "src":"http:\/\/podunk.edu\/photo\/profile\/m\/5" + }, + "guid":"kgVFf_1_SSbyqH-BNWjWuhAvJ2EhQBTUdw-Q1LwwssAntr8KTBgBSzNVzUm9_RwuDpxI6X8me_QQhZMf7RfjdA", + "guid_sig":"PT9-TApzpm7QtMxC63MjtdK2nUyxNI0tUoWlOYTFGke3kNdtxSzSvDV4uzq_7SSBtlrNnVMAFx2_1FDgyKawmqVtRPmT7QSXrKOL2oPzL8Hu_nnVVTs_0YOLQJJ0GYACOOK-R5874WuXLEept5-KYg0uShifsvhHnxnPIlDM9lWuZ1hSJTrk3NN9Ds6AKpyNRqf3DUdz81-Xvs8I2kj6y5vfFtm-FPKAqu77XP05r74vGaWbqb1r8zpWC7zxXakVVOHHC4plG6rLINjQzvdSFKCQb5R_xtGsPPfvuE24bv4fvN4ZG2ILvb6X4Dly37WW_HXBqBnUs24mngoTxFaPgNmz1nDQNYQu91-ekX4-BNaovjDx4tP379qIG3-NygHTjFoOMDVUvs-pOPi1kfaoMjmYF2mdZAmVYS2nNLWxbeUymkHXF8lT_iVsJSzyaRFJS1Iqn7zbvwH1iUBjD_pB9EmtNmnUraKrCU9eHES27xTwD-yaaH_GHNc1XwXNbhWJaPFAm35U8ki1Le4WbUVRluFx0qwVqlEF3ieGO84PMidrp51FPm83B_oGt80xpvf6P8Ht5WvVpytjMU8UG7-js8hAzWQeYiK05YTXk-78xg0AO6NoNe_RSRk05zYpF6KlA2yQ_My79rZBv9GFt4kUfIxNjd9OiV1wXdidO7Iaq_Q" + } + } + } + } + + + +Und das ist das Paket (die ursprüngliche Nachricht). Example.com wandelt diese in eine Form um, die von Nickordo eingesehen werden kann, und benachrichtigt Nickordo, dass es eine neue Nachricht gibt. Podunk.edu **könnte** feststellen, dass noch andere Pakete auf example.com warten. Wenn dies der Fall ist, kann es auch alle anderen wartenden Pakete zu diesem Zeitpunkt versenden. Jedes dieser Pakete ist mit der ursprünglichen Sendungsnummer versehen.
\ No newline at end of file diff --git a/doc/de/adminmanual/administration.md b/doc/de/adminmanual/administration.md new file mode 100644 index 000000000..ab8cd21c6 --- /dev/null +++ b/doc/de/adminmanual/administration.md @@ -0,0 +1,13 @@ +### Administration + +#### Website-Verwaltung + +Die Verwaltung der Website erfolgt in der Regel über die Verwaltungsseite, die sich unter /admin auf Ihrer Website befindet. Um auf diese Seite zugreifen zu können, müssen Sie über Verwaltungsrechte für den Server verfügen. Administrationsrechte werden dem ersten Konto gewährt, das sich auf Ihrer Website registriert, **vorausgesetzt,** die E-Mail-Adresse dieses Kontos stimmt genau mit der E-Mail-Adresse überein, die Sie bei der Einrichtung als E-Mail-Adresse des Administrators angegeben haben. + + + +Es gibt mehrere Möglichkeiten, wie dies fehlschlagen und das System ohne ein Administratorkonto bleiben kann, z. B. wenn das erste Konto, das erstellt wurde, eine andere E-Mail-Adresse als die bei der Einrichtung angegebene Administrator-E-Mail-Adresse angegeben hat. + +Aus Sicherheitsgründen gibt es auf dem System keine Webseite oder Schnittstelle, die Ihnen Administratorrechte verleiht. Wenn Sie eine Situation korrigieren müssen, in der ein System kein Administratorkonto hat, **muss** dies durch Bearbeiten der Kontotabelle in der Datenbank geschehen. Es gibt keine andere Möglichkeit. Dazu müssen Sie den Eintrag in der Kontotabelle finden, der zu dem gewünschten Administrator gehört, und „account_roles“ für diesen Eintrag auf 4096 setzen. Anschließend können Sie die Administratorseite über das Profilmenü Ihres Systems oder direkt über /admin aufrufen. + +Ein Hub kann mehrere Administratoren haben und die Anzahl der Administratoren ist nicht begrenzt. Wiederholen Sie den obigen Vorgang für jedes Konto, das Sie mit Administrationsrechten ausstatten möchten.
\ No newline at end of file diff --git a/doc/de/adminmanual/advanced_configurations.md b/doc/de/adminmanual/advanced_configurations.md new file mode 100644 index 000000000..fb4644384 --- /dev/null +++ b/doc/de/adminmanual/advanced_configurations.md @@ -0,0 +1,326 @@ +### Erweiterte Konfigurationen für Administratoren + +*Dieses Dokument setzt voraus, dass Sie ein Administrator sind.* + +Hubzilla enthält viele Konfigurationsoptionen, die im Hauptverwaltungsbereich verborgen sind. Im Allgemeinen handelt es sich dabei um Optionen, die als zu nischenartig, fortgeschritten oder verwirrend angesehen werden. + +Diese Einstellungen können über die Shell vom Webverzeichnis der obersten Ebene aus mit folgender Syntax geändert werden + +`util/config cat key value` +für eine Website-Konfiguration, oder + +`util/pconfig channel_id cat key value` +für eine Mitgliedskonfiguration. + +Für eine Site-Konfiguration ist eine weitere Möglichkeit, eine Zeile in .htconfig.php einzufügen, mit der Syntax: +`App::$config['cat']['Schlüssel'] = 'Wert';` + + + +#### Mitgliederkonfiguration (pconfig) + +- system.always_my_theme + + Verwende immer dein eigenes Theme, wenn du Kanäle im selben Hub anschaust. Dies führt zu einigen recht einfallsreichen Problemen, wenn Kanäle mit themenabhängigen Comanche angezeigt werden. + +- system.blocked + + Ein Array von Xchans, die von diesem Channel blockiert werden. Technisch gesehen ist dies eine versteckte Konfiguration und gehört hierher, aber Addons (insbesondere Superblock) haben dies in der Benutzeroberfläche verfügbar gemacht. + +- system.default_cipher + + Setzt den Standardchiffre, der für E2EE-Elemente verwendet wird. + +- system.display_friend_count + + Legt die Anzahl der Verbindungen fest, die im Widget des Verbindungsprofils angezeigt werden sollen. + +- system.do_not_track + + Wie der Browser-Header. Dies wird viele identitätsbasierte Funktionen unterbrechen. Sie sollten wirklich nur Berechtigungen setzen, die Sinn machen. + +- system.forcepublicuploads + + Erzwingt, dass hochgeladene Fotos öffentlich sind, wenn sie als Wandelemente hochgeladen werden. Es ist viel sinnvoller, die Berechtigungen von vornherein richtig zu setzen. Tun Sie das stattdessen. + +- system.network_page_default + + Legt die Standardparameter für die Anzeige der Netzwerkseite fest. Dies sollte den gleichen Querystring enthalten wie die manuelle Filterung. + +- system.paranoia + + Legt die Sicherheitsstufe der IP-Überprüfung fest. Wenn sich die IP-Adresse einer angemeldeten Sitzung ändert, wird diese Stufe angewendet, um festzustellen, ob das Konto als Sicherheitsverletzung abgemeldet werden sollte. Die Optionen sind: 0 - keine IP-Überprüfung 1 - 3 Oktette prüfen 2 - 2 Oktette prüfen 3 - Prüfung auf alle Unterschiede + +- system.prevent_tag_hijacking + + Verhindert, dass fremde Netzwerke Hashtags in Ihren Beiträgen klauen und sie auf ihre eigenen Ressourcen leiten. + +- system.startpage + + Eine weitere dieser technisch versteckten Konfigurationen, die von Addons zur Verfügung gestellt werden. Legt die Standardseite fest, die beim Einloggen angezeigt wird. Diese wird der Benutzeroberfläche durch das startpage-Addon zur Verfügung gestellt. + +- system.taganyone + + Erfordert, dass die gleichnamige Konfiguration aktiviert ist. Erlaubt das @mention tagging von jedem, egal ob man verbunden ist oder nicht. Dies skaliert nicht. + +- system.anonymous_kommentare + + Standardmäßig oder wenn auf 1 gesetzt, können benutzerdefinierte Berechtigungen gesetzt werden, um anonyme (moderierte) Kommentare wie bei WordPress zu erlauben, die vom Channel-Besitzer moderiert werden. Ist der Wert auf 0 gesetzt, kann kein Mitglied Ihrer Website dies auswählen oder aktivieren. + +- system.user_scalable + + Bestimmt, ob die App auf Touchscreens skalierbar ist. Standardmäßig auf on, zum Deaktivieren auf zero setzen - real zero, nicht nur false. + +#### Konfiguration der Website + +- randprofile.check + + Bei der Anforderung eines Zufallsprofils zuerst prüfen, ob es tatsächlich existiert + +- randprofile.retry + + Anzahl der Versuche, ein zufälliges Profil zu erhalten + +- system.admin_email + + Gibt die E-Mail-Adresse des Administrators für diese Site an. Diese wird bei der Installation festgelegt. + +- system.authlog + + Logdatei, die für die Protokollierung von Authentifizierungsfehlern verwendet wird. Wird verwendet, um eine Verbindung zu serverseitiger Software wie fail2ban herzustellen. Auth-Fehler werden auch in den Hauptprotokollen protokolliert. + +- system.auto_channel_create + + Fügt die notwendigen Formularelemente hinzu, um den ersten Kanal auf der Kontoregistrierungsseite zu erstellen, und erstellt ihn (möglicherweise nach einer E-Mail-Validierung oder der Genehmigung des Administrators). Dies schließt die Möglichkeit aus, einen Channel von einer anderen Website als ersten auf dieser Website für ein neues Konto erstellten Channel zu importieren. Verwendung mit system.default_permissions_role zur Rationalisierung der Registrierung. + +- system.auto_follow + + Der erste Channel eines Accounts folgt automatisch den hier aufgelisteten Channels - kommagetrennte Liste von Webbies (member@hub Adressen). + +- system.blacklisted_sites + + Ein Array spezifischer Hubs, die von diesem Hub komplett blockiert werden sollen. + +- system.block_public_search + + Ähnlich wie block_public, mit dem Unterschied, dass nur der öffentliche Zugang zu den Suchfunktionen blockiert wird. Nützlich für Seiten, die öffentlich sein wollen, aber von Suchmaschinen überrannt werden. + +- system.cron_hour + + Geben Sie eine Stunde an, in der cron_daily ausgeführt werden soll. Standardmäßig, ohne Konfiguration, wird dies um Mitternacht UTC ausgeführt. + +- system.default_permissions_role + + Wenn dieser Wert auf einen gültigen Namen für eine Berechtigungsrolle gesetzt ist, wird diese Rolle für den ersten Channel verwendet, der von einem neuen Konto erstellt wird, und es wird nicht nach dem „Channel-Typ“ im Formular zur Channel-Erstellung gefragt. Beispiele für gültige Namen sind: 'social', 'social_restricted', 'social_private', 'forum', 'forum_restricted' und 'forum_private'. Lesen Sie [hier](https://hub.hubzilla.hu/help/roles) mehr über Berechtigungsrollen. + +- system.default_profile_photo + + Legt das Profilfoto fest, mit dem neue Channels beginnen. Dies sollte den Namen eines Verzeichnisses enthalten, das sich unter images/default_profile_photos/ befindet, oder es sollte nicht gesetzt werden. Wenn es nicht gesetzt ist, wird 'rainbow_man' angenommen. + +- system.directorytags + + Legt die Anzahl der Schlüsselwort-Tags fest, die auf der Verzeichnisseite angezeigt werden. Die Voreinstellung ist 50, wenn sie nicht auf eine positive ganze Zahl gesetzt wird. + +- system.disable_directory_keywords + + Wenn '1', werden keine Verzeichnisschlüsselwörter angezeigt. Wenn der Hub ein Verzeichnisserver ist, verhindern Sie die Rückgabe von Schlüsselwörtern an alle Verzeichnis-Clients. Bitte setzen Sie dies nicht für Verzeichnisserver im Bereich RED_GLOBAL. + +- system.disable_discover_tab + + Hiermit können Sie die Fähigkeit, öffentliche Inhalte von externen Sites zu entdecken, vollständig deaktivieren. + +- system.disable_dreport + + Wenn '1', werden keine Zustellungsberichte gespeichert oder verlinkt. + +- system.dlogfile + + Logdatei, die für die Protokollierung von Entwicklungsfehlern verwendet wird. Genau dasselbe wie logger sonst. Dies ist keine Magie und erfordert Ihre eigenen Logging-Anweisungen. Entwickler-Tool. + +- system.email_notify_icon_url + + URL des Bildes (32x32), das in E-Mail-Benachrichtigungen (HTML-Bodies) angezeigt werden soll. + +- system.expire_delivery_reports + + Verfallsdatum in Tagen für Zustellungsberichte - Standardwert 10 + +- system.expire_limit + + Nicht mehr als diese Anzahl von Beiträgen pro Kanal pro Ablauflauf ablaufen lassen, um den Speicher nicht zu erschöpfen. Voreinstellung 5000. + +- system.photo_storage_type + + Wenn '1', wird das Dateisystem anstelle der SQL-Datenbank zum Speichern der Thumbnails verwendet. Voreinstellung ist '0'. Eingeführt in 4.2 + +- system.hidden_version_siteinfo + + Wenn 'true', wird die Softwareversion nicht auf den Seiten von siteinfo angezeigt (system.hide_version verbirgt die Version auch auf diesen Seiten, diese Einstellung verbirgt *nur* die Version auf den Seiten von siteinfo). + +- system.hide_help + + Link zur Hilfedokumentation nicht in der Navigationsleiste anzeigen + +- system.hide_in_statistiken + + Weist die roten Statistikserver an, diesen Hub in Hublisten komplett auszublenden. + +- system.hide_version + + Wenn true, wird die Softwareversion auf Webseiten und Tools nicht angezeigt. (*) Muss in .htconfig.php eingestellt werden. + +- system.ignore_imagick + + Ignoriert imagick und verwendet GD, auch wenn imagick auf dem Server installiert ist. Verhindert einige Probleme mit PNG-Dateien in älteren Versionen von imagick. + +- system.max_daily_registrations + + Legt die maximale Anzahl der an einem Tag erlaubten Neuanmeldungen fest. Nützlich, um eine Überzeichnung zu verhindern, wenn das Projekt in der Öffentlichkeit bekannt gemacht wird. + +- system.max_import_size + + Falls konfiguriert, die maximale Länge einer importierten Textnachricht. Diese wird normalerweise auf 200 KByte oder mehr belassen, um private Friendica-Fotos, die eingebettet sind, unterzubringen. + +- system.max_tagged_forums + + Spam-Schutz. Begrenzt die Anzahl der getaggten Foren, die in jedem Beitrag erkannt werden. Standard ist 2. Nur die ersten 'n' Tags werden als Foren zugestellt, die anderen verursachen keine Zustellung. + +- system.minimum_feedcheck_minutes + + Das minimale Intervall zwischen der Abfrage von RSS-Feeds. Wenn dieses Intervall kleiner als das Cron-Intervall ist, werden die Feeds bei jedem Cronjob abgefragt. Der Standardwert ist 60, wenn er nicht festgelegt wurde. Die Site-Einstellung kann auch für jeden einzelnen Kanal durch eine Serviceklassen-Einstellung mit dem treffenden Namen „minimum_feedcheck_minutes“ außer Kraft gesetzt werden. + +- system.no_age_restriction + + Beschränken Sie die Registrierung nicht auf Personen über 13 Jahren. In vielen Ländern ist es gesetzlich vorgeschrieben, dass das Alter angegeben werden muss und dass alle persönlichen Daten von Minderjährigen gesperrt werden müssen. + +- system.object_cache_days + + Legt fest, wie lange zwischengespeicherte eingebettete Inhalte ohne erneutes Abrufen verwendet werden können. Die Voreinstellung ist 30 Tage. + +- system.openssl_conf_file + + Geben Sie eine Datei an, die die OpenSSL-Konfiguration enthält. Wird in einigen Windows-Installationen benötigt, um die openssl-Konfigurationsdatei auf dem System zu finden. Lesen Sie zuerst den Code. Wenn Sie den Code nicht lesen können, spielen Sie nicht mit ihm. + +- system.openssl_encrypt + + Verschlüsselungs-Engine von openssl verwenden, Standard ist false (verwendet mcrypt für AES-Verschlüsselung) + +- system.optimize_items + + Führt optimise_table während einiger Aufgaben aus, um Ihre Datenbank sauber und defragmentiert zu halten. Dies geht zu Lasten der Leistung, während die Operationen laufen, sorgt aber auch dafür, dass die Dinge etwas schneller laufen, wenn sie nicht laufen. Es gibt auch CLI-Hilfsprogramme zur Durchführung dieser Operation, die Sie vielleicht bevorzugen, besonders wenn Sie eine große Site haben. + +- system.override_poll_lockfile + + Ignoriert die Sperrdatei im Poller-Prozess, damit mehr als ein Prozess gleichzeitig laufen kann. + +- system.paranoia + + Wie pconfig, aber auf einer site-weiten Basis. Kann durch Mitgliedereinstellungen überschrieben werden. + +- system.pin_types + + Array der zulässigen Elementtypen für die Anheftung. Die Standardwerte hängen vom Modul ab, können aber hier geändert werden. + +- system.photo_cache_time + + Wie lange die Fotos zwischengespeichert werden sollen, in Sekunden. Standardwert ist 86400 (1 Tag). Eine längere Zeit erhöht die Leistung, bedeutet aber auch, dass es länger dauert, bis geänderte Berechtigungen gelten. + +- system.plattform_name + + Was als Plattformname auf Webseiten und in Statistiken angezeigt werden soll. (*) Muss in .htconfig.php eingestellt werden. + +- system.rating_enabled + + Verteilte Reputationsberichte und Datenerfassung. Diese Funktion wird derzeit überarbeitet. + +- system.poke_basic + + Reduziert die Anzahl der poke-Verben auf genau 1 („poke“). Deaktivieren Sie andere Verben. + +- system.proc_run_use_exec + + Wenn 1, wird der Systemaufruf exec in proc_run verwendet, um Hintergrundaufgaben auszuführen. Standardmäßig verwenden wir proc_open und proc_close. Auf einigen (derzeit seltenen) Systemen funktioniert dies nicht gut. + +- system.projecthome + + Zeigt die Projektseite auf Ihrer Homepage für abgemeldete Betrachter an. + +- system.projekthome + + Legt die Projekthomepage als Startseite des Hubs fest. (Veraltet) + +- system.pubstream_bestellung + + Legt die Pubstream-Reihenfolge fest. Mögliche Werte 'commented' (Standard), 'created' und 'edited'. + +- system.register_link + + Pfad, auf den der „register“-Link im Anmeldeformular verweisen soll. Bei geschlossenen Sites wird dies auf 'pubsites' verweisen. Bei offenen Sites wird er normalerweise auf 'register' umgeleitet, aber Sie können dies auf eine benutzerdefinierte Site-Seite ändern, die Abonnements oder ähnliches anbietet. + +- system.reserved_channels + + Erlaube den Mitgliedern nicht, Kanäle mit dieser durch Kommata getrennten Liste von Namen (keine Leerzeichen) zu registrieren. + +- system.sellpage + + Eine URL, die in der Liste der öffentlichen Sites angezeigt wird, um Ihren Hub zu verkaufen - Serviceklassen anzeigen, usw. + +- system.startpage + + Legt die Standardseite fest, die nach einer Anmeldung für alle Channels auf dieser Website angezeigt wird. Kann durch Benutzereinstellungen überschrieben werden. + +- system.sys_expire_days + + Wie viele Tage sollen entdeckte öffentliche Inhalte von anderen Websites aufbewahrt werden? + +- system.taganyone + + Erlaubt das @mention-Tagging von jedem, egal ob Sie verbunden sind oder nicht. + +- system.tempdir + + Ort, an dem temporäre Dateien gespeichert werden (derzeit unbenutzt), Standard ist in der PHP-Konfiguration definiert. + +- system.tos_url + + Setzt einen alternativen Link für den ToS-Speicherort. + +- system.transport_security_header + + wenn ungleich Null und SSL verwendet wird, wird ein strict-transport-security-Header auf den Webseiten eingefügt + +- system.uploaddir + + Speicherort für das Hochladen von Dateien (Standard ist system.tempdir, derzeit nur vom js_upload-Plugin verwendet) + +- system.workflow_channel_next + + Die Seite, zu der neue Mitglieder unmittelbar nach der Erstellung eines Channels weitergeleitet werden sollen. + +- system.arbeitsablauf_register_next + + Die Seite, auf die Mitglieder direkt nach dem Erstellen eines Kontos geleitet werden (nur wenn auto_channel_create oder UNO aktiviert ist). + +#### Verzeichnis-Konfiguration + +##### Standardwerte für die Verzeichnissuche + +- directory.globaldir + + 0 oder 1. Standardwert 0. Wenn Sie das Verzeichnis auf einer Site besuchen, sehen Sie standardmäßig nur die Mitglieder dieser Site. Man muss einen zusätzlichen Schritt machen, um die Leute im Rest des Netzwerks zu sehen; und indem man das tut, gibt es eine klare Abgrenzung, dass diese Leute *nicht* Mitglieder dieser Site sind, sondern eines größeren Netzwerks. + +- directory.pubforums + + 0 oder 1. Öffentliche Foren *sollten* standardmäßig 0 sein. + +- directory.safemode + + 0 oder 1. + +##### Konfiguration des Verzeichnisservers + +- system.directory_mode +- system.directory_primary +- system.directory_realm +- system.verzeichnis_server +- system.realm_token
\ No newline at end of file diff --git a/doc/de/adminmanual/automated_installation.md b/doc/de/adminmanual/automated_installation.md new file mode 100644 index 000000000..0cb440717 --- /dev/null +++ b/doc/de/adminmanual/automated_installation.md @@ -0,0 +1,26 @@ +### Automatisierte Installation über das Shell-Skript .homeinstall + +Es gibt ein Shell-Skript in (`.homeinstall/hubzilla-setup.sh`), das Hubzilla und seine Abhängigkeiten auf einer frischen Installation von Debian stable installiert. Es sollte auf ähnlichen Linux-Systemen funktionieren, aber Ihre Ergebnisse können variieren. + +#### Anforderungen + +Das Installationsskript wurde ursprünglich für einen kleinen Hardwareserver hinter Ihrem Heimrouter entwickelt. Es wurde jedoch auf mehreren Systemen mit Debian 9 getestet: + +- Home-PC (Debian-9.2-amd64) und Rapberry-Pi 3 (Rasbian = Debian 9.3) + - Internetanschluss und Router zu Hause + - Mini-PC / Raspi an den Router angeschlossen + - USB-Laufwerk für Backups + - Frische Installation von Debian auf Ihrem Mini-PC + - Router mit offenen Ports 80 und 443 für Ihr Debian + +#### Überblick über die Installationsschritte + +1. `apt-get install git` +2. `mkdir -p /var/www/html` +3. `cd /var/www/html` +4. `git clone https://framagit.org/hubzilla/core.git .` +5. `nano .homeeinstall/hubzilla-config.txt` +6. `cd .homeeinstall/` +7. `./hubzilla-setup.sh` +8. `service apache2 neu laden` +9. Öffnen Sie Ihre Domain mit einem Browser und gehen Sie durch die anfängliche Konfiguration von Hubzilla.
\ No newline at end of file diff --git a/doc/de/adminmanual/before_you_start.md b/doc/de/adminmanual/before_you_start.md new file mode 100644 index 000000000..1bc425b9c --- /dev/null +++ b/doc/de/adminmanual/before_you_start.md @@ -0,0 +1,17 @@ +### Bevor Sie beginnen + +Wählen Sie einen Domänennamen oder einen Subdomänennamen für Ihren Server. + +Die Software kann nur im Stammverzeichnis einer Domäne oder Subdomäne installiert werden und kann nicht über alternative TCP-Ports installiert werden. Diese Beschränkungen können in Zukunft gelockert werden, sind aber unbequem, so dass wir Ihnen weiterhin DRINGEND empfehlen, sich daran zu halten. + +Entscheiden Sie, ob Sie SSL verwenden wollen, und besorgen Sie sich vor der Softwareinstallation ein SSL-Zertifikat. Sie SOLLTEN SSL verwenden. Wenn Sie SSL verwenden, MÜSSEN Sie ein „browsergültiges“ Zertifikat verwenden. Sie KÖNNEN KEINE selbstsignierten Zertifikate verwenden! + +Bitte testen Sie Ihr Zertifikat vor der Installation. Ein Webtool zum Testen Ihres Zertifikats finden Sie unter „http://www.digicert.com/help/“. Wenn Sie Ihre Website zum ersten Mal besuchen, verwenden Sie bitte die SSL-URL („https://“), wenn SSL verfügbar ist. Dadurch werden spätere Probleme vermieden. Die Installationsroutine erlaubt es Ihnen nicht, ein nicht browsergültiges Zertifikat zu verwenden. + +Diese Einschränkung wird vorgenommen, weil öffentliche Beiträge von Ihnen Verweise auf Bilder in Ihrem eigenen Hub enthalten können. Andere Mitglieder, die ihren Stream auf anderen Hubs betrachten, erhalten Warnungen, wenn Ihr Zertifikat von ihrem Webbrowser nicht als vertrauenswürdig eingestuft wird. Dies wird viele Leute verwirren, da es sich um ein dezentralisiertes Netzwerk handelt, und sie werden die Warnung über Ihren Hub erhalten, während sie ihren eigenen Hub ansehen, und könnten denken, dass ihr eigener Hub ein Problem hat. Diese Warnungen sind sehr technisch und beängstigend für einige Leute, von denen viele nicht wissen, wie sie weiter vorgehen sollen, außer den Ratschlägen des Browsers zu folgen. Das ist für die Gemeinschaft störend. Abgesehen davon erkennen wir die Probleme im Zusammenhang mit der derzeitigen Zertifikatsinfrastruktur an und stimmen zu, dass es viele Probleme gibt, aber das ändert nichts an der Anforderung. + +Kostenlose „browsergültige“ Zertifikate gibt es von Anbietern wie ZeroSSL, LetsEncrypt und einigen anderen. + +Wenn Sie NICHT SSL verwenden, kann es beim ersten Installationsskript zu einer Verzögerung von bis zu einer Minute kommen - während wir den SSL-Port überprüfen, um zu sehen, ob dort etwas antwortet. Bei der Kommunikation mit neuen Sites versucht Hubzilla immer zuerst eine Verbindung über den SSL-Port herzustellen, bevor es auf eine weniger sichere Verbindung zurückgreift. Wenn Sie kein SSL verwenden, MUSS Ihr Webserver überhaupt nicht auf Port 443 lauschen. + +Wenn Sie LetsEncrypt für die Bereitstellung von Zertifikaten verwenden und eine Datei unter .well-known/acme-challenge erstellen, damit LetsEncrypt Ihre Domaineigentümerschaft überprüfen kann, entfernen Sie bitte das Verzeichnis .well-known oder benennen Sie es um, sobald das Zertifikat generiert wurde. Die Software stellt bei der Installation einen eigenen Handler für „.well-known“-Dienste zur Verfügung, und ein bestehendes Verzeichnis an diesem Ort kann verhindern, dass einige dieser Dienste korrekt funktionieren. Dies sollte bei Apache kein Problem sein, kann aber bei nginx oder anderen Webserver-Plattformen ein Problem darstellen.
\ No newline at end of file diff --git a/doc/de/adminmanual/channel_directory.md b/doc/de/adminmanual/channel_directory.md new file mode 100644 index 000000000..745a20272 --- /dev/null +++ b/doc/de/adminmanual/channel_directory.md @@ -0,0 +1,15 @@ +### Kanal-Verzeichnis + +#### Schlüsselwörter + +Es gibt eine „Schlagwortwolke“ mit Schlüsselwörtern, die auf der Kanalverzeichnisseite erscheinen können. Wenn Sie diese Schlüsselwörter, die vom Verzeichnisserver bezogen werden, ausblenden möchten, können Sie das *Konfigurationswerkzeug* verwenden: + +``` +util/config system disable_directory_keywords 1 +``` + +Wenn sich Ihr Hub im Standalone-Modus befindet, weil Sie sich nicht mit dem globalen Netz verbinden möchten, können Sie stattdessen sicherstellen, dass die Option *directory_server* system leer ist: + +``` +util/config system directory_server „“ +```
\ No newline at end of file diff --git a/doc/de/adminmanual/database.md b/doc/de/adminmanual/database.md new file mode 100644 index 000000000..d46001880 --- /dev/null +++ b/doc/de/adminmanual/database.md @@ -0,0 +1,74 @@ +### Datenbank + +#### Datenbank-Updates + +Auf der Seite `/admin/dbsync` kann der Administrator überprüfen, ob eine Aktualisierung fehlgeschlagen ist, und sie gegebenenfalls erneut versuchen. + +Wenn eine Aktualisierung fehlgeschlagen ist, aber aus irgendeinem Grund nicht als fehlgeschlagen registriert wird, kann der Administrator versuchen, die Aktualisierung erneut auszuführen. Zum Beispiel für die DB-Aktualisierung #1999, indem er die Webseite besucht: + +`/admin/dbsync/1999` + +#### Datenbank-Tabellen + +| Tabelle | Beschreibung | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| [abconfig](/help/de/database/db_abconfig) | beliebiger Speicherplatz für Verbindungen von lokalen Kanälen | +| [abook](/help/de/database/db_abook) | Verbindungen der lokalen Kanäle | +| [account](/help/de/database/db_account) | Dienstanbieterkonto | +| [addon](/help/de/database/db_addon) | registrierte Plugins | +| [app](/help/de/database/db_app) | persönliche App-Daten | +| [attach](/help/de/database/db_attach) | Dateianhänge | +| [auth_codes](/help/de/database/db_auth_codes) | OAuth Benutzung | +| [cache](/help/de/database/db_cache) | OEmbed Cache | +| [cal](/help/de/database/db_cal) | CalDAV-Container für Ereignisse | +| [channel](/help/de/database/db_channel) | lokale Kanäle | +| [chat](/help/de/database/db_chat) | Chatraum-Inhalte | +| [chatpresence](/help/de/database/db_chatpresence) | Kanalpräsenzinformationen für den Chat | +| [chatroom](/help/de/database/db_chatroom) | Daten für den eigentlichen Chatraum | +| [clients](/help/de/database/db_clients) | OAuth Benutzung | +| [config](/help/de/database/db_config) | Hauptkonfigurationsspeicher | +| [conv](/help/de/database/db_conv) | Meta-Konversationsstruktur für private Nachrichten in Diaspora | +| [event](/help/de/database/db_event) | Events | +| [pgrp_member](/help/de/database/db_pgrp_member) | Datenschutzgruppen (Sammlungen), Gruppeninformationen | +| [pgrp](/help/de/database/db_pgrp) | Datenschutzgruppen (Sammlungen), Mitgliederinformationen | +| [hook](/help/de/database/db_hook) | Plugin-Hook-Register | +| [hubloc](/help/de/database/db_hubloc) | xchan-Standortspeicher, verknüpft einen Hub-Standort mit einem xchan | +| [iconfig](/help/de/database/db_iconfig) | erweiterbarer, beliebiger Speicher für Elemente | +| [issue](/help/de/database/db_issue) | künftige Fehler-/Problemdatenbank | +| [item](/help/de/database/db_item) | alle Beiträge und Webseiten | +| [item_id](/help/de/database/db_item_id) | (veraltet durch iconfig) andere Identifikatoren in anderen Diensten für Beiträge | +| [likes](/help/de/database/db_likes) | "Dinge“ mögen | +| [mail](/help/de/database/db_mail) | private Nachrichten | +| [menu](/help/de/database/db_menu) | Webseiten-Menü-Daten | +| [menu_item](/help/de/database/db_menu_item) | Einträge für Menüs auf Webseiten | +| [notify](/help/de/database/db_notify) | Benachrichtigungen | +| [obj](/help/de/database/db_obj) | Objektdaten für Dinge (x hat y) | +| [outq](/help/de/database/db_outq) | Ausgangswarteschlange | +| [pconfig](/help/de/database/db_pconfig) | persönlicher (pro Kanal) Konfigurationsspeicher | +| [photo](/help/de/database/db_photo) | Fotospeicher | +| [poll](/help/de/database/db_poll) | Daten für Umfragen | +| [poll_elm](/help/de/database/db_poll_elm) | Daten für Abfrageelemente | +| [profdef](/help/de/database/db_profdef) | Definitionen für benutzerdefinierte Profilfelder | +| [profext](/help/de/database/db_profext) | benutzerdefinierte Profilfelddaten | +| [profile](/help/de/database/db_profile) | Kanalprofile | +| [profile_check](/help/de/database/db_profile_check) | DFRN-Fernautorisierung, kann veraltet sein | +| [register](/help/de/database/db_register) | Registrierungen, die eine Verwaltungsgenehmigung erfordern | +| [session](/help/de/database/db_session) | Speicherung von Websitzungen | +| [shares](/help/de/database/db_shares) | Informationen über gemeinsame Elemente | +| [sign](/help/de/database/db_sign) | Diaspora-Unterschriften. Wird schrittweise abgebaut. | +| [site](/help/de/database/db_site) | Standorttabelle zum Auffinden von Verzeichnis-Peers | +| [source](/help/de/database/db_source) | Daten aus Kanalquellen | +| [sys_perms](/help/de/database/db_sys_perms) | erweiterbare Berechtigungen für OAuth | +| [term](/help/de/database/db_term) | Tabelle der Artikeltaxonomie (Kategorien, Tags usw.) | +| [tokens](/help/de/database/db_tokens) | OAuth Benutzung | +| [updates](/help/de/database/db_updates) | Verzeichnis-Synchronisations-Updates | +| [verify](/help/de/database/db_verify) | allgemeine Verifikationsstruktur | +| [vote](/help/de/database/db_vote) | Abstimmungsdaten für Umfragen | +| [xchan](/help/de/database/db_xchan) | Liste der bekannten Kanäle im Universum | +| [xchat](/help/de/database/db_xchat) | Chaträume mit Lesezeichen | +| [xconfig](/help/de/database/db_xconfig) | wie pconfig, aber für Kanäle ohne lokales Konto | +| [xign](/help/de/database/db_xign) | von Freundschaftsvorschlägen ignorierte Kanäle | +| [xlink](/help/de/database/db_xlink) | von poco abgeleitete „Freunde von Freunden“-Verknüpfungen, auch Speicherung von Bewertungen | +| [xperm](/help/de/database/db_xperm) | OAuth/OpenID-Connect erweiterbare Berechtigungen Berechtigungsspeicher | +| [xprof](/help/de/database/db_xprof) | wenn dieser Knotenpunkt ein Verzeichnisserver ist, enthält er grundlegende öffentliche Profilinformationen über jeden im Netz | +| [xtag](/help/de/database/db_xtag) | wenn dieser Hub ein Verzeichnisserver ist, enthält er Tags oder Interessen von jedem im Netzwerk | diff --git a/doc/de/adminmanual/directories.md b/doc/de/adminmanual/directories.md new file mode 100644 index 000000000..0fab695ae --- /dev/null +++ b/doc/de/adminmanual/directories.md @@ -0,0 +1,87 @@ +### **Verzeichnis-Konfiguration** + +Verzeichnisse in Hubzilla dienen dem Zweck, Mitglieder überall im Netzwerk zu suchen und zu finden. Sie werden auch verwendet, um „Bewertungen“ von Mitgliedern und Sites zu speichern und abzufragen. Die Verzeichnisdienste sind verteilt und gespiegelt, so dass ein Ausfall eines Dienstes nicht das gesamte Netzwerk lahmlegt oder stört. + +#### **Standard-Konfiguration** + +Neue Sites, die als Verzeichnis-Clients arbeiten, wählen bei ihrem ersten Verzeichniszugriff automatisch aus einer fest programmierten Liste von Verzeichnisservern aus. Sie können diese Einstellung überprüfen oder außer Kraft setzen, indem Sie + +``` +util/config system directory_server +``` + +eingeben. + +Um einen anderen Server einzustellen, verwenden Sie diesen Befehl: + +``` +util/config system directory_server https://newdirectory.something +``` + +#### **Eigenständige Konfiguration** + +Einige Hubs möchten vielleicht im „Standalone“-Modus arbeiten und keine Verbindung zu externen Verzeichnisdiensten herstellen. Dies ist nützlich für isolierte Sites („off the gird“) und Test-Sites, kann aber auch für kleine Organisationen nützlich sein, die keine Verbindung mit anderen Sites im Netzwerk herstellen wollen. + +Um dies zu konfigurieren, suchen Sie bitte in Ihrer Datei .htconfig.php nach dem folgenden Text und stellen Sie die Konfiguration entsprechend ein. + +```php +// Configure how we communicate with directory servers. +// DIRECTORY_MODE_NORMAL = directory client, we will find a directory +// DIRECTORY_MODE_SECONDARY = caching directory or mirror +// DIRECTORY_MODE_PRIMARY = main directory server +// DIRECTORY_MODE_STANDALONE = "off the grid" or private directory services + +App::$config['system']['directory_mode'] = DIRECTORY_MODE_STANDALONE; +``` + +#### **Konfiguration des Sekundärservers** + +Sie können Ihre Site auch als Sekundärserver konfigurieren. Dieser arbeitet als Spiegel des primären Verzeichnisses und ermöglicht die Verteilung der Last auf die verfügbaren Server. Es gibt kaum funktionale Unterschiede zwischen einem primären und einem sekundären Server, allerdings darf es nur *einen* primären Verzeichnisserver pro Realm geben (Realms werden später in diesem Dokument behandelt). + +Bevor Sie sich für einen Verzeichnisserver entscheiden, sollten Sie ein aktives Mitglied des Netzwerks sein und über die Ressourcen und Zeit verfügen, um diese Dienste zu verwalten. In der Regel ist keine Verwaltung erforderlich, sondern die Anforderung dient eher der Stabilität, da der Ausfall eines Verzeichnisservers zu Problemen bei den Verzeichnis-Clients führen kann, die auf ihn angewiesen sind. + +#### **Wechseln des Verzeichnisservers** + +Wenn ein Verzeichnisserver anzeigt, dass er kein Verzeichnisserver mehr ist, sollte dies von der Software erkannt werden, und die Konfiguration für diesen Server wird entfernt (geleert). Wenn er ohne Vorwarnung dauerhaft offline geht, erfahren Sie das nur, wenn die Mitglieder der Website melden, dass die Verzeichnisdienste nicht mehr verfügbar sind. Derzeit kann dies nur manuell durch den Site-Administrator repariert werden, indem er ein neues Verzeichnis auswählt und den Befehl + +``` +util/config system directory_server https://newdirectory.something +``` + +Wir hoffen, dass diese Option in Zukunft in der Administrationsoberfläche der Website aktiviert werden kann. + +### **Verzeichnis-Bereiche** + +Große Organisationen möchten vielleicht lieber Verzeichnis-„Realms“ als ein einzelnes, unabhängiges Verzeichnis verwenden. Der Standard-Realm heißt RED_GLOBAL. Durch die Erstellung eines neuen Realms hat Ihre Organisation die Möglichkeit, ihre eigene Hierarchie von primären und sekundären Servern und Clients zu erstellen. + +``` +util/config system directory_realm MY_REALM +``` + +Ihr Realm *muss* ein primäres Verzeichnis haben. Erstellen Sie dieses zuerst. Setzen Sie dann den Realm auf allen Sites innerhalb Ihres Verzeichnisbereichs (Server und Clients) auf denselben Wert. + +Sie können auch einen „Sub-Realm“ einrichten, der unabhängig vom RED_GLOBAL-Realm (oder jedem anderen Realm) arbeitet, aber eine übergreifende Mitgliedschaft und die Möglichkeit bietet, Mitglieder des gesamten Verzeichnisraums zu suchen. Dies wurde bisher nur leicht getestet, also seien Sie bereit, mitzuhelfen und eventuell auftretende Probleme zu beheben. Ein Sub-Realm enthält seinen übergeordneten Realm im Realm-Namen. + +``` +util/config system directory_realm RED_GLOBAL:MY_REALM +``` + +#### **Realm-Zugang** + +Sie möchten vielleicht, dass Ihre Verzeichnisserver und -dienste nur von Mitgliedern Ihres Realms genutzt werden. Zu diesem Zweck muss ein Token oder Passwort für den Zugriff auf die Verzeichnisdienste des Realms angegeben werden. Dieses Token wird während der Übertragung nicht verschlüsselt, reicht aber aus, um den gelegentlichen Zugriff auf Ihre Verzeichnisserver zu verhindern. Folgendes muss für alle Sites (Clients und Verzeichnisserver) innerhalb des Realms konfiguriert werden: + +``` +util/config system realm_token my-secret-realm-password +``` + +### **Verzeichnis-Spiegelung** + +Die Spiegelung erfolgt mit einem täglichen Transaktionsprotokoll der Aktivitäten, das von den Verzeichnisservern gemeinsam genutzt wird. Bei Verzeichnis- und Profilaktualisierungen wird die Adresse des Kanals, der die Aktualisierung durchführt, übermittelt, und die anderen Verzeichnisserver prüfen diesen Kanal an seiner Quelle auf Änderungen. Wir können und sollten den Informationen, die uns von anderen Verzeichnisservern gegeben werden, nicht vertrauen. Wir überprüfen die Informationen immer an der Quelle. + +Bewertungen werden etwas anders gehandhabt - ein verschlüsseltes Paket (signiert von dem Kanal, der die Bewertung erstellt hat) wird zwischen den Servern übertragen. Diese Signatur muss überprüft werden, bevor die Bewertung akzeptiert wird. Bewertungen werden immer auf dem primären Verzeichnisserver veröffentlicht und von dort aus an alle anderen Verzeichnisserver weitergegeben. Aus diesem Grund kann es nur einen primären Server in einem Bereich geben. Wenn eine falsch konfigurierte Site behauptet, ein primäres Verzeichnis zu sein, wird sie im RED_GLOBAL-Bereich ignoriert. Für andere Realms gibt es derzeit keinen solchen Schutz. Seien Sie sich dessen bewusst, wenn Sie mit alternativen Realms arbeiten. + +Neu erstellte Verzeichnisserver erhalten keinen „Full Dump“, sondern werden aus Leistungsgründen und um die anderen Server im Netz möglichst wenig zu stören, langsam online gestellt. Es kann bis zu einem Monat dauern, bis ein neuer sekundärer Verzeichnisserver einen vollständigen Überblick über das Netzwerk bietet. Bitte fügen Sie keine sekundären Server zur fest kodierten Liste der Fallback-Verzeichnisserver hinzu, bevor er nicht mindestens einen Monat lang als Verzeichnis in Betrieb war. + +Alle Channels sind so konfiguriert, dass sie ihren Verzeichnisserver einmal im Monat „anpingen“, und zwar zu einem zufälligen Zeitpunkt im Monat. Auf diese Weise kann das Verzeichnis tote Channels und Sites entdecken (sie hören auf zu pingen). In der Folge werden sie als tot oder unerreichbar markiert und mit der Zeit aus den Verzeichnisergebnissen entfernt. + +Kanäle können so konfiguriert werden, dass sie vor dem Verzeichnis „versteckt“ werden. Diese Kanäle sind zwar noch im Verzeichnis vorhanden, aber nicht mehr durchsuchbar, und einige „sensible“ persönliche Informationen werden nicht gespeichert.
\ No newline at end of file diff --git a/doc/de/adminmanual/faq_admins.md b/doc/de/adminmanual/faq_admins.md new file mode 100644 index 000000000..496a49f98 --- /dev/null +++ b/doc/de/adminmanual/faq_admins.md @@ -0,0 +1,89 @@ +### Hubzilla FAQ + +#### Gibt es eine Möglichkeit, das Admin-Konto zu ändern? + +#### Gibt es eine Möglichkeit, mehrere Administratoren zu haben? + +Ja, aber im Moment ist es noch etwas umständlich, da es noch nicht in der Benutzeroberfläche sichtbar ist. Um ein Konto zu einem administrativen Konto zu machen, muss man 4096 zum account_roles-Eintrag in der Kontotabelle der Datenbank hinzufügen. Um administrative Berechtigungen zu entfernen, muss man 4096 von den Kontorollen abziehen. + +#### Ich kann mich einloggen, aber es gibt keine Beiträge oder Webseiten + +Höchstwahrscheinlich ist Ihre Artikeltabelle abgestürzt. Führen Sie den MySQL-Befehl + +``` +repair table item; +``` + +#### Das Einloggen funktioniert nicht, sofort nach dem Einloggen wird die Seite neu geladen und ich werde ausgeloggt + +Höchstwahrscheinlich ist Ihre Sitzungstabelle abgestürzt. Führen Sie den MySQL-Befehl + +``` +repair table session; +``` + +aus. + +#### Wenn ich das Thema wechsle, werden manchmal Elemente des einen Themas über das andere gelegt + +a) store/[data]/smarty3 ist für den Webserver nicht beschreibbar. Machen Sie es möglich. +b) Sie verwenden Midori, oder bei bestimmten Themes Konqueror im KHTML-Modus. + +#### Mein Netzwerk-Tab wird nicht geladen, es scheint durch ein Foto oder Video verursacht zu werden + +Ihr PHP-Speicherlimit ist zu niedrig. Erhöhen Sie die Größe der memory_limit-Anweisung in Ihrer php.ini +Entgegen der landläufigen Meinung hat die Anzahl der Nutzer eines Hubs keinen Einfluss auf das benötigte Speicherlimit, vielmehr zählt der Inhalt einer individuellen Matrix. Streams mit vielen Fotos und Videos benötigen mehr Speicher als Streams mit viel Text. + +#### Ich habe keine Kommunikation mit jemandem + +Sie lauschen auf Port 443, haben aber kein gültiges SSL-Zertifikat. Dies gilt auch, wenn Ihre Basisurl http lautet. +Lauschen Sie nicht auf Port 443, wenn Sie ihn nicht verwenden können. Es wird dringend empfohlen, dieses Problem durch die Installation eines gültigen SSL-Zertifikats für den Browser zu lösen, anstatt Port 443 zu deaktivieren. + +#### Wie kann ich eine Nicht-Git-Installation aktualisieren? + +1. Sichern Sie .htconfig.php +2. Sichern Sie alles in store/ +3. Sichern Sie alle benutzerdefinierten Änderungen in mod/site/ und view/site +4. Löschen Sie Ihre bestehende Installation +5. Laden Sie die neue Version hoch. +6. Laden Sie die neue Version der Themes und Addons hoch. +7. Stellen Sie alles wieder her, was Sie zuvor gesichert haben. + +#### Was muss ich tun, wenn ich meinen Hub auf einen anderen Server verschiebe? + +1. Erstellen Sie einen Git-Klon auf dem neuen Server. Wiederholen Sie den Vorgang für alle benutzerdefinierten Themes und Addons. +2. Rsync .htconfig.php +3. Rsync alles in store/ +4. Rsync alles in mod/site/ und view/site (diese sind nur vorhanden, wenn Sie eigene Module haben) +5. Dump und Wiederherstellung der DB. + +#### Wie installiere ich einen bestehenden Hub auf demselben Server neu? + +``` +git reset --hard HEAD +``` + +setzt alle Dateien auf ihre Upstream-Standardwerte zurück. Dabei werden keine lokalen Dateien zurückgesetzt, die nicht auch im Upstream existieren. Wenn Sie z.B. lokale Änderungen an mod/channel.php vorgenommen haben, werden diese zurückgesetzt - nicht aber die Änderungen in mod/site/channel.php. + +1. Wenn Sie unbedingt eine Neuinstallation durchführen müssen - z.B. wenn Sie das Betriebssystem aktualisieren müssen - befolgen Sie die Schritte für den Umzug auf einen anderen Server, aber anstatt rsync zu verwenden, erstellen Sie ein Backup und stellen Sie es auf andere Weise wieder her. + +Installieren Sie einen Hub nicht mit einer neuen Datenbank und einer neuen .htconfig.php neu, es sei denn, dies ist der allerletzte Ausweg. Das Anlegen eines temporären Accounts und das Anfordern von Hilfe über einen Support-Kanal für nicht-triviale Neuinstallationen ist einer Neuinstallation vorzuziehen. + +#### Wie kann ich die Standard-Homepage für abgemeldete Besucher festlegen? + +Verwenden Sie das Addon custom_home, das im Hauptrepository für Addons verfügbar ist. + +#### Was bedeuten die verschiedenen Einstellungen für den Verzeichnismodus? + +``` +// Konfigurieren Sie, wie wir mit Verzeichnisservern kommunizieren. +// DIRECTORY_MODE_NORMAL = Verzeichnis-Client, wir finden ein Verzeichnis (alle Abfragen Ihrer Mitglieder werden an andere Stellen geleitet) +// DIRECTORY_MODE_SECONDARY = Zwischenspeicherverzeichnis oder Mirror (hält sich synchron mit dem primären Realm [fügt erhebliche Cron-Ausführungszeit hinzu]) +// DIRECTORY_MODE_PRIMARY = Hauptverzeichnisserver (dies ist nur sinnvoll, wenn Sie einen eigenen Realm betreiben. einer pro Realm) +// DIRECTORY_MODE_STANDALONE = „Off the grid“ oder private Verzeichnisdienste (nur lokale Site-Mitglieder im Verzeichnis) +``` + +- Die Voreinstellung ist NORMAL. Damit werden die meisten Verzeichnisdienste auf einen anderen Server verlagert. Der verwendete Server ist der config:system/directory_server. Diese Einstellung KANN durch den Code auf einen der Projektsekundärserver aktualisiert werden, wenn der aktuelle Server nicht erreichbar ist. Sie sollten entweder die Kontrolle über diesen anderen Server haben oder ihm vertrauen, dass er diese Einstellung verwendet. +- SEKUNDÄR. Dies ermöglicht es Ihrer lokalen Site, als Verzeichnisserver zu fungieren, ohne die Abfragen Ihrer Mitglieder einem anderen Server zu überlassen. Es erfordert zusätzliche Verarbeitungszeit während der Cron-Abfrage und wird nicht empfohlen, auf einem gemeinsam genutzten Webhost ausgeführt zu werden. +- PRIMÄR. Dies ermöglicht es Ihnen, ein komplett separates 'Netzwerk' von Verzeichnisservern mit einem eigenen Realm zu betreiben. Standardmäßig befinden sich alle Server im Realm RED_GLOBAL, es sei denn, die Einstellung config:system/directory_realm wird überschrieben. *Verwenden Sie dies nicht, wenn Sie keinen eigenen directory_realm haben.* +- STANDALONE. Dies ist wie primary, außer dass es sich um ein eigenständiges „Netzwerk“ handelt, das mit keinem anderen Server kommuniziert. Verwenden Sie dies, wenn Sie nur einen Server haben und von den Red#Matrix-Verzeichnislisten getrennt sein wollen.
\ No newline at end of file diff --git a/doc/de/adminmanual/federation_addons.md b/doc/de/adminmanual/federation_addons.md new file mode 100644 index 000000000..eda62a062 --- /dev/null +++ b/doc/de/adminmanual/federation_addons.md @@ -0,0 +1,8 @@ +### Föderations Addons + +Verschiedene Web-Communities haben begonnen, sich unter Verwendung gemeinsamer Protokolle zusammenzuschließen. Die beteiligten Protokolle sind in ihren Möglichkeiten etwas eingeschränkt. Das Diaspora-Protokoll ist etwas restriktiv, was die erlaubten Kommunikationsarten angeht. Alle Kommentare müssen vom ursprünglichen Autor auf eine sehr eindeutige Weise signiert werden. Das ActivityPub-Protokoll wird ebenfalls unterstützt. Kein anderes existierendes Protokoll unterstützt nomadische Standorte (es gibt inzwischen die Unterstützung nomadischer Identitäten bei ActivityPub), wie sie in diesem Projekt verwendet werden. Dies stellt einige Herausforderungen an die Unterstützung, da einige Funktionen mit einigen Netzen funktionieren und mit anderen nicht. Nichtsdestotrotz ermöglichen die Föderationsprotokolle die Herstellung von Verbindungen zu einer viel größeren Gemeinschaft von Menschen weltweit. Sie werden als Addons bereitgestellt. + +- Diaspora Protocol - Das Diaspora-Protokoll wird von Diaspora und Friendica verwendet. Sie sollten zuerst 'Diaspora Statistics' (Statistiken) aktivieren, um alle verfügbaren Funktionen zu nutzen. +- PubCrawl - Das ActivityPub-Protokoll, das von Mastodon, MIsskey, Friendica und allen Fediverse-Diensten unterstützt wird. + +Jedes Mitglied Ihrer Website muss selbst entscheiden, ob es diese Protokolle zulassen will oder nicht, da sie mit einigen wünschenswerten Kernfunktionen und Fähigkeiten dieser Software (wie z.B. Channel-Migration und Klonen) in Konflikt geraten können. Sie tun dies auf ihrer Seite „Einstellungen -> Feature/Addon-Einstellungen“.
\ No newline at end of file diff --git a/doc/de/adminmanual/filesync.md b/doc/de/adminmanual/filesync.md new file mode 100644 index 000000000..97cc388c6 --- /dev/null +++ b/doc/de/adminmanual/filesync.md @@ -0,0 +1,42 @@ +### Datei-Synchronisation und Klonen + +Das Klonen von Dateien über mehrere Instanzen eines Channels hinweg ist aufgrund der Natur der PHP-Speicherzuweisung ein sehr schwieriges Problem. Dies muss völlig anders gehandhabt werden als das Klonen oder Synchronisieren anderer Informationen. (Die Verarbeitung einer großen Videodatei oder von 40-50 Fotos kann den Speicher voll auslasten). Daher können wir nicht einfach alle Daten in eine Speicherauszugsdatei auslagern und sie dann sequentiell verarbeiten. Das Laden der Speicherauszugsdatei selbst wird wahrscheinlich den Speicherplatz erschöpfen. + +Außerdem gibt es zwei Hauptoperationen, die wir in Betracht ziehen. Die erste ist die schwierigste - das Speichern und anschließende Importieren aller Kanalinformationen in einen neuen Kanal-Klon. Der zweite ist die Synchronisierung von Datei-Änderungen, die in zwei oder mehr „aktiven“ Klonen auftreten. +Beim ersten Versuch mit diesem Tool werden wir uns auf den zweiten Fall konzentrieren, während wir versuchen, ein gewisses Maß an Kompatibilität mit dem ersten Fall aufrechtzuerhalten, damit wir dieselben Tools wiederverwenden können. + +#### Metadaten + +Zunächst benötigen wir die Metadaten der Datei, um ihre Struktur auf einer anderen Website genau rekonstruieren zu können. Dazu sind die folgenden Informationen erforderlich: +die „attach“-Struktur (ohne Dateiinhalt - das ist die Standardeinstellung) für die Datei selbst **und** ihre übergeordneten Verzeichnisse, damit wir ihren genauen Platz im Dateisystem wiederherstellen können, da wir nicht wissen, ob das übergeordnete Verzeichnis schon einmal importiert worden ist oder nicht. +Foto"-Struktur für alle Fotoelemente, die durch das Hochladen dieser Datei in das System erstellt wurden. Diese enthält in der Regel mehrere verschiedene „Skalen“ oder Miniaturbilder, von denen einige für die Verwendung als Profilfoto oder Titelbild beschnitten werden können. Wir müssen die Informationen über den Bildausschnitt aufbewahren, die nicht in den Metadaten, sondern nur in den gespeicherten Daten enthalten sind. Die eigentlichen Miniaturbilddaten können in den Metadaten enthalten sein, müssen es aber nicht. Ein großformatiges Titelbild (Maßstab #7) könnte möglicherweise zu Speicherproblemen führen. Es ist zwar nicht so schlimm wie ein 100-Meter-Video, aber wenn Sie mehrere davon haben, können sie sich summieren. + +Objekteinträge, die mit dieser Datei verknüpft sind. Dabei kann es sich um Dateifreigabeaktivitäten, das „übergeordnete Element“, das mit Fotos verknüpft ist, und angehängte Konversationselemente (Foto-Likes, Kommentare usw.) handeln. + +Für alle diese Elemente muss die URL ersetzt und das Element neu signiert werden, wenn es auf eine andere Website verschoben wird. + +#### Dateidaten + +Dann haben wir die eigentlichen Dateidaten, die wir für die Rekonstruktion der Datei benötigen. Diese müssen getrennt von den Metadaten gespeichert werden, damit der Speicher bei der Verarbeitung nicht überlastet wird. Die eigentlichen Dateidaten können zur Rekonstruktion der Anhangsstruktur und der ersten vier Fotoskalen verwendet werden. Wenn es sich um ein Foto handelt, benötigen wir Zugriff auf die Skala „#4“ (Profilfoto) und die Skala #7 (Titelbild), so wie sie ursprünglich beschnitten wurden. Alle anderen Miniaturansichten können aus diesen generiert werden. + +#### Dateiabgleich + +Wir werden diesen Vorgang zuerst betrachten, weil er wahrscheinlich am einfachsten zu implementieren ist. Wenn ein Foto zum Quellsystem hinzugefügt, entfernt oder geändert wird, senden wir ein Klon-Synchronisierungspaket an alle bekannten Klone, das die Metadaten, aber **keine Dateidaten** enthält. Wir können nur ein Sync-Paket pro zu synchronisierendem Dateivorgang senden. + +Die empfangende Seite erstellt alle Metadatenstrukturen, führt eine URL-Übersetzung durch und speichert sie. Dann muss es die eigentlichen Daten abrufen. Unter der Voraussetzung, dass CURL Streaming unterstützt, wird eine authentifizierte Anfrage an die ursprüngliche Website gesendet und die Originaldatei wird angefordert und direkt auf die Festplatte gestreamt (unter Umgehung aller Verarbeitungsschritte). Wenn Fotomaßstab Nr. 4 oder Maßstab Nr. 7 erforderlich ist, werden diese angefordert und in den entsprechenden Strukturen gespeichert. Wir gehen in diesem Fall davon aus, dass der große Maßstab des Titelbildes den Speicher nicht erschöpft. Wenn CURL das Streaming nicht unterstützen kann, müssen die Anforderungspakete in eine Warteschlange gestellt und an den Ursprungsort gesendet werden, um „Chunks“ der Datei zu erhalten, und wieder zusammengesetzt werden, sobald alle Chunks abgerufen wurden. + +Die authentifizierte Anfrage hängt vom jeweiligen Mechanismus ab. Beim CURL-Streaming muss wahrscheinlich ein signiertes Geheimnis mit einem Zeitstempel erzeugt und an die Ursprungsseite der Datei gesendet werden. Dann können die Daten mit minimaler interner Verarbeitung abgerufen und unter Verwendung von stdio-Pufferung direkt auf die Festplatte ausgegeben werden. Im Falle einer Nomad-Anforderung wird das Nomad-Anforderungspaket validiert, aber die Planung von Chunk-Batches und deren Wiederzusammensetzung könnte sich als schwierig erweisen. + +#### Sicherung/Wiederherstellung von Dateien + +Dies ist viel komplizierter, da wir keinen authentifizierten Webserver haben, von dem wir Daten anfordern können. Die Metadaten können größtenteils identisch sein, aber wir brauchen eine Form der Signalisierung, dass wir die Datei nicht über das Web abrufen werden. Dies erfordert wahrscheinlich einen clientseitigen Prozess, um jede Metadaten-Datei zu analysieren und eine Datei auf der Festplatte zu finden, mit der sie verknüpft ist. Anschließend müssten die Daten mit einem speziellen Endpunkt, der für diese Aufgabe vorgesehen ist, an den Zielserver gestreamt werden. Eine Java-Applikation könnte hier die beste Option sein, um die Plattformneutralität zu wahren. + +Eine andere Möglichkeit wäre die Verwendung von WebDAV für diesen Schritt. Die Metadaten würden zuerst hochgeladen, dann die Datendateien. Wenn eine Datendatei mit einer vorhandenen Metadaten-Datei übereinstimmt, würden die Metadaten verarbeitet, die Datei entsprechend gespeichert und die Metadaten-Datei anschließend entfernt. In diesem Fall müssten in den Metadaten Fotos der Skalen 4 und 7 bereitgestellt werden. + +Optional könnte dieser Schritt auch mit einem lokalen Dateisystem auf dem Zielserver durchgeführt werden. Dies wäre die leistungsfähigste Lösung, und eine Reihe von Shell-basierten Tools (im Falle von Linux) könnte die „Client-Seite“ der Aufgabe übernehmen. + +Die Komplexität dieser Aufgabe erfordert eine sorgfältige Planung, wie die Daten organisiert und gespeichert und gegebenenfalls per Fernzugriff gesichert oder von der Quellwebsite zur Sicherung übertragen werden. + +#### Rückwärtskompatibilität + +Es gibt einige offensichtliche Probleme bei der Bereitstellung von Daten für die Sicherung oder das Klonen, die auf dem System vor der Existenz von Wiederherstellungs-/Synchronisierungstools vorhanden waren. Um die Werkzeuge selbst relativ unkompliziert zu halten (soweit dies angesichts der Beschränkungen möglich ist), muss die Abwärtskompatibilität möglicherweise durch ein spezielles Plugin oder Addon hergestellt werden.
\ No newline at end of file diff --git a/doc/de/adminmanual/further_help.md b/doc/de/adminmanual/further_help.md new file mode 100644 index 000000000..cfd465b07 --- /dev/null +++ b/doc/de/adminmanual/further_help.md @@ -0,0 +1,3 @@ +### Wo Sie weitere Hilfe finden + +Wenn Sie auf Probleme stoßen oder Fragen haben, die in dieser Dokumentation nicht behandelt werden, lassen Sie es uns bitte über den [Issue Tracker](https://framagit.org/hubzilla/core/issues) wissen. Bitte beschreiben Sie Ihre Betriebsumgebung so genau wie möglich und geben Sie so viele Details wie möglich zu den Fehlermeldungen an, die Sie sehen, damit wir diese in Zukunft vermeiden können. Aufgrund der großen Vielfalt an Betriebssystemen und PHP-Plattformen haben wir nur begrenzte Möglichkeiten, Ihre PHP-Installation zu debuggen oder fehlende Module zu beschaffen, aber wir werden unser Bestes tun, um allgemeine Code-Probleme zu lösen. diff --git a/doc/de/adminmanual/hub_snapshot_tools.md b/doc/de/adminmanual/hub_snapshot_tools.md new file mode 100644 index 000000000..8e56a2168 --- /dev/null +++ b/doc/de/adminmanual/hub_snapshot_tools.md @@ -0,0 +1,127 @@ +### Hub-Snapshot-Tools + +Hubzilla-Entwickler müssen häufig zwischen Zweigen wechseln, die möglicherweise inkompatible Datenbankschemata oder Inhalte haben. Die folgenden beiden Skripte erstellen und restaurieren komplette Snapshots einer Hubzilla-Instanz, einschließlich des Hub-Web-Root und des gesamten Datenbankstatus. Jedes Skript benötigt eine Konfigurationsdatei namens `hub-snapshot.conf`, die sich im selben Ordner befindet und die spezifischen Verzeichnisse und Datenbankdetails Ihres Hubs enthält. + +### Konfiguration + +Das Format der Konfigurationsdatei ist sehr streng. Es dürfen keine Leerzeichen zwischen dem Variablennamen und dem Wert stehen. Ersetzen Sie nur den Inhalt innerhalb der Anführungszeichen durch Ihre Konfiguration. Speichern Sie diese Datei als `hub-snapshot.conf` zusammen mit den Skripten. + +``` +# Ort des Hub-Root. Normalerweise ist dies der Speicherort des Hubzilla Repo-Klons. +HUBROOT=„/var/www/“ +# Name der MySQL-Datenbank +DBNAME=„hubzilla“ +# MySQL-Datenbank-Benutzer +DBUSER=„hubzilla“ +# MySQL-Datenbank-Passwort +DBPWD=„akeufajeuwfb“ +# Der Ziel-Snapshot-Ordner, in dem das Git-Repository initialisiert werden soll +SNAPSHOTROOT=„/root/snapshots/hubzilla/“ +``` + +#### Snapshot + +Beispiel für die Verwendung: + +``` +sh hub-snapshot.sh my-hub.conf „Commit-Meldung für den Snapshot“ +``` + +**hub-snapshot.sh**: + +``` +#!/bin/bash + +if ! [ -f "$1" ]; then + echo "$1 is not a valid file. Aborting..." + exit 1 +fi +source "$1" +#echo "$DBNAME" +#echo "$DBUSER" +#echo "$DBPWD" +#echo "$HUBROOT" +#echo "$SNAPSHOTROOT" +MESSAGE="snapshot: $2" + +if [ "$DBPWD" == "" -o "$SNAPSHOTROOT" == "" -o "$DBNAME" == "" -o "$DBUSER" == "" -o "$HUBROOT" == "" ]; then + echo "Required variable is not set. Aborting..." + exit 1 +fi + +if [ ! -d "$SNAPSHOTROOT"/db/ ]; then + mkdir -p "$SNAPSHOTROOT"/db/ +fi +if [ ! -d "$SNAPSHOTROOT"/www/ ]; then + mkdir -p "$SNAPSHOTROOT"/www/ +fi + +if [ ! -d "$SNAPSHOTROOT"/www/ ] || [ ! -d "$SNAPSHOTROOT"/db/ ]; then + echo "Error creating snapshot directories. Aborting..." + exit 1 +fi + +echo "Export database..." +mysqldump -u "$DBUSER" -p"$DBPWD" "$DBNAME" > "$SNAPSHOTROOT"/db/"$DBNAME".sql +echo "Copy hub root files..." +rsync -va --delete --exclude=.git* "$HUBROOT"/ "$SNAPSHOTROOT"/www/ + +cd "$SNAPSHOTROOT" + +if [ ! -d ".git" ]; then + git init +fi +if [ ! -d ".git" ]; then + echo "Cannot initialize git repo. Aborting..." + exit 1 +fi + +git add -A +echo "Commit hub snapshot..." +git commit -a -m "$MESSAGE" + +exit 0 +``` + +#### Restore + +``` +#!/bin/bash +# Restore hub to a previous state. Input hub config and commit hash + +if ! [ -f "$1" ]; then + echo "$1 is not a valid file. Aborting..." + exit 1 +fi +source "$1" +COMMIT=$2 + +if [ "$DBPWD" == "" -o "$SNAPSHOTROOT" == "" -o "$DBNAME" == "" -o "$DBUSER" == "" -o "$HUBROOT" == "" ]; then + echo "Required variable is not set. Aborting..." + exit 1 +fi +RESTOREDIR="$(mktemp -d)/" + +if [ ! -d "$RESTOREDIR" ]; then + echo "Cannot create restore directory. Aborting..." + exit 1 +fi +echo "Cloning the snapshot repo..." +git clone "$SNAPSHOTROOT" "$RESTOREDIR" +cd "$RESTOREDIR" +echo "Checkout requested snapshot..." +git checkout "$COMMIT" +echo "Restore hub root files..." +rsync -a --delete --exclude=.git* "$RESTOREDIR"/www/ "$HUBROOT"/ +echo "Restore hub database..." +mysql -u "$DBUSER" -p"$DBPWD" "$DBNAME" < "$RESTOREDIR"/db/"$DBNAME".sql + +chown -R www-data:www-data "$HUBROOT"/{store,extend,addon,.htlog,.htconfig.php} + +echo "Restored hub to snapshot $COMMIT" +echo "Removing temporary files..." + +rm -rf "$RESTOREDIR" + +exit 0 +```
\ No newline at end of file diff --git a/doc/de/adminmanual/installation.md b/doc/de/adminmanual/installation.md new file mode 100644 index 000000000..4efbf4239 --- /dev/null +++ b/doc/de/adminmanual/installation.md @@ -0,0 +1,8 @@ +### Installation + +Es gibt mehrere Möglichkeiten, einen neuen Hub zu installieren. + +- Manuelle Installation auf einem bestehenden Server +- Automatisierte Installation auf einem bestehenden Server mit einem Shell-Skript +- Automatisierte Bereitstellung über einen OpenShift Virtual Private Server (VPS) +- Verwendung eines Docker-Containers
\ No newline at end of file diff --git a/doc/de/adminmanual/installation_requirements.md b/doc/de/adminmanual/installation_requirements.md new file mode 100644 index 000000000..b7f772add --- /dev/null +++ b/doc/de/adminmanual/installation_requirements.md @@ -0,0 +1,14 @@ +### Anforderungen + +- Apache mit aktiviertem mod-rewrite und „AllowOverride All“, damit Sie eine lokale .htaccess-Datei verwenden können. Einige Leute haben erfolgreich nginx und lighttpd verwendet. Beispielkonfigurations-Skripte sind für diese Plattformen in doc/install verfügbar. Apache und nginx haben die meiste Unterstützung. +- PHP 8.1 oder höher. Beachten Sie, dass in einigen Shared-Hosting-Umgebungen die *Kommandozeilenversion* von PHP von der *Webserverversion* abweichen kann +- *PHP-Befehlszeilenzugriff*, wenn register_argc_argv in der Datei php.ini auf true gesetzt ist und der Hosting-Provider keine Einschränkungen für die Verwendung von exec() und proc_open() hat. +- curl, gd (mit mindestens jpeg und png Unterstützung), pdo-mysql (oder pdo-postgres), mbstring, zip und openssl Erweiterungen. Die imagick-Erweiterung ist nicht erforderlich, wird aber empfohlen. +- Die xml-Erweiterung ist erforderlich, wenn Sie webdav verwenden möchten. +- eine Art von E-Mail-Server oder E-Mail-Gateway, so dass PHP mail() funktioniert. +- Ein unterstützter Datenbankserver. Die unterstützten Datenbanken sind: + - Mysql Version 8.0.22 oder höher + - MariaDB Version 10.4 oder höher + - PostgreSQL Version 12 oder höher +- Fähigkeit, Aufträge mit Cron zu planen. +- Die Installation in einer Top-Level-Domain oder Sub-Domain (ohne Verzeichnis/Pfad-Komponente in der URL) ist ERFORDERLICH.
\ No newline at end of file diff --git a/doc/de/adminmanual/manual_for_administrators.md b/doc/de/adminmanual/manual_for_administrators.md new file mode 100644 index 000000000..9b3237620 --- /dev/null +++ b/doc/de/adminmanual/manual_for_administrators.md @@ -0,0 +1,30 @@ +### Handbuch für Administratoren + +Hubzilla ist mehr als eine einfache Webanwendung. Es handelt sich um ein komplexes Kommunikationssystem, das eher einem E-Mail-Server als einem Webserver ähnelt. Aus Gründen der Zuverlässigkeit und Leistung werden Nachrichten im Hintergrund zugestellt und für eine spätere Zustellung in eine Warteschlange gestellt, wenn Websites nicht erreichbar sind. Diese Art von Funktionalität erfordert etwas mehr vom Hostsystem als der typische Blog. Nicht jeder PHP/MySQL-Hosting-Anbieter ist in der Lage, Hubzilla zu unterstützen. Viele können es, aber bitte prüfen Sie die Anforderungen und bestätigen Sie diese mit Ihrem Hosting-Anbieter vor der Installation. + +Wir haben uns sehr bemüht, sicherzustellen, dass Hubzilla auf Standard-Hosting-Plattformen läuft, wie sie für Wordpress-Blogs und Drupal-Websites verwendet werden. Es läuft auf den meisten Linux-Systemen. + +#include doc/de/adminmanual/further_help.md; +#include doc/de/adminmanual/before_you_start.md; +#include doc/de/adminmanual/installation.md; +#include doc/de/adminmanual/automated_installation.md; +#include doc/de/adminmanual/Installation_using_docker.md; +#include doc/de/adminmanual/recommendec_addons.md; +#include doc/de/adminmanual/problems-following-an-update.md; +#include doc/de/adminmanual/federation_addons.md; +#include doc/de/adminmanual/service_classes.md; +#include doc/de/adminmanual/theme_management.md; +#include doc/de/adminmanual/Creating-Templates.md; +#include doc/de/adminmanual/Schema-development.md; +#include doc/de/adminmanual/Widgets.md; +#include doc/de/adminmanual/channel_directory.md; +#include doc/de/adminmanual/Primary-Directory.md; +#include doc/de/adminmanual/administration.md; +#include doc/de/adminmanual/troubleshooting.md; +#include doc/de/adminmanual/hub_snapshot_tools.md; +#include doc/de/adminmanual/database.md; +#include doc/de/adminmanual/advanced_configurations.md; +#include doc/de/adminmanual/CLI_tools.md; +#include doc/de/adminmanual/filesync.md; +#include doc/de/adminmanual/Nomad---A-High-Level-Overview.md; +#include doc/de/adminmanual/faq_admins.md; diff --git a/doc/de/adminmanual/manual_installation.md b/doc/de/adminmanual/manual_installation.md new file mode 100644 index 000000000..303b5d416 --- /dev/null +++ b/doc/de/adminmanual/manual_installation.md @@ -0,0 +1,60 @@ +### Manuelle Installation + +#### Entpacken Sie die Hubzilla-Dateien in das Stammverzeichnis Ihres Webserver-Dokumentbereichs + +Wenn Sie den Verzeichnisbaum auf Ihren Webserver kopieren, stellen Sie sicher, dass Sie die versteckten Dateien wie .htaccess mit einbeziehen. + +Wenn Sie dazu in der Lage sind, empfehlen wir, das Quellcode-Repository mit git zu klonen, anstatt eine gepackte tar- oder zip-Datei zu verwenden. Dadurch lässt sich die Software viel einfacher aktualisieren. Der Linux-Befehl zum Klonen des Repositorys in ein Verzeichnis „mywebsite“ lautet wie folgt: + +``` +git clone https://framagit.org/hubzilla/core.git mywebsite +``` + +und dann können Sie die neuesten Änderungen jederzeit mit: + +``` +git pull +``` + +Stellen Sie sicher, dass die Ordner `store/[data]/smarty3` und `store` existieren und vom Webserver beschreibbar sind: + +``` +mkdir -p „store/[data]/smarty3“ +chmod -R 777 store +``` + +Diese Berechtigung (777) ist sehr gefährlich und wenn Sie über ausreichende Privilegien und Kenntnisse haben, sollten Sie diese Verzeichnisse nur für den Webserver und, falls abweichend, für den Benutzer, der den cron-Job ausführt (siehe unten). In vielen Shared-Hosting-Umgebungen kann dies schwierig sein, ohne ein Trouble-Ticket bei Ihrem Provider zu eröffnen. Die obigen Berechtigungen ermöglichen das Funktionieren der Software, sind aber nicht optimal. + +Die folgenden Verzeichnisse müssen ebenfalls vom Webserver beschreibbar sein, damit bestimmte webbasierte Verwaltungstools funktionieren: + +- `addon` +- `extend` +- `view/theme` +- `widget` + +#### Offizielle Addons + +##### Installation + +Navigieren Sie zu Ihrer Website. Dann sollten Sie das Addon-Repository klonen (separat). Wir geben diesem Repository den Spitznamen 'hzaddons'. Du kannst andere Hubzilla-Addon-Repositories einbinden, indem du ihnen andere Nicknames gibst: + +``` +cd mywebsite +util/add_addon_repo https://framagit.org/hubzilla/addons.git hzaddons +``` + +##### Aktualisieren + +Um den Addon-Baum auf dem neuesten Stand zu halten, sollten Sie sich auf der obersten Ebene des Website-Verzeichnisses befinden und einen Update-Befehl für dieses Repository eingeben:: + +``` +cd mywebsite +util/update_addon_repo hzaddons +``` + +Erstellen Sie durchsuchbare Darstellungen der Online-Dokumentation. Sie können dies jedes Mal tun, wenn die Dokumentation aktualisiert wird: + +``` +cd mywebsite +util/importdoc +```
\ No newline at end of file diff --git a/doc/de/adminmanual/pic/adm01.png b/doc/de/adminmanual/pic/adm01.png Binary files differnew file mode 100644 index 000000000..5c5b1bab3 --- /dev/null +++ b/doc/de/adminmanual/pic/adm01.png diff --git a/doc/de/adminmanual/problems-following-an-update.md b/doc/de/adminmanual/problems-following-an-update.md new file mode 100644 index 000000000..2bfbaf83d --- /dev/null +++ b/doc/de/adminmanual/problems-following-an-update.md @@ -0,0 +1,31 @@ +### Probleme nach einer Aktualisierung + +Gut 90 % aller Fehler, die unmittelbar nach der Aktualisierung des Codes auf die neueste Version auftreten, sind einfache Cache-Fehler der einen oder anderen Art. Wenn Sie ein Update durchführen und feststellen, dass etwas sehr Offensichtliches kaputt ist - z. B. dass Ihre Matrix-Seite nicht geladen wird, dass Benachrichtigungen fehlen oder dass Kommentarboxen fehlen - dann ist es wahrscheinlich gar kein Fehler. Das Brechen grundlegender Funktionen ist die Art von Dingen, die Entwickler eher bemerken. +Wenn Ihnen das passiert, können Sie einige einfache Schritte unternehmen, bevor Sie sich an die Support-Foren wenden: + +**Browser-Cache** +Symptome: Menüs lassen sich nicht ausklappen, die ACL-Auswahl öffnet sich nicht, die Fortschrittsanzeige wird nicht angezeigt (oder läuft in einer Endlosschleife), Matrix- und Kanalseiten werden nicht geladen. +Erzwingen Sie das Neuladen der Seite. Gelegentlich, aber sehr, sehr selten, müssen Sie auch die Sitzungsdaten löschen, was durch einen Neustart des Browsers erreicht wird. + +**FastCGI** +Symptome: Falsche Variablen. Die grundlegende Benutzeroberfläche funktioniert meistens, zeigt aber falsche Inhalte an oder es fehlen ganz Inhalte. +Wenn Sie php-fpm verwenden, lässt sich dieses Problem in der Regel beheben mit + +``` +service php-fpm neu starten +``` + +**Smarty-Cache** +Die Symptome: + +1. Weißer Bildschirm des Todes. Dies tritt vor allem auf den Einstellungs- und Verwaltungsseiten auf. +2. Fehlende Icons, Registerkarten, Menüs oder Funktionen. + +Wir verwenden die Smarty3-Vorlagen-Engine, um Seiten zu generieren. Diese Vorlagen werden kompiliert, bevor sie angezeigt werden. Es kann vorkommen, dass eine neue oder geänderte Vorlage die alte kompilierte Version nicht überschreibt. Um den Smarty-Cache zu löschen, löschen Sie alle Dateien in store/[data]/smarty3/compiled **, aber nicht das Verzeichnis selbst**. Die Vorlagen werden dann bei ihrem nächsten Zugriff neu kompiliert. + +**Theme-Probleme** +Es gibt viele Themes für Hubzilla. Nur Redbasic wird offiziell von den Kernentwicklern unterstützt. Dies gilt *auch dann, wenn ein Kernentwickler zufällig ein weiteres Theme unterstützt*. Das bedeutet, dass neue Funktionen garantiert nur in Redbasic funktionieren. + +Redbasic verwendet einige Javascript-Bibliotheken, die in anderen Themes anders oder gar nicht verwendet werden. Dies bedeutet, dass neue Funktionen möglicherweise nur in Redbasic richtig funktionieren. Bevor Sie ein Problem melden, sollten Sie daher zu Redbasic wechseln, um zu sehen, ob das Problem dort existiert. Wenn das Problem verschwindet, handelt es sich nicht um einen Fehler, sondern um ein Theme, das nicht auf dem neuesten Stand ist. + +Sollten Sie das Problem dann den Theme-Entwicklern melden? Nein. Theme-Entwickler verwenden ihre Themes. Die Chancen stehen gut, dass sie es wissen. Geben Sie ihnen zwei oder drei Tage Zeit, um sich auf den neuesten Stand zu bringen, und melden Sie das Problem, wenn es *dann* immer noch nicht behoben ist. Für diese Situation gibt es zwei Lösungsmöglichkeiten. Erstens können Sie vorübergehend Redbasic verwenden. Zweitens sind die meisten Themes auch Open Source - öffnen Sie einen Pull Request und machen Sie sich einen Freund.
\ No newline at end of file diff --git a/doc/de/adminmanual/recommended_addons.md b/doc/de/adminmanual/recommended_addons.md new file mode 100644 index 000000000..d39325fed --- /dev/null +++ b/doc/de/adminmanual/recommended_addons.md @@ -0,0 +1,7 @@ +### Empfohlene Addons + +Wir empfehlen, die folgenden Addons auf allen öffentlichen Seiten zu installieren: + +**nsfw** - unangemessene Beiträge/Kommentare ausblenden + +**superblock** - blockiert Inhalte von anstößigen Kanälen
\ No newline at end of file diff --git a/doc/de/adminmanual/service_classes.md b/doc/de/adminmanual/service_classes.md new file mode 100644 index 000000000..ac79096d9 --- /dev/null +++ b/doc/de/adminmanual/service_classes.md @@ -0,0 +1,57 @@ +### Service-Klassen + +Mit Hilfe von Dienstklassen können Sie die Systemressourcen begrenzen, indem Sie die Möglichkeiten einzelner Konten einschränken, z. B. die Speicherung von Dateien und die Begrenzung von Posts auf der obersten Ebene. Definieren Sie benutzerdefinierte Serviceklassen entsprechend Ihren Anforderungen in der Datei `.htconfig.php`. Erstellen Sie zum Beispiel eine *Standard-* und eine *Premiumklasse* mit den folgenden Zeilen: + +``` +// Dienstklassen + +App::$config['system']['default_service_class']='standard'; // dies ist die Standard-Serviceklasse, die mit jedem neuen Konto verbunden wird + +// Konfiguration für die Standard-Serviceklasse +App::$config['service_class']['standard'] = +array('photo_upload_limit'=>2097152, // Gesamtspeichergrenze für Fotos pro Kanal (hier 2MB) +'total_identities' =>1, // Anzahl der Kanäle, die ein Konto erstellen kann +'total_items' =>0, // Anzahl der Beiträge der obersten Ebene, die ein Kanal erstellen kann. Gilt nur für Top-Level-Posts des Channel-Benutzers, andere Posts und Kommentare sind davon nicht betroffen +'total_pages' =>100, // Anzahl der Seiten, die ein Channel erstellen kann +'total_channels' =>100, // Anzahl der Channels, die der Benutzer hinzufügen kann, andere Benutzer können diesen Channel immer noch hinzufügen, auch wenn das Limit erreicht ist +attach_upload_limit' =>2097152, // Gesamtspeicherplatz für Anhänge pro Kanal (hier 2MB) +'chatters_inroom' =>20); + +// Konfiguration für Premium-Dienstklasse +App::$config['service_class']['premium'] = +array('photo_upload_limit'=>20000000000, // Gesamtspeichergrenze für Fotos pro Kanal (hier 20GB) +'total_identities' =>20, // Anzahl der Kanäle, die ein Konto erstellen kann +'total_items' =>20000, // Anzahl der Beiträge der obersten Ebene, die ein Kanal erstellen kann. Gilt nur für Beiträge der obersten Ebene des Kanalbenutzers, andere Beiträge und Kommentare sind davon nicht betroffen +'total_pages' =>400, // Anzahl der Seiten, die ein Channel erstellen kann +'total_channels' =>2000, // Anzahl der Channels, die der Nutzer hinzufügen kann, andere Nutzer können diesen Channel immer noch hinzufügen, auch wenn das Limit erreicht ist +attach_upload_limit' =>20000000000, // Gesamtspeicherplatz für Anhänge pro Kanal (hier 20GB) +'chatters_inroom' =>100); +``` + +Um eine Serviceklasse auf ein bestehendes Konto anzuwenden, verwenden Sie das Befehlszeilendienstprogramm aus dem Web-Root: + +`util/service_class` list service classes + +`util/config system default_service_class firstclass` setzt die Standarddienstklasse auf 'firstclass' + +`util/service_class firstclass` listet die Dienste auf, die Teil der Dienstklasse „firstclass“ sind + +`util/service_class firstclass photo_upload_limit 10000000` setzt die gesamte Fotoplattennutzung der firstclass auf 10 Millionen Bytes + +`util/service_class --account=5 firstclass` setzt die Konto-ID 5 auf die Serviceklasse 'firstclass' (mit Bestätigung) + +`util/service_class --channel=blogchan firstclass` setzt das Konto, dem der Kanal „blogchan“ gehört, auf die Serviceklasse „firstclass“ (mit Bestätigung) + +**Optionen zur Begrenzung der Dienstklasse** + +- photo_upload_limit - maximale Gesamtzahl an Bytes für Fotos +- total_items - maximale Gesamtzahl an Beiträgen auf oberster Ebene +- total_pages - maximale Anzahl von Seiten für Comanche +- total_identities - maximale Anzahl von Kanälen im Besitz des Kontos +- total_channels - maximale Anzahl von Verbindungen +- total_feeds - Maximale Anzahl von RSS-Feed-Verbindungen +- attach_upload_limit - maximaler Datei-Upload-Speicherplatz (Bytes) +- minimum_feedcheck_minutes - niedrigste zulässige Einstellung für die Abfrage von RSS-Feeds +- chatrooms - maximale Anzahl von Chaträumen +- chatters_inroom - maximale Anzahl Chatter pro Raum +- access_tokens - maximale Anzahl von Gastzugangstoken pro Kanal
\ No newline at end of file diff --git a/doc/de/adminmanual/theme_management.md b/doc/de/adminmanual/theme_management.md new file mode 100644 index 000000000..bfdf4d261 --- /dev/null +++ b/doc/de/adminmanual/theme_management.md @@ -0,0 +1,7 @@ +### Verwaltung der Themen + +#### Beispiel für die Repo-Verwaltung + +1. Navigieren Sie zu Ihrem Hub-Web rootroot@hub`:/root# cd /var/www` + +2. Fügen Sie das Theme-Repo hinzu und geben Sie ihm einen nameroot@hub`:/var/www# util/add_theme_repo https://github.com/DeadSuperHero/redmatrix-themes.git DeadSuperHero`
\ No newline at end of file diff --git a/doc/de/adminmanual/troubleshooting.md b/doc/de/adminmanual/troubleshooting.md new file mode 100644 index 000000000..384202b65 --- /dev/null +++ b/doc/de/adminmanual/troubleshooting.md @@ -0,0 +1,51 @@ +### Fehlersuche + +#### Logdateien + +Die Systemprotokolldatei ist eine äußerst nützliche Ressource, um Fehler aufzuspüren. Dies kann auf der Konfigurationsseite admin/log aktiviert werden. Eine Loglevel-Einstellung von `LOGGER_DEBUG` wird für stabile Produktionsstandorte bevorzugt. Die meisten Probleme bei der Kommunikation oder der Speicherung werden hier aufgelistet. Eine Einstellung von LOGGER_DATA bietet *viel* mehr Details, kann aber Ihre Festplatte füllen. In jedem Fall empfehlen wir die Verwendung von logrotate auf Ihrem Betriebssystem, um die Protokolle zu überprüfen und ältere Einträge zu löschen. + +Am Ende der Datei .htconfig.php befinden sich mehrere (auskommentierte) Zeilen, die die PHP-Fehlerprotokollierung aktivieren. Dies meldet Probleme mit der Codesyntax und der Ausführung des Codes und ist die erste Stelle, an der Sie nach Problemen suchen sollten, die zu einem „weißen Bildschirm“ oder einer leeren Seite führen. Dies ist in der Regel das Ergebnis von Code-/Syntaxproblemen. Datenbankfehler werden in der Systemprotokolldatei gemeldet, aber wir haben es als nützlich empfunden, in Ihrem Hauptverzeichnis eine Datei namens dbfail.out anzulegen, in der *nur* datenbankbezogene Probleme gesammelt werden. Wenn die Datei existiert und beschreibbar ist, werden Datenbankfehler sowohl in dieser Datei als auch in der Systemprotokolldatei protokolliert. + +Im Falle von „500“-Fehlern werden die Probleme oft in den Protokollen Ihres Webservers protokolliert, oft in /var/log/apache2/error.log oder ähnlichem. Konsultieren Sie die Dokumentation Ihres Betriebssystems. + +Es gibt drei verschiedene Protokollierungsmöglichkeiten. + +**Die erste ist das Datenbankfehlerprotokoll**. Dieses wird nur verwendet, wenn Sie eine Datei mit dem Namen `dbfail.out` im Stammverzeichnis Ihrer Website anlegen und sie für den Webserver schreibbar machen. Wenn Datenbankabfragen fehlgeschlagen sind, werden sie hier gemeldet. Sie weisen im Allgemeinen auf Tippfehler in unseren Abfragen hin, treten aber auch auf, wenn der Datenbankserver die Verbindung unterbricht oder Tabellen beschädigt werden. In seltenen Fällen werden hier Race Conditions angezeigt, wenn zwei Prozesse versuchen, einen xchan- oder Cache-Eintrag mit derselben ID zu erstellen. Alle anderen Fehler (insbesondere anhaltende Fehler) sollten untersucht werden. + +**Der zweite Bereich ist das PHP-Fehlerprotokoll**. Dieses wird vom Sprachprozessor erstellt und meldet nur Probleme in der Sprachumgebung. Auch hier kann es sich um Syntax- oder Programmierfehler handeln, die jedoch in der Regel fatal sind und zu einem „weißen Bildschirm des Todes“ führen, d. h. PHP wird beendet. Sie sollten sich diese Datei ansehen, wenn etwas schief läuft, das nicht zu einem weißen Bildschirm führt, aber es ist nicht ungewöhnlich, dass diese Datei tagelang leer ist. + +Am Ende der mitgelieferten Datei `.htconfig.php` befinden sich einige Zeilen, die, wenn sie nicht auskommentiert werden, ein PHP-Fehlerprotokoll aktivieren (*äußerst* nützlich, um die Ursache von Fehlern beim weißen Bildschirm zu finden). Dies ist standardmäßig nicht der Fall, da es Probleme mit dem Eigentum an der Logdatei und den Schreibrechten geben könnte und die Logdatei standardmäßig nicht rotiert. + +**Die dritte Datei ist das „Anwendungsprotokoll“.** Dieses wird von Hubzilla verwendet, um zu berichten, was im Programm vor sich geht und meldet normalerweise alle Schwierigkeiten oder unerwarteten Daten, die wir erhalten haben. Gelegentlich werden auch „Heartbeat“-Statusmeldungen ausgegeben, um anzuzeigen, dass wir einen bestimmten Punkt in einem Skript erreicht haben. **Dies** ist die wichtigste Protokolldatei für uns, da wir sie selbst nur zu dem Zweck erstellen, den Status von Hintergrundaufgaben und alles, was seltsam oder fehl am Platz erscheint, zu melden. Es muss nicht unbedingt etwas Schlimmes sein, aber vielleicht einfach nur unerwartet. Wenn Sie eine Aufgabe ausführen und ein Problem auftritt, lassen Sie uns wissen, was in dieser Datei steht, wenn das Problem auftritt. (Bitte schicken Sie mir keine 100M-Dumps, das würde mich nur verärgern). Nur ein paar relevante Zeilen, damit ich ein paar hunderttausend Codezeilen ausschließen und mich darauf konzentrieren kann, wo das Problem auftritt. + +Dies sind Ihre Website-Protokolle, nicht meine. Wir melden ernsthafte Probleme auf jeder Protokollebene. Für die meisten Websites empfehle ich die Log-Ebene `DEBUG` - sie liefert ein paar zusätzliche Informationen und erzeugt keine riesigen Logdateien. Wenn ein Problem auftritt, das sich allen Versuchen entzieht, es zu verfolgen, sollten Sie für einen kurzen Zeitraum die Protokollebene `DATA` verwenden, um alle Details der Strukturen zu erfassen, mit denen wir es zu diesem Zeitpunkt zu tun hatten. Diese Protokollebene verbraucht sehr viel Speicherplatz und wird daher nur für kurze Zeiträume oder für Test-Sites von Entwicklern empfohlen. + +Ich empfehle die Konfiguration von logrotate sowohl für das php-Protokoll als auch für das Anwendungsprotokoll. Normalerweise werfe ich alle ein bis zwei Wochen einen Blick auf dbfail.out, behebe alle gemeldeten Probleme und beginne dann mit einer neuen Datei. Das Gleiche gilt für die PHP-Protokolldatei. Ich schaue darin ab und zu nach, ob es etwas gibt, das behoben werden muss. + +Wenn etwas schief läuft und es sich nicht um einen schwerwiegenden Fehler handelt, schaue ich mir die Anwendungsprotokolldatei an. Oft werde ich + +``` +tail -f logfile.out +``` + +während ich einen Vorgang wiederhole, bei dem es Probleme gibt. Oft füge ich zusätzliche Logging-Anweisungen in den Code ein, wenn es keinen Hinweis darauf gibt, was schief läuft. Selbst so etwas Einfaches wie „got here“ oder der Ausdruck des Wertes einer Variable, die verdächtig sein könnte. Auch das können Sie tun - ich möchte Sie sogar dazu ermutigen, dies zu tun. Sobald Sie gefunden haben, was Sie suchen müssen, können Sie + +``` +git checkout file.php +``` + +um sofort alle zusätzlichen Protokollierungsdaten, die Sie hinzugefügt haben, zu löschen. Verwenden Sie die Informationen aus diesem Protokoll und alle Details, die Sie aus Ihrer Untersuchung des Problems liefern können, um Ihren Fehlerbericht einzureichen - es sei denn, Ihre Analyse weist auf die Quelle des Problems hin. In diesem Fall beheben Sie es einfach. + +##### Rotierende Protokolldateien + +1. Aktiviere das **logrot** Addon im offiziellen [hubzilla-addons](https://framagit.org/hubzilla/addons) repo +2. Legen Sie in Ihrem Web-Root ein Verzeichnis namens `log` mit Schreibrechten für den Webserver an +3. Gehen Sie zu den **logrot-Administrationseinstellungen** und geben Sie diesen Ordnernamen sowie die maximale Größe und Anzahl der aufbewahrten Protokolldateien ein. + +#### Probleme melden + +Wenn Sie Probleme melden, versuchen Sie bitte, so viele Details wie nötig anzugeben, damit die Entwickler das Problem reproduzieren können, und geben Sie den vollständigen Text aller Fehlermeldungen an. + +Wir ermutigen Sie, diese Protokolle zusammen mit dem Quellcode, den Sie besitzen, so gut wie möglich zu nutzen, um Probleme zu beheben und ihre Ursache zu finden. Die Community kann oft helfen, aber nur Sie haben Zugang zu den Logdateien Ihrer Website, und es wird als Sicherheitsrisiko angesehen, sie weiterzugeben. + +Wenn ein Code-Problem aufgedeckt wurde, melden Sie es bitte im Bugtracker des Projekts (https://framagit.org/hubzilla/core/issues). Geben Sie auch hier so viele Details wie möglich an, damit wir nicht immer wieder Fragen zu Ihrer Konfiguration stellen oder das Problem duplizieren müssen, damit wir das Problem direkt angehen und herausfinden können, was zu tun ist. Sie können auch gerne Ihre eigenen Lösungen anbieten und Patches einreichen. Wir ermutigen Sie sogar dazu, da wir alle Freiwillige sind und nur wenig Zeit zur Verfügung haben. Je mehr Leute mithelfen, desto leichter wird die Arbeit für alle. Es ist in Ordnung, wenn Ihre Lösung nicht perfekt ist. Jedes bisschen hilft, und vielleicht können wir es ja noch verbessern.
\ No newline at end of file diff --git a/doc/de/admins.bb b/doc/de/admins.bb deleted file mode 100644 index d278c04ac..000000000 --- a/doc/de/admins.bb +++ /dev/null @@ -1,10 +0,0 @@ -[h2]Dokumentation für Hub-Administratoren[/h2] - -[zrl=[baseurl]/help/install]Installation[/zrl] -[zrl=[baseurl]/help/red2pi]$Projectname auf einem Raspberry Pi installieren[/zrl] -[zrl=[baseurl]/help/troubleshooting]Troubleshooting-Tipps[/zrl] -[zrl=[baseurl]/help/hidden_configs]Versteckte Konfigurations-Optionen[/zrl] -[zrl=[baseurl]/help/faq_admins]FAQ für Admins[/zrl] -[zrl=[baseurl]/help/service_classes]Serviceklassen[/zrl] -[zrl=[baseurl]/help/directories]Arbeit mit Verzeichnissen und ihre Konfiguration[/zrl] -[zrl=[baseurl]/help/theme_management]Theme-Management[/zrl] diff --git a/doc/de/basicconcepts.md b/doc/de/basicconcepts.md new file mode 100644 index 000000000..65a845f73 --- /dev/null +++ b/doc/de/basicconcepts.md @@ -0,0 +1,67 @@ +## Grundlegende Konzepte von Hubzilla + + + +### Kanäle (im Sinne von Identitäten im Gegensatz zu einer App) + +Als Nutzer (d. h. als Privatperson oder als Verein) können Sie eine oder mehrere Web-**Identitäten** erstellen. Die Webpräsenz einer Identität wird innerhalb von Hubzilla gebündelt: Ein Besucher der Web-Identität sieht Inhalte, die mit dieser Identität in Verbindung stehen, an einem Ort, der über das Hauptmenü *Apps* für diese Identität verfügbar ist. + +Intern, innerhalb der Software, wird eine Identität als „Kanal“ bezeichnet. Für einen Besucher bedeutet das Wort „Kanal“ jedoch **eine** bestimmte App, die zu dieser Identität gehört, nämlich die **Pinnwand**, auf der die (möglicherweise) föderierten Beiträge der Identität in einer zeitachsenbasierten Timeline angezeigt werden. + +Im Folgenden verstehen wir Kanäle als Identitäten: Als angemeldeter Benutzer können Sie zwischen Ihren Kanälen wechseln, um die Inhalte für jeden Kanal zu bearbeiten, d. h. Beiträge zu veröffentlichen oder ein oder mehrere Kanalprofile, Websites, Wiki-Seiten und mehr zu erstellen. Pro Kanal können Sie auch Dateien in einer Cloud verwalten, Fotos mit Tags versehen und benennen und die Fotos in einer Webgalerie anzeigen. Ereignisse des Kanals können in einem Kalender angezeigt werden. + + + +### Dezentrales Netzwerk: Zugriff über Grenzen hinweg (Zot/Nomad) vs. Bereitstellung über Grenzen hinweg (Zot/Nomad, ActivityPub und Diaspora) + +Wenn dies erlaubt ist, verbinden sich Identitäten auf Hubzilla über Server- und Verwaltungsgrenzen hinweg über das Kommunikationsprotokoll Zot/Nomad (und, sofern von Ihrem Server bereitgestellt, auch über die Protokolle ActivityPub und Diaspora). + +Mit Ausnahme von Beiträgen/Nachrichten bleiben alle veröffentlichten Inhalte lokal auf Ihrem Server. Sie können Inhalte zwar öffentlich veröffentlichen, aber auch lokale Inhalte nur mit bestimmten Verbindungen teilen. Letzteres ist nur mit Verbindungen über Zot/Nomad (also mit Identitäten auf Hubzilla und Streams) möglich. + + + +### Zugriffskontrolle + +Ihre lokalen Inhalte können von den Zot/Nomad-basierten Verbindungen „besucht“ werden, denen Sie die entsprechende Berechtigung erteilt haben. Indem Sie Ihre Verbindungen Verbindungslisten (sogenannten „Datenschutzgruppen“) zuordnen, können Sie allen Mitgliedern dieser Liste Zugriff auf bestimmte Inhalte gewähren. + +Sie können Beiträge/Nachrichten (auch über die Protokolle ActivityPub oder Disaspora) an eine Verbindung, an eine Datenschutzgruppe oder an die Öffentlichkeit senden, indem Sie eine Zugriffskontrollliste verwenden. + +Es ist möglich, eine Dauer für das Ablaufen eines Beitrags/einer Nachricht festzulegen. Auf diese Weise können Sie den Zugriff zeitlich begrenzen. + + + +### Fernauthentifizierung + +„Kennst du mich? – Ja, ich kenne dich, willkommen!“ +Der Zugriff auf nicht öffentliche Inhalte auf einem Remote-Server sollte nur möglich sein, wenn du dich gegenüber diesem Server authentifizieren kannst. Fediverse-Software, die nur das ActivityPub- oder das Diaspora-Protokoll verwendet, kann jedoch nur Konten vom lokalen Server authentifizieren. +Das Zot-Protokoll hingegen verfügt über einen integrierten Mechanismus namens MagicAuth, der es einem Server ermöglicht, Identitäten, die auf einem anderen (entfernten) Server registriert sind, Zugriff auf Inhalte und Aktionen zu gewähren oder zu verweigern. + + + +### Nomadische Identität + +Das Zot/Nomad-Protokoll ermöglicht es, Ihre Kanäle von dem Hub zu trennen, auf dem Sie sie erstellt haben. Sie können sie auf einen anderen Hub übertragen oder klonen. In diesem Fall existieren die Identität und die Daten des Kanals gleichzeitig an mehreren Orten. Dies sorgt für Ausfallsicherheit der Kanäle, falls ein Hub abgeschaltet wird oder nicht mehr verfügbar ist. + + + +### Modulares Ökosystem durch Apps + + Hubzilla stellt für jede Funktion eine separate **App** zur Verfügung, d. h. die Cloud, Fotos, Galerie, Chat, Wiki, Kalender, Kontakte oder die Verbindungs-App. Ein Serveradministrator entscheidet, welche Apps für die Benutzer dieses Servers verfügbar sein sollen. Ein Benutzer kann dann die verfügbaren Apps installieren oder deinstallieren. + + + +### Zusammenarbeit + +Die folgenden gemeinsamen privaten Bereiche ermöglichen die Arbeit im Team mit Hubzilla: + +- Als Benutzer erlauben Sie ausgewählten Verbindungen, Ihre Webseiten und Wiki-Seiten zu lesen und zu bearbeiten. +- Erlauben Sie ihnen, Ihre Dateien, Ihren Kalender und Ihre Kontakte über die Weboberfläche (die Cloud-, Kalender- und Kontakt-Apps) oder WebDAV, CalDAV und CardDAV zu lesen und zu bearbeiten. +- Verwenden Sie Konversations-Threads (Beiträge), die nur für Ihre Kollaborationsgruppe sichtbar sind, indem Sie die Zugriffskontrollliste entsprechend einstellen. + + + +### Teilen vs. Boosten + +Mit Hubzilla können Sie Beiträge anderer Fediverse-Nutzer (erneut) teilen. Das (erneute) Teilen in Hubzilla ist so, als würden Sie Ihren Freunden Jennie und Omar erzählen, was Giaco gesagt hat. Und dann sagen sie: „Cool, das gefällt mir“. + +Hubzilla ermöglicht auch das Boosten. Etwas zu boosten ist so, als würdest du deinen Freunden Jennie und Omar erzählen, was Giaco gesagt hat, während Giaco und alle seine Freunde und seine Familie (die du nicht kennst) zuhören. Giaco und alle seine Freunde und seine Familie können jetzt mit dir sprechen.
\ No newline at end of file diff --git a/doc/de/bugs.bb b/doc/de/bugs.bb new file mode 100644 index 000000000..57efd10a6 --- /dev/null +++ b/doc/de/bugs.bb @@ -0,0 +1,34 @@ +[h2]Fehler, Probleme und Dinge, die nachts für Unruhe sorgen...[/h2] +[h3]Etwas ist schiefgelaufen! Wer ist für die Behebung zuständig?[/h3] + +[b]Hubzilla Community Server[/b] + +Hubzilla Community Server ist eine Open-Source-Software, die von „der Community“ – im Wesentlichen unbezahlten Freiwilligen – gepflegt wird. Niemand ist für die Behebung von Fehlern zuständig. Wir arbeiten gemeinsam daran, die Software und das Netzwerk reibungslos und fehlerfrei zu betreiben. Sie sind Mitglied dieser Community, daher benötigen wir auch Ihre Hilfe, um qualitativ hochwertige Software anbieten zu können. Es gibt keine mythischen „Entwickler“, die auf magische Weise alles reparieren. Es liegt an uns allen, mit anzupacken und zu helfen. + +Als Erstes sollten Sie sich an Ihren Hub-Administrator wenden – die Person, die Ihre Website betreibt und verwaltet. Er hat als Einziger Zugriff auf die interne Software, die Datenbank und die [b]Logdateien[/b] und muss daher in die Behebung Ihres Problems einbezogen werden. Andere Personen „im Netz“ können Ihnen dabei nicht wirklich helfen. Der Hub-Administrator muss als Erstes die Logdateien überprüfen und/oder versuchen, das Problem zu reproduzieren. Seien Sie daher so hilfsbereit und höflich wie möglich, um ihm bei der Suche nach dem Problem zu helfen. + + +Um Ihren Hub-Administrator zu finden (falls Sie ihn nicht kennen), schauen Sie bitte auf [url=[baseurl]/siteinfo]dieser Seite[/url]. Wenn er auf dieser Seite keine Kontaktinformationen oder ein „Impressum“ angegeben hat, finden Sie diese unter [url=[baseurl]/siteinfo.json]dieser Zusammenfassung der Website-Informationen[/url] unter der Überschrift „admin:“. + +Es wird dringend empfohlen, dass Fehlerberichte von Hub-Administratoren eingereicht werden, damit diese die relevanten Logdateien und Datenbankinformationen zum Problem hinzufügen und Workarounds und Folgetests durchführen können. Ohne diese Zusammenarbeit ist es möglicherweise nicht möglich, das Problem zu beheben. + +[h3]Ich bin Hub-Administrator; was soll ich tun?[/h3] + +Die Softwareanweisungen, die diesen Webdienst bereitstellen, sind Open Source und können von Ihnen eingesehen werden. Wir empfehlen allen, diese zu lesen, um sich über die Funktionsweise zu informieren und sich davon zu überzeugen, dass wir Ihre persönlichen Daten nicht missbräuchlich oder fahrlässig verwenden. Wenn eine Fehlermeldung gemeldet wurde, kann man häufig in den Quelldateien nach dieser Fehlermeldung suchen und herausfinden, wodurch sie ausgelöst wurde. Mit diesen Informationen und den Logdateien der Website lässt sich möglicherweise die Abfolge der Ereignisse ermitteln, die zu dem Fehler geführt haben. Möglicherweise sind auch andere Websites beteiligt, und das Problem liegt gar nicht auf Ihrer Website, sondern an anderer Stelle im Netzwerk. Versuchen Sie, die am Problem beteiligten Kommunikationsendpunkte (Hubs oder Websites) zu ermitteln, und wenden Sie sich an den Administrator dieser Website(s). Geben Sie bitte den Zeitpunkt an, zu dem der Fehler aufgetreten ist, damit er in den Protokollen gefunden werden kann. Arbeiten Sie mit den anderen Administratoren zusammen, um die Ursache des Problems zu finden. Logdateien sind Ihr Freund. Wenn in der Software etwas Unerwartetes passiert, wird dies fast immer protokolliert. + +[h3]Der weiße Bildschirm des Todes[/h3] + +Wenn Sie bei einer Aktion einen leeren weißen Bildschirm erhalten, handelt es sich fast immer um einen Code- oder Syntaxfehler. In der Datei .htconfig.php der Website finden Sie Anweisungen, mit denen der Website-Administrator die Syntaxprotokollierung aktivieren kann. Wir empfehlen allen Websites, diese Funktion zu verwenden. Wiederholen Sie mit aktivierter Syntaxprotokollierung die Sequenz, die zu dem Fehler geführt hat, und die fehlerhafte Codezeile sollte protokolliert werden. Hoffentlich können Sie das Problem mit diesen Informationen beheben. Wenn ja, reichen Sie die Korrektur bitte „upstream“ ein, damit wir sie mit den anderen Projektmitgliedern und anderen Communities teilen können. Dies ist ein wesentlicher Vorteil der Verwendung von Open-Source-Software – wir teilen miteinander und alle profitieren davon. + +[h3]Ich bin ratlos. Ich kann nicht herausfinden, was falsch ist.[/h3] + +An dieser Stelle könnte es sich lohnen, das Problem in einem der Online-Foren zu diskutieren. Es gibt möglicherweise mehrere davon, und einige sind vielleicht besser für Ihre Sprache geeignet. Derzeit ist der Kanal „Hubzilla Support Forum“ (adminsforum@hubzilla.org) das empfohlene Forum für die Diskussion von Fehlern. + +Wenn Community-Mitglieder mit einer Ausbildung/Erfahrung im Bereich Softwareentwicklung Ihnen nicht sofort helfen können, haben Sie bitte Verständnis dafür, dass sie ehrenamtlich tätig sind und möglicherweise viele andere Aufgaben und Verpflichtungen haben. An diesem Punkt müssen Sie einen Fehlerbericht erstellen. Dazu benötigen Sie ein Konto auf framagit.org. Registrieren Sie sich also und besuchen Sie dann https://framagit.org/hubzilla/core/issues . Erstellen Sie hier ein Ticket und geben Sie alle Informationen an, die Sie online angegeben haben. Lassen Sie nichts aus. + +Dann warten Sie. Wenn es sich um ein wichtiges Problem handelt, wird es möglicherweise schnell behoben. Aber niemand ist für die Behebung von Fehlern zuständig. Wenn das Problem weiterhin besteht, nehmen Sie sich bitte etwas mehr Zeit, um es zu untersuchen. Fragen Sie nach allem, was Sie im Zusammenhang mit dem Verhalten nicht verstehen. Sie werden mehr über die Funktionsweise der Software erfahren und möglicherweise herausfinden, warum sie derzeit nicht funktioniert. Letztendlich wird jemand aus der Community das Problem beheben, und Sie sind ein Mitglied dieser Community. So funktioniert der Open-Source-Prozess. + + + +Andere Personen, die an der Behebung des Problems arbeiten, benötigen möglicherweise weitere Informationen. Bereiten Sie sich daher gut vor und dokumentieren Sie, was passiert ist und was Sie bereits versucht haben. Sagen Sie nicht einfach: „Ich habe xyz gemacht und es hat nicht funktioniert.“ Das sagt uns nichts. Teilen Sie uns genau mit, welche Schritte Sie unternommen haben, welches Ergebnis Sie erwartet haben und was genau passiert ist. Welche Seite/URL haben Sie aufgerufen oder welches Formular haben Sie ausgefüllt? Wenn Fehlermeldungen angezeigt wurden, sagen Sie nicht „Es wurde eine Fehlermeldung angezeigt“. Teilen Sie uns den genauen Wortlaut der Meldung mit. Teilen Sie uns außerdem mit, welchen Hub Sie verwenden, welche Softwareversion Sie ausführen und alle weiteren Details, die für die Konfiguration Ihrer Website relevant sein könnten. Wir verstehen, dass Sie möglicherweise einige Informationen und Ihre Verbindungen geheim halten möchten. Wenn Sie jedoch nicht bereit sind, die Informationen weiterzugeben, die andere Personen benötigen, um das Problem zu reproduzieren/beheben, kann es möglicherweise nicht behoben werden. + diff --git a/doc/de/channels.bb b/doc/de/channels.bb deleted file mode 100644 index 0030208c2..000000000 --- a/doc/de/channels.bb +++ /dev/null @@ -1,26 +0,0 @@ -[size=large][b]Kanäle[/b][/size] - -Kanäle sind Sammlungen von Inhalten, die an einem Ort gespeichert werden. Ein Kanal kann alles mögliche repräsentieren. Zum Beispiel Dich, eine Website, ein Forum oder ein Fotoalbum. Normalerweise wird Dein erster Kanal Dich selbst repräsentieren. - -Die wichtigsten Funktionen für einen Kanal, der einen selbst repräsentiert, sind: - -[ul][*]Sichere und private, spamfreie Kommunikation -[*]Identifikation und automatisches Einloggen im gesamten $Projectname-Netzwerk -[*]Datenschutzeinstellungen und Zugriffsberechtigungen, die im gesamten Netzwerk gültig sind -[*]Verzeichnisdienste (ähnlich einem Telefonbuch)[/ul] - -Kurz gesagt, ein Kanal der Dich repräsentiert ist sozusagen „Ich im Internet“. - -Du musst Deinen ersten Kanal erstellen, während Du Dich anmeldest. Du kannst auch weitere Kanäle erstellen und zwischen ihnen wechseln, indem Du auf „Kanal-Manager“ im Menü unter Deinem Profilbild klickst. - -Du wirst nach einem Kanalnamen und einem kurzen Spitznamen gefragt. Für einen Kanal, der Dich repräsentiert, ist es eine gute Idee, hier Deinen Realnamen anzugeben, damit Deine Freunde Dich finden und sich mit Dir verbinden können. Der Spitzname wird genutzt, um Deinen „Webbie“ zu erstellen. Das ist so etwas wie ein Username und sieht aus wie eine E-Mail-Adresse, zum Beispiel spitzname@hubzilla-hub.de. Überlege ein bisschen, was Du als Spitzname nutzen willst. Stell Dir vor, Du wirst nach Deinem Webbie gefragt und musst Deinem Bekannten dann buchstabieren, dass Dein Webbie „llamas.sind-cool_274@example.com“ ist. „llamassindcool@example.com“ wäre da viel einfacher gewesen. - -Nachdem Du Deinen Kanal erstellt hast, wirst Du zu den Einstellungen weitergeleitet. Hier kannst Du Deinen Kanal einrichten und die Standard-Berechtigungen setzen. - -Nachdem Du auch das getan hast, kannst Du Deinen Kanal verwenden. Unter der Addresse https://example.com/channel/spitzname [observer=1]( [observer.url] )[/observer] findest Du Deinen Kanal. Hier werden Deine letzten Aktivitäten gezeigt, die neuesten oben. Wenn Du etwas in die Textbox schreibst, in der „Teilen“ steht, wird der neue Eintrag ganz oben in Deinem Kanal auftauchen. Du findest hier auch Links zu den anderen Kommunikationsbereichen Deines Kanals. Der „Über“-Reiter enthält Dein Profil, der „Fotos“-Reiter Deine Fotoalben, und der Kalender enthält Termine und Veranstaltungen, die Du und Deine Kontakte geteilt haben. - -Die „Grid“-Seite enthält alle neuen Beiträge aus dem gesamten $Projectname-Netzwerk, wieder die neuesten oben. Was genau zu sehen ist ist abhängig von den Zugriffsrechten. Falls die Zugriffsrechte Deines Kanals so eingestellt sind, dass jeder Beiträge in Deinen Stream stellen kann, wirst du auch Beiträge von Dir völlig unbekannten Personen hier sehen. Am anderen Ende der Skala kannst Du die Berechtigungen aber auch so einstellen, dass du nur die Beiträge deiner Freunde oder gar nur Deine eigenen siehst. - -Wie zu Anfang erwähnt sind viele Arten von Kanälen möglich, diese unterscheiden sich hauptsächlich durch die Berechtigungen. Das Anlegen dieser Kanäle unterscheidet sich dagegen nicht. Beispiel: Um einen Kanal zum Austausch von Dokumenten zu erstellen, wirst du vermutlich die Berechtigung „Kann in meinen öffentlichen Dateiordner schreiben“ freizügiger einstellen. Für weitere Informationen sieh bitte in der Hilfe unter Zugriffsrechte nach. - -#include doc/macros/main_footer.bb; diff --git a/doc/de/credits.md b/doc/de/credits.md new file mode 100644 index 000000000..3386d2529 --- /dev/null +++ b/doc/de/credits.md @@ -0,0 +1,91 @@ +## Credits + +Vielen Dank an alle, die im Laufe der Jahre zu diesem Projekt und seinen Vorgängern beigetragen haben. +Es ist möglich, dass wir Ihren Namen nicht erwähnt haben, aber das ist nicht beabsichtigt. Wir danken auch der Gemeinschaft und +ihren Mitgliedern, die uns wertvolle Beiträge geliefert haben und ohne die diese ganze Arbeit sinnlos wäre. + +Es lohnt sich auch, die Beiträge und Problemlösungen zu würdigen, die sich aus +Diskussionen zwischen Mitgliedern und Entwicklern anderer, in gewisser Weise verwandter und konkurrierender Projekte; +auch wenn wir gelegentlich Meinungsverschiedenheiten hatten. + +- Mike Macgirvin +- Mario Vavti +- Scott M. Stolz +- Chris Burger +- Emanuel Han +- Fabio Comuni +- Simon L'nu +- marijus +- Tobias Diekershoff +- fabrixxm +- tommy tomson +- Simon +- zottel +- Christian Vogeley +- jeroenpraat +- Michael Vogel +- erik +- Zach Prezkuta +- Paolo T +- Michael Meer +- Michael +- Abinoam P. Marques Jr +- Tobias Hößl +- Alexander Kampmann +- Olaf Conradi +- Paolo Tacconi +- tobiasd +- Devlon Duthie +- Zvi ben Yaakov (a.k.a rdc) +- Alexandre Hannud Abdo +- Olivier Migeot +- Chris Case +- Klaus Weidenbach +- Michael Johnston +- olivierm +- Vasudev Kamath +- pixelroot +- Max Weller +- duthied +- Martin Schmitt +- Sebastian Egbers +- Erkan Yilmaz +- sasiflo +- Stefan Parviainen +- Haakon Meland Eriksen +- Oliver Hartmann (23n) +- Erik Lundin +- habeascodice +- sirius +- Charles +- Tony Baldwin +- Hauke Zuehl +- Keith Fernie +- Anne Walk +- toclimb +- Daniel Frank +- Matthew Exon +- Michal Supler +- Tobias Luther +- U-SOUND\mike +- mrjive +- nostupidzone +- tonnerkiller +- Antoine G +- Christian Drechsler +- Ludovic Grossard +- RedmatrixCanada +- Stanislav Lechev [0xAF] +- aweiher +- bufalo1973 +- dsp1986 +- felixgilles +- ike +- maase2 +- mycocham +- ndurchx +- pafcu +- Simó Albert i Beltran +- Manuel Reva +- Manuel Jiménez Friaza +- Gustav Wall aka "neue medienordnung plus"
\ No newline at end of file diff --git a/doc/de/database/db_abook.bb b/doc/de/database/db_abook.bb new file mode 100644 index 000000000..a346480d7 --- /dev/null +++ b/doc/de/database/db_abook.bb @@ -0,0 +1,55 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]abook_id[/td][td]Sequential ID[/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]abook_account[/td][td]account.account_id of the channel which owns this record[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]abook_channel[/td][td]channel.channel_id of the channel which owns this record[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]abook_xchan[/td][td]xchan.xchan_hash of the target identity (this channel's connection)[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]abook_my_perms[/td][td]bitfield of all specific permissions granted this connection[/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]abook_their_perms[/td][td]bitfield of all permissions granted to you by this connection[/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]abook_closeness[/td][td]"closeness" value for optional affinity tool, 0-99[/td][td]tinyint(3) unsigned[/td][td]NO[/td][td]MUL[/td][td]99[/td][td] +[/td][/tr] +[tr][td]abook_created[/td][td]Datetime this record was created[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[tr][td]abook_updated[/td][td]Datetime this record was modified[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[tr][td]abook_connected[/td][td]datetime of last successful "poll" for this connection[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[tr][td]abook_dob[/td][td]Datetime of connection's birthday converted from *their* timezone to UTC[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[tr][td]abook_flags[/td][td]No longer used[/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]abook_profile[/td][td]profile.guid of profile to display to this connection if authenticated[/td][td]char(64)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]abook_blocked[/td][td]Bi-directional communications with this channel are blocked, regardless of other permissions. [/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]abook_ignored[/td][td]Incoming communications from this channel are blocked, regardless of other permissions. [/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]abook_hidden[/td][td]This connection will not be shown as a connection to anybody but the channel owner[/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]abook_archived[/td][td]This connection is likely non-functioning and the entry and conversations are preserved, but further polled communications will not be attempted. [/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]abook_pending[/td][td]A connection request was received from this channel but has not been approved by the channel owner, public communications may still be visible but no additional permissions have been granted. [/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]abook_unconnected[/td][td]currently unused. Projected usage is to indicate "one-way" connections which were insitgated on this end but are still pending on the remote end. [/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]abook_self[/td][td]is a special case where the owner is the target. Every channel has one abook entry with abook_self and with a target abook_xchan set to channel.channel_hash . When this flag is present, abook_my_perms is the default permissions granted to all new connections and several other fields are unused.[/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]abook_feed[/td][td]indicates this connection is an RSS/Atom feed and may trigger special handling.[/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]abook_incl[/td][td]connection filter allow rules separated by LF[/td][td]text[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]abook_excl[/td][td]connection filter deny rules separated by LF[/td][td]text[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]abook_instance[/td][td]comma separated list of site urls of all channel clones that this connection is connected with (used only for singleton networks which don't support cloning)[/td][td]text[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[/table] + + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_account.bb b/doc/de/database/db_account.bb new file mode 100644 index 000000000..35d7a9eb3 --- /dev/null +++ b/doc/de/database/db_account.bb @@ -0,0 +1,66 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]account_id[/td][td]table index[/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]account_parent[/td][td]for hierarchical accounts, the account_id of the parent to this one, if account_parent = account_id, this is the top level account[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]account_default_channel[/td][td]channel_id of channel to connect on login[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]account_salt[/td][td]complexity token for account_password[/td][td]char(32)[/td][td]NO[/td][td][/td][td][/td][td] +[/td][/tr] +[tr][td]account_password[/td][td]hashed password for this account[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td] +[/td][/tr] +[tr][td]account_email[/td][td]essentially the login ID, although it is usually possible to login with a channel address[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]account_external[/td][td]Currently unused[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]account_language[/td][td]default language (closest available browser-accept language when account was created)[/td][td]char(16)[/td][td]NO[/td][td][/td][td]en[/td][td] +[/td][/tr] +[tr][td]account_created[/td][td]timestamp of account creation[/td][td]datetime[/td][td]NO[/td][td][/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[tr][td]account_lastlog[/td][td]timestamp of last login (or daily update if "remember me" is in effect)[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[tr][td]account_flags[/td][td]see notes[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]account_roles[/td][td]see notes[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]account_reset[/td][td]verification token for password reset[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td] +[/td][/tr] +[tr][td]account_expires[/td][td]timestamp when account expires and will be deleted[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[tr][td]account_expire_notified[/td][td]timestamp of last warning of account expiration[/td][td]datetime[/td][td]NO[/td][td][/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[tr][td]account_service_class[/td][td]service class for this account, determines what if any limits/restrictions are in place[/td][td]char(32)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]account_level[/td][td]future use[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]account_password_changed[/td][td]timestamp of last password change - to limit account deletion for 48 hours to prevent malicious activity[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[/table] + +Notes: + + + +/** + * Account Flags + */ + +define ( 'ACCOUNT_OK', 0x0000 ); +define ( 'ACCOUNT_UNVERIFIED', 0x0001 ); +define ( 'ACCOUNT_BLOCKED', 0x0002 ); +define ( 'ACCOUNT_EXPIRED', 0x0004 ); +define ( 'ACCOUNT_REMOVED', 0x0008 ); +define ( 'ACCOUNT_PENDING', 0x0010 ); + +/** + * Account roles + */ + +define ( 'ACCOUNT_ROLE_SYSTEM', 0x0002 ); // 2 - this is the special system account +define ( 'ACCOUNT_ROLE_DEVELOPER', 0x0004 ); +define ( 'ACCOUNT_ROLE_ADMIN', 0x1000 ); // 4096 - this account is an administrator + + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_addon.bb b/doc/de/database/db_addon.bb new file mode 100644 index 000000000..bccd295f5 --- /dev/null +++ b/doc/de/database/db_addon.bb @@ -0,0 +1,24 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]id[/td][td][/td]generated index[td]int(11)[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]aname[/td][td]plugin base (file)name[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]version[/td][td]currently unused[/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]installed[/td][td]currently always 1[/td][td]tinyint(1)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]hidden[/td][td]currently unused[/td][td]tinyint(1)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]tstamp[/td][td]file timestamp to check for reloads[/td][td]bigint(20)[/td][td]NO[/td][td][/td][td]0[/td][td] +[/td][/tr] +[tr][td]plugin_admin[/td][td]1 = has admin config, 0 = has no admin config[/td][td]tinyint(1)[/td][td]NO[/td][td][/td][td]0[/td][td] +[/td][/tr] +[/table] + +Notes: + +These are addons which have been enabled by the site administrator on the admin/plugin page + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_app.bb b/doc/de/database/db_app.bb new file mode 100644 index 000000000..09df473ee --- /dev/null +++ b/doc/de/database/db_app.bb @@ -0,0 +1,48 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]id[/td][td]generated index[/td][td]int(11)[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]app_id[/td][td]hash identifying this app[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]app_sig[/td][td]currently unused[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td] +[/td][/tr] +[tr][td]app_author[/td][td]xchan_hash of app creator[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td] +[/td][/tr] +[tr][td]app_name[/td][td]name of app[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]app_desc[/td][td]optional description of app[/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]app_url[/td][td]target_url[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]app_photo[/td][td]app icon[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]app_version[/td][td]version of app[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]app_channel[/td][td]channel_id owning this instance of the app[/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]app_addr[/td][td]reddress/webbie of app creator[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td] +[/td][/tr] +[tr][td]app_price[/td][td]free-form price field[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]app_page[/td][td]currently unused[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td] +[/td][/tr] +[tr][td]app_requires[/td][td]access rules[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td] +[/td][/tr] + +[tr][td]app_created[/td][td]datetime of app creation[/td][td]datetime[/td][td]NO[/td][td][/td][td][/td][td] +[/td][/tr] +[tr][td]app_edited[/td][td]datetime of last app edit[/td][td]datetime[/td][td]NO[/td][td][/td][td][/td][td] +[/td][/tr] + +[tr][td]app_deleted[/td][td]1 = deleted, 0 = normal[/td][td]int(11)[/td][td]NO[/td][td][/td][td][/td][td] +[/td][/tr] +[tr][td]app_system[/td][td]1 = imported system app, 0 = member created app[/td][td]int(11)[/td][td]NO[/td][td][/td][td][/td][td] +[/td][/tr] + + +[/table] + +Storage for personal apps + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_attach.bb b/doc/de/database/db_attach.bb new file mode 100644 index 000000000..5098401de --- /dev/null +++ b/doc/de/database/db_attach.bb @@ -0,0 +1,54 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]id[/td][td]generated index[/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]aid[/td][td]account_id of owner[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]uid[/td][td]channel_id of owner[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]hash[/td][td]hash for cross-site identification[/td][td]char(64)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]creator[/td][td]xchan_hash of author/creator[/td][td]char(128)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]filename[/td][td]filename of original[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]filetype[/td][td]mimetype[/td][td]char(64)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]filesize[/td][td]size in bytes[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]revision[/td][td]for version control (partially implemented)[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]folder[/td][td]attach.hash of parent folder[/td][td]char(64)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]flags[/td][td]no longer used[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]is_dir[/td][td]0 (file) or 1 to indicate a directory[/td][td]tinyint[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]is_photo[/td][td]if 1, a photo is linked to this resource[/td][td]tinyint[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]os_storage[/td][td]if 0, data contains content; if 1 data contains path to content (always 1 in hubzilla)[/td][td]tinyint[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]os_path[/td][td]under construction, store the system path[/td][td]mediumtext[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]display_path[/td][td]under construction, store the human readable path[/td][td]mediumtext[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]content[/td][td]file data or pathname to stored data if ATTACH_FLAG_OS[/td][td]longblob[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]created[/td][td]creation time[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[tr][td]edited[/td][td]last edit time[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[tr][td]allow_cid[/td][td]permissions[/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]allow_gid[/td][td]permissions[/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]deny_cid[/td][td]permissions[/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]deny_gid[/td][td]permissions[/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[/table] + +permissions are xchan_hash or group_hash surrounded by angle chars. e.g. '<abc123><xyz789>' + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_auth_codes.bb b/doc/de/database/db_auth_codes.bb new file mode 100644 index 000000000..c60f064a4 --- /dev/null +++ b/doc/de/database/db_auth_codes.bb @@ -0,0 +1,19 @@ + +OAuth2 authorisation register - currently implemented but unused + +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]id[/td][td][/td][td]varchar(40)[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]client_id[/td][td][/td][td]varchar(20)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]redirect_uri[/td][td][/td][td]varchar(200)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]expires[/td][td][/td][td]int(11)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]scope[/td][td][/td][td]varchar(250)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_cache.bb b/doc/de/database/db_cache.bb new file mode 100644 index 000000000..02c292f20 --- /dev/null +++ b/doc/de/database/db_cache.bb @@ -0,0 +1,15 @@ + +OEmbed information cache + +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]k[/td][td]horizontal width + url or resource[/td][td]char(255)[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]v[/td][td]OEmbed response from site[/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]updated[/td][td]datetime of cache insertion[/td][td]datetime[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_channel.bb b/doc/de/database/db_channel.bb new file mode 100644 index 000000000..518ff0978 --- /dev/null +++ b/doc/de/database/db_channel.bb @@ -0,0 +1,104 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]channel_id[/td][td]sequential ID[/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]channel_account_id[/td][td]account.id of the account owning this channel[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]channel_primary[/td][td]1 = this is the primary instance of this channel[/td][td]tinyint(1) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]channel_name[/td][td]Name that this channel is known by[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]channel_address[/td][td]"username" or URL-and-email safe nickname[/td][td]char(255)[/td][td]NO[/td][td]UNI[/td][td][/td][td] +[/td][/tr] +[tr][td]channel_guid[/td][td]Long hash representing a psuedo-unique ID, does not have ot be globally unique[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]channel_guid_sig[/td][td]channel.gui signed with channel.prvkey and base64url_encoded[/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]channel_hash[/td][td]base64url_encode of a 64-char whirlpool hash of channel.guid and channel_guid_sig concatenated, synonymous with xchan_hash.[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]channel_timezone[/td][td]PHP-legal timezone[/td][td]char(128)[/td][td]NO[/td][td]MUL[/td][td]UTC[/td][td] +[/td][/tr] +[tr][td]channel_location[/td][td]Default for item.location[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]channel_theme[/td][td]channel theme preference[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]channel_startpage[/td]relative site URL to visit after logging in[td][/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td] +[/td][/tr] +[tr][td]channel_pubkey[/td][td]RSA public key 4096 bit[/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]channel_prvkey[/td][td]RSA private key 4096 bit[/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]channel_notifyflags[/td][td]bifield representing what notification types are active[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]65535[/td][td] +[/td][/tr] +[tr][td]channel_pageflags[/td][td]bitfield of special channel uses[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]channel_dirdate[/td][td]time when directory was last pinged. Must do this once a month[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[tr][td]channel_lastpost[/td][td]date of last post for this channel. May not be fully implemented[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[tr][td]channel_deleted[/td][td]time when channel was deleted[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[tr][td]channel_max_anon_mail[/td][td]unused[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]10[/td][td] +[/td][/tr] +[tr][td]channel_max_friend_req[/td][td]unused[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]10[/td][td] +[/td][/tr] +[tr][td]channel_expire_days[/td][td]expire imported content that hasn't been otherwise protected after this many days, 0 is no expiration[/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]channel_passwd_reset[/td][td]password reset token[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td] +[/td][/tr] +[tr][td]channel_default_group[/td][td]put all new connections into the group with this name[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]channel_allow_cid[/td][td]Default permissions for this channel[/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]channel_allow_gid[/td][td]Default permissions for this channel[/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]channel_deny_cid[/td][td]Default permissions for this channel[/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]channel_deny_gid[/td][td]Default permissions for this channel[/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]channel_r_stream[/td][td]specific permission bitfield[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td] +[/td][/tr] +[tr][td]channel_r_profile[/td][td]specific permission bitfield[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td] +[/td][/tr] +[tr][td]channel_r_photos[/td][td]specific permission bitfield[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td] +[/td][/tr] +[tr][td]channel_r_abook[/td][td]specific permission bitfield[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td] +[/td][/tr] +[tr][td]channel_w_stream[/td][td]specific permission bitfield[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td] +[/td][/tr] +[tr][td]channel_w_wall[/td][td]specific permission bitfield[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td] +[/td][/tr] +[tr][td]channel_w_tagwall[/td][td]specific permission bitfield[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td] +[/td][/tr] +[tr][td]channel_w_comment[/td][td]specific permission bitfield[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td] +[/td][/tr] +[tr][td]channel_w_mail[/td][td]specific permission bitfield[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td] +[/td][/tr] +[tr][td]channel_w_photos[/td][td]specific permission bitfield[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td] +[/td][/tr] +[tr][td]channel_w_chat[/td][td]specific permission bitfield[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td] +[/td][/tr] +[tr][td]channel_a_delegate[/td][td]specific permission bitfield[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]channel_r_storage[/td][td]specific permission bitfield[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td] +[/td][/tr] +[tr][td]channel_w_storage[/td][td]specific permission bitfield[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td] +[/td][/tr] +[tr][td]channel_r_pages[/td][td]specific permission bitfield[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td] +[/td][/tr] +[tr][td]channel_w_pages[/td][td]specific permission bitfield[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td] +[/td][/tr] +[tr][td]channel_a_republish[/td][td]specific permission bitfield[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td] +[/td][/tr] +[tr][td]channel_w_like[/td][td]specific permission bitfield[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td] +[/td][/tr] +[tr][td]channel_removed[/td][td]if 1, this channel has been deleted[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td] +[/td][/tr] +[tr][td]channel_system[/td][td]if 1, this is the special system channel on this site[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td] +[/td][/tr] +[tr][td]channel_moved[/td][td]URL of relocated channel, making this instance abandoned if set[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl] diff --git a/doc/de/database/db_chat.bb b/doc/de/database/db_chat.bb new file mode 100644 index 000000000..1aac2bd15 --- /dev/null +++ b/doc/de/database/db_chat.bb @@ -0,0 +1,16 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]chat_id[/td][td]sequential ID[/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]chat_room[/td][td]chatroom.cr_id for this chat[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]chat_xchan[/td][td]author xchan_hash[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]chat_text[/td][td]the text of the chat message[/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]created[/td][td]timestamp of this message[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_chatpresence.bb b/doc/de/database/db_chatpresence.bb new file mode 100644 index 000000000..0a7f666c9 --- /dev/null +++ b/doc/de/database/db_chatpresence.bb @@ -0,0 +1,18 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]cp_id[/td][td]sequential ID[/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]cp_room[/td][td]chatroom.cr_id of the chatroom[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]cp_xchan[/td][td]xchan_hash of the chatroom participant[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]cp_last[/td][td]datetime last ping[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[tr][td]cp_status[/td][td]text status description e.g. "online"[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]cp_client[/td][td]IP address of this client[/td][td]char(128)[/td][td]NO[/td][td][/td][td][/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_chatroom.bb b/doc/de/database/db_chatroom.bb new file mode 100644 index 000000000..1d316288d --- /dev/null +++ b/doc/de/database/db_chatroom.bb @@ -0,0 +1,28 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]cr_id[/td][td]sequential ID[/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]cr_aid[/td][td]account.id of chatroom owner[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]cr_uid[/td][td]channel.channel_id of chatroom owner[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]cr_name[/td][td]visible name of chatroom[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]cr_created[/td][td]creation timestampe[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[tr][td]cr_edited[/td][td]edited timestamp[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[tr][td]cr_expire[/td][td]expiration period for chats in this chatroom in minutes, 0 is no expiration[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]allow_cid[/td][td]permissions for this room[/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]allow_gid[/td][td]permissions for this room[/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]deny_cid[/td][td]permissions for this room[/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]deny_gid[/td][td]permissions for this room[/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_clients.bb b/doc/de/database/db_clients.bb new file mode 100644 index 000000000..0c66a4fc2 --- /dev/null +++ b/doc/de/database/db_clients.bb @@ -0,0 +1,18 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]client_id[/td][td][/td][td]varchar(20)[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]pw[/td][td][/td][td]varchar(20)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]redirect_uri[/td][td][/td][td]varchar(200)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]clname[/td][td][/td][td]text[/td][td]YES[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]icon[/td][td][/td][td]text[/td][td]YES[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]uid[/td][td][/td][td]int(11)[/td][td]NO[/td][td][/td][td]0[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_config.bb b/doc/de/database/db_config.bb new file mode 100644 index 000000000..f32d3c259 --- /dev/null +++ b/doc/de/database/db_config.bb @@ -0,0 +1,14 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]cat[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]k[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]v[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_conv.bb b/doc/de/database/db_conv.bb new file mode 100644 index 000000000..5adfa8c80 --- /dev/null +++ b/doc/de/database/db_conv.bb @@ -0,0 +1,25 @@ + +Used in Diaspora private mails + +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]id[/td][td]sequential ID[/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]guid[/td][td]A unique identifier for this conversation[/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]recips[/td][td]sender_handle;recipient_handle[/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]uid[/td][td]channel.channel_id of the owner of this data[/td][td]int(11)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]creator[/td][td]handle of creator[/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]created[/td][td]creation timestamp[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[tr][td]updated[/td][td]edited timestamp[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[tr][td]subject[/td][td]subject of initial message (obscured for privacy)[/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_event.bb b/doc/de/database/db_event.bb new file mode 100644 index 000000000..ad3c15789 --- /dev/null +++ b/doc/de/database/db_event.bb @@ -0,0 +1,64 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]id[/td][td][/td][td]int(11)[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]aid[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]uid[/td][td][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]event_xchan[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]event_hash[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]created[/td][td][/td][td]datetime[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]edited[/td][td][/td][td]datetime[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]dtstart[/td][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]dtend[/td][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]summary[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]description[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]location[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]etype[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]nofinish[/td][td][/td][td]tinyint(1)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]adjust[/td][td][/td][td]tinyint(1)[/td][td]NO[/td][td]MUL[/td][td]1[/td][td] +[/td][/tr] +[tr][td]dismissed[/td][td][/td][td]tinyint(1)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]allow_cid[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]allow_gid[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]deny_cid[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]deny_gid[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] + +[tr][td]event_status[/td][td][/td][td]charr(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]event_status_date[/td][td][/td][td]datetime[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]event_percent[/td][td][/td][td]smallint(6)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]event_repeat[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]event_sequence[/td][td][/td][td]smallint[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]event_priority[/td][td][/td][td]smallint[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]event_vdata[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]cal_id[/td][td][/td][td]int(10)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] + +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_fcontact.bb b/doc/de/database/db_fcontact.bb new file mode 100644 index 000000000..9bd8c20fe --- /dev/null +++ b/doc/de/database/db_fcontact.bb @@ -0,0 +1,38 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]url[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]name[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]photo[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]request[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]nick[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]addr[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]batch[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]notify[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]poll[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]confirm[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]priority[/td][td][/td][td]tinyint(1)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]network[/td][td][/td][td]char(32)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]alias[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]pubkey[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]updated[/td][td][/td][td]datetime[/td][td]NO[/td][td][/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_ffinder.bb b/doc/de/database/db_ffinder.bb new file mode 100644 index 000000000..c20158d56 --- /dev/null +++ b/doc/de/database/db_ffinder.bb @@ -0,0 +1,14 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]uid[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]cid[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]fid[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_fserver.bb b/doc/de/database/db_fserver.bb new file mode 100644 index 000000000..4c4b0b530 --- /dev/null +++ b/doc/de/database/db_fserver.bb @@ -0,0 +1,14 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]id[/td][td][/td][td]int(11)[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]server[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]posturl[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]key[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_fsuggest.bb b/doc/de/database/db_fsuggest.bb new file mode 100644 index 000000000..9da1f2f6d --- /dev/null +++ b/doc/de/database/db_fsuggest.bb @@ -0,0 +1,24 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]id[/td][td][/td][td]int(11)[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]uid[/td][td][/td][td]int(11)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]cid[/td][td][/td][td]int(11)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]name[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]url[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]request[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]photo[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]note[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]created[/td][td][/td][td]datetime[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_hook.bb b/doc/de/database/db_hook.bb new file mode 100644 index 000000000..233062f98 --- /dev/null +++ b/doc/de/database/db_hook.bb @@ -0,0 +1,18 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]id[/td][td]sequential ID[/td][td]int(11)[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]hook[/td][td]name of hook[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]file[/td][td]relative filename of hook handler[/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]fn[/td][td]function name of hook handler[/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]priority[/td][td]can be used to sort conflicts in hook handling by calling handlers in priority order[/td][td]int(11) unsigned[/td][td]NO[/td][td][/td][td]0[/td][td] +[/td][/tr] +[tr][td]hook_version[/td][td]version 0 hooks must have two arguments, the App and the hook data. version 1 hooks have 1 argument - the hook data[/td][td]int(11) unsigned[/td][td]NO[/td][td][/td][td]0[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_hubloc.bb b/doc/de/database/db_hubloc.bb new file mode 100644 index 000000000..e4ab7159d --- /dev/null +++ b/doc/de/database/db_hubloc.bb @@ -0,0 +1,38 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]hubloc_id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]hubloc_guid[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]hubloc_guid_sig[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]hubloc_hash[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]hubloc_addr[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]hubloc_network[/td][td][/td][td]char(32)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]hubloc_flags[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]hubloc_status[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]hubloc_url[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]hubloc_url_sig[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]hubloc_host[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]hubloc_callback[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td] +[/td][/tr] +[tr][td]hubloc_connect[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]hubloc_sitekey[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]hubloc_updated[/td][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[tr][td]hubloc_connected[/td][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_issue.bb b/doc/de/database/db_issue.bb new file mode 100644 index 000000000..0a6f2912b --- /dev/null +++ b/doc/de/database/db_issue.bb @@ -0,0 +1,20 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]issue_id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]issue_created[/td][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[tr][td]issue_updated[/td][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[tr][td]issue_assigned[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]issue_priority[/td][td][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]issue_status[/td][td][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]issue_component[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_item.bb b/doc/de/database/db_item.bb new file mode 100644 index 000000000..6383e13f8 --- /dev/null +++ b/doc/de/database/db_item.bb @@ -0,0 +1,151 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]id[/td][td]Sequential ID[/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]mid[/td][td]Message-id - globally unique, there can be several items with the same message-ID in the table as they may have different uid owners[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]aid[/td][td]channel_account_id of the channel_id (uid) which owns this copy of the item[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]uid[/td][td]channel_id (uid) which owns this copy of the item[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]parent[/td][td]item.id of the parent to this item if it is a reply of some form; otherwise this must be set to the id of this item[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]parent_mid[/td][td]Globally unique message-id of the parent to this item[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]thr_parent[/td][td]If the parent of this item is not the top-level item in the conversation, the message-id of the immediate parent; otherwise set to parent_mid[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td] +[/td][/tr] +[tr][td]created[/td][td]Creation timestamp. If creation is more than ten minutes into the future, set item_delayed to 1; it will automatically be delivered by the poller once the created time has passed[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[tr][td]edited[/td][td]Date of last edit (default is created)[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[tr][td]expires[/td][td]Date this item expires and will be removed[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[tr][td]commented[/td][td]Date of last comment/reply to this item[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[tr][td]received[/td][Date the item was received at this sitetd][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[tr][td]changed[/td][td]Date that something in the conversation changed, indicating clients should fetch the conversation again[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[tr][td]comments_closed[/td][td]Date after which no more comments will be accepted[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[tr][td]owner_xchan[/td][td]xchan_hash of the owner of this conversation (this is who replies are sent to)[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]author_xchan[/td][td]xchan_hash of the author of this item[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]source_xchan[/td][td]xchan_hash of the external source of this item belongs to multiple delivery chains and comments need to be uplinked[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td] +[/td][/tr] +[tr][td]mimetype[/td][td]mime type of the content body[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]title[/td][td]item title[/td][td]text[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]body[/td][td]item body content[/td][td]mediumtext[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]app[/td][td]application which generated this item[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td] +[/td][/tr] +[tr][td]lang[/td][td]auto-detected language[/td][td]char(64)[/td][td]NO[/td][td][/td][td][/td][td] +[/td][/tr] +[tr][td]revision[/td][td]future use, version control[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]verb[/td][td]ActivityStreams verb (old style URI)[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]obj_type[/td][td]ActivityStreams object type (old style URI)[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td] +[/td][/tr] +[tr][td]obj[/td][td]JSON encoded object structure unless it is an implied object (normal post)[/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]tgt_type[/td][td]ActivityStreams target type if applicable (URI)[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td] +[/td][/tr] +[tr][td]target[/td][td]JSON encoded target structure if used[/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]layout_mid[/td][td]For webpages, which layout (mid or message_id) to use when displaying this page[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]postopts[/td][td]External post connectors add their network name to this comma-separated string to identify that they should be delivered to these networks during delivery[/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]route[/td][td]comma separated xchan list of xchans where this message was routed on its way to this destination, used for route loop discovery and rejection of comments which arrived by alternate routes and may have different permissions[/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]llink[/td][td]URL of a displayable copy of this post/conversation on this site[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]plink[/td][td]permalink or URL toa displayable copy of the message at its source[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td] +[/td][/tr] +[tr][td]resource_id[/td][td]Used to link other tables to items, it identifies the linked resource and if set must also set resource_type[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td] +[/td][/tr] +[tr][td]resource_type[/td][td]default none, if a linked resource this should be the name of the resource type such as "photo" or "event"[/td][td]char(16)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]attach[/td][td]JSON structure representing attachments to this item[/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]sig[/td][td]RSA signature of the item body by the original author if the private key is available[/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]diaspora_meta[/td][td]Used to store Diaspora comment signatures with their weird requirements[/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]location[/td][td]text location where this item originated[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td] +[/td][/tr] +[tr][td]coord[/td][td] longitude/latitude pair representing location where this item originated[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td] +[/td][/tr] +[tr][td]public_policy[/td][td]If the author has specified restrictions (this network, this site) etc. for distribution, the corresponding policy text is present here and item_private = 1[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]comment_policy[/td][td]If the author has specified comment restrictions (thei network, this site, etc.) the corresponding policy text is present here[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]allow_cid[/td][td]Access Control - list of allowed xchans '<xchan1><xchan2>...'[/td][td]mediumtext[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]allow_gid[/td]Access Control - list of allowed group hashes, see allow_cid[td][/td][td]mediumtext[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]deny_cid[/td][td]Access Control - list of denied xchans[/td][td]mediumtext[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]deny_gid[/td][td]Access Control - list of denied groups[/td][td]mediumtext[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]item_restrict[/td]no longer used[td][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]item_flags[/td][td]no longer used[/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]item_private[/td][td]distribution is restricted[/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]item_origin[/td][td]item originated at this site[/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]item_unseen[/td][td]item has not been seen[/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]item_starred[/td][td]item has been favourited[/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]item_uplink[/td][td]This item is part of a multiple delivery chain and must be uplinked to the original sender (source_xchan)[/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]item_consensus[/td][td]This item allows voting tools[/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]item_wall[/td][td]This item was posted to the wall of uid[/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]item_thread_top[/td][td]parent = id, this is the top post in a conversation [/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]item_notshown[/td][td][/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]item_nsfw[/td][td][/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]item_relay[/td][td][/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]item_mentionsme[/td][td]The owner of this item was mentioned in it[/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]item_nocomment[/td][td]if 1, no comments are allowed[/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]item_obscured[/td][td]no longer used[/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]item_verified[/td][td]the signature has been verified on this site[/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]item_retained[/td][td][/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]item_rss[/td][td]item originated in a feed[/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]item_deleted[/td][td]item has been deleted[/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]item_type[/td][td]used to identify webpage and design element types, 0 is a normal conversation item[/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]item_hidden[/td][td]0 or 1 if item is not to be displayed[/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]item_unpublished[/td][td][/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]item_delayed[/td][td]item is posted in the future[/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]item_pending_remove[/td][td]item is in the process of being removed[/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]item_blocked[/td][td][/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] + +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_item_id.bb b/doc/de/database/db_item_id.bb new file mode 100644 index 000000000..ba4cca247 --- /dev/null +++ b/doc/de/database/db_item_id.bb @@ -0,0 +1,16 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]id[/td][td]sequential ID[/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]iid[/td][td]item.id of the referenced item[/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]uid[/td][td]channel.channel_id of the owner of this data[/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]sid[/td][td]an additional identifier to attach or link to the referenced item (often used to store a message_id from another system in order to suppress duplicates)[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]service[/td][td]the name or description of the service which generated this identifier[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_likes.bb b/doc/de/database/db_likes.bb new file mode 100644 index 000000000..118c9a87e --- /dev/null +++ b/doc/de/database/db_likes.bb @@ -0,0 +1,24 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]channel_id[/td][td][/td][td]int(11) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]liker[/td][td][/td][td]char(128)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]likee[/td][td][/td][td]char(128)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]iid[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]verb[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]target_type[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]target_id[/td][td][/td][td]char(128)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]target[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_mail.bb b/doc/de/database/db_mail.bb new file mode 100644 index 000000000..0628584ae --- /dev/null +++ b/doc/de/database/db_mail.bb @@ -0,0 +1,34 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]convid[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]mail_flags[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]from_xchan[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]to_xchan[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]account_id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]channel_id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]title[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]body[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]attach[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]mid[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]parent_mid[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]created[/td][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[tr][td]expires[/td][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_menu.bb b/doc/de/database/db_menu.bb new file mode 100644 index 000000000..5b478115d --- /dev/null +++ b/doc/de/database/db_menu.bb @@ -0,0 +1,16 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]menu_id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]menu_channel_id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]menu_name[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]menu_desc[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td] +[/td][/tr] +[tr][td]menu_flags[/td][td][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_menu_item.bb b/doc/de/database/db_menu_item.bb new file mode 100644 index 000000000..b14aac5e4 --- /dev/null +++ b/doc/de/database/db_menu_item.bb @@ -0,0 +1,28 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]mitem_id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]mitem_link[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td] +[/td][/tr] +[tr][td]mitem_desc[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td] +[/td][/tr] +[tr][td]mitem_flags[/td][td][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]allow_cid[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]allow_gid[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]deny_cid[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]deny_gid[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]mitem_channel_id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]mitem_menu_id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]mitem_order[/td][td][/td][td]int(11)[/td][td]NO[/td][td][/td][td]0[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_notify.bb b/doc/de/database/db_notify.bb new file mode 100644 index 000000000..4787266cd --- /dev/null +++ b/doc/de/database/db_notify.bb @@ -0,0 +1,36 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]id[/td][td][/td][td]int(11)[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]hash[/td][td][/td][td]char(64)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]xname[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]url[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]photo[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]date[/td][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]msg[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]aid[/td][td][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]uid[/td][td][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]link[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]parent[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]seen[/td][td][/td][td]tinyint(1)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]ntype[/td][td][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]verb[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]otype[/td][td][/td][td]char(16)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_obj.bb b/doc/de/database/db_obj.bb new file mode 100644 index 000000000..cc5e75598 --- /dev/null +++ b/doc/de/database/db_obj.bb @@ -0,0 +1,26 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]obj_id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]obj_page[/td][td][/td][td]char(64)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]obj_verb[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]obj_type[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]obj_obj[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]obj_channel[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]allow_cid[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]allow_gid[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]deny_cid[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]deny_gid[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_outq.bb b/doc/de/database/db_outq.bb new file mode 100644 index 000000000..970f99de5 --- /dev/null +++ b/doc/de/database/db_outq.bb @@ -0,0 +1,28 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]outq_hash[/td][td][/td][td]char(255)[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]outq_account[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]outq_channel[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]outq_driver[/td][td][/td][td]char(32)[/td][td]NO[/td][td][/td][td][/td][td] +[/td][/tr] +[tr][td]outq_posturl[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]outq_async[/td][td][/td][td]tinyint(1)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]outq_delivered[/td][td][/td][td]tinyint(1)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]outq_created[/td][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[tr][td]outq_updated[/td][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[tr][td]outq_notify[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]outq_msg[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_pconfig.bb b/doc/de/database/db_pconfig.bb new file mode 100644 index 000000000..2ac36e61a --- /dev/null +++ b/doc/de/database/db_pconfig.bb @@ -0,0 +1,16 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]id[/td][td][/td][td]int(11)[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]uid[/td][td][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]cat[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]k[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]v[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_pgrp.bb b/doc/de/database/db_pgrp.bb new file mode 100644 index 000000000..73265b90e --- /dev/null +++ b/doc/de/database/db_pgrp.bb @@ -0,0 +1,18 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]id[/td][td]sequential ID[/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]hash[/td][td]unique hash representing this group with the group name appended[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]uid[/td][td]channel.channel_id owning this data[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]visible[/td][td]1 indicates the member list is not private[/td][td]tinyint(1)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]deleted[/td][td]1 indicates the group has been deleted[/td][td]tinyint(1)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]gname[/td][td]human readable name of group[/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_pgrp_member.bb b/doc/de/database/db_pgrp_member.bb new file mode 100644 index 000000000..b9ab8171d --- /dev/null +++ b/doc/de/database/db_pgrp_member.bb @@ -0,0 +1,14 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]id[/td][td]sequential ID[/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]uid[/td][td]channel.channel_id of the owner of this data[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]gid[/td][td]groups.id of the associated group[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]xchan[/td][td]xchan.xchan_hash of the member assigned to the associated group[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_photo.bb b/doc/de/database/db_photo.bb new file mode 100644 index 000000000..91840ec1e --- /dev/null +++ b/doc/de/database/db_photo.bb @@ -0,0 +1,52 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]aid[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]uid[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]xchan[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]resource_id[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]created[/td][td][/td][td]datetime[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]edited[/td][td][/td][td]datetime[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]title[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]description[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]album[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]filename[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]mimetype[/td][td][/td][td]char(128)[/td][td]NO[/td][td]MUL[/td][td]image/jpeg[/td][td] +[/td][/tr] +[tr][td]height[/td][td][/td][td]smallint(6)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]width[/td][td][/td][td]smallint(6)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]filesize[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]content[/td][td][/td][td]mediumblob[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]scale[/td][td][/td][td]tinyint(3)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]profile[/td][td][/td][td]tinyint(1)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]photo_flags[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]allow_cid[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]allow_gid[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]deny_cid[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]deny_gid[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_poll.bb b/doc/de/database/db_poll.bb new file mode 100644 index 000000000..57d808b71 --- /dev/null +++ b/doc/de/database/db_poll.bb @@ -0,0 +1,16 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]poll_id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]poll_channel[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]poll_desc[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]poll_flags[/td][td][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]poll_votes[/td][td][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_poll_elm.bb b/doc/de/database/db_poll_elm.bb new file mode 100644 index 000000000..fd649d5a6 --- /dev/null +++ b/doc/de/database/db_poll_elm.bb @@ -0,0 +1,16 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]pelm_id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]pelm_poll[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]pelm_desc[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]pelm_flags[/td][td][/td][td]int(11)[/td][td]NO[/td][td][/td][td]0[/td][td] +[/td][/tr] +[tr][td]pelm_result[/td][td][/td][td]float[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_profdef.bb b/doc/de/database/db_profdef.bb new file mode 100644 index 000000000..a0904fd79 --- /dev/null +++ b/doc/de/database/db_profdef.bb @@ -0,0 +1,18 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]field_name[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]field_type[/td][td][/td][td]char(16)[/td][td]NO[/td][td][/td][td][/td][td] +[/td][/tr] +[tr][td]field_desc[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td] +[/td][/tr] +[tr][td]field_help[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td] +[/td][/tr] +[tr][td]field_inputs[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_profext.bb b/doc/de/database/db_profext.bb new file mode 100644 index 000000000..ada9dce2a --- /dev/null +++ b/doc/de/database/db_profext.bb @@ -0,0 +1,16 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]channel_id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]hash[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]k[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]v[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_profile.bb b/doc/de/database/db_profile.bb new file mode 100644 index 000000000..717fae585 --- /dev/null +++ b/doc/de/database/db_profile.bb @@ -0,0 +1,94 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]id[/td][td][/td][td]int(11)[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]profile_guid[/td][td][/td][td]char(64)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]aid[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]uid[/td][td][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]profile_name[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]is_default[/td][td][/td][td]tinyint(1)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]hide_friends[/td][td][/td][td]tinyint(1)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]fullname[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]pdesc[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]chandesc[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]dob[/td][td][/td][td]char(32)[/td][td]NO[/td][td][/td][td]0000-00-00[/td][td] +[/td][/tr] +[tr][td]dob_tz[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]UTC[/td][td] +[/td][/tr] +[tr][td]address[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]locality[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]region[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]postal_code[/td][td][/td][td]char(32)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]country_name[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]hometown[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]gender[/td][td][/td][td]char(32)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]marital[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]partner[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]howlong[/td][td][/td][td]datetime[/td][td]NO[/td][td][/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[tr][td]sexual[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]politic[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]religion[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]keywords[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]likes[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]dislikes[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]about[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]summary[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]music[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]book[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]tv[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]film[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]interest[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]romance[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]employment[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]education[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]contact[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]channels[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]homepage[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]photo[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]thumb[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]publish[/td][td][/td][td]tinyint(1)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_profile_check.bb b/doc/de/database/db_profile_check.bb new file mode 100644 index 000000000..3be64c5da --- /dev/null +++ b/doc/de/database/db_profile_check.bb @@ -0,0 +1,18 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]uid[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]cid[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]dfrn_id[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]sec[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]expire[/td][td][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_register.bb b/doc/de/database/db_register.bb new file mode 100644 index 000000000..50672b5e1 --- /dev/null +++ b/doc/de/database/db_register.bb @@ -0,0 +1,18 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]hash[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]created[/td][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]uid[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]password[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]language[/td][td][/td][td]char(16)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_session.bb b/doc/de/database/db_session.bb new file mode 100644 index 000000000..d7ff0482d --- /dev/null +++ b/doc/de/database/db_session.bb @@ -0,0 +1,14 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]id[/td][td][/td][td]bigint(20) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]sid[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]data[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]expire[/td][td][/td][td]bigint(20) unsigned[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_shares.bb b/doc/de/database/db_shares.bb new file mode 100644 index 000000000..be5255c03 --- /dev/null +++ b/doc/de/database/db_shares.bb @@ -0,0 +1,14 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]share_id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]share_type[/td][td][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]share_target[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]share_xchan[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_sign.bb b/doc/de/database/db_sign.bb new file mode 100644 index 000000000..e80ea7ef3 --- /dev/null +++ b/doc/de/database/db_sign.bb @@ -0,0 +1,18 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]iid[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]retract_iid[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]signed_text[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]signature[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]signer[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_site.bb b/doc/de/database/db_site.bb new file mode 100644 index 000000000..8dea4dae6 --- /dev/null +++ b/doc/de/database/db_site.bb @@ -0,0 +1,28 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]site_url[/td][td][/td][td]char(255)[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]site_access[/td][td][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]site_flags[/td][td][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]site_update[/td][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[tr][td]site_pull[/td][td][/td][td]datetime[/td][td]NO[/td][td][/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[tr][td]site_sync[/td][td][/td][td]datetime[/td][td]NO[/td][td][/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[tr][td]site_directory[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]site_register[/td][td][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]site_sellpage[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]site_location[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td] +[/td][/tr] +[tr][td]site_realm[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_source.bb b/doc/de/database/db_source.bb new file mode 100644 index 000000000..92850a82e --- /dev/null +++ b/doc/de/database/db_source.bb @@ -0,0 +1,16 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]src_id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]src_channel_id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]src_channel_xchan[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]src_xchan[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]src_patt[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_spam.bb b/doc/de/database/db_spam.bb new file mode 100644 index 000000000..b75e1edd3 --- /dev/null +++ b/doc/de/database/db_spam.bb @@ -0,0 +1,18 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]id[/td][td][/td][td]int(11)[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]uid[/td][td][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]spam[/td][td][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]ham[/td][td][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]term[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]date[/td][td][/td][td]datetime[/td][td]NO[/td][td][/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_sys_perms.bb b/doc/de/database/db_sys_perms.bb new file mode 100644 index 000000000..04416a26b --- /dev/null +++ b/doc/de/database/db_sys_perms.bb @@ -0,0 +1,16 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]cat[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]k[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]v[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]public_perm[/td][td][/td][td]tinyint(1) unsigned[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_term.bb b/doc/de/database/db_term.bb new file mode 100644 index 000000000..bd155fe21 --- /dev/null +++ b/doc/de/database/db_term.bb @@ -0,0 +1,28 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]tid[/td][td]sequential index[/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]aid[/td][td]channel_account_id of the controlling channel[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]uid[/td][td]channel_id of the controlling channel[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]oid[/td][td]DB index of linked thing[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]otype[/td][td]type of linked thing[/td][td]tinyint(3) unsigned[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]ttype[/td][td]taxonomy type (See Tag/term types in boot.php)[/td][td]tinyint(3) unsigned[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]term[/td][td]the actual taxonomy term[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]url[/td]relevant link (for tags and mentions, a link to the associated resource)[td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]imgurl[/td][td]rarely used - an image associated with this taxonomy term[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]term_hash[/td][td]unique hash for this entry[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]parent_hash[/td][td]for hierarchical taxonomies, the hash of the relevant parent[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_tokens.bb b/doc/de/database/db_tokens.bb new file mode 100644 index 000000000..35da2458c --- /dev/null +++ b/doc/de/database/db_tokens.bb @@ -0,0 +1,18 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]id[/td][td][/td][td]varchar(40)[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]secret[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]client_id[/td][td][/td][td]varchar(20)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]expires[/td][td][/td][td]bigint(20) unsigned[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]scope[/td][td][/td][td]varchar(200)[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]uid[/td][td][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_updates.bb b/doc/de/database/db_updates.bb new file mode 100644 index 000000000..f2e25d84c --- /dev/null +++ b/doc/de/database/db_updates.bb @@ -0,0 +1,20 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]ud_id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]ud_hash[/td][td][/td][td]char(128)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]ud_guid[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]ud_date[/td][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[tr][td]ud_last[/td][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[tr][td]ud_flags[/td][td][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]ud_addr[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_verify.bb b/doc/de/database/db_verify.bb new file mode 100644 index 000000000..9d01181c5 --- /dev/null +++ b/doc/de/database/db_verify.bb @@ -0,0 +1,18 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]channel[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]type[/td][td][/td][td]char(32)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]token[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]meta[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]created[/td][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_vote.bb b/doc/de/database/db_vote.bb new file mode 100644 index 000000000..0b9a423eb --- /dev/null +++ b/doc/de/database/db_vote.bb @@ -0,0 +1,16 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]vote_id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]vote_poll[/td][td][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]vote_element[/td][td][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]vote_result[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]vote_xchan[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_xchan.bb b/doc/de/database/db_xchan.bb new file mode 100644 index 000000000..8932969c5 --- /dev/null +++ b/doc/de/database/db_xchan.bb @@ -0,0 +1,59 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]xchan_hash[/td][td]calculated hash of this extended channel[/td][td]char(255)[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]xchan_guid[/td][td]channel_guid of this extended channel[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]xchan_guid_sig[/td][td]base64url encoded signature of the guid[/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]xchan_pubkey[/td][td]public key for verifying signed data and assertions[/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]xchan_photo_mimetype[/td][td]mimetype of the profile photo[/td][td]char(32)[/td][td]NO[/td][td][/td][td]image/jpeg[/td][td] +[/td][/tr] +[tr][td]xchan_photo_l[/td][td]photo url 300px[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td] +[/td][/tr] +[tr][td]xchan_photo_m[/td][td]photo url 80 px[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td] +[/td][/tr] +[tr][td]xchan_photo_s[/td][td]photo url 48 px[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td] +[/td][/tr] +[tr][td]xchan_addr[/td][td]user@host[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]xchan_url[/td][td]url of channel page on primary hub location[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]xchan_connurl[/td]poco url[td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]xchan_follow[/td]url template for following %s[td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]xchan_connpage[/td][td]for premium channels url of channel to display when connecting[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td] +[/td][/tr] +[tr][td]xchan_name[/td][td]human readabl name of channel[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]xchan_network[/td][td]network of channel for instance 'zot', 'diaspora', 'unknown'[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]xchan_instance_url[/td][td]no longer used[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]xchan_flags[/td][td]no longer used[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]xchan_photo_date[/td][td]timestamp of last photo change in GMT[/td][td]datetime[/td][td]NO[/td][td][/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[tr][td]xchan_name_date[/td][td]timestamp of last name change in GMT[/td][td]datetime[/td][td]NO[/td][td][/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[tr][td]xchan_hidden[/td][td]flag - channel is hidden[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]xchan_orphan[/td][td]flag - channel has no known hubloc locations[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]xchan_censored[/td][td]flag - channel has been censored[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]xchan_selfcensored[/td][td]flag - channel is self censored (adult or nsfw)[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]xchan_system[/td][td]flag - this represents a system channel[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]xchan_pubforum[/td][td]flag - channel is a public forum[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]xchan_deleted[/td][td]flag - channel was deleted[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] + +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_xchat.bb b/doc/de/database/db_xchat.bb new file mode 100644 index 000000000..0897408d1 --- /dev/null +++ b/doc/de/database/db_xchat.bb @@ -0,0 +1,16 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]xchat_id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]xchat_url[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]xchat_desc[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]xchat_xchan[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]xchat_edited[/td][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_xconfig.bb b/doc/de/database/db_xconfig.bb new file mode 100644 index 000000000..111d1ce3a --- /dev/null +++ b/doc/de/database/db_xconfig.bb @@ -0,0 +1,16 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]xchan[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]cat[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]k[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]v[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_xign.bb b/doc/de/database/db_xign.bb new file mode 100644 index 000000000..63c6569de --- /dev/null +++ b/doc/de/database/db_xign.bb @@ -0,0 +1,13 @@ +xign - holds xchan information for channels that have been ignored in 'friend suggestions' +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]id[/td][td]sequential ID[/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]uid[/td][td]local channel.channel_id[/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]xchan[/td][td]xchan.xchan_hash of ignored channel[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_xlink.bb b/doc/de/database/db_xlink.bb new file mode 100644 index 000000000..528f8da19 --- /dev/null +++ b/doc/de/database/db_xlink.bb @@ -0,0 +1,22 @@ +xlink - used to store social graph and channel ratings +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]xlink_id[/td][td]sequential ID[/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]xlink_xchan[/td][td]xchan.xchan_hash of controlling channel[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]xlink_link[/td][td]xchan.xchan_hash of link target (connection or rating)[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]xlink_rating[/td][td]int rating[/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]xlink_rating_txt[/td][td]rating text[/td][td]mediumtext[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]xlink_updated[/td][td]timestamp of update in GMT[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[tr][td]xlink_static[/td][td]0 for social graph, 1 for ratings[/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]xlink_sig[/td][td]base64url encoded signature of rating information[/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_xprof.bb b/doc/de/database/db_xprof.bb new file mode 100644 index 000000000..bed79e9ca --- /dev/null +++ b/doc/de/database/db_xprof.bb @@ -0,0 +1,37 @@ +xprof - stores searchable public profile information on directory servers +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]xprof_hash[/td][td]xchan.xchan_hash of this channel[/td][td]char(255)[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]xprof_age[/td][td]current age (updated monthly)[/td][td]tinyint(3) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[tr][td]xprof_desc[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]xprof_dob[/td][td][/td][td]char(12)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]xprof_gender[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]xprof_marital[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]xprof_sexual[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]xprof_locale[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]xprof_region[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]xprof_postcode[/td][td][/td][td]char(32)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]xprof_country[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]xprof_keywords[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]xprof_about[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]xprof_homepage[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td] +[/td][/tr] +[tr][td]xprof_hometown[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/database/db_xtag.bb b/doc/de/database/db_xtag.bb new file mode 100644 index 000000000..1e6fb9961 --- /dev/null +++ b/doc/de/database/db_xtag.bb @@ -0,0 +1,14 @@ +[table] +[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra +[/th][/tr] +[tr][td]xtag_id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[/td][/tr] +[tr][td]xtag_hash[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td] +[/td][/tr] +[tr][td]xtag_term[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[/td][/tr] +[tr][td]xtag_flags[/td][td][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[/td][/tr] +[/table] + +Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/de/develop.bb b/doc/de/develop.bb deleted file mode 100644 index 30e2954c6..000000000 --- a/doc/de/develop.bb +++ /dev/null @@ -1,30 +0,0 @@ -[h2]Dokumentation für Entwickler[/h2] - -[h3]Technische Dokumentation[/h3] -[zrl=[baseurl]/help/Zot---A-High-Level-Overview]Zot – ein grober Überblick[/zrl] -[zrl=[baseurl]/help/zot]Eine Einführung ins Zot-Protokoll[/zrl] -[zrl=[baseurl]/help/zot_structures]Zot-Strukturen[/zrl] -[zrl=[baseurl]/help/comanche]Seitenbeschreibung in Comanche[/zrl] -[zrl=[baseurl]/help/Creating-Templates]Vorlagen erstellen mit Comanche[/zrl] -[zrl=[baseurl]/help/Widgets]Widgets[/zrl] -[zrl=[baseurl]/help/plugins]Plugins[/zrl] -[zrl=[baseurl]/help/doco]Selbst Dokumentation beisteuern[/zrl] -[zrl=[baseurl]/help/DerivedTheme1]Einen Theme basierend auf einem anderen erstellen[/zrl] -[zrl=[baseurl]/help/schema_development]Schemata[/zrl] -[zrl=[baseurl]/help/Translations]Übersetzungen[/zrl] -[zrl=[baseurl]/help/developers]Entwickler[/zrl] -[zrl=[baseurl]/help/intro_for_developers]Einführung für Entwickler[/zrl] -[zrl=[baseurl]/help/database]Datenbank-Schema[/zrl] -[zrl=[baseurl]/help/api_functions]API-Funktionen[/zrl] -[zrl=[baseurl]/help/api_posting]Mit der API einen Beitrag erstellen[/zrl] -[zrl=[baseurl]/help/developer_function_primer]Übersicht der wichtigsten $Projectname-Funktionen[/zrl] -[zrl=[baseurl]/doc/html/]Code-Referenz (mit doxygen generiert - setzt Cookies)[/zrl] -[zrl=[baseurl]/help/to_do_doco]To-Do-Liste für das Projekt $Projectname-Dokumentation[/zrl] -[zrl=[baseurl]/help/to_do_code]To-Do-Liste für Entwickler[/zrl] -[zrl=[baseurl]/help/roadmap]Roadmap[/zrl] -[zrl=[baseurl]/help/git_for_non_developers]Git für Nicht-Entwickler[/zrl] -[zrl=[baseurl]/help/dev_beginner]Schritt-für-Schritt-Einführung für neue Entwickler[/zrl] - -[h3]Externe Ressourcen[/h3] -[url=https://zothub.com/channel/one]Entwickler-Kanal[/url] -[url=https://federated.social/channel/postgres]Postgres-spezifischer Admin-Support-Kanal[/url] diff --git a/doc/de/developer/API.md b/doc/de/developer/API.md new file mode 100644 index 000000000..6966024df --- /dev/null +++ b/doc/de/developer/API.md @@ -0,0 +1,787 @@ +### Zot API + +Many existing social applications and tools can interface directly using the Twitter/StatusNet API, which is available using the 'twitter_api' addon. + +This document describes the native API; which allows direct programmatic access to several internal data structures and libraries extending beyond the basic social interface. + +The API endpoints detailed below are relative to `api/z/1.0`, meaning that if an API is listed as `channel/stream` the full API URL is `https://hub.hubzilla.hu/api/z/1.0/channel/stream`. + + + +### channel/export/basic + +Export basic channel data + +Options: + \- sections + comma-separated list of data types to export + + \- posts + if true, return default sections plus 3 months of posts + + If no sections are requested, the following sections are returned: + channel, connections, config, apps, chatrooms, events, webpages, mail, wikis + + Files and large collections of posts may run into memory limits; these must generally be + requested separately. + + + +### channel/stream + +Fetch channel conversation items + + + +### network/stream + +Fetch network conversation items + + + + + +### files + +List file storage (attach DB) + +GET /api/z/1.0/files + + +Options: + + \- filehash + return only entries matching hash (exactly) + + \- filename + return only entries matching filename (substring) + + \- filetype + return only entries matching filetype/mimetype (substring) + + \- start + start at record (default 0) + + \- records + number of records to return or 0 for unlimited + + + +Example: + +``` +curl -u mychannel:mypassword https://xyz.macgirvin.com/api/z/1.0/files -d filetype=multipart/mixed +``` + + +Returns: + +``` + { + + "success": true, + "results": [ + { + "id": "1", + "aid": "1", + "uid": "2", + "hash": "44ee8b2a1a7f36dea07b93b7747a2383a1bc0fdd08339e8928bfcbe45f65d939", + "filename": "Profile Photos", + "filetype": "multipart/mixed", + "filesize": "0", + "revision": "0", + "folder": "", + "os_storage": "1", + "is_dir": "1", + "is_photo": "0", + "flags": "0", + "created": "2016-01-02 21:51:17", + "edited": "2016-01-02 21:51:17", + "allow_cid": "", + "allow_gid": "", + "deny_cid": "", + "deny_gid": "" + }, + { + "id": "12", + "aid": "1", + "uid": "2", + "hash": "71883f1fc64af33889229cbc79c5a056deeec5fc277d765f182f19073e1b2998", + "filename": "Cover Photos", + "filetype": "multipart/mixed", + "filesize": "0", + "revision": "0", + "folder": "", + "os_storage": "1", + "is_dir": "1", + "is_photo": "0", + "flags": "0", + "created": "2016-01-15 00:24:33", + "edited": "2016-01-15 00:24:33", + "allow_cid": "", + "allow_gid": "", + "deny_cid": "", + "deny_gid": "" + }, + { + "id": "16", + "aid": "1", + "uid": "2", + "hash": "f48f7ec3278499d1dd86b72c3207beaaf4717b07df5cc9b373f14d7aad2e1bcd", + "filename": "2016-01", + "filetype": "multipart/mixed", + "filesize": "0", + "revision": "0", + "folder": "", + "os_storage": "1", + "is_dir": "1", + "is_photo": "0", + "flags": "0", + "created": "2016-01-22 03:24:55", + "edited": "2016-01-22 03:26:57", + "allow_cid": "", + "allow_gid": "", + "deny_cid": "", + "deny_gid": "" + } + ] + } +``` + +### filemeta + +Export file metadata for any uploaded file + + + +### filedata + +Provides the ability to download a file from cloud storage in chunks + +GET /api/z/1.0/filedata + + +Required: + + \- file_id + attach.hash of desired file ('begins with' match) + + +Optional: + + \- start + starting byte of returned data in file (counting from 0) + + \- length + length (prior to base64 encoding) of chunk to download + + +Returns: + + attach (DB) structure with base64 encoded 'content' comprised of the desired chunk + + + +Example: + + `https://xyz.macgirvin.com/api/z/1.0/filedata?f=&file_id=9f5217770fd&start=0&length=48` + +Returns: + +``` + { + + "attach": { + "id": "107", + "aid": "1", + "uid": "2", + "hash": "9f5217770fd55d563bd77f84d534d8e119a187514bbd391714626cd9c0e60207", + "creator": "pgcJx1IQjuPkx8aI9qheJlBMZzJz-oTPjHy3h5pWlOVOriBO_cSiUhhqwhuZ74TYJ8_ECO3pPiRMWC0q8YPCQg", + "filename": "pcxtopbm.c", + "filetype": "application/octet-stream", + "filesize": "3934", + "revision": "0", + "folder": "", + "flags": "0", + "is_dir": "0", + "is_photo": "0", + "os_storage": "1", + "os_path": "", + "display_path": "", + "content": "LyogcGN4dG9wYm0uYyAtIGNvbnZlcnQgUEMgcGFpbnRicnVzaCAoLnBjeCkgZmls", + "created": "2016-07-24 23:13:01", + "edited": "2016-07-24 23:13:01", + "allow_cid": "", + "allow_gid": "", + "deny_cid": "", + "deny_gid": "", + "start": 0, + "length": 48 + } + + } +``` + +### file/export + +### file + +### albums + +Description: list photo albums + +GET /api/z/1.0/albums + + +Output: + + text - textual name + + total - number of photos in this album + + url - web URL + + urlencode - textual name, urlencoded + + bin2hex - textual name using bin2hex (which is used in the web URL link) + + +Example: + + + +``` + { + + "success": true, + "albums": [ + { + "text": "/", + "total": "2", + "url": "https://xyz.macgirvin.com/photos/hubzilla/album/", + "urlencode": "", + "bin2hex": "" + }, + { + "text": "2016-01", + "total": "6", + "url": "https://xyz.macgirvin.com/photos/hubzilla/album/323031362d3031", + "urlencode": "2016-01", + "bin2hex": "323031362d3031" + }, + { + "text": "2016-02", + "total": "7", + "url": "https://xyz.macgirvin.com/photos/hubzilla/album/323031362d3032", + "urlencode": "2016-02", + "bin2hex": "323031362d3032" + }, + { + "text": "Cover Photos", + "total": "5", + "url": "https://xyz.macgirvin.com/photos/hubzilla/album/436f7665722050686f746f73", + "urlencode": "Cover+Photos", + "bin2hex": "436f7665722050686f746f73" + }, + { + "text": "Profile Photos", + "total": "26", + "url": "https://xyz.macgirvin.com/photos/hubzilla/album/50726f66696c652050686f746f73", + "urlencode": "Profile+Photos", + "bin2hex": "50726f66696c652050686f746f73" + } + ] + + } +``` + +### photos + +list photo metadata + + + +### photo + +### group + +``` +GET /api/z/1.0/group +``` + +Description: list privacy groups + +Returns: DB tables of all privacy groups. + +To use with API group_members, provide either 'group_id' from the id element returned in this call, or 'group_name' from the gname returned in this call. + + + +``` + [ + + { + "id": "1", + "hash": "966c946394f3e2627bbb8a55026b5725e582407098415c02f85232de3f3fde76Friends", + "uid": "2", + "visible": "0", + "deleted": "0", + "gname": "Friends" + }, + { + "id": "2", + "hash": "852ebc17f8c3ed4866f2162e384ded0f9b9d1048f93822c0c84196745f6eec66Family", + "uid": "2", + "visible": "1", + "deleted": "0", + "gname": "Family" + }, + { + "id": "3", + "hash": "cc3cb5a7f9818effd7c7c80a58b09a189b62efa698a74319117babe33ee30ab9Co-workers", + "uid": "2", + "visible": "0", + "deleted": "0", + "gname": "Co-workers" + } + ] +``` + +### group_members + +``` +GET /api/z/1.0/group_members +``` + +Required: + +group_id or group_name + + +Returns: + +group_member+abook+xchan (DB join) for each member of the privacy group + + + +``` + [ + + { + "id": "1", + "uid": "2", + "gid": "1", + "xchan": "pgcJx1IQjuPkx8aI9qheJlBMZzJz-oTPjHy3h5pWlOVOriBO_cSiUhhqwhuZ74TYJ8_ECO3pPiRMWC0q8YPCQg", + "abook_id": "2", + "abook_account": "1", + "abook_channel": "2", + "abook_xchan": "pgcJx1IQjuPkx8aI9qheJlBMZzJz-oTPjHy3h5pWlOVOriBO_cSiUhhqwhuZ74TYJ8_ECO3pPiRMWC0q8YPCQg", + "abook_my_perms": "218555", + "abook_their_perms": "0", + "abook_closeness": "0", + "abook_created": "2016-01-02 21:16:26", + "abook_updated": "2016-01-02 21:16:26", + "abook_connected": "0000-00-00 00:00:00", + "abook_dob": "0000-00-00 00:00:00", + "abook_flags": "0", + "abook_blocked": "0", + "abook_ignored": "0", + "abook_hidden": "0", + "abook_archived": "0", + "abook_pending": "0", + "abook_unconnected": "0", + "abook_self": "1", + "abook_feed": "0", + "abook_profile": "", + "abook_incl": "", + "abook_excl": "", + "abook_instance": "", + "xchan_hash": "pgcJx1IQjuPkx8aI9qheJlBMZzJz-oTPjHy3h5pWlOVOriBO_cSiUhhqwhuZ74TYJ8_ECO3pPiRMWC0q8YPCQg", + "xchan_guid": "lql-1VnxtiO4-WF0h72wLX1Fu8szzHDOXgQaTbELwXW77k8AKFfh-hYr70vqMrc3SSvWN-Flrc5HFhRTWB7ICw", + "xchan_guid_sig": "PafvEL0VpKfxATxlCqDjfOeSIMdmpr3iU7X-Sysa1h5LzDpjSXsjO37tYZL-accb1M5itLlfnW5epkTa5I4flsW21zSY1A2jCuBQUTLLGV7rNyyBy7lgqJUFvAMRx0TfXzP9lcaPqlM9T1tA6jfWOsOmkdzwofGeXBnsjGfjsO2xdGYe6vwjOU0DSavukvzDMnOayB9DekpvDnaNBTxeGLM45Skzr7ZEMcNF7TeXMbnvpfLaALYEKeQs9bGH-UgAG8fBWgzVAzeBfx_XSR1rdixjyiZGP0kq0h35SlmMPcEjliodOBFwMXqpXFB7Ibp4F6o6te2p2ErViJccQVG8VNKB6SbKNXY6bhP5zVcVsJ-vR-p4xXoYJJvzTN7yTDsGAXHOLF4ZrXbo5yi5gFAlIrTLAF2EdWQwxSGyLRWKxG8PrDkzEzX6cJJ0VRcLh5z6OI5QqQNdeghPZbshMFMJSc_ApCPi9_hI4ZfctCIOi3T6bdgTNKryLm5fhy_eqjwLAZTGP-aUBgLZpb1mf2UojBn6Ey9cCyq-0T2RWyk-FcIcbV4qJ-p_8oODqw13Qs5FYkjLr1bGBq82SuolkYrXEwQClxnrfKa4KYc2_eHAXPL01iS9zVnI1ySOCNJshB97Odpooc4wk7Nb2Fo-Q6THU9zuu0uK_-JbK7IIl6go2qA", + "xchan_pubkey": "-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA18JB76lyP4zzL/y7BCej\neJnfZIWZNtM3MZvI1zEVMWmmwOS+u/yH8oPwyaDk4Y/tnj8GzMPj1lCGVRcd8EJa\nNrCMd50HODA5EsJtxpsOzRcILYjOcTtIAG1K4LtKqELi9ICAaFp0fNfa+Jf0eCek\nvPusx2/ORhy+o23hFoSMhL86o2gmaiRnmnA3Vz4ZMG92ieJEDMXt9IA1EkIqS4y5\nBPZfVPLD1pv8iivj+dtN1XjwplgjUbtxmU0/Ej808nHppscRIqx/XJ0XZU90oNGw\n/wYoK2EzJlPbRsAkwNqoFrAYlr5HPpn4BJ2ebFYQgWBUraD7HwS5atsQEaxGfO21\nlUP0+lDg9t3CXvudDj0UG1jiEKbVIGA+4aG0GN2DSC5AyRq/GRxqyay5W2vQbAZH\nyvxPGrZFO24I65g3pjhpjEsLqZ4ilTLQoLMs0drCIcRm5RxMUo4s/LMg16lT4cEk\n1qRtk2X0Sb1AMQQ2uRXiVtWz77QHMONEYkf6OW4SHbwcv5umvlv69NYEGfCcbgq0\nAV7U4/BWztUz/SWj4r194CG43I9I8dmaEx9CFA/XMePIAXQUuABfe1QMOR6IxLpq\nTHG1peZgHQKeGz4aSGrhQkZNNoOVNaZoIfcvopxcHDTZLigseEIaPPha4WFYoKPi\nUPbZ5o8gTLc750uzrnb2jwcCAwEAAQ==\n-----END PUBLIC KEY-----\n", + "xchan_photo_mimetype": "image/png", + "xchan_photo_l": "https://xyz.macgirvin.com/photo/profile/l/2", + "xchan_photo_m": "https://xyz.macgirvin.com/photo/profile/m/2", + "xchan_photo_s": "https://xyz.macgirvin.com/photo/profile/s/2", + "xchan_addr": "teller@xyz.macgirvin.com", + "xchan_url": "https://xyz.macgirvin.com/channel/teller", + "xchan_connurl": "https://xyz.macgirvin.com/poco/teller", + "xchan_follow": "https://xyz.macgirvin.com/follow?f=&url=%s", + "xchan_connpage": "", + "xchan_name": "Teller", + "xchan_network": "zot", + "xchan_instance_url": "", + "xchan_flags": "0", + "xchan_photo_date": "2016-10-19 01:26:50", + "xchan_name_date": "2016-01-02 21:16:26", + "xchan_hidden": "0", + "xchan_orphan": "0", + "xchan_censored": "0", + "xchan_selfcensored": "0", + "xchan_system": "0", + "xchan_pubforum": "0", + "xchan_deleted": "0" + }, + { + "id": "12", + "uid": "2", + "gid": "1", + "xchan": "xuSMUYxw1djBB97qXsbrBN1nzJH_gFwQL6pS4zIy8fuusOfBxNlMiVb4h_q5tOEvpE7tYf1EsryjNciMuPIj5w", + "abook_id": "24", + "abook_account": "1", + "abook_channel": "2", + "abook_xchan": "xuSMUYxw1djBB97qXsbrBN1nzJH_gFwQL6pS4zIy8fuusOfBxNlMiVb4h_q5tOEvpE7tYf1EsryjNciMuPIj5w", + "abook_my_perms": "218555", + "abook_their_perms": "218555", + "abook_closeness": "80", + "abook_created": "2016-01-27 00:48:43", + "abook_updated": "2016-12-04 17:16:58", + "abook_connected": "2016-12-04 17:16:58", + "abook_dob": "0001-01-01 00:00:00", + "abook_flags": "0", + "abook_blocked": "0", + "abook_ignored": "0", + "abook_hidden": "0", + "abook_archived": "0", + "abook_pending": "0", + "abook_unconnected": "0", + "abook_self": "0", + "abook_feed": "0", + "abook_profile": "debb5236efb1626cfbad33ccb49892801e5f844aa04bf81f580cfa7d13204819", + "abook_incl": "", + "abook_excl": "", + "abook_instance": "", + "xchan_hash": "xuSMUYxw1djBB97qXsbrBN1nzJH_gFwQL6pS4zIy8fuusOfBxNlMiVb4h_q5tOEvpE7tYf1EsryjNciMuPIj5w", + "xchan_guid": "d5EMLlt1tHHZ0dANoA7B5Wq9UgXoWcFS9-gXOkL_AAejcPApoQRyxfHTuu8DoTbUaO-bYmX5HPuWuK9PHyqNmA", + "xchan_guid_sig": "CVWEMRPtzI1YcHfnnWHTuv3H964OAmSElgUfxMoX6RdQdxNpqb_POirpVuyP8s3W17mVCfO5V9IAjkg5iKcqCk6YcvOD_egmMy-AnM9TC1kKndQHw55CunD82Q8K_xBNSXkSROizcNkKh9DVLjJPFjW1AqtI4njkZ3EMgrWqnbFRM1qPToUoCY9zM3tEMHoAD9YX1zP90wl40LzfN-dtcNWpSBbiz9owou62uzLbN7mrCwKOMlXLjwwGswRnxIsEnb3O-FXOs8hs0mArKe9snq1-BKeD16LyzxgwlpVLElzIJZGEZGtMdIJgeRzKuBvPjsOIpQ1yAkuOpFJ3nGCM-IPOIIjAmyVl5zD3xPVcxxpZlJRn5fG1Y-gnqTgsrEQCA7M6XPWQdrdHU4akZfyUyFJDhv3uM-jon9VzrYTBw68R0WA-1Z8WafEHA4qh5OWAj85lUarwhr7iTiEckH51ypPCPs6VbT6Pw7yMaxfjFOcipashQagx0tfOlDhE5dQANOXKASFtH1J9-CZY2MQdLPQ6u54d5whuHKMGaJ0V68pnmZ2rOn7g344Ah2WCJrm17jj60QsRMorqRFj7GMdPIA1XB8Wrk88MuYOe3Dhyuu6ZWKI7YTWJS690ZVkKUqAiNHqj0W86DtaiPUc_mmGR0fHl4Gksnko3WmCFv9q2X2E", + "xchan_pubkey": "-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAoj2xCJktBA8Ww7Hp+ZNL\nrNuQpo8UB/bfvRkIy+yua3xpF1TuXcnAH61kyRz8vXgOu/l2CyxQbIoaGslCV5Sy\n8JKeNXe+IilUdSSEjMIwCPfSPsYnMHsSnHWmPmclvJwEtQUKOZmW5mMuVBvXy7D2\njomFwc69AYphdyys6eQ7Dcn6+FRBiQbyMprZ5lxyVW+O4DuXVNa3ej2ebx0gCJZ4\ntTIlBoKwEey91dY+FyKVFjdwfNczpmL7LgmZXqcVx+MG3mYgibwdVMiXVj5X06cs\nV9hJ5Xi+Aklsv/UWJtjw9FVt7y9TLptnhh4Ra6T/MDmnBBIAkOR7P/X8cRv078MT\nl0IMsP0RJcDEtTLtwHFVtDs6p52KDFqclKWbqmxmxqV3OTPVYtArRGIzgnJi/5ur\nHRr5G6Cif7QY3UowsIOf78Qvy28LwSbdymgBAWwPPKIviXWxGO+9kMWdmPSUQrWy\nK0+7YA9P9fBUFfn9Hc+p8SJQmQ6OAqLwrDGiPSOlGaNrbEqwqLGgIpXwK+lEFcFJ\n3SPOjJRWdR2whlMxvpwX+39+H7dWN3vSa3Al4/Sq7qW8yW2rYwf+eGyp4Z0lRR+8\nJxFMCwZkSw5g14YdlikAPojv5V1c6KuA5ieg8G1hwyONV7A4JHPyEdPt0W0TZi6C\nCOVkPaC3xGrguETZpJfVpwUCAwEAAQ==\n-----END PUBLIC KEY-----\n", + "xchan_photo_mimetype": "image/png", + "xchan_photo_l": "https://xyz.macgirvin.com/photo/9da63aa910ea14e1501ee1a749d181a6-4", + "xchan_photo_m": "https://xyz.macgirvin.com/photo/9da63aa910ea14e1501ee1a749d181a6-5", + "xchan_photo_s": "https://xyz.macgirvin.com/photo/9da63aa910ea14e1501ee1a749d181a6-6", + "xchan_addr": "cloner@xyz.macgirvin.com", + "xchan_url": "http://abc.macgirvin.com/channel/cloner", + "xchan_connurl": "http://abc.macgirvin.com/poco/cloner", + "xchan_follow": "https://xyz.macgirvin.com/follow?f=&url=%s", + "xchan_connpage": "", + "xchan_name": "Karen", + "xchan_network": "zot", + "xchan_instance_url": "", + "xchan_flags": "0", + "xchan_photo_date": "2016-03-31 19:59:20", + "xchan_name_date": "2016-01-26 23:23:42", + "xchan_hidden": "0", + "xchan_orphan": "0", + "xchan_censored": "0", + "xchan_selfcensored": "0", + "xchan_system": "0", + "xchan_pubforum": "0", + "xchan_deleted": "0" + } + + ] +``` + +### xchan + +An xchan is a global location independent channel and is the primary record for a network +identity. It may refer to channels on other websites, networks, or services. + +``` +GET /api/z/1.0/xchan +``` + +Required: one of [ address, hash, guid ] as GET parameters + +Returns a portable xchan structure + +Example: `https://xyz.macgirvin.com/api/z/1.0/xchan?f=&address=mike@macgirvin.com` + +Returns: + +``` + { + "hash": "jr54M_y2l5NgHX5wBvP0KqWcAHuW23p1ld-6Vn63_pGTZklrI36LF8vUHMSKJMD8xzzkz7s2xxCx4-BOLNPaVA", + "guid": "sebQ-IC4rmFn9d9iu17m4BXO-kHuNutWo2ySjeV2SIW1LzksUkss12xVo3m3fykYxN5HMcc7gUZVYv26asx-Pg", + "guid_sig": "Llenlbl4zHo6-g4sa63MlQmTP5dRCrsPmXHHFmoCHG63BLq5CUZJRLS1vRrrr_MNxr7zob_Ykt_m5xPKe5H0_i4pDj-UdP8dPZqH2fqhhx00kuYL4YUMJ8gRr5eO17vsZQ3XxTcyKewtgeW0j7ytwMp6-hFVUx_Cq08MrXas429ZrjzaEwgTfxGnbgeQYQ0R5EXpHpEmoERnZx77VaEahftmdjAUx9R4YKAp13pGYadJOX5xnLfqofHQD8DyRHWeMJ4G1OfWPSOlXfRayrV_jhnFlZjMU7vOdQwHoCMoR5TFsRsHuzd-qepbvo3pzvQZRWnTNu6oPucgbf94p13QbalYRpBXKOxdTXJrGdESNhGvhtaZnpT9c1QVqC46jdfP0LOX2xrVdbvvG2JMWFv7XJUVjLSk_yjzY6or2VD4V6ztYcjpCi9d_WoNHruoxro_br1YO3KatySxJs-LQ7SOkQI60FpysfbphNyvYMkotwUFI59G08IGKTMu3-GPnV1wp7NOQD1yzJbGGEGSEEysmEP0SO9vnN45kp3MiqbffBGc1r4_YM4e7DPmqOGM94qksOcLOJk1HNESw2dQYWxWQTBXPfOJT6jW9_crGLMEOsZ3Jcss0XS9KzBUA2p_9osvvhUKuKXbNztqH0oZIWlg37FEVsDs_hUwUJpv2Ar09k4", + "pubkey": "-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA7QCwvuEIwCHjhjbpz3Oc\ntyei/Pz9nDksNbsc44Cm8jxYGMXsTPFXDZYCcCB5rcAhPPdZSlzaPkv4vPVcMIrw\n5cdX0tvbwa3rNTng6uFE7qkt15D3YCTkwF0Y9FVZiZ2Ko+G23QeBt9wqb9dlDN1d\nuPmu9BLYXIT/JXoBwf0vjIPFM9WBi5W/EHGaiuqw7lt0qI7zDGw77yO5yehKE4cu\n7dt3SakrXphL70LGiZh2XGoLg9Gmpz98t+gvPAUEotAJxIUqnoiTA8jlxoiQjeRK\nHlJkwMOGmRNPS33awPos0kcSxAywuBbh2X3aSqUMjcbE4cGJ++/13zoa6RUZRObC\nZnaLYJxqYBh13/N8SfH7d005hecDxWnoYXeYuuMeT3a2hV0J84ztkJX5OoxIwk7S\nWmvBq4+m66usn6LNL+p5IAcs93KbvOxxrjtQrzohBXc6+elfLVSQ1Rr9g5xbgpub\npSc+hvzbB6p0tleDRzwAy9X16NI4DYiTj4nkmVjigNo9v2VPnAle5zSam86eiYLO\nt2u9YRqysMLPKevNdj3CIvst+BaGGQONlQalRdIcq8Lin+BhuX+1TBgqyav4XD9K\nd+JHMb1aBk/rFLI9/f2S3BJ1XqpbjXz7AbYlaCwKiJ836+HS8PmLKxwVOnpLMbfH\nPYM8k83Lip4bEKIyAuf02qkCAwEAAQ==\n-----END PUBLIC KEY-----\n", + "photo_mimetype": "image/jpeg", + "photo_l": "https://xyz.macgirvin.com/photo/350b74555c04429148f2e12775f6c403-4", + "photo_m": "https://xyz.macgirvin.com/photo/350b74555c04429148f2e12775f6c403-5", + "photo_s": "https://xyz.macgirvin.com/photo/350b74555c04429148f2e12775f6c403-6", + "address": "mike@macgirvin.com", + "url": "https://macgirvin.com/channel/mike", + "connurl": "https://macgirvin.com/poco/mike", + "follow": "https://macgirvin.com/follow?f=&url=%s", + "connpage": "https://macgirvin.com/connect/mike", + "name": "Mike Macgirvin", + "network": "zot", + "instance_url": "", + "flags": "0", + "photo_date": "2012-12-06 05:06:11", + "name_date": "2012-12-06 04:59:13", + "hidden": "1", + "orphan": "0", + "censored": "0", + "selfcensored": "0", + "system": "0", + "pubforum": "0", + "deleted": "0" + } +``` + +### item/update + +Create or update an item (post, activity, webpage, etc.) + +Usage: `POST /api/z/1.0/item/update` + +Description: item/update posts an item (typically a conversation item or post, but can be any item) using form input. + + +Required: + +\- body + + text/bbcode contents by default. + + +Optional: + +\- $_FILES['media'] + + uploaded media file to include with post + +\- title + + title of post/item + +\- contact_allow + + array of xchan.xchan_hash allowed to view this item + +\- group_allow + + array of group.hash allowed to view this item + +\- contact_deny + + array of xchan.xchan_hash not allowed to view this item + +\- group_deny + + array of group.hash not allowed to view this item + +\- coord + + geographic coordinates + +\- location + + freefrom location + +\- expire + + datetime this post will expire or be removed + +\- mimetype + + mimetype if not text/bbcode + +\- parent + + item.id of parent to this post (makes it a comment) + +\- parent_mid + + alternate form of parent using message_id + +\- remote_xchan + + xchan.xchan_hash of this message author if not the channel owner + +\- consensus + + boolean set to true if this is a consensus or voting item (default false) + +\- nocomment + + boolean set to true if comments are to be disabled (default false) + +\- origin + + do not use this without reading the code + +\- namespace + + persistent identity for a remote network or service + +\- remote_id + + message_id of this resource on a remote network or service + +\- message_id + + message_id of this item (leave unset to generate one) + +\- created + + datetime of message creation + +\- post_id + + existing item.id if this is an edit operation + +\- app + + application or network name to display with item + +\- category + + comma separated categories for this item + +\- webpage + + item.page_type if not 0 + +\- pagetitle + + for webpage and design elements, the 'page name' + +\- layout_mid + + item.mid of layout for this design element + +\- plink + + permalink for this item if different than the default + +\- verb + + activitystream verb for this item/activity + +\- obj_type + + activitystream object type for this item/activity + + + +Example: + + + +``` +curl -u mychannel:mypassword https://xyz.macgirvin.com/api/z/1.0/item/update -d body="hello world" +``` + + +Returns: + + + +``` + { + + "success": true, + "item_id": "2245", + "item": { + "id": "2245", + "mid": "14135cdecf6b8e3891224e4391748722114da6668eebbcb56fe4667b60b88249@xyz.macgirvin.com", + "aid": "1", + "uid": "2", + "parent": "2245", + "parent_mid": "14135cdecf6b8e3891224e4391748722114da6668eebbcb56fe4667b60b88249@xyz.macgirvin.com", + "thr_parent": "14135cdecf6b8e3891224e4391748722114da6668eebbcb56fe4667b60b88249@xyz.macgirvin.com", + "created": "2016-12-03 20:00:12", + "edited": "2016-12-03 20:00:12", + "expires": "0001-01-01 00:00:00", + "commented": "2016-12-03 20:00:12", + "received": "2016-12-03 20:00:12", + "changed": "2016-12-03 20:00:12", + "comments_closed": "0001-01-01 00:00:00", + "owner_xchan": "pgcJx1IQjuPkx8aI9qheJlBMZzJz-oTPjHy3h5pWlOVOriBO_cSiUhhqwhuZ74TYJ8_ECO3pPiRMWC0q8YPCQg", + "author_xchan": "pgcJx1IQjuPkx8aI9qheJlBMZzJz-oTPjHy3h5pWlOVOriBO_cSiUhhqwhuZ74TYJ8_ECO3pPiRMWC0q8YPCQg", + "source_xchan": "", + "mimetype": "text/bbcode", + "title": "", + "body": "hello world", + "html": "", + "app": "", + "lang": "", + "revision": "0", + "verb": "http://activitystrea.ms/schema/1.0/post", + "obj_type": "http://activitystrea.ms/schema/1.0/note", + "obj": "", + "tgt_type": "", + "target": "", + "layout_mid": "", + "postopts": "", + "route": "", + "llink": "https://xyz.macgirvin.com/display/14135cdecf6b8e3891224e4391748722114da6668eebbcb56fe4667b60b88249@xyz.macgirvin.com", + "plink": "https://xyz.macgirvin.com/channel/mychannel/?f=&mid=14135cdecf6b8e3891224e4391748722114da6668eebbcb56fe4667b60b88249@xyz.macgirvin.com", + "resource_id": "", + "resource_type": "", + "attach": "", + "sig": "sa4TOQNfHtV13HDZ1tuQGWNBpZp-nWhT2GMrZEmelXxa_IvEepD2SEsCTWOBqM8OKPJLfNy8_i-ORXjrOIIgAa_aT8cw5vka7Q0C8L9eEb_LegwQ_BtH0CXO5uT30e_8uowkwzh6kmlVg1ntD8QqrGgD5jTET_fMQOIw4gQUBh40GDG9RB4QnPp_MKsgemGrADnRk2vHO7-bR32yQ0JI-8G-eyeqGaaJmIwkHoi0vXsfjZtU7ijSLuKEBWboNjKEDU89-vQ1c5Kh1r0pmjiDk-a5JzZTYShpuhVA-vQgEcADA7wkf4lJZCYNwu3FRwHTvhSMdF0nmyv3aPFglQDky38-SAXZyQSvd7qlABHGCVVDmYrYaiq7Dh4rRENbAUf-UJFHPCVB7NRg34R8HIqmOKq1Su99bIWaoI2zuAQEVma9wLqMoFsluFhxX58KeVtlCZlro7tZ6z619-dthS_fwt0cL_2dZ3QwjG1P36Q4Y4KrCTpntn9ot5osh-HjVQ01h1I9yNCj6XPgYJ8Im3KT_G4hmMDFM7H9RUrYLl2o9XYyiS2nRrf4aJHa0UweBlAY4zcQG34bw2AMGCY53mwsSArf4Hs3rKu5GrGphuwYX0lHa7XEKMglwBWPWHI49q7-oNWr7aWwn1FnfaMfl4cQppCMtKESMNRKm_nb9Dsh5e0", + "diaspora_meta": "", + "location": "", + "coord": "", + "public_policy": "", + "comment_policy": "contacts", + "allow_cid": "", + "allow_gid": "", + "deny_cid": "", + "deny_gid": "", + "item_restrict": "0", + "item_flags": "0", + "item_private": "0", + "item_origin": "1", + "item_unseen": "0", + "item_starred": "0", + "item_uplink": "0", + "item_consensus": "0", + "item_wall": "1", + "item_thread_top": "1", + "item_notshown": "0", + "item_nsfw": "0", + "item_relay": "0", + "item_mentionsme": "0", + "item_nocomment": "0", + "item_obscured": "0", + "item_verified": "1", + "item_retained": "0", + "item_rss": "0", + "item_deleted": "0", + "item_type": "0", + "item_hidden": "0", + "item_unpublished": "0", + "item_delayed": "0", + "item_pending_remove": "0", + "item_blocked": "0" + } + + } +``` + +### item/full + +Get all data associated with an item + + + +### abook + +Connections + + + +### abconfig + +Connection metadata (such as permissions) + + + +### perm_allowed + +Check a permission for a given xchan
\ No newline at end of file diff --git a/doc/de/developer/Plugins.md b/doc/de/developer/Plugins.md new file mode 100644 index 000000000..e6d76b2d5 --- /dev/null +++ b/doc/de/developer/Plugins.md @@ -0,0 +1,251 @@ +### Erstellen von Plugins/Addons für Hubzilla + +Sie möchten also, dass Hubzilla etwas tut, was es noch nicht tut. Da gibt es viele Möglichkeiten. Aber lass uns lernen, wie man ein Plugin oder Addon schreibt. +In deinem Hubzilla-Ordner/Verzeichnis wirst du wahrscheinlich ein Unterverzeichnis namens 'addon' finden. Wenn Sie noch keins haben, erstellen Sie es einfach. + +``` +mkdir addon +``` + +Überlegen Sie sich dann einen Namen für Ihr Addon. Wahrscheinlich haben Sie zumindest eine vage Vorstellung davon, was es tun soll. Für unser Beispiel werde ich ein Plugin mit dem Namen „randplace“ erstellen, das einen zufälligen Speicherort für jeden Ihrer Beiträge angibt. Der Name Ihres Plugins wird verwendet, um die Funktionen zu finden, auf die wir zugreifen müssen, und ist Teil des Funktionsnamens, also verwenden Sie zur Sicherheit nur einfache Textzeichen. +Sobald Sie einen Namen gewählt haben, erstellen Sie ein Verzeichnis unterhalb von 'addon', um Ihre Arbeitsdatei(en) zu speichern. + +``` +mkdir addon/randplace +``` + +Erstellen Sie nun Ihre Plugin-Datei. Sie muss den gleichen Namen haben und ist ein PHP-Skript. Erstellen Sie also mit Ihrem Lieblingseditor die Datei + +``` +addon/randplace/randplace.php +``` + +Die allererste Zeile dieser Datei muss lauten + +``` +<?php +``` + +Dann werden wir einen Kommentarblock erstellen, der das Plugin beschreibt. Hierfür gibt es ein spezielles Format. Wir verwenden /* ... */ Kommentar-Stil und einige markierte Zeilen, die aus + + + + /** + * + * Name: Random Place (here you can use better descriptions than you could in the filename) + * Description: Sample Hubzilla plugin, Sets a random place when posting. + * Version: 1.0 + * Author: Mike Macgirvin <mike@zothub.com> + * + */ + +Diese Tags sind für den Website-Administrator sichtbar, wenn er Plugins über die Verwaltungskonsole installiert oder verwaltet. Es kann mehr als einen Autor geben. Fügen Sie einfach eine weitere Zeile hinzu, die mit „Autor:“ beginnt. +Ein typisches Plugin hat mindestens die folgenden Funktionen: + +- pluginname_load() +- pluginname_unload() + +In unserem Fall werden wir sie randplace_load() und randplace_unload() nennen, da dies der Name unseres Plugins ist. Diese Funktionen werden immer dann aufgerufen, wenn wir das Plugin entweder initialisieren oder von der aktuellen Webseite entfernen wollen. Auch wenn Ihr Plugin Dinge wie die Änderung des Datenbankschemas erfordert, bevor es zum ersten Mal ausgeführt werden kann, würden Sie diese Anweisungen wahrscheinlich in den Funktionen namens + +- pluginname_install() +- pluginname_uninstall() + +Als nächstes werden wir über **Hooks** sprechen. Hooks sind Stellen im Hubzilla-Code, an denen wir Plugins erlauben, etwas zu tun. Es gibt eine [Menge davon](help/hooks), und jedes hat einen Namen. Normalerweise verwenden wir die Funktion pluginname_load(), um eine „Handler-Funktion“ für alle Hooks zu registrieren, an denen Sie interessiert sind. Wenn dann einer dieser Hooks ausgelöst wird, wird Ihr Code aufgerufen. +Wir registrieren Hook-Handler mit der Funktion 'register_hook()'. Sie benötigt 3 Argumente. Das erste ist der Hook, den wir abfangen wollen, das zweite ist der Dateiname der Datei, in der sich unsere Handler-Funktion befindet (relativ zur Basis Ihrer Hubzilla-Installation), und das dritte ist der Funktionsname Ihrer Handler-Funktion. Lassen Sie uns also jetzt unsere randplace_load()-Funktion erstellen. + + + function randplace_load() { + register_hook('post_local', 'addon/randplace/randplace.php', 'randplace_post_hook'); + + register_hook('feature_settings', 'addon/randplace/randplace.php', 'randplace_settings'); + register_hook('feature_settings_post', 'addon/randplace/randplace.php', 'randplace_settings_post'); + + } + +Wir werden also drei Ereignisse abfangen: „post_local“, das ausgelöst wird, wenn ein Beitrag im lokalen System erstellt wird, „feature_settings“, um einige Einstellungen für unser Plugin festzulegen, und „feature_settings_post“, um diese Einstellungen zu speichern. + +Als nächstes erstellen wir eine unload-Funktion. Das ist ganz einfach, denn sie hebt nur die Registrierung unserer Hooks auf. Sie nimmt genau die gleichen Argumente entgegen. + + function randplace_unload() { + unregister_hook('post_local', 'addon/randplace/randplace.php', 'randplace_post_hook'); + + unregister_hook('feature_settings', 'addon/randplace/randplace.php', 'randplace_settings'); + unregister_hook('feature_settings_post', 'addon/randplace/randplace.php', 'randplace_settings_post'); + + } + +Hooks werden mit zwei Argumenten aufgerufen. Das erste ist immer $a, das unsere globale App-Struktur ist und eine riesige Menge an Informationen über den Zustand der Web-Anfrage enthält, die wir gerade verarbeiten, sowie darüber, wer der Betrachter ist, und was unser Login-Status ist, und der aktuelle Inhalt der Webseite, die wir wahrscheinlich aufbauen. + +Das zweite Argument ist spezifisch für den Hook, den Sie aufrufen. Es enthält Informationen, die für diese bestimmte Stelle im Programm relevant sind, und ermöglicht es Ihnen oft, sie anzusehen und sogar zu ändern. Um sie zu ändern, müssen Sie dem Variablennamen ein '&' hinzufügen, damit sie als Referenz an Ihre Funktion übergeben wird. Andernfalls wird eine Kopie erstellt, und alle Änderungen, die Sie vornehmen, gehen verloren, wenn der Hook-Prozess zurückkehrt. Normalerweise (aber nicht immer) ist das zweite Argument ein benanntes Array von Datenstrukturen. Bitte lesen Sie die „Hook-Referenz“ (zu diesem Zeitpunkt noch nicht geschrieben) für Details zu jedem spezifischen Hook. Gelegentlich müssen Sie sich den Programmcode ansehen, um genau zu sehen, wie ein bestimmter Hook aufgerufen wird und wie die Ergebnisse verarbeitet werden. + +Fügen wir nun etwas Code hinzu, um unseren post_local-Hook-Handler zu implementieren. + + function randplace_post_hook($a, &$item) { + + /** + * + * An item was posted on the local system. + * We are going to look for specific items: + * - A status post by a profile owner + * - The profile owner must have allowed our plugin + * + */ + + logger('randplace invoked'); + + if(! local_channel()) /* non-zero if this is a logged in user of this system */ + return; + + if(local_channel() != $item['uid']) /* Does this person own the post? */ + return; + + if(($item['parent']) || (! is_item_normal($item))) { + /* If the item has a parent, or isn't "normal", this is a comment or something else, not a status post. */ + return; + } + + /* Retrieve our personal config setting */ + + $active = get_pconfig(local_channel(), 'randplace', 'enable'); + + if(! $active) + return; + /** + * + * OK, we're allowed to do our stuff. + * Here's what we are going to do: + * load the list of timezone names, and use that to generate a list of world cities. + * Then we'll pick one of those at random and put it in the "location" field for the post. + * + */ + + $cities = array(); + $zones = timezone_identifiers_list(); + foreach($zones as $zone) { + if((strpos($zone,'/')) && (! stristr($zone,'US/')) && (! stristr($zone,'Etc/'))) + $cities[] = str_replace('_', ' ',substr($zone,strpos($zone,'/') + 1)); + } + + if(! count($cities)) + return; + $city = array_rand($cities,1); + $item['location'] = $cities[$city]; + + return; + } + + +Fügen wir nun unsere Funktionen zum Erstellen und Speichern von Einstellungswerten hinzu. + + /** + * + * Callback from the settings post function. + * $post contains the global $_POST array. + * We will make sure we've got a valid user account + * and that only our own submit button was clicked + * and if so set our configuration setting for this person. + * + */ + + function randplace_settings_post($a,$post) { + if(! local_channel()) + return; + if($_POST['randplace-submit']) + set_pconfig(local_channel(),'randplace','enable',intval($_POST['randplace'])); + } + + /** + * + * Called from the Feature Setting form. + * The second argument is a string in this case, the HTML content region of the page. + * Add our own settings info to the string. + * + * For uniformity of settings pages, we use the following convention + * <div class="settings-block"> + * <h3>title</h3> + * .... settings html - many elements will be floated... + * <div class="clear"></div> <!-- generic class which clears all floats --> + * <input type="submit" name="pluginnname-submit" class="settings-submit" ..... /> + * </div> + */ + + function randplace_settings(&$a,&$s) { + + if(! local_channel()) + return; + + /* Add our stylesheet to the page so we can make our settings look nice */ + + head_add_css('/addon/randplace/randplace.css'); + + /* Get the current state of our config variable */ + + $enabled = get_pconfig(local_channel(),'randplace','enable'); + + $checked = (($enabled) ? ' checked="checked" ' : ''); + + /* Add some HTML to the existing form */ + + $s .= '<div class="settings-block">'; + $s .= '<h3>' . t('Randplace Settings') . '</h3>'; + $s .= '<div id="randplace-enable-wrapper">'; + $s .= '<label id="randplace-enable-label" for="randplace-checkbox">' . t('Enable Randplace Plugin') . '</label>'; + $s .= '<input id="randplace-checkbox" type="checkbox" name="randplace" value="1" ' . $checked . '/>'; + $s .= '</div><div class="clear"></div>'; + + /* provide a submit button */ + + $s .= '<div class="settings-submit-wrapper" ><input type="submit" name="randplace-submit" class="settings-submit" value="' . t('Submit') . '" /></div></div>'; + + } + +#### *Erweiterte Plugins* + +Manchmal möchten Ihre Plugins eine Reihe neuer Funktionen bereitstellen, die gar nicht oder nur umständlich über Hooks bereitgestellt werden können. In diesem Fall kann Ihr Plugin auch als „Modul“ fungieren. Ein Modul ist in unserem Fall ein strukturierter Webpage-Handler, der auf eine bestimmte URL reagiert. Dann wird alles, was auf diese URL zugreift, vollständig von Ihrem Plugin behandelt. +Der Schlüssel dazu ist die Erstellung einer einfachen Funktion namens pluginname_module(), die nichts tut. + +``` +function randplace_module() { return; } +``` + +Sobald diese Funktion existiert, wird die URL `https://yoursite/randplace` auf Ihr Plugin als Modul zugreifen. Dann können Sie Funktionen definieren, die an verschiedenen Stellen aufgerufen werden, um eine Webseite aufzubauen, genau wie die Module im mod/-Verzeichnis. Die typischen Funktionen und die Reihenfolge, in der sie aufgerufen werden, sind + + modulename_init($a) // (e.g. randplace_init($a);) called first - if you wish to emit json or xml, + // you should do it here, followed by killme() which will avoid the default action of building a webpage + modulename_aside($a) // Often used to create sidebar content + modulename_post($a) // Called whenever the page is accessed via the "post" method + modulename_content($a) // called to generate the central page content. This function should return a string + // consisting of the central page content. + +Ihre Modulfunktionen haben Zugriff auf den URL-Pfad, als ob sie eigenständige Programme im Unix-Betriebssystem wären. Wenn Sie zum Beispiel die Seite + +``` +https://yoursite/randplace/something/somewhere/whatever +``` + +besuchen, erstellen wir eine argc/argv-Liste zur Verwendung durch Ihre Modulfunktionen + + $x = argc(); $x will be 4, the number of path arguments after the sitename + + for($x = 0; $x < argc(); $x ++) + echo $x . ' ' . argv($x); + + + 0 randplace + 1 something + 2 somewhere + 3 whatever + +#### *Portierung von Friendica-Plugins* + +Hubzilla verwendet eine ähnliche Plugin-Architektur wie das Friendica-Projekt. Die Authentifizierungs-, Identitäts- und Rechtesysteme sind jedoch völlig unterschiedlich. Viele Friendica-Plugins können relativ einfach portiert werden, indem man ein paar Funktionen umbenennt - und dann sicherstellt, dass das Berechtigungsmodell befolgt wird. Die Funktionen, die umbenannt werden müssen, sind: + +- Friendica's pluginname_install() wird zu pluginname_load() +- Friendicas pluginname_uninstall() wird zu pluginname_unload() + +Hubzilla hat _install und _uninstall Funktionen, aber diese werden unterschiedlich benutzt. + +- Friendicas „plugin_settings“-Haken wird „feature_settings“ genannt +- Friendicas „plugin_settings_post“-Haken wird „feature_settings_post“ genannt + +Wenn Sie diese ändern, wird Ihr Plugin oft funktionieren, aber bitte überprüfen Sie Ihren gesamten Berechtigungs- und Identitätscode, da die Konzepte dahinter in Hubzilla völlig anders sind. Viele strukturierte Datennamen (insbesondere DB-Schema-Spalten) sind auch ganz anders.
\ No newline at end of file diff --git a/doc/de/developer/attribution.md b/doc/de/developer/attribution.md new file mode 100644 index 000000000..555abfa92 --- /dev/null +++ b/doc/de/developer/attribution.md @@ -0,0 +1,3 @@ +#### Namensnennung + +Dieser Verhaltenskodex ist eine Anpassung des [Contributor Covenant](http://contributor-covenant.org/), Version 1.4, verfügbar unter [http://contributor-covenant.org/version/1/4.](http://contributor-covenant.org/version/1/4/)
\ No newline at end of file diff --git a/doc/de/developer/code_of_conduct.md b/doc/de/developer/code_of_conduct.md new file mode 100644 index 000000000..c197f0965 --- /dev/null +++ b/doc/de/developer/code_of_conduct.md @@ -0,0 +1,8 @@ +### Verhaltenskodex für Mitwirkende + +#include doc/de/developer/our_pledge.md; +#include doc/de/developer/our_standards.md; +#include doc/de/developer/our_responsibilities.md; +#include doc/de/developer/scope.md; +#include doc/de/developer/enforcement.md; +#include doc/de/developer/attribution.md; diff --git a/doc/de/developer/coding_style.md b/doc/de/developer/coding_style.md new file mode 100644 index 000000000..fab3d7157 --- /dev/null +++ b/doc/de/developer/coding_style.md @@ -0,0 +1,12 @@ +### Codierungsstil + +Im Interesse der Konsistenz verwenden wir den folgenden Code-Stil. Wir akzeptieren auch Patches, die andere Stile verwenden, aber bitte versuchen Sie, wenn möglich, einen einheitlichen Code-Stil zu verwenden. Wir werden nicht über die Vorzüge dieses Stils streiten oder diskutieren, und es ist irrelevant, was Projekt „xyz“ verwendet. Dies ist nicht Projekt „xyz“. Dies ist eine Grundlinie, um zu versuchen, den Code jetzt und in Zukunft lesbar zu halten. + +- Alle Kommentare sollten in Englisch sein. +- Wir verwenden Doxygen, um Dokumentation zu erstellen. Dies wurde nicht konsequent angewandt, aber es wird dringend empfohlen, es zu lernen und zu benutzen. +- Die Einrückung erfolgt hauptsächlich durch Tabulatoren mit einer Tabulatorbreite von 4. +- String-Verkettungen und Operatoren sollten durch Leerzeichen getrennt werden. z.B. `$foo = $bar . 'abc';` anstelle von `$foo=$bar.‘abc';` +- Im Allgemeinen verwenden wir einfache Anführungszeichen für String-Variablen und doppelte Anführungszeichen für SQL-Anweisungen. „Hier Dokumente“ sollten vermieden werden. Manchmal ist die Verwendung von Strings in doppelten Anführungszeichen mit Variablenersetzung das effizienteste Mittel zur Erstellung des Strings. In den meisten Fällen sollten Sie einfache Anführungszeichen verwenden. +- Verwenden Sie Leerzeichen großzügig, um die Lesbarkeit zu verbessern. Bei der Erstellung von Arrays mit vielen Elementen wird oft ein Schlüssel/Wert-Paar pro Zeile gesetzt, das entsprechend von der übergeordneten Zeile eingerückt wird. Das Aneinanderreihen der Zuweisungsoperatoren erfordert etwas mehr Arbeit, erhöht aber auch die Lesbarkeit. +- Im Allgemeinen werden öffnende geschweifte Klammern in dieselbe Zeile gesetzt wie das, was die Klammer öffnet. Sie sind das letzte Zeichen in der Zeile. Schließende Klammern stehen in einer eigenen Zeile. +- Einige Funktionen nehmen Argumente im argc/argv-Stil entgegen, wie main() in C oder Funktions-Args in Bash oder Perl. Urls werden innerhalb eines Moduls aufgeteilt. z.B. bei `http://example.com/module/arg1/arg2` ist $this->argc 3 (integer) und $this->argv enthält: [0] => 'module', [1] => 'arg1', [2] => 'arg2'. Es wird immer nur ein Argument angegeben. Wenn eine nackte Domain-URL angegeben wird, wird $this->argv[0] auf „home“ gesetzt.
\ No newline at end of file diff --git a/doc/de/developer/dev-function-overview.md b/doc/de/developer/dev-function-overview.md new file mode 100644 index 000000000..36b27b449 --- /dev/null +++ b/doc/de/developer/dev-function-overview.md @@ -0,0 +1,43 @@ +### Hubzilla-Entwicklung - einige nützliche Grundfunktionen + +- `get_account_id()` + +Gibt die numerische account_id zurück, wenn authentifiziert oder 0. Es ist möglich, authentifiziert und nicht mit einem Channel verbunden zu sein. + +- `local_channel()` + +Gibt die numerische channel_id zurück, wenn sie authentifiziert und mit einem Channel verbunden ist, oder 0. Wird im Code manchmal als $uid bezeichnet. + +- `remote_channel()` + +Gibt einen authentifizierten String-Hash des Red Global Identifier zurück, wenn er über Remote-Auth authentifiziert wurde, oder einen leeren String. + +- `App::get_observer()` + +gibt eine xchan-Struktur zurück, die den aktuellen Betrachter repräsentiert, wenn er authentifiziert ist (lokal oder remote). + +- `get_config($family,$key), get_pconfig($uid,$family,$key)` + +Gibt die Konfigurationseinstellung für $family und $key zurück oder false, wenn sie nicht gesetzt ist. +Veraltet: Verwenden Sie stattdessen `Zotlabs\Lib\Config::Get`. + +- `set_config($family,$key,$value), set_pconfig($uid,$family,$key,$value)` + +Setzt den Wert der Konfigurationseinstellung für $family und $key auf $value. Gibt $value zurück. Die config-Versionen arbeiten mit systemweiten Einstellungen. Die pconfig-Versionen erhalten/setzen die Werte für eine bestimmte Integer uid (channel_id). +Veraltet: Verwenden Sie stattdessen `Zotlabs\Lib\Config::Set`. + +- `dbesc()` + +Escape-Zeichenfolgen, die in DB-Abfragen verwendet werden. Diese Funktion gibt die escapte Zeichenkette zurück. Ganzzahlige DB-Parameter sollten alle mit intval() in Ganzzahlen umgewandelt werden + +- `q($sql,$var1...)` + +Führt eine DB-Abfrage mit der SQL-Anweisung $sql durch. Die printf-artigen Argumente %s und %d werden durch variable Argumente ersetzt, die jeweils entsprechend dbesc() oder intval() sein sollten. SELECT-Abfragen geben ein Array von Ergebnissen oder false zurück, wenn ein SQL- oder DB-Fehler vorliegt. Andere Abfragen geben true zurück, wenn der Befehl erfolgreich war, oder false, wenn er nicht erfolgreich war. + +- `t($Zeichenfolge)` + +Gibt die übersetzte Variante von $string für die aktuelle Sprache zurück oder $string (Standardsprache 'en'), wenn die Sprache nicht bekannt ist oder eine übersetzte Version des Strings nicht existiert. + +- `x($var), $x($array,$key)` + +Kurzer Test, um zu sehen, ob die Variable $var gesetzt und nicht leer ist. Die Tests variieren je nach Typ. Gibt false zurück, wenn $var oder $key nicht gesetzt ist. Wenn die Variable gesetzt ist, wird 1 zurückgegeben, wenn sie einen Wert ungleich Null hat, andernfalls wird 0 zurückgegeben. -- z.B. x('') oder x(0) gibt 0 zurück;
\ No newline at end of file diff --git a/doc/de/developer/dev_beginner.md b/doc/de/developer/dev_beginner.md new file mode 100644 index 000000000..91f19a109 --- /dev/null +++ b/doc/de/developer/dev_beginner.md @@ -0,0 +1,460 @@ +### Sie möchten Code beisteuern? + +**...und wissen nicht, wie Sie anfangen sollen...** + +- Hubzilla debuggen (php auf dem Webserver), +- Code für das Projekt beisteuern, +- optional - das alles von einer virtuellen Maschine aus zu tun + +Diese Anleitung wurde für Debian (Wheezy) als virtuelle Maschine auf Lubuntu (Ubuntu 14.0) als Host getestet. + +#### Installation einer virtuellen Maschine (KVM) + +[Hier](https://wiki.debian.org/KVM) die Installationsanleitung für Linux Debian. Die Zusammenfassung: + +1. KVM installieren + +``` +# apt-get install qemu-kvm libvirt-bin +``` + +1. füge dich der Gruppe libvirt hinzu + +``` +# adduser <deinBenutzer> libvirt +``` + +1. Installieren Sie die Benutzeroberfläche zur Verwaltung der virtuellen Maschinen + +``` +# apt-get install virt-manager +``` + +1. Laden Sie ein Betriebssystem herunter, das in der virtuellen Maschine laufen soll ([mini.iso](http://ftp.nl.debian.org/debian/dists/wheezy/main/installer-amd64/current/images/netboot/mini.iso)) +2. Starten Sie den Virt-Manager + +- Erstellen Sie eine neue virtuelle Maschine (klicken Sie auf das Symbol) +- Wählen Sie Ihr Iso-Image (soeben heruntergeladen) als Installationsquelle +- optional: konfigurieren Sie die neue vm: ram, cpu's,... +- Virtuelle Maschine starten > Ergebnis: Linux Debian startet in einem neuen Fenster. + +1. (optional) Vermeiden Sie Netzwerkfehler nach dem Neustart des Host-Betriebssystems + +``` +# virsh net-start default +# virsh net-autostart standard +``` + +#### Apache-Webserver installieren + +Öffnen Sie ein Terminal und machen Sie sich zum root + +``` +su -l +``` + +Erstellen Sie die Standardgruppe für den Apache-Webserver + +``` +groupadd www-data +``` + +könnte bereits existieren + +``` +usermod -a -G www-data www-data +``` + +Prüfen Sie, ob das System wirklich auf dem neuesten Stand ist + +``` +apt-get update +apt-get upgrade +``` + +Optionaler Neustart der Dienste nach der Installation + +``` +reboot +``` + +Wenn Sie neu gestartet haben, machen Sie sich zum root + +``` +su -l +``` + +Installieren Sie Apache: + +``` +apt-get install apache2 apache2-doc apache2-utils +``` + +Öffnen Sie den Webbrowser auf dem PC und überprüfen Sie [localhost](localhost) Sollte Ihnen eine Seite wie „It works“ anzeigen +(Quelle http://www.manfred-steger.de/tuts/20-der-eigene-webserver-mit-dem-raspberry-pi#) + +#### PHP, MySQL und phpMyAdmin installieren + +##### PHP, MySQL + +``` +su -l +apt-get install libapache2-mod-php8.2 php8.2 php-pear php8.2-xcache php8.2-curl php8.2-mcrypt php8.2-xdebug +apt-get install php8.2-mysql +apt-get install mysql-server mysql-client +``` + +das mysql-Passwort eingeben und notieren +Optional, da es bereits während der phpmyadmin-Einrichtung aktiviert wurde + +``` +phpenmod mcrypt +``` + +##### phpMyAdmin + +phpMyAdmin installieren + +``` +apt-get install phpmyadmin +``` + +Konfigurieren von phpmyadmin + +- Wählen Sie apache2 aus (Tipp: benutzen Sie die Tabulator-Taste zum Auswählen) +- Datenbank für phpmyadmin mit dbconfig-common? konfigurieren: Wählen Sie Ja + +(Quelle [http://www.manfred-steger.de/tuts/20-der-eigene-webserver-mit-dem-raspberry-pi#](http://www.manfred-steger.de/tuts/20-der-eigene-webserver-mit-dem-raspberry-pi#)) + +##### Aktivieren Sie Rewrite + +Bei der Standardinstallation von Apache2 ist mod_rewrite bereits installiert. Um zu prüfen, ob dies der Fall ist, überprüfen Sie die Existenz von `/etc/apache2/mods-available/rewrite.load` + +``` +nano /etc/apache2/mods-available/rewrite.load +``` + +(Sie sollten den Inhalt finden: `LoadModule rewrite_module` `/usr/lib/apache2/modules/mod_rewrite.so`) Um mod_rewrite zu aktivieren und zu laden, führen Sie die restlichen Schritte aus. Erstellen Sie einen symbolischen Link in `/etc/apache2/mods-enabled` + +``` +cd /var/www +a2enmod rewrite +``` + +Öffnen Sie dann die folgende Datei und ersetzen Sie jedes Vorkommen von „`AllowOverride None`“ durch „`AllowOverride all`“. + +``` +nano /etc/apache2/apache2.conf +``` + +oder + +``` +gedit /etc/apache2/sites-enabled/000-default +``` + +Starten Sie schließlich Apache2 neu. + +``` +service apache2 restart +``` + +##### Testen Sie die Installation + +``` +cd /var/www +``` + +Erstellen Sie eine php-Datei, um die php-Installation zu testen + +``` +nano phpinfo.php +``` + +In die Datei einfügen: + +``` +<?php + phpinfo(); +?> +``` + +(STRG+0, ENTER, STRG+X speichern) +Webbrowser auf dem PC öffnen und `http://localhost/phpinfo.php` ausprobieren (Seite zeigt Infos zu php) +phpMyAdmin mit der MySQL-Datenbank verbinden + +``` +nano /etc/apache2/apache2.conf +``` + +- CTRL+V... bis zum Ende der Datei +- Am Ende der Datei einfügen: (CTRL+0, ENTER, CTRL+X speichern) + +``` +Einfügen von /etc/phpmyadmin/apache.conf +``` + +Apache neu starten + +``` +/etc/init.d/apache2 neu starten +apt-get update +apt-get upgrade +reboot +``` + +phpMyAdmin +Webbrowser auf dem PC öffnen und `http://localhost/phpmyadmin` ausprobieren +(Quelle [http://www.manfred-steger.de/tuts/20-der-eigene-webserver-mit-dem-raspberry-pi#](http://www.manfred-steger.de/tuts/20-der-eigene-webserver-mit-dem-raspberry-pi#)) + +##### Erstelle eine leere Datenbank... die später von Hubzilla verwendet wird + +öffne den Webbrowser auf dem PC und probiere `http://localhost/phpmyadmin` +Erstelle eine leere Datenbank, zum Beispiel mit dem Namen „red“. Erstelle einen Datenbankbenutzer, z.B. „red“. Erteile dem Benutzer „red“ alle Rechte für die Datenbank „red“. +Notieren Sie sich die Zugangsdaten (Hostname, Benutzername, Passwort, Datenbankname). + +##### Forken Sie das Projekt auf github + +Bitte folgen Sie den Anweisungen in der offiziellen [Dokumentation](http://git-scm.com/book/en/v2/GitHub-Contributing-to-a-Project) von git. Es ist eine gute Idee, das gesamte Handbuch zu lesen! Git unterscheidet sich in vielerlei Hinsicht von anderen Versionskontrollsystemen. +Jetzt sollten Sie + +- ein Konto bei github.com erstellen +- fork `https://framagit.org/hubzilla/core` +- fork `https://framagit.org/hubzilla/addons` + +Wenn Sie GIT nicht von der Kommandozeile aus benutzen wollen - es gibt ein nützliches Eclipse-Plugin namens „Eclipse Mylyn to GitHub connector“. + +#### Installieren Sie Hubzilla und seine Addons + +##### Git auf Ihrem Computer / vm + +Sie sollten ein Konto auf GitHub erstellt und die Projekte geforkt haben, bevor Sie fortfahren. +Löschen Sie das Verzeichnis www + +``` +rm -R www/ +``` + +Installieren Sie git (und optional git-gui, eine Client-Gui) + +``` +apt-get install git git-gui +``` + +##### Hubzilla und Addons herunterladen + +Laden Sie das Hauptprojekt hubzilla und hubzilla-addons herunter + +``` +git clone https://github.com/yourname/hubzilla www +cd www/ +git clone https://github.com/yourname/hubzilla-addons addon +``` + +Erstelle diesen zusätzlichen Ordner + +``` +mkdir -p „store/[data]/smarty3“ +``` + +Erstellen Sie .htconfig.php und machen Sie sie für den Webserver schreibbar + +``` +touch .htconfig.php +chmod ou+w .htconfig.php +``` + +Machen Sie den Benutzer www-data (Webserver) zum Eigentümer aller Projektdateien + +``` +cd .. +chown -R www-data:www-data www/ +``` + +Fügen Sie sich selbst („surfer“ in diesem Beispiel) zur Gruppe www-data hinzu. Warum das? Wenn Sie später Dateien in eclipse oder einem anderen Editor bearbeiten wollen. +Dann machen Sie alle Dateien für die Gruppe www-data, in der Sie jetzt Mitglied sind, schreibbar. + +``` +cd www/ +usermod -G www-data surfer +chmod -R g+w www/ +``` + +Starten Sie den Computer (oder vm) neu +Wenn Sie immer noch nicht in der Lage sind, die Projektdateien zu ändern, können Sie die Mitglieder der Gruppe www-data überprüfen mit + +``` +cat /etc/group +``` + +##### Melden Sie sich als Admin an + +Öffnen Sie `http://localhost` und starten Sie die Matrix +Bevor Sie einen ersten Benutzer registrieren, schalten Sie die Registrierungsmails aus. Öffnen Sie `/var/www/.htconfig.php` und stellen Sie sicher, dass in dieser Zeile „0“ gesetzt ist + +``` +App::$config['system']['verify_email'] = 0; +``` + +Sie sollten in der Lage sein, die Datei als „Sie selbst“ zu ändern (anstelle von root oder www-data). + +##### Cron und der Poller + +Wichtig! Lassen Sie den Poller laufen, um die jüngsten „öffentlichen“ Beiträge Ihrer Freunde zu erfassen. Richten Sie einen Cron-Job oder eine geplante Aufgabe ein, um den Poller alle 5-10 Minuten laufen zu lassen, um die jüngsten „öffentlichen“ Beiträge Ihrer Freunde zu erfassen + +``` +crontab -e +``` + +Fügen Sie hinzu. + +``` +*/10 * * * * cd /var/www/; /usr/bin/php include/poller.php +``` + +Wenn du den Pfad zu PHP nicht kennst, gib ein + +``` +which php +``` + +#### Debuggen Sie den Server über eclipse + +##### Überprüfen Sie die Konfiguration von xdebug + +Sie sollten xdebug bereits in den vorhergehenden Schritten installiert haben + +``` +apt-get install php-xdebug +``` + +Xdebug konfigurieren +Öffnen Sie Ihr Terminal und geben Sie als root (su -l) + +``` +gedit /etc/php/mods-available/xdebug.ini +``` + +Wenn die Datei leer ist, versuchen Sie es an dieser Stelle + +``` +gedit /etc/php/conf.d/xdebug.ini +``` + +Dieser Befehl sollte den Texteditor gedit mit der Xdebug-Konfigurationsdatei öffnen Am Ende des Dateiinhalts fügen Sie den folgenden Text ein + +``` +xdebug.remote_enable=on +xdebug.remote_handler=dbgp +xdebug.remote_host=localhost +xdebug.remote_port=9000 +``` + +Speichern Sie die Änderungen und schließen Sie den Editor. Geben Sie in Ihr Terminal ein, um den Webserver neu zu starten. + +``` +service apache2 neustart +``` + +##### Eclipse installieren und Debugging starten + +Installieren Sie Eclipse. Starten Sie Eclipse mit dem Standard-Arbeitsbereich (oder wie Sie möchten) +Installieren Sie das PHP-Plugin Menü > Hilfe > Neue Software installieren... Installieren Sie „PHP-Entwicklungswerkzeuge ...“ +Optional - Installieren Sie das GitHub Connector Plugin Menü > Hilfe > Neue Software installieren... Installieren Sie „Eclipse Mylyn zu GitHub Connector“. +Konfigurieren Sie das PHP-Plugin Menü > Fenster > Präferenzen... + +> Allgemein > Webbrowser > Ändern Sie auf „Externen Webbrowser verwenden“ PHP > Debug > Debug-Einstellungen > PHP Debugger > Ändern Sie auf „XDebug“. + +Erstellen Sie ein neues PHP-Projekt Menü > Datei > Neues Projekt > Wählen Sie PHP > „PHP-Projekt“. + +> Wählen Sie „Projekt an bestehendem Ort erstellen“ und „/var/www“. + +Debugging starten Öffnen Sie index.php und „Debuggen als...“. Wählen Sie als Start-URL: „`http://localhost/`“ +Erwartet: + +- Der Webbrowser startet +- Der Debugger wird bei der ersten php-Zeile anhalten + +#### Stellen Sie Ihre Änderungen über github zur Verfügung + +##### Vorbereitungen + +Es gibt eine entsprechende Seite in dieser Dokumentation: [zrl=[baseurl]/help/git_for_non_developers]Git for Non-Developers[/zrl]. Wie bereits erwähnt, ist es empfehlenswert, die offizielle Dokumentation [GitHub-Contributing-to-a-Project](http://git-scm.com/book/en/v2/GitHub-Contributing-to-a-Project) von Git zu lesen. +Eclipse hat ein nützliches Plugin für GIT: „Eclipse Mylyn to GitHub connector“. +Stellen Sie sicher, dass Sie Ihre Daten eingestellt haben + +``` +git config --global user.name „Ihr Name“ +git config --global user.email „your@mail.com“ +``` + +##### Dein erster Beitrag + +Erstelle einen beschreibenden Themenzweig + +``` +git checkout -b dev_beginning +``` + +Stellen Sie sicher, dass Ihr lokales Repository mit dem Hauptprojekt auf dem neuesten Stand ist. Fügen Sie das ursprüngliche Repository als Remote-Repository mit dem Namen „upstream“ hinzu, falls noch nicht geschehen + +``` +git remote add upstream https://framagit.org/hubzilla/core/ +``` + +Holen Sie sich die neueste Arbeit von dieser Remote + +``` +git fetch upstream +git merge upstream/master +``` + +Tipp: Sie können die Zweige auflisten + +``` +git branch -v +``` + +Nehmen Sie Ihre Änderungen vor. In diesem Beispiel ist es eine neue Doc-Datei. +Prüfen Sie Ihre Änderungen + +``` +git status +``` + +Fügen Sie die neue Datei hinzu (stage) + +``` +git add doc/dev_beginner.bb +``` + +Übertragen Sie die Änderungen in Ihren lokalen Zweig. Dadurch wird ein Editor geöffnet, um eine Nachricht zu übermitteln. + +``` +git commit -a +``` + +Pushen Sie online zurück in den gleichen Themenzweig + +``` +git push +``` + +Nun können Sie zu Ihrem (Online-)Konto bei github gehen und den Pull Request erstellen. + +##### Folgende Beiträge + +Für den Fall, dass die Hauptentwickler wollen, dass du etwas änderst. Holen Sie sich die neueste Arbeit aus dem entfernten Upstream/Master, um sicher zu sein, dass Sie die neuesten Änderungen haben. + +``` +git fetch upstream +git merge upstream/master +``` + +Nehmen Sie Ihre Änderungen vor, testen Sie sie, committen Sie (in das lokale Repository), pushen Sie (in das Online-Repository) + +``` +git status +git commit -a -m „Änderung des Zweigs hinzugefügt“ +git push +```
\ No newline at end of file diff --git a/doc/de/developer/developers_guide.md b/doc/de/developer/developers_guide.md new file mode 100644 index 000000000..898cb17c7 --- /dev/null +++ b/doc/de/developer/developers_guide.md @@ -0,0 +1,27 @@ +## Entwicklerhandbuch + +Informationen für Hubzilla-Entwickler + +#include doc/de/developer/who_is_a_hubzilla_developer.md; +#include doc/de/developer/dev_beginner.md; +#include doc/de/developer/versions.md; +#include doc/de/developer/git_repository.md; +#include doc/de/developer/git_for_non_developers.md; +#include doc/de/developer/tools_workflows.md; +#include doc/de/developer/doco.md; +#include doc/de/developer/translations.md; +#include doc/de/developer/licensing.md; +#include doc/de/developer/coding_style.md; +#include doc/de/developer/file_system_layour.md; +#include doc/de/developer/dev-functions-overview.md; +#include doc/de/developer/Plugins.md; +#include doc/de/developer/testing.md; +#include doc/de/developer/federate.md; +#include doc/de/developer/code_of_conduct.md; +#include doc/de/developer/nomad_protocol.md; +#include doc/de/developer/technical_introductions.md; +#include doc/de/developer/magic_auth.md; +#include doc/de/developer/nomad_structures.md; +#include doc/de/developer/API.md; +#include doc/de/developer/hooks.md; +#include doc/de/developer/unorganized.md; diff --git a/doc/de/developer/doco.md b/doc/de/developer/doco.md new file mode 100644 index 000000000..c62db2703 --- /dev/null +++ b/doc/de/developer/doco.md @@ -0,0 +1,29 @@ +### Dokumentation erstellen + +Um eine Dokumentation zu erstellen, müssen Sie nur ein paar Wörter in eine geschickte Reihenfolge bringen und ihre Existenz einem Entwickler bekannt geben. Sie können dies buchstäblich überall tun, solange ein Entwickler es sehen kann. Sobald Sie es bekannt gemacht haben, wird es jemand für Sie einchecken. Sie sollten versuchen, proprietäre Formate oder Orte, die eine Authentifizierung mit anderen Methoden als Nomad erfordern, zu vermeiden, um einem Entwickler den Zugang zu erleichtern, aber selbst das ist keine strikte Voraussetzung. +Wenn Sie direkt beitragen wollen, ist das auch in Ordnung. Um direkt beizutragen, sollte die Dokumentation in einem der folgenden Formate vorliegen: + +- Markdown +- BBCode +- HTML +- Einfacher Text +- Andere Formate sind ebenfalls erlaubt, aber die Unterstützung für das Format muss zuerst zu mod/help.php hinzugefügt werden. + +Wenn Sie eine reine Textdatei bearbeiten, halten Sie bitte die Spaltenbreite auf 80. Dies liegt daran, dass reiner Text in Fällen verwendet wird, in denen wir keine funktionierende Installation haben - zum Beispiel die Installationsdokumentation - und es sollte einfach sein, diese mit einem CLI-Texteditor zu lesen. +Der Vorteil von Markdown ist, dass es für Menschen lesbar ist. + +Der Vorteil von BBCode ist, dass es identitätsbewusst ist. + +Wenn Sie also BBCode verwenden, versuchen Sie, das Beste daraus zu machen: + +- Verwenden Sie gegebenenfalls ZRL-Links, um sicherzustellen, dass ein Link zu einer anderen Website die Authentifizierung beibehält und die identitätsbasierte Dokumentation funktioniert +- Verwenden Sie baseurl- oder observer.baseurl-Tags, wo es angebracht ist, anstelle von example.com für authentifizierte Betrachter. +- Unterstützen Sie nicht-authentifizierte Benutzer mit observer=0-Tags. Aufgrund historischer Versäumnisse tun wir dies derzeit nicht. Dies muss überall hinzugefügt werden. + +**Übersetzungen** +Um die Dokumentation zu übersetzen oder in anderen Sprachen als Englisch bereitzustellen: + +- Erstellen Sie ein Verzeichnis in doc/ mit Ihrem zweistelligen Ländercode, falls es noch nicht existiert (z.B. doc/de/ für Deutsch oder doc/fr/ für Französisch) +- Erstellen Sie ein Dokument mit demselben Dateinamen wie die englische Version, aber mit dem Inhalt in Ihrer eigenen Sprache. So können wir auf die englische Version zurückgreifen, wenn die Übersetzung für eine bestimmte Seite nicht vorhanden ist. + +Um eine Dokumentation zu erstellen, für die es keine gleichwertige Datei auf Englisch gibt, können Sie eine neue Datei mit einem Namen Ihrer Wahl erstellen - allerdings müssen Sie auch eine lokalisierte Version der Indexseite (main.bb auf Englisch) bereitstellen, damit sie über das Menü zugänglich ist.
\ No newline at end of file diff --git a/doc/de/developer/enforcement.md b/doc/de/developer/enforcement.md new file mode 100644 index 000000000..0878fed3f --- /dev/null +++ b/doc/de/developer/enforcement.md @@ -0,0 +1,5 @@ +#### Durchsetzung + +Fälle von beleidigendem, belästigendem oder anderweitig inakzeptablem Verhalten können beim Projektteam unter project@hubzilla.org gemeldet werden. Alle Beschwerden werden geprüft und untersucht und führen zu einer Reaktion, die als notwendig und den Umständen angemessen erachtet wird. Das Projektteam ist zur Vertraulichkeit gegenüber der Person, die einen Vorfall meldet, verpflichtet. Weitere Einzelheiten zu spezifischen Durchsetzungsrichtlinien können separat veröffentlicht werden. + +Projektbetreuer, die den Verhaltenskodex nicht in gutem Glauben befolgen oder durchsetzen, können mit vorübergehenden oder dauerhaften Konsequenzen rechnen, die von anderen Mitgliedern der Projektleitung festgelegt werden.
\ No newline at end of file diff --git a/doc/de/developer/federate.md b/doc/de/developer/federate.md new file mode 100644 index 000000000..6b07dca15 --- /dev/null +++ b/doc/de/developer/federate.md @@ -0,0 +1,56 @@ +### Erstellen von Protokoll- Föderationsdiensten + +Es gibt drei Hauptkomponenten beim Schreiben von Föderations-Plugins. Diese sind: + +1. Kanalerkennung und Verbindungsaufbau +2. Senden von Beiträgen/Nachrichten +3. Empfangen von Beiträgen/Nachrichten + +Darüber hinaus müssen Verbundtreiber Folgendes bewältigen + +4. Unterschiede in den Datenschutzrichtlinien (und Inhaltsformaten) + +#### Herstellen von Verbindungen + +Die Kernanwendung bietet eine Kanalerkennung in der folgenden Reihenfolge: + +1. Nomad-Kanal-Erkennung +2. Webfinger (channel@hub) Lookup 2.1 RFC7033 Webfinger 2.2 XRD basierter Webfinger (alter Stil) +3. URL-Ermittlung (derzeit nur zur Ermittlung von RSS-Feeds verwendet) +4. Wenn alle diese Methoden fehlschlagen, ist das Netzwerk „unbekannt“ und wir sind nicht in der Lage, mit dem Kanal zu kommunizieren oder eine Verbindung zu ihm herzustellen. Ein „xchan“-Datensatz *kann* dennoch erstellt werden, **wenn** genügend Informationen bekannt sind, um einen eindeutigen Kanal zu identifizieren. + +Jeder der Lookup-Dienste kann an ein Plugin gebunden und erweitert werden. Wenn ein Kanal entdeckt wird, erstellen wir einen „xchan“-Datensatz, der eine plattformneutrale Darstellung der Kanalidentität ist. Wenn wir Informationen an den Kanal senden müssen, ist in der Regel auch ein „hubloc“-Datensatz (Standort des Hubs) erforderlich. Ein 'follow'-Plugin-Hook wird bereitgestellt, um Webfinger und diese Erkennungssequenz vollständig zu umgehen. + +Der letzte Schritt, um dies alles zusammenzufügen, ist die Erstellung eines „abook“-Datensatzes, der einen xchan in einer Beziehung zu einem lokalen Kanal mit einem bestimmten Satz von Berechtigungen anlegt. +Bei Netzwerken, die keine nomadische Identität unterstützen, muss Ihr Plugin auch „abook_instance“ setzen, eine durch Kommata getrennte Liste von lokalen URLs, mit denen der entfernte Kanal verbunden ist. Wenn Ihr Mitglied zum Beispiel mit meinem Channel-Klon unter [https://example.com](https://example.com/) verbunden war, würde die abook_instance für diese Verbindung['https://example.com](https://example.com/)' lauten. Wenn Sie sich auch mit meinem Klon unter [https://abc.example.com](https://abc.example.com/) verbunden haben, würde die Zeichenfolge in[„https://example.com,https://abc.example.com](https://example.com,https//abc.example.com)“ geändert werden. Dies ermöglicht es den lokalen Kanälen zu unterscheiden, mit welcher Instanz ein bestimmter entfernter Kanal verbunden ist und vermeidet Zustellungsfehler an diese Kanäle von anderen Kloninstanzen. + +Ein Föderations-Plugin für ein Webfinger-basiertes System muss nur die Webfinger- oder XRD-Ergebnisse untersuchen und einen Protokoll-Stack identifizieren, der für die Verbindung oder Kommunikation verwendet werden kann. Dann erstellt es einen xchan-Datensatz mit dem angegebenen 'xchan_network'-Typ und einen hubloc-Datensatz mit demselben 'hubloc_network' mit den angegebenen Informationen. Derzeit muss das Plugin den gesamten Datensatz erstellen, aber in Zukunft wird dies erweitert, so dass das Plugin nur einen Netzwerknamen identifizieren muss und der Datensatz mit allen anderen bekannten Werten gefüllt wird. + +Ein xchan-Datensatz ist immer erforderlich, um eine Verbindung herzustellen. Um eine Verbindung herzustellen, erstellen Sie einen abook-Eintrag mit den gewünschten Berechtigungen. +Zusätzliche Informationen, die Ihr Plugin für die Kommunikation benötigt, können in der xconfig-Tabelle und/oder abconfig-Tabelle gespeichert werden, wenn es in den xchan- oder hubloc-Tabellen keine passende Tabellenspalte gibt. + +Wenn eine Verbindung hergestellt wird, rufen wir normalerweise den Notifier (include/notifier.php) auf, um eine Nachricht an den entfernten Kanal zu senden. Dies ist an den Hook 'permissions_create' gebunden. Ihr Plugin muss dies verarbeiten, um eine „Follow“- oder „Make Friends“-Nachricht an das andere Netzwerk zu senden. + +Anmerkungen: Die erste Stufe des Nomad lookup wird durch einen webfinger lookup ersetzt. Diese Arbeit ist in Arbeit. Ursprünglich war ein separater Lookup erforderlich, da Webfinger keine Nicht-SSL-Verbindungen zulässt. Um diese Einschränkung zu umgehen, werden wir Nomad-Lookups, die nicht auf SSL basieren (in der Regel Test- und Entwicklungsseiten), über den „alten“ XRD-basierten Webfinger anbieten. + +Die Kernanwendung wird versuchen, xchan-Einträge für Projekte zu erstellen, die als Mitglieder des „offenen Webs“ identifiziert wurden; derzeit Hubzilla, Friendica, Diaspora, GNU-Social und Pump.io. Dies geschieht, damit Kommentare zwischen den Projektseiten weitergegeben werden können und das Netzwerk korrekt identifiziert werden kann. Ein Föderations-Plugin ist erforderlich, um eine vollständige Verbindung mit anderen Netzwerken herzustellen, aber Kommentare können auch an Seiten weitergeleitet werden, auf denen ein solches Plugin nicht installiert ist, damit es keine unerklärlichen Löcher in den Unterhaltungen gibt. + +Die Kernanwendung muss auch die Möglichkeit bieten, Diaspora-Kommentare zu signieren, da diese ein spezielles Signierformat erfordern und vom Verfasser des Kommentars signiert werden müssen, unabhängig davon, ob dieser Kanal mit Diaspora föderiert ist. Der Eigentümer der Konversation kann mit Diaspora föderieren, so dass die Kommentare signiert werden müssen. Dies ist bedauerlich, aber notwendig. + +#### Versenden von Nachrichten + +Jedes Mal, wenn eine Nachricht gesendet wird (mit der einzigen Ausnahme der Verzeichniskommunikation), rufen wir den Notifier (include/notifier.php) auf und übergeben ihm die Art der Nachricht und im Allgemeinen einen Identifikator, um die Informationen, die gesendet werden, aus der Datenbank abzurufen (Artikel oder Konversationsdinge, private E-Mails, Aktualisierungen von Berechtigungen usw.). +Der Notifier verfügt über mehrere Hooks, die von Plugins auf unterschiedliche Weise verwendet werden können, je nachdem, wie ihre Zustellschleife funktioniert. Für verschiedene Nachrichtentypen und komplexe Zustellungssituationen müssen Sie möglicherweise mehrere Hooks verwenden. Der „permissions_create“-Hook wurde bereits im ersten Abschnitt erwähnt. Es gibt auch eine „permissions_update“-Nachricht, wenn sich die Berechtigungen geändert haben und das andere Ende der Verbindung darüber informiert werden muss. Nur wenige Dienste werden dies bereitstellen oder handhaben (da ihre Berechtigungen statisch sind), aber es wird z. B. auch verwendet, um Nachrichten zur Aktualisierung von Profilen und Profilfotos zu senden, und Sie möchten dies vielleicht handhaben. +Der nächste Plugin-Hook ist 'notifier_process'. Ihm wird ein Array übergeben, das den kompletten Status des Notifizierers enthält und einmal pro Notifiziereraufruf aufgerufen wird. Er enthält die vollständige Liste der Empfänger (mit jeweils gesetztem xchan_network). + +Es gibt auch 'notifier_hub', dem wie 'notifier_process' der komplette Status des Antragstellers übergeben wird, aber der Unterschied besteht darin, dass er für jede einzelne Hub- oder eindeutige URL-Zustellung aufgerufen wird und auf den Typ hubloc_network abgestimmt werden kann. Die Hub-Zustellung ist wesentlich effizienter als die Empfängerzustellung, eignet sich aber möglicherweise nicht für alle Protokollstacks. + +Ihr Plugin muss den Nachrichtenstatus und die Empfänger verstehen und das gesendete Element in das gewünschte Format übersetzen. Sie müssen auch den Datenschutz prüfen und die Kommunikation an alle außer den vorgesehenen Empfängern blockieren - *wenn* es sich um eine private Kommunikation handelt. Das Plugin wird an dieser Stelle die Nachricht oft in die Warteschlange stellen und die Warteschlangen-ID an den Melder zurückgeben. + +Es gibt bereits Warteschlangen-Handler für einfache gepostete Daten. Wenn Sie einen Warteschlangeneintrag vom Typ 'post' erstellen, öffnen wir eine HTTP-POST-Anfrage und senden die bereitgestellten Daten und bestätigen den Erfolg oder Misserfolg. Sie können andere Kommunikationsformen erstellen, indem Sie einen anderen outq_driver-Typ angeben und die Verarbeitung von Warteschlangenanfragen selbst übernehmen. Wenn Sie verschiedene Fehlerzustände oder etwas anderes als Erfolg/Misserfolg bestätigen möchten, ist eine Zustellungsmeldung verfügbar. Für erweiterte Zustellungsberichte ist ebenfalls ein eigener Warteschlangentyp erforderlich. Der Basistyp „post“ behandelt nur Erfolg (erfolgreiche Kommunikation mit der Gegenstelle) und Misserfolg. + + + +#### Empfang von Nachrichten + +Für den Empfang von Nachrichten aus dem entfernten Netz ist wahrscheinlich ein „Empfangs“-Endpunkt oder -Modul erforderlich, der bzw. das für Ihr Netzwerk-Kommunikationsprotokoll vorgesehen ist. Dabei handelt es sich um eine URL-Route, die Ihr Plugin möglicherweise mit dem Hook 'module_loaded' registrieren muss. Ihr Modul übernimmt dann die Verantwortung für den Import aller Daten, die an diesem Endpunkt ankommen, und die Übersetzung in das für dieses Projekt erforderliche Format sowie die Speicherung der resultierenden Daten. Die von uns verwendete Grundstruktur ist ein erweiterbares Activitystream-Element, jedoch mit leicht abweichenden Feldnamen und mehreren optionalen Feldern. Sie kann leicht auf einen Activitystream abgebildet werden. Zusätzliche Daten können in der Tabelle „iconfig“ gespeichert werden. item_store() und item_store_update() werden im Allgemeinen verwendet, um die Daten zu speichern und entsprechende Benachrichtigungen zu senden. Ähnliche Möglichkeiten gibt es für private Post und Profilinformationen.
\ No newline at end of file diff --git a/doc/de/developer/file_system_layout.md b/doc/de/developer/file_system_layout.md new file mode 100644 index 000000000..ae62791ee --- /dev/null +++ b/doc/de/developer/file_system_layout.md @@ -0,0 +1,20 @@ +### Dateisystem-Layout + +| Directory | Description | +| ------------------------- | ------------------------------------------------------------ | +| addon | optionale Addons/Plugins | +| boot.php | Jeder Prozess verwendet dies, um die Anwendungsstruktur zu booten | +| doc | Hilfedateien | +| images | erforderliche Bilder | +| include | Das „Modell“ in MVC - (Back-End-Funktionen), enthält auch PHP „Executables“ für die Hintergrundverarbeitung | +| index.php | Der Front-End-Controller für den Webzugang | +| install | Installations- und Upgrade-Dateien und DB-Schema | +| library | Module von Drittanbietern (müssen lizenzkompatibel sein) | +| mod | Steuerungsmodule basierend auf URL-Pfadnamen (z.B. http://sitename/foo lädt mod/foo.php) | +| mod/site/ | Site-spezifische Mod-Overrides, die von Git ausgeschlossen sind | +| util | Übersetzungstools, Hauptdatenbank für englische Zeichenketten und andere verschiedene Dienstprogramme | +| version.inc | enthält die aktuelle Version (die automatisch über cron für das Haupt-Repository aktualisiert und über git verteilt wird) | +| view | Themen- und Sprachdateien | +| view/(css,js,img,php,tpl) | Standard-Theme-Dateien | +| view/(en,it,es ...) | Sprachstrings und Ressourcen | +| view/theme/ | Einzelne benannte Themen, die (css,js,img,php,tpl) Overrides enthalten |
\ No newline at end of file diff --git a/doc/de/developer/git_for_non_developers.md b/doc/de/developer/git_for_non_developers.md new file mode 100644 index 000000000..3f053b891 --- /dev/null +++ b/doc/de/developer/git_for_non_developers.md @@ -0,0 +1,72 @@ +### Git für Nicht-Entwickler + +Sie kümmern sich um eine Übersetzung oder tragen zu einem Thema bei, und jedes Mal, wenn Sie eine Pull-Anfrage stellen, müssen Sie mit einem der Entwickler sprechen, bevor Ihre Änderungen eingefügt werden können? +Wahrscheinlich haben Sie noch keine Kurzanleitung gefunden, die erklärt, wie Sie die Dinge auf Ihrer Seite synchronisieren können. Es ist wirklich sehr einfach. +Nachdem Sie einen Fork des Repo erstellt haben (klicken Sie einfach auf „fork“ bei github), müssen Sie Ihre eigene Kopie klonen. +Für das Beispiel nehmen wir an, dass du an einem Thema namens redexample arbeitest (das nicht existiert). + +``` +git clone https://github.com/username/red.git +``` + +Wechseln Sie anschließend in das Verzeichnis und fügen Sie einen Upstream hinzu. + +``` +cd rot +git remote add upstream https://framagit.org/hubzilla/core/ +``` + +Von nun an können Sie Änderungen im Upstream mit dem Befehl + +``` +git fetch upstream +``` + +Bevor Ihre Änderungen automatisch zusammengeführt werden können, müssen Sie oft Änderungen im Upstream zusammenführen. + +``` +git merge upstream/master +``` + +Sie sollten Upstream-Änderungen immer zusammenführen, bevor Sie sie veröffentlichen, und *Sie müssen* Upstream-Änderungen mit allen Pull-Requests zusammenführen, damit sie automatisch zusammengeführt werden können. +In 99% der Fälle wird das alles gut gehen. Das einzige Mal, dass es nicht klappt, ist, wenn jemand anderes die gleichen Dateien wie Sie bearbeitet hat - und oft nur, wenn sie die gleichen Zeilen der gleichen Dateien bearbeitet haben. In diesem Fall wäre es ein guter Zeitpunkt, um Hilfe zu bitten, bis Sie den Umgang mit Ihren eigenen Konflikten beim Zusammenführen in den Griff bekommen haben. +Dann müssen Sie nur noch Ihre Änderungen hinzufügen + +``` +git add view/theme/redexample/ +``` + +Dadurch werden alle Dateien in view/theme/redexample und alle Unterverzeichnisse hinzugefügt. Wenn Ihre speziellen Dateien über den gesamten Code verteilt sind, sollten Sie eine nach der anderen hinzufügen. Versuchen Sie nicht, git add -a auszuführen, da dies alles hinzufügt, einschließlich temporärer Dateien (wir fangen diese meist, aber nicht immer, mit .gitignore ab) und lokaler Änderungen, die Sie haben, aber nicht übertragen wollten. +Wenn Sie alle Dateien, die Sie geändert haben, hinzugefügt haben, müssen Sie sie übertragen. + +``` +git commit +``` + +Daraufhin öffnet sich ein Editor, in dem Sie die vorgenommenen Änderungen beschreiben können. Speichern Sie diese Datei und beenden Sie den Editor. +Zum Schluss pushen Sie die Änderungen auf Ihr eigenes Git + +``` +git push +``` + +Und das war's, Ihr Projektarchiv ist auf dem neuesten Stand! +Alles, was Sie jetzt noch tun müssen, ist die Pull-Anfrage zu erstellen. Es gibt zwei Möglichkeiten, dies zu tun. +Der einfache Weg, wenn Sie Github benutzen, ist, einfach auf den grünen Button oben in Ihrer eigenen Kopie des Repositorys zu klicken, eine Beschreibung der Änderungen einzugeben und auf „create pull request“ zu klicken. Das Haupt-Repository, Themes und Addons haben alle ihren Hauptzweig bei Github, so dass diese Methode meistens verwendet werden kann. +Die meisten Leute können hier aufhören. +Einige Projekte in der erweiterten RedMatrix-Ökosphäre haben keine Github-Präsenz, um für diese eine Pull-Anfrage zu stellen, ist es etwas anders - Sie müssen Ihre Pull-Anfrage manuell erstellen. Glücklicherweise ist das nicht viel schwieriger. + +``` +git request-pull -p <start> <url> +``` + +Start ist der Name eines Commits, mit dem begonnen werden soll. Dieser muss stromaufwärts existieren. Normalerweise wollen Sie nur master. +URL ist die URL *Ihres* Repos. +Man kann auch `<end>` angeben. Die Voreinstellung ist HEAD. +Beispiel: + +``` +git request-pull master https://example.com/project +``` + +Und senden Sie die Ausgabe einfach an den Projektbetreuer. diff --git a/doc/de/developer/git_repository.md b/doc/de/developer/git_repository.md new file mode 100644 index 000000000..653e2f401 --- /dev/null +++ b/doc/de/developer/git_repository.md @@ -0,0 +1,6 @@ +### Git-Repository-Zweige + +Es gibt zwei offizielle Zweige des Hubzilla-Git-Projektarchivs. + +- Die stabile Version wird im **Master-Zweig** gepflegt. Die letzte Übertragung in diesem Zweig gilt als geeignet für Produktions-Hubs. +- Die experimentelle Entwicklung findet im **dev-Zweig** statt, der in den **master-Zweig** überführt wird, sobald er als getestet und stabil genug erachtet wird.
\ No newline at end of file diff --git a/doc/de/developer/hooks.md b/doc/de/developer/hooks.md new file mode 100644 index 000000000..16b8672cf --- /dev/null +++ b/doc/de/developer/hooks.md @@ -0,0 +1,698 @@ +### Hooks + +Hooks ermöglichen es Plugins/Addons, sich an vielen Stellen in den Code „einzuhaken“ und das Verhalten zu ändern oder anderweitig unabhängige Aktionen durchzuführen, wenn eine Aktivität stattfindet oder auf bestimmte Datenstrukturen zugegriffen wird. Es gibt viele Hooks, die es Ihnen ermöglichen, sich an fast jeder Stelle in die Software einzuklinken und etwas anderes zu tun als das, was standardmäßig vorgesehen ist. Diesen Hooks werden zwei Variablen übergeben. Die erste ist die App-Struktur, die Details über den gesamten Zustand der Seitenanforderung enthält, während wir die resultierende Seite aufbauen. Die zweite ist eindeutig für den spezifischen Hook, der aufgerufen wird, und liefert spezifische Details darüber, was in der Software zum Zeitpunkt des Aufrufs des Hooks passiert. + +[Erstellter Index aller Hooks und der Dateien, die sie aufrufen](/help/de/hooks) + +[module_mod_aftercontent](/help/de/hook/module_mod_aftercontent) +Allgemeiner Hook für jedes Modul, ausgeführt nach mod_content(). Ersetzen Sie „module“ durch den Namen des Moduls, z. B. „photos_mod_aftercontent“. + +[module_mod_content](/help/de/hook/module_mod_content) +Allgemeiner Hook für ein beliebiges Modul, wird vor mod_content() ausgeführt. Ersetzen Sie 'module' durch den Modulnamen, z. B. 'photos_mod_content'. + +[module_mod_init](/help/de/hook/module_mod_init) +Allgemeiner Hook für ein beliebiges Modul, wird vor mod_init() ausgeführt. Ersetzen Sie 'module' durch den Modulnamen, z. B. 'photos_mod_init'. + +[module_mod_post](/help/de/hook/module_mod_post) +Allgemeiner Hook für ein beliebiges Modul, der vor mod_post() ausgeführt wird. Ersetzen Sie 'module' durch den Namen des Moduls, z. B. 'photos_mod_post'. + +[about_hook](/help/de/hook/about_hook) +Aufgerufen von der Seite siteinfo + +[accept_follow](/help/de/hook/accept_follow) +Wird aufgerufen, wenn eine Verbindung akzeptiert wird (Freundschaftsanfrage) + +[account_downgrade](/help/de/hook/account_downgrade) +Wird aufgerufen, wenn ein Konto abgelaufen ist, was auf eine mögliche Herabstufung auf die Serviceklasse „basic“ hinweist + +[Konto_Einstellungen](/help/de/hook/account_settings) +Wird bei der Erstellung des Formulars für die Kontoeinstellungen aufgerufen + +[account_settings_post](/help/de/hook/account_settings_post) +Wird bei der Buchung aus dem Kontoeinstellungsformular aufgerufen + +[tätigkeit_filter](/help/de/hook/activity_filter) +Wird bei der Erstellung der Liste der Filter für die Netzwerkseite aufgerufen + +[activity_mapper](/help/de/hook/activity_filter) +Wird bei der Bestimmung der Vorgangsart für die Übertragung aufgerufen. + +[activity_decode_mapper](/help/de/hook/activity_filter) +Wird aufgerufen, wenn die Vorgangsart für die Übertragung bestimmt wird. + +[activity_obj_mapper](/help/de/hook/activity_filter) +Wird aufgerufen, wenn der Objekttyp für die Übertragung bestimmt wird. + +[activity_obj_decode_mapper](/help/de/hook/activity_filter) +Wird bei der Bestimmung des Objekttyps für die Übertragung aufgerufen. + +[activity_order](/help/de/hook/activity_order) +Wird bei der Generierung der Liste der Bestelloptionen für die Netzseite aufgerufen + +[addon_app_installed_filter](/help/de/hook/addon_app_installed_filter) +Wird aufgerufen, wenn festgestellt wird, ob eine addon_app installiert ist + +[activity_received](/help/de/hook/activity_received) +Wird aufgerufen, wenn eine Aktivität (Beitrag, Kommentar, Like, etc.) von einer Nomad-Quelle empfangen wurde + +[admin_aside](/help/de/hook/admin_aside) +Wird aufgerufen, wenn das Seitenleisten-Widget der Verwaltungsseite erzeugt wird + +[affinity_labels](/help/de/hook/affinity_labels) +Wird verwendet, um alternative Beschriftungen für den Affinitätsslider zu generieren. + +[api_perm_is_allowed](/help/de/hook/api_perm_is_allowed) +Wird aufgerufen, wenn perm_is_allowed() von einem API-Aufruf ausgeführt wird. + +[app_destroy](/help/de/hook/app_destroy) +Wird aufgerufen, wenn eine App gelöscht wird. + +[app_installed_filter](/help/de/hook/app_installed_filter) +Wird aufgerufen, wenn festgestellt wird, ob eine App installiert ist + +[app_menu](/help/de/hook/app_menu) +Wird bei der Erstellung des app_menu Dropdowns aufgerufen (kann veraltet sein) + +[attach_delete](/help/de/hook/attach_delete) +Wird aufgerufen, wenn Anhänge aus der Tabelle attach gelöscht werden + +[atom_author](/help/de/hook/atom_author) +Wird aufgerufen, wenn ein Autor- oder Eigentümer-Element für einen Atom ActivityStream-Feed erzeugt wird + +[atom_entry](/help/de/hook/atom_entry) +Wird bei der Erzeugung jedes Eintrags eines Atom ActivityStreams Feeds aufgerufen + +[atom_feed](/help/de/hook/atom_feed) +Wird bei der Generierung eines Atom ActivityStreams Feeds aufgerufen + +[atom_feed_end](/help/de/hook/atom_feed_end) +Wird aufgerufen, wenn die Erzeugung eines Atom ActivityStreams Feeds abgeschlossen ist + +[attach_upload_file](/help/de/hook/attach_upload_file) +Wird beim Hochladen einer Datei aufgerufen + +[authentifizieren](/help/de/hook/authenticate) +Kann alternative Authentifizierungsmechanismen bereitstellen + +[author_is_pmable](/help/de/hook/author_is_pmable) +Wird aus dem Aktionsmenü des Threads aufgerufen, um festzustellen, ob wir dem Verfasser des Beitrags eine private E-Mail schicken können + +[bb2diaspora](/help/de/hook/bb2diaspora) +Wird bei der Umwandlung von bbcode in Markdown aufgerufen + +[bbcode](/help/de/hook/bbcode) +Wird am Ende der Konvertierung von bbcode in HTML aufgerufen + +[bbcode_filter](/help/de/hook/bbcode_filter) +Wird zu Beginn der Umwandlung von bbcode in HTML aufgerufen + +[bb_translate_video](/help/de/hook/bb_translate_video) +Wird aufgerufen, wenn eingebettete Dienste aus bbcode-Videoelementen extrahiert werden (wird selten verwendet) + +[build_pagehead](/help/de/hook/build_pagehead) +Wird bei der Erstellung des HTML-Seitenkopfes aufgerufen + +[can_comment_on_post](/help/de/hook/can_comment_on_post) +Wird aufgerufen, wenn entschieden wird, ob ein Kommentarfeld für einen Beitrag angezeigt werden soll oder nicht + +[change_channel](/help/de/hook/change_channel) +Wird aufgerufen, wenn man sich bei einem Channel anmeldet (entweder während des Logins oder danach über den Channelmanager) + +[channel_remove](/help/de/hook/channel_remove) +Wird aufgerufen, wenn ein Channel entfernt wird + +[channel_links](/help/de/hook/channel_links) +Wird bei der Generierung des Link: HTTP-Header für einen Kanal + +[channel_settings](/help/de/hook/channel_settings) +Wird aufgerufen, wenn die Seite mit den Channel-Einstellungen angezeigt wird + +[chat_message](/help/de/hook/chat_message) +Wird aufgerufen, um eine Chat-Nachricht zu erstellen. + +[chat_post](/help/de/hook/chat_post) +Wird aufgerufen, wenn eine Chat-Nachricht gepostet wurde. + +[check_account_email](/help/de/hook/check_account_email) +Überprüft die bei einer Kontoregistrierung angegebene E-Mail + +[check_account_invite](/help/de/hook/check_account_invite) +Validierung eines Einladungscodes bei der Verwendung von Website-Einladungen + +[check_account_password](/help/de/hook/check_account_password) +Dient der Kontrolle von Kontopasswörtern (Mindestlänge, Einbeziehung von Zeichensätzen usw.) + +[check_channelallowed](/help/de/hook/check_channelallowed) +Wird verwendet, um die Sperrlisten für schwarze und weiße Kanäle außer Kraft zu setzen oder zu umgehen. + +[check_siteallowed](/help/de/hook/check_siteallowed) +Wird verwendet, um die schwarzen/weißen Sperrlisten für Websites außer Kraft zu setzen oder zu umgehen. + +[collect_public_recipients](/help/de/hook/collect_public_recipients) +Wird verwendet, um eine Liste von Empfängern zu erstellen, an die eine öffentliche Nachricht gesendet werden soll. + +[comment_buttons](/help/de/hook/comment_buttons) +Wird aufgerufen, wenn die Bearbeitungsschaltflächen für Kommentare angezeigt werden. + +[comments_are_now_closed](/help/de/hook/comments_are_now_closed) +Wird aufgerufen, wenn entschieden wird, ob ein Kommentarfeld für einen Beitrag angezeigt werden soll oder nicht + +[connect_premium](/help/de/hook/connect_premium) +Wird aufgerufen, wenn eine Verbindung zu einem Premium-Kanal hergestellt wird + +[connection_remove](/help/de/hook/connection_remove) +Wird aufgerufen, wenn eine Verbindung gelöscht/entfernt wird + +[connector_settings](/help/de/hook/connector_settings) +Wird aufgerufen, wenn die Seite mit den Features/Addon-Einstellungen aufgerufen wird + +[construct_page](/help/de/hook/construct_page) +Allgemeiner Hook zur Bereitstellung von Inhalten für bestimmte Seitenbereiche. Wird aufgerufen, wenn die Comanche-Seite erstellt wird. + +[kontakt_block_ende](/help/de/hook/contact_block_end) +Wird bei der Erstellung des „Connections“-Widgets in der Seitenleiste aufgerufen + +[kontakt_edit](/help/de/hook/contact_edit) +Wird bei der Bearbeitung einer Verbindung über connedit aufgerufen + +[kontakt_edit_post](/help/de/hook/contact_edit_post) +Wird aufgerufen, wenn ein Beitrag an connedit gesendet wird + +[Kontakt_Auswahl_Optionen](/help/de/hook/contact_select_options) +Veraltet/unbenutzt + +[content_security_policy](/help/de/hook/content_security_policy) +Wird vor der Ausgabe des Content-Security-Policy-Headers aufgerufen + +[conversation_start](/help/de/hook/conversation_start) +Wird zu Beginn des Renderns einer Konversation (Nachricht oder Nachrichtensammlung oder Stream) aufgerufen + +[cover_photo_content_end](/help/de/hook/cover_photo_content_end) +Wird aufgerufen, nachdem ein Titelbild hochgeladen wurde + +[create_identity](/help/de/hook/create_identity) +Wird bei der Erstellung eines Channels aufgerufen + +[cron](/help/de/hook/cron) +Wird aufgerufen, wenn eine geplante Aufgabe (Poller) ausgeführt wird + +[cron_daily](/help/de/hook/cron_daily) +Wird aufgerufen, wenn täglich geplante Aufgaben ausgeführt werden + +[cron_weekly](/help/de/hook/cron_weekly) +Wird aufgerufen, wenn wöchentlich geplante Aufgaben ausgeführt werden + +[crypto_methods](/help/de/hook/crypto_methods) +Wird aufgerufen, wenn eine Liste von Kryptoalgorithmen in der lokal bevorzugten Reihenfolge erstellt wird + +[daemon_addon](/help/de/hook/daemon_addon) +Wird aufgerufen, wenn der erweiterbare Hintergrund-Daemon aufgerufen wird + +[daemon_master_release](/help/de/hook/daemon_master_release) +Wird zu Beginn der Verarbeitung von \Zotlabs\Daemon\Master::Release() aufgerufen + +[directory_item](/help/de/hook/directory_item) +Wird beim Erzeugen einer Verzeichnisliste für die Anzeige aufgerufen + +[discover_channel_webfinger](/help/de/hook/discover_channel_webfinger) +Wird aufgerufen, wenn ein Webfinger-Lookup durchgeführt wird + +[display_item](/help/de/hook/display_item) +Wird für jedes Element aufgerufen, das in einem Gesprächsfaden angezeigt wird + +[display_settings](/help/de/hook/display_settings) +Wird vom Einstellungsmodul aufgerufen, wenn der Abschnitt 'Anzeigeeinstellungen' angezeigt wird + +[display_settings_post](/help/de/hook/display_settings_post) +Wird aufgerufen, wenn ein Beitrag aus dem Formular „Einstellungen anzeigen“ des Einstellungsmoduls angezeigt wird + +[donate_contributors](/help/de/hook/donate_contributors) +Wird vom 'donate'-Addon aufgerufen, wenn eine Liste von Spendenempfängern erstellt wird + +[donate_plugin](/help/de/hook/donate_plugin) +wird vom 'donate'-Addon aufgerufen + +[donate_sponsoren](/help/de/hook/donate_sponsors) +aufgerufen durch das 'donate'-Addon + +[dreport_ist_storable](/help/de/hook/dreport_is_storable) +wird vor dem Speichern eines Dreport-Datensatzes aufgerufen, um festzustellen, ob er gespeichert werden soll + +[dreport_process](/help/de/hook/dreport_process) +wird für jeden gültigen Lieferbericht aufgerufen + +[dropdown_extras](/help/de/hook/dropdown_extras) +Hinzufügen zusätzlicher Elemente zum Dropdown-Menü, wenn Element/Threads angezeigt werden. + +[drop_item](/help/de/hook/drop_item) +wird aufgerufen, wenn ein 'item' entfernt wird + +[encode_object](/help/de/hook/encode_object) +wird aufgerufen, wenn ein Objekt für die Übertragung kodiert wird. + +[enotify](/help/de/hook/enotify) +wird vor jeder Benachrichtigung aufgerufen + +[enotify_mail](/help/de/hook/enotify_mail) +wird aufgerufen, wenn eine Benachrichtigungs-E-Mail gesendet wird + +[enotify_store](/help/de/hook/enotify_store) +wird beim Speichern eines Benachrichtigungsdatensatzes aufgerufen + +[enotify_store_end](/help/de/hook/enotify_store_end) +wird aufgerufen, nachdem ein Benachrichtigungsdatensatz gespeichert wurde + +[event_created](/help/de/hook/event_created) +wird aufgerufen, wenn ein Ereignisdatensatz erstellt wird + +[event_store_event](/help/de/hook/event_store_event) +wird aufgerufen, wenn ein Ereignisdatensatz erstellt oder aktualisiert wird + +[event_updated](/help/de/hook/event_updated) +wird aufgerufen, wenn ein Ereignisdatensatz geändert wird + +[externals_url_select](/help/de/hook/externals_url_select) +wird aufgerufen, wenn eine Liste mit zufälligen Websites erstellt wird, von denen öffentliche Beiträge abgerufen werden sollen + +[feature_enabled](/help/de/hook/feature_enabled) +wird aufgerufen, wenn 'feature_enabled()' verwendet wird + +[merkmal_settings](/help/de/hook/feature_settings) +wird von der Einstellungsseite aufgerufen, wenn man 'addon/feature settings' besucht + +[feature_settings_post](/help/de/hook/feature_settings_post) +wird von der Einstellungsseite aufgerufen, wenn von 'addon/feature settings' aus gepostet wird + +[fetch_and_store](/help/de/hook/fetch_and_store) +wird aufgerufen, um das Filtern von 'entschlüsselten' Elementen vor der Speicherung zu ermöglichen. + +[file_thumbnail](/help/de/hook/file_thumbnail) +wird aufgerufen, wenn Miniaturbilder für die Wolkenseite im Modus „Kacheln anzeigen“ erzeugt werden + +[folgen](/help/de/hook/follow) +wird aufgerufen, wenn eine Follow-Operation stattfindet + +[follow_from_feed](/help/de/hook/follow_from_feed) +wird aufgerufen, wenn eine Follow-Operation in einem RSS-Feed stattfindet + +[follow_allow](/help/de/hook/follow_allow) +wird aufgerufen, bevor die Ergebnisse einer Follow-Operation gespeichert werden + +[gender_selector](/help/de/hook/gender_selector) +wird bei der Erstellung der Dropdown-Liste „Geschlecht“ aufgerufen (erweitertes Profil) + +[gender_selector_min](/help/de/hook/gender_selector_min) +wird bei der Erstellung der Dropdown-Liste „Geschlecht“ aufgerufen (normales Profil) + +[generate_map](/help/de/hook/generate_map) +wird aufgerufen, um den HTML-Code für die Anzeige eines Orts auf der Karte nach Koordinaten zu erzeugen + +[generate_named_map](/help/de/hook/generate_named_map) +wird aufgerufen, um die HTML-Datei für die Anzeige eines Kartenorts anhand eines Textes zu erzeugen + +[get_all_api_perms](/help/de/hook/get_all_api_perms) +Wird aufgerufen, wenn die Berechtigungen für API-Verwendungen abgerufen werden + +[get_all_perms](/help/de/hook/get_all_perms) +wird aufgerufen, wenn get_all_perms() verwendet wird + +[get_best_language](/help/de/hook/get_best_language) +wird aufgerufen, wenn die bevorzugte Sprache für die Seite ausgewählt wird + +[get_default_export_sections](/help/de/hook/get_default_export_sections) +Wird aufgerufen, um die Standardliste der zu exportierenden Funktionsdatengruppen in identity_basic_export() zu erhalten + +[get_features](/help/de/hook/get_features) +Wird aufgerufen, wenn get_features() aufgerufen wird + +[get_photo](/help/de/hook/get_photo) +Wird aufgerufen, wenn Fotoinhalte (außer Profilfotos) in mod_photo abgerufen werden + +[get_profile_photo](/help/de/hook/get_profile_photo) +Wird aufgerufen, wenn der Inhalt des lokalen Profilfotos in mod_photo abgerufen wird + +[get_role_perms](/help/de/hook/get_role_perms) +Wird aufgerufen, wenn get_role_perms() aufgerufen wird, um Berechtigungen für benannte Berechtigungsrollen zu erhalten + +[global_permissions](/help/de/hook/global_permissions) +Wird aufgerufen, wenn die globale Berechtigungsliste erstellt wird + +[home_content](/help/de/hook/home_content) +Wird von mod_home aufgerufen, um den Inhalt der Home-Seite zu ersetzen + +[home_init](/help/de/hook/home_init) +Wird von der Funktion home_init() der Homepage aufgerufen + +[hostxrd](/help/de/hook/hostxrd) +Wird bei der Erzeugung von .well-known/hosts-meta für „old webfinger“ aufgerufen (wird vom Diaspora-Protokoll verwendet) + +[html2bb_video](/help/de/hook/html2bb_video) +Wird aufgerufen, wenn die html2bbcode-Übersetzung verwendet wird, um eingebettete Medien zu behandeln + +[html2bbcode](/help/de/hook/html2bbcode) +Wird bei der Verwendung der html2bbcode-Übersetzung aufgerufen + +[identität_basic_export](/help/de/hook/identity_basic_export) +Wird aufgerufen, wenn die Basisinformationen eines Channels zur Sicherung oder Übertragung exportiert werden. + +[import_autor_xchan](/help/de/hook/import_author_xchan) +Wird aufgerufen, wenn ein Autor eines Beitrags mit xchan_hash gesucht wird, um sicherzustellen, dass er einen xchan-Eintrag auf unserer Website hat + +[import_channel](/help/de/hook/import_channel) +Wird aufgerufen, wenn ein Kanal aus einer Datei oder einer API-Quelle importiert wird + +[import_directory_profile](/help/de/hook/import_directory_profile) +Wird aufgerufen, wenn die Lieferung einer Profilstruktur aus einer externen Quelle verarbeitet wird (normalerweise für die Speicherung in Verzeichnissen) + +[import_xchan](/help/de/hook/import_xchan) +Wird bei der Verarbeitung des Ergebnisses von zot_finger() aufgerufen, um das Ergebnis zu speichern + +[item_photo_menu](/help/de/hook/item_photo_menu) +Wird aufgerufen, wenn die Liste der Aktionen erzeugt wird, die mit einem angezeigten Konversationselement verbunden sind + +[item_store](/help/de/hook/item_store) +Wird aufgerufen, wenn item_store() einen Datensatz vom Typ item speichert + +[item_stored](/help/de/hook/item_stored) +Wird aufgerufen, nachdem item_store() einen Datensatz des Typs item in der Datenbank gespeichert hat. + +[item_custom](/help/de/hook/item_custom) +Wird aufgerufen, bevor item_store() einen Datensatz des Typs item speichert (damit Addons ITEM_TYPE_CUSTOM-Elemente verarbeiten können). + +[item_store_update](/help/de/hook/item_store_update) +Wird aufgerufen, wenn item_store_update() aufgerufen wird, um einen gespeicherten Eintrag zu aktualisieren. + +[item_stored_update](/help/de/hook/item_stored_update) +Wird aufgerufen, nachdem item_store_update() ein gespeichertes Element aktualisiert hat. + +[item_translate](/help/de/hook/item_translate) +Wird von item_store und item_store_update aufgerufen, nachdem die Sprache des Beitrags automatisch erkannt wurde. + +[jot_networks](/help/de/hook/jot_networks) +Wird aufgerufen, um die Liste der zusätzlichen Post-Plugins zu generieren, die aus dem ACL-Formular aktiviert werden sollen + +[jot_tool](/help/de/hook/jot_tool) +Veraltet und möglicherweise überflüssig. Ermöglicht das Hinzufügen von Aktionsschaltflächen zum Beitragseditor. + +[jot_tpl_filter](/help/de/hook/jot_tpl_filter) +Wird aufgerufen, um Vorlagenvariablen vor der Ersetzung in jot.tpl zu filtern. + +[jot_header_tpl_filter](/help/de/hook/jot_header_tpl_filter) +Wird aufgerufen, um Vorlagenvariablen vor der Ersetzung in jot_header.tpl zu filtern. + +[legal_webbie](/help/de/hook/legal_webbie) +Wird aufgerufen, um eine Kanaladresse zu validieren + +[legal_webbie_text](/help/de/hook/legal_webbie_text) +Bietet eine Erklärung der Text-/Zeichenbeschränkungen für legal_webbie() + +[load_pdl](/help/de/hook/load_pdl) +Wird aufgerufen, wenn wir eine PDL-Datei oder eine Beschreibung laden + +[local_dir_update](/help/de/hook/local_dir_update) +Wird aufgerufen, wenn eine Verzeichnisaktualisierung von einem Channel auf dem Verzeichnisserver verarbeitet wird + +[location_move](/help/de/hook/location_move) +Wird aufgerufen, wenn einem UNO-Channel ein neuer Standort mitgeteilt wurde (was auf eine Verschiebung und nicht auf einen Klon hinweist) + +[protokolliert](/help/de/hook/logged_in) +Wird aufgerufen, wenn die Authentifizierung auf irgendeine Weise erfolgreich war + +[Logger](/help/de/hook/logger) +Wird aufgerufen, wenn ein Eintrag in die Logdatei der Anwendung gemacht wird + +[logging_out](/help/de/hook/logging_out) +Wird bei der Abmeldung aufgerufen + +[login_hook](/help/de/hook/login_hook) +Wird bei der Generierung des Anmeldeformulars aufgerufen + +[magic_auth](/help/de/hook/magic_auth) +Wird bei der Verarbeitung einer magic-auth-Sequenz aufgerufen + +[markdown_to_bb](/help/de/hook/markdown_to_bb) +Wird bei der Verarbeitung der Markdown-Konvertierung aufgerufen + +[match_webfinger_location](/help/de/hook/match_webfinger_location) +Wird bei der Verarbeitung von Webfinger-Anfragen aufgerufen + +[magic_auth_openid_success](/help/de/hook/magic_auth_openid_success) +Wird aufgerufen, wenn ein magic-auth aufgrund von openid-Anmeldedaten erfolgreich war + +[magic_auth_success](/help/de/hook/magic_auth_success) +Wird aufgerufen, wenn ein magic-auth erfolgreich war + +[main_slider](/help/de/hook/main_slider) +Wird bei der Generierung des Affinitätswerkzeugs aufgerufen + +[marital_selector](/help/de/hook/marital_selector) +Wird aufgerufen, wenn die Auswahlliste für das Dropdown-Menü des Profils „Familienstand“ erstellt wird (erweitertes Profil) + +[marital_selector_min](/help/de/hook/marital_selector_min) +Wird bei der Erstellung der Auswahlliste für das Dropdown-Profil „Familienstand“ aufgerufen (normales Profil) + +[module_loaded](/help/de/hook/module_loaded) +Wird aufgerufen, wenn ein Modul erfolgreich für eine URL-Anfrage auf dem Server lokalisiert wurde. + +[mood_verbs](/help/de/hook/mood_verbs) +Wird bei der Erstellung der Liste der Stimmungen aufgerufen + +[nav](/help/de/hook/nav) +Wird bei der Erstellung der Navigationsleiste aufgerufen + +[network_content_init](/help/de/hook/network_content_init) +Wird beim Laden des Inhalts für die Netzwerkseite aufgerufen + +[netzwerk_ping](/help/de/hook/network_ping) +Wird bei einer Ping-Anfrage aufgerufen + +[netzwerk_zu_name](/help/de/hook/network_to_name) +Veraltet + +[notifier_end](/help/de/hook/notifier_end) +Wird aufgerufen, wenn eine Zustellschleife abgeschlossen ist + +[notifier_hub](/help/de/hook/notifier_hub) +Wird aufgerufen, wenn ein Hub zugestellt wurde + +[notifier_normal](/help/de/hook/notifier_normal) +Wird aufgerufen, wenn der Notifizierer für eine 'normale' Zustellung aufgerufen wird + +[notifier_process](/help/de/hook/notifier_process) +Wird aufgerufen, wenn der Notifizierende eine Nachricht/Ereignis verarbeitet + +[obj_verbs](/help/de/hook/obj_verbs) +Wird bei der Erstellung der Liste der für das Profil „Dinge“ verfügbaren Verben aufgerufen. + +[oembed_action](/help/de/hook/oembed_action) +Wird aufgerufen, wenn entschieden wird, ob eine Oembed-Url gefiltert, blockiert oder genehmigt werden soll + +[oembed_probe](/help/de/hook/oembed_probe) +Wird aufgerufen, wenn eine Suche nach Oembed-Inhalten durchgeführt wird. + +[other_encapsulate](/help/de/hook/other_encapsulate) +Wird aufgerufen, wenn Inhalte verschlüsselt werden, für die der Algorithmus unbekannt ist (siehe auch crypto_methods) + +[other_unencapsulate](/help/de/hook/other_unencapsulate) +Wird aufgerufen, wenn Inhalte entschlüsselt werden, deren Algorithmus unbekannt ist (siehe auch crypto_methods) + +[page_content_top](/help/de/hook/page_content_top) +Wird aufgerufen, wenn wir eine Webseite generieren (vor dem Aufruf der Modul-Content-Funktion) + +[page_end](/help/de/hook/page_end) +Wird aufgerufen, nachdem wir den Seiteninhalt generiert haben + +[page_header](/help/de/hook/page_header) +Wird bei der Generierung der Navigationsleiste aufgerufen + +[page_meta](/help/de/hook/page_header) +Wird bei der Generierung der Metadaten im Seitenkopf aufgerufen. + +[parse_atom](/help/de/hook/parse_atom) +Wird aufgerufen, wenn ein Atom/RSS-Feed-Element geparst wird. + +[parse_link](/help/de/hook/parse_link) +Wird aufgerufen, wenn eine URL abgefragt wird, um daraus einen Beitrag zu generieren + +[pdl_selector](/help/de/hook/pdl_selector) +Wird bei der Erstellung einer Layoutauswahl in einem Formular aufgerufen + +[perm_is_allowed](/help/de/hook/perm_is_allowed) +Wird während perm_is_allowed() aufgerufen, um festzustellen, ob eine Berechtigung für diesen Kanal und Beobachter erlaubt ist + +[permissions_create](/help/de/hook/permissions_create) +Wird aufgerufen, wenn ein Bucheintrag (Verbindung) erstellt wird + +[permissions_update](/help/de/hook/permissions_update) +Wird aufgerufen, wenn eine Berechtigungsaktualisierung übertragen wird + +[permit_hook](/help/de/hook/permit_hook) +Wird aufgerufen, bevor ein registrierter Hook tatsächlich ausgeführt wird, um festzustellen, ob er erlaubt oder blockiert werden soll + +[personal_xrd](/help/de/hook/personal_xrd) +Wird bei der Generierung der persönlichen XRD für „old webfinger“ (Diaspora) aufgerufen + +[photo_post_end](/help/de/hook/photo_post_end) +Wird nach dem Hochladen eines Fotos aufgerufen + +[photo_upload_begin](/help/de/hook/photo_upload_begin) +Wird aufgerufen, wenn versucht wird, ein Foto hochzuladen + +[photo_upload_end](/help/de/hook/photo_upload_end) +Wird aufgerufen, wenn ein Foto-Upload verarbeitet wurde + +[photo_upload_file](/help/de/hook/photo_upload_file) +Wird aufgerufen, um alternative Dateinamen für einen Upload zu generieren + +[photo_upload_form](/help/de/hook/photo_upload_form) +Wird aufgerufen, wenn ein Foto-Upload-Formular generiert wird + +[photo_view_filter](/help/de/hook/photo_view_filter) +Wird aufgerufen, bevor die Daten an die photo_view-Vorlage übergeben werden + +[poke_verbs](/help/de/hook/poke_verbs) +Wird bei der Erstellung der Liste der Aktionen für das Modul „poke“ aufgerufen + +[post_local](/help/de/hook/post_local) +Wird aufgerufen, wenn ein Artikel auf diesem Rechner über mod/item.php eingestellt wurde (auch über API) + +[post_local_end](/help/de/hook/post_local_end) +Wird aufgerufen, wenn ein lokaler Postvorgang abgeschlossen ist + +[post_local_start](/help/de/hook/post_local_start) +Wird aufgerufen, wenn ein lokaler Postvorgang beginnt + +[post_mail](/help/de/hook/post_mail) +Wird aufgerufen, wenn eine Mail-Nachricht verfasst wurde + +[post_mail_end](/help/de/hook/post_mail_end) +Wird aufgerufen, wenn eine Mail-Nachricht zugestellt wurde + +[post_remote](/help/de/hook/post_remote) +Wird aufgerufen, wenn eine Aktivität von einem anderen Standort eintrifft + +[post_remote_end](/help/de/hook/post_remote_end) +Wird nach der Verarbeitung einer Remote-Post aufgerufen + +[post_remote_update](/help/de/hook/post_remote_update) +Wird bei der Verarbeitung eines entfernten Beitrags aufgerufen, der eine Bearbeitung oder Aktualisierung beinhaltet + +[post_remote_update_end](/help/de/hook/post_remote_update_end) +Wird nach der Verarbeitung eines entfernten Beitrags aufgerufen, der eine Bearbeitung oder Aktualisierung beinhaltete + +[prepare_body](/help/de/hook/prepare_body) +Wird aufgerufen, wenn der HTML-Code für ein angezeigtes Konversationsobjekt generiert wird. + +[prepare_body_final](/help/de/hook/prepare_body_final) +Wird nach der Generierung des HTML für ein angezeigtes Konversationselement aufgerufen + +[prepare_body_init](/help/de/hook/prepare_body_init) +Wird vor der Generierung des HTML für ein angezeigtes Konversationselement aufgerufen + +[privacygroup_extras](/help/de/hook/privacygroup_extras) +Wird vor der Generierung des HTML für die Bearbeitungsoptionen der Privacy Group aufgerufen + +[privacygroup_extras_delete](/help/de/hook/privacygroup_extras_delete) +Wird aufgerufen, nachdem die Privatsphärengruppe gelöscht wurde. + +[privacygroup_extras_post](/help/de/hook/privacygroup_extras_post) +Wird aufgerufen, wenn das Formular zur Bearbeitung der Privatsphärengruppe abgeschickt wird. + +[proc_run](/help/de/hook/proc_run) +Wird beim Aufruf von PHP-Unterprozessen aufgerufen + +[process_channel_sync_delivery](/help/de/hook/process_channel_sync_delivery) +Wird aufgerufen, wenn ein 'Sync-Paket' mit Struktur- und Tabellenaktualisierungen von einem Channel-Clone angenommen wird. + +[profile_advanced](/help/de/hook/profile_advanced) +Wird bei der Generierung einer erweiterten Profilseite aufgerufen + +[profil_edit](/help/de/hook/profile_edit) +Wird bei der Bearbeitung eines Profils aufgerufen + +[profil_foto_inhalt_ende](/help/de/hook/profile_photo_content_end) +Wird bei der Änderung eines Profilfotos aufgerufen + +[profil_post](/help/de/hook/profile_post) +Wird beim Posten eines bearbeiteten Profils aufgerufen + +[profile_sidebar](/help/de/hook/profile_sidebar) +Wird aufgerufen, wenn die „Kanal-Seitenleiste“ oder das Miniprofil erstellt wird + +[profile_sidebar_enter](/help/de/hook/profile_sidebar_enter) +Wird vor der Erstellung der 'Channel Sidebar' oder des Miniprofils aufgerufen + +[queue_deliver](/help/de/hook/queue_deliver) +Wird aufgerufen, wenn eine Nachricht in der Warteschlange zugestellt wird + +[register_account](/help/de/hook/register_account) +Wird aufgerufen, wenn ein Konto erstellt worden ist + +[render_location](/help/de/hook/render_location) +Wird aufgerufen, um eine ineraktive Inline-Map zu erzeugen + +[replace_macros](/help/de/hook/replace_macros) +Wird vor dem Aufrufen des Vorlagenprozessors aufgerufen + +[reverse_magic_auth](/help/de/hook/reverse_magic_auth) +Wird vor dem Aufruf von reverse magic auth aufgerufen, um Sie auf Ihre eigene Website zu schicken, damit Sie sich auf dieser Website authentifizieren können + +[Einstellungen_Konto](/help/de/hook/settings_account) +Wird bei der Erstellung des Formulars für die Kontoeinstellungen aufgerufen + +[einstellungen_form](/help/de/hook/settings_form) +Wird bei der Erstellung des Formulars für die Channel-Einstellungen aufgerufen + +[einstellungen_post](/help/de/hook/settings_post) +Wird bei der Buchung aus dem Formular für die Kanaleinstellungen aufgerufen + +[sexpref_selector](/help/de/hook/sexpref_selector) +Wird aufgerufen, wenn ein Dropdown-Menü für sexuelle Präferenzen erstellt wird (erweitertes Profil) + +[sexpref_selector_min](/help/de/hook/sexpref_selector_min) +Wird aufgerufen, wenn eine Auswahlliste der sexuellen Präferenzen erstellt wird (normales Profil) + +[smilie](/help/de/hook/smilie) +Wird beim Übersetzen von Emoticons aufgerufen + +[status_editor](/help/de/hook/status_editor) +Wird bei der Erstellung des status_editor aufgerufen. + +[stream_item](/help/de/hook/stream_item) +Wird für jedes Element aufgerufen, das über conversation() zur Anzeige gerendert wird + +[system_app_installed_filter](/help/de/hook/system_app_installed_filter) +Wird aufgerufen, wenn festgestellt wird, ob eine System-App installiert ist. + +[tagged](/help/de/hook/tagged) +Wird aufgerufen, wenn eine Lieferung verarbeitet wird, die dazu führt, dass Sie getaggt werden + +[thumbnail](/help/de/hook/thumbnail) +Wird beim Erzeugen von Miniaturbildern für die Kachelansicht des Cloud-Speichers aufgerufen + +[update_unseen](/help/de/hook/update_unseen) +Wird vor dem automatischen Markieren von im Browser geladenen Sendungen, die gesehen wurden, aufgerufen + +[validate_channelname](/help/de/hook/validate_channelname) +Wird verwendet, um die von einem Kanal verwendeten Namen zu validieren + +[webfinger](/help/de/hook/webfinger) +Wird beim Besuch des Dienstes webfinger (RFC7033) aufgerufen + +[well_known](/help/de/hook/well_known) +Wird beim Zugriff auf die speziellen '.well-known'-Site-Adressen aufgerufen + +[wiki_preprocess](/help/de/hook/wiki_preprocess) +Wird aufgerufen, bevor Markdown-/Bbcode-Prozessoren für Wikiseiten ausgeführt werden + +[zot_best_algorithm](/help/de/hook/zot_best_algorithm) +Wird bei der Aushandlung von Verschlüsselungsalgorithmen mit entfernten Sites aufgerufen + +[zid](/help/de/hook/zid) +Wird aufgerufen, wenn die zid des Beobachters zu einer URL hinzugefügt wird + +[zid_init](/help/de/hook/zid_init) +Wird bei der Authentifizierung eines Besuchers aufgerufen, der zid verwendet hat + +[zot_finger](/help/de/hook/zot_finger) +Wird aufgerufen, wenn ein Nomad-Infopaket angefordert wurde (dies ist unser Webfinger-Erkennungsmechanismus) diff --git a/doc/de/developer/licensing.md b/doc/de/developer/licensing.md new file mode 100644 index 000000000..b7ff16748 --- /dev/null +++ b/doc/de/developer/licensing.md @@ -0,0 +1,3 @@ +### Lizenzvergabe + +Der gesamte zum Projekt beigetragene Code unterliegt der MIT-Lizenz, sofern nicht anders angegeben. Wir akzeptieren Code von Drittanbietern, der unter MIT, BSD und LGPL fällt, aber Copyleft-Lizenzen (GPL und AGPL) sind nur in Addons erlaubt. Es muss möglich sein, den GPL-(Copyleft-)Code vollständig aus dem Hauptprojekt zu entfernen, ohne etwas zu zerstören.
\ No newline at end of file diff --git a/doc/de/developer/magic_auth.md b/doc/de/developer/magic_auth.md new file mode 100644 index 000000000..0625fb983 --- /dev/null +++ b/doc/de/developer/magic_auth.md @@ -0,0 +1,49 @@ +### Magic Auth + +Der so genannte „magic auth“ erfolgt durch einen speziellen Austausch. Auf dem entfernten Computer wird eine Umleitung zum Nomad-Endpunkt mit speziellen GET-Parametern vorgenommen. + +Endpunkt: [https://example.com/post/name](https://example.com/post/name?f=&zid=pepecyb@hub.hubzilla.hu) + +wobei 'name' die linke Seite des Kanal-Webbies ist, zum Beispiel 'mike', wenn der Webbie 'mike@zothub.com' ist. + +Zusätzlich werden vier Parameter übergeben: + +- auth => die Webbie der Person, die den Zugang beantragt +- dest => die gewünschte Ziel-URL (urlencodiert) +- sec => eine zufällige Zeichenkette, die auch lokal gespeichert wird, um sie während der Verifizierungsphase zu verwenden. +- version => die Zot-Revision + +Wenn dieses Paket empfangen wird, wird eine Nomad-Nachricht an die auth-Identität gesendet: + +``` + { + "type":"auth_check", + "sender":{ + "guid":"kgVFf_1_SSbyqH-BNWjWuhAvJ2EhQBTUdw-Q1LwwssAntr8KTBgBSzNVzUm9_RwuDpxI6X8me_QQhZMf7RfjdA", + "guid_sig":"PT9-TApzpm7QtMxC63MjtdK2nUyxNI0tUoWlOYTFGke3kNdtxSzSvDV4uzq_7SSBtlrNnVMAFx2_1FDgyKawmqVtRPmT7QSXrKOL2oPzL8Hu_nnVVTs_0YOLQJJ0GYACOOK-R5874WuXLEept5-KYg0uShifsvhHnxnPIlDM9lWuZ1hSJTrk3NN9Ds6AKpyNRqf3DUdz81-Xvs8I2kj6y5vfFtm-FPKAqu77XP05r74vGaWbqb1r8zpWC7zxXakVVOHHC4plG6rLINjQzvdSFKCQb5R_xtGsPPfvuE24bv4fvN4ZG2ILvb6X4Dly37WW_HXBqBnUs24mngoTxFaPgNmz1nDQNYQu91-ekX4-BNaovjDx4tP379qIG3-NygHTjFoOMDVUvs-pOPi1kfaoMjmYF2mdZAmVYS2nNLWxbeUymkHXF8lT_iVsJSzyaRFJS1Iqn7zbvwH1iUBjD_pB9EmtNmnUraKrCU9eHES27xTwD-yaaH_GHNc1XwXNbhWJaPFAm35U8ki1Le4WbUVRluFx0qwVqlEF3ieGO84PMidrp51FPm83B_oGt80xpvf6P8Ht5WvVpytjMU8UG7-js8hAzWQeYiK05YTXk-78xg0AO6NoNe_RSRk05zYpF6KlA2yQ_My79rZBv9GFt4kUfIxNjd9OiV1wXdidO7Iaq_Q", + "url":"http:\/\/podunk.edu", + "url_sig":"T8Bp7j5DHHhQDCFcAHXfuhUfGk2P3inPbImwaXXF1xJd3TGgluoXyyKDx6WDm07x0hqbupoAoZB1qBP3_WfvWiJVAK4N1FD77EOYttUEHZ7L43xy5PCpojJQmkppGbPJc2jnTIc_F1vvGvw5fv8gBWZvPqTdb6LWF6FLrzwesZpi7j2rsioZ3wyUkqb5TDZaNNeWQrIEYXrEnWkRI_qTSOzx0dRTsGO6SpU1fPWuOOYMZG8Nh18nay0kLpxReuHCiCdxjXRVvk5k9rkcMbDBJcBovhiSioPKv_yJxcZVBATw3z3TTE95kGi4wxCEenxwhSpvouwa5b0hT7NS4Ay70QaxoKiLb3ZjhZaUUn4igCyZM0h6fllR5I6J_sAQxiMYD0v5ouIlb0u8YVMni93j3zlqMWdDUZ4WgTI7NNbo8ug9NQDHd92TPmSE1TytPTgya3tsFMzwyq0LZ0b-g-zSXWIES__jKQ7vAtIs9EwlPxqJXEDDniZ2AJ6biXRYgE2Kd6W_nmI7w31igwQTms3ecXe5ENI3ckEPUAq__llNnND7mxp5ZrdXzd5HHU9slXwDShYcW3yDeQLEwAVomTGSFpBrCX8W77n9hF3JClkWaeS4QcZ3xUtsSS81yLrp__ifFfQqx9_Be89WVyIOoF4oydr08EkZ8zwlAsbZLG7eLXY" + }, + "recipients":{ + { + "guid":"ZHSqb3yGar3TYV_o9S-JkD-6o_V4DhUcxtv0VeyX8Kj_ENHPI_M3SyAUucU835-mIayGMmTpqJz3ujPkcavVhA", + "guid_sig":"JsAAXigNghTkkbq8beGMJjj9LBKZn28hZ-pHSsoQuwYWvBJ2lSnfc4r9l--WgO6sucH-SR6RiBo78eWn1cZrh_cRMu3x3LLx4y-tjixg-oOOgtZakkBg4vmOhkKPkci0mFtzvUrpY4YHySqsWTuPwRx_vOlIYIGEY5bRXpnkNCoC8J4EJnRucDrgSARJvA8QQeQQL0H4mWEdGL7wlsZp_2VTC6nEMQ48Piu6Czu5ThvLggGPDbr7PEMUD2cZ0jE4SeaC040REYASq8IdXIEDMm6btSlGPuskNh3cD0AGzH2dMciFtWSjmMVuxBU59U1I6gHwcxYEV6BubWt_jQSfmA3EBiPhKLyu02cBMMiOvYIdJ3xmpGoMY1Cn__vhHnx_vEofFOIErb6nRzbD-pY49C28AOdBA5ffzLW3ss99d0A-6GxZmjsyYhgJu4tFUAa7JUl84tMbq28Tib0HW6qYo6QWw8K1HffxcTpHtwSL5Ifx0PAoGMJsGDZDD1y_r9a4vH5pjqmGrjL3RXJJUy-m4eLV5r7xMWXsxjqu3D8r04_dcw4hwwexpMT1Nwf8CTB0TKb8ElgeOpDFjYVgrqMYWP0XdhatcFtAJI7gsS-JtzsIwON9Kij66-VAkqy_z1IXI0ziyqV1yapSVYoUV1vMScRZ_nMqwiB5rEDx-XLfzko" + } + } + "callback":"\/post", + "version":1, + "secret":"1eaa6613699be6ebb2adcefa5379c61a3678aa0df89025470fac871431b70467", + "secret_sig":"eKV968b1sDkOVdSMi0tLRtOhQw4otA8yFKaVg6cA4I46_zlAQGbFptS-ODiZlSAqR7RiiZQv4E2uXCKar52dHo0vvNKbpOp_ezWYcwKRu1shvAlYytsflH5acnDWL-FKOOgz5zqLLZ6cKXFMoR1VJGG_Od-DKjSwajyV9uVzTry58Hz_w0W2pjxwQ-Xv11rab5R2O4kKSW77YzPG2R5E6Q7HN38FrLtyWD_ai3K9wlsFOpwdYC064dk66X7BZtcIbKtM6zKwMywcfJzvS5_0U5yc5GGbIY_lY6SViSfx9shOKyxkEKHfS29Ynk9ATYGnwO-jnlMqkJC7t149H-sI9hYWMkLuCzaeLP56k2B2TmtnYvE_vHNQjzVhTwuHCIRVr-p6nplQn_P3SkOpYqPi3k_tnnOLa2d3Wtga8ClEY90oLWFJC3j2UkBf_VEOBNcg-t5XO3T-j9O4Sbk96k1Qoalc-QlznbGx4bOVsGkRBBMiH4YUqiiWB_OkFHtdqv7dqGeC-u-B4u9IxzYst46vvmyA3O-Q4APSZ1RY8ITUH0jLTbh6EAV7Oki8pIbOg0t56p-8RlanOZqmFvR-grVSc7Ak1ZcD8NACmvidUpa1B7WEvRcOeffx9lype0bt5XenDnMyx6szevwxZIiM8qGM2lsSk4fu8HI9cW0mLywzZT0" + } +``` + +auth_check-Nachrichten MÜSSEN verschlüsselt werden. Diese Nachricht wird an die Herkunftsseite gesendet, die prüft, ob das „secret“ mit dem „sec“ übereinstimmt, das sie ursprünglich übermittelt hat. Sie prüft auch secret_sig, das mit dem privaten Schlüssel des Zielkanals signiert und mit base64url kodiert ist. Wenn alles in Ordnung ist, wird ein json-Paket zurückgegeben: + +``` + { + "success":1, + "confirm":"q0Ysovd1uQRsur2xG9Tg6bC23ynzw0191SkVd7CJcYoaePy6e_v0vnmPg2xBUtIaHpx_aSuhgAkd3aVjPeaVBmts6aakT6a_yAEy7l2rBydntu2tvrHhoVqRNOmw0Q1tI6hwobk1BgK9Pm0lwOeAo8Q98BqIJxf47yO9pATa0wktOg6a7LMogC2zkkhwOV5oEqjJfeHeo27TiHr1e2WaphfCusjmk27V_FAYTzw05HvW4SPCx55EeeTJYIwDfQwjLfP4aKV-I8HQCINt-2yxJvzH7Izy9AW-7rYU0Il_gW5hrhIS5MTM12GBXLVs2Ij1CCLXIs4cO0x6e8KEIKwIjf7iAu60JPmnb_fx4QgBlF2HLw9vXMwZokor8yktESoGl1nvf5VV5GHWSIKAur3KPS2Tb0ekNh-tIk9u-xob4d9eIf6tge_d3aq1LcAtrDBDLk8AD0bho5zrVuTmZ9k-lBVPr_DRHSV_dlpu088j3ThaBsuV1olHK3vLFRhYCDIO0CqqK5IuhqtRNnRaqhlNN6fQUHpXk2SwHiJ2W36RCYMTnno6ezFk_tN-RA2ly-FomNZoC5FPA9gFwoJR7ZmVFDmUeK3bW-zYTA5vu15lpBPnt7Up_5rZKkr0WQVbhWJmylqOuwuNWbn3SrMQ8rYFZ23Tv300cOfKVgRBaePWQb4" + } +``` + +"confirm“ ist in diesem Fall die base64url-kodierte RSA-Signatur der Verkettung von ‚secret‘ mit dem base64url-kodierten Whirlpool-Hash der Quellguid und guid_sig; signiert mit dem privaten Schlüssel des Quellkanals. Dies verhindert, dass ein Manin-the-Middle ein betrügerisches Erfolgspaket einfügt. Nach Empfang und erfolgreicher Überprüfung dieses Pakets wird die Zielseite zur ursprünglichen Ziel-URL umgeleitet und zeigt eine erfolgreiche Fernanmeldung an.
\ No newline at end of file diff --git a/doc/de/developer/nomad_protocol.md b/doc/de/developer/nomad_protocol.md new file mode 100644 index 000000000..67252eddf --- /dev/null +++ b/doc/de/developer/nomad_protocol.md @@ -0,0 +1,47 @@ +### Das Nomad Protokoll + +#### Was ist Nomad? + +Nomad ist das revolutionäre Protokoll, das Hubzilla antreibt und die **Kommunikation**, das **Identitätsmanagement** und die **Zugangskontrolle** in einem vollständig **dezentralisierten** Netzwerk unabhängiger Websites, oft als „das Grid“ bezeichnet, ermöglicht. Die daraus resultierende Plattform ist ein robustes System, das den Datenschutz und die Sicherheit unterstützt und gleichzeitig die Art von umfangreichen Webdiensten ermöglicht, die normalerweise nur in zentralisierten, proprietären Lösungen zu finden sind. + +Betrachten Sie dieses typische Szenario: + +Jaquelina möchte Fotos von ihrem Blog unter **jaquelina.org** mit Roberto teilen, aber mit niemandem sonst. Roberto unterhält seinen eigenen Familien-Hub unter **roberto.net** auf einem völlig unabhängigen Server. Nomad erlaubt Jaquelina, ihre Fotos mit einer *Zugriffskontrollliste (ACL)* zu veröffentlichen, die nur Roberto einschließt. Das bedeutet, dass Roberto die Fotos zwar sehen kann, wenn er ihren Blog besucht, sein Bruder Marco jedoch nicht, und auch kein anderes Familienmitglied, das ein Konto auf **roberto.net** hat. + +Der Clou an diesem Szenario ist die Tatsache, dass Roberto sich nie auf Jaquelinas Website angemeldet hat. Stattdessen musste er sich nur einmal mit seinem Passwort auf seiner *eigenen* Website **roberto.net** anmelden. Wenn Roberto **jaquelina.org** besucht, wird er von ihrem Hub nahtlos authentifiziert, indem sein Server im Hintergrund abgefragt wird. + +Es ist nicht ungewöhnlich, dass Server technische Probleme haben oder aus verschiedenen Gründen unzugänglich werden. Nomad bietet Robustheit für Robertos Online-Aktivitäten, indem es ihm erlaubt, *Klone* seiner Online-Identität oder seines *Kanals* auf mehreren unabhängigen Hubs zu haben. Stellen Sie sich vor, dass Robertos Server aus irgendeinem Grund zusammenbricht und er sich dort nicht mehr einloggen kann. Er meldet sich einfach bei einem seiner Klone auf **gadfly.com** an, einer Website, die von seinem Freund Peter betrieben wird. Sobald er sich bei **gadfly.com** authentifiziert hat, kann Roberto Jaquelinas Blog wie zuvor ansehen, ohne dass Jaquelina zusätzlichen Zugang gewähren muss! + +#### Kommunikation + +Kommunikation und soziale Netzwerke sind ein wesentlicher Bestandteil des Grids. Jeder Kanal (und jeder Dienst, der von diesem Kanal bereitgestellt wird) kann die funktionsreiche soziale Kommunikation auf globaler Ebene in vollem Umfang nutzen. Diese Kommunikation kann öffentlich oder privat sein - und private Kommunikation umfasst nicht nur einen vollständig verschlüsselten Transport, sondern auch eine verschlüsselte Speicherung zum Schutz vor versehentlichem Schnüffeln und Offenlegung durch unseriöse Systemadministratoren und Internetdienstanbieter. + +Nomad unterstützt eine breite Palette von Hintergrunddiensten im Grid, von Freundschaftsvorschlägen bis hin zu Verzeichnisdiensten. Neue Inhalte und Datenaktualisierungen werden im Hintergrund zwischen den Hubs im gesamten Grid gemäß den Zugriffskontrolllisten und den von den *Sender- und* Empfängerkanälen festgelegten Berechtigungen weitergegeben. Die Daten werden auch zwischen einer beliebigen Anzahl von Kanalklonen synchronisiert, so dass Hub-Mitglieder auch dann auf Daten zugreifen und nahtlos weiter zusammenarbeiten können, wenn ihr primärer Hub nicht erreichbar oder offline ist. + +#### Identität + +Die Identitätsschicht von Nomad ist einzigartig. Sie bietet ein **unsichtbares Single Sign-On** für alle Standorte im Grid. + +Sie bietet auch eine **nomadische Identität**, so dass Ihre Kommunikation mit Freunden, Familie oder anderen Personen, mit denen Sie kommunizieren, nicht durch den Verlust Ihres primären Kommunikationsknotens beeinträchtigt wird - weder vorübergehend noch dauerhaft. + +Die wichtigen Teile Ihrer Identität und Ihrer Beziehungen können auf einem USB-Stick oder Ihrem Laptop gesichert werden und jederzeit an einem beliebigen Knoten im Netz erscheinen - mit all Ihren Freunden und Vorlieben. + +Entscheidend ist, dass diese nomadischen Instanzen synchron gehalten werden, so dass jede Instanz übernehmen kann, wenn eine andere gefährdet oder beschädigt ist. Dies schützt Sie nicht nur vor größeren Systemausfällen, sondern auch vor vorübergehender Überlastung der Website und staatlicher Manipulation oder Zensur. + +Wir sind der Meinung, dass die nomadische Identität, die einmalige Anmeldung und die Dezentralisierung von Hubzilla ein hohes Maß an **Widerstandsfähigkeit** und **Beständigkeit** in die Internetkommunikation einbringen, die angesichts der weltweiten Tendenzen zur Zentralisierung von Unternehmen sowie der massenhaften und wahllosen staatlichen Überwachung und Zensur dringend benötigt werden. + +Beim Durchsuchen des Netzes, beim Anzeigen von Kanälen und deren einzigartigen Inhalten, werden Sie nahtlos authentifiziert, sogar über völlig unterschiedliche Server-Hubs hinweg. Sie müssen keine Passwörter eingeben. Sie müssen nichts eintippen. Sie werden auf jeder neuen Seite, die Sie besuchen, einfach mit Ihrem Namen begrüßt. + +Wie funktioniert das bei Nomad? Wir nennen es **„magic-auth“**, weil Hubzilla die Details der Komplexität von Single-Sign-On-Logins und nomadischen Identitäten vor dem Surfen im Netz verbirgt. Dies ist eines der Designziele von Hubzilla: die Privatsphäre und die Freiheit im Internet zu erhöhen und gleichzeitig die Komplexität und die Langeweile zu reduzieren, die durch die Notwendigkeit entstehen, für jeden Besuch im Internet neue Passwörter und Anmeldenamen einzugeben. Sie melden sich nur einmal auf Ihrem Home-Hub (oder einem von Ihnen gewählten nomadischen Backup-Hub) an. Dadurch können Sie auf alle authentifizierten Dienste zugreifen, die überall im Netz angeboten werden - wie Einkaufen, Blogs, Foren und Zugang zu privaten Informationen. Ihr Passwort wird nicht auf tausend verschiedenen Websites gespeichert, sondern auf Servern, die Sie kontrollieren oder denen Sie vertrauen. + +Sie können nicht zum Schweigen gebracht werden. Sie können nicht aus dem Netz entfernt werden, es sei denn, Sie selbst entscheiden sich dafür, es zu verlassen. + +#### Zugangskontrolle + +Die Identitätsschicht von Nomad ermöglicht es Ihnen, fein abgestufte Berechtigungen für jeden Inhalt zu vergeben, den Sie veröffentlichen möchten - und diese Berechtigungen erstrecken sich über das gesamte Grid. Das ist so, als hätte man eine riesige Website, die aus einer Armee kleiner individueller Websites besteht - und bei der jeder Kanal im Grid seine Datenschutz- und Freigabepräferenzen für alle von ihm erstellten Webressourcen vollständig kontrollieren kann. + +Derzeit unterstützt Hubzilla die Zugriffskontrolle für viele Datentypen, darunter Diskussionsbeiträge und -kommentare, Fotoalben, Veranstaltungen, Cloud-Dateien, Webseiten, Wikis und mehr. Jedes Objekt und die Art und Weise, wie und mit wem es geteilt wird, unterliegt vollständig Ihrer Kontrolle. + +Diese Art der Kontrolle ist bei großen Unternehmensanbietern trivial, da sie die Benutzerdatenbank besitzen. Im Grid brauchen Sie keine riesige Benutzerdatenbank auf Ihrem Rechner - denn das Grid **ist** Ihre Benutzerdatenbank. Sie verfügt über eine im Grunde unendliche Kapazität (begrenzt durch die Gesamtzahl der Hubs, die im Internet online sind) und ist auf Hunderte, möglicherweise sogar Millionen von Computern verteilt. + +Der Zugang kann für jede Ressource, jeden Kanal oder jede Gruppe von Kanälen gewährt oder verweigert werden - überall im Grid. Andere können auf Ihre Inhalte zugreifen, wenn Sie es ihnen erlauben, und sie müssen nicht einmal ein Konto in Ihrem Hub haben.
\ No newline at end of file diff --git a/doc/de/developer/nomad_structures.md b/doc/de/developer/nomad_structures.md new file mode 100644 index 000000000..c3f77c8b7 --- /dev/null +++ b/doc/de/developer/nomad_structures.md @@ -0,0 +1,141 @@ +### Nomad-Strukturen + +#### Nomad-Signaturen + +Alle signierten Daten in Nomad werden durch eine RSA-Signaturoperation mit dem privaten Schlüssel des Initiators erzeugt. Das binäre Ergebnis wird dann für den Transport mit base64url kodiert. + +#### Nomad-Verschlüsselung + +Die Verschlüsselung erfolgt derzeit mit AES256CTR. Weitere Algorithmen KÖNNEN unterstützt werden. Ein 32-Oktett-Schlüssel und ein 16-Oktett-Initialisierungsvektor werden nach dem Zufallsprinzip erzeugt. Die gewünschten Daten werden dann mit diesen generierten Zeichenketten verschlüsselt und das Ergebnis base64url-kodiert. Dann wird ein Array erstellt: + +- data + + Die base64url-kodierten verschlüsselten Daten + +- alg + + Der gewählte Algorithmus, in diesem Fall die Zeichenkette „aes256ctr“. + +- key + + Der zufällig erzeugte Schlüssel, RSA-verschlüsselt mit dem öffentlichen Schlüssel des Empfängers, und das Ergebnis base64url-kodiert + +- iv + + Der zufällig erzeugte Initialisierungsvektor, RSA-verschlüsselt mit dem öffentlichen Schlüssel des Empfängers, und das Ergebnis base64url-kodiert + +#### Grundlegendes Nomad-Paket + +Wird verwendet, um einen Dialog mit einer anderen Nomad-Site einzuleiten. Dieses Paket KANN verschlüsselt sein. Das Vorhandensein eines Array-Elements 'iv' zeigt an, dass eine Verschlüsselung vorgenommen wurde. Beim Senden eines 'auth_check'-Pakets MUSS dieses Paket verschlüsselt werden, wobei der öffentliche Schlüssel der Zielsite (der Site-Schlüssel, im Gegensatz zu einem Absenderschlüssel) verwendet wird. + +``` + { + "type":"notify", + "sender":{ + "guid":"kgVFf_1_SSbyqH-BNWjWuhAvJ2EhQBTUdw-Q1LwwssAntr8KTBgBSzNVzUm9_RwuDpxI6X8me_QQhZMf7RfjdA", + "guid_sig":"PT9-TApzpm7QtMxC63MjtdK2nUyxNI0tUoWlOYTFGke3kNdtxSzSvDV4uzq_7SSBtlrNnVMAFx2_1FDgyKawmqVtRPmT7QSXrKOL2oPzL8Hu_nnVVTs_0YOLQJJ0GYACOOK-R5874WuXLEept5-KYg0uShifsvhHnxnPIlDM9lWuZ1hSJTrk3NN9Ds6AKpyNRqf3DUdz81-Xvs8I2kj6y5vfFtm-FPKAqu77XP05r74vGaWbqb1r8zpWC7zxXakVVOHHC4plG6rLINjQzvdSFKCQb5R_xtGsPPfvuE24bv4fvN4ZG2ILvb6X4Dly37WW_HXBqBnUs24mngoTxFaPgNmz1nDQNYQu91-ekX4-BNaovjDx4tP379qIG3-NygHTjFoOMDVUvs-pOPi1kfaoMjmYF2mdZAmVYS2nNLWxbeUymkHXF8lT_iVsJSzyaRFJS1Iqn7zbvwH1iUBjD_pB9EmtNmnUraKrCU9eHES27xTwD-yaaH_GHNc1XwXNbhWJaPFAm35U8ki1Le4WbUVRluFx0qwVqlEF3ieGO84PMidrp51FPm83B_oGt80xpvf6P8Ht5WvVpytjMU8UG7-js8hAzWQeYiK05YTXk-78xg0AO6NoNe_RSRk05zYpF6KlA2yQ_My79rZBv9GFt4kUfIxNjd9OiV1wXdidO7Iaq_Q", + "url":"http:\/\/podunk.edu", + "url_sig":"T8Bp7j5DHHhQDCFcAHXfuhUfGk2P3inPbImwaXXF1xJd3TGgluoXyyKDx6WDm07x0hqbupoAoZB1qBP3_WfvWiJVAK4N1FD77EOYttUEHZ7L43xy5PCpojJQmkppGbPJc2jnTIc_F1vvGvw5fv8gBWZvPqTdb6LWF6FLrzwesZpi7j2rsioZ3wyUkqb5TDZaNNeWQrIEYXrEnWkRI_qTSOzx0dRTsGO6SpU1fPWuOOYMZG8Nh18nay0kLpxReuHCiCdxjXRVvk5k9rkcMbDBJcBovhiSioPKv_yJxcZVBATw3z3TTE95kGi4wxCEenxwhSpvouwa5b0hT7NS4Ay70QaxoKiLb3ZjhZaUUn4igCyZM0h6fllR5I6J_sAQxiMYD0v5ouIlb0u8YVMni93j3zlqMWdDUZ4WgTI7NNbo8ug9NQDHd92TPmSE1TytPTgya3tsFMzwyq0LZ0b-g-zSXWIES__jKQ7vAtIs9EwlPxqJXEDDniZ2AJ6biXRYgE2Kd6W_nmI7w31igwQTms3ecXe5ENI3ckEPUAq__llNnND7mxp5ZrdXzd5HHU9slXwDShYcW3yDeQLEwAVomTGSFpBrCX8W77n9hF3JClkWaeS4QcZ3xUtsSS81yLrp__ifFfQqx9_Be89WVyIOoF4oydr08EkZ8zwlAsbZLG7eLXY" + "sitekey":"-----BEGIN PUBLIC KEY----- +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxTeIwXZWrw/S+Ju6gewh +LgkKnNNe2uCUqCqMZoYgJar3T5sHCDhvXc4dDCbDkxVIaA/+V1mURtBV60a3IGjn +OAO0W0XGGLe2ED7G5o9U8T9mVGq8Mauv0v1oQ5wIR1gEAhBavkQ2OUGuF/YKn2nj +HlKsv9HzUAHpcDMUe3Uklc2RhQbMcnJxEgkyjCkDyrTtCZzISkTAocHvpCG1KSog +njUZdiz9UWxvM4rCFkCJvQU4RwRZJb7GA9ul+9JrF7NvUQTx8csRP2weBk1E9yyj +wbe187E0eVj9RXX2Mx3mYhgrTdodxLOVMSXZLg1/SMpeFFl7QBhuM0SiOPg8a7Et +e2iNA/RD4WiUFqCDfafasRa1TOozOm7LA+08lkAh5PeQPJsJbrX0wVVft++Y+5/z +BvcUOP73vcbz7j5hJ7HLsbQtye/UUCfODBFybuDqRM84Aet8rjZohX7vukXdMD4I +2HuB7pjR4uIfyYr0J63ANkvbsn8LR+RnirmHrK5H/OgxxjXcfYbGEQgFxvxhF6lA +FpMu6Do4dx3CIb6pRmZ8bjSImXexJ0BSo9n3gtrz0XYLecsYFlQ9+QQjm83qxyLb +M23in0xqMVsyQvzjNkpImrO/QdbEFRIIMee83IHq+adbyjQR49Z2hNEIZhkLPc3U +2cJJ2HkzkOoF2K37qwIzk68CAwEAAQ== +-----END PUBLIC KEY----- +" + }, + "recipients":{ + { + "guid":"lql-1VnxtiO4-WF0h72wLX1Fu8szzHDOXgQaTbELwXW77k8AKFfh-hYr70vqMrc3SSvWN-Flrc5HFhRTWB7ICw", + "guid_sig":"PafvEL0VpKfxATxlCqDjfOeSIMdmpr3iU7X-Sysa1h5LzDpjSXsjO37tYZL-accb1M5itLlfnW5epkTa5I4flsW21zSY1A2jCuBQUTLLGV7rNyyBy7lgqJUFvAMRx0TfXzP9lcaPqlM9T1tA6jfWOsOmkdzwofGeXBnsjGfjsO2xdGYe6vwjOU0DSavukvzDMnOayB9DekpvDnaNBTxeGLM45Skzr7ZEMcNF7TeXMbnvpfLaALYEKeQs9bGH-UgAG8fBWgzVAzeBfx_XSR1rdixjyiZGP0kq0h35SlmMPcEjliodOBFwMXqpXFB7Ibp4F6o6te2p2ErViJccQVG8VNKB6SbKNXY6bhP5zVcVsJ-vR-p4xXoYJJvzTN7yTDsGAXHOLF4ZrXbo5yi5gFAlIrTLAF2EdWQwxSGyLRWKxG8PrDkzEzX6cJJ0VRcLh5z6OI5QqQNdeghPZbshMFMJSc_ApCPi9_hI4ZfctCIOi3T6bdgTNKryLm5fhy_eqjwLAZTGP-aUBgLZpb1mf2UojBn6Ey9cCyq-0T2RWyk-FcIcbV4qJ-p_8oODqw13Qs5FYkjLr1bGBq82SuolkYrXEwQClxnrfKa4KYc2_eHAXPL01iS9zVnI1ySOCNJshB97Odpooc4wk7Nb2Fo-Q6THU9zuu0uK_-JbK7IIl6go2qA" + }, + }, + "callback":"\/post", + "version":"1.2", + "encryption":{ + "aes256ctr" + }, + "secret":"1eaa6613699be6ebb2adcefa5379c61a3678aa0df89025470fac871431b70467", + "secret_sig":"0uShifsvhHnxnPIlDM9lWuZ1hSJTrk3NN9Ds6AKpyNRqf3DUdz81-Xvs8I2kj6y5vfFtm-FPKAqu77XP05r74vGaWbqb1r8zpWC7zxXakVVOHHC4plG6rLINjQzvdSFKCQb5R_xtGsPPfvuE24bv4fvN4ZG2ILvb6X4Dly37WW_HXBqBnUs24mngoTxFaPgNmz1nDQNYQu91-ekX4-BNaovjDx4tP379qIG3-NygHTjFoOMDVUvs-pOPi1kfaoMjmYF2mdZAmVYS2nNLWxbeUymkHXF8lT_iVsJSzyaRFJS1Iqn7zbvwH1iUBjD_pB9EmtNmnUraKrCU9eHES27xTwD-yaaH_GHNc1XwXNbhWJaPFAm35U8ki1Le4WbUVRluFx0qwVqlEF3ieGO84PMidrp51FPm83B_oGt80xpvf6P8Ht5WvVpytjMU8UG7-js8hAzWQeYiK05YTXk-78xg0AO6NoNe_RSRk05zYpF6KlA2yQ_My79rZBv9GFt4kUfIxNjd9OiV1wXdidO7Iaq_Q" + } +``` + +type + +Der Nachrichtentyp: **notify, purge, refresh, force_refresh, auth_check, ping** oder **pickup**. Der Inhalt der Pakete variiert je nach Nachrichtentyp. Hier wird das **notify-Paket** beschrieben. + + + +callback + +Eine Zeichenkette, die an die URL angehängt wird und den Nomad-Kommunikationsendpunkt auf diesem System identifiziert. In der Regel ist dies die Zeichenfolge „/post“. + + + +version + +Die Kennung des Nomad-Protokolls, damit künftige Protokollrevisionen nebeneinander bestehen können. + + + +encryption + +Array der unterstützten Verschlüsselungsalgorithmen, geordnet nach abnehmender Präferenz. Wenn keine kompatiblen Verschlüsselungsmethoden angegeben sind, MÜSSEN Anwendungen „aes256cbc“ verwenden. + + + +secret + +Eine 64-stellige Zeichenkette, die von der sendenden Seite zufällig generiert wird. + + + +secret_sig + +Die RSA-Signatur des Geheimnisses, signiert mit dem privaten Schlüssel des Absenders. + + + +sender + +Ein Array aus vier Komponenten, die eine tragbare Identität liefern. Wir können die angegebene URL kontaktieren und ein Nomad-Infopaket herunterladen, um den öffentlichen Schlüssel des Absenders zu erhalten, und diesen zur Überprüfung der Absender-Guid und der Signaturen der Entsende-URL verwenden. + +- guid + + In der Regel eine 64 Zeichen lange base64url-kodierte Zeichenfolge. Sie wird erzeugt, wenn eine Identität erstellt wird, und es wird versucht, dass sie eindeutig ist; dies ist jedoch nicht erforderlich. + +- guid_sig + + Die RSA-Signatur der guid, signiert mit dem privaten Schlüssel des Absenders und base64url-kodiert. + +- url + + Die Basis-URL des Ortes, von dem dieser Beitrag stammt. + +- url_sig + + Die RSA-Signatur der url, signiert mit dem privaten Schlüssel des Absenders und base64url kodiert. + +- sitekey + + Der öffentliche Schlüssel der in der Url angegebenen Website + +recipients + +Wird nur für private Nachrichten verwendet. Ein Array von Umschlag-Empfängern. Jeder Empfänger wird durch ein Array aus guid und guid_sig dargestellt. Wenn Empfänger angegeben sind, wird das gesamte Paket auch mit einem ausgehandelten kryptografischen Algorithmus oder 'aes256cbc' gekapselt, wenn keiner ausgehandelt werden konnte. + +- guid + + Die guid eines privaten Empfängers. + +- guid_sig + + Die RSA-Signatur der guid, signiert mit dem privaten Schlüssel des Empfängers und base64url-kodiert
\ No newline at end of file diff --git a/doc/de/developer/our_pledge.md b/doc/de/developer/our_pledge.md new file mode 100644 index 000000000..0a8c17349 --- /dev/null +++ b/doc/de/developer/our_pledge.md @@ -0,0 +1,3 @@ +#### Unser Versprechen + +Im Interesse der Förderung eines offenen und einladenden Umfelds verpflichten wir uns als Mitwirkende und Betreuer, die Teilnahme an unserem Projekt und unserer Gemeinschaft zu einer belästigungsfreien Erfahrung für jeden zu machen, unabhängig von Alter, Körpergröße, Behinderung, ethnischer Zugehörigkeit, Geschlechtsidentität und -ausdruck, Erfahrungsniveau, Nationalität, persönlichem Aussehen, Ethnie, Religion oder sexueller Identität und Orientierung.
\ No newline at end of file diff --git a/doc/de/developer/our_responsibilities.md b/doc/de/developer/our_responsibilities.md new file mode 100644 index 000000000..32acdbf07 --- /dev/null +++ b/doc/de/developer/our_responsibilities.md @@ -0,0 +1,3 @@ +#### Unsere Verantwortlichkeiten + +Die Projektbetreuer sind dafür verantwortlich, die Standards für akzeptables Verhalten zu klären, und es wird von ihnen erwartet, dass sie angemessene und faire Korrekturmaßnahmen ergreifen, wenn ein inakzeptables Verhalten festgestellt wird. Die Projektbetreuer haben das Recht und die Verantwortung, Kommentare, Commits, Code, Wiki-Edits, Issues und andere Beiträge, die nicht mit diesem Verhaltenskodex übereinstimmen, zu entfernen, zu bearbeiten oder abzulehnen, oder Beiträge, die sie als unangemessen, bedrohlich, beleidigend oder schädlich erachten, vorübergehend oder dauerhaft zu verbieten.
\ No newline at end of file diff --git a/doc/de/developer/our_standards.md b/doc/de/developer/our_standards.md new file mode 100644 index 000000000..f745d29d4 --- /dev/null +++ b/doc/de/developer/our_standards.md @@ -0,0 +1,24 @@ +#### Unsere Standards + +Beispiele für Verhaltensweisen, die zur Schaffung eines positiven Umfelds beitragen +umfassen: + +- Eine einladende und integrative Sprache verwenden + +- Respekt vor unterschiedlichen Standpunkten und Erfahrungen + +- Konstruktive Kritik anständig annehmen + +- Sich auf das konzentrieren, was für die Gemeinschaft am besten ist + +- Einfühlungsvermögen gegenüber anderen Mitgliedern der Gemeinschaft zeigen + + + +Beispiele für inakzeptables Verhalten von Teilnehmern sind: + +- Die Verwendung sexualisierter Sprache oder Bilder und unerwünschte sexuelle Aufmerksamkeit oder Annäherungsversuche +- Trolling, beleidigende/abwertende Kommentare und persönliche oder politische Angriffe +- Öffentliche oder private Belästigung +- Veröffentlichung privater Informationen anderer, wie z. B. einer physischen oder elektronischen Adresse, ohne ausdrückliche Erlaubnis +- sonstiges Verhalten, das in einem beruflichen Umfeld als unangemessen angesehen werden könnte
\ No newline at end of file diff --git a/doc/de/developer/scope.md b/doc/de/developer/scope.md new file mode 100644 index 000000000..03c71d1dd --- /dev/null +++ b/doc/de/developer/scope.md @@ -0,0 +1,3 @@ +#### Geltungsbereich + +Dieser Verhaltenskodex gilt sowohl innerhalb der Projektbereiche als auch im öffentlichen Umfeld, wenn eine Person das Projekt oder seine Gemeinschaft vertritt. Beispiele für das Repräsentieren eines Projekts oder einer Gemeinschaft sind die Verwendung einer offiziellen Projekt-E-Mail-Adresse, das Posten über ein offizielles Social-Media-Konto oder das Handeln als ernannter Vertreter bei einer Online- oder Offline-Veranstaltung. Die Repräsentation eines Projekts kann von den Projektbetreuern weiter definiert und präzisiert werden.
\ No newline at end of file diff --git a/doc/de/developer/technical_introduction.md b/doc/de/developer/technical_introduction.md new file mode 100644 index 000000000..320544ce0 --- /dev/null +++ b/doc/de/developer/technical_introduction.md @@ -0,0 +1,309 @@ +### Technische Einführung + +Nomad ist ein JSON-basiertes Web-Framework zur Implementierung sicherer dezentraler Kommunikation und Dienste. Um diese Funktionalität bereitzustellen, erstellt Nomad eine dezentralisierte, weltweit eindeutige Kennung für jeden Knotenpunkt im Netz. Dieser globale Identifikator ist nicht untrennbar mit dem DNS verbunden, wodurch die erforderliche Mobilität gewährleistet wird. Viele der bestehenden dezentralen Kommunikationsrahmen bieten zwar den Kommunikationsaspekt, aber keine Fernzugriffskontrolle und Authentifizierung. Außerdem basieren die meisten dieser Systeme auf dem „Webfinger“, der die Identität immer noch an Domänennamen bindet und keine nomadische Identität unterstützen kann. + +Die Hauptprobleme, die Nomad angeht, sind + +- vollständig dezentralisierte Kommunikation +- Unabhängigkeit von DNS-basierter Identität +- Knotenmobilität +- nahtlose Fernauthentifizierung +- hohe Leistung + +Wir werden uns auf DNS-basierte user@host-Adressen als „benutzerfreundlichen“ Mechanismus stützen, um anderen mitzuteilen, wo man sich befindet, nämlich auf einem benannten Host mit einem bestimmten Benutzernamen, und die Kommunikation mit DNS-Entitäten wird über TCP und das Web abgewickelt. + +Das zugrundeliegende Protokoll bietet jedoch eine Abstraktionsschicht darüber, so dass ein Kommunikationsknoten (z. B. „Identität“) zu einem anderen DNS-Standort wechseln kann und sich (nach bestem Wissen und Gewissen) von Standortwechseln erholt und/oder bereits bestehende Kommunikationsbeziehungen aufrechterhält. Ein Nebeneffekt dieser Anforderung ist die Möglichkeit, von alternativen/mehreren DNS-Standorten und Dienstanbietern aus zu kommunizieren und dennoch eine einzige Online-Identität beizubehalten. + +Wir nennen dieses Overlay-Netz das „Grid“. Die an dieses Netz angeschlossenen Server werden als „Hubs“ bezeichnet und können eine beliebige Anzahl von individuellen Identitäten unterstützen. + +Eine Identität muss nicht unbedingt mit einer Person übereinstimmen. Sie ist lediglich etwas, das die Fähigkeit erfordert, innerhalb des Netzes zu kommunizieren. + +Die Fähigkeit zur Wiederherstellung wird durch Kommunikation mit dem ursprünglichen Standort erreicht, wenn eine neue oder Ersatzidentität erstellt wird, oder als Rückgriff auf eine gespeicherte Datei, die die Identität und ihre Kontakte beschreibt, für den Fall, dass der alte Standort nicht mehr antwortet. + +Zumindest kurzfristig hat die Mobilität bestehender Inhalte nicht die höchste Priorität. Dies kann zu einem späteren Zeitpunkt geschehen oder auch nicht. Die wichtigsten Dinge, die wir behalten wollen, sind Ihre Identität und Ihre Freunde. + +Adressen, die von mehreren Personen gemeinsam genutzt werden, sind user@host und beschreiben die **aktuellen** lokalen Zugangsdaten für eine bestimmte Identität. Es handelt sich um DNS-basierte Adressen, die als Seed verwendet werden, um eine bestimmte Identität innerhalb des Netzes zu lokalisieren. Die Maschinenkommunikation bindet diese Adresse an eine weltweit eindeutige ID. Eine einzelne, weltweit eindeutige ID kann an eine beliebige Anzahl von DNS-Standorten angehängt oder gebunden werden. Sobald eine Identität einem DNS-Standort zugeordnet oder an diesen gebunden ist, besteht die Kommunikation nur noch aus der Kenntnis der weltweit eindeutigen Adresse und des derzeit verwendeten DNS (url) (um die aktuelle Kommunikation zurückzurufen und zu überprüfen/abzuschließen). Diese Konzepte werden in Zukunft noch genauer spezifiziert. + +Damit eine Identität über Standorte hinweg bestehen bleibt, muss man in der Lage sein, Folgendes bereitzustellen oder wiederherzustellen + + + +- die weltweit eindeutige ID für diese Identität +- den dieser Identität zugewiesenen privaten Schlüssel +- (falls der ursprüngliche Server nicht mehr existiert) ein Adressbuch mit Kontakten für diese Identität. + +Diese Informationen können vom ursprünglichen Server über eine API exportiert und/oder auf eine Festplatte oder einen USB-Stick heruntergeladen werden. + +Wir können auch versuchen, die Identität mit noch weniger Informationen wiederherzustellen, aber dies ist anfällig für Account-Hijacking und erfordert, dass Ihre Kontakte die Änderung bestätigen. + +Um eine hochleistungsfähige Kommunikation zu ermöglichen, ist das Datenübertragungsformat für alle Aspekte von Nomad JSON. XML-Kommunikation erfordert viel zu viel Overhead. + +Die bidirektionale Verschlüsselung basiert auf RSA-Schlüsseln mit 4096 Bit, die im DER/ASN.1-Format unter Verwendung der PKCS#8-Kodierungsvariante ausgedrückt werden, mit AES-Verschlüsselung von Elementen mit variabler Länge oder großen Elementen. Die genauen Verschlüsselungsalgorithmen sind zwischen den Standorten verhandelbar. + +Einige Aspekte der bekannten „Föderationsprotokolle“ (Webfinger, Salmon, Activitystreams, Portablecontacts usw.) können in Nomad verwendet werden, aber wir sind nicht an sie gebunden und werden auch nicht an sie gebunden sein. Das Hubzilla-Projekt versucht einige ziemlich neuartige Entwicklungen im Bereich der dezentralen Kommunikation, und wenn es notwendig sein sollte, von solchen „Standardprotokollen“ abzuweichen, werden wir dies ohne Fragen oder Zögern tun. + +Um eine weltweit eindeutige ID zu erstellen, werden wir sie auf einem Whirlpool-Hash der Identitäts-URL des Ursprungsknotens und einer Pseudo-Zufallszahl basieren, was uns eine 256-Bit-ID mit einer extrem geringen Kollisionswahrscheinlichkeit liefern sollte (256 Bits entsprechen ungefähr 115 Quattuorviginitillionen oder 1,16 X 10^77 eindeutigen Zahlen). Diese wird in der Kommunikation als base64url-kodierte Zeichenfolge dargestellt. Wir werden uns jedoch nicht auf Wahrscheinlichkeiten verlassen, und die ID muss auch mit einem öffentlichen Schlüssel verbunden sein, wobei die Kryptographie mit öffentlichem Schlüssel verwendet wird, um eine Identitätsgarantie zu bieten, die nicht kopiert oder irgendwie im Whirlpool-Hash-Raum kollidiert wurde. + +Durch die Verwendung der DNS als Grundlage für die ID wird ein weltweit eindeutiger Seed bereitgestellt, was nicht der Fall wäre, wenn die ID vollständig auf einer Pseudo-Zufallszahlengenerierung basieren würde. + +Wir bezeichnen die kodierte, weltweit eindeutige uid-Zeichenkette als zot_uid + +Da es mehr als einen DNS-Standort geben kann, der mit einer bestimmten zot_uid-Identität verknüpft/verbunden ist, sollten die Zustellungsprozesse an alle diese Standorte liefern, da wir nicht mit Sicherheit wissen, auf welche Hub-Instanz zu einem bestimmten Zeitpunkt zugegriffen werden kann. Wir werden jedoch einen DNS-Standort als „primär“ bezeichnen, der der bevorzugte Standort für die Anzeige von Webprofilinformationen sein wird. + +Wir müssen auch die Möglichkeit bieten, den primären Standort auf einen neuen Standort zu ändern. Ein Nachschlagen von Informationen über den aktuellen primären Standort kann einen „Weiterleitungszeiger“ liefern, der uns anweist, unsere Einträge zu aktualisieren und alles an den neuen Standort zu verschieben. Es besteht auch die Möglichkeit, dass der Hauptstandort nicht mehr existiert und nicht mehr antwortet. In diesem Fall kann ein Ort, der bereits dieser zot_uid zugeordnet ist, die Kontrolle übernehmen und sich selbst als primär deklarieren. In beiden Fällen wird die primäre Bezeichnung automatisch bestätigt und verschoben. Es kann auch ein Antrag von einem primären Standort gestellt werden, der die Entfernung eines anderen Standorts verlangt. + +Um eine zot_uid einem zweiten (oder tertiären) Standort zuzuordnen, ist ein sicherer Austausch erforderlich, bei dem überprüft wird, ob der neue Standort im Besitz des privaten Schlüssels für diese zot_uid ist. Die Sicherheit des privaten Schlüssels ist daher von grundlegender Bedeutung, um ein Hijacking von Identitäten zu verhindern. + +Die Kommunikation erfordert dann + +- zot_uid (Zeichenfolge) +- uid_sig +- callback (aktueller Standort Nomad-Endpunkt url) +- callback_sig +- spec (int) + +wird mit jeder Mitteilung übergeben. Bei spec handelt es sich um eine Revisionsnummer der geltenden Nomad-Spezifikation, damit die Kommunikation mit Hubs, die ältere und möglicherweise inkompatible Protokollspezifikationen verwenden, aufrechterhalten werden kann. Die Kommunikation wird mit Hilfe eines gespeicherten öffentlichen Schlüssels verifiziert, der beim ersten Aufbau der Verbindung zu dieser zot_uid kopiert wurde. + +Der Widerruf und Ersatz des Schlüssels muss vom primären Hub aus erfolgen. Die genaue Form hierfür wird noch ausgearbeitet, wird aber wahrscheinlich eine Benachrichtigung an alle anderen gebundenen Hubs sein, um „nach Hause zu telefonieren“ (zum primären Hub) und eine Kopie des neuen Schlüssels anzufordern. Diese Mitteilung sollte mit einem Standort- oder Hub-Schlüssel verifiziert werden, da der ursprüngliche Identitätsschlüssel kompromittiert worden sein könnte und nicht vertrauenswürdig ist. + +Um Verwirrung zu vermeiden, sollte es für jeden Hub genau eine kanonische Url geben, damit diese indiziert und eindeutig referenziert werden kann. + +Um Mehrdeutigkeit des Schemas zu vermeiden, wird dringend empfohlen, dass alle Adressen https mit einem „browser valid“-Zertifikat und einer einzigen gültigen Host-Komponente (entweder www.domain.ext oder domain.ext, aber nicht beides) sein sollten, die in der gesamten Kommunikation verwendet wird. Es können mehrere URLs lokal angegeben werden, aber es sollte nur eine einzige URL für die gesamte Nomad-Kommunikation innerhalb des Grids verwendet werden. + +Testinstallationen, die nicht mit dem öffentlichen Netz verbunden sind, können Nicht-SSL verwenden, aber der gesamte Datenverkehr, der über öffentliche Netze fließt, sollte vor Session-Hijacking geschützt sein, vorzugsweise mit einem „browsererkannten“ Zertifikat. + +Wenn möglich, empfiehlt das Nomadt die Verwendung von „Batching“, um den Netzwerkverkehr zwischen zwei Hubs zu minimieren. Dies bedeutet, dass Standort A„ mehrere Nachrichten an Standort B“ in einer einzigen Transaktion senden kann und auch die Zustellung identischer Nachrichten an mehrere Empfänger im selben Hub konsolidiert werden kann. + +Die Nachrichten selbst können während der Übertragung verschlüsselt werden oder auch nicht, je nach der privaten Natur der Nachrichten. SSL (dringend empfohlen) bietet eine bedingungslose Verschlüsselung des Datenstroms, allerdings macht es wenig Sinn, öffentliche Mitteilungen zu verschlüsseln, die als uneingeschränkt sichtbar eingestuft wurden. Die Verschlüsselung der Datenspeicherung und die sogenannte „Ende-zu-Ende-Verschlüsselung“ liegen außerhalb des Anwendungsbereichs des Nomad. Es wird davon ausgegangen, dass die Betreiber von Knotenpunkten angemessene Sicherheitsvorkehrungen treffen, um die Sicherheit ihrer Datenspeicher zu gewährleisten, und diese sind Funktionen der Anwendungs- und Standortintegrität im Gegensatz zur Protokollintegrität. + + + +#### Nachrichten + +In Anbetracht der zuvor aufgeführten Einschränkungen sollte eine Nomad-Mitteilung daher ein json-Array aus einzelnen Nachrichten sein. Diese können innerhalb der gleichen Übertragung gemischt und kombiniert werden. + +Jede Nachricht erfordert dann: + +- Typ +- (optional) Empfängerliste + +Das Fehlen einer Empfängerliste würde auf eine unverschlüsselte öffentliche Nachricht oder eine Nachricht auf Standortebene hinweisen. Die Empfängerliste würde ein Array von zot_uid mit einem individuellen Entschlüsselungsschlüssel und einer gemeinsamen iv enthalten. Der Entschlüsselungsschlüssel ist mit dem öffentlichen Schlüssel der Empfängeridentität verschlüsselt. Die iv wird mit dem privaten Schlüssel des Absenders verschlüsselt. + +Alle Nachrichten sollten vom Absender digital signiert werden. + +Der Typ kann einer der folgenden sein (diese Liste ist erweiterbar): + +- Post (oder Aktivität) +- Mail +- Identität +- authentifizieren + +Identitätsnachrichten haben keine Empfänger und benachrichtigen den sozialen Graphen des Systems über eine Identitätsaktualisierung, bei der es sich um eine neue oder gelöschte Identität, einen neuen oder gelöschten Standort oder eine Änderung des primären Hubs handeln kann. Die Signatur für diese Nachrichten verwendet Systemschlüssel im Gegensatz zu identitätsspezifischen Schlüsseln. + +Posts umfassen viele verschiedene Arten von Aktivitäten, wie z. B. Top-Level-Posts, Likes/Dislikes, Kommentare, Tagging-Aktivitäten usw. Diese Typen werden in der Nachrichtenstruktur angegeben. + +Authentifizierungsnachrichten führen zu einer gegenseitigen Authentifizierung und einer Browserumleitung zu geschützten Ressourcen auf dem entfernten Hub, wie z. B. die Möglichkeit, Nachrichten von Wand zu Wand zu posten und private Fotoalben und Ereignisse einzusehen, usw. + + + +#### Erkundung + +Eine bekannte URL wird verwendet, um einen Hub auf Nomad-Fähigkeiten und Identitätsabfragen zu untersuchen, einschließlich der Ermittlung von öffentlichen Schlüsseln, Profilstandorten, Profilfotos und dem primären Hub-Standort. + +Der Speicherort für diesen Dienst ist /.well-known/zot-info - und muss im Stammverzeichnis der gewählten Domain verfügbar sein. + +Um eine Abfrage durchzuführen, wird eine POST-Anfrage mit den folgenden Parametern an den Erkennungsort gestellt: + +Erforderlich: + +Adresse => eine Adresse auf dem Zielsystem wie „john“ + +Optional: + +target => die Nomad „guid“ des Beobachters für die Auswertung der Berechtigungen + +target_sig => eine RSA-Signatur (base64url-kodiert) der guid + +key => Der öffentliche Schlüssel, der zur Verifizierung der Signatur benötigt wird + +token => eine vom anfragenden Dienst gewählte Zeichenfolge (möglicherweise zufällig). Falls vorhanden, wird ein Eintrag im entdeckten Paket mit der Bezeichnung „signed_token“ bereitgestellt, der aus der base64url_kodierten RSA-Signatur der Verkettung der Zeichenkette „token.“ und dem bereitgestellten Token unter Verwendung des privaten Schlüssels des entdeckten Kanals besteht. Dies kann mit dem bereitgestellten „key“-Eintrag verifiziert werden und bietet die Sicherheit, dass der Server im Besitz des privaten Schlüssels für die ermittelte Identität ist. Nach dem 01.01.2017 ist es **erforderlich,** dass ein Server ein signed_token bereitstellt *, wenn* ein Token in der Anfrage angegeben wurde. + +Wenn kein Ziel angegeben wird, sind die zurückgegebenen Berechtigungen generische Berechtigungen +für unbekannte oder unauthentifizierte Beobachter + +Beispiel eines Erkennungspakets für '`mike@zothub.com`' + +``` + { + + "success": true, + "signed_token": "KBJrKTq1qrctNuxF3GwVh3GAGRqmgkirlXANPcJZAeWlvSt_9TMV097slR4AYnYCBEushbVqHEJ9Rb5wHTa0HzMbfRo8cRdl2yAirvvv5d98dtwHddQgX1jB0xEypXtmIYMdPGDLvhI1RNdIBhHkkrRcNreRzoy4xD--HM6m1W0-A8PJJJ9BcNxmGPcBtLzW08wzoP9trJ3M7DQ6Gkk6j7iwVsyApw1ZBaDvabGTdc_SFV-Iegtqw3rjzT_xXWsfzMlKBy-019MYn_KS-gu23YzjvGu5tS_zDfkQb8DMUlPLz5yyxM0yOMlUDtG2qQgIJAU2O0X6T5xDdJ6mtolNyhepg845PvFDEqBQGMIH1nc47CNumeudDi8IWymEALhjG_U8KAK7JVlQTJj2EKUb0au1g6fpiBFab5mmxCMtZEX3Jreyak5GOcFFz-WpxuXJD9TdSoIvaBfBFOoJnXkg2zE4RHXeQzZ2FotmrbBG5dm8B-_6byYGoHBc08ZsWze1K96JIeRnLpBaj6ifUDcVHxZMPcGHHT27dvU2PNbgLiBjlAsxhYqkhN5qOHN8XBcg2KRjcMBaI3V0YMxlzXz5MztmZq3fcB1p-ccIoIyMPMzSj3yMB7J9CEU2LYPSTHMdPkIeDE6GaCkQKviaQQJQde346tK_YjA2k7_SOBmvPYE", + "guid": "sebQ-IC4rmFn9d9iu17m4BXO-kHuNutWo2ySjeV2SIW1LzksUkss12xVo3m3fykYxN5HMcc7gUZVYv26asx-Pg", + "guid_sig": "Llenlbl4zHo6-g4sa63MlQmTP5dRCrsPmXHHFmoCHG63BLq5CUZJRLS1vRrrr_MNxr7zob_Ykt_m5xPKe5H0_i4pDj-UdP8dPZqH2fqhhx00kuYL4YUMJ8gRr5eO17vsZQ3XxTcyKewtgeW0j7ytwMp6-hFVUx_Cq08MrXas429ZrjzaEwgTfxGnbgeQYQ0R5EXpHpEmoERnZx77VaEahftmdjAUx9R4YKAp13pGYadJOX5xnLfqofHQD8DyRHWeMJ4G1OfWPSOlXfRayrV_jhnFlZjMU7vOdQwHoCMoR5TFsRsHuzd-qepbvo3pzvQZRWnTNu6oPucgbf94p13QbalYRpBXKOxdTXJrGdESNhGvhtaZnpT9c1QVqC46jdfP0LOX2xrVdbvvG2JMWFv7XJUVjLSk_yjzY6or2VD4V6ztYcjpCi9d_WoNHruoxro_br1YO3KatySxJs-LQ7SOkQI60FpysfbphNyvYMkotwUFI59G08IGKTMu3-GPnV1wp7NOQD1yzJbGGEGSEEysmEP0SO9vnN45kp3MiqbffBGc1r4_YM4e7DPmqOGM94qksOcLOJk1HNESw2dQYWxWQTBXPfOJT6jW9_crGLMEOsZ3Jcss0XS9KzBUA2p_9osvvhUKuKXbNztqH0oZIWlg37FEVsDs_hUwUJpv2Ar09k4", + "key": "-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA7QCwvuEIwCHjhjbpz3Oc\ntyei/Pz9nDksNbsc44Cm8jxYGMXsTPFXDZYCcCB5rcAhPPdZSlzaPkv4vPVcMIrw\n5cdX0tvbwa3rNTng6uFE7qkt15D3YCTkwF0Y9FVZiZ2Ko+G23QeBt9wqb9dlDN1d\nuPmu9BLYXIT/JXoBwf0vjIPFM9WBi5W/EHGaiuqw7lt0qI7zDGw77yO5yehKE4cu\n7dt3SakrXphL70LGiZh2XGoLg9Gmpz98t+gvPAUEotAJxIUqnoiTA8jlxoiQjeRK\nHlJkwMOGmRNPS33awPos0kcSxAywuBbh2X3aSqUMjcbE4cGJ++/13zoa6RUZRObC\nZnaLYJxqYBh13/N8SfH7d005hecDxWnoYXeYuuMeT3a2hV0J84ztkJX5OoxIwk7S\nWmvBq4+m66usn6LNL+p5IAcs93KbvOxxrjtQrzohBXc6+elfLVSQ1Rr9g5xbgpub\npSc+hvzbB6p0tleDRzwAy9X16NI4DYiTj4nkmVjigNo9v2VPnAle5zSam86eiYLO\nt2u9YRqysMLPKevNdj3CIvst+BaGGQONlQalRdIcq8Lin+BhuX+1TBgqyav4XD9K\nd+JHMb1aBk/rFLI9/f2S3BJ1XqpbjXz7AbYlaCwKiJ836+HS8PmLKxwVOnpLMbfH\nPYM8k83Lip4bEKIyAuf02qkCAwEAAQ==\n-----END PUBLIC KEY-----\n", + "name": "Mike Macgirvin", + "name_updated": "2012-12-06 04:59:13", + "address": "mike@zothub.com", + "photo_mimetype": "image/jpeg", + "photo": "https://zothub.com/photo/profile/l/1", + "photo_updated": "2012-12-06 05:06:11", + "url": "https://zothub.com/channel/mike", + "connections_url": "https://zothub.com/poco/mike", + "target": "", + "target_sig": "", + "searchable": false, + "permissions": { + "view_stream": true, + "view_profile": true, + "view_photos": true, + "view_contacts": true, + "view_storage": true, + "view_pages": true, + "send_stream": false, + "post_wall": false, + "post_comments": false, + "post_mail": false, + "post_photos": false, + "tag_deliver": false, + "chat": false, + "write_storage": false, + "write_pages": false, + "delegate": false + }, + "profile": { + "description": "Freedom Fighter", + "birthday": "0000-05-14", + "next_birthday": "2013-05-14 00:00:00", + "gender": "Male", + "marital": "It's complicated", + "sexual": "Females", + "locale": "", + "region": "", + "postcode": "", + "country": "Australia" + }, + "locations": [ + { + "host": "zothub.com", + "address": "mike@zothub.com", + "primary": true, + "url": "https://zothub.com", + "url_sig": "eqkB_9Z8nduBYyyhaSQPPDN1AhSm5I4R0yfcFxPeFpuu17SYk7jKD7QzvmsyahM5Kq7vDW6VE8nx8kdFYpcNaurqw0_IKI2SWg15pGrhkZfrCnM-g6A6qbCv_gKCYqXvwpSMO8SMIO2mjQItbBrramSbWClUd2yO0ZAceq3Z_zhirCK1gNm6mGRJaDOCuuTQNb6D66TF80G8kGLklv0o8gBfxQTE12Gd0ThpUb5g6_1L3eDHcsArW_RWM2XnNPi_atGNyl9bS_eLI2TYq0fuxkEdcjjYx9Ka0-Ws-lXMGpTnynQNCaSFqy-Fe1aYF7X1JJVJIO01LX6cCs-kfSoz29ywnntj1I8ueYldLB6bUtu4t7eeo__4t2CUWd2PCZkY3PKcoOrrnm3TJP5_yVFV_VpjkcBCRj3skjoCwISPcGYrXDufJxfp6bayGKwgaCO6QoLPtqqjPGLFm-fbn8sVv3fYUDGilaR3sFNxdo9mQ3utxM291XE2Pd0jGgeUtpxZSRzBuhYeOybu9DPusID320QbgNcbEbEImO8DuGIxuVRartzEXQF4WSYRdraZzbOqCzmU0O55P836JAfrWjgxTQkXlYCic-DBk-iE75JeT72smCtZ4AOtoFWCjZAABCw42J7JELY9APixZXWriKtjy6JI0G9d3fs6r7SrXr1JMy0", + "callback": "https://zothub.com/post", + "sitekey": "-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA1IWXwd/BZuevq8jzNFoR\n3VkenduQH2RpR3Wy9n4+ZDpbrUKGJddUGm/zUeWEdKMVkgyllVA/xHdB7jdyKs1X\nuIet9mIdnzvhdLO/JFD5hgbNG2wpSBIUY6aSNeCFTzszqXmuSXMW5U0Ef5pCbzEA\nnhoCoGL1KAgPqyxnGKUlj7q2aDwC9IRNtAqNyFQL67oT91vOQxuMThjlDhbR/29Q\ncYR4i1RzyahgEPCnHCPkT2GbRrkAPjNZAdlnk9UesgP16o8QB3tE2j50TVrbVc/d\nYRbzC56QMPP9UgUsapNeSJBHji75Ip/E5Eg/kfJC/HEQgyCqjCGfb7XeUaeQ7lLO\nqc7CGuMP+Jqr/cE54/aSHg8boTwxkMp11Ykb+ng17fl57MHTM2RJ99qZ1KBkXezR\nuH1lyvjzeJPxEFr9rkUqc4GH74/AgfbgaFvQc8TS7ovEa5I/7Pg04m7vLSEYc6UF\nYJYxXKrzmZT2TDoKeJzaBBx5MFLhW19l68h9dQ8hJXIpTP0hJrpI+Sr6VUAEfFQC\ndIDRiFcgjz6j7T/x8anqh63/hpsyf2PMYph1+4/fxtSCWJdvf+9jCRM8F1IDfluX\n87gm+88KBNaklYpchmGIohbjivJyru41CsSLe0uinQFvA741W00w6JrcrOAX+hkS\nRQuK1dDVwGKoIY85KtTUiMcCAwEAAQ==\n-----END PUBLIC KEY-----\n" + } + ], + "site": { + "url": "https://zothub.com", + "directory_mode": "primary", + "directory_url": "https://zothub.com/dirsearch" + } + + } +``` + +Discovery gibt ein JSON-Array mit den folgenden Komponenten zurück: + +'success' => (true oder false) Operation war erfolgreich, wenn true. Andernfalls kann eine optionale 'message' vorhanden sein, die die Fehlerursache angibt. + +'signed_token' => Wenn ein Token-Parameter in der Anfrage angegeben wurde, wird ihm der Text 'token.' vorangestellt und dann mit dem privaten Schlüssel des Kanals RSA-signiert und base64url-kodiert und als 'signed_token' zurückgegeben. + +guid' => die guid der Adresse auf dem Zielsystem + +guid_sig“ => die mit base64url kodierte RSA-Signatur der guid, signiert mit dem mit dieser guid verbundenen privaten Schlüssel. + +'key' => der öffentliche Schlüssel, der mit dieser guid verknüpft ist + +name“ => Name des Kanals + +name_updated' => Zeitstempel im MySQL-Stil '2012-01-01 00:00:00', als der Name zuletzt geändert wurde (UTC) + +address' => „webbie“ oder user@host-Adresse, die mit diesem Kanal verbunden ist + +photo' => URL eines Profilfotos für diesen Kanal (idealerweise 175x175) + +photo_mimetype“ => Inhaltstyp des Profilfotos + +photo_updated' => Zeitstempel im MySQL-Stil, wann das Foto zuletzt aktualisiert wurde (UTC) + +'url' => Standort der Kanal-Homepage + +'connections_url' => Speicherort der URL für tragbare Kontakte (erweitert für Nomad) für diesen Kanal + +target' => wenn ein Berechtigungsziel angegeben wurde, wird es gespiegelt + +'target_sig' => wenn ein Berechtigungsziel angegeben wurde, wird die Signatur gespiegelt. + +'searchable' => (true oder false) true bedeutet, dass dieser Eintrag in einem Verzeichnis gesucht werden kann + + + +##### Berechtigungen + +'permissions' => erweiterbares Array von Berechtigungen, die für dieses Ziel geeignet sind, Werte sind true oder false + +Berechtigungen können beinhalten: + +- view_stream +- view_profile +- view_photos +- view_contacts +- view_storage +- view_pages +- send_stream +- post_wall +- post_comments +- post_mail +- post_photos +- tag_deliver +- chat +- write_storage +- write_pages +- delegate + +##### Profil + +'Profil' => Array mit wichtigen Profilfeldern + +- description +- birthday YYYY-MM-DD , all fields are optional, any field (such as year) may be zero +- next_birthday => MySQL datetime string representing the next upcoming birthday, converted from the channel's default timezone to UTC. +- gender (free form) +- marital (marital status) +- sexual (preference) +- locale (city) +- region (state) +- postcode +- country + +##### Standorte + +'locations' => Array der registrierten Standorte (DNS-Standorte), von denen aus dieser Kanal sichtbar sein kann oder gebucht werden kann + +Jeder Standort ist ein Array aus + +'host' => DNS-Hostname, z.B. example.com + +'address' => die Webbie- oder user@host-Kennung, die mit diesem Standort verbunden ist + +'primary' => (true oder false), ob dies der primäre Ort für diesen Kanal ist, an dem Dateien und Webseiten im Allgemeinen zu finden sind + +url“ => Url des Stammverzeichnisses dieses DNS-Speicherorts, z. B. `https://example.com` + +url_sig' => base64url kodierte RSA-Signatur der URL, signiert mit dem privaten Schlüssel des Kanals + +'callback' => Nomad-Kommunikationsendpunkt auf dieser Site, normalerweise `https://example.com/post]` + +sitekey' => öffentlicher Schlüssel dieser Seite/Host + + + +##### Standort + +'site' => Array, das die Verzeichnisrolle der Site angibt, die auf diese Anfrage antwortet + +url' => url dieser Site z.B. `https://example.com` + +directory_mode' => eines von 'primary', 'secondary', 'normal' oder 'standalone' + +directory_url' => wenn es sich um einen Verzeichnisserver oder einen Einzelplatz handelt, die URL für das Verzeichnissuchmodul
\ No newline at end of file diff --git a/doc/de/developer/testing.md b/doc/de/developer/testing.md new file mode 100644 index 000000000..bbe15050f --- /dev/null +++ b/doc/de/developer/testing.md @@ -0,0 +1,131 @@ +### Testen + +Hubzilla verwendet [PHPUnit] für automatisierte Tests, oft auch *Unit-Tests* oder *Integrationstests* genannt. +Die Tests werden als PHP-Klassen geschrieben und befinden sich im Unterverzeichnis `tests/unit` des Hubzilla-Hauptrepositorys. In diesem Leitfaden wird erklärt, wie man die Tests ausführt, wie die Tests strukturiert sind und wie Sie Ihre eigenen Tests schreiben können. + +#### Ausführen der Testsuite + +##### Installieren der Abhängigkeiten + +Um die Tests ausführen zu können, müssen Sie die Entwickler-Abhängigkeiten installieren, die in der `composer.json-Datei` aufgeführt sind. Stellen Sie sicher, dass Sie [composer installiert] auf Ihrem Entwicklungssystem haben, und führen Sie dann aus: + +``` +% composer install +``` + +Dies wird phpunit und einige andere Abhängigkeiten installieren. Es wird auch einige Dateien im Unterverzeichnis `vendor/composer` aktualisieren. Dies mag ein wenig laut erscheinen, aber es ist wichtig, dass diese Änderungen *nicht* in das Repository übertragen werden! + +**Warnung!** Übertragen Sie die Änderungen an den Dateien im Verzeichnis `vendor/composer` nicht in Ihr Projektarchiv! + +##### Einrichten der Testdatenbank + +Wir haben ein Skript (`tests/create_test_db.sh`) beigefügt, das Ihnen hilft, die Testdatenbank einzurichten. Sie können es wie folgt ausführen: + +``` +% HZ_TEST_DB_TYPE=mysql ./tests/create_test_db.sh +``` + +Wenn Sie stattdessen PostgreSQL verwenden, erstellen Sie die Testdatenbank wie folgt: + +``` +% HZ_TEST_DB_TYPE=postgres ./tests/create_test_db.sh +``` + +Das Skript macht einige Annahmen über Ihre Einrichtung, aber alles ist über Umgebungsvariablen konfigurierbar. Falls Sie Anpassungen benötigen, finden Sie die Details im Quelltext des Skripts. + +##### Ausführen der Tests + +Sobald Sie die Entwicklerabhängigkeiten installiert und die Testdatenbank eingerichtet haben, können Sie die Tests wie folgt ausführen: + +``` +% ./vendor/bin/phpunit -c tests/phpunit.xml +``` + +Auch hier macht die Konfiguration in `tests/phpunit.xml` standardmäßig einige Annahmen über Ihre Einrichtung, die mit Hilfe von Umgebungsvariablen außer Kraft gesetzt werden können. Siehe `tests/phpunit.xml` für die Details. + +Sie können auch einen bestimmten Test oder eine bestimmte Gruppe von Tests ausführen, indem Sie das Argument `--filter` in PHPUnit verwenden: + +``` +% ./vendor/bin/phpunit -c tests/phpunit.xml --filter Autoname +``` + +Führt jeden Test mit der Bezeichnung „Autoname“ aus. + +##### Erzeugen von Abdeckungsberichten + +Um Abdeckungsberichte zu generieren, benötigen Sie einen Treiber, der in der Lage ist, die Abdeckungsinformationen zu generieren, die PHPUnit sammelt. Wir empfehlen [Xdebug], aber sehen Sie sich die PHPUnit [Seite zur Codeabdeckungsanalyse](https://docs.phpunit.de/en/9.6/code-coverage-analysis.html) für Alternativen und Details an. + +Wenn Xdebug richtig eingestellt ist, können Sie den Abdeckungsbericht wie folgt erzeugen: + +``` +% XDEBUG_MODE=coverage ./vendor/bin/phpunit -c ./tests/phpunit.xml +``` + +Dies erzeugt eine Reihe von HTML-Dateien in den Verzeichnissen des Unterverzeichnisses `tests/results/coverage/`. + +Öffnen Sie die Datei „index.php“ in Ihrem Webbrowser, um die Statistiken zu sehen. + +##### Fehlersuche + +Wenn Xdebug installiert ist, können Sie auch Step-Debugging und eine Reihe anderer Dinge tun, um die Tests zu debuggen und Informationen über ihre Ausführung zu erhalten. Lesen Sie auf den [Xdebug]-Seiten und in Ihrem bevorzugten Editor nach, wie Sie dies einrichten können. + +#### Teststruktur und Organisation + +Die Tests befinden sich im Unterverzeichnis `tests/unit` und in weiteren Unterverzeichnissen, die mehr oder weniger das Verzeichnislayout des Core Code Repository widerspiegeln. + +Tests werden als PHP-Klassen geschrieben, die die UnitTestCase-Klasse erweitern (zu finden in `tests/unit/UnitTestcase.php`). Der Dateiname und die darin enthaltene Testklasse sollten gleich lauten und *müssen* mit `Test.php` enden. + +Beispiele sind: + +- `tests/unit/includes/AccountTest.php` +- `tests/unit/Lib/ActivityTest.php` + +Die Testklassen enthalten eine oder mehrere Testfunktionen, diese müssen öffentlich sein und mit dem Präfix `test` versehen werden. + +Hier ist ein Beispiel: + +``` +use Zotlabs\Tests\Unit\UnitTestCase; + +class AccountTest extends UnitTestCase { + public function test_get_account_by_id_returns_existing_account() { + $Konto = get_account_by_id(42); + $this->assertNotFalse($account); + $this->assertEquals( + $this->fixtures['account'][0]['account_email'], + $account['account_email'] + ); + } +``` + +Beachten Sie, dass wir versuchen, den Namen der Testfunktion so aussagekräftig wie möglich zu gestalten. +Die Klasse kann auch eine beliebige Anzahl anderer Funktionen enthalten, um die Dinge ordentlich und übersichtlich zu halten. Diese können je nach Bedarf des Testcodes privat, geschützt oder öffentlich sein. +Die Ergebnisse und Artefakte der Testläufe werden im Verzeichnis `tests/results/` abgelegt. Dazu gehören in der Regel das Testprotokoll, der Code Coverage Report usw. + +#### Hubzilla-spezifische Funktionen + +##### Testdatenbankzugriff: + +Idealerweise sollte es in der Lage sein, jeden Teil des Codes isoliert zu testen, wobei alle Abhängigkeiten durch Stubs, Mocks oder Fakes ersetzt werden sollten. + +Dies ist bei einer Legacy-Codebasis wie Hubzilla, die nicht im Hinblick auf Testbarkeit geschrieben wurde, nicht möglich. Aus diesem Grund verwenden wir eine separate Testdatenbank und stellen sie dem zu testenden Code mit denselben Mechanismen zur Verfügung, die auch Hubzilla normalerweise verwendet. +Das bedeutet, dass jeder Code, der Datenbankabfragen ausführt, sich normal verhält, wenn er von einem Test aufgerufen wird. + +Damit dies funktioniert, stellen wir vor der Ausführung jeder Testfunktion eine Verbindung zur Datenbank her. Wir laden auch einige anfängliche Daten in die Datenbank, um sicherzustellen, dass die Dinge wie erwartet funktionieren und dass wir einen bekannten Zustand der Datenbank haben, wenn der Test läuft. +Nach Beendigung des Tests wird die Testdatenbank gelöscht, so dass bei der nächsten Testdurchführung derselbe konsistente Zustand vorliegt. + +All dies wird von der Basisklasse `UnitTestCase` gehandhabt. + +##### Datenbank-Fixtures: + +Wir benötigen einige vorhersehbare Inhalte in der Datenbank, um Dinge wie die Protokollierung und andere Inhalte, die für die Tests im Allgemeinen nützlich sind, einzurichten. Dies sind Datenbank-Fixtures, die für jeden Testlauf in die Datenbank geladen werden. + +Die Datenbankfixtures befinden sich im Verzeichnis `tests/unit/include/dba/_files` und bestehen aus YAML-Dateien, wobei jede Datei den Inhalt einer Datenbanktabelle mit dem gleichen Namen wie die Datei selbst darstellt. + +Obwohl Datenbank-Fixtures sehr nützlich sind, versuchen wir, die Anzahl der Fixtures so gering wie möglich zu halten. In der Regel ist es besser, alle für einen bestimmten Test benötigten Inhalte im Test selbst hinzuzufügen. + +##### Fakes: + +Fakes sind Klassen, die wir an den zu testenden Code übergeben können und die genauso aussehen und sich genauso verhalten wie die Originalklasse (für den zu testenden Code). Sie sind nützlich, wenn wir Objekte an den zu testenden Code übergeben können, da wir sie vom Testcode aus vollständig kontrollieren können. + +Fakes befinden sich im Verzeichnis `tests/fakes`.
\ No newline at end of file diff --git a/doc/de/developer/tools_workflows.md b/doc/de/developer/tools_workflows.md new file mode 100644 index 000000000..406d293a9 --- /dev/null +++ b/doc/de/developer/tools_workflows.md @@ -0,0 +1,5 @@ +### Tools und Arbeitsabläufe für Entwickler + +#### Hub-Snapshots + +Die Seite mit den [Hub-Snapshots](/hlp/de/adminmanual/hub_snapshot_tools.md) enthält Anweisungen und Skripte für die Erstellung vollständiger Snapshots eines Hubs, um den Wechsel zwischen konsistenten und vollständig bekannten Zuständen zu unterstützen. Dies ist nützlich, um Situationen zu vermeiden, in denen der Inhalt oder das Datenbankschema mit dem Code inkompatibel sein könnte.
\ No newline at end of file diff --git a/doc/de/developer/translations.md b/doc/de/developer/translations.md new file mode 100644 index 000000000..db6730c6c --- /dev/null +++ b/doc/de/developer/translations.md @@ -0,0 +1,57 @@ +### Übersetzungen + +Unsere Übersetzungen werden über Transifex verwaltet. Wenn Sie bei der Übersetzung von Hubzilla in eine andere Sprache helfen möchten, melden Sie sich auf transifex.com an, besuchen Sie [Transifex](https://www.transifex.com/Friendica/hubzilla/?f=&zid=pepecyb@hub.hubzilla.hu) und beantragen Sie die Mitgliedschaft in einem der bestehenden Sprachteams oder erstellen Sie ein neues. Benachrichtigen Sie einen der Hauptentwickler, wenn Sie ein Übersetzungsupdate haben, das zusammengeführt werden muss, oder fragen Sie, ob Sie es selbst zusammenführen können, wenn Sie mit Git und PHP vertraut sind. Wir haben eine Zeichenkettendatei namens 'messages.po', die gettext-kompatibel ist, und eine Handvoll E-Mail-Vorlagen, aus denen wir automatisch die Sprachdateien der Anwendung generieren. + +#### Der Übersetzungsprozess + +Die in der Benutzeroberfläche von Hubzilla verwendeten Strings werden bei [Transifex](https://www.transifex.com/Friendica/hubzilla/?f=&zid=pepecyb@hub.hubzilla.hu) übersetzt und dann +in das Git-Repository auf github aufgenommen. Wenn Sie bei der Übersetzung helfen möchten +einer Sprache helfen wollen, sei es bei der Korrektur von Begriffen oder bei der Übersetzung von Hubzilla in eine derzeit nicht unterstützte Sprache übersetzen möchten, registrieren Sie bitte ein Konto auf transifex.com und kontaktieren Sie dort das Übersetzungsteam. + +Hubzilla zu übersetzen ist ganz einfach. Verwenden Sie einfach das Online-Tool auf transifex. Wenn Sie +Wenn Sie sich nicht mit Git & Co. herumschlagen wollen, ist das kein Problem, wir überprüfen den Status der Übersetzungen regelmäßig und importieren sie in den Quellbaum auf github, damit andere sie nutzen können. + +Wir nehmen nicht jede Übersetzung von transifex in den Quellbaum auf, um eine eine verstreute und gestörte Gesamterfahrung zu vermeiden. Als ungefähre Schätzung haben wir eine Untergrenze von 50% übersetzter Strings, bevor wir die Sprache einbeziehen. Diese Grenze richtet sich nur nach der Menge der übersetzten Zeichenfolgen, wobei wir davon ausgehen dass die wichtigsten Zeichenfolgen für die Benutzeroberfläche zuerst von einem Übersetzungsteam übersetzt Team übersetzt werden. Wenn Sie der Meinung sind, dass Ihre Übersetzung vor dieser Grenze brauchbar ist, kontaktieren Sie uns bitte und wir werden die Arbeit Ihres Teams wahrscheinlich in den Quellbaum aufnehmen. + +Wenn Sie Ihre Arbeit selbst in den Quellbaum aufnehmen möchten, können Sie dies gerne tun und kontaktieren Sie uns bei allen Fragen, die sich ergeben. Der Prozess ist einfach und Hubzilla wird mit allen notwendigen Werkzeugen geliefert. + +Der Speicherort der übersetzten Dateien im Quellbaum ist + +`/view/LNG-CODE/` + +wobei LNG-CODE der Code der verwendeten Sprache ist, z. B. de für Deutsch oder fr für Französisch. +Für die E-Mail-Vorlagen (die *.tpl-Dateien) legen Sie sie einfach in das Verzeichnis und Sie sind fertig. Die übersetzten Strings kommen als „hmessages.po“-Datei von Transifex, die in die PHP-Datei übersetzt werden muss, die Hubzilla verwendet. Dazu Sie die Datei in das oben genannte Verzeichnis und verwenden Sie das Dienstprogramm „po2php“ aus dem aus dem Verzeichnis util Ihrer Hubzilla-Installation. + +Angenommen, Sie möchten die deutsche Lokalisierung konvertieren, die sich in view/de/hmessages.po steht, würden Sie wie folgt vorgehen. + +1. Navigieren Sie an der Eingabeaufforderung in das Basisverzeichnis Ihrer + +Hubzilla-Installation + +2. Führen Sie das po2php-Skript aus, das die Übersetzung + +in die Datei hstrings.php einfügt, die von Hubzilla verwendet wird. + +`$> php util/po2php.php view/de/hmessages.po` + +Die Ausgabe des Skripts wird in der Datei view/de/hstrings.php platziert, wo froemdoca es erwartet, so dass Sie Ihre Übersetzung sofort testen können. + +3. Besuchen Sie Ihre Hubzilla-Seite und überprüfen Sie, ob sie in der Sprache ist, die Sie gerade übersetzt haben. Wenn nicht, versuchen Sie, den Fehler zu finden, wahrscheinlich gibt PHP Ihnen einen Hinweis im Log/Warnings.über den Fehler. + +Zur Fehlersuche können Sie auch versuchen, die Datei mit PHP „auszuführen“. Dies sollte keine Ausgabe geben, wenn die Datei in Ordnung ist, aber vielleicht einen Hinweis für die Fehler in der Datei zu finden. + +`$> php view/de/hstrings.php` + +4. Übertragen Sie die beiden Dateien mit einer aussagekräftigen Commit-Nachricht in Ihr Git Repository, pushen Sie es zu Ihrem Fork des Hubzilla Repository auf github und stellen einen Pull Request für diesen Commit. + +#### Dienstprogramme + +Zusätzlich zum po2php-Skript gibt es einige weitere Hilfsprogramme für die Übersetzung im Verzeichnis „util“ des Hubzilla-Quellbaums. Wenn Sie nur Hubzilla in eine andere Sprache übersetzen wollen, werden Sie wahrscheinlich keines dieser Werkzeuge aber es gibt Ihnen eine Vorstellung davon, wie der Übersetzungsprozess von Hubzilla funktioniert. + +Weitere Informationen finden Sie in der Datei utils/README. + +#### Bekannte Probleme + +- Hubzilla verwendet die Spracheinstellung des Browsers des Besuchers, um die Sprache für die Benutzeroberfläche. Meistens funktioniert dies, aber es gibt einige bekannte Macken. + +- Die frühen Übersetzungen basieren auf den Friendica-Übersetzungen, wenn Sie einige grobe Übersetzungen finden, lassen Sie es uns bitte wissen oder korrigieren Sie sie bei Transifex. diff --git a/doc/de/developer/unorganized.md b/doc/de/developer/unorganized.md new file mode 100644 index 000000000..fd668f49e --- /dev/null +++ b/doc/de/developer/unorganized.md @@ -0,0 +1,56 @@ +### Noch zu organisierende Informationen + +**Hier ist, wie Sie sich uns anschließen können.** +Richten Sie sich zunächst ein funktionierendes Git-Paket auf dem System ein, auf dem Sie entwickeln werden. + +Erstellen Sie Ihr eigenes Github-Konto. + +Sie können das Red-Repository von https://framagit.org/hubzilla/core.git forken/klonen. +Folgen Sie den Anweisungen hier: [http://help.github.com/fork-a-repo/](http://help.github.com/fork-a-repo/), um Ihren eigenen Tracking-Fork auf github zu erstellen und zu verwenden. + +Gehen Sie dann auf Ihre Github-Seite und erstellen Sie einen „Pull request“, wenn Sie bereit sind, uns mitzuteilen, dass Ihre Arbeit zusammengeführt werden soll. + +**Wichtig** + +Bitte ziehen Sie alle Änderungen aus dem Projekt-Repository ein und fügen Sie sie mit Ihrer Arbeit zusammen **, bevor** Sie einen Pull-Request erstellen. Wir behalten uns das Recht vor, jeden Patch abzulehnen, der zu einer großen Anzahl von Merge-Konflikten führt. Dies gilt insbesondere für Sprachübersetzungen, bei denen wir möglicherweise nicht in der Lage sind, die feinen Unterschiede zwischen den konfligierenden Versionen zu verstehen. + +**Testen** Sie außerdem **Ihre Änderungen**. Gehen Sie nicht davon aus, dass eine einfache Korrektur nicht etwas anderes kaputt macht. Bitten Sie nach Möglichkeit einen erfahrenen Red-Entwickler, den Code zu überprüfen. + +**Wie man Hubzilla thematisiert** +Dies ist eine kurze Dokumentation über das, was ich beim Versuch, das Aussehen von Hubzilla zu ändern, herausgefunden habe. + +Zuerst müssen Sie ein neues Thema erstellen. Dieses befindet sich in /view/theme, und ich habe mich für „redbasic“ entschieden, da es im Moment das einzig verfügbare ist. Nehmen wir an, ich nenne es . +Oh, und vergessen Sie nicht, die Funktion _init in /php/theme.php in _init() statt redbasic_init() umzubenennen. + +Wenn Sie nun Javascript- oder CSS-Dateien hinzufügen müssen, fügen Sie sie zu /js oder /css hinzu und „registrieren“ sie dann in `_init()` durch `head_add_js('file.js')` und `head_add_css('file.css')`. +Jetzt werden Sie wahrscheinlich eine Vorlage ändern wollen. Diese sind in /view/tpl ODER view//tpl zu finden. Alles, was Sie tun müssen, ist, das, was Sie ändern wollen, in das tpl-Verzeichnis Ihres Themes zu kopieren. + +Wir sind ziemlich entspannt, wenn es um Entwickler geht. Wir haben nicht viele Regeln. Einige von uns sind überlastet, und wenn Sie helfen wollen, lassen wir Sie gerne helfen. Wenn Sie sich jedoch an ein paar Richtlinien halten, wird der Prozess reibungsloser und die Zusammenarbeit einfacher. Wir haben Entwickler aus der ganzen Welt mit unterschiedlichen Fähigkeiten, unterschiedlichen kulturellen Hintergründen und unterschiedlicher Geduld. Unsere oberste Regel ist es, andere zu respektieren. Manchmal ist das schwierig, und manchmal haben wir sehr unterschiedliche Ansichten darüber, wie die Dinge funktionieren sollten, aber wenn sich jeder bemüht, werden wir gut miteinander auskommen. + +**Hier ist, wie Sie sich uns anschließen können.** + +Besorgen Sie sich zunächst ein funktionierendes Git-Paket auf dem System, auf dem Sie die Entwicklung durchführen werden. + +Erstellen Sie Ihr eigenes Github-Konto. + +Du kannst das Hubzilla-Repository von https://framagit.org/hubzilla/core.git forken/klonen. +Folgen Sie den Anweisungen hier: [http://help.github.com/fork-a-repo/](http://help.github.com/fork-a-repo/), um Ihren eigenen Tracking-Fork auf github zu erstellen und zu verwenden. + +Gehen Sie dann auf Ihre Github-Seite und erstellen Sie eine „Pull-Anfrage“, wenn Sie bereit sind, uns mitzuteilen, dass Ihre Arbeit zusammengeführt werden soll. + +**Wichtig** + +Bitte ziehen Sie alle Änderungen aus dem Projekt-Repository ein und fügen Sie sie mit Ihrer Arbeit zusammen **, bevor** Sie einen Pull-Request erstellen. Wir behalten uns das Recht vor, jeden Patch abzulehnen, der zu einer großen Anzahl von Merge-Konflikten führt. Dies gilt insbesondere für Sprachübersetzungen, bei denen wir möglicherweise nicht in der Lage sind, die feinen Unterschiede zwischen den konfligierenden Versionen zu verstehen. + +**Testen** Sie außerdem **Ihre Änderungen**. Gehen Sie nicht davon aus, dass eine einfache Korrektur nicht etwas anderes kaputt macht. Bitten Sie nach Möglichkeit einen erfahrenen Red-Entwickler, den Code zu überprüfen. + +Weitere Dokumentation finden Sie auf den Github-Wikiseiten unter: https://github.com/friendica/red/wiki + +**Konsensbildung** + +Codeänderungen, die einen offensichtlichen Fehler beheben, sind ziemlich einfach. Wenn Sie zum Beispiel auf „Speichern“ klicken und das, was Sie zu speichern versuchen, nicht gespeichert wird, ist es ziemlich offensichtlich, was das beabsichtigte Verhalten sein sollte. Bei der Entwicklung von Funktionsanfragen kann es vorkommen, dass eine große Anzahl von Community-Mitgliedern davon betroffen ist und dass andere Mitglieder der Community nicht mit der Notwendigkeit der Funktion oder der von Ihnen vorgeschlagenen Implementierung einverstanden sind. Es kann sein, dass sie etwas nicht als Fehler oder als wünschenswerte Funktion ansehen. + +Wir ermutigen zur Konsensbildung innerhalb der Gemeinschaft, wenn es um eine Funktion geht, die als kontrovers angesehen werden könnte oder wenn es keine einstimmige Entscheidung gibt, dass die vorgeschlagene Funktion der richtige Weg ist, um die Aufgabe zu erfüllen. Die erste Anlaufstelle für Ihre Ideen ist [Channel One](https://zothub.com/channel/one)]. Andere haben vielleicht Anregungen oder können Sie auf Aspekte Ihres Konzepts hinweisen, die in unserem Umfeld problematisch sein könnten. Vielleicht stoßen Sie aber auch auf Widerstand gegen Ihren Plan. Das bedeutet nicht, dass Sie aufhören und/oder die Funktion ignorieren sollten. Hören Sie sich die Bedenken der anderen an und versuchen Sie, alle Probleme bei der Umsetzung zu lösen. + +Es gibt Stellen, an denen Widerstände nicht ausgeräumt werden können. In diesen Fällen sollten Sie in Erwägung ziehen, Ihre Funktion **optional** zu machen oder ein nicht standardmäßiges Verhalten vorzusehen, das ausdrücklich aktiviert werden muss. Diese Technik kann oft verwendet werden, wenn eine Funktion eine bedeutende, aber nicht einstimmige Unterstützung hat. Diejenigen, die die Funktion wünschen, können sie einschalten, und diejenigen, die sie nicht wollen, können sie ausgeschaltet lassen. +Wenn eine Funktion andere Netzwerke oder Websites nutzt oder nur von einer kleinen Minderheit der Gemeinschaft als wünschenswert angesehen wird, sollten Sie in Erwägung ziehen, die Funktion über ein Addon oder Plugin verfügbar zu machen. Auch hier gilt, dass diejenigen, die die Funktion nicht wünschen, sie auch nicht installieren müssen. Plugins sind relativ einfach zu erstellen und „Haken“ können leicht hinzugefügt oder geändert werden, wenn die aktuellen Haken nicht das tun, was nötig ist, damit Ihr Plugin funktioniert.
\ No newline at end of file diff --git a/doc/de/developer/versions.md b/doc/de/developer/versions.md new file mode 100644 index 000000000..d3301e2f9 --- /dev/null +++ b/doc/de/developer/versions.md @@ -0,0 +1,23 @@ +### Versionen und Releases + +Hubzilla verwendet derzeit eine Standard-Versionsnummerierungssequenz von $x.$y(.$z), zum Beispiel '1.12' oder '1.12.1'. Die erste Ziffer ist die Hauptversionsnummer. Hauptversionen werden „ungefähr“ einmal pro Jahr veröffentlicht, oft im Dezember. + +Die zweite Ziffer ist die Nummer der Nebenversion. Wenn diese Zahl ungerade ist, handelt es sich um eine Entwicklungsversion. Ist die Zahl gerade, handelt es sich um eine freigegebene Version. Nebenversionen werden in der Regel einmal pro Monat freigegeben (von der Entwicklungs- in die Hauptversion verschoben), wenn die Entwicklung „stabil“ ist, aber das wird wahrscheinlich zunehmen. Zukünftig werden kleinere Versionen zwischen einem und drei Monaten veröffentlicht; das entspricht einem stabilen Codepunkt und wenn es einen allgemeinen Konsens in der Gemeinschaft gibt, dass die aktuelle Codebasis stabil genug ist, um eine Veröffentlichung in Betracht zu ziehen. + +Die letzte Ziffer ist eine Schnittstellen- oder Patch-Kennung. + +Der Freigabeprozess beinhaltet die Änderung der Versionsnummer (per Definition ist die Minor-Versionsnummer ungerade, und die Minor-Nummer wird erhöht). Einmal im Jahr wird bei einer Hauptversion die Hauptversionsnummer erhöht und die Nebenversionsnummer auf 0 zurückgesetzt. + +Der Versionskandidat wird in einen neuen Zweig verschoben und die Tests beginnen bzw. werden für einen Zeitraum von 1-2 Wochen fortgesetzt, oder bis alle wichtigen Probleme behoben sind. Dieser Zweig wird in der Regel mit RC (Release Candidate) bezeichnet; beispielsweise steht 1.8RC für die bevorstehende Veröffentlichung der Version 1.8. Zu diesem Zeitpunkt wird die Versionsnummer des Entwicklungszweigs auf die nächsthöhere ungerade Zahl erhöht. (Zum Beispiel 1.9). Neue Entwicklungen können dann im Entwicklungszweig stattfinden. + +Fehlerkorrekturen sollten immer auf „dev“ angewendet werden und von dort aus (in der Regel mit git cherry-pick) auf den RC-Zweig und, falls erforderlich, auf den Master- oder offiziellen Release-Zweig übertragen werden. + +Zum Zeitpunkt der Erstellung eines Release Candidate wird die Sprachstring-Datei eingefroren, bis eine neue Version veröffentlicht wird. Die Übersetzungsarbeit kann fortgesetzt werden, aber alle Übersetzungen sollten an „dev“ übermittelt und in RC zusammengeführt werden. + +Sobald die RC-Tests abgeschlossen sind, wird RC mit 'master' zusammengeführt und der RC-Versionsbezeichner entfernt; dies führt zu einem letzten Checkin, um die Versionsnummer zu ändern. Die CHANGELOG-Datei sollte ebenfalls zu diesem Zeitpunkt oder kurz davor aktualisiert werden. Wenn es während dieser letzten Zusammenführung Konflikte gibt, wird die Zusammenführung abgebrochen und „git merge -s ours“ angewendet. Dies führt dazu, dass der Master-Zweig durch den Inhalt des RC-Zweigs ersetzt wird. Konflikte entstehen oft durch String-Updates, die nach der letzten Veröffentlichung an master vorgenommen wurden und nicht einfach ohne manuelle Bearbeitung gelöst werden können. Da es sich hier um eine Veröffentlichung von getesteten Code handelt, wird von einer manuellen Bearbeitung abgeraten und stattdessen sollte die Strategie des Replacement Merge verwendet werden. Es wird davon ausgegangen, dass RC nun den neuesten, gut getesteten Code enthält. + +Sobald die Veröffentlichung live ist und in den Master-Zweig überführt wurde, kann der RC-Zweig entfernt werden. + +Nach der Veröffentlichung können Korrekturen an Master vorgenommen werden. Wenn möglich, sollten diese in dev vorgenommen werden und „git cherry-pick“ zum Zusammenführen verwendet werden; dadurch bleiben die Commit-Informationen erhalten und Konflikte beim Zusammenführen im nächsten Zyklus werden vermieden. Nur selten gilt ein Patch nur für den Master-Zweig. Falls nötig, kann das gemacht werden. Wenn die Änderung schwerwiegend ist, sollte die Versionsnummer der Schnittstelle erhöht werden. Dies liegt im Ermessen der Gemeinschaft. In jedem Fall sollte ein „git pull“ des Master-Zweigs immer zur neuesten Version führen, auf die alle Patches nach der Veröffentlichung angewendet werden. + +Die Schnittstellennummer (das $z in $x.$y.$z) sollte in dev immer dann erhöht werden, wenn eine Änderung vorgenommen wird, die die Schnittstellen oder die API in inkompatibler Weise verändert, so dass alle externen Pakete (insbesondere Addons und API-Clients), die sich auf das aktuelle Verhalten verlassen, ihre eigenen Schnittstellen an dem Punkt, an dem es sich geändert hat, entdecken und entsprechend ändern können.
\ No newline at end of file diff --git a/doc/de/developer/who_is_a_hubzilla_developer.md b/doc/de/developer/who_is_a_hubzilla_developer.md new file mode 100644 index 000000000..23ffcf6bd --- /dev/null +++ b/doc/de/developer/who_is_a_hubzilla_developer.md @@ -0,0 +1,14 @@ +### Wer ist ein Hubzilla-Entwickler? Sollte ich das lesen? + +Jeder, der dazu beiträgt, Hubzilla besser zu machen, ist ein Entwickler. Es gibt viele verschiedene und wichtige Möglichkeiten, wie Sie zu dieser erstaunlichen Technologie beitragen können, *auch wenn Sie nicht wissen, wie man Code schreibt*. Die Software selbst ist nur ein Teil des Hubzilla-Projekts. Sie können beitragen durch + +- den Text in Ihre Sprache übersetzen, damit Menschen auf der ganzen Welt die Möglichkeit haben, Hubzilla zu nutzen +- für Hubzilla werben und das Bewusstsein für die Plattform durch Blogbeiträge, Artikel und Mundpropaganda verbreiten +- Erstellung von Kunstwerken und Grafiken für Projektressourcen wie Icons und Marketingmaterial +- Unterstützung der Projektinfrastruktur wie der Projektwebsite und der Demoserver + +*Softwareentwickler* sind natürlich willkommen; es gibt so viele großartige Ideen, die umgesetzt werden können, und nicht genug Leute, um sie alle zu verwirklichen! Die Hubzilla-Codebasis ist ein fortschrittliches und ausgereiftes System, aber die Plattform ist immer noch sehr flexibel und offen für neue Ideen. + +Wir sind ziemlich entspannt, wenn es um Entwickler geht. Bei uns gibt es nicht viele Regeln. Einige von uns sind überlastet, und wenn Sie helfen wollen, lassen wir Sie gerne helfen. Wenn Sie sich jedoch an ein paar Richtlinien halten, wird der Prozess reibungsloser und die Zusammenarbeit einfacher. Von allen Entwicklern wird erwartet, dass sie sich an unseren [Verhaltenskodex](/help/de/developer/code_of_conduct.md) halten. Wir haben Entwickler aus der ganzen Welt mit unterschiedlichen Fähigkeiten, unterschiedlichen kulturellen Hintergründen und unterschiedlich viel Geduld. Unsere oberste Regel ist es, andere zu respektieren. Manchmal ist das schwierig, und manchmal haben wir sehr unterschiedliche Ansichten darüber, wie die Dinge funktionieren sollten, aber wenn sich jeder bemüht, werden wir gut miteinander auskommen. + +Dieses Dokument wird Ihnen dabei helfen, Hubzilla kennenzulernen und mitzugestalten.
\ No newline at end of file diff --git a/doc/de/developer/zot_protocol.md b/doc/de/developer/zot_protocol.md new file mode 100644 index 000000000..67252eddf --- /dev/null +++ b/doc/de/developer/zot_protocol.md @@ -0,0 +1,47 @@ +### Das Nomad Protokoll + +#### Was ist Nomad? + +Nomad ist das revolutionäre Protokoll, das Hubzilla antreibt und die **Kommunikation**, das **Identitätsmanagement** und die **Zugangskontrolle** in einem vollständig **dezentralisierten** Netzwerk unabhängiger Websites, oft als „das Grid“ bezeichnet, ermöglicht. Die daraus resultierende Plattform ist ein robustes System, das den Datenschutz und die Sicherheit unterstützt und gleichzeitig die Art von umfangreichen Webdiensten ermöglicht, die normalerweise nur in zentralisierten, proprietären Lösungen zu finden sind. + +Betrachten Sie dieses typische Szenario: + +Jaquelina möchte Fotos von ihrem Blog unter **jaquelina.org** mit Roberto teilen, aber mit niemandem sonst. Roberto unterhält seinen eigenen Familien-Hub unter **roberto.net** auf einem völlig unabhängigen Server. Nomad erlaubt Jaquelina, ihre Fotos mit einer *Zugriffskontrollliste (ACL)* zu veröffentlichen, die nur Roberto einschließt. Das bedeutet, dass Roberto die Fotos zwar sehen kann, wenn er ihren Blog besucht, sein Bruder Marco jedoch nicht, und auch kein anderes Familienmitglied, das ein Konto auf **roberto.net** hat. + +Der Clou an diesem Szenario ist die Tatsache, dass Roberto sich nie auf Jaquelinas Website angemeldet hat. Stattdessen musste er sich nur einmal mit seinem Passwort auf seiner *eigenen* Website **roberto.net** anmelden. Wenn Roberto **jaquelina.org** besucht, wird er von ihrem Hub nahtlos authentifiziert, indem sein Server im Hintergrund abgefragt wird. + +Es ist nicht ungewöhnlich, dass Server technische Probleme haben oder aus verschiedenen Gründen unzugänglich werden. Nomad bietet Robustheit für Robertos Online-Aktivitäten, indem es ihm erlaubt, *Klone* seiner Online-Identität oder seines *Kanals* auf mehreren unabhängigen Hubs zu haben. Stellen Sie sich vor, dass Robertos Server aus irgendeinem Grund zusammenbricht und er sich dort nicht mehr einloggen kann. Er meldet sich einfach bei einem seiner Klone auf **gadfly.com** an, einer Website, die von seinem Freund Peter betrieben wird. Sobald er sich bei **gadfly.com** authentifiziert hat, kann Roberto Jaquelinas Blog wie zuvor ansehen, ohne dass Jaquelina zusätzlichen Zugang gewähren muss! + +#### Kommunikation + +Kommunikation und soziale Netzwerke sind ein wesentlicher Bestandteil des Grids. Jeder Kanal (und jeder Dienst, der von diesem Kanal bereitgestellt wird) kann die funktionsreiche soziale Kommunikation auf globaler Ebene in vollem Umfang nutzen. Diese Kommunikation kann öffentlich oder privat sein - und private Kommunikation umfasst nicht nur einen vollständig verschlüsselten Transport, sondern auch eine verschlüsselte Speicherung zum Schutz vor versehentlichem Schnüffeln und Offenlegung durch unseriöse Systemadministratoren und Internetdienstanbieter. + +Nomad unterstützt eine breite Palette von Hintergrunddiensten im Grid, von Freundschaftsvorschlägen bis hin zu Verzeichnisdiensten. Neue Inhalte und Datenaktualisierungen werden im Hintergrund zwischen den Hubs im gesamten Grid gemäß den Zugriffskontrolllisten und den von den *Sender- und* Empfängerkanälen festgelegten Berechtigungen weitergegeben. Die Daten werden auch zwischen einer beliebigen Anzahl von Kanalklonen synchronisiert, so dass Hub-Mitglieder auch dann auf Daten zugreifen und nahtlos weiter zusammenarbeiten können, wenn ihr primärer Hub nicht erreichbar oder offline ist. + +#### Identität + +Die Identitätsschicht von Nomad ist einzigartig. Sie bietet ein **unsichtbares Single Sign-On** für alle Standorte im Grid. + +Sie bietet auch eine **nomadische Identität**, so dass Ihre Kommunikation mit Freunden, Familie oder anderen Personen, mit denen Sie kommunizieren, nicht durch den Verlust Ihres primären Kommunikationsknotens beeinträchtigt wird - weder vorübergehend noch dauerhaft. + +Die wichtigen Teile Ihrer Identität und Ihrer Beziehungen können auf einem USB-Stick oder Ihrem Laptop gesichert werden und jederzeit an einem beliebigen Knoten im Netz erscheinen - mit all Ihren Freunden und Vorlieben. + +Entscheidend ist, dass diese nomadischen Instanzen synchron gehalten werden, so dass jede Instanz übernehmen kann, wenn eine andere gefährdet oder beschädigt ist. Dies schützt Sie nicht nur vor größeren Systemausfällen, sondern auch vor vorübergehender Überlastung der Website und staatlicher Manipulation oder Zensur. + +Wir sind der Meinung, dass die nomadische Identität, die einmalige Anmeldung und die Dezentralisierung von Hubzilla ein hohes Maß an **Widerstandsfähigkeit** und **Beständigkeit** in die Internetkommunikation einbringen, die angesichts der weltweiten Tendenzen zur Zentralisierung von Unternehmen sowie der massenhaften und wahllosen staatlichen Überwachung und Zensur dringend benötigt werden. + +Beim Durchsuchen des Netzes, beim Anzeigen von Kanälen und deren einzigartigen Inhalten, werden Sie nahtlos authentifiziert, sogar über völlig unterschiedliche Server-Hubs hinweg. Sie müssen keine Passwörter eingeben. Sie müssen nichts eintippen. Sie werden auf jeder neuen Seite, die Sie besuchen, einfach mit Ihrem Namen begrüßt. + +Wie funktioniert das bei Nomad? Wir nennen es **„magic-auth“**, weil Hubzilla die Details der Komplexität von Single-Sign-On-Logins und nomadischen Identitäten vor dem Surfen im Netz verbirgt. Dies ist eines der Designziele von Hubzilla: die Privatsphäre und die Freiheit im Internet zu erhöhen und gleichzeitig die Komplexität und die Langeweile zu reduzieren, die durch die Notwendigkeit entstehen, für jeden Besuch im Internet neue Passwörter und Anmeldenamen einzugeben. Sie melden sich nur einmal auf Ihrem Home-Hub (oder einem von Ihnen gewählten nomadischen Backup-Hub) an. Dadurch können Sie auf alle authentifizierten Dienste zugreifen, die überall im Netz angeboten werden - wie Einkaufen, Blogs, Foren und Zugang zu privaten Informationen. Ihr Passwort wird nicht auf tausend verschiedenen Websites gespeichert, sondern auf Servern, die Sie kontrollieren oder denen Sie vertrauen. + +Sie können nicht zum Schweigen gebracht werden. Sie können nicht aus dem Netz entfernt werden, es sei denn, Sie selbst entscheiden sich dafür, es zu verlassen. + +#### Zugangskontrolle + +Die Identitätsschicht von Nomad ermöglicht es Ihnen, fein abgestufte Berechtigungen für jeden Inhalt zu vergeben, den Sie veröffentlichen möchten - und diese Berechtigungen erstrecken sich über das gesamte Grid. Das ist so, als hätte man eine riesige Website, die aus einer Armee kleiner individueller Websites besteht - und bei der jeder Kanal im Grid seine Datenschutz- und Freigabepräferenzen für alle von ihm erstellten Webressourcen vollständig kontrollieren kann. + +Derzeit unterstützt Hubzilla die Zugriffskontrolle für viele Datentypen, darunter Diskussionsbeiträge und -kommentare, Fotoalben, Veranstaltungen, Cloud-Dateien, Webseiten, Wikis und mehr. Jedes Objekt und die Art und Weise, wie und mit wem es geteilt wird, unterliegt vollständig Ihrer Kontrolle. + +Diese Art der Kontrolle ist bei großen Unternehmensanbietern trivial, da sie die Benutzerdatenbank besitzen. Im Grid brauchen Sie keine riesige Benutzerdatenbank auf Ihrem Rechner - denn das Grid **ist** Ihre Benutzerdatenbank. Sie verfügt über eine im Grunde unendliche Kapazität (begrenzt durch die Gesamtzahl der Hubs, die im Internet online sind) und ist auf Hunderte, möglicherweise sogar Millionen von Computern verteilt. + +Der Zugang kann für jede Ressource, jeden Kanal oder jede Gruppe von Kanälen gewährt oder verweigert werden - überall im Grid. Andere können auf Ihre Inhalte zugreifen, wenn Sie es ihnen erlauben, und sie müssen nicht einmal ein Konto in Ihrem Hub haben.
\ No newline at end of file diff --git a/doc/de/developer/zot_structures.md b/doc/de/developer/zot_structures.md new file mode 100644 index 000000000..c3f77c8b7 --- /dev/null +++ b/doc/de/developer/zot_structures.md @@ -0,0 +1,141 @@ +### Nomad-Strukturen + +#### Nomad-Signaturen + +Alle signierten Daten in Nomad werden durch eine RSA-Signaturoperation mit dem privaten Schlüssel des Initiators erzeugt. Das binäre Ergebnis wird dann für den Transport mit base64url kodiert. + +#### Nomad-Verschlüsselung + +Die Verschlüsselung erfolgt derzeit mit AES256CTR. Weitere Algorithmen KÖNNEN unterstützt werden. Ein 32-Oktett-Schlüssel und ein 16-Oktett-Initialisierungsvektor werden nach dem Zufallsprinzip erzeugt. Die gewünschten Daten werden dann mit diesen generierten Zeichenketten verschlüsselt und das Ergebnis base64url-kodiert. Dann wird ein Array erstellt: + +- data + + Die base64url-kodierten verschlüsselten Daten + +- alg + + Der gewählte Algorithmus, in diesem Fall die Zeichenkette „aes256ctr“. + +- key + + Der zufällig erzeugte Schlüssel, RSA-verschlüsselt mit dem öffentlichen Schlüssel des Empfängers, und das Ergebnis base64url-kodiert + +- iv + + Der zufällig erzeugte Initialisierungsvektor, RSA-verschlüsselt mit dem öffentlichen Schlüssel des Empfängers, und das Ergebnis base64url-kodiert + +#### Grundlegendes Nomad-Paket + +Wird verwendet, um einen Dialog mit einer anderen Nomad-Site einzuleiten. Dieses Paket KANN verschlüsselt sein. Das Vorhandensein eines Array-Elements 'iv' zeigt an, dass eine Verschlüsselung vorgenommen wurde. Beim Senden eines 'auth_check'-Pakets MUSS dieses Paket verschlüsselt werden, wobei der öffentliche Schlüssel der Zielsite (der Site-Schlüssel, im Gegensatz zu einem Absenderschlüssel) verwendet wird. + +``` + { + "type":"notify", + "sender":{ + "guid":"kgVFf_1_SSbyqH-BNWjWuhAvJ2EhQBTUdw-Q1LwwssAntr8KTBgBSzNVzUm9_RwuDpxI6X8me_QQhZMf7RfjdA", + "guid_sig":"PT9-TApzpm7QtMxC63MjtdK2nUyxNI0tUoWlOYTFGke3kNdtxSzSvDV4uzq_7SSBtlrNnVMAFx2_1FDgyKawmqVtRPmT7QSXrKOL2oPzL8Hu_nnVVTs_0YOLQJJ0GYACOOK-R5874WuXLEept5-KYg0uShifsvhHnxnPIlDM9lWuZ1hSJTrk3NN9Ds6AKpyNRqf3DUdz81-Xvs8I2kj6y5vfFtm-FPKAqu77XP05r74vGaWbqb1r8zpWC7zxXakVVOHHC4plG6rLINjQzvdSFKCQb5R_xtGsPPfvuE24bv4fvN4ZG2ILvb6X4Dly37WW_HXBqBnUs24mngoTxFaPgNmz1nDQNYQu91-ekX4-BNaovjDx4tP379qIG3-NygHTjFoOMDVUvs-pOPi1kfaoMjmYF2mdZAmVYS2nNLWxbeUymkHXF8lT_iVsJSzyaRFJS1Iqn7zbvwH1iUBjD_pB9EmtNmnUraKrCU9eHES27xTwD-yaaH_GHNc1XwXNbhWJaPFAm35U8ki1Le4WbUVRluFx0qwVqlEF3ieGO84PMidrp51FPm83B_oGt80xpvf6P8Ht5WvVpytjMU8UG7-js8hAzWQeYiK05YTXk-78xg0AO6NoNe_RSRk05zYpF6KlA2yQ_My79rZBv9GFt4kUfIxNjd9OiV1wXdidO7Iaq_Q", + "url":"http:\/\/podunk.edu", + "url_sig":"T8Bp7j5DHHhQDCFcAHXfuhUfGk2P3inPbImwaXXF1xJd3TGgluoXyyKDx6WDm07x0hqbupoAoZB1qBP3_WfvWiJVAK4N1FD77EOYttUEHZ7L43xy5PCpojJQmkppGbPJc2jnTIc_F1vvGvw5fv8gBWZvPqTdb6LWF6FLrzwesZpi7j2rsioZ3wyUkqb5TDZaNNeWQrIEYXrEnWkRI_qTSOzx0dRTsGO6SpU1fPWuOOYMZG8Nh18nay0kLpxReuHCiCdxjXRVvk5k9rkcMbDBJcBovhiSioPKv_yJxcZVBATw3z3TTE95kGi4wxCEenxwhSpvouwa5b0hT7NS4Ay70QaxoKiLb3ZjhZaUUn4igCyZM0h6fllR5I6J_sAQxiMYD0v5ouIlb0u8YVMni93j3zlqMWdDUZ4WgTI7NNbo8ug9NQDHd92TPmSE1TytPTgya3tsFMzwyq0LZ0b-g-zSXWIES__jKQ7vAtIs9EwlPxqJXEDDniZ2AJ6biXRYgE2Kd6W_nmI7w31igwQTms3ecXe5ENI3ckEPUAq__llNnND7mxp5ZrdXzd5HHU9slXwDShYcW3yDeQLEwAVomTGSFpBrCX8W77n9hF3JClkWaeS4QcZ3xUtsSS81yLrp__ifFfQqx9_Be89WVyIOoF4oydr08EkZ8zwlAsbZLG7eLXY" + "sitekey":"-----BEGIN PUBLIC KEY----- +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxTeIwXZWrw/S+Ju6gewh +LgkKnNNe2uCUqCqMZoYgJar3T5sHCDhvXc4dDCbDkxVIaA/+V1mURtBV60a3IGjn +OAO0W0XGGLe2ED7G5o9U8T9mVGq8Mauv0v1oQ5wIR1gEAhBavkQ2OUGuF/YKn2nj +HlKsv9HzUAHpcDMUe3Uklc2RhQbMcnJxEgkyjCkDyrTtCZzISkTAocHvpCG1KSog +njUZdiz9UWxvM4rCFkCJvQU4RwRZJb7GA9ul+9JrF7NvUQTx8csRP2weBk1E9yyj +wbe187E0eVj9RXX2Mx3mYhgrTdodxLOVMSXZLg1/SMpeFFl7QBhuM0SiOPg8a7Et +e2iNA/RD4WiUFqCDfafasRa1TOozOm7LA+08lkAh5PeQPJsJbrX0wVVft++Y+5/z +BvcUOP73vcbz7j5hJ7HLsbQtye/UUCfODBFybuDqRM84Aet8rjZohX7vukXdMD4I +2HuB7pjR4uIfyYr0J63ANkvbsn8LR+RnirmHrK5H/OgxxjXcfYbGEQgFxvxhF6lA +FpMu6Do4dx3CIb6pRmZ8bjSImXexJ0BSo9n3gtrz0XYLecsYFlQ9+QQjm83qxyLb +M23in0xqMVsyQvzjNkpImrO/QdbEFRIIMee83IHq+adbyjQR49Z2hNEIZhkLPc3U +2cJJ2HkzkOoF2K37qwIzk68CAwEAAQ== +-----END PUBLIC KEY----- +" + }, + "recipients":{ + { + "guid":"lql-1VnxtiO4-WF0h72wLX1Fu8szzHDOXgQaTbELwXW77k8AKFfh-hYr70vqMrc3SSvWN-Flrc5HFhRTWB7ICw", + "guid_sig":"PafvEL0VpKfxATxlCqDjfOeSIMdmpr3iU7X-Sysa1h5LzDpjSXsjO37tYZL-accb1M5itLlfnW5epkTa5I4flsW21zSY1A2jCuBQUTLLGV7rNyyBy7lgqJUFvAMRx0TfXzP9lcaPqlM9T1tA6jfWOsOmkdzwofGeXBnsjGfjsO2xdGYe6vwjOU0DSavukvzDMnOayB9DekpvDnaNBTxeGLM45Skzr7ZEMcNF7TeXMbnvpfLaALYEKeQs9bGH-UgAG8fBWgzVAzeBfx_XSR1rdixjyiZGP0kq0h35SlmMPcEjliodOBFwMXqpXFB7Ibp4F6o6te2p2ErViJccQVG8VNKB6SbKNXY6bhP5zVcVsJ-vR-p4xXoYJJvzTN7yTDsGAXHOLF4ZrXbo5yi5gFAlIrTLAF2EdWQwxSGyLRWKxG8PrDkzEzX6cJJ0VRcLh5z6OI5QqQNdeghPZbshMFMJSc_ApCPi9_hI4ZfctCIOi3T6bdgTNKryLm5fhy_eqjwLAZTGP-aUBgLZpb1mf2UojBn6Ey9cCyq-0T2RWyk-FcIcbV4qJ-p_8oODqw13Qs5FYkjLr1bGBq82SuolkYrXEwQClxnrfKa4KYc2_eHAXPL01iS9zVnI1ySOCNJshB97Odpooc4wk7Nb2Fo-Q6THU9zuu0uK_-JbK7IIl6go2qA" + }, + }, + "callback":"\/post", + "version":"1.2", + "encryption":{ + "aes256ctr" + }, + "secret":"1eaa6613699be6ebb2adcefa5379c61a3678aa0df89025470fac871431b70467", + "secret_sig":"0uShifsvhHnxnPIlDM9lWuZ1hSJTrk3NN9Ds6AKpyNRqf3DUdz81-Xvs8I2kj6y5vfFtm-FPKAqu77XP05r74vGaWbqb1r8zpWC7zxXakVVOHHC4plG6rLINjQzvdSFKCQb5R_xtGsPPfvuE24bv4fvN4ZG2ILvb6X4Dly37WW_HXBqBnUs24mngoTxFaPgNmz1nDQNYQu91-ekX4-BNaovjDx4tP379qIG3-NygHTjFoOMDVUvs-pOPi1kfaoMjmYF2mdZAmVYS2nNLWxbeUymkHXF8lT_iVsJSzyaRFJS1Iqn7zbvwH1iUBjD_pB9EmtNmnUraKrCU9eHES27xTwD-yaaH_GHNc1XwXNbhWJaPFAm35U8ki1Le4WbUVRluFx0qwVqlEF3ieGO84PMidrp51FPm83B_oGt80xpvf6P8Ht5WvVpytjMU8UG7-js8hAzWQeYiK05YTXk-78xg0AO6NoNe_RSRk05zYpF6KlA2yQ_My79rZBv9GFt4kUfIxNjd9OiV1wXdidO7Iaq_Q" + } +``` + +type + +Der Nachrichtentyp: **notify, purge, refresh, force_refresh, auth_check, ping** oder **pickup**. Der Inhalt der Pakete variiert je nach Nachrichtentyp. Hier wird das **notify-Paket** beschrieben. + + + +callback + +Eine Zeichenkette, die an die URL angehängt wird und den Nomad-Kommunikationsendpunkt auf diesem System identifiziert. In der Regel ist dies die Zeichenfolge „/post“. + + + +version + +Die Kennung des Nomad-Protokolls, damit künftige Protokollrevisionen nebeneinander bestehen können. + + + +encryption + +Array der unterstützten Verschlüsselungsalgorithmen, geordnet nach abnehmender Präferenz. Wenn keine kompatiblen Verschlüsselungsmethoden angegeben sind, MÜSSEN Anwendungen „aes256cbc“ verwenden. + + + +secret + +Eine 64-stellige Zeichenkette, die von der sendenden Seite zufällig generiert wird. + + + +secret_sig + +Die RSA-Signatur des Geheimnisses, signiert mit dem privaten Schlüssel des Absenders. + + + +sender + +Ein Array aus vier Komponenten, die eine tragbare Identität liefern. Wir können die angegebene URL kontaktieren und ein Nomad-Infopaket herunterladen, um den öffentlichen Schlüssel des Absenders zu erhalten, und diesen zur Überprüfung der Absender-Guid und der Signaturen der Entsende-URL verwenden. + +- guid + + In der Regel eine 64 Zeichen lange base64url-kodierte Zeichenfolge. Sie wird erzeugt, wenn eine Identität erstellt wird, und es wird versucht, dass sie eindeutig ist; dies ist jedoch nicht erforderlich. + +- guid_sig + + Die RSA-Signatur der guid, signiert mit dem privaten Schlüssel des Absenders und base64url-kodiert. + +- url + + Die Basis-URL des Ortes, von dem dieser Beitrag stammt. + +- url_sig + + Die RSA-Signatur der url, signiert mit dem privaten Schlüssel des Absenders und base64url kodiert. + +- sitekey + + Der öffentliche Schlüssel der in der Url angegebenen Website + +recipients + +Wird nur für private Nachrichten verwendet. Ein Array von Umschlag-Empfängern. Jeder Empfänger wird durch ein Array aus guid und guid_sig dargestellt. Wenn Empfänger angegeben sind, wird das gesamte Paket auch mit einem ausgehandelten kryptografischen Algorithmus oder 'aes256cbc' gekapselt, wenn keiner ausgehandelt werden konnte. + +- guid + + Die guid eines privaten Empfängers. + +- guid_sig + + Die RSA-Signatur der guid, signiert mit dem privaten Schlüssel des Empfängers und base64url-kodiert
\ No newline at end of file diff --git a/doc/de/features.bb b/doc/de/features.bb deleted file mode 100644 index febdc65ee..000000000 --- a/doc/de/features.bb +++ /dev/null @@ -1,203 +0,0 @@ -[h1][b]$Projectname-Features[/b][/h1] - -[h1]$Projectname kurz zusammengefasst[/h1] - -tl;dr - -$Projectname stellt verteiltes Web-Publishing und soziale Kommunikation mit [b]dezentraler Rechteverwaltung[/b] zur Verfügung. - -Aber was genau ist eine dezentrale Rechteverwaltung? Sie gibt mir die Möglichkeit, etwas auf meiner Website (Fotos, Medien, Dateien, Webseiten etc.) mit bestimmten Personen auf anderen Websites zu teilen – aber nicht unbedingt mit [i]allen[/i] auf diesen Websites. Und: Sie brauchen kein Konto auf meiner Website und müssen sich auf meiner Website nicht extra einloggen, um sich die Dinge anzusehen, die ich mit ihnen geteilt habe. Sie haben ein Konto auf ihrer Heimat-Website, und „Magic Authentication“ zwischen den Websites besorgt den Rest. Da das Netzwerk dezentral aufgebaut ist, gibt es auch keinen einzelnen Betreiber des Netzwerks, der an der Rechteverwaltung vorbei alles sehen kann. - -$Projectname kombiniert viele Features von tradionellen Blogs, sozialen Netzwerken und Medien, Content-Management-Systemen und persönlichem Cloud-Speicher auf einer einfach zu nutzenden Plattform. Jeder Hub (Web-Server) im Grid kann isoliert operieren oder sich mit anderen Hubs zu einem Super-Netzwerk vereinen. Die Kontrolle über die Privatsphäre hat immer derjenige, der die Inhalte veröffentlicht. - -$Projectname ist eine Open-Source Webserver-Applikation, geschrieben ursprünglich für PHP/MySQL. Mit minimaler Erfahrung als Admin ist sie leicht zu installieren. Sie kann auch durch Plugins und Themes und weitere Angebote von Drittanbietern erweitert werden. - -[h1][b]$Projectname-Features[/b][/h1] - -$Projectname ist ein Allzweck-Web-Publishing- und Kommunikationsnetzwerk mit einigen einzigartigen Features. Es wurde für eine große Bandbreite von Nutzern entwickelt, von Nutzern sozialer Netzwerke über technisch nicht interessierte Blogger bis hin zu PHP-Experten und erfahrenen Systemadministratoren. - -Diese Seite listet einige der Kern-Features von $Projectname auf, die in der offiziellen Distribution enthalten sind. Wie immer bei freier Open-Source-Software sind den Möglichkeiten keine Grenzen gesetzt. Beliebige Erweiterungen, Addons, Themes und Konfigurationen sind möglich. - -[h2]Entwickelt für Privatsphäre und Freiheit[/h2] - -Eines der Design-Ziele von $Projectname ist einfache Kommunikations über das Web, ohne die Privatsphäre zu vernachlässigen, wenn die Nutzer das wünschen. Um dieses Ziel zu erreichen, verfügt $Projectname über einige Features, die beliebige Stufen des Privatsphäre-Schutzes ermöglichen: - -[b]Beziehungs-Tool[/b] - -Wenn Du in der $Projectname einen Kontakt hinzufügst (und das Beziehungs-Tool aktiviert hast), hast Du die Möglichkeit, einen „Grad der Freundschaft“ zu bestimmen. Bespiel: Wenn Du ein Blog eines Bekannten hinzufügst, könntest Du ihm den Freundschaftsgrad „Bekannte“ (Acquaintances) geben. - -Wenn Du aber den privaten Kanal eines Freundes hinzufügst, wäre der Freundschaftsgrad „Freunde“ vermutlich passender. - -Wenn Du allen Kontakten solche Freundschaftsgrade zugeordnet hast, kannst Du mit dem Beziehungs-Tool, das (sofern aktiviert) oben auf Deiner Matrix-Seite erscheint, bestimmen, welche Inhalte Du sehen willst. Indem Du die Schieberegler einstellst, legst Du fest, was angezeigt wird – nur Kanäle mit einem Freundschaftsgrad innerhalb des eingestellten Bereichs werden angezeigt - -Das Beziehungs-Tool erlaubt blitzschnelles Filtern von großen Mengen Inhalt, gruppiert nach Freundschaftsgrad. - -[b]Filter für Verbindungen[/b] - -Du kannst ganz genau kontrollieren, was in Deinem Stream erscheint, wenn Du den optionalen „Filter für Verbindungen“ aktivierst. Dann kannst Du beim Bearbeiten einer Verbindung Kriterien festlegen, nach denen entschieden wird, ob einzelne Beiträge dieser Verbindung importiert werden sollen oder nicht (Einschluss oder Ausschluss möglich). Wurde ein Beitrag einmal importiert, wirst Du auch alle Kommentare dazu sehen, egal ob eines der Kriterien auf sie zutrifft oder nicht. Du könntest einzelne Wörter festlegen, die, wenn sie in einem Beitrag vorkommen, dafür sorgen, dass er geblockt oder eben nicht geblockt wird. Auch reguläre Ausdrüce können benutzt werden, genauso wie Hashtags oder sogar die Sprache, in der der Beitrag verfasst wurde. - -[b]Zugriffsrechte[/b] - -Wenn Du Inhalte mit anderen teilst, hast Du die Option, den Zugriff darauf einzuschränken. Wenn Du auf das Schloss unterhalb des Beitrags-Editors klickst, kannst Du auswählen, wer diesen Beitrag sehen darf, indem Du einfach auf die Namen klickst. - -Diese Nachricht kann dann nur vom Absender und den eingestellten Empfängern betrachtet werden. Mit anderen Worten, sie erscheint nicht öffentlich auf einer Pinnwand. - -Solche Zugriffsrechte gibt es bei Beiträgen, Fotos, Terminen, Webseiten, Chat-Räumen und Dateien. - -[b]Ein Passwort für alle $Projectname-Server (Single Sign-on)[/b] - -Zugriffsrechte funktionieren im gesamten Grid mit allen Kanälen. Die meisten Links, die innerhalb von $Projectname verlinken, enthalten Deine Identität (zid), so dass der Zielserver Dich direkt anmelden kann. Du kannst Dich aber auch so auf jedem $Projectname-Server mit Deiner $Projectname-Identität anmelden und erhältst dann Zugriff auf die Inhalte, die für Dich freigegeben sind. - -Du loggst Dich nur einmal auf Deinem Heimat-Hub ein. Ab dann funktioniert die Authentifizierung gegenüber anderen $Projectname-Hubs „magisch“ von selbst. - -[b]Dateiablage (Cloud) mit WebDAV-Zugriff[/b] - -Du kannst in Deinem persönlichen Speicherbereich Dateien hochladen und ihn sogar als Verzeichnis von Deinem lokalen Betriebssystem anzeigen lassen (via WebDAV). Die Dateien können über Zugriffsrechte bestimmten $Projectname-Mitgliedern (und den Mitgliedern mancher anderer Netze) zugänglich gemacht oder auch komplett öffentlich zur Verfügung gestellt werden. - -[b]Fotoalben[/b] - -Stelle Deine Fotos online in Alben zur Verfügung. Auch hier kann der Zugriff über die Zugriffsrechte eingeschränkt werden. - -[b]Terminkalender[/b] - -Im eingebauten Terminkalender kannst Du Termine erstellen und verwalten. Auch hier greifen die Zugriffsrechte für andere. Termine können im vcalendar/iCal-Format importiert/exportiert und in Beiträgen mit anderen geteilt werden. Wenn Deine Kontakte ihren Geburtstag in ihr Profil eingetragen haben, werden diese Geburtstage automatisch zu Deinem Kalender hinzugefügt – mit entsprechender Anpassung der Zeitzone, so dass Du nie zu früh oder zu spät gratulierst. Termine werden normalerweise mit Teilnehmerzählern erstellt, so dass Deine Freunde und Verbindungen sofort zu- oder absagen können. - -[b]Chat-Räume[/b] - -Du kannst Chaträume erstellen und über die Zugriffsrechte nur bestimmten Nutzern öffnen. Die Nachrichten sind sicherer verschlüsselt als es normalerweise bei Jabber/XMPP, IRC und anderen Instant Messengern üblich ist. Über Plugins ist es aber auch möglich, andere IM-Dienste aus der $Projectname heraus zu nutzen. - -[b]Erstellen von Webseiten[/b] - -In $Projectname gibt es Werkzeuge für „Content Management“, mit denen Du einfache Webseiten erstellen kannst, aber auch komplexe Layouts, Menüs, Blöcke und Widgets. Auch hier greifen die Zugriffsrechte, so dass die entstandenen Seiten nur von denen betrachtet werden können, denen Du das Recht dazu eingeräumt hast. - -[b]Apps[/b] - -$Projectname-Mitglieder könnnen Apps erstellen und verteilen. Anders als bei anderen Systemen, bei denen man an den System-Anbieter gebunden ist, werden diese Apps komplett vom App-Anbieter kontrolliert, der auf Wunsch seine eigene Zugriffskontrolle und ein Bezahlsystem einbauen kann. Die meisten Apps in der $Projectname sind kostenlos. Sie sind sehr einfach und ohne große Programmierkenntnisse zu erstellen. - -[b]Layout[/b] - -Das Seiten-Layout basiert auf eine Beschreibungssprache namens Comanche. $Projectname ist selbst in Comanche-Layouts verfasst, die man verändern kann. Dadurch ist eine sehr starke Anpassung an die eigenen Bedürfnisse möglich, wie man sie so in Multi-User-Umgebungen normalerweise nicht findet. - -[b]Lesezeichen[/b] - -Du kannst Lesezeichen teilen, speichern und verwalten, direkt aus den Unterhaltungen mit anderen heraus. - -[b]Verschlüsselung privater Nachrichten[/b] - -Private Nachrichten werden verschlüsselt gespeichert. Das bietet keine absolute Sicherheit, erschwert aber einfaches Herumschnüffeln durch den Administrator oder Internet Provider. - -Jeder $Projectname-Kanal hat seinen eigenes 4096-bit-RSA-Schlüsselpaar, das erzeugt wird, wenn der Kanal erstellt wird. Damit werden private Nachrichten und Beiträge mit eingeschränktem Empfängerkreis während der Übermittlung zu anderen Hubs geschützt. - -Zusätzlich können Nachrichten mit Ende-zu-Ende-Verschlüsselung versehen werden, so dass weder $Projectname-Hub-Administratoren noch ISPs irgendetwas mitlesen können, solange sie nicht über das Passwort verfügen. - -Komplett öffentliche Nachrichten werden weder in der Datenbank noch bei der Übertragung verschlüsselt (abgesehen ggfs. von SSL). - -Private Nachrichten und Beiträge können gelöscht (zurückgezogen) werden, aber es kann natürlich nicht garantiert werden, dass der Empfänger sie nicht schon gelesen hat. - -Alle Beiträge können mit einem „Verfallsdatum“ versehen werden. Zu diesem Zeitpunkt werden sie dann von den Servern der Empfänger gelöscht. - -[b]Verbindung zu anderen Diensten[/b] - -Neben Plugins, die das „crossposten“ zu diversen anderen Netzwerk erlauben, wird der Import von RSS/Atom-Feeds nativ unterstützt, auch, um mit diesen Inhalten spezielle Kanäle zu erstellen. Außerdem kann über das Diaspora-Protokoll mit Kontakten in den Netzwerken Friendica und Diaspora kommuniziert werden. Diese Unterstützung ist als experimentell eingestuft, da diese Netzwerke nicht die gleichen Möglichkeiten wie $Projectname in Sachen Privatsphäre und Verschlüsselung bieten, so dass Kommunikation mit ihnen zu Privatsphäreproblemen führen könnte. - -Weiterhin wird OpenID auf experimenteller Ebene unterstützt und kann bei den Zugriffsrechten genutzt werden, um Inhalte für per OpenID authentifizierte Nutzer freizugeben. An dieser Funktion wird noch gearbeitet. Jeder $Projectname-Hub kann außerdem als OpenID-Provider dienen. - -Die Inhalte von Kanälen können als Quellen für andere Kanäle dienen (wenn der Kanalinhaber das erlaubt), so dass Themen-Kanäle mit den Inhalten von zwei oder mehr Kanälen erstellt werden können. - -[b]Sammlungen[/b] - -„Sammlungen“ sind unsere Implementierung von Privatsphäregruppen, ähnlich den „Kreisen“ bei Google+ und den „Aspekten“ bei Diaspora. Sammlungen können zur Filterung der angezeigten Nachrichten genutzt werden (nur Threads anzeigen, die von einem Mitglied dieser Sammlung gestartet wurden), aber auch zum Setzen von Zugriffsrechten (bevor der Beitrag abgeschickt wird). - -[b]Verzeichnisdienste[/b] - -Wir stellen einfachen Zugriff auf ein Mitgliederverzeichnis zur Verfügung, samt einer dezentralen Möglichkeit, sich neue Kontakte basierend auf den eigenen vorschlagen zu lassen. Die Verzeichnis-Server sind normale $Projectname-Server, bei denen der Administrator sich entschieden hat, sie auch als Verzeichnis agieren zu lassen. Das benötigt mehr Ressourcen als eine normale $Projectname-Installation, deshalb ist das nicht voreingestellt. Die Verzeichnis-Server synchronisieren sich miteinander, so dass (abgesehen von einer gewissen Verzögerung bis zur nächsten Synchronisation) alle Verzeichnis-Server aktuelle Informationen über das gesamte Netzwerk bereitstellen können. - -[b]TLS/SSL[/b] - -$Projectname-Server, die TLS/SSL benutzen, verschlüsseln ihre Kommunikation vom Server zum Nutzer mit SSL. Nach den aktuellen Enthüllungen über das Umgehen von Verschlüsselung durch NSA, GHCQ und andere Dienste, sollte man jedoch nicht mehr davon ausgehen, dass diese Verbindungen nicht mitgelesen werden können. Private Kommunikation (nicht komplett öffentliche Beiträge) wird darüberhinaus zusätzlich verschlüsselt, bevor sie von einem Server zum anderen geschickt wird. - -[b]Kanal-Einstellungen[/b] - -Wenn ein Kanal erstellt wird, muss eine bestimmte Zugriffsrechte-Kategorie (z.B. öffentliches Forum oder privater Kanal für soziales Netzwerken) ausgewählt werden, die dafür sorgt, dass sinnvolle Privatsphäre-Einstellungen für diese Art von Kanal ausgewählt werden. - -Wenn Du die Experten-Kategorie wählst, kannst Du detaillierte Zugriffseinstellungen für verschiedenste Aspekte der Kommunikation festlegen. Unter den „Sicherheits- und Privatsphäre-Einstellungen“ kann für jeden Punkt auf der linken Seite eine von 7-8 möglichen Optionen aus dem Menü gewählt werden. Daneben gibt es diverse weitere Einstellmöglichkeiten zum Thema Privatsphäre. - -Die Optionen für die einzelnen Punkte (z.B., wer Deine normalen Beiträge sehen kann) sind: -[ul][*]Niemand außer Du selbst -[*]Nur die, denen Du es explizit erlaubst -[*]Angenommene Verbindungen -[*]Beliebige Verbindungen -[*]Jeder auf diesem Website -[*]Alle $Projectname-Nutzer -[*]Jeder authentifizierte -[*]Jeder im Internet[/ul] - -[b]Private und öffentliche Foren[/b] - -Foren sind Kanäle, in denen mehrere Nutzer als Autoren fungieren können; eine Nachricht eines entsprechend berechtigten Nutzers an das Forum wird an alle Foren-Mitglieder verteilt. Es gibt momentan zwei Arten, um auf diese Weise an ein Forum zu posten: 1) Direktes Posten auf der Kanal-Seite des Forums („wall-to-wall post“) oder 2) über @mention-Tags. Jeder kann Foren erstellen, und sie können für beliebige Zwecke genutzt werden. Das Kanal-Verzeichnis ermöglicht es, direkt nach öffentlichen Foren zu suchen. Private Foren können meist nur von den Mitgliedern beschickt und gelesen werden. - -[b]Klone[/b] - -Konten in der $Projectname werden auch als [i]nomadische Identitäten[/i] bezeichnet. Nomadisch, weil bei anderen Diensten die Identität eines Nutzers an den Server oder die Plattform gebunden ist, auf der er ursprünglich erstellt wurde. Ein Facebook- oder Gmail-Konto ist and diese Dienste gekettet. Er funktioniert nicht ohne Facebook.com bzw. Gmail.com. - -Bei $Projectname ist das anders. Sagen wir, Du hast eine $Projectname-Indentität namens tina@$Projectnamehub.com. Die kannst Du auf einen anderen Server klonen, mit dem gleichen oder einem anderen Namen, zum Beispiel lebtEwig@Anderer$ProjectnameHub.info. - -Beide Kanäle sind jetzt miteinander synchronisiert, das heißt, dass alle Kontakte und Einstellungen auf dem Klon immer die gleichen sind wie auf dem ursprünglichen Kanal. Es ist egal, ob Du eine Nachricht von dort aus oder vom Klon aus schickst. Alle Nachrichten sind in beiden Klonen vorhanden. - -Das ist ein ziemlich revolutionäres Feature, wenn man sich einige Szenarien dazu ansieht: - -[ul][*]Was passiert, wenn ein Server, auf dem sich Deine Identität befindet, plötzlich offline ist (sicher haben viele von Euch den Twitter-„Fail Whale“ gesehen und verflucht)? Ohne Klone ist der Nutzer nicht in der Lage zu kommunizieren, bis der Server wieder online ist. Mit Klonen loggst Du Dich einfach bei Deinem geklonten Kanal ein und lebst glücklich bis an Dein Ende. -[*]Der Administrator Deines $Projectname-Hubs kann es sich nicht länger leisten, seinen für alle kostenlosen Server zu bezahlen. Er gibt bekannt, dass der Server in zwei Wochen vom Netz gehen wird. Zeit genug, um Deine $Projectname-Kanäle auf andere Server zu klonen und somit Verbindungen und Freunde zu behalten. -[*]Was, wenn Dein Kanal staatlicher Zensur unterliegt? Dein Server-Admin könnte gezwungen werden, Dein Konto und alle damit verbundenen Kanäle und Daten zu löschen. Durch Klone bietet $Projectname Zensur-Resistenz. Wenn Du willst, kannst Du hunderte von Klonen haben, alle mit unterschiedlichen Namen und auf unterschiedlichen Hubs überall im Internet.[/ul] - -$Projectname bietet interessante, neue Möglichkeiten in Bezug auf die Privatsphäre. Mehr dazu unter „Tipps und Tricks zur privaten Kommunikation“. - -Klone unterliegen einigen Restriktionen. Eine vollständige Erklärung zum Klonen von Identitäten gibt es unter „Klone“. - -[b]Mehrere Profile[/b] - -Jeder Kanal kann beliebig viele Profile mit unterschiedlichen Informationen definieren. Dann kannst Du einstellen, wer von Deinen Kontakten welches Profil zu sehen bekommt. Das Default-Profil ist für alle anderen zu sehen und kann so auf nur wenige Informationen beschränkt werden, während Freunde und Bekannte mehr zu sehen bekommen. - -[b]Kanal-Backups[/b] - -In $Projectname gibt es ein einfaches Ein-Klick-Backup, mit dem Du ein komplettes Backup Deiner Kanal-Einstellungen und Verbindungen herunterladen kannst. - -Solche Backups sind ein Weg, um Klone zu erstellen, und können genutzt werden, um einen Kanal wiederherzustellen. - -[b]Löschen von Konten[/b] - -Konten und Kanäle können sofort gelöscht werden, indem Du einfach auf einen Link klickst. Das wars. Alle damit verbundenen Inhalte werden aus dem Grid gelöscht (inklusiver aller Beiträge und sonstiger Inhalte, die von dem gelöschten Konto/Kanal erzeugt wurden). Je nach Anzahl Deiner Verbindungen kann es etwas dauern, bis die Inhalte auch von allen Servern Deiner Kontakte gelöscht werden, aber die Löschung wird so schnell wie sinnvoll möglich durchgeführt. - -[h2]Erstellen von Inhalten[/h2] - -[b]Beiträge schreiben[/b] - -$Projectname unterstützt diverse verschiedene Wege, um Inhalte mit Auszeichnung (z.B. fett, kursiv, farbig etc.) zu erstellen. Voreinstellung ist die $Projectname-Variante von BBCode (wie in vielen Web-Foren) mit einigen Ergänzungen, die nur hier funktionieren. Du kannst auch Markdown benutzen, wenn Dir das leichter fällt. Bis vor kurzem konnte auch ein grafischer Editor eingesetzt werden, der jedoch große Probleme aufwies und deshalb entfernt wurde. Wir suchen gerade nach einer Alternative. - -Webseiten können neben BBCode und Markdown auch in HTML und Plain Text erstellt werden. - -[b]Inhalte löschen[/b] - -Alle Inhalte in $Projectname bleiben unter der Kontrolle des Mitglieds (bzw. Kanals), der sie ursprünglich erstellt hat. Alle Beiträge können jederzeit gelöscht werden, egal, ob sie auf dem Heimat-Server des Nutzers oder auf einem anderen Server erstellt wurden, an dem der Nutzer via Zot (Kommunikations- und Authentifizierungsprotokoll von $Projectname) angemeldet war. - -[b]Medien[/b] - -Genau wie jedes andere Blog-System, soziale Netzwerk oder Mikro-Blogging-Dienst unterstützt $Projectname das Hochladen von Dateien, das Einbetten von Bildern und Videos und das Verlinken von Seiten. - -[b]Vorschau/Editieren[/b] - -Vor dem Absenden kann eine Vorschau von Beiträgen betrachtet werden. Außerdem können Beiträge auch nach dem Absenden noch verändert werden. - -[b]Umfragen[/b] - -Beiträge können als Umfragen gestaltet werden – die Leser können dann mittels entsprechender Buttons zustimmen, ablehnen oder sich enthalten, was ähnlich wie „Likes“ am Beitrag sichtbar wird. Dadurch kannst Du abschätzen, wie gut neue Ideen ankommen, oder informelle Umfragen starten. - -[b]$Projectname erweitern[/b] - -Die $Projectname kann auf vielerlei Art erweitert werden: Durch Server-Anpassung, persönliche Anpassung, setzen von Optionen, Themes und Addons/Plugins. - -[b]API[/b] - -Es existiert eine API, die von beliebigen Programmen/Apps und Diensten genutzt werden kann. Sie basiert auf der ursprünglichen Twitter-API (für die es hunderte von Tools und Apps gibt). Sie wird aktuell erweitert, um Zugriff auf Möglichkeiten zu gewähren, die es nur in $Projectname gibt. Authentifikation erfolgt über Login/Passwort oder OAuth. Eine Client-Registrierung für OAuth-Applikationen ist möglich. - -#include doc/macros/main_footer.bb; diff --git a/doc/de/functions.md b/doc/de/functions.md new file mode 100644 index 000000000..484c978b9 --- /dev/null +++ b/doc/de/functions.md @@ -0,0 +1,229 @@ +### Funktionen + +Im Folgenden einige der Hauptfunktionen von Hubzilla, die in der offiziellen Version enthalten sind. Hubzilla ist eine hochgradig erweiterbare Plattform, so dass weitere Funktionen und Möglichkeiten durch zusätzliche Themes und Plugins hinzugefügt werden können. + + + +#### Affinity-Schieberegler + +Beim Hinzufügen von Verbindungen in Hubzilla haben Mitglieder die Möglichkeit, der neuen Verbindung „Affinitätsstufen“ zuzuweisen (wie eng Ihre Freundschaft ist). Wenn Sie z. B. jemanden hinzufügen, dessen Blog Sie verfolgen, können Sie seinem Kanal die Affinitätsstufe „Bekannte“ zuweisen. + +Wenn Sie hingegen den Kanal eines Freundes hinzufügen, könnten Sie ihm die Affinitätsstufe „Freunde“ zuweisen. + +An diesem Punkt passt das Hubzilla *Affinitäts-Schieberegler-Tool*, das in der Regel oben auf Ihrer „Stream“-Seite erscheint, den Inhalt der Seite so an, dass die Kanäle innerhalb des gewünschten Affinitätsbereichs angezeigt werden. Kanäle außerhalb dieses Bereichs werden nicht angezeigt, es sei denn, Sie passen den Schieberegler so an, dass er sie einschließt. + +Der Schieberegler für die Affinität ermöglicht die sofortige Filterung großer Mengen von Inhalten, gruppiert nach Grad der Nähe. + + + +#### Filterung von Verbindungen + +Mit dem optionalen „Verbindungsfilter“ haben Sie die Möglichkeit, genau zu steuern, was in Ihrem Stream angezeigt wird. Wenn er aktiviert ist, bietet der Verbindungseditor Eingaben zur Auswahl von Kriterien, die erfüllt werden müssen, um einen bestimmten Beitrag aus einem bestimmten Kanal aufzunehmen oder auszuschließen. Sobald ein Beitrag zugelassen wurde, sind alle Kommentare zu diesem Beitrag erlaubt, unabhängig davon, ob sie den Auswahlkriterien entsprechen. Sie können Wörter auswählen, die, falls vorhanden, den Beitrag blockieren oder sicherstellen, dass er in Ihren Stream aufgenommen wird. Reguläre Ausdrücke können für eine noch feinere Kontrolle verwendet werden, ebenso wie Hashtags oder sogar die erkannte Sprache des Beitrags. + + + +#### Zugriffskontrolllisten + +Bei der Freigabe von Inhalten haben die Mitglieder die Möglichkeit einzuschränken, wer den Inhalt sehen kann. Durch Anklicken des Vorhängeschlosses unter dem Freigabefeld kann man die gewünschten Empfänger des Beitrags auswählen, indem man auf deren Namen klickt. + +Nach dem Versenden kann die Nachricht nur vom Absender und den ausgewählten Empfängern eingesehen werden. Mit anderen Worten, die Nachricht wird nicht auf öffentlichen Wänden erscheinen. + +Zugangskontrolllisten können auf Inhalte und Beiträge, Fotos, Ereignisse, Webseiten, Chatrooms und Dateien angewendet werden. + + + +#### Einmalige Anmeldung + +Zugriffskontrolllisten funktionieren dank unserer einzigartigen Single-Sign-On-Technologie für alle Kanäle im Grid. Die meisten internen Links bieten ein Identitäts-Token, das auf anderen Hubzilla-Sites verifiziert und zur Kontrolle des Zugriffs auf private Ressourcen verwendet werden kann. Sie melden sich einmal bei Ihrem Home Hub an. Danach ist die Authentifizierung für alle Hubzilla-Ressourcen „magisch“. + + + +#### WebDAV-fähiger Dateispeicher + +Dateien können mit den Dienstprogrammen Ihres Betriebssystems (in den meisten Fällen per Drag & Drop) in Ihren persönlichen Speicherbereich hochgeladen werden. Sie können diese Dateien mit Zugriffskontrolllisten für eine beliebige Kombination von Hubzilla-Mitgliedern (einschließlich einiger Netzwerkmitglieder von Drittanbietern) schützen oder sie öffentlich zugänglich machen. + + + +#### Fotoalben + +Speichern Sie Fotos in Alben. Alle Ihre Fotos können durch Zugriffskontrolllisten geschützt werden. + + + +#### Veranstaltungskalender + +Erstellen und verwalten Sie Ereignisse und Aufgaben, die ebenfalls mit Zugriffskontrolllisten geschützt werden können. Ereignisse können mit dem Industriestandard vcalendar/iCal-Format in andere Software importiert/exportiert und in Posts mit anderen geteilt werden. Geburtstagsereignisse werden automatisch von Ihren Freunden hinzugefügt und in Ihre korrekte Zeitzone umgewandelt, so dass Sie genau wissen, wann der Geburtstag stattfindet - unabhängig davon, wo auf der Welt Sie sich in Bezug auf die Geburtstagsperson befinden. Veranstaltungen werden normalerweise mit Anwesenheitszählern erstellt, so dass Ihre Freunde und Verbindungen sofort zusagen können. + + + +#### Chaträume + +Sie können eine beliebige Anzahl von persönlichen Chatrooms erstellen und den Zugang über Zugangskontrolllisten erlauben. Diese sind in der Regel sicherer als XMPP, IRC und andere Instant Messaging-Transporte, obwohl wir auch die Nutzung dieser anderen Dienste über Plugins erlauben. + + + +#### Erstellung von Webseiten + +Hubzilla verfügt über zahlreiche „Content Management“-Werkzeuge zur Erstellung von Webseiten, einschließlich Layout-Bearbeitung, Menüs, Blöcke, Widgets und Seiten-/Inhaltsbereiche. Alle diese Tools können zugriffsgesteuert werden, so dass die resultierenden Seiten nur für das vorgesehene Publikum zugänglich sind. + + + +#### Anwendungen + +Apps können von Mitgliedern erstellt und verteilt werden. Diese unterscheiden sich von den traditionellen „Vendor Lockin“-Apps, da sie vollständig vom Autor kontrolliert werden - der den Zugriff auf die Zielseiten der App kontrollieren und entsprechend für diesen Zugriff bezahlen kann. Die meisten Apps in Hubzilla sind kostenlos und können auch von Personen ohne Programmierkenntnisse leicht erstellt werden. + + + +#### Gestaltung + +Das Seitenlayout basiert auf einer Beschreibungssprache namens Comanche. Hubzilla selbst ist in Comanche-Layouts geschrieben, die Sie ändern können. Dies ermöglicht ein Maß an individueller Anpassung, das man in so genannten „Multi-User-Umgebungen“ normalerweise nicht findet. + + + +#### Lesezeichen + +Teilen und speichern/verwalten Sie Lesezeichen von Links, die in Unterhaltungen bereitgestellt werden. + + + +#### Verschlüsselung privater Nachrichten und Datenschutzaspekte + +Private Nachrichten werden in einem verschlüsselten Format gespeichert. Dies ist zwar nicht hundertprozentig sicher, verhindert aber in der Regel das gelegentliche Ausspähen durch den Site-Administrator oder ISP. + +Jeder Hubzilla-Channel verfügt über einen eigenen Satz privater und zugehöriger öffentlicher RSA 4096-Bit-Schlüssel, die bei der ersten Erstellung des Channels generiert werden. Dies wird verwendet, um private Nachrichten und Beiträge während der Übertragung zu schützen. + +Zusätzlich können Nachrichten mit einer „Ende-zu-Ende-Verschlüsselung“ erstellt werden, die von Hubzilla-Betreibern, ISPs oder anderen Personen, die den Passcode nicht kennen, nicht gelesen werden kann. + +Öffentliche Nachrichten werden in der Regel weder bei der Übertragung noch bei der Speicherung verschlüsselt. + +Private Nachrichten können zurückgezogen (nicht gesendet) werden, obwohl es keine Garantie gibt, dass der Empfänger sie noch nicht gelesen hat. + +Beiträge und Nachrichten können mit einem Verfallsdatum versehen werden, nach dessen Ablauf sie auf der Seite des Empfängers gelöscht/entfernt werden. + + + +#### Dienst-Föderation + +Neben zusätzlichen „Cross-Post-Connectoren“ zu einer Vielzahl von alternativen Netzwerken gibt es eine native Unterstützung für den Import von Inhalten aus RSS/Atom-Feeds und deren Verwendung zur Erstellung spezieller Kanäle. Es sind auch Plugins verfügbar, um mit anderen über die Protokolle Diaspora und GNU-Social (OStatus) zu kommunizieren. Diese Netzwerke unterstützen keine nomadische Identität oder domänenübergreifende Zugriffskontrolle; allerdings wird die grundlegende Kommunikation mit/von Diaspora, Friendica, GNU-Social, Mastodon und anderen Anbietern, die diese Protokolle verwenden, unterstützt. + +Es gibt auch eine experimentelle Unterstützung für OpenID-Authentifizierung, die in Zugriffskontrolllisten verwendet werden kann. Dies ist ein Projekt, an dem gearbeitet wird. Ihr Hubzilla-Hub kann als OpenID-Provider verwendet werden, um Sie bei externen Diensten, die diese Technologie nutzen, zu authentifizieren. + +Channels können die Berechtigung haben, zu „derivativen Channels“ zu werden, bei denen zwei oder mehr bestehende Channels kombiniert werden, um einen neuen thematischen Channel zu erstellen. + + + +#### Datenschutz-Gruppen + +Unsere Implementierung von Datenschutzgruppen ähnelt den „Circles“ von Google und den „Aspekten“ von Diaspora. Dies ermöglicht Ihnen, Ihren eingehenden Stream nach ausgewählten Gruppen zu filtern und die ausgehende Zugriffskontrollliste automatisch auf die Mitglieder dieser Gruppe zu beschränken, wenn Sie etwas posten. Sie können dies jederzeit (vor dem Senden des Beitrags) rückgängig machen. + + + +#### Verzeichnisdienste + +Wir bieten einen einfachen Zugang zu einem Mitgliederverzeichnis und stellen dezentralisierte Tools zur Verfügung, die „Vorschläge“ für Freunde machen können. Die Verzeichnisse sind normale Hubzilla-Sites, die sich entschieden haben, die Rolle des Verzeichnisservers zu übernehmen. Dies erfordert mehr Ressourcen als die meisten typischen Sites und ist daher nicht die Standardeinstellung. Die Verzeichnisse werden synchronisiert und gespiegelt, so dass sie alle aktuelle Informationen über das gesamte Netzwerk enthalten (vorbehaltlich normaler Ausbreitungsverzögerungen). + + + +#### TLS/SSL + +Bei Hubzilla-Hubs, die TLS/SSL verwenden, wird die Kommunikation zwischen Client und Server über TLS/SSL verschlüsselt. In Anbetracht der jüngsten Enthüllungen in den Medien über die weit verbreitete, weltweite Überwachung und die Umgehung der Verschlüsselung durch die NSA und das GCHQ kann man davon ausgehen, dass HTTPS-geschützte Kommunikation auf verschiedene Weise kompromittiert werden kann. Private Kommunikation wird daher auf einer höheren Ebene verschlüsselt, bevor sie nach außen gesendet wird. + + + +#### Channel-Einstellungen + +Bei der Erstellung eines Channels wird eine Rolle ausgewählt, die eine Reihe von vorkonfigurierten Sicherheits- und Datenschutzeinstellungen anwendet. Diese werden nach bewährten Verfahren ausgewählt, um den Datenschutz auf dem gewünschten Niveau zu halten. + +Wenn Sie eine „benutzerdefinierte“ Datenschutzrolle wählen, können Sie für jeden Kanal fein abgestufte Berechtigungen für verschiedene Aspekte der Kommunikation festlegen. Unter der Überschrift „Sicherheits- und Datenschutzeinstellungen“ gibt es zum Beispiel für jeden Aspekt auf der linken Seite sechs (6) mögliche Anzeige-/Zugriffsoptionen, die durch Anklicken des Dropdown-Menüs ausgewählt werden können. Es gibt auch eine Reihe anderer Datenschutzeinstellungen, die Sie bearbeiten können. + +Die Optionen sind: + +\- Niemand außer Ihnen selbst. +\- Nur diejenigen, die Sie ausdrücklich zulassen. +\- Jeder, der in Ihrem Adressbuch steht. +\- Alle Personen auf dieser Website. +\- Alle Personen in diesem Netzwerk. +\- Jeder, der authentifiziert ist. +\- Jeder, der sich im Internet befindet. + + + +#### Öffentliche und private Foren + +Foren sind in der Regel Kanäle, an denen sich mehrere Autoren beteiligen können. Derzeit gibt es zwei Möglichkeiten, Beiträge in Foren zu veröffentlichen: 1) „Wand-zu-Wand“-Beiträge und 2) über @mention-Tags im Forum. Foren können von jedem erstellt und für jeden Zweck verwendet werden. Das Verzeichnis enthält eine Option zur Suche nach öffentlichen Foren. In privaten Foren können nur Beiträge verfasst werden, die oft nur von Mitgliedern gesehen werden. + + + +#### Klonen von Accounts + +Konten in Hubzilla werden als *nomadische Identitäten* bezeichnet, da die Identität eines Mitglieds nicht an den Hub gebunden ist, in dem die Identität ursprünglich erstellt wurde. Wenn Sie zum Beispiel ein Facebook- oder Gmail-Konto erstellen, ist es an diese Dienste gebunden. Sie können nicht ohne Facebook.com oder Gmail.com funktionieren. + +Angenommen, Sie haben eine Hubzilla-Identität namens `tina@Hubzillahub.com` erstellt. Sie können sie auf einen anderen Hubzilla-Hub klonen, indem Sie denselben oder einen anderen Namen wählen: `liveForever@SomeHubzillaHub.info` + +Beide Kanäle werden nun synchronisiert, d. h. alle Ihre Kontakte und Einstellungen werden auf Ihrem Klon dupliziert. Es spielt keine Rolle, ob Sie einen Beitrag von Ihrem ursprünglichen Hub oder von dem neuen Hub aus senden. Die Beiträge werden auf beiden Konten gespiegelt. + +Dies ist eine ziemlich revolutionäre Funktion, wenn wir uns einige Szenarien vor Augen führen: + +\- Was passiert, wenn der Hub, in dem sich eine Identität befindet, plötzlich offline geht? Ohne Klonen ist ein Mitglied nicht in der Lage zu kommunizieren, bis der Hub wieder online ist (zweifellos haben viele von Ihnen den „Fail Whale“ von Twitter gesehen und verflucht). Beim Klonen loggen Sie sich einfach in Ihr geklontes Konto ein, und das Leben geht fröhlich weiter. + +\- Der Administrator Ihres Hubs kann es sich nicht mehr leisten, für seinen kostenlosen und öffentlichen Hubzilla-Hub zu bezahlen. Er kündigt an, dass der Hub in zwei Wochen abgeschaltet wird. Das gibt Ihnen reichlich Zeit, Ihre Identität(en) zu klonen und Ihre Hubzilla-Beziehungen, Freunde und Inhalte zu bewahren. + +\- Was ist, wenn Ihre Identität der staatlichen Zensur unterliegt? Ihr Hub-Anbieter kann gezwungen sein, Ihr Konto sowie alle Identitäten und zugehörigen Daten zu löschen. Mit Klonen bietet Hubzilla **Widerstand gegen Zensur**. Wenn Sie möchten, können Sie Hunderte von Klonen haben, die alle einen anderen Namen tragen und auf vielen verschiedenen Hubs im Internet verstreut sind. + +Hubzilla bietet interessante neue Möglichkeiten für die Privatsphäre. Weitere Informationen finden Sie auf der Seite [Tipps zum Schutz der Privatsphäre](/help/de/member/protection_of_privacy.md). + +Es gelten einige Vorbehalte. Eine vollständige Erklärung des Klonens von Identitäten finden Sie auf der Seite [Klonen](/help/de/member/clone.md). + + + +#### Mehrere Profile + +Es kann eine beliebige Anzahl von Profilen mit unterschiedlichen Informationen erstellt werden, die für bestimmte Ihrer Verbindungen/Freunde sichtbar gemacht werden können. Ein „Standard“-Profil kann von jedem eingesehen werden und kann begrenzte Informationen enthalten, während mehr Informationen für ausgewählte Gruppen oder Personen zugänglich sind. Das bedeutet, dass das Profil (und der Inhalt der Website), das Ihre biertrinkenden Freunde sehen, anders sein kann als das, was Ihre Kollegen sehen, und auch völlig anders als das, was für die Allgemeinheit sichtbar ist. + + + +#### Account-Sicherung + +Hubzilla bietet ein einfaches Konto-Backup mit nur einem Klick, bei dem Sie ein vollständiges Backup Ihres Profils herunterladen können. Die Backups können dann zum Klonen oder Wiederherstellen eines Profils verwendet werden. + + + +#### Konto-Löschung + +Konten können sofort gelöscht werden, indem Sie auf einen Link klicken. Das war's. Alle zugehörigen Inhalte werden dann aus dem Netz gelöscht (einschließlich der Beiträge und aller anderen Inhalte, die von dem gelöschten Profil erstellt wurden). Je nach der Anzahl der Verbindungen, die Sie haben, kann der Vorgang des Löschens entfernter Inhalte einige Zeit in Anspruch nehmen, aber er wird so schnell wie möglich durchgeführt. + + + +#### Löschung von Inhalten + +Alle in Hubzilla erstellten Inhalte bleiben unter der Kontrolle des Mitglieds (oder Channels), das sie ursprünglich erstellt hat. Ein Mitglied kann zu jeder Zeit eine Nachricht oder eine Reihe von Nachrichten löschen. Der Löschvorgang stellt sicher, dass der Inhalt gelöscht wird, unabhängig davon, ob er auf dem primären (Heimat-)Hub eines Channels oder auf einem anderen Hub gepostet wurde, bei dem der Channel über Nomad (Hubzilla-Kommunikations- und Authentifizierungsprotokoll) remote authentifiziert wurde. + + + +#### Medien + +Ähnlich wie jedes andere moderne Blogging-System, soziale Netzwerk oder ein Micro-Blogging-Dienst unterstützt Hubzilla das Hochladen von Dateien, das Einbetten von Videos und das Verlinken von Webseiten. + + + +#### Vorschau/Bearbeitung + +Beiträge und Kommentare können vor dem Senden in der Vorschau angezeigt und nach dem Senden bearbeitet werden. + + + +#### Abstimmen/Umfragen + +Beiträge können in „Umfrage“-Elemente umgewandelt werden, die es den Lesern ermöglichen, Feedback zu geben, das in Zählern für „Zustimmung“, „Ablehnung“ und „Enthaltung“ zusammengefasst wird. Auf diese Weise können Sie das Interesse für Ideen messen und informelle Umfragen erstellen. + + + +#### Erweitern von Hubzilla + +Hubzilla kann auf verschiedene Weise erweitert werden: durch Anpassung der Website, persönliche Anpassung, Optionseinstellungen, Themen und Addons/Plugins. + + + +#### API + +Eine API ist für die Nutzung durch Dienste von Drittanbietern verfügbar. Ein Plugin bietet auch eine grundlegende Implementierung der Twitter-API (für die es Hunderte von Drittanbieter-Tools gibt). Der Zugriff kann über Login/Passwort oder OAuth erfolgen, und eine Client-Registrierung von OAuth-Anwendungen ist vorgesehen.
\ No newline at end of file diff --git a/doc/de/general.bb b/doc/de/general.bb deleted file mode 100644 index 2ce5533f1..000000000 --- a/doc/de/general.bb +++ /dev/null @@ -1,17 +0,0 @@ -[h2]Informationen über das Projekt und diesen Hub[/h2] - -[zrl=[baseurl]/help/Privacy]Informationen zum Datenschutz[/zrl] - -[h3]Externe Ressourcen[/h3] -[zrl=[baseurl]/help/external-resource-links]Links zu externen Ressourcen[/zrl] - -[url=https://framagit.org/hubzilla/core/]Haupt-Website[/url] -[url=https://framagit.org/hubzilla/addons]Addons-Website[/url] - -[url=[baseurl]/help/credits]$Projectname Credits[/url] - -[h3]Über diesen $Projectname-Hub[/h3] -[zrl=[baseurl]/help/TermsOfService]Nutzungsbedingungen dieses Hubs[/zrl] -[zrl=[baseurl]/siteinfo]Informationen zu diesem Hub und der $Projectname-Version[/zrl] -[zrl=[baseurl]/siteinfo/json]Detaillierte technische Informationen zu diesem Hub im JSON-Format[/zrl] - diff --git a/doc/de/glossary.md b/doc/de/glossary.md new file mode 100644 index 000000000..32b2c4fe8 --- /dev/null +++ b/doc/de/glossary.md @@ -0,0 +1,31 @@ +### Glossar + +- **Hub** + + Eine Instanz dieser Software, die auf einem Standard-Webserver läuft. + +- **Grid** + + Das globale Netzwerk von Hubs, die mit Hilfe des Zot-Protokolls Informationen untereinander austauschen. + +- **Kanal** + + Die grundlegende Identität im Grid. Ein Channel kann eine Person, einen Blog oder ein Forum repräsentieren, um nur einige zu nennen. Channels können Verbindungen mit anderen Channels herstellen, um Informationen mit sehr detaillierten Berechtigungen zu teilen. + +- **Klonen** + + Kanäle können Klone haben, die mit separaten und ansonsten nicht verbundenen Konten auf unabhängigen Hubs verbunden sind. Die mit einem Channel geteilte Kommunikation wird zwischen den Channel-Klonen synchronisiert, so dass ein Channel Nachrichten senden und empfangen und auf gemeinsame Inhalte von mehreren Hubs zugreifen kann. Dies bietet Ausfallsicherheit bei Netzwerk- und Hardwareausfällen, was für selbst gehostete oder mit begrenzten Ressourcen ausgestattete Webserver ein großes Problem darstellen kann. Das Klonen ermöglicht es Ihnen, einen Channel vollständig von einem Hub zu einem anderen zu verschieben und dabei Ihre Daten und Verbindungen mitzunehmen. Siehe nomadische Identität. + +- **nomadische Identität** + + Die Fähigkeit, eine Identität über unabhängige Hubs und Webdomänen hinweg zu authentifizieren und einfach zu migrieren. Die nomadische Identität bietet echte Eigentumsrechte an einer Online-Identität, da die Identitäten der Kanäle, die von einem Konto auf einem Hub kontrolliert werden, nicht an den Hub selbst gebunden sind. Ein Hub ist eher eine Art „Gastgeber“ für Kanäle. Bei Hubzilla haben Sie kein „Konto“ auf einem Server wie bei typischen Websites, sondern Sie besitzen eine Identität, die Sie über das Netz mitnehmen können, indem Sie Klone verwenden. + +- **Nomad** + + Das neuartige JSON-basierte Protokoll zur Implementierung sicherer dezentraler Kommunikation und Dienste. Es unterscheidet sich von vielen anderen Kommunikationsprotokollen, indem es die Kommunikation auf einem dezentralen Identitäts- und Authentifizierungsrahmen aufbaut. Die Authentifizierungskomponente ähnelt dem OpenID-Konzept, ist aber von DNS-basierten Identitäten isoliert. Soweit möglich, erfolgt die Fernauthentifizierung still und unsichtbar. Dies bietet einen Mechanismus für eine verteilte Zugangskontrolle im Internet, der unauffällig ist. + + Ursprünglich trug das Protokoll den Namen Zot. Im Jahr 2021 wurde es von Mike Macgirvin in Nomad umbenannt. Inzwischen wird zwischen dem Protokoll und der Implementierung (Software) des Protokolls unterschieden. Die Implementierung wird bei Hubzilla weiterhin Zot genannt (genauer Zot6, weil es die Implementierung des damals noch gleich benannten Protokolls in der Version 6 fortführt). + + Grundsätzlich wird das Protokoll nur noch als Nomad bezeichnet. Wenn der Begriff Zot oder Zot6 (meist in der Form "Nomad/Zot6") verwendet wird, ist, sofern es um das Protokoll geht, das Nomad-Protokoll gemeint. Zot bzw. Zot6 tauchen eigenständig nur noch im Bereich der Softwareentwicklung bei Hubzilla auf, weil die Routinen und die Programmbibliothek, welche Nomad in der Praxis umsetzen, diesen Namen tragen. + + <u>Hinweis:</u> Die Implementierungen von Nomad in Hubzilla und in (streams) sind in Teilen nicht miteinander kompatibel. Das betrifft insbesondere die nomadische Identität. So ist es nicht möglich, einen Hubzilla-Kanal (Nomad v. Zot6) auf einer (streams) Instanz (Nomad v, Zot12) zu klonen, und umgekehrt. diff --git a/doc/de/hook/about_hook.bb b/doc/de/hook/about_hook.bb new file mode 100644 index 000000000..22b60d786 --- /dev/null +++ b/doc/de/hook/about_hook.bb @@ -0,0 +1 @@ +[h2]about_hook[/h2] diff --git a/doc/de/hook/accept_follow.bb b/doc/de/hook/accept_follow.bb new file mode 100644 index 000000000..e8b1ed0c4 --- /dev/null +++ b/doc/de/hook/accept_follow.bb @@ -0,0 +1 @@ +[h2]accept_follow[/h2] diff --git a/doc/de/hook/account_downgrade.bb b/doc/de/hook/account_downgrade.bb new file mode 100644 index 000000000..63bae0a58 --- /dev/null +++ b/doc/de/hook/account_downgrade.bb @@ -0,0 +1 @@ +[h2]account_downgrade[/h2] diff --git a/doc/de/hook/account_settings.bb b/doc/de/hook/account_settings.bb new file mode 100644 index 000000000..91b3a8385 --- /dev/null +++ b/doc/de/hook/account_settings.bb @@ -0,0 +1 @@ +[h2]account_settings[/h2] diff --git a/doc/de/hook/account_settings_post.bb b/doc/de/hook/account_settings_post.bb new file mode 100644 index 000000000..bbd7a57a8 --- /dev/null +++ b/doc/de/hook/account_settings_post.bb @@ -0,0 +1 @@ +[h2]account_settings_post[/h2] diff --git a/doc/de/hook/activity_decode_mapper.bb b/doc/de/hook/activity_decode_mapper.bb new file mode 100644 index 000000000..43d08a136 --- /dev/null +++ b/doc/de/hook/activity_decode_mapper.bb @@ -0,0 +1 @@ +[h2]activity_decode_mapper[/h2] diff --git a/doc/de/hook/activity_filter.bb b/doc/de/hook/activity_filter.bb new file mode 100644 index 000000000..9d0768577 --- /dev/null +++ b/doc/de/hook/activity_filter.bb @@ -0,0 +1 @@ +[h2]activity_filter[/h2] diff --git a/doc/de/hook/activity_mapper.bb b/doc/de/hook/activity_mapper.bb new file mode 100644 index 000000000..db65fadc4 --- /dev/null +++ b/doc/de/hook/activity_mapper.bb @@ -0,0 +1 @@ +[h2]activity_mapper[/h2] diff --git a/doc/de/hook/activity_obj_decode_mapper.bb b/doc/de/hook/activity_obj_decode_mapper.bb new file mode 100644 index 000000000..a96b32eee --- /dev/null +++ b/doc/de/hook/activity_obj_decode_mapper.bb @@ -0,0 +1 @@ +[h2]activity_obj_decode_mapper[/h2] diff --git a/doc/de/hook/activity_obj_mapper.bb b/doc/de/hook/activity_obj_mapper.bb new file mode 100644 index 000000000..7c14a1b81 --- /dev/null +++ b/doc/de/hook/activity_obj_mapper.bb @@ -0,0 +1 @@ +[h2]activity_obj_mapper[/h2] diff --git a/doc/de/hook/activity_order.bb b/doc/de/hook/activity_order.bb new file mode 100644 index 000000000..4a4670d03 --- /dev/null +++ b/doc/de/hook/activity_order.bb @@ -0,0 +1 @@ +[h2]activity_order[/h2] diff --git a/doc/de/hook/activity_received.bb b/doc/de/hook/activity_received.bb new file mode 100644 index 000000000..2e9d68bf3 --- /dev/null +++ b/doc/de/hook/activity_received.bb @@ -0,0 +1 @@ +[h2]activity_received[/h2] diff --git a/doc/de/hook/addon_app_installed_filter.bb b/doc/de/hook/addon_app_installed_filter.bb new file mode 100644 index 000000000..e610b3205 --- /dev/null +++ b/doc/de/hook/addon_app_installed_filter.bb @@ -0,0 +1,18 @@ +[h2]addon_app_installed_filter[/h2] + +Allow plugins to filter the result of addon_app_installed. + +Code excerpt: + +[code] + $filter_arr = [ + 'uid'=>$uid, + 'app'=>$app, + 'installed'=>$r + ]; + call_hooks('addon_app_installed_filter',$filter_arr); + $r = $filter_arr['installed']; +[/code] + +cxref: Zotlabs/Lib/Apps.php + diff --git a/doc/de/hook/affinity_labels.bb b/doc/de/hook/affinity_labels.bb new file mode 100644 index 000000000..7234b7632 --- /dev/null +++ b/doc/de/hook/affinity_labels.bb @@ -0,0 +1 @@ +[h2]affinity_labels[/h2] diff --git a/doc/de/hook/api_perm_is_allowed.bb b/doc/de/hook/api_perm_is_allowed.bb new file mode 100644 index 000000000..862cbd653 --- /dev/null +++ b/doc/de/hook/api_perm_is_allowed.bb @@ -0,0 +1 @@ +[h2]api_perm_is_allowed[/h2] diff --git a/doc/de/hook/app_destroy.bb b/doc/de/hook/app_destroy.bb new file mode 100644 index 000000000..386d7af16 --- /dev/null +++ b/doc/de/hook/app_destroy.bb @@ -0,0 +1,4 @@ +[h2]app_destroy[/h2] + +Allows addons to perform some post delete actions. + diff --git a/doc/de/hook/app_installed_filter.bb b/doc/de/hook/app_installed_filter.bb new file mode 100644 index 000000000..f0d91d6f0 --- /dev/null +++ b/doc/de/hook/app_installed_filter.bb @@ -0,0 +1,17 @@ +[h2]app_installed_filter[/h2] + +Allow plugins to filter the result of app_installed. + +Code excerpt: + +[code] + $filter_arr = [ + 'uid'=>$uid, + 'app'=>$app, + 'installed'=>$r + ]; + call_hooks('app_installed_filter',$filter_arr); + $r = $filter_arr['installed']; +[/code] + +cxref: Zotlabs/Lib/Apps.php diff --git a/doc/de/hook/atom_author.bb b/doc/de/hook/atom_author.bb new file mode 100644 index 000000000..c9d05a593 --- /dev/null +++ b/doc/de/hook/atom_author.bb @@ -0,0 +1 @@ +[h2]atom_author[/h2] diff --git a/doc/de/hook/atom_entry.bb b/doc/de/hook/atom_entry.bb new file mode 100644 index 000000000..0aec89f16 --- /dev/null +++ b/doc/de/hook/atom_entry.bb @@ -0,0 +1 @@ +[h2]atom_entry[/h2] diff --git a/doc/de/hook/atom_feed.bb b/doc/de/hook/atom_feed.bb new file mode 100644 index 000000000..69775ca5e --- /dev/null +++ b/doc/de/hook/atom_feed.bb @@ -0,0 +1 @@ +[h2]atom_feed[/h2] diff --git a/doc/de/hook/atom_feed_end.bb b/doc/de/hook/atom_feed_end.bb new file mode 100644 index 000000000..4f019fc8f --- /dev/null +++ b/doc/de/hook/atom_feed_end.bb @@ -0,0 +1 @@ +[h2]atom_feed_end[/h2] diff --git a/doc/de/hook/attach_delete.bb b/doc/de/hook/attach_delete.bb new file mode 100644 index 000000000..3b63f28d3 --- /dev/null +++ b/doc/de/hook/attach_delete.bb @@ -0,0 +1,11 @@ +[h2]attach_delete[/h2] + +Invoked when an attachment is deleted using attach_delete(). + +[code] +$arr = ['channel_id' => $channel_id, 'resource' => $resource, 'is_photo'=>$is_photo]; +call_hooks("attach_delete",$arr); +[/code] + + +See include/attach.php diff --git a/doc/de/hook/attach_upload_file.bb b/doc/de/hook/attach_upload_file.bb new file mode 100644 index 000000000..1f8056caa --- /dev/null +++ b/doc/de/hook/attach_upload_file.bb @@ -0,0 +1 @@ +[h2]attach_upload_file[/h2] diff --git a/doc/de/hook/authenticate.bb b/doc/de/hook/authenticate.bb new file mode 100644 index 000000000..eb8071e73 --- /dev/null +++ b/doc/de/hook/authenticate.bb @@ -0,0 +1,29 @@ +[h2]authenticate[/h2] + +Invoked when a POST request is made with non-null $_POST['auth-params'] such as from the login form. +If the hook handler does not set the 'authenticated' parameter of the passed array, normal login functions continue; + +The 'user_record' is in fact an account DB record. To provide automatic provisioning of accounts from other authentication realms, this record should be generated and stored during the verification phase. + + +[code] + $addon_auth = array( + 'username' => trim($_POST['username']), + 'password' => trim($_POST['password']), + 'authenticated' => 0, + 'user_record' => null + ); + + /** + * + * A plugin indicates successful login by setting 'authenticated' to non-zero value and returning a user record + * Plugins should never set 'authenticated' except to indicate success - as hooks may be chained + * and later plugins should not interfere with an earlier one that succeeded. + * + */ + + call_hooks('authenticate', $addon_auth); +[/code] + + +See include/auth.php diff --git a/doc/de/hook/author_is_pmable.bb b/doc/de/hook/author_is_pmable.bb new file mode 100644 index 000000000..11d1185f3 --- /dev/null +++ b/doc/de/hook/author_is_pmable.bb @@ -0,0 +1,14 @@ +[h2]author_is_pmable[/h2] + +Called from thread action menu before returning a 'send mail' link for the post author. Not all authors will be able to receive private mail, for instance those on other networks with incompatible mail systems. + +By default author_is_pmable() returns true for 'zot' xchans, and false for all others. + +The plugin is passed an array + + [ 'xchan' => $author_xchan, 'abook' => abook record, 'result' => 'unset' ] + +A plugin which sets the 'result' to something besides 'unset' will over-ride the default behaviour. A value of true will enable the 'send mail' link and the private mail recipient will be set to the author's xchan_hash. A value of false will disable the 'send mail' link. + + + diff --git a/doc/de/hook/bb2diaspora.bb b/doc/de/hook/bb2diaspora.bb new file mode 100644 index 000000000..c28f1883e --- /dev/null +++ b/doc/de/hook/bb2diaspora.bb @@ -0,0 +1 @@ +[h2]bb2diaspora[/h2] diff --git a/doc/de/hook/bbcode.bb b/doc/de/hook/bbcode.bb new file mode 100644 index 000000000..f6b8711b0 --- /dev/null +++ b/doc/de/hook/bbcode.bb @@ -0,0 +1,6 @@ +[h2]bbcode[/h2] + + +Called at end of bbcode to html conversion. + +Hook argument contains the converted text string. diff --git a/doc/de/hook/bbcode_filter.bb b/doc/de/hook/bbcode_filter.bb new file mode 100644 index 000000000..efeb2e1b0 --- /dev/null +++ b/doc/de/hook/bbcode_filter.bb @@ -0,0 +1,7 @@ +[h2]bbcode_filter[/h2] + + +Called at beginning of bbcode to html conversion. + +Hook argument contains the text string to be converted. + diff --git a/doc/de/hook/build_pagehead.bb b/doc/de/hook/build_pagehead.bb new file mode 100644 index 000000000..8fc3486c7 --- /dev/null +++ b/doc/de/hook/build_pagehead.bb @@ -0,0 +1,2 @@ +[b]build_pagehead[/b] + diff --git a/doc/de/hook/can_comment_on_post.bb b/doc/de/hook/can_comment_on_post.bb new file mode 100644 index 000000000..2cfd3b2da --- /dev/null +++ b/doc/de/hook/can_comment_on_post.bb @@ -0,0 +1,13 @@ +[h3]can_comment_on_post[/h3] + +Called when deciding whether or not to display a comment box for a post. + + +Hook data (array): + observer_hash => xchan_hash of current observer + item => posted item + allowed => 'unset' + + +To over-ride the default behaviour, change allowed to true or false + diff --git a/doc/de/hook/change_channel.bb b/doc/de/hook/change_channel.bb new file mode 100644 index 000000000..4514b9265 --- /dev/null +++ b/doc/de/hook/change_channel.bb @@ -0,0 +1,11 @@ +[h2]change_channel[/h2] + +Called when entering a logged in state in a channel context (as opposed to an account context). +The hook array provides two arguments, 'channel_id' and 'chanx'. 'chanx' is a union of the channel +and xchan records for the now active channel. + +Use this to capture what would traditionally be known as 'login events'. In this platform, login is +a separate authentication activity and doesn't necessarily require "connecting to an identity", which +is what the change_channel activity represents. + + diff --git a/doc/de/hook/channel_links.bb b/doc/de/hook/channel_links.bb new file mode 100644 index 000000000..c0243dac6 --- /dev/null +++ b/doc/de/hook/channel_links.bb @@ -0,0 +1,12 @@ +[h2]channel_links[/h2] + +Called when generating the Link HTTP header for the channel page. Different protocol stacks can add links to this header. + +Hook data = array + 'channel_address' => channel nickname, no checking is done to see if it is valid + 'channel_links' => array of channel links in the format + 'url' => url of resource + 'rel' => link relation + 'type' => MIME type + +All fields are required
\ No newline at end of file diff --git a/doc/de/hook/channel_remove.bb b/doc/de/hook/channel_remove.bb new file mode 100644 index 000000000..db9e9dd82 --- /dev/null +++ b/doc/de/hook/channel_remove.bb @@ -0,0 +1 @@ +[h2]channel_remove[/h2] diff --git a/doc/de/hook/chat_message.bb b/doc/de/hook/chat_message.bb new file mode 100644 index 000000000..ccc93bb2c --- /dev/null +++ b/doc/de/hook/chat_message.bb @@ -0,0 +1 @@ +[h2]chat_message[/h2] diff --git a/doc/de/hook/chat_post.bb b/doc/de/hook/chat_post.bb new file mode 100644 index 000000000..7cb3c9fa1 --- /dev/null +++ b/doc/de/hook/chat_post.bb @@ -0,0 +1 @@ +[h2]chat_post[/h2] diff --git a/doc/de/hook/check_account_email.bb b/doc/de/hook/check_account_email.bb new file mode 100644 index 000000000..b309706a0 --- /dev/null +++ b/doc/de/hook/check_account_email.bb @@ -0,0 +1 @@ +[h2]check_account_email[/h2] diff --git a/doc/de/hook/check_account_invite.bb b/doc/de/hook/check_account_invite.bb new file mode 100644 index 000000000..8d4a40522 --- /dev/null +++ b/doc/de/hook/check_account_invite.bb @@ -0,0 +1 @@ +[h2]check_account_invite[/h2] diff --git a/doc/de/hook/check_account_password.bb b/doc/de/hook/check_account_password.bb new file mode 100644 index 000000000..ce5202f48 --- /dev/null +++ b/doc/de/hook/check_account_password.bb @@ -0,0 +1,17 @@ +[h2]check_account_password[/h2] +Use this hook to provide additional checks or validations of the password given when +registering and account. +[h3]Arguments:[/h3] +[code=php]array( + 'password' => $password, // The password to check + 'result' => array( + 'error' => false, + 'message' => '' + ) +)[/code] +[h3]Results:[/h3] +For a failed check set the [code]error[/code] member of the [code]result[/code] +array to [code]true[/code] and the [code]message[/code] to a short message +explaining why it failed. + +Otherwise, leave it alone. diff --git a/doc/de/hook/check_channelallowed.bb b/doc/de/hook/check_channelallowed.bb new file mode 100644 index 000000000..e7559c92f --- /dev/null +++ b/doc/de/hook/check_channelallowed.bb @@ -0,0 +1,11 @@ +[h2]check_channelallowed[/h2] + +Called when checking the channel (xchan) black and white lists to see if a channel is blocked. + +Hook data + + array('hash' => xchan_hash of xchan to check); + + create and set array element 'allowed' to true or false to override the system checks + + diff --git a/doc/de/hook/check_siteallowed.bb b/doc/de/hook/check_siteallowed.bb new file mode 100644 index 000000000..28134cbd2 --- /dev/null +++ b/doc/de/hook/check_siteallowed.bb @@ -0,0 +1,10 @@ +[h2]check_siteallowed[/h2] + +Called when checking the site black and white lists to see if a site is blocked. + +Hook data + + array('url' => URL of site to check); + + create and set array element 'allowed' to true or false to override the system checks + diff --git a/doc/de/hook/collect_public_recipients.bb b/doc/de/hook/collect_public_recipients.bb new file mode 100644 index 000000000..de3f4049e --- /dev/null +++ b/doc/de/hook/collect_public_recipients.bb @@ -0,0 +1,42 @@ +[h2]collect_public_recipients[/h2] + +Replace the default list of public recipients (i.e., all contacts). + +Allow plugins to create a list of recipients for public messages instead of the default +of all channel connections. + +Called with the following array: + [ + 'recipients' => [], + 'item' => $item, + 'private_envelope' => $private_envelope, + 'include_groups' => $include_groups + ]; + +[code] + if(array_key_exists('public_policy',$item) && $item['public_policy'] !== 'self') { + + $hookinfo = [ + 'recipients' => [], + 'item' => $item, + 'private_envelope' => $private_envelope, + 'include_groups' => $include_groups + ]; + + call_hooks('collect_public_recipients',$hookinfo); + + if ($hookinfo['recipients']) { + $r = $hookinfo['recipients']; + } else { + $r = q("select abook_xchan, xchan_network from abook left join xchan on abook_xchan = xchan_hash where abook_channel = %d and abook_self = 0 and abook_pending = 0 and abook_archived = 0 ", + intval($item['uid']) + ); + } + + if($r) { + + . . . + +[/code] + +see: include/item.php diff --git a/doc/de/hook/comments_are_now_closed.bb b/doc/de/hook/comments_are_now_closed.bb new file mode 100644 index 000000000..4d3baa95a --- /dev/null +++ b/doc/de/hook/comments_are_now_closed.bb @@ -0,0 +1,11 @@ +[h3]comments_are_now_closed[/h3] + +Called when deciding whether or not commenting is closed for an item. + + +Hook data (array): + item => posted item + closed => 'unset' + + +To over-ride the default behaviour, change closed to true or false diff --git a/doc/de/hook/connect_premium.bb b/doc/de/hook/connect_premium.bb new file mode 100644 index 000000000..ae3aafc66 --- /dev/null +++ b/doc/de/hook/connect_premium.bb @@ -0,0 +1 @@ +[h2]connect_premium[/h2] diff --git a/doc/de/hook/connection_remove.bb b/doc/de/hook/connection_remove.bb new file mode 100644 index 000000000..bd13ae5f2 --- /dev/null +++ b/doc/de/hook/connection_remove.bb @@ -0,0 +1,9 @@ +[h3]connection_remove[/h3] + +Called when deleting a connection. + + +Passed parameter array: + + 'channel_id' => channel_id of the channel removing the connection + 'abook_id' => abook_id of the connection being removed diff --git a/doc/de/hook/connector_settings.bb b/doc/de/hook/connector_settings.bb new file mode 100644 index 000000000..9b59c49da --- /dev/null +++ b/doc/de/hook/connector_settings.bb @@ -0,0 +1 @@ +[h2]connector_settings[/h2] diff --git a/doc/de/hook/construct_page.bb b/doc/de/hook/construct_page.bb new file mode 100644 index 000000000..700d9256f --- /dev/null +++ b/doc/de/hook/construct_page.bb @@ -0,0 +1 @@ +[h2]construct_page[/h2] diff --git a/doc/de/hook/contact_block_end.bb b/doc/de/hook/contact_block_end.bb new file mode 100644 index 000000000..30a7d2d76 --- /dev/null +++ b/doc/de/hook/contact_block_end.bb @@ -0,0 +1 @@ +[h2]contact_block_end[/h2] diff --git a/doc/de/hook/contact_edit.bb b/doc/de/hook/contact_edit.bb new file mode 100644 index 000000000..5fd31fb1d --- /dev/null +++ b/doc/de/hook/contact_edit.bb @@ -0,0 +1 @@ +[h2]contact_edit[/h2] diff --git a/doc/de/hook/contact_edit_post.bb b/doc/de/hook/contact_edit_post.bb new file mode 100644 index 000000000..bc736f8b8 --- /dev/null +++ b/doc/de/hook/contact_edit_post.bb @@ -0,0 +1 @@ +[h2]contact_edit_post[/h2] diff --git a/doc/de/hook/contact_select_options.bb b/doc/de/hook/contact_select_options.bb new file mode 100644 index 000000000..65f9154ff --- /dev/null +++ b/doc/de/hook/contact_select_options.bb @@ -0,0 +1 @@ +[h2]contact_select_options[/h2] diff --git a/doc/de/hook/content_security_policy.bb b/doc/de/hook/content_security_policy.bb new file mode 100644 index 000000000..96b8095ae --- /dev/null +++ b/doc/de/hook/content_security_policy.bb @@ -0,0 +1,39 @@ +[h2]content_security_policy[/h2] + +Called to modify CSP settings prior to the output of the Content-Security-Policy header. + +This hook permits addons to modify the content-security-policy if necessary to allow loading of foreign js libraries or css styles. + +[code] +if(App::$config['system']['content_security_policy']) { + $cspsettings = Array ( + 'script-src' => Array ("'self'","'unsafe-inline'","'unsafe-eval'"), + 'style-src' => Array ("'self'","'unsafe-inline'") + ); + call_hooks('content_security_policy',$cspsettings); + + // Legitimate CSP directives (cxref: https://content-security-policy.com/) + $validcspdirectives=Array( + "default-src", "script-src", "style-src", + "img-src", "connect-src", "font-src", + "object-src", "media-src", 'frame-src', + 'sandbox', 'report-uri', 'child-src', + 'form-action', 'frame-ancestors', 'plugin-types' + ); + $cspheader = "Content-Security-Policy:"; + foreach ($cspsettings as $cspdirective => $csp) { + if (!in_array($cspdirective,$validcspdirectives)) { + logger("INVALID CSP DIRECTIVE: ".$cspdirective,LOGGER_DEBUG); + continue; + } + $cspsettingsarray=array_unique($cspsettings[$cspdirective]); + $cspsetpolicy = implode(' ',$cspsettingsarray); + if ($cspsetpolicy) { + $cspheader .= " ".$cspdirective." ".$cspsetpolicy.";"; + } + } + header($cspheader); +} +[/code] + +see: boot.php diff --git a/doc/de/hook/conversation_start.bb b/doc/de/hook/conversation_start.bb new file mode 100644 index 000000000..7208c8d8f --- /dev/null +++ b/doc/de/hook/conversation_start.bb @@ -0,0 +1 @@ +[h2]conversation_start[/h2] diff --git a/doc/de/hook/create_identity.bb b/doc/de/hook/create_identity.bb new file mode 100644 index 000000000..5c1da2d43 --- /dev/null +++ b/doc/de/hook/create_identity.bb @@ -0,0 +1 @@ +[h2]create_identity[/h2] diff --git a/doc/de/hook/cron.bb b/doc/de/hook/cron.bb new file mode 100644 index 000000000..55120b6c2 --- /dev/null +++ b/doc/de/hook/cron.bb @@ -0,0 +1,5 @@ +[h2]cron[/h2] + +Called when cron task (include/poller.php) is executed. The hook data is a string representing the current time (UTC). + + diff --git a/doc/de/hook/cron_daily.bb b/doc/de/hook/cron_daily.bb new file mode 100644 index 000000000..802bea5e4 --- /dev/null +++ b/doc/de/hook/cron_daily.bb @@ -0,0 +1,3 @@ +[h2]cron_daily[/h2] + +Called when cron task (include/poller.php) performs a cron_daily operation. The hook data is a string representing the current time (UTC). diff --git a/doc/de/hook/cron_weekly.bb b/doc/de/hook/cron_weekly.bb new file mode 100644 index 000000000..c01bf9611 --- /dev/null +++ b/doc/de/hook/cron_weekly.bb @@ -0,0 +1,3 @@ +[h2]cron_weekly[/h2] + +Called when cron task (include/poller.php) performs a cron_weekly operation. The hook data is a string representing the current time (UTC). diff --git a/doc/de/hook/crypto_methods.bb b/doc/de/hook/crypto_methods.bb new file mode 100644 index 000000000..1b16f567d --- /dev/null +++ b/doc/de/hook/crypto_methods.bb @@ -0,0 +1,5 @@ +[h2]crypto_mthods[/h2] + +Passed an array of crypto methods in local priority order. + +You may change the order and add new methods or disable existing methods. 'aes256cbc' is always supported as a fallback and currently removing this has no effect.
\ No newline at end of file diff --git a/doc/de/hook/daemon_addon.bb b/doc/de/hook/daemon_addon.bb new file mode 100644 index 000000000..b60b25748 --- /dev/null +++ b/doc/de/hook/daemon_addon.bb @@ -0,0 +1,15 @@ +[h2]daemon_addon[/h2] + + +A foreground plugin can create a background process by invoking: + +[code] +\Zotlabs\Daemon\Master::Summon([ 'Addon', 'myplugin', 'something' ]); +[/code] + +This starts up a background process (called 'Addon') specifically for addons to use. + +Then if your plugin is also catching the daemon_addon hook that handler will be called with the +argv array of the background process. In this case [ 'myplugin', 'something' ]; + +We recommend using this convention so that plugins can share this hook without causing conflicts; that is check to see if your plugin is the first array argument and if not, return from the hook. Otherwise you can initiate background processing. Something to remember is that during background processes there is no session. You are detached from the web page which created the background process.
\ No newline at end of file diff --git a/doc/de/hook/daemon_master_release.bb b/doc/de/hook/daemon_master_release.bb new file mode 100644 index 000000000..a17216d48 --- /dev/null +++ b/doc/de/hook/daemon_master_release.bb @@ -0,0 +1,5 @@ +[h2]daemon_master_release[/h2] + +Permit filtering or alternate methods of processing of background processes when [code] \Zotlabs\Daemon\Master::Release() [/code] is called. + +Default behavior is for a new PHP process to fire immediately upon a call to Master::Summon(). This hook permits pre-emption and the ability to provide queuing or other alternatives to this procedure. diff --git a/doc/de/hook/directory_item.bb b/doc/de/hook/directory_item.bb new file mode 100644 index 000000000..cb710e0b4 --- /dev/null +++ b/doc/de/hook/directory_item.bb @@ -0,0 +1 @@ +[h2]directory_item[/h2] diff --git a/doc/de/hook/discover_channel_webfinger.bb b/doc/de/hook/discover_channel_webfinger.bb new file mode 100644 index 000000000..b0eb5f2c4 --- /dev/null +++ b/doc/de/hook/discover_channel_webfinger.bb @@ -0,0 +1,14 @@ +[h2]discover_channel_webfinger[/h2] + +Called after performing channel discovery using RFC7033 webfinger and where the channel is not recognised as zot. + +Passed an array: + + address: URL or address that is being discovered + success: set to true if the plugin discovers something + webfinger: array of webfinger links (output of webfinger_rfc7033()) + + + if your plugin indicates success you are expected to generate and populate an xchan (and hubloc) record prior to returning. + +
\ No newline at end of file diff --git a/doc/de/hook/display_item.bb b/doc/de/hook/display_item.bb new file mode 100644 index 000000000..a6bfd621d --- /dev/null +++ b/doc/de/hook/display_item.bb @@ -0,0 +1 @@ +[h2]display_item[/h2] diff --git a/doc/de/hook/display_settings.bb b/doc/de/hook/display_settings.bb new file mode 100644 index 000000000..1f1e0b491 --- /dev/null +++ b/doc/de/hook/display_settings.bb @@ -0,0 +1 @@ +[h2]display_settings[/h2] diff --git a/doc/de/hook/display_settings_post.bb b/doc/de/hook/display_settings_post.bb new file mode 100644 index 000000000..d3bb39359 --- /dev/null +++ b/doc/de/hook/display_settings_post.bb @@ -0,0 +1 @@ +[h2]display_settings_post[/h2] diff --git a/doc/de/hook/donate_contributors.bb b/doc/de/hook/donate_contributors.bb new file mode 100644 index 000000000..f97c77efa --- /dev/null +++ b/doc/de/hook/donate_contributors.bb @@ -0,0 +1 @@ +[h2]donate_contributors[/h2] diff --git a/doc/de/hook/donate_plugin.bb b/doc/de/hook/donate_plugin.bb new file mode 100644 index 000000000..db4a6f113 --- /dev/null +++ b/doc/de/hook/donate_plugin.bb @@ -0,0 +1 @@ +[h2]donate_plugin[/h2] diff --git a/doc/de/hook/donate_sponsors.bb b/doc/de/hook/donate_sponsors.bb new file mode 100644 index 000000000..3abd46d42 --- /dev/null +++ b/doc/de/hook/donate_sponsors.bb @@ -0,0 +1 @@ +[h2]donate_sponsors[/h2] diff --git a/doc/de/hook/dreport_is_storable.bb b/doc/de/hook/dreport_is_storable.bb new file mode 100644 index 000000000..9ca99b896 --- /dev/null +++ b/doc/de/hook/dreport_is_storable.bb @@ -0,0 +1 @@ +[h2]dreport_is_storable[/h2] diff --git a/doc/de/hook/dreport_process.bb b/doc/de/hook/dreport_process.bb new file mode 100644 index 000000000..3ad331f41 --- /dev/null +++ b/doc/de/hook/dreport_process.bb @@ -0,0 +1,7 @@ +[h2]dreport_process[/h2] + +Called for each delivery report received + +Passed a delivery_report array. + +see: include/zot.php diff --git a/doc/de/hook/drop_item.bb b/doc/de/hook/drop_item.bb new file mode 100644 index 000000000..35bb80f82 --- /dev/null +++ b/doc/de/hook/drop_item.bb @@ -0,0 +1 @@ +[h2]drop_item[/h2] diff --git a/doc/de/hook/dropdown_extras.bb b/doc/de/hook/dropdown_extras.bb new file mode 100644 index 000000000..6d7110a76 --- /dev/null +++ b/doc/de/hook/dropdown_extras.bb @@ -0,0 +1,17 @@ +[h2]dropdown_extras[/h2] + +Modify the dropdown menu available through the cog of items as displayed by conv_item.tpl + +This hook allows plugins to add arbitrary html to the cog dropdown of thread items displayed with the conv_item.tpl template. + +It is fed an array of ['item' => $item, 'dropdown_extras' => '']. Any additions to the cog menu should be prepended/appended to +the ['dropdown_extras'] element. + +[code] +$dropdown_extras_arr = [ 'item' => $item , 'dropdown_extras' => '' ]; +call_hooks('dropdown_extras',$dropdown_extras_arr); +$dropdown_extras = $dropdown_extras_arr['dropdown_extras']; +[/code] + +see: Zotlabs/Lib/ThreadItem.php +see: view/tpl/conv_item.tpl diff --git a/doc/de/hook/encode_object.bb b/doc/de/hook/encode_object.bb new file mode 100644 index 000000000..0c8e86458 --- /dev/null +++ b/doc/de/hook/encode_object.bb @@ -0,0 +1 @@ +[h2]encode_object[/h2] diff --git a/doc/de/hook/enotify.bb b/doc/de/hook/enotify.bb new file mode 100644 index 000000000..703a3ffa0 --- /dev/null +++ b/doc/de/hook/enotify.bb @@ -0,0 +1 @@ +[h2]enotify[/h2] diff --git a/doc/de/hook/enotify_mail.bb b/doc/de/hook/enotify_mail.bb new file mode 100644 index 000000000..adeb8bd30 --- /dev/null +++ b/doc/de/hook/enotify_mail.bb @@ -0,0 +1 @@ +[h2]enotify_mail[/h2] diff --git a/doc/de/hook/enotify_store.bb b/doc/de/hook/enotify_store.bb new file mode 100644 index 000000000..dc44cc320 --- /dev/null +++ b/doc/de/hook/enotify_store.bb @@ -0,0 +1 @@ +[h2]enotify_store[/h2] diff --git a/doc/de/hook/event_created.bb b/doc/de/hook/event_created.bb new file mode 100644 index 000000000..222602e77 --- /dev/null +++ b/doc/de/hook/event_created.bb @@ -0,0 +1 @@ +[h2]event_created[/h2] diff --git a/doc/de/hook/event_store_event.bb b/doc/de/hook/event_store_event.bb new file mode 100644 index 000000000..7015a8322 --- /dev/null +++ b/doc/de/hook/event_store_event.bb @@ -0,0 +1,11 @@ +[h2]event_store_event[/h2] + +Called from event_store_event() when an event record is being stored. + +Hook info is an array + +'event' => the passed event details, ready for storage +'existing_event' => If the event already exists, a copy of the original event record from the database +'cancel' => false - set to true to cancel the operation. + + diff --git a/doc/de/hook/event_updated.bb b/doc/de/hook/event_updated.bb new file mode 100644 index 000000000..69e3c72c1 --- /dev/null +++ b/doc/de/hook/event_updated.bb @@ -0,0 +1 @@ +[h2]event_updated[/h2] diff --git a/doc/de/hook/externals_url_select.bb b/doc/de/hook/externals_url_select.bb new file mode 100644 index 000000000..a542dcb29 --- /dev/null +++ b/doc/de/hook/externals_url_select.bb @@ -0,0 +1 @@ +[h2]externals_url_select[/h2] diff --git a/doc/de/hook/feature_enabled.bb b/doc/de/hook/feature_enabled.bb new file mode 100644 index 000000000..5630cc768 --- /dev/null +++ b/doc/de/hook/feature_enabled.bb @@ -0,0 +1 @@ +[h2]feature_enabled[/h2] diff --git a/doc/de/hook/feature_settings.bb b/doc/de/hook/feature_settings.bb new file mode 100644 index 000000000..d1691eb38 --- /dev/null +++ b/doc/de/hook/feature_settings.bb @@ -0,0 +1 @@ +[h2]feature_settings[/h2] diff --git a/doc/de/hook/feature_settings_post.bb b/doc/de/hook/feature_settings_post.bb new file mode 100644 index 000000000..eecf941ff --- /dev/null +++ b/doc/de/hook/feature_settings_post.bb @@ -0,0 +1 @@ +[h2]feature_settings_post[/h2] diff --git a/doc/de/hook/fetch_and_store.bb b/doc/de/hook/fetch_and_store.bb new file mode 100644 index 000000000..afece11a6 --- /dev/null +++ b/doc/de/hook/fetch_and_store.bb @@ -0,0 +1 @@ +[h2]fetch_and_store[/h2] diff --git a/doc/de/hook/follow.bb b/doc/de/hook/follow.bb new file mode 100644 index 000000000..a97632b06 --- /dev/null +++ b/doc/de/hook/follow.bb @@ -0,0 +1 @@ +[h2]follow[/h2] diff --git a/doc/de/hook/follow_allow.bb b/doc/de/hook/follow_allow.bb new file mode 100644 index 000000000..fdab1865c --- /dev/null +++ b/doc/de/hook/follow_allow.bb @@ -0,0 +1 @@ +[h2]follow_allow[/h2] diff --git a/doc/de/hook/gender_selector.bb b/doc/de/hook/gender_selector.bb new file mode 100644 index 000000000..0b56b5c9b --- /dev/null +++ b/doc/de/hook/gender_selector.bb @@ -0,0 +1 @@ +[h2]gender_selector[/h2] diff --git a/doc/de/hook/gender_selector_min.bb b/doc/de/hook/gender_selector_min.bb new file mode 100644 index 000000000..9d143855a --- /dev/null +++ b/doc/de/hook/gender_selector_min.bb @@ -0,0 +1 @@ +[h2]gender_selector_min[/h2] diff --git a/doc/de/hook/generate_map.bb b/doc/de/hook/generate_map.bb new file mode 100644 index 000000000..33672d552 --- /dev/null +++ b/doc/de/hook/generate_map.bb @@ -0,0 +1 @@ +[h2]generate_map[/h2] diff --git a/doc/de/hook/generate_named_map.bb b/doc/de/hook/generate_named_map.bb new file mode 100644 index 000000000..5bacb846d --- /dev/null +++ b/doc/de/hook/generate_named_map.bb @@ -0,0 +1 @@ +[h2]generate_named_map[/h2] diff --git a/doc/de/hook/get_all_api_perms.bb b/doc/de/hook/get_all_api_perms.bb new file mode 100644 index 000000000..eb41f8a02 --- /dev/null +++ b/doc/de/hook/get_all_api_perms.bb @@ -0,0 +1 @@ +[h2]get_all_api_perms[/h2] diff --git a/doc/de/hook/get_all_perms.bb b/doc/de/hook/get_all_perms.bb new file mode 100644 index 000000000..149f8c78c --- /dev/null +++ b/doc/de/hook/get_all_perms.bb @@ -0,0 +1 @@ +[h2]get_all_perms[/h2] diff --git a/doc/de/hook/get_default_export_sections b/doc/de/hook/get_default_export_sections new file mode 100644 index 000000000..09b146643 --- /dev/null +++ b/doc/de/hook/get_default_export_sections @@ -0,0 +1,10 @@ +[h3]get_default_export_sections[/h3] + +The get_default_export_sections call returns the basic functional groups of data to export using channel_export_basic(). + +The hook is passed an array + [ + 'sections' => [ 'channel', 'connections', 'config', 'apps', 'chatrooms', 'events', 'webpages', 'mail', 'wikis' ] + ] + +If you desire the export to contain three months of items, add 'items' to the 'sections' array diff --git a/doc/de/hook/get_features.bb b/doc/de/hook/get_features.bb new file mode 100644 index 000000000..66e81f13c --- /dev/null +++ b/doc/de/hook/get_features.bb @@ -0,0 +1 @@ +[h2]get_features[/h2] diff --git a/doc/de/hook/get_photo.bb b/doc/de/hook/get_photo.bb new file mode 100644 index 000000000..eaf3beffb --- /dev/null +++ b/doc/de/hook/get_photo.bb @@ -0,0 +1,14 @@ +[h2]get_photo[/h2] + +Called when fetching the content of photos (except for profile photos) in mod_photo. + + +Hook arguments: + +'imgscale' => integer resolution requested +'resource_id' => resource_id of requested photo +'photo' => array of matching photo table rows after querying for the photo +'allowed' => whether or not access to this resource is allowed + + + diff --git a/doc/de/hook/get_profile_photo.bb b/doc/de/hook/get_profile_photo.bb new file mode 100644 index 000000000..ab07179ae --- /dev/null +++ b/doc/de/hook/get_profile_photo.bb @@ -0,0 +1,18 @@ +[h2]get_profile_photo[/h2] + +Called when fetching the content of the default profile photo for a local channel in mod_photo. + + +Hook arguments: + +'imgscale' => integer resolution requested (4, 5, or 6) +'channel_id' => channel_id of requested profile photo +'default' => filename of default profile photo of this imgscale +'data' => empty string +'mimetype' => empty string + + +If 'data' is set, this data will be used instead of the data obtained from the database search for the profile photo. +If 'mimetype' is set, this mimetype will be used instead of the mimetype obtained from the database or the default profile photo mimetype. + + diff --git a/doc/de/hook/get_role_perms.bb b/doc/de/hook/get_role_perms.bb new file mode 100644 index 000000000..87830f8e3 --- /dev/null +++ b/doc/de/hook/get_role_perms.bb @@ -0,0 +1 @@ +[h2]get_role_perms[/h2] diff --git a/doc/de/hook/global_permissions.bb b/doc/de/hook/global_permissions.bb new file mode 100644 index 000000000..fe998ee9c --- /dev/null +++ b/doc/de/hook/global_permissions.bb @@ -0,0 +1 @@ +[h2]global_permissions[/h2] diff --git a/doc/de/hook/home_content.bb b/doc/de/hook/home_content.bb new file mode 100644 index 000000000..7f32b3547 --- /dev/null +++ b/doc/de/hook/home_content.bb @@ -0,0 +1 @@ +[h2]home_content[/h2] diff --git a/doc/de/hook/home_init.bb b/doc/de/hook/home_init.bb new file mode 100644 index 000000000..25dd72792 --- /dev/null +++ b/doc/de/hook/home_init.bb @@ -0,0 +1 @@ +[h2]home_init[/h2] diff --git a/doc/de/hook/hostxrd.bb b/doc/de/hook/hostxrd.bb new file mode 100644 index 000000000..2b67320cf --- /dev/null +++ b/doc/de/hook/hostxrd.bb @@ -0,0 +1 @@ +[h2]hostxrd[/h2] diff --git a/doc/de/hook/html2bbcode.bb b/doc/de/hook/html2bbcode.bb new file mode 100644 index 000000000..3061f05f0 --- /dev/null +++ b/doc/de/hook/html2bbcode.bb @@ -0,0 +1 @@ +[h2]html2bbcode[/h2] diff --git a/doc/de/hook/identity_basic_export.bb b/doc/de/hook/identity_basic_export.bb new file mode 100644 index 000000000..71329ba1e --- /dev/null +++ b/doc/de/hook/identity_basic_export.bb @@ -0,0 +1,10 @@ +[h2]identity_basic_export[/h2] + +Called when exporting data for a channel +Passed array contains + + [ + 'channel_id' => channel_id being exported + 'sections' => array of functional export sections which are being exported + 'data' => the export data array which has been generated + ] diff --git a/doc/de/hook/import_author_xchan.bb b/doc/de/hook/import_author_xchan.bb new file mode 100644 index 000000000..e2340469d --- /dev/null +++ b/doc/de/hook/import_author_xchan.bb @@ -0,0 +1 @@ +[h2]import_author_xchan[/h2] diff --git a/doc/de/hook/import_channel.bb b/doc/de/hook/import_channel.bb new file mode 100644 index 000000000..b220b7415 --- /dev/null +++ b/doc/de/hook/import_channel.bb @@ -0,0 +1 @@ +[h2]import_channel[/h2] diff --git a/doc/de/hook/import_directory_profile.bb b/doc/de/hook/import_directory_profile.bb new file mode 100644 index 000000000..e2fac59bc --- /dev/null +++ b/doc/de/hook/import_directory_profile.bb @@ -0,0 +1 @@ +[h2]import_directory_profile[/h2] diff --git a/doc/de/hook/import_xchan.bb b/doc/de/hook/import_xchan.bb new file mode 100644 index 000000000..40e0783ce --- /dev/null +++ b/doc/de/hook/import_xchan.bb @@ -0,0 +1 @@ +[h2]import_xchan[/h2] diff --git a/doc/de/hook/item_custom.bb b/doc/de/hook/item_custom.bb new file mode 100644 index 000000000..d20c7d76c --- /dev/null +++ b/doc/de/hook/item_custom.bb @@ -0,0 +1,24 @@ +[h2]item_custom[/h2] + +Allow addons to create and process custom item types. + +Addon authors will need to use iconfig meta data (with sharing on) or some other method +to specify and determine whether the custom item is destined for their addon. + +It is fed an array of ['item' => ${item_array}, 'allow_exec' => {true/false}] + +By default $arr['item']['cancel'] is set to TRUE which will abort storage of the +custom item in the item table unless the addon unsets it or sets it to false. + +[code] + if ($arr['item_type']==ITEM_TYPE_CUSTOM) { + /* Custom items are not stored by default + because they require an addon to process. */ + $d['item']['cancel']=true; + + call_hooks('item_custom',$d); + } + +[/code] + +see: include/items.php diff --git a/doc/de/hook/item_photo_menu.bb b/doc/de/hook/item_photo_menu.bb new file mode 100644 index 000000000..8f9860a90 --- /dev/null +++ b/doc/de/hook/item_photo_menu.bb @@ -0,0 +1 @@ +[h2]item_photo_menu[/h2] diff --git a/doc/de/hook/item_store.bb b/doc/de/hook/item_store.bb new file mode 100644 index 000000000..5d49b725c --- /dev/null +++ b/doc/de/hook/item_store.bb @@ -0,0 +1 @@ +[h2]item_store[/h2] diff --git a/doc/de/hook/item_store_update.bb b/doc/de/hook/item_store_update.bb new file mode 100644 index 000000000..a7c58939a --- /dev/null +++ b/doc/de/hook/item_store_update.bb @@ -0,0 +1 @@ +[h2]item_store_update[/h2] diff --git a/doc/de/hook/item_stored.bb b/doc/de/hook/item_stored.bb new file mode 100644 index 000000000..8d706cb4e --- /dev/null +++ b/doc/de/hook/item_stored.bb @@ -0,0 +1,18 @@ +[h2]item_stored[/h2] + +Allow addons to continue processing after an item has been stored in the event +that they need access to the item_id or other data that gets assigned during +the storage process. + +It is fed an array of type item (including terms and iconfig data). + +[code] + /** + * @hooks item_stored + * Called after new item is stored in the database. + * (By this time we have an item_id and other frequently needed info.) + */ + call_hooks('item_stored',$arr); +[/code] + +see: include/items.php diff --git a/doc/de/hook/item_stored_update.bb b/doc/de/hook/item_stored_update.bb new file mode 100644 index 000000000..4532a347c --- /dev/null +++ b/doc/de/hook/item_stored_update.bb @@ -0,0 +1,15 @@ +[h2]item_stored_update[/h2] + +Allow addons to continue processing after an item update has been stored + +It is fed an array of type item (including terms and iconfig data). + +[code] + /** + * @hooks item_stored_update + * Called after updated item is stored in the database. + */ + call_hooks('item_stored_update',$arr); +[/code] + +see: include/items.php diff --git a/doc/de/hook/item_translate.bb b/doc/de/hook/item_translate.bb new file mode 100644 index 000000000..695494b9c --- /dev/null +++ b/doc/de/hook/item_translate.bb @@ -0,0 +1 @@ +[h2]item_translate[/h2] diff --git a/doc/de/hook/jot_header_tpl_filter.bb b/doc/de/hook/jot_header_tpl_filter.bb new file mode 100644 index 000000000..b17d81d03 --- /dev/null +++ b/doc/de/hook/jot_header_tpl_filter.bb @@ -0,0 +1,5 @@ +[h2]jot_header_tpl_filter[/h2] + +Allows addon developers to modify the values of replacements fed into jot-header.tpl + +cxref: include/conversation.php diff --git a/doc/de/hook/jot_networks.bb b/doc/de/hook/jot_networks.bb new file mode 100644 index 000000000..4c1629ba7 --- /dev/null +++ b/doc/de/hook/jot_networks.bb @@ -0,0 +1 @@ +[h2]jot_networks[/h2] diff --git a/doc/de/hook/jot_tool.bb b/doc/de/hook/jot_tool.bb new file mode 100644 index 000000000..22ba9701e --- /dev/null +++ b/doc/de/hook/jot_tool.bb @@ -0,0 +1 @@ +[h2]jot_tool[/h2] diff --git a/doc/de/hook/jot_tpl_filter.bb b/doc/de/hook/jot_tpl_filter.bb new file mode 100644 index 000000000..426da3c56 --- /dev/null +++ b/doc/de/hook/jot_tpl_filter.bb @@ -0,0 +1,5 @@ +[h2]jot_tpl_filter[/h2] + +Allows addon developers to alter the macro replacements prior to being fed into jot.tpl + +cxref: include/conversation.php diff --git a/doc/de/hook/legal_webbie.bb b/doc/de/hook/legal_webbie.bb new file mode 100644 index 000000000..8c7d32d56 --- /dev/null +++ b/doc/de/hook/legal_webbie.bb @@ -0,0 +1,10 @@ +[h2]legal_webbie[/h2] + +Called when validating a channel address. By default the valid characters are +a-z,0-9,-,_, and . Uppercase ASCII characters are folded to lower and any invalid characters are stripped. + +Some federated networks require more restrictive rules. + +The hook is called with an array [ 'input' => (supplied text), 'output' => (validated text) ] + +A plugin will generally perform a regex filter or text operation on 'input' and provide the results in 'output'.
\ No newline at end of file diff --git a/doc/de/hook/legal_webbie_text.bb b/doc/de/hook/legal_webbie_text.bb new file mode 100644 index 000000000..32c74c93b --- /dev/null +++ b/doc/de/hook/legal_webbie_text.bb @@ -0,0 +1,7 @@ +[h2]legal_webbie_text[/h2] + +Returns a string describing the text rules applied to legal_webbie(). + +Called with an array [ 'text' => (descriptive text describing text character limitations) ] + +A plugin should return the description of the allowed characters and operation performed in the 'legal_webbie' hook to assist people when creating a new channel.
\ No newline at end of file diff --git a/doc/de/hook/load_pdl.bb b/doc/de/hook/load_pdl.bb new file mode 100644 index 000000000..149a3e766 --- /dev/null +++ b/doc/de/hook/load_pdl.bb @@ -0,0 +1 @@ +[h2]load_pdl[/h2] diff --git a/doc/de/hook/local_dir_update.bb b/doc/de/hook/local_dir_update.bb new file mode 100644 index 000000000..d0b0f8ac1 --- /dev/null +++ b/doc/de/hook/local_dir_update.bb @@ -0,0 +1 @@ +[h2]local_dir_update[/h2] diff --git a/doc/de/hook/logged_in.bb b/doc/de/hook/logged_in.bb new file mode 100644 index 000000000..b01041576 --- /dev/null +++ b/doc/de/hook/logged_in.bb @@ -0,0 +1 @@ +[h2]logged_in[/h2] diff --git a/doc/de/hook/logger.bb b/doc/de/hook/logger.bb new file mode 100644 index 000000000..8fe989abd --- /dev/null +++ b/doc/de/hook/logger.bb @@ -0,0 +1,16 @@ +[h2]logger[/h2] + +Called when making an entry to the application logfile + +Hook data: + + array( + 'filename' => name of logfile relative to application basedir. String. + 'loglevel' => the log level of this log entry, if this is higher than the configured maximum loglevel + this hook will not be called. Integer. + 'message' => The formatted log message, ready for logging. String. + 'logged' => boolean, default is false. Set to true to prevent the normal logfile entry to be made + (e.g. if the plugin is configured to handle this aspect of the function, or if it is determined + that this log entry should not be made) + ) + diff --git a/doc/de/hook/logging_out.bb b/doc/de/hook/logging_out.bb new file mode 100644 index 000000000..d47b9f1df --- /dev/null +++ b/doc/de/hook/logging_out.bb @@ -0,0 +1 @@ +[h2]logging_out[/h2] diff --git a/doc/de/hook/login_hook.bb b/doc/de/hook/login_hook.bb new file mode 100644 index 000000000..156a0afcd --- /dev/null +++ b/doc/de/hook/login_hook.bb @@ -0,0 +1 @@ +[h2]login_hook[/h2] diff --git a/doc/de/hook/magic_auth.bb b/doc/de/hook/magic_auth.bb new file mode 100644 index 000000000..80d6edb27 --- /dev/null +++ b/doc/de/hook/magic_auth.bb @@ -0,0 +1 @@ +[h2]magic_auth[/h2] diff --git a/doc/de/hook/magic_auth_openid_success.bb b/doc/de/hook/magic_auth_openid_success.bb new file mode 100644 index 000000000..810f2e06d --- /dev/null +++ b/doc/de/hook/magic_auth_openid_success.bb @@ -0,0 +1 @@ +[h2]magic_auth_openid_success[/h2] diff --git a/doc/de/hook/magic_auth_success.bb b/doc/de/hook/magic_auth_success.bb new file mode 100644 index 000000000..d795e43e5 --- /dev/null +++ b/doc/de/hook/magic_auth_success.bb @@ -0,0 +1 @@ +[h2]magic_auth_success[/h2] diff --git a/doc/de/hook/main_slider.bb b/doc/de/hook/main_slider.bb new file mode 100644 index 000000000..a63c2170a --- /dev/null +++ b/doc/de/hook/main_slider.bb @@ -0,0 +1 @@ +[h2]main_slider[/h2] diff --git a/doc/de/hook/marital_selector.bb b/doc/de/hook/marital_selector.bb new file mode 100644 index 000000000..0f76c3f5a --- /dev/null +++ b/doc/de/hook/marital_selector.bb @@ -0,0 +1 @@ +[h2]marital_selector[/h2] diff --git a/doc/de/hook/marital_selector_min.bb b/doc/de/hook/marital_selector_min.bb new file mode 100644 index 000000000..f02d21f20 --- /dev/null +++ b/doc/de/hook/marital_selector_min.bb @@ -0,0 +1 @@ +[h2]marital_selector_min[/h2] diff --git a/doc/de/hook/markdown_to_bb.bb b/doc/de/hook/markdown_to_bb.bb new file mode 100644 index 000000000..8af637c8c --- /dev/null +++ b/doc/de/hook/markdown_to_bb.bb @@ -0,0 +1,5 @@ +[h2]markdown_to_bb[/h2] + +Called when processing markdown to bbcode conversion such as when importing Diaspora protocol source or other markdown sources. The plugin is called post conversion. + +The function takes one argument which is the string being converted. It may be additionally processed by the plugin. diff --git a/doc/de/hook/module_loaded.bb b/doc/de/hook/module_loaded.bb new file mode 100644 index 000000000..cb0d2302d --- /dev/null +++ b/doc/de/hook/module_loaded.bb @@ -0,0 +1 @@ +[h2]module_loaded[/h2] diff --git a/doc/de/hook/module_mod_aftercontent.bb b/doc/de/hook/module_mod_aftercontent.bb new file mode 100644 index 000000000..04e3c8d88 --- /dev/null +++ b/doc/de/hook/module_mod_aftercontent.bb @@ -0,0 +1,12 @@ +[h2]module_mod_aftercontent[/h2] + + + +The hook data for this call consists of an array + + $arr['content'] + +This element contains the HTML content which was prepared for this page by calling the module_content() function. It is invoked after the content has been created. It does not contain the result of AJAX or asynchronous page load calls. + + The current module may be determined by lookin at App::$module + diff --git a/doc/de/hook/module_mod_content.bb b/doc/de/hook/module_mod_content.bb new file mode 100644 index 000000000..eef5b7ba5 --- /dev/null +++ b/doc/de/hook/module_mod_content.bb @@ -0,0 +1,10 @@ +[h2]module_mod_content[/h2] + +The hook data for this call consists of an array + + $arr['content'] + +This element contains the HTML content before calling the module_content() function. It is invoked before the content region has been populated. This may or may not be empty as there may be other processes or addons generating content prior to your hook handler is run. Be certain to preserve any current content. Typically anything you add here will be placed at the top of the content region of the page, but in any event prior to the main content region being generated. + + The current module may be determined by lookin at App::$module + diff --git a/doc/de/hook/module_mod_init.bb b/doc/de/hook/module_mod_init.bb new file mode 100644 index 000000000..52fe5a616 --- /dev/null +++ b/doc/de/hook/module_mod_init.bb @@ -0,0 +1 @@ +[h2]module_mod_init[/h2] diff --git a/doc/de/hook/module_mod_post.bb b/doc/de/hook/module_mod_post.bb new file mode 100644 index 000000000..3adb0e737 --- /dev/null +++ b/doc/de/hook/module_mod_post.bb @@ -0,0 +1 @@ +[h2]module_mod_post[/h2] diff --git a/doc/de/hook/mood_verbs.bb b/doc/de/hook/mood_verbs.bb new file mode 100644 index 000000000..67fb719dd --- /dev/null +++ b/doc/de/hook/mood_verbs.bb @@ -0,0 +1 @@ +[h2]mood_verbs[/h2] diff --git a/doc/de/hook/nav.bb b/doc/de/hook/nav.bb new file mode 100644 index 000000000..b52f90602 --- /dev/null +++ b/doc/de/hook/nav.bb @@ -0,0 +1,28 @@ +[h2]nav[/h2] + +Called when generating the main navigation bar and menu for a page + +Hook data: + + array( + 'usermenu' => array( 'icon' => photo URL, 'name' => channel name ) + 'nav' => array( + 'usermenu' => usermenu (photo menu) link array + (channel home, profiles, photos, cloud, chats, webapges ...) + 'loginmenu' => login menu link array + 'network' => grid link and grid-notify + 'home' => home link and home-notify + 'intros' => intros link and intros-notify + 'notifications' => notifications link and notifications-notify + 'messages' => PM link and PM-notify + 'all_events' => events link and events notfiy + 'manage' => manage channels link + 'settings' => settings link + 'register' => registration link + 'help' => help/doc link + 'apps' => apps link + 'search' => search link and form + 'directory' => directory link + ) + + diff --git a/doc/de/hook/network_content_init.bb b/doc/de/hook/network_content_init.bb new file mode 100644 index 000000000..224da393a --- /dev/null +++ b/doc/de/hook/network_content_init.bb @@ -0,0 +1 @@ +[h2]network_content_init[/h2] diff --git a/doc/de/hook/network_ping.bb b/doc/de/hook/network_ping.bb new file mode 100644 index 000000000..78deefe78 --- /dev/null +++ b/doc/de/hook/network_ping.bb @@ -0,0 +1 @@ +[h2]network_ping[/h2] diff --git a/doc/de/hook/network_to_name.bb b/doc/de/hook/network_to_name.bb new file mode 100644 index 000000000..eea4a1841 --- /dev/null +++ b/doc/de/hook/network_to_name.bb @@ -0,0 +1 @@ +[h2]network_to_name[/h2] diff --git a/doc/de/hook/notifier_end.bb b/doc/de/hook/notifier_end.bb new file mode 100644 index 000000000..df9d852bd --- /dev/null +++ b/doc/de/hook/notifier_end.bb @@ -0,0 +1 @@ +[h2]notifier_end[/h2] diff --git a/doc/de/hook/notifier_hub.bb b/doc/de/hook/notifier_hub.bb new file mode 100644 index 000000000..4255ce446 --- /dev/null +++ b/doc/de/hook/notifier_hub.bb @@ -0,0 +1 @@ +[h2]notifier_hub[/h2] diff --git a/doc/de/hook/notifier_normal.bb b/doc/de/hook/notifier_normal.bb new file mode 100644 index 000000000..0059baa47 --- /dev/null +++ b/doc/de/hook/notifier_normal.bb @@ -0,0 +1 @@ +[h2]notifier_normal[/h2] diff --git a/doc/de/hook/obj_verbs.bb b/doc/de/hook/obj_verbs.bb new file mode 100644 index 000000000..ca98229aa --- /dev/null +++ b/doc/de/hook/obj_verbs.bb @@ -0,0 +1 @@ +[h2]obj_verbs[/h2] diff --git a/doc/de/hook/oembed_probe.bb b/doc/de/hook/oembed_probe.bb new file mode 100644 index 000000000..4f32ac267 --- /dev/null +++ b/doc/de/hook/oembed_probe.bb @@ -0,0 +1 @@ +[h2]oembed_probe[/h2] diff --git a/doc/de/hook/other_encapsulate.bb b/doc/de/hook/other_encapsulate.bb new file mode 100644 index 000000000..ea0cdf622 --- /dev/null +++ b/doc/de/hook/other_encapsulate.bb @@ -0,0 +1,7 @@ +[h2]other_encapsulate[/h2] + +Passed an array of 'data', 'pubkey', 'alg', 'result' when encrypting data with an algorithm (alg) which is unknown to the system. Hooks are expected to identify their algorithm, encrypt data with pubkey and place the result in 'result'. + + + + diff --git a/doc/de/hook/other_unencapsulate.bb b/doc/de/hook/other_unencapsulate.bb new file mode 100644 index 000000000..c8b0b617f --- /dev/null +++ b/doc/de/hook/other_unencapsulate.bb @@ -0,0 +1,5 @@ +[h2]other_unencapsulate[/h2] + +Passed an array of 'data', 'prvkey', 'alg', 'result' when decrypting data with an algorithm (alg) which is unknown to the system. Hooks are expected to identify their algorithm, decrypt data with prvkey and place the result in 'result'. + + diff --git a/doc/de/hook/page_content_top.bb b/doc/de/hook/page_content_top.bb new file mode 100644 index 000000000..137e3abfd --- /dev/null +++ b/doc/de/hook/page_content_top.bb @@ -0,0 +1 @@ +[h2]page_content_top[/h2] diff --git a/doc/de/hook/page_end.bb b/doc/de/hook/page_end.bb new file mode 100644 index 000000000..09293cf50 --- /dev/null +++ b/doc/de/hook/page_end.bb @@ -0,0 +1 @@ +[h2]page_end[/h2] diff --git a/doc/de/hook/page_header.bb b/doc/de/hook/page_header.bb new file mode 100644 index 000000000..ffaa791c9 --- /dev/null +++ b/doc/de/hook/page_header.bb @@ -0,0 +1 @@ +[h2]page_header[/h2] diff --git a/doc/de/hook/page_meta.bb b/doc/de/hook/page_meta.bb new file mode 100644 index 000000000..30a8f9440 --- /dev/null +++ b/doc/de/hook/page_meta.bb @@ -0,0 +1,13 @@ +[h2]page_meta[/h2] + +Called before generating the page header. + +[code] + $pagemeta = [ 'og:title' => self::$page['title'] ]; + + call_hooks('page_meta',$pagemeta); + foreach ($pagemeta as $metaproperty => $metavalue) { + self::$meta->set($metaproperty,$metavalue); + } + +[/code] diff --git a/doc/de/hook/parse_atom.bb b/doc/de/hook/parse_atom.bb new file mode 100644 index 000000000..c8037317f --- /dev/null +++ b/doc/de/hook/parse_atom.bb @@ -0,0 +1 @@ +[h2]parse_atom[/h2] diff --git a/doc/de/hook/parse_link.bb b/doc/de/hook/parse_link.bb new file mode 100644 index 000000000..1c328059c --- /dev/null +++ b/doc/de/hook/parse_link.bb @@ -0,0 +1 @@ +[h2]parse_link[/h2] diff --git a/doc/de/hook/pdl_selector.bb b/doc/de/hook/pdl_selector.bb new file mode 100644 index 000000000..bee01c843 --- /dev/null +++ b/doc/de/hook/pdl_selector.bb @@ -0,0 +1 @@ +[h2]pdl_selector[/h2] diff --git a/doc/de/hook/perm_is_allowed.bb b/doc/de/hook/perm_is_allowed.bb new file mode 100644 index 000000000..aac647609 --- /dev/null +++ b/doc/de/hook/perm_is_allowed.bb @@ -0,0 +1 @@ +[h2]perm_is_allowed[/h2] diff --git a/doc/de/hook/permissions_create.bb b/doc/de/hook/permissions_create.bb new file mode 100644 index 000000000..22f80a80e --- /dev/null +++ b/doc/de/hook/permissions_create.bb @@ -0,0 +1 @@ +[h2]permissions_create[/h2] diff --git a/doc/de/hook/permissions_update.bb b/doc/de/hook/permissions_update.bb new file mode 100644 index 000000000..40366b33d --- /dev/null +++ b/doc/de/hook/permissions_update.bb @@ -0,0 +1 @@ +[h2]permissions_update[/h2] diff --git a/doc/de/about/.gitkeep b/doc/de/hook/permit_hook.bb index e69de29bb..e69de29bb 100644 --- a/doc/de/about/.gitkeep +++ b/doc/de/hook/permit_hook.bb diff --git a/doc/de/hook/personal_xrd.bb b/doc/de/hook/personal_xrd.bb new file mode 100644 index 000000000..71d4bd8dd --- /dev/null +++ b/doc/de/hook/personal_xrd.bb @@ -0,0 +1 @@ +[h2]personal_xrd[/h2] diff --git a/doc/de/hook/photo_post_end.bb b/doc/de/hook/photo_post_end.bb new file mode 100644 index 000000000..8a3291763 --- /dev/null +++ b/doc/de/hook/photo_post_end.bb @@ -0,0 +1 @@ +[h2]photo_post_end[/h2] diff --git a/doc/de/hook/photo_upload_begin.bb b/doc/de/hook/photo_upload_begin.bb new file mode 100644 index 000000000..5e441a12a --- /dev/null +++ b/doc/de/hook/photo_upload_begin.bb @@ -0,0 +1 @@ +[h2]photo_upload_begin[/h2] diff --git a/doc/de/hook/photo_upload_end.bb b/doc/de/hook/photo_upload_end.bb new file mode 100644 index 000000000..956175f1d --- /dev/null +++ b/doc/de/hook/photo_upload_end.bb @@ -0,0 +1 @@ +[h2]photo_upload_end[/h2] diff --git a/doc/de/hook/photo_upload_file.bb b/doc/de/hook/photo_upload_file.bb new file mode 100644 index 000000000..726622ac0 --- /dev/null +++ b/doc/de/hook/photo_upload_file.bb @@ -0,0 +1 @@ +[h2]photo_upload_file[/h2] diff --git a/doc/de/hook/photo_upload_form.bb b/doc/de/hook/photo_upload_form.bb new file mode 100644 index 000000000..70b8318b8 --- /dev/null +++ b/doc/de/hook/photo_upload_form.bb @@ -0,0 +1 @@ +[h2]photo_upload_form[/h2] diff --git a/doc/de/hook/photo_view_filter.bb b/doc/de/hook/photo_view_filter.bb new file mode 100644 index 000000000..0780c1edc --- /dev/null +++ b/doc/de/hook/photo_view_filter.bb @@ -0,0 +1 @@ +[h2]photo_view_filter[/h2] diff --git a/doc/de/hook/poke_verbs.bb b/doc/de/hook/poke_verbs.bb new file mode 100644 index 000000000..54d68c3a2 --- /dev/null +++ b/doc/de/hook/poke_verbs.bb @@ -0,0 +1 @@ +[h2]poke_verbs[/h2] diff --git a/doc/de/hook/post_local.bb b/doc/de/hook/post_local.bb new file mode 100644 index 000000000..5aa723cb9 --- /dev/null +++ b/doc/de/hook/post_local.bb @@ -0,0 +1 @@ +[h2]post_local[/h2] diff --git a/doc/de/hook/post_local_end.bb b/doc/de/hook/post_local_end.bb new file mode 100644 index 000000000..380166fdb --- /dev/null +++ b/doc/de/hook/post_local_end.bb @@ -0,0 +1 @@ +[h2]post_local_end[/h2] diff --git a/doc/de/hook/post_local_start.bb b/doc/de/hook/post_local_start.bb new file mode 100644 index 000000000..2f684f67a --- /dev/null +++ b/doc/de/hook/post_local_start.bb @@ -0,0 +1 @@ +[h2]post_local_start[/h2] diff --git a/doc/de/hook/post_mail.bb b/doc/de/hook/post_mail.bb new file mode 100644 index 000000000..8f67ad4f0 --- /dev/null +++ b/doc/de/hook/post_mail.bb @@ -0,0 +1 @@ +[h2]post_mail[/h2] diff --git a/doc/de/hook/post_mail_end.bb b/doc/de/hook/post_mail_end.bb new file mode 100644 index 000000000..7f0085773 --- /dev/null +++ b/doc/de/hook/post_mail_end.bb @@ -0,0 +1 @@ +[h2]post_mail_end[/h2] diff --git a/doc/de/hook/post_remote.bb b/doc/de/hook/post_remote.bb new file mode 100644 index 000000000..f8e087eee --- /dev/null +++ b/doc/de/hook/post_remote.bb @@ -0,0 +1 @@ +[h2]post_remote[/h2] diff --git a/doc/de/hook/post_remote_end.bb b/doc/de/hook/post_remote_end.bb new file mode 100644 index 000000000..0fef20cbf --- /dev/null +++ b/doc/de/hook/post_remote_end.bb @@ -0,0 +1 @@ +[h2]post_remote_end[/h2] diff --git a/doc/de/hook/post_remote_update.bb b/doc/de/hook/post_remote_update.bb new file mode 100644 index 000000000..fd358db28 --- /dev/null +++ b/doc/de/hook/post_remote_update.bb @@ -0,0 +1 @@ +[h2]post_remote_update[/h2] diff --git a/doc/de/hook/post_remote_update_end.bb b/doc/de/hook/post_remote_update_end.bb new file mode 100644 index 000000000..95f1e6f78 --- /dev/null +++ b/doc/de/hook/post_remote_update_end.bb @@ -0,0 +1 @@ +[h2]post_remote_update_end[/h2] diff --git a/doc/de/hook/prepare_body.bb b/doc/de/hook/prepare_body.bb new file mode 100644 index 000000000..3f1eaef85 --- /dev/null +++ b/doc/de/hook/prepare_body.bb @@ -0,0 +1 @@ +[h2]prepare_body[/h2] diff --git a/doc/de/hook/prepare_body_final.bb b/doc/de/hook/prepare_body_final.bb new file mode 100644 index 000000000..96d1ae389 --- /dev/null +++ b/doc/de/hook/prepare_body_final.bb @@ -0,0 +1 @@ +[h2]prepare_body_final[/h2] diff --git a/doc/de/hook/prepare_body_init.bb b/doc/de/hook/prepare_body_init.bb new file mode 100644 index 000000000..f3de79970 --- /dev/null +++ b/doc/de/hook/prepare_body_init.bb @@ -0,0 +1 @@ +[h2]prepare_body_init[/h2] diff --git a/doc/de/hook/privacygroup_extras.bb b/doc/de/hook/privacygroup_extras.bb new file mode 100644 index 000000000..bd67f2470 --- /dev/null +++ b/doc/de/hook/privacygroup_extras.bb @@ -0,0 +1,12 @@ +[h2]privacygroup_extras[/h2] + +Add items to the Privacy Group edit form + +[code] + $hookinfo = [ 'pgrp_extras' => '', 'group'=>$argv(1) ]; + call_hooks ('privacygroup_extras',$hookinfo); + $pgrp_extras = $hookinfo['pgrp_extras']; +[/code] + +see: Zotlabs/Module/Group.php +see: view/tpl/privacy_groups.tpl diff --git a/doc/de/hook/privacygroup_extras_drop.bb b/doc/de/hook/privacygroup_extras_drop.bb new file mode 100644 index 000000000..fd27ab255 --- /dev/null +++ b/doc/de/hook/privacygroup_extras_drop.bb @@ -0,0 +1,11 @@ +[h2]privacygroup_extras_drop[/h2] + +Called after privacy group is dropped + +[code] + $hookinfo = [ 'pgrp_extras' => '', 'group'=>$argv(2) ]; + call_hooks ('privacygroup_extras_drop',$hookinfo); +[/code] + +see: Zotlabs/Module/Group.php +see: view/tpl/privacy_groups.tpl diff --git a/doc/de/hook/privacygroup_extras_post.bb b/doc/de/hook/privacygroup_extras_post.bb new file mode 100644 index 000000000..704db1997 --- /dev/null +++ b/doc/de/hook/privacygroup_extras_post.bb @@ -0,0 +1,11 @@ +[h2]privacygroup_extras_post[/h2] + +Called as privacy group edit form is edited. + +[code] + $hookinfo = [ 'pgrp_extras' => '', 'group'=>$group['id'] ]; + call_hooks ('privacygroup_extras_post',$hookinfo); +[/code] + +see: Zotlabs/Module/Group.php +see: view/tpl/privacy_groups.tpl diff --git a/doc/de/hook/proc_run.bb b/doc/de/hook/proc_run.bb new file mode 100644 index 000000000..a3759794a --- /dev/null +++ b/doc/de/hook/proc_run.bb @@ -0,0 +1 @@ +[h2]proc_run[/h2] diff --git a/doc/de/hook/process_channel_sync_delivery.bb b/doc/de/hook/process_channel_sync_delivery.bb new file mode 100644 index 000000000..c0416c8cb --- /dev/null +++ b/doc/de/hook/process_channel_sync_delivery.bb @@ -0,0 +1 @@ +[h2]process_channel_sync_delivery[/h2] diff --git a/doc/de/hook/profile_advanced.bb b/doc/de/hook/profile_advanced.bb new file mode 100644 index 000000000..65e56afd6 --- /dev/null +++ b/doc/de/hook/profile_advanced.bb @@ -0,0 +1 @@ +[h2]profile_advanced[/h2] diff --git a/doc/de/hook/profile_edit.bb b/doc/de/hook/profile_edit.bb new file mode 100644 index 000000000..e60663d4a --- /dev/null +++ b/doc/de/hook/profile_edit.bb @@ -0,0 +1 @@ +[h2]profile_edit[/h2] diff --git a/doc/de/hook/profile_photo_content_end.bb b/doc/de/hook/profile_photo_content_end.bb new file mode 100644 index 000000000..518415c4d --- /dev/null +++ b/doc/de/hook/profile_photo_content_end.bb @@ -0,0 +1 @@ +[h2]profile_photo_content_end[/h2] diff --git a/doc/de/hook/profile_post.bb b/doc/de/hook/profile_post.bb new file mode 100644 index 000000000..d22d8fbc7 --- /dev/null +++ b/doc/de/hook/profile_post.bb @@ -0,0 +1 @@ +[h2]profile_post[/h2] diff --git a/doc/de/hook/profile_sidebar.bb b/doc/de/hook/profile_sidebar.bb new file mode 100644 index 000000000..bfd059e4b --- /dev/null +++ b/doc/de/hook/profile_sidebar.bb @@ -0,0 +1 @@ +[h2]profile_sidebar[/h2] diff --git a/doc/de/hook/profile_sidebar_enter.bb b/doc/de/hook/profile_sidebar_enter.bb new file mode 100644 index 000000000..9d6726a30 --- /dev/null +++ b/doc/de/hook/profile_sidebar_enter.bb @@ -0,0 +1 @@ +[h2]profile_sidebar_enter[/h2] diff --git a/doc/de/hook/register_account.bb b/doc/de/hook/register_account.bb new file mode 100644 index 000000000..df4de2b30 --- /dev/null +++ b/doc/de/hook/register_account.bb @@ -0,0 +1 @@ +[h2]register_account[/h2] diff --git a/doc/de/hook/render_location.bb b/doc/de/hook/render_location.bb new file mode 100644 index 000000000..41501c087 --- /dev/null +++ b/doc/de/hook/render_location.bb @@ -0,0 +1 @@ +[h2]render_location[/h2] diff --git a/doc/de/hook/replace_macros.bb b/doc/de/hook/replace_macros.bb new file mode 100644 index 000000000..fac39dd7b --- /dev/null +++ b/doc/de/hook/replace_macros.bb @@ -0,0 +1 @@ +[h2]replace_macros[/h2] diff --git a/doc/de/hook/reverse_magic_auth.bb b/doc/de/hook/reverse_magic_auth.bb new file mode 100644 index 000000000..4cbd84b93 --- /dev/null +++ b/doc/de/hook/reverse_magic_auth.bb @@ -0,0 +1 @@ +[h2]reverse_magic_auth[/h2] diff --git a/doc/de/hook/settings_form.bb b/doc/de/hook/settings_form.bb new file mode 100644 index 000000000..d65341181 --- /dev/null +++ b/doc/de/hook/settings_form.bb @@ -0,0 +1 @@ +[h2]settings_form[/h2] diff --git a/doc/de/hook/settings_post.bb b/doc/de/hook/settings_post.bb new file mode 100644 index 000000000..f72546c11 --- /dev/null +++ b/doc/de/hook/settings_post.bb @@ -0,0 +1 @@ +[h2]settings_post[/h2] diff --git a/doc/de/hook/sexpref_selector.bb b/doc/de/hook/sexpref_selector.bb new file mode 100644 index 000000000..b4dad6b38 --- /dev/null +++ b/doc/de/hook/sexpref_selector.bb @@ -0,0 +1 @@ +[h2]sexpref_selector[/h2] diff --git a/doc/de/hook/sexpref_selector_min.bb b/doc/de/hook/sexpref_selector_min.bb new file mode 100644 index 000000000..6f49946af --- /dev/null +++ b/doc/de/hook/sexpref_selector_min.bb @@ -0,0 +1 @@ +[h2]sexpref_selector_min[/h2] diff --git a/doc/de/hook/smilie.bb b/doc/de/hook/smilie.bb new file mode 100644 index 000000000..575acc178 --- /dev/null +++ b/doc/de/hook/smilie.bb @@ -0,0 +1,19 @@ +[h2]smilie[/h2] + + +Called when processing translation of emoticons. It is passed an array containing two sub-arrays: + + array( + 'texts' => array('text1','text2',...), + 'icons' => array('icon1','icon2',...) + ); + + texts is the emoticon text - for example ':-)' for a traditional smile face. + icons is the HTML used as a replacement. For example + '<img class="smiley" src="https://localhost/images/smiley-smile.gif" alt=":-)" />' + + If adding or removing an entry from either array, the corresponding element from the matching array must also + be added or removed. Emoticons less than three characters in length or not recommended as they get triggered + incorrectly quite often. Extended emoticons are indicated by convention using a preceding colon, for example + + :walrus_kissing_a_baby
\ No newline at end of file diff --git a/doc/de/hook/status_editor.bb b/doc/de/hook/status_editor.bb new file mode 100644 index 000000000..00e97a7c9 --- /dev/null +++ b/doc/de/hook/status_editor.bb @@ -0,0 +1,31 @@ +[h2]status_editor[/h2] + +Replace the default status_editor (jot). + +Allow plugins to replace the default status editor in a context dependent manner. + +It is fed an array of ['editor_html' => '', 'x' => $x, 'popup' => $popup, 'module' => $module]. + +All calls to the status_editor at the time of the creation of this hook have been updated +to set $module at invocation. This allows addon developers to have a context dependent editor +based on the Hubzilla module/addon. + +Calls to status_editor() are in the form of: + status_editor($a, $x, $popup, $module). + +Future module/addon developers are encouraged to set $popup and $module when invoking the +status_editor. + + +[code] + $hook_info = ['editor_html' => '', 'x' => $x, 'popup' => $popup, 'module' => $module]; + call_hooks('status_editor',$hook_info); + if ($hook_info['editor_html'] == '') { + return hz_status_editor($a, $x, $popup); + } else { + return $hook_info['editor_html']; + } + +[/code] + +see: include/conversation.php diff --git a/doc/de/hook/stream_item.bb b/doc/de/hook/stream_item.bb new file mode 100644 index 000000000..30086961d --- /dev/null +++ b/doc/de/hook/stream_item.bb @@ -0,0 +1,13 @@ +[h2]stream_item[/h2] + + +Called for each item processed for viewing by conversation(); + +The hook data consists of an array + + array( + 'mode' => current mode of conversation() + 'item' => item being processed + ); + + Set item['blocked'] to block the item from viewing. This action will not affect comment or sub-thread counts, so if there are three comments in a conversation and you block one, three comments will still be reported even though only two are visible. diff --git a/doc/de/hook/system_app_installed_filter.bb b/doc/de/hook/system_app_installed_filter.bb new file mode 100644 index 000000000..a269a79a8 --- /dev/null +++ b/doc/de/hook/system_app_installed_filter.bb @@ -0,0 +1,18 @@ +[h2]system_app_installed_filter[/h2] + +Allow plugins to filter the result of system_app_installed. + +Code excerpt: + +[code] + $filter_arr = [ + 'uid'=>$uid, + 'app'=>$app, + 'installed'=>$r + ]; + call_hooks('system_app_installed_filter',$filter_arr); + $r = $filter_arr['installed']; +[/code] + +cxref: Zotlabs/Lib/Apps.php + diff --git a/doc/de/hook/tagged.bb b/doc/de/hook/tagged.bb new file mode 100644 index 000000000..05d081d07 --- /dev/null +++ b/doc/de/hook/tagged.bb @@ -0,0 +1,16 @@ +[h2]tagged[/h2] + + +This hook is called when a delivery is made which results in the recipient being tagged. + +The hook data is an array containing + + array( + 'channel_id' => int, + 'item' => item structure of the delivered item from database, + 'body' => the body of the referenced item + + ); + + Note: This hook is called before secondary delivery chains are invoked in the case of tagging a forum. This means that permissions and some item attributes will be those of the item before being re-packaged and before ownership of this item is given to the forum. + diff --git a/doc/de/hook/update_unseen.bb b/doc/de/hook/update_unseen.bb new file mode 100644 index 000000000..8fb02c239 --- /dev/null +++ b/doc/de/hook/update_unseen.bb @@ -0,0 +1,9 @@ +[h3]update_unseen[/h3] + +Called prior to automatically marking items 'seen'; allowing a plugin the choice to not perform this action. + +hook data + +[ 'channel_id' => local_channel(), 'update' => 'unset' ]; + +If 'update' is set to 0 or false on return, the update operation is not performed.
\ No newline at end of file diff --git a/doc/de/hook/validate_channelname.bb b/doc/de/hook/validate_channelname.bb new file mode 100644 index 000000000..2ab12bbec --- /dev/null +++ b/doc/de/hook/validate_channelname.bb @@ -0,0 +1,23 @@ +[h2]validate_channelname[/h2] + +Called when creating a new channel or changing the channel name in mod/settings.php + +Hook data consists of an array + + array( + 'name' => supplied name + ); + + If the hook handler determines the name is valid, do nothing. If there is an issue with the name, + set $hook_data['message'] to the message text which should be displayed to the member - and the name will + not be accepted. + + + Example: + [code] + if(mb_strlen($hook_data['name']) < 3) + $hook_data['message'] = t('Name too short.'); + [/code] + + +
\ No newline at end of file diff --git a/doc/de/hook/webfinger.bb b/doc/de/hook/webfinger.bb new file mode 100644 index 000000000..7cc24322f --- /dev/null +++ b/doc/de/hook/webfinger.bb @@ -0,0 +1 @@ +[h2]webfinger[/h2] diff --git a/doc/de/hook/well_known.bb b/doc/de/hook/well_known.bb new file mode 100644 index 000000000..778b27a02 --- /dev/null +++ b/doc/de/hook/well_known.bb @@ -0,0 +1 @@ +[h2]well_known[/h2] diff --git a/doc/de/hook/wiki_preprocess.bb b/doc/de/hook/wiki_preprocess.bb new file mode 100644 index 000000000..913b601ba --- /dev/null +++ b/doc/de/hook/wiki_preprocess.bb @@ -0,0 +1,11 @@ +[h3]wiki_preprocess[/h3] + +Called before markdown/bbcode processors are run for wiki pages + +Passed parameter array: + + 'content' => wiki page content + 'mimetype' => page mimetype + + +see: Zotlabs/Module/Wiki.php diff --git a/doc/de/hook/zid.bb b/doc/de/hook/zid.bb new file mode 100644 index 000000000..2210c1342 --- /dev/null +++ b/doc/de/hook/zid.bb @@ -0,0 +1 @@ +[h2]zid[/h2] diff --git a/doc/de/hook/zid_init.bb b/doc/de/hook/zid_init.bb new file mode 100644 index 000000000..131dd8f72 --- /dev/null +++ b/doc/de/hook/zid_init.bb @@ -0,0 +1 @@ +[h2]zid_init[/h2] diff --git a/doc/de/hook/zot_best_algorithm.bb b/doc/de/hook/zot_best_algorithm.bb new file mode 100644 index 000000000..ccde505cb --- /dev/null +++ b/doc/de/hook/zot_best_algorithm.bb @@ -0,0 +1,3 @@ +[h2]zot_best_algorithm[/h2] + + diff --git a/doc/de/hook/zot_finger.bb b/doc/de/hook/zot_finger.bb new file mode 100644 index 000000000..9383b4c31 --- /dev/null +++ b/doc/de/hook/zot_finger.bb @@ -0,0 +1 @@ +[h2]zot_finger[/h2] diff --git a/doc/de/hooks.html b/doc/de/hooks.html new file mode 100644 index 000000000..a7ee314e7 --- /dev/null +++ b/doc/de/hooks.html @@ -0,0 +1 @@ +<div><h3>Hooks</h3><table><tr><td>Function</td><td>Source File</td><td>Arg</td></tr><tr><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td></tr><tr><td>$a->module . _mod_aftercontent</td><td>index.php</td><td>$arr</td></tr><tr><td>$a->module . _mod_content</td><td>index.php</td><td>$arr</td></tr><tr><td>$a->module . _mod_init</td><td>index.php</td><td>$placeholder</td></tr><tr><td>$a->module . _mod_post</td><td>index.php</td><td>$_POST</td></tr><tr><td>$a->module . _post_ . $selname</td><td>include/acl_selectors.php</td><td>$o</td></tr><tr><td>$a->module . _post_ . $selname</td><td>include/acl_selectors.php</td><td>$o</td></tr><tr><td>$a->module . _post_ . $selname</td><td>include/acl_selectors.php</td><td>$o</td></tr><tr><td>$a->module . _pre_ . $selname</td><td>include/acl_selectors.php</td><td>$arr</td></tr><tr><td>$a->module . _pre_ . $selname</td><td>include/acl_selectors.php</td><td>$arr</td></tr><tr><td>$a->module . _pre_ . $selname</td><td>include/acl_selectors.php</td><td>$arr</td></tr><tr><td>$name</td><td>include/plugin.php</td><td>&$data = null</td></tr><tr><td>about_hook</td><td>mod/siteinfo.php</td><td>$o</td></tr><tr><td>accept_follow</td><td>mod/connedit.php</td><td>$arr</td></tr><tr><td>account_downgrade</td><td>include/account.php</td><td>$ret</td></tr><tr><td>account_downgrade</td><td>include/account.php</td><td>$ret</td></tr><tr><td>account_settings</td><td>mod/settings.php</td><td>$account_settings</td></tr><tr><td>activity_received</td><td>include/zot.php</td><td>$parr</td></tr><tr><td>affinity_labels</td><td>include/widgets.php</td><td>$labels</td></tr><tr><td>affinity_labels</td><td>mod/connedit.php</td><td>$labels</td></tr><tr><td>api_perm_is_allowed</td><td>include/permissions.php</td><td>$arr</td></tr><tr><td>app_menu</td><td>index.php</td><td>$arr</td></tr><tr><td>atom_author</td><td>include/items.php</td><td>$o</td></tr><tr><td>atom_entry</td><td>include/items.php</td><td>$o</td></tr><tr><td>atom_feed</td><td>include/items.php</td><td>$atom</td></tr><tr><td>atom_feed_end</td><td>include/items.php</td><td>$atom</td></tr><tr><td>attach_upload_file</td><td>include/attach.php</td><td>$f</td></tr><tr><td>authenticate</td><td>include/auth.php</td><td>$addon_auth</td></tr><tr><td>avatar_lookup</td><td>include/network.php</td><td>$avatar</td></tr><tr><td>bb2diaspora</td><td>include/markdown.php</td><td>$Text</td></tr><tr><td>bbcode</td><td>include/bbcode.php</td><td>$Text</td></tr><tr><td>channel_remove</td><td>include/Contact.php</td><td>$r[0]</td></tr><tr><td>chat_message</td><td>include/chat.php</td><td>$arr</td></tr><tr><td>chat_post</td><td>mod/chatsvc.php</td><td>$arr</td></tr><tr><td>check_account_email</td><td>include/account.php</td><td>$arr</td></tr><tr><td>check_account_invite</td><td>include/account.php</td><td>$arr</td></tr><tr><td>check_account_password</td><td>include/account.php</td><td>$arr</td></tr><tr><td>connect_premium</td><td>mod/connect.php</td><td>$arr</td></tr><tr><td>connector_settings</td><td>mod/settings.php</td><td>$settings_connectors</td></tr><tr><td>construct_page</td><td>boot.php</td><td>$arr</td></tr><tr><td>contact_block_end</td><td>include/text.php</td><td>$arr</td></tr><tr><td>contact_edit</td><td>mod/connedit.php</td><td>$arr</td></tr><tr><td>contact_edit_post</td><td>mod/connedit.php</td><td>$_POST</td></tr><tr><td>contact_select_options</td><td>include/acl_selectors.php</td><td>$x</td></tr><tr><td>conversation_start</td><td>include/conversation.php</td><td>$cb</td></tr><tr><td>create_identity</td><td>include/channel.php</td><td>$newuid</td></tr><tr><td>cron</td><td>include/cronhooks.php</td><td>$d</td></tr><tr><td>cron_daily</td><td>include/poller.php</td><td>datetime_convert()</td></tr><tr><td>cron_weekly</td><td>include/poller.php</td><td>datetime_convert()</td></tr><tr><td>directory_item</td><td>mod/directory.php</td><td>$arr</td></tr><tr><td>discover_by_webbie</td><td>include/network.php</td><td>$arr</td></tr><tr><td>display_item</td><td>include/ItemObject.php</td><td>$arr</td></tr><tr><td>display_item</td><td>include/conversation.php</td><td>$arr</td></tr><tr><td>display_settings</td><td>mod/settings.php</td><td>$o</td></tr><tr><td>display_settings_post</td><td>mod/settings.php</td><td>$_POST</td></tr><tr><td>donate_contributors</td><td>extend/addon/matrix/donate/donate.php</td><td>$contributors</td></tr><tr><td>donate_plugin</td><td>extend/addon/matrix/donate/donate.php</td><td>$o</td></tr><tr><td>donate_sponsors</td><td>extend/addon/matrix/donate/donate.php</td><td>$sponsors</td></tr><tr><td>dreport_is_storable</td><td>include/zot.php</td><td>$dr</td></tr><tr><td>drop_item</td><td>include/items.php</td><td>$arr</td></tr><tr><td>enotify</td><td>include/enotify.php</td><td>$h</td></tr><tr><td>enotify_mail</td><td>include/enotify.php</td><td>$datarray</td></tr><tr><td>enotify_store</td><td>include/enotify.php</td><td>$datarray</td></tr><tr><td>event_created</td><td>include/event.php</td><td>$event[id]</td></tr><tr><td>event_updated</td><td>include/event.php</td><td>$event[id]</td></tr><tr><td>externals_url_select</td><td>include/externals.php</td><td>$arr</td></tr><tr><td>feature_enabled</td><td>include/features.php</td><td>$arr</td></tr><tr><td>feature_settings</td><td>mod/settings.php</td><td>$settings_addons</td></tr><tr><td>feature_settings_post</td><td>mod/settings.php</td><td>$_POST</td></tr><tr><td>follow</td><td>include/follow.php</td><td>$arr</td></tr><tr><td>follow</td><td>include/follow.php</td><td>$arr</td></tr><tr><td>follow_allow</td><td>include/follow.php</td><td>$x</td></tr><tr><td>gender_selector</td><td>include/profile_selectors.php</td><td>$select</td></tr><tr><td>gender_selector_min</td><td>include/profile_selectors.php</td><td>$select</td></tr><tr><td>generate_map</td><td>include/text.php</td><td>$arr</td></tr><tr><td>generate_named_map</td><td>include/text.php</td><td>$arr</td></tr><tr><td>get_all_api_perms</td><td>include/permissions.php</td><td>$arr</td></tr><tr><td>get_all_perms</td><td>include/permissions.php</td><td>$arr</td></tr><tr><td>get_features</td><td>include/features.php</td><td>$arr</td></tr><tr><td>get_role_perms</td><td>include/permissions.php</td><td>$ret</td></tr><tr><td>get_widgets</td><td>boot.php</td><td>$arr</td></tr><tr><td>get_widgets</td><td>boot.php</td><td>$arr</td></tr><tr><td>global_permissions</td><td>include/permissions.php</td><td>$ret</td></tr><tr><td>home_content</td><td>mod/home.php</td><td>$o</td></tr><tr><td>home_init</td><td>mod/home.php</td><td>$ret</td></tr><tr><td>hostxrd</td><td>mod/hostxrd.php</td><td>$arr</td></tr><tr><td>html2bbcode</td><td>include/html2bbcode.php</td><td>$message</td></tr><tr><td>identity_basic_export</td><td>include/channel.php</td><td>$addon</td></tr><tr><td>import_author_xchan</td><td>include/items.php</td><td>$arr</td></tr><tr><td>import_channel</td><td>mod/import.php</td><td>$addon</td></tr><tr><td>import_directory_profile</td><td>include/zot.php</td><td>$d</td></tr><tr><td>import_xchan</td><td>include/zot.php</td><td>$arr</td></tr><tr><td>item_photo_menu</td><td>include/conversation.php</td><td>$args</td></tr><tr><td>item_store</td><td>include/items.php</td><td>$d</td></tr><tr><td>item_store</td><td>include/items.php</td><td>$arr</td></tr><tr><td>item_store_update</td><td>include/items.php</td><td>$d</td></tr><tr><td>item_translate</td><td>include/items.php</td><td>$translate</td></tr><tr><td>item_translate</td><td>include/items.php</td><td>$translate</td></tr><tr><td>jot_networks</td><td>include/acl_selectors.php</td><td>$jotnets</td></tr><tr><td>jot_networks</td><td>include/conversation.php</td><td>$jotnets</td></tr><tr><td>jot_networks</td><td>mod/editblock.php</td><td>$jotnets</td></tr><tr><td>jot_networks</td><td>mod/editpost.php</td><td>$jotnets</td></tr><tr><td>jot_networks</td><td>mod/editwebpage.php</td><td>$jotnets</td></tr><tr><td>jot_networks</td><td>mod/editlayout.php</td><td>$jotnets</td></tr><tr><td>jot_tool</td><td>include/conversation.php</td><td>$jotplugins</td></tr><tr><td>jot_tool</td><td>mod/editblock.php</td><td>$jotplugins</td></tr><tr><td>jot_tool</td><td>mod/editpost.php</td><td>$jotplugins</td></tr><tr><td>jot_tool</td><td>mod/editwebpage.php</td><td>$jotplugins</td></tr><tr><td>jot_tool</td><td>mod/editlayout.php</td><td>$jotplugins</td></tr><tr><td>load_pdl</td><td>boot.php</td><td>$arr</td></tr><tr><td>local_dir_update</td><td>include/dir_fns.php</td><td>$arr</td></tr><tr><td>logged_in</td><td>include/oauth.php</td><td>$a->user</td></tr><tr><td>logged_in</td><td>include/api.php</td><td>$a->user</td></tr><tr><td>logged_in</td><td>include/security.php</td><td>$a->account</td></tr><tr><td>logged_in</td><td>include/security.php</td><td>$user_record</td></tr><tr><td>logging_out</td><td>include/auth.php</td><td>$args</td></tr><tr><td>login_hook</td><td>boot.php</td><td>$o</td></tr><tr><td>magic_auth</td><td>mod/magic.php</td><td>$arr</td></tr><tr><td>magic_auth_openid_success</td><td>mod/openid.php</td><td>$arr</td></tr><tr><td>magic_auth_openid_success</td><td>mod/openid.php</td><td>$arr</td></tr><tr><td>magic_auth_success</td><td>mod/post.php</td><td>$arr</td></tr><tr><td>main_slider</td><td>include/widgets.php</td><td>$arr</td></tr><tr><td>marital_selector</td><td>include/profile_selectors.php</td><td>$select</td></tr><tr><td>marital_selector_min</td><td>include/profile_selectors.php</td><td>$select</td></tr><tr><td>module_loaded</td><td>index.php</td><td>$x</td></tr><tr><td>mood_verbs</td><td>include/text.php</td><td>$arr</td></tr><tr><td>nav</td><td>include/nav.php</td><td>$x</td></tr><tr><td>network_content_init</td><td>mod/network.php</td><td>$arr</td></tr><tr><td>network_ping</td><td>mod/ping.php</td><td>$arr</td></tr><tr><td>network_tabs</td><td>include/conversation.php</td><td>$arr</td></tr><tr><td>network_to_name</td><td>include/contact_selectors.php</td><td>$nets</td></tr><tr><td>notifier_end</td><td>include/notifier.php</td><td>$target_item</td></tr><tr><td>notifier_hub</td><td>include/notifier.php</td><td>$narr</td></tr><tr><td>notifier_normal</td><td>include/deliver_hooks.php</td><td>$r[0]</td></tr><tr><td>obj_verbs</td><td>include/taxonomy.php</td><td>$arr</td></tr><tr><td>oembed_probe</td><td>include/oembed.php</td><td>$x</td></tr><tr><td>page_content_top</td><td>index.php</td><td>$a->page[content]</td></tr><tr><td>page_end</td><td>index.php</td><td>$a->page[content]</td></tr><tr><td>page_header</td><td>include/nav.php</td><td>$a->page[nav]</td></tr><tr><td>parse_atom</td><td>include/items.php</td><td>$arr</td></tr><tr><td>parse_link</td><td>mod/linkinfo.php</td><td>$arr</td></tr><tr><td>pdl_selector</td><td>include/comanche.php</td><td>$arr</td></tr><tr><td>perm_is_allowed</td><td>include/permissions.php</td><td>$arr</td></tr><tr><td>permissions_create</td><td>include/notifier.php</td><td>$perm_update</td></tr><tr><td>permissions_update</td><td>include/notifier.php</td><td>$perm_update</td></tr><tr><td>personal_xrd</td><td>mod/xrd.php</td><td>$arr</td></tr><tr><td>photo_post_end</td><td>include/photos.php</td><td>$ret</td></tr><tr><td>photo_post_end</td><td>include/photos.php</td><td>$ret</td></tr><tr><td>photo_upload_begin</td><td>include/attach.php</td><td>$arr</td></tr><tr><td>photo_upload_begin</td><td>include/photos.php</td><td>$args</td></tr><tr><td>photo_upload_end</td><td>include/attach.php</td><td>$ret</td></tr><tr><td>photo_upload_end</td><td>include/attach.php</td><td>$ret</td></tr><tr><td>photo_upload_end</td><td>include/attach.php</td><td>$ret</td></tr><tr><td>photo_upload_end</td><td>include/attach.php</td><td>$ret</td></tr><tr><td>photo_upload_end</td><td>include/attach.php</td><td>$ret</td></tr><tr><td>photo_upload_end</td><td>include/photos.php</td><td>$ret</td></tr><tr><td>photo_upload_end</td><td>include/photos.php</td><td>$ret</td></tr><tr><td>photo_upload_end</td><td>include/photos.php</td><td>$ret</td></tr><tr><td>photo_upload_end</td><td>include/photos.php</td><td>$ret</td></tr><tr><td>photo_upload_file</td><td>include/attach.php</td><td>$f</td></tr><tr><td>photo_upload_file</td><td>include/photos.php</td><td>$f</td></tr><tr><td>photo_upload_form</td><td>mod/photos.php</td><td>$ret</td></tr><tr><td>poke_verbs</td><td>include/text.php</td><td>$arr</td></tr><tr><td>post_local</td><td>include/zot.php</td><td>$arr</td></tr><tr><td>post_local</td><td>include/items.php</td><td>$arr</td></tr><tr><td>post_local</td><td>mod/item.php</td><td>$datarray</td></tr><tr><td>post_local_end</td><td>include/items.php</td><td>$arr</td></tr><tr><td>post_local_end</td><td>include/attach.php</td><td>$arr</td></tr><tr><td>post_local_end</td><td>include/attach.php</td><td>$arr</td></tr><tr><td>post_local_end</td><td>extend/addon/matrix/randpost/randpost.php</td><td>$x</td></tr><tr><td>post_local_end</td><td>extend/addon/matrix/randpost/randpost.php</td><td>$x</td></tr><tr><td>post_local_end</td><td>mod/mood.php</td><td>$arr</td></tr><tr><td>post_local_end</td><td>mod/like.php</td><td>$arr</td></tr><tr><td>post_local_end</td><td>mod/item.php</td><td>$datarray</td></tr><tr><td>post_local_end</td><td>mod/subthread.php</td><td>$arr</td></tr><tr><td>post_local_start</td><td>mod/item.php</td><td>$_REQUEST</td></tr><tr><td>post_mail</td><td>include/items.php</td><td>$arr</td></tr><tr><td>post_mail_end</td><td>include/items.php</td><td>$arr</td></tr><tr><td>post_remote</td><td>include/items.php</td><td>$arr</td></tr><tr><td>post_remote_end</td><td>include/items.php</td><td>$arr</td></tr><tr><td>post_remote_update</td><td>include/items.php</td><td>$arr</td></tr><tr><td>post_remote_update_end</td><td>include/items.php</td><td>$arr</td></tr><tr><td>prepare_body</td><td>include/text.php</td><td>$prep_arr</td></tr><tr><td>prepare_body_final</td><td>include/text.php</td><td>$prep_arr</td></tr><tr><td>prepare_body_init</td><td>include/text.php</td><td>$item</td></tr><tr><td>probe_well_known</td><td>include/probe.php</td><td>$ret</td></tr><tr><td>proc_run</td><td>boot.php</td><td>$arr</td></tr><tr><td>process_channel_sync_delivery</td><td>include/zot.php</td><td>$addon</td></tr><tr><td>profile_advanced</td><td>mod/profile.php</td><td>$o</td></tr><tr><td>profile_edit</td><td>mod/profiles.php</td><td>$arr</td></tr><tr><td>profile_photo_content_end</td><td>mod/profile_photo.php</td><td>$o</td></tr><tr><td>profile_post</td><td>mod/profiles.php</td><td>$_POST</td></tr><tr><td>profile_sidebar</td><td>include/channel.php</td><td>$arr</td></tr><tr><td>profile_sidebar_enter</td><td>include/channel.php</td><td>$profile</td></tr><tr><td>register_account</td><td>include/account.php</td><td>$result</td></tr><tr><td>render_location</td><td>include/conversation.php</td><td>$locate</td></tr><tr><td>replace_macros</td><td>include/text.php</td><td>$arr</td></tr><tr><td>reverse_magic_auth</td><td>mod/rmagic.php</td><td>$arr</td></tr><tr><td>settings_account</td><td>mod/settings.php</td><td>$_POST</td></tr><tr><td>settings_form</td><td>mod/settings.php</td><td>$o</td></tr><tr><td>settings_post</td><td>mod/settings.php</td><td>$_POST</td></tr><tr><td>sexpref_selector</td><td>include/profile_selectors.php</td><td>$select</td></tr><tr><td>sexpref_selector_min</td><td>include/profile_selectors.php</td><td>$select</td></tr><tr><td>smilie</td><td>include/text.php</td><td>$params</td></tr><tr><td>smilie</td><td>extend/addon/matrix/smileybutton/smileybutton.php</td><td>$params</td></tr><tr><td>tagged</td><td>include/items.php</td><td>$arr</td></tr><tr><td>validate_channelname</td><td>include/channel.php</td><td>$arr</td></tr><tr><td>webfinger</td><td>mod/wfinger.php</td><td>$arr</td></tr><tr><td>well_known</td><td>mod/_well_known.php</td><td>$arr</td></tr><tr><td>zid</td><td>include/channel.php</td><td>$arr</td></tr><tr><td>zid_init</td><td>include/channel.php</td><td>$arr</td></tr><tr><td>zot_finger</td><td>include/zot.php</td><td>$ret</td></tr></table><p>Generated Tue Nov 03 21:19:02 PST 2015</p></div>
\ No newline at end of file diff --git a/doc/de/main.bb b/doc/de/main.bb deleted file mode 100644 index eee2e85fe..000000000 --- a/doc/de/main.bb +++ /dev/null @@ -1,11 +0,0 @@ -[img][baseurl]/images/hubzilla-banner.png[/img] - -[zrl=[baseurl]/help/about]Was ist $Projectname?[/zrl] -$Projectname ist eine dezentrale Kommunikations- und Publishing-Plattform. Es ermöglicht Dir die volle Kontrolle über all Deine Kommunikation mit Hilfe von automatischer Verschlüsselung und detaillierter Zugriffskontrolle. Du, und [i]nur[/i] Du, entscheidest, wer Deine Beiträge sehen darf. $Projectname ist der Nachfolger, der seit einigen Jahren erfolgreichen Plattformen Friendica und RedMatrix. - -[zrl=[baseurl]/help/features]Features von $Projectname[/zrl] -$Projectname funktioniert schon heute als ein globales verteiltes Netzwerk und beweist täglich seine Vielseitigkeit und Skalierbarkeit - auf kleinen Privatservern wie auch auf riesigen Sites. -Kommunikationsplattformen für Familien, verteilte Online-Communities, Support-Foren, Blogs und Homepages. Oder auch professionelle Inhalte-Anbieter mit kommerziellen Premium-Kanälen und eingeschränktem Zugriff – was immer Du willst, $Projectname unterstützt Dich in Deinem kreativen Schaffen. - -[zrl=[baseurl]/help/what_is_zot]Got Zot? Hast Du schon Zot? Wenn nicht wird es Zeit.[/zrl] -Zot ist ein großartiges neues Kommunikationsprotokoll, das für $Projectname entwickelt wurde. Als Mitglied bist Du dank „Nomadischer Identität“ nicht länger an einen einzigen Server oder einen einzigen Anbieter gebunden. Ziehe einfach auf einen anderen Server um und behalte dabei alle Deine Kontakte, oder klone Deinen Kanal und lasse ihn auf mehreren Servern gleichzeitig laufen – sollte einer davon plötzlich geschlossen werden, ist das kein Problem für Dich. Und bist Du erst Teil des $Projectname-Netzwerkes, musst Du Dich nie wieder mehrfach anmelden, selbst wenn Du Seiten auf einem andere Hub (den $Projectname-Servern) betrachtest. Zot ist, was das $Projectname-Netzwerk besonders macht. diff --git a/doc/de/member/AdvancedSearch.md b/doc/de/member/AdvancedSearch.md new file mode 100644 index 000000000..35479dba1 --- /dev/null +++ b/doc/de/member/AdvancedSearch.md @@ -0,0 +1,30 @@ +### Erweiterte Verzeichnissuche + +Die erweiterte Verzeichnissuche wird im „Expertenmodus“ auf der Seite Einstellungen => Zusätzliche Funktionen aktiviert. + +Auf der Verzeichnisseite wird eine Option namens „Erweitert“ im Widget „Kanäle suchen“ (normalerweise in der Seitenleiste) angezeigt. Wenn Sie auf „Erweitert“ klicken, wird ein weiteres Suchfeld geöffnet, in das Sie erweiterte Suchanfragen eingeben können. +Zu den erweiterten Suchanfragen gehören + +- name=xxx [Kanalname enthält xxx] +- address=xxx [Kanaladresse (Webbie) enthält xxx] +- locale=xxx [Gebietsschema (typischerweise 'Stadt') enthält xxx] +- region=xxx [Region (Bundesland/Territorium) enthält xxx] +- postcode=xxx [Postleitzahl enthält xxx] +- country=xxx [Ländername enthält xxx] +- gender=xxx [Geschlecht enthält xxx] +- marital=xxx [Familienstand enthält xxx] +- sexual=xxx [Sexuelle Präferenz enthält xxx] +- keywords=xxx [Schlüsselwörter enthalten xxx] + +Es gibt viele Gründe, warum ein Treffer nicht das liefert, wonach Sie suchen, da viele Kanäle in ihrem (öffentlichen) Standardprofil keine detaillierten Informationen bereitstellen und viele dieser Felder Freitext-Eingaben in mehreren Sprachen zulassen - und dies kann schwierig sein, einen genauen Treffer zu erzielen. Zum Beispiel können Sie bessere Ergebnisse erzielen, wenn Sie jemanden in den USA mit 'country=u' finden (zusammen mit einigen seltsamen Kanälen aus Deutschland, Bulgarien und Australien), da dies in einem Profil als US, U.S.A, USA, Vereinigte Staaten, usw. dargestellt werden könnte. + +Künftige Überarbeitungen dieses Tools könnten versuchen, einige dieser Schwierigkeiten zu beseitigen. +Anfragen können mit 'und', 'oder' und 'und nicht' verbunden werden. + +Begriffe, die Leerzeichen enthalten, müssen in Anführungszeichen gesetzt werden. + +Beispiel: + +``` +name=„charlie brown“ und country=canada und nicht gender=female +```
\ No newline at end of file diff --git a/doc/de/member/NSFW.md b/doc/de/member/NSFW.md new file mode 100644 index 000000000..031bc0f47 --- /dev/null +++ b/doc/de/member/NSFW.md @@ -0,0 +1,21 @@ +### Inhaltswarnung/NSFW + +Inhaltswarnungen bzw. das Verbergen von bestimmten Inhalten wird bei Hubzilla mit der App "NSFW" realisiert. + +Während Sie bei anderen Diensten im Fediverse darauf angewiesen sind, dass die Verfasser von Postings möglicherweise "sensible" Inhalte hinter einem Contentwarning (einer Inhalts- bzw. Triggerwarnung) verbergen, haben Sie bei Hubzilla diese Funktionalität als Rezipient selbst in der Hand. Mit der App NSFW können Sie Filter erstellen, die dafür sorgen, dass Beiträge, die unter die Filterregeln fallen, eingeklappt angezeigt werden. Erst ein Klick auf den Button zeigt den Inhalt des Postings. + +Starten Sie die App, so erscheint die Eingabemaske für die Filter. + + + +Hier können Sie nun Schlüsselwörter und sogar [reguläre Ausdrücke](https://de.wikipedia.org/wiki/Regulärer_Ausdruck) eingeben, auf welche das Posting durchsucht wird. Wird eines der Wörter oder ein Textmuster gefunden, so wird der Inhalt im Stream zugeklappt angezeigt. + +Es ist auch möglich, nach Sprachen zu filtern (lang=xx oder lang!=xx). + +Findet sich nun ein Ausdruck, welcher zu einem der eingegebenen Filtern passt, in einem Posting, so wird das Posting für Sie hinter einer Inhaltswarnung zunächst verborgen. + + + + + + diff --git a/doc/de/member/account_settings.md b/doc/de/member/account_settings.md new file mode 100644 index 000000000..ac7263925 --- /dev/null +++ b/doc/de/member/account_settings.md @@ -0,0 +1,5 @@ +#### Konto-Einstellungen + +Mit den Konto-Einstellungen können Sie die Daten Ihres Accounts ändern. + + diff --git a/doc/de/member/accounts_profiles_channels_basics.md b/doc/de/member/accounts_profiles_channels_basics.md new file mode 100644 index 000000000..fd5fac77b --- /dev/null +++ b/doc/de/member/accounts_profiles_channels_basics.md @@ -0,0 +1,30 @@ +### Konten, Profile und Kanäle + +Sobald Sie ein *Konto* im Grid registriert haben, haben Sie auch ein *Profil* und einen *Kanal* erstellt. + +**Konto** + +Sie haben *ein* Konto. Dieses besteht aus Ihrem E-Mail-Konto und Ihrem Passwort. Mit Ihrem Konto haben Sie Zugang zu Ihrem Profil und Ihrem Kanal. + +*Betrachten Sie Ihr Konto als die Art und Weise, wie Sie sich bei einer Hubzilla-Website authentifizieren.* *Damit können Sie Dinge tun, wie z. B. Profile und Kanäle erstellen, mit denen Sie sich mit anderen Personen verbinden können.* + +**Profil** + +Sicherlich haben Sie sich auch bei anderen Internetdiensten registriert, z. B. bei Foren oder Online-Communities. Bei all diesen Diensten haben Sie einige Informationen über sich selbst angegeben, z. B. Geburtsdatum, Land, Alter und Ähnliches. + +Wenn Sie möchten, können Sie Ihr Profil hier einsehen: `[baseurl]/profile/[webname]` und bearbeiten, indem Sie auf das Bleistiftsymbol neben Ihrem Avatarbild klicken. + +Im Gegensatz zu anderen Diensten bietet dir hubzilla den Vorteil, dass du *viele weitere Profile* anlegen kannst. Auf diese Weise können Sie zwischen Profilen unterscheiden, die sich speziell an jedermann (Ihr öffentliches Profil), Ihre Arbeitskollegen, Ihre Familie und Ihren Partner richten. + +*Betrachten Sie Ihr Profil als die grundlegenden Informationen über sich selbst, die Sie anderen Menschen mitteilen.* + +**Kanal** + +Bei der Registrierung haben Sie Ihren ersten *Kanal* erstellt. Ja, neben mehreren Profilen können Sie auch mehrere Channels haben. Das mag am Anfang etwas verwirrend sein, aber lassen Sie uns die Dinge klarstellen. Sie haben bereits einen Kanal erstellt. Diesen können Sie für die Öffentlichkeit nutzen, um mit Leuten über das tägliche Leben zu kommunizieren. Aber vielleicht sind Sie ein begeisterter Leser von Büchern und das langweilt viele Leute. Also eröffnen Sie einen *zweiten Kanal* nur für Buchliebhaber, in dem Sie alle so viel über Bücher reden können, wie Sie wollen. Natürlich ist dies ein neuer Strom von Beiträgen, mit einem neuen Profil (... oder neuen*Profilen*...) und völlig anderen Kontakten. Einige Verbindungen können in beiden Kanälen bestehen, aber es wird auch welche geben, die nur in einem der beiden Kanäle bestehen. Sie selbst wechseln einfach zwischen den beiden Kanälen hin und her, so wie Sie auch im wirklichen Leben zwischen den Kanälen hin und her wechseln würden, wenn Sie sich mit Leuten unterhalten, die Sie auf der Straße treffen, oder mit Leuten, die Sie speziell für ein Gespräch über Bücher treffen. Sie können sich sogar mit sich selbst verbinden, oder besser: mit Ihrem anderen Kanal :) + +*Stellen Sie sich einen Kanal als verschiedene Bereiche vor, die verschiedenen Themen gewidmet sind und in denen Sie sich mit verschiedenen Menschen treffen.* + +#include doc/de/member/channels.md; +#include doc/de/member/profiles.md; +#include doc/de/member/settings.md; +#include doc/de/member/connecting_with_channels.md; diff --git a/doc/de/member/additional_features.md b/doc/de/member/additional_features.md new file mode 100644 index 000000000..554c52af1 --- /dev/null +++ b/doc/de/member/additional_features.md @@ -0,0 +1,31 @@ +#### Zusätzliche Funktionen (verborgene Einstellungen) + +Die Einstellungen "Zusätzliche-Funktionen" sind in der Gesamtheit weder über das Menü, noch über ein Symbol/Icon erreichbar. Sämtliche einzelnen Funktions-Einstellungen kann man aber auch in der jeweiligen App über das Zahnrad neben dem Hauptmenü (Avatar-Bild) erreichen. + +Es handelt sich um Einstellungen zu weiteren Funktionen in allen mögliche Bereichen von Hubzilla. Um die Einstellungen aufzurufen, muss man im Browser an die URL des Hubs `/settings/features` anhängen, also z.B. `https://klacker.org/settings/features`. + + + +Die Voreinstellungen für sämtliche dieser Optionen werden vom Administrator des Hubs vorgenommen. Diese Voreinstellung kann durch den Nutzer in den "Zusätzlichen Funktionen" überschrieben werden. + +Adlerdings hat der Administrator bei jeder Option auch die Möglichkeit, die Voreinstellung gegen Änderung zu sperren. Der Nutzer kann den Schalter für die Option zwar weiterhin umlegen, die Auswahl wird aber nicht gespeichert, sondern die Option wieder auf die Voreinstellung zurückgesetzt. + + + + + + + + + + + + + + + + + + + + diff --git a/doc/de/member/addressbook.md b/doc/de/member/addressbook.md new file mode 100644 index 000000000..fa53339fe --- /dev/null +++ b/doc/de/member/addressbook.md @@ -0,0 +1,23 @@ +### Adressbuch (CardDAV) + +Hubzilla bietet Ihnen mit der App "CardDAV" eine Adressverwaltung. Sie können beliebig viele Adressbücher anlegen. + + + +Die Einträge sind im vCards-Format abgelegt. + + + + + + + + + + + +Die App ermöglicht auch das Importieren von Adressbüchern oder einzelnen vCards aus einer Datei. + + + +Adressbücher sind generell privat und können - auch nicht mittels Fernautorisierung - geteilt werden. diff --git a/doc/de/member/apps.md b/doc/de/member/apps.md new file mode 100644 index 000000000..8715e8a68 --- /dev/null +++ b/doc/de/member/apps.md @@ -0,0 +1,59 @@ +### Apps + +Im frisch installierten Zustand verfügt eine Hubzilla-Instanz über etliche Grundfunktionalitäten. Es gibt jedoch viele Features, die nicht zur Basis-Installation gehören und auch nicht für einen neu erstellten Kanal sofort zur Verfügung stehen. + +Die überwiegende Zahl der Funktionen sind als "Applikationen" (kurz "Apps") realisiert. + +Die Apps erreichen Sie mit dem "App-Menü", das mit der Schaltfläche "⋮" symbolisiert wird (und sich bei den meisten Hubs ganz rechts in der Navigationsleiste befindet). Häufig benutzte Appskönnen Sie auch an der Navigationsleiste anpinnen, so dass Sie nicht bei jedem Aufruf erst das App-Menü öffnen müssen. + +Wie viele und welche Apps Ihnen zur Verfügung stehen, hängt davon ab, wie der Administrator den Hub konfiguriert hat. + +#### Appverwaltung + +Sie können die Apps für Ihren Kanal mit der Appverwaltung verwalten. Diese erreichen Sie ebenfalls im App-Menü unter dem untersten Menüpunkt "+ Apps" + +Nach dem Aufrufen der Appverwaltung werden Ihnen die bereits installierten Apps angezeigt. + +In der linken Seitenleiste können Sie nun zwischen "Installierte Apps" und "Verfügbare Apps" umschalten. + +##### Verfügbare Apps + +Bei den verfügbaren Apps finden Sie sämtliche auf Ihrem Hub zur Verfügung stehenden Apps. Einige davon sind bereits installiert. Über den Button neben der App kann man Apps installieren oder bereits installierte Apps aktualisieren. + + + +##### Installierte Apps + +Im Tab der installierten Apps finden Sie sämtliche Apps, die für Ihren Kanal installiert sind. Rechts von jeder App befinden sich zwei oder drei Buttons mit Symbolen: ein Sternsymbol, ein Pinnadelsymbol und ggf. ein Zahnradsymbol. + + + +Das Sternsymbol dient dazu, die App im App-Menü als Menüeintrag zugänglich zu machen. + + + + + +Mit dem Pinnadelsymbol kann man die App in der Navigationsleiste anpinnen. + + + +Gibt es für eine App einen Dialog für app-spezifische Einstellungen, so erreichen Sie diesen über den Button mit dem Zahnradsymbol. + + + +##### Apps verwalten + +Im Tab der installierten Apps ist genz oben auch ein Button vorhanden, welcher mit "Apps verwalten" beschriftet ist. Mit diesem Button gelangen Sie auf die Seite "Apps verwalten", auf welcher Sie Apps wieder deinstallieren und installierte in gewissen Grenzen auch bearbeiten können. + + + +Dort ist es auch möglich eigene Apps zu erstellen (Nur für fortgeschrittene Nutzer!). + +##### Apps im Menü sortieren + +Die Apps, welche Sie dem App-Menü zugefügt haben, können sie dort ganz einfach per Drag-and-drop sortieren und Ihre bevorzugte Reihenfolge festlegen. + + + +#include doc/de/member/important_apps.md; diff --git a/doc/de/member/article.md b/doc/de/member/article.md new file mode 100644 index 000000000..81fee5881 --- /dev/null +++ b/doc/de/member/article.md @@ -0,0 +1,27 @@ +### Artikel + +Der Artikel ist eine Macroblogging-Beitragsform bei Hubzilla und z.B. geeignet für echte Blogbeiträge. Im Gegensatz zu normalen Beiträgen, die im gesamten Netzwerk (inklusive Fediverse) verteilt werden, verbleiben Artikel beim eigenen Hub. Sie sind für Nutzer anderer Instanzen und Nutzer, die keinen Account im Fediverse haben also nur über ihre URL erreichbar. Die URL kann selbstverständlich geteilt werden, so dass der Artikel trotzdem im Fediverse bekannt wird und abgerufen werden kann. + +Einen Artikel erstellt man über die App (App-Menü ⋮) "Artikel". Ruft man diese auf, werden sämtliche erstellten Artikel angezeigt und man hat die Möglichkeit, einen neuen Artikel anzulegen ("Artikel hinzufügen"). + + + +Das Erstellen eines Artikels ähnelt dem Erstellen eines normalen Beitrags. Das Eingabe-Formular weist aber ein zusätzliches Feld auf: "Link zur Seite". + +Hier kann man eine leicht lesbare Linkbezeichnung eingeben. Lässt man das Feld frei, wird eine Bezeichnung automatisch vergeben (länger und "kryptischer"). + + + +Hat man das optionale Feld Summary ("Zusammenfassung") ausgefüllt, wird bei einem Artikel, genauso wie bei normalen Beiträgen, zunächst nur die Zusammenfassung angezeigt. + + + +Wenn Sie auf "Artikel ansehen" klicken, wir der Artikel selbst angezeigt. + + + +Der Direktlink zum Artikel setzt sich so zusammen: + +`URL-Ihres-Hubs/articles/Kanalname/Link-zurSeite` + + diff --git a/doc/de/member/bbcode.md b/doc/de/member/bbcode.md new file mode 100644 index 000000000..b25168323 --- /dev/null +++ b/doc/de/member/bbcode.md @@ -0,0 +1,79 @@ +#### Text Dekoration + +| BBcode syntax | Rendered text | +| ------------------------------------------------------------ | --------------------------------- | +| `[b]bold[/b]` | **bold** | +| `[i]italic[/i]` | *italic* | +| `[u]underlined[/u]` | underlined | +| `[s]strike[/s]` | ~~strike~~ | +| `[color=red]red[/color]` |  | +| `[hl]highlighted[/hl]` |  | +| `[font=courier]some text[/font] ` |  | +| `[quote]quote[/quote]` |  | +| `[quote=Author]Author? Me? No, no, no...[/quote]` |  | +| ` [size=small]small text[/size]`<br />`[size=xx-large]xx-large text[/size]`<br />` [size=20]20px exactly[/size] `<br />Size options include: **xx-small, small, medium, large, xx-large** |  | +| `Add a horizontal bar [hr] Like this ` |  | +| `This is [center]centered[/center] text` |  | + +#### Code-Blöcke + +Code kann generisch in einem Block- oder Inline-Format dargestellt werden (je nachdem, ob es neue Zeilenzeichen im Text gibt), oder Sie können eine unterstützte Sprache für erweiterte Syntaxhervorhebung angeben. Die Syntaxhervorhebung erfordert ein geeignetes Rendering-Plugin wie **hilite**. Unterstützte Sprachen mit dem hilite-Plugin sind **php, css, mysql, sql, abap, diff, html, perl, ruby, vbscript, avrc, dtd, java, xml, cpp, python, javascript, js, json, sh**. + +Wenn kein Rendering-Plugin installiert ist oder eine nicht unterstützte Sprache angegeben wird, entspricht die Ausgabe für syntaxmarkierte Codeblöcke dem Code-Tag des Blockformats. + +| BBcode syntax | Output | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| `[code]function bbcode() { }[/code]` | `function bbcode() { }` | +| `[code=php]function bbcode() { $variable = true; if( $variable ) { echo "true"; } }[/code]` |  | +| `[nobb][nobb]This is how [i]you[/i] can [u]show[/u] how to use [hl]BBcode[/hl] syntax[/nobb][/nobb]` | This is how [i]you[/i] can [u]show[/u] how to use [hl]BBcode[/hl] syntax | + +#### Listen + +| BBcode syntax | Rendered list | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| `[ul] [*] First list element [*] Second list element [/ul]` | - First list element<br />- Second list element | +| `[ol] [*] First list element [*] Second list element [/ol]` | 1. First list element<br />2. Second list element | +| `[list=A] [*] First list element [*] Second list element [/list]` The list type options are `1, i, I, a, A`. | A. First list element<br />B. Second list element | +| `[dl terms="b"] [*= First element term] First element description [*= Second element term] Second element description [/dl]` The **terms** style options can be any combination of: bbold iitalic uunderline mmonospace llarge hhorizontal — like *this* defintion list | First element term<br />First element description <br />Second element term<br />Second element description | + +#### Tabellen + +| BBcode syntax | Rendered table | +| ------------------------------------------------------------ | --------------------------- | +| `[table border=0] [tr] [th]Header 1[/th][th]Header 2[/th] [/tr] [tr][td]Content[/td][td]Content[/td][/tr] [tr][td]Content[/td][td]Content[/td][/tr] [/table]` |  | +| `[table border=1] [tr] [th]Header 1[/th][th]Header 2[/th] [/tr] [tr][td]Content[/td][td]Content[/td][/tr] [tr][td]Content[/td][td]Content[/td][/tr] [/table]` |  | +| `[table] [tr] [th]Header 1[/th][th]Header 2[/th] [/tr] [tr][td]Content[/td][td]Content[/td][/tr] [tr][td]Content[/td][td]Content[/td][/tr] [/table]` |  | + +#### Links und eingebettete Inhalte + +| BBcode syntax | Output | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| `[video]video URL[/video] [audio]audio URL[/audio]` | VIDEO<br />AUDIO | +| `[video='URL_TO_POSTER']video_link[/video]` | <img src="/help/de/member/pic/video_poster.png" alt="image" style="zoom:100%;" /> | +| `[url=https://hubzilla.org]Hubzilla[/url]` | [Hubzilla](https://hubzilla.org) | +| `An image [img]https://example.org/image.jpg[/img] in some text ` | <img src="/help/de/member/pic/image.png" alt="image" style="zoom:80%;" /> | + +#### Hubzilla-spezifische codes + +| BBcode syntax | Output | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| Magic-auth version of [url] tag `[zrl=https://hubzilla.org]Identity-aware link[/zrl]` |  | +| Magic-auth version of [img] tag `[zmg]https://hubzilla.org/some/photo.jpg[/zmg]` | Image is only viewable by those authenticated and with permission. | +| Observer-dependent output:`[observer=1]Text to display if observer IS authenticated[/observer]` | | +| ` [observer=0]Text to display if observer IS NOT authenticated[/observer]` | | +| `[observer.language=en]Text to display if observer language is English[/observer]` | | +| `[observer.language!=de]Text to display if observer language is not German[/observer]` | | +| `[observer.url]` | channel URL of observer | +| `[observer.baseurl]` | website of observer | +| `[observer.name]` | name of observer | +| ` [observer.webname]` | short name in the url of the observer | +| `[observer.address]` | address (Nomad/Zot-id) of observer | +| `[observer.photo]` | profile photo of observer | +| `What is a spoiler? [spoiler]Text you want to hide.[/spoiler]` | What is a spoiler? Click to open/close | +| `[toc data-toc='div.page-body' data-toc-headings='h1,h2']` Create a table of content in a webpage or wiki page. Please refer to the [original jQuery toc](http://ndabas.github.io/toc/) to get more explanations. Optional param: 'data-toc'. If omitted the default is 'body' Optional param: 'data-toc-headings'. If omitted the default is 'h1,h2,h3' | | +| `[rpost=title]Text to post[/rpost]` The observer will be returned to their home hub to enter a post with the specified title and body. Both are optional | [[baseurl\]/rpost?f=&title=title&body=Text+to+post](file:///home/daniel/Fediverse/orig doc/member/[baseurl]/rpost?f=&title=title&body=Text+to+post) | +| This requires the [**qrator**](https://framagit.org/hubzilla/addons/tree/master/qrator) plugin. `[qr]text to post[/qr]` |  | +| This requires a suitable map plugin such as **[openstreetmap](https://framagit.org/hubzilla/addons/tree/master/openstreetmap)**. `[map]` | Generate an inline map using the current browser coordinates of the poster, if browser location is enabled | +| This requires a suitable map plugin such as **[openstreetmap](https://framagit.org/hubzilla/addons/tree/master/openstreetmap)**. `[map=latitude,longitude]` | Generate a map using global coordinates. | +| This requires a suitable map plugin such as **[openstreetmap](https://framagit.org/hubzilla/addons/tree/master/openstreetmap)**. `[map]Place Name[/map]` | Generate a map for a given named location. The first matching location is returned. For instance "Sydney" will usually return Sydney, Australia and not Sydney, Nova Scotia, Canada unless the more precise location is specified. It is highly recommended to use the post preview utility to ensure you have the correct location before submitting the post. | +| `[©]` | © | diff --git a/doc/de/member/blocking_channels.md b/doc/de/member/blocking_channels.md new file mode 100644 index 000000000..467017c11 --- /dev/null +++ b/doc/de/member/blocking_channels.md @@ -0,0 +1,19 @@ +### Kanäle blockieren/ignorieren/archivieren/verstecken + +Kanäle in Ihrem Adressbuch können den Status „ *blockiert*“, „ *ignoriert“*, „ *archiviert“* oder „ *versteckt“* haben. Auf Ihrer Verbindungsseite gibt es einen Filter, der die Kanäle mit diesen Status anzeigen. + + + +Auf den Seiten zum Bearbeiten von Verbindungen können Sie den Status eines Kanals ändern. + +<u>Die Bedeutung:</u> + +**Blockiert:** Der Kanal kann Ihre Elemente nicht lesen, unabhängig von den Berechtigungen, und er kann auch nicht in Ihren Kanal schreiben. + +**Ignoriert**: Der Kanal kann Ihre Elemente lesen, wenn er dazu berechtigt ist, aber er kann nicht in Ihren Kanal schreiben. + +**Versteckt:** Der Kanal wird nicht in der Verbindungsliste Ihres Profils angezeigt. Niemand kann sehen, dass Sie mit ihm verbunden sind. Beachte: Er ist trotzdem für deine anderen Verbindungen sichtbar, zum Beispiel in Antworten auf Beiträge. + +**Archiviert:** Wenn ein Kanal 30 Tage lang nicht erreicht werden kann, wird er automatisch als archiviert markiert. Dadurch bleiben alle Daten erhalten, aber der Kanal wird nicht mehr nach neuen Informationen abgefragt und aus der automatischen Vervollständigung entfernt. Wenn Sie später erfahren, dass der Kanal wieder online ist, können Sie ihn manuell aus dem Archiv entfernen. + +#include doc/de/member/superblock.md; diff --git a/doc/de/member/bookmarks.md b/doc/de/member/bookmarks.md new file mode 100644 index 000000000..f1483add2 --- /dev/null +++ b/doc/de/member/bookmarks.md @@ -0,0 +1,27 @@ +### Bookmarks (Lesezeichen)) + +Lesezeichen geben einen Link an, der in Ihrem Lesezeichenordner gespeichert werden kann. Sie verwenden die Zeichenfolge `#^` gefolgt von dem Link. Oft werden diese automatisch generiert. Wenn der Administrator des Hub das Addon "bookmarker" installiert hat, wird diese Sequenz beim Online-Ansehen des Beitrags oder Kommentars in ein Lesezeichensymbol konvertiert. + + + + + +Wenn Sie auf das Symbol klicken, wird das Lesezeichen gespeichert. Wenn das Add-In für das Lesezeichen nicht installiert ist, enthält das Post-Dropdown-Menü einen Link zum Speichern des Lesezeichens oder der Lesezeichen. + +Um Lesezeichen zu verwenden, müssen Sie die App "Lesezeichen" installieren. + +Die App führt dann alle von Ihnen gesetzten Lesezeichen auf. + +Um ein Lesezeichen unabhängig von einem Link im Stream oder einem Beitrag hinzuzufügen, können Sie die Seite `<URL_Ihres_hub>/rbmark` aufrufen, welche Ihnen eine Maske zur manuellen Eingabe eines Lesezeichens zur Verfügung stellt. + + + +Sie können auch ein [Bookmarklet](https://de.wikipedia.org/wiki/Bookmarklet) erstellen und z.B. in der Lesezeichenleiste Ihres Webbrowsers ablegen: + +```javascript +javascript:javascript:(function(){var%20url=location.href;var%20title=document.title||url;window.open('[observer.baseurl]/rbmark?&url='+encodeURIComponent(url)+'&title='+encodeURIComponent(title)+'&source=bookmarklet','_blank','menubar=no,height=390,width=600,toolbar=no,scrollbars=no,status=no,dialog=1');})(); +``` + +<u>Wichtig:</u> Ersetzen Sie den Ausdruck `[observer.baseurl]` durch die URL Ihres Hub, also wenn Sie z.B. Ihren Kanal bei Klackerhub haben, müssen Sie für `[observer.baseurl]` einfach `https://klacker.org` eintragen. + +Nun können Sie jede Webseite, welche Sie aufsuchen mit einem Klick auf das Bookmarklet in die Lesezeichen Ihres Kanals übernehmen. diff --git a/doc/de/member/calendar.md b/doc/de/member/calendar.md new file mode 100644 index 000000000..5a15747f3 --- /dev/null +++ b/doc/de/member/calendar.md @@ -0,0 +1,27 @@ +### Kalender + +Mit der App "Kalender" kann man seine Termine verwalten. + +Nach Aufruf der App erscheint eine Kalender-Übersicht (ein Monat). + + + +Durch Klicken auf einen Tag können Sie ein Ereignis erzeugen. In der Eingabemaske (verkürzte Ansicht, lässt sich durch Klicken auf "mehr" erweitern) kann man nun die wesentlichen Inhalte eingeben. + + + + + + + +Für diese Einträge können Sie ebenfalls wieder detaillierte [Berechtigungen](/help/de/member/permissions_content.md) festlegen, so dass man private Termine und öffentliche / gemeinsame Termine in ein und demselben Kalender erfassen kann. + + + +##### CalDAV-Zugang mit Android + +Sie können Ihren Kalender auf Android mit Ihrem Hub synchronisieren. + +Verwenden Sie "URL" und "Benutzername" zur Anmeldung. Die Basis-URL ist `<URL-Ihres-Hubs>/cdav`, der Benutzername ist Ihr Kanalname (ohne führendes"@" und ohne Hub-Adresse "`@<Ihr-Hub>`"). + +Um Ihren Kalender zu teilen, besuchen Sie `<URL-Ihres-Hubs>/cdav/calendar`. diff --git a/doc/de/member/channel_locations.md b/doc/de/member/channel_locations.md new file mode 100644 index 000000000..93b5ab871 --- /dev/null +++ b/doc/de/member/channel_locations.md @@ -0,0 +1,7 @@ +#### Klon-Adressen verwalten + +Existieren vom aktuellen Kanal Klone auf anderen Hubs, so wird als weiterer Menüeintrag "Klon-Adressen verwalten" angezeigt. Damit können Sie festlegen, auf welchem Hub der der Hauptkanal (primärer Kanal) liegt (das legt auch den Teil des Handles hinter dem "@" fest). + +Außerdem kann man Klone an dieser Stelle löschen. Für Kanäle auf fremden Servern empfiehlt es sich allerdings, den Kanal auf dem eigentlichen Hub zu löschen. Das Löschen aus der Klon-Verwaltung sollte nur genutzt werden, wenn der Hub des Klons nicht mehr existiert. + + diff --git a/doc/de/member/channel_roles.md b/doc/de/member/channel_roles.md new file mode 100644 index 000000000..f793b7c4e --- /dev/null +++ b/doc/de/member/channel_roles.md @@ -0,0 +1,41 @@ +### Kanalrollen + +Wenn Sie einen neuen Kanal erstellen, werden Sie aufgefordert, eine Berechtigungsrolle auszuwählen, je nachdem, wie Sie diesen Kanal nutzen möchten. Die beliebtesten Berechtigungsrollen sind die Rollen für soziale Netzwerke. Sie haben viele weitere Auswahlmöglichkeiten, die mit Facebook-Gruppen und -Seiten, kollaborativen Bereichen, Newsfeeds und mehr vergleichbar sind. Diese Rollen konfigurieren automatisch verschiedene Systemvariablen, von den Berechtigungen, die Freunden gewährt werden, bis hin zu den Standardeinstellungen für Privatsphäre und Sichtbarkeit. Es stehen erweiterte Konfigurationen zur Verfügung, mit denen Sie jeden dieser Parameter an Ihre Bedürfnisse anpassen können, aber wir haben die Erfahrung gemacht, dass die meisten Nutzer es vorziehen, die Einstellungen vorzunehmen und sie zu vergessen. Im Folgenden werden einige der verschiedenen Rollen beschrieben, die derzeit verfügbar sind, und wie sie sich auf Ihre Privatsphäre und Ihre Interaktionsmöglichkeiten auswirken. + +**Es gibt vier Kanal-Rollen:** + +- Öffentlich +- Persönlich +- Community Forum +- Benutzerdefiniert + +#### Öffentlich + +Der Kanal ist ein sehr freizügiges soziales Netzwerkprofil, das mit anderen föderierten sozialen Netzwerken kompatibel ist. Die Privatsphäre hat eine geringere Priorität als der einfache Zugang und die Verbindung mit anderen. Jeder im Netzwerk kann Ihre öffentlichen Beiträge kommentieren und Ihnen private Nachrichten schicken. Standardmäßig sind Beiträge und veröffentlichte Artikel öffentlich, aber Sie können dies bei der Erstellung des Artikels überschreiben und einschränken. Sie sind im Verzeichnis aufgeführt. Ihre Online-Präsenz und Ihre Verbindungen sind für andere sichtbar. Dieser Modus kann Ihre Anfälligkeit für unerwünschte Mitteilungen und Spam erhöhen. Der "klassische" Social-Media-Account. + +#### Persönlich + +Standardmäßig sind Beiträge und veröffentlichte Elemente öffentlich, aber Sie können dies bei der Erstellung des Elements außer Kraft setzen und einschränken. Sie sind im Verzeichnis aufgeführt. Ihre Online-Präsenz und Ihre Verbindungen sind für andere sichtbar. Nur Ihre unmittelbaren Verbindungen können Ihre öffentlichen Beiträge kommentieren und Ihnen private Nachrichten schicken. + +#### Community Forum + +Der Kanal ist ein typisches Forum. Standardmäßig sind Beiträge und veröffentlichte Artikel öffentlich. Mitglieder können Beiträge per !mention oder wall-to-wall posten. Das Einstellen von Fotos und anderen veröffentlichten Beiträgen ist gesperrt. Der Kanal ist im Verzeichnis sichtbar. Mitglieder werden automatisch hinzugefügt. + +Um als Nutzer eines Forums Medien, die zum Teil eventuell mit eingeschränkten Berechtigungen versehen sind, sehen zu können, ist es erforderlich, im eigenen Nutzer-Kanal unter Einstellungen → Privacy-Einstellungen (`<hub>/settings/privacy`) die Option "Enable OCAP access") einzuschalten. + +#### Benutzerdefiniert + +Dies ist die genaueste Einstellung für Kanal-Rechte. Alle Rechte können fein-granular festgelegt werden. Vorsicht: Wer hier die falschen Einstellungen wählt, kann seinen Kanal unbrauchbar machen. Zum Glück lassen sich die Rechte auch wieder ändern, so dass man solche Fehlfunktionen beheben kann. Es ist sinnvoll, sich bei jedem einzelnen Recht zu überlegen, welche Auswirkungen es für einen selbst, als Kanalbesitzer, aber auch für andere Nutzer hat. + +**Für jeden Regelungspunkt sind folgende Einstellungen möglich:** + +- Nur ich +- Nur die, denen Du es explizit erlaubst +- Angenommene Verbindungen +- Beliebige Verbindungen +- Jeder auf dieser Webseite +- Alle Hubzilla-Mitglieder +- Jeder authentifizierte +- Jeder im Internet + +Um die **benutzerdefinierte Rolle** zu bearbeiten, wählt man in den Einstellungen den Punkt "Privacy-Einstellungen". Rechts unten findet man den Button "Benutzerdefinierte Konfiguration der Kanal-Rolle". Klickt man darauf, erscheint ein Warn-Dialog, der auf die Risiken einer fehlerhaften Konfiguration aufmerksam macht. Bestätigt man, dass man die Rechte bearbeiten möchte, öffnet sich der Einstellungs-Dialog für die benutzerdefinierten Rollenrechte.
\ No newline at end of file diff --git a/doc/de/member/channel_settings.md b/doc/de/member/channel_settings.md new file mode 100644 index 000000000..3cb0d6f7f --- /dev/null +++ b/doc/de/member/channel_settings.md @@ -0,0 +1,15 @@ +#### Kanal-Einstellungen + +Rufen Sie die Einstellungen über den Menüeintrag auf, so werden als Standard die Kanal-Einstellungen gezeigt. Die Grundeinstellungen dienen dazu, die Eigenschaften und Funktionen des aktuell ausgewählten (genutzten) Kanals einzustellen. Neben der Kanalrolle können Sie hier auch den Standard für automatisch erstellte Verzeichnisse in der Cloud (diese werden z.B. erzeugt, wenn Sie in einem Beitrag ein Bild als Anhang hochladen) festlegen. + +Außerdem ist es möglich, den Kanal zu löschen (roter Button "Kanal löschen"). + +<u>Wichtiger Hinweis:</u> Es ist nicht ohne weiteres möglich, einen Kanal unter dem Namen des gelöschten Kanals neu auf diesem Hub zu erstellen (auch nicht durch Klonen). Das dient dem Schutz vor "Identitäts-Missbrauch". Möchte man auch wichtigen Gründen dennoch wieder einen Kanal mit diesem Namen installieren, dann kann man mit dem Admin des Hub Kontakt aufnehmen, ihm die Gründe darlegen (so dass er sicher sein kann, dass man ein berechtigtes Interesse hat) und bitten, die Sperre aufzuheben. Das kann nur er mit wenigen Handgriffen in der Datenbank tun. + +Sie können außerdem den Verfallszeitraum für importierte Inhalte anderer Kanäle festlegen und diesen Import über zwei Filter regeln. + + + +Die Benachrichtigungs-Einstellungen erlauben es, ganz genau festzulegen, ob man über bestimmte Ereignisse und Vorgänge benachrichtigt wird. Und ob die Benachrichtigung auch per E-Mail erfolgen soll. + + diff --git a/doc/de/member/channels.md b/doc/de/member/channels.md new file mode 100644 index 000000000..48f3292af --- /dev/null +++ b/doc/de/member/channels.md @@ -0,0 +1,22 @@ +### Kanäle + +Kanäle sind einfach Sammlungen von Inhalten, die an einem Ort gespeichert werden. Ein Kanal kann für alles Mögliche stehen. Er kann für Sie stehen, für eine Website, ein Forum, Fotoalben, einfach für alles. Für die meisten Menschen ist ihr erster Kanal „Ich“. + +Die wichtigsten Funktionen für einen Kanal, der „mich“ repräsentiert, sind: + +- Sichere und private „spamfreie“ Kommunikation + +- Identität und „Single-Signon“ über das gesamte Netzwerk + +- Datenschutzkontrollen und Berechtigungen, die sich auf das gesamte Netz erstrecken + +- Verzeichnisdienste (wie ein Telefonbuch) + + + +Kurz gesagt, ein Kanal, der Sie repräsentiert, ist „ich im Internet“. + +Mit einem Account bei einem Hub können mehrere verschiedene Kanäle mit jeweils individueller Konfiguration angelegt und genutzt werden. + +#include doc/de/member/create_channels.md; +#include doc/de/member/channel_roles.md; diff --git a/doc/de/member/chat_rooms.md b/doc/de/member/chat_rooms.md new file mode 100644 index 000000000..ff5757608 --- /dev/null +++ b/doc/de/member/chat_rooms.md @@ -0,0 +1,17 @@ +#### Chaträume + +Die App "Chaträume" erlaubt es, Chaträume für Instant-Messaging innerhalb eines Hubs einzurichten und mit anderen Kanälen des Hubs zu chatten. + +Ruft man die App aus dem Hamburger-Menü auf, werden die eigenen Chaträume angezeigt. + +Um einen neuen Chatraum anzulegen, kickt man auf den Button "Raum hinzufügen". + + + +Hier muss man einen Namen für den Taum vergeben und man kann wählen, nach wie viel Minuten die Chatinhalte verfallen. Außerdem ist es möglich, über das [Privacy-Tool](/help/de/member/permissions_content.md) (🔒) festzulegen, wer berechtigt ist, den Chatraum zu sehen und zu nutzen. + +Die URL zum Chatraum wird im Browser angezeigt und ist auch über den Verweis auf den Chatraum in der linken Seitenleiste verfügbar. Nun kann man einem anderen Nutzer des eigenen Hubs die URL mitteilen und einen Chat mit diesem beginnen. + + + + diff --git a/doc/de/member/clone.md b/doc/de/member/clone.md new file mode 100644 index 000000000..50db62f8a --- /dev/null +++ b/doc/de/member/clone.md @@ -0,0 +1,53 @@ +### Klonen + +Hubzilla-Kanäle verfügen über eine sogenannten "nomadische Identität". Das ist eine Spezialität des Nomad-Protokolls, auf welchem Hubzilla basiert und mit welchem Hubzilla-Hubs untereinander kommunizieren. + +Durch die nomadische Identität ist es möglich, Klone des eigenen Kanals zu erzeugen, was die Zensur- und Ausfallresistenz enorm erhöht. + +Wenn Sie Ihren Kanal geklont haben, ist es kein Problem, wenn Ihr "Heimat-Hub" einmal ausfällt oder nicht korrekt funktioniert. Sie können übergangslos mit einem Kanal-Klon, welcher auf einem anderen Hub liegt, weiter am Fediverse teilnehmen. + +Sämtliche Kanal-Klone werden automatisch im Hintergrund synchronisiert. + +Um einen Klon Ihres Kanals anzulegen, benötigen sie einen Account auf einem weiteren (anderen) Hubzilla-Hub. + +Es gibt nun mehrere Möglichkeiten, auf diesem anderen Hub, einen Klon Ihres Kanals anzulegen. + +Sie können mit der App "Kanalexport" den Kanal auf Ihrem "Heimat-Hub" exportieren. + + + +Durch einen Klick auf den Button "Kanal exportieren", exportieren Sie Ihre Identität und Ihren sozialen Graph in eine Datei, welche sie herunterladen können. + +Da Dateien, Webseiten, Wikis, Kalender und Chaträume immer lokal auf den eigenen Hub (also den jeweiligen Server) beschränkt sind, können sie mit der App "Kanalexport" auch Archive dieser Daten lokal herunterladen. + +Loggen Sie sich nun auf dem neuen Hub ein und wählen Sie entweder im Hauptmenü (Ihr Profilbild; links oben) den Menüpunkt "Kanäle" und auf der erscheinenden Kanalauswahl-Seite den Button "+ Neu anlegen" oder rufen Sie direkt die Kanalerstellungs-Seite unter `<URL-Ihres-Hubs>/new_channel` auf. + + + + + +Auf dieser Seite geben Sie nun aber keine Informationen für das Erstellen eines neuen Kanals ein, sondern wählen am unteren Ende des Dialogs den Link "importiere einen bestehenden Kanal von einem anderen Server". + + + +Nun öffnet sich der Dialog für den Kanal-Import. + + + +Mit dem Button "Hochzuladende Datei: Durchsuchen..." öffnen Sie einen Dateidialog, mit welchem Sie die zuvor gespeicherte Kanal-Datei auswählen können. + +Alternativ zu dieser Methode können Sie Ihren Kanal auch direkt von der Quelle, also dem Ursprungs-Hub klonen. Dafür müssen Sie im Kanal-Import-Dialog das Handle des zu klonenden Kanals, die Mailadresse für den Login beim Ursprungs-Hub, sowie das dazugehörige Passwort angeben. Zusätzlich können sie per Schalter auswählen, ob Dateien und Objekte des Ursprungs-Hubs mit importiert werden sollen (sofern Ihr neuer Hub das zulässt und das Speicherlimit ausreicht). + +Im Dialog können Sie außerdem noch festlegen, ob der neue Hub Ihr "primärer Hub sein soll". Das bedeutet, dass der neue Kanal (also der nun anzulegende) Ihr primärer Kanal wird. Das hat Auswirkungen auf das Handle Ihres Kanals, welches damit künftig mit der URL des neuen Hubs endet. + +In der Regel, sofern man nicht komplett auf einen anderen Hub umziehen möchte, lässt man den Schalter bei "Nein" und der Primäre Hub bleibt derjenige, der es aktuell ist (das Handle bleibt unverändert). + +Sollten Sie eine veränderte Kanalbezeichnung (Kurzname) wünschen, können Sie diese in einem weiteren Eingabefeld eingeben. Lassen Sie das Feld leer, bleibt der Kanal-Kurzname unverändert. + +*<u>Hinweis:</u> Sollte der Kanal-Kurzname auf dem neuen Hub bereits vergeben sein (oder gesperrt, weil ein gleichlautender Kanal dort bereits existierte, aber wieder gelöscht wurde), wird der Kurzname vom System automatisch modifiziert.* + +Schließlich klicken Sie auf "Absenden" und verlassen Sie die Seite NICHT, bis der Import abgeschlossen ist. Dies kann, je nach Umfang des Ursprungskanals einige Zeit in Anspruch nehmen. + +Über Einstellungen → Klon-Adressen verwalten können Sie jederzeit Ihre Klone verwalten. Sie können festlegen, welches der "primäre Hub" ist und Sie können Klone löschen, wobei empfohlen wird, geklonte Kanäle besser direkt auf dem jeweiligen Hub zu löschen. + + diff --git a/doc/de/member/cloud_storage.md b/doc/de/member/cloud_storage.md new file mode 100644 index 000000000..02914d1dd --- /dev/null +++ b/doc/de/member/cloud_storage.md @@ -0,0 +1,10 @@ +#### Cloudspeicher + +Ihre Dateien sind im Internet unter der Adresse `<URL-Ihres-Hubs>/cloud/<Ihr-Kanalname>` für jeden sichtbar, der sie einsehen darf. Wenn der Betrachter über ausreichende Berechtigungen verfügt, kann er auch neue Dateien und Ordner/Verzeichnisse erstellen. Diese Möglichkeit sollte nur für kleinere Dateien und Fotos (bis zu einigen Megabyte) genutzt werden, da sie den internen Speicher beansprucht. Größere Dateien (Videos, Musik usw.) laden Sie bitte mit WebDAV hoch. Diese Dateien können weiterhin über den Web-Zugang abgerufen werden. + +Mit WebDAV können Sie Dateien direkt in das Betriebssystem Ihres Computers oder aus diesem heraus kopieren, wobei Ihre Cloud-Dateien wie ein virtuelles Laufwerk erscheinen. Dies sollte zum Hochladen großer Dateien wie Video- und Audiodateien verwendet werden. + +Die URL für das Cloud-Verzeichnis lautet `<URL-Ihres-Hubs>/dav/<kanalname>`. + +Sollte, je nach Einbindung des DAV-Dateisystems (abhängig vom verwendeten Betriebssystem und ggf. der Anwendung) die Angabe eine Benutzernamens erforderlich sein, so ist dies der Kanal-Kurzname (also ohne führendes "@" und ohne folgende "@Hub-Adresse"). Ein eventuell erforderliches Passwort entspricht Ihrem Login-Passwort. + diff --git a/doc/de/member/comanche.md b/doc/de/member/comanche.md new file mode 100644 index 000000000..8e449e939 --- /dev/null +++ b/doc/de/member/comanche.md @@ -0,0 +1,278 @@ +### Comanche Seitenbeschreibungssprache + +Comanche ist eine bbCode-ähnliche Auszeichnungssprache, mit der aufwendige und komplexe Webseiten erstellt werden können, indem sie aus einer Reihe von Komponenten zusammengesetzt werden, von denen einige vorgefertigt sind und andere spontan definiert werden können. Comanche verwendet eine Seitenbeschreibungssprache, um diese Seiten zu erstellen. + + +Comanche wählt in erster Linie aus, welche Inhalte in den verschiedenen Bereichen der Seite erscheinen sollen. Die verschiedenen Bereiche haben Namen, und diese Namen können sich je nach gewählter Layoutvorlage ändern. + +#### Seitenvorlagen + +Derzeit gibt es fünf Layout-Vorlagen, es sei denn, Ihre Website bietet zusätzliche Layouts. + + +**Standardvorlage** + +Die Standardvorlage definiert einen "nav"-Bereich am oberen Rand, "aside" als Seitenleiste mit fester Breite, "content" für den Hauptinhaltsbereich und "footer" für einen Seitenfuß. + + +**Vollständig** + +Die vollständige Vorlage entspricht der Standardvorlage mit der Ausnahme, dass es keinen "aside"-Bereich gibt. + +**Choklet** + +Die Choklet-Vorlage bietet eine Reihe von fließenden Layoutstilen, die nach Geschmack festgelegt werden können: + +- (default flavour) - ein zweispaltiges Layout, das der "default"-Vorlage ähnelt, aber flexibler ist +- bannertwo - ein zweispaltiges Layout mit einem Bannerbereich, kompatibel mit der "default"-Vorlage auf kleinen Displays +- three - dreispaltiges Layout (ergänzt die Standardvorlage um einen "right_aside"-Bereich) +- edgestwo - zweispaltiges Layout mit festen Seitenrändern +- edgesthree - dreispaltiges Layout mit festen Seitenrändern +- full - dreispaltiges Layout mit festen Seitenrändern und Hinzufügen eines "Header"-Bereichs unter der Navigationsleiste + + +**Redable** + +Eine Vorlage zum Lesen längerer Texte im Vollbildmodus (also ohne Navigationsleiste). Drei Spalten: aside, content und right_aside. + +Für maximale Lesbarkeit ist es ratsam, nur die mittlere Inhaltsspalte zu verwenden. + + +**Zen** + +Gibt Ihnen die Freiheit, alles selbst zu machen. Nur eine leere Seite mit einem Inhaltsbereich. + + +Um eine Layout-Vorlage auszuwählen, verwenden Sie den Tag 'template'. + +``` +[template]full[/template] +``` + +So wählen Sie die Vorlage "choklet" mit der Geschmacksrichtung "three": + +``` +[template=three]choklet[/template] +``` + + +Die Standardvorlage wird verwendet, wenn keine andere Vorlage angegeben wird. Die Vorlage kann beliebige Namen für die Inhaltsbereiche verwenden. Sie werden "region"-Tags verwenden, um zu entscheiden, welche Inhalte in den jeweiligen Regionen platziert werden sollen. + +Es wurden drei "Makros" für Ihre Verwendung definiert. + +``` +$htmlhead - replaced with the site head content. +$nav - replaced with the site navigation bar content. +$content - replaced with the main page content. +``` + +Standardmäßig wird `$nav` in den Seitenbereich "nav" und `$content` in den Bereich "content" eingefügt. Sie brauchen diese Makros nur zu verwenden, wenn Sie die Reihenfolge der Elemente ändern oder sie in andere Bereiche verschieben möchten. + + +Um ein Thema für Ihre Seite auszuwählen, verwenden Sie den Tag "theme". + +``` +[theme]suckerberg[/theme] +``` + +Dadurch wird das Thema "suckerberg" ausgewählt. Standardmäßig wird das von Ihrem Kanal bevorzugte Thema verwendet. + +``` +[theme=passion]suckerberg[/theme] +``` + +Dadurch wird das Thema mit dem Namen "suckerberg" ausgewählt und das Schema "passion" (Themenvariante) gewählt. Alternativ ist es auch möglich, eine komprimierte Themennotation zu verwenden. + +``` +[theme]suckerberg:passion[/theme] +``` + +Die komprimierte Notation ist nicht Teil von Comanche selbst, wird aber von der Hubzilla-Plattform als Themenspezifizierer erkannt. + + +**Navbar** + +``` +[navbar]tucson[/navbar] +``` + +Verwenden Sie die Vorlage "tucson" für die Navigationsleiste und die CSS-Regeln. Standardmäßig wird die Vorlage "default" für die Navigationsleiste verwendet. + + +**Regions** + +Jede Region hat, wie oben erwähnt, einen Namen. Sie spezifizieren die Region, die Sie interessiert, mit einem "region"-Tag, der den Namen enthält. Alle Inhalte, die Sie in diesem Bereich platzieren möchten, sollten zwischen dem öffnenden Region-Tag und dem schließenden Tag platziert werden. + +``` +[region=htmlhead]....content goes here....[/region] +[region=aside]....content goes here....[/region] +[region=nav]....content goes here....[/region] +[region=content]....content goes here....[/region] +``` + + +**CSS und Javascript** + +Wir haben die Möglichkeit, Javascript- und CSS-Bibliotheken in den htmlhead-Bereich einzubinden. Zurzeit verwenden wir jquery (js), bootstrap (css/js) und foundation (css/js). + +Dies überschreibt den htmlhead des ausgewählten Themas. + +``` +[region=htmlhead] + [css]bootstrap[/css] + [js]jquery[/js] + [js]bootstrap[/js] +[/region] +``` + + +**Menüs und Blöcke** + +Mit den Werkzeugen zur Erstellung von Webseiten können Sie neben dem Seiteninhalt auch Menüs und Blöcke erstellen. Diese bieten einen Teil des vorhandenen Inhalts, der in den von Ihnen festgelegten Bereichen und in der von Ihnen festgelegten Reihenfolge platziert werden kann. Jedes dieser Elemente hat einen Namen, den Sie bei der Erstellung des Menüs oder Blocks festlegen. + +``` +[menu]mymenu[/menu] +``` + +Dadurch wird das Menü "mymenu" an dieser Stelle auf der Seite platziert, die sich innerhalb eines Bereichs befinden muss. + +``` +[menu=horizontal]mymenu[/menu] +``` + +Dadurch wird das Menü mit dem Namen "mymenu" an dieser Stelle auf der Seite platziert, die sich innerhalb eines Bereichs befinden muss. Außerdem wird dem Menü die Klasse "horizontal" zugewiesen. Die Klasse "horizontal" ist im redbasic-Theme definiert. Sie kann in anderen Themes verfügbar sein, muss es aber nicht. + +``` +[menu][var=wrap]none[/var]mymenu[/menu] +``` + +Die Variable `[var=wrap]none[/var]` in einem Block entfernt das umschließende div-Element aus dem Menü. + +``` +[block]contributors[/block] +``` + +Dadurch wird ein Block mit dem Namen "contributors" in dieser Region platziert. + +``` +[block=someclass]contributors[/block] +``` + +Dadurch wird ein Block mit dem Namen "contributors" in dieser Region platziert. Zusätzlich wird die Klasse "someclass" auf den Block angewendet. Dies ersetzt die Standard-Blockklassen "bblock widget". + +``` +[block][var=wrap]none[/var]contributors[/block] +``` + +Die Variable `[var=wrap]none[/var]` in einem Block entfernt das umschließende div-Element aus dem Block. + + +**Widgets** + +Widgets sind ausführbare Anwendungen, die vom System bereitgestellt werden und die Sie auf Ihrer Seite platzieren können. Einige Widgets benötigen Argumente, mit denen Sie das Widget an Ihren Zweck anpassen können. System-Widgets sind hier aufgelistet. Widgets können auch von Plugins, Themes oder Ihrem Website-Administrator erstellt werden, um zusätzliche Funktionen bereitzustellen. + +Widgets und Argumente werden mit den Tags "widget" und "var" angegeben. + +``` +[widget=recent_visitors][var=count]24[/var][/widget] +``` + +Damit wird das Widget "recent_visitors" geladen und mit dem Argument "count" auf "24" gesetzt. + + +**Kommentare** + +Das Tag "comment" wird zur Abgrenzung von Kommentaren verwendet. Diese Kommentare werden auf der gerenderten Seite nicht angezeigt. + +``` +[comment]This is a comment[/comment] +``` + + +**Bedingte Ausführung** + +Sie können ein 'if'-Konstrukt verwenden, um Entscheidungen zu treffen. Diese basieren derzeit auf der Systemkonfigurationsvariable oder dem aktuellen Beobachter. + +``` +[if $config.system.foo] + ... the configuration variable system.foo evaluates to 'true'. +[else] + ... the configuration variable system.foo evaluates to 'false'. +[/if] + +[if $observer] + ... this content will only be show to authenticated viewers +[/if] +``` + +Die 'else'-Klausel ist optional. + +Neben der booleschen Auswertung werden mehrere Tests unterstützt. + +``` +[if $config.system.foo == bar] + ... the configuration variable system.foo is equal to the string 'bar' +[/if] +[if $config.system.foo != bar] + ... the configuration variable system.foo is not equal to the string 'bar' +[/if] +[if $config.system.foo {} bar ] + ... the configuration variable system.foo is a simple array containing a value 'bar' +[/if] +[if $config.system.foo {*} bar] + ... the configuration variable system.foo is a simple array containing a key named 'bar' +[/if] +``` + + +**Komplexes Beispiel** + +``` +[comment]use an existing page template which provides a banner region plus 3 columns beneath it[/comment] + +[template]3-column-with-header[/template] + +[comment]Use the "darknight" theme[/comment] + +[theme]darkknight[/theme] + +[comment]Use the existing site navigation menu[/comment] + +[region=nav]$nav[/region] + +[region=side] + + [comment]Use my chosen menu and a couple of widgets[/comment] + + [menu]myfavouritemenu[/menu] + + [widget=recent_visitors] + [var=count]24[/var] + [var=names_only]1[/var] + [/widget] + + [widget=tagcloud][/widget] + [block]donate[/block] + +[/region] + + + +[region=middle] + + [comment]Show the normal page content[/comment] + + $content + +[/region] + + + +[region=right] + + [comment]Show my condensed channel "wall" feed and allow interaction if the observer is allowed to interact[/comment] + + [widget]channel[/widget] + +[/region] +```
\ No newline at end of file diff --git a/doc/de/member/commenting.md b/doc/de/member/commenting.md new file mode 100644 index 000000000..74c80c954 --- /dev/null +++ b/doc/de/member/commenting.md @@ -0,0 +1,9 @@ +### Kommentieren + +Möchte man einen Beitrag kommentieren, also auf diesen antworten, klickt man in das Feld am unteren Rand des Beitrag ("Kommentar"). Es öffnet sich an dieser Stelle der Kommentar-Editor, welcher dem Beitrags-Editor ähnelt. Es gibt hier aber keine Felder für einen Titel, eine Zusammenfassung und Kategorien. Unter dem Eingabe-Feld für den Inhalt des Kommentars befinden sich wiederum Schaltflächen für bestimmte Formatierungen (nicht alle, die es im Beitrags-Editor gibt, weil nicht alles in einem Kommentar möglich ist) und rechts wieder eine Schaltfläche für eine Vorschau, sowie einen Button "Absenden", um den Kommentar zu veröffentlichen. + + + +Auch im Feld für den Kommentar-Inhalt kann man den Text mit Markdown, bbCode und HTML auszeichnen. + +Da es kein Feld für eine Zusammenfassung gibt, ist es nicht möglich, diese für eine Inhaltswarnung bezüglich des Kommentars zu verwenden. Man kann das aber durch bbCode erreichen, indem man die Inhaltswarnung in `[summary][/summary]` einschießt. Dadurch wird der gesamte nachfolgende Inhalt zunächst verborgen und kann per Klick angezeigt werden. diff --git a/doc/de/member/connecting_with_channels.md b/doc/de/member/connecting_with_channels.md new file mode 100644 index 000000000..1e98977b9 --- /dev/null +++ b/doc/de/member/connecting_with_channels.md @@ -0,0 +1,33 @@ +### Verbinden mit Kanälen + +Verbindungen in Hubzilla können sehr viele verschiedene Bedeutungen haben. Eine Verbindung ist genauer definiert als eine Reihe von Berechtigungen, die Sie einer anderen Person erteilt haben. In herkömmlichen sozialen Netzwerken erhalten alle Verbindungen die gleichen Berechtigungen oder höchstens zwei Stufen (Freunde und „Follower“). In Hubzilla kann eine Reihe von separaten Berechtigungen festgelegt/angepasst werden, abhängig von der Situation und der Beziehung, die Sie mit dem anderen Kanal haben. Sie können jemandem erlauben, Ihre Beiträge zu sehen, aber nicht Ihre Fotos. Sie können ihnen auch die Erlaubnis verweigern, Ihre Beiträge zu kommentieren oder private Nachrichten an Sie zu senden. Aber machen wir es uns einfach: Sie wollen mit jemandem befreundet sein, den Sie aus sozialen Netzwerken kennen. Wie machen Sie das? + +Sie können sich das Verzeichnis ansehen. Das Verzeichnis ist auf allen Hubzilla-Websites verfügbar, d. h., wenn Sie von Ihrer eigenen Seite aus suchen, erhalten Sie Ergebnisse aus dem gesamten Netzwerk. Sie können nach Name, Interesse, Standort und Schlüsselwort suchen. + +Wenn Sie das „Handle“ von jemandem bereits kennen, können Sie direkt mit ihm in Verbindung treten. Ein Handle sieht genauso aus wie eine E-Mail-Adresse (z. B. `bob@example.com`), verweist aber auf eine Person im offenen sozialen Netz. Um eine Verbindung herstellen zu können, muss ein kompatibles Netzwerkprotokoll verwendet werden. Standardmäßig unterstützt diese Software das Nomad-Protokoll, weitere Protokolle können jedoch über Plugins/Addons bereitgestellt werden. Weitere Informationen zur Verbindung mit Kanälen in anderen Netzwerken finden Sie weiter unten. + +#### So verbinden Sie sich mit anderen Hubzilla-Kanälen: + +Besuchen Sie das Profil des gewünschten Kanals, indem Sie auf ihr Foto im Verzeichnis, im Stream oder in den Kommentaren klicken, und es öffnet sich ihre Kanal-Homepage im Kanal-Betrachter. Auf der linken Seite des Bildschirms sehen Sie normalerweise einen Link mit der Bezeichnung „Verbinden“. Klicken Sie darauf, und schon sind Sie fertig. Je nach den Einstellungen des Kanals, mit dem Sie eine Verbindung herstellen möchten, müssen Sie möglicherweise warten, bis der Kanal Ihre Verbindung genehmigt hat, aber es sind keine weiteren Aktionen Ihrerseits erforderlich. Sobald Sie die Verbindung initiiert haben, werden Sie zum Verbindungseditor weitergeleitet. Hier können Sie bestimmte Berechtigungen für diesen Kanal zuweisen, wenn Sie Änderungen vornehmen möchten. + +Sie können auch eine Verbindung zu einem beliebigen Kanal herstellen, indem Sie die Seite „Verbindungen“ Ihrer Website oder des Verzeichnisses aufrufen und den „Handle“ in das Feld „Neue Verbindung hinzufügen“ eingeben. Verwenden Sie diese Methode, wenn Ihnen jemand sein Handle mitteilt und Sie sich mit ihm verbinden möchten. Der Vorgang ist derselbe wie bei der Verbindung über die Schaltfläche „Verbinden“ - Sie werden dann zum Verbindungseditor weitergeleitet, um die Berechtigungen festzulegen. + +#### So stellen Sie eine Verbindung zu Kanälen in anderen Netzwerken her: + +Das Verfahren zum Verbinden mit "Kanälen" in anderen Netzwerken (wie z.B GNU-Social, Mastodon, Misskey, Pleroma und Diaspora) ist ähnlich - geben Sie deren „Handle“ in das Feld „+Add“ auf der Seite „Verbindungen“ ein. Bevor Sie dies jedoch tun, besuchen Sie bitte die App-Verwaltung im App-Menü und vergewissern Sie sich, dass das entsprechende Protokoll (Diaspora, GNU-Social/OStatus oder ActivityPub) in Ihrem Hub bereitgestellt und **für Ihren Kanal** ***aktiviert*** ist. Diese Netzwerke/Protokolle unterstützen keine Kontomigration und Standortunabhängigkeit. Wenn Sie also den Standort wechseln oder Ihren Kanal anderswo klonen, kann die Kommunikation mit diesen Verbindungen fehlschlagen. Aus diesem Grund sind diese Protokolle nicht standardmäßig aktiviert, sondern nur mit Ihrer Zustimmung. Die Aktivierung dieser Protokolle ist eine wichtige Entscheidung zwischen der Kommunikation mit Freunden in diesen Netzwerken und der Ausfallsicherheit des Kontos, falls Ihr Server ausfällt. + +Einige Kommunikationsnetze bieten mehr als ein Protokoll an. So können Sie sich beispielsweise mit jemandem verbinden, der sowohl das „ostatus“- alsauch das „activitypub“-Protokoll für die Kommunikation verwendet. Im Allgemeinen bietet das 'activitypub'-Protokoll eine bessere Erfahrung als das 'ostatus'-Protokoll, aber Hubzilla wählt oft das erste Protokoll, das es entdeckt, und das ist vielleicht nicht das, was Sie wollen. Sie können sich mit jemandem über ein bestimmtes Protokoll verbinden, indem Sie den Protokollnamen in eckigen Klammern vor dessen „Handle“ setzen. Zum Beispiel + +`[activitypub]https://foo.bar/foobar` + +`[ostatus]foobar@foo.bar` + +`[diaspora]foobar@foo.bar` + +`[zot]foobar@foo.bar` + +`[feed]https://foo.bar/foobar` + +#### So verbinden Sie sich mit RSS-Feeds: + +Ihr Hub-Administrator kann die Verbindung mit RSS-Feeds erlauben. Das Verfahren für die Verbindung mit einem RSS-Feed ist dasselbe, außer dass Sie die URL des Feeds in das Feld „Neue Verbindung hinzufügen“ eingeben (oder einfügen). Die Möglichkeiten können durch den Administrator Ihres Hubs eingeschränkt sein, weil Verbindungen mit Feeds teilweise für hohe Systemlast sorgen.
\ No newline at end of file diff --git a/doc/de/member/connection_editor.md b/doc/de/member/connection_editor.md new file mode 100644 index 000000000..c96f5e9b3 --- /dev/null +++ b/doc/de/member/connection_editor.md @@ -0,0 +1,32 @@ +#### Verbindungs-Editor + +Klicken Sie in der App "Verbindungen" auf den Button "Bearbeiten" an einem Kontakt, öffnet sich der Verbindungs-Editor. + +Mit dem Editor können Sie einem Kontakt eine bestimmte Kontaktrolle zuweisen. Bei Bedarf können Sie sich über den Button "Contact Roles" die vorhandenen Rollen anzeigen lassen und auch neue Rollen erstellen. Ein weiterer Button (Berechtigungen vergleichen) können Sie die zugewiesenen Berechtigungen mit denen der Standard-Berechtigungsrolle vergleichen. + + + +Mit dem Tab "Privacy Gruppen" können Sie einen Kontakt einer oder mehreren Privacy-Gruppen zuordnen. + + + +Über den Tab "Profile" können Sie festlegen, welches Ihrer Profile (sofern Sie mehrere angelegt haben) dem Kontakt angezeigt wird. + + + +Mit den Inhaltsfiltern ist es Ihnen möglich, Beiträge eines Kontakts mit bestimmten Inhalten herauszufiltern bzw. über Filter festzulegen, dass nur Beiträge mit definierten Inhalten im Stream landen. + + + +Mit den Kontakt-Tools können sie den Kontakt + +- blockieren, +- ignorieren, +- archivieren, +- verstecken + +oder + +- löschen. + + diff --git a/doc/de/member/connections.md b/doc/de/member/connections.md new file mode 100644 index 000000000..7d03bfd48 --- /dev/null +++ b/doc/de/member/connections.md @@ -0,0 +1,24 @@ +### Verbindungen + +Mit der App "Verbindungen" können Sie sich alle Ihre Verbindungen anzeigen lassen. + + + +In der Übersicht kann man für jede Verbindung + +- den Kanalnamen +- das Datum der Verbindung +- die Kanaladresse (Handle) +- das Netzwerk des Kontakts (ActivityPub, Zot (Nomad), RSS, Diaspora...) + - man kann sich über einen daneben stehenden Filter die kürzlichen Aktivitäten des Kanals im Stream anzeigen lassen +- das Profilbild +- und durch einen farbigen Punkt (Ampelfarben) die vom Kontakt eingeräumten Rechte (lassen Sie den Mauszeiger über dem farbigen Punkt ruhen, werden Ihnen die eingeräumten Rechte angezeigt) + +sehen. + +Außerdem ist wird ein Label angezeigt, welches den Typ der Verbindung anzeigt oder warnt, dass (bei Klonen) an diesem Ort noch keine Verbindung besteht. + +Rechts befindet sich an jedem Kontakteintrag ein Button "Bearbeiten", mit welchem man die Verbindung mittels Verbindungs-Editor bearbeiten kann. + +#include doc/de/member/connection_editor.md; +#include doc/de/member/diaspora_compat.md; diff --git a/doc/de/member/content_filters.md b/doc/de/member/content_filters.md new file mode 100644 index 000000000..0e44b63ae --- /dev/null +++ b/doc/de/member/content_filters.md @@ -0,0 +1,141 @@ +### Inhaltsfilter + +Mit dem Inhaltsfilter können Sie eingehende Inhalte aus allen Quellen oder von bestimmten Verbindungen filtern. Die Filterung kann auf Wörtern, Tags, regulären Ausdrücken oder Sprache basieren. + +In den Stream-Einstellungen können Sie globale Filter für alle eingehenden Inhalte festlegen. + + + +Sie können auch individuelle Filter für jede Ihrer Verbindungen festlegen. Wählen Sie „Bearbeiten“ für eine beliebige Verbindung und suchen Sie dann unter „Filter für den Inhalt“. + + + +Wenn Sie Filter unter **„Beiträge mit diesem Text nicht importieren**“ („Filterung ablehnen“) hinzufügen, werden diese zuerst angewendet. Alle übereinstimmenden Inhalte werden entfernt. + +Anschließend werden alle Filter unter **„Nur Beiträge mit diesem Text importieren“** („Filterung akzeptieren“) angewendet. Nur übereinstimmende Inhalte werden beibehalten und alles, was nicht übereinstimmt, wird entfernt. + +Im Allgemeinen werden Sie den einen oder den anderen verwenden und selten, wenn überhaupt, beide gleichzeitig. + + + +#### Grundlegende Filter + +**TEXT** + +Jeder Text, der nicht **mit einem der folgenden Zeichen beginnt**: '#', '$', '?', '/', '@', 'lang=', 'lang!=' führt eine Textübereinstimmung durch, bei der die Groß-/Kleinschreibung nicht berücksichtigt wird. + +Beispiel: `apple` (stimmt mit "apple", "APPLE", "Apples", "pineapple", "applesauce", etc. überein) + +Beispiel: `low sub` (stimmt mit "low sub", "low sub-zero", "Yellow Submarine", etc. überein) + +HINWEIS: Achten Sie darauf, keine kurzen Zeichenfolgen zu verwenden, die mit vielen unterschiedlichen Wörtern übereinstimmen. Sie können Reguläre Ausdrücke verwenden (siehe unten). + + + +**SPRACHE** + +**lang=** Übereinstimmung der Sprache (sofern diese identifiziert werden kann) Beispiel: `lang=de` (stimmt mit deutschsprachigen Inhalten überein) + +**lang!=** Alles außer dieser Sprache (sofern diese identifiziert werden kann) Beispiel: `lang!=en` (stimmt mit nicht-englischen Inhalten überein) + + + +**HASHTAG** + +**#** + +Hashtag abgleichen + +Beispiel: `#cats` + +**#>n** + +Größer als die Gesamtzahl der Hashtags abgleichen + +Beispiel: `#>10` + + + +**ERWÄHNUNG** + +**@** +Erwähnung stimmt überein +Beispiel: `@alice` + +**@>n** +Größer als die Gesamtzahl der Erwähnungen +Beispiel: `@>10` + + + +**KATEGORIE** + +**$** +Übereinstimmung der Kategorie +Beispiel: `$Science` + + + +**ITEMS UND FELDER** + +**?** +Nachstehend unter „**Erweiterte Filter“** erläutert + + + +**REGULÄRE AUSDRÜCKE (REGEX)** + +**/** +Übereinstimmung einer "regular expression". Zahlreiche Online-Hilfeseiten wie [Regular-Expressions.info](https://www.regular-expressions.info/) und [regexr.com](https://regexr.com/) bieten Unterstützung bei der Verwendung von regulären Ausdrücken. + +Beispiel: `/gr[ae]y/` (entspricht "gray" and "grey") +Beipiel: `/\b[Ww]ar\b/` (entspricht dem gesamten Worten "war" und "War", jedoch nicht "wars", "warning", "software", etc.) + + + +#### Erweiterte Filter + +**ITEMS** + +**?** +Sie können eine Zeichenketten-/Zahlen-/Array-/Boolesche-Abgleichung für die Datenbankfelder eines Elements (eines Beitrags, eines Kommentars usw.) durchführen. Eine vollständige Auflistung würde den Rahmen dieses Dokuments sprengen, aber sehen Sie sich `install/schema_mysql.sql` an und suchen Sie nach `CREATE TABLE IF NOT EXISTS `item``. Hier ist ein paar Beispiele: + +- `body` (Inhalt der Nachricht) +- `verb` (in der Regel identisch mit dem ActivityPub-Aktivitätstyp, z. B. Create, Listen) +- `obj_type` (normalerweise dasselbe wie das ActivityPub-Objekt „object.type“, z. B. Note, Event) +- `item_thread_top` (erster Beitrag in einem Thread, boolean) +- `item_private` (0 = öffentliche Nachricht, 1 = eingeschränkte Nachricht, 2 = Direktnachricht) +- `ua` (Benutzeragenten-Zeichenfolge des Zustellungsagenten – benutzerdefiniertes Artikelattribut, das nicht in der Datenbank enthalten ist) +- ...etc... + +Verfügbare Vergleichsoperatoren sind: + +- `?foo ~= baz` -- item.foo enthält den String 'baz' +- `?foo == baz` -- item.foo ist der String 'baz' +- `?foo != baz` -- item.foo ist nicht der String 'baz' +- `?foo // regex` -- item.foo erfüllt die regular expression 'regex' - automatisch in Schrägstriche eingeschlossen, es sei denn, Sie schließen es mit einem anderen Zeichen ein, z. B. '=regex='. +- `?foo >= 3` -- item.foo ist größer oder gleich 3 +- `?foo > 3` -- item.foo ist größer 3 +- `?foo <= 3` -- item.foo ist kleiner oder gleich 3 +- `?foo < 3` -- item.foo ist kleiner 3 +- `?foo {} baz` -- 'baz' ist ein Array-Element in item.foo +- `?foo {*} baz` -- 'baz' ist ein Array-Schlüssel in item.foo +- `?foo` -- wahre Bedingung für item.foo +- `?!foo` -- falsche Bedingung für item.foo (Die Werte 0, '', ein leeres Array, und ein ungesetzter Wert werden alle zu falsch aufgelöst) + +Beispiel: `?verb == Announce` (entspricht ActivityPub "boosts") + + + +**FELDER** + +**?+** +Übereinstimmung von ActivityPub/ActivityStreams-Objekten. Dies ist buchstäblich das kopierte Objektattribut aus der eingehenden Aktivität. + +Unterstützt alle oben aufgeführten Operatoren. + +Beispiele: + +`?+type == Question` -- entspricht ActivityPub Umfragen + +`?+attributedTo ~= spammer` -- entspricht ActivityPub attributedTo: https://o3r56t3c.example.com/u/cryptospammer2355 diff --git a/doc/de/member/conversation_features.md b/doc/de/member/conversation_features.md new file mode 100644 index 000000000..86dff8b3d --- /dev/null +++ b/doc/de/member/conversation_features.md @@ -0,0 +1,9 @@ +#### Konversationsmerkmale + +Über diesen Dialog ist es möglich, bestimmte Konversationsmerkmale für einen Beitrag festzulegen: + +- Zulassen von Emoji-Reaktionen +- Zulassen von Dislikes +- Zulassen des lokalen Markierens (Sternchen) +- Zulassen von Antworten auf Kommentare + diff --git a/doc/de/member/create_channels.md b/doc/de/member/create_channels.md new file mode 100644 index 000000000..47cdbe6d6 --- /dev/null +++ b/doc/de/member/create_channels.md @@ -0,0 +1,9 @@ +### Kanäle erstellen + +Nachdem Sie Ihr Konto erstellt haben, wird Ihnen der Bildschirm „Kanal hinzufügen“ angezeigt. Normalerweise wird Ihr erster Kanal einer sein, der Sie repräsentiert - es ist also eine gute Idee, Ihren eigenen Namen (oder ein Pseudonym) als Kanalnamen zu verwenden. Der Kanalname sollte als Titel oder kurze Beschreibung deines Kanals betrachtet werden. Das Feld „Wählen Sie einen kurzen Spitznamen“ ist vergleichbar mit einem „Benutzernamen“. Mit dem, was Sie hier eingeben, erstellen Sie eine Kanaladresse (im Fediverse auch als "Handle" bezeichnet), mit der sich andere Personen mit Ihnen verbinden können und mit der Sie sich auf anderen Websites anmelden können. Diese Adresse sieht aus wie eine E-Mail-Adresse und hat die Form `<nickname>@<ihr_hub>`. + +**Hinweis**: ***Bei anderen Diensten im Fediverse wird dem Handle ein "@" vorangestellt. Bei Hubzilla muss dieses Zeichen weggelassen werden, wenn man sich z.B. mit einem anderen Nutzer verbinden oder nach einem Handle suchen möchte.*** + +Sie können weitere Kanäle über den Link „Kanalmanager“ erstellen. + +Sobald Sie dies getan haben, ist Ihr Kanal einsatzbereit. Unter `<ihr_hub>/channel/<Nickname>` finden Sie Ihren Kanal „Stream“. Hier werden Ihre jüngsten Aktivitäten in umgekehrter chronologischer Reihenfolge angezeigt.
\ No newline at end of file diff --git a/doc/de/member/delete.md b/doc/de/member/delete.md new file mode 100644 index 000000000..2700cee7a --- /dev/null +++ b/doc/de/member/delete.md @@ -0,0 +1,3 @@ +#### Löschen + +Mit dieser Funktion kann man Beiträge aus dem Stream löschen. Ein normaler Nutzer hat diese Möglichkeit nicht beim globalen Stream. In diesem kann nur ein Administrator Beiträge entfernen.
\ No newline at end of file diff --git a/doc/de/member/delete_account.md b/doc/de/member/delete_account.md new file mode 100644 index 000000000..7e9c44e8a --- /dev/null +++ b/doc/de/member/delete_account.md @@ -0,0 +1,8 @@ +### Account löschen + +Möchten Sie Ihren Account, also den gesamten Zugang zum Hub, löschen, nutzen Sie die Einstellungen im Hauptmenü (oben links; Pofilbild): Einstellungen → Konto-Einstellungen. + +Dort befindet sich ganz oben ein Button mit der Beschriftung "Konto entfernen". Ein Klick darauf und Ihr Account (Konto) wird, nach Eingabe Ihres Account-Passworts (zur Absicherung) inklusive aller Inhalte gelöscht. + + + diff --git a/doc/de/member/deleting_channel.md b/doc/de/member/deleting_channel.md new file mode 100644 index 000000000..4fe3aaf39 --- /dev/null +++ b/doc/de/member/deleting_channel.md @@ -0,0 +1,9 @@ +### Kanal löschen + +Möchten Sie Ihren Kanal löschen, nutzen Sie die Einstellungen im Hauptmenü (oben links; Pofilbild): Einstellungen → Kanal-Einstellungen. + +Dort befindet sich ganz oben ein Button mit der Beschriftung "Kanal löschen". Ein Klick darauf und Ihr Kanal wird, nach Eingabe Ihres Account-Passworts (zur Absicherung) inklusive aller Inhalte gelöscht. + + + +***Beachte:*** Es ist nun nicht mehr möglich, einen neuen Kanal mit der selben Kanalbezeichnung auf diesem Hub anzulegen. Der Grund dafür ist, dass der Kanal-Kurzname in der Datenbank gesperrt ist, um eine Identitätsübernahme durch dritte zu verhindern. Sollte es aber dennoch erforderlich sein, den alten Kanal (durch Klonen) auf dem Hub wiederherzustellen, müssen Sie den Administrator darum bitte, den gesperrten Kurznamen aus der Hubzilla-Datenbank zu löschen. diff --git a/doc/de/member/diaspora_compat.md b/doc/de/member/diaspora_compat.md new file mode 100644 index 000000000..36d5075be --- /dev/null +++ b/doc/de/member/diaspora_compat.md @@ -0,0 +1,33 @@ +### Diaspora-Kompatibilität + +Das Diaspora Protocol Addon ermöglicht es einer Website, mit dem Diaspora-Protokoll zu kommunizieren, was die Kommunikation und Verbindungen mit Diaspora-Mitgliedern (und auch Friendica-Mitgliedern, da dieses Netzwerk ebenfalls das Diaspora-Protokoll anbietet) ermöglicht. +Dieses Addon ist in den Serverkonfigurationen 'Basic' und 'Standard' verfügbar. Es ist nicht verfügbar mit und das Plugin ist komplett deaktiviert, wenn Sie die 'pro' Serverkonfiguration verwenden. Der Grund dafür ist, dass das Diaspora-Protokoll nicht sehr ausgereift ist und viele Funktionen von $projectname nicht gut damit funktionieren. +Die Mitglieder müssen sich der Einschränkungen des Protokolls bewusst sein eigenen Aktivitäten auf diejenigen beschränken, die mit Diaspora kompatibel sind. Die „Pro“-Serverkonfiguration ist frei von diesen Einschränkungen und Sie können alle Projektfunktionen und -fähigkeiten nutzen, ohne sich Gedanken darüber zu machen, wie sie sich auf andere Netzwerke übertragen lassen. Viele Funktionen sind einzigartig für Hubzilla und werden durch das Nomad-Protokoll unterstützt, das unsere native Kommunikationssprache zwischen Servern/Hubs ist. +Wenn Sie eine Konfiguration verwenden, die direkte Diaspora-Kommunikation erlaubt, sollten Sie sich der hier dargestellten Einschränkungen bewusst sein. + +- Das Zurückziehen von privaten Nachrichten (unsend) ist bei Diaspora-Verbindungen nicht möglich. +- Private Nachrichten und die dazugehörigen Kommentare werden in Diaspora und Friendica als E-Mail-Benachrichtigungen im Klartext gesendet. Dies ist ein großes Problem für die Privatsphäre und betrifft alle privaten Kommunikationen, bei denen sich *ein* Mitglied der Konversation in einem anderen Netzwerk befindet. Sei dir dessen bewusst. +- Die Zugangskontrolle funktioniert nur für Beiträge und Kommentare. Diaspora-Mitgliedern wird die Erlaubnis verweigert, wenn sie versuchen, auf andere zugriffskontrollierte hubzilla-Objekte wie Dateien, Fotos, Webseiten, Chatrooms usw. zuzugreifen. Im Falle von privaten Fotos, die mit Beiträgen verlinkt sind, sehen sie ein „Verbotszeichen“ anstelle des Fotos. Diaspora hat kein Konzept für private Medien und bietet eine Illusion von Fotoprivatsphäre, indem es unkenntliche URLs verwendet, anstatt das Foto vor dem Schnüffeln durch unbefugte Betrachter zu schützen. + +Es gibt keine andere Möglichkeit, als Ihre Medienressourcen öffentlich zu machen (für jeden im Internet). + +- Bearbeitete Beiträge werden nicht zugestellt. Die Diaspora-Mitglieder sehen den ursprünglichen Beitrag/Kommentar ohne Bearbeitungen. Das Protokoll enthält keinen Mechanismus, um einen bestehenden Beitrag zu aktualisieren. Es ist nicht möglich, einen Beitrag zu löschen und einen neuen unsichtbar zu übermitteln, da sich die Message-ID ändert und wir dieselbe Message-ID in unserem eigenen Netzwerk behalten müssen. Die einzige Abhilfe besteht darin, den Beitrag/Kommentar zu löschen und ihn erneut zu übermitteln. (Wenn es sich um einen Beitrag handelt, werden dabei alle vorhandenen Likes/Kommentare gelöscht). Eventuell werden wir eine Möglichkeit anbieten, die veraltete Kopie nur in Diaspora zu löschen und sie in Netzwerken, die Änderungen verarbeiten können, intakt zu lassen. +- Nomadische Identität (nur $projectname 'standard') wird nicht mit Diaspora funktionieren. Wir werden eventuell eine **Option** bereitstellen, die es Ihnen ermöglicht, die Freigabe von allen Ihren Klonen zu starten, wenn Sie die erste Verbindung herstellen. Die Diaspora-Person muss dies nicht akzeptieren, aber wenn sie die Verbindung akzeptiert, kann die Kommunikation fortgesetzt werden. Ohne diese Option müssen Sie, wenn Sie zu einem anderen Server gehen, von dem aus Sie die Verbindung ursprünglich hergestellt haben, oder wenn Sie die Verbindung herstellen, bevor Sie den Klon erstellt haben, die Verbindung von dem neuen Ort aus erneut herstellen. +- Das Ablaufen der Post wird auf Diaspora nicht unterstützt. Wir können Ihnen eine Option anbieten, um ablaufende Beiträge nicht an das Netzwerk zu senden. In Zukunft kann dies mit einer Remote-Löschanforderung bereitgestellt werden. +- Eine Ende-zu-Ende-Verschlüsselung wird nicht unterstützt. Wir werden diese Beiträge in ein Schlosssymbol übersetzen, das von der Diaspora-Seite aus nicht entsperrt werden kann. +- Die Überprüfung von Nachrichten wird in Zukunft unterstützt werden. +- Mehrere Profile werden nicht unterstützt. Diaspora-Mitglieder können nur Ihr Standardprofil sehen. +- Geburtstagsereignisse werden in Diaspora nicht angezeigt. Andere Ereignisse werden übersetzt und als Post verschickt, aber alle Zeiten werden entweder in der Zeitzone des Ursprungskanals oder in GMT angegeben. Wir kennen die Zeitzone des Empfängers nicht, da Diaspora dieses Konzept nicht hat. +- Wir erlauben derzeit standardmäßig, dass Tags gekapert werden können. Es gibt eine Option, mit der Sie verhindern können, dass das andere Ende des Netzwerks Ihre Tags entführt und sie auf seine eigenen Ressourcen zeigt. +- Community-Tags werden nicht funktionieren. Wir werden eine Tagging-Aktivität als Kommentar senden. Das wird nichts bewirken. +- Privatsphären-Tags (@!somebody) werden für Diaspora-Mitglieder nicht verfügbar sein. Diese Tags müssen möglicherweise entfernt oder unkenntlich gemacht werden, um zu verhindern, dass sie gekapert werden - was zu Datenschutzproblemen führen könnte. +- Plus-getaggte hubzilla-Foren sollten von Diaspora aus funktionieren. +- Du kannst keine Diaspora-Kanäle als Kanalquellen verwenden. +- Ablehnungen von Beiträgen werden in Kommentare umgewandelt und Du wirst die Möglichkeit haben, diese als Kommentare zu senden oder sie nicht an Diaspora zu senden (das keine Ablehnungen bietet). Derzeit werden sie nicht gesendet. +- Wir werden das Gleiche für Likes und Dislikes von ***Kommentaren*** tun. Sie können entweder als Kommentar gesendet werden oder Sie werden die Möglichkeit haben, zu verhindern, dass sie an Diaspora übermittelt werden. Derzeit werden sie nicht gesendet. +- Emojis sind derzeit nicht übersetzt. +- „Beobachter-Tags“ werden in leeren Text umgewandelt. +- Eingebettete Apps werden in Links umgewandelt. +- Eingebettete Seitendesign-Elemente (in Arbeit) werden entweder entfernt oder in eine Fehlermeldung umgewandelt. +- Diaspora-Mitglieder werden nicht im Verzeichnis angezeigt. +- Es gibt Unterschiede in der Kompatibilität von Oembed zwischen den Netzwerken. Einige eingebettete Ressourcen werden auf der einen oder anderen Seite in einen Link umgewandelt.
\ No newline at end of file diff --git a/doc/de/member/direct_messages.md b/doc/de/member/direct_messages.md new file mode 100644 index 000000000..dc0f77775 --- /dev/null +++ b/doc/de/member/direct_messages.md @@ -0,0 +1,9 @@ +### Direktnachrichten + +Direktnachrichten sind Nachrichten, die an eine oder mehrere Einzelverbindungen adressiert sind. Sie sind über den Netzwerkstream zugänglich. Ein Filter für Direktnachrichten wurde dem Stream-Filter-Widget für den schnellen Zugriff hinzugefügt. + +Möchte man eine Direktnachricht an einen (oder mehrere) andere Nutzer versenden (Direktnachrichten können nur von den Adressaten und vom Versender gelesen werden), so verfasst man einen normalen Beitrag und adressiert diesen per spezieller Erwähnung ausschließlich an den / die Empfänger. Dies geschieht mit der privaten Erwähnung (Privacy-Tag). Ein Privacy-Tag ist ein Name, dem die beiden Zeichen `@!` vorangestellt sind und der zusätzlich zur Markierung dieser Kanäle auch die Datenschutzberechtigungen des Beitrags so ändert, dass nur diese berücksichtigt werden. + +Um auf eine DN auch wieder "privat", also als DN zu antworten, muss man kein Privacy-Tag nutzen. Man antwortet einfach direkt auf die eingegangene DN, wodurch die Antwort an alle ursprünglichen Adressaten verteilt wird. + +Alternativ zum Privacy-Tag kann man auch Kanäle oder Privacygruppen aus dem [Privacy-Tool](/help/de/member/permissions_content.md) (🔒) auswählen. Dies ist der umständlichere Weg, der aber auch funktioniert. Die Nutzung eines Privacy-Tags überschreibt allerdings eine ggf. getroffene Auswahl im Privacy-Tool. Schreibt man also einen Beitrag, der als Direktnachricht verschickt werden soll, kann man den Privacy-Tag weglassen und stattdessen auf das Vorhangschloss-Symbol neben dem Button "Teilen" klicken, so dass man in die Berechtigungs-Einstellungen gelangt.
\ No newline at end of file diff --git a/doc/de/member/directory.md b/doc/de/member/directory.md new file mode 100644 index 000000000..d8732f0ee --- /dev/null +++ b/doc/de/member/directory.md @@ -0,0 +1,15 @@ +### Verzeichnis + +Hubzilla bietet über die App (im App-Menü ⋮) ein Kanalverzeichnis an. Im Verzeichnis werden die Kanäle des Hubzilla-Grid aufgeführt. + + + +Über die Verzeichnisoptionen in der linken Seitenleiste kann der Umfang des Verzeichnisses gefiltert werden. So können Sie z.B. die Auflistung auf Kanäle des eigenen Hub beschränken. + +Außerdem gibt es in der linken Seitenleiste einen Schlüsselwörter-Wolke, über welche Sie Kanäle mit entsprechenden Interessen/Schwerpunkten finden können. + +Ebenfalls in der linken Seitenleiste befindet sich ein Suchfeld, um Kanäle durch Namen / Namensbestandteile oder Interessen (Schlagwörter) zu finden. + +Sie können sich dann durch Klick auf den entsprechenden Button direkt mit einem gefundenen Kanal verbinden. + +#include doc/de/member/AdvancedSearch.md; diff --git a/doc/de/member/display_settings.md b/doc/de/member/display_settings.md new file mode 100644 index 000000000..b484b4012 --- /dev/null +++ b/doc/de/member/display_settings.md @@ -0,0 +1,19 @@ +#### Anzeige-Einstellungen + +Mit den Anzeige-Einstellungen kann das Design des Kanals eingestellt werden. Überdies kann in gewissen Grenzen festgelegt werden, welche Inhalte dargestellt werden. + +In den Design-Einstellungen kann man aus den installierten Themes auswählen und dein Design-Schema für das Thema festlegen. + + + +Mit den Benutzerdefinierten Design-Einstellungen ist es möglich, das Farbschema den eigenen Vorstellungen anzupassen und Eckenradien, Standardgrößen sowie Standardmaße für Avatare festzulegen. Es werden als Standard zunächst die vereinfachten Einstellungen angezeigt, mit denen es nur möglich ist, den dunklen Modus festzulegen, eine schmale Navigationsleiste zu wählen, sowie die Breite des Inhaltsbereichs und die Schriftgröße. + + + +Wenn Sie den Schalter "Erweiterte Einstellungen anzeigen" auf "Ja" stellen und die Auswahl absenden, werden die erweiterten Einstellungen angezeigt, mit denen man Farben, Avatarmaße und Hintergrundbilder festlegen kann. + + + +Mit den Inhalts-Einstellungen lassen sich verschiedene Parameter auswählen (z.B. die Zeit bis zur Aktualisierung der Ansicht) und die Anzeige der "Links für neue Mitglieder", die bei neu angelegten Kanälen angezeigt werden, auszuschalten. + + diff --git a/doc/de/member/encryption.md b/doc/de/member/encryption.md new file mode 100644 index 000000000..b8c238b07 --- /dev/null +++ b/doc/de/member/encryption.md @@ -0,0 +1,15 @@ +### Eingebaute automatische Verschlüsselung + +Vollständige Offenlegung: Die Verschlüsselung, die hubzilla standardmäßig verwendet, ist nicht absolut wasserdicht. Es *gibt* bekannte Verfahren, um sie zu umgehen. Das ist*aber* sehr aufwändig und muss für jeden Kanal einzeln durchgeführt werden. Und um das klarzustellen: Andere Dienste speichern Ihre Nachrichten im Klartext, daher sehen wir diesen Ansatz als eine *deutliche* Verbesserung für Ihre Privatsphäre an. Außerdem steht es Ihnen jederzeit frei, weitere Verschlüsselungen und Passwortschutz zu verwenden, wenn Sie dies wünschen. +Um dies näher zu erläutern: + +- jeder Kanal hat sein Schlüsselpaar +- jeder nicht-öffentliche Beitrag wird automatisch verschlüsselt +- optionaler Passwortschutz für Inhalte über Krypto-Javascript, Browser-zu-Browser-Verschlüsselung (muss in den Einstellungen aktiviert werden) Vollständige Offenlegung: Ein böswilliger Hub-Administrator könnte bösartigen Javascript-Code (z.B. Keylogging-Fähigkeiten) in den Code einschleusen. Verschlüsseln Sie unsere Daten mit GPG, werden Sie selbst Hub-Administrator oder verwenden Sie andere Kommunikationsmittel, wenn Sie das stört. + +Was ist also der Umfang der Sicherheit? Um es ganz offen zu sagen: Das mag toll sein, aber es ist nicht perfekt. + +- Jeder nicht öffentliche Beitrag wird automatisch verschlüsselt, aber Personen, die Zugriff auf die Datenbank und die Dateien der Website haben *, können* mit Hilfe dieser Schlüssel, die natürlich auf dem Server gespeichert werden müssen, alles entschlüsseln. Um es klar zu sagen: Die Verschlüsselungsschlüssel sind für jeden Kanal unterschiedlich und es ist ein *ziemlicher Aufwand*, dies zu tun. Und nochmals: Andere Dienste speichern Ihre Nachrichten im Klartext und unverschlüsselt. Das ist also *ein* ganz erheblicher Gewinn für Ihre Privatsphäre. + +Wir glauben, dass eine Massenüberwachung auf NSA-Niveau mit Klartextextraktion aufgrund des Designs des Nomad-Protokolls wahrscheinlich nicht möglich ist. Gezielte Angriffe, wie z. B. das Hacken eines Hubs, um an die Serverprotokolle und die Datenbank zu gelangen, geben nur teilweise Aufschluss darüber, was zwischen der Kommunikation von Personen zwischen verschiedenen Hubs vor sich geht. Wir glauben, dass dies es für Angreifer auf staatlicher Ebene viel teurer macht, auf Ihre Inhalte in hubzilla zuzugreifen. +Wir nehmen gerne Hilfe an, um die Sicherheit des Systems zu verbessern und es auch zu überprüfen.
\ No newline at end of file diff --git a/doc/de/member/files.md b/doc/de/member/files.md new file mode 100644 index 000000000..3a1b3206e --- /dev/null +++ b/doc/de/member/files.md @@ -0,0 +1,31 @@ +### Dateien + +Hubzilla bietet Cloud-Funktionalität. Das bedeutet, dass man für jeden Kanal ein Verzeichnis besitzt, in dem man weitere Unterverzeichnisse erzeugen und Dateien ablegen kann. Für jedes Verzeichnis, ja sogar für jede einzelne Datei kann man genaue Zugriffsrechte festlegen. Das geht von einer Sichtbarkeit für die Allgemeinheit, eine Sichtbarkeit für Mitglieder bestimmter Gruppen bis hin zur einzelnen Freigabe für einzelne Mitglieder aus den eigenen Verbindungen. Es ist sogar möglich, Dateien mit Leuten zu teilen, die keine Hubzilla-Identität haben. Dazu verwendet man Gastzugangs-Token. + +Das Anlegen und Löschen von Verzeichnissen und das Anlegen bzw. Löschen von Dateien ist wirklich einfach. + +Seinen Cloudspeicher erreicht man über das „App-Menü“ (⋮) → Dateien. Man kann auch Bilder über den Dateien-Bereich hochladen, was ebenfalls über den Bereich „Fotos“ möglich ist. + +Die Dateien können in einer Listenansicht + + + +oder einer Kachelansicht + + + +dargestellt werden. + +Neue Verzeichnisse / Ordner erstellt man mit dem Button "Erstelle". Beim Erstellen kann man auch sofort die [Berechtigungen](/help/de/member/permissions_content.md) für den neuen Ordner festlegen (🔓). + +Mit dem Button "+ Dateien hinzufügen" kann man Dateien in seine Cloud hochladen. Auch hier ist es wieder möglich die Zugriffsberechtigungen direkt festzulegen. + +Um Zugriffsrechte (Berechtigungen) für Verzeichnisse oder Dateien nachträglich festzulegen oder zu ändern, klickt man auf das Kontextmenü (︙) der Datei oder des Verzeichnisses. Hier lassen sich außerdem noch verschiedene Dateioperationen durchführen. + + + +Fügt man beim Erstellen eines Beitrags oder eines Kommentars eine Datei mit dem Button "📎" an, so wird diese Datei in einem ggf. neu erstellten Verzeichnis (Muster: `Jahr-Monat`) in der Cloud abgelegt. + +#include doc/de/member/photos.md; +#include doc/de/member/gallery.md; +#include doc/de/member/cloud_storage.md; diff --git a/doc/de/member/follow_conversation.md b/doc/de/member/follow_conversation.md new file mode 100644 index 000000000..0c5581613 --- /dev/null +++ b/doc/de/member/follow_conversation.md @@ -0,0 +1,3 @@ +#### Unterhaltung folgen / nicht mehr folgen + +Mittels Unterhaltung folgen / Unterhaltung nicht mehr folgen kann man umschalten, ob man einem Thread folgen möchte, also ob man Benachrichtigungen über Kommentare/Antworten, über Likes, Dislikes, Emoji-Reaktionen oder darüber, dass der Beitrag geteilt oder wiederholt wurde, erhalten möchte. diff --git a/doc/de/member/gallery.md b/doc/de/member/gallery.md new file mode 100644 index 000000000..764bd5959 --- /dev/null +++ b/doc/de/member/gallery.md @@ -0,0 +1,7 @@ +#### Galerie + +Bei der App "Galerie" handelt es sich um eine einfache Fotogalerie mit welcher alle Ihre Bilder aus dem Cloudspeicher dargestellt werden. + +Die dargestellten Bilder werden passend skaliert, was bei kleineren Bildern zu einer etwas unscharfen Darstellung führen kann. Praktischer ist die Nutzung der App "[Fotos](/help/de/member/photos.md)". + + diff --git a/doc/de/member/guest_access.md b/doc/de/member/guest_access.md new file mode 100644 index 000000000..29d5c4ddd --- /dev/null +++ b/doc/de/member/guest_access.md @@ -0,0 +1,15 @@ +### Gastzugang + +Wenn Sie private (also für die Öffentlichkeit nicht zugängliche) Inhalte mit Menschen teilen möchten, die über keinen Hubzilla-Account verfügen, so haben Sie die Möglichkeit dies mittels eines Gastzugangs zu verwirklichen. + +Mit dem Gastzugang erstellen Sie einen (ggf. temporären) Zugang, der es dem Nutzer, welcher sich mit diesen Daten einloggt, ermöglicht, auf ihre öffentlich zugänglichen Inhalte, aber auch nicht-öffentliche Inhalte, welche sie speziell für den Gastzugang freigeben, zuzugreifen. + +Rufen Sie die App "Gastzugang" auf, so wird ein Webformular angezeigt, mit welchem Sie einen solchen Gastzugang einrichten können. Sie geben einen selbst gewählten Anmeldenamen ein. Hubzilla hat bereits automatisch ein Kennwort für den Gastzugang generiert. Diese beiden Informationen können Sie nun demjenigen weitergeben, dem sie Zugriff auf Inhalte geben möchten. + +Im Feld "Läuft ab" können Sie außerdem ein Verfallsdatum eingeben, ab welchem der Gastzugang automatisch wieder gelöscht wird. Wenn Sie dieses Feld leer lassen, wird der Gastzugang ohne zeitliche Beschränkung erstellt. Er läuft dann nie automatisch ab und muss ggf. per Hand gelöscht werden. + +Außerdem können Sie für den Gastzugang eine [Kontakt-Rolle](/help/de/member/permissions_contact_roles.md) festlegen. + +In der linken Seitenleiste werden sämtliche Gastzugänge aufgelistet. Wählen Sie dort einen Gastzugang auf, so können sie ihn bearbeiten oder wieder löschen (auch vor Ablauf der Frist). + +Sobald ein Gastzugang angelegt ist, taucht er auch in den "[Berechtigungs-Einstellungen](/help/de/member/permissions_content.md)" (Privacy-Tool) unter "Benutzerdefinierte Auswahl" auf. Sie können damit einzelne private Inhalte explizit für den Gastzugang (aber natürlich zusätzlich auch für andere Kontakte) freigeben, so dass der Gast auf die Inhalte zugreifen kann.
\ No newline at end of file diff --git a/doc/de/member/important_apps.md b/doc/de/member/important_apps.md new file mode 100644 index 000000000..fa2c22693 --- /dev/null +++ b/doc/de/member/important_apps.md @@ -0,0 +1,17 @@ +#### Wichtige Apps + +Wenn Sie Ihren Kanal hauptsächlich für social Networking nutzen möchten, gibt es einige Apps, die nicht als Standard installiert oder aktiviert sind, welche teilweise essenziell wichtig sind. + +Um am gesamten Fediverse teilzunehmen, müssen Sie die App "**ActivityPub-Protokoll**" installieren. + +Um einfacher lohnende Kontakte zu finden und zu erleben, was im Fediverse gerade passiert, kann man die App "**[Öffentlicher Beitragsstream](/hlp/de/member/public_stream.md)**" installieren und nutzen. + +Ebenfalls sinnvoll und empfehlenswert ist die App "**[NSFW](/help/de/member/NSFW.md)**", mit welcher man eigenen Contentwarning-Filter erstellen und nutzen kann. + +Außerdem sollten Sie die App "**[Superblock](/help/de/member/superblock.md)**" installieren, welche es Ihnen ermöglicht, bestimmte Nutzer komplett zu blockieren. + +Als ebenfalls wichtig ist die App "**[Privacy Groups](/help/de/member/privacy_groups.md)**" zu erachten. Mit dieser ist es möglich, Kontaktgruppen zu erstellen und sowohl nach diesen zu filtern, als auch mit den Kontakten aus den Gruppen geschlossene Kommunikation zu betreiben. + +---- + +**<u>Achtung:</u>** Die App "Öffentlicher Beitragsstream" steht zur Installation nur zur Verfügung, wenn der Administrator des Hub diesen Stream aktiviert hat. diff --git a/doc/de/member/insert_images.md b/doc/de/member/insert_images.md new file mode 100644 index 000000000..6b713e0a1 --- /dev/null +++ b/doc/de/member/insert_images.md @@ -0,0 +1,53 @@ +#### Bilder einfügen + +Es gibt verschiedene Möglichkeiten, Bilder in Beiträge und Kommentare einzufügen. + +##### Im Beitragseditor + +Im Beitragseditor existieren zwei Schaltflächen, die es ermöglichen, Bilder einzufügen: "Bild einbetten" und "Datei anhängen/hochladen". + +Mit "Bild einbetten" kann man ein bereits in der Cloud existierendes Bild in den Beitrag einfügen. Das Bild muss also entweder vorhanden sein, oder mal lädt es zu genau diesem Zweck z.B. mit der App "Dateien" hoch. + + + +Wählt man diese Schaltfläche, öffnet sich eine Übersicht mit den vorhandenen ´Bilddateien und man muss nur das passende Bild auswählen und anklicken. <u>Beachte:</u> Nach der Auswahl des einzufügenden Bildes muss das Auswahlfenster wieder geschlossen werden. Es schließt sich nicht automatisch nach dem Einfügen eines Bildes, um die Möglichkeit zu haben, in einem Durchgang ggf. mehrere Bilder einzufügen. + +Mit dem Auswählen wird das Bild, auf Originalgröße skaliert, als anklickbarer Link zur Quelldatei mittels der bbCode-Tags `[zrl][zmg] [/zmg][/zrl]` am Ende des bisherigen Beitrags (nicht an der aktuellen Textcursor-Position) eingefügt. + + + +Mit "Datei anhängen/hochladen" kann ein Bild direkt vom eigenen Gerät hochgeladen und am Ende des Beitrags eingebettet. + + + +Es öffnet sich ein Dateiauswahl-Dialog mit dem man das Bild auf dem eigenen Gerät auswählen und hochladen kann. Es wird in ein ggf. automatisch erstelltes Unterverzeichnis in der Cloud hochgeladen und wieder mit den bbCode-Tags `[zrl][zmg] [/zmg][/zrl]` am Ende des bisherigen Beitrags eingefügt. + +<u>Beachte:</u> Bei dieser Methode wird das Bild, sofern kein Fließtext vorhanden ist, nicht auf Originalgröße skaliert, sondern als kleiners Vorschaubild dargestellt. Das führt dazu, dass um das Bild herum ggf. ein Karomuster-Hintergrund zu sehen ist. + + + +##### Im Kommentareditor + +Im Kommentareditor existiert lediglich die Möglichkeit, ein Bild hochzuladen und einzubetten. Die Schaltfläche für das Einfügen eines vorhandenen Bildes existiert dort nicht. + + + +Möchte man dennoch ein bereits vorhandenes Bild einfügen, muss man das per Hand mit den Tags `[img][/img]` oder `[img=URL][/img]` tun. Dafür muss man die URL des Bildes kennen. Auf diese Weise kann man auch Bilder aus externen Quellen im Web einfügen. + +Verwendet man `[img=BREITExHÖHE][/img]`, kann man das Bild skalieren. + +##### Alt-Text + +Möchte man einen Alternativtext (Alt-Text), welcher angezeigt wird, wenn das Bild nicht dargestellt werden kann, oder - als Popup - wenn man mit dem Mauszeiger über das Bild fährt, so kann man diesen zwischen die beiden Tags `[img=URL]ALT_TEXT[/img]` tun. Hat man das Bild in einen Beitrag nach der erstem Methode ("Bild einbetten"), muss man selbst Hand anlegen. Man muss die Skalierung, die im öffnenden zmg-Tag eingefügt wurde mit der URL des Bildes ersetzen und die automatisch eingefügte Bild-URL zwischen dem öffnenden und dem schließenden zmg-Tag durch den Alt-Text ersetzen. + +Beispiel: + +Das Bild wurde eingebettet und es wurde damit der Code + +`[zrl=https://klacker.org/photos/tutorial01/image/cd747cd9-3f05-42cd-94cc-91c7368c5a18][zmg=520x520]https://klacker.org/photo/cd747cd9-3f05-42cd-94cc-91c7368c5a18-2.png[/zmg][/zrl]` + +automatisch erstellt, dann muss er, um z.B. den Alt-Text "Hubzilla-Symbol auf hellgrauem Hintergrund" einzufügen, so geändert werden: + +`[zrl=https://klacker.org/photos/tutorial01/image/cd747cd9-3f05-42cd-94cc-91c7368c5a18][zmg=https://klacker.org/photo/cd747cd9-3f05-42cd-94cc-91c7368c5a18-2.png520x520]Hubzilla-Symbol auf hellgrauem Hintergrund[/zmg][/zrl]` + + diff --git a/doc/de/member/interact.md b/doc/de/member/interact.md new file mode 100644 index 000000000..9e10e2a59 --- /dev/null +++ b/doc/de/member/interact.md @@ -0,0 +1,25 @@ +### Mit Postings interagieren + +Mit Postings, die man im Stream sieht, kann man interagieren. Das ist einer der Zwecke von Sozialen Netzwerken. Man kann einen solchen Beitrag kommentieren, es sind aber noch weitere Möglichkeiten der Interaktion möglich. + +Die Schaltflächen (Buttons) dafür findet man im Beitrag unten rechts. + + + +Man kann einen Beitrag "mögen" 🖒 oder "nicht mögen" 🖓 oder man kann mit einem Emoji auf einen Beitrag reagieren: + + + +Weitere Funktionen befinden sich im Menü **⚙**. + + + +#include doc/de/member/repeat.md; +#include doc/de/member/share.md; +#include doc/de/member/link_to_source.md; +#include doc/de/member/save_to_folder.md; +#include doc/de/member/toggle_star_status.md; +#include doc/de/member/show_source_code.md; +#include doc/de/member/follow_conversation.md; +#include doc/de/member/delete.md; +#include doc/de/member/conversation_features.md; diff --git a/doc/de/member/link_to_source.md b/doc/de/member/link_to_source.md new file mode 100644 index 000000000..39b344f2c --- /dev/null +++ b/doc/de/member/link_to_source.md @@ -0,0 +1,3 @@ +#### Link zur Quelle + +Mit "Link zur Quelle" gelangt man zur eigentlichen Quelle eines Beitrags. Man landet beim Original-Beitrag auf der Instanz des Beitragserstellers.
\ No newline at end of file diff --git a/doc/de/member/mentions.md b/doc/de/member/mentions.md new file mode 100644 index 000000000..5f1c714c1 --- /dev/null +++ b/doc/de/member/mentions.md @@ -0,0 +1,9 @@ +### Erwähnungen + +Kanäle (Nutzer) werden gekennzeichnet, indem ihrem Namen (Handle) einfach das @ -Zeichen vorangestellt wird. `@Jack` + +Wenn Sie jemanden erwähnen, wird ein Feld für die automatische Vervollständigung erstellt, aus dem Sie Ihre unmittelbaren Verbindungen auswählen können. Wählen Sie entsprechend aus. + +Ist der Kontakt berechtigt, Ihr Posting zu empfangen, erhält er eine Tagbenachrichtigung. + +Befindet sich der Adressat nicht in Ihrer Kontaktliste, so müssen sie das Handle hinter dem "@"-Zeichen ausschreiben. Sofern der Empfänger auch Erwähnungen Fremder erlaubt, wird er ebenfalls über die Erwähnung benachrichtigt.
\ No newline at end of file diff --git a/doc/de/member/overview.md b/doc/de/member/overview.md new file mode 100644 index 000000000..9bd2f6c0c --- /dev/null +++ b/doc/de/member/overview.md @@ -0,0 +1,3 @@ +### Überblick + +Während viele Funktionen und Möglichkeiten von Hubzilla denjenigen vertraut sind, die bereits Social-Networking-Websites und Blogging-Software verwendet haben, gibt es auch einige neue Konzepte und Funktionen, die den meisten Menschen noch nicht begegnet sind. Einige der neuen Ideen hängen mit der dezentralen Natur des Grids zusammen, andere mit dem fortschrittlichen Berechtigungssystem, das zum Schutz Ihrer Daten notwendig ist. Dieser Leitfaden soll Ihnen helfen zu verstehen, wie Sie Ihre nomadische Identität erstellen, konfigurieren und nutzen können.
\ No newline at end of file diff --git a/doc/de/member/permissions.md b/doc/de/member/permissions.md new file mode 100644 index 000000000..f5d9fb33c --- /dev/null +++ b/doc/de/member/permissions.md @@ -0,0 +1,7 @@ +### Berechtigungen + +Berechtigungen sind ein Kernelement von Hubzilla. Sie erlauben sehr fein abgestufte Möglichkeiten, Inhalte zugänglich zu machen, zu verbergen oder in der Nutzung zu beschränken. So dienen sie auch dazu, Direktnachrichten möglich zu machen, indem über Berechtigungen festgelegt wird, wer den Beitrag (nichts anderes sind Direktnachrichten) sehen kann, und wer nicht. + +#include doc/de/member/permissions_content.md; +#include doc/de/member/permissions_channel_roles.md; +#include doc/de/member/permissions_contact_roles.md; diff --git a/doc/de/member/permissions_channel_roles.md b/doc/de/member/permissions_channel_roles.md new file mode 100644 index 000000000..db0cbe062 --- /dev/null +++ b/doc/de/member/permissions_channel_roles.md @@ -0,0 +1,45 @@ +#### Berechtigungen - Benutzerdefinierte Kanalrollen + +[Kanal-Rollen](/help/de/member/channel_roles.md) legen fest, welche Rechte bei der Interaktion mit einem Kanal gegeben sind. Sie sind unter "Einstellungen" → "Kanal Einstellungen" erreichbar. + +Hier kann die Rolle für einen Kanal festgelegt werden. Kanal-Rollen haben auch Einfluss auf Kontakt-Rollen, weil individuelle Rechte, die von den Kanal-Rollen vorgegeben sind und vererbt werden, dort die eigenen Einstellungen überschreiben. + +Für eine wirklich individuelle Anpassung der Rollenberechtigungen Ihres Kanals, müssen Sie als Kanal-Rolle "Benutzerdefiniert" auswählen. Die anderen Rollen ("Öffentlich", "Persönlich", "Community Forum") sind vordefinierte Berechtigungsrollen (siehe: [Kanal-Rollen](/help/de/member/channel_roles.md)). + +Mit den benutzerdefinierten Kanal-Rollen können Sie für folgende Interaktionen festlegen, wer sie wie ausüben kann: + +- Kann meinen Kanal-Stream und meine Beiträge sehen +- Kann mir die Beiträge aus seinem Kanal schicken +- Kann mein Standardprofil sehen +- Kann meine Verbindungen sehen +- Kann meine Datei- und Bilderordner sehen +- Kann in meine Datei- und Bilderordner hochladen/ändern +- Kann die Webseiten meines Kanals sehen +- Kann meine Wiki-Seiten sehen +- Kann Webseiten in meinem Kanal erstellen/ändern +- Kann meine Wiki-Seiten bearbeiten +- Kann auf meiner Kanal-Seite ("wall") Beiträge veröffentlichen +- Kann mir direkte Nachrichten schicken +- Kann Profile und Profilsachen mögen/nicht mögen +- Kann mit mir chatten +- Kann meine öffentlichen Beiträge in anderen Kanälen zitieren/spiegeln +- Kann meinen Kanal administrieren + +Für diese Interaktionen stehen dann folgende Berechtigungen zur Wahl: + +- Nur ich +- Nur die, denen Du es explizit erlaubst +- Angenommene Verbindungen +- Beliebige Verbindungen +- Jeder auf dieser Webseite +- Alle Hubzilla-Mitglieder +- Jeder authentifizierte +- Jeder im Internet + +Um die **benutzerdefinierte Rolle** zu bearbeiten, wählt man in den Einstellungen den Punkt "Privacy-Einstellungen". Rechts unten findet man den Button "Benutzerdefinierte Konfiguration der Channel Role". Klickt man darauf, erscheint ein Warn-Dialog, der auf die Risiken einer fehlerhaften Konfiguration aufmerksam macht. Bestätigt man, dass man die Rechte bearbeiten möchte, öffnet sich der Einstellungs-Dialog für die benutzerdefinierten Rollenrechte. + +---- + +**<u>Wichtiger Hinweis:</u>** + +Die benutzerdefinierten Rollen sollten mit Bedacht eingestellt werden und bergen die Gefahr, dass sich bei bestimmten Konfigurationen der Kanal nicht mehr wie gewünscht verhält.
\ No newline at end of file diff --git a/doc/de/member/permissions_contact_roles.md b/doc/de/member/permissions_contact_roles.md new file mode 100644 index 000000000..fae1981ae --- /dev/null +++ b/doc/de/member/permissions_contact_roles.md @@ -0,0 +1,17 @@ +#### Berechtigungen - Kontaktrollen + +Kontakt-Rollen dient dazu Rollen (also eine Sammlung von Rechten und Möglichkeiten) für Kontakte zu erstellen. Diese Rollen können dann einem Kontakt oder allen Kontakten einer Privacy Gruppe (nicht der Gruppe selbst) zugewiesen werden. Damit werden die Möglichkeiten von Kontakten eingeschränkt oder erweitert. + +Mittels der App "Kontakt-Rollen" kann man Rollen, die den [Kanal-Rollen](/help/de/member/permissions_channel_roles.md) entsprechen, zusammenstellen. Im Kontakt-Editor oder im Privacy Gruppen Editor kann dann diese Berechtigungsrolle einzelnen Kontakten oder allen Kontakten einer Privacy Gruppe zuweisen. + +Jeder Kanal verfügt nach Erstellung automatisch über die Kontakt-Rolle "Standard" ("Systemrolle - nicht editierbar"). Neuen Kontakten wird automatisch diese Kontaktrolle zugewiesen (es sei denn, man legt eine eigene Kontaktrolle an, ändert diese Standard-Einstellung und weist neuen Kontakten künftig die neue, eigene Rolle zu). Die Standard-Kontaktrolle umfasst Berechtigungen aufgrund der gewählten Kanal-Rolle. Zusätzlich zu den durch die Kanal-Rolle gewährten Rechte, werden noch einige andere Rechte eingeräumt, damit sich der Kanal so verhält, wie man es aufgrund der Kanal-Rolle erwarten würde (so entspricht "Öffentlich" am ehesten einem "normalen" Social-Network-Kanal). + + + +<u>Beachte:</u> Etliche der Rechte einer Kanalrolle (ob Standard oder selbst erstellt) werden von der Kanalrolle geerbt. Diese Rechte können in der Kontakt-Rolle nicht wieder entzogen werden. Es handelt sich bei der Kontakt-Rolle um eine Whitelist, bei welcher nur zusätzliche Rechte gewährt werden können. + +Im [Verbindungs-Editor](/help/de/member/connection_editor.md) kann man einem Kontakt eine Kontakt-Rolle zuweisen. Dieser Dialog erscheint auch, wenn man einen neuen Kontakt zufügt. Als Standard ist hier dann die Kontakt-Rolle ausgewählt, bei welcher man den Schalter "Neuen Kontakten automatisch diese Rolle zuweisen" eingeschaltet hat. + + + +Bei Kanälen ohne selbst definierte Kontakt-Rollen ist dies immer "Standard". Im Verbindungs-Editor befindet sich auch ein Button "Contact Roles" mit welchem man zum Kontaktrollen-Editor gelangt, falls man für den Kontakt eine neue Kontaktrolle erstellen möchte. diff --git a/doc/de/member/permissions_content.md b/doc/de/member/permissions_content.md new file mode 100644 index 000000000..dc16477d9 --- /dev/null +++ b/doc/de/member/permissions_content.md @@ -0,0 +1,38 @@ +#### Berechtigungen für Inhalte + +Wenn Sie Inhalte bei Hubzilla teilen, also Postings veröffentlichen, Bilder oder Texte hochladen, Termine im Kalender eintragen, können Sie ganz exakt festlegen, wer Zugriff auf diese Inhalte hat. + +Die Berechtigungs-Einstellungen für Inhalte erreichen Sie über einen Button ("Privacy Tool") mit einem Vorhangschloss-Symbol 🔒bzw.🔓. + +Für das Teilen von Beiträgen:  + +Für das Erstellen von Ordnern/Verzeichnissen im Cloud-Speicher:  + +Für das Hochladen von Dateien:  + +Für das Teilen von Terminen/Ereignissen:  + +Auch für Webseiten, Wikiseiten und verschiedene andere Inhalte gibt es entsprechende Einstellungsmöglichkeiten für die Berechtigung. + +Wenn Sie auf das Symbol klicken, öffnet sich der Berechtigungsdialog, mit welchem Sie die Berechtigung für andere Nutzer festlegen können (hier geht es in der Regel um die Sichtbarkeit der Inhalte). + + + +Sie haben die Wahl zwischen + +- **Öffentlich** - Wie die Bezeichnung schon nahelegt, ist der Inhalt für jeden im Internet sichtbar. Also selbst für Nutzer, die gar keinen Fediverse-Dienst nutzen. + +- **Nur ich** - Hier kann nur der erstellende Nutzer den Inhalt sehen. Sie "teilen" ihn mit sich selbst. + +- **Privacy Gruppen** - Der Inhalt ist für alle Nutzer sichtbar, die sich in einer Ihrer Privacy Gruppen befinden. + +- **Benutzerdefinierte Auswahl** - Hier kann exakt festgelegt werden, wer den Inhalt sehen kann. Es sind auch Kobinationen von Privacy Gruppen und einzelnen Kontakten möglich, indem man bei dem jeweiligen Eintrag "Erlauben" oder "Verweigern" anwählt. + +  + +---- + +<u>**Wichtiger Hinweis:**</u> + +Die einmal festgelegten Berechtigungen für Postings können nachträglich nicht mehr geändert werden! Ein Posting wird sofort an eine nicht wirklich bestimmbare Zahl von anderen Servern verteilt, so dass Berechtigungen nachträglich nicht erteilt oder entzogen werden können.Die Berechtigungen für andere Inhalte, wie Dateien, Bilder etc. können hingegen nachträglich bearbeitet werden, weil diese Inhalte nur auf der eigenen Instanz (Hub) gespeichert werden und beim Teilen lediglich die Referenz zum Inhalt weitergegeben wird. + diff --git a/doc/de/member/photos.md b/doc/de/member/photos.md new file mode 100644 index 000000000..a52c23017 --- /dev/null +++ b/doc/de/member/photos.md @@ -0,0 +1,17 @@ +#### Fotos + +Die App "Fotos" ist eine spezielle Verwaltung/Ansicht für in die eigene Cloud hochgeladene Bilder. Es werden Vorschaubilder, statt Kacheln oder Dateibezeichnungen angezeigt, was das Auffinden bestimmter Bilder einfacher macht. + + + +Ein Klick auf das Bild führt zur Bildansicht. Hier gibt es zwei Steuerungssymbole, um zum nächsten oder vorherigen Foto zu wechseln. + + + +Außerdem gibt es einen Button "Fotowerkzeuge", der es mittels eines Menüs möglich macht, Das Bild als Profilbild oder Banner festzulegen, sowie das Bild zu bearbeiten. + + + +Ein weiterer Klick auf das Bild führt zur Vollansicht. + + diff --git a/doc/de/member/pic/anzeinst01.png b/doc/de/member/pic/anzeinst01.png Binary files differnew file mode 100644 index 000000000..0ed30700a --- /dev/null +++ b/doc/de/member/pic/anzeinst01.png diff --git a/doc/de/member/pic/anzeinst02.png b/doc/de/member/pic/anzeinst02.png Binary files differnew file mode 100644 index 000000000..00c7369ea --- /dev/null +++ b/doc/de/member/pic/anzeinst02.png diff --git a/doc/de/member/pic/anzeinst03.png b/doc/de/member/pic/anzeinst03.png Binary files differnew file mode 100644 index 000000000..fe82a0a0f --- /dev/null +++ b/doc/de/member/pic/anzeinst03.png diff --git a/doc/de/member/pic/anzeinst04.png b/doc/de/member/pic/anzeinst04.png Binary files differnew file mode 100644 index 000000000..6c0e36d75 --- /dev/null +++ b/doc/de/member/pic/anzeinst04.png diff --git a/doc/de/member/pic/apps01.png b/doc/de/member/pic/apps01.png Binary files differnew file mode 100644 index 000000000..cd36e7f3a --- /dev/null +++ b/doc/de/member/pic/apps01.png diff --git a/doc/de/member/pic/apps02.png b/doc/de/member/pic/apps02.png Binary files differnew file mode 100644 index 000000000..99c8211d3 --- /dev/null +++ b/doc/de/member/pic/apps02.png diff --git a/doc/de/member/pic/apps03.png b/doc/de/member/pic/apps03.png Binary files differnew file mode 100644 index 000000000..3db58133c --- /dev/null +++ b/doc/de/member/pic/apps03.png diff --git a/doc/de/member/pic/apps04.png b/doc/de/member/pic/apps04.png Binary files differnew file mode 100644 index 000000000..adc8ca5e9 --- /dev/null +++ b/doc/de/member/pic/apps04.png diff --git a/doc/de/member/pic/apps05.png b/doc/de/member/pic/apps05.png Binary files differnew file mode 100644 index 000000000..7dcf8f69c --- /dev/null +++ b/doc/de/member/pic/apps05.png diff --git a/doc/de/member/pic/apps06.png b/doc/de/member/pic/apps06.png Binary files differnew file mode 100644 index 000000000..4662aef0b --- /dev/null +++ b/doc/de/member/pic/apps06.png diff --git a/doc/de/member/pic/apps07.png b/doc/de/member/pic/apps07.png Binary files differnew file mode 100644 index 000000000..e32fb4bb9 --- /dev/null +++ b/doc/de/member/pic/apps07.png diff --git a/doc/de/member/pic/apps08.png b/doc/de/member/pic/apps08.png Binary files differnew file mode 100644 index 000000000..db3c0c8c8 --- /dev/null +++ b/doc/de/member/pic/apps08.png diff --git a/doc/de/member/pic/artikel01.png b/doc/de/member/pic/artikel01.png Binary files differnew file mode 100644 index 000000000..f92f00eb3 --- /dev/null +++ b/doc/de/member/pic/artikel01.png diff --git a/doc/de/member/pic/artikel02.png b/doc/de/member/pic/artikel02.png Binary files differnew file mode 100644 index 000000000..60a4902cd --- /dev/null +++ b/doc/de/member/pic/artikel02.png diff --git a/doc/de/member/pic/artikel03.png b/doc/de/member/pic/artikel03.png Binary files differnew file mode 100644 index 000000000..21ecfccec --- /dev/null +++ b/doc/de/member/pic/artikel03.png diff --git a/doc/de/member/pic/artikel04.png b/doc/de/member/pic/artikel04.png Binary files differnew file mode 100644 index 000000000..514722303 --- /dev/null +++ b/doc/de/member/pic/artikel04.png diff --git a/doc/de/member/pic/artikel05.png b/doc/de/member/pic/artikel05.png Binary files differnew file mode 100644 index 000000000..feb6b44f9 --- /dev/null +++ b/doc/de/member/pic/artikel05.png diff --git a/doc/de/member/pic/author.png b/doc/de/member/pic/author.png Binary files differnew file mode 100644 index 000000000..75ec9e636 --- /dev/null +++ b/doc/de/member/pic/author.png diff --git a/doc/de/member/pic/bild01.png b/doc/de/member/pic/bild01.png Binary files differnew file mode 100644 index 000000000..b6c9df8f0 --- /dev/null +++ b/doc/de/member/pic/bild01.png diff --git a/doc/de/member/pic/bild02.png b/doc/de/member/pic/bild02.png Binary files differnew file mode 100644 index 000000000..35fd8b549 --- /dev/null +++ b/doc/de/member/pic/bild02.png diff --git a/doc/de/member/pic/bild03.png b/doc/de/member/pic/bild03.png Binary files differnew file mode 100644 index 000000000..ea47a710c --- /dev/null +++ b/doc/de/member/pic/bild03.png diff --git a/doc/de/member/pic/bild04.png b/doc/de/member/pic/bild04.png Binary files differnew file mode 100644 index 000000000..b5ad1eaf6 --- /dev/null +++ b/doc/de/member/pic/bild04.png diff --git a/doc/de/member/pic/bild05.png b/doc/de/member/pic/bild05.png Binary files differnew file mode 100644 index 000000000..b2be326c2 --- /dev/null +++ b/doc/de/member/pic/bild05.png diff --git a/doc/de/member/pic/bild06.png b/doc/de/member/pic/bild06.png Binary files differnew file mode 100644 index 000000000..f7020dc1e --- /dev/null +++ b/doc/de/member/pic/bild06.png diff --git a/doc/de/member/pic/bookm01.png b/doc/de/member/pic/bookm01.png Binary files differnew file mode 100644 index 000000000..97cdcab11 --- /dev/null +++ b/doc/de/member/pic/bookm01.png diff --git a/doc/de/member/pic/bookm02.png b/doc/de/member/pic/bookm02.png Binary files differnew file mode 100644 index 000000000..b57aa435e --- /dev/null +++ b/doc/de/member/pic/bookm02.png diff --git a/doc/de/member/pic/bookm03.png b/doc/de/member/pic/bookm03.png Binary files differnew file mode 100644 index 000000000..69ddbff7a --- /dev/null +++ b/doc/de/member/pic/bookm03.png diff --git a/doc/de/member/pic/carddav01.png b/doc/de/member/pic/carddav01.png Binary files differnew file mode 100644 index 000000000..174c57c92 --- /dev/null +++ b/doc/de/member/pic/carddav01.png diff --git a/doc/de/member/pic/carddav02.png b/doc/de/member/pic/carddav02.png Binary files differnew file mode 100644 index 000000000..af1de5720 --- /dev/null +++ b/doc/de/member/pic/carddav02.png diff --git a/doc/de/member/pic/carddav03.png b/doc/de/member/pic/carddav03.png Binary files differnew file mode 100644 index 000000000..dbbd0028a --- /dev/null +++ b/doc/de/member/pic/carddav03.png diff --git a/doc/de/member/pic/carddav04.png b/doc/de/member/pic/carddav04.png Binary files differnew file mode 100644 index 000000000..5ce71e5c9 --- /dev/null +++ b/doc/de/member/pic/carddav04.png diff --git a/doc/de/member/pic/carddav05.png b/doc/de/member/pic/carddav05.png Binary files differnew file mode 100644 index 000000000..9292cb5e9 --- /dev/null +++ b/doc/de/member/pic/carddav05.png diff --git a/doc/de/member/pic/carddav06.png b/doc/de/member/pic/carddav06.png Binary files differnew file mode 100644 index 000000000..a329be64b --- /dev/null +++ b/doc/de/member/pic/carddav06.png diff --git a/doc/de/member/pic/carddav07.png b/doc/de/member/pic/carddav07.png Binary files differnew file mode 100644 index 000000000..828a9aa71 --- /dev/null +++ b/doc/de/member/pic/carddav07.png diff --git a/doc/de/member/pic/center.png b/doc/de/member/pic/center.png Binary files differnew file mode 100644 index 000000000..c3ce7b125 --- /dev/null +++ b/doc/de/member/pic/center.png diff --git a/doc/de/member/pic/chat01.png b/doc/de/member/pic/chat01.png Binary files differnew file mode 100644 index 000000000..1ed934cac --- /dev/null +++ b/doc/de/member/pic/chat01.png diff --git a/doc/de/member/pic/chat02.png b/doc/de/member/pic/chat02.png Binary files differnew file mode 100644 index 000000000..070d6d544 --- /dev/null +++ b/doc/de/member/pic/chat02.png diff --git a/doc/de/member/pic/chat03.png b/doc/de/member/pic/chat03.png Binary files differnew file mode 100644 index 000000000..e92c19272 --- /dev/null +++ b/doc/de/member/pic/chat03.png diff --git a/doc/de/member/pic/code.png b/doc/de/member/pic/code.png Binary files differnew file mode 100644 index 000000000..2bed8e01a --- /dev/null +++ b/doc/de/member/pic/code.png diff --git a/doc/de/member/pic/contfilter01.png b/doc/de/member/pic/contfilter01.png Binary files differnew file mode 100644 index 000000000..e6510c75e --- /dev/null +++ b/doc/de/member/pic/contfilter01.png diff --git a/doc/de/member/pic/contfilter02.png b/doc/de/member/pic/contfilter02.png Binary files differnew file mode 100644 index 000000000..84c7726d2 --- /dev/null +++ b/doc/de/member/pic/contfilter02.png diff --git a/doc/de/member/pic/croles1.png b/doc/de/member/pic/croles1.png Binary files differnew file mode 100644 index 000000000..d1d6d6fed --- /dev/null +++ b/doc/de/member/pic/croles1.png diff --git a/doc/de/member/pic/croles2.png b/doc/de/member/pic/croles2.png Binary files differnew file mode 100644 index 000000000..39f5c0d4f --- /dev/null +++ b/doc/de/member/pic/croles2.png diff --git a/doc/de/member/pic/dateien01.png b/doc/de/member/pic/dateien01.png Binary files differnew file mode 100644 index 000000000..bd5792ce8 --- /dev/null +++ b/doc/de/member/pic/dateien01.png diff --git a/doc/de/member/pic/dateien02.png b/doc/de/member/pic/dateien02.png Binary files differnew file mode 100644 index 000000000..1891bbdf5 --- /dev/null +++ b/doc/de/member/pic/dateien02.png diff --git a/doc/de/member/pic/dateien03.png b/doc/de/member/pic/dateien03.png Binary files differnew file mode 100644 index 000000000..6a9cd8f49 --- /dev/null +++ b/doc/de/member/pic/dateien03.png diff --git a/doc/de/member/pic/einst01.png b/doc/de/member/pic/einst01.png Binary files differnew file mode 100644 index 000000000..aa3855cc4 --- /dev/null +++ b/doc/de/member/pic/einst01.png diff --git a/doc/de/member/pic/einst02.png b/doc/de/member/pic/einst02.png Binary files differnew file mode 100644 index 000000000..c2661f3f0 --- /dev/null +++ b/doc/de/member/pic/einst02.png diff --git a/doc/de/member/pic/einst03.png b/doc/de/member/pic/einst03.png Binary files differnew file mode 100644 index 000000000..2409c006d --- /dev/null +++ b/doc/de/member/pic/einst03.png diff --git a/doc/de/member/pic/feateinst01.png b/doc/de/member/pic/feateinst01.png Binary files differnew file mode 100644 index 000000000..133c3543a --- /dev/null +++ b/doc/de/member/pic/feateinst01.png diff --git a/doc/de/member/pic/feateinst02.png b/doc/de/member/pic/feateinst02.png Binary files differnew file mode 100644 index 000000000..317d2704d --- /dev/null +++ b/doc/de/member/pic/feateinst02.png diff --git a/doc/de/member/pic/feateinst03.png b/doc/de/member/pic/feateinst03.png Binary files differnew file mode 100644 index 000000000..860fd3802 --- /dev/null +++ b/doc/de/member/pic/feateinst03.png diff --git a/doc/de/member/pic/feateinst04.png b/doc/de/member/pic/feateinst04.png Binary files differnew file mode 100644 index 000000000..ea5235fd8 --- /dev/null +++ b/doc/de/member/pic/feateinst04.png diff --git a/doc/de/member/pic/feateinst05.png b/doc/de/member/pic/feateinst05.png Binary files differnew file mode 100644 index 000000000..3aacf571a --- /dev/null +++ b/doc/de/member/pic/feateinst05.png diff --git a/doc/de/member/pic/feateinst06.png b/doc/de/member/pic/feateinst06.png Binary files differnew file mode 100644 index 000000000..0de2cc05a --- /dev/null +++ b/doc/de/member/pic/feateinst06.png diff --git a/doc/de/member/pic/feateinst07.png b/doc/de/member/pic/feateinst07.png Binary files differnew file mode 100644 index 000000000..434c98ffe --- /dev/null +++ b/doc/de/member/pic/feateinst07.png diff --git a/doc/de/member/pic/feateinst08.png b/doc/de/member/pic/feateinst08.png Binary files differnew file mode 100644 index 000000000..1dd96e460 --- /dev/null +++ b/doc/de/member/pic/feateinst08.png diff --git a/doc/de/member/pic/feateinst09.png b/doc/de/member/pic/feateinst09.png Binary files differnew file mode 100644 index 000000000..8babe1599 --- /dev/null +++ b/doc/de/member/pic/feateinst09.png diff --git a/doc/de/member/pic/feateinst10.png b/doc/de/member/pic/feateinst10.png Binary files differnew file mode 100644 index 000000000..12a87d72a --- /dev/null +++ b/doc/de/member/pic/feateinst10.png diff --git a/doc/de/member/pic/feateinst11.png b/doc/de/member/pic/feateinst11.png Binary files differnew file mode 100644 index 000000000..26d1d371f --- /dev/null +++ b/doc/de/member/pic/feateinst11.png diff --git a/doc/de/member/pic/font.png b/doc/de/member/pic/font.png Binary files differnew file mode 100644 index 000000000..598448ce7 --- /dev/null +++ b/doc/de/member/pic/font.png diff --git a/doc/de/member/pic/fotos01.png b/doc/de/member/pic/fotos01.png Binary files differnew file mode 100644 index 000000000..2a617e74a --- /dev/null +++ b/doc/de/member/pic/fotos01.png diff --git a/doc/de/member/pic/fotos02.png b/doc/de/member/pic/fotos02.png Binary files differnew file mode 100644 index 000000000..ead6a7b82 --- /dev/null +++ b/doc/de/member/pic/fotos02.png diff --git a/doc/de/member/pic/fotos03.png b/doc/de/member/pic/fotos03.png Binary files differnew file mode 100644 index 000000000..541ebecb4 --- /dev/null +++ b/doc/de/member/pic/fotos03.png diff --git a/doc/de/member/pic/fotos04.png b/doc/de/member/pic/fotos04.png Binary files differnew file mode 100644 index 000000000..2f180346c --- /dev/null +++ b/doc/de/member/pic/fotos04.png diff --git a/doc/de/member/pic/galerie01.png b/doc/de/member/pic/galerie01.png Binary files differnew file mode 100644 index 000000000..6746cc154 --- /dev/null +++ b/doc/de/member/pic/galerie01.png diff --git a/doc/de/member/pic/hbar.png b/doc/de/member/pic/hbar.png Binary files differnew file mode 100644 index 000000000..10594f231 --- /dev/null +++ b/doc/de/member/pic/hbar.png diff --git a/doc/de/member/pic/highlited.png b/doc/de/member/pic/highlited.png Binary files differnew file mode 100644 index 000000000..4dc0224f1 --- /dev/null +++ b/doc/de/member/pic/highlited.png diff --git a/doc/de/member/pic/image.png b/doc/de/member/pic/image.png Binary files differnew file mode 100644 index 000000000..ecb300cd2 --- /dev/null +++ b/doc/de/member/pic/image.png diff --git a/doc/de/member/pic/inhber01.png b/doc/de/member/pic/inhber01.png Binary files differnew file mode 100644 index 000000000..03f7f7113 --- /dev/null +++ b/doc/de/member/pic/inhber01.png diff --git a/doc/de/member/pic/inhber02.png b/doc/de/member/pic/inhber02.png Binary files differnew file mode 100644 index 000000000..d302f8730 --- /dev/null +++ b/doc/de/member/pic/inhber02.png diff --git a/doc/de/member/pic/inhber03.png b/doc/de/member/pic/inhber03.png Binary files differnew file mode 100644 index 000000000..5910fbb44 --- /dev/null +++ b/doc/de/member/pic/inhber03.png diff --git a/doc/de/member/pic/inhber04.png b/doc/de/member/pic/inhber04.png Binary files differnew file mode 100644 index 000000000..e77d8e27a --- /dev/null +++ b/doc/de/member/pic/inhber04.png diff --git a/doc/de/member/pic/inhber05.png b/doc/de/member/pic/inhber05.png Binary files differnew file mode 100644 index 000000000..a407f2d92 --- /dev/null +++ b/doc/de/member/pic/inhber05.png diff --git a/doc/de/member/pic/inhber06.png b/doc/de/member/pic/inhber06.png Binary files differnew file mode 100644 index 000000000..9b740ffd1 --- /dev/null +++ b/doc/de/member/pic/inhber06.png diff --git a/doc/de/member/pic/interag01.png b/doc/de/member/pic/interag01.png Binary files differnew file mode 100644 index 000000000..3a0eeac65 --- /dev/null +++ b/doc/de/member/pic/interag01.png diff --git a/doc/de/member/pic/interag02.png b/doc/de/member/pic/interag02.png Binary files differnew file mode 100644 index 000000000..94cd80cad --- /dev/null +++ b/doc/de/member/pic/interag02.png diff --git a/doc/de/member/pic/interag03.png b/doc/de/member/pic/interag03.png Binary files differnew file mode 100644 index 000000000..c97f4eaab --- /dev/null +++ b/doc/de/member/pic/interag03.png diff --git a/doc/de/member/pic/kalender01.png b/doc/de/member/pic/kalender01.png Binary files differnew file mode 100644 index 000000000..8fbd2a75a --- /dev/null +++ b/doc/de/member/pic/kalender01.png diff --git a/doc/de/member/pic/kalender02.png b/doc/de/member/pic/kalender02.png Binary files differnew file mode 100644 index 000000000..f09858820 --- /dev/null +++ b/doc/de/member/pic/kalender02.png diff --git a/doc/de/member/pic/kalender03.png b/doc/de/member/pic/kalender03.png Binary files differnew file mode 100644 index 000000000..88009d2f7 --- /dev/null +++ b/doc/de/member/pic/kalender03.png diff --git a/doc/de/member/pic/kalender04.png b/doc/de/member/pic/kalender04.png Binary files differnew file mode 100644 index 000000000..1d91f90d9 --- /dev/null +++ b/doc/de/member/pic/kalender04.png diff --git a/doc/de/member/pic/kalender05.png b/doc/de/member/pic/kalender05.png Binary files differnew file mode 100644 index 000000000..965e43e7c --- /dev/null +++ b/doc/de/member/pic/kalender05.png diff --git a/doc/de/member/pic/kaneinst01.png b/doc/de/member/pic/kaneinst01.png Binary files differnew file mode 100644 index 000000000..943cb1bf5 --- /dev/null +++ b/doc/de/member/pic/kaneinst01.png diff --git a/doc/de/member/pic/kaneinst02.png b/doc/de/member/pic/kaneinst02.png Binary files differnew file mode 100644 index 000000000..5ef0f309f --- /dev/null +++ b/doc/de/member/pic/kaneinst02.png diff --git a/doc/de/member/pic/kanloe.png b/doc/de/member/pic/kanloe.png Binary files differnew file mode 100644 index 000000000..0cf340d88 --- /dev/null +++ b/doc/de/member/pic/kanloe.png diff --git a/doc/de/member/pic/klone01.png b/doc/de/member/pic/klone01.png Binary files differnew file mode 100644 index 000000000..33092c473 --- /dev/null +++ b/doc/de/member/pic/klone01.png diff --git a/doc/de/member/pic/klone02.png b/doc/de/member/pic/klone02.png Binary files differnew file mode 100644 index 000000000..648f5d431 --- /dev/null +++ b/doc/de/member/pic/klone02.png diff --git a/doc/de/member/pic/klone03.png b/doc/de/member/pic/klone03.png Binary files differnew file mode 100644 index 000000000..5d05b08cb --- /dev/null +++ b/doc/de/member/pic/klone03.png diff --git a/doc/de/member/pic/klone04.png b/doc/de/member/pic/klone04.png Binary files differnew file mode 100644 index 000000000..a4347a608 --- /dev/null +++ b/doc/de/member/pic/klone04.png diff --git a/doc/de/member/pic/klone05.png b/doc/de/member/pic/klone05.png Binary files differnew file mode 100644 index 000000000..49c08b4ef --- /dev/null +++ b/doc/de/member/pic/klone05.png diff --git a/doc/de/member/pic/klone06.png b/doc/de/member/pic/klone06.png Binary files differnew file mode 100644 index 000000000..0d3ad85d7 --- /dev/null +++ b/doc/de/member/pic/klone06.png diff --git a/doc/de/member/pic/kloneinst01.png b/doc/de/member/pic/kloneinst01.png Binary files differnew file mode 100644 index 000000000..f87a25b00 --- /dev/null +++ b/doc/de/member/pic/kloneinst01.png diff --git a/doc/de/member/pic/kmerkmale.png b/doc/de/member/pic/kmerkmale.png Binary files differnew file mode 100644 index 000000000..f9d603f5c --- /dev/null +++ b/doc/de/member/pic/kmerkmale.png diff --git a/doc/de/member/pic/kommentieren.png b/doc/de/member/pic/kommentieren.png Binary files differnew file mode 100644 index 000000000..1f8bb790e --- /dev/null +++ b/doc/de/member/pic/kommentieren.png diff --git a/doc/de/member/pic/ktoeinst01.png b/doc/de/member/pic/ktoeinst01.png Binary files differnew file mode 100644 index 000000000..4081e7b58 --- /dev/null +++ b/doc/de/member/pic/ktoeinst01.png diff --git a/doc/de/member/pic/ktoloe.png b/doc/de/member/pic/ktoloe.png Binary files differnew file mode 100644 index 000000000..51e82e7b7 --- /dev/null +++ b/doc/de/member/pic/ktoloe.png diff --git a/doc/de/member/pic/mauth.png b/doc/de/member/pic/mauth.png Binary files differnew file mode 100644 index 000000000..5e624124b --- /dev/null +++ b/doc/de/member/pic/mauth.png diff --git a/doc/de/member/pic/nsfw01.png b/doc/de/member/pic/nsfw01.png Binary files differnew file mode 100644 index 000000000..17509786f --- /dev/null +++ b/doc/de/member/pic/nsfw01.png diff --git a/doc/de/member/pic/nsfw02.png b/doc/de/member/pic/nsfw02.png Binary files differnew file mode 100644 index 000000000..9b5285a27 --- /dev/null +++ b/doc/de/member/pic/nsfw02.png diff --git a/doc/de/member/pic/nsfw03.png b/doc/de/member/pic/nsfw03.png Binary files differnew file mode 100644 index 000000000..6777a5b5a --- /dev/null +++ b/doc/de/member/pic/nsfw03.png diff --git a/doc/de/member/pic/nsfw04.png b/doc/de/member/pic/nsfw04.png Binary files differnew file mode 100644 index 000000000..578776870 --- /dev/null +++ b/doc/de/member/pic/nsfw04.png diff --git a/doc/de/member/pic/ordner01.png b/doc/de/member/pic/ordner01.png Binary files differnew file mode 100644 index 000000000..3c5c5d181 --- /dev/null +++ b/doc/de/member/pic/ordner01.png diff --git a/doc/de/member/pic/ordner02.png b/doc/de/member/pic/ordner02.png Binary files differnew file mode 100644 index 000000000..d7340c2a1 --- /dev/null +++ b/doc/de/member/pic/ordner02.png diff --git a/doc/de/member/pic/ordner03.png b/doc/de/member/pic/ordner03.png Binary files differnew file mode 100644 index 000000000..81577e40a --- /dev/null +++ b/doc/de/member/pic/ordner03.png diff --git a/doc/de/member/pic/ordner04.png b/doc/de/member/pic/ordner04.png Binary files differnew file mode 100644 index 000000000..f20440b85 --- /dev/null +++ b/doc/de/member/pic/ordner04.png diff --git a/doc/de/member/pic/pgroups01.png b/doc/de/member/pic/pgroups01.png Binary files differnew file mode 100644 index 000000000..2c2654f40 --- /dev/null +++ b/doc/de/member/pic/pgroups01.png diff --git a/doc/de/member/pic/pgroups02.png b/doc/de/member/pic/pgroups02.png Binary files differnew file mode 100644 index 000000000..0a35c3ded --- /dev/null +++ b/doc/de/member/pic/pgroups02.png diff --git a/doc/de/member/pic/pgroups03.png b/doc/de/member/pic/pgroups03.png Binary files differnew file mode 100644 index 000000000..fba19a8cc --- /dev/null +++ b/doc/de/member/pic/pgroups03.png diff --git a/doc/de/member/pic/priveinst01.png b/doc/de/member/pic/priveinst01.png Binary files differnew file mode 100644 index 000000000..bdf645d07 --- /dev/null +++ b/doc/de/member/pic/priveinst01.png diff --git a/doc/de/member/pic/qrcode.png b/doc/de/member/pic/qrcode.png Binary files differnew file mode 100644 index 000000000..0db383feb --- /dev/null +++ b/doc/de/member/pic/qrcode.png diff --git a/doc/de/member/pic/quellcode.png b/doc/de/member/pic/quellcode.png Binary files differnew file mode 100644 index 000000000..d21df87f5 --- /dev/null +++ b/doc/de/member/pic/quellcode.png diff --git a/doc/de/member/pic/quote.png b/doc/de/member/pic/quote.png Binary files differnew file mode 100644 index 000000000..cef0df619 --- /dev/null +++ b/doc/de/member/pic/quote.png diff --git a/doc/de/member/pic/red.png b/doc/de/member/pic/red.png Binary files differnew file mode 100644 index 000000000..227f8ccda --- /dev/null +++ b/doc/de/member/pic/red.png diff --git a/doc/de/member/pic/size.png b/doc/de/member/pic/size.png Binary files differnew file mode 100644 index 000000000..f87ab74cf --- /dev/null +++ b/doc/de/member/pic/size.png diff --git a/doc/de/member/pic/statusfilter.png b/doc/de/member/pic/statusfilter.png Binary files differnew file mode 100644 index 000000000..3e5225535 --- /dev/null +++ b/doc/de/member/pic/statusfilter.png diff --git a/doc/de/member/pic/stern.png b/doc/de/member/pic/stern.png Binary files differnew file mode 100644 index 000000000..f289ba55d --- /dev/null +++ b/doc/de/member/pic/stern.png diff --git a/doc/de/member/pic/streinst01.png b/doc/de/member/pic/streinst01.png Binary files differnew file mode 100644 index 000000000..79499a782 --- /dev/null +++ b/doc/de/member/pic/streinst01.png diff --git a/doc/de/member/pic/suche01.png b/doc/de/member/pic/suche01.png Binary files differnew file mode 100644 index 000000000..5c35a1e0e --- /dev/null +++ b/doc/de/member/pic/suche01.png diff --git a/doc/de/member/pic/suche02.png b/doc/de/member/pic/suche02.png Binary files differnew file mode 100644 index 000000000..5ec69f0f0 --- /dev/null +++ b/doc/de/member/pic/suche02.png diff --git a/doc/de/member/pic/suche03.png b/doc/de/member/pic/suche03.png Binary files differnew file mode 100644 index 000000000..45373bddf --- /dev/null +++ b/doc/de/member/pic/suche03.png diff --git a/doc/de/member/pic/table1.png b/doc/de/member/pic/table1.png Binary files differnew file mode 100644 index 000000000..99a4fb9a0 --- /dev/null +++ b/doc/de/member/pic/table1.png diff --git a/doc/de/member/pic/table2.png b/doc/de/member/pic/table2.png Binary files differnew file mode 100644 index 000000000..ed241a6d6 --- /dev/null +++ b/doc/de/member/pic/table2.png diff --git a/doc/de/member/pic/table3.png b/doc/de/member/pic/table3.png Binary files differnew file mode 100644 index 000000000..9b7acceb3 --- /dev/null +++ b/doc/de/member/pic/table3.png diff --git a/doc/de/member/pic/teilen.png b/doc/de/member/pic/teilen.png Binary files differnew file mode 100644 index 000000000..1481c9ccf --- /dev/null +++ b/doc/de/member/pic/teilen.png diff --git a/doc/de/member/pic/verbindungen01.png b/doc/de/member/pic/verbindungen01.png Binary files differnew file mode 100644 index 000000000..519370df2 --- /dev/null +++ b/doc/de/member/pic/verbindungen01.png diff --git a/doc/de/member/pic/verbindungen02.png b/doc/de/member/pic/verbindungen02.png Binary files differnew file mode 100644 index 000000000..37333e87f --- /dev/null +++ b/doc/de/member/pic/verbindungen02.png diff --git a/doc/de/member/pic/verbindungen03.png b/doc/de/member/pic/verbindungen03.png Binary files differnew file mode 100644 index 000000000..69e32a688 --- /dev/null +++ b/doc/de/member/pic/verbindungen03.png diff --git a/doc/de/member/pic/verbindungen04.png b/doc/de/member/pic/verbindungen04.png Binary files differnew file mode 100644 index 000000000..0b032ef3d --- /dev/null +++ b/doc/de/member/pic/verbindungen04.png diff --git a/doc/de/member/pic/verbindungen05.png b/doc/de/member/pic/verbindungen05.png Binary files differnew file mode 100644 index 000000000..0a48cd425 --- /dev/null +++ b/doc/de/member/pic/verbindungen05.png diff --git a/doc/de/member/pic/verbindungen06.png b/doc/de/member/pic/verbindungen06.png Binary files differnew file mode 100644 index 000000000..3ac1ba628 --- /dev/null +++ b/doc/de/member/pic/verbindungen06.png diff --git a/doc/de/member/pic/verzeichnis.png b/doc/de/member/pic/verzeichnis.png Binary files differnew file mode 100644 index 000000000..397d42efb --- /dev/null +++ b/doc/de/member/pic/verzeichnis.png diff --git a/doc/de/member/pic/video_poster.png b/doc/de/member/pic/video_poster.png Binary files differnew file mode 100644 index 000000000..f2151abd1 --- /dev/null +++ b/doc/de/member/pic/video_poster.png diff --git a/doc/de/member/pic/webseiten01.png b/doc/de/member/pic/webseiten01.png Binary files differnew file mode 100644 index 000000000..9ab33fe6e --- /dev/null +++ b/doc/de/member/pic/webseiten01.png diff --git a/doc/de/member/pic/webseiten02.png b/doc/de/member/pic/webseiten02.png Binary files differnew file mode 100644 index 000000000..aab2db3ce --- /dev/null +++ b/doc/de/member/pic/webseiten02.png diff --git a/doc/de/member/pic/webseiten03.png b/doc/de/member/pic/webseiten03.png Binary files differnew file mode 100644 index 000000000..424aa702e --- /dev/null +++ b/doc/de/member/pic/webseiten03.png diff --git a/doc/de/member/pic/webseiten04.png b/doc/de/member/pic/webseiten04.png Binary files differnew file mode 100644 index 000000000..c0c34bc5c --- /dev/null +++ b/doc/de/member/pic/webseiten04.png diff --git a/doc/de/member/pic/webseiten05.png b/doc/de/member/pic/webseiten05.png Binary files differnew file mode 100644 index 000000000..7f16b1e35 --- /dev/null +++ b/doc/de/member/pic/webseiten05.png diff --git a/doc/de/member/pic/webseiten06.png b/doc/de/member/pic/webseiten06.png Binary files differnew file mode 100644 index 000000000..dd22b6ed7 --- /dev/null +++ b/doc/de/member/pic/webseiten06.png diff --git a/doc/de/member/pic/wiki01.png b/doc/de/member/pic/wiki01.png Binary files differnew file mode 100644 index 000000000..bd59ed0cf --- /dev/null +++ b/doc/de/member/pic/wiki01.png diff --git a/doc/de/member/pic/wiki02.png b/doc/de/member/pic/wiki02.png Binary files differnew file mode 100644 index 000000000..f55a66706 --- /dev/null +++ b/doc/de/member/pic/wiki02.png diff --git a/doc/de/member/pic/wiki03.png b/doc/de/member/pic/wiki03.png Binary files differnew file mode 100644 index 000000000..97dfad139 --- /dev/null +++ b/doc/de/member/pic/wiki03.png diff --git a/doc/de/member/pic/wiki04.png b/doc/de/member/pic/wiki04.png Binary files differnew file mode 100644 index 000000000..a48aec8b4 --- /dev/null +++ b/doc/de/member/pic/wiki04.png diff --git a/doc/de/member/posting.md b/doc/de/member/posting.md new file mode 100644 index 000000000..81a6ed99b --- /dev/null +++ b/doc/de/member/posting.md @@ -0,0 +1,17 @@ +### Posten + +Möchten Sie einen Beitrag verfassen und teilen (veröffentlichen, wobei der Kreis der Empfänger bzw. derer, welche den Beitrag sehen können, eingeschränkt sein kann), so tun Sie dies in der Regel über das Feld "Teilen", das sich über dem Stream befindet. Klicken Sie in dieses Feld, öffnet sich der Beitragseditor. + +Zu oberst gibt es das Feld für den Beitragstitel (optional), darunter befindet sich das Feld für die Zusammenfassung (Summary, ebenfalls optional nutzbar), sofern der Administrator Ihres Hubs diese Funktion erlaubt. Die Zusammenfassung kann auch für den Zweck einer Inhaltswarnung verwendet werden. Unter dem Feld für die Zusammenfassung befindet sich (sofern vom Admin aktiviert) ein Feld für Kategorien. + +Darunter folgt das Textfeld, in welchem Sie den Beitragsinhalt erstellen können. Sie können, je nach Einstellung des Hubs, einfachen Text, Markdown, bbCode oder HTML für Formatierungen des Textes nutzen. + +Am unteren Rand des Beitragseditors befinden sich einige Schaltflächen zur einfacheren Formatierung des Inhalts und für das einfügen von Elementen und das Nutzen zusätzlicher Funktionen: fett, kursiv, unterstrichen, Zitat, Code, Datei anhängen/hochladen, Link einfügen, Bild einfügen (ein unter Dateien bereits existierendes Bild), Standort einfügen, Verfallsdatum für den Beitrag festlegen, Veröffentlichungsdatum festlegen, Text verschlüsseln, Abstimmung (Umfrage) ein/aus, Kommentare deaktivieren. Rechts daneben befindet sich ein weiterer Block mit Schaltflächen. Hier kann man sich eine Vorschau des Beitrags anzeigen lassen, festlegen, ob der Beitrag ggf. noch bei anderen Netzwerken veröffentlicht wird, die Berechtigungs-Einstellungen (wer kann das Posting sehen) vornehmen und mit dem Button "Teilen" schließlich veröffentlichen. + + + +Man erreicht den Beitrags-Editor auch, wenn man den entsprechenden Menüpunkt im App-Menü (oben rechts ⋮) auswählt oder das entsprechende Icon in der Navigationsleiste (sofern man die App "Beitrag schreiben" angepinnt hat). + +#include doc/de/member/commenting.md; +#include doc/de/member/insert_images.md; +#include doc/de/member/bbcode.md; diff --git a/doc/de/member/privacy_groups.md b/doc/de/member/privacy_groups.md new file mode 100644 index 000000000..4a398b8e9 --- /dev/null +++ b/doc/de/member/privacy_groups.md @@ -0,0 +1,23 @@ +### Privacy Gruppen + +Die App "Privacy Gruppen" erlaubt Ihnen das Anlegen von Gruppen, denen Sie Kontakte zuordnen können. Sie dienen einerseits dem Filtern des Streams (so kann man sich nur Beiträge von Nutzern anzeigen lassen, welche sich in einer Privacy Gruppe befinden) und andererseits erlauben sie es, in Bezug auf [Berechtigungen](/help/de/member/permissions_contact_roles.md), bestimmten Gruppen Rechte an Inhalten einzuräumen. + +Die erste Funktion ist einfach zu verstehen. Hat man Kontakte (ein Kontakt kann durchaus auch in mehreren Gruppen vorhanden sein) in einer Gruppe und wählt man in der linken Seitenleiste bei der Stream-Ansicht eine bestimmte Gruppe aus, so werden nur Beiträge von Kontakten angezeigt, die sich in der Gruppe befinden. Diese Funktion fungiert also als Stream-Filter. + +Die zweite Funktion ist auch einfach zu begreifen, aber eher ungewohnt für viele Fediverse-Nutzer, da es sie in dieser Form nur bei Hubzilla und verwandten Diensten (Streams, Friendica etc.) gibt. Wie die Bezeichnung "Privacy Gruppen" nahelegt, geht es hier auch um eine beschränkte Kommunikation. Wählt man beim Verfassen eines Beitrags als Berechtigung eine Gruppe aus, so wird das Posting nur an die Kontakte, die in dieser Gruppe enthalten sind, verteilt und nur diese können es sehen. Es ist den Empfängern (Gruppenmitglieder) auch nicht möglich, ein solches Posting öffentlich zu teilen. Damit kann eine geschlossene Gruppenkommunikation realisiert werden. + +Ruft man die App auf, werden in der linken Seitenleiste bereits vorhandene Gruppen angezeigt und in der Hauptansicht das Eingabeformular zum Erstellen einer neuen Gruppe. + + + +Wählt man in der Seitenleiste eine der Gruppen auf, so kann man diese bearbeiten. + + + +Hier kann auch die Mitgliedschaft für Kontakte festgelegt werden. Ein Klick auf einen Eintrag wechselt die Mitgliedschaft zwischen "Nicht in der Gruppe" und "Gruppenmitgliedschaft". So kann man Mitglieder aus einer Gruppe entfernen oder Nutzer als Gruppenmitglieder hinzufügen. + +Das Hinzufügen eines Kontakt zu einer Gruppe kann auch in der App "Verbindungen" mit dem Kontakt-Tool erfolgen: + + + +Um eine neue Gruppe hinzuzufügen, klickt man in der Seitenleiste auf den Eintrag "+ Neue Gruppe hinzufügen". diff --git a/doc/de/member/privacy_settings.md b/doc/de/member/privacy_settings.md new file mode 100644 index 000000000..ad5aed9c7 --- /dev/null +++ b/doc/de/member/privacy_settings.md @@ -0,0 +1,6 @@ +#### Privacy Einstellungen + +In den Privacy-Einstellungen können Sie festlegen, ob Ihre eigenen Beiträge durch Suchmaschinen indiziert werden dürfen, ob Sie Kontaktanfragen automatisch (ohne manuelle Genehmigung) akzeptieren, ob alle Nachrichten in denen Sie erwähnt werden, automatisch akzeptiert werden, ob Kommentare von Nutzern, die nicht zu Ihren Kontakten gehören, zur Moderation (freigeben / verwerfen) gestellt oder gelöscht werden und ob Sie OCAP-Zugriff erlauben. + + + diff --git a/doc/de/member/profiles.md b/doc/de/member/profiles.md new file mode 100644 index 000000000..0fbcebe7b --- /dev/null +++ b/doc/de/member/profiles.md @@ -0,0 +1,23 @@ +### Profile + +Hubzilla hat unbegrenzte Profile. Sie können verschiedene Profile verwenden, um verschiedene „Seiten von sich selbst“ für verschiedene Zielgruppen zu zeigen. Das ist etwas anderes als verschiedene Kanäle zu haben. Verschiedene Kanäle ermöglichen völlig unterschiedliche Informationen. Sie können einen Kanal für sich selbst, einen Kanal für Ihr Sportteam, einen Kanal für Ihre Website oder etwas anderes haben. Ein Profil ermöglicht fein abgestufte „Seiten“ eines jeden Kanals. Verschiedene Profile könnte man mit verschiedenen Visitenkarten einer Person vergleichen. Je nach Verwendungszweck werden auf der jeweiligen Visitenkarte unterschiedliche Informationen gegeben. Ihr öffentliches Standardprofil könnte zum Beispiel lauten: „Hallo, ich bin Fred und ich lache gerne“. Ihren engen Freunden können Sie ein Profil zeigen, auf dem steht „und ich werfe auch gerne Zwerge“. + +Sie haben immer ein Profil, das als Ihr „Standard-“ oder „öffentliches“ Profil bezeichnet wird. Dieses Profil ist immer für die Allgemeinheit zugänglich und kann nicht versteckt werden (es kann seltene Ausnahmen auf privat betriebenen oder nicht angeschlossenen Sites geben). Sie können und sollten die Informationen, die Sie in Ihrem öffentlichen Profil zur Verfügung stellen, einschränken. + +Wenn Sie möchten, dass Ihre Freunde Sie finden können, ist es hilfreich, wenn Sie die folgenden Informationen in Ihrem öffentlichen Profil angeben... + +- Ihr richtiger Name oder zumindest ein Spitzname, den jeder kennt +- Ein Foto von Ihnen +- Ihr Standort auf der Erde, zumindest auf Länderebene. + +Wenn Sie außerdem Leute treffen möchten, die allgemeine Interessen mit Ihnen teilen, nehmen Sie sich bitte einen Moment Zeit und fügen Sie Ihrem Profil einige „Schlüsselwörter“ hinzu. Zum Beispiel „Musik, Linux, Fotografie“ oder ähnliches. Sie können so viele Stichwörter hinzufügen, wie Sie möchten. + +Wählen Sie „Profile bearbeiten“ aus dem Menü Ihrer Hubzilla-Site. Sie können ein bestehendes Profil bearbeiten, das Profilfoto ändern, Dinge zu einem Profil hinzufügen oder ein neues Profil erstellen. Sie können auch einen „Klon“ eines bestehenden Profils erstellen, wenn Sie nur ein paar Dinge ändern möchten, aber nicht alle Informationen erneut eingeben wollen. Klicken Sie dazu auf das Profil, das Sie klonen möchten, und wählen Sie dort „Dieses Profil klonen“. + +In der Liste Ihrer Profile können Sie auch die Kontakte auswählen, die ein bestimmtes Profil sehen können. Klicken Sie einfach auf „Sichtbarkeit bearbeiten“ neben dem betreffenden Profil (nur verfügbar für Profile, die nicht Ihr Standardprofil sind) und klicken Sie dann auf bestimmte Verbindungen, um sie zu der Gruppe von Personen, die dieses Profil sehen können, hinzuzufügen oder sie daraus zu entfernen. + +Sobald ein Profil ausgewählt wurde, sieht die Person, die Ihr Profil anschaut, das private Profil, das Sie zugewiesen haben. Wenn die Person nicht authentifiziert ist, wird sie Ihr öffentliches Profil sehen. + +Es gibt eine Einstellung, die es Ihnen ermöglicht, Ihr Profil in einem Verzeichnis zu veröffentlichen und sicherzustellen, dass es von anderen gefunden werden kann. Sie können diese Einstellung auf der Seite „Einstellungen“ ändern. + +Wenn Sie nicht möchten, dass Sie von anderen gefunden werden, ohne ihnen Ihre Kanal-Adresse mitzuteilen, können Sie Ihr Profil unveröffentlicht lassen.
\ No newline at end of file diff --git a/doc/de/member/protection_of_privacy.md b/doc/de/member/protection_of_privacy.md new file mode 100644 index 000000000..e28b61da5 --- /dev/null +++ b/doc/de/member/protection_of_privacy.md @@ -0,0 +1,67 @@ +### Tipps zum Schutz der Privatsphäre + +Wenn Sie großen Wert auf Ihre Privatsphäre legen und trotzdem am Fediverse teilnehmen möchten, ist es erforderlich, dass Sie sich vor und während der Erstellung eines persönlichen Kanals konkrete Gedanken darüber machen, was Sie von sich preisgeben wollen. Das ist bei jedem Fediverse-Dienst so. Bei Hubzilla kommt aber ein anderer, wesentlicher Aspekt dazu. Sie müssen sich nicht nur die Frage über das "Was?" stellen, sondern auch noch über das "Wem?" und das "Welche?". + +Mit Hubzilla legen Sie also nicht nur fest, was Sie von sich preisgeben, sondern auch, wem Sie es erlauben, die Informationen und Inhalte zu sehen. Und wem Sie welche Interaktion erlauben. + +Der Vorteil ist, dass Sie nicht auf einen "Regelsatz" angewiesen sind, sondern verschiedene Regeln für verschiedene Anwendungszwecke und verschiedenen Kontakte festlegen können. + +Ein typischer Anwendungsfall wäre, dass Sie am Fediverse ganz normal so teilnehmen möchten,wie man es von anderen Sozialen Netzwerken kennt. + +Beim Erstellen eines Kanals müssen Sie die erste relevante Entscheidung treffen: **die Kanalrolle**. + +Hier haben Sie die Wahl zwischen "Öffentlich", "Persönlich", "Community Forum" und "Benutzerdefiniert". + +Abgesehen vom "Community Forum", das für andere Anwendungszwecke gedacht ist, haben Sie also die Wahl zwischen drei Rollen. + +Bei der Rolle "Öffentlich" erlauben Sie, dass andere + +1. Ihren Kanal-Stream (also die Beiträge, welche Sie öffentlich teilen) und allgemein Ihre Beiträge sehen können, +2. Ihr Standard-Profil sehen können, +3. Ihre Verbindungen sehen können, +4. Ihre Datei- und Bilderordner sehen können, +5. die Webseiten Ihres Kanals sehen können, +6. die Wiki-Seiten Ihres Kanals sehen können, +7. Ihre Beiträge kommentieren, liken oder disliken dürfen, +8. Ihnen Direktnachrichten schicken dürfen, +9. Ihre Profile und Profilinhalte liken oder disliken dürfen und +10. mit Ihnen chatten dürfen. + +Diese rollenbasierten Regeln bilden recht gut die "normale" Nutzung eines Sozialen Netzwerks ab. + +Die Rolle "Persönlich" ist ähnlich und verweigert nur einige Erlaubnisse der Rolle "Öffentlich". Sie erlaubt, dass andere + +1. Ihren Kanal-Stream (also die Beiträge, welche Sie öffentlich teilen) und allgemein Ihre Beiträge sehen können, +2. Ihr Standard-Profil sehen können, +3. ./. +4. Ihre Datei- und Bilderordner sehen können, +5. die Webseiten Ihres Kanals sehen können, +6. die Wiki-Seiten Ihres Kanals sehen können, +7. ./. +8. ./. +9. ./. +10. ./. + +Mit diesem Profil ist die Interaktion durch andere Nutzer eingeschränkt, denn diese dürfen Ihre Beiträge nicht kommentieren, liken, disliken (letzteres auch nicht in Bezug auf Ihre Profile/Profilinhalte). Sie dürfen Ihnen auch keine Direktnachrichten schicken oder mit Ihnen chatten. + +Die Rolle "Benutzerdefiniert" erlaubt es Ihnen, sämtliche Berechtigungen einzeln festzulegen. Hier ist Vorsicht geboten, weil unpassende Regeln einen Kanal halbwegs "unbenutzbar" machen können. + +Für die angedachte Nutzung als "typischer Social Network Account" empfiehlt sich die Wahl der Rolle "Öffentlich" oder "Persönlich". + +Wenn Sie sich nun eher für die Rolle "persönlich" entscheiden würden, aber trotzdem gerne weitergehende Interaktion mit bestimmten Nutzern (Freund, Familie, Kollegen, o.ä.) erlauben würden, müssen Sie deshalb nicht auf die Rolle "Öffentlich" zurückgreifen. + +Hubzilla funktioniert bei den Berechtigungen mit Whitelists (Erlaubnislisten). Die Kanalrolle legt also die grundsätzlichen Berechtigungen fest. Diese können Sie nachträglich (abgesehen von der Festlegung von Zugriffsrechten im speziellen Einzelfall eines Inhalts) nicht mit anderen Mechanismen wieder entziehen. + +Sie können aber mittels verschiedener **Kontaktrollen** die Whitelist um verschiedene Berechtigungen erweitern. So könnten Sie z.B. eine Kontaktrolle "Familie" erstellen, in welcher - zusätzlich zu den Berechtigungen, welche die Rolle "Persönlich" einräumt - weitere Berechtigungen (z.B. das Kommentieren, Linke, Disliken und das Senden von Direktnachrichten) gewährt werden. Wenn Sie nun in diesem Beispiel Ihren Kontakten, die Sie als "Familie" definieren, diese Kontaktrolle zuordnen, können Ihre Familienmitglieder - im Gegensatz zu allen anderen - Kommentare verfassen, den Daumen nach oben oder unten zeigen lassen und nicht-öffentlich (Direktnachricht) mit Ihnen kommunizieren. + +Sie können beliebig viele Kontaktrollen für die verschiedensten Zwecke und Kontakte anlegen und dort weitere Berechtigungen, zusätzlich zu denen der Kanalrolle, erteilen. Aber(!): Sie können keine Berechtigung aus der Kanalrolle dort entziehen. + +Es empfiehlt sich also, bei der Kanalrolle nicht zu großzügig zu sein und diese - je nach dem Nutzungszweck des Kanals - entsprechend auszuwählen. Mit der Auswahl "Benutzerdefiniert" könnten Sie z.B. eine noch restriktivere Kanalrolle als die "Persönlich" festlegen und dann für bestimmte Nutzer weitere Berechtigungen mit den Kontaktrollen festlegen (empfehlenswert erst, wenn Sie mit dem Berechtigungssystem wirklich vertraut sind). + +Ein weiterer Aspekt bezüglich der Privatsphäre sind die **Profil**-Informationen. Für eine "typische" Nutzung als Social Network Account, sollten im Profil einige Informationen preisgegeben werden. Ansonsten werden andere Nutzer nicht auf die Idee kommen, sich mit Ihnen zu verbinden. Oder sie wollen eine Verbindung zu einem anderen Nutzer herstellen, doch dieser lehnt dies ab, weil er keinerlei Informationen zu Ihnen hat (es sei denn, er kennt Sie und ihren Kanalnamen). Einige Informationen sollten dort also hinein. + +So viele wie nötig, so wenige wie möglich. + +Genau nach diesem Prinzip sollten sie Ihr Standard-Profil, über welches jeder Kanal verfügt, mit Informationen bestücken. + +Hubzilla erlaubt es aber, mehrere Profile anzulegen. In solchen Profilen können Sie dann weitergehende Informationen angeben, die für bestimmte Verbindungen interessant sein könnten. Sie haben dann die Möglichkeit, solche speziellen Profile für bestimmte Verbindungen freizugeben. Die Informationen tauchen also nicht für jeden sichtbar und öffentlich auf, sondern sie sind nur für die ausgewählten Nutzer verfügbar.
\ No newline at end of file diff --git a/doc/de/member/public_stream.md b/doc/de/member/public_stream.md new file mode 100644 index 000000000..1b9b7774f --- /dev/null +++ b/doc/de/member/public_stream.md @@ -0,0 +1,12 @@ +### Öffentlicher Beitrags-Stream + +Sofern der Administrator eines Hub den öffentlichen Beitrags-Stream aktiviert hat, können Sie als Nutzer die App "Öffentlicher Beitrags-Stream" installieren und aktivieren. + +Während im "normalen" Stream alle Beiträge und Aktivitäten von Ihnen selbst und all Ihren Verbindungen erscheinen, ist der öffentliche Beitrags-Stream umfassender. + +Es gibt zwei Möglichkeiten: + +1. Hat der Administrator den öffentlichen Beitrags-Stream auf den eigenen Hub beschränkt, so erscheinen dort sämtliche öffentlichen Beiträge und Aktivitäten aus den Streams aller Nutzer, die einen Account auf eben diesem Hub haben. +2. Hat der Administrator den öffentlichen Beitrags-Stream nicht auf den eigenen Hub beschränkt, so werden alle öffentlichen Beiträge aller Kanäle des eigene Hub, öffentliche Inhalte, die beim eigenen Hub eintreffen (also .B. Kommentare auf Beiträge der Nutzer des Hubs, die von anderen Instanzen stammen), sowie zufällig eingesammelte Inhalte von Kanälen, die dem eigenen Hub bekannt sind (also alle Kontakte aller Kanäle auf dem eigenen Hub). + +Der öffentliche Beitrags-Stream ist nicht unmoderiert. Der Administrator eines Hub hat die Möglichkeit, Beiträge aus dem öffentlichen Beitrags-Stream zu löschen ("Admin delete"). Diese Beiträge sind dann tatsächlich aus dem öffentlichen Beitragsstream des eigenen Hub gelöscht. Sie erscheinen auch nicht in der öffentlichen Stream-Ansicht anderer Kanäle des Hub.
\ No newline at end of file diff --git a/doc/de/member/registration.md b/doc/de/member/registration.md new file mode 100644 index 000000000..96cbdc574 --- /dev/null +++ b/doc/de/member/registration.md @@ -0,0 +1,19 @@ +### Anmeldung / Registrierung + +Nicht alle Hubzilla-Sites erlauben eine offene Registrierung. Wenn die Registrierung erlaubt ist, sehen Sie einen Link „Registrieren“ direkt neben der Anmeldeaufforderung auf der Homepage der Site. Wenn Sie diesem Link folgen, gelangen Sie auf die Registrierungsseite der Site. Auf einigen Sites werden Sie möglicherweise zu einer anderen Site weitergeleitet, auf der Hubs aufgeführt sind, bei denen eine Registrierung möglich ist. Da alle Hubzilla-Sites miteinander verbunden sind, spielt es keine Rolle, wo sich Ihr Account befindet. + +**Ihre E-Mail-Adresse** + +Bitte geben Sie eine gültige E-Mail-Adresse an. Ihre E-Mail-Adresse wird niemals veröffentlicht. Diese Adresse wird verwendet, um Ihr Konto zu aktivieren, um (optional) E-Mail-Benachrichtigungen für eingehende Nachrichten oder Artikel zu versenden *und um verlorene Passwörter wiederherzustellen*. + +**Kennwort** + +Geben Sie ein Passwort Ihrer Wahl ein und wiederholen Sie es im zweiten Feld, um sicherzustellen, dass es richtig eingegeben wurde. Da Hubzilla eine dezentrale Identität bietet, können Sie sich mit Ihrem Konto bei vielen anderen Websites anmelden. + +**Nutzungsbedingungen** + +Klicken Sie auf den Link, um die <u>Nutzungsbedingungen</u> der Website zu lesen. Wenn Sie sie gelesen haben, bestätigen Sie sie durch Anklicken des Kästchens im Anmeldeformular. + +**Anmelden** + +Sobald Sie die erforderlichen Angaben gemacht haben, klicken Sie auf die Schaltfläche „Registrieren“. Bei einigen Websites ist möglicherweise die Zustimmung des Administrators erforderlich, bevor die Registrierung bearbeitet werden kann; in diesem Fall werden Sie benachrichtigt. Bitte achten Sie auf Ihre E-Mail (einschließlich Spam-Ordner), um die Genehmigung für Ihre Registrierung zu erhalten.
\ No newline at end of file diff --git a/doc/de/member/repeat.md b/doc/de/member/repeat.md new file mode 100644 index 000000000..e354f8059 --- /dev/null +++ b/doc/de/member/repeat.md @@ -0,0 +1,5 @@ +#### Repeat + +Mit dem Repeaten (Wiederholen) von Beiträgen, wird der Beitrag an die eigenen Verbindungen verteilt. Kommentare landen (im Gegensatz zu [geteilten Beiträgen](/help/de/member/share.md)) beim Original-Beitrag. + +Dieses Verhalten entspricht dem "Boosten", wie man es z.B. von Mastodon oder anderen Fediverse-Diensten kennt.
\ No newline at end of file diff --git a/doc/de/member/save_to_folder.md b/doc/de/member/save_to_folder.md new file mode 100644 index 000000000..483959bd2 --- /dev/null +++ b/doc/de/member/save_to_folder.md @@ -0,0 +1,25 @@ +#### In Ordner speichern + +Möchte man sich Postings für später merken, so kann man das durch [Markierung](/help/de/member/toggle_star_status.md) tun. Bei einer großen Zahl solchermaßen gemerkter Postings wird es aber leicht unübersichtlich. + +Praktischer ist es, solche Beiträge in verschiedenen "Ordner" zu speichern. Das sind kategorisierte Markierungen. + +Wählt man "In Ordner speichern", so öffnet sich ein Dialogfenster zur Auswahl des Ordners. + + + +In dem Textfeld kann man einen Ordnernamen vergeben. Sind schon Ordner vorhanden, sorgt ein zweifacher Kick in das Textfeld dafür, dass eine Auswahlliste der vorhandenen Ordner angezeigt wird, um einen davon auszuwählen. + + + +Hat man einen Beitrag in einem Ordner abgelegt, erkennt man dies an Ordersymbol (inklusive Ordnernamen) unten links am Beitrag. + + + +Dieses Symbol dient auch dazu, einen Beitrag wieder aus eienm Ordner zu entfernen, indem man auf das "X" im Symbol klickt. + + + +In der Stream-Ansicht findet man in der linken Seitenleiste den Eintrag "Gespeicherte Ordner". Klickt man darauf werden sämtliche vorhandenen Ordner angezeigt. Wählt man nun einen Ordner aus, so werden sämtliche Postings, die man in diesem Ordner abgelegt hat in (umgekehrter) chronologischer Reihenfolge im Stream angezeigt. + +Dieses Feature ist vergleichbar mit den "Clips" (= kategorisierte Lesezeichen), wie man sie von Misskey und den Forkeys kennt. diff --git a/doc/de/member/search.md b/doc/de/member/search.md new file mode 100644 index 000000000..0fb0a4a6d --- /dev/null +++ b/doc/de/member/search.md @@ -0,0 +1,15 @@ +### Suche + +Um schnell Informationen zu finden, kann die Suche verwendet werden. + +Eine Suche ist über das Symbol in der Navigationsleiste möglich. + + + + + +Hier wird der gesamte Hub durchsucht. Es kann nach Hashtags, Handles und nach Texten gesucht werden. + +In der Kanalansicht ist in der linken Seitenleiste ebenfalls ein Suchfeld vorhanden. Es durchsucht nur den Stream des eigenen Kanals. Suchen, welche in diesem Widget durchgeführt wurden, können auch gespeichert werden, indem man auf das Diskettensymbol neben dem Suchfeld klickt. Die gespeicherte Suche wird dann in einer Liste von Suchbegriffen unter dem Suchfeld angezeigt und kann jederzeit durch einen einfachen Klick wiederholt werden. + + diff --git a/doc/de/member/settings.md b/doc/de/member/settings.md new file mode 100644 index 000000000..910c6e03d --- /dev/null +++ b/doc/de/member/settings.md @@ -0,0 +1,37 @@ +### Einstellungen + +Hubzilla erlaubt vielfältige Einstellungen zu Verhalten, Optik, Features,Kanälen etc. + +Sie erreichen die meisten Einstellungen über das Hauptmenü, wo Sie den Menüpunkt Einstellungen finden. + + + + + +Es werden verschiedene Einstellungs-Kategorien zur Verfügung gestellt: + +- Konto-Einstellungen +- Kanal-Einstellungen +- Privacy-Einstellungen +- Anzeige-Einstellungen +- sofern Klone des eigenen Kanals existieren: Klon-Adressen verwalten + +Befinden Sie sich in der Stream Ansicht, ist ein neben dem Hauptmenü ein kleines Zahnrad (⚙)zu sehen,über welches Sie die + +- Stream-Einstellungen + +erreichen. + +Außerdem gibt es noch verborgene Einstellungen + +- Zusätzliche Funktionen + +welche Sie jedoch nicht über das Menü oder ein Icon erreichen können. + +#include doc/de/usermanual/account_settings.md; +#include doc/de/usermanual/channel_settings.md; +#include doc/de/usermanual/privacy_settings.md; +#include doc/de/usermanual/display_settings.md; +#include doc/de/usermanual/channel_locations.md; +#include doc/de/usermanual/stream_settings.md; +#include doc/de/usermanual/additional_features.md; diff --git a/doc/de/member/share.md b/doc/de/member/share.md new file mode 100644 index 000000000..a7148f731 --- /dev/null +++ b/doc/de/member/share.md @@ -0,0 +1,5 @@ +#### Teilen + +Mit dem Teilen (Weitersagen) von Beiträgen wird ein Beitrag eines anderen Nutzers auf dem eigenen Kanal erneut gepostet. Es wird eine neue Konversation im eigenen Kanal erzeugt. Kommentare dazu landen bei der neuen Konversation und nicht bei der ursprünglichen. + +Das Teilen von Beiträgen funktioniert nur aus dem Stream oder dem eigenen Kanal, nicht jedoch aus einem „fremden“ Kanal.
\ No newline at end of file diff --git a/doc/de/member/show_source_code.md b/doc/de/member/show_source_code.md new file mode 100644 index 000000000..b5c7139a8 --- /dev/null +++ b/doc/de/member/show_source_code.md @@ -0,0 +1,15 @@ +#### Quellcode anzeigen + +Mit dieser Funktion kann man sich den Quelltext eines Beitrags anzeigen lassen. Der Inhalt wird also nicht in formatierter Form gerendert, sondern umfasst den Text inklusive aller Auszeichnungs-Tags (Markdown, bbCode, HTML). + +Die Funktion scheint deshalb eher etwas für fortgeschrittene oder sehr neugierige Nutzer zu sein. + +Allerdings enthält sie ein Feature, das für jeden hilfreich sein kann. + +Neben der internen Beitrags-Id findet man zwei Hyperlinks: "plink" und "llink". + + + +"plink" bedeutet "Permalink" und entspricht dem [Link zur Quelle](/help/de/member/link_to_source.md). + +"llink" bedeutet "lokaler Link" und verweist auf den Ort des Postings auf der eigenen Instanz (Hub). Ein Klick darauf führt nicht dazu, dass man seine eigene Instanz verlässt, sondern zeigt den Beitrag in der Einzelansicht an. diff --git a/doc/de/member/stream_settings.md b/doc/de/member/stream_settings.md new file mode 100644 index 000000000..0b4aeb673 --- /dev/null +++ b/doc/de/member/stream_settings.md @@ -0,0 +1,9 @@ +#### Stream-Einstellungen + +Die Stream-Einstellungen erreicht man nicht über Hauptmenü → Einstellungen, sonder über das kleine Zahnradsymbol (⚙) neben dem Hauptmenü, das dort erscheint, sobald man die Stream-Ansicht aufruft. + + + +Mit den Stream-Einstellungen kann man die Ansicht des Streams und dort zur Verfügung stehende Features (z.B. Stream-Filter, das Speichern von Suchanfragen etc.) auswählen. + + diff --git a/doc/de/member/superblock.md b/doc/de/member/superblock.md new file mode 100644 index 000000000..e3833c890 --- /dev/null +++ b/doc/de/member/superblock.md @@ -0,0 +1,15 @@ +### Superblock + +Die App "Superblock" ist eine Moderationsmethode für den eigenen Stream. Während man mit der normalen Funktionalität von Hubzilla mittels Kontakt-Tool ausschließlich Nutzer, mit denen man verbunden ist, blockieren kann, funktioniert Superblock unabhängig davon, ob man mit einem Kontakt verbunden ist, oder nicht. + +Bemerkt man im Stream einen Nutzer, mit welchem man nicht verbunden ist (weil dessen Beiträge von einem Kontakt aus dem eigenen Adressbuch geteilt werden), und möchte man - aus welchem Grund auch immer - keinerlei Beiträge von diesem Fediversenutzer im Stream haben, so kann man dies mit der App "Superblock" erreichen. + +Dafür klicken Sie man auf das kleine weiße Dreieck im Avatar des zu blockenden Nutzers. + +Es öffnet sich ein Pulldown-Menü, welches zu unterst den Menüpunkt "Vollständig blockieren" enthält. Mit einem Klick auf diesen Menüpunkt landet der Nutzer in der Superblock-Liste. Beiträge dieses Nutzers erscheinen künftig nicht mehr im eigenen Stream. Betroffene Beiträge werden sofort im Stream ausgeblendet. Außerdem ist es diesem Nutzer nicht mehr möglich, Ihre Beiträge zu lesen, unabhängig von den Berechtigungen, noch kann er in Ihren Kanal schreiben. + +Wählt man im App-Menü (oben rechts ⋮) die App "Superblock", so wird die Liste sämtlicher blockierter Kontakte angezeigt. + +Neben jedem Kontakt ist ein "Mülltonnen-Icon" zu sehen. Ein Klick auf dieses Icon entfernt den Nutzer von der Blockliste. Anschließend kann der Nutzer Ihnen wieder folgen, Ihre Beiträge sehen und auch bei Ihnen kommentieren und seine Postings erscheinen (z.B. durch Teilen von einem Kontakt) auch wieder im Stream. + +Superblock ist bei neuen Kanälen nicht per Standard installiert und aktiviert.
\ No newline at end of file diff --git a/doc/de/member/tags.md b/doc/de/member/tags.md new file mode 100644 index 000000000..1f2fd79f4 --- /dev/null +++ b/doc/de/member/tags.md @@ -0,0 +1,5 @@ +### Tags + +Tags (auch thematische Tags, Hashtags oder topical tags genannt) Tags werden angezeigt, indem Sie dem Tagnamen das Zeichen "#" voranstellen. Dadurch wird im Beitrag ein Link zu einer verallgemeinerten Website-Suche nach dem angegebenen Begriff erstellt. Zum Beispiel, #cars stellt einen Suchlink für alle Beiträge bereit, die „Autos“ auf Ihrer Website erwähnen. Aktuelle Tags sind in der Regel mindestens drei Zeichen lang. Kürzere Suchbegriffe führen wahrscheinlich nicht zu Suchergebnissen, dies hängt jedoch von der Datenbankkonfiguration ab. + +Thematische Tags werden normalerweise auch nicht verknüpft, wenn sie rein numerisch sind, z. #1. Wenn Sie einen numerischen Hashtag verwenden möchten, fügen Sie bitte einen beschreibenden Text wie z.B. #2012-Wahlen oder das gesamte Tag in doppelte Anführungszeichen setzen (z. B. #“2012″). Doppelte Anführungszeichen sind auch erforderlich, wenn das Tag Leerzeichen enthält (# „Mein Tag“) und möglicherweise erforderlich, wenn das Tag Satzzeichen enthält (# „EndsWithPeriod.“ Oder # „Exciting !!!“). diff --git a/doc/de/member/the_grid.md b/doc/de/member/the_grid.md new file mode 100644 index 000000000..d49b199f6 --- /dev/null +++ b/doc/de/member/the_grid.md @@ -0,0 +1,3 @@ +### Das Grid + +Als das "Grid" wird das Netzwerk aller Hubzilla-Hubs bezeichnet, die miteinander über das Nomad-Protokoll kommunizieren. Das Grid ist quasi eine Untermenge des Fediverse und umfasst alle Hubzilla-Server.
\ No newline at end of file diff --git a/doc/de/member/the_stream.md b/doc/de/member/the_stream.md new file mode 100644 index 000000000..08a6abbe8 --- /dev/null +++ b/doc/de/member/the_stream.md @@ -0,0 +1,7 @@ +### Der Stream + +Der Stream ist die Liste der Beiträge, Kommentare und Boosts von Nutzern im Fediverse. Er ist umgekehrt chronologisch sortiert (die neuesten Beiträge erscheinen zuoberst). Welche Beiträge Ihnen hier genau gezeigt werden, hängt weitgehend von Ihren Berechtigungseinstellungen ab. + +Der Stream (bei anderen Fediversedienste wird er auch "Timeline" genannt) kann durch verschiedene Filter gefiltert werden: nach Direktnachrichten, Ereignissen, Umfragen, Privacy Gruppen, Foren, Markierten Beiträgen, den eigenen Beiträgen, gespeicherte Ordner, Namen. + +Der Stream im Fediverse wird nicht durch Algorithmen, die vermeintlich interessante Inhalte für den Nutzer auswählt, erstellt, sondern wird ausschließlich durch den Nutzer selbst bestimmt. Im Fediverse sind Sie, der Nutzer, der Algorithmus für den Stream.
\ No newline at end of file diff --git a/doc/de/member/toggle_star_status.md b/doc/de/member/toggle_star_status.md new file mode 100644 index 000000000..4c901d536 --- /dev/null +++ b/doc/de/member/toggle_star_status.md @@ -0,0 +1,9 @@ +#### Markierungsstatus (Stern) umschalten + +Das Umschalten des Markierungssterns darf nicht mit dem "Sternen" (= Favorisieren) anderer Fediversedienste (z.B. Mastodon) verwechselt werden. Während das "Sternen" bei diesen Diensten eine positive Wertung des Beitrags darstellt, die am ehesten einem "Link" entspricht, ist das Markieren mit einem Stern bei Hubzilla mit dem Setzen eines Lesezeichens vergleichbar. Mit dem Umschalten (ein Klick setzt den Stern, ein weiterer entfernt ihn wieder) wird der Beitrag für den Nutzer selbst als eine Art Lesezeichen gesetzt. + +Einen "gesternten" Beitrag erkennt man am Sternsymbol unten links. + + + +In der Stream-Ansicht findet man in der linken Seitenleiste den Eintrag "Markierte Beiträge". Klickt man darauf werden sämtliche markierte Postings in (umgekehrter) chronologischer Reihenfolge im Stream angezeigt. diff --git a/doc/de/member/websites.md b/doc/de/member/websites.md new file mode 100644 index 000000000..f56b69f0e --- /dev/null +++ b/doc/de/member/websites.md @@ -0,0 +1,143 @@ +### Webseiten + +Mit der App "Webseiten" ist es Ihnen möglich, statische Webseiten in Ihrem Kanal zu erstellen. Webseiten verbleiben auf Ihren Hub und werden nicht föderiert. Sie können aber den Link zur Webseite teilen und es allen Nutzern im Fediverse ermöglichen, Ihre Webseite zu besuchen. + +Wenn Sie die App aufrufen, gelangen Sie zur Webseiten-Übersicht. Die Seiten werden unter `<URL-Ihrer-Instanz>/page/<Ihr-Kanalname>/<Seiten-Link-Titel>` zugänglich sein. + + + +In der linken Seitenleiste befindet sich ein Widget mit den Gestaltungswerkzeugen für "Blöcke", "Menüs", "Layouts" und "Seiten". + +Darunter ist ein weiteres Widget vorhanden, mit der Möglichkeit Webseiten zu ex- und importieren. + +In der Mitte werden die vorhandenen Webseiten aufgeführt. Sie können diese bearbeiten, teilen und löschen. Außerdem ist dort ein Button vorhanden, um eine neue Webseite zu erstellen: "Erstelle". + +Wenn Sie auf diesen Button klicken, öffnet sich der Webseiten-Editor. + + + +Sie haben nun die Wahl, auf welche Art Sie die Webseite gestalten wollen: mit bbCode, mit HTML, mit Markdown, mit reinem Text oder mit der Comanche-Layout-Sprache. + +Sie können außerdem festlegen, welches Layout (sofern Sie eines oder Mehrere mit dem Layout-Gestaltungswerkzeug erstellt haben) für die Darstellung der Webseite verwendet werden soll. + +Es folgt das Eingabefeld für den optionalen Seitentitel, sowie (ebenfalls optional) eine Zusammenfassung, sowie (Pflichtfeld) die Seiten-URL. + +Darunter befindet sich der Texteditor für den Inhalt der Webseite. + +Möchte man lediglich eine ganz einfache Webseite mit Formatierungen und anderen Auszeichnungselementen erstellen, genügt es, diese im Website-Editor mittel reinem Text, HTML, bbCode oder Markdown zu erstellen. Sie erhalten damit eine Webseite ohne besonderes Layout (ohne Seitenleisten, ohne Menüs etc.). + +Für anspruchsvollere Webseiten, empfiehlt es sich, dass Sie mit Blöcken, Layouts und Menüs arbeiten. + +#### Blöcke + +Blöcke können Teile von Webseiten sein. Der grundlegende HTML-Code eines Blocks sieht wie folgt aus + +``` + <div> + Block-Inhalt + </div> +``` + +Wenn ein Block den Inhaltstyp text/html hat, kann er auch Menüelemente enthalten. Der Beispielinhalt von + +``` + <p>HTML Block-Inhalt</p> + [menu]menuname[/menu] +``` + +wird HTML wie dieses erzeugen + +``` + <div> + <p>HTML Block-Inhalt</p> + <div> + <ul> + <li><a href="#">Link 1</a></li> + <li><a href="#">Link 2</a></li> + <li><a href="#">Link 3</a></li> + </ul> + </div> + </div> +``` + +Über das Makro `$content` kann ein Block auch den eigentlichen Inhalt der Webseite enthalten. + +Erstellen Sie dazu einen Block nur mit + +``` + $content +``` + +als Inhalt. + +Damit ein Block auf der Webseite erscheint, muss er im Seitenlayout innerhalb einer Region definiert werden. + +``` + [region=aside] + [block]blockname[/block] + [/region] +``` + +Das Aussehen des Blocks kann im Seitenlayout manipuliert werden. + +Es können eigene Klassen zugewiesen werden + +``` + [region=aside] + [block=myclass]blockname[/block] + [/region] +``` + +wird folgendes HTML erzeugen + +``` + <div class="myclass"> + Block Content + </div> +``` + +Über die wrap-Variable kann ein Block von seinem umschließenden `<div></div>`-Tag befreit werden + +``` + [region=aside] + [block][var=wrap]none[/var]blockname[/block] + [/region] +``` + +wird dieses HTML erzeugt + +``` +Blockinhalt +``` + +Mit dem Block-Editor können Blöcke ebenso einfach erzeugt werden, wie Webseiten. + + + +#### Menüs + +Der Menüeditor dient zum einfachen Erstellen von Navigations-Menüs. + + + +Dem Menü muss ein eindeutiger Name gegeben werden (mit diesem kann es später in der Webseite und in Blöcken referenziert werden). Die Vergabe des Titels ist optional. Außerdem kann man wählen, ob das Menü für das Hinzufügen von Bookmarks zur Verfügung steht. Mit diesem Feature ist es möglich, als Bookmarks markierte Links aus dem Stream mit einem Klick zum Menü hinzuzufügen. + +Klicken Sie auf "Absenden und fortfahren", wird das Menü erstellt. + + + +Nun öffnet sich der Dialog für das Hinzufügen eines Menüeintrags. Es muss eine Bezeichnung für den Menüeintrag eingegeben werden ("Name des Links") und das Ziel des Links. Dies kann eine URL oder der Name eines anderen Menüs sein (welches dann als Untermenü eingebunden wird). + +Über die Eingabe einer Zahl bei "Reihenfolge in der Liste" kann man die Sortierung der Menüeinträge beeinflussen. + +Handelt es sich bei der URL um einen externen Link zu einer Quelle auf einem anderen Hub, so kann durch setzen des Schalters "Magic-Auth verwenden, falls verfügbar" dafür gesorgt werden, dass man beim Ziel authentifiziert wird und ggf. eingeschränkte Inhalte verfügbar sind. + +Außerdem können Sie festlegen, ob Links in einem neuen Fenster/Tab geöffnet werden sollen. + +Mit Klick auf "Absenden und fortfahren" kann man weitere Einträge erstellen. "Absenden und fertigstellen" beendet die Eingabe von Menüeinträgen. Menüs können aber jederzeit nachträglich bearbeitet und ergänzt werden. + +#### Layouts + +Mit den Layouts kann man den generellen Aufbau von Webseiten festlegen. Die Gestaltung erfolgt mit der Comanche Seitenbeschriebungssprache, einer Variante von bbCode. Man muss einen Namen für das Layout vergeben. Im Textfeld erfolgt dann die Definition des Layouts. Hier können auch die Inhalte der verschiedenen Regionen festgelegt werden. + + diff --git a/doc/de/member/wikis.md b/doc/de/member/wikis.md new file mode 100644 index 000000000..da3a7a829 --- /dev/null +++ b/doc/de/member/wikis.md @@ -0,0 +1,39 @@ +### Wikis + +Die App "Wiki" ermöglicht es, im eigenen Kanal Wikis anzulegen. + +Wiki-Seiten werden nicht föderiert und verbleiben auf dem eigenen Hub. + +Die Wiki-App bietet eine einfache, klassische Wiki-Funktionalität. Wiki-Beiträge können als reiner Text, als Markdown-Text oder als BBcode-Text erstellt werden. + + + +Um ein Wiki anzuschauen (oder zu bearbeiten), wählt man auf dieser Seite das entsprechende Wiki aus der Liste. + +Möchte man ein neues Wiki erstellen, klickt man auf den Button "+ Neu anlegen". + +Es öffnet sich ein Eingabe-Formular, in welchem man den Namen des Wiki eingibt und den Inhaltstyp (als Standard) festlegt. Man kann über einen Schalter bestimmen, dass nur der gewählte Inhaltstyp (Text, Markdown, BBcode) für alle Wiki-Einträge verwendet werden muss. Außerdem kann man per Schalter die Erzeugung eines Statusbeitrags über die Wikierstellung ein- oder ausschalten. + + + +Auch für ein Wiki kann man detaillierte [Berechtigungen](/help/de/member/permissions_content.md) festlegen. + +Klickt man auf "Absenden", wird das Wiki erstellt und die Startseite (Home) geöffnet. + +Die Standard-Ansicht einer Wiki-Seite ist immer "Ansicht", bei welcher der Text gemäß dem Quelltext gerendert wird. Über Reiter (Tabs) am oberen Rand kann man in die Ansicht "Bearbeiten" wechseln, um in den Editor-Modus zu gelangen. + +Haben Sie die Seite bearbeitet und schalten Sie dann wieder auf Ansicht, werden die Änderungen sofort angezeigt. + +Wenn Sie die Seite speichern möchten, geben Sie das Eingabefeld unter dem Text eine passende Bemerkung ein und klicken auf "Save". Die Wiki-Seite ist erstellt. + +Über den dritten Reite mit der Bezeichnung "Historie" können Sie sich den Änderungsverlauf der Wiki-Seite anschauen und, sofern gewünscht, Änderungen rückgängig machen. Es handelt sich also um eine wiki-typische Form der Versionskontrolle. + + + +Wenn Sie weitere Wiki-Seiten erstellen, werden diese in der linken Seitenleiste aufgeführt, von wo aus sie auch aufrufbar sind. + + + +Für eine kollaborative Bearbeitung eines Wikis ist es erforderlich, den Nutzern, welche an dem Wiki mitarbeiten dürfen, entsprechende Rechte einzuräumen. Dies tut man in den Fällen eines öffentlichen, persönlichen oder Foren-Kanals mittels einer entsprechenden Kontaktrolle, in welcher man die Bearbeitung der Wiki-Seiten erlaubt. Diese Berechtigung ist nämlich bei den genannten Kanalrollen als Standard nicht erteilt (bei einer benutzerdefinierten Kanalrolle kann man die Genehmigung erteilen, sie gilt dann aber generell und kann mittels einer Kontaktrolle nicht wieder entzogen werden). + +Will man einzelne Wikis davon ausnehmen, muss man deren Sichtbarkeit über die Berechtigungs-Einstellungen des Wikis (Vorhangschloss) einschränken. diff --git a/doc/de/member_faq.md b/doc/de/member_faq.md new file mode 100644 index 000000000..029d45eba --- /dev/null +++ b/doc/de/member_faq.md @@ -0,0 +1,17 @@ +### Hubzilla FAQ + +#### Ich kann den Text eines Beitrags nach dem Speichern bearbeiten, aber gibt es eine Möglichkeit, die Berechtigungen zu ändern? + +Kurze Antwort: Nein, das geht nicht. Dafür gibt es Gründe. Sie können die Berechtigungen für Ihre Dateien, Fotos und Ähnliches ändern, aber nicht für Beiträge, nachdem Sie diese gespeichert haben. Der Hauptgrund dafür ist: Sobald Sie einen Beitrag gespeichert haben, wird er entweder an den öffentlichen Kanal und von dort an andere Hubzilla-Server oder an diejenigen verteilt, für die er bestimmt war. Genauso wie Sie etwas, das Sie einer anderen Person gegeben haben, nicht zurückfordern können, können Sie die Berechtigungen für Hubzilla-Beiträge nicht ändern. Wir müssten überall nachverfolgen, wohin Ihre Beiträge gelangen, alle Personen erfassen, denen Sie die Anzeige erlaubt haben, und dann nachverfolgen, von wem wir sie löschen müssen. Bei öffentlichen Beiträgen ist dies noch schwieriger, da Hubzilla ein globales Netzwerk ist und es keine Möglichkeit gibt, einen Beitrag zu verfolgen, geschweige denn zuverlässig zurückzuholen. Andere Netzwerke, die Ihren Beitrag erhalten haben, haben keine zuverlässige Möglichkeit, ihn zu löschen oder zurückzuholen. + +#### Ich habe meinen Kanal heruntergeladen und auf eine andere Website importiert (meine Identität geklont), aber es gibt keine Inhalte, keine Beiträge, keine Fotos. Was ist los??? + +Beiträge und Fotos/Dateien werden getrennt von den grundlegenden Kanalinformationen bereitgestellt. Dies ist aufgrund von Speicherbeschränkungen im Zusammenhang mit jahrelangen Unterhaltungen und Fotoarchiven erforderlich. Beiträge und Unterhaltungen können separat von den grundlegenden Kanalinformationen synchronisiert werden. Fotos und Dateiarchive können mit einem Plugin-Tool wie „redfiles“ übertragen werden, das derzeit als „experimentell“ gekennzeichnet ist. Bei der Entwicklung dieser Funktion war es uns wichtig, dass alle Ihre Kontakte erhalten bleiben. Ihre Freunde haben Ihre alten Inhalte bereits gesehen. Beiträge/Konversationen hatten die nächste Priorität und können nun synchronisiert werden. Dateien und Fotos sind der letzte Punkt, der noch vollständig funktioniert. Sobald wir jemanden finden, der die Implementierung fertigstellen möchte, wird dies umgesetzt. :) + +#### Ich kann private Ressourcen nicht sehen + +Sie haben wahrscheinlich Cookies von Drittanbietern deaktiviert. Sie müssen diese aktivieren, damit die Remote-Authentifizierung funktioniert. + +#### Es gibt viele Beiträge in Fremdsprachen. Lassen Sie uns diese automatisch übersetzen. + +Es gibt auch viele **private** Beiträge in Fremdsprachen, und automatische Übersetzungsdienste würden erfordern, dass wir diese privaten Nachrichten an den Übersetzungsdienst übermitteln; und wir wissen nicht, was dieser mit ihnen auf seinen Servern macht. Dank Edward Snowden wissen wir das eigentlich. Unsere beste Option ist ein Projekt namens ***Apertium\***, ein Open-Source-Übersetzungsprogramm, das wir lokal installieren können. Derzeit fehlen noch deutsche Übersetzungen – die am häufigsten nachgefragten Übersetzungen in der Matrix. Auch dies wird implementiert, sobald wir jemanden finden, der sich wirklich dafür engagieren möchte.
\ No newline at end of file diff --git a/doc/de/members.bb b/doc/de/members.bb deleted file mode 100644 index c85855f62..000000000 --- a/doc/de/members.bb +++ /dev/null @@ -1,25 +0,0 @@ -[h2]Dokumentation für Hub-Mitglieder[/h2] - -[h3]Erste Schritte[/h3] -[zrl=[baseurl]/help/registration]Ein Konto registrieren[/zrl] -[zrl=[baseurl]/help/accounts_profiles_channels_basics]Du im Hubzilla-Netzwerk: Konten, Profile und Kanäle kurz erklärt[/zrl] -[zrl=[baseurl]/help/profiles]Profile[/zrl] -[zrl=[baseurl]/help/channels]Kanäle[/zrl] -[zrl=[baseurl]/help/roles]Zugriffsrechte-Kategorien und Kanaltypen[/zrl] -[zrl=[baseurl]/help/first-post]Dein erster Beitrag[/zrl] -[zrl=[baseurl]/help/connecting_to_channels]Sich mit anderen Kanälen verbinden[/zrl] -[zrl=[baseurl]/help/permissions]Zugriffsrechte und Verschlüsselung: Du hast alles unter Kontrolle[/zrl] -[zrl=[baseurl]/help/cloud]Cloud-Speicher[/zrl] -[zrl=[baseurl]/help/remove_account]Einen Kanal oder das ganze Konto löschen[/zrl] - -[h3]Hilfe für $Projectname-Mitglieder[/h3] -[zrl=[baseurl]/help/tags_and_mentions]Tags und Erwähnungen[/zrl] -[zrl=[baseurl]/help/webpages]Webseiten[/zrl] -[zrl=[baseurl]/help/bbcode]BBcode-Referenz für Beiträge und Kommentare[/zrl] -[zrl=[baseurl]/help/checking_account_quota_usage]Überprüfung der Kontenlimits[/zrl] -[zrl=[baseurl]/help/cloud_desktop_clients]Desktop-Anwendungen und die Cloud[/zrl] -[zrl=[baseurl]/help/AdvancedSearch]Fortgeschrittene Suche im Kanalverzeichnis[/zrl] -[zrl=[baseurl]/help/addons]Hilfe zu Addons[/zrl] -[zrl=[baseurl]/help/diaspora_compat]Kompatibilität zum Diaspora-Protokoll (zur Kommunikation mit Kontakten aus Diaspora und Friendica)[/zrl] -[zrl=[baseurl]/help/faq_members]FAQ für Mitglieder[/zrl] -[zrl=[baseurl]/help/bugs]Bugs, Probleme und Sachen, die einem um die Ohren fliegen können[/zrl] diff --git a/doc/de/pic/ui01.png b/doc/de/pic/ui01.png Binary files differnew file mode 100644 index 000000000..1bae614be --- /dev/null +++ b/doc/de/pic/ui01.png diff --git a/doc/de/pic/ui02.png b/doc/de/pic/ui02.png Binary files differnew file mode 100644 index 000000000..59db0c314 --- /dev/null +++ b/doc/de/pic/ui02.png diff --git a/doc/de/platzhalter.md b/doc/de/platzhalter.md new file mode 100644 index 000000000..7abe6f7ce --- /dev/null +++ b/doc/de/platzhalter.md @@ -0,0 +1 @@ +# Platzhalter
\ No newline at end of file diff --git a/doc/de/profiles.bb b/doc/de/profiles.bb deleted file mode 100644 index 7860ad47c..000000000 --- a/doc/de/profiles.bb +++ /dev/null @@ -1,40 +0,0 @@ -[h3]Profile[/h3] - -In $Projectname kannst Du beliebig viele Profile anlegen. Du kannst mehrere Profile nutzen, um verschiedenen Kontakten und Profilbesuchern unterschiedliche Seiten Deiner Persönlichkeit zu zeigen. Das ist nicht das gleiche wie das Anlegen mehrerer [i]Kanäle.[/i] - -Mehrere Kanäle erlauben es, komplett voneinander getrennte Informationen zu verwalten. Du könntest zum Beispiel einen Kanal für Dich selbst anlegen, einen für Deinen Schwimmverein, einen für Dein Blog und so weiter und so fort. - -Ein Profil erlaubt es, unterschiedlichen Leuten unterschiedliche Informationen über einen Kanal zu präsentieren. Beispiel: In Deinem Standard-Profil, das alle Profilbesucher zu sehen bekommen, könnte nur Dein Vorname stehen, sonst keine weiteren Informationen. Freunde und Bekannte könnten Deinen kompletten Realnamen und Deine Postadresse zu sehen bekommen, und im Profil für Deinen engsten Freundeskreis könnten peinliche Hobbies und Trinkrekorde ihren Platz finden. - -Jeder Kanal hat ein Standard-Profil (öffentliches Profil), das vor niemandem versteckt werden kann (außer evtl. auf privaten Servern, die nicht mit der Matrix verbunden sind). Du kannst und solltest Dich in der Auswahl dessen, was Du im Standard-Profil von Dir preisgibst, stark einschränken. - -Trotzdem: Wenn Du willst, dass Freunde Dich finden können, macht es Sinn, folgende Informationen ins öffentliche Profil einzutragen: - -[ul][*] Deinen Realnamen oder zumindest einen Spitznamen, unter dem Dich jeder kennt -[*] Ein Foto, das auch wirklich Dich zeigt -[*] Deinen Wohnort, oder zumindest Land oder Bundesland[/ul] - -Wenn Du Leute kennenlernen möchtest, die ähnliche Interessen haben wie Du, nimm Dir einen Moment Zeit und füge einige Schlüsselwörter hinzu. Zum Beispiel „Musik, Linux, Fotografie“ oder was auch immer. Danach können andere dann im Verzeichnis suchen. Du kannst so viele Schlüsselwörter eingeben wie Du möchtest. - -Um alternative Profile zu erstellen, besuche zunächst die Seite [zrl=[baseurl]/settings/features]Einstellungen > Zusätzliche Funktionen[/zrl] und aktiviere dort „Mehrfachprofile“. Ohne diese Aktivierung hast Du nur ein Profil, nämlich Dein Standard-Profil. - -Klicke dann auf „Profile bearbeiten“ im Menü Deines $Projectname-Servers. Dort kannst Du existierende Profile bearbeiten, Dein Profilfoto verändern, Dinge zu einem Profil hinzufügen oder ein neues Profil erstellen. Du kannst auch ein Profil „klonen“, wenn Du nur einige wenige Einträge ändern willst, ohne die ganzen Informationen noch einmal einzugeben. Klicke dazu auf das Profil, das Du klonen willst, und wähle dann „Dieses Profil klonen“. - -In der Liste Deiner Profile kannst Du auch bestimmen, wer ein bestimmtes Profil zu sehen bekommt. Klicke dazu auf „Sichtbarkeit bearbeiten“ neben dem Profil, um das es geht (gibt es nur bei Profilen, die nicht Dein Standard-Profil sind). Klicke dann auf die Bilder derjenigen Kontakte, die dieses Profil sehen sollen – sie sind dann oben zu sehen. Wenn Du oben auf ein Bild klickst, wird dieser Kontakt wieder aus der Gruppe derjenigen herausgenommen, die dieses Profil zu sehen bekommen. - -Hast Du einem Kontakt ein Profil zugeordnet, wird er immer dieses Profil sehen, wenn er sich Dein Profil ansieht. Besucht er Deinen $Projectname-Server, ohne sich anzumelden, sieht er aber weiterhin Dein Standard-Profil. - -Auf der allgemeinen „Einstellungen“-Seite gibt es eine Einstellung, mit der Du festlegen kannst, ob Dein Standard-Profil in den $Projectname-Verzeichnissen veröffentlicht werden soll. - -Wenn Du nicht möchtest, dass andere Dich finden können, ohne dass Du ihnen Deine Kanal-Adresse gibst, kannst Du so verhindern, dass Dein Profil veröffentlicht wird. - -[b]Schlüsselwörter und Verzeichnissuche[/b] - -Im Verzeichnis (Kanal-Verzeichnis) kannst Du nach Leuten suchen, die ihre Profile veröffentlichen. Zum Beispiel, indem Du Namen oder Spitznamen eingibst. Aktuell werden nur das Namensfeld und die Schlüsselwörter durchsucht. Wenn Du Schlüsselwörter in Dein Standard-Profil einträgst, können Dich Leute mit ähnlichen Interessen finden. Sie werden außerdem bei den Kanal-Vorschlägen benutzt. Sie sind im Verzeichnis nicht direkt sichtbar, wohl aber auf Deiner Profil-Seite. - -Auf Deiner „Verbindungen“-Seite und im Verzeichnis gibt es einen Link „Vorschläge“ bzw. „Kanal-Vorschläge“. Dort findest Du Kanäle, die gleiche oder ähnliche Schlüsselwörter im Profil haben wie Du. Je mehr Schlüsselwörter Du in Dein Standard-Profil einträgst, desto besser werden die Suchergebnisse. Sie sind nach Relevanz sortiert. - -Siehe auch: - -[zrl=[baseurl]/help/AdvancedSearch]Fortgeschrittene Suche[/zrl] -#include doc/macros/main_footer.bb; diff --git a/doc/de/registration.bb b/doc/de/registration.bb deleted file mode 100644 index ac24782a6..000000000 --- a/doc/de/registration.bb +++ /dev/null @@ -1,36 +0,0 @@ -[h3]Registrieren[/h3] - -Nicht alle $Projectname-Hubs erlauben jedem, sich zu registrieren. Wenn eine Registrierung möglich ist, erscheint unter dem Anmelde-Formular ein Link mit dem Titel „Registrieren“, der Dich zur Registrierungs-Seite des Hubs führt. Auf manchen Hubs wirst Du auf einen anderen Hub weitergeleitet, der Registrierungen erlaubt. Da alle $Projectname-Hubs miteinander verbunden sind, ist es egal, auf welchem Du Dich registrierst. - -[b]Deine E-Mail-Adresse[/b] - -Bitte gib eine funktionierende E-Mail-Adresse an. Sie wird [b]nie[/b] veröffentlicht. Sie wird benutzt, um Dein Konto zu aktivieren, und wenn Du willst, kannst Du Dir an diese Adresse Benachrichtigungen schicken lassen, wenn Du neue Nachrichten oder Beiträge erhalten hast. Sie wird außerdem benutzt, um vergessene Passwörter wiederherstellen zu können. - -[b]Passwort[/b] - -Gib ein Passwort Deiner Wahl ein und wiederhole es in der zweiten Box, um sicherzugehen, dass Du Dich nicht vertippt hast. Da $Projectname dezentralisierten Identitäsnachweis beherrscht, kannst Du Dich mit Deinem Konto auf vielen anderen Webseiten anmelden. - -[b]Nutzungsbedingungen[/b] - -Klicke auf den Link, um die [zrl=[baseurl]/help/TermsOfService]Nutzungsbedingungen[/zrl] dieses Servers zu lesen. Wenn Du sie gelesen hast, setze den Haken im Registrierungsformular, um sie zu akzeptieren. - -[b]Registrieren[/b] - -Wenn Du alles ausgefüllt hast, klicke auf den „Registrieren“-Knopf. Bei manchen Servern muss der Administrator Deiner Registrierung erst noch zustimmen, bevor Du Dein Konto nutzen kannst. Falls das der Fall ist, wird Dir das entsprechend angezeigt. Du erhältst dann eine E-Mail, wenn die Registrierung vollendet wurde. (Sicherheitshalber auch Spam-Ordner überprüfen!) - -[b]Einen Kanal anlegen[/b] - -Als nächstes kommst Du direkt auf den „Kanal hinzufügen“-Bildschirm. Dein erster Kanal wird normalerweise der sein, der Dich selbst repräsentiert. Es ist also sinnvoll, Deinen Namen oder Dein Pseudonym als Kanal-Namen zu verwenden. - -Der Kanal-Name ist der Titel oder eine kurze Beschreibung des Kanals. Der „Spitzname“ ist so etwas wie ein Benutzername. Was Du hier eingibst wird Teil Deiner Kanal-Adresse, die Andere benutzen, um sich mit Dir zu verbinden, und die Du selbst benutzt, um Dich auf anderen Servern anzumelden. Die Kanal-Adresse sieht aus wie eine E-Mail-Adresse, zum Beispiel so: spitzname@deinserver.xyz - -Wenn Dein Kanal angelegt ist, geht es direkt weiter zu den Einstellungen. Dort kannst Du Zugriffsrechte setzen, Funktionen zu- oder abschalten und so weiter. Diese Punkte werden auf den entsprechenden Hilfeseiten erklärt. - -Siehe auch -[zrl=[baseurl]/help/accounts_profiles_channels_basics]Grundlagen zu Identitäten in $Projectname[/zrl] -[zrl=[baseurl]/help/accounts]Konten[/zrl] -[zrl=[baseurl]/help/profiles]Profile[/zrl] -[zrl=[baseurl]/help/permissions]Zugriffsrechte[/zrl] -[zrl=[baseurl]/help/remove_account]Konto löschen[/zrl] - -#include doc/macros/main_footer.bb; diff --git a/doc/de/roles.bb b/doc/de/roles.bb deleted file mode 100644 index d1591ff17..000000000 --- a/doc/de/roles.bb +++ /dev/null @@ -1,60 +0,0 @@ -[h3]Kanal-Berechtigungsrollen[/h3] - -Wenn Du einen neuen Kanal erstellst, wirst Du aufgefordert, eine Berechtigungsrolle auszuwählen, je nachdem, wie Du diesen Kanal nutzen möchtest. Die beliebtesten Berechtigungsrollen sind die Rollen für soziale Netzwerke. Sie haben viele weitere Auswahlmöglichkeiten, die mit Facebook-Gruppen und -Seiten, kollaborativen Bereichen, Newsfeeds und mehr vergleichbar sind. Diese Rollen konfigurieren automatisch verschiedene Systemvariablen, von den Berechtigungen, die Freunden gewährt werden, bis hin zu den Standardeinstellungen für Privatsphäre und Sichtbarkeit. Es stehen erweiterte Konfigurationen zur Verfügung, mit denen Du jeden dieser Parameter an Ihre Bedürfnisse anpassen kannst, aber wir haben die Erfahrung gemacht, dass die meisten Nutzer es vorziehen, die Einstellungen vorzunehmen und sie vergessen. Im Folgenden werden einige der verschiedenen Rollen beschrieben, die derzeit verfügbar sind, und wie sie sich auf Ihre Privatsphäre und Ihre Interaktionsmöglichkeiten auswirken. - - -[h4]Soziales Netzwerk[/h4] -[b]Föderation[/b] - -Der Kanal ist ein sehr freizügiges soziales Netzwerkprofil, das mit anderen föderierten sozialen Netzwerken kompatibel ist. Die Genehmigungsrichtlinien sind ähnlich wie bei Twitter und größtenteils kompatibel mit Diaspora und Mastodon. Die Privatsphäre hat eine geringere Priorität als der einfache Zugang und die Verbindung mit anderen. Jeder im Netzwerk kann Deine öffentlichen Beiträge kommentieren und Dir private Nachrichten schicken. Standardmäßig sind Beiträge und veröffentlichte Artikel öffentlich, aber Du Kannst dies bei der Erstellung des Artikels überschreiben und einschränken. Du bist im Verzeichnis aufgeführt. Deine Online-Präsenz und Deine Verbindungen sind für andere sichtbar. Dieser Modus kann dazu führen, dass Du unerwünschten Mitteilungen und Spam ausgesetzt bist. Diese Rolle wird im Allgemeinen nicht empfohlen, es sei denn, Du musst regelmäßig mit Mitgliedern anderer Netzwerke interagieren. - -[b]Weitgehend öffentlich[/b] - -Der Kanal ist ein typisches Profil eines sozialen Netzwerks. Standardmäßig sind Beiträge und veröffentlichte Elemente öffentlich, aber Du kannst dies bei der Erstellung des Elements/Beitrags außer Kraft setzen und einschränken. Du bist im Verzeichnis aufgeführt. Deine Online-Präsenz und Deine Verbindungen sind für andere sichtbar. Nur Ihre unmittelbaren Verbindungen können Deine öffentlichen Beiträge kommentieren und Dir private Nachrichten schicken. Die Berechtigungsrichtlinien sind ähnlich wie bei Facebook. - -[b]Eingeschränkt[/b] - -Standardmäßig werden alle Beiträge und veröffentlichten Elemente an Deine Privatsphärengruppe "Freunde" gesendet und nicht öffentlich gemacht. Neue Freunde werden zu dieser privaten Gruppe hinzugefügt. Du kannst dies außer Kraft setzen und einen öffentlichen Beitrag oder ein veröffentlichtes Element erstellen, wenn Du dies wünschst. Du bist im Verzeichnis aufgeführt. Deine Online-Präsenz (für den Chat) und Deine Verbindungen (Freunde) sind für die Betrachter Deines Profils sichtbar. - -[b]Privat[/b] - -Standardmäßig werden alle Beiträge und veröffentlichten Elemente an Deine private Gruppe "Freunde" gesendet. Neue Freunde werden zu dieser privaten Gruppe hinzugefügt. Du kannst dies außer Kraft setzen und einen öffentlichen Beitrag oder ein öffentliches Element erstellen, wenn Du dies wünschst. Du bist NICHT im Verzeichnis aufgeführt. Nur Deine Verbindungen können Deine anderen Verbindungen sehen. Deine Online-Präsenz ist verborgen. - - -[h4]Forum[/h4] -[b]Weitgehend öffentlich[/b] - -Der Kanal ist ein typisches Forum. Standardmäßig sind Beiträge und veröffentlichte Artikel öffentlich. Mitglieder können durch @!mention oder wall-to-wall posten. Das Einstellen von Fotos und anderen veröffentlichten Beiträgen ist gesperrt. Der Kanal ist im Verzeichnis sichtbar. Mitglieder werden automatisch hinzugefügt. - -[b]Eingeschränkt[/b] - -Standardmäßig werden alle Beiträge und veröffentlichten Elemente an die Datenschutzgruppe "Freunde" des Channels gesendet. Neue Freunde werden zu dieser privaten Gruppe hinzugefügt. Mitglieder können Beiträge per @!mention oder wall-to-wall posten, aber Beiträge und Antworten können auch von anderen Empfängern des Top-Level-Posts gesehen werden, die keine Mitglieder sind. Der Channel ist im Verzeichnis sichtbar. Mitglieder müssen manuell durch den Forenbesitzer hinzugefügt werden. - -[b]Privat[/b] - -Standardmäßig werden alle Beiträge und veröffentlichten Nachrichten an Deine Privatsphärengruppe "Freunde" gesendet. Neue Freunde werden zu dieser privaten Gruppe hinzugefügt. Der Eigentümer kann dies außer Kraft setzen und einen öffentlichen Beitrag oder ein öffentliches Element erstellen, falls gewünscht. Mitglieder können das nicht. Sie sind NICHT im Verzeichnis aufgeführt. Nur Deine Verbindungen können Deine anderen Verbindungen sehen. Deine Online-Präsenz ist verborgen. Mitglieder müssen manuell vom Forumsbesitzer hinzugefügt werden. Das Posten per @!mention ist deaktiviert. Beiträge können nur über Wand-zu-Wand-Beiträge erstellt und an Mitglieder der Privatsphärengruppe "Freunde" gesendet werden. Du bist nicht öffentlich sichtbar. - - -[h4]Teilen von Feed[/h4] -[b]Weitgehend öffentlich[/b] - -Ähnlich wie Sozial: Meistens öffentlich, aber für RSS-Feed-Quellen zugeschnitten. Artikel können frei wiederveröffentlicht und weiterverwendet werden. Die Online-Präsenz ist bedeutungslos, daher verborgen. Neue Verbindungen werden automatisch genehmigt. - -[b]Eingeschränkt[/b] - -Nicht im Verzeichnis aufgeführt. Die Online-Präsenz ist bedeutungslos und daher verborgen. Der Feed wird nur für Mitglieder der Datenschutzgruppe "Freunde" veröffentlicht. Neue Verbindungen werden automatisch zu dieser privaten Gruppe hinzugefügt. Mitglieder müssen manuell vom Kanalbesitzer genehmigt werden. - - -[h4]Für spezielle Zwecke[/h4] -[b]Speziell - Mitteilungskanal (keine Kommentare)[/b] - -Aufgeführt im Verzeichnis. Die Kommunikation ist standardmäßig öffentlich. Die Online-Präsenz ist verborgen. Kommentare oder Rückmeldungen jeglicher Art sind nicht erlaubt, obwohl Verbindungen die Möglichkeit haben, Ihr Profil zu "mögen". - -[b]Speziell - Gruppen-Archiv[/b] - -Ein öffentliches Forum, das es Mitgliedern erlaubt, Dateien/Fotos/Webseiten zu veröffentlichen. - - -[h4]Benutzerdefinierter/Expertenmodus[/h4] -Legen Sie alle Datenschutzeinstellungen und Berechtigungen manuell fest, um sie an Ihre speziellen Bedürfnisse anzupassen. - diff --git a/doc/de/the_hubzilla_project.md b/doc/de/the_hubzilla_project.md new file mode 100644 index 000000000..6f7eec745 --- /dev/null +++ b/doc/de/the_hubzilla_project.md @@ -0,0 +1,116 @@ +## Das Hubzilla-Projekt + +### Hubzilla Verwaltung + +Governance bezieht sich auf die Verwaltung eines Projekts und insbesondere darauf, wie diese mit der Konfliktlösung zusammenhängt. + + + +#### Gemeinschaftliche Verwaltung + +Das Projekt wird von der „Gemeinschaft“ verwaltet und Entscheidungen werden von ihr getroffen. Die Governance-Struktur ist noch in der Entwicklung begriffen. Bis zur endgültigen Festlegung der Struktur werden Entscheidungen in der folgenden Reihenfolge getroffen: + + + +1. Fauler Konsens + + Wenn ein Projektvorschlag in einem der Community-Governance-Foren unterbreitet wird und innerhalb einer „angemessenen“ Zeitspanne ab dem Datum des Vorschlags (wir geben in der Regel allen interessierten Parteien 2 bis 3 Tage Zeit, sich zu äußern) keine ernsthaften Einwände erhoben werden, muss nicht abgestimmt werden und der Vorschlag gilt als angenommen. Zu diesem Zeitpunkt können zwar Bedenken geäußert werden, aber wenn diese in der Diskussion ausgeräumt werden und Lösungsmöglichkeiten angeboten werden, gilt der Vorschlag dennoch als genehmigt. + + + +2. Veto + + Erfahrene Entwickler, die bereits viele Projekte zugesagt haben, können gegen jede Entscheidung ein Veto einlegen. Die Entscheidung kann nicht weitergeführt werden, bis das Veto aufgehoben oder ein alternativer Vorschlag vorgelegt wird. + + + +3. Gemeinschaftsabstimmung + + Eine Entscheidung, für die es kein klares Mandat oder keinen klaren Konsens gibt, gegen die aber kein Veto eingelegt wurde, kann der Gemeinschaft zur Abstimmung vorgelegt werden. Zurzeit ist dies eine einfache Volksabstimmung in einem der entsprechenden Gemeinschaftsforen. Zurzeit entscheidet das Volk über das Ergebnis. Dies kann sich in Zukunft ändern, wenn die Gemeinschaft ein „Rats“-Verwaltungsmodell einführt. Dieses Dokument wird zu diesem Zeitpunkt mit den aktualisierten Verwaltungsregeln aktualisiert werden. + + + +Die Abstimmung in der Gemeinschaft führt nicht immer zu einem angenehmen Ergebnis und kann zu polarisierten Fraktionen in der Gemeinschaft führen (daher werden auch andere Modelle in Betracht gezogen). Wenn der Vorschlag abgelehnt wird, gibt es immer noch verschiedene Möglichkeiten, den Vorschlag mit leicht veränderten Parametern erneut einzureichen (Umwandlung in ein Addon, Umwandlung in eine optionale Funktion, die standardmäßig deaktiviert ist, usw.). Wenn das Interesse an der Funktion groß ist und die Abstimmung „knapp“ ausfällt, kann dies bei den unterlegenen Wählern viele schlechte Gefühle hervorrufen. Bei solchen knappen Abstimmungen wird **dringend empfohlen**, dass der Antragsteller Maßnahmen ergreift, um alle Bedenken auszuräumen, und den Antrag erneut einreicht. + + + + + +#### Datenschutz + +F: Wer kann meinen Inhalt sehen? + +A: Standardmäßig JEDER im Internet, es sei denn, Sie schränken dies ein. Bei Hubzilla können Sie die von Ihnen gewünschte Datenschutzstufe wählen. Eingeschränkte Inhalte sind für „Spionagenetzwerke“ und Werbetreibende NICHT sichtbar. Sie werden gegen das Abhören durch Außenstehende geschützt - so gut es eben geht. Hub-Administratoren mit ausreichenden Kenntnissen und Geduld können möglicherweise einige private Kommunikationen abhören, aber sie müssen sich dafür anstrengen. Innerhalb von Hubzilla gibt es Privatsphären-Modi, die selbst für erfahrene und entschlossene Hub-Administratoren abhörsicher sind. + +F: Kann mein Inhalt zensiert werden? + +A: Hubzilla (das Netzwerk) kann Ihre Inhalte NICHT zensieren. Server- und Hub-Administratoren unterliegen den örtlichen Gesetzen und KÖNNEN anstößige Inhalte von ihrer Site/ihrem Hub entfernen. Jeder KANN Hub-Administrator werden, auch Sie, und daher Inhalte veröffentlichen, die andernfalls zensiert werden könnten. Sie KÖNNEN immer noch den örtlichen Gesetzen unterliegen. + + + +##### Definitionen + +**Hubzilla** + +Hubzilla, auch als „das Netzwerk“ bezeichnet, ist eine Sammlung von einzelnen Computern/Servern (auch **Hubs** genannt), die miteinander verbunden sind und ein größeres kooperatives Netzwerk bilden. + +**Hub** + +Ein einzelner Computer oder Server, der mit Hubzilla verbunden ist. Diese werden von einem **Hub-Administrator** bereitgestellt und können öffentlich oder privat, bezahlt oder kostenlos sein. + +**Hub-Administrator** + +Der Systembetreiber eines einzelnen Hubs. + + + +##### Richtlinien + +**Öffentliche Informationen** + +Alle von Ihnen innerhalb von Hubzilla eingestellten Informationen oder Inhalte KÖNNEN öffentlich oder für jeden im Internet sichtbar sein. Soweit dies möglich ist, erlaubt Hubzilla Ihnen, Inhalte zu schützen und einzuschränken, wer sie sehen kann. + +Ihr Profilfoto, Ihr Channelname und der Standort (URL oder Netzwerkadresse) Ihres Channels sind für jedermann im Internet sichtbar, und Datenschutzkontrollen haben keinen Einfluss auf die Anzeige dieser Elemente. + +Du KANNST zusätzlich andere Profilinformationen zur Verfügung stellen. Alle Informationen, die Sie in Ihrem „Standard“- oder **öffentlichen Profil** angeben, KÖNNEN an andere Hubs in Hubzilla übermittelt werden und zusätzlich im Channel-Verzeichnis angezeigt werden. Sie können die Einsicht in diese Profilinformationen einschränken. Sie können es nur auf Mitglieder Ihres Hubs, nur auf Verbindungen (Freunde) oder auf andere begrenzte Gruppen von Betrachtern beschränken, wie Sie es wünschen. Wenn Sie möchten, dass Ihr Profil eingeschränkt wird, müssen Sie die entsprechenden Datenschutzeinstellungen vornehmen oder einfach KEINE zusätzlichen Informationen angeben. + +**Inhalt** + +Die von Ihnen bereitgestellten Inhalte (Statusmeldungen, Fotos, Dateien usw.) gehören Ihnen. Die Standardeinstellung von Hubzilla ist, dass Inhalte offen und für jeden im Internet sichtbar veröffentlicht werden (PUBLIC). Sie KÖNNEN dies in Ihren Channel-Einstellungen steuern und die Standardberechtigungen einschränken oder Sie KÖNNEN die Sichtbarkeit jedes einzelnen veröffentlichten Elements separat einschränken (PRIVAT). Die Hubzilla-Entwickler stellen sicher, dass eingeschränkte Inhalte NUR für diejenigen sichtbar sind, die in der Einschränkungsliste aufgeführt sind - so gut sie können. + +Inhalte (insbesondere Statusmeldungen), die Sie mit anderen Netzwerken teilen oder die Sie für jeden im Internet sichtbar gemacht haben (PUBLIC), können nicht einfach zurückgenommen werden, nachdem sie veröffentlicht wurden. Sie KÖNNEN mit anderen Netzwerken geteilt und über RSS/Atom-Feeds verfügbar gemacht werden. Sie können auch auf anderen Hubzilla-Sites syndiziert werden. Sie KÖNNEN in anderen Netzwerken und Websites erscheinen und in der Internetsuche sichtbar sein. Wenn Sie dieses Standardverhalten nicht wünschen, passen Sie bitte Ihre Kanaleinstellungen an und schränken Sie ein, wer Ihre Inhalte sehen kann. + +**Kommentare und Forenbeiträge** + +Kommentare zu Beiträgen, die von anderen erstellt wurden, und Beiträge, die als Forenbeiträge gekennzeichnet sind, gehören Ihnen als Ersteller/Autor, aber die Verbreitung dieser Beiträge unterliegt nicht Ihrer direkten Kontrolle, und Sie geben EINIGE Rechte an diesen Elementen ab. Diese Beiträge/Kommentare KÖNNEN an andere weitergegeben werden und KÖNNEN für jeden im Internet sichtbar sein. Im Falle von Kommentaren kontrolliert der Ersteller der „ersten Nachricht“ in dem Thread (Gespräch), auf den Sie antworten, die Verbreitung aller Kommentare und Antworten auf diese Nachricht. Er ist „Eigentümer“ und hat daher bestimmte Rechte in Bezug auf die gesamte Unterhaltung (einschließlich aller darin enthaltenen Kommentare). Sie können den Kommentar immer noch bearbeiten oder löschen, aber der Eigentümer der Konversation hat auch das Recht, den gesamten Inhalt der Konversation zu bearbeiten, zu löschen, weiterzuverteilen und zu sichern/wiederherzustellen. + +**Private Informationen** + +Die Hubzilla-Entwickler stellen sicher, dass alle von Ihnen bereitgestellten Inhalte, die als PRIVAT gekennzeichnet sind, nach bestem Wissen und Gewissen gegen Abhören geschützt werden. Private Channel-Inhalte KÖNNEN in der Datenbank jedes beteiligten Hub-Administrators gesehen werden, aber private Nachrichten werden in der Datenbank unkenntlich gemacht. Letzteres bedeutet, dass es sehr schwierig, aber NICHT unmöglich ist, dass diese Inhalte von einem Hub-Administrator gesehen werden können. Private Kanalinhalte und private Nachrichten werden auch aus den E-Mail-Benachrichtigungen entfernt. Die Ende-zu-Ende-Verschlüsselung ist eine optionale Funktion, die selbst von einem entschlossenen Administrator NICHT eingesehen werden kann. + + + +##### Identitätsschutz + +Der Schutz Ihrer Identität ist ein weiterer Aspekt. Da Sie in Hubzilla eine dezentrale Identität haben, geht Ihre Privatsphäre über Ihren Home Hub hinaus. Wenn Sie die vollständige Kontrolle über Ihre Privatsphäre und Sicherheit haben möchten, sollten Sie Ihren eigenen Hub auf einem eigenen Server betreiben. Für viele Menschen ist dies kompliziert und kann ihre technischen Fähigkeiten überfordern. Lassen Sie uns daher einige Vorsichtsmaßnahmen auflisten, die Sie ergreifen können, um Ihre Privatsphäre so gut wie möglich zu schützen. + +Eine dezentralisierte Identität hat viele Vorteile und bietet Ihnen viele interessante Funktionen, aber Sie sollten sich der Tatsache bewusst sein, dass Ihre Identität anderen Hubs im Hubzilla-Netzwerk bekannt ist. Einer dieser Vorteile ist, dass andere Kanäle Ihnen maßgeschneiderte Inhalte anbieten und Ihnen erlauben können, private Dinge zu sehen (wie z.B. private Fotos, die andere mit Ihnen teilen möchten). Aus diesem Grund müssen diese Kanäle wissen, wer Sie sind. Aber wir verstehen, dass diese anderen Kanäle manchmal mehr von Ihnen wissen, als Sie vielleicht wünschen. Zum Beispiel das Plug-in Visage, das einem Kanalbesitzer mitteilen kann, wann du das letzte Mal sein Profil besucht hast. Sie können sich ganz einfach von dieser geringen und, wie wir meinen, harmlosen Verfolgung abmelden. + +\* Sie können [Do Not Track (DNT)][(http://donottrack.us/)](http://donottrack.us/)?f=&zid=pepecyb@hub.hubzilla.hu) in Ihrem Webbrowser aktivieren. Wir respektieren diesen neuen Vorschlag zum Datenschutz. Alle modernen Browser unterstützen DNT. Sie finden es in den Datenschutzeinstellungen Ihres Browsers oder Sie können das Handbuch Ihres Webbrowsers konsultieren. Die Funktionalität von Hubzilla wird dadurch nicht beeinträchtigt. Diese Einstellung ist wahrscheinlich für die meisten Menschen ausreichend. + +*Sie können die Veröffentlichung Ihres Channels in unserem Channel-Verzeichnis [deaktivieren](Einstellungen). Wenn Sie möchten, dass andere Ihren Channel finden, sollten Sie ihnen Ihre Channel-Adresse direkt mitteilen. Wir denken, dass dies ein guter Hinweis darauf ist, dass du zusätzliche Privatsphäre bevorzugst und aktivieren automatisch „Do Not Track“, wenn dies der Fall ist. + +\* Sie können einen blockierten Hub haben. Das bedeutet, dass alle Kanäle und Inhalte in diesem Hub nicht öffentlich und für die Außenwelt nicht sichtbar sind. Dies kann nur Ihr Hub-Administrator tun. Wir respektieren dies ebenfalls und aktivieren automatisch „Do Not Track“, wenn es eingestellt ist. + + + +##### Zensur + +Hubzilla ist ein globales Netzwerk, das alle Religionen und Kulturen einschließt. Das bedeutet nicht, dass jedes Mitglied des Netzwerks in Bezug auf strittige Themen genauso denkt wie Sie, und einige Leute könnten sich den von Ihnen geposteten Inhalten GEGENWINDLICH widersetzen. Wenn Sie etwas posten möchten, von dem Sie wissen, dass es möglicherweise nicht von allen akzeptiert wird, ist es am besten, wenn Sie die Öffentlichkeit mit Hilfe der Privatsphäre-Kontrollen auf einen kleinen Freundeskreis beschränken. + +Hubzilla als Netzwerkanbieter kann keine Inhalte zensieren. Hub-Administratoren KÖNNEN jedoch Inhalte, die auf ihrem Hub erscheinen, zensieren, um lokalen Gesetzen oder sogar persönlichem Urteilsvermögen zu entsprechen. Ihre Entscheidung ist endgültig. Wenn Sie Probleme mit einem Hub-Administrator haben, können Sie Ihr Konto und Ihre Beiträge auf eine andere Seite verschieben, die Ihren Erwartungen besser entspricht. Bitte überprüfen Sie (regelmäßig) die [Terms of Service](help/TermsOfService) Ihres Hubs, um sich über etwaige Regeln oder Richtlinien zu informieren. Wenn Ihr Inhalt aus illegalem oder problematischem Material besteht, empfehlen wir Ihnen DRINGEND, Ihren eigenen Hub zu betreiben (werden Sie Hub-Administrator). Es kann sein, dass Ihre Inhalte auf einigen Hubs blockiert werden, aber Hubzilla als Netzwerk kann nicht verhindern, dass sie veröffentlicht werden. + +Hubzilla EMPFIEHLT, dass Hub-Administratoren eine Frist von 1-2 Tagen zwischen der Warnung eines Account-Inhabers über zu entfernende Inhalte und der physischen Entfernung oder Deaktivierung des Accounts einräumen. Dies gibt dem Inhaltsinhaber die Möglichkeit, seine Channel-Metadaten zu exportieren und auf eine andere Site zu importieren. In seltenen Fällen kann der Inhalt so beschaffen sein, dass die sofortige Kündigung des Kontos gerechtfertigt ist. Dies ist eine Hub-Entscheidung, nicht eine Hubzilla-Entscheidung. + +Wenn Sie typischerweise und regelmäßig Inhalte jugendgefährdender oder anstößiger Natur posten, wird Ihnen DRINGEND empfohlen, Ihr Konto als „NSFW“ (Not Safe For Work) zu kennzeichnen. Dadurch wird die Anzeige Ihres Profilfotos im Verzeichnis verhindert, außer für Betrachter, die den „sicheren Modus“ deaktiviert haben. Wenn Ihr Profilfoto von den Verzeichnisadministratoren als nicht jugendfrei oder anstößig eingestuft wird, KANN der Verzeichnisadministrator Ihr Profilfoto als NSFW kennzeichnen. Derzeit gibt es keinen offiziellen Mechanismus, um diese Entscheidung anzufechten oder rückgängig zu machen. Deshalb SOLLTEN Sie Ihr eigenes Konto als NSFW markieren, wenn es für ein allgemeines Publikum unangemessen sein könnte. + diff --git a/doc/de/toc.html b/doc/de/toc.html new file mode 100644 index 000000000..959ee7ffe --- /dev/null +++ b/doc/de/toc.html @@ -0,0 +1,104 @@ +<div class="" id="accordion"> + <div class="mb-3"> + <div class=""> + <h3 class="panel-title"> + Benutzer + </h3> + </div> + <div id="members" class="doco-section"> + <div class="vstack"> + <a href="/help/member/overview">Überblick</a> + <a href="/help/member/registration">Login/Registierung</a> + <a href="/help/member/accounts_profiles_channels_basics">Konten, Profile und Kanäle</a> + <a href="/help/member/posting">Posten</a> + <a href="/help/member/the_grid">Das Grid</a> + <a href="/help/member/the_stream">Der Stream</a> + <a href="/help/member/apps">Apps</a> + <a href="/help/member/connections">Verbindungen</a> + <a href="/help/member/directory">Verzeichnis</a> + <a href="/help/member/blocking_channels">Kanäle blockieren/ignorieren/archivieren/verstecken</a> + <a href="/help/member/permissions">Berechtigungen</a> + <a href="/help/member/direct_messages">Direktnachrichten</a> + <a href="/help/member/mentions">Erwähnungen</a> + <a href="/help/member/tags">Tags</a> + <a href="/help/member/bookmarks">Bookmarks (Lesezeichen)</a> + <a href="/help/member/search">Suche</a> + <a href="/help/member/article">Artikel</a> + <a href="/help/member/files">Dateien</a> + <a href="/help/member/chat_rooms">Chaträume</a> + <a href="/help/member/guest_access">Gastzugang</a> + <a href="/help/member/privacy_groups">Privacy Gruppen</a> + <a href="/help/member/calendar">Kalender</a> + <a href="/help/member/addressbook">Adressbuch</a> + <a href="/help/member/wikis">Wikis</a> + <a href="/help/member/NSFW">Inhaltswarnung/NSFW</a> + <a href="/help/member/clone">Klonen</a> + <a href="/help/member/websites">Websiten</a> + <a href="/help/member/comanche">Comanche Seitenbeschreibungssprache</a> + <a href="/help/member/encryption">Verschlüsselung</a> + <a href="/help/member/protection_of_privacy">Tipps zum Schutz der Privatsphäre</a> + <a href="/help/member/deleting_channel">Kanal löschen</a> + <a href="/help/member/delete_account">Account löschen</a> + <hr> + <a href="/help/bugs">Bugs melden</a> + <a href="/help/member/member_faq">FAQ</a> + </div> + </div> + </div> + <div class="mb-3"> + <div class=""> + <h3 class="panel-title"> + Tutorials + </h3> + </div> + <div id="tutorials" class="doco-section"> + <div class="vstack"> + <a href="/help/tutorials/step_with_hubzilla">Mit Hubzilla Schritt für Schritt ins Fediverse</a> + <a href="/help/tutorials/customise_look">Hubzilla optisch anpassen</a> + <a href="/help/tutorials/DerivedTheme">Hubzilla optisch anpassenEin abgeleitetes Thema erstellen</a> + </div> + </div> + </div> + <div class="mb-3"> + <div class=""> + <h3 class="panel-title"> + Administratoren + </h3> + </div> + <div id="administrators" class="doco-section"> + <div class="vstack"> + <a class="" href="/help/adminmanual/manual_for_administrators">Handbuch für Administratoren</a> + </div> + </div> + </div> + <div class="mb-3"> + <div class=""> + <h3 class="panel-title"> + Entwickler + </h3> + </div> + <div id="developers" class="doco-section"> + <div class="vstack"> + <a class="" href="/help/developer/developers_guide">Entwicklerhandbuch</a> + </div> + </div> + </div> + <div class="mb-3"> + <div class=""> + <h3 class="panel-title"> + Über + </h3> + </div> + <div id="about" class="doco-section"> + <div class="vstack"> + <a href="/help/about">Über Hubzilla</a> + <a href="/help/functions">Funktionen</a> + <a href="/help/glossary">Glossar</a> + <a href="/help/ui">Benutzeroberfläche</a> + <a href="/help/the_hubzilla_project">Das Hubzilla-Projekt</a> + <a href="/help/credits">Credits</a> + <a href="/help/about_hub.bb">Über diesen Hub</a> + </div> + </div> + </div> +</div> diff --git a/doc/de/tutorials/DerivedTheme.md b/doc/de/tutorials/DerivedTheme.md new file mode 100644 index 000000000..1aca621d7 --- /dev/null +++ b/doc/de/tutorials/DerivedTheme.md @@ -0,0 +1,96 @@ +### Ein abgeleitetes Thema erstellen + +**Lektion 1** +Ein abgeleitetes Thema übernimmt die meisten Einstellungen des „übergeordneten“ Themas und ermöglicht es Ihnen, einige Dinge nach Ihren Wünschen zu ändern, ohne ein ganzes Themenpaket zu erstellen. +Um ein abgeleitetes Thema zu erstellen, wählen Sie zunächst einen Namen. In unserem Beispiel nennen wir unser Thema „mytheme“. Hoffentlich werden Sie etwas kreativer sein. Wo immer Sie in diesem Dokument „mytheme“ sehen, ersetzen Sie es durch den von Ihnen gewählten Namen. + +**Verzeichnisstruktur** + +Zuerst müssen Sie eine Verzeichnisstruktur für das Thema erstellen. Wir werden es einfach halten. Wir brauchen ein php-Verzeichnis und ein css-Verzeichnis. Hier sind die Unix/Linux-Befehle, um dies zu tun. Gehen Sie davon aus, dass 'mywebsite' Ihr oberster Hubzilla-Ordner ist. + +``` +cd mywebsite +mkdir view/theme/mytheme +mkdir view/theme/mytheme/css +mkdir view/theme/mytheme/php +``` + +Sehr gut. Jetzt brauchen wir noch ein paar Dateien. Die erste ist Ihre Theme-Info-Datei, die das Theme beschreibt. +Sie heißt view/theme/mytheme/php/theme.php (cleverer Name, oder?) +Fügen Sie darin die folgenden Informationen ein - bearbeiten Sie sie nach Bedarf + +``` +<?php + +/** + * * Name: Mytheme + * * Description: Beispiel Abgeleitetes Thema + * * Version: 1.0 + * * Author: Ihr Name + * * Compat: Red [*] + * + */ + +Funktion mytheme_init(&$a) { + + App::$theme_info['extends'] = 'redbasic'; +} +``` + +Denken Sie daran, die Funktion mytheme_init mit dem Namen Ihres Themas zu benennen. In diesem Fall werden wir das Thema 'redbasic' erweitern. + +Erstellen Sie nun eine weitere Datei. Wir nennen dies eine PCSS-Datei, aber in Wirklichkeit ist es eine PHP-Datei. + +Die Datei heißt view/theme/mytheme/php/style.php +Fügen Sie darin Folgendes ein: + +``` +<?php + +require_once('view/theme/redbasic/php/style.php'); + +echo @file_get_contents('view/theme/mytheme/css/style.css'); +``` + +Das war's. Dies weist die Software an, zuerst die PCSS-Informationen für das redbasic-Theme zu lesen und dann unsere CSS-Datei zu lesen, die nur aus den Änderungen besteht, die wir an unserem übergeordneten Thema (redbasic) vornehmen wollen. + +Erstellen Sie nun die eigentliche CSS-Datei für Ihr Thema. Legen Sie sie in view/theme/mytheme/css/style.css ab (wo wir der Software gerade gesagt haben, dass sie danach suchen soll). In unserem Beispiel ändern wir nur die Hintergrundfarbe des Körpers, damit Sie sehen können, dass es funktioniert. Sie können jedes CSS verwenden, das Sie möchten. + +``` +body { + background-color: #DDD; +} +``` + +Sie haben soeben erfolgreich ein abgeleitetes Thema erstellt. Dieses muss im Adminbereich „Themen“ aktiviert werden und kann dann von jedem auf der Website verwendet werden, indem es unter Einstellungen->Anzeigeeinstellungen als Standardthema ausgewählt wird. + +**Lektion 2** + +Wenn Sie die redbasic-Schemata für Ihr abgeleitetes Thema verwenden möchten, müssen Sie etwas mehr tun. + +Machen Sie alles wie oben, aber erstellen Sie nicht view/theme/mytheme/php/style.php, sondern kopieren Sie stattdessen view/theme/redbasic/php/style.php nach view/theme/mytheme/php/style.php. Ändern Sie diese Datei und entfernen Sie diese beiden Zeilen (oder kommentieren Sie sie aus): + +``` +if(local_channel() && App::$channel && App::$channel['channel_theme'] != 'redbasic') + set_pconfig(local_channel(), 'redbasic', 'schema', '---'); +``` + +Fügen Sie außerdem diese Zeile am Ende ein: + +``` +echo @file_get_contents('view/theme/mytheme/css/style.css'); +``` + +Um den Schemaselektor anzuzeigen, müssen Sie view/theme/redbasic/tpl/theme_settings.tpl nach view/theme/mytheme/tpl/theme_settings.tpl kopieren. Ändern Sie diese Datei und ersetzen Sie die Zeilen: + +``` +{{if $theme == redbasic}} +{{include file=„field_select.tpl“ field=$schema}} +{{/if}} +``` + +mit: + +``` +{{include file=„field_select.tpl“ field=$schema}} +```
\ No newline at end of file diff --git a/doc/de/tutorials/customise_look.md b/doc/de/tutorials/customise_look.md new file mode 100644 index 000000000..0b24fe832 --- /dev/null +++ b/doc/de/tutorials/customise_look.md @@ -0,0 +1,221 @@ +### Hubzilla optisch anpassen + +Nach dem Anlegen eines Kanals, ist dessen Optik nicht besonders ansprechend. + + + +#### Apps anpinnen + +Als erstes pinnen Sie die wichtigsten Apps an die obere Navigationsleiste: „Beitrag schreiben“, „Kanal“, „Stream“, „Verbindungen“ und „Öffentlicher Beitrags-Stream“. + +Dazu wählen Sie im App-Menü (⋮ oben rechts) den untersten Menüeintrag „+ Apps“. Damit gelangen Sie in die App-Einstellung und sofort bei den bereits installierten Apps. Auf dieser Seite klicken Sie nun bei jeder gewünschten App auf das kleine Pin-Nadel-Symbol und sehen dann auch sofort, wie das jeweilige Icon oben in der Navigationsleiste erscheint. + + + + + + + +#### Anzeige-Einstellungen + +Jetzt geht es an die Einstellungen für die Anzeige. Dafür klicken Sie im Hauptmenü (oben links, wo das eigene Avatarbild zu sehen ist) auf den Eintrag „Einstellungen“. In der linken Seitenleiste sind nun die verschiedenen Einstellungskategorien zu sehen. Hier wählen Sie „Anzeige-Einstellungen“. + + + + + +Die Seite für die Anzeige-Einstellungen wird angezeigt. Da Sie das Design anpassen wollen, ist der Tab „Benutzerdefinierte Design-Einstellungen“ die richtige Wahl. + + + + + +Die Eingabemaske weist zunächst aber nur wenige Möglichkeiten auf (fünf Einstellungen). Die letzte Einstellung ist diejenige, bei der Sie den Schalter als erstes einschalten müssen: „Erweiterte Einstellungen anzeigen“. Auf „Absenden“ klicken und erneut den Tab „Benutzerdefinierte Design-Einstellungen“ aufrufen. Nun sind viel mehr Einstellungen zu sehen. + + + + + +Als Beispiel werden hier einmal die Farben abgeändert, die Größe der Avatare im Stream angepasst und ein Hintergrundbild festgelegt. + +Unter den Haupteinstellungen finden Sie die Einstellungen für die Farben des Farbschemas. Unter jedem Eingabefeld ist als kleiner Kreis die Standard-Farbe angezeigt. Bei der Wahl einer eigenen Farbe, ist es sinnvoll sich zumindest bezüglich der Helligkeit ungefähr an der Standard-Farbe zu orientieren. Klickt man in eines der Eingabefelder, öffnet sich ein Farbwahl-Dialog, über welchen man nun die Farbe festlegen kann. Als Beispiel hier ein grünes Farbschema bei welchem die grundlegenden Farben geändert werden: „Primary theme color“, also die Grundfarbe des Themes, „Success theme color“, das ist die Farbe z.B. für anklickbare Links, „Info theme color“, die z.B. als Farbe für markierte Menüeinträge als Hintergrundfarbe angezeigt wird, sowie die „Hintergrundfarbe der Navigationsleiste“. Alle anderen Farben werden im Beispiel nicht verändert. Die Farbwahl ist natürlich jedem selbst überlassen. + + + + + + + + + +Schließlich die „Größe der Avatare von Themenstartern“ auf 48 Pixel festlegen. + + + +Fehlt noch das Hintergrundbild. Dieses sollte relativ groß sein, ungefähr der Größe des hauptsächlich genutzten Bildschirms entsprechend. Außerdem ist es empfehlenswert, ein eher helles bzw. blasses Bild zu verwenden (ggf. mit dem Grafikprogramm aufhellen und den Kontrast verringern), damit es die eigentlichen Inhalte nicht „erschlägt“. + +Das Hintergrundbild muss irgendwo über eine URL erreichbar sein. Da bietet es sich an, das Bild in die Dateien (Cloud) des eigenen Kanals hochzuladen und von dort aus zu verwenden. + +Dafür öffnet man im App-Menü die App „Dateien“. Hier kann man sich, wenn man mag, einen extra Ordner anlegen (bitte beachten, dass der Ordner und auch das dort hochgeladene Bild öffentlich zugreifbar sind… dafür die Zugriffsrechte mit dem kleinen Vorhangschloss, dem Privacy Tool, evtl. anpassen) und anschließend das Bild hochladen. + + + + + + + + + + + + + + + + + + + + + +Nach dem Hochladen wird das Bild in der Dateiliste angezeigt. Ein Rechtsklick auf den Eintrag und die Auswahl, die URL zu kopieren befördert die URL für das Bild in die Zwischenablage. + + + +Zurück bei „Benutzerdefinierte Design-Einstellungen“ kann man nun die URL in das Eingabefeld „Hintergrundbild“ einfügen. + + + + + +Ein letzter Klick und Hubzilla erstrahlt in der neuen Optik. + + + + + +#### PDL-Editor + +##### Grundlagen + +Verschiedene Apps und Grundfunktionen von Hubzilla basieren auf eigens dafür gestalteten Webseiten. Der Nutzer kommt mit den dahinter liegenden Mechanismen nicht in Berührung, er nutzt diese Seiten einfach. + +Ruft man beispielsweise die App „Kanal“ auf, so wird einem der eigene Kanal angezeigt. + + + +Ganz oben kann man das Banner des Kanals sehen. In dieses Banner sind der Kanalname und die Kanaladresse (Handle) eingebettet. + +Darunter befindet sich die Navigationsleiste mit dem Hauptmenü, dem Titel des Hub, ggf. angepinnten Apps und dem App-Menü. + +Interessant wird es dann aber im Bereich unter der Navigationsleiste. Hier sind bei den verschiedenen Apps die größten Unterschiede festzustellen. Bei der Kanal-Seite findet sich in der linken Seitenleiste (im unveränderten Standard-Zustand) zuoberst eine Karte mit den Kanalinformationen (Banner, Profilbild, Kurzbeschreibung, Profilinfos). + +In der Mitte, im Inhaltsbereich, werden die von diesem Kanal erstellten Inhalte angezeigt. + +Unter der Profilinfo-Karte befindet sich in der linken Seitenleiste eine Karte mit einem Teil der Verbindungen (beim Aufruf fremder Kanäle werden hier die gemeinsamen Kontakte angezeigt). + +Darunter wiederum befindet sich eine Karte mit den Archiven der Inhalte (oberste Ebene sind die Jahre, eine Gliederungsebene darunter die Monate). Wählt man ein Archiv aus, so werden im Inhaltsbereich nur die Inhalte angezeigt, die im gewählten Archivzeitraum veröffentlicht wurden. + +Unter der Archivkarte befindet sich dann die Karte der Kategorien. Hier werden sämtliche Kategorien, unter welchen Inhalte veröffentlicht wurden, aufgeführt. Ein Klick auf eine solche Kategorie führt dazu, dass im Inhaltsbereich sämtliche Inhalte angezeigt werden, die von dem Kanal unter der entsprechenden Kategorie veröffentlicht wurden. + +Unter der Archiv-Karte befindet sich die Karte mit der Schlagwörter-Wolke, welche die genutzten Hashtags anzeigt und mit denen man den Inhalt des Inhaltsbereichs (Artikel des Kanals) filtern kann. + +In der rechten Seitenleiste werden, sofern ungesehene Benachrichtigungen vorhanden sind, diese in einer weiteren Karte gezeigt. + +So ist der "Normalzustand". + +##### Module mit dem PDL-Editor bearbeiten + +Die verschiedenen Seiten, die man über Apps erreichen kann, werden auch als "Module" bezeichnet. + +Das Aussehen dieser Seiten kann man nun als Nutzer in großen Teilen anpassen und gestalten. Intern wird der Aufbau einer solchen Seite durch eine PDL-Datei bestimmt. Diese Dateien sind Layout-Dateien, welche die Comanche Seitenbeschreibungssprache nutzen. + +Damit sich der Nutzer nicht mit einer solchen Sprache auseinandersetzen muss, gibt es die App "PDL Editor", mit welchem man den Seitenaufbau mit einem GUI verändern / erstellen kann. + +Die App muss man zunächst installieren und aktivieren. Dann kann man sie aus dem App-Menü heraus aufrufen. + +Ruft man den PDL-Editor auf, so wird als Standard die Seitenstruktur des HQ angezeigt. + +Zentral am unteren Bildschirmrand findet man das Hauptmenü des PDL-Editors. Hier gibt es die Einträge + +"MODULES", "TEMPLATES", "ITEMS", "SOURCE" und "APPLY". + +Aus dem Menü "MODULES" kann man das zu bearbeitende Modul (das entspricht der zu bearbeitenden Seite) auswählen. + +Angenommen, Sie möchten die Kanal-Seite (wie sie einem selbst, aber auch Besuchern angezeigt wird) anpassen, so wählt man hier das Modul "channel" aus. + + + +Die PDL-Datei für die Kanalseite wird geladen und man sieht die entsprechenden, gerade beschriebenen Bestandteile ("ITEMS") dieser Seite. + + + +Angenommen, Sie möchten nun unsere Kanalseite mit einer Anzeige der Uhrzeit in der rechten Seitenleiste "verfeinern", so wählt man unter "ITEMS" das Item "CLOCK" aus, "ergreift" es mit dem Mauszeiger am Kreuzpfeil-Symbol und zieht es nach rechts in die Seitenleiste. + + + + + +Damit die Änderungen auch übernommen werden, klickt man anschließend auf "APPLY" im Hauptmenü. + + + +Ruft man nun die Kanalseite auf, so erscheint eine Karte mit der aktuellen Uhrzeit in der rechten Seitenleiste. + + + +Auf diese Weise kann man alle Seiten, die man unter "MODULES" findet, nach dem eigenen Geschmack anpassen. + +Hat man seine Seite angepasst und sie ist irgendwie "so völlig zerhackstückt": Kein Grund zur Panik! Im Hauptmenü findet man bei geänderten Layoutseiten den zusätzlichen Eintrag "RESET". Ein Klick darauf setzt das Seitenlayout auf den Hubzilla-Standard zurück. + +Hier werden jetzt aber nicht sämtliche Items vorgestellt... jeder darf ein wenig experimentieren. Die meisten haben einen erklärenden Titel. + +Klickt man im PDL-Hauptmenü auf "SOURCE", so wird einem der Quelltext des aktuellen Layouts angezeigt. Ein Blick hier hinein hilft, mit PDL vertraut zu werden. Außerdem sind hier auch Änderungen direkt im Quelltext möglich... falls irgendwas nicht über die "ITEMS" erreichbar ist. Hierfür sollte man sich aber mit der Seitenauszeichnungssprache, den Blöcken und Modulen vorher vertraut machen. + + + +##### PDL-Editor für Fortgeschrittene + +Angenommen, man hat ein paar Artikel erstellt und möchte einige davon über ein Menü in der rechten Seitenleiste der Kanalseite zugänglich machen. + +Das ist durchaus machbar. + +Doch dafür benötigt man zunächst einmal ein Menü. Um Menüs zu erstellen, muss man allerdings die App "Webseiten" installieren und aktivieren, denn das Erstellen von Menüs ist Teil der Webseiten-Funktionalität. Also selbst wenn man keine Webseiten in seinem Kanal erstellen möchte, braucht man zum Erstellen von Menüs die App "Webseiten". Wobei... so ganz stimmt das nicht. Man kann den Menüeditor auch anders erreichen, als über die App "Webseiten". Dafür gibt man `<url-des-hub>/menu/<kanalname>` ein. Nun landet man auch in der Menü-"App". Einfacher ist es allerdings mit der Webseiten-App. + + + +Ein Klick auf "Erstelle" öffnet den Menü-Editor. + + + +Hier muss man nun einen passenden Namen (über den man das Menü später ansprechen kann) und (optional) einen Titel für das Menü eingeben (dieser ist später auf der Webseite zu sehen). + +Danach klickt man auf "Absenden und fortfahren". + +Nun landet man im Link-Editor des gerade erstellten Menüs. Hier gibt man den Titel des Menüeintrags und die dazugehörige URL ein. Man kann auch die Reihenfolge der Sortierung der Menüeinträge über das Feld "Reihenfolge in der Liste" festlegen. Hat man die Eingabe erledigt und klickt auf "Absenden und fortfahren", kann man anschließend einen weiteren Menüeintrag eingeben. Ein Klick auf "Absenden und fertigstellen", fügt den Eintrag hinzu und beendet den Menüeditor (man kann Menüs selbstverständlich auch im nachhinein noch bearbeiten). + +Jetzt erscheint das neue Menü in der Liste der Menüs. + + + +Jetzt zurück zum PDL-Editor und dort das Kanal-Modul aufrufen. + +Nun gibt es wieder zwei Möglichkeiten. Entweder, man öffnet den Quelltexteditor "SOURCE" und gibt den Eintrag für die Menükarte an der passenden Stelle per Hand ein... + +Hier wählt man, wenn das Menü in der rechten Seitenleiste erscheinen soll, die Region "right_aside" und gibt dort als neue Zeile `[menu]artikelmenu[/menu]` ein. + + + +Nun noch auf "Submit" klicken und schon erscheint die neue Karte im visuellen PDL-Editor. + + + +Mit "APPLY" übernehmen... und dann ist das Menü auf der Kanal-Webseite. + + + +Die zweite Methode (mit der man nicht die richtige Stelle im Quelltext suchen muss) ist es, im PDL-Editor einfach ein beliebiges Item an die Stelle zu ziehen, wo das Menü erscheinen soll. Dann klickt man auf den "Edit"-Button bei diesem Item, ändert den vorhandenen Eintrag auf `[menu]artikelmenu[/menu]` und klickt auf "Submit". Dann noch ein "APPLY" und man hat das selbe Ergebnis. + + + +Viel Spaß beim Experimentieren! diff --git a/doc/de/tutorials/pic/02.png b/doc/de/tutorials/pic/02.png Binary files differnew file mode 100644 index 000000000..38cf70c49 --- /dev/null +++ b/doc/de/tutorials/pic/02.png diff --git a/doc/de/tutorials/pic/03.png b/doc/de/tutorials/pic/03.png Binary files differnew file mode 100644 index 000000000..3164d0d17 --- /dev/null +++ b/doc/de/tutorials/pic/03.png diff --git a/doc/de/tutorials/pic/04.png b/doc/de/tutorials/pic/04.png Binary files differnew file mode 100644 index 000000000..1229c0a2e --- /dev/null +++ b/doc/de/tutorials/pic/04.png diff --git a/doc/de/tutorials/pic/05.png b/doc/de/tutorials/pic/05.png Binary files differnew file mode 100644 index 000000000..434a4abbd --- /dev/null +++ b/doc/de/tutorials/pic/05.png diff --git a/doc/de/tutorials/pic/06.png b/doc/de/tutorials/pic/06.png Binary files differnew file mode 100644 index 000000000..544b08694 --- /dev/null +++ b/doc/de/tutorials/pic/06.png diff --git a/doc/de/tutorials/pic/07.png b/doc/de/tutorials/pic/07.png Binary files differnew file mode 100644 index 000000000..25e7063fb --- /dev/null +++ b/doc/de/tutorials/pic/07.png diff --git a/doc/de/tutorials/pic/08.png b/doc/de/tutorials/pic/08.png Binary files differnew file mode 100644 index 000000000..164aad0a0 --- /dev/null +++ b/doc/de/tutorials/pic/08.png diff --git a/doc/de/tutorials/pic/09.png b/doc/de/tutorials/pic/09.png Binary files differnew file mode 100644 index 000000000..767d45244 --- /dev/null +++ b/doc/de/tutorials/pic/09.png diff --git a/doc/de/tutorials/pic/10.png b/doc/de/tutorials/pic/10.png Binary files differnew file mode 100644 index 000000000..280d5d22c --- /dev/null +++ b/doc/de/tutorials/pic/10.png diff --git a/doc/de/tutorials/pic/11.png b/doc/de/tutorials/pic/11.png Binary files differnew file mode 100644 index 000000000..c738c1a80 --- /dev/null +++ b/doc/de/tutorials/pic/11.png diff --git a/doc/de/tutorials/pic/12.png b/doc/de/tutorials/pic/12.png Binary files differnew file mode 100644 index 000000000..486e3e81a --- /dev/null +++ b/doc/de/tutorials/pic/12.png diff --git a/doc/de/tutorials/pic/13.png b/doc/de/tutorials/pic/13.png Binary files differnew file mode 100644 index 000000000..47aa44c0e --- /dev/null +++ b/doc/de/tutorials/pic/13.png diff --git a/doc/de/tutorials/pic/14.png b/doc/de/tutorials/pic/14.png Binary files differnew file mode 100644 index 000000000..fcc6684cc --- /dev/null +++ b/doc/de/tutorials/pic/14.png diff --git a/doc/de/tutorials/pic/15.png b/doc/de/tutorials/pic/15.png Binary files differnew file mode 100644 index 000000000..69fa838ed --- /dev/null +++ b/doc/de/tutorials/pic/15.png diff --git a/doc/de/tutorials/pic/16.png b/doc/de/tutorials/pic/16.png Binary files differnew file mode 100644 index 000000000..b7f0bd1ec --- /dev/null +++ b/doc/de/tutorials/pic/16.png diff --git a/doc/de/tutorials/pic/17.png b/doc/de/tutorials/pic/17.png Binary files differnew file mode 100644 index 000000000..9501e6ab9 --- /dev/null +++ b/doc/de/tutorials/pic/17.png diff --git a/doc/de/tutorials/pic/18.png b/doc/de/tutorials/pic/18.png Binary files differnew file mode 100644 index 000000000..deb18f7de --- /dev/null +++ b/doc/de/tutorials/pic/18.png diff --git a/doc/de/tutorials/pic/19.png b/doc/de/tutorials/pic/19.png Binary files differnew file mode 100644 index 000000000..833304712 --- /dev/null +++ b/doc/de/tutorials/pic/19.png diff --git a/doc/de/tutorials/pic/20.png b/doc/de/tutorials/pic/20.png Binary files differnew file mode 100644 index 000000000..5ca43f3cd --- /dev/null +++ b/doc/de/tutorials/pic/20.png diff --git a/doc/de/tutorials/pic/fedidb.png b/doc/de/tutorials/pic/fedidb.png Binary files differnew file mode 100644 index 000000000..988658aff --- /dev/null +++ b/doc/de/tutorials/pic/fedidb.png diff --git a/doc/de/tutorials/pic/fedieverse-observer.png b/doc/de/tutorials/pic/fedieverse-observer.png Binary files differnew file mode 100644 index 000000000..a80cbded9 --- /dev/null +++ b/doc/de/tutorials/pic/fedieverse-observer.png diff --git a/doc/de/tutorials/pic/hzreg01.png b/doc/de/tutorials/pic/hzreg01.png Binary files differnew file mode 100644 index 000000000..e11879307 --- /dev/null +++ b/doc/de/tutorials/pic/hzreg01.png diff --git a/doc/de/tutorials/pic/hzreg01a.png b/doc/de/tutorials/pic/hzreg01a.png Binary files differnew file mode 100644 index 000000000..714f3d9b4 --- /dev/null +++ b/doc/de/tutorials/pic/hzreg01a.png diff --git a/doc/de/tutorials/pic/hzreg02.png b/doc/de/tutorials/pic/hzreg02.png Binary files differnew file mode 100644 index 000000000..8a493147e --- /dev/null +++ b/doc/de/tutorials/pic/hzreg02.png diff --git a/doc/de/tutorials/pic/hzreg03.png b/doc/de/tutorials/pic/hzreg03.png Binary files differnew file mode 100644 index 000000000..bbe4c4451 --- /dev/null +++ b/doc/de/tutorials/pic/hzreg03.png diff --git a/doc/de/tutorials/pic/hzreg04.png b/doc/de/tutorials/pic/hzreg04.png Binary files differnew file mode 100644 index 000000000..bdc00f637 --- /dev/null +++ b/doc/de/tutorials/pic/hzreg04.png diff --git a/doc/de/tutorials/pic/nomadapp.png b/doc/de/tutorials/pic/nomadapp.png Binary files differnew file mode 100644 index 000000000..f62e3d96d --- /dev/null +++ b/doc/de/tutorials/pic/nomadapp.png diff --git a/doc/de/tutorials/pic/pdle01.png b/doc/de/tutorials/pic/pdle01.png Binary files differnew file mode 100644 index 000000000..3bb604397 --- /dev/null +++ b/doc/de/tutorials/pic/pdle01.png diff --git a/doc/de/tutorials/pic/pdle02.png b/doc/de/tutorials/pic/pdle02.png Binary files differnew file mode 100644 index 000000000..9efdf5bc8 --- /dev/null +++ b/doc/de/tutorials/pic/pdle02.png diff --git a/doc/de/tutorials/pic/pdle03.png b/doc/de/tutorials/pic/pdle03.png Binary files differnew file mode 100644 index 000000000..e82d0c859 --- /dev/null +++ b/doc/de/tutorials/pic/pdle03.png diff --git a/doc/de/tutorials/pic/pdle04.png b/doc/de/tutorials/pic/pdle04.png Binary files differnew file mode 100644 index 000000000..b5b409d69 --- /dev/null +++ b/doc/de/tutorials/pic/pdle04.png diff --git a/doc/de/tutorials/pic/pdle05.png b/doc/de/tutorials/pic/pdle05.png Binary files differnew file mode 100644 index 000000000..c78680649 --- /dev/null +++ b/doc/de/tutorials/pic/pdle05.png diff --git a/doc/de/tutorials/pic/pdle06.png b/doc/de/tutorials/pic/pdle06.png Binary files differnew file mode 100644 index 000000000..aa51dd345 --- /dev/null +++ b/doc/de/tutorials/pic/pdle06.png diff --git a/doc/de/tutorials/pic/pdle07.png b/doc/de/tutorials/pic/pdle07.png Binary files differnew file mode 100644 index 000000000..1a314ce73 --- /dev/null +++ b/doc/de/tutorials/pic/pdle07.png diff --git a/doc/de/tutorials/pic/pdle08.png b/doc/de/tutorials/pic/pdle08.png Binary files differnew file mode 100644 index 000000000..c5b62842f --- /dev/null +++ b/doc/de/tutorials/pic/pdle08.png diff --git a/doc/de/tutorials/pic/pdle09.png b/doc/de/tutorials/pic/pdle09.png Binary files differnew file mode 100644 index 000000000..5a328cbbe --- /dev/null +++ b/doc/de/tutorials/pic/pdle09.png diff --git a/doc/de/tutorials/pic/pdle10.png b/doc/de/tutorials/pic/pdle10.png Binary files differnew file mode 100644 index 000000000..812f28230 --- /dev/null +++ b/doc/de/tutorials/pic/pdle10.png diff --git a/doc/de/tutorials/pic/pdle11.png b/doc/de/tutorials/pic/pdle11.png Binary files differnew file mode 100644 index 000000000..21cbdf6c4 --- /dev/null +++ b/doc/de/tutorials/pic/pdle11.png diff --git a/doc/de/tutorials/pic/pdle12.png b/doc/de/tutorials/pic/pdle12.png Binary files differnew file mode 100644 index 000000000..308222766 --- /dev/null +++ b/doc/de/tutorials/pic/pdle12.png diff --git a/doc/de/tutorials/pic/pdle13.png b/doc/de/tutorials/pic/pdle13.png Binary files differnew file mode 100644 index 000000000..b857ae8d7 --- /dev/null +++ b/doc/de/tutorials/pic/pdle13.png diff --git a/doc/de/tutorials/pic/pdle14.png b/doc/de/tutorials/pic/pdle14.png Binary files differnew file mode 100644 index 000000000..0d479dea8 --- /dev/null +++ b/doc/de/tutorials/pic/pdle14.png diff --git a/doc/de/tutorials/pic/pdle15.png b/doc/de/tutorials/pic/pdle15.png Binary files differnew file mode 100644 index 000000000..e075df077 --- /dev/null +++ b/doc/de/tutorials/pic/pdle15.png diff --git a/doc/de/tutorials/pic/pubsites.png b/doc/de/tutorials/pic/pubsites.png Binary files differnew file mode 100644 index 000000000..6fe2e1e71 --- /dev/null +++ b/doc/de/tutorials/pic/pubsites.png diff --git a/doc/de/tutorials/pic/rega.png b/doc/de/tutorials/pic/rega.png Binary files differnew file mode 100644 index 000000000..9212a4f4b --- /dev/null +++ b/doc/de/tutorials/pic/rega.png diff --git a/doc/de/tutorials/pic/tut_opt01.png b/doc/de/tutorials/pic/tut_opt01.png Binary files differnew file mode 100644 index 000000000..a9ff138f2 --- /dev/null +++ b/doc/de/tutorials/pic/tut_opt01.png diff --git a/doc/de/tutorials/pic/tut_opt02.png b/doc/de/tutorials/pic/tut_opt02.png Binary files differnew file mode 100644 index 000000000..63ac59f82 --- /dev/null +++ b/doc/de/tutorials/pic/tut_opt02.png diff --git a/doc/de/tutorials/pic/tut_opt03.png b/doc/de/tutorials/pic/tut_opt03.png Binary files differnew file mode 100644 index 000000000..6b4cf07ee --- /dev/null +++ b/doc/de/tutorials/pic/tut_opt03.png diff --git a/doc/de/tutorials/pic/tut_opt04.png b/doc/de/tutorials/pic/tut_opt04.png Binary files differnew file mode 100644 index 000000000..6d7a74e73 --- /dev/null +++ b/doc/de/tutorials/pic/tut_opt04.png diff --git a/doc/de/tutorials/pic/tut_opt05.png b/doc/de/tutorials/pic/tut_opt05.png Binary files differnew file mode 100644 index 000000000..391325332 --- /dev/null +++ b/doc/de/tutorials/pic/tut_opt05.png diff --git a/doc/de/tutorials/pic/tut_opt05a.png b/doc/de/tutorials/pic/tut_opt05a.png Binary files differnew file mode 100644 index 000000000..9b5f2771a --- /dev/null +++ b/doc/de/tutorials/pic/tut_opt05a.png diff --git a/doc/de/tutorials/pic/tut_opt06.png b/doc/de/tutorials/pic/tut_opt06.png Binary files differnew file mode 100644 index 000000000..ab458fea0 --- /dev/null +++ b/doc/de/tutorials/pic/tut_opt06.png diff --git a/doc/de/tutorials/pic/tut_opt07.png b/doc/de/tutorials/pic/tut_opt07.png Binary files differnew file mode 100644 index 000000000..bb50b8abd --- /dev/null +++ b/doc/de/tutorials/pic/tut_opt07.png diff --git a/doc/de/tutorials/pic/tut_opt08.png b/doc/de/tutorials/pic/tut_opt08.png Binary files differnew file mode 100644 index 000000000..3f6af6793 --- /dev/null +++ b/doc/de/tutorials/pic/tut_opt08.png diff --git a/doc/de/tutorials/pic/tut_opt09.png b/doc/de/tutorials/pic/tut_opt09.png Binary files differnew file mode 100644 index 000000000..2f99755ee --- /dev/null +++ b/doc/de/tutorials/pic/tut_opt09.png diff --git a/doc/de/tutorials/pic/tut_opt10.png b/doc/de/tutorials/pic/tut_opt10.png Binary files differnew file mode 100644 index 000000000..959daa2fa --- /dev/null +++ b/doc/de/tutorials/pic/tut_opt10.png diff --git a/doc/de/tutorials/pic/tut_opt11.png b/doc/de/tutorials/pic/tut_opt11.png Binary files differnew file mode 100644 index 000000000..367a48ab3 --- /dev/null +++ b/doc/de/tutorials/pic/tut_opt11.png diff --git a/doc/de/tutorials/pic/tut_opt12.png b/doc/de/tutorials/pic/tut_opt12.png Binary files differnew file mode 100644 index 000000000..42e52a6c0 --- /dev/null +++ b/doc/de/tutorials/pic/tut_opt12.png diff --git a/doc/de/tutorials/pic/tut_opt13.png b/doc/de/tutorials/pic/tut_opt13.png Binary files differnew file mode 100644 index 000000000..4bf7b012c --- /dev/null +++ b/doc/de/tutorials/pic/tut_opt13.png diff --git a/doc/de/tutorials/pic/tut_opt14.png b/doc/de/tutorials/pic/tut_opt14.png Binary files differnew file mode 100644 index 000000000..a2b8e1e72 --- /dev/null +++ b/doc/de/tutorials/pic/tut_opt14.png diff --git a/doc/de/tutorials/pic/tut_opt15.png b/doc/de/tutorials/pic/tut_opt15.png Binary files differnew file mode 100644 index 000000000..690203699 --- /dev/null +++ b/doc/de/tutorials/pic/tut_opt15.png diff --git a/doc/de/tutorials/pic/tut_opt16.png b/doc/de/tutorials/pic/tut_opt16.png Binary files differnew file mode 100644 index 000000000..6c749c425 --- /dev/null +++ b/doc/de/tutorials/pic/tut_opt16.png diff --git a/doc/de/tutorials/pic/tut_opt17.png b/doc/de/tutorials/pic/tut_opt17.png Binary files differnew file mode 100644 index 000000000..a6794ac2d --- /dev/null +++ b/doc/de/tutorials/pic/tut_opt17.png diff --git a/doc/de/tutorials/pic/tut_opt18.png b/doc/de/tutorials/pic/tut_opt18.png Binary files differnew file mode 100644 index 000000000..36b1c2401 --- /dev/null +++ b/doc/de/tutorials/pic/tut_opt18.png diff --git a/doc/de/tutorials/pic/tut_opt19.png b/doc/de/tutorials/pic/tut_opt19.png Binary files differnew file mode 100644 index 000000000..f232da9bb --- /dev/null +++ b/doc/de/tutorials/pic/tut_opt19.png diff --git a/doc/de/tutorials/pic/tut_opt20.png b/doc/de/tutorials/pic/tut_opt20.png Binary files differnew file mode 100644 index 000000000..04565f65c --- /dev/null +++ b/doc/de/tutorials/pic/tut_opt20.png diff --git a/doc/de/tutorials/pic/tut_opt21.png b/doc/de/tutorials/pic/tut_opt21.png Binary files differnew file mode 100644 index 000000000..76430b695 --- /dev/null +++ b/doc/de/tutorials/pic/tut_opt21.png diff --git a/doc/de/tutorials/pic/tut_opt22.png b/doc/de/tutorials/pic/tut_opt22.png Binary files differnew file mode 100644 index 000000000..8e26bacf9 --- /dev/null +++ b/doc/de/tutorials/pic/tut_opt22.png diff --git a/doc/de/tutorials/pic/tut_opt23.png b/doc/de/tutorials/pic/tut_opt23.png Binary files differnew file mode 100644 index 000000000..389ba7df0 --- /dev/null +++ b/doc/de/tutorials/pic/tut_opt23.png diff --git a/doc/de/tutorials/pic/tut_opt24.png b/doc/de/tutorials/pic/tut_opt24.png Binary files differnew file mode 100644 index 000000000..7a7ad0e30 --- /dev/null +++ b/doc/de/tutorials/pic/tut_opt24.png diff --git a/doc/de/tutorials/pic/tut_opt25.png b/doc/de/tutorials/pic/tut_opt25.png Binary files differnew file mode 100644 index 000000000..c8639a679 --- /dev/null +++ b/doc/de/tutorials/pic/tut_opt25.png diff --git a/doc/de/tutorials/pic/tut_opt26.png b/doc/de/tutorials/pic/tut_opt26.png Binary files differnew file mode 100644 index 000000000..20e64f61a --- /dev/null +++ b/doc/de/tutorials/pic/tut_opt26.png diff --git a/doc/de/tutorials/pic/tut_opt27.png b/doc/de/tutorials/pic/tut_opt27.png Binary files differnew file mode 100644 index 000000000..3e161e20c --- /dev/null +++ b/doc/de/tutorials/pic/tut_opt27.png diff --git a/doc/de/tutorials/pic/tut_opt28.png b/doc/de/tutorials/pic/tut_opt28.png Binary files differnew file mode 100644 index 000000000..2f76472c2 --- /dev/null +++ b/doc/de/tutorials/pic/tut_opt28.png diff --git a/doc/de/tutorials/pic/tut_opt29.png b/doc/de/tutorials/pic/tut_opt29.png Binary files differnew file mode 100644 index 000000000..037cfdfa6 --- /dev/null +++ b/doc/de/tutorials/pic/tut_opt29.png diff --git a/doc/de/tutorials/step_with_hubzilla.md b/doc/de/tutorials/step_with_hubzilla.md new file mode 100644 index 000000000..b297082cb --- /dev/null +++ b/doc/de/tutorials/step_with_hubzilla.md @@ -0,0 +1,160 @@ +## Mit Hubzilla Schritt für Schritt ins Fediverse + +### Der Einstieg + +Wie bei jedem anderen Fediverse-Dienst steht am Anfang die Wahl des Servers (Hub). Das ist im Fediverse so und essenzieller Teil der dortigen Freiheit. + +Um Hubs zu finden können Sie die üblichen Wege beschreiben: dieNutzung entsprechende Datenbanken oder Listen. + +Z.B. + +[FediDB](https://fedidb.org/software/hubzilla) + + + +[Fediverse Observer](https://hubzilla.fediverse.observer/list) + + + +[Liste öffentlicher Hubs bei einem Hubzilla-Server](https://zotsite.net/pubsites) + + + +Haben Sie sich für einen Hub entschieden, dann rufen Sie die URL auf. Damit gelangen Sie auf eine Standard-Seite. Diese kann von Hub zu Hub etwas variieren, aber in der Regel finden Sie am oberen Rand des Bildschirms zwei Menüeinträge: „Anmelden“ und „Registrieren“. + + + + + +Ein Klick auf den Link führt zu einem Registrierungsformular. Hier gibt es mehrere mögliche Szenarien. Manche Hubs sind so eingestellt, dass man schon bei der Registrierung gleich einen Kanal mit erstellt (man kann – noch so eine Besonderheit von Hubzilla – mit einem Account mehrere Kanäle betreiben). Bei anderen Hubs legt man mit dem Formular zunächst nur einen Account an. Wenn man diesen erstellt hat und sich erstmalig einloggt, dann wird man auf das Formular zur Kanalerstellung geleitet. + + + + + +Um einen Account anzulegen, brauchen Sie eine (funktionierende) E-Mail-Adresse und Sie müssen sich ein Passwort ausdenken. Außerdem müssen Sie noch Ihr Alter bestätigen und können dann die eingegebenen Informationen abschicken. + +Nun landen Sie (meist, es soll auch Hubs geben, die diesen Schritt aussparen… halte ich für riskant) bei einer Eingabemaske, bei welcher man einen Verifizierungscode eingeben muss. Den bekommen Sie nach dem Absenden des Registrierungs-Formulars per E-Mail zugeschickt. + + + +Mussten Sie bei der Registrierung noch keinen Kanal anlegen, so werden Sie zu diesem Zeitpunkt zur Seite „Erstelle einen Kanal“ weitergeleitet. Hier müssen Sie sich nun einen Namen für die eigene Identität ausdenken. Und zusätzlich eine Kurzbezeichnung („Spitzname“) für den Kanal (ein Vorschlag wird automatisch aus dem Kanalnamen erzeugt). Diese Kurzbezeichnung wird der wesentliche Bestandteil des Fediverse-Handles (also der eigenen „Fediverse-Adresse“). + + + +| **Hinweis zum Handle bei Hubzilla:** | +| ------------------------------------------------------------ | +| Hubzilla macht beim Handle im Vergleich zu anderen Fediverse-Diensten eine Ausnahme. Während beinahe überall vor das Handle ein „@“ gesetzt wird, entfällt dies bei Hubzilla. Das verinnerlicht man aber schnell. Sucht man mit Hubzilla z.B. einen Nutzer, der ein Mastodon-Konto hat, über dessen Handle, dann lässt man das führende „@“ einfach weg. Will man hingegen von einem anderen Fediverse-Dienst aus einem Hubzilla-Nutzer folgen oder diesen suchen, stellt man dem Hubzilla-Handle einfach ein „@“ voran. | + +Nach dem Anlegen das Kanals sind Sie dann auch endlich „drin“. Als Standard landet man bei Hubzilla im „Headquarter“ („HQ“), einer Übersichtsseite über den eigenen Kanal. + + + +Und es ist, wie immer beim Einstieg im Fediverse, ziemlich leer dort. In der linken Seitenleiste finden Sie Tabs mit verschiedenen Informationen: + +- Öffentliche (oder eingeschränkte) Nachrichten: + Das ist eine kompakte Ansicht der persönlichen Timeline (bei Hubzilla „Stream“ genannt) +- Direktnachrichten: + Postings, die nur unter ausgewählten Teilnehmern ausgetauscht werden. +- Favorisierte Postings: + Man kann ein Posting mit einem „Sternchen“ versehen, um sie zu markieren. Solchermaßen markierte Beiträge landen hier. +- Benachrichtigungen + +In der Mitte wird der persönliche Stream (Timeline) angezeigt. In der rechten Seitenleiste werden wichtige Informationen (Mitteilung über neue Kontakte, neue Beiträge etc.) angezeigt. Bei einem neu erzeugten Kanal erscheint hier auch eine Auflistung für die ersten Schritte bei Hubzilla und Links, die zu den entsprechenden Funktionen führen. + +Benötigt man diese Einsteiger-Hilfe nicht mehr, lässt sie sich unter Einstellungen → Anzeige-Einstellungen → Inhaltseinstellungen per Schalter abschalten. + + + + + + + + + +Zunächst sollten Sie Ihr Profil sinnvoll befüllen… wie bei jedem Fediverse-Dienst. Keine schwarze Magie! + +Am oberen Bildschirmrand befindet sich die Navigationsleiste. Links ist das Menü zur Kanalauswahl, für das eigene Profil und für die Einstellungen zu sehen. Rechts befinden sich Icons für einige Funktionen und das sogenannte „App-Menü“ (⋮), über welches man zu den installierten Apps gelangt. Als Standard werden dort die wichtigsten Anwendungen bereits zur Verfügung gestellt: + +- Dateien: + Zugang zur eigenen Cloud +- Fotos: + Zugang zum eigenen Fotoalbum +- Hilfe +- Kalender +- Kanal: + Die Seite des eigenen Kanals mit den Kanalinformationen. Hier werden im Stream nur die eigenen Beiträge angezeigt. +- Stream: + Es wird zur föderierten Streamansicht gewechselt. +- Verbindungen: + Hier werden die vorhandenen Verbindungen aufgeführt („Follower“ und „Gefolgte“). Außerdem kann man im Verbindungsverzeichnis neue Verbindungen hinzufügen. +- Verzeichnis: + Das Benutzerverzeichnis wird angezeigt. Beachte: Man kann das globale Verzeichnis anschauen oder auch nur ein Verzeichnis mit den Nutzern der eigenen Instanz. Auch hier kann man neue Verbindungen herstellen. + +**Ich empfehle dringend, noch einige weitere Apps zu installieren und zu aktivieren: ActivityPub, Superblock und Öffentlicher Beitragsstream.** + +**Die App ActivityPub ist essenziell, wenn man am Fediverse teilnehmen möchte.** Diese App ist ein **MUSS** und erfordert lediglich die Installation und Aktivierung. Weitere Einstellungen sind nicht erforderlich. + +Superblock ist ebenfalls sehr wichtig, denn damit ist es möglich, Postings von (auch nicht gefolgten) Nutzern aus dem Stream auszuschließen. + +Bei vielen (leider, aber auch verständlicher Weise, nicht bei allen) Hubs steht außerdem die App „Öffentlicher Beitragsstream“ zur Verfügung. Diese stellt die öffentliche Zeitleiste aller Fediverse-Instanzen, die mit dem eigenen Hub föderieren, zur Verfügung. Ein guter Ort, sich zu orientieren und neue Kontakte zu finden. + +Apps zu installieren und zu aktivieren ist kein Problem. Man wählt im App-Menü den letzten Eintrag „+ Apps“ um zur App-Verwaltung zu gelangen. + + + +Hier können Sie sich die installierten Apps (also die voreingestellten Apps) und die generell verfügbaren Apps (alle, auch die nicht installierten) anzeigen lassen. + + + +ActivityPub, Superblock und Öffentlicher Beitragsstream befinden sich noch ausschließlich unter „Verfügbare Apps“. Ein Klick auf „Installieren“ installiert diese und sie stehen dann auch bei „Installierte Apps“ zur Verfügung. + + + + + +Die neu installierten Apps müssen noch „aktiviert“, also auch durch das Menü nutzbar gemacht werden. Man findet in der Box der App ein „Sternchen-Symbol“. Klickt man darauf, färbt sich der Stern gelb und die App ist aktiv und erscheint nun auch im App-Menü. + + + + + +Es gibt auch noch ein Pinnadel-Symbol. Klicken Sie dies an, so erscheint die App dauerhaft auch in der Navigationsleiste oben rechts. + + + +Es ist außerdem empfehlenswert, bei dieser Gelegenheit die Apps“Kanal“ und „Stream“ an die Navigationsleiste anzupinnen, weil diese oft benötigt werden. + +### Wichtig noch, wie man Kontakte hinzufügt… + +Haben Sie z.B. im öffentlichen Stream einen interessanten Nutzer gefunden, können Sie einfach auf das Profilbild des Nutzers klicken und im aufklappenden Menü „Verbinden“ auswählen. Sie können aber auch auf das Handle des Nutzer klicken worauf Sie auf eine Seite mit einem Button „Verbinden“ geleitet werden.. + +Kennt man das Handle eines Fediverse-Nutzers, dann kann man auch einfach auf die App „Verbindungen“ klicken. Es öffnet sich das Verbindungs-Verzeichnis. Ganz oben befindet sich ein Button „+ Add“. Klicken Sie auf diesen, öffnet sich ein Eingabefeld, in welches Sie das Handle eingeben können (dran denken: ohne führendes „@“). Ein Klick auf das daneben befindliche „+“ und der Kontakt wird hinzugefügt. + + + + + + + + + +Schließlich können Sie auch das Verzeichnis aufrufen (am besten „nur dieser Hub“ in der linken Seitenleiste deaktivieren, um das globale Verzeichnis zu nutzen). Hier können Sie einfach durchscrollen oder auch gezielt nach Namen oder Interessen suchen, oder auch nach Tags (Schnellzugriff auch über eine Schlagwörterwolke in der linken Seitenleiste). Das Verbinden erfolgt hier durch Klick auf den Button „Verbinden“. + + + + + +Haben Sie Kontakte, die Apps installiert und Ihr Profil vervollständigt, können Sie Hubzilla nun ganz einfach wie jeden anderen Fediversedienst nutzen. + +### Gibt es eine App? + +Jein… + +Grundsätzlich benötigt man keine. Man kann auf dem mobilen Endgerät einfach im Webbrowser den Hub aufrufen. Das responsive Design erlaubt eine ordentliche Bedienung. + +Allerdings gibt es für Android eine ältere App, die aber auch heute noch sehr gut funktioniert. Man findet sie z.B. bei [F-Droid](https://f-droid.org/de/) unter dem Namen [Nomad](https://f-droid.org/de/packages/com.dfa.hubzilla_android/). Ich verwende sie noch immer, wenn ich mal (was selten ist) auf dem Smartphone mit Hubzilla arbeiten möchte. + + + +Als Alternative ist es empfehlenswert, wenn man mobil unterwegs ist, Hubzilla als PWA auf dem Gerät zu installieren: [Eine Hubzilla-App](https://info.hubzilla.hu/de/Hubzilla-App.html) diff --git a/doc/de/tutorials/tutorials.md b/doc/de/tutorials/tutorials.md new file mode 100644 index 000000000..006a24bed --- /dev/null +++ b/doc/de/tutorials/tutorials.md @@ -0,0 +1,7 @@ +## Tutorials + +#### [Mit Hubzilla Schritt für Schritt ins Fediverse](./step_with_hubzilla.md) + +#### [Hubzilla optisch anpassen](./customise_look.md) + +#### [Ein abgeleitetes Thema erstellen](./DerivedTheme1.md)
\ No newline at end of file diff --git a/doc/de/ui.md b/doc/de/ui.md new file mode 100644 index 000000000..1399770b3 --- /dev/null +++ b/doc/de/ui.md @@ -0,0 +1,5 @@ +# Oberfläche / Bezeichnungen + + + + diff --git a/include/conversation.php b/include/conversation.php index 97a65c27d..bd1b7f863 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -1448,14 +1448,14 @@ function get_response_button_text($v, $count = 0) { case 'comment': return ['label' => tt('Reply','Replies',$count,'noun'), 'icon' => 'chat', 'class' => 'comment', 'action' => '']; break; - case 'attendyes': - return ['label' => tt('Attending','Attending',$count,'noun'), 'icon' => 'calendar-check', 'class' => 'attendyes', 'action' => 'dolike']; + case 'accept': + return ['label' => tt('Attending','Attending',$count,'noun'), 'icon' => 'calendar-check', 'class' => 'accept', 'action' => 'dolike']; break; - case 'attendno': - return ['label' => tt('Not attending','Not attending',$count,'noun'), 'icon' => 'calendar-x', 'class' => 'attendno', 'action' => 'dolike']; + case 'reject': + return ['label' => tt('Not attending','Not attending',$count,'noun'), 'icon' => 'calendar-x', 'class' => 'reject', 'action' => 'dolike']; break; - case 'attendmaybe': - return ['label' => tt('Undecided','Undecided',$count,'noun'), 'icon' => 'calendar', 'class' => 'attendmaybe', 'action' => 'dolike']; + case 'tentativeaccept': + return ['label' => tt('Undecided','Undecided',$count,'noun'), 'icon' => 'calendar', 'class' => 'tentativeaccept', 'action' => 'dolike']; break; default: return []; diff --git a/include/items.php b/include/items.php index 55d768e28..021d743a5 100644 --- a/include/items.php +++ b/include/items.php @@ -5361,250 +5361,238 @@ function set_activity_mid($string) { } /** - * @brief returns SQL which counts activities for an item and - * if there is an observer also count activities authored by observer. - * @param string $prefix (optional) - */ - -function item_activity_sql($prefix = 'c') { - $sql = ''; - $observer = get_observer_hash(); - - $thread_allow = ((local_channel()) ? PConfig::Get(local_channel(), 'system', 'thread_allow', true) : Config::Get('system', 'thread_allow', true)); - - if ($observer) { - $sql = <<<SQL - COUNT(CASE WHEN $prefix.verb = 'Like' AND $prefix.author_xchan = '$observer' THEN 1 END) AS observer_liked, - COUNT(CASE WHEN $prefix.verb = 'Dislike' AND $prefix.author_xchan = '$observer' THEN 1 END) AS observer_disliked, - COUNT(CASE WHEN $prefix.verb = 'Announce' AND $prefix.author_xchan = '$observer' THEN 1 END) AS observer_announced, - COUNT(CASE WHEN $prefix.verb = 'Accept' AND $prefix.author_xchan = '$observer' THEN 1 END) AS observer_accepted, - COUNT(CASE WHEN $prefix.verb = 'Reject' AND $prefix.author_xchan = '$observer' THEN 1 END) AS observer_rejected, - COUNT(CASE WHEN $prefix.verb = 'TentativeAccept' AND $prefix.author_xchan = '$observer' THEN 1 END) AS observer_tentativelyaccepted, - SQL; - - if ($thread_allow) { - $sql .= " COUNT(CASE WHEN $prefix.verb IN ('Create','Update') AND $prefix.author_xchan = '$observer' THEN 1 END) AS observer_commented, "; - } - } - - - if ($thread_allow) { - $sql .= "COUNT(CASE WHEN $prefix.verb IN ('Create','Update') THEN 1 END) AS comment_count,"; - } - - $sql .= <<<SQL - COUNT(CASE WHEN $prefix.verb = 'Like' THEN 1 END) AS like_count, - COUNT(CASE WHEN $prefix.verb = 'Dislike' THEN 1 END) AS dislike_count, - COUNT(CASE WHEN $prefix.verb = 'Announce' THEN 1 END) AS announce_count, - COUNT(CASE WHEN $prefix.verb = 'Accept' THEN 1 END) AS attendyes_count, - COUNT(CASE WHEN $prefix.verb = 'Reject' THEN 1 END) AS attendno_count, - COUNT(CASE WHEN $prefix.verb = 'TentativeAccept' THEN 1 END) AS attendmaybe_count - SQL; - - return $sql; - -} - -/** - * @brief returns an item by id belonging to local_channel() + * @brief returns an item by id and parent belonging to local_channel() * including activity counts. * @param int $id + * @param int $parent */ -function item_by_item_id(int $id): array +function item_by_item_id(int $id, int $parent): array { - if (!$id) { + if (!$id && !$parent && !local_channel()) { return []; } - $item_normal = item_normal(); - $item_normal_c = item_normal(prefix: 'c'); - $activity_sql = item_activity_sql('c'); + $item_normal_sql = item_normal(); - $ret = q("SELECT item.*, - $activity_sql + $reaction = item_reaction_sql($parent); + $reaction_cte_sql = $reaction['cte']; + $reaction_select_sql = $reaction['select']; + $reaction_join_sql = $reaction['join']; + + return q("WITH + $reaction_cte_sql + SELECT + *, + $reaction_select_sql FROM item - LEFT JOIN item c - ON c.parent = item.parent - AND c.item_thread_top = 0 - AND c.thr_parent = item.mid - $item_normal_c - WHERE item.id = $id + $reaction_join_sql + WHERE + item.id = %d AND item.uid = %d - $item_normal - GROUP BY item.id", + AND item.verb NOT IN ('Like', 'Dislike', 'Announce', 'Accept', 'Reject', 'TentativeAccept', 'Add', 'Remove', 'Follow', 'Ignore') + $item_normal_sql", + intval($id), intval(local_channel()) ); - - return $ret; } + /** * @brief returns an array of items by ids - * ATTENTION: no permissions for the pa are checked here!!! - * Permissions MUST be checked by the function which returns the ids. - * @param string $ids - a string with ids separated by comma - * @param array $thr_parents (optional) - a string with thr_parent mids separated by comma - * which will be included - * @param string $permission_sql (optional) - SQL provided by item_permission_sql() from the calling module + * ATTENTION: no permissions for the parents are checked here!!! + * Permissions MUST be checked by the module which calls this function. + * @param array $parents + * @param null|array $thr_parents (optional) - thr_parent mids which will be included + * @param string $permission_sql (optional) - SQL as provided by item_permission_sql() from the calling module * @param bool $blog_mode (optional) - if set to yes only the parent items will be returned */ -function items_by_parent_ids(string $ids, array $thr_parents = [], string $permission_sql = '', bool $blog_mode = false): array +function items_by_parent_ids(array $parents, null|array $thr_parents = null, string $permission_sql = '', bool $blog_mode = false): array { - if (!$ids) { + if (!$parents) { return []; } - + $ids = ids_to_querystr($parents, 'item_id'); $thread_allow = ((local_channel()) ? PConfig::Get(local_channel(), 'system', 'thread_allow', true) : Config::Get('system', 'thread_allow', true)); - $item_normal_sql = item_normal(); - $activity_sql_cte = item_activity_sql_cte(); - $activity_sql_cte_sub = item_activity_sql_cte('sub'); + $limit = $thread_allow ? 3 : 1000; $thr_parent_sql = (($thread_allow) ? " AND item.thr_parent = item.parent_mid " : ''); - if ($thr_parents && $thread_allow) { + $limit = 300; $thr_parent_str = stringify_array($thr_parents, true); $thr_parent_sql = " AND item.thr_parent IN (" . protect_sprintf($thr_parent_str) . ") "; } + $reaction = item_reaction_sql($ids, $permission_sql, 'final_selection'); + $reaction_cte_sql = $reaction['cte']; + $reaction_select_sql = $reaction['select']; + $reaction_join_sql = $reaction['join']; + if ($blog_mode) { - $ret = q("SELECT item.*, - $activity_sql_cte - FROM item - WHERE item.id IN (%s) - $item_normal_sql - $permission_sql", - dbesc($ids) - ); + $q = <<<SQL + WITH + final_selection AS ( + SELECT + item.* + FROM + item + WHERE + item.id IN ($ids) + ), + + $reaction_cte_sql + + SELECT + final_selection.*, + $reaction_select_sql + FROM final_selection + $reaction_join_sql + SQL; + + return dbq(trim($q)); } - else { - $ret = q("WITH parents AS ( - SELECT item.*, - 0 AS rn, -- this is required for union (equal amount of coulumns) - $activity_sql_cte + + $q = <<<SQL + WITH + parent_items AS ( + SELECT + item.*, + 0 AS rn FROM item - WHERE item.id IN (%s) - $item_normal_sql + WHERE + item.id IN ($ids) + ), + + $reaction_cte_sql, + + all_comments AS ( + SELECT + item.*, + ROW_NUMBER() OVER (PARTITION BY item.parent ORDER BY item.created DESC) AS rn + FROM item + WHERE item.parent IN ($ids) + AND item.verb NOT IN ('Like', 'Dislike', 'Announce', 'Accept', 'Reject', 'TentativeAccept', 'Add', 'Remove', 'Follow', 'Ignore') + AND item.item_thread_top = 0 + $thr_parent_sql $permission_sql - ), - comments AS ( - SELECT sub.*, - $activity_sql_cte_sub - FROM ( - SELECT item.*, - ROW_NUMBER() OVER (PARTITION BY item.parent ORDER BY item.created DESC) AS rn - FROM item - WHERE item.parent IN (%s) - AND item.id != item.parent - AND ( - item.verb NOT IN ('Like', 'Dislike', 'Announce', 'Accept', 'Reject', 'TentativeAccept') - OR (item.verb = 'Announce' AND item.item_thread_top = 1) - ) - $thr_parent_sql - $item_normal_sql - $permission_sql - ) sub - WHERE rn <= 100 -- number of comments we want to load - ) - SELECT * FROM parents + $item_normal_sql + ), + + final_selection AS ( + SELECT * FROM parent_items UNION ALL - SELECT * FROM comments", - dbesc($ids), - dbesc($ids) - ); - } + SELECT * FROM all_comments WHERE all_comments.rn <= $limit + ) + + SELECT + final_selection.*, + $reaction_select_sql + FROM final_selection + $reaction_join_sql + SQL; - return $ret; + return dbq(trim($q)); } /** - * @brief returns SQL which counts activities for an item and - * if there is an observer also count activities authored by observer. - * @param string $prefix (optional) + * @brief prepare reaction sql for items_by_parent_ids() + * ATTENTION: no permissions for the pa are checked here!!! + * Permissions MUST be checked by the function which returns the ids. + * @param string $ids + * @param string $permission_sql (optional) - SQL provided by item_permission_sql() + * @param string $join_prefix (optional) - prefix for the join part defaults to 'item' */ -function item_activity_sql_cte($prefix = 'item'): string +function item_reaction_sql(string $ids, string $permission_sql = '', string $join_prefix = 'item'): array { - $thread_allow = ((local_channel()) ? PConfig::Get(local_channel(), 'system', 'thread_allow', true) : Config::Get('system', 'thread_allow', true)); + $item_normal_sql = item_normal(); $observer = get_observer_hash(); - $sql = ''; - - if ($observer) { - $observer_verbs = [ - 'Like' => 'observer_liked', - 'Dislike' => 'observer_disliked', - 'Announce' => 'observer_announced', - 'Accept' => 'observer_accepted', - 'Reject' => 'observer_rejected', - 'TentativeAccept' => 'observer_tentativelyaccepted' - ]; - foreach($observer_verbs as $k => $v) { - if ($sql) { - $sql .= ",\n"; - } + $verbs = [ + 'like' => ['Like'], + 'dislike' => ['Dislike'], + 'announce' => ['Announce'], + 'accept' => ['Accept'], + 'reject' => ['Reject'], + 'tentativeaccept' => ['TentativeAccept'] + ]; - $sql .= <<<SQL - (SELECT COUNT(*) FROM item AS reaction - WHERE reaction.parent = $prefix.parent AND reaction.verb = '$k' AND reaction.author_xchan = '$observer' AND reaction.item_thread_top = 0 AND reaction.thr_parent = $prefix.mid - ) AS $v - SQL; - } + $thread_allow = ((local_channel()) ? PConfig::Get(local_channel(), 'system', 'thread_allow', true) : Config::Get('system', 'thread_allow', true)); - if ($thread_allow) { - $sql .= ",\n"; - $sql .= <<<SQL - (SELECT COUNT(*) FROM item AS reaction - WHERE reaction.parent = $prefix.parent AND reaction.verb IN ('Create', 'Update') AND reaction.author_xchan = '$observer' AND reaction.item_thread_top = 0 AND reaction.thr_parent = $prefix.mid - ) AS observer_commented - SQL; - } + if ($thread_allow) { + $verbs['comment'] = ['Create', 'Update']; } - $verbs = [ - 'Like' => 'like_count', - 'Dislike' => 'dislike_count', - 'Announce' => 'announce_count', - 'Accept' => 'attendyes_count', - 'Reject' => 'attendno_count', - 'TentativeAccept' => 'attendmaybe_count' - ]; + $cte = ''; + $select = ''; + $join = ''; foreach($verbs as $k => $v) { - if ($sql) { - $sql .= ",\n"; + + $observer_sql = "0 AS observer_{$k}_count"; + if ($observer) { + $observer_sql = "COUNT(CASE WHEN item.author_xchan = '$observer' THEN 1 END) AS observer_{$k}_count"; + } + + $verbs_str = stringify_array($v); + + if ($cte) { + $cte .= ",\n"; } - $sql .= <<<SQL - (SELECT COUNT(*) FROM item AS reaction - WHERE reaction.parent = $prefix.parent AND reaction.verb = '$k' AND reaction.item_thread_top = 0 AND reaction.thr_parent = $prefix.mid - ) AS $v + $cte .= <<<SQL + reaction_{$k} AS ( + SELECT + item.thr_parent, + -- COUNT(DISTINCT item.author_xchan) AS {$k}_count, (should we prevent multiple reactions by the same author?) + COUNT(*) AS {$k}_count, + $observer_sql + FROM item + WHERE item.verb IN ($verbs_str) + AND item.item_thread_top = 0 + AND item.parent IN ($ids) + $item_normal_sql + $permission_sql + GROUP BY item.thr_parent + ) SQL; - } - if ($thread_allow) { - $sql .= ",\n"; - $sql .= <<<SQL - (SELECT COUNT(*) FROM item AS reaction - WHERE reaction.parent = $prefix.parent AND reaction.verb IN ('Create', 'Update') AND reaction.item_thread_top = 0 AND reaction.thr_parent = $prefix.mid - ) AS comment_count + if ($select) { + $select .= ",\n"; + } + + $select .= <<<SQL + COALESCE(reaction_{$k}.{$k}_count, 0) AS {$k}_count, + COALESCE(reaction_{$k}.observer_{$k}_count, 0) AS observer_{$k}_count + SQL; + + $join .= <<<SQL + LEFT JOIN reaction_{$k} ON reaction_{$k}.thr_parent = $join_prefix.mid SQL; + } - return $sql; + $ret['cte'] = $cte; + $ret['select'] = $select; + $ret['join'] = $join; + + return $ret; } + + /** * @brief returns an array of items by thr_parent mid of a parent * @param string $mid * @param int $parent + * @param int|null $offset */ -function items_by_thr_parent(string $mid, int $parent): array +function items_by_thr_parent(string $mid, int $parent, int|null $offset = null): array { if (!$mid && !$parent) { return []; @@ -5614,63 +5602,75 @@ function items_by_thr_parent(string $mid, int $parent): array intval($parent) ); - $owner_uid = intval($parent_item[0]['uid']); + $order_sql = "ORDER BY item.created"; + if (isset($offset)) { + $order_sql = "ORDER BY item.created DESC LIMIT 3 OFFSET $offset"; + } - $item_normal = item_normal($owner_uid); - $item_normal_c = item_normal($owner_uid, 'c'); - $activity_sql = item_activity_sql('c'); + $owner_uid = intval($parent_item[0]['uid']); + $item_normal_sql = item_normal($owner_uid); if (local_channel() === $owner_uid) { - $ret = q( - "SELECT item.*, - $activity_sql + $reaction = item_reaction_sql($parent); + $reaction_cte_sql = $reaction['cte']; + $reaction_select_sql = $reaction['select']; + $reaction_join_sql = $reaction['join']; + + $ret = q("WITH + $reaction_cte_sql + SELECT + item.*, + $reaction_select_sql FROM item - LEFT JOIN item c ON c.parent = item.parent - AND c.item_thread_top = 0 - AND c.thr_parent = item.mid - $item_normal_c - WHERE item.thr_parent = '%s' + $reaction_join_sql + WHERE + item.thr_parent = '%s' AND item.uid = %d - AND item.parent = %d - AND item.verb NOT IN ('Like', 'Dislike', 'Announce', 'Accept', 'Reject', 'TentativeAccept') + AND item.verb NOT IN ('Like', 'Dislike', 'Announce', 'Accept', 'Reject', 'TentativeAccept', 'Add', 'Remove', 'Follow', 'Ignore') AND item.item_thread_top = 0 - $item_normal - GROUP BY item.id - ORDER BY item.created", + $item_normal_sql + $order_sql", dbesc($mid), - intval(local_channel()), - intval($parent) + intval($owner_uid) ); } - - if (!$ret) { + else { $observer_hash = get_observer_hash(); - $sql_extra = item_permissions_sql($owner_uid, $observer_hash); - - $ret = q( - "SELECT item.*, - $activity_sql + $permission_sql = item_permissions_sql($owner_uid, $observer_hash); + + $reaction = item_reaction_sql($parent, $permission_sql); + $reaction_cte_sql = $reaction['cte']; + $reaction_select_sql = $reaction['select']; + $reaction_join_sql = $reaction['join']; + + $ret = q("WITH + $reaction_cte_sql + SELECT + item.*, + $reaction_select_sql FROM item - LEFT JOIN item c ON c.parent = item.parent - AND c.item_thread_top = 0 - AND c.thr_parent = item.mid - $item_normal_c - WHERE item.thr_parent = '%s' + $reaction_join_sql + WHERE + item.thr_parent = '%s' AND item.uid = %d - AND item.verb NOT IN ('Like', 'Dislike', 'Announce', 'Accept', 'Reject', 'TentativeAccept') + AND item.verb NOT IN ('Like', 'Dislike', 'Announce', 'Accept', 'Reject', 'TentativeAccept', 'Add', 'Remove', 'Follow', 'Ignore') AND item.item_thread_top = 0 - $sql_extra - $item_normal - GROUP BY item.id - ORDER BY item.created", + $permission_sql + $item_normal_sql + $order_sql", dbesc($mid), intval($owner_uid) ); } + if (isset($offset)) { + $ret = array_reverse($ret); + } + return $ret; } + /** * @brief returns an array of xchan entries (partly) for activities of an item by mid of a parent. * Also checks if observer is allowed to add activities to the item. @@ -5702,6 +5702,7 @@ function item_activity_xchans(string $mid, int $parent, string $verb): array AND item.verb = '%s' AND item.item_thread_top = 0 $item_normal + -- GROUP BY item.author_xchan (should we prevent multiple reactions by the same author?) ORDER BY item.created", intval(local_channel()), intval($parent), @@ -5709,8 +5710,7 @@ function item_activity_xchans(string $mid, int $parent, string $verb): array dbesc($verb) ); } - - if (!$ret) { + else { $sql_extra = item_permissions_sql($owner_uid, $observer_hash); $ret = q("SELECT item.id, item.item_blocked, xchan.xchan_hash, xchan.xchan_name as name, xchan.xchan_url as url, xchan.xchan_photo_s as photo FROM item @@ -5721,6 +5721,7 @@ function item_activity_xchans(string $mid, int $parent, string $verb): array AND item.item_thread_top = 0 $sql_extra $item_normal + -- GROUP BY item.author_xchan (should we prevent multiple reactions by the same author?) ORDER BY item.created", intval($owner_uid), dbesc($mid), @@ -5740,8 +5741,13 @@ function item_activity_xchans(string $mid, int $parent, string $verb): array * @param array $item */ -function get_recursive_thr_parents(array $item): array +function get_recursive_thr_parents(array $item): array|null { + if ($item['id'] === $item['parent']) { + // This is a toplevel post, return null. + return null; + } + $thr_parents[] = $item['thr_parent']; $mid = $item['thr_parent']; diff --git a/include/photo/photo_driver.php b/include/photo/photo_driver.php index 3de873638..88b9d1d62 100644 --- a/include/photo/photo_driver.php +++ b/include/photo/photo_driver.php @@ -76,7 +76,7 @@ function guess_image_type($filename, $data = []) { logger('filename: ' . print_r($filename, true), LOGGER_DEBUG); // Try Fileinfo from raw data - if (!empty($data['body'])) { + if (class_exists('finfo') && !empty($data['body'])) { $finfo = new finfo(FILEINFO_MIME_TYPE); $mime = $finfo->buffer($data['body']); if ($mime && array_key_exists($mime, $types)) { diff --git a/tests/unit/Lib/ActivityTest.php b/tests/unit/Lib/ActivityTest.php index 1857487c8..46f53ecd9 100644 --- a/tests/unit/Lib/ActivityTest.php +++ b/tests/unit/Lib/ActivityTest.php @@ -274,4 +274,11 @@ class ActivityTest extends UnitTestCase { ]; } + public function testBuildPacketWithEmptyChannel(): void { + $data = [ 'aKey' => 'aValue' ]; + $packet = json_decode(Activity::build_packet($data, []), true); + + $this->assertArrayHasKey('aKey', $packet); + $this->assertEquals('aValue', $packet['aKey']); + } } diff --git a/tests/unit/Lib/JcsEddsa2022Test.php b/tests/unit/Lib/JcsEddsa2022Test.php index d18ad01ce..7cdc655f8 100644 --- a/tests/unit/Lib/JcsEddsa2022Test.php +++ b/tests/unit/Lib/JcsEddsa2022Test.php @@ -3,6 +3,7 @@ namespace Zotlabs\Tests\Unit\Lib; use Zotlabs\Lib\JcsEddsa2022; +use Zotlabs\Lib\JcsEddsa2022SignException; use Zotlabs\Tests\Unit\UnitTestCase; class JcsEddsa2022Test extends UnitTestCase { @@ -171,4 +172,11 @@ class JcsEddsa2022Test extends UnitTestCase { $this->assertTrue($verified, 'Verify encode and decode eddsa-jcs-2022'); } + + public function testSignWithInvalidChannelShouldBeRejected(): void { + $this->expectException(JcsEddsa2022SignException::class); + + $alg = new JcsEddsa2022(); + $res = $alg->sign([], []); + } } diff --git a/view/css/conversation.css b/view/css/conversation.css index d8a893b0e..b1b405c9b 100644 --- a/view/css/conversation.css +++ b/view/css/conversation.css @@ -193,18 +193,32 @@ a.wall-item-name-link { color: var(--bs-primary); } -.item-highlight { +.item-highlight, +.item-indent, +.wall-item-comment, +.thread-wrapper { position: relative; } +.item-fade-in { + opacity: 0; + transform: scale(.7) translateY(-20px); + transition: opacity 0.3s ease-out, transform 0.3s ease-out; +} +.item-fade-in.show { + opacity: 1; + transform: scale(1) translateY(0); +} + .item-highlight:after { content: ''; position: absolute; pointer-events: none; box-shadow: inset .15rem 0 0 0 var(--hz-item-highlight); - height: 100%; width: 100%; top: 0; + bottom: 0; + margin: var(--bs-border-radius) 0 var(--bs-border-radius) 0; } .item-highlight-fade { @@ -217,6 +231,45 @@ a.wall-item-name-link { to { background-color: none; } } +.item-indent { + /* This must be equal to .item.indent:before width */ + padding-left: .75rem; +} + +.item-indent:before { + content: ''; + position: absolute; + height: 100%; + width: .75rem; + top: 0; + left: 0; + border-color: var(--hz-item-indent, var(--bs-border-color)); + border-radius: 0 var(--bs-border-radius) 0 0; + border-style: solid; + border-width: 1px 1px 0 0; +} + +.wall-item-comment.expanded { + opacity: 0.5; +} + +.wall-item-backdrop::before { + content: ''; + position: absolute; + inset: 0; + backdrop-filter: saturate(0%) brightness(90%); + z-index: 1; +} + + +.wall-item-expanded { + position: relative; + border: 1px solid var(--bs-danger); + border-radius: var(--bs-border-radius); + background-color: var(--bs-body-bg); + z-index: 2; +} + /* comment_item */ diff --git a/view/js/main.js b/view/js/main.js index 7043c8577..8e369f62a 100644 --- a/view/js/main.js +++ b/view/js/main.js @@ -28,6 +28,8 @@ var expanded_items = []; var updateTimeout = []; const singlethread_modules = ['display', 'hq']; const redirect_modules = ['display', 'notify']; +let b64mids = []; + var page_cache = {}; @@ -87,6 +89,124 @@ $(document).ready(function() { } }); + document.addEventListener('click', function(event) { + const targetElement = event.target.closest('.wall-item-reaction'); + if (!targetElement) return; + + const userClick = event.isTrusted; + const id = targetElement.dataset.itemId; + const mid = targetElement.dataset.itemMid; + const parent = targetElement.dataset.itemParent; + const uuid = targetElement.dataset.itemUuid; + const verb = targetElement.dataset.itemVerb; + + if (targetElement.classList.contains('wall-item-comment')) { + const threadWrapper = document.getElementById(`thread-wrapper-${id}`); + const subWrapper = document.getElementById(`wall-item-sub-thread-wrapper-${id}`); + const parentSubWrapper = document.querySelectorAll(`#wall-item-sub-thread-wrapper-${parent} .wall-item-sub-thread-wrapper`); + const parentSubWrapperIndented = document.querySelector(`#wall-item-sub-thread-wrapper-${parent} .wall-item-sub-thread-wrapper.item-indent`); + + subWrapper.style.setProperty('--hz-item-indent', stringToHslColor(uuid)); + threadWrapper.style.setProperty('--hz-item-highlight', stringToHslColor(uuid)); + + document.querySelectorAll('.thread-wrapper.item-highlight').forEach(el => { + el.classList.remove('item-highlight'); + }); + + if (!parentSubWrapperIndented && userClick) { + threadWrapper.classList.add('item-highlight'); + } + else { + subWrapper.classList.add('item-indent'); + } + + if (userClick && targetElement.classList.contains('expanded')) { + document.querySelectorAll('.thread-wrapper.item-highlight').forEach(el => { + el.classList.remove('item-highlight'); + }); + + parentSubWrapper.forEach(el => { + if (el.children.length > 0) { + el.classList.add('item-indent'); + } + }); + + targetElement.classList.add('disabled'); + return; + } + + targetElement.classList.add('expanded'); + + if (!userClick) { + targetElement.classList.add('disabled'); + } + } + + request(id, mid, verb, parent, uuid, userClick); + }); + + document.addEventListener('click', function(event) { + const targetElement = event.target.closest('.dropdown-item-expand'); + if (!targetElement) return; + + // Disable the button we just clicked + targetElement.classList.add('disabled'); + event.preventDefault(); + + document.querySelectorAll('.thread-wrapper.item-highlight').forEach(el => { + el.classList.remove('item-highlight'); + }); + + const id = targetElement.dataset.itemId; + const uuid = targetElement.dataset.itemUuid; + const subWrapper = document.getElementById(`wall-item-sub-thread-wrapper-${id}`); + + const loading = document.getElementById('like-rotator-' + id); + + const wrapper = document.getElementById('thread-wrapper-' + id); + const parent = wrapper.closest('.generic-content-wrapper'); + + parent.querySelectorAll('.wall-item-sub-thread-wrapper.item-indent').forEach(el => { + el.classList.remove('item-indent'); + }); + + parent.querySelectorAll('.thread-wrapper.wall-item-expanded').forEach(el => { + el.classList.remove('wall-item-expanded'); + }); + + parent.classList.add('wall-item-backdrop'); + wrapper.classList.add('wall-item-expanded', 'shadow'); + + if (!wrapper.classList.contains('toplevel_item')) { + document.documentElement.style.setProperty('--hz-item-highlight', stringToHslColor(uuid)); + } + + autoExpand(id); + + // Close and reset if dbl clicked + wrapper.addEventListener('dblclick', function(event) { + + parent.classList.remove('wall-item-backdrop'); + wrapper.classList.remove('wall-item-expanded', 'shadow'); + + wrapper.querySelectorAll('.dropdown-item-expand').forEach(el => { + el.classList.remove('disabled'); + }); + + wrapper.querySelectorAll('.wall-item-comment').forEach(el => { + el.classList.remove('disabled', 'expanded'); + }); + + subWrapper.querySelectorAll('.wall-item-comment').forEach(el => { + el.classList.remove('disabled', 'expanded'); + }); + + subWrapper.innerHTML = ''; + subWrapper.classList.remove('item-indent'); + }) + + }); + // @hilmar |-> if ( typeof(window.tao) == 'undefined' ) { window.tao = {}; @@ -756,7 +876,7 @@ function updateConvItems(mode, data) { if (data_json.includes(bParam_mid) && elem.parentNode.classList.contains('wall-item-sub-thread-wrapper')) { if (!elem.parentNode.parentNode.classList.contains('toplevel_item')) { elem.parentNode.parentNode.classList.add('item-highlight'); - document.documentElement.style.setProperty('--hz-item-highlight', stringToHlsColor(JSON.parse(elem.parentNode.parentNode.dataset.b64mids)[0])); + document.documentElement.style.setProperty('--hz-item-highlight', stringToHslColor(JSON.parse(elem.parentNode.parentNode.dataset.b64mids)[0])); } } @@ -1292,27 +1412,64 @@ function justifyPhotosAjax(id) { $('#' + id).justifiedGallery('norewind').on('jg.complete', function(e){ justifiedGalleryActive = false; }); } -function request(id, mid, verb, parent, uuid) { +function request(id, mid, verb, parent, uuid, userClick) { - const loading = document.getElementById('like-rotator-' + id); - loading.style.display = 'block'; + if (verb === 'load') { + const dots = document.getElementById('load-more-dots-' + parent); + dots.classList.add('jumping-dots'); - if (verb === 'comment') { + const parent_sub = document.getElementById('wall-item-sub-thread-wrapper-' + parent); + const offset = parent_sub.children.length; - if (singlethread_modules.indexOf(module) !== -1) { - let stateObj = { b64mid: uuid }; - history.pushState(stateObj, '', module + '/' + uuid); - } + fetch('/request?offset=' + offset + '&verb=' + verb + '&mid=' + mid + '&parent=' + parent + '&module=' + module) + .then(response => response.json()) + .then(obj => { + let parser = new DOMParser(); + let doc = parser.parseFromString(obj.html, 'text/html'); + let b64mids = []; - document.querySelectorAll('.thread-wrapper.item-highlight').forEach(el => { - el.classList.remove('item-highlight'); - el.style.boxShadow = ''; + doc.querySelectorAll('.thread-wrapper').forEach(function (e) { + let data = JSON.parse(e.dataset.b64mids); + b64mids.push(...data); + }); + + imagesLoaded(doc.querySelectorAll('.wall-item-body img'), function () { + injectWithAnimation('wall-item-sub-thread-wrapper-' + parent, doc); + dots.classList.remove('jumping-dots'); + + const loadmore_progress = document.getElementById('load-more-progress-' + parent); + loadmore_progress.style.width = Math.round(100 * parent_sub.children.length / loadmore_progress.dataset.commentsTotal) + '%'; + + if (Number(parent_sub.children.length) === Number(loadmore_progress.dataset.commentsTotal)) { + const loadmore = document.getElementById('load-more-' + parent); + loadmore.remove(); + } + + updateRelativeTime('.autotime'); + collapseHeight(); + + document.dispatchEvent(new CustomEvent('hz:sse_setNotificationsStatus', { detail: b64mids })); + document.dispatchEvent(new Event('hz:sse_bs_counts')); + }); + + }) + .catch(error => { + console.error('Error fetching data:', error); }); - const wrapper = document.getElementById('thread-wrapper-' + id); - if (!wrapper.classList.contains('toplevel_item')) { - wrapper.classList.add('item-highlight'); - document.documentElement.style.setProperty('--hz-item-highlight', stringToHlsColor(uuid)); + return; + } + + const loading = document.getElementById('like-rotator-' + id); + + if (userClick) { + loading.style.display = 'block'; + } + + if (verb === 'comment') { + if (userClick && singlethread_modules.indexOf(module) !== -1) { + let stateObj = { b64mid: uuid }; + history.pushState(stateObj, '', module + '/' + uuid); } fetch('/request?verb=' + verb + '&mid=' + mid + '&parent=' + parent + '&module=' + module) @@ -1320,7 +1477,6 @@ function request(id, mid, verb, parent, uuid) { .then(obj => { let parser = new DOMParser(); let doc = parser.parseFromString(obj.html, 'text/html'); - let b64mids = []; doc.querySelectorAll('.thread-wrapper').forEach(function (e) { let data = JSON.parse(e.dataset.b64mids); @@ -1328,13 +1484,15 @@ function request(id, mid, verb, parent, uuid) { }); imagesLoaded(doc.querySelectorAll('.wall-item-body img'), function () { - injectWithAnimation('wall-item-sub-thread-wrapper-' + id, obj.html); + injectWithAnimation('wall-item-sub-thread-wrapper-' + id, doc, true); updateRelativeTime('.autotime'); - loading.style.display = 'none'; collapseHeight(); - document.dispatchEvent(new CustomEvent('hz:sse_setNotificationsStatus', { detail: b64mids })); - document.dispatchEvent(new Event('hz:sse_bs_counts')); + if (userClick) { + loading.style.display = 'none'; + document.dispatchEvent(new CustomEvent('hz:sse_setNotificationsStatus', { detail: b64mids })); + document.dispatchEvent(new Event('hz:sse_bs_counts')); + } }); }) @@ -1377,32 +1535,142 @@ function request(id, mid, verb, parent, uuid) { } -function injectWithAnimation(container, html) { - const target = document.getElementById(container); - target.innerHTML = html; +function injectWithAnimation(containerId, parsedDoc, overwrite = false) { + const container = document.getElementById(containerId); + if (!container) return; + if (overwrite) container.innerHTML = ''; - target.animate([ - { opacity: 0, transform: 'translateY(-20px)' }, - { opacity: 1, transform: 'translateY(0)' } - ], { - duration: 300, - easing: 'ease-out' - }); + const newElements = Array.from(parsedDoc.body.children); - // For children animation - Array.from(target.children).forEach((el, i) => { - el.animate([ - { opacity: 0, transform: 'scale(.7)' }, - { opacity: 1, transform: 'scale(1)' } - ], { - duration: 300, - delay: i * 50, - fill: 'both', - easing: 'ease-out' - }); - }); + for (let i = newElements.length - 1; i >= 0; i--) { + const el = newElements[i].cloneNode(true); + el.classList.add('item-fade-in'); + container.insertBefore(el, container.firstChild); + + // Remove classes after transition ends + const onTransitionEnd = (event) => { + el.classList.remove('item-fade-in', 'show'); + el.removeEventListener('transitionend', onTransitionEnd); + }; + el.addEventListener('transitionend', onTransitionEnd); + + setTimeout(() => { + el.classList.add('show'); + }, (newElements.length - 1 - i) * 30); + } } +const autoExpand = (function () { + const clickedElements = new Set(); // Stores clicked button references + + // We wait 10 seconds for images. Set the timeout here slightly higher. + function waitForElement(selector, timeout = 11000) { + return new Promise((resolve, reject) => { + // Check if the element already exists + const element = document.querySelector(selector); + + if (element) { + resolve(element); + return; + } + + // Set up a timeout to reject the promise if the element doesn't appear in time + const timer = setTimeout(() => { + observer.disconnect(); + reject(new Error(`Element "${selector}" not found within ${timeout}ms`)); + }, timeout); + + // Create a MutationObserver to watch for DOM changes + const observer = new MutationObserver(() => { + const el = document.querySelector(selector); + if (el) { + clearTimeout(timer); + observer.disconnect(); + resolve(el); + } + }); + + // Start observing the document for changes + observer.observe(document.documentElement, { + childList: true, + subtree: true + }); + }); + } + + async function autoExpand(id) { + const loading = document.getElementById('like-rotator-' + id); + const maxIterations = 3; + clickedElements.clear(); + + try { + // Step 1: Ensure initial button is clicked + const initBtnSelector = '#wall-item-comment-' + id; + const initBtn = await waitForElement(initBtnSelector); + + if (!clickedElements.has(initBtn)) { + initBtn.click(); + clickedElements.add(initBtn); + } + + // Step 2: Loop until no new buttons are found + let newButtonsFound; + + const commentSelector = `#wall-item-sub-thread-wrapper-${id} .thread-wrapper`; + const commentBtnSelector = `#wall-item-sub-thread-wrapper-${id} .wall-item-comment`; + const subsSelector = `#wall-item-sub-thread-wrapper-${id}, #wall-item-sub-thread-wrapper-${id} .wall-item-sub-thread-wrapper`; + + let iteration = 1; + + do { + newButtonsFound = false; + + // Wait for any comment to appear + await waitForElement(commentSelector); + + document.querySelectorAll(subsSelector).forEach(el => { + if (el.children.length > 0) { + el.classList.add('item-indent'); + } + }); + + const expandButtons = document.querySelectorAll(commentBtnSelector); + + for (const btn of expandButtons) { + if (!clickedElements.has(btn)) { + btn.click(); + clickedElements.add(btn); + newButtonsFound = true; + // Optional: await waitForElement(...) to wait for new content + } + } + + // Wait between iterations to allow UI to update + if (newButtonsFound) { + await new Promise(res => setTimeout(res, 700)); + } + + iteration++; + + } while (newButtonsFound && iteration < maxIterations); + + console.log('All replies loaded!'); + + loading.style.display = 'none'; + + document.dispatchEvent(new CustomEvent('hz:sse_setNotificationsStatus', { detail: b64mids })); + document.dispatchEvent(new Event('hz:sse_bs_counts')); + + } catch (error) { + loading.style.display = 'none'; + console.error("autoExpand failed:", error.message); + } + } + + return autoExpand; +})(); + + function stringToHexColor(str) { let hash = 0; for (let i = 0; i < str.length; i++) { @@ -1416,7 +1684,7 @@ function stringToHexColor(str) { return color; } -function stringToHlsColor(str) { +function stringToHslColor(str) { let stringUniqueHash = [...str].reduce((acc, char) => { return char.charCodeAt(0) + ((acc << 5) - acc); }, 0); diff --git a/view/tpl/conv_item.tpl b/view/tpl/conv_item.tpl index 6d8aa6abc..39634f429 100644 --- a/view/tpl/conv_item.tpl +++ b/view/tpl/conv_item.tpl @@ -1,4 +1,4 @@ -{{if $item.comment_firstcollapsed}} +{{if !$item.threaded && $item.comment_firstcollapsed}} <div id="hide-comments-outer-{{$item.parent}}" class="hide-comments-outer fakelink small" onclick="showHideComments({{$item.id}});"> <i id="hide-comments-icon-{{$item.id}}" class="bi bi-chevron-down align-middle hide-comments-icon"></i> <span id="hide-comments-label-{{$item.id}}" class="hide-comments-label align-middle" data-expanded="{{$item.collapse_comments}}" data-collapsed="{{$item.expand_comments}}">{{$item.expand_comments}}</span>{{if !$item.threaded}} <span id="hide-comments-total-{{$item.id}}" class="hide-comments-label align-middle">{{$item.num_comments}}</span>{{/if}} </div> @@ -111,7 +111,7 @@ <div class="wall-item-tools-left hstack gap-1" id="wall-item-tools-left-{{$item.id}}"> {{foreach $item.responses as $verb=>$response}} {{if !($verb == 'comment' && (($item.toplevel && !$item.blog_mode) || $response.count == 0))}} - <button type="button" title="{{$response.count}} {{$response.button.label}}" class="btn btn-sm btn-link{{if !$item.observer_activity.$verb}} link-secondary{{/if}} wall-item-{{$response.button.class}}" onclick="request({{$item.id}}, '{{$item.rawmid}}', '{{$verb}}', {{$item.parent}}, '{{$item.mid}}'); return false;" id="wall-item-{{$verb}}-{{$item.id}}"> + <button type="button" title="{{$response.count}} {{$response.button.label}}" class="btn btn-sm btn-link{{if !$item.observer_activity.$verb}} link-secondary{{/if}} wall-item-reaction wall-item-{{$response.button.class}}" id="wall-item-{{$verb}}-{{$item.id}}" data-item-id="{{$item.id}}" data-item-mid="{{$item.rawmid}}" data-item-verb="{{$verb}}" data-item-parent="{{$item.parent}}" data-item-uuid="{{$item.mid}}"> <i class="bi bi-{{$response.button.icon}} generic-icons"></i>{{if $response.count}}<span style="display: inline-block; margin-top: -.25rem;" class="align-top">{{$response.count}}</span>{{/if}} </button> {{/if}} @@ -191,6 +191,9 @@ {{if $item.star}} <a class="dropdown-item" href="#" onclick="dostar({{$item.id}}); return false;"><i id="starred-{{$item.id}}" class="generic-icons-nav bi{{if $item.star.isstarred}} starred bi-star-fill{{else}} unstarred bi-star{{/if}}" title="{{$item.star.toggle}}"></i>{{$item.star.toggle}}</a> {{/if}} + {{if $item.expand}} + <a class="dropdown-item dropdown-item-expand" href="#" data-item-id="{{$item.id}}" data-item-uuid="{{$item.mid}}"><i id="expand-{{$item.id}}" class="generic-icons-nav bi bi-arrows-angle-expand" title="{{$item.expand}}"></i>{{$item.expand}}</a> + {{/if}} {{if $item.thread_action_menu}} {{foreach $item.thread_action_menu as $mitem}} <a class="dropdown-item" {{if $mitem.href}}href="{{$mitem.href}}"{{/if}} {{if $mitem.action}}onclick="{{$mitem.action}}"{{/if}} {{if $mitem.title}}title="{{$mitem.title}}"{{/if}} ><i class="generic-icons-nav bi bi-{{$mitem.icon}}"></i>{{$mitem.title}}</a> @@ -209,7 +212,7 @@ {{/if}} {{if $item.settings}} <div class="dropdown-divider"></div> - <a class="dropdown-item conversation-settings-link" href="" data-bs-toggle="modal" data-bs-target="#conversation_settings">{{$item.settings}}</a> + <a class="dropdown-item conversation-settings-link" href="#" data-bs-toggle="modal" data-bs-target="#conversation_settings">{{$item.settings}}</a> {{/if}} </div> </div> @@ -219,6 +222,14 @@ </div> </div> {{if $item.thread_level == 1}} + {{if $item.toplevel && $item.load_more && $item.threaded && !$item.blog_mode}} + <div id="load-more-progress-wrapper-{{$item.id}}" class="progress " role="progressbar" aria-valuenow="{{$item.comments_total_percent}}" aria-valuemin="0" aria-valuemax="100" style="height: 1px"> + <div id="load-more-progress-{{$item.id}}" class="progress-bar bg-info" style="width: {{$item.comments_total_percent}}%; margin-left: auto; margin-right: auto;" data-comments-total="{{$item.comments_total}}"></div> + </div> + <div id="load-more-{{$item.id}}" class="text-center text-secondary cursor-pointer" title="{{$item.load_more_title}}" onclick="request(0, '{{$item.rawmid}}', 'load', {{$item.parent}}, ''); return false;"> + <span id="load-more-dots-{{$item.id}}" class=""><span class="dot-1">-</span> <span class="dot-2">-</span> <span class="dot-3">-</span></span> + </div> + {{/if}} <div id="wall-item-sub-thread-wrapper-{{$item.id}}" class="wall-item-sub-thread-wrapper"> {{foreach $item.children as $child}} {{include file="{{$child.template}}" item=$child}} @@ -238,6 +249,6 @@ </div> {{/if}} </div> -{{if $item.comment_lastcollapsed}} +{{if !$item.threaded && $item.comment_lastcollapsed}} </div> {{/if}} diff --git a/view/tpl/pinned_item.tpl b/view/tpl/pinned_item.tpl index b5b5c931e..db3a175da 100644 --- a/view/tpl/pinned_item.tpl +++ b/view/tpl/pinned_item.tpl @@ -102,7 +102,7 @@ <div class="p-2 wall-item-tools d-flex justify-content-between"> <div class="wall-item-tools-left hstack gap-1" id="pinned-item-tools-left-{{$id}}"> {{foreach $responses as $verb=>$response}} - <button type="button" title="{{$response.count}} {{$response.button.label}}" class="btn btn-sm btn-link{{if !$observer_activity.$verb}} link-secondary{{/if}} wall-item-{{$response.button.class}}" onclick="request({{$id}}, '{{$rawmid}}', '{{$verb}}', {{$parent}}, '{{$mid}}'); return false;" id="pinned-item-{{$verb}}-{{$id}}"> + <button type="button" title="{{$response.count}} {{$response.button.label}}" class="disabled btn btn-sm btn-link{{if !$observer_activity.$verb}} link-secondary{{/if}} wall-item-{{$response.button.class}}" id="pinned-item-{{$verb}}-{{$id}}"> <i class="bi bi-{{$response.button.icon}} generic-icons"></i>{{if $response.count}}<span style="display: inline-block; margin-top: -.25rem;" class="align-top">{{$response.count}}</span>{{/if}} </button> {{/foreach}} |