eXo Platform 3.0

- Prev
- Next

## Chapter 2. Configuration

## Components

#### Components of KS

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.ks.rendering.MarkupRenderingService | org.exoplatform.ks.rendering.MarkupRenderingService |
org.exoplatform.services.jcr.ext.hierarchy.NodeHierarchyCreator | org.exoplatform.services.jcr.ext.hierarchy.impl.NodeHierarchyCreatorImpl |
| org.exoplatform.services.scheduler.impl.QuartzSheduler |
| org.exoplatform.services.scheduler.QueueTasks |
org.exoplatform.services.scheduler.JobSchedulerService | org.exoplatform.services.scheduler.impl.JobSchedulerServiceImpl |

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

Name | Possible values | Default values
--- | --- | ---
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 | Manages CRUD operations on BBCodes
org.exoplatform.forum.service.DataStorage | org.exoplatform.forum.service.impl.JCRDataStorage |
org.exoplatform.forum.service.ForumService | org.exoplatform.forum.service.impl.ForumServiceImpl |
org.exoplatform.forum.service.ForumStatisticsService | org.exoplatform.forum.service.impl.ForumStatisticsServiceImpl |
| org.exoplatform.forum.service.ws.ForumWebservice |

#### Components of Answers

Key | Data type | Description
--- | --- | ---
org.exoplatform.faq.service.FAQService | org.exoplatform.faq.service.impl.FAQServiceImpl |
org.exoplatform.faq.service.DataStorage | org.exoplatform.faq.service.impl.JCRDataStorage |
| org.exoplatform.faq.service.ws.FAQWebservice |

#### Components of Poll

Key | Data type | Description
--- | --- | ---
org.exoplatform.poll.service.DataStorage | org.exoplatform.poll.service.impl.JCRDataStorage |
org.exoplatform.poll.service.PollService | org.exoplatform.poll.service.impl.PollServiceImpl |
|  | org.exoplatform.poll.service.ws.PollWebservice

## External-component-plugin

### Init data configuration

#### Init data

Application | Component | Description
--- | --- | ---
Forum | `KSDataLocation, ForumServiceImpl` | Initialize default data of the Forum portlet
Answer | `KSDataLocation, AnswerServiceImpl` | Initialize default data of the Answers portlet
Poll | `KSDataLocation, PollServiceImpl` | Initialize default data of the Poll portlet

The Init data plug-in is used to define the default data in .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, /ks-extension/jcr/repository-configuration.xml will be loaded and the component org.exoplatform.ks.common.jcr.KSDataLocation is initialized. Once the component org.exoplatform.ks.common.jcr.KSDataLocation has been initialized, the function setLocation is called that will setup workspace and repository for KS. After that, the function addPlugin will be run, generating the DataLocation (some parent nodes) for KS.

#### Configuration

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

In details:

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

        <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 |
--- | --- | --- | --- | ---
Sample RepositoryServiceConfiguration Plugin | addConfig | org.exoplatform.services.jcr.impl.config.RepositoryServiceConfigurationPlugin |  |

- Init-params

Name | Possible value | Default value | Description
--- | --- | --- | ---
conf-part | `string` | `war:/ks-extension/jcr/repository-configuration.xml` | JCR configuration file

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

In details:

After the file war:/ks-extension/jcr/repository-configuration.xml is initialized, the server will load storage-configuration.xml file, and the function setLocation in the component org.exoplatform.ks.common.conf.DataLocationPlugin will be run. The workspace name and repository name will be initialized.

      <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 values | Default values | Description
--- | --- | --- | ---
repository | `` | `repository` | JCR repository for KS data
workspace | `` | `knowledge` | 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 function addPaths 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 plugin component defines roles in eXo Forum. The roles plugin is a convenient application to define 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 plugin to decide whether the logged user has the administration role or not.

#### Configuration

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

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

In details:

At runtime of the Forum Service, the roles plugin component is called. The role plugin is configured in the roles-configuration.xml file. The component-plugin named add.role.rules.plugin will refer to org.exoplatform.ks.common.conf.RoleRulesPlugin to create users for eXo Forum corresponding to the users that 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>

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

- Init-params:

Name | Possible values | Default value | Description
--- | --- | --- | ---
role | `string` | `ADMIN` | The name of the role
rules | `string` | `root` | The rules of the 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 Forum Administrator are root , john, users in /platform/administrators group and users who are member/validator memberships in the VIP group.

When root, john or any user who belongs to the /platform/administrators group or users who have amember/validator memberships in the VIP group signs in the eXo Forum, he or she will be identified as the default Forum Administrator.

To add or remove the default Forum Administrator, simply edit the roles-configuration.xml file and add or remove the correspondent "value" tags.

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

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

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

### Forum Configuration

#### BBCode Configuration

##### Overview

