# eXo Knowledge Reference Guide

## exo.ks.docs.refguide - 2.1.0-CR03

## Authors

eXo Platform (eXo Platform)

Copyright © 2010 eXo Platform

## Acknowledgements

This book is produced by the Wikbook tool. Wikbook is an open source project for converting wiki files into a set of docbook files.

## Chapter 1. Prerequisites

## Chapter 2. Applications

## 2.1. Portlets

### 2.1.1. Forum Portlet

#### 2.1.1.1. Basic information of Forum portlet

Forum portlet is a discussion space where users can post or read messages on different topics.

Table 2.1.

Portlet name | ForumPortlet
War name | forum.war
Description | The Forum portlet is a full features bulletin board application.

##### 2.1.1.1.1. Declaration template

    <portlet-application>
      <portlet>
        <application-ref>forum</application-ref>
        <portlet-ref>ForumPortlet</portlet-ref>
      </portlet>
    </portlet-application>

#### 2.1.1.2. Preferences

Table 2.2.

Preference name | Possible values | Default value | Description
--- | --- | --- | ---
useAjax | `true`,`false` | `true` | To define if links in the forum will be plain hrefs or javascript ajax links (better for SEO).
showForumActionBar | `true`,`false` | `true` | This is the UIForumActionBar. If the value is set true, the UIForumActionBar is shown, and if the value is set false, the UIForumActionBar is hidden.
forumNewPost | `day number` | `1` | To specify whether a post is new. If the post is created within the set period, it is new in the forum.
enableIPLogging | `true`,`false` | `true` | This enables using the IPLogging function in the forum.
enableIPFiltering | `true`,`false` | `true` | This enables using IPFiltering function in the forum.
invisibleCategories | `id categories` | `empty` | The list of all categories shown. If the value is set empty, all categories of the forum will be shown.
invisibleForums | `id forums` | `empty` | The list of all forums shown. If the value is set empty, all forums will be shown.
uploadFileSizeLimitMB | `integer` | `20` | To define the maximum size of the uploaded file with the unit of MB.
isShowForumJump | `true`,`false` | `true` | To specify ForumJump is shown or not.
isShowIconsLegend | `true`,`false` | `true` | To specify IconsLegend is shown or not.
isShowModerators | `true`,`false` | `true` | To specify Moderators are shown or not.
isShowPoll | `true`,`false` | `true` | To specify Poll is shown or not.
isShowQuickReply | `true`,`false` | `true` | To specify QuickReply is shown or not.
isShowRules | `true`,`false` | `true` | To specify Rules are shown or not.
isShowStatistics | `true`,`false` | `true` | To specify Statistics are shown or not.

#### 2.1.1.3. Portlet.xml forum/WEB-INF/portlet.xml

#### 2.1.1.4. Events

Table 2.3.

Name | Description
--- | ---
ForumLinkEvent | This event is to setRender for UIForumLinkPortlet and to setValue for UIForumLinks.
ReLoadPortletEvent | This event is to reload UIForumPortlet.
OpenLink | This event is to update values for UIForumLinks.
ForumPollEvent | This event is to setRender for UIForumPollPortlet.
ForumModerateEvent | This event is to setRender for UIForumModeratorPortlet.
ForumRuleEvent | This event is to setRender for UIForumRulePortlet.
QuickReplyEvent | This event is to setRender for UIForumQuickReplyPortlet.

### 2.1.2. Answers Portlet

#### 2.1.2.1. Basic information of Answers portlet

Table 2.4.

Portlet name | War name | Description
--- | --- | ---
AnswersPortlet | faq.war |

#### 2.1.2.2. Portlet Preferences

Answers portlet has portlet preferences as follows:

Table 2.5.

