eXo Platform 3.0

- Prev
- Next

## Chapter 3. Configuration

## Components

### Components of eXo Knowledge

Key | Data type | Description
--- | --- | ---
org.exoplatform.ks.common. jcr.KSDataLocation | org.exoplatform.ks.common. jcr.KSDataLocation | To hold the JCR storage location for KS data.
org.exoplatform.services. scheduler.JobSchedulerService | org.exoplatform.services.scheduler. impl.JobSchedulerServiceImpl | To define a job to execute a given number of times during a given period. It is used to monitor jobs automatically and continously, to schedule event-driven jobs and reports, and to control performance.

- Init-params of org.exoplatform.ks.common.jcr.KSDataLocation:

Name | Possible value | Default value
--- | --- | ---
repository | `string` | `repository`
workspace | `string` | `knowledge`

### Components of Forum

Key | Data type | Description
--- | --- | ---
org.exoplatform.ks.bbcode. api.BBCodeService | org.exoplatform.ks.bbcode. core.BBCodeServiceImpl | To manage CRUD operations on BBCodes.
org.exoplatform.forum. service.DataStorage | org.exoplatform.forum.service. impl.JCRDataStorage | To store data of Forum via the JCR system.
org.exoplatform.forum. service.ForumService | org.exoplatform.forum.service. impl.ForumServiceImpl | To include all public APIs to interact with the UI component and database.
org.exoplatform.forum.service. ForumStatisticsService | org.exoplatform.forum.service. impl.ForumStatisticsServiceImpl | To include all public APIs to interact with the database of Statistics system.

### Components of Answers

Key | Data type | Description
--- | --- | ---
org.exoplatform.faq. service.FAQService | org.exoplatform.faq.service. impl.FAQServiceImpl | To include all public APIs to interact with the UI component and database.
org.exoplatform.faq. service.DataStorage | org.exoplatform.faq.service. impl.JCRDataStorage | To store data of FAQ via the JCR system.

### Components of Polls

Key | Data type | Description
--- | --- | ---
org.exoplatform.poll. service.DataStorage | org.exoplatform.poll.service. impl.JCRDataStorage | To include all public APIs to interact with the UI component and database.
org.exoplatform.poll. service.PollService | org.exoplatform.poll.service. impl.PollServiceImpl | To store data of Polls via the JCR system.

## External-component-plugin

### Init data configuration

#### Init data

Application | Component | Description
--- | --- | ---
Forum | `KSDataLocation, ForumServiceImpl` | To initialize default data of the Forum portlet.
Answers | `KSDataLocation, AnswerServiceImpl` | To initialize default data of the Answers portlet.
Polls | `KSDataLocation, PollServiceImpl` | To initialize default data of the Polls portlet.

The Init data plug-in is used to define the default data in the .xml file. It includes nodes (node of jcr).

When the component org.exoplatform.services.jcr.config.RepositoryServiceConfiguration is initialized, the component org.exoplatform.services.jcr.impl.config.RepositoryServiceConfigurationPlugin will be get and the function addConfig is called. Then, the /ks-extension/jcr/repository-configuration.xml file is loaded and the component org.exoplatform.ks.common.jcr.KSDataLocation will be initialized. Next, the setLocation function is called, setting up the workspace and repository for KS. After that, the addPlugin function will be run, generating the DataLocation (some parent nodes) for KS.

#### Configuration

##### Initialize the conf-part for loading repository-configuration.xml

When the server starts, the jcr-configuration.xml file is initialized. The component-plugin named addConfig will be referred to org.exoplatform.services.jcr.impl.config.RepositoryServiceConfigurationPlugin to load the war:/ks-extension/jcr/repository-configuration.xml_ file.

     <component-plugin>
          <!-- The name of the plugin -->
          <name>Sample RepositoryServiceConfiguration Plugin</name>
          <!-- The name of the method to call on the RepositoryServiceConfiguration
               in order to add the RepositoryServiceConfigurations -->
          <set-method>addConfig</set-method>
          <!-- The full qualified name of the RepositoryServiceConfigurationPlugin -->
          <type>org.exoplatform.services.jcr.impl.config.RepositoryServiceConfigurationPlugin</type>
          <init-params>
            <value-param>
              <name>conf-path</name>
              <description>JCR configuration file</description>
              <value>war:/ks-extension/jcr/repository-configuration.xml</value>
            </value-param>
          </init-params>
     </component-plugin>

- In which:

Name | Set-method | Type | Description
RepositoryService ConfigurationPlugin | addConfig | org.exoplatform.services. jcr.impl.config.Repository ServiceConfigurationPlugin | To read configuration of JCR data to initialize data

- Init-params

Name | Possible value | Default value | Description
conf-path | `string` | war:/ks-extension/jcr/ repository- configuration.xml | The path to the repository-configuration.xml file

##### Initialize workspace name and repository name in storage-configuration.xml

In details:

Once the war:/ks-extension/jcr/repository-configuration.xml_ file has been initialized, the server will load the storage-configuration.xml file, and the setLocation function in the org.exoplatform.ks.common.conf.DataLocationPlugin component will run.

      <external-component-plugins>
        <target-component>org.exoplatform.ks.common.jcr.KSDataLocation</target-component>
        <component-plugin>
          <name>ks.data.location</name>
          <set-method>setLocation</set-method>
          <type>org.exoplatform.ks.common.conf.DataLocationPlugin</type>
          <init-params>
            <value-param>
              <name>repository</name>
              <description>JCR repository for KS data</description>
              <value>repository</value>
            </value-param>
            <value-param>
              <name>workspace</name>
              <description>workspace for KS data</description>
              <value>knowledge</value>
            </value-param>
          </init-params>
        </component-plugin>
      </external-component-plugins>

In which,

Value-param | Possible value | Default value | Description
--- | --- | --- | ---
repository | `string` | `repository` | The JCR repository for KS data.
workspace | `string` | `knowledge` | The workspace for KS data.

##### Initialize data

