aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMario <mario@mariovavti.com>2024-04-30 06:59:20 +0000
committerMario <mario@mariovavti.com>2024-04-30 06:59:20 +0000
commitce15852b9a57a6c77531186ed24a389ebce8524e (patch)
treead04cef0d545c5e5e24e76060b6c32d65363d48e
parent48cec945051d259a06871d937ad998a1bd3e22ec (diff)
parent7c34a3676d294c9a1acc69f71ab3061074509160 (diff)
downloadvolse-hubzilla-ce15852b9a57a6c77531186ed24a389ebce8524e.tar.gz
volse-hubzilla-ce15852b9a57a6c77531186ed24a389ebce8524e.tar.bz2
volse-hubzilla-ce15852b9a57a6c77531186ed24a389ebce8524e.zip
Merge branch 'rework-help-module' into 'dev'
Rework Help module + begin tests for Setup module See merge request hubzilla/core!2120
-rw-r--r--Zotlabs/Lib/Traits/HelpHelper.php68
-rw-r--r--Zotlabs/Module/Help.php191
-rw-r--r--Zotlabs/Widget/Helpindex.php63
-rw-r--r--doc/context/de/apps/edit/help.html4
-rw-r--r--doc/context/de/apps/help.html6
-rw-r--r--doc/context/en/apps/edit/help.html4
-rw-r--r--doc/context/en/apps/help.html6
-rw-r--r--doc/context/es-es/apps/edit/help.html4
-rw-r--r--doc/context/es-es/apps/help.html6
-rw-r--r--doc/context/fr/apps/edit/index.html4
-rw-r--r--doc/context/fr/apps/help.html7
-rw-r--r--doc/context/pl/apps/edit/help.html7
-rw-r--r--doc/context/pl/apps/help.html15
-rw-r--r--doc/en/AdvancedSearch.md (renamed from doc/AdvancedSearch.md)0
-rw-r--r--doc/en/Comparison-of-activity-stream-networks.md (renamed from doc/Comparison-of-activity-stream-networks.md)0
-rw-r--r--doc/en/Creating-Templates.md (renamed from doc/Creating-Templates.md)0
-rw-r--r--doc/en/DerivedTheme1.md (renamed from doc/DerivedTheme1.md)0
-rw-r--r--doc/en/Developers.md (renamed from doc/Developers.md)0
-rw-r--r--doc/en/Features.md (renamed from doc/Features.md)0
-rw-r--r--doc/en/Hubzilla_on_OpenShift.bb (renamed from doc/Hubzilla_on_OpenShift.bb)0
-rw-r--r--doc/en/Plugins.md (renamed from doc/Plugins.md)0
-rw-r--r--doc/en/Primary-Directory.md (renamed from doc/Primary-Directory.md)0
-rw-r--r--doc/en/Remove-Account.md (renamed from doc/Remove-Account.md)0
-rw-r--r--doc/en/Schema-development.md (renamed from doc/Schema-development.md)0
-rw-r--r--doc/en/TermsOfService.md (renamed from doc/TermsOfService.md)0
-rw-r--r--doc/en/Translations.md (renamed from doc/Translations.md)0
-rw-r--r--doc/en/Widgets.md (renamed from doc/Widgets.md)0
-rw-r--r--doc/en/Zot---A-High-Level-Overview.md (renamed from doc/Zot---A-High-Level-Overview.md)0
-rw-r--r--doc/en/about/about.bb (renamed from doc/about/about.bb)0
-rw-r--r--doc/en/about/about_hub.bb (renamed from doc/about/about_hub.bb)0
-rw-r--r--doc/en/about/project.bb (renamed from doc/about/project.bb)0
-rw-r--r--doc/en/accounts_profiles_channels_basics.bb (renamed from doc/accounts_profiles_channels_basics.bb)0
-rw-r--r--doc/en/acl_dialog_post.html (renamed from doc/acl_dialog_post.html)0
-rw-r--r--doc/en/addons.bb (renamed from doc/addons.bb)0
-rw-r--r--doc/en/addons_gnusocial.bb (renamed from doc/addons_gnusocial.bb)0
-rw-r--r--doc/en/admin/administrator_guide.md (renamed from doc/admin/administrator_guide.md)0
-rw-r--r--doc/en/admin/hub_snapshots.md (renamed from doc/admin/hub_snapshots.md)0
-rw-r--r--doc/en/admin/zarlog_msgs.md (renamed from doc/admin/zarlog_msgs.md)0
-rw-r--r--doc/en/admins.bb (renamed from doc/admins.bb)0
-rw-r--r--doc/en/api/api_albums.md (renamed from doc/api/api_albums.md)0
-rw-r--r--doc/en/api/api_filedata.md (renamed from doc/api/api_filedata.md)0
-rw-r--r--doc/en/api/api_files.md (renamed from doc/api/api_files.md)0
-rw-r--r--doc/en/api/api_functions.bb (renamed from doc/api/api_functions.bb)0
-rw-r--r--doc/en/api/api_group_members.md (renamed from doc/api/api_group_members.md)0
-rw-r--r--doc/en/api/api_item_update.md (renamed from doc/api/api_item_update.md)0
-rw-r--r--doc/en/api/api_posting.bb (renamed from doc/api/api_posting.bb)0
-rw-r--r--doc/en/api/api_xchan.md (renamed from doc/api/api_xchan.md)0
-rw-r--r--doc/en/api/group.md (renamed from doc/api/group.md)0
-rw-r--r--doc/en/api/statuses_update.bb (renamed from doc/api/statuses_update.bb)0
-rw-r--r--doc/en/bugs.bb (renamed from doc/bugs.bb)0
-rw-r--r--doc/en/campaign.bb (renamed from doc/campaign.bb)0
-rw-r--r--doc/en/checking_account_quota_usage.bb (renamed from doc/checking_account_quota_usage.bb)0
-rw-r--r--doc/en/comanche.bb (renamed from doc/comanche.bb)0
-rw-r--r--doc/en/context/de/admin/logs/help.html (renamed from doc/context/de/admin/logs/help.html)0
-rw-r--r--doc/en/context/de/admin/queue/help.html (renamed from doc/context/de/admin/queue/help.html)0
-rw-r--r--doc/en/context/de/admin/security/help.html (renamed from doc/context/de/admin/security/help.html)0
-rw-r--r--doc/en/context/de/appman/help.html (renamed from doc/context/de/appman/help.html)0
-rw-r--r--doc/en/context/de/channel/help.html (renamed from doc/context/de/channel/help.html)0
-rw-r--r--doc/en/context/de/chat/help.html (renamed from doc/context/de/chat/help.html)0
-rw-r--r--doc/en/context/de/cloud/help.html (renamed from doc/context/de/cloud/help.html)0
-rw-r--r--doc/en/context/de/connections/help.html (renamed from doc/context/de/connections/help.html)0
-rw-r--r--doc/en/context/de/connections/ifpending/help.html (renamed from doc/context/de/connections/ifpending/help.html)0
-rw-r--r--doc/en/context/de/events/help.html (renamed from doc/context/de/events/help.html)0
-rw-r--r--doc/en/context/de/mail/help.html (renamed from doc/context/de/mail/help.html)0
-rw-r--r--doc/en/context/de/network/help.html (renamed from doc/context/de/network/help.html)0
-rw-r--r--doc/en/context/de/photos/help.html (renamed from doc/context/de/photos/help.html)0
-rw-r--r--doc/en/context/de/profile/help.html (renamed from doc/context/de/profile/help.html)0
-rw-r--r--doc/en/context/de/register/help.html (renamed from doc/context/de/register/help.html)0
-rw-r--r--doc/en/context/de/settings/account/help.html (renamed from doc/context/de/settings/account/help.html)0
-rw-r--r--doc/en/context/de/settings/channel/help.html (renamed from doc/context/de/settings/channel/help.html)0
-rw-r--r--doc/en/context/de/settings/features/help.html (renamed from doc/context/de/settings/features/help.html)0
-rw-r--r--doc/en/context/de/settings/tokens/help.html (renamed from doc/context/de/settings/tokens/help.html)0
-rw-r--r--doc/en/context/de/wiki/help.html (renamed from doc/context/de/wiki/help.html)0
-rw-r--r--doc/en/context/en/admin/addons/assets/addon_repo_gui_1.png (renamed from doc/context/en/admin/addons/assets/addon_repo_gui_1.png)bin16983 -> 16983 bytes
-rw-r--r--doc/en/context/en/admin/addons/help.html (renamed from doc/context/en/admin/addons/help.html)0
-rw-r--r--doc/en/context/en/admin/logs/help.html (renamed from doc/context/en/admin/logs/help.html)0
-rw-r--r--doc/en/context/en/admin/queue/help.html (renamed from doc/context/en/admin/queue/help.html)0
-rw-r--r--doc/en/context/en/admin/security/help.html (renamed from doc/context/en/admin/security/help.html)0
-rw-r--r--doc/en/context/en/appman/help.html (renamed from doc/context/en/appman/help.html)0
-rw-r--r--doc/en/context/en/cards/help.html (renamed from doc/context/en/cards/help.html)0
-rw-r--r--doc/en/context/en/channel/help.html (renamed from doc/context/en/channel/help.html)0
-rw-r--r--doc/en/context/en/chat/help.html (renamed from doc/context/en/chat/help.html)0
-rw-r--r--doc/en/context/en/cloud/help.html (renamed from doc/context/en/cloud/help.html)0
-rw-r--r--doc/en/context/en/connections/help.html (renamed from doc/context/en/connections/help.html)0
-rw-r--r--doc/en/context/en/connections/ifpending/help.html (renamed from doc/context/en/connections/ifpending/help.html)0
-rw-r--r--doc/en/context/en/connedit/help.html (renamed from doc/context/en/connedit/help.html)0
-rw-r--r--doc/en/context/en/events/help.html (renamed from doc/context/en/events/help.html)0
-rw-r--r--doc/en/context/en/mail/help.html (renamed from doc/context/en/mail/help.html)0
-rw-r--r--doc/en/context/en/network/help.html (renamed from doc/context/en/network/help.html)0
-rw-r--r--doc/en/context/en/photos/help.html (renamed from doc/context/en/photos/help.html)0
-rw-r--r--doc/en/context/en/profile/help.html (renamed from doc/context/en/profile/help.html)0
-rw-r--r--doc/en/context/en/profiles/help.html (renamed from doc/context/en/profiles/help.html)0
-rw-r--r--doc/en/context/en/register/help.html (renamed from doc/context/en/register/help.html)0
-rw-r--r--doc/en/context/en/settings/account/help.html (renamed from doc/context/en/settings/account/help.html)0
-rw-r--r--doc/en/context/en/settings/channel/help.html (renamed from doc/context/en/settings/channel/help.html)0
-rw-r--r--doc/en/context/en/settings/features/help.html (renamed from doc/context/en/settings/features/help.html)0
-rw-r--r--doc/en/context/en/settings/tokens/help.html (renamed from doc/context/en/settings/tokens/help.html)0
-rw-r--r--doc/en/context/en/webpages/help.html (renamed from doc/context/en/webpages/help.html)0
-rw-r--r--doc/en/context/en/wiki/help.html (renamed from doc/context/en/wiki/help.html)0
l---------doc/en/context/es (renamed from doc/context/es)0
-rw-r--r--doc/en/context/es-es/admin/addons/assets/addon_repo_gui_1.png (renamed from doc/context/es-es/admin/addons/assets/addon_repo_gui_1.png)bin16983 -> 16983 bytes
-rw-r--r--doc/en/context/es-es/admin/addons/help.html (renamed from doc/context/es-es/admin/addons/help.html)0
-rw-r--r--doc/en/context/es-es/admin/logs/help.html (renamed from doc/context/es-es/admin/logs/help.html)0
-rw-r--r--doc/en/context/es-es/admin/queue/help.html (renamed from doc/context/es-es/admin/queue/help.html)0
-rw-r--r--doc/en/context/es-es/admin/security/help.html (renamed from doc/context/es-es/admin/security/help.html)0
-rw-r--r--doc/en/context/es-es/appman/help.html (renamed from doc/context/es-es/appman/help.html)0
-rw-r--r--doc/en/context/es-es/articles/help.html (renamed from doc/context/es-es/articles/help.html)0
-rw-r--r--doc/en/context/es-es/cards/help.html (renamed from doc/context/es-es/cards/help.html)0
-rw-r--r--doc/en/context/es-es/channel/help.html (renamed from doc/context/es-es/channel/help.html)0
-rw-r--r--doc/en/context/es-es/chat/help.html (renamed from doc/context/es-es/chat/help.html)0
-rw-r--r--doc/en/context/es-es/cloud/help.html (renamed from doc/context/es-es/cloud/help.html)0
-rw-r--r--doc/en/context/es-es/connections/help.html (renamed from doc/context/es-es/connections/help.html)0
-rw-r--r--doc/en/context/es-es/connections/ifpending/help.html (renamed from doc/context/es-es/connections/ifpending/help.html)0
-rw-r--r--doc/en/context/es-es/connedit/help.html (renamed from doc/context/es-es/connedit/help.html)0
-rw-r--r--doc/en/context/es-es/events/help.html (renamed from doc/context/es-es/events/help.html)0
-rw-r--r--doc/en/context/es-es/mail/help.html (renamed from doc/context/es-es/mail/help.html)0
-rw-r--r--doc/en/context/es-es/network/help.html (renamed from doc/context/es-es/network/help.html)0
-rw-r--r--doc/en/context/es-es/photos/help.html (renamed from doc/context/es-es/photos/help.html)0
-rw-r--r--doc/en/context/es-es/profile/help.html (renamed from doc/context/es-es/profile/help.html)0
-rw-r--r--doc/en/context/es-es/profiles/help.html (renamed from doc/context/es-es/profiles/help.html)0
-rw-r--r--doc/en/context/es-es/settings/account/help.html (renamed from doc/context/es-es/settings/account/help.html)0
-rw-r--r--doc/en/context/es-es/settings/channel/help.html (renamed from doc/context/es-es/settings/channel/help.html)0
-rw-r--r--doc/en/context/es-es/settings/features/help.html (renamed from doc/context/es-es/settings/features/help.html)0
-rw-r--r--doc/en/context/es-es/settings/tokens/help.html (renamed from doc/context/es-es/settings/tokens/help.html)0
-rw-r--r--doc/en/context/es-es/webpages/help.html (renamed from doc/context/es-es/webpages/help.html)0
-rw-r--r--doc/en/context/es-es/wiki/help.html (renamed from doc/context/es-es/wiki/help.html)0
-rw-r--r--doc/en/context/fr/admin/logs/help.html (renamed from doc/context/fr/admin/logs/help.html)0
-rw-r--r--doc/en/context/fr/admin/queue/help.html (renamed from doc/context/fr/admin/queue/help.html)0
-rw-r--r--doc/en/context/fr/appman/help.html (renamed from doc/context/fr/appman/help.html)0
-rw-r--r--doc/en/context/fr/cards/help.html (renamed from doc/context/fr/cards/help.html)0
-rw-r--r--doc/en/context/fr/channel/help.html (renamed from doc/context/fr/channel/help.html)0
-rw-r--r--doc/en/context/fr/chat/help.html (renamed from doc/context/fr/chat/help.html)0
-rw-r--r--doc/en/context/fr/cloud/help.html (renamed from doc/context/fr/cloud/help.html)0
-rw-r--r--doc/en/context/fr/connections/help.html (renamed from doc/context/fr/connections/help.html)0
-rw-r--r--doc/en/context/fr/connections/ifpending/help.html (renamed from doc/context/fr/connections/ifpending/help.html)0
-rw-r--r--doc/en/context/fr/connedit/help.html (renamed from doc/context/fr/connedit/help.html)0
-rw-r--r--doc/en/context/fr/events/help.html (renamed from doc/context/fr/events/help.html)0
-rw-r--r--doc/en/context/fr/mail/help.html (renamed from doc/context/fr/mail/help.html)0
-rw-r--r--doc/en/context/fr/photos/help.html (renamed from doc/context/fr/photos/help.html)0
-rw-r--r--doc/en/context/fr/profile/help.html (renamed from doc/context/fr/profile/help.html)0
-rw-r--r--doc/en/context/fr/settings/account/help.html (renamed from doc/context/fr/settings/account/help.html)0
-rw-r--r--doc/en/context/fr/settings/channel/help.html (renamed from doc/context/fr/settings/channel/help.html)0
-rw-r--r--doc/en/context/fr/settings/features/help.html (renamed from doc/context/fr/settings/features/help.html)0
-rw-r--r--doc/en/context/fr/settings/tokens (renamed from doc/context/fr/settings/tokens)0
-rw-r--r--doc/en/context/fr/webpages/help.html (renamed from doc/context/fr/webpages/help.html)0
-rw-r--r--doc/en/context/fr/wiki/help.html (renamed from doc/context/fr/wiki/help.html)0
-rw-r--r--doc/en/context/it/wiki/help.html (renamed from doc/context/it/wiki/help.html)0
-rw-r--r--doc/en/context/pl/admin/addons/assets/addon_repo_gui_1.png (renamed from doc/context/pl/admin/addons/assets/addon_repo_gui_1.png)bin16983 -> 16983 bytes
-rw-r--r--doc/en/context/pl/admin/addons/help.html (renamed from doc/context/pl/admin/addons/help.html)0
-rw-r--r--doc/en/context/pl/admin/logs/help.html (renamed from doc/context/pl/admin/logs/help.html)0
-rw-r--r--doc/en/context/pl/admin/queue/help.html (renamed from doc/context/pl/admin/queue/help.html)0
-rw-r--r--doc/en/context/pl/admin/security/help.html (renamed from doc/context/pl/admin/security/help.html)0
-rw-r--r--doc/en/context/pl/appman/help.html (renamed from doc/context/pl/appman/help.html)0
-rw-r--r--doc/en/context/pl/cards/help.html (renamed from doc/context/pl/cards/help.html)0
-rw-r--r--doc/en/context/pl/channel/help.html (renamed from doc/context/pl/channel/help.html)0
-rw-r--r--doc/en/context/pl/chat/help.html (renamed from doc/context/pl/chat/help.html)0
-rw-r--r--doc/en/context/pl/cloud/help.html (renamed from doc/context/pl/cloud/help.html)0
-rw-r--r--doc/en/context/pl/connections/help.html (renamed from doc/context/pl/connections/help.html)0
-rw-r--r--doc/en/context/pl/connections/ifpending/help.html (renamed from doc/context/pl/connections/ifpending/help.html)0
-rw-r--r--doc/en/context/pl/connedit/help.html (renamed from doc/context/pl/connedit/help.html)0
-rw-r--r--doc/en/context/pl/events/help.html (renamed from doc/context/pl/events/help.html)0
-rw-r--r--doc/en/context/pl/mail/help.html (renamed from doc/context/pl/mail/help.html)0
-rw-r--r--doc/en/context/pl/network/help.html (renamed from doc/context/pl/network/help.html)0
-rw-r--r--doc/en/context/pl/photos/help.html (renamed from doc/context/pl/photos/help.html)0
-rw-r--r--doc/en/context/pl/profile/help.html (renamed from doc/context/pl/profile/help.html)0
-rw-r--r--doc/en/context/pl/profiles/help.html (renamed from doc/context/pl/profiles/help.html)0
-rw-r--r--doc/en/context/pl/register/help.html (renamed from doc/context/pl/register/help.html)0
-rw-r--r--doc/en/context/pl/settings/account/help.html (renamed from doc/context/pl/settings/account/help.html)0
-rw-r--r--doc/en/context/pl/settings/channel/help.html (renamed from doc/context/pl/settings/channel/help.html)0
-rw-r--r--doc/en/context/pl/settings/features/help.html (renamed from doc/context/pl/settings/features/help.html)0
-rw-r--r--doc/en/context/pl/settings/tokens/help.html (renamed from doc/context/pl/settings/tokens/help.html)0
-rw-r--r--doc/en/context/pl/webpages/help.html (renamed from doc/context/pl/webpages/help.html)0
-rw-r--r--doc/en/context/pl/wiki/help.html (renamed from doc/context/pl/wiki/help.html)0
-rw-r--r--doc/en/context/ru/cards/help.html (renamed from doc/context/ru/cards/help.html)0
-rw-r--r--doc/en/context/ru/connections/help.html (renamed from doc/context/ru/connections/help.html)0
-rw-r--r--doc/en/context/ru/network/help.html (renamed from doc/context/ru/network/help.html)0
-rw-r--r--doc/en/database.bb (renamed from doc/database.bb)0
-rw-r--r--doc/en/database/db_abook.bb (renamed from doc/database/db_abook.bb)0
-rw-r--r--doc/en/database/db_account.bb (renamed from doc/database/db_account.bb)0
-rw-r--r--doc/en/database/db_addon.bb (renamed from doc/database/db_addon.bb)0
-rw-r--r--doc/en/database/db_app.bb (renamed from doc/database/db_app.bb)0
-rw-r--r--doc/en/database/db_attach.bb (renamed from doc/database/db_attach.bb)0
-rw-r--r--doc/en/database/db_auth_codes.bb (renamed from doc/database/db_auth_codes.bb)0
-rw-r--r--doc/en/database/db_cache.bb (renamed from doc/database/db_cache.bb)0
-rw-r--r--doc/en/database/db_channel.bb (renamed from doc/database/db_channel.bb)0
-rw-r--r--doc/en/database/db_chat.bb (renamed from doc/database/db_chat.bb)0
-rw-r--r--doc/en/database/db_chatpresence.bb (renamed from doc/database/db_chatpresence.bb)0
-rw-r--r--doc/en/database/db_chatroom.bb (renamed from doc/database/db_chatroom.bb)0
-rw-r--r--doc/en/database/db_clients.bb (renamed from doc/database/db_clients.bb)0
-rw-r--r--doc/en/database/db_config.bb (renamed from doc/database/db_config.bb)0
-rw-r--r--doc/en/database/db_conv.bb (renamed from doc/database/db_conv.bb)0
-rw-r--r--doc/en/database/db_event.bb (renamed from doc/database/db_event.bb)0
-rw-r--r--doc/en/database/db_fcontact.bb (renamed from doc/database/db_fcontact.bb)0
-rw-r--r--doc/en/database/db_ffinder.bb (renamed from doc/database/db_ffinder.bb)0
-rw-r--r--doc/en/database/db_fserver.bb (renamed from doc/database/db_fserver.bb)0
-rw-r--r--doc/en/database/db_fsuggest.bb (renamed from doc/database/db_fsuggest.bb)0
-rw-r--r--doc/en/database/db_hook.bb (renamed from doc/database/db_hook.bb)0
-rw-r--r--doc/en/database/db_hubloc.bb (renamed from doc/database/db_hubloc.bb)0
-rw-r--r--doc/en/database/db_issue.bb (renamed from doc/database/db_issue.bb)0
-rw-r--r--doc/en/database/db_item.bb (renamed from doc/database/db_item.bb)0
-rw-r--r--doc/en/database/db_item_id.bb (renamed from doc/database/db_item_id.bb)0
-rw-r--r--doc/en/database/db_likes.bb (renamed from doc/database/db_likes.bb)0
-rw-r--r--doc/en/database/db_mail.bb (renamed from doc/database/db_mail.bb)0
-rw-r--r--doc/en/database/db_menu.bb (renamed from doc/database/db_menu.bb)0
-rw-r--r--doc/en/database/db_menu_item.bb (renamed from doc/database/db_menu_item.bb)0
-rw-r--r--doc/en/database/db_notify.bb (renamed from doc/database/db_notify.bb)0
-rw-r--r--doc/en/database/db_obj.bb (renamed from doc/database/db_obj.bb)0
-rw-r--r--doc/en/database/db_outq.bb (renamed from doc/database/db_outq.bb)0
-rw-r--r--doc/en/database/db_pconfig.bb (renamed from doc/database/db_pconfig.bb)0
-rw-r--r--doc/en/database/db_pgrp.bb (renamed from doc/database/db_pgrp.bb)0
-rw-r--r--doc/en/database/db_pgrp_member.bb (renamed from doc/database/db_pgrp_member.bb)0
-rw-r--r--doc/en/database/db_photo.bb (renamed from doc/database/db_photo.bb)0
-rw-r--r--doc/en/database/db_poll.bb (renamed from doc/database/db_poll.bb)0
-rw-r--r--doc/en/database/db_poll_elm.bb (renamed from doc/database/db_poll_elm.bb)0
-rw-r--r--doc/en/database/db_profdef.bb (renamed from doc/database/db_profdef.bb)0
-rw-r--r--doc/en/database/db_profext.bb (renamed from doc/database/db_profext.bb)0
-rw-r--r--doc/en/database/db_profile.bb (renamed from doc/database/db_profile.bb)0
-rw-r--r--doc/en/database/db_profile_check.bb (renamed from doc/database/db_profile_check.bb)0
-rw-r--r--doc/en/database/db_register.bb (renamed from doc/database/db_register.bb)0
-rw-r--r--doc/en/database/db_session.bb (renamed from doc/database/db_session.bb)0
-rw-r--r--doc/en/database/db_shares.bb (renamed from doc/database/db_shares.bb)0
-rw-r--r--doc/en/database/db_sign.bb (renamed from doc/database/db_sign.bb)0
-rw-r--r--doc/en/database/db_site.bb (renamed from doc/database/db_site.bb)0
-rw-r--r--doc/en/database/db_source.bb (renamed from doc/database/db_source.bb)0
-rw-r--r--doc/en/database/db_spam.bb (renamed from doc/database/db_spam.bb)0
-rw-r--r--doc/en/database/db_sys_perms.bb (renamed from doc/database/db_sys_perms.bb)0
-rw-r--r--doc/en/database/db_term.bb (renamed from doc/database/db_term.bb)0
-rw-r--r--doc/en/database/db_tokens.bb (renamed from doc/database/db_tokens.bb)0
-rw-r--r--doc/en/database/db_updates.bb (renamed from doc/database/db_updates.bb)0
-rw-r--r--doc/en/database/db_verify.bb (renamed from doc/database/db_verify.bb)0
-rw-r--r--doc/en/database/db_vote.bb (renamed from doc/database/db_vote.bb)0
-rw-r--r--doc/en/database/db_xchan.bb (renamed from doc/database/db_xchan.bb)0
-rw-r--r--doc/en/database/db_xchat.bb (renamed from doc/database/db_xchat.bb)0
-rw-r--r--doc/en/database/db_xconfig.bb (renamed from doc/database/db_xconfig.bb)0
-rw-r--r--doc/en/database/db_xign.bb (renamed from doc/database/db_xign.bb)0
-rw-r--r--doc/en/database/db_xlink.bb (renamed from doc/database/db_xlink.bb)0
-rw-r--r--doc/en/database/db_xprof.bb (renamed from doc/database/db_xprof.bb)0
-rw-r--r--doc/en/database/db_xtag.bb (renamed from doc/database/db_xtag.bb)0
-rw-r--r--doc/en/dev-function-overview.md (renamed from doc/dev-function-overview.md)0
-rw-r--r--doc/en/dev_beginner.bb (renamed from doc/dev_beginner.bb)0
-rw-r--r--doc/en/develop.bb (renamed from doc/develop.bb)0
-rw-r--r--doc/en/developer/api_zot.bb (renamed from doc/developer/api_zot.bb)0
-rw-r--r--doc/en/developer/covenant.bb (renamed from doc/developer/covenant.bb)0
-rw-r--r--doc/en/developer/developer_guide.bb (renamed from doc/developer/developer_guide.bb)0
-rw-r--r--doc/en/developer/testing.md (renamed from doc/developer/testing.md)0
-rw-r--r--doc/en/developer/unorganized.md (renamed from doc/developer/unorganized.md)0
-rw-r--r--doc/en/developer/zot_protocol.bb (renamed from doc/developer/zot_protocol.bb)0
-rw-r--r--doc/en/developer_function_primer.bb (renamed from doc/developer_function_primer.bb)0
-rw-r--r--doc/en/developers.bb (renamed from doc/developers.bb)0
-rw-r--r--doc/en/diaspora_compat.bb (renamed from doc/diaspora_compat.bb)0
-rw-r--r--doc/en/directories.bb (renamed from doc/directories.bb)0
-rw-r--r--doc/en/dnt-policy.txt (renamed from doc/dnt-policy.txt)0
-rw-r--r--doc/en/doco.bb (renamed from doc/doco.bb)0
-rw-r--r--doc/en/encryption.bb (renamed from doc/encryption.bb)0
-rw-r--r--doc/en/external-resource-links.bb (renamed from doc/external-resource-links.bb)0
-rw-r--r--doc/en/extra_features.bb (renamed from doc/extra_features.bb)0
-rw-r--r--doc/en/faq_admins.bb (renamed from doc/faq_admins.bb)0
-rw-r--r--doc/en/feature/access_tokens.bb (renamed from doc/feature/access_tokens.bb)0
-rw-r--r--doc/en/feature/additional/access.md (renamed from doc/feature/additional/access.md)0
-rw-r--r--doc/en/feature/additional/composition.md (renamed from doc/feature/additional/composition.md)0
-rw-r--r--doc/en/feature/additional/filtering.md (renamed from doc/feature/additional/filtering.md)0
-rw-r--r--doc/en/feature/additional/general.md (renamed from doc/feature/additional/general.md)0
-rw-r--r--doc/en/feature/additional/overview.md (renamed from doc/feature/additional/overview.md)0
-rw-r--r--doc/en/feature/additional/posts.md (renamed from doc/feature/additional/posts.md)0
-rw-r--r--doc/en/federate.bb (renamed from doc/federate.bb)0
-rw-r--r--doc/en/filesync.md (renamed from doc/filesync.md)0
-rw-r--r--doc/en/first-post.bb (renamed from doc/first-post.bb)0
-rw-r--r--doc/en/gdpr1.md (renamed from doc/gdpr1.md)0
-rw-r--r--doc/en/general.bb (renamed from doc/general.bb)0
-rw-r--r--doc/en/git_for_non_developers.bb (renamed from doc/git_for_non_developers.bb)0
-rw-r--r--doc/en/hidden_configs.bb (renamed from doc/hidden_configs.bb)0
-rw-r--r--doc/en/hook/about_hook.bb (renamed from doc/hook/about_hook.bb)0
-rw-r--r--doc/en/hook/accept_follow.bb (renamed from doc/hook/accept_follow.bb)0
-rw-r--r--doc/en/hook/account_downgrade.bb (renamed from doc/hook/account_downgrade.bb)0
-rw-r--r--doc/en/hook/account_settings.bb (renamed from doc/hook/account_settings.bb)0
-rw-r--r--doc/en/hook/account_settings_post.bb (renamed from doc/hook/account_settings_post.bb)0
-rw-r--r--doc/en/hook/activity_decode_mapper.bb (renamed from doc/hook/activity_decode_mapper.bb)0
-rw-r--r--doc/en/hook/activity_filter.bb (renamed from doc/hook/activity_filter.bb)0
-rw-r--r--doc/en/hook/activity_mapper.bb (renamed from doc/hook/activity_mapper.bb)0
-rw-r--r--doc/en/hook/activity_obj_decode_mapper.bb (renamed from doc/hook/activity_obj_decode_mapper.bb)0
-rw-r--r--doc/en/hook/activity_obj_mapper.bb (renamed from doc/hook/activity_obj_mapper.bb)0
-rw-r--r--doc/en/hook/activity_order.bb (renamed from doc/hook/activity_order.bb)0
-rw-r--r--doc/en/hook/activity_received.bb (renamed from doc/hook/activity_received.bb)0
-rw-r--r--doc/en/hook/addon_app_installed_filter.bb (renamed from doc/hook/addon_app_installed_filter.bb)0
-rw-r--r--doc/en/hook/affinity_labels.bb (renamed from doc/hook/affinity_labels.bb)0
-rw-r--r--doc/en/hook/api_perm_is_allowed.bb (renamed from doc/hook/api_perm_is_allowed.bb)0
-rw-r--r--doc/en/hook/app_destroy.bb (renamed from doc/hook/app_destroy.bb)0
-rw-r--r--doc/en/hook/app_installed_filter.bb (renamed from doc/hook/app_installed_filter.bb)0
-rw-r--r--doc/en/hook/atom_author.bb (renamed from doc/hook/atom_author.bb)0
-rw-r--r--doc/en/hook/atom_entry.bb (renamed from doc/hook/atom_entry.bb)0
-rw-r--r--doc/en/hook/atom_feed.bb (renamed from doc/hook/atom_feed.bb)0
-rw-r--r--doc/en/hook/atom_feed_end.bb (renamed from doc/hook/atom_feed_end.bb)0
-rw-r--r--doc/en/hook/attach_delete.bb (renamed from doc/hook/attach_delete.bb)0
-rw-r--r--doc/en/hook/attach_upload_file.bb (renamed from doc/hook/attach_upload_file.bb)0
-rw-r--r--doc/en/hook/authenticate.bb (renamed from doc/hook/authenticate.bb)0
-rw-r--r--doc/en/hook/author_is_pmable.bb (renamed from doc/hook/author_is_pmable.bb)0
-rw-r--r--doc/en/hook/bb2diaspora.bb (renamed from doc/hook/bb2diaspora.bb)0
-rw-r--r--doc/en/hook/bbcode.bb (renamed from doc/hook/bbcode.bb)0
-rw-r--r--doc/en/hook/bbcode_filter.bb (renamed from doc/hook/bbcode_filter.bb)0
-rw-r--r--doc/en/hook/build_pagehead.bb (renamed from doc/hook/build_pagehead.bb)0
-rw-r--r--doc/en/hook/can_comment_on_post.bb (renamed from doc/hook/can_comment_on_post.bb)0
-rw-r--r--doc/en/hook/change_channel.bb (renamed from doc/hook/change_channel.bb)0
-rw-r--r--doc/en/hook/channel_links.bb (renamed from doc/hook/channel_links.bb)0
-rw-r--r--doc/en/hook/channel_remove.bb (renamed from doc/hook/channel_remove.bb)0
-rw-r--r--doc/en/hook/chat_message.bb (renamed from doc/hook/chat_message.bb)0
-rw-r--r--doc/en/hook/chat_post.bb (renamed from doc/hook/chat_post.bb)0
-rw-r--r--doc/en/hook/check_account_email.bb (renamed from doc/hook/check_account_email.bb)0
-rw-r--r--doc/en/hook/check_account_invite.bb (renamed from doc/hook/check_account_invite.bb)0
-rw-r--r--doc/en/hook/check_account_password.bb (renamed from doc/hook/check_account_password.bb)0
-rw-r--r--doc/en/hook/check_channelallowed.bb (renamed from doc/hook/check_channelallowed.bb)0
-rw-r--r--doc/en/hook/check_siteallowed.bb (renamed from doc/hook/check_siteallowed.bb)0
-rw-r--r--doc/en/hook/collect_public_recipients.bb (renamed from doc/hook/collect_public_recipients.bb)0
-rw-r--r--doc/en/hook/comments_are_now_closed.bb (renamed from doc/hook/comments_are_now_closed.bb)0
-rw-r--r--doc/en/hook/connect_premium.bb (renamed from doc/hook/connect_premium.bb)0
-rw-r--r--doc/en/hook/connection_remove.bb (renamed from doc/hook/connection_remove.bb)0
-rw-r--r--doc/en/hook/connector_settings.bb (renamed from doc/hook/connector_settings.bb)0
-rw-r--r--doc/en/hook/construct_page.bb (renamed from doc/hook/construct_page.bb)0
-rw-r--r--doc/en/hook/contact_block_end.bb (renamed from doc/hook/contact_block_end.bb)0
-rw-r--r--doc/en/hook/contact_edit.bb (renamed from doc/hook/contact_edit.bb)0
-rw-r--r--doc/en/hook/contact_edit_post.bb (renamed from doc/hook/contact_edit_post.bb)0
-rw-r--r--doc/en/hook/contact_select_options.bb (renamed from doc/hook/contact_select_options.bb)0
-rw-r--r--doc/en/hook/content_security_policy.bb (renamed from doc/hook/content_security_policy.bb)0
-rw-r--r--doc/en/hook/conversation_start.bb (renamed from doc/hook/conversation_start.bb)0
-rw-r--r--doc/en/hook/create_identity.bb (renamed from doc/hook/create_identity.bb)0
-rw-r--r--doc/en/hook/cron.bb (renamed from doc/hook/cron.bb)0
-rw-r--r--doc/en/hook/cron_daily.bb (renamed from doc/hook/cron_daily.bb)0
-rw-r--r--doc/en/hook/cron_weekly.bb (renamed from doc/hook/cron_weekly.bb)0
-rw-r--r--doc/en/hook/crypto_methods.bb (renamed from doc/hook/crypto_methods.bb)0
-rw-r--r--doc/en/hook/daemon_addon.bb (renamed from doc/hook/daemon_addon.bb)0
-rw-r--r--doc/en/hook/daemon_master_release.bb (renamed from doc/hook/daemon_master_release.bb)0
-rw-r--r--doc/en/hook/directory_item.bb (renamed from doc/hook/directory_item.bb)0
-rw-r--r--doc/en/hook/discover_channel_webfinger.bb (renamed from doc/hook/discover_channel_webfinger.bb)0
-rw-r--r--doc/en/hook/display_item.bb (renamed from doc/hook/display_item.bb)0
-rw-r--r--doc/en/hook/display_settings.bb (renamed from doc/hook/display_settings.bb)0
-rw-r--r--doc/en/hook/display_settings_post.bb (renamed from doc/hook/display_settings_post.bb)0
-rw-r--r--doc/en/hook/donate_contributors.bb (renamed from doc/hook/donate_contributors.bb)0
-rw-r--r--doc/en/hook/donate_plugin.bb (renamed from doc/hook/donate_plugin.bb)0
-rw-r--r--doc/en/hook/donate_sponsors.bb (renamed from doc/hook/donate_sponsors.bb)0
-rw-r--r--doc/en/hook/dreport_is_storable.bb (renamed from doc/hook/dreport_is_storable.bb)0
-rw-r--r--doc/en/hook/dreport_process.bb (renamed from doc/hook/dreport_process.bb)0
-rw-r--r--doc/en/hook/drop_item.bb (renamed from doc/hook/drop_item.bb)0
-rw-r--r--doc/en/hook/dropdown_extras.bb (renamed from doc/hook/dropdown_extras.bb)0
-rw-r--r--doc/en/hook/encode_object.bb (renamed from doc/hook/encode_object.bb)0
-rw-r--r--doc/en/hook/enotify.bb (renamed from doc/hook/enotify.bb)0
-rw-r--r--doc/en/hook/enotify_mail.bb (renamed from doc/hook/enotify_mail.bb)0
-rw-r--r--doc/en/hook/enotify_store.bb (renamed from doc/hook/enotify_store.bb)0
-rw-r--r--doc/en/hook/event_created.bb (renamed from doc/hook/event_created.bb)0
-rw-r--r--doc/en/hook/event_store_event.bb (renamed from doc/hook/event_store_event.bb)0
-rw-r--r--doc/en/hook/event_updated.bb (renamed from doc/hook/event_updated.bb)0
-rw-r--r--doc/en/hook/externals_url_select.bb (renamed from doc/hook/externals_url_select.bb)0
-rw-r--r--doc/en/hook/feature_enabled.bb (renamed from doc/hook/feature_enabled.bb)0
-rw-r--r--doc/en/hook/feature_settings.bb (renamed from doc/hook/feature_settings.bb)0
-rw-r--r--doc/en/hook/feature_settings_post.bb (renamed from doc/hook/feature_settings_post.bb)0
-rw-r--r--doc/en/hook/fetch_and_store.bb (renamed from doc/hook/fetch_and_store.bb)0
-rw-r--r--doc/en/hook/follow.bb (renamed from doc/hook/follow.bb)0
-rw-r--r--doc/en/hook/follow_allow.bb (renamed from doc/hook/follow_allow.bb)0
-rw-r--r--doc/en/hook/gender_selector.bb (renamed from doc/hook/gender_selector.bb)0
-rw-r--r--doc/en/hook/gender_selector_min.bb (renamed from doc/hook/gender_selector_min.bb)0
-rw-r--r--doc/en/hook/generate_map.bb (renamed from doc/hook/generate_map.bb)0
-rw-r--r--doc/en/hook/generate_named_map.bb (renamed from doc/hook/generate_named_map.bb)0
-rw-r--r--doc/en/hook/get_all_api_perms.bb (renamed from doc/hook/get_all_api_perms.bb)0
-rw-r--r--doc/en/hook/get_all_perms.bb (renamed from doc/hook/get_all_perms.bb)0
-rw-r--r--doc/en/hook/get_default_export_sections (renamed from doc/hook/get_default_export_sections)0
-rw-r--r--doc/en/hook/get_features.bb (renamed from doc/hook/get_features.bb)0
-rw-r--r--doc/en/hook/get_photo.bb (renamed from doc/hook/get_photo.bb)0
-rw-r--r--doc/en/hook/get_profile_photo.bb (renamed from doc/hook/get_profile_photo.bb)0
-rw-r--r--doc/en/hook/get_role_perms.bb (renamed from doc/hook/get_role_perms.bb)0
-rw-r--r--doc/en/hook/global_permissions.bb (renamed from doc/hook/global_permissions.bb)0
-rw-r--r--doc/en/hook/home_content.bb (renamed from doc/hook/home_content.bb)0
-rw-r--r--doc/en/hook/home_init.bb (renamed from doc/hook/home_init.bb)0
-rw-r--r--doc/en/hook/hostxrd.bb (renamed from doc/hook/hostxrd.bb)0
-rw-r--r--doc/en/hook/html2bbcode.bb (renamed from doc/hook/html2bbcode.bb)0
-rw-r--r--doc/en/hook/identity_basic_export.bb (renamed from doc/hook/identity_basic_export.bb)0
-rw-r--r--doc/en/hook/import_author_xchan.bb (renamed from doc/hook/import_author_xchan.bb)0
-rw-r--r--doc/en/hook/import_channel.bb (renamed from doc/hook/import_channel.bb)0
-rw-r--r--doc/en/hook/import_directory_profile.bb (renamed from doc/hook/import_directory_profile.bb)0
-rw-r--r--doc/en/hook/import_xchan.bb (renamed from doc/hook/import_xchan.bb)0
-rw-r--r--doc/en/hook/item_custom.bb (renamed from doc/hook/item_custom.bb)0
-rw-r--r--doc/en/hook/item_photo_menu.bb (renamed from doc/hook/item_photo_menu.bb)0
-rw-r--r--doc/en/hook/item_store.bb (renamed from doc/hook/item_store.bb)0
-rw-r--r--doc/en/hook/item_store_update.bb (renamed from doc/hook/item_store_update.bb)0
-rw-r--r--doc/en/hook/item_stored.bb (renamed from doc/hook/item_stored.bb)0
-rw-r--r--doc/en/hook/item_stored_update.bb (renamed from doc/hook/item_stored_update.bb)0
-rw-r--r--doc/en/hook/item_translate.bb (renamed from doc/hook/item_translate.bb)0
-rw-r--r--doc/en/hook/jot_header_tpl_filter.bb (renamed from doc/hook/jot_header_tpl_filter.bb)0
-rw-r--r--doc/en/hook/jot_networks.bb (renamed from doc/hook/jot_networks.bb)0
-rw-r--r--doc/en/hook/jot_tool.bb (renamed from doc/hook/jot_tool.bb)0
-rw-r--r--doc/en/hook/jot_tpl_filter.bb (renamed from doc/hook/jot_tpl_filter.bb)0
-rw-r--r--doc/en/hook/legal_webbie.bb (renamed from doc/hook/legal_webbie.bb)0
-rw-r--r--doc/en/hook/legal_webbie_text.bb (renamed from doc/hook/legal_webbie_text.bb)0
-rw-r--r--doc/en/hook/load_pdl.bb (renamed from doc/hook/load_pdl.bb)0
-rw-r--r--doc/en/hook/local_dir_update.bb (renamed from doc/hook/local_dir_update.bb)0
-rw-r--r--doc/en/hook/logged_in.bb (renamed from doc/hook/logged_in.bb)0
-rw-r--r--doc/en/hook/logger.bb (renamed from doc/hook/logger.bb)0
-rw-r--r--doc/en/hook/logging_out.bb (renamed from doc/hook/logging_out.bb)0
-rw-r--r--doc/en/hook/login_hook.bb (renamed from doc/hook/login_hook.bb)0
-rw-r--r--doc/en/hook/magic_auth.bb (renamed from doc/hook/magic_auth.bb)0
-rw-r--r--doc/en/hook/magic_auth_openid_success.bb (renamed from doc/hook/magic_auth_openid_success.bb)0
-rw-r--r--doc/en/hook/magic_auth_success.bb (renamed from doc/hook/magic_auth_success.bb)0
-rw-r--r--doc/en/hook/main_slider.bb (renamed from doc/hook/main_slider.bb)0
-rw-r--r--doc/en/hook/marital_selector.bb (renamed from doc/hook/marital_selector.bb)0
-rw-r--r--doc/en/hook/marital_selector_min.bb (renamed from doc/hook/marital_selector_min.bb)0
-rw-r--r--doc/en/hook/markdown_to_bb.bb (renamed from doc/hook/markdown_to_bb.bb)0
-rw-r--r--doc/en/hook/module_loaded.bb (renamed from doc/hook/module_loaded.bb)0
-rw-r--r--doc/en/hook/module_mod_aftercontent.bb (renamed from doc/hook/module_mod_aftercontent.bb)0
-rw-r--r--doc/en/hook/module_mod_content.bb (renamed from doc/hook/module_mod_content.bb)0
-rw-r--r--doc/en/hook/module_mod_init.bb (renamed from doc/hook/module_mod_init.bb)0
-rw-r--r--doc/en/hook/module_mod_post.bb (renamed from doc/hook/module_mod_post.bb)0
-rw-r--r--doc/en/hook/mood_verbs.bb (renamed from doc/hook/mood_verbs.bb)0
-rw-r--r--doc/en/hook/nav.bb (renamed from doc/hook/nav.bb)0
-rw-r--r--doc/en/hook/network_content_init.bb (renamed from doc/hook/network_content_init.bb)0
-rw-r--r--doc/en/hook/network_ping.bb (renamed from doc/hook/network_ping.bb)0
-rw-r--r--doc/en/hook/network_to_name.bb (renamed from doc/hook/network_to_name.bb)0
-rw-r--r--doc/en/hook/notifier_end.bb (renamed from doc/hook/notifier_end.bb)0
-rw-r--r--doc/en/hook/notifier_hub.bb (renamed from doc/hook/notifier_hub.bb)0
-rw-r--r--doc/en/hook/notifier_normal.bb (renamed from doc/hook/notifier_normal.bb)0
-rw-r--r--doc/en/hook/obj_verbs.bb (renamed from doc/hook/obj_verbs.bb)0
-rw-r--r--doc/en/hook/oembed_probe.bb (renamed from doc/hook/oembed_probe.bb)0
-rw-r--r--doc/en/hook/other_encapsulate.bb (renamed from doc/hook/other_encapsulate.bb)0
-rw-r--r--doc/en/hook/other_unencapsulate.bb (renamed from doc/hook/other_unencapsulate.bb)0
-rw-r--r--doc/en/hook/page_content_top.bb (renamed from doc/hook/page_content_top.bb)0
-rw-r--r--doc/en/hook/page_end.bb (renamed from doc/hook/page_end.bb)0
-rw-r--r--doc/en/hook/page_header.bb (renamed from doc/hook/page_header.bb)0
-rw-r--r--doc/en/hook/page_meta.bb (renamed from doc/hook/page_meta.bb)0
-rw-r--r--doc/en/hook/parse_atom.bb (renamed from doc/hook/parse_atom.bb)0
-rw-r--r--doc/en/hook/parse_link.bb (renamed from doc/hook/parse_link.bb)0
-rw-r--r--doc/en/hook/pdl_selector.bb (renamed from doc/hook/pdl_selector.bb)0
-rw-r--r--doc/en/hook/perm_is_allowed.bb (renamed from doc/hook/perm_is_allowed.bb)0
-rw-r--r--doc/en/hook/permissions_create.bb (renamed from doc/hook/permissions_create.bb)0
-rw-r--r--doc/en/hook/permissions_update.bb (renamed from doc/hook/permissions_update.bb)0
-rw-r--r--doc/en/hook/permit_hook.bb (renamed from doc/hook/permit_hook.bb)0
-rw-r--r--doc/en/hook/personal_xrd.bb (renamed from doc/hook/personal_xrd.bb)0
-rw-r--r--doc/en/hook/photo_post_end.bb (renamed from doc/hook/photo_post_end.bb)0
-rw-r--r--doc/en/hook/photo_upload_begin.bb (renamed from doc/hook/photo_upload_begin.bb)0
-rw-r--r--doc/en/hook/photo_upload_end.bb (renamed from doc/hook/photo_upload_end.bb)0
-rw-r--r--doc/en/hook/photo_upload_file.bb (renamed from doc/hook/photo_upload_file.bb)0
-rw-r--r--doc/en/hook/photo_upload_form.bb (renamed from doc/hook/photo_upload_form.bb)0
-rw-r--r--doc/en/hook/photo_view_filter.bb (renamed from doc/hook/photo_view_filter.bb)0
-rw-r--r--doc/en/hook/poke_verbs.bb (renamed from doc/hook/poke_verbs.bb)0
-rw-r--r--doc/en/hook/post_local.bb (renamed from doc/hook/post_local.bb)0
-rw-r--r--doc/en/hook/post_local_end.bb (renamed from doc/hook/post_local_end.bb)0
-rw-r--r--doc/en/hook/post_local_start.bb (renamed from doc/hook/post_local_start.bb)0
-rw-r--r--doc/en/hook/post_mail.bb (renamed from doc/hook/post_mail.bb)0
-rw-r--r--doc/en/hook/post_mail_end.bb (renamed from doc/hook/post_mail_end.bb)0
-rw-r--r--doc/en/hook/post_remote.bb (renamed from doc/hook/post_remote.bb)0
-rw-r--r--doc/en/hook/post_remote_end.bb (renamed from doc/hook/post_remote_end.bb)0
-rw-r--r--doc/en/hook/post_remote_update.bb (renamed from doc/hook/post_remote_update.bb)0
-rw-r--r--doc/en/hook/post_remote_update_end.bb (renamed from doc/hook/post_remote_update_end.bb)0
-rw-r--r--doc/en/hook/prepare_body.bb (renamed from doc/hook/prepare_body.bb)0
-rw-r--r--doc/en/hook/prepare_body_final.bb (renamed from doc/hook/prepare_body_final.bb)0
-rw-r--r--doc/en/hook/prepare_body_init.bb (renamed from doc/hook/prepare_body_init.bb)0
-rw-r--r--doc/en/hook/privacygroup_extras.bb (renamed from doc/hook/privacygroup_extras.bb)0
-rw-r--r--doc/en/hook/privacygroup_extras_drop.bb (renamed from doc/hook/privacygroup_extras_drop.bb)0
-rw-r--r--doc/en/hook/privacygroup_extras_post.bb (renamed from doc/hook/privacygroup_extras_post.bb)0
-rw-r--r--doc/en/hook/proc_run.bb (renamed from doc/hook/proc_run.bb)0
-rw-r--r--doc/en/hook/process_channel_sync_delivery.bb (renamed from doc/hook/process_channel_sync_delivery.bb)0
-rw-r--r--doc/en/hook/profile_advanced.bb (renamed from doc/hook/profile_advanced.bb)0
-rw-r--r--doc/en/hook/profile_edit.bb (renamed from doc/hook/profile_edit.bb)0
-rw-r--r--doc/en/hook/profile_photo_content_end.bb (renamed from doc/hook/profile_photo_content_end.bb)0
-rw-r--r--doc/en/hook/profile_post.bb (renamed from doc/hook/profile_post.bb)0
-rw-r--r--doc/en/hook/profile_sidebar.bb (renamed from doc/hook/profile_sidebar.bb)0
-rw-r--r--doc/en/hook/profile_sidebar_enter.bb (renamed from doc/hook/profile_sidebar_enter.bb)0
-rw-r--r--doc/en/hook/register_account.bb (renamed from doc/hook/register_account.bb)0
-rw-r--r--doc/en/hook/render_location.bb (renamed from doc/hook/render_location.bb)0
-rw-r--r--doc/en/hook/replace_macros.bb (renamed from doc/hook/replace_macros.bb)0
-rw-r--r--doc/en/hook/reverse_magic_auth.bb (renamed from doc/hook/reverse_magic_auth.bb)0
-rw-r--r--doc/en/hook/settings_form.bb (renamed from doc/hook/settings_form.bb)0
-rw-r--r--doc/en/hook/settings_post.bb (renamed from doc/hook/settings_post.bb)0
-rw-r--r--doc/en/hook/sexpref_selector.bb (renamed from doc/hook/sexpref_selector.bb)0
-rw-r--r--doc/en/hook/sexpref_selector_min.bb (renamed from doc/hook/sexpref_selector_min.bb)0
-rw-r--r--doc/en/hook/smilie.bb (renamed from doc/hook/smilie.bb)0
-rw-r--r--doc/en/hook/status_editor.bb (renamed from doc/hook/status_editor.bb)0
-rw-r--r--doc/en/hook/stream_item.bb (renamed from doc/hook/stream_item.bb)0
-rw-r--r--doc/en/hook/system_app_installed_filter.bb (renamed from doc/hook/system_app_installed_filter.bb)0
-rw-r--r--doc/en/hook/tagged.bb (renamed from doc/hook/tagged.bb)0
-rw-r--r--doc/en/hook/update_unseen.bb (renamed from doc/hook/update_unseen.bb)0
-rw-r--r--doc/en/hook/validate_channelname.bb (renamed from doc/hook/validate_channelname.bb)0
-rw-r--r--doc/en/hook/webfinger.bb (renamed from doc/hook/webfinger.bb)0
-rw-r--r--doc/en/hook/well_known.bb (renamed from doc/hook/well_known.bb)0
-rw-r--r--doc/en/hook/wiki_preprocess.bb (renamed from doc/hook/wiki_preprocess.bb)0
-rw-r--r--doc/en/hook/zid.bb (renamed from doc/hook/zid.bb)0
-rw-r--r--doc/en/hook/zid_init.bb (renamed from doc/hook/zid_init.bb)0
-rw-r--r--doc/en/hook/zot_best_algorithm.bb (renamed from doc/hook/zot_best_algorithm.bb)0
-rw-r--r--doc/en/hook/zot_finger.bb (renamed from doc/hook/zot_finger.bb)0
-rw-r--r--doc/en/hooklist.bb (renamed from doc/hooklist.bb)0
-rw-r--r--doc/en/hooks.html (renamed from doc/hooks.html)0
-rw-r--r--doc/en/intro_for_developers.bb (renamed from doc/intro_for_developers.bb)0
-rw-r--r--doc/en/macros/addons_footer.bb (renamed from doc/macros/addons_footer.bb)0
-rw-r--r--doc/en/macros/cloud_footer.bb (renamed from doc/macros/cloud_footer.bb)0
-rw-r--r--doc/en/macros/de/addons_footer.bb (renamed from doc/macros/de/addons_footer.bb)0
-rw-r--r--doc/en/macros/de/cloud_footer.bb (renamed from doc/macros/de/cloud_footer.bb)0
-rw-r--r--doc/en/macros/de/main_footer.bb (renamed from doc/macros/de/main_footer.bb)0
-rw-r--r--doc/en/macros/de/troubleshooting_footer.bb (renamed from doc/macros/de/troubleshooting_footer.bb)0
-rw-r--r--doc/en/macros/main_footer.bb (renamed from doc/macros/main_footer.bb)0
-rw-r--r--doc/en/macros/pl/addons_footer.bb (renamed from doc/macros/pl/addons_footer.bb)0
-rw-r--r--doc/en/macros/pl/cloud_footer.bb (renamed from doc/macros/pl/cloud_footer.bb)0
-rw-r--r--doc/en/macros/pl/main_footer.bb (renamed from doc/macros/pl/main_footer.bb)0
-rw-r--r--doc/en/macros/pl/troubleshooting_footer.bb (renamed from doc/macros/pl/troubleshooting_footer.bb)0
-rw-r--r--doc/en/macros/troubleshooting_footer.bb (renamed from doc/macros/troubleshooting_footer.bb)0
-rw-r--r--doc/en/member/assets/qr_text_to_post.png (renamed from doc/member/assets/qr_text_to_post.png)bin273 -> 273 bytes
-rw-r--r--doc/en/member/assets/zat_dialog.png (renamed from doc/member/assets/zat_dialog.png)bin81837 -> 81837 bytes
-rw-r--r--doc/en/member/bbcode.html (renamed from doc/member/bbcode.html)0
-rw-r--r--doc/en/member/member_faq.bb (renamed from doc/member/member_faq.bb)0
-rw-r--r--doc/en/member/member_guide.bb (renamed from doc/member/member_guide.bb)0
-rw-r--r--doc/en/plugins.bb (renamed from doc/plugins.bb)0
-rw-r--r--doc/en/problems-following-an-update.bb (renamed from doc/problems-following-an-update.bb)0
-rw-r--r--doc/en/red2pi.bb (renamed from doc/red2pi.bb)0
-rw-r--r--doc/en/roadmap.bb (renamed from doc/roadmap.bb)0
-rw-r--r--doc/en/schema_development.bb (renamed from doc/schema_development.bb)0
-rw-r--r--doc/en/schemaspy_hubzilla/zot.meta.xml (renamed from doc/schemaspy_hubzilla/zot.meta.xml)0
-rw-r--r--doc/en/sql_conventions.bb (renamed from doc/sql_conventions.bb)0
-rw-r--r--doc/en/toc.html (renamed from doc/toc.html)0
-rw-r--r--doc/en/tutorials/assets/0965ace945f0c95ae38aa5bfedd230d2a7233d3915ac15d629f9dd845854.png (renamed from doc/tutorials/assets/0965ace945f0c95ae38aa5bfedd230d2a7233d3915ac15d629f9dd845854.png)bin249151 -> 249151 bytes
-rw-r--r--doc/en/tutorials/assets/1ebe02c205962dd25035c441631745d16acdb7a44e50d148256c8ad26a67.png (renamed from doc/tutorials/assets/1ebe02c205962dd25035c441631745d16acdb7a44e50d148256c8ad26a67.png)bin293314 -> 293314 bytes
-rw-r--r--doc/en/tutorials/assets/2243e48ccea25bd907cce3dbd6fc9f7cd832a4c91a4c5dd294b7b219e7d8.png (renamed from doc/tutorials/assets/2243e48ccea25bd907cce3dbd6fc9f7cd832a4c91a4c5dd294b7b219e7d8.png)bin178913 -> 178913 bytes
-rw-r--r--doc/en/tutorials/assets/25eaad2435200f72a1dd3a00ba17a76ca6db4c246b3c4fa286b390cae7c8.png (renamed from doc/tutorials/assets/25eaad2435200f72a1dd3a00ba17a76ca6db4c246b3c4fa286b390cae7c8.png)bin43797 -> 43797 bytes
-rw-r--r--doc/en/tutorials/assets/2b539d5a8474d6ec6dc91155b628d9be5f99ab04a78108ec404f53ec7bb5.png (renamed from doc/tutorials/assets/2b539d5a8474d6ec6dc91155b628d9be5f99ab04a78108ec404f53ec7bb5.png)bin46752 -> 46752 bytes
-rw-r--r--doc/en/tutorials/assets/31f42a02bdbae095e0329db6c3814e2975979aff12f873f43d81724c5e61.png (renamed from doc/tutorials/assets/31f42a02bdbae095e0329db6c3814e2975979aff12f873f43d81724c5e61.png)bin257211 -> 257211 bytes
-rw-r--r--doc/en/tutorials/assets/324247680b605fd214fd61aecd8f216fa8f5dfa0f16a04c8e968fdbc43d0.png (renamed from doc/tutorials/assets/324247680b605fd214fd61aecd8f216fa8f5dfa0f16a04c8e968fdbc43d0.png)bin91478 -> 91478 bytes
-rw-r--r--doc/en/tutorials/assets/3656a67dce40a1fc2515e9089217f2e136d4fcf8babe77bac00ecaad43ce.png (renamed from doc/tutorials/assets/3656a67dce40a1fc2515e9089217f2e136d4fcf8babe77bac00ecaad43ce.png)bin293611 -> 293611 bytes
-rw-r--r--doc/en/tutorials/assets/458a842c2ea0fbe3b7869bb14dfffe1e5be098d1cd6e590bbead25b4cc05.png (renamed from doc/tutorials/assets/458a842c2ea0fbe3b7869bb14dfffe1e5be098d1cd6e590bbead25b4cc05.png)bin318766 -> 318766 bytes
-rw-r--r--doc/en/tutorials/assets/4aaaf1e124514c8d6999a5fe1d07be5af460cda4ba6cde9106ebc1564bb0.png (renamed from doc/tutorials/assets/4aaaf1e124514c8d6999a5fe1d07be5af460cda4ba6cde9106ebc1564bb0.png)bin298857 -> 298857 bytes
-rw-r--r--doc/en/tutorials/assets/4cf326152797a8ecdf5630e921756f825ee00f8ee464d3ef9fed971d2852.png (renamed from doc/tutorials/assets/4cf326152797a8ecdf5630e921756f825ee00f8ee464d3ef9fed971d2852.png)bin532838 -> 532838 bytes
-rw-r--r--doc/en/tutorials/assets/75d2927b7ad0d2043d4d3b6ba1364fac8ead173edd39340adaf78be11c9d.png (renamed from doc/tutorials/assets/75d2927b7ad0d2043d4d3b6ba1364fac8ead173edd39340adaf78be11c9d.png)bin137827 -> 137827 bytes
-rw-r--r--doc/en/tutorials/assets/7c976a06662a1357b3da8ed0680d1a721c85f2ae2bdd5739a8def466010e.png (renamed from doc/tutorials/assets/7c976a06662a1357b3da8ed0680d1a721c85f2ae2bdd5739a8def466010e.png)bin466641 -> 466641 bytes
-rw-r--r--doc/en/tutorials/assets/99a6efda4df631dfb2d2a849412044cc6a0f8aebeac289d28786f2649d24.png (renamed from doc/tutorials/assets/99a6efda4df631dfb2d2a849412044cc6a0f8aebeac289d28786f2649d24.png)bin240495 -> 240495 bytes
-rw-r--r--doc/en/tutorials/assets/9eae9fad774a4cd29e665961d35affbd053368056f562c58200fb41027b0.png (renamed from doc/tutorials/assets/9eae9fad774a4cd29e665961d35affbd053368056f562c58200fb41027b0.png)bin665755 -> 665755 bytes
-rw-r--r--doc/en/tutorials/assets/b0bfdf02aef3710a37bb6092c3240b291eca8afa73133b3ac03b86f3302d.png (renamed from doc/tutorials/assets/b0bfdf02aef3710a37bb6092c3240b291eca8afa73133b3ac03b86f3302d.png)bin324092 -> 324092 bytes
-rw-r--r--doc/en/tutorials/assets/b334915c03a665493915598c69c17a87c910a39db2cd3b5292e4623ea4c4.png (renamed from doc/tutorials/assets/b334915c03a665493915598c69c17a87c910a39db2cd3b5292e4623ea4c4.png)bin466584 -> 466584 bytes
-rw-r--r--doc/en/tutorials/assets/b3eece28e8db67f1024af42055f0f24ed5e81ba622aca8cac576ccf5930e.png (renamed from doc/tutorials/assets/b3eece28e8db67f1024af42055f0f24ed5e81ba622aca8cac576ccf5930e.png)bin155763 -> 155763 bytes
-rw-r--r--doc/en/tutorials/assets/bdbcf0ffd9004657237f6b7b7863da5a8e39a5bc17d2c67fa160efef2056.png (renamed from doc/tutorials/assets/bdbcf0ffd9004657237f6b7b7863da5a8e39a5bc17d2c67fa160efef2056.png)bin134643 -> 134643 bytes
-rw-r--r--doc/en/tutorials/assets/c4cad3e4c356dd2a227df79bd4dc6d47edf1b66ea243f005b6b452ec366b.png (renamed from doc/tutorials/assets/c4cad3e4c356dd2a227df79bd4dc6d47edf1b66ea243f005b6b452ec366b.png)bin306069 -> 306069 bytes
-rw-r--r--doc/en/tutorials/assets/c9a880cc82ffa1f7c2f460397bb083bf7dc2a2b8f065e64da598b45b4a2b.png (renamed from doc/tutorials/assets/c9a880cc82ffa1f7c2f460397bb083bf7dc2a2b8f065e64da598b45b4a2b.png)bin57185 -> 57185 bytes
-rw-r--r--doc/en/tutorials/assets/d080e92d797af5e863fa39b2084c16a8410de1f7a6559633435817444aef.png (renamed from doc/tutorials/assets/d080e92d797af5e863fa39b2084c16a8410de1f7a6559633435817444aef.png)bin255688 -> 255688 bytes
-rw-r--r--doc/en/tutorials/assets/e05248fdc5688d6d24bde52432fdc7b39692a094559aa504de99352940b1.png (renamed from doc/tutorials/assets/e05248fdc5688d6d24bde52432fdc7b39692a094559aa504de99352940b1.png)bin83265 -> 83265 bytes
-rw-r--r--doc/en/tutorials/assets/e5d5674a34e848e2cce90a60fc416415271d9c51b81ad2a950fb0157222a.png (renamed from doc/tutorials/assets/e5d5674a34e848e2cce90a60fc416415271d9c51b81ad2a950fb0157222a.png)bin264916 -> 264916 bytes
-rw-r--r--doc/en/tutorials/assets/ef78bc6aa3fafebd46f353514c907b3fdfe019918fc5553bb3f31388a36f.png (renamed from doc/tutorials/assets/ef78bc6aa3fafebd46f353514c907b3fdfe019918fc5553bb3f31388a36f.png)bin68194 -> 68194 bytes
-rw-r--r--doc/en/tutorials/assets/facb0bdfdecb4c779de9048cd14b417c0d76de17af476be5f296b78d70e9.png (renamed from doc/tutorials/assets/facb0bdfdecb4c779de9048cd14b417c0d76de17af476be5f296b78d70e9.png)bin99210 -> 99210 bytes
-rw-r--r--doc/en/tutorials/personal_channel.html (renamed from doc/tutorials/personal_channel.html)110
-rw-r--r--include/help.php197
-rw-r--r--tests/unit/Module/HelpTest.php188
-rw-r--r--tests/unit/Module/SetupTest.php74
-rw-r--r--tests/unit/Module/TestCase.php74
-rw-r--r--tests/unit/Widget/HelpindexTest.php80
-rw-r--r--tests/unit/includes/LanguageTest.php48
-rw-r--r--view/tpl/help.tpl8
-rw-r--r--view/tpl/widget.tpl10
547 files changed, 747 insertions, 427 deletions
diff --git a/Zotlabs/Lib/Traits/HelpHelper.php b/Zotlabs/Lib/Traits/HelpHelper.php
new file mode 100644
index 000000000..f0dca35d0
--- /dev/null
+++ b/Zotlabs/Lib/Traits/HelpHelper.php
@@ -0,0 +1,68 @@
+<?php
+
+namespace Zotlabs\Lib\Traits;
+
+use CommerceGuys\Intl\Language\LanguageRepository;
+
+trait HelpHelper {
+
+ // PHP versions before 8.2 does not support trait constants,
+ // Leave this commented out until we drop support for PHP 8.1.
+ //
+ // const VALID_FILE_EXT = ['md', 'bb', 'html'];
+
+ private string $file_name = '';
+ private string $file_type = '';
+
+ /**
+ * Determines help language.
+ *
+ * If the language was specified in the URL, override the language preference
+ * of the browser. Default to English if both of these are absent.
+ *
+ * Updates the `$lang` property of the module.
+ */
+ private function determine_help_language() {
+
+ $language_repository = new LanguageRepository;
+ $languages = $language_repository->getList();
+
+ if(array_key_exists(argv(1), $languages)) {
+ $lang = argv(1);
+ $from_url = true;
+ } else {
+ $lang = \App::$language;
+ if(! isset($lang))
+ $lang = 'en';
+
+ $from_url = false;
+ }
+
+ $this->lang = array('language' => $lang, 'from_url' => $from_url);
+ }
+
+ /**
+ * Find the full path name of the file, given it's base path and
+ * the language of the request.
+ *
+ * @param string $base_path The path of the file to find, relative to the
+ * doc root path, and without the extension.
+ */
+ private function find_help_file(string $base_path, string $lang): void {
+
+ // Use local variable until we can use trait constants.
+ $valid_file_ext = ['md', 'bb', 'html'];
+
+ $base_path = "doc/{$lang}/${base_path}";
+
+ foreach ($valid_file_ext as $ext) {
+ $path = "{$base_path}.{$ext}";
+ if (file_exists($path)) {
+ $this->file_name = $path;
+ $this->file_type = $ext;
+
+ break;
+ }
+ }
+ }
+}
diff --git a/Zotlabs/Module/Help.php b/Zotlabs/Module/Help.php
index 55ac80842..00946368f 100644
--- a/Zotlabs/Module/Help.php
+++ b/Zotlabs/Module/Help.php
@@ -1,7 +1,7 @@
<?php
namespace Zotlabs\Module;
-require_once('include/help.php');
+use Michelf\MarkdownExtra;
/**
* You can create local site resources in doc/Site.md and either link to doc/Home.md for the standard resources
@@ -14,7 +14,50 @@ require_once('include/help.php');
*/
class Help extends \Zotlabs\Web\Controller {
- function get() {
+ use \Zotlabs\Lib\Traits\HelpHelper;
+
+ private string $heading_slug = '';
+
+ /**
+ * Associative array containing the detected language.
+ */
+ public array $lang = [
+ 'language' => 'en', //! Detected language, 2-letter ISO 639-1 code ("en")
+ 'from_url' => false, //! true if language from URL overrides browser default
+ ];
+
+ /**
+ * Pre-check before processing request.
+ *
+ * Determine language requested, and ensure that a topic was requested.
+ * If no topic was requested, redirect to the about page, and abort
+ * processing.
+ */
+ public function init() {
+ $this->determine_help_language();
+
+ if (argc() === 1) {
+ goaway("/help/{$this->lang['language']}/about/about");
+ killme();
+ }
+ }
+
+ /**
+ * Process get request for the help module.
+ *
+ * Loads the correct help file from the `doc/` directory, and passes it to
+ * the help template in `view/tpl/help.tpl`.
+ *
+ * If the requested help topic does not exist for the currently selected
+ * language, a 404 status is returned instead.
+ *
+ * This function currently also handles search and serving static assets
+ * that may be used by the help files.
+ *
+ * @return string The rendered help page or a 404 page if help topic was
+ * not found.
+ */
+ public function get() {
nav_set_selected('Help');
$o = '';
@@ -81,6 +124,119 @@ class Help extends \Zotlabs\Web\Controller {
killme();
}
+ //
+ // The args to the module will be along this pattern:
+ //
+ // help/<lang>/<subdir..>/<topic>
+ //
+ // Where `<lang>` is the language which we want to fetch the topic. This
+ // element is optional, but will be used to override the browser language
+ // preference if it exists.
+ //
+ // There may be zero or more `<subdir...>` elements. If there are any
+ // present, the first subdir will be used as the slug to find the
+ // heading of the help page.
+ //
+ // The `<topic>` should be the name of a file within the given language
+ // and subdirectory tree under the `doc/` directory of the site file
+ // system. The topic is given _without_ the file extension, which will be
+ // determined by the module.
+ //
+ // The valid file extensions for help topic are:
+ //
+ // - `.md` for markdown formatted source files.
+ // - `.bb` for bbcode formatted source files.
+ // - `.html` for help topics in html format.
+ //
+
+ // Strip away the module name from the args
+ $args = array_slice(\App::$argv, 1);
+
+ // Remove language if necessary
+ //
+ // The language was determined during pre-request processing in the
+ // `init` function.
+ if ($this->lang['from_url']) {
+ array_shift($args);
+ }
+
+ // Keep the first remaining arg as the heading slug
+ $this->heading_slug = $args[0];
+
+ // Locate the file for the topic in the doc directory
+ $this->find_help_file(implode('/', $args), $this->lang['language']);
+
+ $this->set_page_title();
+
+ if (empty($this->file_name)) {
+ header($_SERVER["SERVER_PROTOCOL"] . ' 404 ' . t('Not Found'));
+ $tpl = get_markup_template("404.tpl");
+ return replace_macros($tpl, array(
+ '$message' => t('Page not found.')
+ ));
+
+ } else {
+ $tpl = get_markup_template('help.tpl');
+ return replace_macros($tpl, [ '$module' => $this ]);
+ }
+ }
+
+ public function render_content(): string {
+ return $this->render_help_file($this->file_name, $this->file_type);
+ }
+
+ public function render_help_file(string $file_name, string $file_type): string {
+ $raw_text = file_get_contents($file_name);
+
+ switch ($file_type) {
+ case 'md':
+ // We need to escape the `#include` statements in the original file,
+ // to be sure it's not rendered as a heading by markdown.
+ $raw_text = preg_replace('/#include/ism', '%%include', $raw_text);
+ $content = MarkdownExtra::defaultTransform($raw_text);
+ $content = preg_replace('/%%include/ism', '#include', $content);
+ break;
+
+ case 'bb':
+ $content = zidify_links(bbcode($raw_text));
+ break;
+
+ case 'html':
+ $content = parseIdentityAwareHTML($raw_text);
+ break;
+ }
+
+ // Replace includes with the contents of the included file
+ $content = preg_replace_callback(
+ "/#include (.*?)\;/ism",
+ function ($matches) {
+ $sub_file_type = array_pop(explode('.', $matches[1]));
+ $included_content = $this->render_help_file($matches[1], $sub_file_type);
+ return str_replace($matches[0], $included_content, $matches[0]);
+ },
+ $content
+ );
+
+ return translate_projectname($content);
+ }
+
+ public function get_page_title(): string {
+ $title = t('$Projectname Documentation');
+ $heading = $this->get_heading();
+
+ if (! empty($heading)) {
+ $title .= ': ' . $heading;
+ }
+
+ return $title;
+ }
+
+ public function get_toc_heading(): string {
+ return t('Contents');
+ }
+
+
+ private function get_heading(): string {
$headings = [
'about' => t('About'),
'member' => t('Members'),
@@ -89,21 +245,22 @@ class Help extends \Zotlabs\Web\Controller {
'tutorials' => t('Tutorials')
];
- $heading = '';
- if(array_key_exists(argv(1), $headings))
- $heading = $headings[argv(1)];
-
- $content = get_help_content();
-
- $language = determine_help_language()['language'];
-
- return replace_macros(get_markup_template('help.tpl'), array(
- '$title' => t('$Projectname Documentation'),
- '$tocHeading' => t('Contents'),
- '$content' => $content,
- '$heading' => $heading,
- '$language' => $language
- ));
+ if(array_key_exists($this->heading_slug, $headings)) {
+ return $headings[$this->heading_slug];
+ } else {
+ return '';
+ }
}
+ /**
+ * Set the page title to an unslugified version of the file name.
+ *
+ * @Note This modifies the global `App::$page['title']` property.
+ */
+ private function set_page_title(): void {
+ $title = basename($this->file_name, ".{$this->file_type}");
+ \App::$page['title'] =
+ t('Help:') . ' '
+ . ucwords(str_replace(['-', '_'],' ',notags($title)));
+ }
}
diff --git a/Zotlabs/Widget/Helpindex.php b/Zotlabs/Widget/Helpindex.php
index 63e686d3a..a7120b47f 100644
--- a/Zotlabs/Widget/Helpindex.php
+++ b/Zotlabs/Widget/Helpindex.php
@@ -1,6 +1,9 @@
<?php
-
/**
+ * Widget to show the help index.
+ *
+ * By default used by the left sidebar by the help module.
+ *
* * Name: Help index
* * Description: Help pages index
*/
@@ -9,54 +12,28 @@ namespace Zotlabs\Widget;
class Helpindex {
- function widget($arr) {
-
- require_once('include/help.php');
-
- $o = '<div class="widget">';
-
- $level_0 = get_help_content('sitetoc');
- if(! $level_0) {
- $path = 'toc';
- $x = determine_help_language();
- $lang = $x['language'];
- if($lang !== 'en') {
- $path = $lang . '/toc';
- }
- $level_0 = get_help_content($path);
- }
+ use \Zotlabs\Lib\Traits\HelpHelper;
- $level_0 = preg_replace('/\<ul(.*?)\>/','<ul class="nav nav-pills flex-column">',$level_0);
+ private string $contents = '';
- $levels = array();
+ function widget() {
+ $this->determine_help_language();
+ $this->find_help_file('toc', $this->lang['language']);
- // TODO: Implement support for translations in hierarchical table of content files
- /*
- if(argc() > 2) {
- $path = '';
- for($x = 1; $x < argc(); $x ++) {
- $path .= argv($x) . '/';
- $y = get_help_content($path . 'sitetoc');
- if(! $y)
- $y = get_help_content($path . 'toc');
- if($y)
- $levels[] = preg_replace('/\<ul(.*?)\>/','<ul class="nav nav-pills flex-column">',$y);
- }
- }
- */
-
- if($level_0)
- $o .= $level_0;
- if($levels) {
- foreach($levels as $l) {
- $o .= '<br /><br />';
- $o .= $l;
- }
+ if (! empty($this->file_name)) {
+ $this->contents = file_get_contents($this->file_name);
}
- $o .= '</div>';
+ $tpl = get_markup_template('widget.tpl');
+ return replace_macros($tpl, [ '$widget' => $this ]);
+ }
+
+ public function title(): string {
+ return t('Help Contents');
+ }
- return $o;
+ public function contents(): string {
+ return $this->contents;
}
}
diff --git a/doc/context/de/apps/edit/help.html b/doc/context/de/apps/edit/help.html
deleted file mode 100644
index 5381aeea6..000000000
--- a/doc/context/de/apps/edit/help.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<dl class="dl-horizontal">
- <dt>Allgemein</dt>
- <dd>Ändere oder lösche deine Apps mit Hilfe der Steuerknöpfe neben jedem App-Icon in der Liste.</dd>
-</dl> \ No newline at end of file
diff --git a/doc/context/de/apps/help.html b/doc/context/de/apps/help.html
deleted file mode 100644
index b63352324..000000000
--- a/doc/context/de/apps/help.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<dl class="dl-horizontal">
- <dt>Allgemein</dt>
- <dd>Diese Seite listet alle verfügbaren Apps für Deinen Kanal. Sie enthält die Core Apps wie auch die von Addons. Wenn eine App im <a href='#' onclick='contextualHelpFocus("#app-menu", 1); return false;' title="Klicke zum Öffnen...">App Menü</a> erscheinen soll, dann markiere die App in der Liste mit dem Stern.</dd>
- <dt>Apps verwalten</dt>
- <dd>Der Knopf "Apps verwalten" öffnet eine Seite, mit der Du den Namen, die Kategorie und andere Eigenschaften deiner Apps ändern kannst.</dd>
-</dl> \ No newline at end of file
diff --git a/doc/context/en/apps/edit/help.html b/doc/context/en/apps/edit/help.html
deleted file mode 100644
index 1d378f962..000000000
--- a/doc/context/en/apps/edit/help.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<dl class="dl-horizontal">
- <dt>General</dt>
- <dd>Edit or delete your apps using the control buttons beside each app icon in the list.</dd>
-</dl> \ No newline at end of file
diff --git a/doc/context/en/apps/help.html b/doc/context/en/apps/help.html
deleted file mode 100644
index ad6daade5..000000000
--- a/doc/context/en/apps/help.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<dl class="dl-horizontal">
- <dt>General</dt>
- <dd>This page shows you what apps are available to your channel, including both core apps and those supplied by addons. To add an app to the <a href='#' onclick='contextualHelpFocus("#app-menu", 1); return false;' title="Click to open...">app menu</a> "star" the app in the list below.</dd>
- <dt>Manage Apps</dt>
- <dd>Press the "Manage Apps" button to open a page where you can edit the name, categories, and other properties of your apps.</dd>
-</dl> \ No newline at end of file
diff --git a/doc/context/es-es/apps/edit/help.html b/doc/context/es-es/apps/edit/help.html
deleted file mode 100644
index 28e92328e..000000000
--- a/doc/context/es-es/apps/edit/help.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<dl class="dl-horizontal">
- <dt>General</dt>
- <dd>Modificar o eliminar sus "apps" usando el botón de control que está junto al icono de cada aplicación de la lista.</dd>
-</dl> \ No newline at end of file
diff --git a/doc/context/es-es/apps/help.html b/doc/context/es-es/apps/help.html
deleted file mode 100644
index a6bfd0093..000000000
--- a/doc/context/es-es/apps/help.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<dl class="dl-horizontal">
- <dt>General</dt>
- <dd>Esta página le muestra qué aplicaciones están disponibles para su canal, incluyendo tanto las aplicaciones principales como las proporcionadas por addons. Para añadir una aplicación al <a href=' #' onclick=' contextualHelpFocus ("#app-menu", 1); devuelve false;' title="Pulsar para abrir...">menú de aplicaciones</a> "estrelle" la aplicación de la siguiente lista.</dd>
- <dt>Gestionar las aplicaciones (apps)</dt>
- <dd>Pulse el botón "Gestionar aplicaciones" para abrir una página en la podrá editar el nombre, las categorías y otras propiedades de sus aplicaciones.</dd>
-</dl>
diff --git a/doc/context/fr/apps/edit/index.html b/doc/context/fr/apps/edit/index.html
deleted file mode 100644
index 93fd8dec6..000000000
--- a/doc/context/fr/apps/edit/index.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<dl class="dl-horizontal">
- <dt>Informations de base</dt>
- <dd>Modifiez ou supprimez vos applications à l'aide des boutons de contrôle situés à côté de chaque icône d'application dans la liste.</dd>
-</dl>
diff --git a/doc/context/fr/apps/help.html b/doc/context/fr/apps/help.html
deleted file mode 100644
index 65eb63d84..000000000
--- a/doc/context/fr/apps/help.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<dl class="dl-horizontal">
- <dt>Informations de base</dt>
- <dd>Cette page vous montre quelles applications sont disponibles pour votre canal, y compris les applications centrales et celles fournies par les greffons. Pour ajouter une application au <a href='#' onclick='contextualHelpFocus("#app-menu", 1); return false;' title="Cliquez pour ouvrir...">menu de l'application</a>, cliquez sur le bouton étoile l'application dans la liste ci-dessous.</dd>
- <dt>Gérer les applications</dt>
- <dd>Appuyez sur le bouton &laquo;Gérer les applications&raquo; pour ouvrir une page où vous pouvez éditer le nom, les catégories et autres propriétés de vos applications.
- </dd>
-</dl>
diff --git a/doc/context/pl/apps/edit/help.html b/doc/context/pl/apps/edit/help.html
deleted file mode 100644
index 42db07d17..000000000
--- a/doc/context/pl/apps/edit/help.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<dl class="dl-horizontal">
- <dt>Ogólne</dt>
- <dd>
- Edytowanie lub usuwanie aplikacje za pomocą przycisków sterowania widocznych
- na liście obok każdej ikony aplikacji.
- </dd>
-</dl> \ No newline at end of file
diff --git a/doc/context/pl/apps/help.html b/doc/context/pl/apps/help.html
deleted file mode 100644
index 7ad3bef5c..000000000
--- a/doc/context/pl/apps/help.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<dl class="dl-horizontal">
- <dt>Ogólne</dt>
- <dd>
- Ta strona pokazuje, jakie aplikacje są dostępne na Twoim kanale, w tym zarówno
- aplikacje podstawowe, jak i te dostarczane przez dodatki. Aby dodać aplikację
- do <a href = '#' onclick = 'contextualHelpFocus("# app-menu",1); return false;'
- title = "Kliknij, aby otworzyć ...">menu aplikacji</a> oznacz gwiazdką
- aplikację na poniższej liście.
- </dd>
- <dt>Zarządzanie aplikacjami</dt>
- <dd>
- Naciśnij przycisk "Zarządzaj aplikacjami", aby otworzyć stronę, na której
- możesz edytować nazwę, kategorie i inne właściwości swoich aplikacji.
- </dd>
-</dl> \ No newline at end of file
diff --git a/doc/AdvancedSearch.md b/doc/en/AdvancedSearch.md
index a67c1fc1f..a67c1fc1f 100644
--- a/doc/AdvancedSearch.md
+++ b/doc/en/AdvancedSearch.md
diff --git a/doc/Comparison-of-activity-stream-networks.md b/doc/en/Comparison-of-activity-stream-networks.md
index d76ae1006..d76ae1006 100644
--- a/doc/Comparison-of-activity-stream-networks.md
+++ b/doc/en/Comparison-of-activity-stream-networks.md
diff --git a/doc/Creating-Templates.md b/doc/en/Creating-Templates.md
index fc3f18dd3..fc3f18dd3 100644
--- a/doc/Creating-Templates.md
+++ b/doc/en/Creating-Templates.md
diff --git a/doc/DerivedTheme1.md b/doc/en/DerivedTheme1.md
index b120c628c..b120c628c 100644
--- a/doc/DerivedTheme1.md
+++ b/doc/en/DerivedTheme1.md
diff --git a/doc/Developers.md b/doc/en/Developers.md
index 624c058d2..624c058d2 100644
--- a/doc/Developers.md
+++ b/doc/en/Developers.md
diff --git a/doc/Features.md b/doc/en/Features.md
index a43fd73fa..a43fd73fa 100644
--- a/doc/Features.md
+++ b/doc/en/Features.md
diff --git a/doc/Hubzilla_on_OpenShift.bb b/doc/en/Hubzilla_on_OpenShift.bb
index 7bdd70955..7bdd70955 100644
--- a/doc/Hubzilla_on_OpenShift.bb
+++ b/doc/en/Hubzilla_on_OpenShift.bb
diff --git a/doc/Plugins.md b/doc/en/Plugins.md
index 88b42185b..88b42185b 100644
--- a/doc/Plugins.md
+++ b/doc/en/Plugins.md
diff --git a/doc/Primary-Directory.md b/doc/en/Primary-Directory.md
index 92460c346..92460c346 100644
--- a/doc/Primary-Directory.md
+++ b/doc/en/Primary-Directory.md
diff --git a/doc/Remove-Account.md b/doc/en/Remove-Account.md
index a8ef733a6..a8ef733a6 100644
--- a/doc/Remove-Account.md
+++ b/doc/en/Remove-Account.md
diff --git a/doc/Schema-development.md b/doc/en/Schema-development.md
index e811bb8c3..e811bb8c3 100644
--- a/doc/Schema-development.md
+++ b/doc/en/Schema-development.md
diff --git a/doc/TermsOfService.md b/doc/en/TermsOfService.md
index 1e085559e..1e085559e 100644
--- a/doc/TermsOfService.md
+++ b/doc/en/TermsOfService.md
diff --git a/doc/Translations.md b/doc/en/Translations.md
index 6106e43b1..6106e43b1 100644
--- a/doc/Translations.md
+++ b/doc/en/Translations.md
diff --git a/doc/Widgets.md b/doc/en/Widgets.md
index 6779d7ffd..6779d7ffd 100644
--- a/doc/Widgets.md
+++ b/doc/en/Widgets.md
diff --git a/doc/Zot---A-High-Level-Overview.md b/doc/en/Zot---A-High-Level-Overview.md
index 990ea037b..990ea037b 100644
--- a/doc/Zot---A-High-Level-Overview.md
+++ b/doc/en/Zot---A-High-Level-Overview.md
diff --git a/doc/about/about.bb b/doc/en/about/about.bb
index e909f54cd..e909f54cd 100644
--- a/doc/about/about.bb
+++ b/doc/en/about/about.bb
diff --git a/doc/about/about_hub.bb b/doc/en/about/about_hub.bb
index 0c1082f51..0c1082f51 100644
--- a/doc/about/about_hub.bb
+++ b/doc/en/about/about_hub.bb
diff --git a/doc/about/project.bb b/doc/en/about/project.bb
index fe90b4d36..fe90b4d36 100644
--- a/doc/about/project.bb
+++ b/doc/en/about/project.bb
diff --git a/doc/accounts_profiles_channels_basics.bb b/doc/en/accounts_profiles_channels_basics.bb
index 63b13f036..63b13f036 100644
--- a/doc/accounts_profiles_channels_basics.bb
+++ b/doc/en/accounts_profiles_channels_basics.bb
diff --git a/doc/acl_dialog_post.html b/doc/en/acl_dialog_post.html
index 80b2c68b6..80b2c68b6 100644
--- a/doc/acl_dialog_post.html
+++ b/doc/en/acl_dialog_post.html
diff --git a/doc/addons.bb b/doc/en/addons.bb
index 4bfa7a9fd..4bfa7a9fd 100644
--- a/doc/addons.bb
+++ b/doc/en/addons.bb
diff --git a/doc/addons_gnusocial.bb b/doc/en/addons_gnusocial.bb
index fbb387476..fbb387476 100644
--- a/doc/addons_gnusocial.bb
+++ b/doc/en/addons_gnusocial.bb
diff --git a/doc/admin/administrator_guide.md b/doc/en/admin/administrator_guide.md
index bf4dc7355..bf4dc7355 100644
--- a/doc/admin/administrator_guide.md
+++ b/doc/en/admin/administrator_guide.md
diff --git a/doc/admin/hub_snapshots.md b/doc/en/admin/hub_snapshots.md
index ab0948aa8..ab0948aa8 100644
--- a/doc/admin/hub_snapshots.md
+++ b/doc/en/admin/hub_snapshots.md
diff --git a/doc/admin/zarlog_msgs.md b/doc/en/admin/zarlog_msgs.md
index 0fe16a1e2..0fe16a1e2 100644
--- a/doc/admin/zarlog_msgs.md
+++ b/doc/en/admin/zarlog_msgs.md
diff --git a/doc/admins.bb b/doc/en/admins.bb
index 6c78ce999..6c78ce999 100644
--- a/doc/admins.bb
+++ b/doc/en/admins.bb
diff --git a/doc/api/api_albums.md b/doc/en/api/api_albums.md
index 230daae3c..230daae3c 100644
--- a/doc/api/api_albums.md
+++ b/doc/en/api/api_albums.md
diff --git a/doc/api/api_filedata.md b/doc/en/api/api_filedata.md
index 1d46a495c..1d46a495c 100644
--- a/doc/api/api_filedata.md
+++ b/doc/en/api/api_filedata.md
diff --git a/doc/api/api_files.md b/doc/en/api/api_files.md
index c2a10fce5..c2a10fce5 100644
--- a/doc/api/api_files.md
+++ b/doc/en/api/api_files.md
diff --git a/doc/api/api_functions.bb b/doc/en/api/api_functions.bb
index fe7cb11ba..fe7cb11ba 100644
--- a/doc/api/api_functions.bb
+++ b/doc/en/api/api_functions.bb
diff --git a/doc/api/api_group_members.md b/doc/en/api/api_group_members.md
index 497e0aac6..497e0aac6 100644
--- a/doc/api/api_group_members.md
+++ b/doc/en/api/api_group_members.md
diff --git a/doc/api/api_item_update.md b/doc/en/api/api_item_update.md
index cf1a28044..cf1a28044 100644
--- a/doc/api/api_item_update.md
+++ b/doc/en/api/api_item_update.md
diff --git a/doc/api/api_posting.bb b/doc/en/api/api_posting.bb
index c708ad143..c708ad143 100644
--- a/doc/api/api_posting.bb
+++ b/doc/en/api/api_posting.bb
diff --git a/doc/api/api_xchan.md b/doc/en/api/api_xchan.md
index d2b15e04c..d2b15e04c 100644
--- a/doc/api/api_xchan.md
+++ b/doc/en/api/api_xchan.md
diff --git a/doc/api/group.md b/doc/en/api/group.md
index 8829ff416..8829ff416 100644
--- a/doc/api/group.md
+++ b/doc/en/api/group.md
diff --git a/doc/api/statuses_update.bb b/doc/en/api/statuses_update.bb
index acad440de..acad440de 100644
--- a/doc/api/statuses_update.bb
+++ b/doc/en/api/statuses_update.bb
diff --git a/doc/bugs.bb b/doc/en/bugs.bb
index 3bf2a0e29..3bf2a0e29 100644
--- a/doc/bugs.bb
+++ b/doc/en/bugs.bb
diff --git a/doc/campaign.bb b/doc/en/campaign.bb
index dddc614f9..dddc614f9 100644
--- a/doc/campaign.bb
+++ b/doc/en/campaign.bb
diff --git a/doc/checking_account_quota_usage.bb b/doc/en/checking_account_quota_usage.bb
index 7612d03d8..7612d03d8 100644
--- a/doc/checking_account_quota_usage.bb
+++ b/doc/en/checking_account_quota_usage.bb
diff --git a/doc/comanche.bb b/doc/en/comanche.bb
index faf7e695e..faf7e695e 100644
--- a/doc/comanche.bb
+++ b/doc/en/comanche.bb
diff --git a/doc/context/de/admin/logs/help.html b/doc/en/context/de/admin/logs/help.html
index 1441d9075..1441d9075 100644
--- a/doc/context/de/admin/logs/help.html
+++ b/doc/en/context/de/admin/logs/help.html
diff --git a/doc/context/de/admin/queue/help.html b/doc/en/context/de/admin/queue/help.html
index e59fdcaee..e59fdcaee 100644
--- a/doc/context/de/admin/queue/help.html
+++ b/doc/en/context/de/admin/queue/help.html
diff --git a/doc/context/de/admin/security/help.html b/doc/en/context/de/admin/security/help.html
index 6465e8f0e..6465e8f0e 100644
--- a/doc/context/de/admin/security/help.html
+++ b/doc/en/context/de/admin/security/help.html
diff --git a/doc/context/de/appman/help.html b/doc/en/context/de/appman/help.html
index 888ee6206..888ee6206 100644
--- a/doc/context/de/appman/help.html
+++ b/doc/en/context/de/appman/help.html
diff --git a/doc/context/de/channel/help.html b/doc/en/context/de/channel/help.html
index fbfcac3c1..fbfcac3c1 100644
--- a/doc/context/de/channel/help.html
+++ b/doc/en/context/de/channel/help.html
diff --git a/doc/context/de/chat/help.html b/doc/en/context/de/chat/help.html
index ba355365f..ba355365f 100644
--- a/doc/context/de/chat/help.html
+++ b/doc/en/context/de/chat/help.html
diff --git a/doc/context/de/cloud/help.html b/doc/en/context/de/cloud/help.html
index e72ad1743..e72ad1743 100644
--- a/doc/context/de/cloud/help.html
+++ b/doc/en/context/de/cloud/help.html
diff --git a/doc/context/de/connections/help.html b/doc/en/context/de/connections/help.html
index 61789ea38..61789ea38 100644
--- a/doc/context/de/connections/help.html
+++ b/doc/en/context/de/connections/help.html
diff --git a/doc/context/de/connections/ifpending/help.html b/doc/en/context/de/connections/ifpending/help.html
index 3e55b34c3..3e55b34c3 100644
--- a/doc/context/de/connections/ifpending/help.html
+++ b/doc/en/context/de/connections/ifpending/help.html
diff --git a/doc/context/de/events/help.html b/doc/en/context/de/events/help.html
index b0dc95b3e..b0dc95b3e 100644
--- a/doc/context/de/events/help.html
+++ b/doc/en/context/de/events/help.html
diff --git a/doc/context/de/mail/help.html b/doc/en/context/de/mail/help.html
index b89135d8c..b89135d8c 100644
--- a/doc/context/de/mail/help.html
+++ b/doc/en/context/de/mail/help.html
diff --git a/doc/context/de/network/help.html b/doc/en/context/de/network/help.html
index 6590f597d..6590f597d 100644
--- a/doc/context/de/network/help.html
+++ b/doc/en/context/de/network/help.html
diff --git a/doc/context/de/photos/help.html b/doc/en/context/de/photos/help.html
index 437d2c369..437d2c369 100644
--- a/doc/context/de/photos/help.html
+++ b/doc/en/context/de/photos/help.html
diff --git a/doc/context/de/profile/help.html b/doc/en/context/de/profile/help.html
index ece33457d..ece33457d 100644
--- a/doc/context/de/profile/help.html
+++ b/doc/en/context/de/profile/help.html
diff --git a/doc/context/de/register/help.html b/doc/en/context/de/register/help.html
index 9ee062ee8..9ee062ee8 100644
--- a/doc/context/de/register/help.html
+++ b/doc/en/context/de/register/help.html
diff --git a/doc/context/de/settings/account/help.html b/doc/en/context/de/settings/account/help.html
index 03fc0cc14..03fc0cc14 100644
--- a/doc/context/de/settings/account/help.html
+++ b/doc/en/context/de/settings/account/help.html
diff --git a/doc/context/de/settings/channel/help.html b/doc/en/context/de/settings/channel/help.html
index 98a388f77..98a388f77 100644
--- a/doc/context/de/settings/channel/help.html
+++ b/doc/en/context/de/settings/channel/help.html
diff --git a/doc/context/de/settings/features/help.html b/doc/en/context/de/settings/features/help.html
index a019d2d60..a019d2d60 100644
--- a/doc/context/de/settings/features/help.html
+++ b/doc/en/context/de/settings/features/help.html
diff --git a/doc/context/de/settings/tokens/help.html b/doc/en/context/de/settings/tokens/help.html
index 4a7776109..4a7776109 100644
--- a/doc/context/de/settings/tokens/help.html
+++ b/doc/en/context/de/settings/tokens/help.html
diff --git a/doc/context/de/wiki/help.html b/doc/en/context/de/wiki/help.html
index e203ee221..e203ee221 100644
--- a/doc/context/de/wiki/help.html
+++ b/doc/en/context/de/wiki/help.html
diff --git a/doc/context/en/admin/addons/assets/addon_repo_gui_1.png b/doc/en/context/en/admin/addons/assets/addon_repo_gui_1.png
index 37139b345..37139b345 100644
--- a/doc/context/en/admin/addons/assets/addon_repo_gui_1.png
+++ b/doc/en/context/en/admin/addons/assets/addon_repo_gui_1.png
Binary files differ
diff --git a/doc/context/en/admin/addons/help.html b/doc/en/context/en/admin/addons/help.html
index bfb5e416a..bfb5e416a 100644
--- a/doc/context/en/admin/addons/help.html
+++ b/doc/en/context/en/admin/addons/help.html
diff --git a/doc/context/en/admin/logs/help.html b/doc/en/context/en/admin/logs/help.html
index 708ec9bde..708ec9bde 100644
--- a/doc/context/en/admin/logs/help.html
+++ b/doc/en/context/en/admin/logs/help.html
diff --git a/doc/context/en/admin/queue/help.html b/doc/en/context/en/admin/queue/help.html
index 28885a154..28885a154 100644
--- a/doc/context/en/admin/queue/help.html
+++ b/doc/en/context/en/admin/queue/help.html
diff --git a/doc/context/en/admin/security/help.html b/doc/en/context/en/admin/security/help.html
index bfe81b132..bfe81b132 100644
--- a/doc/context/en/admin/security/help.html
+++ b/doc/en/context/en/admin/security/help.html
diff --git a/doc/context/en/appman/help.html b/doc/en/context/en/appman/help.html
index 27cb03624..27cb03624 100644
--- a/doc/context/en/appman/help.html
+++ b/doc/en/context/en/appman/help.html
diff --git a/doc/context/en/cards/help.html b/doc/en/context/en/cards/help.html
index 9dbed3f97..9dbed3f97 100644
--- a/doc/context/en/cards/help.html
+++ b/doc/en/context/en/cards/help.html
diff --git a/doc/context/en/channel/help.html b/doc/en/context/en/channel/help.html
index 0c5b99754..0c5b99754 100644
--- a/doc/context/en/channel/help.html
+++ b/doc/en/context/en/channel/help.html
diff --git a/doc/context/en/chat/help.html b/doc/en/context/en/chat/help.html
index cc71686d8..cc71686d8 100644
--- a/doc/context/en/chat/help.html
+++ b/doc/en/context/en/chat/help.html
diff --git a/doc/context/en/cloud/help.html b/doc/en/context/en/cloud/help.html
index a8f193223..a8f193223 100644
--- a/doc/context/en/cloud/help.html
+++ b/doc/en/context/en/cloud/help.html
diff --git a/doc/context/en/connections/help.html b/doc/en/context/en/connections/help.html
index 0f95fde63..0f95fde63 100644
--- a/doc/context/en/connections/help.html
+++ b/doc/en/context/en/connections/help.html
diff --git a/doc/context/en/connections/ifpending/help.html b/doc/en/context/en/connections/ifpending/help.html
index 0f95fde63..0f95fde63 100644
--- a/doc/context/en/connections/ifpending/help.html
+++ b/doc/en/context/en/connections/ifpending/help.html
diff --git a/doc/context/en/connedit/help.html b/doc/en/context/en/connedit/help.html
index 9eb62ecc7..9eb62ecc7 100644
--- a/doc/context/en/connedit/help.html
+++ b/doc/en/context/en/connedit/help.html
diff --git a/doc/context/en/events/help.html b/doc/en/context/en/events/help.html
index 8c0b1d4ab..8c0b1d4ab 100644
--- a/doc/context/en/events/help.html
+++ b/doc/en/context/en/events/help.html
diff --git a/doc/context/en/mail/help.html b/doc/en/context/en/mail/help.html
index a2361a135..a2361a135 100644
--- a/doc/context/en/mail/help.html
+++ b/doc/en/context/en/mail/help.html
diff --git a/doc/context/en/network/help.html b/doc/en/context/en/network/help.html
index 53e993b69..53e993b69 100644
--- a/doc/context/en/network/help.html
+++ b/doc/en/context/en/network/help.html
diff --git a/doc/context/en/photos/help.html b/doc/en/context/en/photos/help.html
index 78b442bb4..78b442bb4 100644
--- a/doc/context/en/photos/help.html
+++ b/doc/en/context/en/photos/help.html
diff --git a/doc/context/en/profile/help.html b/doc/en/context/en/profile/help.html
index 563e0df99..563e0df99 100644
--- a/doc/context/en/profile/help.html
+++ b/doc/en/context/en/profile/help.html
diff --git a/doc/context/en/profiles/help.html b/doc/en/context/en/profiles/help.html
index 41f00fe64..41f00fe64 100644
--- a/doc/context/en/profiles/help.html
+++ b/doc/en/context/en/profiles/help.html
diff --git a/doc/context/en/register/help.html b/doc/en/context/en/register/help.html
index 9e94ab762..9e94ab762 100644
--- a/doc/context/en/register/help.html
+++ b/doc/en/context/en/register/help.html
diff --git a/doc/context/en/settings/account/help.html b/doc/en/context/en/settings/account/help.html
index 41f00fe64..41f00fe64 100644
--- a/doc/context/en/settings/account/help.html
+++ b/doc/en/context/en/settings/account/help.html
diff --git a/doc/context/en/settings/channel/help.html b/doc/en/context/en/settings/channel/help.html
index 41f00fe64..41f00fe64 100644
--- a/doc/context/en/settings/channel/help.html
+++ b/doc/en/context/en/settings/channel/help.html
diff --git a/doc/context/en/settings/features/help.html b/doc/en/context/en/settings/features/help.html
index 86e4f5dae..86e4f5dae 100644
--- a/doc/context/en/settings/features/help.html
+++ b/doc/en/context/en/settings/features/help.html
diff --git a/doc/context/en/settings/tokens/help.html b/doc/en/context/en/settings/tokens/help.html
index 6d7e6b98d..6d7e6b98d 100644
--- a/doc/context/en/settings/tokens/help.html
+++ b/doc/en/context/en/settings/tokens/help.html
diff --git a/doc/context/en/webpages/help.html b/doc/en/context/en/webpages/help.html
index a4817e4bf..a4817e4bf 100644
--- a/doc/context/en/webpages/help.html
+++ b/doc/en/context/en/webpages/help.html
diff --git a/doc/context/en/wiki/help.html b/doc/en/context/en/wiki/help.html
index 5dee85375..5dee85375 100644
--- a/doc/context/en/wiki/help.html
+++ b/doc/en/context/en/wiki/help.html
diff --git a/doc/context/es b/doc/en/context/es
index c8ba7666b..c8ba7666b 120000
--- a/doc/context/es
+++ b/doc/en/context/es
diff --git a/doc/context/es-es/admin/addons/assets/addon_repo_gui_1.png b/doc/en/context/es-es/admin/addons/assets/addon_repo_gui_1.png
index 37139b345..37139b345 100644
--- a/doc/context/es-es/admin/addons/assets/addon_repo_gui_1.png
+++ b/doc/en/context/es-es/admin/addons/assets/addon_repo_gui_1.png
Binary files differ
diff --git a/doc/context/es-es/admin/addons/help.html b/doc/en/context/es-es/admin/addons/help.html
index 49a047f5e..49a047f5e 100644
--- a/doc/context/es-es/admin/addons/help.html
+++ b/doc/en/context/es-es/admin/addons/help.html
diff --git a/doc/context/es-es/admin/logs/help.html b/doc/en/context/es-es/admin/logs/help.html
index 3a2ec413d..3a2ec413d 100644
--- a/doc/context/es-es/admin/logs/help.html
+++ b/doc/en/context/es-es/admin/logs/help.html
diff --git a/doc/context/es-es/admin/queue/help.html b/doc/en/context/es-es/admin/queue/help.html
index de9e6cdbb..de9e6cdbb 100644
--- a/doc/context/es-es/admin/queue/help.html
+++ b/doc/en/context/es-es/admin/queue/help.html
diff --git a/doc/context/es-es/admin/security/help.html b/doc/en/context/es-es/admin/security/help.html
index 229a91561..229a91561 100644
--- a/doc/context/es-es/admin/security/help.html
+++ b/doc/en/context/es-es/admin/security/help.html
diff --git a/doc/context/es-es/appman/help.html b/doc/en/context/es-es/appman/help.html
index 1b799a52b..1b799a52b 100644
--- a/doc/context/es-es/appman/help.html
+++ b/doc/en/context/es-es/appman/help.html
diff --git a/doc/context/es-es/articles/help.html b/doc/en/context/es-es/articles/help.html
index 0bf176fdd..0bf176fdd 100644
--- a/doc/context/es-es/articles/help.html
+++ b/doc/en/context/es-es/articles/help.html
diff --git a/doc/context/es-es/cards/help.html b/doc/en/context/es-es/cards/help.html
index 34889cd25..34889cd25 100644
--- a/doc/context/es-es/cards/help.html
+++ b/doc/en/context/es-es/cards/help.html
diff --git a/doc/context/es-es/channel/help.html b/doc/en/context/es-es/channel/help.html
index 682125e27..682125e27 100644
--- a/doc/context/es-es/channel/help.html
+++ b/doc/en/context/es-es/channel/help.html
diff --git a/doc/context/es-es/chat/help.html b/doc/en/context/es-es/chat/help.html
index 94df6a1d2..94df6a1d2 100644
--- a/doc/context/es-es/chat/help.html
+++ b/doc/en/context/es-es/chat/help.html
diff --git a/doc/context/es-es/cloud/help.html b/doc/en/context/es-es/cloud/help.html
index af891da17..af891da17 100644
--- a/doc/context/es-es/cloud/help.html
+++ b/doc/en/context/es-es/cloud/help.html
diff --git a/doc/context/es-es/connections/help.html b/doc/en/context/es-es/connections/help.html
index a0aa9cf32..a0aa9cf32 100644
--- a/doc/context/es-es/connections/help.html
+++ b/doc/en/context/es-es/connections/help.html
diff --git a/doc/context/es-es/connections/ifpending/help.html b/doc/en/context/es-es/connections/ifpending/help.html
index 84e547851..84e547851 100644
--- a/doc/context/es-es/connections/ifpending/help.html
+++ b/doc/en/context/es-es/connections/ifpending/help.html
diff --git a/doc/context/es-es/connedit/help.html b/doc/en/context/es-es/connedit/help.html
index e8c92ca28..e8c92ca28 100644
--- a/doc/context/es-es/connedit/help.html
+++ b/doc/en/context/es-es/connedit/help.html
diff --git a/doc/context/es-es/events/help.html b/doc/en/context/es-es/events/help.html
index b0ac1f9ea..b0ac1f9ea 100644
--- a/doc/context/es-es/events/help.html
+++ b/doc/en/context/es-es/events/help.html
diff --git a/doc/context/es-es/mail/help.html b/doc/en/context/es-es/mail/help.html
index 794af38a9..794af38a9 100644
--- a/doc/context/es-es/mail/help.html
+++ b/doc/en/context/es-es/mail/help.html
diff --git a/doc/context/es-es/network/help.html b/doc/en/context/es-es/network/help.html
index 082f52a49..082f52a49 100644
--- a/doc/context/es-es/network/help.html
+++ b/doc/en/context/es-es/network/help.html
diff --git a/doc/context/es-es/photos/help.html b/doc/en/context/es-es/photos/help.html
index 6623456eb..6623456eb 100644
--- a/doc/context/es-es/photos/help.html
+++ b/doc/en/context/es-es/photos/help.html
diff --git a/doc/context/es-es/profile/help.html b/doc/en/context/es-es/profile/help.html
index 28ff22499..28ff22499 100644
--- a/doc/context/es-es/profile/help.html
+++ b/doc/en/context/es-es/profile/help.html
diff --git a/doc/context/es-es/profiles/help.html b/doc/en/context/es-es/profiles/help.html
index 9303e049c..9303e049c 100644
--- a/doc/context/es-es/profiles/help.html
+++ b/doc/en/context/es-es/profiles/help.html
diff --git a/doc/context/es-es/settings/account/help.html b/doc/en/context/es-es/settings/account/help.html
index 9303e049c..9303e049c 100644
--- a/doc/context/es-es/settings/account/help.html
+++ b/doc/en/context/es-es/settings/account/help.html
diff --git a/doc/context/es-es/settings/channel/help.html b/doc/en/context/es-es/settings/channel/help.html
index 9303e049c..9303e049c 100644
--- a/doc/context/es-es/settings/channel/help.html
+++ b/doc/en/context/es-es/settings/channel/help.html
diff --git a/doc/context/es-es/settings/features/help.html b/doc/en/context/es-es/settings/features/help.html
index a9c3c2d6c..a9c3c2d6c 100644
--- a/doc/context/es-es/settings/features/help.html
+++ b/doc/en/context/es-es/settings/features/help.html
diff --git a/doc/context/es-es/settings/tokens/help.html b/doc/en/context/es-es/settings/tokens/help.html
index 6d6a8d81f..6d6a8d81f 100644
--- a/doc/context/es-es/settings/tokens/help.html
+++ b/doc/en/context/es-es/settings/tokens/help.html
diff --git a/doc/context/es-es/webpages/help.html b/doc/en/context/es-es/webpages/help.html
index 7cd7f7c11..7cd7f7c11 100644
--- a/doc/context/es-es/webpages/help.html
+++ b/doc/en/context/es-es/webpages/help.html
diff --git a/doc/context/es-es/wiki/help.html b/doc/en/context/es-es/wiki/help.html
index fdae1f095..fdae1f095 100644
--- a/doc/context/es-es/wiki/help.html
+++ b/doc/en/context/es-es/wiki/help.html
diff --git a/doc/context/fr/admin/logs/help.html b/doc/en/context/fr/admin/logs/help.html
index 53f8e65c3..53f8e65c3 100644
--- a/doc/context/fr/admin/logs/help.html
+++ b/doc/en/context/fr/admin/logs/help.html
diff --git a/doc/context/fr/admin/queue/help.html b/doc/en/context/fr/admin/queue/help.html
index 836d81b92..836d81b92 100644
--- a/doc/context/fr/admin/queue/help.html
+++ b/doc/en/context/fr/admin/queue/help.html
diff --git a/doc/context/fr/appman/help.html b/doc/en/context/fr/appman/help.html
index d65f78378..d65f78378 100644
--- a/doc/context/fr/appman/help.html
+++ b/doc/en/context/fr/appman/help.html
diff --git a/doc/context/fr/cards/help.html b/doc/en/context/fr/cards/help.html
index a58a9a73e..a58a9a73e 100644
--- a/doc/context/fr/cards/help.html
+++ b/doc/en/context/fr/cards/help.html
diff --git a/doc/context/fr/channel/help.html b/doc/en/context/fr/channel/help.html
index b2cf958b9..b2cf958b9 100644
--- a/doc/context/fr/channel/help.html
+++ b/doc/en/context/fr/channel/help.html
diff --git a/doc/context/fr/chat/help.html b/doc/en/context/fr/chat/help.html
index 5f354c3c6..5f354c3c6 100644
--- a/doc/context/fr/chat/help.html
+++ b/doc/en/context/fr/chat/help.html
diff --git a/doc/context/fr/cloud/help.html b/doc/en/context/fr/cloud/help.html
index c72e2ca1b..c72e2ca1b 100644
--- a/doc/context/fr/cloud/help.html
+++ b/doc/en/context/fr/cloud/help.html
diff --git a/doc/context/fr/connections/help.html b/doc/en/context/fr/connections/help.html
index 38e581866..38e581866 100644
--- a/doc/context/fr/connections/help.html
+++ b/doc/en/context/fr/connections/help.html
diff --git a/doc/context/fr/connections/ifpending/help.html b/doc/en/context/fr/connections/ifpending/help.html
index 38e581866..38e581866 100644
--- a/doc/context/fr/connections/ifpending/help.html
+++ b/doc/en/context/fr/connections/ifpending/help.html
diff --git a/doc/context/fr/connedit/help.html b/doc/en/context/fr/connedit/help.html
index c9b784d3e..c9b784d3e 100644
--- a/doc/context/fr/connedit/help.html
+++ b/doc/en/context/fr/connedit/help.html
diff --git a/doc/context/fr/events/help.html b/doc/en/context/fr/events/help.html
index aafd49703..aafd49703 100644
--- a/doc/context/fr/events/help.html
+++ b/doc/en/context/fr/events/help.html
diff --git a/doc/context/fr/mail/help.html b/doc/en/context/fr/mail/help.html
index fcf4eff21..fcf4eff21 100644
--- a/doc/context/fr/mail/help.html
+++ b/doc/en/context/fr/mail/help.html
diff --git a/doc/context/fr/photos/help.html b/doc/en/context/fr/photos/help.html
index 8609e9849..8609e9849 100644
--- a/doc/context/fr/photos/help.html
+++ b/doc/en/context/fr/photos/help.html
diff --git a/doc/context/fr/profile/help.html b/doc/en/context/fr/profile/help.html
index 26559db6f..26559db6f 100644
--- a/doc/context/fr/profile/help.html
+++ b/doc/en/context/fr/profile/help.html
diff --git a/doc/context/fr/settings/account/help.html b/doc/en/context/fr/settings/account/help.html
index ed8e7f374..ed8e7f374 100644
--- a/doc/context/fr/settings/account/help.html
+++ b/doc/en/context/fr/settings/account/help.html
diff --git a/doc/context/fr/settings/channel/help.html b/doc/en/context/fr/settings/channel/help.html
index ed8e7f374..ed8e7f374 100644
--- a/doc/context/fr/settings/channel/help.html
+++ b/doc/en/context/fr/settings/channel/help.html
diff --git a/doc/context/fr/settings/features/help.html b/doc/en/context/fr/settings/features/help.html
index 2811c932e..2811c932e 100644
--- a/doc/context/fr/settings/features/help.html
+++ b/doc/en/context/fr/settings/features/help.html
diff --git a/doc/context/fr/settings/tokens b/doc/en/context/fr/settings/tokens
index 6be17a615..6be17a615 100644
--- a/doc/context/fr/settings/tokens
+++ b/doc/en/context/fr/settings/tokens
diff --git a/doc/context/fr/webpages/help.html b/doc/en/context/fr/webpages/help.html
index c9d34c08f..c9d34c08f 100644
--- a/doc/context/fr/webpages/help.html
+++ b/doc/en/context/fr/webpages/help.html
diff --git a/doc/context/fr/wiki/help.html b/doc/en/context/fr/wiki/help.html
index af46899e4..af46899e4 100644
--- a/doc/context/fr/wiki/help.html
+++ b/doc/en/context/fr/wiki/help.html
diff --git a/doc/context/it/wiki/help.html b/doc/en/context/it/wiki/help.html
index e93e18eb4..e93e18eb4 100644
--- a/doc/context/it/wiki/help.html
+++ b/doc/en/context/it/wiki/help.html
diff --git a/doc/context/pl/admin/addons/assets/addon_repo_gui_1.png b/doc/en/context/pl/admin/addons/assets/addon_repo_gui_1.png
index 37139b345..37139b345 100644
--- a/doc/context/pl/admin/addons/assets/addon_repo_gui_1.png
+++ b/doc/en/context/pl/admin/addons/assets/addon_repo_gui_1.png
Binary files differ
diff --git a/doc/context/pl/admin/addons/help.html b/doc/en/context/pl/admin/addons/help.html
index fe63718df..fe63718df 100644
--- a/doc/context/pl/admin/addons/help.html
+++ b/doc/en/context/pl/admin/addons/help.html
diff --git a/doc/context/pl/admin/logs/help.html b/doc/en/context/pl/admin/logs/help.html
index 1d79d6a8c..1d79d6a8c 100644
--- a/doc/context/pl/admin/logs/help.html
+++ b/doc/en/context/pl/admin/logs/help.html
diff --git a/doc/context/pl/admin/queue/help.html b/doc/en/context/pl/admin/queue/help.html
index af5c06787..af5c06787 100644
--- a/doc/context/pl/admin/queue/help.html
+++ b/doc/en/context/pl/admin/queue/help.html
diff --git a/doc/context/pl/admin/security/help.html b/doc/en/context/pl/admin/security/help.html
index 0e582e6b4..0e582e6b4 100644
--- a/doc/context/pl/admin/security/help.html
+++ b/doc/en/context/pl/admin/security/help.html
diff --git a/doc/context/pl/appman/help.html b/doc/en/context/pl/appman/help.html
index 867b5b482..867b5b482 100644
--- a/doc/context/pl/appman/help.html
+++ b/doc/en/context/pl/appman/help.html
diff --git a/doc/context/pl/cards/help.html b/doc/en/context/pl/cards/help.html
index 2e9886283..2e9886283 100644
--- a/doc/context/pl/cards/help.html
+++ b/doc/en/context/pl/cards/help.html
diff --git a/doc/context/pl/channel/help.html b/doc/en/context/pl/channel/help.html
index bd454c361..bd454c361 100644
--- a/doc/context/pl/channel/help.html
+++ b/doc/en/context/pl/channel/help.html
diff --git a/doc/context/pl/chat/help.html b/doc/en/context/pl/chat/help.html
index 0cf063aa8..0cf063aa8 100644
--- a/doc/context/pl/chat/help.html
+++ b/doc/en/context/pl/chat/help.html
diff --git a/doc/context/pl/cloud/help.html b/doc/en/context/pl/cloud/help.html
index d629e6d41..d629e6d41 100644
--- a/doc/context/pl/cloud/help.html
+++ b/doc/en/context/pl/cloud/help.html
diff --git a/doc/context/pl/connections/help.html b/doc/en/context/pl/connections/help.html
index 837184334..837184334 100644
--- a/doc/context/pl/connections/help.html
+++ b/doc/en/context/pl/connections/help.html
diff --git a/doc/context/pl/connections/ifpending/help.html b/doc/en/context/pl/connections/ifpending/help.html
index b2d05947a..b2d05947a 100644
--- a/doc/context/pl/connections/ifpending/help.html
+++ b/doc/en/context/pl/connections/ifpending/help.html
diff --git a/doc/context/pl/connedit/help.html b/doc/en/context/pl/connedit/help.html
index 746908cf2..746908cf2 100644
--- a/doc/context/pl/connedit/help.html
+++ b/doc/en/context/pl/connedit/help.html
diff --git a/doc/context/pl/events/help.html b/doc/en/context/pl/events/help.html
index 542661fa5..542661fa5 100644
--- a/doc/context/pl/events/help.html
+++ b/doc/en/context/pl/events/help.html
diff --git a/doc/context/pl/mail/help.html b/doc/en/context/pl/mail/help.html
index b077aa2c4..b077aa2c4 100644
--- a/doc/context/pl/mail/help.html
+++ b/doc/en/context/pl/mail/help.html
diff --git a/doc/context/pl/network/help.html b/doc/en/context/pl/network/help.html
index f6ba75241..f6ba75241 100644
--- a/doc/context/pl/network/help.html
+++ b/doc/en/context/pl/network/help.html
diff --git a/doc/context/pl/photos/help.html b/doc/en/context/pl/photos/help.html
index e9ff7ee9d..e9ff7ee9d 100644
--- a/doc/context/pl/photos/help.html
+++ b/doc/en/context/pl/photos/help.html
diff --git a/doc/context/pl/profile/help.html b/doc/en/context/pl/profile/help.html
index 9ec5b0e73..9ec5b0e73 100644
--- a/doc/context/pl/profile/help.html
+++ b/doc/en/context/pl/profile/help.html
diff --git a/doc/context/pl/profiles/help.html b/doc/en/context/pl/profiles/help.html
index 874303908..874303908 100644
--- a/doc/context/pl/profiles/help.html
+++ b/doc/en/context/pl/profiles/help.html
diff --git a/doc/context/pl/register/help.html b/doc/en/context/pl/register/help.html
index c5c879e36..c5c879e36 100644
--- a/doc/context/pl/register/help.html
+++ b/doc/en/context/pl/register/help.html
diff --git a/doc/context/pl/settings/account/help.html b/doc/en/context/pl/settings/account/help.html
index dfe82f025..dfe82f025 100644
--- a/doc/context/pl/settings/account/help.html
+++ b/doc/en/context/pl/settings/account/help.html
diff --git a/doc/context/pl/settings/channel/help.html b/doc/en/context/pl/settings/channel/help.html
index dfe82f025..dfe82f025 100644
--- a/doc/context/pl/settings/channel/help.html
+++ b/doc/en/context/pl/settings/channel/help.html
diff --git a/doc/context/pl/settings/features/help.html b/doc/en/context/pl/settings/features/help.html
index fc5a62363..fc5a62363 100644
--- a/doc/context/pl/settings/features/help.html
+++ b/doc/en/context/pl/settings/features/help.html
diff --git a/doc/context/pl/settings/tokens/help.html b/doc/en/context/pl/settings/tokens/help.html
index 4c79841d6..4c79841d6 100644
--- a/doc/context/pl/settings/tokens/help.html
+++ b/doc/en/context/pl/settings/tokens/help.html
diff --git a/doc/context/pl/webpages/help.html b/doc/en/context/pl/webpages/help.html
index 64858fcf6..64858fcf6 100644
--- a/doc/context/pl/webpages/help.html
+++ b/doc/en/context/pl/webpages/help.html
diff --git a/doc/context/pl/wiki/help.html b/doc/en/context/pl/wiki/help.html
index 6aa6a7192..6aa6a7192 100644
--- a/doc/context/pl/wiki/help.html
+++ b/doc/en/context/pl/wiki/help.html
diff --git a/doc/context/ru/cards/help.html b/doc/en/context/ru/cards/help.html
index ccdf9d6d9..ccdf9d6d9 100644
--- a/doc/context/ru/cards/help.html
+++ b/doc/en/context/ru/cards/help.html
diff --git a/doc/context/ru/connections/help.html b/doc/en/context/ru/connections/help.html
index 6c9b9a0e9..6c9b9a0e9 100644
--- a/doc/context/ru/connections/help.html
+++ b/doc/en/context/ru/connections/help.html
diff --git a/doc/context/ru/network/help.html b/doc/en/context/ru/network/help.html
index 19b5452e2..19b5452e2 100644
--- a/doc/context/ru/network/help.html
+++ b/doc/en/context/ru/network/help.html
diff --git a/doc/database.bb b/doc/en/database.bb
index a0c1e8841..a0c1e8841 100644
--- a/doc/database.bb
+++ b/doc/en/database.bb
diff --git a/doc/database/db_abook.bb b/doc/en/database/db_abook.bb
index a346480d7..a346480d7 100644
--- a/doc/database/db_abook.bb
+++ b/doc/en/database/db_abook.bb
diff --git a/doc/database/db_account.bb b/doc/en/database/db_account.bb
index 35d7a9eb3..35d7a9eb3 100644
--- a/doc/database/db_account.bb
+++ b/doc/en/database/db_account.bb
diff --git a/doc/database/db_addon.bb b/doc/en/database/db_addon.bb
index bccd295f5..bccd295f5 100644
--- a/doc/database/db_addon.bb
+++ b/doc/en/database/db_addon.bb
diff --git a/doc/database/db_app.bb b/doc/en/database/db_app.bb
index 09df473ee..09df473ee 100644
--- a/doc/database/db_app.bb
+++ b/doc/en/database/db_app.bb
diff --git a/doc/database/db_attach.bb b/doc/en/database/db_attach.bb
index 5098401de..5098401de 100644
--- a/doc/database/db_attach.bb
+++ b/doc/en/database/db_attach.bb
diff --git a/doc/database/db_auth_codes.bb b/doc/en/database/db_auth_codes.bb
index c60f064a4..c60f064a4 100644
--- a/doc/database/db_auth_codes.bb
+++ b/doc/en/database/db_auth_codes.bb
diff --git a/doc/database/db_cache.bb b/doc/en/database/db_cache.bb
index 02c292f20..02c292f20 100644
--- a/doc/database/db_cache.bb
+++ b/doc/en/database/db_cache.bb
diff --git a/doc/database/db_channel.bb b/doc/en/database/db_channel.bb
index 518ff0978..518ff0978 100644
--- a/doc/database/db_channel.bb
+++ b/doc/en/database/db_channel.bb
diff --git a/doc/database/db_chat.bb b/doc/en/database/db_chat.bb
index 1aac2bd15..1aac2bd15 100644
--- a/doc/database/db_chat.bb
+++ b/doc/en/database/db_chat.bb
diff --git a/doc/database/db_chatpresence.bb b/doc/en/database/db_chatpresence.bb
index 0a7f666c9..0a7f666c9 100644
--- a/doc/database/db_chatpresence.bb
+++ b/doc/en/database/db_chatpresence.bb
diff --git a/doc/database/db_chatroom.bb b/doc/en/database/db_chatroom.bb
index 1d316288d..1d316288d 100644
--- a/doc/database/db_chatroom.bb
+++ b/doc/en/database/db_chatroom.bb
diff --git a/doc/database/db_clients.bb b/doc/en/database/db_clients.bb
index 0c66a4fc2..0c66a4fc2 100644
--- a/doc/database/db_clients.bb
+++ b/doc/en/database/db_clients.bb
diff --git a/doc/database/db_config.bb b/doc/en/database/db_config.bb
index f32d3c259..f32d3c259 100644
--- a/doc/database/db_config.bb
+++ b/doc/en/database/db_config.bb
diff --git a/doc/database/db_conv.bb b/doc/en/database/db_conv.bb
index 5adfa8c80..5adfa8c80 100644
--- a/doc/database/db_conv.bb
+++ b/doc/en/database/db_conv.bb
diff --git a/doc/database/db_event.bb b/doc/en/database/db_event.bb
index ad3c15789..ad3c15789 100644
--- a/doc/database/db_event.bb
+++ b/doc/en/database/db_event.bb
diff --git a/doc/database/db_fcontact.bb b/doc/en/database/db_fcontact.bb
index 9bd8c20fe..9bd8c20fe 100644
--- a/doc/database/db_fcontact.bb
+++ b/doc/en/database/db_fcontact.bb
diff --git a/doc/database/db_ffinder.bb b/doc/en/database/db_ffinder.bb
index c20158d56..c20158d56 100644
--- a/doc/database/db_ffinder.bb
+++ b/doc/en/database/db_ffinder.bb
diff --git a/doc/database/db_fserver.bb b/doc/en/database/db_fserver.bb
index 4c4b0b530..4c4b0b530 100644
--- a/doc/database/db_fserver.bb
+++ b/doc/en/database/db_fserver.bb
diff --git a/doc/database/db_fsuggest.bb b/doc/en/database/db_fsuggest.bb
index 9da1f2f6d..9da1f2f6d 100644
--- a/doc/database/db_fsuggest.bb
+++ b/doc/en/database/db_fsuggest.bb
diff --git a/doc/database/db_hook.bb b/doc/en/database/db_hook.bb
index 233062f98..233062f98 100644
--- a/doc/database/db_hook.bb
+++ b/doc/en/database/db_hook.bb
diff --git a/doc/database/db_hubloc.bb b/doc/en/database/db_hubloc.bb
index e4ab7159d..e4ab7159d 100644
--- a/doc/database/db_hubloc.bb
+++ b/doc/en/database/db_hubloc.bb
diff --git a/doc/database/db_issue.bb b/doc/en/database/db_issue.bb
index 0a6f2912b..0a6f2912b 100644
--- a/doc/database/db_issue.bb
+++ b/doc/en/database/db_issue.bb
diff --git a/doc/database/db_item.bb b/doc/en/database/db_item.bb
index 6383e13f8..6383e13f8 100644
--- a/doc/database/db_item.bb
+++ b/doc/en/database/db_item.bb
diff --git a/doc/database/db_item_id.bb b/doc/en/database/db_item_id.bb
index ba4cca247..ba4cca247 100644
--- a/doc/database/db_item_id.bb
+++ b/doc/en/database/db_item_id.bb
diff --git a/doc/database/db_likes.bb b/doc/en/database/db_likes.bb
index 118c9a87e..118c9a87e 100644
--- a/doc/database/db_likes.bb
+++ b/doc/en/database/db_likes.bb
diff --git a/doc/database/db_mail.bb b/doc/en/database/db_mail.bb
index 0628584ae..0628584ae 100644
--- a/doc/database/db_mail.bb
+++ b/doc/en/database/db_mail.bb
diff --git a/doc/database/db_menu.bb b/doc/en/database/db_menu.bb
index 5b478115d..5b478115d 100644
--- a/doc/database/db_menu.bb
+++ b/doc/en/database/db_menu.bb
diff --git a/doc/database/db_menu_item.bb b/doc/en/database/db_menu_item.bb
index b14aac5e4..b14aac5e4 100644
--- a/doc/database/db_menu_item.bb
+++ b/doc/en/database/db_menu_item.bb
diff --git a/doc/database/db_notify.bb b/doc/en/database/db_notify.bb
index 4787266cd..4787266cd 100644
--- a/doc/database/db_notify.bb
+++ b/doc/en/database/db_notify.bb
diff --git a/doc/database/db_obj.bb b/doc/en/database/db_obj.bb
index cc5e75598..cc5e75598 100644
--- a/doc/database/db_obj.bb
+++ b/doc/en/database/db_obj.bb
diff --git a/doc/database/db_outq.bb b/doc/en/database/db_outq.bb
index 970f99de5..970f99de5 100644
--- a/doc/database/db_outq.bb
+++ b/doc/en/database/db_outq.bb
diff --git a/doc/database/db_pconfig.bb b/doc/en/database/db_pconfig.bb
index 2ac36e61a..2ac36e61a 100644
--- a/doc/database/db_pconfig.bb
+++ b/doc/en/database/db_pconfig.bb
diff --git a/doc/database/db_pgrp.bb b/doc/en/database/db_pgrp.bb
index 73265b90e..73265b90e 100644
--- a/doc/database/db_pgrp.bb
+++ b/doc/en/database/db_pgrp.bb
diff --git a/doc/database/db_pgrp_member.bb b/doc/en/database/db_pgrp_member.bb
index b9ab8171d..b9ab8171d 100644
--- a/doc/database/db_pgrp_member.bb
+++ b/doc/en/database/db_pgrp_member.bb
diff --git a/doc/database/db_photo.bb b/doc/en/database/db_photo.bb
index 91840ec1e..91840ec1e 100644
--- a/doc/database/db_photo.bb
+++ b/doc/en/database/db_photo.bb
diff --git a/doc/database/db_poll.bb b/doc/en/database/db_poll.bb
index 57d808b71..57d808b71 100644
--- a/doc/database/db_poll.bb
+++ b/doc/en/database/db_poll.bb
diff --git a/doc/database/db_poll_elm.bb b/doc/en/database/db_poll_elm.bb
index fd649d5a6..fd649d5a6 100644
--- a/doc/database/db_poll_elm.bb
+++ b/doc/en/database/db_poll_elm.bb
diff --git a/doc/database/db_profdef.bb b/doc/en/database/db_profdef.bb
index a0904fd79..a0904fd79 100644
--- a/doc/database/db_profdef.bb
+++ b/doc/en/database/db_profdef.bb
diff --git a/doc/database/db_profext.bb b/doc/en/database/db_profext.bb
index ada9dce2a..ada9dce2a 100644
--- a/doc/database/db_profext.bb
+++ b/doc/en/database/db_profext.bb
diff --git a/doc/database/db_profile.bb b/doc/en/database/db_profile.bb
index 717fae585..717fae585 100644
--- a/doc/database/db_profile.bb
+++ b/doc/en/database/db_profile.bb
diff --git a/doc/database/db_profile_check.bb b/doc/en/database/db_profile_check.bb
index 3be64c5da..3be64c5da 100644
--- a/doc/database/db_profile_check.bb
+++ b/doc/en/database/db_profile_check.bb
diff --git a/doc/database/db_register.bb b/doc/en/database/db_register.bb
index 50672b5e1..50672b5e1 100644
--- a/doc/database/db_register.bb
+++ b/doc/en/database/db_register.bb
diff --git a/doc/database/db_session.bb b/doc/en/database/db_session.bb
index d7ff0482d..d7ff0482d 100644
--- a/doc/database/db_session.bb
+++ b/doc/en/database/db_session.bb
diff --git a/doc/database/db_shares.bb b/doc/en/database/db_shares.bb
index be5255c03..be5255c03 100644
--- a/doc/database/db_shares.bb
+++ b/doc/en/database/db_shares.bb
diff --git a/doc/database/db_sign.bb b/doc/en/database/db_sign.bb
index e80ea7ef3..e80ea7ef3 100644
--- a/doc/database/db_sign.bb
+++ b/doc/en/database/db_sign.bb
diff --git a/doc/database/db_site.bb b/doc/en/database/db_site.bb
index 8dea4dae6..8dea4dae6 100644
--- a/doc/database/db_site.bb
+++ b/doc/en/database/db_site.bb
diff --git a/doc/database/db_source.bb b/doc/en/database/db_source.bb
index 92850a82e..92850a82e 100644
--- a/doc/database/db_source.bb
+++ b/doc/en/database/db_source.bb
diff --git a/doc/database/db_spam.bb b/doc/en/database/db_spam.bb
index b75e1edd3..b75e1edd3 100644
--- a/doc/database/db_spam.bb
+++ b/doc/en/database/db_spam.bb
diff --git a/doc/database/db_sys_perms.bb b/doc/en/database/db_sys_perms.bb
index 04416a26b..04416a26b 100644
--- a/doc/database/db_sys_perms.bb
+++ b/doc/en/database/db_sys_perms.bb
diff --git a/doc/database/db_term.bb b/doc/en/database/db_term.bb
index bd155fe21..bd155fe21 100644
--- a/doc/database/db_term.bb
+++ b/doc/en/database/db_term.bb
diff --git a/doc/database/db_tokens.bb b/doc/en/database/db_tokens.bb
index 35da2458c..35da2458c 100644
--- a/doc/database/db_tokens.bb
+++ b/doc/en/database/db_tokens.bb
diff --git a/doc/database/db_updates.bb b/doc/en/database/db_updates.bb
index f2e25d84c..f2e25d84c 100644
--- a/doc/database/db_updates.bb
+++ b/doc/en/database/db_updates.bb
diff --git a/doc/database/db_verify.bb b/doc/en/database/db_verify.bb
index 9d01181c5..9d01181c5 100644
--- a/doc/database/db_verify.bb
+++ b/doc/en/database/db_verify.bb
diff --git a/doc/database/db_vote.bb b/doc/en/database/db_vote.bb
index 0b9a423eb..0b9a423eb 100644
--- a/doc/database/db_vote.bb
+++ b/doc/en/database/db_vote.bb
diff --git a/doc/database/db_xchan.bb b/doc/en/database/db_xchan.bb
index 8932969c5..8932969c5 100644
--- a/doc/database/db_xchan.bb
+++ b/doc/en/database/db_xchan.bb
diff --git a/doc/database/db_xchat.bb b/doc/en/database/db_xchat.bb
index 0897408d1..0897408d1 100644
--- a/doc/database/db_xchat.bb
+++ b/doc/en/database/db_xchat.bb
diff --git a/doc/database/db_xconfig.bb b/doc/en/database/db_xconfig.bb
index 111d1ce3a..111d1ce3a 100644
--- a/doc/database/db_xconfig.bb
+++ b/doc/en/database/db_xconfig.bb
diff --git a/doc/database/db_xign.bb b/doc/en/database/db_xign.bb
index 63c6569de..63c6569de 100644
--- a/doc/database/db_xign.bb
+++ b/doc/en/database/db_xign.bb
diff --git a/doc/database/db_xlink.bb b/doc/en/database/db_xlink.bb
index 528f8da19..528f8da19 100644
--- a/doc/database/db_xlink.bb
+++ b/doc/en/database/db_xlink.bb
diff --git a/doc/database/db_xprof.bb b/doc/en/database/db_xprof.bb
index bed79e9ca..bed79e9ca 100644
--- a/doc/database/db_xprof.bb
+++ b/doc/en/database/db_xprof.bb
diff --git a/doc/database/db_xtag.bb b/doc/en/database/db_xtag.bb
index 1e6fb9961..1e6fb9961 100644
--- a/doc/database/db_xtag.bb
+++ b/doc/en/database/db_xtag.bb
diff --git a/doc/dev-function-overview.md b/doc/en/dev-function-overview.md
index 4dccc8cef..4dccc8cef 100644
--- a/doc/dev-function-overview.md
+++ b/doc/en/dev-function-overview.md
diff --git a/doc/dev_beginner.bb b/doc/en/dev_beginner.bb
index 4ac69c301..4ac69c301 100644
--- a/doc/dev_beginner.bb
+++ b/doc/en/dev_beginner.bb
diff --git a/doc/develop.bb b/doc/en/develop.bb
index 20e987a5a..20e987a5a 100644
--- a/doc/develop.bb
+++ b/doc/en/develop.bb
diff --git a/doc/developer/api_zot.bb b/doc/en/developer/api_zot.bb
index ff937bfa5..ff937bfa5 100644
--- a/doc/developer/api_zot.bb
+++ b/doc/en/developer/api_zot.bb
diff --git a/doc/developer/covenant.bb b/doc/en/developer/covenant.bb
index 431cc74e9..431cc74e9 100644
--- a/doc/developer/covenant.bb
+++ b/doc/en/developer/covenant.bb
diff --git a/doc/developer/developer_guide.bb b/doc/en/developer/developer_guide.bb
index d04cec121..d04cec121 100644
--- a/doc/developer/developer_guide.bb
+++ b/doc/en/developer/developer_guide.bb
diff --git a/doc/developer/testing.md b/doc/en/developer/testing.md
index f7e8ffeba..f7e8ffeba 100644
--- a/doc/developer/testing.md
+++ b/doc/en/developer/testing.md
diff --git a/doc/developer/unorganized.md b/doc/en/developer/unorganized.md
index 5ba719226..5ba719226 100644
--- a/doc/developer/unorganized.md
+++ b/doc/en/developer/unorganized.md
diff --git a/doc/developer/zot_protocol.bb b/doc/en/developer/zot_protocol.bb
index e9355bca8..e9355bca8 100644
--- a/doc/developer/zot_protocol.bb
+++ b/doc/en/developer/zot_protocol.bb
diff --git a/doc/developer_function_primer.bb b/doc/en/developer_function_primer.bb
index f39954d73..f39954d73 100644
--- a/doc/developer_function_primer.bb
+++ b/doc/en/developer_function_primer.bb
diff --git a/doc/developers.bb b/doc/en/developers.bb
index 22dc82d7e..22dc82d7e 100644
--- a/doc/developers.bb
+++ b/doc/en/developers.bb
diff --git a/doc/diaspora_compat.bb b/doc/en/diaspora_compat.bb
index f27a63b9d..f27a63b9d 100644
--- a/doc/diaspora_compat.bb
+++ b/doc/en/diaspora_compat.bb
diff --git a/doc/directories.bb b/doc/en/directories.bb
index 60a0b624d..60a0b624d 100644
--- a/doc/directories.bb
+++ b/doc/en/directories.bb
diff --git a/doc/dnt-policy.txt b/doc/en/dnt-policy.txt
index ad946d1f8..ad946d1f8 100644
--- a/doc/dnt-policy.txt
+++ b/doc/en/dnt-policy.txt
diff --git a/doc/doco.bb b/doc/en/doco.bb
index 7ca64cfea..7ca64cfea 100644
--- a/doc/doco.bb
+++ b/doc/en/doco.bb
diff --git a/doc/encryption.bb b/doc/en/encryption.bb
index 9985f4b33..9985f4b33 100644
--- a/doc/encryption.bb
+++ b/doc/en/encryption.bb
diff --git a/doc/external-resource-links.bb b/doc/en/external-resource-links.bb
index 338db8023..338db8023 100644
--- a/doc/external-resource-links.bb
+++ b/doc/en/external-resource-links.bb
diff --git a/doc/extra_features.bb b/doc/en/extra_features.bb
index 17d85228e..17d85228e 100644
--- a/doc/extra_features.bb
+++ b/doc/en/extra_features.bb
diff --git a/doc/faq_admins.bb b/doc/en/faq_admins.bb
index 0b54a41de..0b54a41de 100644
--- a/doc/faq_admins.bb
+++ b/doc/en/faq_admins.bb
diff --git a/doc/feature/access_tokens.bb b/doc/en/feature/access_tokens.bb
index eb5c03717..eb5c03717 100644
--- a/doc/feature/access_tokens.bb
+++ b/doc/en/feature/access_tokens.bb
diff --git a/doc/feature/additional/access.md b/doc/en/feature/additional/access.md
index b7f0df717..b7f0df717 100644
--- a/doc/feature/additional/access.md
+++ b/doc/en/feature/additional/access.md
diff --git a/doc/feature/additional/composition.md b/doc/en/feature/additional/composition.md
index 1256f7501..1256f7501 100644
--- a/doc/feature/additional/composition.md
+++ b/doc/en/feature/additional/composition.md
diff --git a/doc/feature/additional/filtering.md b/doc/en/feature/additional/filtering.md
index ba8e1e29f..ba8e1e29f 100644
--- a/doc/feature/additional/filtering.md
+++ b/doc/en/feature/additional/filtering.md
diff --git a/doc/feature/additional/general.md b/doc/en/feature/additional/general.md
index a1b712b12..a1b712b12 100644
--- a/doc/feature/additional/general.md
+++ b/doc/en/feature/additional/general.md
diff --git a/doc/feature/additional/overview.md b/doc/en/feature/additional/overview.md
index b51f60bcd..b51f60bcd 100644
--- a/doc/feature/additional/overview.md
+++ b/doc/en/feature/additional/overview.md
diff --git a/doc/feature/additional/posts.md b/doc/en/feature/additional/posts.md
index d3f6b37db..d3f6b37db 100644
--- a/doc/feature/additional/posts.md
+++ b/doc/en/feature/additional/posts.md
diff --git a/doc/federate.bb b/doc/en/federate.bb
index 9137ec160..9137ec160 100644
--- a/doc/federate.bb
+++ b/doc/en/federate.bb
diff --git a/doc/filesync.md b/doc/en/filesync.md
index 4c64bdb09..4c64bdb09 100644
--- a/doc/filesync.md
+++ b/doc/en/filesync.md
diff --git a/doc/first-post.bb b/doc/en/first-post.bb
index cf6ed5b49..cf6ed5b49 100644
--- a/doc/first-post.bb
+++ b/doc/en/first-post.bb
diff --git a/doc/gdpr1.md b/doc/en/gdpr1.md
index daa401a3d..daa401a3d 100644
--- a/doc/gdpr1.md
+++ b/doc/en/gdpr1.md
diff --git a/doc/general.bb b/doc/en/general.bb
index 0b80db756..0b80db756 100644
--- a/doc/general.bb
+++ b/doc/en/general.bb
diff --git a/doc/git_for_non_developers.bb b/doc/en/git_for_non_developers.bb
index 5fba17439..5fba17439 100644
--- a/doc/git_for_non_developers.bb
+++ b/doc/en/git_for_non_developers.bb
diff --git a/doc/hidden_configs.bb b/doc/en/hidden_configs.bb
index 4eac1aa6e..4eac1aa6e 100644
--- a/doc/hidden_configs.bb
+++ b/doc/en/hidden_configs.bb
diff --git a/doc/hook/about_hook.bb b/doc/en/hook/about_hook.bb
index 22b60d786..22b60d786 100644
--- a/doc/hook/about_hook.bb
+++ b/doc/en/hook/about_hook.bb
diff --git a/doc/hook/accept_follow.bb b/doc/en/hook/accept_follow.bb
index e8b1ed0c4..e8b1ed0c4 100644
--- a/doc/hook/accept_follow.bb
+++ b/doc/en/hook/accept_follow.bb
diff --git a/doc/hook/account_downgrade.bb b/doc/en/hook/account_downgrade.bb
index 63bae0a58..63bae0a58 100644
--- a/doc/hook/account_downgrade.bb
+++ b/doc/en/hook/account_downgrade.bb
diff --git a/doc/hook/account_settings.bb b/doc/en/hook/account_settings.bb
index 91b3a8385..91b3a8385 100644
--- a/doc/hook/account_settings.bb
+++ b/doc/en/hook/account_settings.bb
diff --git a/doc/hook/account_settings_post.bb b/doc/en/hook/account_settings_post.bb
index bbd7a57a8..bbd7a57a8 100644
--- a/doc/hook/account_settings_post.bb
+++ b/doc/en/hook/account_settings_post.bb
diff --git a/doc/hook/activity_decode_mapper.bb b/doc/en/hook/activity_decode_mapper.bb
index 43d08a136..43d08a136 100644
--- a/doc/hook/activity_decode_mapper.bb
+++ b/doc/en/hook/activity_decode_mapper.bb
diff --git a/doc/hook/activity_filter.bb b/doc/en/hook/activity_filter.bb
index 9d0768577..9d0768577 100644
--- a/doc/hook/activity_filter.bb
+++ b/doc/en/hook/activity_filter.bb
diff --git a/doc/hook/activity_mapper.bb b/doc/en/hook/activity_mapper.bb
index db65fadc4..db65fadc4 100644
--- a/doc/hook/activity_mapper.bb
+++ b/doc/en/hook/activity_mapper.bb
diff --git a/doc/hook/activity_obj_decode_mapper.bb b/doc/en/hook/activity_obj_decode_mapper.bb
index a96b32eee..a96b32eee 100644
--- a/doc/hook/activity_obj_decode_mapper.bb
+++ b/doc/en/hook/activity_obj_decode_mapper.bb
diff --git a/doc/hook/activity_obj_mapper.bb b/doc/en/hook/activity_obj_mapper.bb
index 7c14a1b81..7c14a1b81 100644
--- a/doc/hook/activity_obj_mapper.bb
+++ b/doc/en/hook/activity_obj_mapper.bb
diff --git a/doc/hook/activity_order.bb b/doc/en/hook/activity_order.bb
index 4a4670d03..4a4670d03 100644
--- a/doc/hook/activity_order.bb
+++ b/doc/en/hook/activity_order.bb
diff --git a/doc/hook/activity_received.bb b/doc/en/hook/activity_received.bb
index 2e9d68bf3..2e9d68bf3 100644
--- a/doc/hook/activity_received.bb
+++ b/doc/en/hook/activity_received.bb
diff --git a/doc/hook/addon_app_installed_filter.bb b/doc/en/hook/addon_app_installed_filter.bb
index e610b3205..e610b3205 100644
--- a/doc/hook/addon_app_installed_filter.bb
+++ b/doc/en/hook/addon_app_installed_filter.bb
diff --git a/doc/hook/affinity_labels.bb b/doc/en/hook/affinity_labels.bb
index 7234b7632..7234b7632 100644
--- a/doc/hook/affinity_labels.bb
+++ b/doc/en/hook/affinity_labels.bb
diff --git a/doc/hook/api_perm_is_allowed.bb b/doc/en/hook/api_perm_is_allowed.bb
index 862cbd653..862cbd653 100644
--- a/doc/hook/api_perm_is_allowed.bb
+++ b/doc/en/hook/api_perm_is_allowed.bb
diff --git a/doc/hook/app_destroy.bb b/doc/en/hook/app_destroy.bb
index 386d7af16..386d7af16 100644
--- a/doc/hook/app_destroy.bb
+++ b/doc/en/hook/app_destroy.bb
diff --git a/doc/hook/app_installed_filter.bb b/doc/en/hook/app_installed_filter.bb
index f0d91d6f0..f0d91d6f0 100644
--- a/doc/hook/app_installed_filter.bb
+++ b/doc/en/hook/app_installed_filter.bb
diff --git a/doc/hook/atom_author.bb b/doc/en/hook/atom_author.bb
index c9d05a593..c9d05a593 100644
--- a/doc/hook/atom_author.bb
+++ b/doc/en/hook/atom_author.bb
diff --git a/doc/hook/atom_entry.bb b/doc/en/hook/atom_entry.bb
index 0aec89f16..0aec89f16 100644
--- a/doc/hook/atom_entry.bb
+++ b/doc/en/hook/atom_entry.bb
diff --git a/doc/hook/atom_feed.bb b/doc/en/hook/atom_feed.bb
index 69775ca5e..69775ca5e 100644
--- a/doc/hook/atom_feed.bb
+++ b/doc/en/hook/atom_feed.bb
diff --git a/doc/hook/atom_feed_end.bb b/doc/en/hook/atom_feed_end.bb
index 4f019fc8f..4f019fc8f 100644
--- a/doc/hook/atom_feed_end.bb
+++ b/doc/en/hook/atom_feed_end.bb
diff --git a/doc/hook/attach_delete.bb b/doc/en/hook/attach_delete.bb
index 3b63f28d3..3b63f28d3 100644
--- a/doc/hook/attach_delete.bb
+++ b/doc/en/hook/attach_delete.bb
diff --git a/doc/hook/attach_upload_file.bb b/doc/en/hook/attach_upload_file.bb
index 1f8056caa..1f8056caa 100644
--- a/doc/hook/attach_upload_file.bb
+++ b/doc/en/hook/attach_upload_file.bb
diff --git a/doc/hook/authenticate.bb b/doc/en/hook/authenticate.bb
index eb8071e73..eb8071e73 100644
--- a/doc/hook/authenticate.bb
+++ b/doc/en/hook/authenticate.bb
diff --git a/doc/hook/author_is_pmable.bb b/doc/en/hook/author_is_pmable.bb
index 11d1185f3..11d1185f3 100644
--- a/doc/hook/author_is_pmable.bb
+++ b/doc/en/hook/author_is_pmable.bb
diff --git a/doc/hook/bb2diaspora.bb b/doc/en/hook/bb2diaspora.bb
index c28f1883e..c28f1883e 100644
--- a/doc/hook/bb2diaspora.bb
+++ b/doc/en/hook/bb2diaspora.bb
diff --git a/doc/hook/bbcode.bb b/doc/en/hook/bbcode.bb
index f6b8711b0..f6b8711b0 100644
--- a/doc/hook/bbcode.bb
+++ b/doc/en/hook/bbcode.bb
diff --git a/doc/hook/bbcode_filter.bb b/doc/en/hook/bbcode_filter.bb
index efeb2e1b0..efeb2e1b0 100644
--- a/doc/hook/bbcode_filter.bb
+++ b/doc/en/hook/bbcode_filter.bb
diff --git a/doc/hook/build_pagehead.bb b/doc/en/hook/build_pagehead.bb
index 8fc3486c7..8fc3486c7 100644
--- a/doc/hook/build_pagehead.bb
+++ b/doc/en/hook/build_pagehead.bb
diff --git a/doc/hook/can_comment_on_post.bb b/doc/en/hook/can_comment_on_post.bb
index 2cfd3b2da..2cfd3b2da 100644
--- a/doc/hook/can_comment_on_post.bb
+++ b/doc/en/hook/can_comment_on_post.bb
diff --git a/doc/hook/change_channel.bb b/doc/en/hook/change_channel.bb
index 4514b9265..4514b9265 100644
--- a/doc/hook/change_channel.bb
+++ b/doc/en/hook/change_channel.bb
diff --git a/doc/hook/channel_links.bb b/doc/en/hook/channel_links.bb
index c0243dac6..c0243dac6 100644
--- a/doc/hook/channel_links.bb
+++ b/doc/en/hook/channel_links.bb
diff --git a/doc/hook/channel_remove.bb b/doc/en/hook/channel_remove.bb
index db9e9dd82..db9e9dd82 100644
--- a/doc/hook/channel_remove.bb
+++ b/doc/en/hook/channel_remove.bb
diff --git a/doc/hook/chat_message.bb b/doc/en/hook/chat_message.bb
index ccc93bb2c..ccc93bb2c 100644
--- a/doc/hook/chat_message.bb
+++ b/doc/en/hook/chat_message.bb
diff --git a/doc/hook/chat_post.bb b/doc/en/hook/chat_post.bb
index 7cb3c9fa1..7cb3c9fa1 100644
--- a/doc/hook/chat_post.bb
+++ b/doc/en/hook/chat_post.bb
diff --git a/doc/hook/check_account_email.bb b/doc/en/hook/check_account_email.bb
index b309706a0..b309706a0 100644
--- a/doc/hook/check_account_email.bb
+++ b/doc/en/hook/check_account_email.bb
diff --git a/doc/hook/check_account_invite.bb b/doc/en/hook/check_account_invite.bb
index 8d4a40522..8d4a40522 100644
--- a/doc/hook/check_account_invite.bb
+++ b/doc/en/hook/check_account_invite.bb
diff --git a/doc/hook/check_account_password.bb b/doc/en/hook/check_account_password.bb
index ce5202f48..ce5202f48 100644
--- a/doc/hook/check_account_password.bb
+++ b/doc/en/hook/check_account_password.bb
diff --git a/doc/hook/check_channelallowed.bb b/doc/en/hook/check_channelallowed.bb
index e7559c92f..e7559c92f 100644
--- a/doc/hook/check_channelallowed.bb
+++ b/doc/en/hook/check_channelallowed.bb
diff --git a/doc/hook/check_siteallowed.bb b/doc/en/hook/check_siteallowed.bb
index 28134cbd2..28134cbd2 100644
--- a/doc/hook/check_siteallowed.bb
+++ b/doc/en/hook/check_siteallowed.bb
diff --git a/doc/hook/collect_public_recipients.bb b/doc/en/hook/collect_public_recipients.bb
index de3f4049e..de3f4049e 100644
--- a/doc/hook/collect_public_recipients.bb
+++ b/doc/en/hook/collect_public_recipients.bb
diff --git a/doc/hook/comments_are_now_closed.bb b/doc/en/hook/comments_are_now_closed.bb
index 4d3baa95a..4d3baa95a 100644
--- a/doc/hook/comments_are_now_closed.bb
+++ b/doc/en/hook/comments_are_now_closed.bb
diff --git a/doc/hook/connect_premium.bb b/doc/en/hook/connect_premium.bb
index ae3aafc66..ae3aafc66 100644
--- a/doc/hook/connect_premium.bb
+++ b/doc/en/hook/connect_premium.bb
diff --git a/doc/hook/connection_remove.bb b/doc/en/hook/connection_remove.bb
index bd13ae5f2..bd13ae5f2 100644
--- a/doc/hook/connection_remove.bb
+++ b/doc/en/hook/connection_remove.bb
diff --git a/doc/hook/connector_settings.bb b/doc/en/hook/connector_settings.bb
index 9b59c49da..9b59c49da 100644
--- a/doc/hook/connector_settings.bb
+++ b/doc/en/hook/connector_settings.bb
diff --git a/doc/hook/construct_page.bb b/doc/en/hook/construct_page.bb
index 700d9256f..700d9256f 100644
--- a/doc/hook/construct_page.bb
+++ b/doc/en/hook/construct_page.bb
diff --git a/doc/hook/contact_block_end.bb b/doc/en/hook/contact_block_end.bb
index 30a7d2d76..30a7d2d76 100644
--- a/doc/hook/contact_block_end.bb
+++ b/doc/en/hook/contact_block_end.bb
diff --git a/doc/hook/contact_edit.bb b/doc/en/hook/contact_edit.bb
index 5fd31fb1d..5fd31fb1d 100644
--- a/doc/hook/contact_edit.bb
+++ b/doc/en/hook/contact_edit.bb
diff --git a/doc/hook/contact_edit_post.bb b/doc/en/hook/contact_edit_post.bb
index bc736f8b8..bc736f8b8 100644
--- a/doc/hook/contact_edit_post.bb
+++ b/doc/en/hook/contact_edit_post.bb
diff --git a/doc/hook/contact_select_options.bb b/doc/en/hook/contact_select_options.bb
index 65f9154ff..65f9154ff 100644
--- a/doc/hook/contact_select_options.bb
+++ b/doc/en/hook/contact_select_options.bb
diff --git a/doc/hook/content_security_policy.bb b/doc/en/hook/content_security_policy.bb
index 96b8095ae..96b8095ae 100644
--- a/doc/hook/content_security_policy.bb
+++ b/doc/en/hook/content_security_policy.bb
diff --git a/doc/hook/conversation_start.bb b/doc/en/hook/conversation_start.bb
index 7208c8d8f..7208c8d8f 100644
--- a/doc/hook/conversation_start.bb
+++ b/doc/en/hook/conversation_start.bb
diff --git a/doc/hook/create_identity.bb b/doc/en/hook/create_identity.bb
index 5c1da2d43..5c1da2d43 100644
--- a/doc/hook/create_identity.bb
+++ b/doc/en/hook/create_identity.bb
diff --git a/doc/hook/cron.bb b/doc/en/hook/cron.bb
index 55120b6c2..55120b6c2 100644
--- a/doc/hook/cron.bb
+++ b/doc/en/hook/cron.bb
diff --git a/doc/hook/cron_daily.bb b/doc/en/hook/cron_daily.bb
index 802bea5e4..802bea5e4 100644
--- a/doc/hook/cron_daily.bb
+++ b/doc/en/hook/cron_daily.bb
diff --git a/doc/hook/cron_weekly.bb b/doc/en/hook/cron_weekly.bb
index c01bf9611..c01bf9611 100644
--- a/doc/hook/cron_weekly.bb
+++ b/doc/en/hook/cron_weekly.bb
diff --git a/doc/hook/crypto_methods.bb b/doc/en/hook/crypto_methods.bb
index 1b16f567d..1b16f567d 100644
--- a/doc/hook/crypto_methods.bb
+++ b/doc/en/hook/crypto_methods.bb
diff --git a/doc/hook/daemon_addon.bb b/doc/en/hook/daemon_addon.bb
index b60b25748..b60b25748 100644
--- a/doc/hook/daemon_addon.bb
+++ b/doc/en/hook/daemon_addon.bb
diff --git a/doc/hook/daemon_master_release.bb b/doc/en/hook/daemon_master_release.bb
index a17216d48..a17216d48 100644
--- a/doc/hook/daemon_master_release.bb
+++ b/doc/en/hook/daemon_master_release.bb
diff --git a/doc/hook/directory_item.bb b/doc/en/hook/directory_item.bb
index cb710e0b4..cb710e0b4 100644
--- a/doc/hook/directory_item.bb
+++ b/doc/en/hook/directory_item.bb
diff --git a/doc/hook/discover_channel_webfinger.bb b/doc/en/hook/discover_channel_webfinger.bb
index b0eb5f2c4..b0eb5f2c4 100644
--- a/doc/hook/discover_channel_webfinger.bb
+++ b/doc/en/hook/discover_channel_webfinger.bb
diff --git a/doc/hook/display_item.bb b/doc/en/hook/display_item.bb
index a6bfd621d..a6bfd621d 100644
--- a/doc/hook/display_item.bb
+++ b/doc/en/hook/display_item.bb
diff --git a/doc/hook/display_settings.bb b/doc/en/hook/display_settings.bb
index 1f1e0b491..1f1e0b491 100644
--- a/doc/hook/display_settings.bb
+++ b/doc/en/hook/display_settings.bb
diff --git a/doc/hook/display_settings_post.bb b/doc/en/hook/display_settings_post.bb
index d3bb39359..d3bb39359 100644
--- a/doc/hook/display_settings_post.bb
+++ b/doc/en/hook/display_settings_post.bb
diff --git a/doc/hook/donate_contributors.bb b/doc/en/hook/donate_contributors.bb
index f97c77efa..f97c77efa 100644
--- a/doc/hook/donate_contributors.bb
+++ b/doc/en/hook/donate_contributors.bb
diff --git a/doc/hook/donate_plugin.bb b/doc/en/hook/donate_plugin.bb
index db4a6f113..db4a6f113 100644
--- a/doc/hook/donate_plugin.bb
+++ b/doc/en/hook/donate_plugin.bb
diff --git a/doc/hook/donate_sponsors.bb b/doc/en/hook/donate_sponsors.bb
index 3abd46d42..3abd46d42 100644
--- a/doc/hook/donate_sponsors.bb
+++ b/doc/en/hook/donate_sponsors.bb
diff --git a/doc/hook/dreport_is_storable.bb b/doc/en/hook/dreport_is_storable.bb
index 9ca99b896..9ca99b896 100644
--- a/doc/hook/dreport_is_storable.bb
+++ b/doc/en/hook/dreport_is_storable.bb
diff --git a/doc/hook/dreport_process.bb b/doc/en/hook/dreport_process.bb
index 3ad331f41..3ad331f41 100644
--- a/doc/hook/dreport_process.bb
+++ b/doc/en/hook/dreport_process.bb
diff --git a/doc/hook/drop_item.bb b/doc/en/hook/drop_item.bb
index 35bb80f82..35bb80f82 100644
--- a/doc/hook/drop_item.bb
+++ b/doc/en/hook/drop_item.bb
diff --git a/doc/hook/dropdown_extras.bb b/doc/en/hook/dropdown_extras.bb
index 6d7110a76..6d7110a76 100644
--- a/doc/hook/dropdown_extras.bb
+++ b/doc/en/hook/dropdown_extras.bb
diff --git a/doc/hook/encode_object.bb b/doc/en/hook/encode_object.bb
index 0c8e86458..0c8e86458 100644
--- a/doc/hook/encode_object.bb
+++ b/doc/en/hook/encode_object.bb
diff --git a/doc/hook/enotify.bb b/doc/en/hook/enotify.bb
index 703a3ffa0..703a3ffa0 100644
--- a/doc/hook/enotify.bb
+++ b/doc/en/hook/enotify.bb
diff --git a/doc/hook/enotify_mail.bb b/doc/en/hook/enotify_mail.bb
index adeb8bd30..adeb8bd30 100644
--- a/doc/hook/enotify_mail.bb
+++ b/doc/en/hook/enotify_mail.bb
diff --git a/doc/hook/enotify_store.bb b/doc/en/hook/enotify_store.bb
index dc44cc320..dc44cc320 100644
--- a/doc/hook/enotify_store.bb
+++ b/doc/en/hook/enotify_store.bb
diff --git a/doc/hook/event_created.bb b/doc/en/hook/event_created.bb
index 222602e77..222602e77 100644
--- a/doc/hook/event_created.bb
+++ b/doc/en/hook/event_created.bb
diff --git a/doc/hook/event_store_event.bb b/doc/en/hook/event_store_event.bb
index 7015a8322..7015a8322 100644
--- a/doc/hook/event_store_event.bb
+++ b/doc/en/hook/event_store_event.bb
diff --git a/doc/hook/event_updated.bb b/doc/en/hook/event_updated.bb
index 69e3c72c1..69e3c72c1 100644
--- a/doc/hook/event_updated.bb
+++ b/doc/en/hook/event_updated.bb
diff --git a/doc/hook/externals_url_select.bb b/doc/en/hook/externals_url_select.bb
index a542dcb29..a542dcb29 100644
--- a/doc/hook/externals_url_select.bb
+++ b/doc/en/hook/externals_url_select.bb
diff --git a/doc/hook/feature_enabled.bb b/doc/en/hook/feature_enabled.bb
index 5630cc768..5630cc768 100644
--- a/doc/hook/feature_enabled.bb
+++ b/doc/en/hook/feature_enabled.bb
diff --git a/doc/hook/feature_settings.bb b/doc/en/hook/feature_settings.bb
index d1691eb38..d1691eb38 100644
--- a/doc/hook/feature_settings.bb
+++ b/doc/en/hook/feature_settings.bb
diff --git a/doc/hook/feature_settings_post.bb b/doc/en/hook/feature_settings_post.bb
index eecf941ff..eecf941ff 100644
--- a/doc/hook/feature_settings_post.bb
+++ b/doc/en/hook/feature_settings_post.bb
diff --git a/doc/hook/fetch_and_store.bb b/doc/en/hook/fetch_and_store.bb
index afece11a6..afece11a6 100644
--- a/doc/hook/fetch_and_store.bb
+++ b/doc/en/hook/fetch_and_store.bb
diff --git a/doc/hook/follow.bb b/doc/en/hook/follow.bb
index a97632b06..a97632b06 100644
--- a/doc/hook/follow.bb
+++ b/doc/en/hook/follow.bb
diff --git a/doc/hook/follow_allow.bb b/doc/en/hook/follow_allow.bb
index fdab1865c..fdab1865c 100644
--- a/doc/hook/follow_allow.bb
+++ b/doc/en/hook/follow_allow.bb
diff --git a/doc/hook/gender_selector.bb b/doc/en/hook/gender_selector.bb
index 0b56b5c9b..0b56b5c9b 100644
--- a/doc/hook/gender_selector.bb
+++ b/doc/en/hook/gender_selector.bb
diff --git a/doc/hook/gender_selector_min.bb b/doc/en/hook/gender_selector_min.bb
index 9d143855a..9d143855a 100644
--- a/doc/hook/gender_selector_min.bb
+++ b/doc/en/hook/gender_selector_min.bb
diff --git a/doc/hook/generate_map.bb b/doc/en/hook/generate_map.bb
index 33672d552..33672d552 100644
--- a/doc/hook/generate_map.bb
+++ b/doc/en/hook/generate_map.bb
diff --git a/doc/hook/generate_named_map.bb b/doc/en/hook/generate_named_map.bb
index 5bacb846d..5bacb846d 100644
--- a/doc/hook/generate_named_map.bb
+++ b/doc/en/hook/generate_named_map.bb
diff --git a/doc/hook/get_all_api_perms.bb b/doc/en/hook/get_all_api_perms.bb
index eb41f8a02..eb41f8a02 100644
--- a/doc/hook/get_all_api_perms.bb
+++ b/doc/en/hook/get_all_api_perms.bb
diff --git a/doc/hook/get_all_perms.bb b/doc/en/hook/get_all_perms.bb
index 149f8c78c..149f8c78c 100644
--- a/doc/hook/get_all_perms.bb
+++ b/doc/en/hook/get_all_perms.bb
diff --git a/doc/hook/get_default_export_sections b/doc/en/hook/get_default_export_sections
index 09b146643..09b146643 100644
--- a/doc/hook/get_default_export_sections
+++ b/doc/en/hook/get_default_export_sections
diff --git a/doc/hook/get_features.bb b/doc/en/hook/get_features.bb
index 66e81f13c..66e81f13c 100644
--- a/doc/hook/get_features.bb
+++ b/doc/en/hook/get_features.bb
diff --git a/doc/hook/get_photo.bb b/doc/en/hook/get_photo.bb
index eaf3beffb..eaf3beffb 100644
--- a/doc/hook/get_photo.bb
+++ b/doc/en/hook/get_photo.bb
diff --git a/doc/hook/get_profile_photo.bb b/doc/en/hook/get_profile_photo.bb
index ab07179ae..ab07179ae 100644
--- a/doc/hook/get_profile_photo.bb
+++ b/doc/en/hook/get_profile_photo.bb
diff --git a/doc/hook/get_role_perms.bb b/doc/en/hook/get_role_perms.bb
index 87830f8e3..87830f8e3 100644
--- a/doc/hook/get_role_perms.bb
+++ b/doc/en/hook/get_role_perms.bb
diff --git a/doc/hook/global_permissions.bb b/doc/en/hook/global_permissions.bb
index fe998ee9c..fe998ee9c 100644
--- a/doc/hook/global_permissions.bb
+++ b/doc/en/hook/global_permissions.bb
diff --git a/doc/hook/home_content.bb b/doc/en/hook/home_content.bb
index 7f32b3547..7f32b3547 100644
--- a/doc/hook/home_content.bb
+++ b/doc/en/hook/home_content.bb
diff --git a/doc/hook/home_init.bb b/doc/en/hook/home_init.bb
index 25dd72792..25dd72792 100644
--- a/doc/hook/home_init.bb
+++ b/doc/en/hook/home_init.bb
diff --git a/doc/hook/hostxrd.bb b/doc/en/hook/hostxrd.bb
index 2b67320cf..2b67320cf 100644
--- a/doc/hook/hostxrd.bb
+++ b/doc/en/hook/hostxrd.bb
diff --git a/doc/hook/html2bbcode.bb b/doc/en/hook/html2bbcode.bb
index 3061f05f0..3061f05f0 100644
--- a/doc/hook/html2bbcode.bb
+++ b/doc/en/hook/html2bbcode.bb
diff --git a/doc/hook/identity_basic_export.bb b/doc/en/hook/identity_basic_export.bb
index 71329ba1e..71329ba1e 100644
--- a/doc/hook/identity_basic_export.bb
+++ b/doc/en/hook/identity_basic_export.bb
diff --git a/doc/hook/import_author_xchan.bb b/doc/en/hook/import_author_xchan.bb
index e2340469d..e2340469d 100644
--- a/doc/hook/import_author_xchan.bb
+++ b/doc/en/hook/import_author_xchan.bb
diff --git a/doc/hook/import_channel.bb b/doc/en/hook/import_channel.bb
index b220b7415..b220b7415 100644
--- a/doc/hook/import_channel.bb
+++ b/doc/en/hook/import_channel.bb
diff --git a/doc/hook/import_directory_profile.bb b/doc/en/hook/import_directory_profile.bb
index e2fac59bc..e2fac59bc 100644
--- a/doc/hook/import_directory_profile.bb
+++ b/doc/en/hook/import_directory_profile.bb
diff --git a/doc/hook/import_xchan.bb b/doc/en/hook/import_xchan.bb
index 40e0783ce..40e0783ce 100644
--- a/doc/hook/import_xchan.bb
+++ b/doc/en/hook/import_xchan.bb
diff --git a/doc/hook/item_custom.bb b/doc/en/hook/item_custom.bb
index d20c7d76c..d20c7d76c 100644
--- a/doc/hook/item_custom.bb
+++ b/doc/en/hook/item_custom.bb
diff --git a/doc/hook/item_photo_menu.bb b/doc/en/hook/item_photo_menu.bb
index 8f9860a90..8f9860a90 100644
--- a/doc/hook/item_photo_menu.bb
+++ b/doc/en/hook/item_photo_menu.bb
diff --git a/doc/hook/item_store.bb b/doc/en/hook/item_store.bb
index 5d49b725c..5d49b725c 100644
--- a/doc/hook/item_store.bb
+++ b/doc/en/hook/item_store.bb
diff --git a/doc/hook/item_store_update.bb b/doc/en/hook/item_store_update.bb
index a7c58939a..a7c58939a 100644
--- a/doc/hook/item_store_update.bb
+++ b/doc/en/hook/item_store_update.bb
diff --git a/doc/hook/item_stored.bb b/doc/en/hook/item_stored.bb
index 8d706cb4e..8d706cb4e 100644
--- a/doc/hook/item_stored.bb
+++ b/doc/en/hook/item_stored.bb
diff --git a/doc/hook/item_stored_update.bb b/doc/en/hook/item_stored_update.bb
index 4532a347c..4532a347c 100644
--- a/doc/hook/item_stored_update.bb
+++ b/doc/en/hook/item_stored_update.bb
diff --git a/doc/hook/item_translate.bb b/doc/en/hook/item_translate.bb
index 695494b9c..695494b9c 100644
--- a/doc/hook/item_translate.bb
+++ b/doc/en/hook/item_translate.bb
diff --git a/doc/hook/jot_header_tpl_filter.bb b/doc/en/hook/jot_header_tpl_filter.bb
index b17d81d03..b17d81d03 100644
--- a/doc/hook/jot_header_tpl_filter.bb
+++ b/doc/en/hook/jot_header_tpl_filter.bb
diff --git a/doc/hook/jot_networks.bb b/doc/en/hook/jot_networks.bb
index 4c1629ba7..4c1629ba7 100644
--- a/doc/hook/jot_networks.bb
+++ b/doc/en/hook/jot_networks.bb
diff --git a/doc/hook/jot_tool.bb b/doc/en/hook/jot_tool.bb
index 22ba9701e..22ba9701e 100644
--- a/doc/hook/jot_tool.bb
+++ b/doc/en/hook/jot_tool.bb
diff --git a/doc/hook/jot_tpl_filter.bb b/doc/en/hook/jot_tpl_filter.bb
index 426da3c56..426da3c56 100644
--- a/doc/hook/jot_tpl_filter.bb
+++ b/doc/en/hook/jot_tpl_filter.bb
diff --git a/doc/hook/legal_webbie.bb b/doc/en/hook/legal_webbie.bb
index 8c7d32d56..8c7d32d56 100644
--- a/doc/hook/legal_webbie.bb
+++ b/doc/en/hook/legal_webbie.bb
diff --git a/doc/hook/legal_webbie_text.bb b/doc/en/hook/legal_webbie_text.bb
index 32c74c93b..32c74c93b 100644
--- a/doc/hook/legal_webbie_text.bb
+++ b/doc/en/hook/legal_webbie_text.bb
diff --git a/doc/hook/load_pdl.bb b/doc/en/hook/load_pdl.bb
index 149a3e766..149a3e766 100644
--- a/doc/hook/load_pdl.bb
+++ b/doc/en/hook/load_pdl.bb
diff --git a/doc/hook/local_dir_update.bb b/doc/en/hook/local_dir_update.bb
index d0b0f8ac1..d0b0f8ac1 100644
--- a/doc/hook/local_dir_update.bb
+++ b/doc/en/hook/local_dir_update.bb
diff --git a/doc/hook/logged_in.bb b/doc/en/hook/logged_in.bb
index b01041576..b01041576 100644
--- a/doc/hook/logged_in.bb
+++ b/doc/en/hook/logged_in.bb
diff --git a/doc/hook/logger.bb b/doc/en/hook/logger.bb
index 8fe989abd..8fe989abd 100644
--- a/doc/hook/logger.bb
+++ b/doc/en/hook/logger.bb
diff --git a/doc/hook/logging_out.bb b/doc/en/hook/logging_out.bb
index d47b9f1df..d47b9f1df 100644
--- a/doc/hook/logging_out.bb
+++ b/doc/en/hook/logging_out.bb
diff --git a/doc/hook/login_hook.bb b/doc/en/hook/login_hook.bb
index 156a0afcd..156a0afcd 100644
--- a/doc/hook/login_hook.bb
+++ b/doc/en/hook/login_hook.bb
diff --git a/doc/hook/magic_auth.bb b/doc/en/hook/magic_auth.bb
index 80d6edb27..80d6edb27 100644
--- a/doc/hook/magic_auth.bb
+++ b/doc/en/hook/magic_auth.bb
diff --git a/doc/hook/magic_auth_openid_success.bb b/doc/en/hook/magic_auth_openid_success.bb
index 810f2e06d..810f2e06d 100644
--- a/doc/hook/magic_auth_openid_success.bb
+++ b/doc/en/hook/magic_auth_openid_success.bb
diff --git a/doc/hook/magic_auth_success.bb b/doc/en/hook/magic_auth_success.bb
index d795e43e5..d795e43e5 100644
--- a/doc/hook/magic_auth_success.bb
+++ b/doc/en/hook/magic_auth_success.bb
diff --git a/doc/hook/main_slider.bb b/doc/en/hook/main_slider.bb
index a63c2170a..a63c2170a 100644
--- a/doc/hook/main_slider.bb
+++ b/doc/en/hook/main_slider.bb
diff --git a/doc/hook/marital_selector.bb b/doc/en/hook/marital_selector.bb
index 0f76c3f5a..0f76c3f5a 100644
--- a/doc/hook/marital_selector.bb
+++ b/doc/en/hook/marital_selector.bb
diff --git a/doc/hook/marital_selector_min.bb b/doc/en/hook/marital_selector_min.bb
index f02d21f20..f02d21f20 100644
--- a/doc/hook/marital_selector_min.bb
+++ b/doc/en/hook/marital_selector_min.bb
diff --git a/doc/hook/markdown_to_bb.bb b/doc/en/hook/markdown_to_bb.bb
index 8af637c8c..8af637c8c 100644
--- a/doc/hook/markdown_to_bb.bb
+++ b/doc/en/hook/markdown_to_bb.bb
diff --git a/doc/hook/module_loaded.bb b/doc/en/hook/module_loaded.bb
index cb0d2302d..cb0d2302d 100644
--- a/doc/hook/module_loaded.bb
+++ b/doc/en/hook/module_loaded.bb
diff --git a/doc/hook/module_mod_aftercontent.bb b/doc/en/hook/module_mod_aftercontent.bb
index 04e3c8d88..04e3c8d88 100644
--- a/doc/hook/module_mod_aftercontent.bb
+++ b/doc/en/hook/module_mod_aftercontent.bb
diff --git a/doc/hook/module_mod_content.bb b/doc/en/hook/module_mod_content.bb
index eef5b7ba5..eef5b7ba5 100644
--- a/doc/hook/module_mod_content.bb
+++ b/doc/en/hook/module_mod_content.bb
diff --git a/doc/hook/module_mod_init.bb b/doc/en/hook/module_mod_init.bb
index 52fe5a616..52fe5a616 100644
--- a/doc/hook/module_mod_init.bb
+++ b/doc/en/hook/module_mod_init.bb
diff --git a/doc/hook/module_mod_post.bb b/doc/en/hook/module_mod_post.bb
index 3adb0e737..3adb0e737 100644
--- a/doc/hook/module_mod_post.bb
+++ b/doc/en/hook/module_mod_post.bb
diff --git a/doc/hook/mood_verbs.bb b/doc/en/hook/mood_verbs.bb
index 67fb719dd..67fb719dd 100644
--- a/doc/hook/mood_verbs.bb
+++ b/doc/en/hook/mood_verbs.bb
diff --git a/doc/hook/nav.bb b/doc/en/hook/nav.bb
index b52f90602..b52f90602 100644
--- a/doc/hook/nav.bb
+++ b/doc/en/hook/nav.bb
diff --git a/doc/hook/network_content_init.bb b/doc/en/hook/network_content_init.bb
index 224da393a..224da393a 100644
--- a/doc/hook/network_content_init.bb
+++ b/doc/en/hook/network_content_init.bb
diff --git a/doc/hook/network_ping.bb b/doc/en/hook/network_ping.bb
index 78deefe78..78deefe78 100644
--- a/doc/hook/network_ping.bb
+++ b/doc/en/hook/network_ping.bb
diff --git a/doc/hook/network_to_name.bb b/doc/en/hook/network_to_name.bb
index eea4a1841..eea4a1841 100644
--- a/doc/hook/network_to_name.bb
+++ b/doc/en/hook/network_to_name.bb
diff --git a/doc/hook/notifier_end.bb b/doc/en/hook/notifier_end.bb
index df9d852bd..df9d852bd 100644
--- a/doc/hook/notifier_end.bb
+++ b/doc/en/hook/notifier_end.bb
diff --git a/doc/hook/notifier_hub.bb b/doc/en/hook/notifier_hub.bb
index 4255ce446..4255ce446 100644
--- a/doc/hook/notifier_hub.bb
+++ b/doc/en/hook/notifier_hub.bb
diff --git a/doc/hook/notifier_normal.bb b/doc/en/hook/notifier_normal.bb
index 0059baa47..0059baa47 100644
--- a/doc/hook/notifier_normal.bb
+++ b/doc/en/hook/notifier_normal.bb
diff --git a/doc/hook/obj_verbs.bb b/doc/en/hook/obj_verbs.bb
index ca98229aa..ca98229aa 100644
--- a/doc/hook/obj_verbs.bb
+++ b/doc/en/hook/obj_verbs.bb
diff --git a/doc/hook/oembed_probe.bb b/doc/en/hook/oembed_probe.bb
index 4f32ac267..4f32ac267 100644
--- a/doc/hook/oembed_probe.bb
+++ b/doc/en/hook/oembed_probe.bb
diff --git a/doc/hook/other_encapsulate.bb b/doc/en/hook/other_encapsulate.bb
index ea0cdf622..ea0cdf622 100644
--- a/doc/hook/other_encapsulate.bb
+++ b/doc/en/hook/other_encapsulate.bb
diff --git a/doc/hook/other_unencapsulate.bb b/doc/en/hook/other_unencapsulate.bb
index c8b0b617f..c8b0b617f 100644
--- a/doc/hook/other_unencapsulate.bb
+++ b/doc/en/hook/other_unencapsulate.bb
diff --git a/doc/hook/page_content_top.bb b/doc/en/hook/page_content_top.bb
index 137e3abfd..137e3abfd 100644
--- a/doc/hook/page_content_top.bb
+++ b/doc/en/hook/page_content_top.bb
diff --git a/doc/hook/page_end.bb b/doc/en/hook/page_end.bb
index 09293cf50..09293cf50 100644
--- a/doc/hook/page_end.bb
+++ b/doc/en/hook/page_end.bb
diff --git a/doc/hook/page_header.bb b/doc/en/hook/page_header.bb
index ffaa791c9..ffaa791c9 100644
--- a/doc/hook/page_header.bb
+++ b/doc/en/hook/page_header.bb
diff --git a/doc/hook/page_meta.bb b/doc/en/hook/page_meta.bb
index 30a8f9440..30a8f9440 100644
--- a/doc/hook/page_meta.bb
+++ b/doc/en/hook/page_meta.bb
diff --git a/doc/hook/parse_atom.bb b/doc/en/hook/parse_atom.bb
index c8037317f..c8037317f 100644
--- a/doc/hook/parse_atom.bb
+++ b/doc/en/hook/parse_atom.bb
diff --git a/doc/hook/parse_link.bb b/doc/en/hook/parse_link.bb
index 1c328059c..1c328059c 100644
--- a/doc/hook/parse_link.bb
+++ b/doc/en/hook/parse_link.bb
diff --git a/doc/hook/pdl_selector.bb b/doc/en/hook/pdl_selector.bb
index bee01c843..bee01c843 100644
--- a/doc/hook/pdl_selector.bb
+++ b/doc/en/hook/pdl_selector.bb
diff --git a/doc/hook/perm_is_allowed.bb b/doc/en/hook/perm_is_allowed.bb
index aac647609..aac647609 100644
--- a/doc/hook/perm_is_allowed.bb
+++ b/doc/en/hook/perm_is_allowed.bb
diff --git a/doc/hook/permissions_create.bb b/doc/en/hook/permissions_create.bb
index 22f80a80e..22f80a80e 100644
--- a/doc/hook/permissions_create.bb
+++ b/doc/en/hook/permissions_create.bb
diff --git a/doc/hook/permissions_update.bb b/doc/en/hook/permissions_update.bb
index 40366b33d..40366b33d 100644
--- a/doc/hook/permissions_update.bb
+++ b/doc/en/hook/permissions_update.bb
diff --git a/doc/hook/permit_hook.bb b/doc/en/hook/permit_hook.bb
index e69de29bb..e69de29bb 100644
--- a/doc/hook/permit_hook.bb
+++ b/doc/en/hook/permit_hook.bb
diff --git a/doc/hook/personal_xrd.bb b/doc/en/hook/personal_xrd.bb
index 71d4bd8dd..71d4bd8dd 100644
--- a/doc/hook/personal_xrd.bb
+++ b/doc/en/hook/personal_xrd.bb
diff --git a/doc/hook/photo_post_end.bb b/doc/en/hook/photo_post_end.bb
index 8a3291763..8a3291763 100644
--- a/doc/hook/photo_post_end.bb
+++ b/doc/en/hook/photo_post_end.bb
diff --git a/doc/hook/photo_upload_begin.bb b/doc/en/hook/photo_upload_begin.bb
index 5e441a12a..5e441a12a 100644
--- a/doc/hook/photo_upload_begin.bb
+++ b/doc/en/hook/photo_upload_begin.bb
diff --git a/doc/hook/photo_upload_end.bb b/doc/en/hook/photo_upload_end.bb
index 956175f1d..956175f1d 100644
--- a/doc/hook/photo_upload_end.bb
+++ b/doc/en/hook/photo_upload_end.bb
diff --git a/doc/hook/photo_upload_file.bb b/doc/en/hook/photo_upload_file.bb
index 726622ac0..726622ac0 100644
--- a/doc/hook/photo_upload_file.bb
+++ b/doc/en/hook/photo_upload_file.bb
diff --git a/doc/hook/photo_upload_form.bb b/doc/en/hook/photo_upload_form.bb
index 70b8318b8..70b8318b8 100644
--- a/doc/hook/photo_upload_form.bb
+++ b/doc/en/hook/photo_upload_form.bb
diff --git a/doc/hook/photo_view_filter.bb b/doc/en/hook/photo_view_filter.bb
index 0780c1edc..0780c1edc 100644
--- a/doc/hook/photo_view_filter.bb
+++ b/doc/en/hook/photo_view_filter.bb
diff --git a/doc/hook/poke_verbs.bb b/doc/en/hook/poke_verbs.bb
index 54d68c3a2..54d68c3a2 100644
--- a/doc/hook/poke_verbs.bb
+++ b/doc/en/hook/poke_verbs.bb
diff --git a/doc/hook/post_local.bb b/doc/en/hook/post_local.bb
index 5aa723cb9..5aa723cb9 100644
--- a/doc/hook/post_local.bb
+++ b/doc/en/hook/post_local.bb
diff --git a/doc/hook/post_local_end.bb b/doc/en/hook/post_local_end.bb
index 380166fdb..380166fdb 100644
--- a/doc/hook/post_local_end.bb
+++ b/doc/en/hook/post_local_end.bb
diff --git a/doc/hook/post_local_start.bb b/doc/en/hook/post_local_start.bb
index 2f684f67a..2f684f67a 100644
--- a/doc/hook/post_local_start.bb
+++ b/doc/en/hook/post_local_start.bb
diff --git a/doc/hook/post_mail.bb b/doc/en/hook/post_mail.bb
index 8f67ad4f0..8f67ad4f0 100644
--- a/doc/hook/post_mail.bb
+++ b/doc/en/hook/post_mail.bb
diff --git a/doc/hook/post_mail_end.bb b/doc/en/hook/post_mail_end.bb
index 7f0085773..7f0085773 100644
--- a/doc/hook/post_mail_end.bb
+++ b/doc/en/hook/post_mail_end.bb
diff --git a/doc/hook/post_remote.bb b/doc/en/hook/post_remote.bb
index f8e087eee..f8e087eee 100644
--- a/doc/hook/post_remote.bb
+++ b/doc/en/hook/post_remote.bb
diff --git a/doc/hook/post_remote_end.bb b/doc/en/hook/post_remote_end.bb
index 0fef20cbf..0fef20cbf 100644
--- a/doc/hook/post_remote_end.bb
+++ b/doc/en/hook/post_remote_end.bb
diff --git a/doc/hook/post_remote_update.bb b/doc/en/hook/post_remote_update.bb
index fd358db28..fd358db28 100644
--- a/doc/hook/post_remote_update.bb
+++ b/doc/en/hook/post_remote_update.bb
diff --git a/doc/hook/post_remote_update_end.bb b/doc/en/hook/post_remote_update_end.bb
index 95f1e6f78..95f1e6f78 100644
--- a/doc/hook/post_remote_update_end.bb
+++ b/doc/en/hook/post_remote_update_end.bb
diff --git a/doc/hook/prepare_body.bb b/doc/en/hook/prepare_body.bb
index 3f1eaef85..3f1eaef85 100644
--- a/doc/hook/prepare_body.bb
+++ b/doc/en/hook/prepare_body.bb
diff --git a/doc/hook/prepare_body_final.bb b/doc/en/hook/prepare_body_final.bb
index 96d1ae389..96d1ae389 100644
--- a/doc/hook/prepare_body_final.bb
+++ b/doc/en/hook/prepare_body_final.bb
diff --git a/doc/hook/prepare_body_init.bb b/doc/en/hook/prepare_body_init.bb
index f3de79970..f3de79970 100644
--- a/doc/hook/prepare_body_init.bb
+++ b/doc/en/hook/prepare_body_init.bb
diff --git a/doc/hook/privacygroup_extras.bb b/doc/en/hook/privacygroup_extras.bb
index bd67f2470..bd67f2470 100644
--- a/doc/hook/privacygroup_extras.bb
+++ b/doc/en/hook/privacygroup_extras.bb
diff --git a/doc/hook/privacygroup_extras_drop.bb b/doc/en/hook/privacygroup_extras_drop.bb
index fd27ab255..fd27ab255 100644
--- a/doc/hook/privacygroup_extras_drop.bb
+++ b/doc/en/hook/privacygroup_extras_drop.bb
diff --git a/doc/hook/privacygroup_extras_post.bb b/doc/en/hook/privacygroup_extras_post.bb
index 704db1997..704db1997 100644
--- a/doc/hook/privacygroup_extras_post.bb
+++ b/doc/en/hook/privacygroup_extras_post.bb
diff --git a/doc/hook/proc_run.bb b/doc/en/hook/proc_run.bb
index a3759794a..a3759794a 100644
--- a/doc/hook/proc_run.bb
+++ b/doc/en/hook/proc_run.bb
diff --git a/doc/hook/process_channel_sync_delivery.bb b/doc/en/hook/process_channel_sync_delivery.bb
index c0416c8cb..c0416c8cb 100644
--- a/doc/hook/process_channel_sync_delivery.bb
+++ b/doc/en/hook/process_channel_sync_delivery.bb
diff --git a/doc/hook/profile_advanced.bb b/doc/en/hook/profile_advanced.bb
index 65e56afd6..65e56afd6 100644
--- a/doc/hook/profile_advanced.bb
+++ b/doc/en/hook/profile_advanced.bb
diff --git a/doc/hook/profile_edit.bb b/doc/en/hook/profile_edit.bb
index e60663d4a..e60663d4a 100644
--- a/doc/hook/profile_edit.bb
+++ b/doc/en/hook/profile_edit.bb
diff --git a/doc/hook/profile_photo_content_end.bb b/doc/en/hook/profile_photo_content_end.bb
index 518415c4d..518415c4d 100644
--- a/doc/hook/profile_photo_content_end.bb
+++ b/doc/en/hook/profile_photo_content_end.bb
diff --git a/doc/hook/profile_post.bb b/doc/en/hook/profile_post.bb
index d22d8fbc7..d22d8fbc7 100644
--- a/doc/hook/profile_post.bb
+++ b/doc/en/hook/profile_post.bb
diff --git a/doc/hook/profile_sidebar.bb b/doc/en/hook/profile_sidebar.bb
index bfd059e4b..bfd059e4b 100644
--- a/doc/hook/profile_sidebar.bb
+++ b/doc/en/hook/profile_sidebar.bb
diff --git a/doc/hook/profile_sidebar_enter.bb b/doc/en/hook/profile_sidebar_enter.bb
index 9d6726a30..9d6726a30 100644
--- a/doc/hook/profile_sidebar_enter.bb
+++ b/doc/en/hook/profile_sidebar_enter.bb
diff --git a/doc/hook/register_account.bb b/doc/en/hook/register_account.bb
index df4de2b30..df4de2b30 100644
--- a/doc/hook/register_account.bb
+++ b/doc/en/hook/register_account.bb
diff --git a/doc/hook/render_location.bb b/doc/en/hook/render_location.bb
index 41501c087..41501c087 100644
--- a/doc/hook/render_location.bb
+++ b/doc/en/hook/render_location.bb
diff --git a/doc/hook/replace_macros.bb b/doc/en/hook/replace_macros.bb
index fac39dd7b..fac39dd7b 100644
--- a/doc/hook/replace_macros.bb
+++ b/doc/en/hook/replace_macros.bb
diff --git a/doc/hook/reverse_magic_auth.bb b/doc/en/hook/reverse_magic_auth.bb
index 4cbd84b93..4cbd84b93 100644
--- a/doc/hook/reverse_magic_auth.bb
+++ b/doc/en/hook/reverse_magic_auth.bb
diff --git a/doc/hook/settings_form.bb b/doc/en/hook/settings_form.bb
index d65341181..d65341181 100644
--- a/doc/hook/settings_form.bb
+++ b/doc/en/hook/settings_form.bb
diff --git a/doc/hook/settings_post.bb b/doc/en/hook/settings_post.bb
index f72546c11..f72546c11 100644
--- a/doc/hook/settings_post.bb
+++ b/doc/en/hook/settings_post.bb
diff --git a/doc/hook/sexpref_selector.bb b/doc/en/hook/sexpref_selector.bb
index b4dad6b38..b4dad6b38 100644
--- a/doc/hook/sexpref_selector.bb
+++ b/doc/en/hook/sexpref_selector.bb
diff --git a/doc/hook/sexpref_selector_min.bb b/doc/en/hook/sexpref_selector_min.bb
index 6f49946af..6f49946af 100644
--- a/doc/hook/sexpref_selector_min.bb
+++ b/doc/en/hook/sexpref_selector_min.bb
diff --git a/doc/hook/smilie.bb b/doc/en/hook/smilie.bb
index 575acc178..575acc178 100644
--- a/doc/hook/smilie.bb
+++ b/doc/en/hook/smilie.bb
diff --git a/doc/hook/status_editor.bb b/doc/en/hook/status_editor.bb
index 00e97a7c9..00e97a7c9 100644
--- a/doc/hook/status_editor.bb
+++ b/doc/en/hook/status_editor.bb
diff --git a/doc/hook/stream_item.bb b/doc/en/hook/stream_item.bb
index 30086961d..30086961d 100644
--- a/doc/hook/stream_item.bb
+++ b/doc/en/hook/stream_item.bb
diff --git a/doc/hook/system_app_installed_filter.bb b/doc/en/hook/system_app_installed_filter.bb
index a269a79a8..a269a79a8 100644
--- a/doc/hook/system_app_installed_filter.bb
+++ b/doc/en/hook/system_app_installed_filter.bb
diff --git a/doc/hook/tagged.bb b/doc/en/hook/tagged.bb
index 05d081d07..05d081d07 100644
--- a/doc/hook/tagged.bb
+++ b/doc/en/hook/tagged.bb
diff --git a/doc/hook/update_unseen.bb b/doc/en/hook/update_unseen.bb
index 8fb02c239..8fb02c239 100644
--- a/doc/hook/update_unseen.bb
+++ b/doc/en/hook/update_unseen.bb
diff --git a/doc/hook/validate_channelname.bb b/doc/en/hook/validate_channelname.bb
index 2ab12bbec..2ab12bbec 100644
--- a/doc/hook/validate_channelname.bb
+++ b/doc/en/hook/validate_channelname.bb
diff --git a/doc/hook/webfinger.bb b/doc/en/hook/webfinger.bb
index 7cc24322f..7cc24322f 100644
--- a/doc/hook/webfinger.bb
+++ b/doc/en/hook/webfinger.bb
diff --git a/doc/hook/well_known.bb b/doc/en/hook/well_known.bb
index 778b27a02..778b27a02 100644
--- a/doc/hook/well_known.bb
+++ b/doc/en/hook/well_known.bb
diff --git a/doc/hook/wiki_preprocess.bb b/doc/en/hook/wiki_preprocess.bb
index 913b601ba..913b601ba 100644
--- a/doc/hook/wiki_preprocess.bb
+++ b/doc/en/hook/wiki_preprocess.bb
diff --git a/doc/hook/zid.bb b/doc/en/hook/zid.bb
index 2210c1342..2210c1342 100644
--- a/doc/hook/zid.bb
+++ b/doc/en/hook/zid.bb
diff --git a/doc/hook/zid_init.bb b/doc/en/hook/zid_init.bb
index 131dd8f72..131dd8f72 100644
--- a/doc/hook/zid_init.bb
+++ b/doc/en/hook/zid_init.bb
diff --git a/doc/hook/zot_best_algorithm.bb b/doc/en/hook/zot_best_algorithm.bb
index ccde505cb..ccde505cb 100644
--- a/doc/hook/zot_best_algorithm.bb
+++ b/doc/en/hook/zot_best_algorithm.bb
diff --git a/doc/hook/zot_finger.bb b/doc/en/hook/zot_finger.bb
index 9383b4c31..9383b4c31 100644
--- a/doc/hook/zot_finger.bb
+++ b/doc/en/hook/zot_finger.bb
diff --git a/doc/hooklist.bb b/doc/en/hooklist.bb
index 7231cd185..7231cd185 100644
--- a/doc/hooklist.bb
+++ b/doc/en/hooklist.bb
diff --git a/doc/hooks.html b/doc/en/hooks.html
index a7ee314e7..a7ee314e7 100644
--- a/doc/hooks.html
+++ b/doc/en/hooks.html
diff --git a/doc/intro_for_developers.bb b/doc/en/intro_for_developers.bb
index 172008b7f..172008b7f 100644
--- a/doc/intro_for_developers.bb
+++ b/doc/en/intro_for_developers.bb
diff --git a/doc/macros/addons_footer.bb b/doc/en/macros/addons_footer.bb
index 32814c59b..32814c59b 100644
--- a/doc/macros/addons_footer.bb
+++ b/doc/en/macros/addons_footer.bb
diff --git a/doc/macros/cloud_footer.bb b/doc/en/macros/cloud_footer.bb
index 798cc9ea6..798cc9ea6 100644
--- a/doc/macros/cloud_footer.bb
+++ b/doc/en/macros/cloud_footer.bb
diff --git a/doc/macros/de/addons_footer.bb b/doc/en/macros/de/addons_footer.bb
index 068bb7ec7..068bb7ec7 100644
--- a/doc/macros/de/addons_footer.bb
+++ b/doc/en/macros/de/addons_footer.bb
diff --git a/doc/macros/de/cloud_footer.bb b/doc/en/macros/de/cloud_footer.bb
index 921448a3c..921448a3c 100644
--- a/doc/macros/de/cloud_footer.bb
+++ b/doc/en/macros/de/cloud_footer.bb
diff --git a/doc/macros/de/main_footer.bb b/doc/en/macros/de/main_footer.bb
index e71603626..e71603626 100644
--- a/doc/macros/de/main_footer.bb
+++ b/doc/en/macros/de/main_footer.bb
diff --git a/doc/macros/de/troubleshooting_footer.bb b/doc/en/macros/de/troubleshooting_footer.bb
index be8c13a28..be8c13a28 100644
--- a/doc/macros/de/troubleshooting_footer.bb
+++ b/doc/en/macros/de/troubleshooting_footer.bb
diff --git a/doc/macros/main_footer.bb b/doc/en/macros/main_footer.bb
index 08f671ded..08f671ded 100644
--- a/doc/macros/main_footer.bb
+++ b/doc/en/macros/main_footer.bb
diff --git a/doc/macros/pl/addons_footer.bb b/doc/en/macros/pl/addons_footer.bb
index 79ac0a71c..79ac0a71c 100644
--- a/doc/macros/pl/addons_footer.bb
+++ b/doc/en/macros/pl/addons_footer.bb
diff --git a/doc/macros/pl/cloud_footer.bb b/doc/en/macros/pl/cloud_footer.bb
index 48628ae1a..48628ae1a 100644
--- a/doc/macros/pl/cloud_footer.bb
+++ b/doc/en/macros/pl/cloud_footer.bb
diff --git a/doc/macros/pl/main_footer.bb b/doc/en/macros/pl/main_footer.bb
index 8bf25fed5..8bf25fed5 100644
--- a/doc/macros/pl/main_footer.bb
+++ b/doc/en/macros/pl/main_footer.bb
diff --git a/doc/macros/pl/troubleshooting_footer.bb b/doc/en/macros/pl/troubleshooting_footer.bb
index 19328ad64..19328ad64 100644
--- a/doc/macros/pl/troubleshooting_footer.bb
+++ b/doc/en/macros/pl/troubleshooting_footer.bb
diff --git a/doc/macros/troubleshooting_footer.bb b/doc/en/macros/troubleshooting_footer.bb
index c7603a62b..c7603a62b 100644
--- a/doc/macros/troubleshooting_footer.bb
+++ b/doc/en/macros/troubleshooting_footer.bb
diff --git a/doc/member/assets/qr_text_to_post.png b/doc/en/member/assets/qr_text_to_post.png
index 887c85492..887c85492 100644
--- a/doc/member/assets/qr_text_to_post.png
+++ b/doc/en/member/assets/qr_text_to_post.png
Binary files differ
diff --git a/doc/member/assets/zat_dialog.png b/doc/en/member/assets/zat_dialog.png
index 892964e95..892964e95 100644
--- a/doc/member/assets/zat_dialog.png
+++ b/doc/en/member/assets/zat_dialog.png
Binary files differ
diff --git a/doc/member/bbcode.html b/doc/en/member/bbcode.html
index e3e079b4d..e3e079b4d 100644
--- a/doc/member/bbcode.html
+++ b/doc/en/member/bbcode.html
diff --git a/doc/member/member_faq.bb b/doc/en/member/member_faq.bb
index 9533cb557..9533cb557 100644
--- a/doc/member/member_faq.bb
+++ b/doc/en/member/member_faq.bb
diff --git a/doc/member/member_guide.bb b/doc/en/member/member_guide.bb
index 2b772d1c5..2b772d1c5 100644
--- a/doc/member/member_guide.bb
+++ b/doc/en/member/member_guide.bb
diff --git a/doc/plugins.bb b/doc/en/plugins.bb
index 3aecc458f..3aecc458f 100644
--- a/doc/plugins.bb
+++ b/doc/en/plugins.bb
diff --git a/doc/problems-following-an-update.bb b/doc/en/problems-following-an-update.bb
index 7376d6163..7376d6163 100644
--- a/doc/problems-following-an-update.bb
+++ b/doc/en/problems-following-an-update.bb
diff --git a/doc/red2pi.bb b/doc/en/red2pi.bb
index 8ae087fbf..8ae087fbf 100644
--- a/doc/red2pi.bb
+++ b/doc/en/red2pi.bb
diff --git a/doc/roadmap.bb b/doc/en/roadmap.bb
index dce19848a..dce19848a 100644
--- a/doc/roadmap.bb
+++ b/doc/en/roadmap.bb
diff --git a/doc/schema_development.bb b/doc/en/schema_development.bb
index 10832684a..10832684a 100644
--- a/doc/schema_development.bb
+++ b/doc/en/schema_development.bb
diff --git a/doc/schemaspy_hubzilla/zot.meta.xml b/doc/en/schemaspy_hubzilla/zot.meta.xml
index 98a9d370e..98a9d370e 100644
--- a/doc/schemaspy_hubzilla/zot.meta.xml
+++ b/doc/en/schemaspy_hubzilla/zot.meta.xml
diff --git a/doc/sql_conventions.bb b/doc/en/sql_conventions.bb
index f6a4e251f..f6a4e251f 100644
--- a/doc/sql_conventions.bb
+++ b/doc/en/sql_conventions.bb
diff --git a/doc/toc.html b/doc/en/toc.html
index d2f2654a1..d2f2654a1 100644
--- a/doc/toc.html
+++ b/doc/en/toc.html
diff --git a/doc/tutorials/assets/0965ace945f0c95ae38aa5bfedd230d2a7233d3915ac15d629f9dd845854.png b/doc/en/tutorials/assets/0965ace945f0c95ae38aa5bfedd230d2a7233d3915ac15d629f9dd845854.png
index d5cf1093f..d5cf1093f 100644
--- a/doc/tutorials/assets/0965ace945f0c95ae38aa5bfedd230d2a7233d3915ac15d629f9dd845854.png
+++ b/doc/en/tutorials/assets/0965ace945f0c95ae38aa5bfedd230d2a7233d3915ac15d629f9dd845854.png
Binary files differ
diff --git a/doc/tutorials/assets/1ebe02c205962dd25035c441631745d16acdb7a44e50d148256c8ad26a67.png b/doc/en/tutorials/assets/1ebe02c205962dd25035c441631745d16acdb7a44e50d148256c8ad26a67.png
index d613925aa..d613925aa 100644
--- a/doc/tutorials/assets/1ebe02c205962dd25035c441631745d16acdb7a44e50d148256c8ad26a67.png
+++ b/doc/en/tutorials/assets/1ebe02c205962dd25035c441631745d16acdb7a44e50d148256c8ad26a67.png
Binary files differ
diff --git a/doc/tutorials/assets/2243e48ccea25bd907cce3dbd6fc9f7cd832a4c91a4c5dd294b7b219e7d8.png b/doc/en/tutorials/assets/2243e48ccea25bd907cce3dbd6fc9f7cd832a4c91a4c5dd294b7b219e7d8.png
index c403bf806..c403bf806 100644
--- a/doc/tutorials/assets/2243e48ccea25bd907cce3dbd6fc9f7cd832a4c91a4c5dd294b7b219e7d8.png
+++ b/doc/en/tutorials/assets/2243e48ccea25bd907cce3dbd6fc9f7cd832a4c91a4c5dd294b7b219e7d8.png
Binary files differ
diff --git a/doc/tutorials/assets/25eaad2435200f72a1dd3a00ba17a76ca6db4c246b3c4fa286b390cae7c8.png b/doc/en/tutorials/assets/25eaad2435200f72a1dd3a00ba17a76ca6db4c246b3c4fa286b390cae7c8.png
index ca8ba6fb9..ca8ba6fb9 100644
--- a/doc/tutorials/assets/25eaad2435200f72a1dd3a00ba17a76ca6db4c246b3c4fa286b390cae7c8.png
+++ b/doc/en/tutorials/assets/25eaad2435200f72a1dd3a00ba17a76ca6db4c246b3c4fa286b390cae7c8.png
Binary files differ
diff --git a/doc/tutorials/assets/2b539d5a8474d6ec6dc91155b628d9be5f99ab04a78108ec404f53ec7bb5.png b/doc/en/tutorials/assets/2b539d5a8474d6ec6dc91155b628d9be5f99ab04a78108ec404f53ec7bb5.png
index 0da2d96e2..0da2d96e2 100644
--- a/doc/tutorials/assets/2b539d5a8474d6ec6dc91155b628d9be5f99ab04a78108ec404f53ec7bb5.png
+++ b/doc/en/tutorials/assets/2b539d5a8474d6ec6dc91155b628d9be5f99ab04a78108ec404f53ec7bb5.png
Binary files differ
diff --git a/doc/tutorials/assets/31f42a02bdbae095e0329db6c3814e2975979aff12f873f43d81724c5e61.png b/doc/en/tutorials/assets/31f42a02bdbae095e0329db6c3814e2975979aff12f873f43d81724c5e61.png
index 2a209b2be..2a209b2be 100644
--- a/doc/tutorials/assets/31f42a02bdbae095e0329db6c3814e2975979aff12f873f43d81724c5e61.png
+++ b/doc/en/tutorials/assets/31f42a02bdbae095e0329db6c3814e2975979aff12f873f43d81724c5e61.png
Binary files differ
diff --git a/doc/tutorials/assets/324247680b605fd214fd61aecd8f216fa8f5dfa0f16a04c8e968fdbc43d0.png b/doc/en/tutorials/assets/324247680b605fd214fd61aecd8f216fa8f5dfa0f16a04c8e968fdbc43d0.png
index f992672b0..f992672b0 100644
--- a/doc/tutorials/assets/324247680b605fd214fd61aecd8f216fa8f5dfa0f16a04c8e968fdbc43d0.png
+++ b/doc/en/tutorials/assets/324247680b605fd214fd61aecd8f216fa8f5dfa0f16a04c8e968fdbc43d0.png
Binary files differ
diff --git a/doc/tutorials/assets/3656a67dce40a1fc2515e9089217f2e136d4fcf8babe77bac00ecaad43ce.png b/doc/en/tutorials/assets/3656a67dce40a1fc2515e9089217f2e136d4fcf8babe77bac00ecaad43ce.png
index b656192dc..b656192dc 100644
--- a/doc/tutorials/assets/3656a67dce40a1fc2515e9089217f2e136d4fcf8babe77bac00ecaad43ce.png
+++ b/doc/en/tutorials/assets/3656a67dce40a1fc2515e9089217f2e136d4fcf8babe77bac00ecaad43ce.png
Binary files differ
diff --git a/doc/tutorials/assets/458a842c2ea0fbe3b7869bb14dfffe1e5be098d1cd6e590bbead25b4cc05.png b/doc/en/tutorials/assets/458a842c2ea0fbe3b7869bb14dfffe1e5be098d1cd6e590bbead25b4cc05.png
index 6129195b6..6129195b6 100644
--- a/doc/tutorials/assets/458a842c2ea0fbe3b7869bb14dfffe1e5be098d1cd6e590bbead25b4cc05.png
+++ b/doc/en/tutorials/assets/458a842c2ea0fbe3b7869bb14dfffe1e5be098d1cd6e590bbead25b4cc05.png
Binary files differ
diff --git a/doc/tutorials/assets/4aaaf1e124514c8d6999a5fe1d07be5af460cda4ba6cde9106ebc1564bb0.png b/doc/en/tutorials/assets/4aaaf1e124514c8d6999a5fe1d07be5af460cda4ba6cde9106ebc1564bb0.png
index 923403fe9..923403fe9 100644
--- a/doc/tutorials/assets/4aaaf1e124514c8d6999a5fe1d07be5af460cda4ba6cde9106ebc1564bb0.png
+++ b/doc/en/tutorials/assets/4aaaf1e124514c8d6999a5fe1d07be5af460cda4ba6cde9106ebc1564bb0.png
Binary files differ
diff --git a/doc/tutorials/assets/4cf326152797a8ecdf5630e921756f825ee00f8ee464d3ef9fed971d2852.png b/doc/en/tutorials/assets/4cf326152797a8ecdf5630e921756f825ee00f8ee464d3ef9fed971d2852.png
index f158ad5d9..f158ad5d9 100644
--- a/doc/tutorials/assets/4cf326152797a8ecdf5630e921756f825ee00f8ee464d3ef9fed971d2852.png
+++ b/doc/en/tutorials/assets/4cf326152797a8ecdf5630e921756f825ee00f8ee464d3ef9fed971d2852.png
Binary files differ
diff --git a/doc/tutorials/assets/75d2927b7ad0d2043d4d3b6ba1364fac8ead173edd39340adaf78be11c9d.png b/doc/en/tutorials/assets/75d2927b7ad0d2043d4d3b6ba1364fac8ead173edd39340adaf78be11c9d.png
index edc8b01cc..edc8b01cc 100644
--- a/doc/tutorials/assets/75d2927b7ad0d2043d4d3b6ba1364fac8ead173edd39340adaf78be11c9d.png
+++ b/doc/en/tutorials/assets/75d2927b7ad0d2043d4d3b6ba1364fac8ead173edd39340adaf78be11c9d.png
Binary files differ
diff --git a/doc/tutorials/assets/7c976a06662a1357b3da8ed0680d1a721c85f2ae2bdd5739a8def466010e.png b/doc/en/tutorials/assets/7c976a06662a1357b3da8ed0680d1a721c85f2ae2bdd5739a8def466010e.png
index 5b259058b..5b259058b 100644
--- a/doc/tutorials/assets/7c976a06662a1357b3da8ed0680d1a721c85f2ae2bdd5739a8def466010e.png
+++ b/doc/en/tutorials/assets/7c976a06662a1357b3da8ed0680d1a721c85f2ae2bdd5739a8def466010e.png
Binary files differ
diff --git a/doc/tutorials/assets/99a6efda4df631dfb2d2a849412044cc6a0f8aebeac289d28786f2649d24.png b/doc/en/tutorials/assets/99a6efda4df631dfb2d2a849412044cc6a0f8aebeac289d28786f2649d24.png
index c03ffd18d..c03ffd18d 100644
--- a/doc/tutorials/assets/99a6efda4df631dfb2d2a849412044cc6a0f8aebeac289d28786f2649d24.png
+++ b/doc/en/tutorials/assets/99a6efda4df631dfb2d2a849412044cc6a0f8aebeac289d28786f2649d24.png
Binary files differ
diff --git a/doc/tutorials/assets/9eae9fad774a4cd29e665961d35affbd053368056f562c58200fb41027b0.png b/doc/en/tutorials/assets/9eae9fad774a4cd29e665961d35affbd053368056f562c58200fb41027b0.png
index 65d4c5f0a..65d4c5f0a 100644
--- a/doc/tutorials/assets/9eae9fad774a4cd29e665961d35affbd053368056f562c58200fb41027b0.png
+++ b/doc/en/tutorials/assets/9eae9fad774a4cd29e665961d35affbd053368056f562c58200fb41027b0.png
Binary files differ
diff --git a/doc/tutorials/assets/b0bfdf02aef3710a37bb6092c3240b291eca8afa73133b3ac03b86f3302d.png b/doc/en/tutorials/assets/b0bfdf02aef3710a37bb6092c3240b291eca8afa73133b3ac03b86f3302d.png
index 45609a7bb..45609a7bb 100644
--- a/doc/tutorials/assets/b0bfdf02aef3710a37bb6092c3240b291eca8afa73133b3ac03b86f3302d.png
+++ b/doc/en/tutorials/assets/b0bfdf02aef3710a37bb6092c3240b291eca8afa73133b3ac03b86f3302d.png
Binary files differ
diff --git a/doc/tutorials/assets/b334915c03a665493915598c69c17a87c910a39db2cd3b5292e4623ea4c4.png b/doc/en/tutorials/assets/b334915c03a665493915598c69c17a87c910a39db2cd3b5292e4623ea4c4.png
index d239d6965..d239d6965 100644
--- a/doc/tutorials/assets/b334915c03a665493915598c69c17a87c910a39db2cd3b5292e4623ea4c4.png
+++ b/doc/en/tutorials/assets/b334915c03a665493915598c69c17a87c910a39db2cd3b5292e4623ea4c4.png
Binary files differ
diff --git a/doc/tutorials/assets/b3eece28e8db67f1024af42055f0f24ed5e81ba622aca8cac576ccf5930e.png b/doc/en/tutorials/assets/b3eece28e8db67f1024af42055f0f24ed5e81ba622aca8cac576ccf5930e.png
index 45ed64d00..45ed64d00 100644
--- a/doc/tutorials/assets/b3eece28e8db67f1024af42055f0f24ed5e81ba622aca8cac576ccf5930e.png
+++ b/doc/en/tutorials/assets/b3eece28e8db67f1024af42055f0f24ed5e81ba622aca8cac576ccf5930e.png
Binary files differ
diff --git a/doc/tutorials/assets/bdbcf0ffd9004657237f6b7b7863da5a8e39a5bc17d2c67fa160efef2056.png b/doc/en/tutorials/assets/bdbcf0ffd9004657237f6b7b7863da5a8e39a5bc17d2c67fa160efef2056.png
index fcaed8bef..fcaed8bef 100644
--- a/doc/tutorials/assets/bdbcf0ffd9004657237f6b7b7863da5a8e39a5bc17d2c67fa160efef2056.png
+++ b/doc/en/tutorials/assets/bdbcf0ffd9004657237f6b7b7863da5a8e39a5bc17d2c67fa160efef2056.png
Binary files differ
diff --git a/doc/tutorials/assets/c4cad3e4c356dd2a227df79bd4dc6d47edf1b66ea243f005b6b452ec366b.png b/doc/en/tutorials/assets/c4cad3e4c356dd2a227df79bd4dc6d47edf1b66ea243f005b6b452ec366b.png
index 0ccfc8995..0ccfc8995 100644
--- a/doc/tutorials/assets/c4cad3e4c356dd2a227df79bd4dc6d47edf1b66ea243f005b6b452ec366b.png
+++ b/doc/en/tutorials/assets/c4cad3e4c356dd2a227df79bd4dc6d47edf1b66ea243f005b6b452ec366b.png
Binary files differ
diff --git a/doc/tutorials/assets/c9a880cc82ffa1f7c2f460397bb083bf7dc2a2b8f065e64da598b45b4a2b.png b/doc/en/tutorials/assets/c9a880cc82ffa1f7c2f460397bb083bf7dc2a2b8f065e64da598b45b4a2b.png
index 1cb4d2d22..1cb4d2d22 100644
--- a/doc/tutorials/assets/c9a880cc82ffa1f7c2f460397bb083bf7dc2a2b8f065e64da598b45b4a2b.png
+++ b/doc/en/tutorials/assets/c9a880cc82ffa1f7c2f460397bb083bf7dc2a2b8f065e64da598b45b4a2b.png
Binary files differ
diff --git a/doc/tutorials/assets/d080e92d797af5e863fa39b2084c16a8410de1f7a6559633435817444aef.png b/doc/en/tutorials/assets/d080e92d797af5e863fa39b2084c16a8410de1f7a6559633435817444aef.png
index 22e4cb5d5..22e4cb5d5 100644
--- a/doc/tutorials/assets/d080e92d797af5e863fa39b2084c16a8410de1f7a6559633435817444aef.png
+++ b/doc/en/tutorials/assets/d080e92d797af5e863fa39b2084c16a8410de1f7a6559633435817444aef.png
Binary files differ
diff --git a/doc/tutorials/assets/e05248fdc5688d6d24bde52432fdc7b39692a094559aa504de99352940b1.png b/doc/en/tutorials/assets/e05248fdc5688d6d24bde52432fdc7b39692a094559aa504de99352940b1.png
index 5674f5207..5674f5207 100644
--- a/doc/tutorials/assets/e05248fdc5688d6d24bde52432fdc7b39692a094559aa504de99352940b1.png
+++ b/doc/en/tutorials/assets/e05248fdc5688d6d24bde52432fdc7b39692a094559aa504de99352940b1.png
Binary files differ
diff --git a/doc/tutorials/assets/e5d5674a34e848e2cce90a60fc416415271d9c51b81ad2a950fb0157222a.png b/doc/en/tutorials/assets/e5d5674a34e848e2cce90a60fc416415271d9c51b81ad2a950fb0157222a.png
index e6b4a9974..e6b4a9974 100644
--- a/doc/tutorials/assets/e5d5674a34e848e2cce90a60fc416415271d9c51b81ad2a950fb0157222a.png
+++ b/doc/en/tutorials/assets/e5d5674a34e848e2cce90a60fc416415271d9c51b81ad2a950fb0157222a.png
Binary files differ
diff --git a/doc/tutorials/assets/ef78bc6aa3fafebd46f353514c907b3fdfe019918fc5553bb3f31388a36f.png b/doc/en/tutorials/assets/ef78bc6aa3fafebd46f353514c907b3fdfe019918fc5553bb3f31388a36f.png
index 8de042ae4..8de042ae4 100644
--- a/doc/tutorials/assets/ef78bc6aa3fafebd46f353514c907b3fdfe019918fc5553bb3f31388a36f.png
+++ b/doc/en/tutorials/assets/ef78bc6aa3fafebd46f353514c907b3fdfe019918fc5553bb3f31388a36f.png
Binary files differ
diff --git a/doc/tutorials/assets/facb0bdfdecb4c779de9048cd14b417c0d76de17af476be5f296b78d70e9.png b/doc/en/tutorials/assets/facb0bdfdecb4c779de9048cd14b417c0d76de17af476be5f296b78d70e9.png
index cec391fb4..cec391fb4 100644
--- a/doc/tutorials/assets/facb0bdfdecb4c779de9048cd14b417c0d76de17af476be5f296b78d70e9.png
+++ b/doc/en/tutorials/assets/facb0bdfdecb4c779de9048cd14b417c0d76de17af476be5f296b78d70e9.png
Binary files differ
diff --git a/doc/tutorials/personal_channel.html b/doc/en/tutorials/personal_channel.html
index bbf367571..3069cd44b 100644
--- a/doc/tutorials/personal_channel.html
+++ b/doc/en/tutorials/personal_channel.html
@@ -1,18 +1,18 @@
-<p>This tutorial is intended to be followed in sequence as if you were setting up a
-channel for the first time. It introduces some of the tools and features related
+<p>This tutorial is intended to be followed in sequence as if you were setting up a
+channel for the first time. It introduces some of the tools and features related
to a personal channel in a natural way.</p>
<h3 id="Create_a_new_channel">Create a new channel</h3>
-<p>When you log in for the first time after registering, you must create a channel.
+<p>When you log in for the first time after registering, you must create a channel.
(Alternatively you can visit https://your_website/new_channel)</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/c9a880cc82ffa1f7c2f460397bb083bf7dc2a2b8f065e64da598b45b4a2b.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/c9a880cc82ffa1f7c2f460397bb083bf7dc2a2b8f065e64da598b45b4a2b.png" alt="image"></p>
-<p>Enter your name and a nickname for the channel address, and select a "role".
-Typically if this is a personal channel that represents you, select a <strong>Social</strong> role
-with a level of default privacy that you are comfortable with. If you are unsure,
+<p>Enter your name and a nickname for the channel address, and select a "role".
+Typically if this is a personal channel that represents you, select a <strong>Social</strong> role
+with a level of default privacy that you are comfortable with. If you are unsure,
select <strong>Social - Mostly public</strong> which allows easy interaction and provides privacy when you need it.
Alternatively, <strong>Social - Restricted</strong> is very popular among privacy advocates, though it may require a bit more
effort to meet people. Whichever setting you choose can be changed later if you decide you require more or less privacy than what is provided.</p>
@@ -20,15 +20,15 @@ effort to meet people. Whichever setting you choose can be changed later if you
<!-- This section no longer applicable
<h3 id="Configure_your_channel_features">Configure your channel features</h3>
-<p>When your new channel is created you are directed to the channel settings page.
-Take the time to look around at all the settings pages to familiarize yourself with
+<p>When your new channel is created you are directed to the channel settings page.
+Take the time to look around at all the settings pages to familiarize yourself with
your options, even if you don't understand everything you see right now.</p>
-<p>Navigate to the <strong>Additional Features</strong> settings and follow the screenshots below to
+<p>Navigate to the <strong>Additional Features</strong> settings and follow the screenshots below to
enable various features. Remember to press the Submit button when you are done with
your selections.</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/3656a67dce40a1fc2515e9089217f2e136d4fcf8babe77bac00ecaad43ce.png" alt="image"><img class="img-responsive" src="/help/tutorials/assets/4aaaf1e124514c8d6999a5fe1d07be5af460cda4ba6cde9106ebc1564bb0.png" alt="image"><img class="img-responsive" src="/help/tutorials/assets/99a6efda4df631dfb2d2a849412044cc6a0f8aebeac289d28786f2649d24.png" alt="image"><img class="img-responsive" src="/help/tutorials/assets/e5d5674a34e848e2cce90a60fc416415271d9c51b81ad2a950fb0157222a.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/3656a67dce40a1fc2515e9089217f2e136d4fcf8babe77bac00ecaad43ce.png" alt="image"><img class="img-responsive" src="/help/en/tutorials/assets/4aaaf1e124514c8d6999a5fe1d07be5af460cda4ba6cde9106ebc1564bb0.png" alt="image"><img class="img-responsive" src="/help/en/tutorials/assets/99a6efda4df631dfb2d2a849412044cc6a0f8aebeac289d28786f2649d24.png" alt="image"><img class="img-responsive" src="/help/en/tutorials/assets/e5d5674a34e848e2cce90a60fc416415271d9c51b81ad2a950fb0157222a.png" alt="image"></p>
-->
<h3 id="Add_a_profile_photo">Add a profile photo</h3>
@@ -37,126 +37,126 @@ your selections.</p>
<p>From the <strong>Profile Tools</strong> dropdown menu, select <strong>Change profile photo</strong> (or just click the profile photo).</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/31f42a02bdbae095e0329db6c3814e2975979aff12f873f43d81724c5e61.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/31f42a02bdbae095e0329db6c3814e2975979aff12f873f43d81724c5e61.png" alt="image"></p>
<p>Upload your photo and size as necessary using the image editor.</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/458a842c2ea0fbe3b7869bb14dfffe1e5be098d1cd6e590bbead25b4cc05.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/458a842c2ea0fbe3b7869bb14dfffe1e5be098d1cd6e590bbead25b4cc05.png" alt="image"></p>
-<p>When you press <strong>Done Editing</strong> you will be redirected back to the profile editor.
+<p>When you press <strong>Done Editing</strong> you will be redirected back to the profile editor.
(You might need to clear your browser cache if you have trouble seeing the new photo.)</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/d080e92d797af5e863fa39b2084c16a8410de1f7a6559633435817444aef.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/d080e92d797af5e863fa39b2084c16a8410de1f7a6559633435817444aef.png" alt="image"></p>
-<p>Returning to your channel home page you will see that a post notifying others of your new
+<p>Returning to your channel home page you will see that a post notifying others of your new
profile pic has been automatically posted.</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/1ebe02c205962dd25035c441631745d16acdb7a44e50d148256c8ad26a67.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/1ebe02c205962dd25035c441631745d16acdb7a44e50d148256c8ad26a67.png" alt="image"></p>
<h3 id="Compose_a_post">Compose a post</h3>
-<p>Go to your channel home and open the post editor by pressing the <strong>Share</strong> textbox
-at the top of the channel "wall". Enter a message, and then drag-and-drop an image
-file into the post editor text area (alternatively you can use the <strong>Attach file</strong>
+<p>Go to your channel home and open the post editor by pressing the <strong>Share</strong> textbox
+at the top of the channel "wall". Enter a message, and then drag-and-drop an image
+file into the post editor text area (alternatively you can use the <strong>Attach file</strong>
tool at the bottom).</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/b0bfdf02aef3710a37bb6092c3240b291eca8afa73133b3ac03b86f3302d.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/b0bfdf02aef3710a37bb6092c3240b291eca8afa73133b3ac03b86f3302d.png" alt="image"></p>
-<p>Your image file will be automatically uploaded and stored in your cloud files, and
+<p>Your image file will be automatically uploaded and stored in your cloud files, and
a link will appear in the post window. Pressing the post preview button will allow you to preview your post before publishing it.</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/7c976a06662a1357b3da8ed0680d1a721c85f2ae2bdd5739a8def466010e.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/7c976a06662a1357b3da8ed0680d1a721c85f2ae2bdd5739a8def466010e.png" alt="image"></p>
-<p>Pressing the lock button near the Submit button will open the <strong>Access Control List</strong>
+<p>Pressing the lock button near the Submit button will open the <strong>Access Control List</strong>
so you can specify exactly who can access this post.</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/2b539d5a8474d6ec6dc91155b628d9be5f99ab04a78108ec404f53ec7bb5.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/2b539d5a8474d6ec6dc91155b628d9be5f99ab04a78108ec404f53ec7bb5.png" alt="image"></p>
<h3 id="Use_an_uploaded_image_as_a_channel_cover_photo">Use an uploaded image as a channel cover photo</h3>
-<p>One way to add some pizzazz your channel is to add a cover photo that visitors will
-see when they load your channel page. The integrated cloud file system
+<p>One way to add some pizzazz your channel is to add a cover photo that visitors will
+see when they load your channel page. The integrated cloud file system
allows you to choose an existing photo for this purpose.</p>
<p>Visit your photos in the <strong>Photos</strong> app</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/0965ace945f0c95ae38aa5bfedd230d2a7233d3915ac15d629f9dd845854.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/0965ace945f0c95ae38aa5bfedd230d2a7233d3915ac15d629f9dd845854.png" alt="image"></p>
<p>Select the photo you wish to use and select <strong>Use as cover photo</strong> from the <strong>Photo Tools</strong>
dropdown menu.</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/9eae9fad774a4cd29e665961d35affbd053368056f562c58200fb41027b0.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/9eae9fad774a4cd29e665961d35affbd053368056f562c58200fb41027b0.png" alt="image"></p>
<p>Crop the image using the photo editor and save your changes.</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/b3eece28e8db67f1024af42055f0f24ed5e81ba622aca8cac576ccf5930e.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/b3eece28e8db67f1024af42055f0f24ed5e81ba622aca8cac576ccf5930e.png" alt="image"></p>
<p>When you load your channel home page, you will first see the cover photo, and your
channel page will fade in as you scroll down.</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/4cf326152797a8ecdf5630e921756f825ee00f8ee464d3ef9fed971d2852.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/4cf326152797a8ecdf5630e921756f825ee00f8ee464d3ef9fed971d2852.png" alt="image"></p>
<h3 id="Make_a_connection">Make a connection</h3>
-<p>Making connections between channels to share things is what social communications are all about.
+<p>Making connections between channels to share things is what social communications are all about.
Making a connection is simple. If you do not already know how to reach a channel's home
-page, you might try a directory search by opening the <strong>Directory</strong> link from the menu on the right
+page, you might try a directory search by opening the <strong>Directory</strong> link from the menu on the right
side of the top navbar.</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/ef78bc6aa3fafebd46f353514c907b3fdfe019918fc5553bb3f31388a36f.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/ef78bc6aa3fafebd46f353514c907b3fdfe019918fc5553bb3f31388a36f.png" alt="image"></p>
-<p>You can connect directly from the directory entry using the <strong>Connect</strong> button there,
-or you can open the channel page first and press the <strong>Connect</strong> button below the
+<p>You can connect directly from the directory entry using the <strong>Connect</strong> button there,
+or you can open the channel page first and press the <strong>Connect</strong> button below the
profile photo.</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/75d2927b7ad0d2043d4d3b6ba1364fac8ead173edd39340adaf78be11c9d.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/75d2927b7ad0d2043d4d3b6ba1364fac8ead173edd39340adaf78be11c9d.png" alt="image"></p>
-<p>After you connect you are immediately taken to the connection editor page, where
+<p>After you connect you are immediately taken to the connection editor page, where
you make some important decisions about what you plan to share with this channel.</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/b334915c03a665493915598c69c17a87c910a39db2cd3b5292e4623ea4c4.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/b334915c03a665493915598c69c17a87c910a39db2cd3b5292e4623ea4c4.png" alt="image"></p>
<p>The two important settings are</p>
<ul><li>The individual permissions for the newly connected channel</li>
<li>The privacy group(s) the connection is a member of</li>
-</ul><p>The individual permissions are mostly straightforward, but they can be slightly
+</ul><p>The individual permissions are mostly straightforward, but they can be slightly
unclear at first. For example, <strong>Can view my file storage and photos</strong> does <em>not</em>
-mean that the connected channel will be able to view <em>all</em> of your photos and files!
-It means that you will have the <em>option</em> to share photos and files with that
+mean that the connected channel will be able to view <em>all</em> of your photos and files!
+It means that you will have the <em>option</em> to share photos and files with that
channel. It is perfectly possible for you to allow someone to read your posts but
-disallow them from seeing photos in that post. This kind of unusual situation is,
+disallow them from seeing photos in that post. This kind of unusual situation is,
as they say, not a bug; it is a feature.</p>
<p>Privacy groups allow you to conveniently share items with groups of people. You can
create whatever groups fit your needs by opening the <strong>Add privacy group</strong> link.</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/facb0bdfdecb4c779de9048cd14b417c0d76de17af476be5f296b78d70e9.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/facb0bdfdecb4c779de9048cd14b417c0d76de17af476be5f296b78d70e9.png" alt="image"></p>
-<p>In this editor, you can switch between the existing privacy groups and see at a
-glance what channels are and are not members of the group. Selecting the icon of
+<p>In this editor, you can switch between the existing privacy groups and see at a
+glance what channels are and are not members of the group. Selecting the icon of
a channel in either box will move it to the in or out of the group.</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/25eaad2435200f72a1dd3a00ba17a76ca6db4c246b3c4fa286b390cae7c8.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/25eaad2435200f72a1dd3a00ba17a76ca6db4c246b3c4fa286b390cae7c8.png" alt="image"></p>
-<p>When editing an individual channel's settings, you can set their privacy group
+<p>When editing an individual channel's settings, you can set their privacy group
membership using the widget on the left:</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/bdbcf0ffd9004657237f6b7b7863da5a8e39a5bc17d2c67fa160efef2056.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/bdbcf0ffd9004657237f6b7b7863da5a8e39a5bc17d2c67fa160efef2056.png" alt="image"></p>
<p>Connections are a mutual engagement. The channel you connect can <em>choose</em> to approve your
connection. They will receive a notification that you connected</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/324247680b605fd214fd61aecd8f216fa8f5dfa0f16a04c8e968fdbc43d0.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/324247680b605fd214fd61aecd8f216fa8f5dfa0f16a04c8e968fdbc43d0.png" alt="image"></p>
-<p>which takes them to their <a href="https://grid.reticu.li/connections"><strong>Connections</strong></a> editor page where
+<p>which takes them to their <a href="https://grid.reticu.li/connections"><strong>Connections</strong></a> editor page where
they can choose to approve the connection or not.</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/e05248fdc5688d6d24bde52432fdc7b39692a094559aa504de99352940b1.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/e05248fdc5688d6d24bde52432fdc7b39692a094559aa504de99352940b1.png" alt="image"></p>
-<p>After you approve a connection, it is a good idea to open the individual connection
+<p>After you approve a connection, it is a good idea to open the individual connection
editor by pressing the edit button beside the <strong>Delete</strong> button.</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/c4cad3e4c356dd2a227df79bd4dc6d47edf1b66ea243f005b6b452ec366b.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/c4cad3e4c356dd2a227df79bd4dc6d47edf1b66ea243f005b6b452ec366b.png" alt="image"></p>
+
-
diff --git a/include/help.php b/include/help.php
index 9e4be57f9..12721a30b 100644
--- a/include/help.php
+++ b/include/help.php
@@ -5,203 +5,6 @@ use CommerceGuys\Intl\Language\LanguageRepository;
require_once('include/items.php');
-/**
- * @brief
- *
- * @param string $path
- * @param string $suffix (optional) default null
- * @return string
- */
-function get_help_fullpath($path, $suffix = null) {
-
- $docroot = (\App::$override_helproot) ? \App::$override_helproot : 'doc/';
- $docroot = (substr($docroot,-1)!='/') ? $docroot .= '/' : $docroot;
-
- // Determine the language and modify the path accordingly
- $x = determine_help_language();
- $lang = $x['language'];
-
- // The English translation is at the root of /doc/. Other languages are in
- // subfolders named by the language code such as "de", "es", etc.
- if($lang !== 'en') {
- $langpath = $lang . '/' . $path;
- } else {
- $langpath = $path;
- }
-
- $newpath = (isset(\App::$override_helpfiles[$langpath])) ? \App::$override_helpfiles[$langpath] : $langpath;
- $newpath = ($newpath == $langpath) ? $docroot . $newpath : $newpath;
-
- if ($suffix) {
- if (file_exists($newpath . $suffix)) {
- return $newpath;
- }
- } elseif (file_exists($newpath . '.md') ||
- file_exists($newpath . '.bb') ||
- file_exists($newpath . '.html')) {
- return $newpath;
- }
-
- $newpath = (isset(\App::$override_helpfiles[$path])) ? \App::$override_helpfiles[$path] : null;
-
- $newpath = (!$newpath) ? $docroot.$path : $newpath;
- return $newpath;
-}
-
-
-/**
- * @brief
- *
- * @param string $tocpath (optional) default false
- * @return string
- */
-function get_help_content($tocpath = false) {
-
- $doctype = 'markdown';
-
- $text = '';
-
- $path = (($tocpath !== false) ? $tocpath : '');
- $docroot = (\App::$override_helproot) ? \App::$override_helproot : 'doc/';
- $docroot = (substr($docroot,-1)!='/') ? $docroot .= '/' : $docroot;
-
- if($tocpath === false && argc() > 1) {
- $path = '';
- for($x = 1; $x < argc(); $x ++) {
- if(strlen($path))
- $path .= '/';
- $path .= argv($x);
- }
- }
-
-
- if($path) {
- $fullpath = get_help_fullpath($path);
- $title = basename($path);
- if(! $tocpath)
- \App::$page['title'] = t('Help:') . ' ' . ucwords(str_replace('-',' ',notags($title)));
-
- // Check that there is a "toc" or "sitetoc" located at the specified path.
- // If there is not, then there was not a translation of the table of contents
- // available and so default back to the English TOC at /doc/toc.{html,bb,md}
- // TODO: This is incompatible with the hierarchical TOC construction
- // defined in /Zotlabs/Widget/Helpindex.php.
- if($tocpath !== false &&
- load_doc_file($fullpath . '.md') === '' &&
- load_doc_file($fullpath . '.bb') === '' &&
- load_doc_file($fullpath . '.html') === ''
- ) {
- $path = $title;
- }
- $fullpath = get_help_fullpath($path);
- $text = load_doc_file($fullpath . '.md');
-
- if(! $text) {
- $text = load_doc_file($fullpath . '.bb');
- if($text)
- $doctype = 'bbcode';
- }
- if(! $text) {
- $text = load_doc_file($fullpath . '.html');
- if($text)
- $doctype = 'html';
- }
- }
-
- if(($tocpath) && (! $text))
- return '';
-
- if($tocpath === false) {
- if(! $text) {
- $path = 'Site';
- $fullpath = get_help_fullpath($path,'.md');
- $text = load_doc_file($fullpath . '.md');
- \App::$page['title'] = t('Help');
- }
- if(! $text) {
- $doctype = 'bbcode';
- $path = 'main';
- $fullpath = get_help_fullpath($path,'.md');
- $text = load_doc_file($fullpath . '.bb');
- goaway('/help/about/about');
- \App::$page['title'] = t('Help');
- }
-
- if(! $text) {
- header($_SERVER["SERVER_PROTOCOL"] . ' 404 ' . t('Not Found'));
- $tpl = get_markup_template("404.tpl");
- return replace_macros($tpl, array(
- '$message' => t('Page not found.')
- ));
- }
- }
-
- if($doctype === 'html')
- $content = parseIdentityAwareHTML($text);
- if($doctype === 'markdown') {
- # escape #include tags
- $text = preg_replace('/#include/ism', '%%include', $text);
- $content = MarkdownExtra::defaultTransform($text);
- $content = preg_replace('/%%include/ism', '#include', $content);
- }
- if($doctype === 'bbcode') {
- require_once('include/bbcode.php');
- $content = zidify_links(bbcode($text));
- // bbcode retargets external content to new windows. This content is internal.
- $content = str_replace(' target="_blank"', '', $content);
- }
-
- $content = preg_replace_callback("/#include (.*?)\;/ism", 'preg_callback_help_include', $content);
-
- return translate_projectname($content);
-}
-
-function preg_callback_help_include($matches) {
-
- if($matches[1]) {
- $include = str_replace($matches[0],load_doc_file($matches[1]),$matches[0]);
- if(preg_match('/\.bb$/', $matches[1]) || preg_match('/\.txt$/', $matches[1])) {
- require_once('include/bbcode.php');
- $include = zidify_links(bbcode($include));
- $include = str_replace(' target="_blank"','',$include);
- }
- elseif(preg_match('/\.md$/', $matches[1])) {
- $include = MarkdownExtra::defaultTransform($include);
- }
- return $include;
- }
-
-}
-
-/**
- * @brief Determines help language.
- *
- * If the language was specified in the URL, override the language preference
- * of the browser. Default to English if both of these are absent.
- *
- * @return array Associative array with:
- * * \e string \b language - 2-letter ISO 639-1 code ("en")
- * * \e boolean \b from_url - true if language from URL overrides browser default
- */
-function determine_help_language() {
-
- $language_repository = new LanguageRepository;
- $languages = $language_repository->getList();
-
- if(array_key_exists(argv(1), $languages)) {
- $lang = argv(1);
- $from_url = true;
- } else {
- $lang = \App::$language;
- if(! isset($lang))
- $lang = 'en';
-
- $from_url = false;
- }
-
- return array('language' => $lang, 'from_url' => $from_url);
-}
-
function load_doc_file($s) {
$c = find_doc_file($s);
diff --git a/tests/unit/Module/HelpTest.php b/tests/unit/Module/HelpTest.php
new file mode 100644
index 000000000..0f1610db5
--- /dev/null
+++ b/tests/unit/Module/HelpTest.php
@@ -0,0 +1,188 @@
+<?php
+/**
+ * SPDX-FileCopyrightText: 2024 Harald Eilertsen
+ * SPDX-FileCopyrightText: 2024 Hubzilla Community
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+class HelpTest extends \Zotlabs\Tests\Unit\Module\TestCase {
+
+ use \phpmock\phpunit\PHPMock;
+
+ /**
+ * Define the stubs to make sure they work later in the test.
+ *
+ * @see https://php-mock.github.io/php-mock-phpunit/api/class-phpmock.phpunit.PHPMock.html#_defineFunctionMock
+ *
+ * @beforeClass
+ */
+ public static function define_stubs(): void {
+ self::defineFunctionMock('Zotlabs\Lib\Traits', 'file_exists');
+ self::defineFunctionMock('Zotlabs\Module', 'file_get_contents');
+ }
+
+ /**
+ * Test getting a help page when the underlying file exists.
+ *
+ * @testWith
+ * ["md"]
+ * ["bb"]
+ * ["html"]
+ */
+ public function test_get_request_when_help_file_exists(string $ext): void {
+ // Stub file exists, to only retur true for the file with the current
+ // extension
+ $fe_stub = $this->getFunctionMock('Zotlabs\Lib\Traits', 'file_exists');
+ $fe_stub
+ ->expects($this->any())
+ ->willReturnCallback(
+ fn (string $path) => $path === "doc/en/about/help_topic.{$ext}"
+ );
+
+ // Use a value map to make the `file_get_contents` stub return the
+ // correct content for the file types.
+ $file_content_map = [
+ [ 'doc/en/about/help_topic.md', "### Help heading\n\$Projectname help content" ],
+ [ 'doc/en/about/help_topic.bb', "[h3]Help heading[/h3]\n\n\$Projectname help content" ],
+ [ 'doc/en/about/help_topic.html', "<h3>Help heading</h3><p>\$Projectname help content</p>" ],
+ ];
+
+ // Stub `file_get_contents` to plant our own content.
+ $fgc_stub = $this->getFunctionMock('Zotlabs\Module', 'file_get_contents');
+ $fgc_stub
+ ->expects($this->once())
+ ->willReturn($this->returnValueMap($file_content_map));
+
+
+ $this->get("help/about/help_topic");
+
+ // Check that markdown content was correctly rendered
+ $this->assertPageContains('<h3>Help heading</h3>');
+
+ // Check that `$Projectname` has been translated properly
+ $this->assertPageContains('Hubzilla help content');
+
+ // Check that heading has been set
+ $this->assertPageContains('Hubzilla Documentation: About');
+
+ // Check that page title has been set
+ $this->assertTrue(isset(\App::$page['title']), 'Page title not set');
+ $this->assertStringContainsString('Help', \App::$page['title']);
+ $this->assertStringContainsStringIgnoringCase('Help Topic', \App::$page['title']);
+
+ // Check that nav selection has been set
+ $this->assertTrue(isset(\App::$nav_sel['raw_name']), 'Nav selection raw name not set');
+ $this->assertEquals('Help', \App::$nav_sel['raw_name']);
+
+ $this->assertTrue(isset(\App::$nav_sel['name']), 'Navselection name not set');
+ $this->assertEquals('Help', \App::$nav_sel['name']);
+ }
+
+ public function test_get_request_should_return_404_when_help_file_does_not_exist(): void {
+ // Stub file exists, to only retur true for the file with the current
+ // extension
+ $fe_stub = $this->getFunctionMock('Zotlabs\Lib\Traits', 'file_exists');
+ $fe_stub
+ ->expects($this->any())
+ ->willReturn(false);
+
+ // Make sure `file_get_contents` is never called by the code.
+ $fgc_stub = $this->getFunctionMock('Zotlabs\Module', 'file_get_contents');
+ $fgc_stub->expects($this->never());
+
+ $this->get("help/this_topic_does_not_exist");
+
+ $this->assertPageContains('not found');
+ }
+
+ public function test_get_request_without_args_redirects_to_about_page(): void {
+ $this->stub_goaway();
+ $this->expectException(\Zotlabs\Tests\Unit\Module\RedirectException::class);
+ $this->expectExceptionMessage('about/about');
+
+ $this->get('help');
+ }
+
+ public function test_find_help_file_returns_first_match(): void {
+ // Stub file exists, to always return true
+ $fe_stub = $this->getFunctionMock('Zotlabs\Lib\Traits', 'file_exists');
+ $fe_stub
+ ->expects($this->once())
+ ->willReturn(true);
+
+ // Stub `file_get_contents` to plant our own content.
+ $fgc_stub = $this->getFunctionMock('Zotlabs\Module', 'file_get_contents');
+ $fgc_stub
+ ->expects($this->once())
+ ->with('doc/en/first.md')
+ ->willReturn('found');
+
+ $this->get('help/first');
+ }
+
+ public function test_includes(): void {
+ // Stub `file_get_contents` to plant our own content.
+ $fgc_stub = $this->getFunctionMock('Zotlabs\Module', 'file_get_contents');
+ $fgc_stub
+ ->expects($this->any())
+ ->willReturnCallback(
+ function (string $path): string {
+ if ($path === 'doc/en/sub.md') {
+ return "### This is the included file.";
+ } else {
+ return "### Main topic\n\n#include doc/en/sub.md;";
+ }
+ }
+ );
+
+ // Stub file exists, to always return true
+ $fe_stub = $this->getFunctionMock('Zotlabs\Lib\Traits', 'file_exists');
+ $fe_stub
+ ->expects($this->any())
+ ->willReturn(true);
+
+ $this->get('help/main');
+
+ $this->assertPageContains('<h3>This is the included file.</h3>');
+ }
+
+ public function test_include_file_of_different_type_than_main_file(): void {
+ // Stub `file_get_contents` to plant our own content.
+ $fgc_stub = $this->getFunctionMock('Zotlabs\Module', 'file_get_contents');
+ $fgc_stub
+ ->expects($this->any())
+ ->willReturnCallback(
+ function (string $path): string {
+ if ($path === 'doc/en/sub.md') {
+ return "### This is the included file.";
+ } else {
+ return "[h3]Main topic[/h3]\n\n#include doc/en/sub.md;";
+ }
+ }
+ );
+
+ // Stub file exists, only return true for main.bb and sub.md
+ $fe_stub = $this->getFunctionMock('Zotlabs\Lib\Traits', 'file_exists');
+ $fe_stub
+ ->expects($this->any())
+ ->willReturnCallback(
+ fn (string $path) => (
+ $path === 'doc/en/main.bb' || $path === 'doc/en/sub.md'
+ )
+ );
+
+ $this->get('help/main');
+
+ $this->assertPageContains('<h3>This is the included file.</h3>');
+ }
+
+ /**
+ * Helper to simplify asserting contents in the rendered page.
+ *
+ * @param string $needle The expected string to find.
+ */
+ private function assertPageContains(string $needle): void {
+ $this->assertStringContainsString($needle, \App::$page['content']);
+ }
+}
diff --git a/tests/unit/Module/SetupTest.php b/tests/unit/Module/SetupTest.php
new file mode 100644
index 000000000..96a5ef932
--- /dev/null
+++ b/tests/unit/Module/SetupTest.php
@@ -0,0 +1,74 @@
+<?php
+/**
+ * SPDX-FileCopyrightText: 2024 Harald Eilertsen
+ * SPDX-FileCopyrightText: 2024 Hubzilla Community
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+/**
+ * SetupModuleTest
+ *
+ * The Setup module should only be available during site installation. This is
+ * determined by whether there are any accounts present in the database, or
+ * not.
+ *
+ * This is a complex module, so expect the tests to grow as more of it will be
+ * covered.
+ */
+class SetupModuleTest extends \Zotlabs\Tests\Unit\Module\TestCase {
+
+ public function test_that_setup_is_available_if_no_accounts_in_db(): void {
+ $this->with_no_accounts_in_db();
+ $this->get('setup');
+
+ $this->assertEquals('setup', \App::$page['page_title']);
+
+ // Assert that result _don't_ match "Permission denied"
+ $this->assertThat(
+ \App::$page['content'],
+ $this->logicalNot(
+ $this->matchesRegularExpression('/Permission denied/')
+ )
+ );
+ }
+
+ public function test_that_setup_is_not_available_if_accounts_in_db(): void {
+ // The fixtures loaded by default add a couple of accounts.
+ $this->get('setup');
+
+ $this->assertEquals('setup', \App::$page['page_title']);
+ $this->assertMatchesRegularExpression('/Permission denied/', \App::$page['content']);
+ }
+
+ public function test_that_setup_testrewrite_returns_ok(): void {
+ // We need to stub the `killme` function, as it is called directly from
+ // the code under test.
+ $this->stub_killme();
+
+ $output = '';
+
+ // Turn on output buffering, as code under test echoes
+ // directly to the output
+ ob_start();
+ try {
+ $this->get('setup/testrewrite');
+ } catch (\Zotlabs\Tests\Unit\Module\KillmeException) {
+ $output = ob_get_contents();
+ }
+
+ $this->assertEquals('ok', $output);
+
+ ob_end_clean();
+ }
+
+ /**
+ * Delete all accounts from the database.
+ *
+ * This is currently needed because we automatically import the database
+ * fixtures on test start, which contains a couple of accounts already.
+ */
+ private function with_no_accounts_in_db(): void {
+ q('DELETE FROM account;');
+ }
+}
diff --git a/tests/unit/Module/TestCase.php b/tests/unit/Module/TestCase.php
new file mode 100644
index 000000000..aa09e0596
--- /dev/null
+++ b/tests/unit/Module/TestCase.php
@@ -0,0 +1,74 @@
+<?php
+
+namespace Zotlabs\Tests\Unit\Module;
+
+class TestCase extends \Zotlabs\Tests\Unit\UnitTestCase {
+
+ // Import PHPMock methods into this class
+ use \phpmock\phpunit\PHPMock;
+
+ /**
+ * Emulate a GET request.
+ *
+ * @param string $uri The URI to request. Typically this will be the module
+ * name, followed by any req args separated by slashes.
+ */
+ protected function get(string $uri): void {
+ $_GET['q'] = $uri;
+ $_SERVER['REQUEST_METHOD'] = 'GET';
+
+ \App::init();
+ \App::$page['content'] = '';
+
+ $router = new \Zotlabs\Web\Router();
+ $router->Dispatch();
+ }
+
+ /**
+ * Stub out the `killme` function.
+ *
+ * Usefule for modules that call this function directly.
+ *
+ * Instead of calling exit, the stub will throw a `KillmeException`,
+ * that can be caught by the test code to regain control after request
+ * processing is terminated.
+ */
+ protected function stub_killme(): void {
+ $killme_stub = $this->getFunctionMock('Zotlabs\Module', 'killme');
+ $killme_stub
+ ->expects($this->once())
+ ->willReturnCallback(
+ function () {
+ throw new KillmeException();
+ }
+ );
+ }
+
+ protected function stub_goaway(): void {
+ $goaway_stub = $this->getFunctionMock('Zotlabs\Module', 'goaway');
+ $goaway_stub
+ ->expects($this->once())
+ ->willReturnCallback(
+ function (string $uri) {
+ throw new RedirectException($uri);
+ }
+ );
+ }
+}
+
+/**
+ * Exception class for killme stub
+ */
+class KillmeException extends \Exception {}
+
+/**
+ * Exception class for goaway stub.
+ *
+ * Takes the goaway uri as an arg, and makes it available as
+ * the public `$uri` member variable.
+ */
+class RedirectException extends \Exception {
+ function __construct(string $uri) {
+ parent::__construct($uri);
+ }
+}
diff --git a/tests/unit/Widget/HelpindexTest.php b/tests/unit/Widget/HelpindexTest.php
new file mode 100644
index 000000000..a8b51172b
--- /dev/null
+++ b/tests/unit/Widget/HelpindexTest.php
@@ -0,0 +1,80 @@
+<?php
+/**
+ * Tests for the Helpindex widget.
+ *
+ * SPDX-FileCopyrightText: 2024 Harald Eilertsen
+ * SPDX-FileCopyrightText: 2024 Hubzilla Community
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+/**
+ * Test class for testing the Helpindex widget.
+ */
+class HelpindexTest extends \Zotlabs\Tests\Unit\Module\TestCase {
+
+ use \phpmock\phpunit\PHPMock;
+
+ /**
+ * Define the stubs to make sure they work later in the test.
+ *
+ * @see https://php-mock.github.io/php-mock-phpunit/api/class-phpmock.phpunit.PHPMock.html#_defineFunctionMock
+ *
+ * @beforeClass
+ */
+ public static function define_stubs(): void {
+ \phpmock\phpunit\PHPMock::defineFunctionMock('Zotlabs\Lib\Traits', 'file_exists');
+ \phpmock\phpunit\PHPMock::defineFunctionMock('Zotlabs\Widget', 'file_get_contents');
+ }
+
+ public function test_loading_toc(): void {
+ // Stub `file_get_contents` to plant our own content.
+ $fgc_stub = $this->getFunctionMock('Zotlabs\Widget', 'file_get_contents');
+ $fgc_stub
+ ->expects($this->once())
+ ->with($this->equalTo('doc/en/toc.html'))
+ ->willReturn('toc');
+
+ // Stub `file_exists` to only return true for the english toc file
+ $fe_stub = $this->getFunctionMock('Zotlabs\Lib\Traits', 'file_exists');
+ $fe_stub
+ ->expects($this->any())
+ ->willReturnCallback(fn (string $path) => $path === 'doc/en/toc.html' );
+
+ $this->render_widget();
+ $this->assertOutputContains('toc');
+ $this->assertOutputContains('Help Content');
+ }
+
+ public function test_that_result_is_empty_when_toc_not_present(): void {
+ // Ensure `file_get_contents` is not called during the test.
+ $fgc_stub = $this->getFunctionMock('Zotlabs\Widget', 'file_get_contents');
+ $fgc_stub->expects($this->never());
+
+ // Stub `file_exists` to always return false to simulate that we
+ // can't find the toc file.
+ $fe_stub = $this->getFunctionMock('Zotlabs\Lib\Traits', 'file_exists');
+ $fe_stub
+ ->expects($this->any())
+ ->willReturn(false);
+
+ $this->render_widget();
+ }
+
+ /**
+ * Initializes the app and calls the widget code.
+ */
+ private function render_widget(): void {
+ $_GET['q'] = 'help/en/about/about';
+ $_SERVER['REQUEST_METHOD'] = 'GET';
+
+ \App::init();
+
+ $widget = new \Zotlabs\Widget\Helpindex();
+ $this->output = $widget->widget([]);
+ }
+
+ private function assertOutputContains(string $needle): void {
+ $this->assertStringContainsString($needle, $this->output);
+ }
+}
diff --git a/tests/unit/includes/LanguageTest.php b/tests/unit/includes/LanguageTest.php
index 9525c783d..3367232f3 100644
--- a/tests/unit/includes/LanguageTest.php
+++ b/tests/unit/includes/LanguageTest.php
@@ -33,54 +33,6 @@ use Text_LanguageDetect;
* @author Klaus Weidenbach
*/
class LanguageTest extends UnitTestCase {
- //use PHPMock;
-
- /**
- * @dataProvider languageExamplesProvider
- * @coversNothing
- */
- public function testDetectLanguage($text, $langCode, $confidence) {
-
- // php-mock can not mock global functions which is called by a global function.
- // If the calling function is in a namespace it would work.
- //$gc = $this->getFunctionMock(__NAMESPACE__, 'get_config');
- //$gc->expects($this->once())->willReturn(10)
- //$cg = $this->getFunctionMock('Zotlabs\Lib\Config', 'Get');
- //$cg->expects($this->once())->willReturn(10);
- //$this->assertEquals($langCode, detect_language($text));
-
-
- // Can not unit test detect_language(), therefore test the used library
- // only for now to find regressions on library updates.
- $l = new Text_LanguageDetect;
- // return 2-letter ISO 639-1 (en) language code
- $l->setNameMode(2);
- $lng = $l->detectConfidence($text);
-
- $this->assertEquals($langCode, $lng['language']);
- $this->assertEquals($confidence, round($lng['confidence'], 6));
- }
-
- public function languageExamplesProvider() {
- return [
- 'English' => [
- 'English is a West Germanic language that was first spoken in early medieval England and is now a global lingua franca.[4][5] Named after the Angles, one of the Germanic tribes that migrated to England, it ultimately derives its name from the Anglia (Angeln) peninsula in the Baltic Sea. It is closely related to the Frisian languages, but its vocabulary has been significantly influenced by other Germanic languages, particularly Norse (a North Germanic language), as well as by Latin and Romance languages, especially French.',
- 'en',
- 0.078422
- ],
- 'German' => [
- 'Deutschland ist ein Bundesstaat in Mitteleuropa. Er besteht aus 16 Ländern und ist als freiheitlich-demokratischer und sozialer Rechtsstaat verfasst. Die Bundesrepublik Deutschland stellt die jüngste Ausprägung des deutschen Nationalstaates dar. Mit rund 82,8 Millionen Einwohnern (31. Dezember 2016) zählt Deutschland zu den dicht besiedelten Flächenstaaten.',
- 'de',
- 0.134339
- ],
- 'Norwegian' => [
- 'Kongeriket Norge er et nordisk, europeisk land og en selvstendig stat vest på Den skandinaviske halvøy. Landet er langt og smalt, og kysten strekker seg langs Nord-Atlanteren, hvor også Norges kjente fjorder befinner seg. Totalt dekker det relativt tynt befolkede landet 385 000 kvadratkilometer med litt over fem millioner innbyggere (2016).',
- 'no',
- 0.007076
- ]
- ];
- }
-
/**
* @covers ::get_language_name
diff --git a/view/tpl/help.tpl b/view/tpl/help.tpl
index 5022e7b1b..ba61a43ce 100644
--- a/view/tpl/help.tpl
+++ b/view/tpl/help.tpl
@@ -13,19 +13,19 @@
</div>
</div>
</div>
- <h2>{{$title}}: {{$heading}}</h2>
+ <h2>{{$module->get_page_title()}}</h2>
</div>
<div class="section-content-wrapper" id="doco-content">
<h3 id="doco-top-toc-heading">
<span class="fakelink" onclick="docoTocToggle(); return false;">
<i class="fa fa-fw fa-caret-right fakelink" id="doco-toc-toggle"></i>
- {{$tocHeading}}
+ {{$module->get_toc_heading()}}
</span>
</h3>
<ul id="doco-top-toc" style="margin-bottom: 1.5em; display: none;"></ul>
- {{$content}}
+ {{$module->render_content()}}
</div>
</div>
<script>
- var help_language = '{{$language}}'
+ var help_language = '{{$module->lang["language"]}}'
</script>
diff --git a/view/tpl/widget.tpl b/view/tpl/widget.tpl
new file mode 100644
index 000000000..3fb3b1200
--- /dev/null
+++ b/view/tpl/widget.tpl
@@ -0,0 +1,10 @@
+{{* Generic template for widgets.
+ *
+ * To use this template, pass the `$this` object reference of the widget,
+ * and implement the `title()` and `contents()` functions as public methods
+ * on the widget class.
+ *}}
+<div class="widget">
+ <h3>{{$widget->title()}}</h3>
+ {{$widget->contents()}}
+</div>