Preference name | Possible values | Default value | Description |
--- | --- | --- | --- | ---
enableViewAvatar | `true`, `false` | `true` | To enable view avatar of owner posting the question. |
enableAutomaticRSS | `true`, `false` | `true` | To enable getting RSS automatically. |
enableVotesAndComments | `true`, `false` | `true` | To enable users to give votes and comments for the question. |
enableAnonymousSubmitQuestion | `true`, `false` | `true` | To enable anonymous users to submit questions. |
display | `approved`, `both` | `both` | To enable admins to view unapproved questions in the questions list in UIQuestions. |
SendMailAddNewQuestion | `string` | `empty` | To display the content of sent email when a new question is added. |
SendMailEditResponseQuestion | `string` | `empty` | To display the content of email when a response is editted. |
emailMoveQuestion | `string` | `empty` | To display the content of email when a question is moved. |
orderBy | `alphabet`, `created` | `alphabet` | To order questions to the alphabet or created date. |
orderType | `asc`, `desc` | `asc` | To display questions to the ascending or descending order. |
isDiscussForum | `true`, `false` | `false` | To enable the DiscussQuestions function. |
idNameCategoryForum | `CategoryName,` ForumName`` | `empty` | To select category and forum for the DiscussionQuestions function. |
uploadFileSizeLimitMB | `integer` | `20` | To set the maximum size limit of uploaded file. |

#### 2.1.2.3. Portlet.xml: /webapps/faq/WEB-INF/portlet.xml

### 2.1.3. FAQ Portlet

#### 2.1.3.1. FAQ Portlet

##### 2.1.3.1.1. Basic information of FAQ portlet

Table 2.6.

Portlet name | War name | Description
--- | --- | ---
FAQPortlet | faq.war |

##### 2.1.3.1.2. Portlet Preferences

FAQ portlet has portlet preferences that you can configure to alter the behavior.

At runtime you can use the portlet EDIT mode to set the preferences:

Alternatively, you can configure the portlet in portet-preferences.xml file.

Table 2.7.

Preference name | Possible values | Default value | Description |
--- | --- | --- | --- | ---
useAjax | `true`, `false` | `false` |  |

##### 2.1.3.1.3. Portlet.xml: /webapps/faq/WEB-INF/portlet.xml

### 2.1.4. Polls Portlet

#### 2.1.4.1. Basic information of Poll portlet

Table 2.8.

Portlet name | PollPortlet
War name | poll.war
Description |

#### 2.1.4.2. Portlet Preferences

Table 2.9.

Preference name | Possible values | Default value | Description
--- | --- | --- | ---
pollIdShow | `string` | `empty` | The Id of poll to display in the poll portlet.

#### 2.1.4.3. Portlet.xml

poll/WEB-INF/portlet.xml

## 2.2. Gadgets

### 2.2.1. Basic information of gadgets

Table 2.10.

Gadget name | pollslist
War name | poll.war
Description | The list of polls.

### 2.2.2. Preferences

Table 2.11.

Preference name | pollId
Description | id of poll for showing the poll in Pollgadget.

### 2.2.3. Links to used REST services

Links to used REST services: + portal/rest/private/ks/poll/viewpoll/pollId + portal/rest/private/ks/poll/votepoll/pollId/indexVote

## Chapter 3. Configuration

## 3.1. BBCode Configuration

### 3.1.1. BBCode Configuration

#### 3.1.1.1. BBCode Plugin Configuration

#### 3.1.1.2. Overview

The BBCode Plugin component is used to define the default bbcode data in .xml file. It includes bbcode tags, for example, I, B, U, SIZE, COLOR.

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

#### 3.1.1.3. Configuration

##### 3.1.1.3.1. Default BBCode data

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

In details:

At the runtime of BBCode Service, BBCode plugin component is called, then bbcodes-configuration.xml file is executed, the component-plugin named registerBBCodePlugin will be referred to org.exoplatform.ks.bbcode.spi.BBCodePlugin to excute some objects to create default data.

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

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

            <object-param>
              <name>U</name>
              <description></description>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

- BBCode includes some basic data which are defined in field tag with specific name like below:

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

In which:

Table 3.1.