Once the workspace name and repository name are registered, the server will load org.exoplatform.services.jcr.ext.hierarchy.NodeHierarchyCreator and the addPaths function in org.exoplatform.services.jcr.ext.hierarchy.impl.AddPathPlugin is called. Then, the data location will be built.

    <component-plugin>
      <name>addPaths</name>
      <set-method>addPlugin</set-method>
      <type>org.exoplatform.services.jcr.ext.hierarchy.impl.AddPathPlugin</type>
        <init-params>
          <object-param>
            <name>ks.storage</name>
            <description>ks data storage tree</description>
            <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig">
              <field name="repository"><string>repository</string></field>
              <field name="workspaces">
                <collection type="java.util.ArrayList">
                  <value><string>knowledge</string></value>
                </collection>
              </field>
              <field name="jcrPaths">
                <collection type="java.util.ArrayList">
                    <value>
                      <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$JcrPath">
                        <field name="alias"><string>eXoApplications</string></field>
                        <field name="path"><string>/exo:applications</string></field>
                        <field name="permissions">
                          <collection type="java.util.ArrayList">
                            <value>
                              <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$Permission">
                                  <field name="identity"><string>*:/platform/administrators</string></field>
                                  <field name="read"><string>true</string></field>
                                  <field name="addNode"><string>true</string></field>
                                  <field name="setProperty"><string>true</string></field>
                                  <field name="remove"><string>true</string></field>
                                </object>
                            </value>
                          </collection>
                        </field>
                      </object>
                    </value>

                    <value>
                      <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$JcrPath">
                        <field name="alias"><string>ksUserAvatar</string></field>
                        <field name="path"><string>/exo:applications/ksUserAvatar</string></field>
                        <field name="nodeType"><string>nt:unstructured</string></field>
                        <field name="permissions">
                          <collection type="java.util.ArrayList">
                            <value>
                              <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$Permission">
                                  <field name="identity"><string>*:/platform/administrators</string></field>
                                  <field name="read"><string>true</string></field>
                                  <field name="addNode"><string>true</string></field>
                                  <field name="setProperty"><string>true</string></field>
                                  <field name="remove"><string>true</string></field>
                                </object>
                            </value>
                          </collection>
                        </field>
                      </object>
                    </value>

                    <value>
                      <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$JcrPath">
                        <field name="alias"><string>ForumService</string></field>
                        <field name="path"><string>/exo:applications/ForumService</string></field>
                        <field name="nodeType"><string>exo:forumHome</string></field>
                        <field name="permissions">
                          <collection type="java.util.ArrayList">
                            <value>
                              <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$Permission">
                                  <field name="identity"><string>*:/platform/administrators</string></field>
                                  <field name="read"><string>true</string></field>
                                  <field name="addNode"><string>true</string></field>
                                  <field name="setProperty"><string>true</string></field>
                                  <field name="remove"><string>true</string></field>
                                </object>
                            </value>
                          </collection>
                        </field>
                      </object>
                    </value>

                    <value>
                      <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$JcrPath">
                        <field name="alias"><string>ForumSystem</string></field>
                       <field name="path"><string>/exo:applications/ForumService/ForumSystem</string></field>
                        <field name="nodeType"><string>exo:forumSystem</string></field>
                        <field name="permissions">
                          <collection type="java.util.ArrayList">
                            <value>
                              <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$Permission">
                                  <field name="identity"><string>*:/platform/administrators</string></field>
                                  <field name="read"><string>true</string></field>
                                  <field name="addNode"><string>true</string></field>
                                  <field name="setProperty"><string>true</string></field>
                                  <field name="remove"><string>true</string></field>
                                </object>
                            </value>
                          </collection>
                        </field>
                      </object>
                    </value>

                    <value>
                      <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$JcrPath">
                        <field name="alias"><string>UserProfileHome</string></field>
                        <field name="path"><string>/exo:applications/ForumService/ForumSystem/UserProfileHome</string></field>
                        <field name="nodeType"><string>exo:userProfileHome</string></field>
                        <field name="permissions">
                          <collection type="java.util.ArrayList">
                            <value>
                              <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$Permission">
                                  <field name="identity"><string>*:/platform/administrators</string></field>
                                  <field name="read"><string>true</string></field>
                                  <field name="addNode"><string>true</string></field>
                                  <field name="setProperty"><string>true</string></field>
                                  <field name="remove"><string>true</string></field>
                                </object>
                            </value>
                          </collection>
                        </field>
                      </object>
                    </value>

                    <value>
                      <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$JcrPath">
                        <field name="alias"><string>StatisticHome</string></field>
                        <field name="path"><string>/exo:applications/ForumService/ForumSystem/StatisticHome</string></field>
                        <field name="nodeType"><string>exo:statisticHome</string></field>
                        <field name="permissions">
                          <collection type="java.util.ArrayList">
                            <value>
                              <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$Permission">
                                  <field name="identity"><string>*:/platform/administrators</string></field>
                                  <field name="read"><string>true</string></field>
                                  <field name="addNode"><string>true</string></field>
                                  <field name="setProperty"><string>true</string></field>
                                  <field name="remove"><string>true</string></field>
                                </object>
                            </value>
                          </collection>
                        </field>
                      </object>
                    </value>

                     <value>
                      <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$JcrPath">
                        <field name="alias"><string>forumStatistic</string></field>
                        <field name="path"><string>/exo:applications/ForumService/ForumSystem/StatisticHome/forumStatistic</string></field>
                        <field name="nodeType"><string>exo:forumStatistic</string></field>
                        <field name="permissions">
                          <collection type="java.util.ArrayList">
                            <value>
                              <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$Permission">
                                  <field name="identity"><string>*:/platform/administrators</string></field>
                                  <field name="read"><string>true</string></field>
                                  <field name="addNode"><string>true</string></field>
                                  <field name="setProperty"><string>true</string></field>
                                  <field name="remove"><string>true</string></field>
                                </object>
                            </value>
                          </collection>
                        </field>
                      </object>
                    </value>

                    <value>
                      <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$JcrPath">
                        <field name="alias"><string>AdministrationHome</string></field>
                        <field name="path"><string>/exo:applications/ForumService/ForumSystem/AdministrationHome</string></field>
                        <field name="nodeType"><string>exo:administrationHome</string></field>
                        <field name="permissions">
                          <collection type="java.util.ArrayList">
                            <value>
                              <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$Permission">
                                  <field name="identity"><string>*:/platform/administrators</string></field>
                                  <field name="read"><string>true</string></field>
                                  <field name="addNode"><string>true</string></field>
                                  <field name="setProperty"><string>true</string></field>
                                  <field name="remove"><string>true</string></field>
                                </object>
                            </value>
                          </collection>
                        </field>
                      </object>
                    </value>

                    <value>
                      <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$JcrPath">
                        <field name="alias"><string>BanIPHome</string></field>
                       <field name="path"><string>/exo:applications/ForumService/ForumSystem/BanIPHome</string></field>
                        <field name="nodeType"><string>exo:banIPHome</string></field>
                        <field name="permissions">
                          <collection type="java.util.ArrayList">
                            <value>
                              <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$Permission">
                                  <field name="identity"><string>*:/platform/administrators</string></field>
                                  <field name="read"><string>true</string></field>
                                  <field name="addNode"><string>true</string></field>
                                  <field name="setProperty"><string>true</string></field>
                                  <field name="remove"><string>true</string></field>
                                </object>
                            </value>
                          </collection>
                        </field>
                      </object>
                    </value>

                    <value>
                      <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$JcrPath">
                        <field name="alias"><string>forumBanIP</string></field>
                        <field name="path"><string>/exo:applications/ForumService/ForumSystem/BanIPHome/forumBanIP</string></field>
                        <field name="nodeType"><string>exo:banIP</string></field>
                        <field name="permissions">
                          <collection type="java.util.ArrayList">
                            <value>
                              <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$Permission">
                                  <field name="identity"><string>*:/platform/administrators</string></field>
                                  <field name="read"><string>true</string></field>
                                  <field name="addNode"><string>true</string></field>
                                  <field name="setProperty"><string>true</string></field>
                                  <field name="remove"><string>true</string></field>
                                </object>
                            </value>
                          </collection>
                        </field>
                      </object>
                    </value>

                     <value>
                      <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$JcrPath">
                        <field name="alias"><string>ForumData</string></field>
                        <field name="path"><string>/exo:applications/ForumService/ForumData</string></field>
                        <field name="nodeType"><string>exo:forumData</string></field>
                        <field name="permissions">
                          <collection type="java.util.ArrayList">
                            <value>
                              <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$Permission">
                                  <field name="identity"><string>*:/platform/administrators</string></field>
                                  <field name="read"><string>true</string></field>
                                  <field name="addNode"><string>true</string></field>
                                  <field name="setProperty"><string>true</string></field>
                                  <field name="remove"><string>true</string></field>
                                </object>
                            </value>
                          </collection>
                        </field>
                      </object>
                    </value>

                    <value>
                      <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$JcrPath">
                        <field name="alias"><string>TopicTypeHome</string></field>
                        <field name="path"><string>/exo:applications/ForumService/ForumData/TopicTypeHome</string></field>
                        <field name="nodeType"><string>exo:topicTypeHome</string></field>
                        <field name="permissions">
                          <collection type="java.util.ArrayList">
                            <value>
                              <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$Permission">
                                  <field name="identity"><string>*:/platform/administrators</string></field>
                                  <field name="read"><string>true</string></field>
                                  <field name="addNode"><string>true</string></field>
                                  <field name="setProperty"><string>true</string></field>
                                  <field name="remove"><string>true</string></field>
                                </object>
                            </value>
                          </collection>
                        </field>
                      </object>
                    </value>

                    <value>
                      <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$JcrPath">
                        <field name="alias"><string>CategoryHome</string></field>
                        <field name="path"><string>/exo:applications/ForumService/ForumData/CategoryHome</string></field>
                        <field name="nodeType"><string>exo:categoryHome</string></field>
                        <field name="permissions">
                          <collection type="java.util.ArrayList">
                            <value>
                              <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$Permission">
                                  <field name="identity"><string>*:/platform/administrators</string></field>
                                  <field name="read"><string>true</string></field>
                                  <field name="addNode"><string>true</string></field>
                                  <field name="setProperty"><string>true</string></field>
                                  <field name="remove"><string>true</string></field>
                                </object>
                            </value>
                          </collection>
                        </field>
                      </object>
                    </value>

                    <value>
                      <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$JcrPath">
                        <field name="alias"><string>TagHome</string></field>
                        <field name="path"><string>/exo:applications/ForumService/ForumData/TagHome</string></field>
                        <field name="nodeType"><string>exo:tagHome</string></field>
                        <field name="permissions">
                          <collection type="java.util.ArrayList">
                            <value>
                              <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$Permission">
                                  <field name="identity"><string>*:/platform/administrators</string></field>
                                  <field name="read"><string>true</string></field>
                                  <field name="addNode"><string>true</string></field>
                                  <field name="setProperty"><string>true</string></field>
                                  <field name="remove"><string>true</string></field>
                                </object>
                            </value>
                          </collection>
                        </field>
                      </object>
                    </value>

                    <value>
                      <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$JcrPath">
                        <field name="alias"><string>forumBBCode</string></field>
                        <field name="path"><string>/exo:applications/ForumService/ForumData/forumBBCode</string></field>
                        <field name="nodeType"><string>exo:forumBBCodeHome</string></field>
                        <field name="permissions">
                          <collection type="java.util.ArrayList">
                            <value>
                              <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$Permission">
                                  <field name="identity"><string>*:/platform/administrators</string></field>
                                  <field name="read"><string>true</string></field>
                                  <field name="addNode"><string>true</string></field>
                                  <field name="setProperty"><string>true</string></field>
                                  <field name="remove"><string>true</string></field>
                                </object>
                            </value>
                          </collection>
                        </field>
                      </object>
                    </value>

                    <value>
                      <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$JcrPath">
                        <field name="alias"><string>faqApp</string></field>
                        <field name="path"><string>/exo:applications/faqApp</string></field>
                        <field name="nodeType"><string>exo:faqHome</string></field>
                        <field name="permissions">
                          <collection type="java.util.ArrayList">
                            <value>
                              <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$Permission">
                                  <field name="identity"><string>*:/platform/administrators</string></field>
                                  <field name="read"><string>true</string></field>
                                  <field name="addNode"><string>true</string></field>
                                  <field name="setProperty"><string>true</string></field>
                                  <field name="remove"><string>true</string></field>
                                </object>
                            </value>
                          </collection>
                        </field>
                      </object>
                    </value>

                     <value>
                      <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$JcrPath">
                        <field name="alias"><string>settingHome</string></field>
                       <field name="path"><string>/exo:applications/faqApp/settingHome</string></field>
                        <field name="nodeType"><string>exo:faqSettingHome</string></field>
                        <field name="permissions">
                          <collection type="java.util.ArrayList">
                            <value>
                              <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$Permission">
                                  <field name="identity"><string>*:/platform/administrators</string></field>
                                  <field name="read"><string>true</string></field>
                                  <field name="addNode"><string>true</string></field>
                                  <field name="setProperty"><string>true</string></field>
                                  <field name="remove"><string>true</string></field>
                                </object>
                            </value>
                          </collection>
                        </field>
                      </object>
                    </value>
                     <value>
                      <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$JcrPath">
                        <field name="alias"><string>userSettingHome</string></field>
                       <field name="path"><string>/exo:applications/faqApp/settingHome/userSettingHome</string></field>
                        <field name="nodeType"><string>exo:faqUserSettingHome</string></field>
                        <field name="permissions">
                          <collection type="java.util.ArrayList">
                            <value>
                              <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$Permission">
                                  <field name="identity"><string>*:/platform/administrators</string></field>
                                  <field name="read"><string>true</string></field>
                                  <field name="addNode"><string>true</string></field>
                                  <field name="setProperty"><string>true</string></field>
                                  <field name="remove"><string>true</string></field>
                                </object>
                            </value>
                          </collection>
                        </field>
                      </object>
                    </value>

                       <value>
                      <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$JcrPath">
                        <field name="alias"><string>categories</string></field>
                        <field name="path"><string>/exo:applications/faqApp/categories</string></field>
                        <field name="nodeType"><string>exo:faqCategory</string></field>
                        <field name="mixinTypes">
                          <collection type="java.util.ArrayList">
                            <value><string>mix:faqSubCategory</string></value>
                          </collection>
                        </field>
                        <field name="permissions">
                          <collection type="java.util.ArrayList">
                            <value>
                              <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$Permission">
                                  <field name="identity"><string>*:/platform/administrators</string></field>
                                  <field name="read"><string>true</string></field>
                                  <field name="addNode"><string>true</string></field>
                                  <field name="setProperty"><string>true</string></field>
                                  <field name="remove"><string>true</string></field>
                                </object>
                            </value>
                          </collection>
                        </field>
                      </object>
                    </value>

                    <value>
                      <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$JcrPath">
                        <field name="alias"><string>templateHome</string></field>
                        <field name="path"><string>/exo:applications/faqApp/templateHome</string></field>
                        <field name="nodeType"><string>exo:templateHome</string></field>
                        <field name="permissions">
                          <collection type="java.util.ArrayList">
                            <value>
                              <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$Permission">
                                  <field name="identity"><string>*:/platform/administrators</string></field>
                                  <field name="read"><string>true</string></field>
                                  <field name="addNode"><string>true</string></field>
                                  <field name="setProperty"><string>true</string></field>
                                  <field name="remove"><string>true</string></field>
                                </object>
                            </value>
                          </collection>
                        </field>
                      </object>
                    </value>

                    <value>
                      <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$JcrPath">
                        <field name="alias"><string>eXoPolls</string></field>
                        <field name="path"><string>/exo:applications/eXoPolls</string></field>
                        <field name="nodeType"><string>nt:unstructured</string></field>
                        <field name="permissions">
                          <collection type="java.util.ArrayList">
                            <value>
                              <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$Permission">
                                  <field name="identity"><string>*:/platform/administrators</string></field>
                                  <field name="read"><string>true</string></field>
                                  <field name="addNode"><string>true</string></field>
                                  <field name="setProperty"><string>true</string></field>
                                  <field name="remove"><string>true</string></field>
                                </object>
                            </value>
                          </collection>
                        </field>
                      </object>
                    </value>

                    <value>
                      <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$JcrPath">
                        <field name="alias"><string>groupsPath</string></field>
                        <field name="path"><string>/Groups</string></field>
                        <field name="permissions">
                          <collection type="java.util.ArrayList">
                            <value>
                              <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$Permission">
                                <field name="identity"><string>*:/platform/administrators</string></field>
                                <field name="read"><string>true</string></field>
                                <field name="addNode"><string>true</string></field>
                                <field name="setProperty"><string>true</string></field>
                                <field name="remove"><string>true</string></field>
                              </object>
                            </value>
                            <value>
                              <object type="org.exoplatform.services.jcr.ext.hierarchy.impl.HierarchyConfig$Permission">
                                <field name="identity"><string>any</string></field>
                                <field name="read"><string>true</string></field>
                                <field name="addNode"><string>false</string></field>
                                <field name="setProperty"><string>true</string></field>
                                <field name="remove"><string>false</string></field>
                              </object>
                            </value>
                          </collection>
                        </field>
                      </object>
                    </value>

                  </collection>
                </field>
              </object>
            </object-param>
          </init-params>
        </component-plugin>

