+ <para>Obsidian Workspaces is an modular application and PHP framework to creates intranet, workspaces and collaborative sites.</para>
+ <para>It uses concepts like documents collections, applications and workspaces to allow to create with the minimum of configuration and few development CRUD interfaces and dashboards.</para>
+ </sect1>
+ <sect1>
+ <title>Intended audience</title>
+ <para>The handbook Obsidian Workspaces intended audience is the system administrator, developer or user.</para>
+ <para>It's divided in several parts each targeted to one of these three activities.</para>
+ <title>A collection is a set of documents</title>
+ <para>[...]</para>
+ </sect2>
+ <sect2>
+ <title>A collection could be stored in several ways, and is independant of the storage strategy.</title>
+ <para>[...]</para>
+ </sect2>
+ <sect2>
+ <title>Terminology equivalents</title>
+ <para>The Obsidian Workspaces collection is the equivalent of a SharePoint list. Each collection document could be consided as matching a content type.</para>
+ </sect2>
+ </sect1>
+ <sect1>
+ <title>Configuration</title>
+ <sect2>
+ <title>Add a collection to a workspace application</title>
+ <para>To tell an application to use collections:
+ <programlisting language="json">
+ {
+ "name": "MyLibraryApplication",
+ [...]
+ "useCollections": {
+ "books": "library_books",
+ "periodics": "library_periodics"
+ }
+ }
+ </programlisting>
+ </para>
+ </sect3>
+ </sect2>
+ </sect1>
+ <sect1>
+ <title>Naming prefix</title>
+ <para>By default, your collection name is automatically prepended by the workspace
+ code, with a dash as separator.</para>
+ <para>For example, if you define a <emphasis role="italic">books</emphasis>
+ collection in the workspace <emphasis role="italic">library</emphasis>, the
+ collection name will be <emphasis role="italic">library-books</emphasis>.</para>
+ <para>If you wish to use a collection accross different workspaces, you need to define the <varname>global</varname> property, and set it as true.</para>
+ </sect1>
+ <sect1>
+ <title>Naming conventions</title>
+ <para>Depending of the storage engine, the collection name could be stored: <itemizedlist>
+ <listitem>
+ <para>as the value of a relational database collection_id text
+ field</para>
+ </listitem>
+ <listitem>
+ <para>as the name of a MongoDB collection</para>
+ </listitem>
+ <listitem>
+ <para>as the name of a filesystem directory</para>
+ </listitem>
+ </itemizedlist></para>
+ <para>An efficient naming strategy is to only use A-Z a-z latin non accentuated
+ letters, 0-9 arab digits, dashes and underscore, and to start the collection
+ name by a letter. For example <emphasis role="italic">books</emphasis>,
+ <para>This application were built on the top of the Keruald MVC starter kit, so you can read the following document to have an overview of what happens in the application:
+ <link xl:href="http://devio.us/~dereckson/software/keruald/Application%20entry%20point%20walkthrough.pdf">Keruald start process — Application entry point walkthrough</link></para>
+ <para>[This is a placeholder for further notes, for example about the configuration files load, and the workspaces configuration file reading workflow]</para>
+ </sect1>
+ </chapter>
+ <chapter>
+ <title>Extend the core</title>
+ <sect1>
+ <title>Create an engine storage</title>
+ <para>[This is a placeholder for further notes to add an engine storage class. Meanwhile, look the existing code in includes/collection folder]</para>
+ </sect1>
+ <sect1>
+ <title>Authentication</title>
+ <sect2>
+ <title>Create a remote identity provider</title>
+ <para></para>
+ <sect3>
+ <title>Use the remote identity provider</title>
+ <para>The authentication is scoped by workspace</para>
+ <para>The workspaces administrator guide describes how to configure an authentication provider.</para>
+ </sect3>
+ </sect2>
+ <sect2>
+ <title>Create an user action</title>
+ <para>Obsidian Workspaces allows to automatically run actions when an user logs in, typically from an external source.</para>
+ </sect2>
+ </sect1>
+ </chapter>
+ <chapter>
+ <title>Code conventions</title>
+ <sect1>
+ <title>Whitespaces</title>
+ <para>Indentation isn't done with tabulations, but with 4 whitespaces per level.</para>
+ <para>We follow the UNIX convention and use \n to return.</para>
+ <para>No whitespace should be present at the end of a line.</para>
+ <para>Each file should be ended by a new line.</para>
+ </sect1>
+ <sect1>
+ <title>PHP code</title>
+ <para>Brackets starts on the line.</para>
+ <para>Format your code the more clearer and easy to read way, following our bracked opened on the block declaration line style.</para>
+ <para>Don't end files by ?>, it avoids to introduce extra whitespaces in the page output.</para>
+ </sect1>
+ <sect1>
+ <title>L10n files</title>
+ <para>CamelCase is used for the keys, generally concatening the English sentence without articles.</para>