parameter | description | value
--- | --- | ---
tagName | This is the text for the BB code, which goes inside the square brackets.eg. For the bold tag, you type b - the BB Code Tag for this is simply b without the brackets. | `string`
replacement | This is the HTML code that replaces the user-entered BB Code. Make sure that you include 'param' (without the quotes) to insert the text between the opening and closing BB code tags, and 'option' for the parameter within the BB code tag. You can only use option if 'Use Option' is set to yes below. | `string`
description | This is a piece of text to describe the BB code tag. This can include HTML tags if you wish. | `string`
example | This is a sample piece of BB code to use as an example for this particular BB code. eg. to demonstrate the use of the b tag, you would enter bSome Text/b. | `string`
isOption | Setting this option to yes will allow you to create a tag=option /tag style tag, rather than just a tag /tag style tag. | `string`
isActive | To activate the BBCode tag. | `string`

## 3.2. Roles Configuration

### 3.2.1. Roles Plugin Configuration

### 3.2.2. Overview

The roles plugin component is used to define user roles in eXo Forum and eXo FAQ. Roles are a convenient instrument to define access to a set of functions within the application.

Currently, it only allows to define who is in the administrator role. Administrators get access to administration functions.

At runtime, the application get data from the roles plugin in order to decide whether the logged user has the administration role or not.

### 3.2.3. Configuration

The plugin is configured in ks-plugins-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 ks-plugins-configuration.xml file. The component-plugin named add.role.rules.plugin refers to org.exoplatform.forum.service.conf.RoleRulesPlugin to create users for eXo Forum corresponding to the users that exist in the Organization database. Besides, the list of users who have administration roles is also defined.

      <component-plugin>
          <name>add.role.rules.plugin</name>
          <set-method>addRolePlugin</set-method>
          <type>org.exoplatform.forum.service.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>john</value>
                    <value>/platform/administrators</value>
    	        <value>member:/VIP</value>
    		<value>validator:/VIP</value>
    	        <!-value>*:/somegroup/somesubgroup</value->
    	        <!-value>manager:/somegroup/someothergroup</value->
    	      </values-param>
    	 </init-params>
        </component-plugin>

When ks-plugins-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 like below:

    <value>...</value>

For example:

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

With 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 to eXo Forum, he or she will be identified as the default Forum Administrator.

To add or remove the default Forum Administrator, simply edit ks-plugins-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 in ks-plugins-configuration.xml file.

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

## 3.3. Profile Provider

### 3.3.1. Profile Provider Configuration

### 3.3.2. Overview

Forum and FAQ applications allow to show some information about the posters. The way we retrieve that information is pluggable through contact provider implementations.

For public internet websites, you may want to allow user provide personal information such as personal email address and location. To enable this simply override the ContactProvider component in your configuration.

### 3.3.3. Configuration

Configuration file format:

     <component>
        <key>org.exoplatform.forum.service.user.ContactProvider</key>
        <type>org.exoplatform.forum.service.user.PersonalProfileContactProvider</type>
     </component>

For corporate websites, it is probably more advisable to use the business information such as professional phone or email address. In that case you would use the BusinessProfileContactProvider :

     <component>
        <key>org.exoplatform.forum.service.user.ContactProvider</key>
        <type>org.exoplatform.forum.service.user.BusinessProfileContactProvider</type>
     </component>

If you run eXo Collaboration Suite on your portal you can get profile information from eXo Address Book contacts, including avatar image. To enable this nice feature :

     <component>
        <key>org.exoplatform.forum.service.user.ContactProvider</key>
        <type>org.exoplatform.forum.provider.cs.CSContactProvider</type>
    </component>

And finally you can create your own implementation to apply custom privacy policies.

## 3.4. Notifications

### 3.4.1. Mail Service Configuration

### 3.4.2. Overview

In KS, MailService comes from kernel, KS relies on this service to sends notifications via email.

This configuration initializes parameters for MailService, the parameters declare properties of a mail box that is used to send email notification.

### 3.4.3. Runtime Configuration

At runtime of KS, when the send mail function is executed, org.exoplatform.services.mail.MailService will be called that refers to org.exoplatform.services.mail.impl.MailServiceImpl.