### Roles Configuration

#### Overview

The roles plug-in component defines roles in eXo Platform 3 Knowledge Forum. This convenient application defines access to a set of functions within the application. Currently, it only defines the person who has the administrator role. Administrators can get access to administration functions. At runtime, the application gets data from the roles plug-in to decide whether the logged user has the administrative role or not.

#### Configuration

The plug-in is configured in the roles-configuration.xml file.

When the user signs in, his or her username, group and membership will be compared with the user roles defined in the .xml file that is provided by the roles plug-in component.

In particular, at runtime of ForumService, the roles plug-in component is called. The role plug-in is configured in the roles-configuration.xml file. The plug-in component named add.role.rules.plugin will be referred to org.exoplatform.ks.common.conf.RoleRulesPlugin to create users for Forum corresponding to users who exist in the organization database. In addition, the list of users who have administration roles are also defined.

     <component-plugin>
          <name>add.role.rules.plugin</name>
          <set-method>addRolePlugin</set-method>
          <type>org.exoplatform.ks.common.conf.RoleRulesPlugin</type>
          <description>add role rules</description>
          <init-params>
            <value-param>
              <name>role</name>
              <description>name of the role</description>
              <value>ADMIN</value>
            </value-param>
            <values-param>
              <name>rules</name>
              <description>rules of the role</description>
              <value>root</value>
              <!--value>admin</value -->
              <!--value>member:/demo</value-->
              <!--value>/forums/admin</value-->
              <!--value>*:/forum/admin</value-->
              <!--value>/platform/administrators</value-->
              <!--value>manager:/platform/users</value-->
              <!--value>*:/somegroup/somesubgroup</value-->
              <!--value>manager:/somegroup/someothergroup</value-->
            </values-param>
          </init-params>
     </component-plugin>

In which:

Name | Set-method | Type | Description
--- | --- | --- | ---
add.role.rules.plugin | addRolePlugin | org.exoplatform.ks. common.conf. RoleRulesPlugin | To add role rules.

- Init-params:

Name | Possible value | Default value | Description
--- | --- | --- | ---
role | `string` | `ADMIN` | The name of role
rules | `string` | `root` | The rules of role

- When the role-configuration.xml file is executed, the administration role (with `ADMIN` value) will be checked and assigned to a matrix of users/groups/memberships defined inside "value" tags as below:

    <value>...</value>

For example:

    ...
                    <value>root</value>
                    <value>john</value>
                    <value>/platform/administrators</value>
    	        <value>member:/VIP</value>
    		<value>validator:/VIP</value>
    ...

In the example above, the default administrators of Forum include root, john, users in /platform/administrators group and users who have member/validator memberships in the VIP group.

When root, john or any users who belong to the /platform/administrators group or users who have member/validator memberships in the VIP group sign in the Forum, he or she will be identified as the default administrator of Forum.

To add or remove the default administrator of the Forum, simply edit the roles-configuration.xml file, add or remove the relevant "value" tags.

    ...
                    <values-param>
                     ...
                    <value>...</value>
                     ...
                    </values-param>
    ...

The default administrators of the Forum can only change their roles by editing in the roles-configuration.xml file.

At runtime, modifications in the roles-configuration.xml file will be read and database will be updated. Normal users of the Forum and default administration will be created correspondingly.

### ProfileProvider Configuration

#### Overview

Forum and FAQ applications are to show some information about posters. The way we retrieve that information is pluggable through the ContactProvider component.

For public internet websites, users can provide personal information, such as personal email address and location. To enable, simply override the ContactProvider component in your configuration.

#### Configuration

Configure the profile-configuration.xml file as shown below:

    <component>
    	<key>org.exoplatform.ks.common.user.ContactProvider</key>
    	<type>org.exoplatform.ks.common.user.DefaultContactProvider</type>
    </component>

#### Use ContactProvider

When you start the Tomcat, the DefaultContactProvider class will be initialized and the OrganizationService component is set within the DefaultContactProvider component.

The DefaultContactProvider class enables you to get user information via the OrganizationService component.

    public CommonContact getCommonContact(String userId) {
    	CommonContact contact = new CommonContact();
    	try {
    		User user = orgService.getUserHandler().findUserByName(userId);
    		UserProfile profile = orgService.getUserProfileHandler().findUserProfileByName(userId);
    		contact.setEmailAddress(user.getEmail());
    		contact.setFirstName(user.getFirstName());
    		contact.setLastName(user.getLastName());
    		if(profile.getUserInfoMap() != null) {
    			contact.setAvatarUrl(profile.getAttribute("user.other-info.avatar.url"));
    			contact.setBirthday(profile.getAttribute("user.bdate"));
    			contact.setCity(profile.getAttribute("user.home-info.postal.city"));
    			contact.setCountry(profile.getAttribute("user.home-info.postal.country"));
    			contact.setGender(profile.getAttribute("user.gender"));
    			contact.setJob(profile.getAttribute("user.jobtitle"));
    			contact.setMobile(profile.getAttribute("user.home-info.telecom.mobile.number"));
    			contact.setPhone(profile.getAttribute("user.business-info.telecom.telephone.number"));
    			contact.setWebSite(profile.getAttribute("user.home-info.online.uri"));
    		}
    	} catch (Exception e) {
    		log.error("Could not retrieve forum user profile for " + userId + ": " ,e);
    	}
    	return contact;
    }

