aboutsummaryrefslogtreecommitdiffstats
path: root/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc')
-rw-r--r--doc/Developers.md2
-rw-r--r--doc/Features.md2
-rw-r--r--doc/Plugins.md12
-rw-r--r--doc/Privacy.md6
-rw-r--r--doc/Translations.md2
-rw-r--r--doc/account_basics.bb2
-rw-r--r--doc/addons_gnusocial.bb8
-rw-r--r--doc/ca/general.bb2
-rw-r--r--doc/campaign.bb18
-rw-r--r--doc/channels.bb2
-rw-r--r--doc/cloud.bb2
-rw-r--r--doc/comanche.bb51
-rw-r--r--doc/connecting_to_channels.bb2
-rw-r--r--doc/connecting_to_channels.md2
-rw-r--r--doc/context/en/connedit/help.html12
-rw-r--r--doc/context/en/settings/features/help.html12
-rw-r--r--doc/context/es-es/settings/features/help.html12
-rw-r--r--doc/contributor/covenant.html106
-rw-r--r--doc/de/general.bb2
-rw-r--r--doc/develop.bb4
-rw-r--r--doc/developers.bb4
-rw-r--r--doc/diaspora_compat.bb68
-rw-r--r--doc/diaspora_compat.md60
-rw-r--r--doc/extra_features.bb2
-rw-r--r--doc/faq_admins.bb2
-rw-r--r--doc/faq_members.bb4
-rw-r--r--doc/feature/access_tokens.bb47
-rw-r--r--doc/feature/saved_search.bb19
-rw-r--r--doc/feature/techlevels.bb15
-rw-r--r--doc/general.bb4
-rw-r--r--doc/hidden_configs.bb4
-rw-r--r--doc/hook/bbcode.bb5
-rw-r--r--doc/hook/bbcode_filter.bb7
-rw-r--r--doc/hook/event_store_event.bb11
-rw-r--r--doc/hook/get_profile_photo.bb18
-rw-r--r--doc/hooklist.bb11
-rw-r--r--doc/permissions.bb2
-rw-r--r--doc/plugins.bb6
-rw-r--r--doc/problems-following-an-update.bb2
-rw-r--r--doc/project/governance.bb45
-rw-r--r--doc/project/history.md (renamed from doc/history.md)18
-rw-r--r--doc/project/toc.html6
-rw-r--r--doc/project/versions.bb30
-rw-r--r--doc/red2pi.bb2
-rw-r--r--doc/server_roles.bb27
-rw-r--r--doc/sv/main.bb4
-rw-r--r--doc/toc.html6
-rw-r--r--doc/zot.md2
48 files changed, 574 insertions, 118 deletions
diff --git a/doc/Developers.md b/doc/Developers.md
index b19b4fc2f..ef02c8327 100644
--- a/doc/Developers.md
+++ b/doc/Developers.md
@@ -18,7 +18,7 @@ to notify us to merge your work.
**Translations**
-Our translations are managed through Transifex. If you wish to help out translating the $Projectname to another language, sign up on transifex.com, visit [https://www.transifex.com/projects/p/red-matrix/](https://www.transifex.com/projects/p/red-matrix/) and request to join one of the existing language teams or create a new one. Notify one of the core developers when you have a translation update which requires merging, or ask about merging it yourself if you're comfortable with git and PHP. We have a string file called 'messages.po' which is gettext compliant and a handful of email templates, and from there we automatically generate the application's language files.
+Our translations are managed through Transifex. If you wish to help out translating $Projectname to another language, sign up on transifex.com, visit [https://www.transifex.com/projects/p/red-matrix/](https://www.transifex.com/projects/p/red-matrix/) and request to join one of the existing language teams or create a new one. Notify one of the core developers when you have a translation update which requires merging, or ask about merging it yourself if you're comfortable with git and PHP. We have a string file called 'messages.po' which is gettext compliant and a handful of email templates, and from there we automatically generate the application's language files.
[Translations - More Info](help/Translations)
diff --git a/doc/Features.md b/doc/Features.md
index 3c5105582..a43fd73fa 100644
--- a/doc/Features.md
+++ b/doc/Features.md
@@ -1,7 +1,7 @@
Extra Features
==============
-The default interface of the $Projectname was designed to be uncluttered. There are a huge number of extra features (some of which are extremely useful) which you can turn on and get the most of the application. These are found under the [Extra Features](settings/features) link of your [Settings](settings) page.
+The default interface of $Projectname was designed to be uncluttered. There are a huge number of extra features (some of which are extremely useful) which you can turn on and get the most of the application. These are found under the [Extra Features](settings/features) link of your [Settings](settings) page.
**Content Expiration**
diff --git a/doc/Plugins.md b/doc/Plugins.md
index 90ff0fb7d..88b42185b 100644
--- a/doc/Plugins.md
+++ b/doc/Plugins.md
@@ -1,9 +1,9 @@
-Creating Plugins/Addons for the $Projectname
+Creating Plugins/Addons for $Projectname
==========================================
-So you want to make the $Projectname do something it doesn't already do. There are lots of ways. But let's learn how to write a plugin or addon.
+So you want to make $Projectname do something it doesn't already do. There are lots of ways. But let's learn how to write a plugin or addon.
In your $Projectname folder/directory, you will probably see a sub-directory called 'addon'. If you don't have one already, go ahead and create it.
@@ -49,7 +49,7 @@ In our case, we'll call them randplace_load() and randplace_unload(), as that is
* pluginname_uninstall()
-Next we'll talk about **hooks**. Hooks are places in the $Projectname code where we allow plugins to do stuff. There are a [lot of these](help/Hooks), and they each have a name. What we normally do is use the pluginname_load() function to register a "handler function" for any hooks you are interested in. Then when any of these hooks are triggered, your code will be called.
+Next we'll talk about **hooks**. Hooks are places in $Projectname code where we allow plugins to do stuff. There are a [lot of these](help/Hooks), and they each have a name. What we normally do is use the pluginname_load() function to register a "handler function" for any hooks you are interested in. Then when any of these hooks are triggered, your code will be called.
We register hook handlers with the 'register_hook()' function. It takes 3 arguments. The first is the hook we wish to catch, the second is the filename of the file to find our handler function (relative to the base of your $Projectname installation), and the third is the function name of your handler function. So let's create our randplace_load() function right now.
@@ -246,18 +246,18 @@ we will create an argc/argv list for use by your module functions
***Porting Friendica Plugins***
-The $Projectname uses a similar plugin architecture to the Friendica project. The authentication, identity, and permissions systems are completely different. Many Friendica can be ported reasonably easily by renaming a few functions - and then ensuring that the permissions model is adhered to. The functions which need to be renamed are:
+$Projectname uses a similar plugin architecture to the Friendica project. The authentication, identity, and permissions systems are completely different. Many Friendica plugins can be ported reasonably easily by renaming a few functions - and then ensuring that the permissions model is adhered to. The functions which need to be renamed are:
* Friendica's pluginname_install() is pluginname_load()
* Friendica's pluginname_uninstall() is pluginname_unload()
-The $Projectname has _install and _uninstall functions but these are used differently.
+$Projectname has _install and _uninstall functions but these are used differently.
* Friendica's "plugin_settings" hook is called "feature_settings"
* Friendica's "plugin_settings_post" hook is called "feature_settings_post"
-Changing these will often allow your plugin to function, but please double check all your permission and identity code because the concepts behind it are completely different in the $Projectname. Many structured data names (especially DB schema columns) are also quite different.
+Changing these will often allow your plugin to function, but please double check all your permission and identity code because the concepts behind it are completely different in $Projectname. Many structured data names (especially DB schema columns) are also quite different.
#include doc/macros/main_footer.bb;
diff --git a/doc/Privacy.md b/doc/Privacy.md
index 089977d7e..1ac019f5a 100644
--- a/doc/Privacy.md
+++ b/doc/Privacy.md
@@ -36,11 +36,11 @@ Any information or anything posted by you within $Projectname MAY be public or v
Your profile photo, your channel name, and the location (URL or network address) of your channel are visible to anybody on the internet and privacy controls will not affect the display of these items.
-You MAY additionally provide other profile information. Any information which you provide in your "default" or **public profile** MAY be transmitted to other hubs in the $Projectname and additionally MAY be displayed in the channel directory. You can restrict the viewing of this profile information. It may be restricted only to members of your hub, or only connections (friends), or other limited sets of viewers as you desire. If you wish for your profile to be restricted, you must set the appropriate privacy setting, or simply DO NOT provide additional information.
+You MAY additionally provide other profile information. Any information which you provide in your "default" or **public profile** MAY be transmitted to other hubs in $Projectname and additionally MAY be displayed in the channel directory. You can restrict the viewing of this profile information. It may be restricted only to members of your hub, or only connections (friends), or other limited sets of viewers as you desire. If you wish for your profile to be restricted, you must set the appropriate privacy setting, or simply DO NOT provide additional information.
**Content**
-Content you provide (status posts, photos, files, etc.) belongs to you. The $Projectname default is to publish content openly and visible to anybody on the internet (PUBLIC). You MAY control this in your channel settings and restrict the default permissions or you MAY restrict the visibility of any single published item separately (PRIVATE). $Projectname developers will ensure that restricted content is ONLY visible to those in the restriction list - to the best of their ability.
+Content you provide (status posts, photos, files, etc.) belongs to you. $Projectname default is to publish content openly and visible to anybody on the internet (PUBLIC). You MAY control this in your channel settings and restrict the default permissions or you MAY restrict the visibility of any single published item separately (PRIVATE). $Projectname developers will ensure that restricted content is ONLY visible to those in the restriction list - to the best of their ability.
Content (especially status posts) that you share with other networks or that you have made visible to anybody on the internet (PUBLIC) cannot easily be taken back once it has been published. It MAY be shared with other networks and made available through RSS/Atom feeds. It may also be syndicated on other $Projectname sites. It MAY appear on other networks and websites and be visible in internet searches. If you do not wish this default behaviour please adjust your channel settings and restrict who can see your content.
@@ -56,7 +56,7 @@ $Projectname developers will ensure that any content you provide which is design
Privacy for your identity is another aspect. Because you have a decentralized identity in $Projectname, your privacy extends beyond your home hub. If you want to have complete control of your privacy and security you should run your own hub on a dedicated server. For many people, this is complicated and may stretch their technical abilities. So let's list a few precautions you can make to assure your privacy as much as possible.
-A decentralized identity has a lot of advantages and gives you al lot of interesting features, but you should be aware of the fact that your identity is known by other hubs in the $Projectname network. One of those advantages is that other channels can serve you customized content and allow you to see private things (such as private photos which others wish to share with you). Because of this those channels need to know who you are. But we understand that sometimes those other channels know more from you than you might desire. For instance the plug-in Visage that can tell a channel owner the last time you visit their profile. You can easily OPT-OUT of this low level and we think, harmless tracking.
+A decentralized identity has a lot of advantages and gives you al lot of interesting features, but you should be aware of the fact that your identity is known by other hubs in $Projectname network. One of those advantages is that other channels can serve you customized content and allow you to see private things (such as private photos which others wish to share with you). Because of this those channels need to know who you are. But we understand that sometimes those other channels know more from you than you might desire. For instance the plug-in Visage that can tell a channel owner the last time you visit their profile. You can easily OPT-OUT of this low level and we think, harmless tracking.
* You can enable [Do Not Track (DNT)](http://donottrack.us/) in your web browser. We respect this new privacy policy proposal. All modern browsers support DNT. You will find it in the privacy settings of your browsers or else you can consult the web browser's manual. This will not affect the functionality of $Projectname. This setting is probably enough for most people.
diff --git a/doc/Translations.md b/doc/Translations.md
index 226fa2e1a..654ba1b83 100644
--- a/doc/Translations.md
+++ b/doc/Translations.md
@@ -1,4 +1,4 @@
-Translating the $Projectname
+Translating $Projectname
==========================
Translation Process
diff --git a/doc/account_basics.bb b/doc/account_basics.bb
index ba2380df7..664949d6e 100644
--- a/doc/account_basics.bb
+++ b/doc/account_basics.bb
@@ -10,7 +10,7 @@ Please provide a valid email address. Your email address is never published. Thi
[b]Password[/b]
-Enter a password of your choice, and repeat it in the second box to ensure it was typed correctly. As the $Projectname offers a decentralised identity, your account can log you in to many other websites.
+Enter a password of your choice, and repeat it in the second box to ensure it was typed correctly. As $Projectname offers a decentralised identity, your account can log you in to many other websites.
[b]Terms Of Service[/b]
diff --git a/doc/addons_gnusocial.bb b/doc/addons_gnusocial.bb
index dfdce5f6a..d9aed9ac5 100644
--- a/doc/addons_gnusocial.bb
+++ b/doc/addons_gnusocial.bb
@@ -8,7 +8,7 @@ https://yourgnusocialinstance.org/settings/oauthapps
Next, click the link to Register a new application. That brings up the new application form. Here's what to do on each field.
-Icon. I uploaded the $Projectname icon located at this link, after saving it to my computer:
+Icon. I uploaded $Projectname icon located at this link, after saving it to my computer:
https://github.com/redmatrix/hubzilla/blob/master/images/rm-32.png
@@ -39,7 +39,7 @@ Then click on the icon or the name of the application for the information you'll
Now open up a new tab or window and go to your $Projectname account, to Settings > Feature settings. Find the StatusNet Posting Settings.
-Insert the strings of numbers given on the GNUsocial site into the $Projectname fields for Consumer Key and Consumer Secret.
+Insert the strings of numbers given on the GNUsocial site into $Projectname fields for Consumer Key and Consumer Secret.
The Base API Path (remember the trailing /) will be your instance domain, plus the /api/ following. It will probably look like this:
@@ -51,9 +51,9 @@ StatusNet application name: Insert the name you gave to the application over on
Click Submit.
-A button will appear for you to "Sign in to StatusNet." Click it and that will open a tab or window on the GNUsocial site for you to click "Allow." Once clicked and successfully authorized, a security code number will appear. Copy it and go back to the $Projectname app you just left and insert it in the field: "Copy the security code from StatusNet here." Click Submit.
+A button will appear for you to "Sign in to StatusNet." Click it and that will open a tab or window on the GNUsocial site for you to click "Allow." Once clicked and successfully authorized, a security code number will appear. Copy it and go back to $Projectname app you just left and insert it in the field: "Copy the security code from StatusNet here." Click Submit.
-If successful, your information from the GNUsocial instance should appear in the $Projectname app.
+If successful, your information from the GNUsocial instance should appear in $Projectname app.
You now have several options to choose, if you desire, and those will need to be confirmed by clicking "Submit" also. The most interesting is "Send public postings to StatusNet by default." This option automatically sends any post of yours made in your $Projectname account to your GNUsocial instance.
diff --git a/doc/ca/general.bb b/doc/ca/general.bb
index f7d556130..dace92775 100644
--- a/doc/ca/general.bb
+++ b/doc/ca/general.bb
@@ -2,7 +2,7 @@
[zrl=[baseurl]/help/Privacy]Politica de Privacitat[/zrl]
-[zrl=[baseurl]/help/history]Història de $Projectname[/zrl]
+[zrl=[baseurl]/help/project/history]Història de $Projectname[/zrl]
[h3]Recursos Externs[/h3]
[zrl=[baseurl]/help/external-resource-links]Enllaços a Recursos Externs[/zrl]
diff --git a/doc/campaign.bb b/doc/campaign.bb
index 48f28f0c0..750412ba3 100644
--- a/doc/campaign.bb
+++ b/doc/campaign.bb
@@ -4,7 +4,7 @@
[b][color= grey][size=18]Single-click sign on, nomadic identity, censorship-resistance, privacy, self-hosting[/size][/color][/b]
-We started the $Projectname project by asking ourselves a few questions:
+We started $Projectname project by asking ourselves a few questions:
- Imagine if it was possible to just access the content of different web sites, without the need to enter usernames and passwords for every site. Such a feature would permit Single-Click user identification: the ability to access sites simply by clicking on links to remote sites.
Authentication just happens automagically behind the scenes. Forget about remembering multiple user names with multiple passwords when accessing different sites online.
@@ -52,7 +52,7 @@ Think of it this way: the internet is nothing, but a bunch of permissions and a
[b][color= grey][size=20]The Matrix is Born![/size][/color][/b]
-After asking and striving to answer a number of such questions, we realized that we were imagining a general purpose communication network with a number of unique, and potentially game-changing, features. We called it the $Projectname and started thinking of it as an over-lay on top of the internet as it exists today; an operating system re-invented as a communication network, with its own permissions, access control lists, protocol, connectors to others services, and open-ended possibilities via its API. The sum of the matrix is greater than it's parts. We're not building website, but a way for websites to link together and grow into something that is unique and ever-changing, with autonomy and privacy.
+After asking and striving to answer a number of such questions, we realized that we were imagining a general purpose communication network with a number of unique, and potentially game-changing, features. We called it $Projectname and started thinking of it as an over-lay on top of the internet as it exists today; an operating system re-invented as a communication network, with its own permissions, access control lists, protocol, connectors to others services, and open-ended possibilities via its API. The sum of the matrix is greater than it's parts. We're not building website, but a way for websites to link together and grow into something that is unique and ever-changing, with autonomy and privacy.
It's a lot of work, for anyone. So far, we've got a team of a handful of volunteers, code geeks, brave early adopters, system administrators and other good people, willing to give the project a shot. We're motivated by our commitment to a free web, where privacy is built-in, and corporations don't have a stranglehold on our daily communication.
@@ -60,7 +60,7 @@ We need your help to finish it and release it to the world!
[b][color= grey][size=20]What have we written so far[/size][/color][/b]
-As of the today, the $Projectname is in developer preview (alpha) state. It is not ready for everyday use, but some of the initial set of core features are implemented (again, in alpha state). These include:
+As of the today, $Projectname is in developer preview (alpha) state. It is not ready for everyday use, but some of the initial set of core features are implemented (again, in alpha state). These include:
- Zot, the protocol powering the matrix
- Single-signon logins.
@@ -71,7 +71,7 @@ As of the today, the $Projectname is in developer preview (alpha) state. It is
[b][color= grey][size=20]Our TO-DO List[/size][/color][/b]
-However, in addition to finishing and polishing the above, there are a number of features that have to implemented to make the $Projectname ready for daily use. If we meet our fundraising goal, we hope to dive into the following road map, by order of priority:
+However, in addition to finishing and polishing the above, there are a number of features that have to implemented to make $Projectname ready for daily use. If we meet our fundraising goal, we hope to dive into the following road map, by order of priority:
- A professionally designed user interface (UI), interface that is adaptive to any user level, from end users who want to use the Matrix as a social network, to tinkerers who will put together a customized blog using Comanche, to hackers who will develop and extend the matrix using a built-in code editor, that hooks to the API and the git.
@@ -145,7 +145,7 @@ You get one of your $Projectname t-shirts, as well as our undying gratitude.
Each contributor at this level gets their own $Projectname virtual private server, installed, hosted and supported by us for a period of 1 year.
-[b][color= grey][size=20]Why are we so excited about the $Projectname?[/size][/color][/b]
+[b][color= grey][size=20]Why are we so excited about $Projectname?[/size][/color][/b]
{SOMETHING ABOUT THE POTENTIAL IMPACT OF RED, ITS INNOVATIONS, ETC>
@@ -167,7 +167,7 @@ Perhaps you're good at writing and documenting stuff. Grab an account at one of
[b]1. Is Red a social network?[/b]
-The $Projectname is not a social network. We're thinking of it as a general purpose communication network, with sharing, and public/private communications built into the matrix.
+$Projectname is not a social network. We're thinking of it as a general purpose communication network, with sharing, and public/private communications built into the matrix.
[b]2. What is the difference between Red and Friendica?[/b]
@@ -177,7 +177,7 @@ Friendica is really, really good at sending postcards. It can do all sorts of th
What Friendica can't do, is wave a postcard at somebody and expect them to believe that holding this postcard prove you are who you say you are. Sure, if you've been sending somebody postcards, they might accept that it is you in the picture, but somebody who has never heard of you will not accept ownership of a postcard as proof of identity.
-The $Projectname offers a passport.
+$Projectname offers a passport.
You can still use it to send postcards. At the same time, when you wave your passport at somebody, they do accept it as proof of identity. No longer do you need to register at every single site you use. You already have an account - it's just not necessarily at our site - so we'll ask to see your passport instead.
@@ -194,7 +194,7 @@ We use MySQL as our database (this include any forks such as, MariaDB or Percona
[b]5. How is the Affinity Slider different from Mozilla's Persona?[/b]
{COMPLETE}
-[b]6. Does the $Projectname use encryption? Details please![/b]
+[b]6. Does $Projectname use encryption? Details please![/b]
Yes, we do our best to use free and open source encryption libraries to help achieve privacy from general, mass surveillance.
@@ -207,7 +207,7 @@ For more info on our initial implementation of encrypted communication, check ou
[b]7. What do you mean by decentralization? [/b]
-[b]8. Can I build my own website with in the $Projectname?[/b]
+[b]8. Can I build my own website with in $Projectname?[/b]
Yes. The short explanation: We've got this spiffy idea we're calling "Comanche", which will allow non-programmers to build complete custom websites, and any such website will be able to connect to any other website or channel in the matrix. The goal of Comanche is to hide the technical complexities of communicating in the matrix, while encouraging people to use their creativity and put together their own unique presence on the matrix.
diff --git a/doc/channels.bb b/doc/channels.bb
index 14d588266..eca8dd0e6 100644
--- a/doc/channels.bb
+++ b/doc/channels.bb
@@ -28,7 +28,7 @@ Once you have done this, your channel is ready to use. At [observer=1][observer.
[h3]The grid, permissions and delegation[/h3]
-The "Grid" page contains all recent posts from across the $Projectname network, again in reverse chronologial order. The exact posts that appear here depend largely on your permissions. At their most permissive, you will receive posts from complete strangers. At the other end of the scale, you may see posts from only your friends - or if you're feeling really anti-social, only your own posts.
+The "Grid" page contains all recent posts from across $Projectname network, again in reverse chronologial order. The exact posts that appear here depend largely on your permissions. At their most permissive, you will receive posts from complete strangers. At the other end of the scale, you may see posts from only your friends - or if you're feeling really anti-social, only your own posts.
As mentioned at the start, many other kinds of channel are possible, however, the creation procedure is the same. The difference between channels lies primarily in the permissions assigned. For example, a channel for sharing documents with colleagues at work would probably want more permissive settings for "Can write to my "public" file storage" than a personal account. For more information, see the [zrl=[baseurl]/help/roles]permissions section[/zrl].
diff --git a/doc/cloud.bb b/doc/cloud.bb
index 3e0ac1fd3..2ad22806b 100644
--- a/doc/cloud.bb
+++ b/doc/cloud.bb
@@ -1,6 +1,6 @@
[b]Personal Cloud Storage[/b]
-The $Projectname provides an ability to store privately and/or share arbitrary files with friends.
+$Projectname provides an ability to store privately and/or share arbitrary files with friends.
You may either upload files from your computer into your storage area, or copy them directly from the operating system using the WebDAV protocol.
diff --git a/doc/comanche.bb b/doc/comanche.bb
index 6a96d5251..4b198d657 100644
--- a/doc/comanche.bb
+++ b/doc/comanche.bb
@@ -65,17 +65,23 @@ By default, $nav is placed in the "nav" page region and $content is pl
To select a theme for your page, use the 'theme' tag.
[code]
- [theme]apw[/theme]
+ [theme]suckerberg[/theme]
[/code]
-This will select the theme named "apw". By default your channel's preferred theme will be used.
+This will select the theme named "suckerberg". By default your channel's preferred theme will be used.
[code]
- [theme=passion]apw[/theme]
+ [theme=passion]suckerberg[/theme]
[/code]
-This will select the theme named "apw" and select the "passion" schema (theme variant).
+This will select the theme named "suckerberg" and select the "passion" schema (theme variant). Alternatively it may be possible to use a condensed theme notation for this.
+[code]
+ [theme]suckerberg:passion[/theme]
+
+[/code]
+
+The condensed notation isn't part of Comanche itself but is recognised by $Projectname platform as a theme specifier.
[b]Regions[/b]
Each region has a name, as noted above. You will specify the region of interest using a 'region' tag, which includes the name. Any content you wish placed in this region should be placed between the opening region tag and the closing tag.
@@ -164,7 +170,42 @@ The 'comment' tag is used to delimit comments. These comments will not appear on
[comment]This is a comment[/comment]
[/code]
-
+
+[b]Conditional Execution[/b]
+You can use an 'if' construct to make decisions. These are currently based on system configuration variable or the current observer.
+
+[code]
+ [if $config.system.foo]
+ ... the configuration variable system.foo evaluates to 'true'.
+ [else]
+ ... the configuration variable system.foo evaluates to 'false'.
+ [/if]
+
+ [if $observer]
+ ... this content will only be show to authenticated viewers
+ [/if]
+
+[/code]
+
+ The 'else' clause is optional.
+
+ Several tests are supported besides boolean evaluation.
+
+[code]
+ [if $config.system.foo == bar]
+ ... the configuration variable system.foo is equal to the string 'bar'
+ [/if]
+ [if $config.system.foo != bar]
+ ... the configuration variable system.foo is not equal to the string 'bar'
+ [/if]
+ [if $config.system.foo {} bar ]
+ ... the configuration variable system.foo is a simple array containing a value 'bar'
+ [/if]
+ [if $config.system.foo {*} bar]
+ ... the configuration variable system.foo is a simple array containing a key named 'bar'
+ [/if]
+[/code]
+
[b]Complex Example[/b]
[code]
[comment]use an existing page template which provides a banner region plus 3 columns beneath it[/comment]
diff --git a/doc/connecting_to_channels.bb b/doc/connecting_to_channels.bb
index be37eb25c..291323f75 100644
--- a/doc/connecting_to_channels.bb
+++ b/doc/connecting_to_channels.bb
@@ -1,6 +1,6 @@
[b]Connecting To Channels[/b]
-Connections in the $Projectname can take on a great many different meanings. But let's keep it simple, you want to be friends with somebody like you are familiar with from social networking. How do you do it?
+Connections in $Projectname can take on a great many different meanings. But let's keep it simple, you want to be friends with somebody like you are familiar with from social networking. How do you do it?
First, you need to find some channels to connect to. There are two primary ways of doing this. Firstly, setting the "Can send me their channel stream and posts" permission to "Anybody in this network" will bring posts from complete strangers to your matrix. This will give you a lot of public content and should hopefully help you find interesting, entertaing people, forums, and channels.
diff --git a/doc/connecting_to_channels.md b/doc/connecting_to_channels.md
index 60834c244..349f58b67 100644
--- a/doc/connecting_to_channels.md
+++ b/doc/connecting_to_channels.md
@@ -1,6 +1,6 @@
# Connecting To Channels #
-Connections in the $Projectname can take on a great many different meanings. But let's keep it simple, you want to be friends with somebody like you are familiar with from social networking. How do you do it?
+Connections in $Projectname can take on a great many different meanings. But let's keep it simple, you want to be friends with somebody like you are familiar with from social networking. How do you do it?
First, you need to find some channels to connect to. There are two primary ways of doing this. Firstly, setting the "Can send me their channel stream and posts" permission to "Anybody in this network" will bring posts from complete strangers to your matrix. This will give you a lot of public content and should hopefully help you find interesting, entertaing people, forums, and channels.
diff --git a/doc/context/en/connedit/help.html b/doc/context/en/connedit/help.html
new file mode 100644
index 000000000..9eb62ecc7
--- /dev/null
+++ b/doc/context/en/connedit/help.html
@@ -0,0 +1,12 @@
+<dl class="dl-horizontal">
+ <dt>General</dt>
+ <dd>This page allows you to change or edit any individual settings for a particular connection or delete a connection completely. You may have arrived at this page after creating or approving a new connection. If so, you are not required to do anything. Your connection has already been established. You <strong>may</strong> wish to add them to a group or adjust special permissions, and this page is presented so that you may do this while the opportunity is fresh.</dd>
+ <dt><a href='#' onclick='contextualHelpFocus(".section-title-wrapper", 0); return false;' title="Click to highlight element...">Connection Tools</a></dt>
+ <dd>The <a href='#' onclick='contextualHelpFocus(".section-title-wrapper", 0); return false;' title="Click to highlight element...">Connection Tools</a> menu access several settings. View Profile, View Recent Activity, Refresh Permissions, set or reset flags (Block, Ignore, Archive, Hide) and Delete the connection.</dd>
+ <dt><a href='#' onclick='contextualHelpFocus("#group-sidebar", 0); return false;' title="Click to highlight element...">Privacy Groups</a></dt>
+ <dd>Each connection may be assigned to one or more Privacy Groups for grouping collections of friends with access to specific posts, media and other content. You may add them to an existing privacy group here, or create a new privacy group. When you add them to an existing group the action is immediate and you are not required to submit a form. </dd>
+ <dt><a href='#' onclick='contextualHelpFocus("#perms-tool", 0); return false;' title="Click to highlight element...">Individual Permissions</a></dt>
+ <dd>Granting of permissions is usually automatic and require no action on your part. However you may wish to adjust specific permsisions for this connection which are different than for others.</dd>
+ <dt>Feature Specific Settings</dt>
+ <dd>A number of individual settings are controlled through additional features which may or may not be activated on your hub or for your channel. Several optional features have settings for each connection, and those may be set on this page through additional form tabs which may be present.</dd>
+</dl>
diff --git a/doc/context/en/settings/features/help.html b/doc/context/en/settings/features/help.html
new file mode 100644
index 000000000..86e4f5dae
--- /dev/null
+++ b/doc/context/en/settings/features/help.html
@@ -0,0 +1,12 @@
+<dl class="dl-horizontal">
+ <dt>General</dt>
+ <dd>This page allows you to configure settings for the many additional features of Hubzilla.</dd>
+ <dt><a href='#' onclick='$("#general-settings-title h3 a").click(); setTimeout((function() {contextualHelpFocus("#general-settings-title", 0)}), 1000); return false;' title="Click to highlight element...">General Features</a></dt>
+ <dd>General feature settings include options relevant to your channel, such as webpage and wiki hosting.</dd>
+ <dt><a href='#' onclick='$("#composition-settings-title h3 a").click(); setTimeout((function() {contextualHelpFocus("#composition-settings-title", 0)}), 1000); return false;' title="Click to highlight element...">Post Composition Features</a></dt>
+ <dd>The post composition features provide extra options and capabilities when composing new posts.</dd>
+ <dt><a href='#' onclick='$("#net_module-settings-title h3 a").click(); setTimeout((function() {contextualHelpFocus("#net_module-settings-title", 0)}), 1000); return false;' title="Click to highlight element...">Network and Stream Filtering</a></dt>
+ <dd>These settings modify features associated with filtering and controlling your view of incoming posts.</dd>
+ <dt><a href='#' onclick='$("#tools-settings-title h3 a").click(); setTimeout((function() {contextualHelpFocus("#tools-settings-title", 0)}), 1000); return false;' title="Click to highlight element...">Post/Comment Tools</a></dt>
+ <dd>These provide additional tools for categorizing posts and allowing additional commenting methods such as emoji or community tagging.</dd>
+</dl> \ No newline at end of file
diff --git a/doc/context/es-es/settings/features/help.html b/doc/context/es-es/settings/features/help.html
new file mode 100644
index 000000000..a9c3c2d6c
--- /dev/null
+++ b/doc/context/es-es/settings/features/help.html
@@ -0,0 +1,12 @@
+<dl class="dl-horizontal">
+ <dt>General</dt>
+ <dd>Esta página le permite configurar los ajustes para muchas funcionalidades adicionales de Hubzilla.</dd>
+ <dt><a href='#' onclick='$("#general-settings-title h3 a").click(); setTimeout((function() {contextualHelpFocus("#general-settings-title", 0)}), 1000); return false;' title="Pulsar para resaltar el elemento...">Funcionalidades básicas</a></dt>
+ <dd>Las ajustes de las funcionalidades básicas incluyen opciones importantes para su canal, tales como el hospedaje de páginas web y wikis.</dd>
+ <dt><a href='#' onclick='$("#composition-settings-title h3 a").click(); setTimeout((function() {contextualHelpFocus("#composition-settings-title", 0)}), 1000); return false;' title="Pulsar para resaltar el elemento...">Opciones para la redacción de entradas</a></dt>
+ <dd>Los ajustes de la redacción de entradas incluyen opciones adicionales para la composición de nuevas publicaciones.</dd>
+ <dt><a href='#' onclick='$("#net_module-settings-title h3 a").click(); setTimeout((function() {contextualHelpFocus("#net_module-settings-title", 0)}), 1000); return false;' title="Pulsar para resaltar el elemento...">Filtrado del contenido</a></dt>
+ <dd>Estos ajustes modifican funcionalidades asociadas al filtrado del contenido y a cómo ver las publicaciones nuevas.</dd>
+ <dt><a href='#' onclick='$("#tools-settings-title h3 a").click(); setTimeout((function() {contextualHelpFocus("#tools-settings-title", 0)}), 1000); return false;' title="Pulsar para resaltar el elemento...">Gestión de entradas y comentarios</a></dt>
+ <dd>Estos ajustes proporcionan herramientas adicionales para establecer el tema de las entradas y permiten métodos adicionales para los comentarios, tales como los emojis y el etiquetado de la comunidad.</dd>
+</dl> \ No newline at end of file
diff --git a/doc/contributor/covenant.html b/doc/contributor/covenant.html
new file mode 100644
index 000000000..4facac24e
--- /dev/null
+++ b/doc/contributor/covenant.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html>
+
+<html lang="en">
+<head>
+ <meta charset="utf-8"/>
+ <title>Contributor Covenant 1.4.0</title>
+ <style>
+ body {
+ font-family: monospace;
+ padding: 4em;
+ }
+ a {
+ color: #990000;
+ }
+ </style>
+ <link rel="alternate" hreflang="de" href="version/1/3/0/de/" />
+ <link rel="alternate" hreflang="es" href="version/1/4/es/" />
+ <link rel="alternate" hreflang="fr" href="version/1/3/0/fr/" />
+ <link rel="alternate" hreflang="hu" href="version/1/3/0/hu/" />
+ <link rel="alternate" hreflang="it" href="version/1/3/0/it/" />
+ <link rel="alternate" hreflang="ja" href="version/1/3/0/ja/" />
+ <link rel="alternate" hreflang="pl" href="version/1/4/pl/" />
+ <link rel="alternate" hreflang="pt" href="version/1/3/0/pt/" />
+ <link rel="alternate" hreflang="pt" href="version/1/3/0/pt_br/" />
+ <link rel="alternate" hreflang="ru" href="version/1/3/0/ru/" />
+ <link rel="alternate" hreflang="sl" href="version/1/4/sl/" />
+ <link rel="alternate" hreflang="uk" href="version/1/4/uk/" />
+</head>
+
+<body>
+
+<h1>Contributor Covenant Code of Conduct</h1>
+
+<h2>Our Pledge</h2>
+
+<p>In the interest of fostering an open and welcoming environment, we as
+contributors and maintainers pledge to making participation in our project and
+our community a harassment-free experience for everyone, regardless of age, body
+size, disability, ethnicity, gender identity and expression, level of experience,
+nationality, personal appearance, race, religion, or sexual identity and
+orientation.</p>
+
+<h2>Our Standards</h2>
+
+<p>Examples of behavior that contributes to creating a positive environment
+include:</p>
+
+<ul>
+ <li>Using welcoming and inclusive language</li>
+ <li>Being respectful of differing viewpoints and experiences</li>
+ <li>Gracefully accepting constructive criticism</li>
+ <li>Focusing on what is best for the community</li>
+ <li>Showing empathy towards other community members</li>
+</ul>
+
+<p>Examples of unacceptable behavior by participants include:</p>
+
+<ul>
+ <li>The use of sexualized language or imagery and unwelcome sexual attention or advances</li>
+ <li>Trolling, insulting/derogatory comments, and personal or political attacks</li>
+ <li>Public or private harassment</li>
+ <li>Publishing others' private information, such as a physical or electronic address, without explicit permission</li>
+ <li>Other conduct which could reasonably be considered inappropriate in a professional setting</li>
+</ul>
+
+<h2>Our Responsibilities</h2>
+
+<p>Project maintainers are responsible for clarifying the standards of acceptable
+behavior and are expected to take appropriate and fair corrective action in
+response to any instances of unacceptable behavior.</p>
+
+<p>Project maintainers have the right and responsibility to remove, edit, or
+reject comments, commits, code, wiki edits, issues, and other contributions
+that are not aligned to this Code of Conduct, or to ban temporarily or
+permanently any contributor for other behaviors that they deem inappropriate,
+threatening, offensive, or harmful.</p>
+
+<h2>Scope</h2>
+
+<p>This Code of Conduct applies both within project spaces and in public spaces
+when an individual is representing the project or its community. Examples of
+representing a project or community include using an official project e-mail
+address, posting via an official social media account, or acting as an appointed
+representative at an online or offline event. Representation of a project may be
+further defined and clarified by project maintainers.</p>
+
+<h2>Enforcement</h2>
+
+<p>Instances of abusive, harassing, or otherwise unacceptable behavior may be
+reported by contacting the project team at project&#x40;hubzilla.org. All
+complaints will be reviewed and investigated and will result in a response that
+is deemed necessary and appropriate to the circumstances. The project team is
+obligated to maintain confidentiality with regard to the reporter of an incident.
+Further details of specific enforcement policies may be posted separately.</p>
+
+<p>Project maintainers who do not follow or enforce the Code of Conduct in good
+faith may face temporary or permanent repercussions as determined by other
+members of the project's leadership.</p>
+
+<h2>Attribution</h2>
+
+<p>This Code of Conduct is adapted from the <a href="http://contributor-covenant.org">Contributor Covenant</a>, version 1.4,
+available at <a href="http://contributor-covenant.org/version/1/4/">http://contributor-covenant.org/version/1/4</a>.</p>
+
+</body>
+</html>
diff --git a/doc/de/general.bb b/doc/de/general.bb
index eb1c0f158..6660370d7 100644
--- a/doc/de/general.bb
+++ b/doc/de/general.bb
@@ -2,7 +2,7 @@
[zrl=[baseurl]/help/Privacy]Informationen zum Datenschutz[/zrl]
-[zrl=[baseurl]/help/history]Zur Geschichte von $Projectname[/zrl]
+[zrl=[baseurl]/help/project/history]Zur Geschichte von $Projectname[/zrl]
[h3]Externe Ressourcen[/h3]
[zrl=[baseurl]/help/external-resource-links]Links zu externen Ressourcen[/zrl]
diff --git a/doc/develop.bb b/doc/develop.bb
index ef3ea5bd0..20e987a5a 100644
--- a/doc/develop.bb
+++ b/doc/develop.bb
@@ -20,12 +20,12 @@
[zrl=[baseurl]/help/api_posting]Posting to $Projectname using the API[/zrl]
[zrl=[baseurl]/help/developer_function_primer]Red Functions 101[/zrl]
[zrl=[baseurl]/doc/html/]Code Reference (Doxygen generated - sets cookies)[/zrl]
-[zrl=[baseurl]/help/to_do_doco]To-Do list for the $Projectname Documentation Project[/zrl]
+[zrl=[baseurl]/help/to_do_doco]To-Do list for $Projectname Documentation Project[/zrl]
[zrl=[baseurl]/help/to_do_code]To-Do list for Developers[/zrl]
[zrl=[baseurl]/help/roadmap]Roadmap[/zrl]
[zrl=[baseurl]/help/git_for_non_developers]Git for Non-Developers[/zrl]
[zrl=[baseurl]/help/dev_beginner]Step-for-step manual for beginning developers[/zrl]
[h3]External Resources[/h3]
-[url=https://zothub.com/channel/one]Development Channel[/url]
+[url=https://grid.reticu.li/channel/hubzilla]Development Channel[/url]
[url=https://federated.social/channel/postgres]Postgres-specific $Projectname Admin Support Channel[/url]
diff --git a/doc/developers.bb b/doc/developers.bb
index 6f7752577..f8489640b 100644
--- a/doc/developers.bb
+++ b/doc/developers.bb
@@ -1,6 +1,6 @@
[b]$Projectname Developer Guide[/b]
-We're pretty relaxed when it comes to developers. We don't have a lot of rules. Some of us are over-worked and if you want to help we're happy to let you help. That said, attention to a few guidelines will make the process smoother and make it easier to work together. We have developers from across the globe with different abilities and different cultural backgrounds and different levels of patience. Our primary rule is to respect others. Sometimes this is hard and sometimes we have very different opinions of how things should work, but if everybody makes an effort, we'll get along just fine.
+We're pretty relaxed when it comes to developers. We don't have a lot of rules. Some of us are over-worked and if you want to help we're happy to let you help. That said, attention to a few guidelines will make the process smoother and make it easier to work together. All developers are expected to abide by our [zrl=[baseurl]/help/contributor/covenant]code of conduct[/zrl]. We have developers from across the globe with different abilities and different cultural backgrounds and different levels of patience. Our primary rule is to respect others. Sometimes this is hard and sometimes we have very different opinions of how things should work, but if everybody makes an effort, we'll get along just fine.
[b]Here is how you can join us.[/b]
@@ -19,7 +19,7 @@ to notify us to merge your work.
[b]Translations[/b]
-Our translations are managed through Transifex. If you wish to help out translating the $Projectname to another language, sign up on transifex.com, visit [url=https://www.transifex.com/projects/p/red-matrix/]https://www.transifex.com/projects/p/red-matrix/[/url] and request to join one of the existing language teams or create a new one. Notify one of the core developers when you have a translation update which requires merging, or ask about merging it yourself if you're comfortable with git and PHP. We have a string file called 'messages.po' which is gettext compliant and a handful of email templates, and from there we automatically generate the application's language files.
+Our translations are managed through Transifex. If you wish to help out translating $Projectname to another language, sign up on transifex.com, visit [url=https://www.transifex.com/projects/p/red-matrix/]https://www.transifex.com/projects/p/red-matrix/[/url] and request to join one of the existing language teams or create a new one. Notify one of the core developers when you have a translation update which requires merging, or ask about merging it yourself if you're comfortable with git and PHP. We have a string file called 'messages.po' which is gettext compliant and a handful of email templates, and from there we automatically generate the application's language files.
[zrl=[baseurl]/help/Translations]Translations - More Info[/zrl]
diff --git a/doc/diaspora_compat.bb b/doc/diaspora_compat.bb
new file mode 100644
index 000000000..f27a63b9d
--- /dev/null
+++ b/doc/diaspora_compat.bb
@@ -0,0 +1,68 @@
+[h3]Diaspora Compatibility[/h3]
+
+The Diaspora Protocol addon allows a site to communicate using the Diaspora protocol, which allows communications and connections to be made with Diaspora members (and also Friendica members, since that network also provides the Diaspora Protocol).
+
+This addon is available in the 'basic' and 'standard' server configurations. It is not available with and the plugin is disabled completely when you are using the 'pro' server configuration. The reason for this is that the Diaspora protocol is not very sophisticated and many $projectname features do not work well with it.
+
+Members will have to be aware of limitations of the protocol or limit their own activities to those which are compatible with Diaspora. The 'pro' server configuration is free from these limitations and you may use all of the project features and abilities without regard for how they translate to other networks. Many features are unique to $Projectname and are supported by the &quot;Zot&quot; protocol, which is our native communications language between servers/hubs.
+
+If you are using a configuration which allows direct Diaspora communications you should be aware of the limitations presented here.
+
+[ul]
+[*]Private mail retraction (unsend) is not possible for Diaspora connections.
+
+[*]Private posts and their associated comments are sent in plaintext email notifications in Diaspora and Friendica. This is a major privacy issue and affects any private communications you have where *any* member of the conversation is on another network. Be aware of it.
+
+[*]Access control only works on posts and comments. Diaspora members will get permission denied trying to access any other access controlled hubzilla objects such as files, photos, webpages, chatrooms, etc. In the case of private photos that are linked to posts, they will see a "prohibited sign" instead of the photo. Diaspora has no concept of private media and provides an illusion of photo privacy by using obscured URLs rather than protecting the photo from snooping by unauthorised viewers.
+
+There is no workaround except to make your media resources public (to everybody on the internet).
+
+
+[*]Edited posts will not be delivered. Diaspora members will see the original post/comment without edits. There is no mechanism in the protocol to update an existing post. We cannot delete it and submit another invisibly because the message-id will change and we need to keep the same message-id on our own network. The only workaround is to delete the post/comment and do it over. (If this is a post, this will delete any existing likes/comments). We may eventually provide a way to delete the out of date copy only from Diaspora and keep it intact on networks that can handle edits.
+
+[*]Nomadic identity ($projectname 'standard' only) will not work with Diaspora. We may eventually provide an **option** which will allow you to "start sharing" from all of your clones when you make the first connection. The Diaspora person does not have to accept this, but it will allow your communications to continue if they accept this connection. Without this option, if you go to another server from where you made the connection originally or you make the connection before creating the clone, you will need to connect with them again from the new location.
+
+[*]Post expiration is not supported on Diaspora. We may provide you an option to not send expiring posts to that network. In the future this may be provided with a remote delete request.
+
+[*]End-to-end encryption is not supported. We will translate these posts into a lock icon, which can never be unlocked from the Diaspora side.
+
+[*]Message verification will eventually be supported.
+
+[*]Multiple profiles are not supported. Diaspora members can only see your default profile.
+
+[*]Birthday events will not appear in Diaspora. Other events will be translated and sent as a post, but all times will either be in the origination channel's timezone or in GMT. We do not know the recipient's timezone because Diaspora doesn't have this concept.
+
+[*]We currently allow tags to be hijacked by default. An option is provided to allow you to prevent the other end of the network from hijacking your tags and point them at its own resources.
+
+[*]Community tags will not work. We will send a tagging activity as a comment. It won't do anything.
+
+[*]Privacy tags (@!somebody) will not be available to Diaspora members. These tags may have to be stripped or obscured to prevent them from being hijacked - which could result in privacy issues.
+
+[*]Plus-tagged hubzilla forums should work from Diaspora.
+
+
+[*]You cannot use Diaspora channels as channel sources.
+
+
+[*]Dislikes of posts will be converted to comments and you will have the option to send these as comments or not send them to Diaspora (which does not provide dislike). Currently they are not sent.
+
+[*]We will do the same for both likes and dislikes of [b][i]comments[/i][/b]. They can either be sent as comments or you will have the ability to prevent them from being transmitted to Diaspora. Currently they are not sent.
+
+[*]Emojis are currently untranslated.
+
+[*]"observer tags" will be converted to empty text.
+
+
+[*]Embedded apps will be translated into links.
+
+
+[*]Embedded page design elements (work in progress) will be either stripped or converted to an error message.
+
+[*]Diaspora members will not appear in the directory.
+
+
+[*]There are differences in oembed compatibility between the networks. Some embedded resources will turn into a link on one side or the other.
+
+[/ul]
+
+#include doc/macros/main_footer.bb;
diff --git a/doc/diaspora_compat.md b/doc/diaspora_compat.md
deleted file mode 100644
index 255b565a2..000000000
--- a/doc/diaspora_compat.md
+++ /dev/null
@@ -1,60 +0,0 @@
-##Diaspora Compatibility
-
-Diaspora protocol compatibility is presently considered an ***experimental*** feature. It may not be available on all sites and presents some serious compatibility issues with hubzilla. At the moment these compatibility issues will be shared with "Friendica-over-Diaspora" protocol communications.
-
-Private mail retraction (unsend) will not be possible on Diaspora.
-
-Private posts and their associated comments are sent in plaintext email notifications in Diaspora and Friendica. This is a major privacy issue and affects any private communications you have where *any* member of the conversation is on another network. Be aware of it.
-
-Access control only works on posts and comments. Diaspora members will get permission denied trying to access any other access controlled hubzilla objects such as files, photos, webpages, chatrooms, etc. In the case of private photos that are linked to posts, they will see a "prohibited sign" instead of the photo. Diaspora has no concept of private media. There is no workaround except to make your media resources public (to everybody on the internet).
-
-
-Edited posts will not be delivered. Diaspora members will see the original post/comment without edits. There is no mechanism in the protocol to update an existing post. We cannot delete it and submit another invisibly because the message-id will change and we need to keep the same message-id on our own network. The only workaround is to delete the post/comment and do it over. We may eventually provide a way to delete the out of date copy only from Diaspora and keep it intact on networks that can handle edits.
-
-Some comments from external services will not deliver to Diaspora, as they have no Diaspora service discovery. Currently this applies to comments from WordPress blogs which are imported into your stream; but will extend to most any service that has no Diaspora discover mechanism.
-
-
-Nomadic identity will not work with Diaspora. We will eventually provide an **option** which will allow you to "start sharing" from all of your clones when you make the first connection. The Diaspora person does not have to accept this, but it will allow your communications to continue if they accept this connection. Without this option, if you go to another server from where you made the connection originally or you make the connection before creating the clone, you will need to make friends with them again from the new location.
-
-Post expiration is not supported on Diaspora. We will provide you an option to not send expiring posts to that network. In the future this may be provided with a remote delete request.
-
-End-to-end encryption is not supported. We will translate these posts into a lock icon, which can never be unlocked from the Diaspora side.
-
-Message verification will eventually be supported.
-
-Multiple profiles are not supported. Diaspora members can only see your default profile.
-
-Birthday events will not appear in Diaspora. Other events will be translated and sent as a post, but all times will either be in the origination channel's timezone or in GMT. We do not know the recipient's timezone because Diaspora doesn't have this concept.
-
-We currently allow tags to be hijacked by default. We will provide an option to allow you to prevent the other end of the network from hijacking your tags and point them at its own resources.
-
-Community tags will not work. We will send a tagging activity as a comment. It won't do anything.
-
-Privacy tags (@!somebody) will not be available to Diaspora members. These tags may have to be stripped or obscured to prevent them from being hijacked - which could result in privacy issues.
-
-Plus-tagged hubzilla forums should work from Diaspora.
-
-Premium channel redirects will not be sent. If you allow Diaspora connections, they will not see that you have a premium channel.
-
-You cannot use Diaspora channels as channel sources.
-
-
-Dislikes of posts will be converted to comments and you will have the option to send these as comments or not send them to Diaspora (which does not provide dislike). Currently they are not sent.
-
-We will do the same for both likes and dislikes of comments. They can either be sent as comments or you will have the ability to prevent them from being transmitted to Diaspora. Currently they are not sent.
-
-
-"observer tags" will be converted to empty text.
-
-
-Embedded apps will be translated into links.
-
-
-Embedded page design elements (work in progress) will be either stripped or converted to an error message.
-
-Diaspora members will not appear in the directory.
-
-
-There are differences in oembed compatibility between the networks. Some embedded resources will turn into a link on one side or the other.
-
-#include doc/macros/main_footer.bb;
diff --git a/doc/extra_features.bb b/doc/extra_features.bb
index 9fb43d9a1..0044a06a7 100644
--- a/doc/extra_features.bb
+++ b/doc/extra_features.bb
@@ -1,7 +1,7 @@
// multiple of these have been enabled by default. should we note this here somewhere, move it or remove them from this file?
[b]Features[/b]
-The default interface of the $Projectname was designed to be uncluttered. There are a huge number of extra features (some of which are extremely useful) which you can turn on and get the most of the application. These are found under the Extra Features link of your Settings page.
+The default interface of $Projectname was designed to be uncluttered. There are a huge number of extra features (some of which are extremely useful) which you can turn on and get the most of the application. These are found under the Extra Features link of your Settings page.
[b]Content Expiration[/b]
diff --git a/doc/faq_admins.bb b/doc/faq_admins.bb
index 63418c1dc..0b54a41de 100644
--- a/doc/faq_admins.bb
+++ b/doc/faq_admins.bb
@@ -1,4 +1,4 @@
-[size=large][b]The $Projectname FAQ[/b][/size]
+[size=large][b]$Projectname FAQ[/b][/size]
[toc]
diff --git a/doc/faq_members.bb b/doc/faq_members.bb
index 7af61df9b..c7f50314d 100644
--- a/doc/faq_members.bb
+++ b/doc/faq_members.bb
@@ -1,11 +1,11 @@
-[size=large][b]The $Projectname FAQ[/b][/size]
+[size=large][b]$Projectname FAQ[/b][/size]
[toc]
[h3]I am able to edit a post's text after I saved it, but is there a way to change the permissions?[/h3]
Short anser: No, there isn't. There are reasons. You are able to change permissons to your files, photos and the likes, but not to posts after you have saved them. The main reason is: Once you have saved a post it is being distributed either to the public channel and from there to other $Projectname servers or to those you intended it to go. Just like you cannot reclaim something you gave to another person, you cannot change permissions to $Projectname posts. We would need to track everywhere your posting goes, keep track of everyone you allowed to see it and then keep track of from whom to delete it.
-If a posting is public this is even harder, as the $Projectname is a global network and there is no way to follow a post, let alone reclaim it reliably. Other networks that may receive your post have no reliable way to delete or reclaim the post.
+If a posting is public this is even harder, as $Projectname is a global network and there is no way to follow a post, let alone reclaim it reliably. Other networks that may receive your post have no reliable way to delete or reclaim the post.
[h3]I downloaded my channel and imported it (cloned my identity) to another site but there is no content, no posts, no photos. What is wrong???[/h3]
Posts and photos/files are provided separately from the channel basic information. This is due to memory limitations dealing with years of conversations and photo archives. Posts and conversations can be synced separately from the basic channel information. Photos and file archives can be transferred using a plugin tool such as 'redfiles', which is currently listed as "experimental". When creating this feature we thought that keeping all your contacts was the most important task. Your friends have already seen your old content. Posts/conversations were next in priority and these may now be synced. Files and photos are the last bit to get completely working. Once we find someone willing to finish implementing this, it will be done. :)
diff --git a/doc/feature/access_tokens.bb b/doc/feature/access_tokens.bb
new file mode 100644
index 000000000..eb5c03717
--- /dev/null
+++ b/doc/feature/access_tokens.bb
@@ -0,0 +1,47 @@
+Feature: Zot Access Tokens
+Status: Draft
+Date: 15 July 2016
+
+
+Purpose:
+
+In order to facilitate sharing of private resources with non-members or members of federation nodes with limited identification discovery, Hubzilla should provide members with a mechanism to create and manage temporary ("throwaway") logins, aka "Zot Access Tokens". These tokens/credentials may be used to authenticate to a hubzilla site for the sole purpose of accessing privileged or access controlled resources (files, photos, posts, webpages, chatrooms, etc.).
+
+
+Scope:
+
+Zot Access Tokens do not convey membership in the site or network. In particular, they do not provide an account or channel; which may be necessary to interact with the hub owner or with others in the network or federation of networks. In most cases they can only be used to consume restricted resources and do not have an ability to create those resources, however this ability may be provided by custom configurations or in future releases or addons.
+
+For instance the ability for a temporary login to access a chatroom may provide suitable permission to create chat messages inside that chatroom.
+
+
+Implementation:
+
+Zot Access Tokens are managed through a "tab" of the settings page. Access to this tab may be controlled by site configuration. On this page, channels may create, edit, list, and remove any access tokens under their control.
+
+The form to create/edit accepts three parameters, a human readable name, a password or access token, and an optional expiration. Once expired, the access token is no longer valid, may no longer be used, and will be automatically purged from the list of temporary accounts. The password field in the create/edit forms displays the text of the access token and not an obscured password. By default we will create a token using the autoname() function, which generally produces a random character sequence which is "pronounceable", hence easy to convey or remember. This can be changed to any other character sequence which is acceptable to the site password complexity policy. (In most Hubzilla installations this imposes a minimum of three characters, but may be extended by plugin or site policy).
+
+
+Usage:
+
+We do not specify mechanisms for sharing these tokens with others. Any communication method may be used. Any tokens you have created are added to the Access Control List selector and may be used anywhere that Access Control Lists are provided.
+
+ Example: A visitor arrives at your site. She has an access token you have provided, and attempts to visit one of your photo albums (which is restricted to be viewed only by yourself and one temporary identity). Permission is denied.
+
+The visitor now selects "Login" from the menu navigation bar. This presents a login page. She enters the name and password you have provided her, and she can now view the restricted photo album.
+
+
+Alternatively, you may share a link to a protected file by adding a parameter "&zat=abc123" to the URL, where the string "abc123" is the access token or password for the temporary login. No further negotiation is required, and the file is presented.
+
+Zot Acess Tokens are represented internally as an authenticated "observer". Querying the observer in code should return a pseudo or system generated xchan with an unknown protocol and a default profile photo. It will match (successfully) any access control rule which allows authenticated observers.
+
+Security Considerations:
+
+The URL form of authentication is inherently less secure than using a login, but may be preferable for some uses of this feature. It probably should not be transmitted over non-SSL links.
+
+
+Future development:
+
+It might be desirable for future implementations to provide an options for single-use, where the access token is removed promptly following first use.
+
+ \ No newline at end of file
diff --git a/doc/feature/saved_search.bb b/doc/feature/saved_search.bb
new file mode 100644
index 000000000..1e75f5a85
--- /dev/null
+++ b/doc/feature/saved_search.bb
@@ -0,0 +1,19 @@
+[h2]Saved Searches[/h2]
+
+In order to quickly find information, the 'saved search' widget may be used. This widget may be presented as a sidebar tool on your network page and possibly from your channel page. It is differentiated from the 'navigation bar' search tool in that it does not search the entire site, but only the subset of information available to your channel.
+
+Additionally the search terms you provide may activate a one-tme search or be saved in a list for re-use. Saving the search item also invokes the search in addition to adding it to the saved list (which is displayed below the search text entry box). Any item in the list may be discarded if it is no longer needed.
+
+The saved search widget will provide autocompletion of channels (the results are prefixed with '@'), and hashtags (prefixed with '#'). You do not need to enter these tags; although entering the desired tag will reduce the autocomplete results to only hold the relevant information. The behaviour maps as follows:
+
+[ul]
+
+[li]@name - search your network stream for posts or comments written by 'name'. This will also change the post editor permissions to include only 'name'; as if this was a privacy group.[/li]
+
+[li]#hashtag - search you network stream for posts containing #hashtag.[/li]
+
+[li]text - search your network stream for posts containing 'text'.[/li]
+
+
+[/li]
+
diff --git a/doc/feature/techlevels.bb b/doc/feature/techlevels.bb
new file mode 100644
index 000000000..9b07f086f
--- /dev/null
+++ b/doc/feature/techlevels.bb
@@ -0,0 +1,15 @@
+[h2]Techlevels[/h2]
+
+Techlevels is a unique feature of Hubzilla 'pro'. It is not available in other server_roles, although it expands on the concepts introduced in Hubzilla 'basic'.
+
+[h3]Background[/h3]
+
+We've implemented several different mechanisms in order to reduce the apparent complexity and learning curve presented to new members. At the same time, we do not wish to limit any functionality for people who are able to grasp some slightly advanced technical technical features. The first mechanism was to move several features to an optional 'Features' page where they could be enabled at will; with the default interface kept somewhat lean.
+
+The problem we had now is that the number of features began to grow dramatically, and the Feature page is daunting in possibilities. There are also features present which probably should not be available to all members, but may be extremely useful to those with technical backgrounds.
+
+The techlevels seeeks to remedy this by grouping features within different levels of technical ability; starting at 0 (uncomfortable with technology), and up to 5 (Unix wizard or equivalent).
+
+When a new member registers, their account is provided a techlevel setting of 0. On the account settings page they may change this to any available level. A higher level opens more advanced features and possible interactions.
+
+The account administrator may also lock a particular level, lock a maximum level, or change/re-arrange the features available to any level. Those with the minimum level are typically not very exploratory and are unlikely to discover the advanced modes. This is by design. Those that look around and desire more interactions will find them. In the absence of administrator defaults they may choose any level. As they look at the features available to the level in question, it is generally expected that they will discover some features are beyond their comprehension and it is hoped they will back off to a level where the interface and features are comfortable to their skill level. This is somewhat experimental at present and for that reason is not part of the 'standard' server role. The standard server role is preset to level '5', and the basic server role is preset to level '0', with no possibility of change. Members in these roles may find themselves overwhelmed or underwhelmed by the feature set and complexity.
diff --git a/doc/general.bb b/doc/general.bb
index bbc85c900..cc5de5a56 100644
--- a/doc/general.bb
+++ b/doc/general.bb
@@ -1,7 +1,9 @@
[h2]Project and site information[/h2]
[h3]$Projectname[/h3]
[zrl=[baseurl]/help/Privacy]Privacy Policy[/zrl]
-[zrl=[baseurl]/help/history]$Projectname history[/zrl]
+[zrl=[baseurl]/help/project/governance]Project Governance[/zrl]
+[zrl=[baseurl]/help/contributor/convenant]Project Covenant and Code of Conduct[/zrl]
+[zrl=[baseurl]/help/project/history]$Projectname history[/zrl]
[h3]External resources[/h3]
[zrl=[baseurl]/help/external-resource-links]List of external resources[/zrl]
[url=https://github.com/redmatrix/hubzilla]Main Website[/url]
diff --git a/doc/hidden_configs.bb b/doc/hidden_configs.bb
index 6e093dbfc..f34c253ce 100644
--- a/doc/hidden_configs.bb
+++ b/doc/hidden_configs.bb
@@ -41,7 +41,7 @@ Options are:
[*= system.block_public_search ] Similar to block_public, except only blocks public access to search features. Useful for sites that want to be public, but keep getting hammered by search engines.
[*= system.cron_hour ] Specify an hour in which to run cron_daily. By default with no config, this will run at midnight UTC.
[*= system.default_permissions_role ] If set to a valid permissions role name, use that role for the first channel created by a new account and don't ask for the "Channel Type" on the channel creation form. Examples of valid names are: 'social', 'social_restricted', 'social_private', 'forum', 'forum_restricted' and 'forum_private'. Read more about permissions roles [zrl=[baseurl]/help/roles]here[/zrl].
- [*= system.default_photo_profile ] Set the profile photo that new channels start with. This should contain the name of a directory located under [font=courier]images/default_profile_photos/[/font], or be left unset. If not set then 'rainbow_man' is assumed.
+ [*= system.default_profile_photo ] Set the profile photo that new channels start with. This should contain the name of a directory located under [font=courier]images/default_profile_photos/[/font], or be left unset. If not set then 'rainbow_man' is assumed.
[*= system.directorytags ] Set the number of keyword tags displayed on the directory page. Default is 50 unless set to a positive integer.
[*= system.disable_directory_keywords ] If '1', do not show directory keywords. If the hub is a directory server, prevent returning tags to any directory clients. Please do not set this for directory servers in the RED_GLOBAL realm.
[*= system.disable_discover_tab ] This allows you to completely disable the ability to discover public content from external sites.
@@ -67,7 +67,7 @@ Options are:
[*= system.paranoia ] As the pconfig, but on a site-wide basis. Can be overwritten by member settings.
[*= system.photo_cache_time ] How long to cache photos, in seconds. Default is 86400 (1 day). Longer time increases performance, but it also means it takes longer for changed permissions to apply.
[*= system.platform_name ] What to report as the platform name in webpages and statistics. (*) Must be set in .htconfig.php
- [*= system.poco_rating_enable ] Distributed reputation reporting and data collection may be disabled. If your site does not participate in distributed reputation you will also not be able to make use of the data from your connections on other sites. By default and in the absence of any setting it is enabled. Individual members can opt out by restricting who can see their connections or by not providing any reputation information for their connections.
+ [*= system.rating_enabled ] Distributed reputation reporting and data collection. This feature is currently being re-worked.
[*= system.poke_basic ] Reduce the number of poke verbs to exactly 1 ("poke"). Disable other verbs.
[*= system.proc_run_use_exec ] If 1, use the exec system call in proc_run to run background tasks. By default we use proc_open and proc_close. On some (currently rare) systems this does not work well.
[*= system.projecthome ] Display the project page on your home page for logged out viewers.
diff --git a/doc/hook/bbcode.bb b/doc/hook/bbcode.bb
index 2996a8528..f6b8711b0 100644
--- a/doc/hook/bbcode.bb
+++ b/doc/hook/bbcode.bb
@@ -1 +1,6 @@
[h2]bbcode[/h2]
+
+
+Called at end of bbcode to html conversion.
+
+Hook argument contains the converted text string.
diff --git a/doc/hook/bbcode_filter.bb b/doc/hook/bbcode_filter.bb
new file mode 100644
index 000000000..efeb2e1b0
--- /dev/null
+++ b/doc/hook/bbcode_filter.bb
@@ -0,0 +1,7 @@
+[h2]bbcode_filter[/h2]
+
+
+Called at beginning of bbcode to html conversion.
+
+Hook argument contains the text string to be converted.
+
diff --git a/doc/hook/event_store_event.bb b/doc/hook/event_store_event.bb
new file mode 100644
index 000000000..7015a8322
--- /dev/null
+++ b/doc/hook/event_store_event.bb
@@ -0,0 +1,11 @@
+[h2]event_store_event[/h2]
+
+Called from event_store_event() when an event record is being stored.
+
+Hook info is an array
+
+'event' => the passed event details, ready for storage
+'existing_event' => If the event already exists, a copy of the original event record from the database
+'cancel' => false - set to true to cancel the operation.
+
+
diff --git a/doc/hook/get_profile_photo.bb b/doc/hook/get_profile_photo.bb
new file mode 100644
index 000000000..ab07179ae
--- /dev/null
+++ b/doc/hook/get_profile_photo.bb
@@ -0,0 +1,18 @@
+[h2]get_profile_photo[/h2]
+
+Called when fetching the content of the default profile photo for a local channel in mod_photo.
+
+
+Hook arguments:
+
+'imgscale' => integer resolution requested (4, 5, or 6)
+'channel_id' => channel_id of requested profile photo
+'default' => filename of default profile photo of this imgscale
+'data' => empty string
+'mimetype' => empty string
+
+
+If 'data' is set, this data will be used instead of the data obtained from the database search for the profile photo.
+If 'mimetype' is set, this mimetype will be used instead of the mimetype obtained from the database or the default profile photo mimetype.
+
+
diff --git a/doc/hooklist.bb b/doc/hooklist.bb
index 66ff1cf71..d190166f0 100644
--- a/doc/hooklist.bb
+++ b/doc/hooklist.bb
@@ -68,7 +68,10 @@ Hooks allow plugins/addons to "hook into" the code at many points and alter the
called when converting bbcode to markdown
[zrl=[baseurl]/help/hook/bbcode]bbcode[/zrl]
- Called when converting bbcode to HTML
+ Called at end of converting bbcode to HTML
+
+[zrl=[baseurl]/help/hook/bbcode_filter]bbcode_filter[/zrl]
+ Called when beginning to convert bbcode to HTML
[zrl=[baseurl]/help/hook/bb_translate_video]bb_translate_video[/zrl]
Called when extracting embedded services from bbcode video elements (rarely used)
@@ -184,6 +187,9 @@ Hooks allow plugins/addons to "hook into" the code at many points and alter the
[zrl=[baseurl]/help/hook/event_created]event_created[/zrl]
called when an event record is created
+[zrl=[baseurl]/help/hook/event_store_event]event_store_event[/zrl]
+ called when an event record is created or updated
+
[zrl=[baseurl]/help/hook/event_updated]event_updated[/zrl]
called when an event record is modified
@@ -233,6 +239,9 @@ Hooks allow plugins/addons to "hook into" the code at many points and alter the
[zrl=[baseurl]/help/hook/get_features]get_features[/zrl]
Called when get_features() is called
+[zrl=[baseurl]/help/hook/get_profile_photo]get_profile_photo[/zrl]
+ Called when local profile photo content is fetched in mod_photo
+
[zrl=[baseurl]/help/hook/get_role_perms]get_role_perms[/zrl]
Called when get_role_perms() is called to obtain permissions for named permission roles
diff --git a/doc/permissions.bb b/doc/permissions.bb
index cc831dd61..0721c763d 100644
--- a/doc/permissions.bb
+++ b/doc/permissions.bb
@@ -28,7 +28,7 @@ We highly recommend that you use the "typical social network" settings when you
[*= Anybody On This Hub ] Anybody with a channel on the same hub/website as you will have permission approved. Anybody who is registered at a different hub will have this permission denied.
- [*= Anybody in this network ] Anybody in the $Projectname will have this permission approved. Even complete strangers. However, anybody not logged in/authenticated will have this permission denied.
+ [*= Anybody in this network ] Anybody in $Projectname will have this permission approved. Even complete strangers. However, anybody not logged in/authenticated will have this permission denied.
[*= Anybody authenticated ] This is similar to "anybody in this network" except that it can include anybody who can authenticate by any means - and therefore [i]may[/i] include visitors from other networks.
diff --git a/doc/plugins.bb b/doc/plugins.bb
index f2f0b04e8..a320de790 100644
--- a/doc/plugins.bb
+++ b/doc/plugins.bb
@@ -45,7 +45,7 @@ In our case, we'll call them randplace_load() and randplace_unload(), as that is
pluginname_uninstall()
[/code]
-Next we'll talk about [b]hooks[/b]. Hooks are places in the $Projectname code where we allow plugins to do stuff. There are a [url=[baseurl]/help/hooklist]lot of these[/url], and they each have a name. What we normally do is use the pluginname_load() function to register a &quot;handler function&quot; for any hooks you are interested in. Then when any of these hooks are triggered, your code will be called.
+Next we'll talk about [b]hooks[/b]. Hooks are places in $Projectname code where we allow plugins to do stuff. There are a [url=[baseurl]/help/hooklist]lot of these[/url], and they each have a name. What we normally do is use the pluginname_load() function to register a &quot;handler function&quot; for any hooks you are interested in. Then when any of these hooks are triggered, your code will be called.
We register hook handlers with the 'Zotlabs\Extend\Hook::register()' function. It typically takes 3 arguments. The first is the hook we wish to catch, the second is the filename of the file to find our handler function (relative to the base of your $Projectname installation), and the third is the function name of your handler function. So let's create our randplace_load() function right now.
@@ -295,13 +295,13 @@ If you want to keep your plugin hidden from the siteinfo page, simply create a f
***Porting Friendica Plugins***
-The $Projectname uses a similar plugin architecture to the Friendica project. The authentication, identity, and permissions systems are completely different. Many Friendica can be ported reasonably easily by renaming a few functions - and then ensuring that the permissions model is adhered to. The functions which need to be renamed are:
+$Projectname uses a similar plugin architecture to the Friendica project. The authentication, identity, and permissions systems are completely different. Many Friendica can be ported reasonably easily by renaming a few functions - and then ensuring that the permissions model is adhered to. The functions which need to be renamed are:
[li] Friendica's pluginname_install() is pluginname_load()[/li]
[li] Friendica's pluginname_uninstall() is pluginname_unload()[/li]
-The $Projectname has _install and _uninstall functions but these are used differently.
+$Projectname has _install and _uninstall functions but these are used differently.
[li] Friendica's &quot;plugin_settings&quot; hook is called &quot;feature_settings&quot;[/li]
diff --git a/doc/problems-following-an-update.bb b/doc/problems-following-an-update.bb
index 3bc7e9a51..2d1fefc5b 100644
--- a/doc/problems-following-an-update.bb
+++ b/doc/problems-following-an-update.bb
@@ -28,7 +28,7 @@ We use the Smarty3 template engine to generate pages. These templates are compi
[b]Theme Issues[/b]
-There are many themes for The $Projectname. Only Redbasic is officialy supported by the core developers. This applies [i]even if a core developer happens to support an additional theme[/i]. This means new features are only guaranteed to work in Redbasic.
+There are many themes for $Projectname. Only Redbasic is officialy supported by the core developers. This applies [i]even if a core developer happens to support an additional theme[/i]. This means new features are only guaranteed to work in Redbasic.
Redbasic uses a few javascript libraries that are done differently, or entirely absent in other themes. This means new features may only work properly in Redbasic. Before reporting an issue, therefore, you should switch to Redbasic to see if it exists there. If the issue goes away, this is not a bug - it's a theme that isn't up to date.
diff --git a/doc/project/governance.bb b/doc/project/governance.bb
new file mode 100644
index 000000000..e13f6218c
--- /dev/null
+++ b/doc/project/governance.bb
@@ -0,0 +1,45 @@
+[h2]$Projectname Governance[/h2]
+
+Governance relates to the management of a project and particularly how this relates to conflict resolution.
+
+This project uses a dual-governance model.
+
+The project as a whole and the repository were created initially by Mike Macgirvin; who controls the project copyright, and the project license, and manages the project as a Self Appointed Benevolent Dictator for Life. He holds veto power over any project proposal or decision and his word is final.
+
+That said, Mike has no interest in running the day to day activities of the project and influencing its direction, other than to protect his own work from sabotage.
+
+The internal project structure contains multiple "configurations" known as 'basic', 'standard', and 'pro'. Mike's veto power extends to any proposal or decision which he feels might adversely affect the 'pro' configuration.
+
+The 'basic and 'standard' configurations are controlled completely by the community. If the proposal or decision is crafted in such a way that its effects are limited to these configurations, Mike will consider relinquishing his power of veto and convert it to a normal community vote.
+
+Mario Vavti has done an incredible amount of work on the usability and theming of the project and holds veto power over any proposal or decision which might impact usability and "look and feel"; and his decision is also final.
+
+Mario's veto power is likewise restricted to anything using the standard project 'theme'. If a new theme is created and an otherwise vetoed decision is implemented entirely in this different theme and has no impact on the standard project theme, his veto [b]may[/b] also be turned into a normal community vote.
+
+This ability to work around a veto is at the discretion of Mike and Mario. They [b]may[/b] choose to relinquish their veto if the scope of the work is limited as described above, and in most circumstances they will leave the decision to the community. They are not obligated to do so.
+
+[h3]Community Governance[/h3]
+
+Beyond those two special cases, the project is maintained and decisions made by the 'community'. The governance structure is still evolving. Until the structure is finalised, decisions are made in the following order:
+
+[ol]
+[*] Lazy Consensus
+
+If a project proposal is made to one of the community governance forums and there are no serious objections in a "reasonable" amount of time from date of proposal (we usually provide 2-3 days for all interested parties to weigh in), no vote needs to be taken and the proposal will be considered approved. Some concerns may be raised at this time, but if these are addressed during discussion and work-arounds provided, it will still be considered approved.
+
+[*] Veto
+
+If a proposal is vetoed, it is not necessarily the final word. See above on how to convert a veto into a normal community vote. This can be done by framing the proposal so that it does not impact the 'pro' configuration or the standard theme.
+
+[*] Community Vote
+
+A decision which does not have a clear mandate or clear consensus, but is not vetoed, can be taken to a community vote. At present this is a simple popular vote in one of the applicable community forums. At this time, popular vote decides the outcome. This may change in the future if the community adopts a 'council' governance model. This document will be updated at that time with the updated governance rules.
+[/ol]
+
+Community Voting does not always provide a pleasant outcome and can generate polarised factions in the community (hence the reason why other models are under consideration). If the proposal is 'down voted' there are still several things which can be done and the proposal re-submitted with slightly different parameters (convert to an addon, convert to an optional feature which is disabled by default, etc.). If interest in the feature is high and the vote is "close", it can generate lots of bad feelings amongst the losing voters. On such close votes, it is [b]strongly recommended[/b] that the proposer take steps to address any concerns that were raised and re-submit.
+
+
+
+
+
+
diff --git a/doc/history.md b/doc/project/history.md
index 7360c6b22..99cbfec7a 100644
--- a/doc/history.md
+++ b/doc/project/history.md
@@ -53,4 +53,22 @@ The Redmatrix community held a vote and the project was renamed "Hubzilla", with
Mike stepped down as active coordinator for the project in early 2015 and turned management over to the community. He remains active as a Hubzilla developer.
+##And Then...
+
+In 2016, the project was re-architected to support multiple server "roles". These correspond to sub-projects which can be isolated from each other in terms of supported feature sets, but all use and support the same code-base and developers are able to work together on common features and goals. The roles primarily differ in target audience, project [governance](help/project/governance) and decision making structures, and this results in slightly different features and idealogy. They all share a common code repository.
+
+Those roles are:
+
+### Basic
+
+Entry level server. Supported by and governed by the Hubzilla community. Most advanced or complex features have been stripped away to ease federation with external services. It is best suited as a FOSS social network tool.
+
+### Standard
+
+The standard Hubzilla server. This provides a wide range of useful features and is supported by and governed by the Hubzilla community. It is best suited as an open source community and cloud server.
+
+### Pro
+
+This is a specially crafted server with a unique feature set. It is supported by and governed by Mike Macgirvin dba "Zotlabs". Federation with external services has been stripped away in order to support a wide range of more technically advanced and complex features; and also includes features and modes which may not have the support or backing of the Hubzilla open source community. It is best suited for business and workplace applications.
+
#include doc/macros/main_footer.bb;
diff --git a/doc/project/toc.html b/doc/project/toc.html
new file mode 100644
index 000000000..b9489de3d
--- /dev/null
+++ b/doc/project/toc.html
@@ -0,0 +1,6 @@
+<h3>Project Information</h3>
+<ul>
+<li><a href="help/project/governance">Project Governance</a></li>
+<li><a href="help/project/history">Project History</a></li>
+<li><a href="help/project/versions">Versions and Versioning</a></li>
+</ul>
diff --git a/doc/project/versions.bb b/doc/project/versions.bb
new file mode 100644
index 000000000..451cd0448
--- /dev/null
+++ b/doc/project/versions.bb
@@ -0,0 +1,30 @@
+[h2]Versions and Releases[/h2]
+
+$Projectname currently uses a standard version numbering sequence of $x.$y(.$z), for instance '1.12' or '1.12.1'. The first digit is the major version number. Major versions are released "roughly" once per year; often in December.
+
+The second digit is the minor release number. If this number is odd, it is a development version. If the number is even, it is a released version. Minor versions are released (moved from dev to master) typically once per month when development is 'stable', but this is likely to increase. Going forward minor releases will be made somewhere between one and three months; corresponding to a stable code point and when there is general community consensus that the current code base is stable enough to consider a release.
+
+The final digit is an interface or patch designator.
+
+The release process involves changing the version number (by definition the minor version number will be odd, and the minor number will be incremented). Once a year for a major release the major version will be incremented, and the minor number reset to 0.
+
+The release candidate is moved to a new branch; and testing will commence/continue for a period of 1-2 weeks afterward or until any significant issues have been resolved. This branch is usually labelled with RC (release candidate); for instance 1.8RC represents the pending release of version 1.8. At this time, the minor version number on the dev branch is incremented to the next odd number. (For instance 1.9). New development can then take place in the dev branch.
+
+Bug fixes should always be applied to 'dev' and from there merged forward (typically with git cherry-pick) to the RC branch and if necessary applied to the master or official release branch.
+
+At the time a release candidate is produced, the language strings file is frozen until a release is made. Translation work may continue, but all translations should be submitted to 'dev' and merged forward to RC.
+
+
+Once RC testing is completed, RC is merged to 'master' and the RC version designator removed; resulting in one final checkin to change the version number. The CHANGELOG file should also be updated at or just prior to this time. If there are merge conflicts during this final merge, the merge will be abandoned; and 'git merge -s ours' applied. This results in a replacement of master with the contents of the RC branch. Conflicts often arise with string updates which were made to master after the last release and cannot easily be resolved without hand editing. Since this is a release of tested code, hand editing is discouraged, and the replacement merge strategy should be used instead. It is assumed that RC now contains the most recent well-tested code.
+
+Once the release is live and merged to master, the RC branch may be removed.
+
+Fixes may be made to master after release. Where possible these should be made to dev and 'git cherry-pick' used to merge forward; which preserves the commit info and prevents merge conflicts in the next cycle. Only rarely does a patch only apply to the master branch. If necessary this can be made. If the change is severe, the interface version number should be incremented. This is at the discretion of the community. In any event, a 'git pull' of the master branch should always result in the latest release with any post-release patches applied.
+
+The interface number (the $z in $x.$y.$z) should be incremented in dev whenever a change is made which changes the interfaces or API in incompatible ways so that any external packages (especially addons and API clients) relying on a the current behaviour can discover and change their own interfaces accordingly at the point that it changed.
+
+
+
+
+
+ \ No newline at end of file
diff --git a/doc/red2pi.bb b/doc/red2pi.bb
index 18e7d325a..28db7dc70 100644
--- a/doc/red2pi.bb
+++ b/doc/red2pi.bb
@@ -1,4 +1,4 @@
-[b]How to install the $Projectname on a Raspberry Pi[/b]
+[b]How to install $Projectname on a Raspberry Pi[/b]
You just bought a Raspberry Pi and want to run the RED Matrix with your own domain name?
diff --git a/doc/server_roles.bb b/doc/server_roles.bb
new file mode 100644
index 000000000..ef6ec28ae
--- /dev/null
+++ b/doc/server_roles.bb
@@ -0,0 +1,27 @@
+[h2]Server Roles[/h2]
+
+$Projectname can be configured in many different ways. One of the configurations available at installation is to select a 'server role'. There are currently three server roles. We highly recommend that you use 'standard' unless you have special needs.
+
+
+[h3]Basic[/h3]
+
+The 'basic' server role is designed to be relatively simple, and it doesn't present options or complicated features. The hub admin may configure additional features at a site level. This role is designed for simple social networking and social network federation. Many features which do not federate easily have been removed, including (and this is somewhat important) "nomadic identity". You may move a channel to or from a basic server, but you may not clone it. Once moved, it becomes read-only on the origination site. No updates of any kind will be provided. It is recommended that after the move, the original channel be deleted - as it is no longer useable. The data remains only in case there are issues making a copy of the data.
+
+This role is supported by the hubzilla community.
+
+[h3]Standard[/h3]
+
+
+The 'standard' server role is recommended for most sites. All features of the software are available to everybody unless locked by the hub administrator. Some features will not federate easily with other networks, so there is often an increased support burden explaining why sharing events with Diaspora (for instance) presents a different experience on that network. Additionally any member can enable "advanced" or "expert" features, and these may be beyond their technical skill level. This may also result in an increased support burden.
+
+This role is supported by the hubzilla community.
+
+[h3]Pro[/h3]
+
+The 'pro' server role is primarily designed for communities which want to present a uniform experience and be relieved of many federation support issues. In this role there is [b]no federation with other networks[/b]. Additional features [b]may[/b] be provided, such as channel ratings, premium channels, and e-commerce.
+
+By default a channel may set a "techlevel" appropriate to their technical skill. Higher levels provide more features. Everybody starts with techlevel 0 (similar to the 'basic' role) where all complicated features are hidden from view. Increasing the techlevel provides more advanced or complex features.
+
+The hub admin may also lock individual channels or their entire site at a defined techlevel which provides an installation with a selection of advanced features consistent with the perceived technical skills of the members. For instance, a community for horse racing might have a different techlevel than a community for Linux kernel developers.
+
+This role is not supported by the hubzilla community. \ No newline at end of file
diff --git a/doc/sv/main.bb b/doc/sv/main.bb
index a5c1d4f7a..27a7a742e 100644
--- a/doc/sv/main.bb
+++ b/doc/sv/main.bb
@@ -13,7 +13,7 @@ Zot är en fantastisk ny kommunikationsprotokoll uppfunnit speciellt för $Proje
[h3]Kom igång[/h3]
[zrl=[baseurl]/help/Privacy]Privacy Policy[/zrl]
[zrl=[baseurl]/help/registration]Account Registration[/zrl]
-[zrl=[baseurl]/help/accounts_profiles_channels_basics]You at the $Projectname: accounts, profiles and channels in short[/zrl]
+[zrl=[baseurl]/help/accounts_profiles_channels_basics]You at $Projectname: accounts, profiles and channels in short[/zrl]
[zrl=[baseurl]/help/profiles]Profiles[/zrl]
[zrl=[baseurl]/help/channels]Channels[/zrl]
[zrl=[baseurl]/help/sv/roles]Behörighetsförval för kanaler[/zrl]
@@ -43,7 +43,7 @@ Zot är en fantastisk ny kommunikationsprotokoll uppfunnit speciellt för $Proje
[zrl=[baseurl]/help/faq_admins]FAQ For Admins[/zrl]
[h3]Teknisk dokumentation[/h3]
-[zrl=[baseurl]/help/history]$Projectname history[/zrl]
+[zrl=[baseurl]/help/project/history]$Projectname history[/zrl]
[zrl=[baseurl]/help/Zot---A-High-Level-Overview]A high level overview of Zot[/zrl]
[zrl=[baseurl]/help/zot]An introduction to Zot[/zrl]
[zrl=[baseurl]/help/zot_structures]Zot Stuctures[/zrl]
diff --git a/doc/toc.html b/doc/toc.html
new file mode 100644
index 000000000..ac21959cf
--- /dev/null
+++ b/doc/toc.html
@@ -0,0 +1,6 @@
+<ul>
+<li><a href="help/general">Project/Site Information</a></li>
+<li><a href="help/members">For Members</a></li>
+<li><a href="help/admins">For Administrators</a></li>
+<li><a href="help/develop">For Developers</a></li>
+</ul>
diff --git a/doc/zot.md b/doc/zot.md
index 1e454e495..06c4d6083 100644
--- a/doc/zot.md
+++ b/doc/zot.md
@@ -57,7 +57,7 @@ In order to implement high performance communications, the data transfer format
Bi-directional encryption is based on RSA 4096-bit keys expressed in DER/ASN.1 format using the PKCS#8 encoding variant, with AES-256-CBC used for block encryption of variable length or large items.
-Some aspects of well known "federation protocols" (webfinger, salmon, activitystreams, portablecontacts, etc.) may be used in zot, but we are not tied to them and will not be bound by them. The $Projectname project is attempting some rather novel developments in decentralised communications and if there is any need to diverge from such "standard protocols" we will do so without question or hesitation.
+Some aspects of well known "federation protocols" (webfinger, salmon, activitystreams, portablecontacts, etc.) may be used in zot, but we are not tied to them and will not be bound by them. $Projectname project is attempting some rather novel developments in decentralised communications and if there is any need to diverge from such "standard protocols" we will do so without question or hesitation.
In order to create a globally unique ID, we will base it on a whirlpool hash of the identity URL of the origination node and a psuedo-random number, which should provide us with a 256 bit ID with an extremely low probability of collision (256 bits represents approximately 115 quattuorviginitillion or 1.16 X 10^77 unique numbers). This will be represented in communications as a base64url-encoded string. We will not depend on probabilities however and the ID must also be attached to a public key with public key cryptography used to provide an assurance of identity which has not been copied or somehow collided in whirlpool hash space.