Properties of MailService are defined with the format:

    ...
     <component>
      <key>org.exoplatform.services.mail.MailService</key>
      <type>org.exoplatform.services.mail.impl.MailServiceImpl</type>
    - <init-params>
    - <properties-param>
      <name>config</name>
      <property name="mail.smtp.auth.username" value="notifuser" />
      <property name="mail.smtp.auth.password" value="somepassword" />
      <property name="mail.smtp.host" value="smtp.example.org" />
      <property name="mail.smtp.port" value="465" />
      <property name="mail.smtp.starttls.enable" value="true" />
      <property name="mail.smtp.auth" value="true" />
      <property name="mail.smtp.debug" value="false" />
      <property name="mail.smtp.socketFactory.port" value="465" />
      <property name="mail.smtp.socketFactory.class" value="javax.net.ssl.SSLSocketFactory" />
      <property name="mail.smtp.socketFactory.fallback" value="false" />
      </properties-param>
      </init-params>
      </component>

    ...

Properties:

Table 3.2.

name | description | sample value
--- | --- | ---
mail.smtp.auth.username | Default user name for SMTP or the email address which is used to send notification mail. | notifuser
mail.smtp.auth.password | The password of the email address which is used to send notification mail. | somepassword
mail.smtp.host | The SMTP server to connect to or the host name of the email provider. | smtp.example.org
mail.smtp.port | The SMTP server port corresponding to the mail server of the email provider. | 465
mail.smtp.starttls.enable | If true, enables the use of the STARTTLS command (if supported by the server) to switch the connection to a TLS-protected connection before issuing any login commands. Note that an appropriate trust store must configured so that the client will trust the server's certificate. | true false
mail.smtp.auth | If true, attempt to authenticate the user using the AUTH command. | true false
mail.smtp.debug | If true, in case there is error when connecting to SMTP server, warning will be returned. | true false
mail.smtp.socketFactory.port | Specifies the port to connect to when using the specified socket factory. If not set, the default port will be used. | 465
mail.smtp.socketFactory.class | If set, specifies the name of a class that implements the socketFactory interface. This class will be used to create SMTP sockets. | javax.net.ssl.SSLSocketFactory
mail.smtp.socketFactory.fallback | If set to true, failure to create a socket using the specified socket factory class will cause the socket to be created. | true false

When sending an email in KS, those properties will use to connect to mail box(example: exoservice on gmail ) and send notification from there.

By fault, the default properties can only be changed by editing its value in ks-plugins-configuration.xml file and the user can configure an different mail box when deploying KS. Note that the properties which are used for SMTP Service must be exact.

At runtime, the modifications in ks-plugins-configuration.xml file will be read and updated, MailService will be executed depending on its properties.

## 3.5. Forum Configuration

### 3.5.1. Action Bar

#### 3.5.1.1. Forum Action Bar Configuration

#### 3.5.1.2. Overview

Main action bar displays all main function buttons. The number of function buttons depending on the role of user login. Currently, the main action bar is only visible on the homepage. It disappears when you focus into other pages. But Show/hide main action bar is an option, you can configure the main action to be shown or hidden in all pages all the time.

#### 3.5.1.3. Configuration

The value is to determine to show/hide main action bar in Forum is true or false.

In case true,Main action bar is shown on all pages.

In case false, Main action bar is only show on the homepage.

This value is defined in portlet.xml file like below:

    ...
     <portlet-preferences>
      <preference>
    	<name>showForumActionBar</name>
    	<value>false</value> <!- true/false ->
    	<read-only>false</read-only>
      </preference>
     </portlet-preferences>
    ...

In which:

Table 3.3.

parameter | description | value
--- | --- | ---
name | The name of function which will be executed. | showForumActionBar any value
value | The value is to determine whether to show main action bar or hide | true false
read only | The value is to determine the value will be show 1 time only or depending the times the showForumActionBar function is called. True is for 1 only time and False is for dynamic. | true false

### 3.5.2. Forums Initializer

#### 3.5.2.1. Initialization Forum Plugin Configuration

#### 3.5.2.2. Overview

The Initialization plugin component is used to define the default forum data in xml file. It includes categories,forums,topics and posts.

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