- The information which is get by the user includes:

Name | Type | Description
--- | --- | ---
email | `String` | Email of user.
firstName | `String` | First name of user.
lastName | `String` | Last name of user.

- The information which is get via UserProfile includes:

Attribute | Type | Description
--- | --- | ---
user.other-info.avatar.url | `String` | The path containing the user's avatar.
user.bdate | `String` | The user's birthday
user.home-info.postal.city | `String` | The home city of user.
user.home-info.postal.country | `String` | The home country of user.
user.gender | `String` | The user's gender.
user.jobtitle | `String` | The user's job.
user.home-info.telecom. mobile.number | `String` | The home phone number of user.
user.business-info.telecom. telephone.number | `String` | The mobile number of user.
user.home-info.online.uri | `String` | The individual websites of user.

- You can get the ContactProvider as follows:

    public CommonContact getPersonalContact(String userId) throws Exception {
    	try {
    		if(userId.indexOf(Utils.DELETED) > 0) return new CommonContact();
    		ContactProvider provider = (ContactProvider) PortalContainer.getComponent(ContactProvider.class) ;
    		return provider.getCommonContact(userId);
    	}catch (Exception e) {
    		return new CommonContact();
    	}
    }

### Forum Configuration

#### BBCode Configuration

##### Overview

The BBCode plug-in component defines default BBCode data in the .xml file, including BBCode tags, for example, I, B, U, SIZE, COLOR.

When the BBCode Service runs, it will get values returned from the BBCode plug-in component to initialize default BBCode data.

##### Configuration

###### Default BBCode data

The default BBCode data is configured in the bbcodes-configuration.xml file.