The BBCode Plugin component defines the default BBCode data in the .xml file. It includes BBCode tags; for example, I, B, U, SIZE, COLOR.

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

##### Configuration

###### Default BBCode data

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

In particular, at the runtime of the BBCode Service, the BBCode plugin component is called. Then, the bbcodes-configuration.xml file is executed, and the component-plugin named registerBBCodePlugin will be referred to org.exoplatform.ks.bbcode.spi.BBCodePlugin to excute 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>&lt;i&gt;{param}&lt;/i&gt;</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/>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>B</string>
                </field>
                <field name="replacement">
                  <string>&lt;b&gt;{param}&lt;/b&gt;</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/>

              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>U</string>
                </field>
                <field name="replacement">
                  <string>&lt;u&gt;{param}&lt;/u&gt;</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/>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>COLOR</string>
                </field>
                <field name="replacement">
                  <string>&lt;font color="{option}"&gt;{param}&lt;/font&gt;</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/>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>SIZE</string>
                </field>
                <field name="replacement">
                  <string>&lt;font size="{option}"&gt;{param}&lt;/font&gt;</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/>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>FONT</string>
                </field>
                <field name="replacement">
                  <string>&lt;font face="{option}"&gt;{param}&lt;/font&gt;</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/>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>HIGHLIGHT</string>
                </field>
                <field name="replacement">
                  <string>&lt;span style="font-weight: bold; color: blue;"&gt;{param}&lt;/span&gt;</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/>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>LEFT</string>
                </field>
                <field name="replacement">
                  <string>&lt;div align="left"&gt;{param}&lt;/div&gt;</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/>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>RIGHT</string>
                </field>
                <field name="replacement">
                  <string>&lt;div align="right"&gt;{param}&lt;/div&gt;</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/>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>CENTER</string>
                </field>
                <field name="replacement">
                  <string>&lt;div align="center"&gt;{param}&lt;/div&gt;</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/>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>JUSTIFY</string>
                </field>
                <field name="replacement">
                  <string>&lt;div align="justify"&gt;{param}&lt;/div&gt;</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/>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>EMAIL</string>
                </field>
                <field name="replacement">
                  <string>&lt;a href="mailto:{param}"&gt;{param}&lt;/a&gt;</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/>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>EMAIL</string>
                </field>
                <field name="replacement">
                  <string>&lt;a href="mailto:{option}"&gt;{param}&lt;/a&gt;</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/>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>URL</string>
                </field>
                <field name="replacement">
                  <string>&lt;a target='_blank' href="{param}"&gt;{param}&lt;/a&gt;</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/>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>URL</string>
                </field>
                <field name="replacement">
                  <string>&lt;a target='_blank' href="{option}"&gt;{param}&lt;/a&gt;</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/>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>GOTO</string>
                </field>
                <field name="replacement">
                  <string>&lt;a href="{option}"&gt;{param}&lt;/a&gt;</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]&gt;</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/>
              <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/>
              <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/>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>IMG</string>
                </field>
                <field name="replacement">
                  <string>&lt;img border="0" alt="" src="{param}" class="inlineimg"/&gt;</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/>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>QUOTE</string>
                </field>
                <field name="replacement">
                  <string>&lt;div style="background:#ededf7; border:1px solid #d8d8d8; padding:6px 6px 6px 15px; margin:2px 0px;"&gt;{param}&lt;/div&gt;</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/>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>QUOTE</string>
                </field>
                <field name="replacement">
                  <string>&lt;div style="background:#ededf7; border:1px solid #d8d8d8; padding:6px 6px 6px 15px; margin:2px 0px;"&gt;&lt;div&gt;Originally Posted by &lt;strong&gt;{option}&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;{param}&lt;/div&gt;&lt;/div&gt;</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/>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>CODE</string>
                </field>
                <field name="replacement">
                  <string>&lt;div style="background:#ededed; border:1px inset #7b7b7b; margin:5px; overflow:auto;"&gt;&lt;pre style="margin: 0px; padding: 0px; overflow: auto; text-align: left;" dir="ltr"&gt;&lt;div&gt;{param}&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;</string>
                </field>
                <field name="description">
                  <string>The [code] tag allows you to view source code html.</string>
                </field>
                <field name="example">
                  <string>[code]&lt;div&gt;some text or code html&lt;/div&gt;[/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/>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>CSS</string>
                </field>
                <field name="replacement">
                  <string>&lt;span class="{option}"&gt;{param}&lt;/span&gt;</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/>
              <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>SLIDESHARE</string>
                </field>
                <field name="replacement">
                  <string>
                  &lt;div style="width:425px; height:355px;" align="center"&gt;
                  &lt;object style="margin:0px" width="425" height="355"&gt;
                    &lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc={option}&amp;rel=0"/&gt;
                    &lt;param name="allowFullScreen" value="true"/&gt;
                    &lt;param name="allowScriptAccess" value="always"/&gt;
                    &lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc={option}&amp;rel=0"
                           type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true"
                           width="425" height="355"&gt;
                    &lt;/embed&gt;
                  &lt;/object&gt;
                  &lt;b&gt;{param}&lt;/b&gt;&lt;/div&gt;
                  </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 | default supported BBCodes

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

               <object type="org.exoplatform.ks.bbcode.spi.BBCodeData">
                <field name="tagName">
                  <string>I</string>
                </field>
                <field name="replacement">
                  <string>&lt;i&gt;{param}&lt;/i&gt;</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>&lt;i&gt;{param}&lt;/i&gt;</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 | Values | Description
--- | --- | ---
tagName | `string` | This is the text for the BB code, which goes inside the square brackets. For example, for the bold tag, you type {b} - the BB Code Tag for this is simply b without the brackets.
replacement | `string` | This is the HTML code that replaces the BBCode entered by the user. Make sure that you include 'param' (without the quotes) to insert the text between the 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. This can include HTML tags if you want.
example | `string` | This is a sample piece of BB code to use as an example for this particular BB code. e.g. to demonstrate the use of the b tag, you would enter bSome Text/b.
isOption | `true / false` | Setting this option to yes will allow you to create a tag=option /tag style tag, rather than just a tag /tag style tag.
isActive | `true/false` | To activate the BBCode tag.

#### Forums Initializer

##### Overview

The Initialization Plugin component defines the default forum data in the.xml file. It includes categories, forums, topics, and posts.

When the Forum Service runs, it will get values which are returned from Initialization Plugin component to initialize the default forum data.

##### 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, at the runtime of Forum Service, the Initailization Plugin component is called, then services-configuration.xml file is executed, the component-plugin named addInitialDataPlugin will be referred to org.exoplatform.forum.service.conf.InitializeForumPlugin to excute some objects to create default data for the forum application.

       <component-plugin>
          <name>default.data</name>
          <set-method>addInitialDataPlugin</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!nnn

                                        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.nn
                                        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!n
                                        As a consequence, the data for this forum (including the accounts) is not meant to stay.nn
                                        [b][center]WE MAY RESET FORUMS AND FAQS ANYTIME[/center][/b]nn
                                        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-para

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

- Category array

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

    Exception occured, see logs

1. category includes some basic data which are defined in field tag with specific name like 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 user who is the creator of the category. |
name | `string` | `Knowledge Suite` | The name of the title of the category. |
description | `string` | `All about eXo KS` | The brief description of the category. |

- Category value modification

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

With the sample code above, org.exoplatform.forum.service.conf.CategoryData object is called only one time. 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 below:

    Exception occured, see logs

###### Forum array

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

    Exception occured, see logs

- Basic forum data

A forum includes some basic data which are defined in field tag with specific name like above.

In which:

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

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

With the sample code above, 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 org.exoplatform.forum.service.conf.ForumData object and define values for the new forum with the sample code below:

    Exception occured, see logs

###### Forum topics

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

    Exception occured, see logs

A topic includes some basic data which are defined in field tag with specific name like above. In which:

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

This values of the default topic can be changed by changing text values in string tag of each field by the other one.

With the sample code above, 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 org.exoplatform.forum.service.conf.TopicData object and define values for the new topic with the sample code below:

    Exception occured, see logs

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 org.exoplatform.forum.service.conf.PostData object like below:

    Exception occured, see logs

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

In which:

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

These values of the default post can be changed by changing text values in string tag of each field by the other one.

With the sample code above, 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 org.exoplatform.forum.service.conf.PostData object and define values for the new post with the sample code below:

    Exception occured, see logs

By fault, the default forum data can only be changed by editing in services-configuration.xml file.

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

#### Auto Prune

##### Overview

The Auto-prune component is to activate the topics in specific Forums which are not activated (not viewed, edited or added post) for a period automatically.

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

##### Configuration

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

In details:

At the runtime of Job Schedule Service, Auto prune plugin component is called, then prune-configuration.xml file is executed, the component-plugin named ForumDeactiveJob will be referred to org.exoplatform.forum.service.conf.DeactivePeriodJob to inactivate the topics in specific Forums which meet 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 | add a Deactive job to the JobSchedulerService

- The properties for the Auto-prune plugin are defined in property tag with format like 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 the 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 repeat time for the job. It means that how many time the job will be executed. It means that DecactiveJob is called at runtime only. It does not repeat. Assume that the value is 2 or 3, DecactiveJob is called 2 or 3 times.
period | `Long` | `72000000` | The time interval the job will be executed.
starttime | `Integer` | `+0` | The start time when the function will be executed. starttime is 0. It means that the time to start executing DecactiveJob is the runtime
endtime | `Integer` | `null` | The end time when the function will be stopped executing. endtime is blank. It means that there is no limitation for the end time for DecactiveJob.

With start and end time, you can give a specific date in 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. inactivateDays is 1. It means that all the topics which have 1 inactivated day, will be set inactivated status. They will be invisible.
forumname | `String` | `Live Demo` | The name of the Forum which will be checked for Auto prune. In case, forumname is blank. It means that all forums will be checked for auto prune. forumname is Live demo. It means that only the forum named 'Live demo' is checked for Auto prune.

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

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

#### User Statistics

##### Overview

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

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

When Job Schedule Service runs, it will get values which are returned from Auto-count Active Users plugin component to identify the number of active users. This value is updated at Active Members information when viewing Forum statistics.

##### Configuration

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

In details:

At Job Schedule Service runtime, Auto-count Active Users plugin component is called, then statistics-configuration.xml file is executed, the component-plugin named RecountActiveUserJob will be referred to org.exoplatform.forum.service.conf.RecountActiveUserPeriodJob to calculate the number of active users.

    Exception occured, see logs

- In which,

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

- The properties for the Auto-count Active Members plugin are defined in property tag like 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 the application which will be executed.
job | `Class path` | org.exoplatform.forum.service.conf.RecountActiveUserJob | The reference function of the job which will be executed.
repeatCount | `Long` | 0 | The repeat time for the job. It means that how many time the job will be executed. repeatCount is 0. It means that RecountActiveUserJob is called at runtime only. It is does not repeat. Assume that the value is 2 or 3, RecountActiveUserJob is called 2 or 3 times.
period | `Long` | 7200000 (millisecond) (equal to 2 hours) | The time interval the job will be executed.
starttime | `Integer` | 0 | The start time when the function will be executed. starttime is 0. It means that the time to start executing RecountActiveUserJob is the runtime.
endtime | `Integer` | null | The end time when the function will be stopped executing. endtime is blank. It means 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 . Besides, the active time information is also defined:

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

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

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

#### Default User Profile

##### Default forum setting configuration

##### Overview

Default forum setting includes settings set for new user account. It contains declarations of time zone, short date format, long date format, time format, max topic per page, max post per page and flag for showing forum jump or not. It's rather simple and user can change such settings by UI based function after that.

##### Configuration

This configuration is declared in a 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 tomcat and "project source/extension/webapp/src/main/webapp/WEB-INF/ks-extension/ks/ks-configuration.xml" if you are in developing phase.

In details:

    ...
     <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 of user. For example: GMT, GMT-05:00, GMT+07:00, GMT+08:30 ... Visit http://java.sun.com/j2se/1.4.2/docs/api/java/util/TimeZone.html for more detail.
shortDateFormat | `Valid Java Date format` | `MM/dd/yyyy` | The format to display short information of a date ( visit http://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html to ensure the format exactly.)
longDateFormat | `Valid Java Date format` | `DDD,MMM dd,yyyy` | The format to display a date with more infomation visit http://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html to ensure the format exactly.
timeFormat | `valid Java Date format` | `hh:mm a` | Format to view time (for example, hour, minute,) Visit http://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html to ensure the format exactly.
maxTopic | `Integer` | 10 | Maximum number of topics on a page
maxPost | `Integer` | 10 | Maximum number of posts on a page
isShowForumJump | `true / false` | `true` | Show forum jump or not

### Answer Configuration

#### FAQ Initializer

##### Answers Default Data Plugin

##### Overview

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

When Answers Service starts, it will get values which are returned from Initialization plugin component to initialize the default Answers data.

##### Configuration

###### Default Answers data

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

In details:

At the run time of Answers Service, Initailization plugin component is called, then services-configuration.xml file is executed, the component-plugin named addInitialDataPlugin will be referred to org.exoplatform.faq.service.InitializeDataPlugin to excute some objects to create default data for the forum application.

The default data in the .zip file is initialized

    <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 | Initialize

- Init-param

Name | Possible value | Default value | Description
location | `string` | `war:/data/Technical-FAQ.zip` | location where 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 plugin.

    <component-plugin>

    .....

    </component-plugin>

#### Mails Templates

##### FAQ Mail Template Configuration

##### Overview

FAQ is configured mainly in two files:

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

- Services configuration: WEB-INF/conf/ks-plugins-configuration.xml

### Note

For general KS configuration information, please refer to KS Configuration section

##### Configuration

The Mail templates use a specific syntax that you can use to create a customized email message:

Parameters:

Parameter | Description
--- | ---
&categoryName | To load the category's name.
&questionContent | To load the question's content.
&questionResponse | To load the question's answer.
here | To load the link to question in FAQ.

- Prev
- Up
- Home
- Next