#### 3.5.2.3. Configuration

##### 3.5.2.3.1. Default forum data

The default forum data is configured in ks-plugins-configuration.xml file.

In details:

At the runtime of Forum Service, Initailization plugin component is called, then ks-plugins-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>Tux</string></field>
                                  <field name="owner"><string>root</string></field>
                                  <field name="content"><string>Welcome to eXo Forum live demo...at anytime.</string></field>
                                   <field name="posts">
                                      <collection type="java.util.ArrayList">
                                      <value>
                                      <object type="org.exoplatform.forum.service.conf.PostData">
                                      <field name="name"><string>Reply: Demo data policy</string></field>
                                      <field name="icon"><string>IconsView</string></field>
                                      <field name="owner"><string>root</string></field>
                                      <field name="content"><string>Enjoy and don't forget to send feedback at ks@exoplatform.com</string></field>
                           </object>
                          </value>
                         </collection>
                        </field>
                       </object>
                      </value>
                     </collection>
                    </field>
                   </object>
                  </value>
                 </collection>
                </field>
               </object>
              </value>
             </collection>
            </field>
           </object>
          </object-param>
         </init-params>
        </component-plugin>

1.1 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:

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

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:

Table 3.4.

field | description | value sample |
--- | --- | --- | ---
owner | The user who is the creator of the category. | root |
name | The name of the title of the category. | Knowledge Suite |
description | The brief description of the category. | All about eXo KS |

1.1 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:

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

##### 3.5.2.3.2. 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:

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

1.1 Basic forum data

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

In which:

Table 3.5.

field | description | value |
owner | The creator of the default forum. | root any value |
name | The name or the title of the default forum. | Live demo any value |
description | The brief description of the default forum. | Questions about this demo any value |

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:

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

##### 3.5.2.3.3. 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:

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

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

Table 3.6.

field | description | value
name | The name or the title of the default topic. | Demo data policy
icon | The default icon of the default topic. | Tux
owner | The creator of the default topic. | root
content | The main content of the default topic. | Welcome to eXo Forum live demo...at anytime.This

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:

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

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

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

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

In which:

Table 3.7.

field | description | value
name | The name or the title of the default post. | Reply: Demo data policy
icon | The default icon of the default post. | IconsView
ownwer | The creator of the default post. | root
content | The main content of the default post. | Enjoy and don't forget to send feedback at ks@exoplatform.com

This 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:

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

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

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

### 3.5.3. Auto Prune

#### 3.5.3.1. Auto Prone Plugin Configuration

#### 3.5.3.2. Overview

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

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

#### 3.5.3.3. Configuration

The properties of Auto prune plugin is configured in ks-plugins-configuration.xml file.

In details:

At the runtime of Job Schedule Service, Auto prune plugin component is called, then ks-plugins-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 Forum which satisfy 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></description>
              <property name="inactiveDays" value="1"/>
              <property name="forumName" value="Live demo"/>
            </properties-param>
          </init-params>
        </component-plugin>

The properties for 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="1"/>
              <property name="forumName" value="Live demo"/>
     ...

In details:

Table 3.8.

property | description | value
--- | --- | ---
jobname | The name of job which will be executed. | DeactiveJob
groupname | The name of the application which will be executed. | KnowlegedSuite
job | The reference function of the job which will be executed. | org.exoplatform.forum.service.conf.DeactiveJob
repeatCount | 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 is does not repeat. Assume that the value is 2 or 3, DecactiveJob is called 2 or 3 times. | 0 any value
period | The time interval the job will be executed. | 72000000 (equal to 2 hours) any value
starttime | The start time when the function will be executed. starttime is 0. It means that the time to start executing DecactiveJob is the runtime | 0 any value
endtime | 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. | null

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:

Table 3.9.

property | description | value
--- | --- | ---
inactiveDays | 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. | numeric value
forumname | 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. | Live Demo

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

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

### 3.5.4. User Statistics

#### 3.5.4.1. Auto-count Active Users Plugin Configuration

#### 3.5.4.2. Overview

