diff --git a/doc/Home.md b/doc/Home.md
index d0f95d076..437486e02 100644
--- a/doc/Home.md
+++ b/doc/Home.md
@@ -7,11 +7,11 @@ Friendica Documentation and Resources
* [Account Basics](help/Account-Basics)
* [New User Quick Start](help/Quick-Start-guide)
* [Creating posts](help/Text_editor)
- * [BBCode tag reference](help/BBCode)
+ * [BBCode tag reference](help/BBCode)
* [Comment, sort and delete posts](help/Text_comment)
* [Profiles](help/Profiles)
* [Accesskey reference](help/Accesskeys)
- * [Events](help/events)
+ * [Events](help/events)
* You and other users
* [Connectors](help/Connectors)
* [Making Friends](help/Making-Friends)
@@ -31,9 +31,7 @@ Friendica Documentation and Resources
* [Settings & Admin Panel](help/Settings)
* [Installing Connectors (Twitter/GNU Social)](help/Installing-Connectors)
* [Install an ejabberd server (XMPP chat) with synchronized credentials](help/install-ejabberd)
-* [Message Flow](help/Message-Flow)
* [Using SSL with Friendica](help/SSL)
-* [Twitter/GNU Social API Functions](help/api)
* [Config values that can only be set in .htconfig.php](help/htconfig)
**Developer Manual**
@@ -46,9 +44,11 @@ Friendica Documentation and Resources
* [Plugin Development](help/Plugins)
* [Theme Development](help/themes)
* [Smarty 3 Templates](help/smarty3-templates)
+* [Protocol Documentation](help/Protocol)
* [Database schema documantation](help/database)
* [Class Autoloading](help/autoloader)
* [Code - Reference(Doxygen generated - sets cookies)](doc/html/)
+* [Twitter/GNU Social API Functions](help/api)
**External Resources**
diff --git a/doc/Message-Flow.md b/doc/Message-Flow.md
index ce0a4248a..9a6785d59 100644
--- a/doc/Message-Flow.md
+++ b/doc/Message-Flow.md
@@ -4,7 +4,7 @@ Friendica Message Flow
This page documents some of the details of how messages get from one person to another in the Friendica network.
There are multiple paths, using multiple protocols and message formats.
-Those attempting to understand these message flows should become familiar with (at the minimum) the [DFRN protocol document](http://dfrn.org/dfrn.pdf) and the message passing elements of the OStatus stack (salmon and Pubsubhubbub).
+Those attempting to understand these message flows should become familiar with (at the minimum) the [DFRN protocol document](https://github.com/friendica/friendica/blob/master/spec/dfrn2.pdf) and the message passing elements of the OStatus stack (salmon and Pubsubhubbub).
Most message passing involves the file include/items.php, which has functions for several feed-related import/export activities.
@@ -21,8 +21,8 @@ Push (pubsubhubbub) feeds arrive via mod/pubsub.php
DFRN-poll feed imports arrive via include/poller.php as a scheduled task, this implements the local side of the DFRN-poll protocol.
-Scenario #1. Bob posts a public status message
----
+### Scenario #1. Bob posts a public status message
+
This is a public message with no conversation members so no private transport is used.
There are two paths it can take - as a bbcode path to DFRN clients, and converted to HTML with the server's PuSH (pubsubhubbub) hubs notified.
When a PuSH hub is operational, dfrn-poll clients prefer to receive their information through the PuSH channel.
@@ -30,31 +30,31 @@ They will fall back on a daily poll in case the hub has delivery issues (this is
If there is no specified hub or hubs, DFRN clients will poll at a configurable (per-contact) rate at up to 5-minute intervals.
Feeds retrieved via dfrn-poll are bbcode and may also contain private conversations which the poller has permissions to see.
-Scenario #2. Jack replies to Bob's public message. Jack is on the Friendica/DFRN network.
----
+### Scenario #2. Jack replies to Bob's public message. Jack is on the Friendica/DFRN network.
+
Jack uses dfrn-notify to send a direct reply to Bob.
Bob then creates a feed of the conversation and sends it to everybody involved in the conversation using dfrn-notify.
PuSH hubs are notified that new content is available.
The hub or hubs will then retrieve the latest feed and transmit it to all hub subscribers (which may be on different networks).
-Scenario #3. Mary replies to Bob's public message. Mary is on the Friendica/DFRN network.
----
+### Scenario #3. Mary replies to Bob's public message. Mary is on the Friendica/DFRN network.
+
Mary uses dfrn-notify to send a direct reply to Bob.
Bob then creates a feed of the conversation and sends it to everybody involved in the conversation (excluding himself, the conversation is now sent to both Jack and Mary).
Messages are sent using dfrn-notify.
Push hubs are also notified that new content is available.
The hub or hubs will then retrieve the latest feed and transmit it to all hub subscribers (which may be on different networks).
-Scenario #4. William replies to Bob's public message. William is on the OStatus network.
----
+### Scenario #4. William replies to Bob's public message. William is on the OStatus network.
+
William uses salmon to notify Bob of the reply.
Content is html embedded in salmon magic envelope.
Bob then creates a feed of the conversation and sends it to all Friendica participants involved in the conversation using dfrn-notify (excluding himself, the conversation is sent to both Jack and Mary).
Push hubs are notified that new content is available.
The hub or hubs will then retrieve the latest feed and transmit it to all hub subscribers (which may be on different networks).
-Scenario #5. Bob posts a private message to Mary and Jack.
----
+### Scenario #5. Bob posts a private message to Mary and Jack.
+
Message is delivered immediately to Mary and Jack using dfrn_notify.
Public hubs are not notified.
Requeueing is attempted in case of timeout.
diff --git a/doc/Protocol.md b/doc/Protocol.md
new file mode 100644
index 000000000..86ed027d6
--- /dev/null
+++ b/doc/Protocol.md
@@ -0,0 +1,40 @@
+Used Protocols
+===============
+
+Friendicas DFRN Protocol
+---
+
+* [Document with the DFRN specification](spec/dfrn2.pdf)
+* [Schema of the contact request process](spec/dfrn2_contact_request.png)
+* [Schema of the contact request confirmation](spec/dfrn2_contact_confirmation.png)
+* [Description of the message flow](help/Message-Flow)
+
+ActivityStreams
+---
+
+Friendica is using ActivityStreams in version 1.0 for its activities and object types.
+Additional types are used for non standard activities.
+
+* [Link to the specification](http://activitystrea.ms/head/activity-schema.html)
+* [List of used ActivityStreams verbs and object types.](https://github.com/friendica/friendica/wiki/ActivityStreams)
+
+Salmon
+---
+
+Salmon is used as a message exchange protocol for replies and mentions.
+
+* [Link to the protocol summary](http://www.salmon-protocol.org/salmon-protocol-summary)
+
+Portable Contacts
+---
+
+Portable Contacts is used for friends lists.
+
+* [Link to the specification](https://web.archive.org/web/20160426223008/http://portablecontacts.net/draft-spec.html) (Link to archive.org)
+
+pubsubhubbub
+---
+
+pubsubhubbub is used for OStatus.
+
+* [Link to the specification](https://pubsubhubbub.github.io/PubSubHubbub/pubsubhubbub-core-0.4.html)
diff --git a/doc/de/Home.md b/doc/de/Home.md
index 68c026e5c..6023e3cdc 100644
--- a/doc/de/Home.md
+++ b/doc/de/Home.md
@@ -26,32 +26,31 @@ Friendica - Dokumentation und Ressourcen
* [Bugs und Probleme](help/Bugs-and-Issues)
* [Häufig gestellte Fragen (FAQ)](help/FAQ)
-**Technische Dokumentation**
+**Dokumentation für Administratoren**
* [Installation](help/Install)
* [Konfigurationen & Admin-Panel](help/Settings)
* [Plugins](help/Plugins)
* [Konnektoren (Connectors) installieren (Twitter/GNU Social)](help/Installing-Connectors)
* [Installation eines ejabberd Servers (XMPP-Chat) mit synchronisierten Anmeldedaten](help/install-ejabberd) (EN)
-* [Nachrichtenfluss](help/Message-Flow)
* [Betreibe deine Seite mit einem SSL-Zertifikat](help/SSL)
-* [Entwickler](help/Developers)
-* [Twitter/GNU Social API Functions](help/api) (EN)
-* [Translation of Friendica](help/translations) (EN)
* [Konfigurationswerte, die nur in der .htconfig.php gesetzt werden können](help/htconfig) (EN)
-**Entwickler Dokumentation**
+**Dokumentation für Entwickler**
-* [Where to get started?](help/Developers-Intro)
+* [Entwickler](help/Developers)
+* [Where to get started?](help/Developers-Intro) (EN)
* [Help on Github](help/Github)
* [Help on Vagrant](help/Vagrant)
-* [How to translate Friendica](help/translations)
+* [How to translate Friendica](help/translations) (EN)
* [Bugs and Issues](help/Bugs-and-Issues)
* [Plugin Development](help/Plugins)
* [Theme Development](help/themes)
* [Smarty 3 Templates](help/smarty3-templates)
+* [Protokoll Dokumentation](help/Protocol) (EN)
* [Datenbank-Schema](help/database)
* [Code-Referenz (mit doxygen generiert - setzt Cookies)](doc/html/)
+* [Twitter/GNU Social API Functions](help/api) (EN)
**Externe Ressourcen**
diff --git a/doc/de/Message-Flow.md b/doc/de/Message-Flow.md
index 0694db134..3d4c912cc 100644
--- a/doc/de/Message-Flow.md
+++ b/doc/de/Message-Flow.md
@@ -6,7 +6,7 @@ Friendica Nachrichtenfluss
Diese Seite soll einige Infos darüber dokumentieren, wie Nachrichten innerhalb von Friendica von einer Person zur anderen übertragen werden.
Es gibt verschiedene Pfade, die verschiedene Protokolle und Nachrichtenformate nutzen.
-Diejenigen, die den Nachrichtenfluss genauer verstehen wollen, sollten sich mindestens mit dem DFRN-Protokoll (http://dfrn.org/dfrn.pdf) und den Elementen zur Nachrichtenverarbeitung des OStatus Stack informieren (salmon und Pubsubhubbub).
+Diejenigen, die den Nachrichtenfluss genauer verstehen wollen, sollten sich mindestens mit dem DFRN-Protokoll ([Dokument mit den DFRN Spezifikationen](https://github.com/friendica/friendica/blob/master/spec/dfrn2.pdf)) und den Elementen zur Nachrichtenverarbeitung des OStatus Stack informieren (salmon und Pubsubhubbub).
Der Großteil der Nachrichtenverarbeitung nutzt die Datei include/items.php, welche Funktionen für verschiedene Feed-bezogene Import-/Exportaktivitäten liefert.
@@ -24,7 +24,7 @@ PuSh-Feeds (pubsubhubbub) kommen via mod/pubsub.php an.
DFRN-poll Feed-Imports kommen via include/poller.php als geplanter Task an, das implementiert die lokale Bearbeitung (local side) des DFRN-Protokolls.
-Szenario #1. Bob schreibt eine öffentliche Statusnachricht
+### Szenario #1. Bob schreibt eine öffentliche Statusnachricht
Dies ist eine öffentliche Nachricht ohne begrenzte Nutzerfreigabe, so dass keine private Übertragung notwendig ist.
Es gibt zwei Wege, die genutzt werden können - als bbcode an DFRN-Clients oder als durch den Server konvertierten HTML-Code (mit PuSH; pubsubhubbub).
@@ -33,13 +33,13 @@ Sie fallen zurück auf eine tägliche Abfrage, wenn der Hub Übertragungsschwier
Wenn kein spezifizierter Hub oder Hubs ausgewählt sind, werden DFRN-Clients in einer pro Kontakt konfigurierbaren Rate mit bis zu 5-Minuten-Intervallen abfragen.
Feeds, die via DFRN-Poll abgerufen werden, sind bbcode und können auch private Unterhaltungen enthalten, die vom Poller auf ihre Zugriffsrechte hin geprüft werden.
-Szenario #2. Jack antwortet auf Bobs öffentliche Nachricht. Jack ist im Friendica/DFRN-Netzwerk.
+### Szenario #2. Jack antwortet auf Bobs öffentliche Nachricht. Jack ist im Friendica/DFRN-Netzwerk.
Jack nutzt dfrn-notify, um eine direkte Antwort an Bob zu schicken.
Bob erstellt dann einen Feed der Unterhaltung und sendet diesen an jeden, der an der Unterhaltung beteiligt ist und dfrn-notify nutzt.
Die PuSH-Hubs werden darüber informiert, dass neuer Inhalt verfügbar ist. Der/die Hub/s erhalten dann die neuesten Feeds und übertragen diese an alle Hub-Teilnehmer (die auch zu verschiedenen Netzwerken gehören können).
-Szenario #3. Mary antwortet auf Bobs öffentliche Nachricht. Mary ist im Friendica/DFRN-Netzwerk.
+### Szenario #3. Mary antwortet auf Bobs öffentliche Nachricht. Mary ist im Friendica/DFRN-Netzwerk.
Mary nutzt dfrn-notify, um eine direkte Antwort an Bob zu schicken.
Bob erstellt dann einen Feed der Unterhaltung und sendet diesen an jeden, der an der Unterhaltung beteiligt ist (mit Ausnahme von Bob selbst; die Unterhaltung wird nun an Jack und Mary geschickt).
@@ -47,14 +47,14 @@ Die Nachrichten werden mit dfrn-notify übertragen.
PuSH-Hubs werden darüber informiert, dass neuer Inhalt verfügbar ist.
Der/die Hub/s erhalten dann die neuesten Feeds und übertragen sie an alle Hub-Teilnehmer (die auch zu verschiedenen Netzwerken gehören können).
-Szenario #4. William antwortet auf Bobs öffentliche Nachricht. William ist in einem OStatus-Netzwerk.
+### Szenario #4. William antwortet auf Bobs öffentliche Nachricht. William ist in einem OStatus-Netzwerk.
William nutzt salmon, um Bob über seine Antwort zu benachrichtigen.
Der Inhalt ist HTML-Code, der in das Salmon Magic Envelope eingebettet ist.
Bob erstellt dann einen Feed der Unterhaltung und sendet es an alle Friendica-Nutzer, die an der Unterhaltung beteiligt sind und dfrn-notify nutzen (mit Ausnahme von William selbst; die Unterhaltung wird an Jack und Mary weitergeleitet).
PuSH-Hubs werden darüber informiert, dass neuer Inhalt verfügbar ist. Der/die Hub/s erhalten dann die neuesten Feeds und übertragen sie an alle Hub-Teilnehmer (die auch zu verschiedenen Netzwerken gehören können).
-Szenario #5. Bob schreibt eine private Nachricht an Mary und Jack.
+### Szenario #5. Bob schreibt eine private Nachricht an Mary und Jack.
Die Nachricht wird sofort an Mary und Jack mit Hilfe von dfrn_notify geschickt.
Öffentliche Hubs werden nicht benachrichtigt.
diff --git a/include/dfrn.php b/include/dfrn.php
index 67cef59d9..9cbf05ece 100644
--- a/include/dfrn.php
+++ b/include/dfrn.php
@@ -3,7 +3,8 @@
* @file include/dfrn.php
* @brief The implementation of the dfrn protocol
*
- * https://github.com/friendica/friendica/wiki/Protocol
+ * @see https://github.com/friendica/friendica/wiki/Protocol and
+ * https://github.com/friendica/friendica/blob/master/spec/dfrn2.pdf
*/
require_once("include/Contact.php");
diff --git a/mod/dfrn_confirm.php b/mod/dfrn_confirm.php
index 51cd59c62..5aea4eede 100644
--- a/mod/dfrn_confirm.php
+++ b/mod/dfrn_confirm.php
@@ -1,17 +1,21 @@
argv[1];
}
- /**
+ /*
*
* Main entry point. Scenario 1. Our user received a friend request notification (perhaps
* from another site) and clicked 'Approve'.
@@ -87,7 +91,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
$activity = ((x($_POST,'activity')) ? intval($_POST['activity']) : 0 );
}
- /**
+ /*
*
* Ensure that dfrn_id has precedence when we go to find the contact record.
* We only want to search based on contact id if there is no dfrn_id,
@@ -103,7 +107,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
logger('Confirming follower with contact_id: ' . $cid);
- /**
+ /*
*
* The other person will have been issued an ID when they first requested friendship.
* Locate their record. At this time, their record will have both pending and blocked set to 1.
@@ -139,7 +143,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
if($network === NETWORK_DFRN) {
- /**
+ /*
*
* Generate a key pair for all further communications with this person.
* We have a keypair for every contact, and a site key for unknown people.
@@ -166,7 +170,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
$params = array();
- /**
+ /*
*
* Per the DFRN protocol, we will verify both ends by encrypting the dfrn_id with our
* site private key (person on the other end can decrypt it with our site public key).
@@ -212,7 +216,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
logger('Confirm: posting data to ' . $dfrn_confirm . ': ' . print_r($params,true), LOGGER_DATA);
- /**
+ /*
*
* POST all this stuff to the other site.
* Temporarily raise the network timeout to 120 seconds because the default 60
@@ -506,7 +510,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
//NOTREACHED
}
- /**
+ /*
*
*
* End of Scenario 1. [Local confirmation of remote friend request].
diff --git a/mod/dfrn_notify.php b/mod/dfrn_notify.php
index 780fb456f..6f6fc41c1 100644
--- a/mod/dfrn_notify.php
+++ b/mod/dfrn_notify.php
@@ -1,5 +1,10 @@
+
+
diff --git a/spec/dfrn2_contact_request.png b/spec/dfrn2_contact_request.png
new file mode 100644
index 000000000..cf60094ae
Binary files /dev/null and b/spec/dfrn2_contact_request.png differ
diff --git a/spec/dfrn2_contact_request.svg b/spec/dfrn2_contact_request.svg
new file mode 100644
index 000000000..d81323457
--- /dev/null
+++ b/spec/dfrn2_contact_request.svg
@@ -0,0 +1,218 @@
+
+
+
diff --git a/view/theme/frio/css/style.css b/view/theme/frio/css/style.css
index 2c5030ca2..0dc3573be 100644
--- a/view/theme/frio/css/style.css
+++ b/view/theme/frio/css/style.css
@@ -2105,7 +2105,6 @@ ul li:hover .contact-wrapper a.contact-action-link:hover {
/* Events page */
-
.fc .fc-month-view .fc-content .fc-title .item-desc:hover {
color: $link_hover_color;
}
@@ -2305,6 +2304,39 @@ little modifications to emulate a standard page template */
-moz-box-shadow: 0 0 3px #dadada;
}
+/* Help Page */
+section.help-content-wrapper h1 {
+ padding-bottom: 0.3em;
+ font-size: 1.8em;
+ border-bottom: 1px solid #ddd;
+}
+section.help-content-wrapper h2 {
+ padding-bottom: 0.3em;
+ font-size: 1.5em;
+ border-bottom: 1px solid #ddd;
+}
+section.help-content-wrapper h3 {
+ font-size: 1.2em;
+}
+section.help-content-wrapper h1,
+section.help-content-wrapper h2,
+section.help-content-wrapper h3,
+section.help-content-wrapper h5,
+section.help-content-wrapper h6 {
+ margin-top: 24px;
+ margin-bottom: 16px;
+ font-weight: 600;
+ line-height: 1.25;
+}
+section.help-content-wrapper p {
+ margin: 0.4em 0;
+}
+section.help-content-wrapper p,
+section.help-content-wrapper a {
+ line-height: 1.6;
+ font-size: 0.96em;
+}
+
/*
* Overwriting for transparency and other colors
*/