summaryrefslogtreecommitdiff
path: root/Architecture_and_Design/en-US/Administration_Panel.xml
diff options
context:
space:
mode:
Diffstat (limited to 'Architecture_and_Design/en-US/Administration_Panel.xml')
-rw-r--r--Architecture_and_Design/en-US/Administration_Panel.xml718
1 files changed, 709 insertions, 9 deletions
diff --git a/Architecture_and_Design/en-US/Administration_Panel.xml b/Architecture_and_Design/en-US/Administration_Panel.xml
index 9c413df..c44aae9 100644
--- a/Architecture_and_Design/en-US/Administration_Panel.xml
+++ b/Architecture_and_Design/en-US/Administration_Panel.xml
@@ -192,7 +192,10 @@
In another rule-of-thumb we outline the naming convention for services and methods.
</para>
<para>
- Service names consist of an object name either in singular or plural form. The singular form depicts actions are placed against a single instance of an object, such as <literal>object.add</literal>, whereas the plural form depicts actions are placed against multiple instances of an object, such as <literal>objects.list</literal> or <literal>objects.search</literal>.
+ Service names consist of an object name either in singular or plural form. The singular form depicts actions are placed against a single instance of an object, such as <literal>object.add</literal>, or at most one result entry is expected, such as <literal>object.find</literal>.
+ </para>
+ <para>
+ The plural form depicts actions that are placed against multiple instances of an object, such as <literal>objects.list</literal> or <literal>objects.search</literal>, or expect zero, one or more result entries to be returned.
</para>
<para>
Method names often imply an action is placed against one or more objects in one request. Certain actions may be confusing though. For these we have the following rules;
@@ -203,7 +206,7 @@
<formalpara id="form-Architecture_and_Design-Service_and_Method_Naming_Convention-Finding_an_object">
<title>Finding an object</title>
<para>
- The method <literal>find</literal> is always executed against the service with the singular form of the object name. The target of calling a <literal>find</literal> method is to obtain exactly one instance of an object. The method should fail if the result set contains any number of objects not one.
+ The method <literal>find</literal> is always executed against the service with the singular form of the object name. The target of calling a <literal>find</literal> method is to obtain exactly zero or one instance of an object. The method should fail if the result set contains any number of objects not zero or one.
</para>
</formalpara>
@@ -246,6 +249,19 @@
</para>
<para>
+ The reponse to a successful request that is expected to return a zero or one item, such as <literal>find</literal> methods, includes a result layout as follows:
+ </para>
+ <para>
+
+<screen language="Python">{
+ "status": "OK",
+ "result": {
+ (... entry data ...)
+ }
+}</screen>
+
+ </para>
+ <para>
The reponse to a successful request that is expected to return a list of zero, one or more items, such as <literal>list</literal> and <literal>search</literal> methods, includes a result layout as follows:
</para>
<para>
@@ -282,7 +298,7 @@
<section id="sect-Architecture_and_Design-The_domain_Service-domain.add_Method">
<title><literal>domain.add</literal> Method</title>
<para>
- Depending on the technology used, quite the variety of things may need to happen when adding a domain to a Kolab Groupware deployment.
+ Depending on the technology used, quite the variety of things may need to happen when adding a domain to a Kolab Groupware deployment. This is therefore a responsbility for the API rather then the client.
</para>
<formalpara id="form-Architecture_and_Design-domain.add_Method-Parameters">
<title>Parameters</title>
@@ -307,28 +323,88 @@
</itemizedlist>
</para>
- <!--
<para>
The following parameters MAY be specified alongside the required parameters:
</para>
<para>
<itemizedlist>
<listitem>
- <formalpara id="form-Architecture_and_Design-domain.add_Method-owner">
- <title><literal>owner</literal></title>
+ <formalpara id="form-Architecture_and_Design-domain.add_Method-parent">
+ <title><literal>parent</literal></title>
<para>
- If specified, MUST refer to an existing domain name space.
+ The domain name space for which the domain name space being created is an alias.
</para>
</formalpara>
- <remark> We need to verify owner is a valid attribute to an associated domain, and/or find a different mechanism for delegation between ISP, any level of resellers, and customers. Note that perhaps also the level of delegation can be tricky (@hotmail.com hosted style) </remark>
+ <para>
+ If specified, the parent MUST refer to an existing domain name space.
+ </para>
+ <important>
+ <para>
+ The user adding the domain name space as an alias is required to have administrative privileges over the parent domain name space.
+ </para>
+
+ </important>
+
+ </listitem>
+ <listitem>
+ <formalpara id="form-Architecture_and_Design-domain.add_Method-admin_group_name">
+ <title><literal>admin_group_name</literal></title>
+ <para>
+ The name of the group that is to be assigned administrative privileges over the domain name space.
+ </para>
+
+ </formalpara>
+ <para>
+ This parameter is only valid for new domain name spaces added without a parent.
+ </para>
+ <para>
+ The administrative group is searched after the domain name space is added. Should the group not exist, it is created.
+ </para>
+ <remark>What is the search filter for the group search?</remark>
+
+ </listitem>
+ <listitem>
+ <formalpara id="form-Architecture_and_Design-domain.add_Method-admin_role_name">
+ <title><literal>admin_role_name</literal></title>
+ <para>
+ The name of the role that is to be assigned administrative privileges over the domain name space.
+ </para>
+
+ </formalpara>
+ <para>
+ This parameter is only valid for new domain name spaces added without a parent.
+ </para>
+ <para>
+ The administrative role is searched after the domain name space is added. Should the role not exist, it is created.
+ </para>
+ <remark>What is the search filter for the role search?</remark>
+
+ </listitem>
+ <listitem>
+ <formalpara id="form-Architecture_and_Design-domain.add_Method-admin_user">
+ <title><literal>admin_user</literal></title>
+ <para>
+ The name of the admin user that is to be added to the <xref linkend="form-Architecture_and_Design-domain.add_Method-admin_group_name" /> or <xref linkend="form-Architecture_and_Design-domain.add_Method-admin_role_name" />.
+ </para>
+
+ </formalpara>
+ <para>
+ This parameter is only valid for new domain name spaces added without a parent, that either have the <xref linkend="form-Architecture_and_Design-domain.add_Method-admin_group_name" /> or <xref linkend="form-Architecture_and_Design-domain.add_Method-admin_role_name" /> parameters defined as well.
+ </para>
+ <para>
+ The user is searched for after the domain name space is added and the <xref linkend="form-Architecture_and_Design-domain.add_Method-admin_group_name" /> or <xref linkend="form-Architecture_and_Design-domain.add_Method-admin_role_name" /> have been created. Should the user not exist, it is created.
+ </para>
+ <para>
+ Subsequently, the role named in <xref linkend="form-Architecture_and_Design-domain.add_Method-admin_role_name" /> is attached to the user, or the user is added as a member of the group listed in the <xref linkend="form-Architecture_and_Design-domain.add_Method-admin_group_name" /> parameter.
+ </para>
</listitem>
</itemizedlist>
</para>
- --> <formalpara id="form-Architecture_and_Design-domain.add_Method-HTTP_Methods">
+ <formalpara id="form-Architecture_and_Design-domain.add_Method-HTTP_Methods">
<title>HTTP Method(s)</title>
<para>
POST, with an <literal>X-Session-Token</literal> HTTP/1.1 header.
@@ -752,6 +828,343 @@ domain_dn="dc=${domain_dn}"
</section>
+ <section id="sect-Architecture_and_Design-Web_Administration_Panel_API-The_form_value_Service">
+ <title>The <literal>form_value</literal> Service</title>
+ <section id="sect-Architecture_and_Design-The_form_value_Service-form_value.generate_Method">
+ <title><literal>form_value.generate</literal> Method</title>
+ <para>
+ This API call allows access to routines that generate attribute values. It accepts data containing the names and values of other attribute values as input, which can be used to generate the new attribute value requested.
+ </para>
+ <formalpara id="form-Architecture_and_Design-form_value.generate_Method-Parameters">
+ <title>Parameters</title>
+ <para>
+ The <literal>form_value.generate</literal> API call accepts the following parameters:
+ </para>
+
+ </formalpara>
+ <para>
+ <itemizedlist>
+ <listitem>
+ <formalpara id="form-Architecture_and_Design-form_value.generate_Method-attribute">
+ <title>attribute</title>
+ <para>
+ The name of the attribute to generate the new value for.
+ </para>
+
+ </formalpara>
+
+ </listitem>
+ <listitem>
+ <formalpara id="form-Architecture_and_Design-form_value.generate_Method-data">
+ <title>data</title>
+ <para>
+ An array with key =&gt; value pairs containing the attribute name (key) and attribute value (value) to use to generate the new value for the attribute supplied in <xref linkend="form-Architecture_and_Design-form_value.validate_Method-attribute" />.
+ </para>
+
+ </formalpara>
+ <para>
+ This parameter is required for certain attributes, such as <literal>cn</literal>, but not for other attributes, such as <literal>userPassword</literal>.
+ </para>
+
+ </listitem>
+ <listitem>
+ <formalpara id="form-Architecture_and_Design-form_value.generate_Method-user_type_id">
+ <title>user_type_id</title>
+ <para>
+ An optional parameter to indicate to the API that the formation policy for users should be used.
+ </para>
+
+ </formalpara>
+ <para>
+ Supply an integer indicating the user type to use policies for that user type.
+ </para>
+ <para>
+ Supply a boolean True to use a policy for users, allowing the use of policies not specific to any user type.
+ </para>
+ <para>
+ Supply a boolean False to reject the use of any user policy.
+ </para>
+ <para>
+ The default for this parameter is False.
+ </para>
+
+ </listitem>
+ <listitem>
+ <formalpara id="form-Architecture_and_Design-form_value.generate_Method-group_type_id">
+ <title>group_type_id</title>
+ <para>
+ An optional parameter to indicate to the API that the formation policy for groups should be used.
+ </para>
+
+ </formalpara>
+ <para>
+ Supply an integer indicating the group type to use policies for that group type.
+ </para>
+ <para>
+ Supply a boolean True to use a policy for groups, allowing the use of policies not specific to any group type.
+ </para>
+ <para>
+ Supply a boolean False to reject the use of any group policy.
+ </para>
+ <para>
+ The default for this parameter is False.
+ </para>
+
+ </listitem>
+
+ </itemizedlist>
+
+ </para>
+ <important>
+ <para>
+ The API call does not allow both the <literal>user_type_id</literal> and <literal>group_type_id</literal> to;
+ </para>
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ both be boolean False,
+ </para>
+
+ </listitem>
+ <listitem>
+ <para>
+ both be boolean True,
+ </para>
+
+ </listitem>
+ <listitem>
+ <para>
+ both be an integer reference to each respective type ID.
+ </para>
+
+ </listitem>
+
+ </itemizedlist>
+
+ </para>
+
+ </important>
+ <formalpara id="form-Architecture_and_Design-form_value.generate_Method-HTTP_Methods">
+ <title>HTTP Method(s)</title>
+ <para>
+ POST, with an <literal>X-Session-Token</literal> HTTP/1.1 header.
+ </para>
+
+ </formalpara>
+ <formalpara id="form-Architecture_and_Design-form_value.generate_Method-Example_Client_Implementation">
+ <title>Example Client Implementation</title>
+ <para>
+ A client could choose to have a user's password generated by the API.
+ </para>
+
+ </formalpara>
+ <example id="exam-Architecture_and_Design-form_value.generate_Method-Generate_the_User_Password_with_the_API">
+ <title>Generate the User Password with the API</title>
+ <para>
+
+<screen language="Python">result = request('POST', 'form_value.generate_userpassword')
+print result['userpassword']
+</screen>
+
+ </para>
+
+ </example>
+ <formalpara id="form-Architecture_and_Design-form_value.generate_Method-Response">
+ <title>Response</title>
+ <para>
+
+<screen language="Python">{
+ "status": "OK",
+ "result": {
+ "password": "3SQLAdcW_KZL5vO"
+ }
+ }</screen>
+
+ </para>
+
+ </formalpara>
+
+ </section>
+
+ <section id="sect-Architecture_and_Design-The_form_value_Service-form_value.list_options_Method">
+ <title><literal>form_value.list_options</literal> Method</title>
+ <para>
+ para
+ </para>
+ <formalpara id="form-Architecture_and_Design-form_value.list_options_Method-Parameters">
+ <title>Parameters</title>
+ <para>
+ params
+ </para>
+
+ </formalpara>
+ <formalpara id="form-Architecture_and_Design-form_value.list_options_Method-HTTP_Methods">
+ <title>HTTP Method(s)</title>
+ <para>
+ POST, with an <literal>X-Session-Token</literal> HTTP/1.1 header.
+ </para>
+
+ </formalpara>
+ <formalpara id="form-Architecture_and_Design-form_value.list_options_Method-Example_Client_Implementation">
+ <title>Example Client Implementation</title>
+ <para>
+ para
+ </para>
+
+ </formalpara>
+ <formalpara id="form-Architecture_and_Design-form_value.list_options_Method-Response">
+ <title>Response</title>
+ <para>
+ para
+ </para>
+
+ </formalpara>
+
+ </section>
+
+ <section id="sect-Architecture_and_Design-The_form_value_Service-form_value.validate_Method">
+ <title><literal>form_value.validate</literal> Method</title>
+ <para>
+ para
+ </para>
+ <para>
+ This API call allows access to routines that generate attribute values. It accepts data containing the names and values of other attribute values as input, which can be used to generate the new attribute value requested.
+ </para>
+ <formalpara id="form-Architecture_and_Design-form_value.validate_Method-Parameters">
+ <title>Parameters</title>
+ <para>
+ The <literal>form_value.validate</literal> API call accepts the following parameters:
+ </para>
+
+ </formalpara>
+ <para>
+ <itemizedlist>
+ <listitem>
+ <formalpara id="form-Architecture_and_Design-form_value.validate_Method-attribute">
+ <title>attribute</title>
+ <para>
+ The name of the attribute to validate the value for.
+ </para>
+
+ </formalpara>
+
+ </listitem>
+ <listitem>
+ <formalpara id="form-Architecture_and_Design-form_value.validate_Method-data">
+ <title>data</title>
+ <para>
+ The data to validate.
+ </para>
+
+ </formalpara>
+
+ </listitem>
+ <listitem>
+ <formalpara id="form-Architecture_and_Design-form_value.validate_Method-user_type_id">
+ <title>user_type_id</title>
+ <para>
+ An optional parameter to indicate to the API that the validation policy for users should be used.
+ </para>
+
+ </formalpara>
+ <para>
+ Supply an integer indicating the user type to use policies for that user type.
+ </para>
+ <para>
+ Supply a boolean True to use a policy for users, allowing the use of policies not specific to any user type.
+ </para>
+ <para>
+ Supply a boolean False to reject the use of any user policy.
+ </para>
+ <para>
+ The default for this parameter is False.
+ </para>
+
+ </listitem>
+ <listitem>
+ <formalpara id="form-Architecture_and_Design-form_value.validate_Method-group_type_id">
+ <title>group_type_id</title>
+ <para>
+ An optional parameter to indicate to the API that the validation policy for groups should be used.
+ </para>
+
+ </formalpara>
+ <para>
+ Supply an integer indicating the group type to use policies for that group type.
+ </para>
+ <para>
+ Supply a boolean True to use a policy for groups, allowing the use of policies not specific to any group type.
+ </para>
+ <para>
+ Supply a boolean False to reject the use of any group policy.
+ </para>
+ <para>
+ The default for this parameter is False.
+ </para>
+
+ </listitem>
+
+ </itemizedlist>
+
+ </para>
+ <important>
+ <para>
+ The API call does not allow both the <literal>user_type_id</literal> and <literal>group_type_id</literal> to;
+ </para>
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ both be boolean False,
+ </para>
+
+ </listitem>
+ <listitem>
+ <para>
+ both be boolean True,
+ </para>
+
+ </listitem>
+ <listitem>
+ <para>
+ both be an integer reference to each respective type ID.
+ </para>
+
+ </listitem>
+
+ </itemizedlist>
+
+ </para>
+
+ </important>
+ <formalpara id="form-Architecture_and_Design-form_value.validate_Method-HTTP_Methods">
+ <title>HTTP Method(s)</title>
+ <para>
+ POST, with an <literal>X-Session-Token</literal> HTTP/1.1 header.
+ </para>
+
+ </formalpara>
+ <formalpara id="form-Architecture_and_Design-form_value.validate_Method-Example_Client_Implementation">
+ <title>Example Client Implementation</title>
+ <para>
+ para
+ </para>
+
+ </formalpara>
+ <formalpara id="form-Architecture_and_Design-form_value.validate_Method-Response">
+ <title>Response</title>
+ <para>
+ para
+ </para>
+
+ </formalpara>
+
+ </section>
+
+
+ </section>
+
<section id="sect-Architecture_and_Design-Web_Administration_Panel_API-The_group_Service">
<title>The <literal>group</literal> Service</title>
<section id="sect-Architecture_and_Design-The_group_Service-group.info_Method">
@@ -1720,6 +2133,293 @@ if response_data.has_key('result'):
</section>
+ <section id="sect-Architecture_and_Design-The_user_types_Service-Storage_Format_for_user_type">
+ <title>Storage Format for <literal>user_type</literal></title>
+ <para>
+ The user types are backed by database entries, containing the following attributes per user type:
+ </para>
+ <para>
+ <itemizedlist>
+ <listitem>
+ <formalpara id="form-Architecture_and_Design-Storage_Format_for_user_type-_id_">
+ <title> <literal>id</literal> </title>
+ <para>
+ Of type INT, this attribute is automatically assigned by the database backend, unless specifically supplied on insert.
+ </para>
+
+ </formalpara>
+
+ </listitem>
+ <listitem>
+ <formalpara id="form-Architecture_and_Design-Storage_Format_for_user_type-_key_">
+ <title> <literal>key</literal> </title>
+ <para>
+ Of type VARCHAR(16), the <literal>key</literal> attribute is to hold a machine readable name.
+ </para>
+
+ </formalpara>
+
+ </listitem>
+ <listitem>
+ <formalpara id="form-Architecture_and_Design-Storage_Format_for_user_type-_name_">
+ <title> <literal>name</literal> </title>
+ <para>
+ Of type VARCHAR(128), the <literal>name</literal> attribute is to be the human-readable name for the user type.
+ </para>
+
+ </formalpara>
+
+ </listitem>
+ <listitem>
+ <formalpara id="form-Architecture_and_Design-Storage_Format_for_user_type-_description_">
+ <title> <literal>description</literal> </title>
+ <para>
+ Of type VARCHAR(256), the <literal>description</literal> attribute holds the description for the user type.
+ </para>
+
+ </formalpara>
+
+ </listitem>
+ <listitem>
+ <formalpara id="form-Architecture_and_Design-Storage_Format_for_user_type-_attributes_">
+ <title> <literal>attributes</literal> </title>
+ <para>
+ Of type TEXT, the <literal>attributes</literal> contains a serialized JSON object with the information needed for the API and client interface to build queries and forms for the user type.
+ </para>
+
+ </formalpara>
+
+ </listitem>
+
+ </itemizedlist>
+
+ </para>
+ <section id="sect-Architecture_and_Design-Storage_Format_for_user_type-_The_attributes_Attribute_Value_Format">
+ <title> The <literal>attributes</literal> Attribute Value Format</title>
+ <para>
+ The structure of the <literal>attributes</literal> attribute value is:
+ </para>
+
+<screen language="PHP/PHP">Array(
+ "&lt;form_field_type&gt;" =&gt; Array(
+ "&lt;form_field_name&gt;" =&gt; Array(
+ ['data' =&gt; Array(
+ "&lt;form_field_name&gt;"[,
+ "&lt;form_field_name&gt;"[,
+ "&lt;form_field_name&gt;"],]
+ ),]
+ ['type' =&gt; "text|select|multiselect|...",]
+ ['values' =&gt; Array(
+ "&lt;value1&gt;"[,
+ "&lt;value1&gt;"[,
+ "&lt;value1&gt;"],]
+ ),]
+ )
+ )
+ )</screen>
+ <para>
+ The <literal>attributes</literal> attribute to a <literal>user_type</literal> entry holds an array with any or all of the following <emphasis>&lt;form_field_type&gt;</emphasis> keys:
+ </para>
+ <para>
+ <itemizedlist>
+ <listitem>
+ <formalpara id="form-Architecture_and_Design-_The_attributes_Attribute_Value_Format-auto_form_fields">
+ <title><literal>auto_form_fields</literal></title>
+ <para>
+ The <literal>auto_form_fields</literal> key holds an array of form fields that correspond with attributes for which the value is to be generated automatically, using an API call.
+ </para>
+
+ </formalpara>
+ <para>
+ The key name for each key =&gt; value pair indicates the form field name for which the value is to be generated automatically.
+ </para>
+ <para>
+ Each array key corresponds with a user attribute name, and it's value is an array containing the name of the form fields for which the value to submit as part of the API call.
+ </para>
+ <example id="exam-Architecture_and_Design-_The_attributes_Attribute_Value_Format-A_Users_displayname">
+ <title>A User's <literal>displayname</literal></title>
+ <para>
+ Provided the user type's <literal>auto_form_fields</literal> contains an array key of <literal>displayname</literal>, the array value for this key could look as follows:
+ </para>
+ <para>
+
+<screen language="PHP/PHP">Array(
+ 'auto_form_fields' =&gt; Array(
+ 'displayname' =&gt; Array(
+ 'data' =&gt; Array(
+ 'givenname',
+ 'sn'
+ ),
+ ),
+ (...)
+ ),
+ (...)
+ );</screen>
+
+ </para>
+ <para>
+ This indicates to the client that a form field named 'displayname' is to be populated with the information contained within the form fields named 'givenname' and 'sn'.
+ </para>
+ <para>
+ If the client is capable of doing so, it should also update the form field named 'displayname' after the values for any of the form fields named 'givenname' or 'sn' have been changed.
+ </para>
+
+ </example>
+ <para>
+ With a JSON object payload containing the values of the form fields for which the names are contained within the 'data' key, if any, the client should submit a POST request on change of these form fields, and will be returned the new value for the automatically generated form field.
+ </para>
+
+ </listitem>
+ <listitem>
+ <formalpara id="form-Architecture_and_Design-_The_attributes_Attribute_Value_Format-form_fields">
+ <title><literal>form_fields</literal></title>
+ <para>
+ The <literal>form_fields</literal> key holds an array of form fields that require user input.
+ </para>
+
+ </formalpara>
+ <para>
+ The key name for each key =&gt; value pair indicates the form field name for which the value is to be supplied by the user.
+ </para>
+ <para>
+ Because some attributes can be multi-valued, or have a limited list of options, each defined form field in <literal>form_fields</literal> can hold an array with additional key =&gt; value pairs illustrating the type of form field that should be used, and what format to expect the result value in.
+ </para>
+ <para>
+ <itemizedlist id="item-Architecture_and_Design-_The_attributes_Attribute_Value_Format-Additional_Information_in_form_fields">
+ <title>Additional Information in <literal>form_fields</literal></title>
+ <listitem>
+ <formalpara id="form-Architecture_and_Design-Additional_Information_in_form_fields-maxlength">
+ <title><literal>maxlength</literal></title>
+ <para>
+ For a form field of type <xref linkend="form-Architecture_and_Design-Additional_Information_in_form_fields-text" /> or type <xref linkend="form-Architecture_and_Design-Additional_Information_in_form_fields-list" />, this value holds the maximum length for a given item.
+ </para>
+
+ </formalpara>
+
+ </listitem>
+ <listitem>
+ <formalpara id="form-Architecture_and_Design-Additional_Information_in_form_fields-type">
+ <title><literal>type</literal></title>
+ <para>
+ The <literal>type</literal> is to indicate the type of form field. Options include;
+ </para>
+
+ </formalpara>
+ <para>
+ <itemizedlist>
+ <listitem>
+ <formalpara id="form-Architecture_and_Design-Additional_Information_in_form_fields-text">
+ <title><literal>text</literal></title>
+ <para>
+ This is a regular input field of type text.
+ </para>
+
+ </formalpara>
+ <para>
+ This is the default.
+ </para>
+ <para>
+ Additional parameters for a text form field include <xref linkend="form-Architecture_and_Design-Additional_Information_in_form_fields-maxlength" />.
+ </para>
+
+ </listitem>
+ <listitem>
+ <formalpara id="form-Architecture_and_Design-Additional_Information_in_form_fields-list">
+ <title><literal>list</literal></title>
+ <para>
+ A form field of type <literal>list</literal> is expecting a list of text input values.
+ </para>
+
+ </formalpara>
+ <para>
+ A client web interface could choose to display a textarea with the instructions to supply one item per line, or more advanced (better) equivalents, such as an add/delete widget.
+ </para>
+ <para>
+ A client command-line interface could choose to prompt for input values until an empty value is supplied.
+ </para>
+ <para>
+ Additional parameters for a list form field include <xref linkend="form-Architecture_and_Design-Additional_Information_in_form_fields-maxlength" />, which holds the maximum length of each text value in the list.
+ </para>
+
+ </listitem>
+ <listitem>
+ <formalpara id="form-Architecture_and_Design-Additional_Information_in_form_fields-multiselect">
+ <title><literal>multiselect</literal></title>
+ <para>
+ This form field is a select list, where multiple options may be selected (as opposed to a <xref linkend="form-Architecture_and_Design-Additional_Information_in_form_fields-select" /> list, where only one option may be selected).
+ </para>
+
+ </formalpara>
+ <para>
+ A client interface MUST consult the <literal>form_value.list_options</literal> API call for options, described in <xref linkend="sect-Architecture_and_Design-The_form_value_Service-form_value.list_options_Method" />.
+ </para>
+
+ </listitem>
+ <listitem>
+ <formalpara id="form-Architecture_and_Design-Additional_Information_in_form_fields-select">
+ <title><literal>select</literal></title>
+ <para>
+ This form field is a selection list, of which one option may be selected.
+ </para>
+
+ </formalpara>
+ <para>
+ A client interface MUST consult the <literal>form_value.list_options</literal> API call for options, described in <xref linkend="sect-Architecture_and_Design-The_form_value_Service-form_value.list_options_Method" />.
+ </para>
+
+ </listitem>
+
+ </itemizedlist>
+
+ </para>
+
+ </listitem>
+ <listitem>
+ <formalpara id="form-Architecture_and_Design-Additional_Information_in_form_fields-value_source">
+ <title><literal>value_source</literal></title>
+ <para>
+ para
+ </para>
+
+ </formalpara>
+
+ </listitem>
+ <listitem>
+ <formalpara id="form-Architecture_and_Design-Additional_Information_in_form_fields-values">
+ <title><literal>values</literal></title>
+ <para>
+ para
+ </para>
+
+ </formalpara>
+
+ </listitem>
+
+ </itemizedlist>
+
+ </para>
+
+ </listitem>
+ <listitem>
+ <formalpara id="form-Architecture_and_Design-_The_attributes_Attribute_Value_Format-fields">
+ <title><literal>fields</literal></title>
+ <para>
+ The <literal>fields</literal> key holds an array of form fields and values for said form fields, that are static. One example of such form fields is <literal>objectclass</literal>.
+ </para>
+
+ </formalpara>
+
+ </listitem>
+
+ </itemizedlist>
+
+ </para>
+
+ </section>
+
+
+ </section>
+
</section>