diff --git a/README.md b/README.md
index 9e6a216d..1556b7fb 100644
--- a/README.md
+++ b/README.md
@@ -12,5 +12,5 @@ Before installing, read the [Hubzilla installation instructions](https://github.
Current snapshot in *sources*:
-* https://github.com/redmatrix/hubzilla: 4a044351a971a4fe44dbba6752852a4a0b9d342f
-* https://github.com/redmatrix/hubzilla-addons: 5859c5e4e7d7f5645a7aa2a99d59be328b7a2d18
+* https://github.com/redmatrix/hubzilla: def5edf93ced1527155053b64d666bf1812cbbca
+* https://github.com/redmatrix/hubzilla-addons: 7a842e95e538e45041ac5599f693cfd757888b6f
diff --git a/sources/.openshift/action_hooks/deploy b/sources/.openshift/action_hooks/deploy
index dafde2d6..f3f187d4 100755
--- a/sources/.openshift/action_hooks/deploy
+++ b/sources/.openshift/action_hooks/deploy
@@ -179,7 +179,27 @@ echo "chmod done, permissions set to 777 on poller script."
# Hubzilla configuration - changes to default settings
# to make Hubzilla on OpenShift a more pleasant experience
+echo "Changing default configuration to conserve space"
cd ${OPENSHIFT_REPO_DIR}
util/config system expire_delivery_reports 3
util/config system feed_contacts 0
+util/config system diaspora_enabled 0
util/config system disable_discover_tab 1
+util/config directory safemode 0
+util/config directory globaldir 1
+util/config directory pubforums 0
+
+# Hubzill addons
+echo "Try to add or update Hubzilla addons"
+cd ${OPENSHIFT_REPO_DIR}
+util/add_addon_repo https://github.com/redmatrix/hubzilla-addons.git HubzillaAddons
+
+# Hubzilla themes
+echo "Try to add or update Hubzilla themes"
+cd ${OPENSHIFT_REPO_DIR}
+util/add_theme_repo https://github.com/DeadSuperHero/redmatrix-themes.git DeadSuperHeroThemes
+
+# Hubzilla ownMapp
+echo "Try to add or update Hubzilla ownMapp"
+cd ${OPENSHIFT_REPO_DIR}
+util/add_addon_repo https://gitlab.com/zot/ownmapp.git ownMapp
diff --git a/sources/.travis.yml b/sources/.travis.yml
new file mode 100644
index 00000000..583b2a1a
--- /dev/null
+++ b/sources/.travis.yml
@@ -0,0 +1,46 @@
+# see http://about.travis-ci.org/docs/user/languages/php/ for more hints
+language: php
+
+# list any PHP version you want to test against
+php:
+ # using major version aliases
+
+ # aliased to a recent 5.4.x version
+ - 5.4
+ # aliased to a recent 5.5.x version
+ - 5.5
+ # aliased to a recent 5.6.x version
+ - 5.6
+ # aliased to a recent 7.x version
+ - 7.0
+ # aliased to a recent hhvm version
+ - hhvm
+
+# optionally specify a list of environments, for example to test different RDBMS
+#env:
+# - DB=mysql
+# - DB=pgsql
+
+# optionally set up exclutions and allowed failures in the matrix
+matrix:
+# exclude:
+# - php: hhvm
+# env: DB=pgsql # PDO driver for pgsql is unsupported by HHVM (3rd party install for support)
+ allow_failures:
+ - php: 7.0
+ - php: hhvm
+
+# execute any number of scripts before the test run, custom env's are available as variables
+#before_script:
+# - if [[ "$DB" == "pgsql" ]]; then psql -c "DROP DATABASE IF EXISTS hello_world_test;" -U postgres; fi
+# - if [[ "$DB" == "pgsql" ]]; then psql -c "create database hello_world_test;" -U postgres; fi
+# - if [[ "$DB" == "mysql" ]]; then mysql -e "create database IF NOT EXISTS hello_world_test;" -uroot; fi
+
+# omitting "script:" will default to phpunit
+# use the $DB env variable to determine the phpunit.xml to use
+script: phpunit tests/*php
+
+# configure notifications (email, IRC, campfire etc)
+notifications:
+# irc: "irc.freenode.org#yourfavouriteroomfortravis"
+# a plugin/script to post to a hubzilla channel would be neat here
\ No newline at end of file
diff --git a/sources/README.md b/sources/README.md
index bd95cd67..b6750480 100644
--- a/sources/README.md
+++ b/sources/README.md
@@ -6,6 +6,7 @@ Hubzilla - Community Server
Help us redefine the web - using integrated and united community websites.
--------------------------------------------------------------------------
+[![Build Status](https://travis-ci.org/redmatrix/hubzilla.svg)](https://travis-ci.org/redmatrix/hubzilla)
**What are Hubs?**
diff --git a/sources/app/firefoxshare.apd b/sources/app/firefoxshare.apd
new file mode 100644
index 00000000..5e0f38b4
--- /dev/null
+++ b/sources/app/firefoxshare.apd
@@ -0,0 +1,4 @@
+url: $baseurl/ffsapi
+requires: local_channel
+name: Firefox Share
+photo: $baseurl/app/firefoxshare.png
diff --git a/sources/app/firefoxshare.png b/sources/app/firefoxshare.png
new file mode 100644
index 00000000..75595228
Binary files /dev/null and b/sources/app/firefoxshare.png differ
diff --git a/sources/boot.php b/sources/boot.php
index cdf3c302..39056059 100755
--- a/sources/boot.php
+++ b/sources/boot.php
@@ -50,7 +50,8 @@ define ( 'PLATFORM_NAME', 'hubzilla' );
define ( 'RED_VERSION', trim(file_get_contents('version.inc')) . 'H');
define ( 'ZOT_REVISION', 1 );
-define ( 'DB_UPDATE_VERSION', 1158 );
+define ( 'DB_UPDATE_VERSION', 1160 );
+
/**
* @brief Constant with a HTML line break.
@@ -79,7 +80,7 @@ define ( 'DIRECTORY_FALLBACK_MASTER', 'https://zothub.com');
$DIRECTORY_FALLBACK_SERVERS = array(
'https://zothub.com',
- 'https://zotid.net',
+ 'https://hubzilla.site',
'https://red.zottel.red',
'https://gravizot.de',
'https://my.federated.social'
@@ -936,26 +937,6 @@ class App {
return $this->groups;
}
- function set_widget($title,$html, $location = 'aside') {
- $this->widgets[] = array('title' => $title, 'html' => $html, 'location' => $location);
- }
-
- function get_widgets($location = '') {
- if($location && count($this->widgets)) {
- $ret = array();
- foreach($this->widgets as $w) {
- if ($w['location'] == $location)
- $ret[] = $w;
- }
- $arr = array('location' => $location, 'widgets' => $ret);
- call_hooks('get_widgets', $arr);
- return $arr['widgets'];
- }
- $arr = array('location' => $location, 'widgets' => $this->widgets);
- call_hooks('get_widgets', $arr);
- return $arr['widgets'];
- }
-
function set_pager_total($n) {
$this->pager['total'] = intval($n);
}
@@ -2075,15 +2056,8 @@ function construct_page(&$a) {
$a->build_pagehead();
- $arr = $a->get_widgets();
- ksort($arr, SORT_NUMERIC);
- if(count($arr)) {
- foreach($arr as $x) {
- if(! array_key_exists($x['location'], $a->page))
- $a->page[$x['location']] = '';
-
- $a->page[$x['location']] .= $x['html'];
- }
+ if($a->page['pdl_content']) {
+ $a->page['content'] = comanche_region($a,$a->page['content']);
}
// Let's say we have a comanche declaration '[region=nav][/region][region=content]$nav $content[/region]'.
@@ -2100,6 +2074,7 @@ function construct_page(&$a) {
call_hooks('construct_page', $arr);
$a->layout = $arr['layout'];
+
foreach($a->layout as $k => $v) {
if((strpos($k, 'region_') === 0) && strlen($v)) {
if(strpos($v, '$region_') !== false) {
diff --git a/sources/doc/Hooks.md b/sources/doc/Hooks.md
deleted file mode 100644
index 90edff62..00000000
--- a/sources/doc/Hooks.md
+++ /dev/null
@@ -1,136 +0,0 @@
-Hooks - Complete List
-=====================
-
-
-* 'about_hook'
-* 'account_settings'
-* 'app_menu'
-* 'atom_author'
-* 'atom_entry'
-* 'atom_feed'
-* 'atom_feed_end'
-* 'authenticate'
-* 'avatar_lookup'
-* 'bb2diaspora'
-* 'bbcode'
-* 'channel_remove'
-* 'check_account_email'
-* 'check_account_invite'
-* 'check_account_password'
-* 'connect_premium'
-* 'connector_settings'
-* 'contact_block_end'
-* 'contact_edit'
-* 'contact_edit_post'
-* 'contact_photo_menu'
-* 'contact_select_options'
-* 'conversation_start'
-* 'cron'
-* 'directory_item'
-* 'display_item'
-* 'display_item'
-* 'display_settings'
-* 'display_settings_post'
-* 'enotify'
-* 'enotify_mail'
-* 'enotify_store'
-* 'event_created'
-* 'event_updated'
-* 'feature_enabled'
-* 'feature_settings'
-* 'feature_settings_post'
-* 'follow'
-* 'gender_selector'
-* 'get_all_perms'
-* 'get_features'
-* 'get_widgets'
-* 'global_permissions'
-* 'home_content'
-* 'home_init'
-* 'html2bbcode'
-* 'import_directory_profile'
-* 'init_1'
-* 'item_photo_menu'
-* 'item_translate'
-* 'jot_networks'
-* 'jot_tool'
-* 'logged_in'
-* 'login_hook'
-* 'logging_out'
-* 'magic_auth'
-* 'magic_auth_success'
-* 'main_slider'
-* 'marital_selector'
-* 'mood_verbs'
-* 'network_content_init'
-* 'network_ping'
-* 'network_tabs'
-* 'network_to_name'
-* 'notifier_end'
-* 'notifier_normal'
-* 'obj_verbs'
-* 'oembed_probe'
-* 'page_content_top'
-* 'page_end'
-* 'page_header'
-* 'parse_atom'
-* 'parse_link'
-* 'pdl_selector'
-* 'perm_is_allowed'
-* 'personal_xrd'
-* 'photo_post_end'
-* 'photo_post_end'
-* 'photo_upload_begin'
-* 'photo_upload_end'
-* 'photo_upload_file'
-* 'photo_upload_form'
-* 'poke_verbs'
-* 'post_local'
-* 'post_local_end'
-* 'post_local_start'
-* 'post_mail'
-* 'post_mail_end'
-* 'post_remote'
-* 'post_remote_end'
-* 'post_remote_update'
-* 'post_remote_update_end'
-* 'prepare_body'
-* 'prepare_body_final'
-* 'prepare_body_init'
-* 'proc_run'
-* 'profile_advanced'
-* 'profile_edit'
-* 'profile_post'
-* 'profile_sidebar'
-* 'profile_sidebar_enter'
-* 'profile_tabs'
-* 'register_account'
-* 'render_location'
-* 'settings_account'
-* 'settings_form'
-* 'settings_post'
-* 'sexpref_selector'
-* 'smilie'
-* 'validate_channelname'
-* 'webfinger'
-* 'zid'
-* 'zid_init'
-
-***General Module Hooks***
-
-* $a->module . '_mod_aftercontent'
-* $a->module . '_mod_aside'
-* $a->module . '_mod_content'
-* $a->module . '_mod_init'
-* $a->module . '_mod_post'
-
-***General Selector Hooks***
-
-* $a->module . '_post_' . $selname
-* $a->module . '_post_' . $selname
-* $a->module . '_post_' . $selname
-* $a->module . '_pre_' . $selname
-* $a->module . '_pre_' . $selname
-* $a->module . '_pre_' . $selname
-
-#include doc/macros/main_footer.bb;
diff --git a/sources/doc/Hubzilla_on_OpenShift.bb b/sources/doc/Hubzilla_on_OpenShift.bb
index f33eee98..9b2c539d 100644
--- a/sources/doc/Hubzilla_on_OpenShift.bb
+++ b/sources/doc/Hubzilla_on_OpenShift.bb
@@ -1,7 +1,9 @@
[b]Hubzilla on OpenShift[/b]
-You will notice a new .openshift folder when you fetch from upstream, i.e. from [url=https://github.com/redmatrix/hubzilla.git]https://github.com/redmatrix/hubzilla.git[/url] , which contains a deploy script to set up Hubzilla on OpenShift.
+You will notice a new .openshift folder when you fetch from upstream, i.e. from [url=https://github.com/redmatrix/hubzilla.git]https://github.com/redmatrix/hubzilla.git[/url] , which contains a deploy script to set up Hubzilla on OpenShift with plugins and extra themes.
-Create an account on OpenShift, then use the registration e-mail and password to create your first Hubzilla instance. Install git and RedHat's command line tools - rhc - if you have not already done so.
+As of this writing, 2015-10-28, you do not have to pay for OpenShift on the Free plan, which gives you three gears at no cost. The Bronze plan gives you three gears at no cost too, but you can expand to 16 gears by paying, and this requires you to register your payment card. The three gears can give three instances of Hubzilla with one gear each, or you can combine two gears into one high-availability Hubzilla instance and one extra gear. The main difference to be aware of is this: gears on the Free plan will go into hibernation if left idle for too long, this does not happen on the Bronze plan.
+
+Create an account on OpenShift, then use the registration e-mail and password to create your first Hubzilla instance. Install git and RedHat's command line tools - rhc - if you have not already done so. See for example https://developers.openshift.com/en/getting-started-debian-ubuntu.html on how to do this on Debian GNU/Linux, or in the menu on that page for other GNU/Linux distributions or other operating systems.
[code]rhc app-create your_app_name php-5.4 mysql-5.5 cron phpmyadmin --namespace your_domain --from-code https://github.com/redmatrix/hubzilla.git -l your@email.address -p your_account_password
[/code]
diff --git a/sources/doc/Widgets.md b/sources/doc/Widgets.md
index 7acd9241..7c506dea 100644
--- a/sources/doc/Widgets.md
+++ b/sources/doc/Widgets.md
@@ -108,6 +108,13 @@ Some/many of these widgets have restrictions which may restrict the type of page
+* album - provides a widget containing a complete photo album from albums belonging to the page owner; this may be too large to present in a sidebar region as is best implemented as a content region widget.
+ * args:
+ * album - album name
+ * title - optional title, album name is used if not present
+
+
+
Creating New Widgets
====================
diff --git a/sources/doc/addons.bb b/sources/doc/addons.bb
index 1be88150..a6d2cfc2 100644
--- a/sources/doc/addons.bb
+++ b/sources/doc/addons.bb
@@ -42,7 +42,7 @@
[*] qrator - generate QR code images
[*] rainbowtag - display your tag and category clouds in colours
[*] randpost - post/reply bot based on and requires fortunate
-[*] redred - Crosspost to another Redmatrix or Hubzilla channel
+[*] redred - Crosspost to another Red Matrix or Hubzilla channel
[*] rtof - Crosspost to Friendica
[*] smiley_pack - extend the built-in smilie (emoticon) support
[*] smileybutton - provides a smiley selector on the post window
diff --git a/sources/doc/admins.bb b/sources/doc/admins.bb
index c77b004a..48421202 100644
--- a/sources/doc/admins.bb
+++ b/sources/doc/admins.bb
@@ -9,6 +9,7 @@
[zrl=[baseurl]/help/hidden_configs]Tweaking $Projectname's Hidden Configurations[/zrl]
[zrl=[baseurl]/help/faq_admins]FAQ For Admins[/zrl]
[zrl=[baseurl]/help/service_classes]Service Classes[/zrl]
+[zrl=[baseurl]/help/directories]Working with and configuring Directories[/zrl]
[zrl=[baseurl]/help/theme_management]Theme Management[/zrl]
diff --git a/sources/doc/api/statuses_update.bb b/sources/doc/api/statuses_update.bb
new file mode 100644
index 00000000..acad440d
--- /dev/null
+++ b/sources/doc/api/statuses_update.bb
@@ -0,0 +1,23 @@
+[h2]statuses/update[/h2]
+Parameters
+
+ title: Title of the status
+ status: Status in text [or bbcode] format
+ htmlstatus: Status in HTML format
+ in_reply_to_status_id
+ lat: latitude
+ long: longitude
+ media: image data
+ source: Application name
+ group_allow
+ contact_allow
+ group_deny
+ contact_deny
+
+
+Example
+
+[code]
+curl -u theUsername:thePassword http://mywebsite/api/statuses/update.xml -d status='Hello world'
+[/code]
+
diff --git a/sources/doc/bbcode.html b/sources/doc/bbcode.html
index 4fe47842..3e9bda1d 100644
--- a/sources/doc/bbcode.html
+++ b/sources/doc/bbcode.html
@@ -7,11 +7,11 @@
[zrl]https://redmatrix.me[/zrl] Magic-auth version of [url] tag
-
[zmg]https://redmatrix.me/some/photo.jpg[/zmg] Magic-auth version of [img] tag
+
[zrl]https://zothub.com[/zrl] Magic-auth version of [url] tag
+
[zmg]https://zothub.com/some/photo.jpg[/zmg] Magic-auth version of [img] tag
[observer=1]Text to display if observer is authenticated in the matrix[/observer]
[observer=0]Text to display if observer is not authenticated in the matrix[/observer]
diff --git a/sources/doc/credits.bb b/sources/doc/credits.bb
index 200f1fc8..5219d7bf 100644
--- a/sources/doc/credits.bb
+++ b/sources/doc/credits.bb
@@ -14,7 +14,7 @@ tommy tomson
Simon
zottel
Christian Vogeley
-jeroenpraat
+Jeroen van Riet Paap (jeroenpraat)
Michael Vogel
erik
Zach Prezkuta
diff --git a/sources/doc/database/db_abook.bb b/sources/doc/database/db_abook.bb
index a34e5199..2e4b9c4a 100644
--- a/sources/doc/database/db_abook.bb
+++ b/sources/doc/database/db_abook.bb
@@ -27,29 +27,21 @@
[/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]Bitfield containing blocked(0x1), ignored(0x2), hidden(0x4), archived(0x8), pending(0x10), unconnected(0x20), self(0x80), feed(0x100)[/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
+[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]
+[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]
+[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]
+[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]
+[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]
+[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]
+[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]
+[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]
+[tr][td]abook_incl[/td][td]connection filter allow rules separated by LF[/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
+[tr][td]abook_excl[/td][td]connection filter deny rules separated by LF[/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
[/table]
-Notes:
-
-ABOOK_FLAGS_BLOCKED - Bi-directional communications with this channel are blocked, regardless of other permissions.
-
-ABOOK_FLAGS_IGNORED - Incoming communications from this channel are blocked, regardless of other permissions.
-
-ABOOK_FLAGS_HIDDEN - This connection will not be shown as a connection to anybody but the channel owner
-
-ABOOK_FLAGS_ARCHIVED - This connection is likely non-functioning and the entry and conversations are preserved, but further polled communications will not be attempted.
-
-ABOOK_FLAGS_PENDING - 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.
-
-ABOOK_FLAGS_UNCONNECTED - currently unused. Projected usage is to indicate "one-way" connections which were insitgated on this end but are still pending on the remote end.
-
-ABOOK_FLAGS_SELF is a special case where the owner is the target. Every channel has one abook entry with ABOOK_FLAGS_SELF 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.
-
-ABOOK_FLAGS_FEED - indicates this connection is an RSS/Atom feed and may trigger special handling.
-
Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file
diff --git a/sources/doc/database/db_attach.bb b/sources/doc/database/db_attach.bb
index 4514c87f..7d2befb4 100644
--- a/sources/doc/database/db_attach.bb
+++ b/sources/doc/database/db_attach.bb
@@ -21,7 +21,15 @@
[/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]see notes[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
+[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]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]data[/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]
@@ -39,12 +47,6 @@
[/td][/tr]
[/table]
-
-Bitmasks
-
-define ( 'ATTACH_FLAG_DIR', 0x0001); This is a directory
-define ( 'ATTACH_FLAG_OS', 0x0002); Data content is link to OS file containing data, if unset the data filed contains the file data
-
permissions are xchan_hash or group_hash surrounded by angle chars. e.g. ''
Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file
diff --git a/sources/doc/database/db_channel.bb b/sources/doc/database/db_channel.bb
index 215db3fb..6f53517d 100644
--- a/sources/doc/database/db_channel.bb
+++ b/sources/doc/database/db_channel.bb
@@ -1,96 +1,100 @@
[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][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment
+[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][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
+[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][/td][td]tinyint(1) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
+[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][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
+[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][/td][td]char(255)[/td][td]NO[/td][td]UNI[/td][td][/td][td]
+[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][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
+[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][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[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][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
+[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][/td][td]char(128)[/td][td]NO[/td][td]MUL[/td][td]UTC[/td][td]
+[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][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
+[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][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
+[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][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
+[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][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[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][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[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][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]65535[/td][td]
+[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][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
+[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][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
+[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_deleted[/td][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
+[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][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]10[/td][td]
+[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][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]10[/td][td]
+[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][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
+[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][/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
+[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][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
+[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][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[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][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[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][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[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][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[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][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
+[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][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
+[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][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
+[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][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
+[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][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
+[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][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
+[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][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
+[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][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
+[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][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
+[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][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
+[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][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
+[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][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
+[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][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
+[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][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
+[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][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
+[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][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
+[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][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
+[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][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
+[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]
[/table]
-Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file
+Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
diff --git a/sources/doc/database/db_chat.bb b/sources/doc/database/db_chat.bb
index 6221f36e..1aac2bd1 100644
--- a/sources/doc/database/db_chat.bb
+++ b/sources/doc/database/db_chat.bb
@@ -1,15 +1,15 @@
[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][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment
+[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][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
+[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][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
+[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][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[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][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
+[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]
diff --git a/sources/doc/database/db_chatpresence.bb b/sources/doc/database/db_chatpresence.bb
index cdc948a6..28cd6f20 100644
--- a/sources/doc/database/db_chatpresence.bb
+++ b/sources/doc/database/db_chatpresence.bb
@@ -1,17 +1,17 @@
[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][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment
+[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][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
+[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][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
+[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][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
+[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][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
+[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][/td][td]char(128)[/td][td]NO[/td][td][/td][td][/td][td]
+[tr][td]cp_client[/td][td][/td]IP address of this client[td]char(128)[/td][td]NO[/td][td][/td][td][/td][td]
[/td][/tr]
[/table]
diff --git a/sources/doc/database/db_chatroom.bb b/sources/doc/database/db_chatroom.bb
index b2da762c..1d316288 100644
--- a/sources/doc/database/db_chatroom.bb
+++ b/sources/doc/database/db_chatroom.bb
@@ -1,27 +1,27 @@
[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][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment
+[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][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
+[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][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
+[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][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
+[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][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
+[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][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
+[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][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
+[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][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[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][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[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][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[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][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[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]
diff --git a/sources/doc/database/db_conv.bb b/sources/doc/database/db_conv.bb
index ba1ba7f0..5adfa8c8 100644
--- a/sources/doc/database/db_conv.bb
+++ b/sources/doc/database/db_conv.bb
@@ -1,21 +1,24 @@
+
+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][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment
+[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][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[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][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[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][/td][td]int(11)[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[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][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[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][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
+[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][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
+[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][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[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]
diff --git a/sources/doc/database/db_group_member.bb b/sources/doc/database/db_group_member.bb
index d31fa1ed..b9ab8171 100644
--- a/sources/doc/database/db_group_member.bb
+++ b/sources/doc/database/db_group_member.bb
@@ -1,13 +1,13 @@
[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
+[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][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
+[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][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
+[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][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
+[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]
diff --git a/sources/doc/database/db_groups.bb b/sources/doc/database/db_groups.bb
index 03e4fe2d..078d9646 100644
--- a/sources/doc/database/db_groups.bb
+++ b/sources/doc/database/db_groups.bb
@@ -1,17 +1,17 @@
[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
+[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][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
+[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][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
+[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][/td][td]tinyint(1)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
+[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][/td][td]tinyint(1)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
+[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]name[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[tr][td]name[/td][td]human readable name of group[/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td]
[/td][/tr]
[/table]
diff --git a/sources/doc/database/db_hook.bb b/sources/doc/database/db_hook.bb
index 6e8e907a..0812b1b4 100644
--- a/sources/doc/database/db_hook.bb
+++ b/sources/doc/database/db_hook.bb
@@ -1,15 +1,15 @@
[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
+[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][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
+[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][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[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]function[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[tr][td]function[/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][/td][td]int(11) unsigned[/td][td]NO[/td][td][/td][td]0[/td][td]
+[tr][td]priority[/td][td]not yet implemented - 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]
[/table]
diff --git a/sources/doc/database/db_item.bb b/sources/doc/database/db_item.bb
index b31823d6..e4e59419 100644
--- a/sources/doc/database/db_item.bb
+++ b/sources/doc/database/db_item.bb
@@ -1,104 +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][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment
+[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][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
+[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][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
+[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][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
+[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][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
+[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][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
+[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][/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
+[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][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
+[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][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
+[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][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
+[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][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
+[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][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
+[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][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
+[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][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
+[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][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
+[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][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
+[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][/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
+[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][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
+[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][/td][td]text[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
+[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][/td][td]mediumtext[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
+[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][/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
+[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][/td][td]char(64)[/td][td]NO[/td][td][/td][td][/td][td]
+[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][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
+[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][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
+[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][/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
+[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]object[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[tr][td]object[/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][/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
+[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][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[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][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
+[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][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[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][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[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][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
+[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][/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
+[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][/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
+[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][/td][td]char(16)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
+[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][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[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][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[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][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[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][/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
+[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][/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
+[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][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
+[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][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
+[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][/td][td]mediumtext[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
+[tr][td]allow_cid[/td][td]Access Control - list of allowed xchans '...'[/td][td]mediumtext[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
[/td][/tr]
-[tr][td]allow_gid[/td][td][/td][td]mediumtext[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
+[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][/td][td]mediumtext[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
+[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][/td][td]mediumtext[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
+[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][td][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
+[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][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
+[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][/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
+[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/sources/doc/database/db_item_id.bb b/sources/doc/database/db_item_id.bb
index b77ae2d1..ba4cca24 100644
--- a/sources/doc/database/db_item_id.bb
+++ b/sources/doc/database/db_item_id.bb
@@ -1,15 +1,15 @@
[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
+[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][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
+[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][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
+[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][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
+[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][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
+[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]
diff --git a/sources/doc/de/main.bb b/sources/doc/de/main.bb
index f310d0ab..5786f03e 100644
--- a/sources/doc/de/main.bb
+++ b/sources/doc/de/main.bb
@@ -1,19 +1,19 @@
-[img][baseurl]/assets/hashlogo.png[/img]
+[img][baseurl]/images/hubzilla-banner.png[/img]
-[zrl=[baseurl]/help/about]Was ist die RedMatrix?[/zrl]
-Die RedMatrix ist eine dezentrale Kommunikations- und Publishing-Plattform. Sie 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.
+[zrl=[baseurl]/help/about]Was ist Hubzilla?[/zrl]
+Hubzilla ist eine dezentrale Kommunikations- und Publishing-Plattform. Sie 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. Hubzilla ist der Nachfolger, der seit einigen Jahren erfolgreichen Plattformen Firendica und Red Matrix.
-[zrl=[baseurl]/help/features]Features der RedMatrix[/zrl]
-Die RedMatrix funktioniert schon heute als ein globales verteiltes Netzwerk und beweist täglich ihre 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, die RedMatrix unterstützt Dich in Deinem kreativen Schaffen.
+[zrl=[baseurl]/help/features]Features von Hubzilla[/zrl]
+Hubzilla, basierend auf der Red Matrix, funktioniert schon heute als ein globales verteiltes Netzwerk und beweist täglich ihre 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, Hubzilla 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 das großartige neue Kommunikationsprotokoll, das extra für die RedMatrix entwickelt wurde. Als Mitglied bist Du dank „Nomadischer Identität“ nicht länger an einen einzigen Server oder 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 der RedMatrix, musst Du Dich nie wieder mehrfach anmelden, selbst wenn Du Seiten auf einem andere Red-Server betrachtest. Zot ist, was die RedMatrix besonders macht.
+Zot ist ein großartiges neues Kommunikationsprotokoll, das für Hubzilla - und vorher die Red Matrix - 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 Hubzilla-Netzwerkes, musst Du Dich nie wieder mehrfach anmelden, selbst wenn Du Seiten auf einem andere Hub (den Hubzilla-Servern) betrachtest. Zot ist es, was das Hubzilla-Netzwerk besonders macht.
[h3]Erste Schritte[/h3]
[zrl=[baseurl]/help/Privacy]Datenschutz[/zrl]
[zrl=[baseurl]/help/registration]Ein Konto registrieren[/zrl]
-[zrl=[baseurl]/help/accounts_profiles_channels_basics]Du in der RedMatrix: Konten, Profile und Kanäle kurz erklärt[/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]
@@ -26,7 +26,7 @@ Zot ist das großartige neue Kommunikationsprotokoll, das extra für die RedMatr
[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 Posts und Kommentare[/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]
@@ -36,7 +36,7 @@ Zot ist das großartige neue Kommunikationsprotokoll, das extra für die RedMatr
[h3]Hilfe für Administratoren[/h3]
[zrl=[baseurl]/help/install]Installation[/zrl]
-[zrl=[baseurl]/help/red2pi]Red auf einem Raspberry Pi installieren[/zrl]
+[zrl=[baseurl]/help/red2pi]Hubzilla 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]
@@ -60,9 +60,9 @@ Zot ist das großartige neue Kommunikationsprotokoll, das extra für die RedMatr
[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 Red-Funktionen[/zrl]
+[zrl=[baseurl]/help/developer_function_primer]Übersicht der wichtigsten Hubzilla-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 Red-Dokumentation[/zrl]
+[zrl=[baseurl]/help/to_do_doco]To-Do-Liste für das Projekt Hubzilla-Dokumentation[/zrl]
[zrl=[baseurl]/help/to_do_code]To-Do-Liste für Entwickler[/zrl]
[zrl=[baseurl]/help/roadmap]Roadmap für Version 3[/zrl]
[zrl=[baseurl]/help/git_for_non_developers]Git für Nicht-Entwickler[/zrl]
@@ -80,7 +80,7 @@ Zot ist das großartige neue Kommunikationsprotokoll, das extra für die RedMatr
[url=[baseurl]/help/credits]$Projectname Credits[/url]
-[h3]Über diesen Red-Server[/h3]
-[zrl=[baseurl]/help/TermsOfService]Nutzungsbedingungen dieses Red-Servers[/zrl]
-[zrl=[baseurl]/siteinfo]Informationen zu diesem Server und der Red-Version[/zrl]
+[h3]Über diesen Hub (Hubzilla-Server)[/h3]
+[zrl=[baseurl]/help/TermsOfService]Nutzungsbedingungen dieses Hubs (Hubzilla-Servers)[/zrl]
+[zrl=[baseurl]/siteinfo]Informationen zu diesem Server und der Hubzilla-Version[/zrl]
[zrl=[baseurl]/siteinfo/json]Detaillierte technische Informationen zu diesem Server im JSON-Format[/zrl]
diff --git a/sources/doc/develop.bb b/sources/doc/develop.bb
index c46447cc..ad5b2288 100644
--- a/sources/doc/develop.bb
+++ b/sources/doc/develop.bb
@@ -8,13 +8,14 @@
[zrl=[baseurl]/help/Creating-Templates]Creating Comanche Templates[/zrl]
[zrl=[baseurl]/help/Widgets]Widgets[/zrl]
[zrl=[baseurl]/help/plugins]Plugins[/zrl]
+[zrl=[baseurl]/help/hooklist]Hooks (detailed - under construction)[/zrl]
[zrl=[baseurl]/help/doco]Contributing Documentation[/zrl]
[zrl=[baseurl]/help/DerivedTheme1]Creating Derivative Themes[/zrl]
[zrl=[baseurl]/help/schema_development]Schemas[/zrl]
[zrl=[baseurl]/help/Translations]Translations[/zrl]
[zrl=[baseurl]/help/developers]Developers[/zrl]
[zrl=[baseurl]/help/intro_for_developers]Intro for Developers[/zrl]
-[zrl=[baseurl]/help/database]Database schema documantation[/zrl]
+[zrl=[baseurl]/help/database]Database schema documentation[/zrl]
[zrl=[baseurl]/help/api_functions]API functions[/zrl]
[zrl=[baseurl]/help/api_posting]Posting to the red# using the API[/zrl]
[zrl=[baseurl]/help/developer_function_primer]Red Functions 101[/zrl]
diff --git a/sources/doc/developers.bb b/sources/doc/developers.bb
index e9dddc69..6f775257 100644
--- a/sources/doc/developers.bb
+++ b/sources/doc/developers.bb
@@ -64,6 +64,8 @@ In the interests of consistency we adopt the following code styling. We may acce
[li] Generally speaking, opening braces go on the same line as the thing which opens the brace. They are the last character on the line. Closing braces are on a line by themselves. [/li]
+[li] Some functions take arguments in argc/argv style like main() in C or function args in bash or Perl. Urls are broken up within a module. e.g, given "http://example.com/module/arg1/arg2", then $this->argc will be 3 (integer) and $this->argv will contain: [0] => 'module', [1] => 'arg1', [2] => 'arg2'. There will always be one argument. If provided a naked domain URL, $this->argv[0] is set to "home".[/li]
+
[b]See Also[/b]
[zrl=[baseurl]/help/sql_conventions]SQL Conventions[/zrl]
diff --git a/sources/doc/directories.bb b/sources/doc/directories.bb
new file mode 100644
index 00000000..d81dd84c
--- /dev/null
+++ b/sources/doc/directories.bb
@@ -0,0 +1,95 @@
+[h3]Directory Configuration[/h3]
+
+Directories in $Projectname serve the purpose of searching and locating members anywhere in the network. They are also used to store and query "ratings" of members and sites. The directory services are distributed and mirrored so that a failure of one will not take down or disrupt the entire network.
+
+[b]Standard Configuration[/b]
+
+New sites operating as directory clients will automatically select from a hard-coded list of directory servers during their first directory access. You may examine or over-ride this decision using
+
+[code]
+util/config system directory_server
+[/code]
+
+To set a different server,
+
+[code]
+util/config system directory_server https://newdirectory.something
+[/code]
+
+
+[b]Standalone configuration[/b]
+
+Some sites may wish to operate in 'standalone' mode and not connect to any external directory services. This is useful for isolated sites ("off the gird") and test sites, but can also be useful for small organisations who do not wish to connect with other sites in the network.
+
+To configure this, please look in your .htconfig.php file for the following text and set the configuration accordingly.
+
+[code]
+// 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
+
+$a->config['system']['directory_mode'] = DIRECTORY_MODE_STANDALONE;
+[/code]
+
+
+[b]Secondary server configuration[/b]
+
+You may also configure your site as a secondary server. This operates as a mirror of the primary directory and allows disitribution of the load amongst available servers. There is very little functional difference between a primary and secondary sever, however there may only be *one* primary directory server per realm (realms are discussed later in this document).
+
+Before choosing to be a directory server, please be advised that you should be an active member of the network and have the resources and time available to manage these services. They don't typically require management, but the requirement is more for stability as losing a directory server can cause issues to directory clients which are reliant on it.
+
+
+[b]Changing the directory server[/b]
+
+If a directory server indicates that it is no longer a directory server, this should be detected by the software and the configuration for that server will be removed (blanked). If it goes offline permanently without warning, you will only know if site members report that directory services are unavailable. Currently this can only be repaired manually by the site administrator by selecting a new directory and performing:
+
+[code]
+util/config system directory_server https://newdirectory.something
+[/code]
+
+Eventually we hope to make this a selectable box from the site admin panel.
+
+
+[h2]Directory realms[/h2]
+
+Large organisations may wish to use directory 'realms' rather than a single standalone directory. The standard and default realm is known as RED_GLOBAL. By creating a new realm, your organisation has the ability to create its own hierarchy of primary and secondary servers and clients.
+
+[code]
+util/config system directory_realm MY_REALM
+[/code]
+
+Your realm *must* have a primary directory. Create this first. Then set the realm the same on all sites within your directory realm (servers and clients).
+
+You may also provide a "sub-realm" that operates indepently from the RED_GLOBAL realm (or any other realm) but allows cross membership and some ability to lookup members of the entire directory space. This has only undergone light testing so be prepared to help out and fix any issues that may arise. A sub-realm contains its parent realm within the realm name.
+
+
+[code]
+util/config system directory_realm RED_GLOBAL:MY_REALM
+[/code]
+
+
+[b]Realm access[/b]
+
+You may wish that your directory servers and services are only used by members of your realm. To do this a token or password must be supplied to access the realm directory services. This token is not encrypted during transit, but is sufficient to prevent casual access to your directory servers. The following must be configured for all sites (clients and directory servers) within the realm:
+
+[code]
+util/config system realm_token my-secret-realm-password
+[/code]
+
+
+
+[h2]Directory mirrors[/h2]
+
+Mirroring occurs with a daily transaction log of activities which are shared between directory servers. In the case of directory and profile updates, the channel address performing the update is transmitted, and the other directory servers probe that channel at its source for changes. We do not and should not trust any information given us by other directory servers. We always check the information at the source.
+
+Ratings are handled slightly differently - an encrypted packet (signed by the channel that created the rating) is passed between the servers. This signature needs to be verified before the rating is accepted. Ratings are always published to the primary directory server and propagated to all other directory servers from there. For this reason there can only be one primary server in a realm. If a misconfigured site claims to be a primary directory, it is ignored in the RED_GLOBAL realm. For other realms there is currently no such protection. Be aware of this when working with alternate realms.
+
+Newly created directory servers are not provided a "full dump", but for performance reasons and minimal disruption to the other servers in the network, they are brought online slowly. It may take up to a month for a new secondary directory server to provide a full view of the network. Please do not add any secondary servers to the hard-coded list of fallback directory servers until it has been operating as a directory for at least a month.
+
+All channels are configured to "ping" their directory server once a month, at somewhat random times during the month. This gives the ability for the directory to discover dead channels and sites (they stop pinging). Subsequently they are marked dead or unreachable and over time will be removed from the directory results.
+
+Channels may be configured to be "hidden" from the directory. These channels may still exist in the directory but will be un-searchable and some "sensitive" personal information will not be stored at all.
+
+
\ No newline at end of file
diff --git a/sources/doc/faq_developers.bb b/sources/doc/faq_developers.bb
index 027efe8f..dd7f4cda 100644
--- a/sources/doc/faq_developers.bb
+++ b/sources/doc/faq_developers.bb
@@ -28,6 +28,427 @@ function foo() {
[/code]
+An example (large) &$a object showing some of its many members and structures-- in JSON format for easier readability-- is here:
+
+[code] {
+ "category": null,
+ "nav_sel": {
+ "home": null,
+ "community": null,
+ "contacts": null,
+ "directory": null,
+ "settings": null,
+ "notifications": null,
+ "intros": null,
+ "messages": null,
+ "register": null,
+ "manage": null,
+ "profiles": null,
+ "network": null,
+ "help": "active"
+ },
+ "argc": 2,
+ "install": false,
+ "is_mobile": false,
+ "timezone": "America/Los_Angeles",
+ "sourcename": "",
+ "module_loaded": true,
+ "contacts": null,
+ "interactive": true,
+ "config": {
+ "system": {
+ "max_import_size": 200000,
+ "logfile": "/tmp/hubzilla.log",
+ "channels_active_monthly_stat": "3",
+ "last_expire_day": "4",
+ "loglevel": "4",
+ "sitename": "Hubzilla",
+ "access_policy": 0,
+ "directory_mode": 0,
+ "debugging": "1",
+ "verify_email": 1,
+ "register_text": "",
+ "urlverify": "687474703a2f2f6875627a696c6c61",
+ "register_policy": 2,
+ "theme": "redbasic",
+ "smarty3_folder": "/home/src/hubzilla/store/[data]/smarty3",
+ "channels_total_stat": "4",
+ "admin_email": "foo@bar.com",
+ "channels_active_halfyear_stat": "3",
+ "location_hash": "910792b7bf75296cbf238ae29a5493f3c78805812652d3f0396e88763a26ce1b",
+ "local_posts_stat": "63",
+ "lastpollcheck": "2015-11-03 07:40:38",
+ "baseurl": "http://hubzilla",
+ "config_loaded": true,
+ "pubkey": "-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuR4neYAxuWwZg34fqofU\nZg8y1YSTX39Tzhgcgn7QFCeH600NHJBHWXbPdS5imdYq6W+P1vtKxsVNLI9d01+j\ns3MF3amgEuJH0X+JLLjyittQksyAiukvh/o4MSit8mcYcXs8Dxaybe+KaY09N4ys\ndxKcn6EPlthUiQPJMPitybp4vYkw9LupWZOQWThz9ur6T5wnk9ehBIPFN8gYvKrT\nAG9RFfbq3y59rTOiSHNA2PIUMzo2HEh4QBVCvVolKt7GPhUM4Bze40VRe8ELZTPp\nyehNxEHyhHZfnC+XRVNlvSPXBU2vtE+zcok+5DXsKAqMt8YgFIThNEOLQKvff/lv\nsdGvk6jJZok7+9lKtYfwnNnRWf51aVVuSAO3aIIVLroLyhiji0KA7G5YRHeF1rNL\np88e8peMyUMCX2Svv1wudJzqOfWSvOpY0NLZrdGZXRN2/rXyHPRD/TtS3SNDdd7J\nYQUjyxGjF1/zB3xqvPr09s8tzXqJl9pZNcN9iz58oPBbTuGdUr8CJro/3nVHgkRf\nw7/zhapSW1UaroJjecrC9yWx5QUD3KNU51phsP9iHCFdMyPBdUHjmNvE5f7YJWBh\nO1rRKUoE3i+eHLYAWeYblFX7T+EKOCB2hd3NUrIqDL98OSpfDiZT7rf9PdcWCOY5\nuddm6KzwHjffl5kZd8MM8bMCAwEAAQ==\n-----END PUBLIC KEY-----\n",
+ "addon": "converse",
+ "lastpoll": "2015-11-04 07:40:01",
+ "php_path": "/usr/bin/php",
+ "allowed_themes": "redbasic",
+ "sellpage": "",
+ "prvkey": "-----BEGIN PRIVATE KEY-----\n-----END PRIVATE KEY-----\n",
+ "directory_server": "https://red.zottel.red",
+ "curl_ssl_ciphers": "ALL:!eNULL",
+ "db_version": "1158"
+ },
+ "config": {
+ "config_loaded": true
+ },
+ "feature": {
+ "config_loaded": true
+ },
+ "2": {
+ "redbasic": {
+ "schema": "dark",
+ "comment_indent": "",
+ "toolicon_activecolour": "",
+ "item_colour": "",
+ "nav_gradient_top": "",
+ "nav_active_icon_colour": "",
+ "nav_active_gradient_top": "",
+ "top_photo": "",
+ "converse_width": "",
+ "nav_min_opacity": "",
+ "body_font_size": "",
+ "reply_photo": "",
+ "background_colour": "",
+ "radius": "",
+ "nav_gradient_bottom": "",
+ "toolicon_colour": "",
+ "nav_active_gradient_bottom": "",
+ "nav_icon_colour": "",
+ "narrow_navbar": "",
+ "nav_bg": "",
+ "comment_item_colour": "",
+ "config_loaded": true,
+ "banner_colour": "",
+ "comment_border_colour": "",
+ "align_left": "",
+ "font_size": "",
+ "font_colour": "",
+ "nav_bd": "",
+ "photo_shadow": "",
+ "background_image": "",
+ "link_colour": ""
+ },
+ "system": {
+ "network_list_mode": "0",
+ "post_joingroup": "0",
+ "channel_list_mode": "0",
+ "title_tosource": "0",
+ "blocktags": "0",
+ "photo_path": "%Y-%m",
+ "suggestme": "0",
+ "autoperms": "0",
+ "hide_presence": "0",
+ "channel_divmore_height": "400",
+ "network_divmore_height": "400",
+ "post_profilechange": "0",
+ "channel_menu": "",
+ "always_show_in_notices": "0",
+ "use_browser_location": "0",
+ "update_interval": "80000",
+ "itemspage": "20",
+ "attach_path": "%Y-%m",
+ "permissions_role": "social",
+ "vnotify": "2047",
+ "post_newfriend": "0",
+ "config_loaded": true,
+ "no_smilies": "0",
+ "evdays": "3",
+ "user_scalable": "1"
+ }
+ }
+ },
+ "layout": {
+ "region_aside": "\n<div class="widget"><h3>Documentation</h3><ul class="nav nav-pills nav-stacked"><li><a href="help/general">Project/Site Information</a></li><li><a href="help/members">For Members</a></li><li><a href="help/admins">For Administrators</a></li><li><a href="help/develop">For Developers</a></li></ul></div>\n"
+ },
+ "is_sys": false,
+ "content": null,
+ "cid": null,
+ "profile_uid": 0,
+ "hooks": {
+ "construct_page": [
+ [
+ "addon/converse/converse.php",
+ "converse_content"
+ ]
+ ]
+ },
+ "strings": [],
+ "js_sources": [
+ "jquery.js",
+ "library/justifiedGallery/jquery.justifiedGallery.min.js",
+ "library/sprintf.js/dist/sprintf.min.js",
+ "spin.js",
+ "jquery.spin.js",
+ "jquery.textinputs.js",
+ "autocomplete.js",
+ "library/jquery-textcomplete/jquery.textcomplete.js",
+ "library/jquery.timeago.js",
+ "library/readmore.js/readmore.js",
+ "library/jgrowl/jquery.jgrowl_minimized.js",
+ "library/cryptojs/components/core-min.js",
+ "library/cryptojs/rollups/aes.js",
+ "library/cryptojs/rollups/rabbit.js",
+ "library/cryptojs/rollups/tripledes.js",
+ "acl.js",
+ "webtoolkit.base64.js",
+ "main.js",
+ "crypto.js",
+ "library/jRange/jquery.range.js",
+ "library/colorbox/jquery.colorbox-min.js",
+ "library/jquery.AreYouSure/jquery.are-you-sure.js",
+ "library/tableofcontents/jquery.toc.js",
+ "library/bootstrap/js/bootstrap.min.js",
+ "library/bootbox/bootbox.min.js",
+ "library/bootstrap-tagsinput/bootstrap-tagsinput.js",
+ "library/datetimepicker/jquery.datetimepicker.js",
+ "library/bootstrap-colorpicker/dist/js/bootstrap-colorpicker.js",
+ "view/theme/redbasic/js/redbasic.js",
+ "mod_help.js"
+ ],
+ "channel": {
+ "channel_hash": "uRy0nF-urp6k_bFrkdtCc2EkBynwpgCJL_FQFoTwyw2Hep7AHkrSt1MZcHWV_8DQucNlHSY1vHgUNS2Fvoirpw",
+ "channel_address": "testes",
+ "channel_primary": "1",
+ "channel_allow_gid": "",
+ "xchan_deleted": "0",
+ "xchan_connpage": "",
+ "channel_r_storage": "1",
+ "xchan_pubforum": "0",
+ "channel_pubkey": "-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA7MP/xxsq/srA8I7m+WKf\nHlguwwg0b1tz+I3o+djp7b+wF8q03XPKQpYmKfXIj47vpAOu75nKA4Tn90lLymmk\nSXUHogOqOMy1CHoaVrAw2T2/tAeRoMAjAJ5IxSOAM7Xda0nVUK6FmfxPcvftKf9y\nPmvvFadXpaHT4JGPH0tszDhGXLkqlt9xSkIkpsgMA6emj/7bacc6x8eTdtvzo2e5\n/NyPXvBKH4henmYaKjq/4aIYZcBWYVGt6onxaP2j1cSNbksnOY7GbJl+hy95iFoZ\nDWGxiFwQd+CroiBbdlpVGp13cV/WKp2spZzlzkmCRGYoNbbM5RlgFLnmyTa4XMZE\nwnA3ZUB59MsrUJK+0H/utiZrpX5NQcFl33z8k5zB3pPnhc5S5/P+UJZRnqhet1wQ\n7AZVmdP30D75QD8LZ4SytZ1DHn/N76EsVhSADNMnUfEphs708V33Z0gFWultYDoK\nlvXUf4O0/V8GTufFHb6XdAiy92IUzrormXCpXoOmdOcJdaH9RnotZi/DkuQ0zP+Y\nCvxU9nrjyZvAwAdew//XFDjw4HoThVM4k4jzkIhCTlCao/yRnNM7A/i3OKcXq9wU\n7OZqcRfM9o0BFpZTIoXB7BMtpeioJcBi/7FUaV9U9uYLFuLL0qWa1YxLwfsN9rDk\n6A1gbhD60G9/dAbolp8xAHkCAwEAAQ==\n-----END PUBLIC KEY-----\n",
+ "xchan_flags": "0",
+ "channel_allow_cid": "",
+ "xchan_censored": "0",
+ "channel_w_pages": "128",
+ "xchan_instance_url": "",
+ "xchan_photo_s": "http://hubzilla/photo/profile/s/2",
+ "channel_w_stream": "128",
+ "channel_timezone": "America/Los_Angeles",
+ "xchan_pubkey": "-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA7MP/xxsq/srA8I7m+WKf\nHlguwwg0b1tz+I3o+djp7b+wF8q03XPKQpYmKfXIj47vpAOu75nKA4Tn90lLymmk\nSXUHogOqOMy1CHoaVrAw2T2/tAeRoMAjAJ5IxSOAM7Xda0nVUK6FmfxPcvftKf9y\nPmvvFadXpaHT4JGPH0tszDhGXLkqlt9xSkIkpsgMA6emj/7bacc6x8eTdtvzo2e5\n/NyPXvBKH4henmYaKjq/4aIYZcBWYVGt6onxaP2j1cSNbksnOY7GbJl+hy95iFoZ\nDWGxiFwQd+CroiBbdlpVGp13cV/WKp2spZzlzkmCRGYoNbbM5RlgFLnmyTa4XMZE\nwnA3ZUB59MsrUJK+0H/utiZrpX5NQcFl33z8k5zB3pPnhc5S5/P+UJZRnqhet1wQ\n7AZVmdP30D75QD8LZ4SytZ1DHn/N76EsVhSADNMnUfEphs708V33Z0gFWultYDoK\nlvXUf4O0/V8GTufFHb6XdAiy92IUzrormXCpXoOmdOcJdaH9RnotZi/DkuQ0zP+Y\nCvxU9nrjyZvAwAdew//XFDjw4HoThVM4k4jzkIhCTlCao/yRnNM7A/i3OKcXq9wU\n7OZqcRfM9o0BFpZTIoXB7BMtpeioJcBi/7FUaV9U9uYLFuLL0qWa1YxLwfsN9rDk\n6A1gbhD60G9/dAbolp8xAHkCAwEAAQ==\n-----END PUBLIC KEY-----\n",
+ "channel_w_chat": "128",
+ "xchan_connurl": "http://hubzilla/poco/testes",
+ "channel_guid_sig": "XXX",
+ "xchan_name_date": "2015-10-09 00:45:41",
+ "channel_expire_days": "0",
+ "xchan_system": "0",
+ "xchan_photo_date": "2015-10-09 00:45:41",
+ "channel_startpage": "",
+ "channel_deny_gid": "",
+ "channel_lastpost": "2015-10-09 02:53:23",
+ "xchan_photo_m": "http://hubzilla/photo/profile/m/2",
+ "channel_passwd_reset": "",
+ "xchan_hidden": "0",
+ "xchan_selfcensored": "0",
+ "xchan_photo_mimetype": "image/jpeg",
+ "channel_a_republish": "128",
+ "channel_w_tagwall": "128",
+ "channel_r_stream": "1",
+ "channel_w_comment": "128",
+ "channel_system": "0",
+ "channel_w_mail": "128",
+ "channel_pageflags": "0",
+ "xchan_network": "zot",
+ "channel_id": "2",
+ "xchan_guid": "Ok-ycNKQYMzjokLnIz5OTCF8M5f4CtRT4vJCUeUivJhIOJWk3ORwIQgGx3P5g2Yz79KxQ-rs_Cn2G_jsgM6hmw",
+ "channel_removed": "0",
+ "channel_dirdate": "2015-10-09 00:46:00",
+ "channel_w_storage": "128",
+ "channel_w_photos": "0",
+ "channel_prvkey": "-----BEGIN PRIVATE KEY----------END PRIVATE KEY-----\n",
+ "channel_guid": "Ok-ycNKQYMzjokLnIz5OTCF8M5f4CtRT4vJCUeUivJhIOJWk3ORwIQgGx3P5g2Yz79KxQ-rs_Cn2G_jsgM6hmw",
+ "channel_max_friend_req": "0",
+ "channel_w_wall": "128",
+ "channel_r_abook": "1",
+ "channel_max_anon_mail": "0",
+ "channel_location": "",
+ "channel_a_delegate": "128",
+ "channel_deny_cid": "",
+ "channel_r_profile": "1",
+ "channel_name": "testes",
+ "xchan_guid_sig": "XXX",
+ "xchan_hash": "uRy0nF-urp6k_bFrkdtCc2EkBynwpgCJL_FQFoTwyw2Hep7AHkrSt1MZcHWV_8DQucNlHSY1vHgUNS2Fvoirpw",
+ "channel_notifyflags": "703",
+ "channel_theme": "redbasic",
+ "channel_w_like": "2",
+ "xchan_url": "http://hubzilla/channel/testes",
+ "channel_default_group": "",
+ "channel_r_photos": "0",
+ "channel_account_id": "1",
+ "xchan_addr": "testes@hubzilla",
+ "channel_r_pages": "1",
+ "channel_deleted": "0000-00-00 00:00:00",
+ "xchan_orphan": "0",
+ "xchan_follow": "http://hubzilla/follow?f=&url=%s",
+ "xchan_name": "testes",
+ "xchan_photo_l": "http://hubzilla/photo/profile/l/2"
+ },
+ "page": {
+ "content": "<div id="help-content" class="generic-content-wrapper">\n\t<div class="section-title-wrapper">\n\t<h2>Hubzilla Documentation</h2>\n\t</div>\n\t<div class="section-content-wrapper">\n\t<h2>Documentation for Developers</h2><br /><br /><h3>Technical Documentation</h3><br /><a class="zrl" href="http://hubzilla/help/Zot---A-High-Level-Overview" target="_newwin" >A high level overview of Zot</a><br /><a class="zrl" href="http://hubzilla/help/zot" target="_newwin" >An introduction to Zot</a><br /><a class="zrl" href="http://hubzilla/help/zot_structures" target="_newwin" >Zot Stuctures</a><br /><a class="zrl" href="http://hubzilla/help/comanche" target="_newwin" >Comanche Page Descriptions</a><br /><a class="zrl" href="http://hubzilla/help/Creating-Templates" target="_newwin" >Creating Comanche Templates</a><br /><a class="zrl" href="http://hubzilla/help/Widgets" target="_newwin" >Widgets</a><br /><a class="zrl" href="http://hubzilla/help/plugins" target="_newwin" >Plugins</a><br /><a class="zrl" href="http://hubzilla/help/hooks" target="_newwin" >Hooks</a><br /><a class="zrl" href="http://hubzilla/help/doco" target="_newwin" >Contributing Documentation</a><br /><a class="zrl" href="http://hubzilla/help/DerivedTheme1" target="_newwin" >Creating Derivative Themes</a><br /><a class="zrl" href="http://hubzilla/help/schema_development" target="_newwin" >Schemas</a><br /><a class="zrl" href="http://hubzilla/help/Translations" target="_newwin" >Translations</a><br /><a class="zrl" href="http://hubzilla/help/developers" target="_newwin" >Developers</a><br /><a class="zrl" href="http://hubzilla/help/intro_for_developers" target="_newwin" >Intro for Developers</a><br /><a class="zrl" href="http://hubzilla/help/database" target="_newwin" >Database schema documentation</a><br /><a class="zrl" href="http://hubzilla/help/api_functions" target="_newwin" >API functions</a><br /><a class="zrl" href="http://hubzilla/help/api_posting" target="_newwin" >Posting to the red# using the API</a><br /><a class="zrl" href="http://hubzilla/help/developer_function_primer" target="_newwin" >Red Functions 101</a><br /><a class="zrl" href="http://hubzilla/doc/html/" target="_newwin" >Code Reference (Doxygen generated - sets cookies)</a><br /><a class="zrl" href="http://hubzilla/help/to_do_doco" target="_newwin" >To-Do list for the Red Documentation Project</a><br /><a class="zrl" href="http://hubzilla/help/to_do_code" target="_newwin" >To-Do list for Developers</a><br /><a class="zrl" href="http://hubzilla/help/roadmap" target="_newwin" >Version 3 roadmap</a><br /><a class="zrl" href="http://hubzilla/help/git_for_non_developers" target="_newwin" >Git for Non-Developers</a><br /><a class="zrl" href="http://hubzilla/help/dev_beginner" target="_newwin" >Step-for-step manual for beginning developers</a><br /><br /><h3>Frequently Asked Questions For Developers</h3><br /><a class="zrl" href="http://hubzilla/help/faq_developers" target="_newwin" >FAQ For Developers</a><br /><br /><h3>External Resources</h3><br /><br /><a href="https://zothub.com/channel/one" target="_newwin" >Development Channel</a><br /><a href="https://federated.social/channel/postgres" target="_newwin" >Postgres-specific Hubzilla Admin Support Channel</a><br />\n\t</div>\n</div>\n<script>var homebase = "http://hubzilla/channel/testes";</script>",
+ "page_title": "help",
+ "title": "Help: Develop",
+ "nav": "\t<div class="container-fluid">\n\t\t<div class="navbar-header">\n\t\t\t<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar-collapse-1">\n\t\t\t\t<span class="icon-bar"></span>\n\t\t\t\t<span class="icon-bar"></span>\n\t\t\t\t<span class="icon-bar"></span>\n\t\t\t</button>\n\t\t\t<button id="expand-tabs" type="button" class="navbar-toggle" data-toggle="collapse" data-target="#tabs-collapse-1">\n\t\t\t\t<i class="icon-circle-arrow-down" id="expand-tabs-icon"></i>\n\t\t\t</button>\n\t\t\t<button id="expand-aside" type="button" class="navbar-toggle" data-toggle="offcanvas" data-target="#region_1">\n\t\t\t\t<i class="icon-circle-arrow-right" id="expand-aside-icon"></i>\n\t\t\t</button>\n\t\t\t\t\t\t\t<img class="dropdown-toggle fakelink" data-toggle="dropdown" id="avatar" src="http://hubzilla/photo/profile/m/2" alt="testes@hubzilla"><span class="caret" id="usermenu-caret"></span>\n\t\t\t\t\t\t\t\t\t<ul class="dropdown-menu" role="menu" aria-labelledby="avatar">\n\t\t\t\t\t\t\t\t\t\t\t\t<li role="presentation"><a href="channel/testes" title="Your posts and conversations" role="menuitem" id="channel_nav_btn">Home</a></li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li role="presentation"><a href="profile/testes" title="Your profile page" role="menuitem" id="profile_nav_btn">View Profile</a></li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li role="presentation"><a href="profiles/2" title="Edit your profile" role="menuitem" id="profiles_nav_btn">Edit Profile</a></li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li role="presentation"><a href="photos/testes" title="Your photos" role="menuitem" id="photos_nav_btn">Photos</a></li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li role="presentation"><a href="cloud/testes" title="Your files" role="menuitem" id="cloud_nav_btn">Files</a></li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li role="presentation"><a href="chat/testes/new" title="Your chatrooms" role="menuitem" id="chat_nav_btn">Chat</a></li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li role="presentation" class="divider"></li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li role="presentation"><a href="settings" title="Account/Channel Settings" role="menuitem" id="settings_nav_btn">Settings</a></li>\t\t\t\t\t\t<li role="presentation"><a href="manage" title="Manage Your Channels" role="menuitem" id="manage_nav_btn">Channel Manager</a></li>\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<li role="presentation" class="divider"></li>\n\t\t\t\t\t\t<li role="presentation"><a href="admin/" title="Site Setup and Configuration" role="menuitem" id="admin_nav_btn">Admin</a></li>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<li role="presentation" class="divider"></li>\n\t\t\t\t\t\t<li role="presentation"><a href="logout" title="End this session" role="menuitem" id="logout_nav_btn">Logout</a></li>\n\t\t\t\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t<div class="collapse navbar-collapse" id="navbar-collapse-1">\n\t\t\t<ul class="nav navbar-nav navbar-left">\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\t\t\t<li class=" hidden-xs">\n\t\t\t\t\t<a href="network" title="Your grid" id="network_nav_btn"><i class="icon-th"></i></a>\n\t\t\t\t\t<span class="net-update badge dropdown-toggle" data-toggle="dropdown" rel="#nav-network-menu"></span>\n\t\t\t\t\t<ul id="nav-network-menu" role="menu" class="dropdown-menu" rel="network">\n\t\t\t\t\t\t\n\t\t\t\t\t\t<li id="nav-network-mark-all"><a href="#" onclick="markRead('network'); return false;">Mark all grid notifications seen</a></li>\n\t\t\t\t\t\t<li class="empty">Loading...</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</li>\n\t\t\t\t<li class=" visible-xs">\n\t\t\t\t\t<a href="network" title="Your grid" ><i class="icon-th"></i></a>\n\t\t\t\t\t<span class="net-update badge" rel="#nav-network-menu"></span>\n\t\t\t\t</li>\n\t\t\t\n\t\t\t\t\t\t\t<li class=" hidden-xs">\n\t\t\t\t\t<a class="" href="channel/testes" title="Channel home" id="home_nav_btn"><i class="icon-home"></i></a>\n\t\t\t\t\t<span class="home-update badge dropdown-toggle" data-toggle="dropdown" rel="#nav-home-menu"></span>\n\t\t\t\t\t<ul id="nav-home-menu" class="dropdown-menu" rel="home">\n\t\t\t\t\t\t\n\t\t\t\t\t\t<li id="nav-home-mark-all"><a href="#" onclick="markRead('home'); return false;">Mark all channel notifications seen</a></li>\n\t\t\t\t\t\t<li class="empty">Loading...</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</li>\n\t\t\t\t<li class=" visible-xs">\n\t\t\t\t\t<a class="" href="channel/testes" title="Channel home" ><i class="icon-home"></i></a>\n\t\t\t\t\t<span class="home-update badge" rel="#nav-home-menu"></span>\n\t\t\t\t</li>\n\t\t\t\n\n\t\t\t\t\t\t\t<li class=" hidden-xs">\n\t\t\t\t\t<a class="" href="mail/combined" title="Private mail" id="mail_nav_btn"><i class="icon-envelope"></i></a>\n\t\t\t\t\t<span class="mail-update badge dropdown-toggle" data-toggle="dropdown" rel="#nav-messages-menu"></span>\n\t\t\t\t\t<ul id="nav-messages-menu" class="dropdown-menu" rel="messages">\n\t\t\t\t\t\t<li id="nav-messages-see-all"><a href="mail/combined">See all private messages</a></li>\n\t\t\t\t\t\t<li id="nav-messages-mark-all"><a href="#" onclick="markRead('messages'); return false;">Mark all private messages seen</a></li>\n\t\t\t\t\t\t<li class="empty">Loading...</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</li>\n\t\t\t\t<li class=" visible-xs">\n\t\t\t\t\t<a class="" href="mail/combined" title="Private mail" ><i class="icon-envelope"></i></a>\n\t\t\t\t\t<span class="mail-update badge" rel="#nav-messages-menu"></span>\n\t\t\t\t</li>\n\t\t\t\n\t\t\t\t\t\t\t<li class=" hidden-xs">\n\t\t\t\t\t<a class="" href="events" title="Event Calendar" id='events_nav_btn'><i class="icon-calendar"></i></a>\n\t\t\t\t\t<span class="all_events-update badge dropdown-toggle" data-toggle="dropdown" rel="#nav-all_events-menu"></span>\n\t\t\t\t\t<ul id="nav-all_events-menu" class="dropdown-menu" rel="all_events">\n\t\t\t\t\t\t<li id="nav-all_events-see-all"><a href="events">See all events</a></li>\n\t\t\t\t\t\t<li id="nav-all_events-mark-all"><a href="#" onclick="markRead('all_events'); return false;">Mark all events seen</a></li>\n\t\t\t\t\t\t<li class="empty">Loading...</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</li>\n\t\t\t\t<li class=" visible-xs">\n\t\t\t\t\t<a class="" href="events" title="Event Calendar" ><i class="icon-calendar"></i></a>\n\t\t\t\t\t<span class="all_events-update badge" rel="#nav-all_events-menu"></span>\n\t\t\t\t</li>\n\t\t\t\n\t\t\t\t\t\t\t<li class=" hidden-xs">\n\t\t\t\t\t<a class="" href="connections/ifpending" title="Connections" id="connections_nav_btn"><i class="icon-user"></i></a>\n\t\t\t\t\t<span class="intro-update badge dropdown-toggle" data-toggle="dropdown" rel="#nav-intros-menu"></span>\n\t\t\t\t\t<ul id="nav-intros-menu" class="dropdown-menu" rel="intros">\n\t\t\t\t\t\t<li id="nav-intros-see-all"><a href=""></a></li>\n\t\t\t\t\t\t<li class="empty">Loading...</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</li>\n\t\t\t\t<li class=" visible-xs">\n\t\t\t\t\t<a class="" href="connections/ifpending" title="Connections" ><i class="icon-user"></i></a>\n\t\t\t\t\t<span class="intro-update badge" rel="#nav-intros-menu"></span>\n\t\t\t\t</li>\n\t\t\t\t\t\n\t\t\t\t\t\t\t<li class=" hidden-xs">\n\t\t\t\t\t<a href="notifications/system" title="Notices" id="notifications_nav_btn"><i class="icon-exclamation"></i></a>\n\t\t\t\t\t<span class="notify-update badge dropdown-toggle" data-toggle="dropdown" rel="#nav-notify-menu"></span>\n\t\t\t\t\t<ul id="nav-notify-menu" class="dropdown-menu" rel="notify">\n\t\t\t\t\t\t<li id="nav-notify-see-all"><a href="notifications/system">See all notifications</a></li>\n\t\t\t\t\t\t<li id="nav-notify-mark-all"><a href="#" onclick="markRead('notify'); return false;">Mark all system notifications seen</a></li>\n\t\t\t\t\t\t<li class="empty">Loading...</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</li>\n\t\t\t\t<li class=" visible-xs">\n\t\t\t\t\t<a href="notifications/system" title="Notices"><i class="icon-exclamation"></i></a>\n\t\t\t\t\t<span class="notify-update badge" rel="#nav-notify-menu"></span>\n\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t<ul class="nav navbar-nav navbar-right">\n\t\t\t\t<li class="hidden-xs">\n\t\t\t\t\t<form method="get" action="search" role="search">\n\t\t\t\t\t\t<div id="nav-search-spinner"></div><input class="icon-search" id="nav-search-text" type="text" value="" placeholder=" @name, #tag, ?doc, content" name="search" title="Search site @name, #tag, ?docs, content" onclick="this.submit();"/>\n\t\t\t\t\t</form>\n\t\t\t\t</li>\n\t\t\t\t<li class="visible-xs">\n\t\t\t\t\t<a href="/search" title="Search site @name, #tag, ?docs, content"><i class="icon-search"></i></a>\n\t\t\t\t</li>\n\n\t\t\t\t\t\t\t\t\t\t<li class="">\n\t\t\t\t\t<a class="" href="directory" title="Channel Directory" id="directory_nav_btn"><i class="icon-sitemap"></i></a>\n\t\t\t\t</li>\n\t\t\t\n\t\t\t\t\t\t\t<li class="">\n\t\t\t\t\t<a class="" href="apps" title="Applications, utilities, links, games" id="apps_nav_btn"><i class="icon-cogs"></i></a>\n\t\t\t\t</li>\n\t\t\t\n\t\t\t\t\t\t\t<li class="active">\n\t\t\t\t\t<a class="" target="hubzilla-help" href="http://hubzilla/help?f=&cmd=help/develop" title="Help and documentation" id="help_nav_btn"><i class="icon-question"></i></a>\n\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t</div>\n\t</div>\n",
+ "htmlhead": "<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />\n<base href="http://hubzilla/" />\n<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=1" />\n<meta name="generator" content="hubzilla 2015-11-03.1205H" />\n\n<!--[if IE]>\n<script src="http://hubzilla/library/html5.js"></script>\n<![endif]-->\n\n<link rel="stylesheet" href="http://hubzilla/library/font_awesome/css/font-awesome.min.css" type="text/css" media="screen">\r\n<link rel="stylesheet" href="http://hubzilla/library/bootstrap/css/bootstrap.min.css" type="text/css" media="screen">\r\n<link rel="stylesheet" href="http://hubzilla/library/bootstrap-tagsinput/bootstrap-tagsinput.css" type="text/css" media="screen">\r\n<link rel="stylesheet" href="http://hubzilla/view/css/bootstrap-red.css" type="text/css" media="screen">\r\n<link rel="stylesheet" href="http://hubzilla/library/datetimepicker/jquery.datetimepicker.css" type="text/css" media="screen">\r\n<link rel="stylesheet" href="http://hubzilla/library/bootstrap-colorpicker/dist/css/bootstrap-colorpicker.min.css" type="text/css" media="screen">\r\n<link rel="stylesheet" href="http://hubzilla/library/tiptip/tipTip.css" type="text/css" media="screen">\r\n<link rel="stylesheet" href="http://hubzilla/library/jgrowl/jquery.jgrowl.css" type="text/css" media="screen">\r\n<link rel="stylesheet" href="http://hubzilla/library/jRange/jquery.range.css" type="text/css" media="screen">\r\n<link rel="stylesheet" href="http://hubzilla/view/css/conversation.css" type="text/css" media="screen">\r\n<link rel="stylesheet" href="http://hubzilla/view/css/widgets.css" type="text/css" media="screen">\r\n<link rel="stylesheet" href="http://hubzilla/view/css/colorbox.css" type="text/css" media="screen">\r\n<link rel="stylesheet" href="http://hubzilla/library/justifiedGallery/justifiedGallery.min.css" type="text/css" media="screen">\r\n<link rel="stylesheet" href="http://hubzilla/view/css/default.css" type="text/css" media="screen">\r\n<link rel="stylesheet" href="http://hubzilla/view/theme/redbasic/php/style.pcss" type="text/css" media="screen">\r\n\n\n<script>\n\n\tvar aStr = {\n\n\t\t'delitem' : "Delete this item?",\n\t\t'comment' : "Comment",\n\t\t'showmore' : "[+] show all",\n\t\t'showfewer' : "[-] show less",\n\t\t'divgrowmore' : "[+] expand",\n\t\t'divgrowless' : "[-] collapse",\n\t\t'pwshort' : "Password too short",\n\t\t'pwnomatch' : "Passwords do not match",\n\t\t'everybody' : "everybody",\n\t\t'passphrase' : "Secret Passphrase",\n\t\t'passhint' : "Passphrase hint",\n\t\t'permschange' : "Notice: Permissions have changed but have not yet been submitted.",\n\t\t'closeAll' : "close all",\n\t\t'nothingnew' : "Nothing new here",\n\t\t'rating_desc' : "Rate This Channel (this is public)",\n\t\t'rating_val' : "Rating",\n\t\t'rating_text' : "Describe (optional)",\n\t\t'submit' : "Submit",\n\t\t'linkurl' : "Please enter a link URL",\n\t\t'leavethispage' : "Unsaved changes. Are you sure you wish to leave this page?",\n\n\t\t't01' : "",\n\t\t't02' : "",\n\t\t't03' : "ago",\n\t\t't04' : "from now",\n\t\t't05' : "less than a minute",\n\t\t't06' : "about a minute",\n\t\t't07' : "%d minutes",\n\t\t't08' : "about an hour",\n\t\t't09' : "about %d hours",\n\t\t't10' : "a day",\n\t\t't11' : "%d days",\n\t\t't12' : "about a month",\n\t\t't13' : "%d months",\n\t\t't14' : "about a year",\n\t\t't15' : "%d years",\n\t\t't16' : " ",\n\t\t't17' : "[]",\n\n\t\t'monthNames' : [ "January","February","March","April","May","June","July","August","September","October","November","December" ],\n\t\t'monthNamesShort' : [ "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec" ],\n\t\t'dayNames' : ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],\n\t\t'dayNamesShort' : ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],\n\t\t'today' : "today",\n\t\t'month' : "month",\n\t\t'week' : "week",\n\t\t'day' : "day",\n\t\t'allday' : "All day"\n\t};\n\n</script>\n\t\t\n\n\n<script src="http://hubzilla/view/js/jquery.js" ></script>\r\n<script src="http://hubzilla/library/justifiedGallery/jquery.justifiedGallery.min.js" ></script>\r\n<script src="http://hubzilla/library/sprintf.js/dist/sprintf.min.js" ></script>\r\n<script src="http://hubzilla/view/js/spin.js" ></script>\r\n<script src="http://hubzilla/view/js/jquery.spin.js" ></script>\r\n<script src="http://hubzilla/view/js/jquery.textinputs.js" ></script>\r\n<script src="http://hubzilla/view/js/autocomplete.js" ></script>\r\n<script src="http://hubzilla/library/jquery-textcomplete/jquery.textcomplete.js" ></script>\r\n<script src="http://hubzilla/library/jquery.timeago.js" ></script>\r\n<script src="http://hubzilla/library/readmore.js/readmore.js" ></script>\r\n<script src="http://hubzilla/library/jgrowl/jquery.jgrowl_minimized.js" ></script>\r\n<script src="http://hubzilla/library/cryptojs/components/core-min.js" ></script>\r\n<script src="http://hubzilla/library/cryptojs/rollups/aes.js" ></script>\r\n<script src="http://hubzilla/library/cryptojs/rollups/rabbit.js" ></script>\r\n<script src="http://hubzilla/library/cryptojs/rollups/tripledes.js" ></script>\r\n<script src="http://hubzilla/view/js/acl.js" ></script>\r\n<script src="http://hubzilla/view/js/webtoolkit.base64.js" ></script>\r\n<script src="http://hubzilla/view/js/crypto.js" ></script>\r\n<script src="http://hubzilla/library/jRange/jquery.range.js" ></script>\r\n<script src="http://hubzilla/library/colorbox/jquery.colorbox-min.js" ></script>\r\n<script src="http://hubzilla/library/jquery.AreYouSure/jquery.are-you-sure.js" ></script>\r\n<script src="http://hubzilla/library/tableofcontents/jquery.toc.js" ></script>\r\n<script src="http://hubzilla/library/bootstrap/js/bootstrap.min.js" ></script>\r\n<script src="http://hubzilla/library/bootbox/bootbox.min.js" ></script>\r\n<script src="http://hubzilla/library/bootstrap-tagsinput/bootstrap-tagsinput.js" ></script>\r\n<script src="http://hubzilla/library/datetimepicker/jquery.datetimepicker.js" ></script>\r\n<script src="http://hubzilla/library/bootstrap-colorpicker/dist/js/bootstrap-colorpicker.js" ></script>\r\n<script src="http://hubzilla/view/theme/redbasic/js/redbasic.js" ></script>\r\n\n\n<link rel="shortcut icon" href="http://hubzilla/images/hz-32.png" />\n<link rel="search"\n href="http://hubzilla/opensearch" \n type="application/opensearchdescription+xml" \n title="Search in the Hubzilla" />\n\n\n<script>\n\n\tvar updateInterval = 80000;\n\tvar localUser = 2;\n\tvar zid = 'testes@hubzilla';\n\tvar justifiedGalleryActive = false;\n\t\t\n</script>\n\n\n\n\n<script>$(document).ready(function() {\n\t$("#nav-search-text").search_autocomplete('http://hubzilla/acl');\n});\n\n</script><script src="http://hubzilla/view/js/main.js" ></script>\r\n<link rel="stylesheet" href="http://hubzilla/addon/converse/converse.min.js" media="all" /><script src="http://hubzilla/addon/converse/converse.min.js"></script>",
+ "header": "<div id="banner" class="hidden-sm hidden-xs">Hubzilla</div>\n\n<ul id="nav-notifications-template" style="display:none;" rel="template">\n\t<li class="{5}"><a href="{0}" title="{2} {3}"><img data-src="{1}"><span class="contactname">{2}</span><span class="dropdown-sub-text">{3}<br>{4}</span></a></li>\n</ul>\n"
+ },
+ "poi": null,
+ "force_max_items": 0,
+ "module": "help",
+ "template_engines": {
+ "smarty3": "FriendicaSmartyEngine",
+ "internal": "Template"
+ },
+ "account": {
+ "account_flags": "0",
+ "account_service_class": "",
+ "account_id": "1",
+ "account_salt": "9bf8c193c35a56c4c666f47728fe20da",
+ "account_expires": "0000-00-00 00:00:00",
+ "account_lastlog": "2015-11-04 07:47:55",
+ "account_password_changed": "0000-00-00 00:00:00",
+ "account_language": "en",
+ "account_default_channel": "2",
+ "account_password": "",
+ "account_parent": "1",
+ "account_expire_notified": "0000-00-00 00:00:00",
+ "account_reset": "",
+ "account_email": "foo@bar.com",
+ "account_level": "0",
+ "account_roles": "4096",
+ "account_external": "",
+ "account_created": "2015-10-09 00:44:51"
+ },
+ "theme_info": [],
+ "argv": [
+ "help",
+ "develop"
+ ],
+ "template_engine_instance": {
+ "smarty3": {}
+ },
+ "language": "en",
+ "pager": {
+ "page": 1,
+ "itemspage": 60,
+ "start": 0,
+ "total": 0
+ },
+ "plugins": [
+ "converse"
+ ],
+ "error": false,
+ "pdl": "[region=aside]\n[widget=helpindex][/widget]\n[/region]\n",
+ "query_string": "help/develop",
+ "cmd": "help/develop",
+ "groups": null,
+ "videowidth": 425,
+ "css_sources": [
+ [
+ "library/font_awesome/css/font-awesome.min.css",
+ "screen"
+ ],
+ [
+ "library/bootstrap/css/bootstrap.min.css",
+ "screen"
+ ],
+ [
+ "library/bootstrap-tagsinput/bootstrap-tagsinput.css",
+ "screen"
+ ],
+ [
+ "view/css/bootstrap-red.css",
+ "screen"
+ ],
+ [
+ "library/datetimepicker/jquery.datetimepicker.css",
+ "screen"
+ ],
+ [
+ "library/bootstrap-colorpicker/dist/css/bootstrap-colorpicker.min.css",
+ "screen"
+ ],
+ [
+ "library/tiptip/tipTip.css",
+ "screen"
+ ],
+ [
+ "library/jgrowl/jquery.jgrowl.css",
+ "screen"
+ ],
+ [
+ "library/jRange/jquery.range.css",
+ "screen"
+ ],
+ [
+ "view/css/conversation.css",
+ "screen"
+ ],
+ [
+ "view/css/widgets.css",
+ "screen"
+ ],
+ [
+ "view/css/colorbox.css",
+ "screen"
+ ],
+ [
+ "library/justifiedGallery/justifiedGallery.min.css",
+ "screen"
+ ],
+ [
+ "default.css",
+ "screen"
+ ],
+ [
+ "mod_help.css",
+ "screen"
+ ],
+ [
+ "view/theme/redbasic/php/style.pcss",
+ "screen"
+ ]
+ ],
+ "is_tablet": false,
+ "observer": {
+ "xchan_deleted": "0",
+ "xchan_connpage": "",
+ "xchan_pubforum": "0",
+ "xchan_flags": "0",
+ "xchan_censored": "0",
+ "xchan_instance_url": "",
+ "xchan_photo_s": "http://hubzilla/photo/profile/s/2",
+ "xchan_pubkey": "-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA7MP/xxsq/srA8I7m+WKf\nHlguwwg0b1tz+I3o+djp7b+wF8q03XPKQpYmKfXIj47vpAOu75nKA4Tn90lLymmk\nSXUHogOqOMy1CHoaVrAw2T2/tAeRoMAjAJ5IxSOAM7Xda0nVUK6FmfxPcvftKf9y\nPmvvFadXpaHT4JGPH0tszDhGXLkqlt9xSkIkpsgMA6emj/7bacc6x8eTdtvzo2e5\n/NyPXvBKH4henmYaKjq/4aIYZcBWYVGt6onxaP2j1cSNbksnOY7GbJl+hy95iFoZ\nDWGxiFwQd+CroiBbdlpVGp13cV/WKp2spZzlzkmCRGYoNbbM5RlgFLnmyTa4XMZE\nwnA3ZUB59MsrUJK+0H/utiZrpX5NQcFl33z8k5zB3pPnhc5S5/P+UJZRnqhet1wQ\n7AZVmdP30D75QD8LZ4SytZ1DHn/N76EsVhSADNMnUfEphs708V33Z0gFWultYDoK\nlvXUf4O0/V8GTufFHb6XdAiy92IUzrormXCpXoOmdOcJdaH9RnotZi/DkuQ0zP+Y\nCvxU9nrjyZvAwAdew//XFDjw4HoThVM4k4jzkIhCTlCao/yRnNM7A/i3OKcXq9wU\n7OZqcRfM9o0BFpZTIoXB7BMtpeioJcBi/7FUaV9U9uYLFuLL0qWa1YxLwfsN9rDk\n6A1gbhD60G9/dAbolp8xAHkCAwEAAQ==\n-----END PUBLIC KEY-----\n",
+ "xchan_connurl": "http://hubzilla/poco/testes",
+ "xchan_name_date": "2015-10-09 00:45:41",
+ "xchan_system": "0",
+ "xchan_photo_date": "2015-10-09 00:45:41",
+ "xchan_photo_m": "http://hubzilla/photo/profile/m/2",
+ "xchan_hidden": "0",
+ "xchan_selfcensored": "0",
+ "xchan_photo_mimetype": "image/jpeg",
+ "xchan_network": "zot",
+ "xchan_guid": "Ok-ycNKQYMzjokLnIz5OTCF8M5f4CtRT4vJCUeUivJhIOJWk3ORwIQgGx3P5g2Yz79KxQ-rs_Cn2G_jsgM6hmw",
+ "xchan_guid_sig": "XXX",
+ "xchan_hash": "uRy0nF-urp6k_bFrkdtCc2EkBynwpgCJL_FQFoTwyw2Hep7AHkrSt1MZcHWV_8DQucNlHSY1vHgUNS2Fvoirpw",
+ "xchan_url": "http://hubzilla/channel/testes",
+ "xchan_addr": "testes@hubzilla",
+ "xchan_orphan": "0",
+ "xchan_follow": "http://hubzilla/follow?f=&url=%s",
+ "xchan_name": "testes",
+ "xchan_photo_l": "http://hubzilla/photo/profile/l/2"
+ },
+ "contact": null,
+ "identities": null,
+ "user": null,
+ "videoheight": 350,
+ "profile": null,
+ "theme_thread_allow": true,
+ "data": {
+ "pageicon": "/images/hz-32.png"
+ }
+}[/code]
+
#include doc/macros/main_footer.bb;
diff --git a/sources/doc/features.bb b/sources/doc/features.bb
index 06b7fb6b..2abf0ec3 100644
--- a/sources/doc/features.bb
+++ b/sources/doc/features.bb
@@ -85,11 +85,9 @@ Share and save/manage bookmarks from links provided in conversations.
[b]Private Message Encryption and Privacy Concerns[/b]
-Messages marked [b]private[/b] are encrypted with AES-CBC 256-bit symmetric cipher, which is then protected (encrypted in turn) by public key cryptography, based on 4096-bit RSA keys, associated with the channel that is sending the message.
+Private mail is stored in an obscured format. While this is not bullet-proof it typically prevents casual snooping by the site administrator or ISP.
-These private messages are also stored in an encrypted form on remote systems.
-
-Each$Projectname channel has it's own unique set of private and associated public RSA 4096-bit keys, generated when the channels is first created.
+Each $Projectname channel has it's own unique set of private and associated public RSA 4096-bit keys, generated when the channels is first created. This is used to protect private messages and posts in transit.
Additionally, messages may be created utilising "end-to-end encryption" which cannot be read by $Projectname operators or ISPs or anybody who does not know the passcode.
diff --git a/sources/doc/hidden_configs.bb b/sources/doc/hidden_configs.bb
index 76213851..44114967 100644
--- a/sources/doc/hidden_configs.bb
+++ b/sources/doc/hidden_configs.bb
@@ -112,7 +112,7 @@ This document assumes you're an administrator.
[b]system > cron_hour[/b]
Specify an hour in which to run cron_daily. By default with no config, this will run at midnight UTC.
[b]system > minimum_feedcheck_minutes[/b]
- The minimum interval between polling RSS feeds. If this is lower than the cron interval, feeds will be polled with each cronjob
+ The minimum interval between polling RSS feeds. If this is lower than the cron interval, feeds will be polled with each cronjob. Defaults to 60 if not set. The site setting can also be over-ridden on a channel by channel basis by a service class setting aptly named 'minimum_feedcheck_minutes'.
[b]system > blacklisted_sites[/b]
An array of specific hubs to block from this hub completely.
[b]system > ignore_imagick[/b]
@@ -133,7 +133,45 @@ This document assumes you're an administrator.
How long to cache photos, in seconds. Default is 86400 (1 day).
Longer time increases performance, but it also means it takes longer for changed permissions to apply.
[b]system > poco_rating_enable[/b]
- Distributed reputation reporting and data collection may be disabled. If your site does not participate in distributed reputation you will also not be able to make use of the data from your connections on other sites. By default and in the absence of any setting it is enabled. Individual members can opt out by restricting who can see their connections or by not providing any reputation information for their connections.
+ Distributed reputation reporting and data collection may be disabled. If your site does not participate in distributed reputation you will also not be able to make use of the data from your connections on other sites. By default and in the absence of any setting it is enabled. Individual members can opt out by restricting who can see their connections or by not providing any reputation information for their connections.
+ [b]system > register_link[/b]
+ path to direct to from the "register" link on the login form. On closed sites this will direct to 'pubsites'. For open sites it will normally redirect to 'register' but you may change this to a custom site page offering subscriptions or whatever.
+ [b]system > max_import_size[/b]
+ If configured, the maximum length of an imported text message. This is normally left at 200Kbytes or more to accomodate Friendica private photos, which are embedded.
+ [b]system > tempdir[/b]
+ Place to store temporary files, default is defined in the PHP configuration
+ [b]system > uploaddir[/b]
+ Location to upload files (default is system.tempdir)
+ [b]system > disable_discover_tab[/b]
+ This allows you to completely disable the ability to discover public content from external sites.
+ [b]system > sys_expire_days[/b]
+ How many days to keep discovered public content from other sites
+ [b]system > openssl_encrypt[/b]
+ Use openssl encryption engine, default is false (uses mcrypt for AES encryption)
+ [b]system > max_tagged_forums[/b]
+ Spam prevention. Limits the number of tagged forums which are recognised in any post. Default is 2. Only the first 'n' tags will be delivered as forums, the others will not cause any delivery.
+ [b]system > openssl_conf_file[/b]
+ Needed in some Windows installations to locate the openssl configuration file on the system.
+
+
+[b]Directory config[/b]
+[b]Directory search defaults[/b]
+ [b]directory > safemode[/b]
+ 0 or 1.
+ [b]directory > globaldir[/b]
+ 0 or 1. Default 0. If you visit the directory on a site you'll just see the members of that site by default. You have to go through an extra step to see the people in the rest of the network; and by doing so there's a clear delineation that these people *aren't* members of that site but of a larger network.
+ [b]directory > pubforums[/b]
+ 0 or 1. Public forums *should* be default 0.
+[b]Directory server configuration (see [zrl=[baseurl]/help/directories]help/directories[/zrl])[/b]
+ [b]system > directory_server[/b]
+ [b]system > directory_primary[/b]
+ [b]system > directory_realm[/b]
+ [b]system > realm_token[/b]
+ [b]system > directory_mode[/b]
+
+
+
+
#include doc/macros/main_footer.bb;
diff --git a/sources/doc/hook/about_hook.bb b/sources/doc/hook/about_hook.bb
new file mode 100644
index 00000000..22b60d78
--- /dev/null
+++ b/sources/doc/hook/about_hook.bb
@@ -0,0 +1 @@
+[h2]about_hook[/h2]
diff --git a/sources/doc/hook/accept_follow.bb b/sources/doc/hook/accept_follow.bb
new file mode 100644
index 00000000..e8b1ed0c
--- /dev/null
+++ b/sources/doc/hook/accept_follow.bb
@@ -0,0 +1 @@
+[h2]accept_follow[/h2]
diff --git a/sources/doc/hook/account_downgrade.bb b/sources/doc/hook/account_downgrade.bb
new file mode 100644
index 00000000..63bae0a5
--- /dev/null
+++ b/sources/doc/hook/account_downgrade.bb
@@ -0,0 +1 @@
+[h2]account_downgrade[/h2]
diff --git a/sources/doc/hook/account_settings.bb b/sources/doc/hook/account_settings.bb
new file mode 100644
index 00000000..91b3a838
--- /dev/null
+++ b/sources/doc/hook/account_settings.bb
@@ -0,0 +1 @@
+[h2]account_settings[/h2]
diff --git a/sources/doc/hook/account_settings_post.bb b/sources/doc/hook/account_settings_post.bb
new file mode 100644
index 00000000..bbd7a57a
--- /dev/null
+++ b/sources/doc/hook/account_settings_post.bb
@@ -0,0 +1 @@
+[h2]account_settings_post[/h2]
diff --git a/sources/doc/hook/activity_received.bb b/sources/doc/hook/activity_received.bb
new file mode 100644
index 00000000..2e9d68bf
--- /dev/null
+++ b/sources/doc/hook/activity_received.bb
@@ -0,0 +1 @@
+[h2]activity_received[/h2]
diff --git a/sources/doc/hook/affinity_labels.bb b/sources/doc/hook/affinity_labels.bb
new file mode 100644
index 00000000..7234b763
--- /dev/null
+++ b/sources/doc/hook/affinity_labels.bb
@@ -0,0 +1 @@
+[h2]affinity_labels[/h2]
diff --git a/sources/doc/hook/api_perm_is_allowed.bb b/sources/doc/hook/api_perm_is_allowed.bb
new file mode 100644
index 00000000..862cbd65
--- /dev/null
+++ b/sources/doc/hook/api_perm_is_allowed.bb
@@ -0,0 +1 @@
+[h2]api_perm_is_allowed[/h2]
diff --git a/sources/doc/hook/atom_author.bb b/sources/doc/hook/atom_author.bb
new file mode 100644
index 00000000..c9d05a59
--- /dev/null
+++ b/sources/doc/hook/atom_author.bb
@@ -0,0 +1 @@
+[h2]atom_author[/h2]
diff --git a/sources/doc/hook/atom_entry.bb b/sources/doc/hook/atom_entry.bb
new file mode 100644
index 00000000..0aec89f1
--- /dev/null
+++ b/sources/doc/hook/atom_entry.bb
@@ -0,0 +1 @@
+[h2]atom_entry[/h2]
diff --git a/sources/doc/hook/atom_feed.bb b/sources/doc/hook/atom_feed.bb
new file mode 100644
index 00000000..69775ca5
--- /dev/null
+++ b/sources/doc/hook/atom_feed.bb
@@ -0,0 +1 @@
+[h2]atom_feed[/h2]
diff --git a/sources/doc/hook/atom_feed_end.bb b/sources/doc/hook/atom_feed_end.bb
new file mode 100644
index 00000000..4f019fc8
--- /dev/null
+++ b/sources/doc/hook/atom_feed_end.bb
@@ -0,0 +1 @@
+[h2]atom_feed_end[/h2]
diff --git a/sources/doc/hook/attach_upload_file.bb b/sources/doc/hook/attach_upload_file.bb
new file mode 100644
index 00000000..1f8056ca
--- /dev/null
+++ b/sources/doc/hook/attach_upload_file.bb
@@ -0,0 +1 @@
+[h2]attach_upload_file[/h2]
diff --git a/sources/doc/hook/authenticate.bb b/sources/doc/hook/authenticate.bb
new file mode 100644
index 00000000..eb8071e7
--- /dev/null
+++ b/sources/doc/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/sources/doc/hook/bb2diaspora.bb b/sources/doc/hook/bb2diaspora.bb
new file mode 100644
index 00000000..c28f1883
--- /dev/null
+++ b/sources/doc/hook/bb2diaspora.bb
@@ -0,0 +1 @@
+[h2]bb2diaspora[/h2]
diff --git a/sources/doc/hook/bbcode.bb b/sources/doc/hook/bbcode.bb
new file mode 100644
index 00000000..2996a852
--- /dev/null
+++ b/sources/doc/hook/bbcode.bb
@@ -0,0 +1 @@
+[h2]bbcode[/h2]
diff --git a/sources/doc/hook/channel_remove.bb b/sources/doc/hook/channel_remove.bb
new file mode 100644
index 00000000..db9e9dd8
--- /dev/null
+++ b/sources/doc/hook/channel_remove.bb
@@ -0,0 +1 @@
+[h2]channel_remove[/h2]
diff --git a/sources/doc/hook/chat_message.bb b/sources/doc/hook/chat_message.bb
new file mode 100644
index 00000000..ccc93bb2
--- /dev/null
+++ b/sources/doc/hook/chat_message.bb
@@ -0,0 +1 @@
+[h2]chat_message[/h2]
diff --git a/sources/doc/hook/chat_post.bb b/sources/doc/hook/chat_post.bb
new file mode 100644
index 00000000..7cb3c9fa
--- /dev/null
+++ b/sources/doc/hook/chat_post.bb
@@ -0,0 +1 @@
+[h2]chat_post[/h2]
diff --git a/sources/doc/hook/check_account_email.bb b/sources/doc/hook/check_account_email.bb
new file mode 100644
index 00000000..b309706a
--- /dev/null
+++ b/sources/doc/hook/check_account_email.bb
@@ -0,0 +1 @@
+[h2]check_account_email[/h2]
diff --git a/sources/doc/hook/check_account_invite.bb b/sources/doc/hook/check_account_invite.bb
new file mode 100644
index 00000000..8d4a4052
--- /dev/null
+++ b/sources/doc/hook/check_account_invite.bb
@@ -0,0 +1 @@
+[h2]check_account_invite[/h2]
diff --git a/sources/doc/hook/check_account_password.bb b/sources/doc/hook/check_account_password.bb
new file mode 100644
index 00000000..53562ec6
--- /dev/null
+++ b/sources/doc/hook/check_account_password.bb
@@ -0,0 +1 @@
+[h2]check_account_password[/h2]
diff --git a/sources/doc/hook/connect_premium.bb b/sources/doc/hook/connect_premium.bb
new file mode 100644
index 00000000..ae3aafc6
--- /dev/null
+++ b/sources/doc/hook/connect_premium.bb
@@ -0,0 +1 @@
+[h2]connect_premium[/h2]
diff --git a/sources/doc/hook/connector_settings.bb b/sources/doc/hook/connector_settings.bb
new file mode 100644
index 00000000..9b59c49d
--- /dev/null
+++ b/sources/doc/hook/connector_settings.bb
@@ -0,0 +1 @@
+[h2]connector_settings[/h2]
diff --git a/sources/doc/hook/construct_page.bb b/sources/doc/hook/construct_page.bb
new file mode 100644
index 00000000..700d9256
--- /dev/null
+++ b/sources/doc/hook/construct_page.bb
@@ -0,0 +1 @@
+[h2]construct_page[/h2]
diff --git a/sources/doc/hook/contact_block_end.bb b/sources/doc/hook/contact_block_end.bb
new file mode 100644
index 00000000..30a7d2d7
--- /dev/null
+++ b/sources/doc/hook/contact_block_end.bb
@@ -0,0 +1 @@
+[h2]contact_block_end[/h2]
diff --git a/sources/doc/hook/contact_edit.bb b/sources/doc/hook/contact_edit.bb
new file mode 100644
index 00000000..5fd31fb1
--- /dev/null
+++ b/sources/doc/hook/contact_edit.bb
@@ -0,0 +1 @@
+[h2]contact_edit[/h2]
diff --git a/sources/doc/hook/contact_edit_post.bb b/sources/doc/hook/contact_edit_post.bb
new file mode 100644
index 00000000..bc736f8b
--- /dev/null
+++ b/sources/doc/hook/contact_edit_post.bb
@@ -0,0 +1 @@
+[h2]contact_edit_post[/h2]
diff --git a/sources/doc/hook/contact_select_options.bb b/sources/doc/hook/contact_select_options.bb
new file mode 100644
index 00000000..65f9154f
--- /dev/null
+++ b/sources/doc/hook/contact_select_options.bb
@@ -0,0 +1 @@
+[h2]contact_select_options[/h2]
diff --git a/sources/doc/hook/conversation_start.bb b/sources/doc/hook/conversation_start.bb
new file mode 100644
index 00000000..7208c8d8
--- /dev/null
+++ b/sources/doc/hook/conversation_start.bb
@@ -0,0 +1 @@
+[h2]conversation_start[/h2]
diff --git a/sources/doc/hook/create_identity.bb b/sources/doc/hook/create_identity.bb
new file mode 100644
index 00000000..5c1da2d4
--- /dev/null
+++ b/sources/doc/hook/create_identity.bb
@@ -0,0 +1 @@
+[h2]create_identity[/h2]
diff --git a/sources/doc/hook/cron.bb b/sources/doc/hook/cron.bb
new file mode 100644
index 00000000..55120b6c
--- /dev/null
+++ b/sources/doc/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/sources/doc/hook/cron_daily.bb b/sources/doc/hook/cron_daily.bb
new file mode 100644
index 00000000..802bea5e
--- /dev/null
+++ b/sources/doc/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/sources/doc/hook/cron_weekly.bb b/sources/doc/hook/cron_weekly.bb
new file mode 100644
index 00000000..c01bf961
--- /dev/null
+++ b/sources/doc/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/sources/doc/hook/directory_item.bb b/sources/doc/hook/directory_item.bb
new file mode 100644
index 00000000..cb710e0b
--- /dev/null
+++ b/sources/doc/hook/directory_item.bb
@@ -0,0 +1 @@
+[h2]directory_item[/h2]
diff --git a/sources/doc/hook/discover_by_webbie.bb b/sources/doc/hook/discover_by_webbie.bb
new file mode 100644
index 00000000..f9228932
--- /dev/null
+++ b/sources/doc/hook/discover_by_webbie.bb
@@ -0,0 +1 @@
+[h2]discover_by_webbie[/h2]
diff --git a/sources/doc/hook/display_item.bb b/sources/doc/hook/display_item.bb
new file mode 100644
index 00000000..a6bfd621
--- /dev/null
+++ b/sources/doc/hook/display_item.bb
@@ -0,0 +1 @@
+[h2]display_item[/h2]
diff --git a/sources/doc/hook/display_settings.bb b/sources/doc/hook/display_settings.bb
new file mode 100644
index 00000000..1f1e0b49
--- /dev/null
+++ b/sources/doc/hook/display_settings.bb
@@ -0,0 +1 @@
+[h2]display_settings[/h2]
diff --git a/sources/doc/hook/display_settings_post.bb b/sources/doc/hook/display_settings_post.bb
new file mode 100644
index 00000000..d3bb3935
--- /dev/null
+++ b/sources/doc/hook/display_settings_post.bb
@@ -0,0 +1 @@
+[h2]display_settings_post[/h2]
diff --git a/sources/doc/hook/donate_contributors.bb b/sources/doc/hook/donate_contributors.bb
new file mode 100644
index 00000000..f97c77ef
--- /dev/null
+++ b/sources/doc/hook/donate_contributors.bb
@@ -0,0 +1 @@
+[h2]donate_contributors[/h2]
diff --git a/sources/doc/hook/donate_plugin.bb b/sources/doc/hook/donate_plugin.bb
new file mode 100644
index 00000000..db4a6f11
--- /dev/null
+++ b/sources/doc/hook/donate_plugin.bb
@@ -0,0 +1 @@
+[h2]donate_plugin[/h2]
diff --git a/sources/doc/hook/donate_sponsors.bb b/sources/doc/hook/donate_sponsors.bb
new file mode 100644
index 00000000..3abd46d4
--- /dev/null
+++ b/sources/doc/hook/donate_sponsors.bb
@@ -0,0 +1 @@
+[h2]donate_sponsors[/h2]
diff --git a/sources/doc/hook/dreport_is_storable.bb b/sources/doc/hook/dreport_is_storable.bb
new file mode 100644
index 00000000..9ca99b89
--- /dev/null
+++ b/sources/doc/hook/dreport_is_storable.bb
@@ -0,0 +1 @@
+[h2]dreport_is_storable[/h2]
diff --git a/sources/doc/hook/drop_item.bb b/sources/doc/hook/drop_item.bb
new file mode 100644
index 00000000..35bb80f8
--- /dev/null
+++ b/sources/doc/hook/drop_item.bb
@@ -0,0 +1 @@
+[h2]drop_item[/h2]
diff --git a/sources/doc/hook/enotify.bb b/sources/doc/hook/enotify.bb
new file mode 100644
index 00000000..703a3ffa
--- /dev/null
+++ b/sources/doc/hook/enotify.bb
@@ -0,0 +1 @@
+[h2]enotify[/h2]
diff --git a/sources/doc/hook/enotify_mail.bb b/sources/doc/hook/enotify_mail.bb
new file mode 100644
index 00000000..adeb8bd3
--- /dev/null
+++ b/sources/doc/hook/enotify_mail.bb
@@ -0,0 +1 @@
+[h2]enotify_mail[/h2]
diff --git a/sources/doc/hook/enotify_store.bb b/sources/doc/hook/enotify_store.bb
new file mode 100644
index 00000000..dc44cc32
--- /dev/null
+++ b/sources/doc/hook/enotify_store.bb
@@ -0,0 +1 @@
+[h2]enotify_store[/h2]
diff --git a/sources/doc/hook/event_created.bb b/sources/doc/hook/event_created.bb
new file mode 100644
index 00000000..222602e7
--- /dev/null
+++ b/sources/doc/hook/event_created.bb
@@ -0,0 +1 @@
+[h2]event_created[/h2]
diff --git a/sources/doc/hook/event_updated.bb b/sources/doc/hook/event_updated.bb
new file mode 100644
index 00000000..69e3c72c
--- /dev/null
+++ b/sources/doc/hook/event_updated.bb
@@ -0,0 +1 @@
+[h2]event_updated[/h2]
diff --git a/sources/doc/hook/externals_url_select.bb b/sources/doc/hook/externals_url_select.bb
new file mode 100644
index 00000000..a542dcb2
--- /dev/null
+++ b/sources/doc/hook/externals_url_select.bb
@@ -0,0 +1 @@
+[h2]externals_url_select[/h2]
diff --git a/sources/doc/hook/feature_enabled.bb b/sources/doc/hook/feature_enabled.bb
new file mode 100644
index 00000000..5630cc76
--- /dev/null
+++ b/sources/doc/hook/feature_enabled.bb
@@ -0,0 +1 @@
+[h2]feature_enabled[/h2]
diff --git a/sources/doc/hook/feature_settings.bb b/sources/doc/hook/feature_settings.bb
new file mode 100644
index 00000000..d1691eb3
--- /dev/null
+++ b/sources/doc/hook/feature_settings.bb
@@ -0,0 +1 @@
+[h2]feature_settings[/h2]
diff --git a/sources/doc/hook/feature_settings_post.bb b/sources/doc/hook/feature_settings_post.bb
new file mode 100644
index 00000000..eecf941f
--- /dev/null
+++ b/sources/doc/hook/feature_settings_post.bb
@@ -0,0 +1 @@
+[h2]feature_settings_post[/h2]
diff --git a/sources/doc/hook/follow.bb b/sources/doc/hook/follow.bb
new file mode 100644
index 00000000..a97632b0
--- /dev/null
+++ b/sources/doc/hook/follow.bb
@@ -0,0 +1 @@
+[h2]follow[/h2]
diff --git a/sources/doc/hook/follow_allow.bb b/sources/doc/hook/follow_allow.bb
new file mode 100644
index 00000000..fdab1865
--- /dev/null
+++ b/sources/doc/hook/follow_allow.bb
@@ -0,0 +1 @@
+[h2]follow_allow[/h2]
diff --git a/sources/doc/hook/gender_selector.bb b/sources/doc/hook/gender_selector.bb
new file mode 100644
index 00000000..0b56b5c9
--- /dev/null
+++ b/sources/doc/hook/gender_selector.bb
@@ -0,0 +1 @@
+[h2]gender_selector[/h2]
diff --git a/sources/doc/hook/gender_selector_min.bb b/sources/doc/hook/gender_selector_min.bb
new file mode 100644
index 00000000..9d143855
--- /dev/null
+++ b/sources/doc/hook/gender_selector_min.bb
@@ -0,0 +1 @@
+[h2]gender_selector_min[/h2]
diff --git a/sources/doc/hook/generate_map.bb b/sources/doc/hook/generate_map.bb
new file mode 100644
index 00000000..33672d55
--- /dev/null
+++ b/sources/doc/hook/generate_map.bb
@@ -0,0 +1 @@
+[h2]generate_map[/h2]
diff --git a/sources/doc/hook/generate_named_map.bb b/sources/doc/hook/generate_named_map.bb
new file mode 100644
index 00000000..5bacb846
--- /dev/null
+++ b/sources/doc/hook/generate_named_map.bb
@@ -0,0 +1 @@
+[h2]generate_named_map[/h2]
diff --git a/sources/doc/hook/get_all_api_perms.bb b/sources/doc/hook/get_all_api_perms.bb
new file mode 100644
index 00000000..eb41f8a0
--- /dev/null
+++ b/sources/doc/hook/get_all_api_perms.bb
@@ -0,0 +1 @@
+[h2]get_all_api_perms[/h2]
diff --git a/sources/doc/hook/get_all_perms.bb b/sources/doc/hook/get_all_perms.bb
new file mode 100644
index 00000000..149f8c78
--- /dev/null
+++ b/sources/doc/hook/get_all_perms.bb
@@ -0,0 +1 @@
+[h2]get_all_perms[/h2]
diff --git a/sources/doc/hook/get_features.bb b/sources/doc/hook/get_features.bb
new file mode 100644
index 00000000..66e81f13
--- /dev/null
+++ b/sources/doc/hook/get_features.bb
@@ -0,0 +1 @@
+[h2]get_features[/h2]
diff --git a/sources/doc/hook/get_role_perms.bb b/sources/doc/hook/get_role_perms.bb
new file mode 100644
index 00000000..87830f8e
--- /dev/null
+++ b/sources/doc/hook/get_role_perms.bb
@@ -0,0 +1 @@
+[h2]get_role_perms[/h2]
diff --git a/sources/doc/hook/global_permissions.bb b/sources/doc/hook/global_permissions.bb
new file mode 100644
index 00000000..fe998ee9
--- /dev/null
+++ b/sources/doc/hook/global_permissions.bb
@@ -0,0 +1 @@
+[h2]global_permissions[/h2]
diff --git a/sources/doc/hook/home_content.bb b/sources/doc/hook/home_content.bb
new file mode 100644
index 00000000..7f32b354
--- /dev/null
+++ b/sources/doc/hook/home_content.bb
@@ -0,0 +1 @@
+[h2]home_content[/h2]
diff --git a/sources/doc/hook/home_init.bb b/sources/doc/hook/home_init.bb
new file mode 100644
index 00000000..25dd7279
--- /dev/null
+++ b/sources/doc/hook/home_init.bb
@@ -0,0 +1 @@
+[h2]home_init[/h2]
diff --git a/sources/doc/hook/hostxrd.bb b/sources/doc/hook/hostxrd.bb
new file mode 100644
index 00000000..2b67320c
--- /dev/null
+++ b/sources/doc/hook/hostxrd.bb
@@ -0,0 +1 @@
+[h2]hostxrd[/h2]
diff --git a/sources/doc/hook/html2bbcode.bb b/sources/doc/hook/html2bbcode.bb
new file mode 100644
index 00000000..3061f05f
--- /dev/null
+++ b/sources/doc/hook/html2bbcode.bb
@@ -0,0 +1 @@
+[h2]html2bbcode[/h2]
diff --git a/sources/doc/hook/identity_basic_export.bb b/sources/doc/hook/identity_basic_export.bb
new file mode 100644
index 00000000..3f4e8879
--- /dev/null
+++ b/sources/doc/hook/identity_basic_export.bb
@@ -0,0 +1 @@
+[h2]identity_basic_export[/h2]
diff --git a/sources/doc/hook/import_author_xchan.bb b/sources/doc/hook/import_author_xchan.bb
new file mode 100644
index 00000000..e2340469
--- /dev/null
+++ b/sources/doc/hook/import_author_xchan.bb
@@ -0,0 +1 @@
+[h2]import_author_xchan[/h2]
diff --git a/sources/doc/hook/import_channel.bb b/sources/doc/hook/import_channel.bb
new file mode 100644
index 00000000..b220b741
--- /dev/null
+++ b/sources/doc/hook/import_channel.bb
@@ -0,0 +1 @@
+[h2]import_channel[/h2]
diff --git a/sources/doc/hook/import_directory_profile.bb b/sources/doc/hook/import_directory_profile.bb
new file mode 100644
index 00000000..e2fac59b
--- /dev/null
+++ b/sources/doc/hook/import_directory_profile.bb
@@ -0,0 +1 @@
+[h2]import_directory_profile[/h2]
diff --git a/sources/doc/hook/import_xchan.bb b/sources/doc/hook/import_xchan.bb
new file mode 100644
index 00000000..40e0783c
--- /dev/null
+++ b/sources/doc/hook/import_xchan.bb
@@ -0,0 +1 @@
+[h2]import_xchan[/h2]
diff --git a/sources/doc/hook/item_photo_menu.bb b/sources/doc/hook/item_photo_menu.bb
new file mode 100644
index 00000000..8f9860a9
--- /dev/null
+++ b/sources/doc/hook/item_photo_menu.bb
@@ -0,0 +1 @@
+[h2]item_photo_menu[/h2]
diff --git a/sources/doc/hook/item_store.bb b/sources/doc/hook/item_store.bb
new file mode 100644
index 00000000..5d49b725
--- /dev/null
+++ b/sources/doc/hook/item_store.bb
@@ -0,0 +1 @@
+[h2]item_store[/h2]
diff --git a/sources/doc/hook/item_store_update.bb b/sources/doc/hook/item_store_update.bb
new file mode 100644
index 00000000..a7c58939
--- /dev/null
+++ b/sources/doc/hook/item_store_update.bb
@@ -0,0 +1 @@
+[h2]item_store_update[/h2]
diff --git a/sources/doc/hook/item_translate.bb b/sources/doc/hook/item_translate.bb
new file mode 100644
index 00000000..695494b9
--- /dev/null
+++ b/sources/doc/hook/item_translate.bb
@@ -0,0 +1 @@
+[h2]item_translate[/h2]
diff --git a/sources/doc/hook/jot_networks.bb b/sources/doc/hook/jot_networks.bb
new file mode 100644
index 00000000..4c1629ba
--- /dev/null
+++ b/sources/doc/hook/jot_networks.bb
@@ -0,0 +1 @@
+[h2]jot_networks[/h2]
diff --git a/sources/doc/hook/jot_tool.bb b/sources/doc/hook/jot_tool.bb
new file mode 100644
index 00000000..22ba9701
--- /dev/null
+++ b/sources/doc/hook/jot_tool.bb
@@ -0,0 +1 @@
+[h2]jot_tool[/h2]
diff --git a/sources/doc/hook/load_pdl.bb b/sources/doc/hook/load_pdl.bb
new file mode 100644
index 00000000..149a3e76
--- /dev/null
+++ b/sources/doc/hook/load_pdl.bb
@@ -0,0 +1 @@
+[h2]load_pdl[/h2]
diff --git a/sources/doc/hook/local_dir_update.bb b/sources/doc/hook/local_dir_update.bb
new file mode 100644
index 00000000..d0b0f8ac
--- /dev/null
+++ b/sources/doc/hook/local_dir_update.bb
@@ -0,0 +1 @@
+[h2]local_dir_update[/h2]
diff --git a/sources/doc/hook/logged_in.bb b/sources/doc/hook/logged_in.bb
new file mode 100644
index 00000000..b0104157
--- /dev/null
+++ b/sources/doc/hook/logged_in.bb
@@ -0,0 +1 @@
+[h2]logged_in[/h2]
diff --git a/sources/doc/hook/logging_out.bb b/sources/doc/hook/logging_out.bb
new file mode 100644
index 00000000..d47b9f1d
--- /dev/null
+++ b/sources/doc/hook/logging_out.bb
@@ -0,0 +1 @@
+[h2]logging_out[/h2]
diff --git a/sources/doc/hook/login_hook.bb b/sources/doc/hook/login_hook.bb
new file mode 100644
index 00000000..156a0afc
--- /dev/null
+++ b/sources/doc/hook/login_hook.bb
@@ -0,0 +1 @@
+[h2]login_hook[/h2]
diff --git a/sources/doc/hook/magic_auth.bb b/sources/doc/hook/magic_auth.bb
new file mode 100644
index 00000000..80d6edb2
--- /dev/null
+++ b/sources/doc/hook/magic_auth.bb
@@ -0,0 +1 @@
+[h2]magic_auth[/h2]
diff --git a/sources/doc/hook/magic_auth_openid_success.bb b/sources/doc/hook/magic_auth_openid_success.bb
new file mode 100644
index 00000000..810f2e06
--- /dev/null
+++ b/sources/doc/hook/magic_auth_openid_success.bb
@@ -0,0 +1 @@
+[h2]magic_auth_openid_success[/h2]
diff --git a/sources/doc/hook/magic_auth_success.bb b/sources/doc/hook/magic_auth_success.bb
new file mode 100644
index 00000000..d795e43e
--- /dev/null
+++ b/sources/doc/hook/magic_auth_success.bb
@@ -0,0 +1 @@
+[h2]magic_auth_success[/h2]
diff --git a/sources/doc/hook/main_slider.bb b/sources/doc/hook/main_slider.bb
new file mode 100644
index 00000000..a63c2170
--- /dev/null
+++ b/sources/doc/hook/main_slider.bb
@@ -0,0 +1 @@
+[h2]main_slider[/h2]
diff --git a/sources/doc/hook/marital_selector.bb b/sources/doc/hook/marital_selector.bb
new file mode 100644
index 00000000..0f76c3f5
--- /dev/null
+++ b/sources/doc/hook/marital_selector.bb
@@ -0,0 +1 @@
+[h2]marital_selector[/h2]
diff --git a/sources/doc/hook/marital_selector_min.bb b/sources/doc/hook/marital_selector_min.bb
new file mode 100644
index 00000000..f02d21f2
--- /dev/null
+++ b/sources/doc/hook/marital_selector_min.bb
@@ -0,0 +1 @@
+[h2]marital_selector_min[/h2]
diff --git a/sources/doc/hook/module_loaded.bb b/sources/doc/hook/module_loaded.bb
new file mode 100644
index 00000000..cb0d2302
--- /dev/null
+++ b/sources/doc/hook/module_loaded.bb
@@ -0,0 +1 @@
+[h2]module_loaded[/h2]
diff --git a/sources/doc/hook/module_mod_aftercontent.bb b/sources/doc/hook/module_mod_aftercontent.bb
new file mode 100644
index 00000000..5d48435b
--- /dev/null
+++ b/sources/doc/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 $a->module
+
diff --git a/sources/doc/hook/module_mod_content.bb b/sources/doc/hook/module_mod_content.bb
new file mode 100644
index 00000000..39f5743b
--- /dev/null
+++ b/sources/doc/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 $a->module
+
diff --git a/sources/doc/hook/module_mod_init.bb b/sources/doc/hook/module_mod_init.bb
new file mode 100644
index 00000000..52fe5a61
--- /dev/null
+++ b/sources/doc/hook/module_mod_init.bb
@@ -0,0 +1 @@
+[h2]module_mod_init[/h2]
diff --git a/sources/doc/hook/module_mod_post.bb b/sources/doc/hook/module_mod_post.bb
new file mode 100644
index 00000000..3adb0e73
--- /dev/null
+++ b/sources/doc/hook/module_mod_post.bb
@@ -0,0 +1 @@
+[h2]module_mod_post[/h2]
diff --git a/sources/doc/hook/mood_verbs.bb b/sources/doc/hook/mood_verbs.bb
new file mode 100644
index 00000000..67fb719d
--- /dev/null
+++ b/sources/doc/hook/mood_verbs.bb
@@ -0,0 +1 @@
+[h2]mood_verbs[/h2]
diff --git a/sources/doc/hook/nav.bb b/sources/doc/hook/nav.bb
new file mode 100644
index 00000000..84757362
--- /dev/null
+++ b/sources/doc/hook/nav.bb
@@ -0,0 +1 @@
+[h2]nav[/h2]
diff --git a/sources/doc/hook/network_content_init.bb b/sources/doc/hook/network_content_init.bb
new file mode 100644
index 00000000..224da393
--- /dev/null
+++ b/sources/doc/hook/network_content_init.bb
@@ -0,0 +1 @@
+[h2]network_content_init[/h2]
diff --git a/sources/doc/hook/network_ping.bb b/sources/doc/hook/network_ping.bb
new file mode 100644
index 00000000..78deefe7
--- /dev/null
+++ b/sources/doc/hook/network_ping.bb
@@ -0,0 +1 @@
+[h2]network_ping[/h2]
diff --git a/sources/doc/hook/network_tabs.bb b/sources/doc/hook/network_tabs.bb
new file mode 100644
index 00000000..677d7f2b
--- /dev/null
+++ b/sources/doc/hook/network_tabs.bb
@@ -0,0 +1 @@
+[h2]network_tabs[/h2]
diff --git a/sources/doc/hook/network_to_name.bb b/sources/doc/hook/network_to_name.bb
new file mode 100644
index 00000000..eea4a184
--- /dev/null
+++ b/sources/doc/hook/network_to_name.bb
@@ -0,0 +1 @@
+[h2]network_to_name[/h2]
diff --git a/sources/doc/hook/notifier_end.bb b/sources/doc/hook/notifier_end.bb
new file mode 100644
index 00000000..df9d852b
--- /dev/null
+++ b/sources/doc/hook/notifier_end.bb
@@ -0,0 +1 @@
+[h2]notifier_end[/h2]
diff --git a/sources/doc/hook/notifier_hub.bb b/sources/doc/hook/notifier_hub.bb
new file mode 100644
index 00000000..4255ce44
--- /dev/null
+++ b/sources/doc/hook/notifier_hub.bb
@@ -0,0 +1 @@
+[h2]notifier_hub[/h2]
diff --git a/sources/doc/hook/notifier_normal.bb b/sources/doc/hook/notifier_normal.bb
new file mode 100644
index 00000000..0059baa4
--- /dev/null
+++ b/sources/doc/hook/notifier_normal.bb
@@ -0,0 +1 @@
+[h2]notifier_normal[/h2]
diff --git a/sources/doc/hook/obj_verbs.bb b/sources/doc/hook/obj_verbs.bb
new file mode 100644
index 00000000..ca98229a
--- /dev/null
+++ b/sources/doc/hook/obj_verbs.bb
@@ -0,0 +1 @@
+[h2]obj_verbs[/h2]
diff --git a/sources/doc/hook/oembed_probe.bb b/sources/doc/hook/oembed_probe.bb
new file mode 100644
index 00000000..4f32ac26
--- /dev/null
+++ b/sources/doc/hook/oembed_probe.bb
@@ -0,0 +1 @@
+[h2]oembed_probe[/h2]
diff --git a/sources/doc/hook/page_content_top.bb b/sources/doc/hook/page_content_top.bb
new file mode 100644
index 00000000..137e3abf
--- /dev/null
+++ b/sources/doc/hook/page_content_top.bb
@@ -0,0 +1 @@
+[h2]page_content_top[/h2]
diff --git a/sources/doc/hook/page_end.bb b/sources/doc/hook/page_end.bb
new file mode 100644
index 00000000..09293cf5
--- /dev/null
+++ b/sources/doc/hook/page_end.bb
@@ -0,0 +1 @@
+[h2]page_end[/h2]
diff --git a/sources/doc/hook/page_header.bb b/sources/doc/hook/page_header.bb
new file mode 100644
index 00000000..ffaa791c
--- /dev/null
+++ b/sources/doc/hook/page_header.bb
@@ -0,0 +1 @@
+[h2]page_header[/h2]
diff --git a/sources/doc/hook/parse_atom.bb b/sources/doc/hook/parse_atom.bb
new file mode 100644
index 00000000..c8037317
--- /dev/null
+++ b/sources/doc/hook/parse_atom.bb
@@ -0,0 +1 @@
+[h2]parse_atom[/h2]
diff --git a/sources/doc/hook/parse_link.bb b/sources/doc/hook/parse_link.bb
new file mode 100644
index 00000000..1c328059
--- /dev/null
+++ b/sources/doc/hook/parse_link.bb
@@ -0,0 +1 @@
+[h2]parse_link[/h2]
diff --git a/sources/doc/hook/pdl_selector.bb b/sources/doc/hook/pdl_selector.bb
new file mode 100644
index 00000000..bee01c84
--- /dev/null
+++ b/sources/doc/hook/pdl_selector.bb
@@ -0,0 +1 @@
+[h2]pdl_selector[/h2]
diff --git a/sources/doc/hook/perm_is_allowed.bb b/sources/doc/hook/perm_is_allowed.bb
new file mode 100644
index 00000000..aac64760
--- /dev/null
+++ b/sources/doc/hook/perm_is_allowed.bb
@@ -0,0 +1 @@
+[h2]perm_is_allowed[/h2]
diff --git a/sources/doc/hook/permissions_create.bb b/sources/doc/hook/permissions_create.bb
new file mode 100644
index 00000000..22f80a80
--- /dev/null
+++ b/sources/doc/hook/permissions_create.bb
@@ -0,0 +1 @@
+[h2]permissions_create[/h2]
diff --git a/sources/doc/hook/permissions_update.bb b/sources/doc/hook/permissions_update.bb
new file mode 100644
index 00000000..40366b33
--- /dev/null
+++ b/sources/doc/hook/permissions_update.bb
@@ -0,0 +1 @@
+[h2]permissions_update[/h2]
diff --git a/sources/doc/hook/personal_xrd.bb b/sources/doc/hook/personal_xrd.bb
new file mode 100644
index 00000000..71d4bd8d
--- /dev/null
+++ b/sources/doc/hook/personal_xrd.bb
@@ -0,0 +1 @@
+[h2]personal_xrd[/h2]
diff --git a/sources/doc/hook/photo_post_end.bb b/sources/doc/hook/photo_post_end.bb
new file mode 100644
index 00000000..8a329176
--- /dev/null
+++ b/sources/doc/hook/photo_post_end.bb
@@ -0,0 +1 @@
+[h2]photo_post_end[/h2]
diff --git a/sources/doc/hook/photo_upload_begin.bb b/sources/doc/hook/photo_upload_begin.bb
new file mode 100644
index 00000000..5e441a12
--- /dev/null
+++ b/sources/doc/hook/photo_upload_begin.bb
@@ -0,0 +1 @@
+[h2]photo_upload_begin[/h2]
diff --git a/sources/doc/hook/photo_upload_end.bb b/sources/doc/hook/photo_upload_end.bb
new file mode 100644
index 00000000..956175f1
--- /dev/null
+++ b/sources/doc/hook/photo_upload_end.bb
@@ -0,0 +1 @@
+[h2]photo_upload_end[/h2]
diff --git a/sources/doc/hook/photo_upload_file.bb b/sources/doc/hook/photo_upload_file.bb
new file mode 100644
index 00000000..726622ac
--- /dev/null
+++ b/sources/doc/hook/photo_upload_file.bb
@@ -0,0 +1 @@
+[h2]photo_upload_file[/h2]
diff --git a/sources/doc/hook/photo_upload_form.bb b/sources/doc/hook/photo_upload_form.bb
new file mode 100644
index 00000000..70b8318b
--- /dev/null
+++ b/sources/doc/hook/photo_upload_form.bb
@@ -0,0 +1 @@
+[h2]photo_upload_form[/h2]
diff --git a/sources/doc/hook/poke_verbs.bb b/sources/doc/hook/poke_verbs.bb
new file mode 100644
index 00000000..54d68c3a
--- /dev/null
+++ b/sources/doc/hook/poke_verbs.bb
@@ -0,0 +1 @@
+[h2]poke_verbs[/h2]
diff --git a/sources/doc/hook/post_local.bb b/sources/doc/hook/post_local.bb
new file mode 100644
index 00000000..5aa723cb
--- /dev/null
+++ b/sources/doc/hook/post_local.bb
@@ -0,0 +1 @@
+[h2]post_local[/h2]
diff --git a/sources/doc/hook/post_local_end.bb b/sources/doc/hook/post_local_end.bb
new file mode 100644
index 00000000..380166fd
--- /dev/null
+++ b/sources/doc/hook/post_local_end.bb
@@ -0,0 +1 @@
+[h2]post_local_end[/h2]
diff --git a/sources/doc/hook/post_local_start.bb b/sources/doc/hook/post_local_start.bb
new file mode 100644
index 00000000..2f684f67
--- /dev/null
+++ b/sources/doc/hook/post_local_start.bb
@@ -0,0 +1 @@
+[h2]post_local_start[/h2]
diff --git a/sources/doc/hook/post_mail.bb b/sources/doc/hook/post_mail.bb
new file mode 100644
index 00000000..8f67ad4f
--- /dev/null
+++ b/sources/doc/hook/post_mail.bb
@@ -0,0 +1 @@
+[h2]post_mail[/h2]
diff --git a/sources/doc/hook/post_mail_end.bb b/sources/doc/hook/post_mail_end.bb
new file mode 100644
index 00000000..7f008577
--- /dev/null
+++ b/sources/doc/hook/post_mail_end.bb
@@ -0,0 +1 @@
+[h2]post_mail_end[/h2]
diff --git a/sources/doc/hook/post_remote.bb b/sources/doc/hook/post_remote.bb
new file mode 100644
index 00000000..f8e087ee
--- /dev/null
+++ b/sources/doc/hook/post_remote.bb
@@ -0,0 +1 @@
+[h2]post_remote[/h2]
diff --git a/sources/doc/hook/post_remote_end.bb b/sources/doc/hook/post_remote_end.bb
new file mode 100644
index 00000000..0fef20cb
--- /dev/null
+++ b/sources/doc/hook/post_remote_end.bb
@@ -0,0 +1 @@
+[h2]post_remote_end[/h2]
diff --git a/sources/doc/hook/post_remote_update.bb b/sources/doc/hook/post_remote_update.bb
new file mode 100644
index 00000000..fd358db2
--- /dev/null
+++ b/sources/doc/hook/post_remote_update.bb
@@ -0,0 +1 @@
+[h2]post_remote_update[/h2]
diff --git a/sources/doc/hook/post_remote_update_end.bb b/sources/doc/hook/post_remote_update_end.bb
new file mode 100644
index 00000000..95f1e6f7
--- /dev/null
+++ b/sources/doc/hook/post_remote_update_end.bb
@@ -0,0 +1 @@
+[h2]post_remote_update_end[/h2]
diff --git a/sources/doc/hook/prepare_body.bb b/sources/doc/hook/prepare_body.bb
new file mode 100644
index 00000000..3f1eaef8
--- /dev/null
+++ b/sources/doc/hook/prepare_body.bb
@@ -0,0 +1 @@
+[h2]prepare_body[/h2]
diff --git a/sources/doc/hook/prepare_body_final.bb b/sources/doc/hook/prepare_body_final.bb
new file mode 100644
index 00000000..96d1ae38
--- /dev/null
+++ b/sources/doc/hook/prepare_body_final.bb
@@ -0,0 +1 @@
+[h2]prepare_body_final[/h2]
diff --git a/sources/doc/hook/prepare_body_init.bb b/sources/doc/hook/prepare_body_init.bb
new file mode 100644
index 00000000..f3de7997
--- /dev/null
+++ b/sources/doc/hook/prepare_body_init.bb
@@ -0,0 +1 @@
+[h2]prepare_body_init[/h2]
diff --git a/sources/doc/hook/probe_well_known.bb b/sources/doc/hook/probe_well_known.bb
new file mode 100644
index 00000000..62898c53
--- /dev/null
+++ b/sources/doc/hook/probe_well_known.bb
@@ -0,0 +1,3 @@
+[h2]probe_well_known[/h2]
+
+This hook is under construction and not currently used - see include/probe.php
\ No newline at end of file
diff --git a/sources/doc/hook/proc_run.bb b/sources/doc/hook/proc_run.bb
new file mode 100644
index 00000000..a3759794
--- /dev/null
+++ b/sources/doc/hook/proc_run.bb
@@ -0,0 +1 @@
+[h2]proc_run[/h2]
diff --git a/sources/doc/hook/process_channel_sync_delivery.bb b/sources/doc/hook/process_channel_sync_delivery.bb
new file mode 100644
index 00000000..c0416c8c
--- /dev/null
+++ b/sources/doc/hook/process_channel_sync_delivery.bb
@@ -0,0 +1 @@
+[h2]process_channel_sync_delivery[/h2]
diff --git a/sources/doc/hook/profile_advanced.bb b/sources/doc/hook/profile_advanced.bb
new file mode 100644
index 00000000..65e56afd
--- /dev/null
+++ b/sources/doc/hook/profile_advanced.bb
@@ -0,0 +1 @@
+[h2]profile_advanced[/h2]
diff --git a/sources/doc/hook/profile_edit.bb b/sources/doc/hook/profile_edit.bb
new file mode 100644
index 00000000..e60663d4
--- /dev/null
+++ b/sources/doc/hook/profile_edit.bb
@@ -0,0 +1 @@
+[h2]profile_edit[/h2]
diff --git a/sources/doc/hook/profile_photo_content_end.bb b/sources/doc/hook/profile_photo_content_end.bb
new file mode 100644
index 00000000..518415c4
--- /dev/null
+++ b/sources/doc/hook/profile_photo_content_end.bb
@@ -0,0 +1 @@
+[h2]profile_photo_content_end[/h2]
diff --git a/sources/doc/hook/profile_post.bb b/sources/doc/hook/profile_post.bb
new file mode 100644
index 00000000..d22d8fbc
--- /dev/null
+++ b/sources/doc/hook/profile_post.bb
@@ -0,0 +1 @@
+[h2]profile_post[/h2]
diff --git a/sources/doc/hook/profile_sidebar.bb b/sources/doc/hook/profile_sidebar.bb
new file mode 100644
index 00000000..bfd059e4
--- /dev/null
+++ b/sources/doc/hook/profile_sidebar.bb
@@ -0,0 +1 @@
+[h2]profile_sidebar[/h2]
diff --git a/sources/doc/hook/profile_sidebar_enter.bb b/sources/doc/hook/profile_sidebar_enter.bb
new file mode 100644
index 00000000..9d6726a3
--- /dev/null
+++ b/sources/doc/hook/profile_sidebar_enter.bb
@@ -0,0 +1 @@
+[h2]profile_sidebar_enter[/h2]
diff --git a/sources/doc/hook/profile_tabs.bb b/sources/doc/hook/profile_tabs.bb
new file mode 100644
index 00000000..5b3e9e70
--- /dev/null
+++ b/sources/doc/hook/profile_tabs.bb
@@ -0,0 +1 @@
+[h2]profile_tabs[/h2]
diff --git a/sources/doc/hook/register_account.bb b/sources/doc/hook/register_account.bb
new file mode 100644
index 00000000..df4de2b3
--- /dev/null
+++ b/sources/doc/hook/register_account.bb
@@ -0,0 +1 @@
+[h2]register_account[/h2]
diff --git a/sources/doc/hook/render_location.bb b/sources/doc/hook/render_location.bb
new file mode 100644
index 00000000..41501c08
--- /dev/null
+++ b/sources/doc/hook/render_location.bb
@@ -0,0 +1 @@
+[h2]render_location[/h2]
diff --git a/sources/doc/hook/replace_macros.bb b/sources/doc/hook/replace_macros.bb
new file mode 100644
index 00000000..fac39dd7
--- /dev/null
+++ b/sources/doc/hook/replace_macros.bb
@@ -0,0 +1 @@
+[h2]replace_macros[/h2]
diff --git a/sources/doc/hook/reverse_magic_auth.bb b/sources/doc/hook/reverse_magic_auth.bb
new file mode 100644
index 00000000..4cbd84b9
--- /dev/null
+++ b/sources/doc/hook/reverse_magic_auth.bb
@@ -0,0 +1 @@
+[h2]reverse_magic_auth[/h2]
diff --git a/sources/doc/hook/settings_form.bb b/sources/doc/hook/settings_form.bb
new file mode 100644
index 00000000..d6534118
--- /dev/null
+++ b/sources/doc/hook/settings_form.bb
@@ -0,0 +1 @@
+[h2]settings_form[/h2]
diff --git a/sources/doc/hook/settings_post.bb b/sources/doc/hook/settings_post.bb
new file mode 100644
index 00000000..f72546c1
--- /dev/null
+++ b/sources/doc/hook/settings_post.bb
@@ -0,0 +1 @@
+[h2]settings_post[/h2]
diff --git a/sources/doc/hook/sexpref_selector.bb b/sources/doc/hook/sexpref_selector.bb
new file mode 100644
index 00000000..b4dad6b3
--- /dev/null
+++ b/sources/doc/hook/sexpref_selector.bb
@@ -0,0 +1 @@
+[h2]sexpref_selector[/h2]
diff --git a/sources/doc/hook/sexpref_selector_min.bb b/sources/doc/hook/sexpref_selector_min.bb
new file mode 100644
index 00000000..6f49946a
--- /dev/null
+++ b/sources/doc/hook/sexpref_selector_min.bb
@@ -0,0 +1 @@
+[h2]sexpref_selector_min[/h2]
diff --git a/sources/doc/hook/smilie.bb b/sources/doc/hook/smilie.bb
new file mode 100644
index 00000000..575acc17
--- /dev/null
+++ b/sources/doc/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/sources/doc/hook/tagged.bb b/sources/doc/hook/tagged.bb
new file mode 100644
index 00000000..05d081d0
--- /dev/null
+++ b/sources/doc/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/sources/doc/hook/validate_channelname.bb b/sources/doc/hook/validate_channelname.bb
new file mode 100644
index 00000000..2ab12bbe
--- /dev/null
+++ b/sources/doc/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/sources/doc/hook/webfinger.bb b/sources/doc/hook/webfinger.bb
new file mode 100644
index 00000000..7cc24322
--- /dev/null
+++ b/sources/doc/hook/webfinger.bb
@@ -0,0 +1 @@
+[h2]webfinger[/h2]
diff --git a/sources/doc/hook/well_known.bb b/sources/doc/hook/well_known.bb
new file mode 100644
index 00000000..778b27a0
--- /dev/null
+++ b/sources/doc/hook/well_known.bb
@@ -0,0 +1 @@
+[h2]well_known[/h2]
diff --git a/sources/doc/hook/zid.bb b/sources/doc/hook/zid.bb
new file mode 100644
index 00000000..2210c134
--- /dev/null
+++ b/sources/doc/hook/zid.bb
@@ -0,0 +1 @@
+[h2]zid[/h2]
diff --git a/sources/doc/hook/zid_init.bb b/sources/doc/hook/zid_init.bb
new file mode 100644
index 00000000..131dd8f7
--- /dev/null
+++ b/sources/doc/hook/zid_init.bb
@@ -0,0 +1 @@
+[h2]zid_init[/h2]
diff --git a/sources/doc/hook/zot_finger.bb b/sources/doc/hook/zot_finger.bb
new file mode 100644
index 00000000..9383b4c3
--- /dev/null
+++ b/sources/doc/hook/zot_finger.bb
@@ -0,0 +1 @@
+[h2]zot_finger[/h2]
diff --git a/sources/doc/hooklist.bb b/sources/doc/hooklist.bb
new file mode 100644
index 00000000..2285ef1c
--- /dev/null
+++ b/sources/doc/hooklist.bb
@@ -0,0 +1,486 @@
+[h2]Hooks[/h2]
+
+Hooks allow plugins/addons to "hook into" the code at many points and alter the behaviour or otherwise perform independent actions when an activity takes place or when certain data structures are accessed. There are many hooks which allow you to tie into the software at most any point and do something slightly different than the default thing. These hooks are passed two variables. The first is the App structure which contains details about the entire state of the page request as we build the resulting page. The second is unique to the specific hook that is called and provides specific detail about what is happening in the software at the time the hook is invoked.
+
+[zrl=[baseurl]/help/hooks]Generated index of all hooks and the files which call them[/zrl]
+
+[zrl=[baseurl]/help/hook/module_mod_aftercontent]module_mod_aftercontent[/zrl]
+ General purpose hook for any module, executed after mod_content(). Replace 'module' with module name, e.g. 'photos_mod_aftercontent'.
+
+[zrl=[baseurl]/help/hook/module_mod_content]module_mod_content[/zrl]
+ General purpose hook for any module, executed before mod_content(). Replace 'module' with module name, e.g. 'photos_mod_content'.
+
+[zrl=[baseurl]/help/hook/module_mod_init]module_mod_init[/zrl]
+ General purpose hook for any module, executed before mod_init(). Replace 'module' with module name, e.g. 'photos_mod_init'.
+
+[zrl=[baseurl]/help/hook/module_mod_post]module_mod_post[/zrl]
+ General purpose hook for any module, executed before mod_post(). Replace 'module' with module name, e.g. 'photos_mod_post'.
+
+[zrl=[baseurl]/help/hook/about_hook]about_hook[/zrl]
+ Called from the siteinfo page
+
+[zrl=[baseurl]/help/hook/accept_follow]accept_follow[/zrl]
+ Called when accepting a connection (friend request)
+
+[zrl=[baseurl]/help/hook/account_downgrade]account_downgrade[/zrl]
+ Called when an account has expired, indicating a potential downgrade to "basic" service class
+
+[zrl=[baseurl]/help/hook/account_settings]account_settings[/zrl]
+ Called when generating the account settings form
+
+[zrl=[baseurl]/help/hook/settings_account]account_settings_post[/zrl]
+ Called when posting from the account settings form
+
+[zrl=[baseurl]/help/hook/activity_received]activity_received[/zrl]
+ Called when an activity (post, comment, like, etc.) has been received from a zot source
+
+[zrl=[baseurl]/help/hook/affinity_labels]affinity_labels[/zrl]
+ Used to generate alternate labels for the affinity slider.
+
+[zrl=[baseurl]/help/hook/api_perm_is_allowed]api_perm_is_allowed[/zrl]
+ Called when perm_is_allowed() is executed from an API call.
+
+[zrl=[baseurl]/help/hook/atom_author]atom_author[/zrl]
+ Called when generating an author or owner element for an Atom ActivityStream feed
+
+[zrl=[baseurl]/help/hook/atom_entry]atom_entry[/zrl]
+ Called when generating each item entry of an Atom ActivityStreams feed
+
+[zrl=[baseurl]/help/hook/atom_feed]atom_feed[/zrl]
+ Called when generating an Atom ActivityStreams feed
+
+[zrl=[baseurl]/help/hook/atom_feed_end]atom_feed_end[/zrl]
+ Called when generation of an Atom ActivityStreams feed is completed
+
+[zrl=[baseurl]/help/hook/attach_upload_file]attach_upload_file[/zrl]
+ Called when uploading a file
+
+[zrl=[baseurl]/help/hook/authenticate]authenticate[/zrl]
+ Can provide alternate authentication mechanisms
+
+[zrl=[baseurl]/help/hook/bb2diaspora]bb2diaspora[/zrl]
+ called when converting bbcode to markdown
+
+[zrl=[baseurl]/help/hook/bbcode]bbcode[/zrl]
+ Called when converting bbcode to HTML
+
+[zrl=[baseurl]/help/hook/channel_remove]channel_remove[/zrl]
+ Called when removing a channel
+
+[zrl=[baseurl]/help/hook/chat_message]chat_message[/zrl]
+ Called to create a chat message.
+
+[zrl=[baseurl]/help/hook/chat_post]chat_post[/zrl]
+ Called when a chat message has been posted
+
+[zrl=[baseurl]/help/hook/check_account_email]check_account_email[/zrl]
+ Validate the email provided in an account registration
+
+[zrl=[baseurl]/help/hook/check_account_invite]check_account_invite[/zrl]
+ Validate an invitation code when using site invitations
+
+[zrl=[baseurl]/help/hook/check_account_password]check_account_password[/zrl]
+ Used to provide policy control over account passwords (minimum length, character set inclusion, etc.)
+
+[zrl=[baseurl]/help/hook/connect_premium]connect_premium[/zrl]
+ Called when connecting to a premium channel
+
+[zrl=[baseurl]/help/hook/connector_settings]connector_settings[/zrl]
+ Called when posting to the features/addon settings page
+
+[zrl=[baseurl]/help/hook/construct_page]construct_page[/zrl]
+ General purpose hook to provide content to certain page regions. Called when constructing the Comanche page.
+
+[zrl=[baseurl]/help/hook/contact_block_end]contact_block_end[/zrl]
+ Called when generating the sidebar "Connections" widget
+
+[zrl=[baseurl]/help/hook/contact_edit]contact_edit[/zrl]
+ Called when editing a connection via connedit
+
+[zrl=[baseurl]/help/hook/contact_edit_post]contact_edit_post[/zrl]
+ Called when posting to connedit
+
+[zrl=[baseurl]/help/hook/contact_select_options]contact_select_options[/zrl]
+ Deprecated/unused
+
+[zrl=[baseurl]/help/hook/conversation_start]conversation_start[/zrl]
+ Called in the beginning of rendering a conversation (message or message collection or stream)
+
+[zrl=[baseurl]/help/hook/create_identity]create_identity[/zrl]
+ Called when creating a channel
+
+[zrl=[baseurl]/help/hook/cron]cron[/zrl]
+ Called when scheduled tasks (poller) is executed
+
+[zrl=[baseurl]/help/hook/cron_daily]cron_daily[/zrl]
+ Called when daily scheduled tasks are executed
+
+[zrl=[baseurl]/help/hook/cron_weekly]cron_weekly[/zrl]
+ Called when weekly scheduled tasks are executed
+
+[zrl=[baseurl]/help/hook/directory_item]directory_item[/zrl]
+ Called when generating a directory listing for display
+
+[zrl=[baseurl]/help/hook/discover_by_webbie]discover_by_webbie[/zrl]
+ Called when performing a webfinger lookup
+
+[zrl=[baseurl]/help/hook/display_item]display_item[/zrl]
+ Called for each item being displayed in a conversation thread
+
+[zrl=[baseurl]/help/hook/display_settings]display_settings[/zrl]
+ Called from settings module when displaying the 'display settings' section
+
+[zrl=[baseurl]/help/hook/display_settings_post]display_settings_post[/zrl]
+ Called when posting from the settings module 'display settings' form
+
+[zrl=[baseurl]/help/hook/donate_contributors]donate_contributors[/zrl]
+ called by the 'donate' addon when generating a list of donation recipients
+
+[zrl=[baseurl]/help/hook/donate_plugin]donate_plugin[/zrl]
+ called by the 'donate' addon
+
+[zrl=[baseurl]/help/hook/donate_sponsors]donate_sponsors[/zrl]
+ called by the 'donate' addon
+
+[zrl=[baseurl]/help/hook/dreport_is_storable]dreport_is_storable[/zrl]
+ called before storing a dreport record to determine whether to store it
+
+[zrl=[baseurl]/help/hook/drop_item]drop_item[/zrl]
+ called when an 'item' is removed
+
+[zrl=[baseurl]/help/hook/enotify]enotify[/zrl]
+ called before any notification
+
+[zrl=[baseurl]/help/hook/enotify_mail]enotify_mail[/zrl]
+ called when sending a notification email
+
+[zrl=[baseurl]/help/hook/enotify_store]enotify_store[/zrl]
+ called when storing a notification record
+
+[zrl=[baseurl]/help/hook/event_created]event_created[/zrl]
+ called when an event record is created
+
+[zrl=[baseurl]/help/hook/event_updated]event_updated[/zrl]
+ called when an event record is modified
+
+[zrl=[baseurl]/help/hook/externals_url_select]externals_url_select[/zrl]
+ called when generating a list of random sites to pull public posts from
+
+[zrl=[baseurl]/help/hook/feature_enabled]feature_enabled[/zrl]
+ called when 'feature_enabled()' is used
+
+[zrl=[baseurl]/help/hook/feature_settings]feature_settings[/zrl]
+ called from settings page when visiting 'addon/feature settings'
+
+[zrl=[baseurl]/help/hook/feature_settings_post]feature_settings_post[/zrl]
+ called from settings page when posting from 'addon/feature settings'
+
+[zrl=[baseurl]/help/hook/follow]follow[/zrl]
+ called when a follow operation takes place
+
+[zrl=[baseurl]/help/hook/follow_allow]follow_allow[/zrl]
+ called before storing the results of a follow operation
+
+[zrl=[baseurl]/help/hook/gender_selector]gender_selector[/zrl]
+ called when creating the 'gender' drop down list (advanced profile)
+
+[zrl=[baseurl]/help/hook/gender_selector_min]gender_selector_min[/zrl]
+ called when creating the 'gender' drop down list (normal profile)
+
+
+[zrl=[baseurl]/help/hook/generate_map]generate_map[/zrl]
+ called to generate the HTML for displaying a map location by coordinates
+
+[zrl=[baseurl]/help/hook/generate_named_map]generate_named_map[/zrl]
+ called to generate the HTML for displaying a map location by text location
+
+[zrl=[baseurl]/help/hook/get_all_api_perms]get_all_api_perms[/zrl]
+ Called when retrieving the permissions for API uses
+
+[zrl=[baseurl]/help/hook/get_all_perms]get_all_perms[/zrl]
+ called when get_all_perms() is used
+
+[zrl=[baseurl]/help/hook/get_features]get_features[/zrl]
+ Called when get_features() is called
+
+[zrl=[baseurl]/help/hook/get_role_perms]get_role_perms[/zrl]
+ Called when get_role_perms() is called to obtain permissions for named permission roles
+
+[zrl=[baseurl]/help/hook/global_permissions]global_permissions[/zrl]
+ Called when the global permissions list is generated
+
+[zrl=[baseurl]/help/hook/home_content]home_content[/zrl]
+ Called from mod_home to replace the content of the home page
+
+[zrl=[baseurl]/help/hook/home_init]home_init[/zrl]
+ Called from the home page home_init() function
+
+[zrl=[baseurl]/help/hook/hostxrd]hostxrd[/zrl]
+ Called when generating .well-known/hosts-meta for "old webfinger" (used by Diaspora protocol)
+
+[zrl=[baseurl]/help/hook/html2bbcode]html2bbcode[/zrl]
+ Called when using the html2bbcode tranlsation
+
+[zrl=[baseurl]/help/hook/identity_basic_export]identity_basic_export[/zrl]
+ Called when exporting a channel's basic information for backup or transfer
+
+[zrl=[baseurl]/help/hook/import_author_xchan]import_author_xchan[/zrl]
+ Called when looking up an author of a post by xchan_hash to ensure they have an xchan record on our site
+
+[zrl=[baseurl]/help/hook/import_channel]import_channel[/zrl]
+ Called when importing a channel from a file or API source
+
+[zrl=[baseurl]/help/hook/import_directory_profile]import_directory_profile[/zrl]
+ Called when processing delivery of a profile structure from an external source (usually for directory storage)
+
+[zrl=[baseurl]/help/hook/import_xchan]import_xchan[/zrl]
+ Called when processing the result of zot_finger() to store the result
+
+[zrl=[baseurl]/help/hook/item_photo_menu]item_photo_menu[/zrl]
+ Called when generating the list of actions associated with a displayed conversation item
+
+[zrl=[baseurl]/help/hook/item_store]item_store[/zrl]
+ Called when item_store() stores a record of type item
+
+[zrl=[baseurl]/help/hook/item_store_update]item_store_update[/zrl]
+ Called when item_store_update() is called to update a stored item.
+
+[zrl=[baseurl]/help/hook/item_translate]item_translate[/zrl]
+ Called from item_store and item_store_update after the post language has been autodetected
+
+[zrl=[baseurl]/help/hook/jot_networks]jot_networks[/zrl]
+ Called to generate the list of additional post plugins to enable from the ACL form
+
+[zrl=[baseurl]/help/hook/jot_tool]jot_tool[/zrl]
+ Deprecated and possibly obsolete. Allows one to add action buttons to the post editor.
+
+[zrl=[baseurl]/help/hook/load_pdl]load_pdl[/zrl]
+ Called when we load a PDL file or description
+
+[zrl=[baseurl]/help/hook/local_dir_update]local_dir_update[/zrl]
+ Called when processing a directory update from a channel on the directory server
+
+[zrl=[baseurl]/help/hook/logged_in]logged_in[/zrl]
+ Called when authentication by any means has succeeeded
+
+[zrl=[baseurl]/help/hook/logging_out]logging_out[/zrl]
+ Called when logging out
+
+[zrl=[baseurl]/help/hook/login_hook]login_hook[/zrl]
+ Called when generating the login form
+
+[zrl=[baseurl]/help/hook/magic_auth]magic_auth[/zrl]
+ Called when processing a magic-auth sequence
+
+[zrl=[baseurl]/help/hook/magic_auth_openid_success]magic_auth_openid_success[/zrl]
+ Called when a magic-auth was successful due to openid credentials
+
+[zrl=[baseurl]/help/hook/magic_auth_success]magic_auth_success[/zrl]
+ Called when a magic-auth was successful
+
+[zrl=[baseurl]/help/hook/main_slider]main_slider[/zrl]
+ Called whne generating the affinity tool
+
+[zrl=[baseurl]/help/hook/marital_selector]marital_selector[/zrl]
+ Called when generating the list of choices for the 'marital status' profile dropdown (advanced profile)
+
+[zrl=[baseurl]/help/hook/marital_selector_min]marital_selector_min[/zrl]
+ Called when generating the list of choices for the 'marital status' profile dropdown (normal profile)
+
+[zrl=[baseurl]/help/hook/module_loaded]module_loaded[/zrl]
+ Called when a module has been successfully locate to server a URL request
+
+[zrl=[baseurl]/help/hook/mood_verbs]mood_verbs[/zrl]
+ Called when generating the list of moods
+
+[zrl=[baseurl]/help/hook/nav]nav[/zrl]
+ Called when generating the navigation bar
+
+[zrl=[baseurl]/help/hook/network_content_init]network_content_init[/zrl]
+ Called when loading cntent for the network page
+
+[zrl=[baseurl]/help/hook/network_ping]network_ping[/zrl]
+ Called during a ping request
+
+[zrl=[baseurl]/help/hook/network_tabs]network_tabs[/zrl]
+ Called when generating the list of tabs for the network page
+
+[zrl=[baseurl]/help/hook/network_to_name]network_to_name[/zrl]
+ Deprecated
+
+[zrl=[baseurl]/help/hook/notifier_end]notifier_end[/zrl]
+ Called when a delivery loop has completed
+
+[zrl=[baseurl]/help/hook/notifier_hub]notifier_hub[/zrl]
+ Called when a hub is delivered
+
+[zrl=[baseurl]/help/hook/notifier_normal]notifier_normal[/zrl]
+ Called when the notofoer is invoked for a 'normal' delivery
+
+[zrl=[baseurl]/help/hook/obj_verbs]obj_verbs[/zrl]
+ Called when creating the list of verbs available for profile "things".
+
+[zrl=[baseurl]/help/hook/oembed_probe]oembed_probe[/zrl]
+ Called when performing an oembed content lookup
+
+[zrl=[baseurl]/help/hook/page_content_top]page_content_top[/zrl]
+ Called when we generate a webpage (before calling the module content function)
+
+[zrl=[baseurl]/help/hook/page_end]page_end[/zrl]
+ Called after we have generated the page content
+
+[zrl=[baseurl]/help/hook/page_header]page_header[/zrl]
+ Called when generating the navigation bar
+
+[zrl=[baseurl]/help/hook/parse_atom]parse_atom[/zrl]
+ Called when parsing an atom/RSS feed item
+
+[zrl=[baseurl]/help/hook/parse_link]parse_link[/zrl]
+ Called when probing a URL to generate post content from it
+
+[zrl=[baseurl]/help/hook/pdl_selector]pdl_selector[/zrl]
+ Called when creating a layout selection in a form
+
+[zrl=[baseurl]/help/hook/perm_is_allowed]perm_is_allowed[/zrl]
+ Called during perm_is_allowed() to determine if a permission is allowed for this channel and observer
+
+[zrl=[baseurl]/help/hook/permissions_create]permissions_create[/zrl]
+ Called when an abook entry (connection) is created
+
+[zrl=[baseurl]/help/hook/permissions_update]permissions_update[/zrl]
+ Called when a permissions refresh is transmitted
+
+[zrl=[baseurl]/help/hook/personal_xrd]personal_xrd[/zrl]
+ Called when generating the personal XRD for "old webfinger" (Diaspora)
+
+[zrl=[baseurl]/help/hook/photo_post_end]photo_post_end[/zrl]
+ Called after uploading a photo
+
+[zrl=[baseurl]/help/hook/photo_upload_begin]photo_upload_begin[/zrl]
+ Called when attempting to upload a photo
+
+[zrl=[baseurl]/help/hook/photo_upload_end]photo_upload_end[/zrl]
+ Called when a photo upload has been processed
+
+[zrl=[baseurl]/help/hook/photo_upload_file]photo_upload_file[/zrl]
+ Called to generate alternate filenames for an upload
+
+[zrl=[baseurl]/help/hook/photo_upload_form]photo_upload_form[/zrl]
+ Called when generating a photo upload form
+
+[zrl=[baseurl]/help/hook/poke_verbs]poke_verbs[/zrl]
+ Called when generating the list of actions for "poke" module
+
+[zrl=[baseurl]/help/hook/post_local]post_local[/zrl]
+ Called when an item has been posted on this machine via mod/item.php (also via API)
+
+[zrl=[baseurl]/help/hook/post_local_end]post_local_end[/zrl]
+ Called after a local post operation has completed
+
+[zrl=[baseurl]/help/hook/post_local_start]post_local_start[/zrl]
+ Called when a local post operation is commencing
+
+[zrl=[baseurl]/help/hook/post_mail]post_mail[/zrl]
+ Called when a mail message has been composed
+
+[zrl=[baseurl]/help/hook/post_mail_end]post_mail_end[/zrl]
+ Called when a mail message has been delivered
+
+[zrl=[baseurl]/help/hook/post_remote]post_remote[/zrl]
+ Called when an activity arrives from another site
+
+[zrl=[baseurl]/help/hook/post_remote_end]post_remote_end[/zrl]
+ Called after processing a remote post
+
+[zrl=[baseurl]/help/hook/post_remote_update]post_remote_update[/zrl]
+ Called when processing a remote post that involved an edit or update
+
+[zrl=[baseurl]/help/hook/post_remote_update_end]post_remote_update_end[/zrl]
+ Called after processing a remote post that involved an edit or update
+
+[zrl=[baseurl]/help/hook/prepare_body]prepare_body[/zrl]
+ Called when generating the HTML for a displayed conversation item
+
+[zrl=[baseurl]/help/hook/prepare_body_final]prepare_body_final[/zrl]
+ Called after generating the HTML for a displayed conversation item
+
+[zrl=[baseurl]/help/hook/prepare_body_init]prepare_body_init[/zrl]
+ Called before generating the HTML for a displayed conversation item
+
+[zrl=[baseurl]/help/hook/probe_well_known]probe_well_known[/zrl]
+ under construction
+
+[zrl=[baseurl]/help/hook/proc_run]proc_run[/zrl]
+ Called when invoking PHP sub processes
+
+[zrl=[baseurl]/help/hook/process_channel_sync_delivery]process_channel_sync_delivery[/zrl]
+ Called when accepting delivery of a 'sync packet' containing structure and table updates from a channel clone
+
+[zrl=[baseurl]/help/hook/profile_advanced]profile_advanced[/zrl]
+ Called when generating an advanced profile page
+
+[zrl=[baseurl]/help/hook/profile_edit]profile_edit[/zrl]
+ Called when editing a profile
+
+[zrl=[baseurl]/help/hook/profile_photo_content_end]profile_photo_content_end[/zrl]
+ Called when changing a profile photo
+
+[zrl=[baseurl]/help/hook/profile_post]profile_post[/zrl]
+ Called when posting an edited profile
+
+[zrl=[baseurl]/help/hook/profile_sidebar]profile_sidebar[/zrl]
+ Called when generating the 'channel sidebar' or mini-profile
+
+[zrl=[baseurl]/help/hook/profile_sidebar_enter]profile_sidebar_enter[/zrl]
+ Called before generating the 'channel sidebar' or mini-profile
+
+[zrl=[baseurl]/help/hook/profile_tabs]profile_tabs[/zrl]
+ Called when generating the tabs for channel related pages (channel,profile,files,etc.)
+
+[zrl=[baseurl]/help/hook/register_account]register_account[/zrl]
+ Called when an account has been created
+
+[zrl=[baseurl]/help/hook/render_location]render_location[/zrl]
+ Called to generate an ineractive inline map
+
+[zrl=[baseurl]/help/hook/replace_macros]replace_macros[/zrl]
+ Called before invoking the template processor
+
+[zrl=[baseurl]/help/hook/reverse_magic_auth]reverse_magic_auth[/zrl]
+ Called before invoking reverse magic auth to send you to your own site to authenticate on this site
+
+[zrl=[baseurl]/help/hook/settings_form]settings_form[/zrl]
+ Called when generating the channel settings form
+
+[zrl=[baseurl]/help/hook/settings_post]settings_post[/zrl]
+ Called when posting from the channel settings form
+
+[zrl=[baseurl]/help/hook/sexpref_selector]sexpref_selector[/zrl]
+ Called when generating a dropdown of sexual preference (advanced profile)
+
+[zrl=[baseurl]/help/hook/sexpref_selector_min]sexpref_selector_min[/zrl]
+ Called when generating a dropdown of sexual preference (normal profile)
+
+[zrl=[baseurl]/help/hook/smilie]smilie[/zrl]
+ Called when translating emoticons
+
+[zrl=[baseurl]/help/hook/tagged]tagged[/zrl]
+ Called when a delivery is processed which results in you being tagged
+
+[zrl=[baseurl]/help/hook/validate_channelname]validate_channelname[/zrl]
+ Used to validate the names used by a channel
+
+[zrl=[baseurl]/help/hook/webfinger]webfinger[/zrl]
+ Called when visiting the webfinger (RFC7033) service
+
+[zrl=[baseurl]/help/hook/well_known]well_known[/zrl]
+ Called when accessing the '.well-known' special site addresses
+
+[zrl=[baseurl]/help/hook/zid]zid[/zrl]
+ Called when adding the observer's zid to a URL
+
+[zrl=[baseurl]/help/hook/zid_init]zid_init[/zrl]
+ Called when authenticating a visitor who has used zid
+
+[zrl=[baseurl]/help/hook/zot_finger]zot_finger[/zrl]
+ Called when a zot-info packet has been requested (this is our webfinger discovery mechanism)
diff --git a/sources/doc/hooks.html b/sources/doc/hooks.html
new file mode 100644
index 00000000..c05de58e
--- /dev/null
+++ b/sources/doc/hooks.html
@@ -0,0 +1 @@
+
Hooks
Function
Source File
Arg
$a->module . _mod_aftercontent
index.php
$arr
$a->module . _mod_content
index.php
$arr
$a->module . _mod_init
index.php
$placeholder
$a->module . _mod_post
index.php
$_POST
$a->module . _post_ . $selname
include/acl_selectors.php
$o
$a->module . _post_ . $selname
include/acl_selectors.php
$o
$a->module . _post_ . $selname
include/acl_selectors.php
$o
$a->module . _pre_ . $selname
include/acl_selectors.php
$arr
$a->module . _pre_ . $selname
include/acl_selectors.php
$arr
$a->module . _pre_ . $selname
include/acl_selectors.php
$arr
$name
include/plugin.php
&$data = null
about_hook
mod/siteinfo.php
$o
accept_follow
mod/connedit.php
$arr
account_downgrade
include/account.php
$ret
account_downgrade
include/account.php
$ret
account_settings
mod/settings.php
$account_settings
activity_received
include/zot.php
$parr
affinity_labels
include/widgets.php
$labels
affinity_labels
mod/connedit.php
$labels
api_perm_is_allowed
include/permissions.php
$arr
app_menu
index.php
$arr
atom_author
include/items.php
$o
atom_entry
include/items.php
$o
atom_feed
include/items.php
$atom
atom_feed_end
include/items.php
$atom
attach_upload_file
include/attach.php
$f
authenticate
include/auth.php
$addon_auth
avatar_lookup
include/network.php
$avatar
bb2diaspora
include/bb2diaspora.php
$Text
bbcode
include/bbcode.php
$Text
channel_remove
include/Contact.php
$r[0]
chat_message
include/chat.php
$arr
chat_post
mod/chatsvc.php
$arr
check_account_email
include/account.php
$arr
check_account_invite
include/account.php
$arr
check_account_password
include/account.php
$arr
connect_premium
mod/connect.php
$arr
connector_settings
mod/settings.php
$settings_connectors
construct_page
boot.php
$arr
contact_block_end
include/text.php
$arr
contact_edit
mod/connedit.php
$arr
contact_edit_post
mod/connedit.php
$_POST
contact_select_options
include/acl_selectors.php
$x
conversation_start
include/conversation.php
$cb
create_identity
include/identity.php
$newuid
cron
include/cronhooks.php
$d
cron_daily
include/poller.php
datetime_convert()
cron_weekly
include/poller.php
datetime_convert()
directory_item
mod/directory.php
$arr
discover_by_webbie
include/network.php
$arr
display_item
include/ItemObject.php
$arr
display_item
include/conversation.php
$arr
display_settings
mod/settings.php
$o
display_settings_post
mod/settings.php
$_POST
donate_contributors
extend/addon/matrix/donate/donate.php
$contributors
donate_plugin
extend/addon/matrix/donate/donate.php
$o
donate_sponsors
extend/addon/matrix/donate/donate.php
$sponsors
dreport_is_storable
include/zot.php
$dr
drop_item
include/items.php
$arr
enotify
include/enotify.php
$h
enotify_mail
include/enotify.php
$datarray
enotify_store
include/enotify.php
$datarray
event_created
include/event.php
$event[id]
event_updated
include/event.php
$event[id]
externals_url_select
include/externals.php
$arr
feature_enabled
include/features.php
$arr
feature_settings
mod/settings.php
$settings_addons
feature_settings_post
mod/settings.php
$_POST
follow
include/follow.php
$arr
follow
include/follow.php
$arr
follow_allow
include/follow.php
$x
gender_selector
include/profile_selectors.php
$select
gender_selector_min
include/profile_selectors.php
$select
generate_map
include/text.php
$arr
generate_named_map
include/text.php
$arr
get_all_api_perms
include/permissions.php
$arr
get_all_perms
include/permissions.php
$arr
get_features
include/features.php
$arr
get_role_perms
include/permissions.php
$ret
get_widgets
boot.php
$arr
get_widgets
boot.php
$arr
global_permissions
include/permissions.php
$ret
home_content
mod/home.php
$o
home_init
mod/home.php
$ret
hostxrd
mod/hostxrd.php
$arr
html2bbcode
include/html2bbcode.php
$message
identity_basic_export
include/identity.php
$addon
import_author_xchan
include/items.php
$arr
import_channel
mod/import.php
$addon
import_directory_profile
include/zot.php
$d
import_xchan
include/zot.php
$arr
item_photo_menu
include/conversation.php
$args
item_store
include/items.php
$d
item_store
include/items.php
$arr
item_store_update
include/items.php
$d
item_translate
include/items.php
$translate
item_translate
include/items.php
$translate
jot_networks
include/acl_selectors.php
$jotnets
jot_networks
include/conversation.php
$jotnets
jot_networks
mod/editblock.php
$jotnets
jot_networks
mod/editpost.php
$jotnets
jot_networks
mod/editwebpage.php
$jotnets
jot_networks
mod/editlayout.php
$jotnets
jot_tool
include/conversation.php
$jotplugins
jot_tool
mod/editblock.php
$jotplugins
jot_tool
mod/editpost.php
$jotplugins
jot_tool
mod/editwebpage.php
$jotplugins
jot_tool
mod/editlayout.php
$jotplugins
load_pdl
boot.php
$arr
local_dir_update
include/dir_fns.php
$arr
logged_in
include/oauth.php
$a->user
logged_in
include/api.php
$a->user
logged_in
include/security.php
$a->account
logged_in
include/security.php
$user_record
logging_out
include/auth.php
$args
login_hook
boot.php
$o
magic_auth
mod/magic.php
$arr
magic_auth_openid_success
mod/openid.php
$arr
magic_auth_openid_success
mod/openid.php
$arr
magic_auth_success
mod/post.php
$arr
main_slider
include/widgets.php
$arr
marital_selector
include/profile_selectors.php
$select
marital_selector_min
include/profile_selectors.php
$select
module_loaded
index.php
$x
mood_verbs
include/text.php
$arr
nav
include/nav.php
$x
network_content_init
mod/network.php
$arr
network_ping
mod/ping.php
$arr
network_tabs
include/conversation.php
$arr
network_to_name
include/contact_selectors.php
$nets
notifier_end
include/notifier.php
$target_item
notifier_hub
include/notifier.php
$narr
notifier_normal
include/deliver_hooks.php
$r[0]
obj_verbs
include/taxonomy.php
$arr
oembed_probe
include/oembed.php
$x
page_content_top
index.php
$a->page[content]
page_end
index.php
$a->page[content]
page_header
include/nav.php
$a->page[nav]
parse_atom
include/items.php
$arr
parse_link
mod/linkinfo.php
$arr
pdl_selector
include/comanche.php
$arr
perm_is_allowed
include/permissions.php
$arr
permissions_create
include/notifier.php
$perm_update
permissions_update
include/notifier.php
$perm_update
personal_xrd
mod/xrd.php
$arr
photo_post_end
include/photos.php
$ret
photo_post_end
include/photos.php
$ret
photo_upload_begin
include/attach.php
$arr
photo_upload_begin
include/photos.php
$args
photo_upload_end
include/attach.php
$ret
photo_upload_end
include/attach.php
$ret
photo_upload_end
include/attach.php
$ret
photo_upload_end
include/attach.php
$ret
photo_upload_end
include/attach.php
$ret
photo_upload_end
include/photos.php
$ret
photo_upload_end
include/photos.php
$ret
photo_upload_end
include/photos.php
$ret
photo_upload_end
include/photos.php
$ret
photo_upload_file
include/attach.php
$f
photo_upload_file
include/photos.php
$f
photo_upload_form
mod/photos.php
$ret
poke_verbs
include/text.php
$arr
post_local
include/zot.php
$arr
post_local
include/items.php
$arr
post_local
mod/item.php
$datarray
post_local_end
include/items.php
$arr
post_local_end
include/attach.php
$arr
post_local_end
include/attach.php
$arr
post_local_end
extend/addon/matrix/randpost/randpost.php
$x
post_local_end
extend/addon/matrix/randpost/randpost.php
$x
post_local_end
mod/mood.php
$arr
post_local_end
mod/like.php
$arr
post_local_end
mod/item.php
$datarray
post_local_end
mod/subthread.php
$arr
post_local_start
mod/item.php
$_REQUEST
post_mail
include/items.php
$arr
post_mail_end
include/items.php
$arr
post_remote
include/items.php
$arr
post_remote_end
include/items.php
$arr
post_remote_update
include/items.php
$arr
post_remote_update_end
include/items.php
$arr
prepare_body
include/text.php
$prep_arr
prepare_body_final
include/text.php
$prep_arr
prepare_body_init
include/text.php
$item
probe_well_known
include/probe.php
$ret
proc_run
boot.php
$arr
process_channel_sync_delivery
include/zot.php
$addon
profile_advanced
mod/profile.php
$o
profile_edit
mod/profiles.php
$arr
profile_photo_content_end
mod/profile_photo.php
$o
profile_post
mod/profiles.php
$_POST
profile_sidebar
include/identity.php
$arr
profile_sidebar_enter
include/identity.php
$profile
profile_tabs
include/conversation.php
$arr
register_account
include/account.php
$result
render_location
include/conversation.php
$locate
replace_macros
include/text.php
$arr
reverse_magic_auth
mod/rmagic.php
$arr
settings_account
mod/settings.php
$_POST
settings_form
mod/settings.php
$o
settings_post
mod/settings.php
$_POST
sexpref_selector
include/profile_selectors.php
$select
sexpref_selector_min
include/profile_selectors.php
$select
smilie
include/text.php
$params
smilie
extend/addon/matrix/smileybutton/smileybutton.php
$params
tagged
include/items.php
$arr
validate_channelname
include/identity.php
$arr
webfinger
mod/wfinger.php
$arr
well_known
mod/_well_known.php
$arr
zid
include/identity.php
$arr
zid_init
include/identity.php
$arr
zot_finger
include/zot.php
$ret
Generated Tue Nov 03 21:19:02 PST 2015
\ No newline at end of file
diff --git a/sources/doc/schemaspy_hubzilla/zot.meta.xml b/sources/doc/schemaspy_hubzilla/zot.meta.xml
new file mode 100644
index 00000000..98a9d370
--- /dev/null
+++ b/sources/doc/schemaspy_hubzilla/zot.meta.xml
@@ -0,0 +1,283 @@
+
+
+
+2015-11-04 - Hubzilla database schema with some corrected cross-table relationships supporting decentralized publishing. Haakon Meland Eriksen.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sources/doc/sv/main.bb b/sources/doc/sv/main.bb
index eb35b0b3..26d9c78f 100644
--- a/sources/doc/sv/main.bb
+++ b/sources/doc/sv/main.bb
@@ -1,4 +1,4 @@
-[img][baseurl]/assets/hashlogo.png[/img]
+[img][baseurl]/images/hubzilla-banner.png[/img]
[zrl=[baseurl]/help/about][b]Vad är $Projectname?[/b][/zrl]
$Projectname är en decentraliserad publicerings- och kommunikationsplattform som möjliggör att du behåller kontrollen över dina kommunikationer med hjälp av automatisk kryptering och fininställbar behörighetskontroll. Det är du, och bara du, som beslutar vem som är behörig att ta del av ditt innehåll.
diff --git a/sources/hubzilla_er/Makefile b/sources/hubzilla_er/Makefile
new file mode 100644
index 00000000..f36f0100
--- /dev/null
+++ b/sources/hubzilla_er/Makefile
@@ -0,0 +1,17 @@
+#makefile for schemaspy
+
+
+#NOTE: This makefile sucks. It needs to have all run the script, and check that schemaspy and mysqlconn are present.
+
+schemaspy::
+ wget "http://downloads.sourceforge.net/project/schemaspy/schemaspy/SchemaSpy%205.0.0/schemaSpy_5.0.0.jar?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fschemaspy%2F&ts=1447051240&use_mirror=iweb"
+
+mysqlconn::
+ wget http://central.maven.org/maven2/mysql/mysql-connector-java/5.1.17/mysql-connector-java-5.1.17.jar
+
+#TODO: install java and graphviz or check it is there
+
+install: schemaspy mysqlconn
+
+run:
+ ../util/schemaspy
diff --git a/sources/hubzilla_er/anomalies.html b/sources/hubzilla_er/anomalies.html
new file mode 100644
index 00000000..e911fc65
--- /dev/null
+++ b/sources/hubzilla_er/anomalies.html
@@ -0,0 +1,256 @@
+
+
+
+
+ SchemaSpy - zot - Anomalies
+
+
+
+
+
+
+
+Generated by SchemaSpy on on aug 19 21:08 CEST 2015
+
+
+
+
+
Legend:
+
+
+
+
+
+
Primary key columns
+
Columns with indexes
+
Excluded column relationships
+
Dashed lines show implied relationships
+
< n > number of related tables
+
+
+
+
+
+
+
+
+
+
+No 'real' Foreign Key relationships were detected in the schema.
+Displayed relationships are implied by a column's name/type/size matching another table's primary key.