In particular, at runtime of BBCode Service, the BBCode plug-in component is called. Then, the bbcodes-configuration.xml file will be executed, and the component-plugin named registerBBCodePlugin will be referred to org.exoplatform.ks.bbcode.spi.BBCodePlugin to execute some objects that will generate default data.

    <component-plugin>
          <name>forum.default.bbcodes</name>
          <set-method>registerBBCodePlugin</set-method>
          <type>org.exoplatform.ks.bbcode.spi.BBCodePlugin</type>
          <description>default supported BBCodes</description>
          <init-params>
            <object-param>
              <name>I</name>
              <description>set text in italic</description>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>I</string>
                </field>
                <field name="replacement">
                  <string><![CDATA[<i>{param}</i>]]></string>
                </field>
                <field name="description">
                  <string>Set text in italic</string>
                </field>
                <field name="example">
                  <string>[I]This text is italic[/I]</string>
                </field>
                <field name="isOption">
                  <string>false</string>
                </field>
                <field name="isActive">
                  <string>true</string>
                </field>
              </object>
            </object-param>

            <object-param>
              <name>B</name>
              <description></description>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>B</string>
                </field>
                <field name="replacement">
                  <string><![CDATA[<b>{param}</b>]]></string>
                </field>
                <field name="description">
                  <string>Set text in bold</string>
                </field>
                <field name="example">
                  <string>[B]This text is bold[/B]</string>
                </field>
                <field name="isOption">
                  <string>false</string>
                </field>
                <field name="isActive">
                  <string>true</string>
                </field>
              </object>
            </object-param>

            <object-param>
              <name>U</name>
              <description></description>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>U</string>
                </field>
                <field name="replacement">
                  <string><![CDATA[<u>{param}</u>]]></string>
                </field>
                <field name="description">
                  <string>Set text in underline</string>
                </field>
                <field name="example">
                  <string>[U]This text is underline[/U]</string>
                </field>
                <field name="isOption">
                  <string>false</string>
                </field>
                <field name="isActive">
                  <string>true</string>
                </field>
              </object>
            </object-param>

            <object-param>
              <name>COLOR</name>
              <description></description>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>COLOR</string>
                </field>
                <field name="replacement">
                  <string><![CDATA[<font color="{option}">{param}</font>]]></string>
                </field>
                <field name="description">
                  <string>The [color=option] tag allows you to change the color of your text.</string>
                </field>
                <field name="example">
                  <string>[COLOR=blue]This text is blue[/COLOR]</string>
                </field>
                <field name="isOption">
                  <string>true</string>
                </field>
                <field name="isActive">
                  <string>true</string>
                </field>
              </object>
            </object-param>

            <object-param>
              <name>SIZE</name>
              <description></description>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>SIZE</string>
                </field>
                <field name="replacement">
                  <string><![CDATA[<font size="{option}">{param}</font>]]></string>
                </field>
                <field name="description">
                  <string>The [size=option] tag allows you to change the size of your text.</string>
                </field>
                <field name="example">
                  <string>[size=+2]this text is two sizes larger than normal[/size]</string>
                </field>
                <field name="isOption">
                  <string>true</string>
                </field>
                <field name="isActive">
                  <string>true</string>
                </field>
              </object>
            </object-param>

            <object-param>
              <name>FONT</name>
              <description></description>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>FONT</string>
                </field>
                <field name="replacement">
                  <string><![CDATA[<font face="{option}">{param}</font>]]></string>
                </field>
                <field name="description">
                  <string>The [font=option] tag allows you to change the font of your text.</string>
                </field>
                <field name="example">
                  <string>[font=courier]this text is in the courier font[/font]</string>
                </field>
                <field name="isOption">
                  <string>true</string>
                </field>
                <field name="isActive">
                  <string>true</string>
                </field>
              </object>
            </object-param>

            <object-param>
              <name>HIGHLIGHT</name>
              <description></description>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>HIGHLIGHT</string>
                </field>
                <field name="replacement">
                  <string><![CDATA[<span style="font-weight: bold; color: blue;">{param}</span>]]></string>
                </field>
                <field name="description">
                  <string>The [highlight] tag allows you to make highlight of your text.</string>
                </field>
                <field name="example">
                  <string>[highlight]this text is highlighted[/highlight]</string>
                </field>
                <field name="isOption">
                  <string>false</string>
                </field>
                <field name="isActive">
                  <string>true</string>
                </field>
              </object>
            </object-param>

            <object-param>
              <name>LEFT</name>
              <description></description>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>LEFT</string>
                </field>
                <field name="replacement">
                  <string><![CDATA[<div align="left">{param}</div>]]></string>
                </field>
                <field name="description">
                  <string>The [left] tag allows aligntment text to left. </string>
                </field>
                <field name="example">
                  <string>[LEFT]This text is left-aligned[/LEFT]</string>
                </field>
                <field name="isOption">
                  <string>false</string>
                </field>
                <field name="isActive">
                  <string>true</string>
                </field>
              </object>
            </object-param>

            <object-param>
              <name>RIGHT</name>
              <description></description>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>RIGHT</string>
                </field>
                <field name="replacement">
                  <string><![CDATA[<div align="right">{param}</div>]]></string>
                </field>
                <field name="description">
                  <string>The [right] tag allows aligntment text to right.</string>
                </field>
                <field name="example">
                  <string>[RIGHT]example[/RIGHT]</string>
                </field>
                <field name="isOption">
                  <string>[RIGHT]this text is right-aligned[/RIGHT]</string>
                </field>
                <field name="isActive">
                  <string>true</string>
                </field>
              </object>
            </object-param>

            <object-param>
              <name>CENTER</name>
              <description></description>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>CENTER</string>
                </field>
                <field name="replacement">
                  <string><![CDATA[<div align="center">{param}</div>]]></string>
                </field>
                <field name="description">
                  <string>The [center] allows aligntment text to center.</string>
                </field>
                <field name="example">
                  <string>[CENTER]this text is center-aligned[/CENTER]</string>
                </field>
                <field name="isOption">
                  <string>false</string>
                </field>
                <field name="isActive">
                  <string>true</string>
                </field>
              </object>
            </object-param>

            <object-param>
              <name>JUSTIFY</name>
              <description></description>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>JUSTIFY</string>
                </field>
                <field name="replacement">
                  <string><![CDATA[<div align="justify">{param}</div>]]></string>
                </field>
                <field name="description">
                  <string>The [justify] tag allows aligntment text to justify.</string>
                </field>
                <field name="example">
                  <string>[JUSTIFY]this text is justify-aligned[/JUSTIFY]</string>
                </field>
                <field name="isOption">
                  <string>false</string>
                </field>
                <field name="isActive">
                  <string>true</string>
                </field>
              </object>
            </object-param>

            <object-param>
              <name>EMAIL</name>
              <description></description>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>EMAIL</string>
                </field>
                <field name="replacement">
                  <string><![CDATA[<a href="mailto:{param}">{param}</a>]]></string>
                </field>
                <field name="description">
                  <string>The [email] tag allows you to link to an email address.</string>
                </field>
                <field name="example">
                  <string>[email]demo@example.com[/email]</string>
                </field>
                <field name="isOption">
                  <string>false</string>
                </field>
                <field name="isActive">
                  <string>true</string>
                </field>
              </object>
            </object-param>

            <object-param>
              <name>EMAIL-OPT</name>
              <description></description>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>EMAIL</string>
                </field>
                <field name="replacement">
                  <string><![CDATA[<a href="mailto:{option}">{param}</a>]]></string>
                </field>
                <field name="description">
                  <string>The [email=option] tag allows link to an email address and use an optional parameter to 'name' of this link.</string>
                </field>
                <field name="example">
                  <string>[email=demo@example.com]Click Here to Email me[/email] </string>
                </field>
                <field name="isOption">
                  <string>true</string>
                </field>
                <field name="isActive">
                  <string>true</string>
                </field>
              </object>
            </object-param>

            <object-param>
              <name>URL</name>
              <description></description>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>URL</string>
                </field>
                <field name="replacement">
                  <string><![CDATA[<a target='_blank' href="{param}">{param}</a>]]></string>
                </field>
                <field name="description">
                  <string>The [url] tag allows link to other websites and files.</string>
                </field>
                <field name="example">
                  <string>[URL]http://www.exoplatform.com[/URL]</string>
                </field>
                <field name="isOption">
                  <string>false</string>
                </field>
                <field name="isActive">
                  <string>true</string>
                </field>
              </object>
            </object-param>

            <object-param>
              <name>URL-OPT</name>
              <description></description>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>URL</string>
                </field>
                <field name="replacement">
                  <string><![CDATA[<a target='_blank' href="{option}">{param}</a>]]></string>
                </field>
                <field name="description">
                  <string>The [url=option] tag allows link to other websites and files and usean optional parameter to 'name' of thislink.</string>
                </field>
                <field name="example">
                  <string>[URL=http://www.exoplatform.com]Click goto exoplatform website.[/URL]</string>
                </field>
                <field name="isOption">
                  <string>true</string>
                </field>
                <field name="isActive">
                  <string>true</string>
                </field>
              </object>
            </object-param>

            <object-param>
              <name>GOTO</name>
              <description></description>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>GOTO</string>
                </field>
                <field name="replacement">
                  <string><![CDATA[<a href="{option}">{param}</a>]]></string>
                </field>
                <field name="description">
                  <string>Allows goto directly to link instead of open a new window or a new tab. </string>
                </field>
                <field name="example">
                  <string>[goto=http://www.exoplatform.com]Goto this link.[/goto]></string>
                </field>
                <field name="isOption">
                  <string>true</string>
                </field>
                <field name="isActive">
                  <string>true</string>
                </field>
              </object>
            </object-param>

            <object-param>
              <name>LIST</name>
              <description></description>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>LIST</string>
                </field>
                <field name="replacement">
                  <string>You can not define this bbcode tag. It is defined by the developer.</string>
                </field>
                <field name="description">
                  <string>The [list] tag allows create simple, each bullet is denoted by the [*] tag.</string>
                </field>
                <field name="example">
                  <string>[list][*]list item 1[*]list item 2[/list]</string>
                </field>
                <field name="isOption">
                  <string>false</string>
                </field>
                <field name="isActive">
                  <string>true</string>
                </field>
              </object>
            </object-param>

            <object-param>
              <name>LIST-OPT</name>
              <description></description>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>LIST</string>
                </field>
                <field name="replacement">
                  <string>You can not define this bbcode tag. It is defined by the developer.</string>
                </field>
                <field name="description">
                  <string>The [list=option] tag allows create bulleted lists specifying an option. Within the value portion, each bullet is denoted by the [*] tag.</string>
                </field>
                <field name="example">
                  <string>[list=1][*]list item 1[*]list item 2[/list]</string>
                </field>
                <field name="isOption">
                  <string>true</string>
                </field>
                <field name="isActive">
                  <string>true</string>
                </field>
              </object>
            </object-param>

            <object-param>
              <name>IMG</name>
              <description></description>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>IMG</string>
                </field>
                <field name="replacement">
                  <string><![CDATA[<img border="0" alt="" src="{param}" class="inlineimg"/>]]></string>
                </field>
                <field name="description">
                  <string>The [img] tag allows you to shows the image indicated by {url}</string>
                </field>
                <field name="example">
                  <string>[url=http://www.google.com.vn] [img]http://groups.google.com.vn/groups/img/3nb/groups_medium_vi.gif[/img] [/url]</string>
                </field>
                <field name="isOption">
                  <string>false</string>
                </field>
                <field name="isActive">
                  <string>true</string>
                </field>
              </object>
            </object-param>

            <object-param>
              <name>QUOTE</name>
              <description></description>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>QUOTE</string>
                </field>
                <field name="replacement">
                  <string><![CDATA[<div style="background:#ededf7; border:1px solid #d8d8d8; padding:6px 6px 6px 15px; margin:2px 0px;">{param}</div>]]></string>
                </field>
                <field name="description">
                  <string>The [quote] tag allows attribute content of post.</string>
                </field>
                <field name="example">
                  <string>[quote]Lorem ipsum dolor sit amet[/quote]</string>
                </field>
                <field name="isOption">
                  <string>false</string>
                </field>
                <field name="isActive">
                  <string>true</string>
                </field>
              </object>
            </object-param>

            <object-param>
              <name>QUOTE-OPT</name>
              <description></description>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>QUOTE</string>
                </field>
                <field name="replacement">
                  <string><![CDATA[<div style="background:#ededf7; border:1px solid #d8d8d8; padding:6px 6px 6px 15px; margin:2px 0px;"><div>Originally Posted by <strong>{option}</strong></div><div>{param}</div></div>]]></string>
                </field>
                <field name="description">
                  <string>The [quote=option] tag allows attibute content and user name of poster.</string>
                </field>
                <field name="example">
                  <string>[quote=John Doe]Lorem ipsum dolor sit amet[/quote]</string>
                </field>
                <field name="isOption">
                  <string>true</string>
                </field>
                <field name="isActive">
                  <string>true</string>
                </field>
              </object>
            </object-param>

            <object-param>
              <name>CODE</name>
              <description></description>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>CODE</string>
                </field>
                <field name="replacement">
                  <string><![CDATA[<div style="background:#ededed; border:1px inset #7b7b7b; margin:5px; overflow:auto;"><pre style="margin: 0px; padding: 0px; overflow: auto; text-align: left;" dir="ltr"><div>{param}</div></pre></div>]]></string>
                </field>
                <field name="description">
                  <string>The [code] tag allows you to view source code html.</string>
                </field>
                <field name="example">
                  <string><![CDATA[[code]<div>some text or code html</div>[/code]]]></string>
                </field>
                <field name="isOption">
                  <string>false</string>
                </field>
                <field name="isActive">
                  <string>true</string>
                </field>
              </object>
            </object-param>

            <object-param>
              <name>CSS</name>
              <description></description>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>CSS</string>
                </field>
                <field name="replacement">
                  <string><![CDATA[<span class="{option}">{param}</span>]]></string>
                </field>
                <field name="description">
                  <string>The [css=option] tag allows you to add div tag and set class Name for this it.</string>
                </field>
                <field name="example">
                  <string>[css=highlight]Text is highlight[/css]</string>
                </field>
                <field name="isOption">
                  <string>true</string>
                </field>
                <field name="isActive">
                  <string>true</string>
                </field>
              </object>
            </object-param>

            <object-param>
              <name>SLIDESHARE</name>
              <description></description>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>SLIDESHARE</string>
                </field>
                <field name="replacement">
                  <string>
                  <![CDATA[<div style="width:425px; height:355px;" align="center">
                  <object style="margin:0px" width="425" height="355">
                    <param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc={option}&rel=0"/>
                    <param name="allowFullScreen" value="true"/>
                    <param name="allowScriptAccess" value="always"/>
                    <embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc={option}&rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355">
                    </embed>
                  </object>
                  <b>{param}</b></div>]]>
                  </string>
                </field>
                <field name="description">
                  <string>The [SLIDESHARE=option] tag allows you to run slide in slidesharecdn.com site.</string>
                </field>
                <field name="example">
                  <string>[SLIDESHARE=slideId]My slide[/SLIDESHARE]</string>
                </field>
                <field name="isOption">
                  <string>true</string>
                </field>
                <field name="isActive">
                  <string>true</string>
                </field>
              </object>
            </object-param>
          </init-params>
        </component-plugin>

- In which,

Name | Set method | Type | Description
--- | --- | --- | ---
forum.default.bbcodes | registerBBCodePlugin | org.exoplatform.ks.bbcode. spi.BBCodePlugin | To define formats for data displayed on UI.

- The BBCode array is defined by the org.exoplatform.ks.bbcode.spi.BBCodeData object as below:

               <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>I</string>
                </field>
                <field name="replacement">
                  <string><![CDATA[<i>{param}</i>]]></string>
                </field>
                <field name="description">
                  <string>Set text in italic</string>
                </field>
                <field name="example">
                  <string>[I]This text is italic[/I]</string>
                </field>
                <field name="isOption">
                  <string>false</string>
                </field>
                <field name="isActive">
                  <string>true</string>
                </field>
              </object>

- The BBCode includes basic data which are defined in the field tag with a specific name as below:

                <field name="tagName">
                  <string>I</string>
                </field>
                <field name="replacement">
                  <string><![CDATA[<i>{param}</i>]]></string>
                </field>
                <field name="description">
                  <string>Set text in italic</string>
                </field>
                <field name="example">
                  <string>[I]This text is italic[/I]</string>
                </field>
                <field name="isOption">
                  <string>false</string>
                </field>
                <field name="isActive">
                  <string>true</string>
                </field>

In which:

Field name | Value | Description
--- | --- | ---
tagName | `string` | This is the text for the BBCode, which is put between two square brackets ([ ]). For example, for the bold tag, if you type [b], the BBCode tag will be b without any square brackets ([ ]).
replacement | `string` | This is the HTML code that replaces the BBCode entered by the user. Make sure that you include '{param}' (without quotes) to insert the text between opening and closing BBCode tags, and '{option}' for the parameter within the BBCode tag. You can only use option if 'Use Option' is selected.
description | `string` | This is a piece of text to describe the BBCode tag, including HTML tags if you want.
example | `string` | This is a sample piece of BBCode to use as an example for the particular BBCode. For example, to demonstrate the usage of [b] tag, enter [b]text[/b].
isOption | `true`, `false` | To select the [tag=option] [/tag] style tag, rather than just a [tag][/tag]style tag. This function will be created if you select this option.
isActive | `true`, `false` | To activate the BBCode tag.

#### Forums Initializer

##### Overview

The Initialization plug-in component defines the default Forum data in the .xml file, including categories, forums, topics and posts.

When the Forum Service runs, it will get values which are returned from the Initialization plug-in component to initialize default data of the Forum.

##### Configuration

###### Default forum data

The default forum data is configured in the `war:webapp/WEB-INF/conf/ksdemo/ks/services-configuration.xml` file.

In particular, when the ForumService starts, the Initialization plug-in component is called. Next, the services-configuration.xml file is executed. The component-plugin named addInitialDefaultDataPlugin will refer to org.exoplatform.forum.service.conf.InitializeForumPlugin to execute some objects to create default data for the Forum application.

       <component-plugin>
          <name>default.data</name>
          <set-method>addInitialDefaultDataPlugin</set-method>
          <type>org.exoplatform.forum.service.conf.InitializeForumPlugin</type>
          <description>description</description>
          <init-params>
            <object-param>
              <name>livedemo.default.configuration</name>
              <description>initial data for live demo</description>
              <object type="org.exoplatform.forum.service.conf.ForumInitialData">
                <field name="categories">
                  <collection type="java.util.ArrayList">
                    <value>
                      <object type="org.exoplatform.forum.service.conf.CategoryData">
                        <field name="owner">
                          <string>root</string>
                        </field>
                        <field name="name">
                          <string>Knowledge Suite</string>
                        </field>
                        <field name="description">
                          <string>All about eXo KS</string>
                        </field>
                        <field name="forums">
                          <collection type="java.util.ArrayList">
                            <value>
                              <object type="org.exoplatform.forum.service.conf.ForumData">
                                <field name="owner"><string>root</string></field>
                                <field name="name"><string>Live demo</string></field>
                                <field name="description"><string>Questions about this demo</string></field>
                                <field name="topics">
                                  <collection type="java.util.ArrayList">
                                    <value>
                                      <object type="org.exoplatform.forum.service.conf.TopicData">
                                        <field name="name"><string>Demo data policy</string></field>
                                        <field name="icon"><string>Shield</string></field>
                                        <field name="owner"><string>root</string></field>
                                        <field name="content"><string>
                                        Welcome to eXo Knowledge Suite live demo!
                                        We hope you enjoy discovering eXo Forum and FAQ applications features.
                                        You don't need to be logged in to see the applications in action.
                                        But the power of KS lies in the rich set of admin/moderation features.
                                        We didn't want you to miss them so, when you [b][url="/portal/public/classic/register"]
                                        create a demo account[/url][/b], you will be granted full permissions.
                                        Anybody can become an administrator or a moderator and play in the sandbox!
                                        As a consequence, the data for this forum (including the accounts) is not meant to stay.
                                        [b][center]WE MAY RESET FORUMS AND FAQS ANYTIME[/center][/b]
                                        Enjoy and don't forget to send feedback at [email]ks@exoplatform.com[/email]</string></field>
                                      </object>
                                    </value>
                                  </collection>
                                </field>
                              </object>
                            </value>
                          </collection>
                        </field>
                      </object>
                    </value>
                  </collection>
                </field>
              </object>
            </object-param>
          </init-params>
        </component-plugin>

- In which,

Name | Set-method | Type | Description
--- | --- | --- | ---
default.data | `addInitialDataPlugin` | `org.exoplatform.forum. service.conf. InitializeForumPlugin` | The initial default data of Forum.

- Init-param

Name | Possible value | Default value | Description
--- | --- | --- | ---
livedemo.default. configuration | `object` | `org.exoplatform.forum. service.conf. ForumInitialData` | The initial data for live demo.

- Category array

After the org.exoplatform.forum.service.conf.InitializeForumPlugin object has been executed, the org.exoplatform.forum.service.conf.ForumInitialData object will be called. It returns a category array. The value of category array is defined by the org.exoplatform.forum.service.conf.CategoryData object as below:

      <object-param>
                   <name>livedemo.default.configuration</name>
                   <description>initial data for live demo</description>
                   <object type="org.exoplatform.forum.service.conf.ForumInitialData">
                      <field name="categories">
                         <collection type="java.util.ArrayList">
                            <value>
                               <object type="org.exoplatform.forum.service.conf.CategoryData">
                                  <field name="owner">
                                     <string>root</string>
                                  </field>
                                  <field name="name">
                                     <string>Knowledge Suite</string>
                                  </field>
                                  <field name="description">
                                     <string>All about eXo KS</string>
                                  </field>
                                ...
                              </object>
                           </value>
                         </collection>
                       </field>
                    </object>
        </object-param>

1. Category includes some basic data which are defined in the field tag with a specific name as below:

             <field name="owner">
             <string>root</string>
             </field>
             <field name="name">
             <string>Knowledge Suite</string>
             </field>
             <field name="description">
             <string>All about eXo KS</string>
             </field>

In which:

Field | Possible value | Default value | Description
owner | `user id` | `root` | The creator of Category
name | `string` | `Knowledge Suite` | The title of Category
description | `string` | `All about eXo KS` | The brief description of Category

- Modify values of Category

Values of the default Category can be changed by editing text values in the `string` tag of each `field` by the other one. In the sample code above, the org.exoplatform.forum.service.conf.CategoryData object is called. It means that only one default Category is defined. If you want to define more default Categories, repeat calling org.exoplatform.forum.service.conf.CategoryData object and define values for the new Category with the sample code as below:

         <value>
            <object type="org.exoplatform.forum.service.conf.CategoryData">
            <field name=" ">
               ...
            </field>
            </object>
          </value>

###### Forum array

Category may contain one or more Forums. The value of the Forum is defined in the forums field. It returns a forum array. The value of forum array is defined by the org.exoplatform.forum.service.conf.ForumData object as below:

        <field name="forums">
           <collection type="java.util.ArrayList">
           <value>
           <object type="org.exoplatform.forum.service.conf.ForumData">
             <field name="owner"><string>root</string></field>
             <field name="name"><string>Live demo</string></field>
             <field name="description"><string>Questions about this demo</string></field>
                  ...
           </object>
           </value>
           </collection>
        </field>

- Basic Forum data

Forum includes some basic data which are defined in the field tag with the specific name as above.

In which:

Field | Possible value | Default value | Description
--- | --- | --- | ---
owner | `user id` | `root` | The creator of default Forum.
name | `string` | `Live demo` | The name or title of default Forum.
description | `string` | `Questions about this demo` | The brief description of default Forum.

The default Forum values can be changed by editing text values in string tag of each field by the other one.

In the sample code above, the org.exoplatform.forum.service.conf.ForumData object is called only one time. It means that only one default Forum is defined inside the default Category named Knowledge Suite. If you want to define more default Forums, repeat calling the org.exoplatform.forum.service.conf.ForumData object and define values for the new Forum with the sample code as below:

        <value>
          <object type="org.exoplatform.forum.service.conf.ForumData">
          <field name=" ">
                  ...
          </field>
          </object>
        </value>

###### Forum topics

1. Forum may contain one or more topics. The value of topic is defined in the topics field. It returns a topic array. The value of topic array is defined by the org.exoplatform.forum.service.conf.TopicData object as below:

        <field name="topics">
           <collection type="java.util.ArrayList">
           <value>
             <object type="org.exoplatform.forum.service.conf.TopicData">
                 <field name="name"><string>Demo data policy</string></field>
                 <field name="icon"><string>Tux</string></field>
                 <field name="owner"><string>root</string></field>
                 <field name="content"><string>Welcome to eXo Forum live demo. ... at anytime.</string></field>
                       ...
           </object>
           </value>
           </collection>
        </field>

A topic includes some basic data which are defined in the field tag with a specific name as above.

In which:

Field | Possible value | Default value | Description
--- | --- | --- | ---
name | `string` | `Demo data policy` | The name or title of default topic.
icon | `string` | `Tux` | The default icon of default topic.
owner | `user id` | `root` | The creator of default topic.
content | `string` | `Welcome to eXo Forum live demo...at anytime.` | The main content of default topic.

The values of default topic can be changed by editing text values in string tag of each field.

With the sample code above, the org.exoplatform.forum.service.conf.TopicData object is called only one time. It means that only one default topic is defined inside the default Forum named Live demo. If you want to define more default topics, repeat calling the org.exoplatform.forum.service.conf.TopicData object and define values for the new topic with the sample code as below:

          <value>
            <object type="org.exoplatform.forum.service.conf.TopicData">
            <field name=" ">
                        ...
            </field>
            </object>
          </value>

1. Topic may contain one or more posts. The value of the post is defined in posts field. It returns a post array. The value of the post array is defined by the org.exoplatform.forum.service.conf.PostData object as below:

        <field name="posts">
          <collection type="java.util.ArrayList">
          <value>
            <object type="org.exoplatform.forum.service.conf.PostData">
            <field name="name"><string>Reply: Demo data policy</string></field>
            <field name="icon"><string>IconsView</string></field>
            <field name="owner"><string>root</string></field>
            <field name="content"><string>Enjoy and don't forget to send feedback at ks@exoplatform.com</string></field>
                  ...
           </object>
           </value>
           </collection>
        </field>

A post includes some basic data which are defined in the field tag with a specific name as above.

In which:

Field | Possible value | Default value | Description
--- | --- | --- | ---
name | `string` | `Reply: Demo data policy` | The name or title of default post.
icon | `string` | `IconsView` | The default icon of default post.
ownwer | `user id` | `root` | The creator of default post.
content | `string` | `Enjoy and don't forget to send feedback at ks@exoplatform.com` | The main content of default post.

The default post values can be changed by editing text values in string tag of each field.

With the sample code above, the org.exoplatform.forum.service.conf.PostData object is called only one time. It means that only one default post is defined inside the default topic named Demo data policy. If you want to define more default posts, repeat calling the org.exoplatform.forum.service.conf.PostData object and define values for the new post with the sample code as below:

           <value>
             <object type="org.exoplatform.forum.service.conf.PostData">
             <field name=" ">
                   ...
             </field>
            </object>
           </value>

By default, the default Forum data can only be changed by modifying the services-configuration.xml file.

At runtime, the new changes in the services-configuration.xml file will be executed and updated, the default Forum data will be created correspondingly.

##### Initial Data Plugin

The Initial Data plugin is configured in the services-configuration.xml file. In details, at runtime of Forum Service, the Initialization plug-in component is called, the services-configuration.xml file will be executed. The component-plugin named addInitialDataPlugin will refer to org.exoplatform.forum.service.conf.ForumInitialDataPlugin to import some objects to create data for Forum service. The default data in the .zip or .xml file is initialized as follows:

        <component-plugin>
          <name>technical.forum</name>
          <set-method>addInitialDataPlugin</set-method>
          <type>org.exoplatform.forum.service.conf.ForumInitialDataPlugin</type>
          <description>Initialize</description>
          <init-params>
            <values-param>
              <name>locations</name>
              <description>location where Forum export format file is stored</description>
              <value>war:/data/forum/data-full-forum.zip</value>
              <!-- value>war:/data/forum/forumCategory.xml</value -->
            </values-param>
          </init-params>
        </component-plugin>

- In which:

Name | Sret-Method | Type | Description
--- | --- | --- | ---
technical.forum | `addInitialDataPlugin` | `org.exoplatform.forum.service.conf.ForumInitialDataPlugin` | To initialize the data plugin

- Init-params

Name | Possible values | Default value | Description
--- | --- | --- | ---
locations | `String` | `war:/data/forum/data-full-forum.zip` | location where Forum export format file is stored

#### Auto-prune

##### Overview

The Auto-prune component is to prune inactive topics which have not been viewed, edited or received for a given period. The "prune" operation does not denote to the physical removal of topics, but sets them invisible. The function helps you not clutter busy forums from outdated information.

When the Job Scheduler runs, it will get values returned from the Auto-prune plug-in component to identify topics which have to be inactivated in the Forum application. These topics will be invisible to users.

##### Configuration

The properties of Auto-prune plug-in are configured in the war:webapp/WEB-INF/ks-extension/ks/forum/prune-configuration.xml_ file.

In particular, at runtime of Job Scheduler, the Auto-prune plug-in component is called. Then, the prune-configuration.xml file will be executed. The component-plugin named ForumDeactiveJob will refer to org.exoplatform.forum.service.conf.DeactivePeriodJob to inactivate topics in the Forum which meets predefined inactivation properties.

    <component-plugin>
          <name>ForumDeactiveJob</name>
          <set-method>addPeriodJob</set-method>
          <type>org.exoplatform.forum.service.conf.DeactivePeriodJob</type>
          <description>add a Deactive job to the JobSchedulerService</description>
          <init-params>
            <properties-param>
              <name>job.info</name>
              <description>save the monitor data  periodically</description>
              <property name="jobName" value="DeactiveJob"/>
              <property name="groupName" value="KnowlegedSuite"/>
              <property name="job" value="org.exoplatform.forum.service.conf.DeactiveJob"/>
              <property name="repeatCount" value="0"/>
              <property name="period" value="7200000"/> <!-- 2 hours-->
              <property name="startTime" value="+0"/>
              <property name="endTime" value=""/>
            </properties-param>
            <properties-param>
              <name>deactive.info</name>
              <description/>
              <property name="inactiveDays" value="15"/>
              <property name="forumName" value="Live demo"/>
            </properties-param>
          </init-params>
        </component-plugin>

- In which,

Name | Set-method | Type | Description
--- | --- | --- | ---
ForumDeactiveJob | addPeriodJob | org.exoplatform.forum. service.conf. DeactivePeriodJob | To add a DeactiveJob to the JobSchedulerService.

- The properties for the Auto-prune plug-in are defined in the property tag with the format as below:

    ...
              <property name="jobName" value="DeactiveJob"/>
              <property name="groupName" value="KnowlegedSuite"/>
              <property name="job" value="org.exoplatform.forum.service.conf.DeactiveJob"/>
              <property name="repeatCount" value="0"/>
              <property name="period" value="7200000"/> <!-- 2 hours-->
              <property name="startTime" value="+0"/>
              <property name="endTime" value=""/>
    ...
              <property name="inactiveDays" value="15"/>
              <property name="forumName" value="Live demo"/>
     ...

In details:

Property name | Possible value | Default value | Description
--- | --- | --- | ---
jobname | `String` | `DeactiveJob` | The name of job which will be executed.
groupname | `String` | `KnowlegedSuite` | The name of application which will be executed.
job | `Class path` | org.exoplatform.forum. service.conf.DeactiveJob | The reference function of the job which will be executed.
repeatCount | `Long` | `0` | The repeating time for the job. It means that how many times the job will be executed. It means that DecactiveJob is called at runtime only. It does not repeat. If the value is set 2 or 3, DecactiveJob will be called two or three times correspondingly.
period | `Long` | `72000000` | The interval between job executions.
starttime | `Integer` | `+0` | The start time when the function executes. `exampleexample` thestarttime is 0, meaning that the time to start executing DecactiveJob is the runtime.
endtime | `Integer` | `null` | The end time when the function stops executing. `exampleexample` endtime is blank, meaning that there is no limitation for the end time for DecactiveJob.

With start and end time, you can give a specific date in the format: yyyy-mm-dd HH:mm:ss.sss to define the start and end time for DecactiveJob. Besides, deactive information is also defined:

Property name | Possible value | Default value | Description
--- | --- | --- | ---
inactiveDays | `Integer` | `15` | The number of days the topic has not been activated. `exampleexample` inactivateDays is set 1, meaning that all the topics, which have one inactivated day, will be set as inactivated status. They will be invisible.
forumname | `String` | `Live Demo` | The name of Forum which will be checked for Auto-prune. In case, forumname is blank. It means that all forums will be checked for the Auto-prune. The forumname is Live demo. It means that only the Forum named 'Live demo' is checked for the Auto-prune.

By fault, the default properties can only be changed by editing its value in the prune-configuration.xml file.

At the runtime, the new changes in the prune-configuration.xml file are executed and updated. After that, the Auto-prune plug-in will be executed, depending on its properties.

#### User Statistics

##### Overview

The Auto-count Active Users component is to calculate the number of active users automatically. A user is considered as the active user only when he/she often adds topic/post in the Forum and his/her last post date matches the predefined interval time.

For example, if one user does not have any new posts after 15 days, he/she is not considered as an active user.

When the Job Scheduler runs, it will get values returned from the Auto-count Active Users plug-in component to identify the number of active users. This value is updated to Active Members information when the user views Forum statistics.

##### Configuration

The properties of Auto-count Active Users plug-in is configured in the war:webapp/WEB-INF/ks-extension/ks/forum/statistics-configuration.xml_ file.

In details, at runtime of Job Scheduler, the Auto-count Active Users plug-in component is called. Then, the statistics-configuration.xml file is executed. The component-plugin named RecountActiveUserJob will refer to org.exoplatform.forum.service.conf.RecountActiveUserPeriodJob to calculate the number of active users.

     <component-plugin>
          <name>RecountActiveUserJob</name>
          <set-method>addPeriodJob</set-method>
          <type>org.exoplatform.forum.service.conf.RecountActiveUserPeriodJob</type>
          <description>add a RecountActiveUser job to the JobSchedulerService</description>
          <init-params>
            <properties-param>
              <name>job.info</name>
              <description>save the monitor data  periodically</description>
              <property name="jobName" value="RecountActiveUserJob"/>
              <property name="groupName" value="KnowlegedSuite"/>
              <property name="job" value="org.exoplatform.forum.service.conf.RecountActiveUserJob"/>
              <property name="repeatCount" value="0"/>
              <property name="period" value="7200000"/> <!-- 2 hours-->
              <property name="startTime" value="+0"/>
              <property name="endTime" value=""/>
            </properties-param>
            <properties-param>
              <name>RecountActiveUser.info</name>
              <description/>
              <property name="lastPost" value="15"/> <!-- users are active if have last posts in 15 day -->
            </properties-param>
          </init-params>
        </component-plugin>

- In which,

Name | Method | Type | Description
--- | --- | --- | ---
RecountActiveUserJob | addPeriodJob | org.exoplatform.forum. service.conf. RecountActiveUserPeriodJob | To add a RecountActiveUser job to the JobSchedulerService.

- The properties for Auto-count Active Members plug-in are defined in the property tag as below:

    ...
              <property name="jobName" value="RecountActiveUserJob"/>
              <property name="groupName" value="KnowlegedSuite"/>
              <property name="job" value="org.exoplatform.forum.service.conf.RecountActiveUserJob"/>
              <property name="repeatCount" value="0"/>
              <property name="period" value="7200000"/> <!-- 2 hours-->
              <property name="startTime" value="+0"/>
              <property name="endTime" value=""/>
    ...
             <property name="lastPost" value="15"/>
     ...

In which:

Property name | Possible value | Default value | Description
--- | --- | --- | ---
jobname | `String` | `RecountActiveUserJob` | The name of job which will be executed.
groupname | `String` | `KnowlegedSuite` | The name of application which will be executed.
job | `Class path` | org.exoplatform.forum. service.conf. RecountActiveUserJob | The reference function of job which will be executed.
repeatCount | `Long` | 0 | The number of times the job is repeated. If repeatCount is set 0, RecountActiveUserJob is called at runtime only. It does not repeat. If the number is set to 2 or 3, RecountActiveUserJob will be called two or three times.
period | `Long` | 7200000 (millisecond) (equal to two hours) | The interval time to execute the job.
starttime | `Integer` | 0 | The start time when the function executes. starttime is 0, meaning that the time to start executing RecountActiveUserJob is the runtime.
endtime | `Integer` | null | The end time when the function stops executing. endtime is blank, meaning that there is no limitation for the end time for RecountActiveUserJob.

With start and end time, you can give a specific date in the format: yyyy-mm-dd HH:mm:ss.sss to define the start and end time for RecountActiveUserJob. The information of active time is also defined:

Property name | Possible value | Default value | Description
--- | --- | --- | ---
lastPost | `Integer` | 15 | The number of days that the user has added the last post. lastPost is 15, meaning that all users, who have any new posts within 15 days as from their last post date, are active members.

By default, the default properties can only be changed by editing its values in the statistics-configuration.xml file.

At runtime, the new changes in the statistics-configuration.xml file will be executed and updated. The Auto-count Active Users plug-in will be executed, depending on its properties.

#### Update Statistic Data

##### Overview

Update Data Job is used when there are abnormal changes in Forum data(such as migration). By default, Update DataJob is disabled at server start up. When UpdateDataJob is running, it will calculate the statistic data in Forum to make sure that the statistic data are correct.

##### Configuration

The properties of Forum's UpdateDataJob is configured in `/WEB-INF/ks-extension/ks/forum/statistics-configuration.xml` which is located in ks-extension webapp.

    <component-plugin>
          <name>UpdateDataJob</name>
          <set-method>addPeriodJob</set-method>
          <type>org.exoplatform.services.scheduler.PeriodJob</type>
          <description>update topic count and post count to forum service</description>
          <init-params>
            <properties-param>
              <name>job.info</name>
              <description>save the monitor data  periodically</description>
              <property name="jobName" value="UpdateDataJob"/>
              <property name="groupName" value="KnowledgeSuite-forum"/>
              <property name="job" value="org.exoplatform.forum.service.conf.UpdateDataJob"/>
              <property name="repeatCount" value="1"/>
              <property name="period" value="30000"/>
              <property name="startTime" value="+0"/>
              <property name="endTime" value=""/>
            </properties-param>
          </init-params>
        </component-plugin>

- in which:

Name | Method | Type | Description
--- | --- | --- | ---
UpdateDataJob | addPeriodJob | org.exoplatform.services.scheduler.PeriodJob | To add a UpdateDataJob to the JobSchedulerService

- The properties for Auto-count Active Members plug-in are defined in the property tag as below:

    <property name="jobName" value="UpdateDataJob"/>
              <property name="groupName" value="KnowledgeSuite-forum"/>
              <property name="job" value="org.exoplatform.forum.service.conf.UpdateDataJob"/>
              <property name="repeatCount" value="1"/>
              <property name="period" value="30000"/>
              <property name="startTime" value="+0"/>
              <property name="endTime" value=""/>

Property name | Possible value | Default value | Description
--- | --- | --- | ---
jobname | `String` | `UpdateDataJob` | The name of job which will be executed.
groupname | `String` | `KnowledgeSuite-forum` | The name of application which will be executed.
job | `Class path` | org.exoplatform.forum.service.conf.UpdateDataJob | The reference function of job which will be executed.
repeatCount | `Long` | 1 | The number of times the job is repeated. If repeatCount is set 1, RecountActiveUserJob is called at runtime only. It does not repeat. If the number is set to 2 or 3, RecountActiveUserJob will be called two or three times.
period | `Long` | 30000 (millisecond) (equal to two hours) | The interval time to execute the job.
starttime | `Integer` | 0 | The start time when the function executes. starttime is 0, meaning that the time to start executing RecountActiveUserJob is the runtime.
endtime | `Integer` | null | The end time when the function stops executing. endtime is blank, meaning that there is no limitation for the end time for UpdateDataJob.

With start and end time, you can give a specific date in the format: yyyy-mm-dd HH:mm:ss.sss to define the start and end time for UpdateDataJob.

#### Default User Profile

##### Overview

The default Forum settings are a set of settings for a new account. It contains declarations of time zone, short date format, long date format, time format, maximum topics per page, maximum posts per page and flag for showing forum jump or not. The settings are simple, and users can change such settings to UI-based functions later.

##### Configuration

This configuration is declared in the file named "ks-configuration.xml". Its path is "[tomcat source]/webapps/ks-extension/WEB-INF/ks-extension/ks/ks-configuration.xml" if you are running the tomcat and "[project source]/extension/webapp/src/main/webapp/WEB-INF/ks-extension/ks/ks-configuration.xml" if you are in the development phrase.

    ...
     <external-component-plugins>
        <target-component>org.exoplatform.services.organization.OrganizationService</target-component>
        <component-plugin>
         ...
          <init-params>
            <properties-param>
              <name>user.profile.setting</name>
              <description>set default user profile</description>
              <property name="timeZone" value="GMT"/>
              <property name="shortDateFormat" value="MM/dd/yyyy"/>
              <property name="longDateFormat" value="DDD,MMM dd,yyyy"/>
              <property name="timeFormat" value="hh:mm a"/>
              <property name="maxTopic" value="10"/>
              <property name="maxPost" value="10"/>
              <property name="isShowForumJump" value="true"/>

            </properties-param>
          </init-params>

        </component-plugin>
      </external-component-plugins>
    ...

In which:

Parameter | Possible value | Default value | Description
--- | --- | --- | ---
timeZone | `Time zone id` | `GMT` | Time zone set by user. For example: GMT, GMT-05:00, GMT+07:00, GMT+08:30 ... `exampleexample` Visit the website: http://java.sun.com/j2se/1.4.2/docs/api/java/util/TimeZone.html for more details.
shortDateFormat | `Valid Java Date format` | `MM/dd/yyyy` | The format to display short information of date `exampleexample` Visit the website: http://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html to ensure the exact format.)
longDateFormat | `Valid Java Date format` | `DDD,MMM dd,yyyy` | The format to display a date with more information `exampleexample` Visit the website http://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html to ensure the exact format.
timeFormat | `valid Java Date format` | `hh:mm a` | The format to view time (for example, hour, minute,) `exampleexample` Visit the website: http://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html to ensure the exact format.
maxTopic | `Integer` | 10 | The maximum number of topics per page.
maxPost | `Integer` | 10 | The maximum number of posts per page.
isShowForumJump | `true / false` | `true` | To show the forum jump or not.

### Answer Configuration

#### Answers Initializer

##### Overview

The Initialization plug-in component is to define the default answers data in the .xml or .zip file. It includes categories of question that should be exported from the Answers application.

When the Answers Service starts, it will get values returned from the Initialization plug-in component to initialize the default Answers data.

##### Configuration

- Default Answers data

The default Answers data is configured in the services-configuration.xml file.

In details, at runtime of Answers Service, the Initialization plug-in component is called, the services-configuration.xml file will be executed. The component-plugin named addInitialDataPlugin will refer to org.exoplatform.faq.service.InitializeDataPlugin to execute some objects to create default data.

The default data in the .zip file is initialized as follows:

    <component-plugin>
          <name>technical-faq</name>
          <set-method>addInitialDataPlugin</set-method>
          <type>org.exoplatform.faq.service.InitialDataPlugin</type>
          <description>Initialize</description>
          <init-params>
            <value-param>
              <name>location</name>
              <description>location where Answers export format file is stored</description>
              <value>war:/data/Technical-FAQ.zip</value>
            </value-param>
          </init-params>
        </component-plugin>

- In which,

Name | Set-Method | Type | Description
technical-faq | addInitialDataPlugin | org.exoplatform.faq.service. InitialDataPlugin | To initialize the data plug-in.

- Init-param

Name | Possible value | Default value | Description
location | `string` | war:/data/ Technical-FAQ.zip | The location where the Answers export format file is stored.

If the default data is in the xml format:

    <value>war:/data/Technical-FAQ.xml</value>

By default, the default Answers data can only import if the importing categories does not exist in database.

To initialize default data in multiple files, it is required to declare them in multiple plug-ins.

    <component-plugin>

    .....

    </component-plugin>

#### Answers Email Templates Configuration

##### Overview

Answers is configured mainly in the file:

- Portlet preferences: /webapps/faq/WEB-INF/portlet.xml

### Note

For general information of eXo Knowledge configuration, refer to KS Configuration section.

##### Configuration

The Mail templates use a specific syntax, enabling you to create a customized email message in the Edit mode via three templates: New question, Edit/answer, and Move question.

Parameters are used in templates consist of:

Parameter | Description
--- | ---
&categoryName | To load the name of Category.
&questionContent | To load the question's content.
&questionResponse | To load the question's answer.
&questionLink | To load the link to question in the Answers portlet.

- Prev
- Up
- Home
- Next