Auto-count Active Users component is used 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 post, 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.

#### 3.5.4.3. Configuration

The properties of Auto-count Active Users plugin is configured in ks-plugins-configuration.xml file.

In details:

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

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

The properties for 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:

Table 3.10.

property | description | value
--- | --- | ---
jobname | The name of job which will be executed. | RecountActiveUserJob
groupname | The name of the application which will be executed. | KnowlegedSuite
job | The reference function of the job which will be executed. | org.exoplatform.forum.service.conf.RecountActiveUserJob
repeatCount | 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. | 0 any value
period | The time interval the job will be executed. | 7200000 (millisecond) (equal to 2 hours)
starttime | The start time when the function will be executed. starttime is 0. It means that the time to start executing RecountActiveUserJob is the runtime. | 0 any value
endtime | 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 . | null

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 RecountActiveUserJob . Besides, active time information is also defined:

Table 3.11.

property | description | value
--- | --- | ---
lastPost | 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. | numeric value

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

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

### 3.5.5. IP Logging

#### 3.5.5.1. Forum IP Login Configuration

#### 3.5.5.2. Overview

IP logging is the IP of the computer which is used to connect Internet and do action in Forum. For example, when users add a topic or post in Forum, their IP address can be saved enclosing with their entry. Only the administrator can view that IP information.

However, get and save IP information is an option. The supper administrator can determine whether to get and save IP information or not.

#### 3.5.5.3. Configuration

The value is to determine to get and save IP enclosing with post in Forum is true or false.

In case true, the IP is gotten, saved and shown enclosing with post.

In case false, the IP is not gotten and saved.

This value is defined in portlet.xml file like below:

    ...
     <portlet-preferences>
      <preference>
    	<name>enableIPLogging</name>
    	<value>true</value> <!-true/false ->
    	<read-only>false</read-only>
    	</preference>
      </portlet-preferences>
    ...

In which:

Table 3.12.

parameter | description | value
--- | --- | ---
name | The name of function which will be executed. | enbaleIPLogging any value
value | The value is to determine whether to get IP or not. | true false
read only | The value is to determine the value will be gotten 1 time only or depending the times the enableIPLogging function is called. True is for 1 only time and False is for dynamic. | true false

The administrator can determine whether to get or save the IP logging or not by simply editing the value of this portlet preference in portlet.xml file with two optional value true or false.

### 3.5.6. Default User Profile

AnswersPreferencesConfiguration.wiki

#### 3.5.6.1. Default forum setting configuration

#### 3.5.6.2. 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.

#### 3.5.6.3. 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:

Table 3.13.

parameter | description | value
--- | --- | ---
timeZone | time zone of user | time zone id. 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 | the format to display short information of a date | String date format visit http://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html to ensure the format exactly.
longDateFormat | the format to display a date with more infomation | String date format visit http://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html to ensure the format exactly.
timeFormat | format to view time(hour, minute,..) | String time format visit http://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html to ensure the format exactly.
maxTopic | maximum number of topics on a page | number
maxPost | maximum number of posts on a page | number
isShowForumJump | show forum jump or not | true false

## 3.6. Answer Configuration

### 3.6.1. FAQ Initializer

#### 3.6.1.1. Answers Default Data Plugin

#### 3.6.1.2. 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.

#### 3.6.1.3. Configuration

##### 3.6.1.3.1. 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.

When initialize default data in a zip file

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

If the default data in 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 needs to declare them in multiple plugin

    <component-plugin>

    .....

    </component-plugin>

## 3.7. Mails Templates

### 3.7.1. FAQ Mail Template Configuration

### 3.7.2. 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| KS:KS Manual#Configuration] section

### 3.7.3. Configuration

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

Parameters:

Table 3.14.

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.

## Chapter 4. Developers Reference

## 4.1. UI Extensions

eXo Knowledge does not define UI extensions yet.

## 4.2. Overrideable Components

## 4.3. Plugin SPI

## 4.4. Public APIs

### 4.4.1. Java API

### 4.4.2. REST API

### 4.4.3. Javascript API