AntonLV před 7 roky
rodič
revize
48ca6f2ac8
24 změnil soubory, kde provedl 8275 přidání a 0 odebrání
  1. 51 0
      modules/boonex/channels/updates/10.0.2_10.0.3/install/config.php
  2. 13 0
      modules/boonex/channels/updates/10.0.2_10.0.3/install/installer.php
  3. 439 0
      modules/boonex/channels/updates/10.0.2_10.0.3/source/classes/BxCnlModule.php
  4. 153 0
      modules/boonex/channels/updates/10.0.2_10.0.3/source/install/config.php
  5. 51 0
      modules/boonex/fontawesome/updates/10.0.1_10.0.2/install/config.php
  6. 13 0
      modules/boonex/fontawesome/updates/10.0.1_10.0.2/install/installer.php
  7. 68 0
      modules/boonex/fontawesome/updates/10.0.1_10.0.2/source/install/config.php
  8. 5015 0
      modules/boonex/fontawesome/updates/10.0.1_10.0.2/source/template/css/fonts-duotone.css
  9. 51 0
      modules/boonex/forum/updates/10.0.3_10.0.4/install/config.php
  10. 13 0
      modules/boonex/forum/updates/10.0.3_10.0.4/install/installer.php
  11. 5 0
      modules/boonex/forum/updates/10.0.3_10.0.4/install/sql/enable.sql
  12. 136 0
      modules/boonex/forum/updates/10.0.3_10.0.4/source/install/config.php
  13. 561 0
      modules/boonex/forum/updates/10.0.3_10.0.4/source/install/sql/enable.sql
  14. 51 0
      modules/boonex/notifications/updates/10.0.3_10.0.4/install/config.php
  15. 13 0
      modules/boonex/notifications/updates/10.0.3_10.0.4/install/installer.php
  16. 298 0
      modules/boonex/notifications/updates/10.0.3_10.0.4/source/classes/BxNtfsDb.php
  17. 82 0
      modules/boonex/notifications/updates/10.0.3_10.0.4/source/install/config.php
  18. 51 0
      modules/boonex/posts/updates/10.0.3_10.0.4/install/config.php
  19. 13 0
      modules/boonex/posts/updates/10.0.3_10.0.4/install/installer.php
  20. 5 0
      modules/boonex/posts/updates/10.0.3_10.0.4/install/sql/enable.sql
  21. 5 0
      modules/boonex/posts/updates/10.0.3_10.0.4/install/sql/install.sql
  22. 150 0
      modules/boonex/posts/updates/10.0.3_10.0.4/source/install/config.php
  23. 486 0
      modules/boonex/posts/updates/10.0.3_10.0.4/source/install/sql/enable.sql
  24. 552 0
      modules/boonex/posts/updates/10.0.3_10.0.4/source/install/sql/install.sql

+ 51 - 0
modules/boonex/channels/updates/10.0.2_10.0.3/install/config.php

@@ -0,0 +1,51 @@
+<?php
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ */
+
+$aConfig = array(
+    /**
+     * Main Section.
+     */
+    'title' => 'Channels',
+    'version_from' => '10.0.2',
+    'version_to' => '10.0.3',
+    'vendor' => 'BoonEx',
+
+    'compatible_with' => array(
+        '10.0.0'
+    ),
+
+    /**
+     * 'home_dir' and 'home_uri' - should be unique. Don't use spaces in 'home_uri' and the other special chars.
+     */
+    'home_dir' => 'boonex/channels/updates/update_10.0.2_10.0.3/',
+    'home_uri' => 'channels_update_1002_1003',
+
+    'module_dir' => 'boonex/channels/',
+    'module_uri' => 'channels',
+
+    'db_prefix' => 'bx_cnl_',
+    'class_prefix' => 'BxCnl',
+
+    /**
+     * Installation/Uninstallation Section.
+     */
+    'install' => array(
+        'execute_sql' => 0,
+        'update_files' => 1,
+        'update_languages' => 0,
+        'clear_db_cache' => 0,
+    ),
+
+    /**
+     * Category for language keys.
+     */
+    'language_category' => 'Channels',
+
+    /**
+     * Files Section
+     */
+    'delete_files' => array(),
+);

+ 13 - 0
modules/boonex/channels/updates/10.0.2_10.0.3/install/installer.php

@@ -0,0 +1,13 @@
+<?php
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ */
+
+class BxCnlUpdater extends BxDolStudioUpdater
+{
+    function __construct($aConfig)
+    {
+        parent::__construct($aConfig);
+    }
+}

+ 439 - 0
modules/boonex/channels/updates/10.0.2_10.0.3/source/classes/BxCnlModule.php

@@ -0,0 +1,439 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defdroup    Channels Channels
+ * @indroup     UnaModules
+ *
+ * @{
+ */
+
+/**
+ * Channels profiles module.
+ */
+
+class BxCnlModule extends BxBaseModGroupsModule
+{
+    function __construct(&$aModule)
+    {
+        parent::__construct($aModule);
+    }
+   
+    public function checkAllowedSubscribeAdd (&$aDataEntry, $isPerformAction = false)
+    {
+        return parent::_checkAllowedSubscribeAdd ($aDataEntry, $isPerformAction);
+    }
+    
+    /**
+     * Process Hash Tag
+     * 
+     * @param string $sHashtag - hashtag to be processed.
+     * @param string $sModuleName - module name.
+     * @param integer $iContentId - ID of the content which has the hashtag.
+     * @param integer $iAuthorId - action's author id.
+     */
+    function processHashtag($sHashtag, $sModuleName, $iContentId, $iAuthorId)
+    {
+        $CNF = &$this->_oConfig->CNF;
+
+        /*
+         * Note! For now metatag object name is used here as module name, because usually it's equal to module's name. This should be changed in Ticket #1596
+         * For now if module cannot be created then a channel for such tag shouldn't be created too.
+         */
+        $oModule = BxDolModule::getInstance($sModuleName);
+        if(empty($oModule))
+            return;
+
+        /*
+         * Use content's author profile when Author ID wasn't provided. 
+         * Usually it happens when tags were processed with cron.
+         */
+        if(empty($iAuthorId))
+            $iAuthorId = BxDolService::call($sModuleName, 'get_author', array($iContentId));
+
+        $aCheck = checkActionModule($this->_iProfileId, 'create channel auto', $this->getName(), false);
+        $mixedCnlId = $this->_oDb->getChannelIdByName($sHashtag);
+        if(empty($mixedCnlId) && ($aCheck[CHECK_ACTION_RESULT] == CHECK_ACTION_RESULT_ALLOWED)) {
+            $iProfileId = (int)$this->_oDb->getParam($CNF['PARAM_DEFAULT_AUTHOR']);
+            if(empty($iProfileId)) {
+                $aOperators = BxDolAccountQuery::getInstance()->getOperators();
+                if(count($aOperators) > 0)
+                    $iProfileId = BxDolProfile::getInstanceByAccount(array_shift($aOperators))->id();
+            }
+
+            $aContent = $this->serviceEntityAdd($iProfileId, array($CNF['FIELD_NAME'] => $sHashtag));
+            checkActionModule($this->_iProfileId, 'create channel auto', $this->getName(), true);
+            if(isset($aContent['content']) && isset($aContent['content']['id']))
+                $mixedCnlId = $aContent['content']['id'];
+        }
+
+        if(empty($mixedCnlId) || (int)$this->_oDb->checkContentInChannel($iContentId, $mixedCnlId, $sModuleName, $iAuthorId) != 0)
+            return;
+
+        $iId = (int)$this->_oDb->addContentToChannel($iContentId, $mixedCnlId, $sModuleName, $iAuthorId);
+        if($iId == 0)
+            return;
+
+        $oCnlProfile = BxDolProfile::getInstanceByContentAndType($mixedCnlId, $this->_oConfig->getName());
+        if(!$oCnlProfile)
+            return;
+
+        $iCnlProfileId = $oCnlProfile->id();
+
+        bx_alert($this->_aModule['name'], 'hashtag_added', $iId, $iCnlProfileId, array(
+            'object_author_id' => $iAuthorId, 
+            'privacy_view' => -$iCnlProfileId,
+
+            'timeline_group' => array(
+                'by' => $sModuleName . '_' . $iAuthorId . '_' . $iContentId,
+                'field' => 'owner_id'
+            )
+        ));
+        $aParams = array(
+            'object_author_id' => $iAuthorId, 
+            'privacy_view' => -$iCnlProfileId, 
+            'subobject_id' => $iId,
+
+            'content_id' => $iContentId,
+            'content_author_id' => $iAuthorId
+        );
+        bx_alert('system', 'prepare_alert_params', 0, 0, array('unit'=> $this->_aModule['name'], 'action' => 'hashtag_added_notif', 'object_id' => $mixedCnlId, 'sender_id' => $iCnlProfileId, 'extras' => &$aParams));
+        bx_alert($this->_aModule['name'], 'hashtag_added_notif', $mixedCnlId, $iCnlProfileId, $aParams);
+    }
+    
+    function removeContentFromChannel($iContentId, $sModuleName)
+    {
+        $oDolProfileQuery = BxDolProfileQuery::getInstance();
+        
+        $aData = $this->_oDb->getDataByContent($iContentId, $sModuleName);
+        foreach ($aData as $aRow) {
+            $iProfileInfo = $oDolProfileQuery->getProfileByContentAndType($aRow['cnl_id'], $this->_aModule['name']);
+            if(is_array($iProfileInfo)){
+                bx_alert($this->_aModule['name'], 'hashtag_deleted', $aRow['id'], $iProfileInfo['id']);
+                bx_alert($this->_aModule['name'], 'hashtag_deleted_notif', $aRow['cnl_id'], $iProfileInfo['id'], array('subobject_id' => $aRow['id']));
+            }
+        }
+        
+        return $this->_oDb->removeContentFromChannel($iContentId, $sModuleName);
+    }
+
+    public function serviceGetWidgetNotices()
+    {
+        $CNF = &$this->_oConfig->CNF;
+
+        $iResult = 0;
+        if(empty($this->_oDb->getParam($CNF['PARAM_DEFAULT_AUTHOR'])))
+            $iResult += 1;
+
+        return $iResult;
+    }
+
+    public function serviceGetOptionsDefaultAuthor()
+    {
+        $aResult = array(
+            array('key' => '', 'value' => _t('_Select_one'))
+        );
+
+        $aAccountsIds = BxDolAccountQuery::getInstance()->getOperators();
+        foreach($aAccountsIds as $iAccountId) {
+            $aProfilesIds = BxDolAccount::getInstance($iAccountId)->getProfilesIds();
+            foreach($aProfilesIds as $iProfileId)
+                $aResult[] = array(
+                    'key' => $iProfileId,
+                    'value' => BxDolProfile::getInstance($iProfileId)->getDisplayName()
+                );
+        }
+
+        return $aResult;
+    }
+
+    public function serviceEntityBreadcrumb($iContentId = 0)
+    {
+    	if(!$iContentId)
+            $iContentId = bx_process_input(bx_get('id'), BX_DATA_INT);
+        if(!$iContentId)
+            return false;
+
+        $aContentInfo = $this->_oDb->getContentInfoById($iContentId);
+        if(!$aContentInfo)
+            return false;
+
+        return $this->_oTemplate->entryBreadcrumb($aContentInfo);
+    }
+
+    public function serviceEntityParent($iContentId = 0)
+    {
+        return $this->_serviceTemplateFunc('entryParent', $iContentId);
+    }
+
+    public function serviceEntityChilds($iContentId = 0)
+    {
+        return $this->_serviceTemplateFunc('entryChilds', $iContentId);
+    }
+
+    function serviceSearchResultByHashtag($iContentId = 0)
+    {
+        $CNF = &$this->_oConfig->CNF;
+        
+        $oSearch = new BxTemplSearch();
+        $oSearch->setLiveSearch(0);
+        $oSearch->setMetaType('keyword');
+        $aContentInfo = $this->_oDb->getContentInfoById(bx_get('id'));
+        $_GET['keyword'] = $aContentInfo[$CNF['FIELD_NAME']];
+        $sCode = $oSearch->response();
+        if (!$sCode)
+            $sCode = $oSearch->getEmptyResult();
+        
+        return $sCode;
+    }
+    
+    /**
+     * Data for Timeline module
+     */
+    public function serviceGetTimelineData()
+    {
+        $sModule = $this->_aModule['name'];
+
+        return array(
+            'handlers' => array(
+                array('group' => $sModule . '_hastag', 'type' => 'insert', 'alert_unit' => $sModule, 'alert_action' => 'hashtag_added', 'module_name' => $sModule, 'module_method' => 'get_timeline_post_hashtag', 'module_class' => 'Module',  'groupable' => 0, 'group_by' => ''),
+                array('group' => $sModule . '_hastag', 'type' => 'delete', 'alert_unit' => $sModule, 'alert_action' => 'hashtag_deleted')
+            ),
+            'alerts' => array(
+                array('unit' => $sModule, 'action' => 'hashtag_added'),
+                array('unit' => $sModule, 'action' => 'hashtag_deleted')
+            )
+        );
+    }
+
+    public function serviceGetTimelinePostAllowedView ($aEvent)
+    {
+        $sError = _t('_sys_txt_access_denied');
+
+        if(empty($aEvent) || !is_array($aEvent))
+            return $sError;
+
+        $aEventContent = $this->_oDb->getContentById($aEvent['object_id']);
+        if(empty($aEventContent) || !is_array($aEventContent))
+            return $sError;
+
+        if(!BxDolRequest::serviceExists($aEventContent['module_name'], 'get_timeline_post_allowed_view'))
+            return $sError;
+
+        return BxDolService::call($aEventContent['module_name'], 'get_timeline_post_allowed_view', array(array('id' => $aEvent['id'], 'owner_id' => $aEventContent['author_id'], 'object_id' => $aEventContent['content_id'])));
+    }
+
+    public function serviceGetTimelinePostHashtag($aEvent, $aBrowseParams = array())
+    {
+        if(empty($aEvent) || !is_array($aEvent))
+            return false;
+
+        $aEventContent = $this->_oDb->getContentById($aEvent['object_id']);
+        if(empty($aEventContent) || !is_array($aEventContent))
+            return false;
+
+        if(!BxDolRequest::serviceExists($aEventContent['module_name'], 'get_timeline_post'))
+            return false;      
+
+        return BxDolService::call($aEventContent['module_name'], 'get_timeline_post', array(
+            array(
+                'id' => $aEvent['id'], 
+                'owner_id' => $aEventContent['author_id'], 
+                'object_id' => $aEventContent['content_id']
+            ), 
+            $aBrowseParams
+        ));
+    }
+    
+    /**
+     * Data for Notifications module
+     */
+    public function serviceGetNotificationsData()
+    {      
+        $a = parent::serviceGetNotificationsData();
+
+        $sModule = $this->_aModule['name'];
+
+        $a['handlers'][] = array('group' => $sModule . '_hastag_notif', 'type' => 'insert', 'alert_unit' => $sModule, 'alert_action' => 'hashtag_added_notif', 'module_name' => $sModule, 'module_method' => 'get_notifications_post_hashtag', 'module_class' => 'Module');
+        $a['handlers'][] = array('group' => $sModule . '_hastag_notif', 'type' => 'delete', 'alert_unit' => $sModule, 'alert_action' => 'hashtag_deleted_notif');
+
+        $a['settings'][] = array('group' => 'hastag', 'unit' => $sModule, 'action' => 'hashtag_added_notif', 'types' => array('follow_context'));
+
+        $a['alerts'][] = array('unit' => $sModule, 'action' => 'hashtag_added_notif');
+        $a['alerts'][] = array('unit' => $sModule, 'action' => 'hashtag_deleted_notif');
+
+        return $a;
+    }
+
+    public function serviceGetNotificationsPostHashtag($aEvent)
+    {
+        if(empty($aEvent) || !is_array($aEvent))
+            return '';
+
+        $aContentEvent = $this->_oDb->getContentById($aEvent['subobject_id']);
+        if(empty($aContentEvent) || !is_array($aContentEvent))
+            return '';
+
+        $oModule = BxDolModule::getInstance($aContentEvent['module_name']);
+        if ($oModule) {
+            if (isset($oModule->_oConfig->CNF['OBJECT_PRIVACY_VIEW'])){
+                $oPrivacy = BxDolPrivacy::getObjectInstance($oModule->_oConfig->CNF['OBJECT_PRIVACY_VIEW']);
+                if (!$oPrivacy->check($aContentEvent['content_id']))
+                    return '';
+            }
+
+            $aRv = $oModule->serviceGetNotificationsPost(array(
+                'object_id' => $aContentEvent['content_id']
+            ));
+
+            $aRv['lang_key'] = '_bx_channels_ntfs_txt_subobject_added';
+            if(method_exists($oModule, 'serviceActAsProfile') && $oModule->serviceActAsProfile())
+                $aRv['lang_key'] = '_bx_channels_ntfs_txt_subobject_added_profile';
+
+            $aRv['entry_url'] = $this->serviceGetLink($aContentEvent['cnl_id']);
+            return $aRv;
+        }
+
+        return '';
+    }
+    
+    public function serviceBrowseAuthor($iProfileId = 0, $aParams = array())
+    {
+        $CNF = &$this->_oConfig->CNF;
+
+        if(empty($iProfileId))
+            $iProfileId = bx_get_logged_profile_id();
+
+        $sResult = isset($aParams['empty_message']) && (bool)$aParams['empty_message'] === true ? MsgBox(_t('_Empty')) : '';
+
+        $oConnection = BxDolConnection::getObjectInstance('sys_profiles_subscriptions');
+        $aProfile = $oConnection->getConnectedContent($iProfileId);
+        $aVars = array();
+        foreach ($aProfile as $iProfileId) {
+            $oProfile = BxDolProfile::getInstance($iProfileId);
+            if (!$oProfile || $oProfile->getModule() != $this->getName())
+                continue;
+
+            $iContentId = $oProfile->getContentId();
+            $aContentInfo = $this->_oDb->getContentInfoById($iContentId);
+            if (isset($aContentInfo[$CNF['FIELD_NAME']]))
+                array_push($aVars, array('title' => $aContentInfo[$CNF['FIELD_NAME']], 'link' => BX_DOL_URL_ROOT . BxDolPermalinks::getInstance()->permalink('page.php?i=' . $CNF['URI_VIEW_ENTRY'] . '&id=' . $iContentId)));
+        }
+
+        if(empty($aVars) || !is_array($aVars))
+            return $sResult;
+
+        return $this->_oTemplate->parseHtmlByName('my_channels.html', array(
+            'bx_if:show_list' => array(
+                'condition' => count($aVars) > 0,
+                'content' => array(
+                    'bx_repeat:items' => $aVars
+                )
+            )
+        ));
+    }
+    
+    public function serviceDeleteProfileFromFansAndAdmins ($iProfileId)
+    {
+        return true;
+    }
+
+    public function serviceGetFollowingChannelsNames($iProfileId)
+    {
+        if (!($oConn = BxDolConnection::getObjectInstance('sys_profiles_subscriptions')))
+            return array();
+
+        if (!($aIds = $oConn->getConnectedContent($iProfileId)))
+            return array();
+
+        $a = array();
+        foreach ($aIds as $iId) {
+            if (!($oProfile = BxDolProfile::getInstance($iId)))
+                continue;
+            if ($oProfile->getModule() != $this->getName())
+                continue;
+            $a[] = $oProfile->getDisplayName();
+        }
+        return $a;
+    }
+    
+    public function checkAllowedCompose (&$aDataEntry, $isPerformAction = false)
+    {
+        return _t('_sys_txt_access_denied');
+    }
+
+    public function followLabels($sModule, $iContentId)
+    {
+        if (!getParam('bx_channels_labels_autofollow'))
+            return;
+        
+        if (!($oModuleProfiles = BxDolModule::getInstance($sModule)))
+            return;
+
+        if (!($aContentInfo = $oModuleProfiles->_oDb->getContentInfoById($iContentId)) || !($oProfile = BxDolProfile::getInstanceByContentAndType($iContentId, $sModule)))
+            return;
+
+        $CNF = &$oModuleProfiles->_oConfig->CNF;
+        
+        if (!$oModuleProfiles->serviceActAsProfile() || !isset($CNF['FIELD_LABELS']) || empty($aContentInfo[$CNF['FIELD_ID']]))
+            return;
+
+        if (!($oMetatags = BxDolMetatags::getObjectInstance($CNF['OBJECT_METATAGS'])) || !$oMetatags->keywordsIsEnabled() || !($aLabels = $oMetatags->keywordsGet($aContentInfo[$CNF['FIELD_ID']])))
+            return;
+
+        if (!($oConn = BxDolConnection::getObjectInstance('sys_profiles_subscriptions')))
+            return;
+
+        foreach ($aLabels as $sLabel) {
+
+            if (!($iContentIdChannel = $this->_oDb->getChannelIdByName($sLabel)))
+                continue;
+
+            if (!($oProfileChannel = BxDolProfile::getInstanceByContentAndType($iContentIdChannel, 'bx_channels')))
+                continue;
+
+            $oConn->addConnection($oProfile->id(), $oProfileChannel->id());
+        }
+    }
+
+    /** Returns profile's subscribed channels  React Jot
+     *
+     * @param int $iProfileId
+     * @param array $aParams
+     * @return array
+     */
+
+    public function serviceBrowseAuthorChannels($iProfileId = 0, $aParams = array())
+    {
+        $CNF = &$this->_oConfig->CNF;
+
+        if(empty($iProfileId))
+            $iProfileId = bx_get_logged_profile_id();
+
+        $oConnection = BxDolConnection::getObjectInstance('sys_profiles_subscriptions');
+        $aProfile = $oConnection->getConnectedContent($iProfileId);
+        $aVars = array();
+        foreach ($aProfile as $iProfileId) {
+            $oProfile = BxDolProfile::getInstance($iProfileId);
+            if (!$oProfile || $oProfile->getModule() != $this->getName())
+                continue;
+
+            $iContentId = $oProfile->getContentId();
+            $aContentInfo = $this->_oDb->getContentInfoById($iContentId);
+
+            if (isset($aContentInfo[$CNF['FIELD_NAME']]))
+                array_push($aVars, array(
+                    'title' => $aContentInfo[$CNF['FIELD_NAME']],
+                    'link' => BX_DOL_URL_ROOT . BxDolPermalinks::getInstance()->permalink('page.php?i=' . $CNF['URI_VIEW_ENTRY'] . '&id=' . $iContentId),
+                    'followers' => $oConnection -> getConnectedInitiatorsCount($iProfileId),
+                    'id' => $iProfileId,
+                    'icon' => $oProfile -> getThumb()
+                ));
+        }
+
+        return $aVars;
+    }
+}
+
+/** @} */

+ 153 - 0
modules/boonex/channels/updates/10.0.2_10.0.3/source/install/config.php

@@ -0,0 +1,153 @@
+<?php
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defdroup    Channels Channels
+ * @indroup     UnaModules
+ *
+ * @{
+ */
+
+$aConfig = array(
+
+    /**
+     * Main Section.
+     */
+    'type' => BX_DOL_MODULE_TYPE_MODULE,
+    'name' => 'bx_channels',
+    'title' => 'Channels',
+    'note' => 'Channels functionality.',
+    'version' => '10.0.3',
+    'vendor' => 'BoonEx',
+    'help_url' => 'http://feed.una.io/?section={module_name}',
+
+    'compatible_with' => array(
+        '10.0.0'
+    ),
+
+    /**
+     * 'home_dir' and 'home_uri' - should be unique. Don't use channels in 'home_uri' and the other special chars.
+     */
+    'home_dir' => 'boonex/channels/',
+    'home_uri' => 'channels',
+
+    'db_prefix' => 'bx_cnl_',
+    'class_prefix' => 'BxCnl',
+
+    /**
+     * Category for language keys.
+     */
+    'language_category' => 'Channels',
+
+    /**
+     * Connections.
+     */
+    'connections' => array(
+        'sys_profiles_friends' => array ('type' => 'profiles'),
+        'sys_profiles_subscriptions' => array ('type' => 'profiles'),
+    ),
+
+    /**
+     * Menu triggers.
+     */
+    'menu_triggers' => array(
+        'trigger_profile_view_submenu',
+        'trigger_group_view_submenu',
+        'trigger_group_snippet_meta',
+        'trigger_group_view_actions',
+    ),
+
+    /**
+     * Page triggers.
+     */
+    'page_triggers' => array (
+        'trigger_page_profile_view_entry',
+        'trigger_page_group_view_entry',
+    ),
+
+    /**
+     * Storage objects to automatically delete files from upon module uninstallation.
+     * Note. Don't add storage objects used in transcoder objects.
+     */
+    'storages' => array(
+        'bx_channels_pics'
+    ),
+
+    /**
+     * Transcoders.
+     */
+    'transcoders' => array(
+        'bx_channels_icon',
+        'bx_channels_thumb',
+        'bx_channels_avatar',
+        'bx_channels_avatar_big',
+        'bx_channels_picture',
+        'bx_channels_cover',
+        'bx_channels_cover_thumb',
+        'bx_channels_gallery'
+    ),
+
+    /**
+     * Extended Search Forms.
+     */
+    'esearches' => array(
+        'bx_channels',
+        'bx_channels_cmts',
+    ),
+
+    /**
+     * Installation/Uninstallation Section.
+     */
+    'install' => array(
+        'execute_sql' => 1,
+        'update_languages' => 1,
+        'clear_db_cache' => 1,
+    ),
+    'uninstall' => array (
+        'process_esearches' => 1,
+        'execute_sql' => 1,
+        'update_languages' => 1,
+        'process_connections' => 1,
+        'process_deleted_profiles' => 1,
+        'update_relations' => 1,
+        'clear_db_cache' => 1,
+    ),
+    'enable' => array(
+        'execute_sql' => 1,
+        'update_relations' => 1,
+        'clear_db_cache' => 1,
+    ),
+    'enable_success' => array(
+        'process_menu_triggers' => 1,
+        'process_page_triggers' => 1,
+        'process_esearches' => 1,
+        'register_transcoders' => 1,
+        'clear_db_cache' => 1,
+    ),
+    'disable' => array (
+        'execute_sql' => 1,
+        'unregister_transcoders' => 1,
+        'update_relations' => 1,
+        'clear_db_cache' => 1,
+    ),
+    'disable_failed' => array (
+        'register_transcoders' => 1,
+        'clear_db_cache' => 1,
+    ),
+
+    /**
+     * Dependencies Section
+     */
+    'dependencies' => array(),
+
+    /**
+     * Connections Section
+     */
+    'relations' => array(
+        'bx_timeline',
+        'bx_notifications',
+    ),
+);
+
+/** @} */

+ 51 - 0
modules/boonex/fontawesome/updates/10.0.1_10.0.2/install/config.php

@@ -0,0 +1,51 @@
+<?php
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ */
+
+$aConfig = array(
+    /**
+     * Main Section.
+     */
+    'title' => 'Font Awesome Pro',
+    'version_from' => '10.0.1',
+    'version_to' => '10.0.2',
+    'vendor' => 'BoonEx',
+
+    'compatible_with' => array(
+        '10.0.0'
+    ),
+
+    /**
+     * 'home_dir' and 'home_uri' - should be unique. Don't use spaces in 'home_uri' and the other special chars.
+     */
+    'home_dir' => 'boonex/fontawesome/updates/update_10.0.1_10.0.2/',
+    'home_uri' => 'fontawesome_update_1001_1002',
+
+    'module_dir' => 'boonex/fontawesome/',
+    'module_uri' => 'fontawesome',
+
+    'db_prefix' => 'bx_fontawesome_',
+    'class_prefix' => 'BxFontAwesome',
+
+    /**
+     * Installation/Uninstallation Section.
+     */
+    'install' => array(
+        'execute_sql' => 0,
+        'update_files' => 1,
+        'update_languages' => 0,
+        'clear_db_cache' => 0,
+    ),
+
+    /**
+     * Category for language keys.
+     */
+    'language_category' => 'FontAwesome',
+
+    /**
+     * Files Section
+     */
+    'delete_files' => array(),
+);

+ 13 - 0
modules/boonex/fontawesome/updates/10.0.1_10.0.2/install/installer.php

@@ -0,0 +1,13 @@
+<?php
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ */
+
+class BxFontAwesomeUpdater extends BxDolStudioUpdater
+{
+    function __construct($aConfig)
+    {
+        parent::__construct($aConfig);
+    }
+}

+ 68 - 0
modules/boonex/fontawesome/updates/10.0.1_10.0.2/source/install/config.php

@@ -0,0 +1,68 @@
+<?php
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    FontAwesome Font Awesome Pro integration
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+$aConfig = array(
+    /**
+     * Main Section.
+     */
+    'type' => BX_DOL_MODULE_TYPE_MODULE,
+    'name' => 'bx_fontawesome',
+    'title' => 'Font Awesome Pro',
+    'note' => 'Font Awesome Pro integration.',
+    'version' => '10.0.2',
+    'vendor' => 'BoonEx',
+    'help_url' => 'http://feed.una.io/?section={module_name}',
+
+    'compatible_with' => array(
+        '10.0.0'
+    ),
+
+    /**
+     * 'home_dir' and 'home_uri' - should be unique. Don't use spaces in 'home_uri' and the other special chars.
+     */
+    'home_dir' => 'boonex/fontawesome/',
+    'home_uri' => 'fontawesome',
+
+    'db_prefix' => 'bx_fontawesome_',
+    'class_prefix' => 'BxFontAwesome',
+
+    /**
+     * Category for language keys.
+     */
+    'language_category' => 'FontAwesome',
+    
+    /**
+     * Installation/Uninstallation Section.
+     */
+    'install' => array(
+        'execute_sql' => 1,
+        'update_languages' => 1,
+    ),
+    'uninstall' => array (
+        'execute_sql' => 1,
+        'update_languages' => 1,
+    ),
+    'enable' => array(
+        'execute_sql' => 1,
+        'clear_db_cache' => 1,
+    ),
+    'disable' => array(
+        'execute_sql' => 1,
+        'clear_db_cache' => 1,
+    ),
+
+    /**
+     * Dependencies Section
+     */
+    'dependencies' => array(),
+);
+
+/** @} */

+ 5015 - 0
modules/boonex/fontawesome/updates/10.0.1_10.0.2/source/template/css/fonts-duotone.css

@@ -0,0 +1,5015 @@
+@font-face {
+    font-family: 'sys-user-fad';
+    font-style: normal;
+    font-weight: 900;
+    font-display: auto;
+    src: url("../fonts/fa-duotone-900.eot");
+    src: url("../fonts/fa-duotone-900.eot?#iefix") format("embedded-opentype"), url("../fonts/fa-duotone-900.woff2") format("woff2"), url("../fonts/fa-duotone-900.woff") format("woff"), url("../fonts/fa-duotone-900.ttf") format("truetype"), url("../fonts/fa-duotone-900.svg#fontawesome") format("svg");
+}
+
+.fa, .fas, .sys-icon,
+.far, .sys-icon.far,
+.fad, .sys-icon.fad {
+    position: relative;
+    font-family:'sys-user-fad';
+    font-weight:900;
+    font-style:normal;
+    vertical-align:baseline !important;
+    display: inline-block;
+}
+.fa:not(.fab):not(.fal):before, .sys-icon:not(.fab):not(.fal):before,
+.fas:before, .sys-icon.fas:before,
+.far:before, .sys-icon.far:before,
+.fad:before, .sys-icon.fad:before {
+  position: absolute;
+  color: var(--fa-primary-color, inherit);
+  opacity: 1;
+  opacity: var(--fa-primary-opacity, 1); 
+}
+
+.fa:not(.fab):not(.fal):after, .sys-icon:not(.fab):not(.fal):after,
+.fas:after, .sys-icon.fas:after,
+.far:after, .sys-icon.far:after,
+.fad:after, .sys-icon.fad:after {
+  color: var(--fa-secondary-color, inherit);
+  opacity: 0.4;
+  opacity: var(--fa-secondary-opacity, 0.4); 
+}
+
+@font-face {
+    font-family: 'sys-user-fab';
+    font-style: normal;
+    font-weight: normal;
+    src: url("../fonts/fa-brands-400.eot");
+    src: url("../fonts/fa-brands-400.eot?#iefix") format("embedded-opentype"), url("../fonts/fa-brands-400.woff2") format("woff2"), url("../fonts/fa-brands-400.woff") format("woff"), url("../fonts/fa-brands-400.ttf") format("truetype"), url("../fonts/fa-brands-400.svg#fontawesome") format("svg"); 
+}
+
+.fab, .sys-icon.fab {
+    font-family:'sys-user-fab';
+    font-style:normal;
+}
+
+@font-face {
+    font-family: 'sys-user-fal';
+    font-style: normal;
+    font-weight: 300;
+    src: url("../fonts/fa-light-300.eot");
+    src: url("../fonts/fa-light-300.eot?#iefix") format("embedded-opentype"), url("../fonts/fa-light-300.woff2") format("woff2"), url("../fonts/fa-light-300.woff") format("woff"), url("../fonts/fa-light-300.ttf") format("truetype"), url("../fonts/fa-light-300.svg#fontawesome") format("svg");
+}
+
+.fal, .sys-icon.fal {
+    font-family:'sys-user-fal';
+    font-weight:300;
+    font-style:normal;
+}
+.fal:after, .sys-icon.fal:after {
+    display:none;
+}
+
+
+.sys-icon.abacus:after, .fa-abacus:after {
+  content: "\10f640"; }
+
+.sys-icon.acorn:after, .fa-acorn:after {
+  content: "\10f6ae"; }
+
+.sys-icon.ad:after, .fa-ad:after {
+  content: "\10f641"; }
+
+.sys-icon.address-book:after, .fa-address-book:after {
+  content: "\10f2b9"; }
+
+.sys-icon.address-card:after, .fa-address-card:after {
+  content: "\10f2bb"; }
+
+.sys-icon.adjust:after, .fa-adjust:after {
+  content: "\10f042"; }
+
+.sys-icon.air-freshener:after, .fa-air-freshener:after {
+  content: "\10f5d0"; }
+
+.sys-icon.alarm-clock:after, .fa-alarm-clock:after {
+  content: "\10f34e"; }
+
+.sys-icon.alarm-exclamation:after, .fa-alarm-exclamation:after {
+  content: "\10f843"; }
+
+.sys-icon.alarm-plus:after, .fa-alarm-plus:after {
+  content: "\10f844"; }
+
+.sys-icon.alarm-snooze:after, .fa-alarm-snooze:after {
+  content: "\10f845"; }
+
+.sys-icon.alicorn:after, .fa-alicorn:after {
+  content: "\10f6b0"; }
+
+.sys-icon.align-center:after, .fa-align-center:after {
+  content: "\10f037"; }
+
+.sys-icon.align-justify:after, .fa-align-justify:after {
+  content: "\10f039"; }
+
+.sys-icon.align-left:after, .fa-align-left:after {
+  content: "\10f036"; }
+
+.sys-icon.align-right:after, .fa-align-right:after {
+  content: "\10f038"; }
+
+.sys-icon.align-slash:after, .fa-align-slash:after {
+  content: "\10f846"; }
+
+.sys-icon.allergies:after, .fa-allergies:after {
+  content: "\10f461"; }
+
+.sys-icon.ambulance:after, .fa-ambulance:after {
+  content: "\10f0f9"; }
+
+.sys-icon.american-sign-language-interpreting:after, .fa-american-sign-language-interpreting:after {
+  content: "\10f2a3"; }
+
+.sys-icon.analytics:after, .fa-analytics:after {
+  content: "\10f643"; }
+
+.sys-icon.anchor:after, .fa-anchor:after {
+  content: "\10f13d"; }
+
+.sys-icon.angel:after, .fa-angel:after {
+  content: "\10f779"; }
+
+.sys-icon.angle-double-down:after, .fa-angle-double-down:after {
+  content: "\10f103"; }
+
+.sys-icon.angle-double-left:after, .fa-angle-double-left:after {
+  content: "\10f100"; }
+
+.sys-icon.angle-double-right:after, .fa-angle-double-right:after {
+  content: "\10f101"; }
+
+.sys-icon.angle-double-up:after, .fa-angle-double-up:after {
+  content: "\10f102"; }
+
+.sys-icon.angle-down:after, .fa-angle-down:after {
+  content: "\10f107"; }
+
+.sys-icon.angle-left:after, .fa-angle-left:after {
+  content: "\10f104"; }
+
+.sys-icon.angle-right:after, .fa-angle-right:after {
+  content: "\10f105"; }
+
+.sys-icon.angle-up:after, .fa-angle-up:after {
+  content: "\10f106"; }
+
+.sys-icon.angry:after, .fa-angry:after {
+  content: "\10f556"; }
+
+.sys-icon.ankh:after, .fa-ankh:after {
+  content: "\10f644"; }
+
+.sys-icon.apple-alt:after, .fa-apple-alt:after {
+  content: "\10f5d1"; }
+
+.sys-icon.apple-crate:after, .fa-apple-crate:after {
+  content: "\10f6b1"; }
+
+.sys-icon.archive:after, .fa-archive:after {
+  content: "\10f187"; }
+
+.sys-icon.archway:after, .fa-archway:after {
+  content: "\10f557"; }
+
+.sys-icon.arrow-alt-circle-down:after, .fa-arrow-alt-circle-down:after {
+  content: "\10f358"; }
+
+.sys-icon.arrow-alt-circle-left:after, .fa-arrow-alt-circle-left:after {
+  content: "\10f359"; }
+
+.sys-icon.arrow-alt-circle-right:after, .fa-arrow-alt-circle-right:after {
+  content: "\10f35a"; }
+
+.sys-icon.arrow-alt-circle-up:after, .fa-arrow-alt-circle-up:after {
+  content: "\10f35b"; }
+
+.sys-icon.arrow-alt-down:after, .fa-arrow-alt-down:after {
+  content: "\10f354"; }
+
+.sys-icon.arrow-alt-from-bottom:after, .fa-arrow-alt-from-bottom:after {
+  content: "\10f346"; }
+
+.sys-icon.arrow-alt-from-left:after, .fa-arrow-alt-from-left:after {
+  content: "\10f347"; }
+
+.sys-icon.arrow-alt-from-right:after, .fa-arrow-alt-from-right:after {
+  content: "\10f348"; }
+
+.sys-icon.arrow-alt-from-top:after, .fa-arrow-alt-from-top:after {
+  content: "\10f349"; }
+
+.sys-icon.arrow-alt-left:after, .fa-arrow-alt-left:after {
+  content: "\10f355"; }
+
+.sys-icon.arrow-alt-right:after, .fa-arrow-alt-right:after {
+  content: "\10f356"; }
+
+.sys-icon.arrow-alt-square-down:after, .fa-arrow-alt-square-down:after {
+  content: "\10f350"; }
+
+.sys-icon.arrow-alt-square-left:after, .fa-arrow-alt-square-left:after {
+  content: "\10f351"; }
+
+.sys-icon.arrow-alt-square-right:after, .fa-arrow-alt-square-right:after {
+  content: "\10f352"; }
+
+.sys-icon.arrow-alt-square-up:after, .fa-arrow-alt-square-up:after {
+  content: "\10f353"; }
+
+.sys-icon.arrow-alt-to-bottom:after, .fa-arrow-alt-to-bottom:after {
+  content: "\10f34a"; }
+
+.sys-icon.arrow-alt-to-left:after, .fa-arrow-alt-to-left:after {
+  content: "\10f34b"; }
+
+.sys-icon.arrow-alt-to-right:after, .fa-arrow-alt-to-right:after {
+  content: "\10f34c"; }
+
+.sys-icon.arrow-alt-to-top:after, .fa-arrow-alt-to-top:after {
+  content: "\10f34d"; }
+
+.sys-icon.arrow-alt-up:after, .fa-arrow-alt-up:after {
+  content: "\10f357"; }
+
+.sys-icon.arrow-circle-down:after, .fa-arrow-circle-down:after {
+  content: "\10f0ab"; }
+
+.sys-icon.arrow-circle-left:after, .fa-arrow-circle-left:after {
+  content: "\10f0a8"; }
+
+.sys-icon.arrow-circle-right:after, .fa-arrow-circle-right:after {
+  content: "\10f0a9"; }
+
+.sys-icon.arrow-circle-up:after, .fa-arrow-circle-up:after {
+  content: "\10f0aa"; }
+
+.sys-icon.arrow-down:after, .fa-arrow-down:after {
+  content: "\10f063"; }
+
+.sys-icon.arrow-from-bottom:after, .fa-arrow-from-bottom:after {
+  content: "\10f342"; }
+
+.sys-icon.arrow-from-left:after, .fa-arrow-from-left:after {
+  content: "\10f343"; }
+
+.sys-icon.arrow-from-right:after, .fa-arrow-from-right:after {
+  content: "\10f344"; }
+
+.sys-icon.arrow-from-top:after, .fa-arrow-from-top:after {
+  content: "\10f345"; }
+
+.sys-icon.arrow-left:after, .fa-arrow-left:after {
+  content: "\10f060"; }
+
+.sys-icon.arrow-right:after, .fa-arrow-right:after {
+  content: "\10f061"; }
+
+.sys-icon.arrow-square-down:after, .fa-arrow-square-down:after {
+  content: "\10f339"; }
+
+.sys-icon.arrow-square-left:after, .fa-arrow-square-left:after {
+  content: "\10f33a"; }
+
+.sys-icon.arrow-square-right:after, .fa-arrow-square-right:after {
+  content: "\10f33b"; }
+
+.sys-icon.arrow-square-up:after, .fa-arrow-square-up:after {
+  content: "\10f33c"; }
+
+.sys-icon.arrow-to-bottom:after, .fa-arrow-to-bottom:after {
+  content: "\10f33d"; }
+
+.sys-icon.arrow-to-left:after, .fa-arrow-to-left:after {
+  content: "\10f33e"; }
+
+.sys-icon.arrow-to-right:after, .fa-arrow-to-right:after {
+  content: "\10f340"; }
+
+.sys-icon.arrow-to-top:after, .fa-arrow-to-top:after {
+  content: "\10f341"; }
+
+.sys-icon.arrow-up:after, .fa-arrow-up:after {
+  content: "\10f062"; }
+
+.sys-icon.arrows:after, .fa-arrows:after {
+  content: "\10f047"; }
+
+.sys-icon.move:after, .sys-icon.arrows-alt:after, .fa-arrows-alt:after {
+  content: "\10f0b2"; }
+
+.sys-icon.arrows-alt-h:after, .fa-arrows-alt-h:after {
+  content: "\10f337"; }
+
+.sys-icon.arrows-alt-v:after, .fa-arrows-alt-v:after {
+  content: "\10f338"; }
+
+.sys-icon.arrows-h:after, .fa-arrows-h:after {
+  content: "\10f07e"; }
+
+.sys-icon.arrows-v:after, .fa-arrows-v:after {
+  content: "\10f07d"; }
+
+.sys-icon.assistive-listening-systems:after, .fa-assistive-listening-systems:after {
+  content: "\10f2a2"; }
+
+.sys-icon.asterisk:after, .fa-asterisk:after {
+  content: "\10f069"; }
+
+.sys-icon.at:after, .fa-at:after {
+  content: "\10f1fa"; }
+
+.sys-icon.atlas:after, .fa-atlas:after {
+  content: "\10f558"; }
+
+.sys-icon.atom:after, .fa-atom:after {
+  content: "\10f5d2"; }
+
+.sys-icon.atom-alt:after, .fa-atom-alt:after {
+  content: "\10f5d3"; }
+
+.sys-icon.audio-description:after, .fa-audio-description:after {
+  content: "\10f29e"; }
+
+.sys-icon.award:after, .fa-award:after {
+  content: "\10f559"; }
+
+.sys-icon.axe:after, .fa-axe:after {
+  content: "\10f6b2"; }
+
+.sys-icon.axe-battle:after, .fa-axe-battle:after {
+  content: "\10f6b3"; }
+
+.sys-icon.baby:after, .fa-baby:after {
+  content: "\10f77c"; }
+
+.sys-icon.baby-carriage:after, .fa-baby-carriage:after {
+  content: "\10f77d"; }
+
+.sys-icon.backpack:after, .fa-backpack:after {
+  content: "\10f5d4"; }
+
+.sys-icon.backspace:after, .fa-backspace:after {
+  content: "\10f55a"; }
+
+.sys-icon.backward:after, .fa-backward:after {
+  content: "\10f04a"; }
+
+.sys-icon.bacon:after, .fa-bacon:after {
+  content: "\10f7e5"; }
+
+.sys-icon.badge:after, .fa-badge:after {
+  content: "\10f335"; }
+
+.sys-icon.badge-check:after, .fa-badge-check:after {
+  content: "\10f336"; }
+
+.sys-icon.badge-dollar:after, .fa-badge-dollar:after {
+  content: "\10f645"; }
+
+.sys-icon.badge-percent:after, .fa-badge-percent:after {
+  content: "\10f646"; }
+
+.sys-icon.badger-honey:after, .fa-badger-honey:after {
+  content: "\10f6b4"; }
+
+.sys-icon.bags-shopping:after, .fa-bags-shopping:after {
+  content: "\10f847"; }
+
+.sys-icon.balance-scale:after, .fa-balance-scale:after {
+  content: "\10f24e"; }
+
+.sys-icon.balance-scale-left:after, .fa-balance-scale-left:after {
+  content: "\10f515"; }
+
+.sys-icon.balance-scale-right:after, .fa-balance-scale-right:after {
+  content: "\10f516"; }
+
+.sys-icon.ball-pile:after, .fa-ball-pile:after {
+  content: "\10f77e"; }
+
+.sys-icon.ballot:after, .fa-ballot:after {
+  content: "\10f732"; }
+
+.sys-icon.ballot-check:after, .fa-ballot-check:after {
+  content: "\10f733"; }
+
+.sys-icon.ban:after, .fa-ban:after {
+  content: "\10f05e"; }
+
+.sys-icon.band-aid:after, .fa-band-aid:after {
+  content: "\10f462"; }
+
+.sys-icon.barcode:after, .fa-barcode:after {
+  content: "\10f02a"; }
+
+.sys-icon.barcode-alt:after, .fa-barcode-alt:after {
+  content: "\10f463"; }
+
+.sys-icon.barcode-read:after, .fa-barcode-read:after {
+  content: "\10f464"; }
+
+.sys-icon.barcode-scan:after, .fa-barcode-scan:after {
+  content: "\10f465"; }
+
+.sys-icon.bars:after, .fa-bars:after {
+  content: "\10f0c9"; }
+
+.sys-icon.baseball:after, .fa-baseball:after {
+  content: "\10f432"; }
+
+.sys-icon.baseball-ball:after, .fa-baseball-ball:after {
+  content: "\10f433"; }
+
+.sys-icon.basketball-ball:after, .fa-basketball-ball:after {
+  content: "\10f434"; }
+
+.sys-icon.basketball-hoop:after, .fa-basketball-hoop:after {
+  content: "\10f435"; }
+
+.sys-icon.bat:after, .fa-bat:after {
+  content: "\10f6b5"; }
+
+.sys-icon.bath:after, .fa-bath:after {
+  content: "\10f2cd"; }
+
+.sys-icon.battery-bolt:after, .fa-battery-bolt:after {
+  content: "\10f376"; }
+
+.sys-icon.battery-empty:after, .fa-battery-empty:after {
+  content: "\10f244"; }
+
+.sys-icon.battery-full:after, .fa-battery-full:after {
+  content: "\10f240"; }
+
+.sys-icon.battery-half:after, .fa-battery-half:after {
+  content: "\10f242"; }
+
+.sys-icon.battery-quarter:after, .fa-battery-quarter:after {
+  content: "\10f243"; }
+
+.sys-icon.battery-slash:after, .fa-battery-slash:after {
+  content: "\10f377"; }
+
+.sys-icon.battery-three-quarters:after, .fa-battery-three-quarters:after {
+  content: "\10f241"; }
+
+.sys-icon.bed:after, .fa-bed:after {
+  content: "\10f236"; }
+
+.sys-icon.beer:after, .fa-beer:after {
+  content: "\10f0fc"; }
+
+.sys-icon.bell:after, .fa-bell:after {
+  content: "\10f0f3"; }
+
+.sys-icon.bell-exclamation:after, .fa-bell-exclamation:after {
+  content: "\10f848"; }
+
+.sys-icon.bell-plus:after, .fa-bell-plus:after {
+  content: "\10f849"; }
+
+.sys-icon.bell-school:after, .fa-bell-school:after {
+  content: "\10f5d5"; }
+
+.sys-icon.bell-school-slash:after, .fa-bell-school-slash:after {
+  content: "\10f5d6"; }
+
+.sys-icon.bell-slash:after, .fa-bell-slash:after {
+  content: "\10f1f6"; }
+
+.sys-icon.bells:after, .fa-bells:after {
+  content: "\10f77f"; }
+
+.sys-icon.bezier-curve:after, .fa-bezier-curve:after {
+  content: "\10f55b"; }
+
+.sys-icon.bible:after, .fa-bible:after {
+  content: "\10f647"; }
+
+.sys-icon.bicycle:after, .fa-bicycle:after {
+  content: "\10f206"; }
+
+.sys-icon.biking:after, .fa-biking:after {
+  content: "\10f84a"; }
+
+.sys-icon.biking-mountain:after, .fa-biking-mountain:after {
+  content: "\10f84b"; }
+
+.sys-icon.binoculars:after, .fa-binoculars:after {
+  content: "\10f1e5"; }
+
+.sys-icon.biohazard:after, .fa-biohazard:after {
+  content: "\10f780"; }
+
+.sys-icon.birthday-cake:after, .fa-birthday-cake:after {
+  content: "\10f1fd"; }
+
+.sys-icon.blanket:after, .fa-blanket:after {
+  content: "\10f498"; }
+
+.sys-icon.blender:after, .fa-blender:after {
+  content: "\10f517"; }
+
+.sys-icon.blender-phone:after, .fa-blender-phone:after {
+  content: "\10f6b6"; }
+
+.sys-icon.blind:after, .fa-blind:after {
+  content: "\10f29d"; }
+
+.sys-icon.blog:after, .fa-blog:after {
+  content: "\10f781"; }
+
+.sys-icon.bold:after, .fa-bold:after {
+  content: "\10f032"; }
+
+.sys-icon.bolt:after, .fa-bolt:after {
+  content: "\10f0e7"; }
+
+.sys-icon.bomb:after, .fa-bomb:after {
+  content: "\10f1e2"; }
+
+.sys-icon.bone:after, .fa-bone:after {
+  content: "\10f5d7"; }
+
+.sys-icon.bone-break:after, .fa-bone-break:after {
+  content: "\10f5d8"; }
+
+.sys-icon.bong:after, .fa-bong:after {
+  content: "\10f55c"; }
+
+.sys-icon.book:after, .fa-book:after {
+  content: "\10f02d"; }
+
+.sys-icon.book-alt:after, .fa-book-alt:after {
+  content: "\10f5d9"; }
+
+.sys-icon.book-dead:after, .fa-book-dead:after {
+  content: "\10f6b7"; }
+
+.sys-icon.book-heart:after, .fa-book-heart:after {
+  content: "\10f499"; }
+
+.sys-icon.book-medical:after, .fa-book-medical:after {
+  content: "\10f7e6"; }
+
+.sys-icon.book-open:after, .fa-book-open:after {
+  content: "\10f518"; }
+
+.sys-icon.book-reader:after, .fa-book-reader:after {
+  content: "\10f5da"; }
+
+.sys-icon.book-spells:after, .fa-book-spells:after {
+  content: "\10f6b8"; }
+
+.sys-icon.book-user:after, .fa-book-user:after {
+  content: "\10f7e7"; }
+
+.sys-icon.bookmark:after, .fa-bookmark:after {
+  content: "\10f02e"; }
+
+.sys-icon.books:after, .fa-books:after {
+  content: "\10f5db"; }
+
+.sys-icon.books-medical:after, .fa-books-medical:after {
+  content: "\10f7e8"; }
+
+.sys-icon.boot:after, .fa-boot:after {
+  content: "\10f782"; }
+
+.sys-icon.booth-curtain:after, .fa-booth-curtain:after {
+  content: "\10f734"; }
+
+.sys-icon.border-all:after, .fa-border-all:after {
+  content: "\10f84c"; }
+
+.sys-icon.border-bottom:after, .fa-border-bottom:after {
+  content: "\10f84d"; }
+
+.sys-icon.border-center-h:after, .fa-border-center-h:after {
+  content: "\10f89c"; }
+
+.sys-icon.border-center-v:after, .fa-border-center-v:after {
+  content: "\10f89d"; }
+
+.sys-icon.border-inner:after, .fa-border-inner:after {
+  content: "\10f84e"; }
+
+.sys-icon.border-left:after, .fa-border-left:after {
+  content: "\10f84f"; }
+
+.sys-icon.border-none:after, .fa-border-none:after {
+  content: "\10f850"; }
+
+.sys-icon.border-outer:after, .fa-border-outer:after {
+  content: "\10f851"; }
+
+.sys-icon.border-right:after, .fa-border-right:after {
+  content: "\10f852"; }
+
+.sys-icon.border-style:after, .fa-border-style:after {
+  content: "\10f853"; }
+
+.sys-icon.border-style-alt:after, .fa-border-style-alt:after {
+  content: "\10f854"; }
+
+.sys-icon.border-top:after, .fa-border-top:after {
+  content: "\10f855"; }
+
+.sys-icon.bow-arrow:after, .fa-bow-arrow:after {
+  content: "\10f6b9"; }
+
+.sys-icon.bowling-ball:after, .fa-bowling-ball:after {
+  content: "\10f436"; }
+
+.sys-icon.bowling-pins:after, .fa-bowling-pins:after {
+  content: "\10f437"; }
+
+.sys-icon.box:after, .fa-box:after {
+  content: "\10f466"; }
+
+.sys-icon.box-alt:after, .fa-box-alt:after {
+  content: "\10f49a"; }
+
+.sys-icon.box-ballot:after, .fa-box-ballot:after {
+  content: "\10f735"; }
+
+.sys-icon.box-check:after, .fa-box-check:after {
+  content: "\10f467"; }
+
+.sys-icon.box-fragile:after, .fa-box-fragile:after {
+  content: "\10f49b"; }
+
+.sys-icon.box-full:after, .fa-box-full:after {
+  content: "\10f49c"; }
+
+.sys-icon.box-heart:after, .fa-box-heart:after {
+  content: "\10f49d"; }
+
+.sys-icon.box-open:after, .fa-box-open:after {
+  content: "\10f49e"; }
+
+.sys-icon.box-up:after, .fa-box-up:after {
+  content: "\10f49f"; }
+
+.sys-icon.box-usd:after, .fa-box-usd:after {
+  content: "\10f4a0"; }
+
+.sys-icon.boxes:after, .fa-boxes:after {
+  content: "\10f468"; }
+
+.sys-icon.boxes-alt:after, .fa-boxes-alt:after {
+  content: "\10f4a1"; }
+
+.sys-icon.boxing-glove:after, .fa-boxing-glove:after {
+  content: "\10f438"; }
+
+.sys-icon.brackets:after, .fa-brackets:after {
+  content: "\10f7e9"; }
+
+.sys-icon.brackets-curly:after, .fa-brackets-curly:after {
+  content: "\10f7ea"; }
+
+.sys-icon.braille:after, .fa-braille:after {
+  content: "\10f2a1"; }
+
+.sys-icon.brain:after, .fa-brain:after {
+  content: "\10f5dc"; }
+
+.sys-icon.bread-loaf:after, .fa-bread-loaf:after {
+  content: "\10f7eb"; }
+
+.sys-icon.bread-slice:after, .fa-bread-slice:after {
+  content: "\10f7ec"; }
+
+.sys-icon.briefcase:after, .fa-briefcase:after {
+  content: "\10f0b1"; }
+
+.sys-icon.briefcase-medical:after, .fa-briefcase-medical:after {
+  content: "\10f469"; }
+
+.sys-icon.bring-forward:after, .fa-bring-forward:after {
+  content: "\10f856"; }
+
+.sys-icon.bring-front:after, .fa-bring-front:after {
+  content: "\10f857"; }
+
+.sys-icon.broadcast-tower:after, .fa-broadcast-tower:after {
+  content: "\10f519"; }
+
+.sys-icon.broom:after, .fa-broom:after {
+  content: "\10f51a"; }
+
+.sys-icon.browser:after, .fa-browser:after {
+  content: "\10f37e"; }
+
+.sys-icon.brush:after, .fa-brush:after {
+  content: "\10f55d"; }
+
+.sys-icon.bug:after, .fa-bug:after {
+  content: "\10f188"; }
+
+.sys-icon.building:after, .fa-building:after {
+  content: "\10f1ad"; }
+
+.sys-icon.bullhorn:after, .fa-bullhorn:after {
+  content: "\10f0a1"; }
+
+.sys-icon.bullseye:after, .fa-bullseye:after {
+  content: "\10f140"; }
+
+.sys-icon.bullseye-arrow:after, .fa-bullseye-arrow:after {
+  content: "\10f648"; }
+
+.sys-icon.bullseye-pointer:after, .fa-bullseye-pointer:after {
+  content: "\10f649"; }
+
+.sys-icon.burger-soda:after, .fa-burger-soda:after {
+  content: "\10f858"; }
+
+.sys-icon.burn:after, .fa-burn:after {
+  content: "\10f46a"; }
+
+.sys-icon.burrito:after, .fa-burrito:after {
+  content: "\10f7ed"; }
+
+.sys-icon.bus:after, .fa-bus:after {
+  content: "\10f207"; }
+
+.sys-icon.bus-alt:after, .fa-bus-alt:after {
+  content: "\10f55e"; }
+
+.sys-icon.bus-school:after, .fa-bus-school:after {
+  content: "\10f5dd"; }
+
+.sys-icon.business-time:after, .fa-business-time:after {
+  content: "\10f64a"; }
+
+.sys-icon.cabinet-filing:after, .fa-cabinet-filing:after {
+  content: "\10f64b"; }
+
+.sys-icon.calculator:after, .fa-calculator:after {
+  content: "\10f1ec"; }
+
+.sys-icon.calculator-alt:after, .fa-calculator-alt:after {
+  content: "\10f64c"; }
+
+.sys-icon.calendar:after, .fa-calendar:after {
+  content: "\10f133"; }
+
+.sys-icon.calendar-alt:after, .fa-calendar-alt:after {
+  content: "\10f073"; }
+
+.sys-icon.calendar-check:after, .fa-calendar-check:after {
+  content: "\10f274"; }
+
+.sys-icon.calendar-day:after, .fa-calendar-day:after {
+  content: "\10f783"; }
+
+.sys-icon.calendar-edit:after, .fa-calendar-edit:after {
+  content: "\10f333"; }
+
+.sys-icon.calendar-exclamation:after, .fa-calendar-exclamation:after {
+  content: "\10f334"; }
+
+.sys-icon.calendar-minus:after, .fa-calendar-minus:after {
+  content: "\10f272"; }
+
+.sys-icon.calendar-plus:after, .fa-calendar-plus:after {
+  content: "\10f271"; }
+
+.sys-icon.calendar-star:after, .fa-calendar-star:after {
+  content: "\10f736"; }
+
+.sys-icon.calendar-times:after, .fa-calendar-times:after {
+  content: "\10f273"; }
+
+.sys-icon.calendar-week:after, .fa-calendar-week:after {
+  content: "\10f784"; }
+
+.sys-icon.camera:after, .fa-camera:after {
+  content: "\10f030"; }
+
+.sys-icon.camera-alt:after, .fa-camera-alt:after {
+  content: "\10f332"; }
+
+.sys-icon.camera-retro:after, .fa-camera-retro:after {
+  content: "\10f083"; }
+
+.sys-icon.campfire:after, .fa-campfire:after {
+  content: "\10f6ba"; }
+
+.sys-icon.campground:after, .fa-campground:after {
+  content: "\10f6bb"; }
+
+.sys-icon.candle-holder:after, .fa-candle-holder:after {
+  content: "\10f6bc"; }
+
+.sys-icon.candy-cane:after, .fa-candy-cane:after {
+  content: "\10f786"; }
+
+.sys-icon.candy-corn:after, .fa-candy-corn:after {
+  content: "\10f6bd"; }
+
+.sys-icon.cannabis:after, .fa-cannabis:after {
+  content: "\10f55f"; }
+
+.sys-icon.capsules:after, .fa-capsules:after {
+  content: "\10f46b"; }
+
+.sys-icon.car:after, .fa-car:after {
+  content: "\10f1b9"; }
+
+.sys-icon.car-alt:after, .fa-car-alt:after {
+  content: "\10f5de"; }
+
+.sys-icon.car-battery:after, .fa-car-battery:after {
+  content: "\10f5df"; }
+
+.sys-icon.car-building:after, .fa-car-building:after {
+  content: "\10f859"; }
+
+.sys-icon.car-bump:after, .fa-car-bump:after {
+  content: "\10f5e0"; }
+
+.sys-icon.car-bus:after, .fa-car-bus:after {
+  content: "\10f85a"; }
+
+.sys-icon.car-crash:after, .fa-car-crash:after {
+  content: "\10f5e1"; }
+
+.sys-icon.car-garage:after, .fa-car-garage:after {
+  content: "\10f5e2"; }
+
+.sys-icon.car-mechanic:after, .fa-car-mechanic:after {
+  content: "\10f5e3"; }
+
+.sys-icon.car-side:after, .fa-car-side:after {
+  content: "\10f5e4"; }
+
+.sys-icon.car-tilt:after, .fa-car-tilt:after {
+  content: "\10f5e5"; }
+
+.sys-icon.car-wash:after, .fa-car-wash:after {
+  content: "\10f5e6"; }
+
+.sys-icon.caret-circle-down:after, .fa-caret-circle-down:after {
+  content: "\10f32d"; }
+
+.sys-icon.caret-circle-left:after, .fa-caret-circle-left:after {
+  content: "\10f32e"; }
+
+.sys-icon.caret-circle-right:after, .fa-caret-circle-right:after {
+  content: "\10f330"; }
+
+.sys-icon.caret-circle-up:after, .fa-caret-circle-up:after {
+  content: "\10f331"; }
+
+.sys-icon.caret-down:after, .fa-caret-down:after {
+  content: "\10f0d7"; }
+
+.sys-icon.caret-left:after, .fa-caret-left:after {
+  content: "\10f0d9"; }
+
+.sys-icon.caret-right:after, .fa-caret-right:after {
+  content: "\10f0da"; }
+
+.sys-icon.caret-square-down:after, .fa-caret-square-down:after {
+  content: "\10f150"; }
+
+.sys-icon.caret-square-left:after, .fa-caret-square-left:after {
+  content: "\10f191"; }
+
+.sys-icon.caret-square-right:after, .fa-caret-square-right:after {
+  content: "\10f152"; }
+
+.sys-icon.caret-square-up:after, .fa-caret-square-up:after {
+  content: "\10f151"; }
+
+.sys-icon.caret-up:after, .fa-caret-up:after {
+  content: "\10f0d8"; }
+
+.sys-icon.carrot:after, .fa-carrot:after {
+  content: "\10f787"; }
+
+.sys-icon.cars:after, .fa-cars:after {
+  content: "\10f85b"; }
+
+.sys-icon.cart-arrow-down:after, .fa-cart-arrow-down:after {
+  content: "\10f218"; }
+
+.sys-icon.cart-plus:after, .fa-cart-plus:after {
+  content: "\10f217"; }
+
+.sys-icon.cash-register:after, .fa-cash-register:after {
+  content: "\10f788"; }
+
+.sys-icon.cat:after, .fa-cat:after {
+  content: "\10f6be"; }
+
+.sys-icon.cauldron:after, .fa-cauldron:after {
+  content: "\10f6bf"; }
+
+.sys-icon.certificate:after, .fa-certificate:after {
+  content: "\10f0a3"; }
+
+.sys-icon.chair:after, .fa-chair:after {
+  content: "\10f6c0"; }
+
+.sys-icon.chair-office:after, .fa-chair-office:after {
+  content: "\10f6c1"; }
+
+.sys-icon.chalkboard:after, .fa-chalkboard:after {
+  content: "\10f51b"; }
+
+.sys-icon.chalkboard-teacher:after, .fa-chalkboard-teacher:after {
+  content: "\10f51c"; }
+
+.sys-icon.charging-station:after, .fa-charging-station:after {
+  content: "\10f5e7"; }
+
+.sys-icon.chart-area:after, .fa-chart-area:after {
+  content: "\10f1fe"; }
+
+.sys-icon.chart-bar:after, .fa-chart-bar:after {
+  content: "\10f080"; }
+
+.sys-icon.chart-line:after, .fa-chart-line:after {
+  content: "\10f201"; }
+
+.sys-icon.chart-line-down:after, .fa-chart-line-down:after {
+  content: "\10f64d"; }
+
+.sys-icon.chart-network:after, .fa-chart-network:after {
+  content: "\10f78a"; }
+
+.sys-icon.chart-pie:after, .fa-chart-pie:after {
+  content: "\10f200"; }
+
+.sys-icon.chart-pie-alt:after, .fa-chart-pie-alt:after {
+  content: "\10f64e"; }
+
+.sys-icon.chart-scatter:after, .fa-chart-scatter:after {
+  content: "\10f7ee"; }
+
+.sys-icon.check:after, .fa-check:after {
+  content: "\10f00c"; }
+
+.sys-icon.check-circle:after, .fa-check-circle:after {
+  content: "\10f058"; }
+
+.sys-icon.check-double:after, .fa-check-double:after {
+  content: "\10f560"; }
+
+.sys-icon.check-square:after, .fa-check-square:after {
+  content: "\10f14a"; }
+
+.sys-icon.cheese:after, .fa-cheese:after {
+  content: "\10f7ef"; }
+
+.sys-icon.cheese-swiss:after, .fa-cheese-swiss:after {
+  content: "\10f7f0"; }
+
+.sys-icon.cheeseburger:after, .fa-cheeseburger:after {
+  content: "\10f7f1"; }
+
+.sys-icon.chess:after, .fa-chess:after {
+  content: "\10f439"; }
+
+.sys-icon.chess-bishop:after, .fa-chess-bishop:after {
+  content: "\10f43a"; }
+
+.sys-icon.chess-bishop-alt:after, .fa-chess-bishop-alt:after {
+  content: "\10f43b"; }
+
+.sys-icon.chess-board:after, .fa-chess-board:after {
+  content: "\10f43c"; }
+
+.sys-icon.chess-clock:after, .fa-chess-clock:after {
+  content: "\10f43d"; }
+
+.sys-icon.chess-clock-alt:after, .fa-chess-clock-alt:after {
+  content: "\10f43e"; }
+
+.sys-icon.chess-king:after, .fa-chess-king:after {
+  content: "\10f43f"; }
+
+.sys-icon.chess-king-alt:after, .fa-chess-king-alt:after {
+  content: "\10f440"; }
+
+.sys-icon.chess-knight:after, .fa-chess-knight:after {
+  content: "\10f441"; }
+
+.sys-icon.chess-knight-alt:after, .fa-chess-knight-alt:after {
+  content: "\10f442"; }
+
+.sys-icon.chess-pawn:after, .fa-chess-pawn:after {
+  content: "\10f443"; }
+
+.sys-icon.chess-pawn-alt:after, .fa-chess-pawn-alt:after {
+  content: "\10f444"; }
+
+.sys-icon.chess-queen:after, .fa-chess-queen:after {
+  content: "\10f445"; }
+
+.sys-icon.chess-queen-alt:after, .fa-chess-queen-alt:after {
+  content: "\10f446"; }
+
+.sys-icon.chess-rook:after, .fa-chess-rook:after {
+  content: "\10f447"; }
+
+.sys-icon.chess-rook-alt:after, .fa-chess-rook-alt:after {
+  content: "\10f448"; }
+
+.sys-icon.chevron-circle-down:after, .fa-chevron-circle-down:after {
+  content: "\10f13a"; }
+
+.sys-icon.chevron-circle-left:after, .fa-chevron-circle-left:after {
+  content: "\10f137"; }
+
+.sys-icon.chevron-circle-right:after, .fa-chevron-circle-right:after {
+  content: "\10f138"; }
+
+.sys-icon.chevron-circle-up:after, .fa-chevron-circle-up:after {
+  content: "\10f139"; }
+
+.sys-icon.chevron-double-down:after, .fa-chevron-double-down:after {
+  content: "\10f322"; }
+
+.sys-icon.chevron-double-left:after, .fa-chevron-double-left:after {
+  content: "\10f323"; }
+
+.sys-icon.chevron-double-right:after, .fa-chevron-double-right:after {
+  content: "\10f324"; }
+
+.sys-icon.chevron-double-up:after, .fa-chevron-double-up:after {
+  content: "\10f325"; }
+
+.sys-icon.chevron-down:after, .fa-chevron-down:after {
+  content: "\10f078"; }
+
+.sys-icon.chevron-left:after, .fa-chevron-left:after {
+  content: "\10f053"; }
+
+.sys-icon.chevron-right:after, .fa-chevron-right:after {
+  content: "\10f054"; }
+
+.sys-icon.chevron-square-down:after, .fa-chevron-square-down:after {
+  content: "\10f329"; }
+
+.sys-icon.chevron-square-left:after, .fa-chevron-square-left:after {
+  content: "\10f32a"; }
+
+.sys-icon.chevron-square-right:after, .fa-chevron-square-right:after {
+  content: "\10f32b"; }
+
+.sys-icon.chevron-square-up:after, .fa-chevron-square-up:after {
+  content: "\10f32c"; }
+
+.sys-icon.chevron-up:after, .fa-chevron-up:after {
+  content: "\10f077"; }
+
+.sys-icon.child:after, .fa-child:after {
+  content: "\10f1ae"; }
+
+.sys-icon.chimney:after, .fa-chimney:after {
+  content: "\10f78b"; }
+
+.sys-icon.church:after, .fa-church:after {
+  content: "\10f51d"; }
+
+.sys-icon.circle:after, .fa-circle:after {
+  content: "\10f111"; }
+
+.sys-icon.circle-notch:after, .fa-circle-notch:after {
+  content: "\10f1ce"; }
+
+.sys-icon.city:after, .fa-city:after {
+  content: "\10f64f"; }
+
+.sys-icon.claw-marks:after, .fa-claw-marks:after {
+  content: "\10f6c2"; }
+
+.sys-icon.clinic-medical:after, .fa-clinic-medical:after {
+  content: "\10f7f2"; }
+
+.sys-icon.clipboard:after, .fa-clipboard:after {
+  content: "\10f328"; }
+
+.sys-icon.clipboard-check:after, .fa-clipboard-check:after {
+  content: "\10f46c"; }
+
+.sys-icon.clipboard-list:after, .fa-clipboard-list:after {
+  content: "\10f46d"; }
+
+.sys-icon.clipboard-list-check:after, .fa-clipboard-list-check:after {
+  content: "\10f737"; }
+
+.sys-icon.clipboard-prescription:after, .fa-clipboard-prescription:after {
+  content: "\10f5e8"; }
+
+.sys-icon.clipboard-user:after, .fa-clipboard-user:after {
+  content: "\10f7f3"; }
+
+.sys-icon.clock:after, .fa-clock:after {
+  content: "\10f017"; }
+
+.sys-icon.clone:after, .fa-clone:after {
+  content: "\10f24d"; }
+
+.sys-icon.closed-captioning:after, .fa-closed-captioning:after {
+  content: "\10f20a"; }
+
+.sys-icon.cloud:after, .fa-cloud:after {
+  content: "\10f0c2"; }
+
+.sys-icon.cloud-download:after, .fa-cloud-download:after {
+  content: "\10f0ed"; }
+
+.sys-icon.cloud-download-alt:after, .fa-cloud-download-alt:after {
+  content: "\10f381"; }
+
+.sys-icon.cloud-drizzle:after, .fa-cloud-drizzle:after {
+  content: "\10f738"; }
+
+.sys-icon.cloud-hail:after, .fa-cloud-hail:after {
+  content: "\10f739"; }
+
+.sys-icon.cloud-hail-mixed:after, .fa-cloud-hail-mixed:after {
+  content: "\10f73a"; }
+
+.sys-icon.cloud-meatball:after, .fa-cloud-meatball:after {
+  content: "\10f73b"; }
+
+.sys-icon.cloud-moon:after, .fa-cloud-moon:after {
+  content: "\10f6c3"; }
+
+.sys-icon.cloud-moon-rain:after, .fa-cloud-moon-rain:after {
+  content: "\10f73c"; }
+
+.sys-icon.cloud-rain:after, .fa-cloud-rain:after {
+  content: "\10f73d"; }
+
+.sys-icon.cloud-rainbow:after, .fa-cloud-rainbow:after {
+  content: "\10f73e"; }
+
+.sys-icon.cloud-showers:after, .fa-cloud-showers:after {
+  content: "\10f73f"; }
+
+.sys-icon.cloud-showers-heavy:after, .fa-cloud-showers-heavy:after {
+  content: "\10f740"; }
+
+.sys-icon.cloud-sleet:after, .fa-cloud-sleet:after {
+  content: "\10f741"; }
+
+.sys-icon.cloud-snow:after, .fa-cloud-snow:after {
+  content: "\10f742"; }
+
+.sys-icon.cloud-sun:after, .fa-cloud-sun:after {
+  content: "\10f6c4"; }
+
+.sys-icon.cloud-sun-rain:after, .fa-cloud-sun-rain:after {
+  content: "\10f743"; }
+
+.sys-icon.cloud-upload:after, .fa-cloud-upload:after {
+  content: "\10f0ee"; }
+
+.sys-icon.cloud-upload-alt:after, .fa-cloud-upload-alt:after {
+  content: "\10f382"; }
+
+.sys-icon.clouds:after, .fa-clouds:after {
+  content: "\10f744"; }
+
+.sys-icon.clouds-moon:after, .fa-clouds-moon:after {
+  content: "\10f745"; }
+
+.sys-icon.clouds-sun:after, .fa-clouds-sun:after {
+  content: "\10f746"; }
+
+.sys-icon.club:after, .fa-club:after {
+  content: "\10f327"; }
+
+.sys-icon.cocktail:after, .fa-cocktail:after {
+  content: "\10f561"; }
+
+.sys-icon.code:after, .fa-code:after {
+  content: "\10f121"; }
+
+.sys-icon.code-branch:after, .fa-code-branch:after {
+  content: "\10f126"; }
+
+.sys-icon.code-commit:after, .fa-code-commit:after {
+  content: "\10f386"; }
+
+.sys-icon.code-merge:after, .fa-code-merge:after {
+  content: "\10f387"; }
+
+.sys-icon.coffee:after, .fa-coffee:after {
+  content: "\10f0f4"; }
+
+.sys-icon.coffee-togo:after, .fa-coffee-togo:after {
+  content: "\10f6c5"; }
+
+.sys-icon.coffin:after, .fa-coffin:after {
+  content: "\10f6c6"; }
+
+.sys-icon.cog:after, .fa-cog:after {
+  content: "\10f013"; }
+
+.sys-icon.cogs:after, .fa-cogs:after {
+  content: "\10f085"; }
+
+.sys-icon.coin:after, .fa-coin:after {
+  content: "\10f85c"; }
+
+.sys-icon.coins:after, .fa-coins:after {
+  content: "\10f51e"; }
+
+.sys-icon.columns:after, .fa-columns:after {
+  content: "\10f0db"; }
+
+.sys-icon.comment:after, .fa-comment:after {
+  content: "\10f075"; }
+
+.sys-icon.comment-alt:after, .fa-comment-alt:after {
+  content: "\10f27a"; }
+
+.sys-icon.comment-alt-check:after, .fa-comment-alt-check:after {
+  content: "\10f4a2"; }
+
+.sys-icon.comment-alt-dollar:after, .fa-comment-alt-dollar:after {
+  content: "\10f650"; }
+
+.sys-icon.comment-alt-dots:after, .fa-comment-alt-dots:after {
+  content: "\10f4a3"; }
+
+.sys-icon.comment-alt-edit:after, .fa-comment-alt-edit:after {
+  content: "\10f4a4"; }
+
+.sys-icon.comment-alt-exclamation:after, .fa-comment-alt-exclamation:after {
+  content: "\10f4a5"; }
+
+.sys-icon.comment-alt-lines:after, .fa-comment-alt-lines:after {
+  content: "\10f4a6"; }
+
+.sys-icon.comment-alt-medical:after, .fa-comment-alt-medical:after {
+  content: "\10f7f4"; }
+
+.sys-icon.comment-alt-minus:after, .fa-comment-alt-minus:after {
+  content: "\10f4a7"; }
+
+.sys-icon.comment-alt-plus:after, .fa-comment-alt-plus:after {
+  content: "\10f4a8"; }
+
+.sys-icon.comment-alt-slash:after, .fa-comment-alt-slash:after {
+  content: "\10f4a9"; }
+
+.sys-icon.comment-alt-smile:after, .fa-comment-alt-smile:after {
+  content: "\10f4aa"; }
+
+.sys-icon.comment-alt-times:after, .fa-comment-alt-times:after {
+  content: "\10f4ab"; }
+
+.sys-icon.comment-check:after, .fa-comment-check:after {
+  content: "\10f4ac"; }
+
+.sys-icon.comment-dollar:after, .fa-comment-dollar:after {
+  content: "\10f651"; }
+
+.sys-icon.comment-dots:after, .fa-comment-dots:after {
+  content: "\10f4ad"; }
+
+.sys-icon.comment-edit:after, .fa-comment-edit:after {
+  content: "\10f4ae"; }
+
+.sys-icon.comment-exclamation:after, .fa-comment-exclamation:after {
+  content: "\10f4af"; }
+
+.sys-icon.comment-lines:after, .fa-comment-lines:after {
+  content: "\10f4b0"; }
+
+.sys-icon.comment-medical:after, .fa-comment-medical:after {
+  content: "\10f7f5"; }
+
+.sys-icon.comment-minus:after, .fa-comment-minus:after {
+  content: "\10f4b1"; }
+
+.sys-icon.comment-plus:after, .fa-comment-plus:after {
+  content: "\10f4b2"; }
+
+.sys-icon.comment-slash:after, .fa-comment-slash:after {
+  content: "\10f4b3"; }
+
+.sys-icon.comment-smile:after, .fa-comment-smile:after {
+  content: "\10f4b4"; }
+
+.sys-icon.comment-times:after, .fa-comment-times:after {
+  content: "\10f4b5"; }
+
+.sys-icon.comments:after, .fa-comments:after {
+  content: "\10f086"; }
+
+.sys-icon.comments-alt:after, .fa-comments-alt:after {
+  content: "\10f4b6"; }
+
+.sys-icon.comments-alt-dollar:after, .fa-comments-alt-dollar:after {
+  content: "\10f652"; }
+
+.sys-icon.comments-dollar:after, .fa-comments-dollar:after {
+  content: "\10f653"; }
+
+.sys-icon.compact-disc:after, .fa-compact-disc:after {
+  content: "\10f51f"; }
+
+.sys-icon.compass:after, .fa-compass:after {
+  content: "\10f14e"; }
+
+.sys-icon.compass-slash:after, .fa-compass-slash:after {
+  content: "\10f5e9"; }
+
+.sys-icon.compress:after, .fa-compress:after {
+  content: "\10f066"; }
+
+.sys-icon.compress-alt:after, .fa-compress-alt:after {
+  content: "\10f422"; }
+
+.sys-icon.compress-arrows-alt:after, .fa-compress-arrows-alt:after {
+  content: "\10f78c"; }
+
+.sys-icon.compress-wide:after, .fa-compress-wide:after {
+  content: "\10f326"; }
+
+.sys-icon.concierge-bell:after, .fa-concierge-bell:after {
+  content: "\10f562"; }
+
+.sys-icon.construction:after, .fa-construction:after {
+  content: "\10f85d"; }
+
+.sys-icon.container-storage:after, .fa-container-storage:after {
+  content: "\10f4b7"; }
+
+.sys-icon.conveyor-belt:after, .fa-conveyor-belt:after {
+  content: "\10f46e"; }
+
+.sys-icon.conveyor-belt-alt:after, .fa-conveyor-belt-alt:after {
+  content: "\10f46f"; }
+
+.sys-icon.cookie:after, .fa-cookie:after {
+  content: "\10f563"; }
+
+.sys-icon.cookie-bite:after, .fa-cookie-bite:after {
+  content: "\10f564"; }
+
+.sys-icon.copy:after, .fa-copy:after {
+  content: "\10f0c5"; }
+
+.sys-icon.copyright:after, .fa-copyright:after {
+  content: "\10f1f9"; }
+
+.sys-icon.corn:after, .fa-corn:after {
+  content: "\10f6c7"; }
+
+.sys-icon.couch:after, .fa-couch:after {
+  content: "\10f4b8"; }
+
+.sys-icon.cow:after, .fa-cow:after {
+  content: "\10f6c8"; }
+
+.sys-icon.credit-card:after, .fa-credit-card:after {
+  content: "\10f09d"; }
+
+.sys-icon.credit-card-blank:after, .fa-credit-card-blank:after {
+  content: "\10f389"; }
+
+.sys-icon.credit-card-front:after, .fa-credit-card-front:after {
+  content: "\10f38a"; }
+
+.sys-icon.cricket:after, .fa-cricket:after {
+  content: "\10f449"; }
+
+.sys-icon.croissant:after, .fa-croissant:after {
+  content: "\10f7f6"; }
+
+.sys-icon.crop:after, .fa-crop:after {
+  content: "\10f125"; }
+
+.sys-icon.crop-alt:after, .fa-crop-alt:after {
+  content: "\10f565"; }
+
+.sys-icon.cross:after, .fa-cross:after {
+  content: "\10f654"; }
+
+.sys-icon.crosshairs:after, .fa-crosshairs:after {
+  content: "\10f05b"; }
+
+.sys-icon.crow:after, .fa-crow:after {
+  content: "\10f520"; }
+
+.sys-icon.crown:after, .fa-crown:after {
+  content: "\10f521"; }
+
+.sys-icon.crutch:after, .fa-crutch:after {
+  content: "\10f7f7"; }
+
+.sys-icon.crutches:after, .fa-crutches:after {
+  content: "\10f7f8"; }
+
+.sys-icon.cube:after, .fa-cube:after {
+  content: "\10f1b2"; }
+
+.sys-icon.cubes:after, .fa-cubes:after {
+  content: "\10f1b3"; }
+
+.sys-icon.curling:after, .fa-curling:after {
+  content: "\10f44a"; }
+
+.sys-icon.cut:after, .fa-cut:after {
+  content: "\10f0c4"; }
+
+.sys-icon.dagger:after, .fa-dagger:after {
+  content: "\10f6cb"; }
+
+.sys-icon.database:after, .fa-database:after {
+  content: "\10f1c0"; }
+
+.sys-icon.deaf:after, .fa-deaf:after {
+  content: "\10f2a4"; }
+
+.sys-icon.debug:after, .fa-debug:after {
+  content: "\10f7f9"; }
+
+.sys-icon.deer:after, .fa-deer:after {
+  content: "\10f78e"; }
+
+.sys-icon.deer-rudolph:after, .fa-deer-rudolph:after {
+  content: "\10f78f"; }
+
+.sys-icon.democrat:after, .fa-democrat:after {
+  content: "\10f747"; }
+
+.sys-icon.desktop:after, .fa-desktop:after {
+  content: "\10f108"; }
+
+.sys-icon.desktop-alt:after, .fa-desktop-alt:after {
+  content: "\10f390"; }
+
+.sys-icon.dewpoint:after, .fa-dewpoint:after {
+  content: "\10f748"; }
+
+.sys-icon.dharmachakra:after, .fa-dharmachakra:after {
+  content: "\10f655"; }
+
+.sys-icon.diagnoses:after, .fa-diagnoses:after {
+  content: "\10f470"; }
+
+.sys-icon.diamond:after, .fa-diamond:after {
+  content: "\10f219"; }
+
+.sys-icon.dice:after, .fa-dice:after {
+  content: "\10f522"; }
+
+.sys-icon.dice-d10:after, .fa-dice-d10:after {
+  content: "\10f6cd"; }
+
+.sys-icon.dice-d12:after, .fa-dice-d12:after {
+  content: "\10f6ce"; }
+
+.sys-icon.dice-d20:after, .fa-dice-d20:after {
+  content: "\10f6cf"; }
+
+.sys-icon.dice-d4:after, .fa-dice-d4:after {
+  content: "\10f6d0"; }
+
+.sys-icon.dice-d6:after, .fa-dice-d6:after {
+  content: "\10f6d1"; }
+
+.sys-icon.dice-d8:after, .fa-dice-d8:after {
+  content: "\10f6d2"; }
+
+.sys-icon.dice-five:after, .fa-dice-five:after {
+  content: "\10f523"; }
+
+.sys-icon.dice-four:after, .fa-dice-four:after {
+  content: "\10f524"; }
+
+.sys-icon.dice-one:after, .fa-dice-one:after {
+  content: "\10f525"; }
+
+.sys-icon.dice-six:after, .fa-dice-six:after {
+  content: "\10f526"; }
+
+.sys-icon.dice-three:after, .fa-dice-three:after {
+  content: "\10f527"; }
+
+.sys-icon.dice-two:after, .fa-dice-two:after {
+  content: "\10f528"; }
+
+.sys-icon.digging:after, .fa-digging:after {
+  content: "\10f85e"; }
+
+.sys-icon.digital-tachograph:after, .fa-digital-tachograph:after {
+  content: "\10f566"; }
+
+.sys-icon.diploma:after, .fa-diploma:after {
+  content: "\10f5ea"; }
+
+.sys-icon.directions:after, .fa-directions:after {
+  content: "\10f5eb"; }
+
+.sys-icon.disease:after, .fa-disease:after {
+  content: "\10f7fa"; }
+
+.sys-icon.divide:after, .fa-divide:after {
+  content: "\10f529"; }
+
+.sys-icon.dizzy:after, .fa-dizzy:after {
+  content: "\10f567"; }
+
+.sys-icon.dna:after, .fa-dna:after {
+  content: "\10f471"; }
+
+.sys-icon.do-not-enter:after, .fa-do-not-enter:after {
+  content: "\10f5ec"; }
+
+.sys-icon.dog:after, .fa-dog:after {
+  content: "\10f6d3"; }
+
+.sys-icon.dog-leashed:after, .fa-dog-leashed:after {
+  content: "\10f6d4"; }
+
+.sys-icon.dollar-sign:after, .fa-dollar-sign:after {
+  content: "\10f155"; }
+
+.sys-icon.dolly:after, .fa-dolly:after {
+  content: "\10f472"; }
+
+.sys-icon.dolly-empty:after, .fa-dolly-empty:after {
+  content: "\10f473"; }
+
+.sys-icon.dolly-flatbed:after, .fa-dolly-flatbed:after {
+  content: "\10f474"; }
+
+.sys-icon.dolly-flatbed-alt:after, .fa-dolly-flatbed-alt:after {
+  content: "\10f475"; }
+
+.sys-icon.dolly-flatbed-empty:after, .fa-dolly-flatbed-empty:after {
+  content: "\10f476"; }
+
+.sys-icon.donate:after, .fa-donate:after {
+  content: "\10f4b9"; }
+
+.sys-icon.door-closed:after, .fa-door-closed:after {
+  content: "\10f52a"; }
+
+.sys-icon.door-open:after, .fa-door-open:after {
+  content: "\10f52b"; }
+
+.sys-icon.dot-circle:after, .fa-dot-circle:after {
+  content: "\10f192"; }
+
+.sys-icon.dove:after, .fa-dove:after {
+  content: "\10f4ba"; }
+
+.sys-icon.download:after, .fa-download:after {
+  content: "\10f019"; }
+
+.sys-icon.drafting-compass:after, .fa-drafting-compass:after {
+  content: "\10f568"; }
+
+.sys-icon.dragon:after, .fa-dragon:after {
+  content: "\10f6d5"; }
+
+.sys-icon.draw-circle:after, .fa-draw-circle:after {
+  content: "\10f5ed"; }
+
+.sys-icon.draw-polygon:after, .fa-draw-polygon:after {
+  content: "\10f5ee"; }
+
+.sys-icon.draw-square:after, .fa-draw-square:after {
+  content: "\10f5ef"; }
+
+.sys-icon.dreidel:after, .fa-dreidel:after {
+  content: "\10f792"; }
+
+.sys-icon.drone:after, .fa-drone:after {
+  content: "\10f85f"; }
+
+.sys-icon.drone-alt:after, .fa-drone-alt:after {
+  content: "\10f860"; }
+
+.sys-icon.drum:after, .fa-drum:after {
+  content: "\10f569"; }
+
+.sys-icon.drum-steelpan:after, .fa-drum-steelpan:after {
+  content: "\10f56a"; }
+
+.sys-icon.drumstick:after, .fa-drumstick:after {
+  content: "\10f6d6"; }
+
+.sys-icon.drumstick-bite:after, .fa-drumstick-bite:after {
+  content: "\10f6d7"; }
+
+.sys-icon.dryer:after, .fa-dryer:after {
+  content: "\10f861"; }
+
+.sys-icon.dryer-alt:after, .fa-dryer-alt:after {
+  content: "\10f862"; }
+
+.sys-icon.duck:after, .fa-duck:after {
+  content: "\10f6d8"; }
+
+.sys-icon.dumbbell:after, .fa-dumbbell:after {
+  content: "\10f44b"; }
+
+.sys-icon.dumpster:after, .fa-dumpster:after {
+  content: "\10f793"; }
+
+.sys-icon.dumpster-fire:after, .fa-dumpster-fire:after {
+  content: "\10f794"; }
+
+.sys-icon.dungeon:after, .fa-dungeon:after {
+  content: "\10f6d9"; }
+
+.sys-icon.ear:after, .fa-ear:after {
+  content: "\10f5f0"; }
+
+.sys-icon.ear-muffs:after, .fa-ear-muffs:after {
+  content: "\10f795"; }
+
+.sys-icon.eclipse:after, .fa-eclipse:after {
+  content: "\10f749"; }
+
+.sys-icon.eclipse-alt:after, .fa-eclipse-alt:after {
+  content: "\10f74a"; }
+
+.sys-icon.edit:after, .fa-edit:after {
+  content: "\10f044"; }
+
+.sys-icon.egg:after, .fa-egg:after {
+  content: "\10f7fb"; }
+
+.sys-icon.egg-fried:after, .fa-egg-fried:after {
+  content: "\10f7fc"; }
+
+.sys-icon.eject:after, .fa-eject:after {
+  content: "\10f052"; }
+
+.sys-icon.elephant:after, .fa-elephant:after {
+  content: "\10f6da"; }
+
+.sys-icon.ellipsis-h:after, .fa-ellipsis-h:after {
+  content: "\10f141"; }
+
+.sys-icon.ellipsis-h-alt:after, .fa-ellipsis-h-alt:after {
+  content: "\10f39b"; }
+
+.sys-icon.ellipsis-v:after, .fa-ellipsis-v:after {
+  content: "\10f142"; }
+
+.sys-icon.ellipsis-v-alt:after, .fa-ellipsis-v-alt:after {
+  content: "\10f39c"; }
+
+.sys-icon.empty-set:after, .fa-empty-set:after {
+  content: "\10f656"; }
+
+.sys-icon.engine-warning:after, .fa-engine-warning:after {
+  content: "\10f5f2"; }
+
+.sys-icon.envelope:after, .fa-envelope:after {
+  content: "\10f0e0"; }
+
+.sys-icon.envelope-open:after, .fa-envelope-open:after {
+  content: "\10f2b6"; }
+
+.sys-icon.envelope-open-dollar:after, .fa-envelope-open-dollar:after {
+  content: "\10f657"; }
+
+.sys-icon.envelope-open-text:after, .fa-envelope-open-text:after {
+  content: "\10f658"; }
+
+.sys-icon.envelope-square:after, .fa-envelope-square:after {
+  content: "\10f199"; }
+
+.sys-icon.equals:after, .fa-equals:after {
+  content: "\10f52c"; }
+
+.sys-icon.eraser:after, .fa-eraser:after {
+  content: "\10f12d"; }
+
+.sys-icon.ethernet:after, .fa-ethernet:after {
+  content: "\10f796"; }
+
+.sys-icon.euro-sign:after, .fa-euro-sign:after {
+  content: "\10f153"; }
+
+.sys-icon.exchange:after, .fa-exchange:after {
+  content: "\10f0ec"; }
+
+.sys-icon.exchange-alt:after, .fa-exchange-alt:after {
+  content: "\10f362"; }
+
+.sys-icon.exclamation:after, .fa-exclamation:after {
+  content: "\10f12a"; }
+
+.sys-icon.exclamation-circle:after, .fa-exclamation-circle:after {
+  content: "\10f06a"; }
+
+.sys-icon.exclamation-square:after, .fa-exclamation-square:after {
+  content: "\10f321"; }
+
+.sys-icon.exclamation-triangle:after, .fa-exclamation-triangle:after {
+  content: "\10f071"; }
+
+.sys-icon.expand:after, .fa-expand:after {
+  content: "\10f065"; }
+
+.sys-icon.expand-alt:after, .fa-expand-alt:after {
+  content: "\10f424"; }
+
+.sys-icon.expand-arrows:after, .fa-expand-arrows:after {
+  content: "\10f31d"; }
+
+.sys-icon.expand-arrows-alt:after, .fa-expand-arrows-alt:after {
+  content: "\10f31e"; }
+
+.sys-icon.expand-wide:after, .fa-expand-wide:after {
+  content: "\10f320"; }
+
+.sys-icon.external-link:after, .fa-external-link:after {
+  content: "\10f08e"; }
+
+.sys-icon.external-link-alt:after, .fa-external-link-alt:after {
+  content: "\10f35d"; }
+
+.sys-icon.external-link-square:after, .fa-external-link-square:after {
+  content: "\10f14c"; }
+
+.sys-icon.external-link-square-alt:after, .fa-external-link-square-alt:after {
+  content: "\10f360"; }
+
+.sys-icon.eye:after, .fa-eye:after {
+  content: "\10f06e"; }
+
+.sys-icon.eye-dropper:after, .fa-eye-dropper:after {
+  content: "\10f1fb"; }
+
+.sys-icon.eye-evil:after, .fa-eye-evil:after {
+  content: "\10f6db"; }
+
+.sys-icon.eye-slash:after, .fa-eye-slash:after {
+  content: "\10f070"; }
+
+.sys-icon.fan:after, .fa-fan:after {
+  content: "\10f863"; }
+
+.sys-icon.farm:after, .fa-farm:after {
+  content: "\10f864"; }
+
+.sys-icon.fast-backward:after, .fa-fast-backward:after {
+  content: "\10f049"; }
+
+.sys-icon.fast-forward:after, .fa-fast-forward:after {
+  content: "\10f050"; }
+
+.sys-icon.fax:after, .fa-fax:after {
+  content: "\10f1ac"; }
+
+.sys-icon.feather:after, .fa-feather:after {
+  content: "\10f52d"; }
+
+.sys-icon.feather-alt:after, .fa-feather-alt:after {
+  content: "\10f56b"; }
+
+.sys-icon.female:after, .fa-female:after {
+  content: "\10f182"; }
+
+.sys-icon.field-hockey:after, .fa-field-hockey:after {
+  content: "\10f44c"; }
+
+.sys-icon.fighter-jet:after, .fa-fighter-jet:after {
+  content: "\10f0fb"; }
+
+.sys-icon.file:after, .fa-file:after {
+  content: "\10f15b"; }
+
+.sys-icon.file-alt:after, .fa-file-alt:after {
+  content: "\10f15c"; }
+
+.sys-icon.file-archive:after, .fa-file-archive:after {
+  content: "\10f1c6"; }
+
+.sys-icon.file-audio:after, .fa-file-audio:after {
+  content: "\10f1c7"; }
+
+.sys-icon.file-certificate:after, .fa-file-certificate:after {
+  content: "\10f5f3"; }
+
+.sys-icon.file-chart-line:after, .fa-file-chart-line:after {
+  content: "\10f659"; }
+
+.sys-icon.file-chart-pie:after, .fa-file-chart-pie:after {
+  content: "\10f65a"; }
+
+.sys-icon.file-check:after, .fa-file-check:after {
+  content: "\10f316"; }
+
+.sys-icon.file-code:after, .fa-file-code:after {
+  content: "\10f1c9"; }
+
+.sys-icon.file-contract:after, .fa-file-contract:after {
+  content: "\10f56c"; }
+
+.sys-icon.file-csv:after, .fa-file-csv:after {
+  content: "\10f6dd"; }
+
+.sys-icon.file-download:after, .fa-file-download:after {
+  content: "\10f56d"; }
+
+.sys-icon.file-edit:after, .fa-file-edit:after {
+  content: "\10f31c"; }
+
+.sys-icon.file-excel:after, .fa-file-excel:after {
+  content: "\10f1c3"; }
+
+.sys-icon.file-exclamation:after, .fa-file-exclamation:after {
+  content: "\10f31a"; }
+
+.sys-icon.file-export:after, .fa-file-export:after {
+  content: "\10f56e"; }
+
+.sys-icon.file-image:after, .fa-file-image:after {
+  content: "\10f1c5"; }
+
+.sys-icon.file-import:after, .fa-file-import:after {
+  content: "\10f56f"; }
+
+.sys-icon.file-invoice:after, .fa-file-invoice:after {
+  content: "\10f570"; }
+
+.sys-icon.file-invoice-dollar:after, .fa-file-invoice-dollar:after {
+  content: "\10f571"; }
+
+.sys-icon.file-medical:after, .fa-file-medical:after {
+  content: "\10f477"; }
+
+.sys-icon.file-medical-alt:after, .fa-file-medical-alt:after {
+  content: "\10f478"; }
+
+.sys-icon.file-minus:after, .fa-file-minus:after {
+  content: "\10f318"; }
+
+.sys-icon.file-pdf:after, .fa-file-pdf:after {
+  content: "\10f1c1"; }
+
+.sys-icon.file-plus:after, .fa-file-plus:after {
+  content: "\10f319"; }
+
+.sys-icon.file-powerpoint:after, .fa-file-powerpoint:after {
+  content: "\10f1c4"; }
+
+.sys-icon.file-prescription:after, .fa-file-prescription:after {
+  content: "\10f572"; }
+
+.sys-icon.file-search:after, .fa-file-search:after {
+  content: "\10f865"; }
+
+.sys-icon.file-signature:after, .fa-file-signature:after {
+  content: "\10f573"; }
+
+.sys-icon.file-spreadsheet:after, .fa-file-spreadsheet:after {
+  content: "\10f65b"; }
+
+.sys-icon.file-times:after, .fa-file-times:after {
+  content: "\10f317"; }
+
+.sys-icon.file-upload:after, .fa-file-upload:after {
+  content: "\10f574"; }
+
+.sys-icon.file-user:after, .fa-file-user:after {
+  content: "\10f65c"; }
+
+.sys-icon.file-video:after, .fa-file-video:after {
+  content: "\10f1c8"; }
+
+.sys-icon.file-word:after, .fa-file-word:after {
+  content: "\10f1c2"; }
+
+.sys-icon.files-medical:after, .fa-files-medical:after {
+  content: "\10f7fd"; }
+
+.sys-icon.fill:after, .fa-fill:after {
+  content: "\10f575"; }
+
+.sys-icon.fill-drip:after, .fa-fill-drip:after {
+  content: "\10f576"; }
+
+.sys-icon.film:after, .fa-film:after {
+  content: "\10f008"; }
+
+.sys-icon.film-alt:after, .fa-film-alt:after {
+  content: "\10f3a0"; }
+
+.sys-icon.filter:after, .fa-filter:after {
+  content: "\10f0b0"; }
+
+.sys-icon.fingerprint:after, .fa-fingerprint:after {
+  content: "\10f577"; }
+
+.sys-icon.fire:after, .fa-fire:after {
+  content: "\10f06d"; }
+
+.sys-icon.fire-alt:after, .fa-fire-alt:after {
+  content: "\10f7e4"; }
+
+.sys-icon.fire-extinguisher:after, .fa-fire-extinguisher:after {
+  content: "\10f134"; }
+
+.sys-icon.fire-smoke:after, .fa-fire-smoke:after {
+  content: "\10f74b"; }
+
+.sys-icon.fireplace:after, .fa-fireplace:after {
+  content: "\10f79a"; }
+
+.sys-icon.first-aid:after, .fa-first-aid:after {
+  content: "\10f479"; }
+
+.sys-icon.fish:after, .fa-fish:after {
+  content: "\10f578"; }
+
+.sys-icon.fish-cooked:after, .fa-fish-cooked:after {
+  content: "\10f7fe"; }
+
+.sys-icon.fist-raised:after, .fa-fist-raised:after {
+  content: "\10f6de"; }
+
+.sys-icon.flag:after, .fa-flag:after {
+  content: "\10f024"; }
+
+.sys-icon.flag-alt:after, .fa-flag-alt:after {
+  content: "\10f74c"; }
+
+.sys-icon.flag-checkered:after, .fa-flag-checkered:after {
+  content: "\10f11e"; }
+
+.sys-icon.flag-usa:after, .fa-flag-usa:after {
+  content: "\10f74d"; }
+
+.sys-icon.flame:after, .fa-flame:after {
+  content: "\10f6df"; }
+
+.sys-icon.flask:after, .fa-flask:after {
+  content: "\10f0c3"; }
+
+.sys-icon.flask-poison:after, .fa-flask-poison:after {
+  content: "\10f6e0"; }
+
+.sys-icon.flask-potion:after, .fa-flask-potion:after {
+  content: "\10f6e1"; }
+
+.sys-icon.flower:after, .fa-flower:after {
+  content: "\10f7ff"; }
+
+.sys-icon.flower-daffodil:after, .fa-flower-daffodil:after {
+  content: "\10f800"; }
+
+.sys-icon.flower-tulip:after, .fa-flower-tulip:after {
+  content: "\10f801"; }
+
+.sys-icon.flushed:after, .fa-flushed:after {
+  content: "\10f579"; }
+
+.sys-icon.fog:after, .fa-fog:after {
+  content: "\10f74e"; }
+
+.sys-icon.folder:after, .fa-folder:after {
+  content: "\10f07b"; }
+
+.sys-icon.folder-minus:after, .fa-folder-minus:after {
+  content: "\10f65d"; }
+
+.sys-icon.folder-open:after, .fa-folder-open:after {
+  content: "\10f07c"; }
+
+.sys-icon.folder-plus:after, .fa-folder-plus:after {
+  content: "\10f65e"; }
+
+.sys-icon.folder-times:after, .fa-folder-times:after {
+  content: "\10f65f"; }
+
+.sys-icon.folder-tree:after, .fa-folder-tree:after {
+  content: "\10f802"; }
+
+.sys-icon.folders:after, .fa-folders:after {
+  content: "\10f660"; }
+
+.sys-icon.font:after, .fa-font:after {
+  content: "\10f031"; }
+
+.sys-icon.font-awesome-logo-full:after, .fa-font-awesome-logo-full:after {
+  content: "\10f4e6"; }
+
+.sys-icon.font-case:after, .fa-font-case:after {
+  content: "\10f866"; }
+
+.sys-icon.football-ball:after, .fa-football-ball:after {
+  content: "\10f44e"; }
+
+.sys-icon.football-helmet:after, .fa-football-helmet:after {
+  content: "\10f44f"; }
+
+.sys-icon.forklift:after, .fa-forklift:after {
+  content: "\10f47a"; }
+
+.sys-icon.forward:after, .fa-forward:after {
+  content: "\10f04e"; }
+
+.sys-icon.fragile:after, .fa-fragile:after {
+  content: "\10f4bb"; }
+
+.sys-icon.french-fries:after, .fa-french-fries:after {
+  content: "\10f803"; }
+
+.sys-icon.frog:after, .fa-frog:after {
+  content: "\10f52e"; }
+
+.sys-icon.frosty-head:after, .fa-frosty-head:after {
+  content: "\10f79b"; }
+
+.sys-icon.frown:after, .fa-frown:after {
+  content: "\10f119"; }
+
+.sys-icon.frown-open:after, .fa-frown-open:after {
+  content: "\10f57a"; }
+
+.sys-icon.function:after, .fa-function:after {
+  content: "\10f661"; }
+
+.sys-icon.funnel-dollar:after, .fa-funnel-dollar:after {
+  content: "\10f662"; }
+
+.sys-icon.futbol:after, .fa-futbol:after {
+  content: "\10f1e3"; }
+
+.sys-icon.game-board:after, .fa-game-board:after {
+  content: "\10f867"; }
+
+.sys-icon.game-board-alt:after, .fa-game-board-alt:after {
+  content: "\10f868"; }
+
+.sys-icon.gamepad:after, .fa-gamepad:after {
+  content: "\10f11b"; }
+
+.sys-icon.gas-pump:after, .fa-gas-pump:after {
+  content: "\10f52f"; }
+
+.sys-icon.gas-pump-slash:after, .fa-gas-pump-slash:after {
+  content: "\10f5f4"; }
+
+.sys-icon.gavel:after, .fa-gavel:after {
+  content: "\10f0e3"; }
+
+.sys-icon.gem:after, .fa-gem:after {
+  content: "\10f3a5"; }
+
+.sys-icon.genderless:after, .fa-genderless:after {
+  content: "\10f22d"; }
+
+.sys-icon.ghost:after, .fa-ghost:after {
+  content: "\10f6e2"; }
+
+.sys-icon.gift:after, .fa-gift:after {
+  content: "\10f06b"; }
+
+.sys-icon.gift-card:after, .fa-gift-card:after {
+  content: "\10f663"; }
+
+.sys-icon.gifts:after, .fa-gifts:after {
+  content: "\10f79c"; }
+
+.sys-icon.gingerbread-man:after, .fa-gingerbread-man:after {
+  content: "\10f79d"; }
+
+.sys-icon.glass:after, .fa-glass:after {
+  content: "\10f804"; }
+
+.sys-icon.glass-champagne:after, .fa-glass-champagne:after {
+  content: "\10f79e"; }
+
+.sys-icon.glass-cheers:after, .fa-glass-cheers:after {
+  content: "\10f79f"; }
+
+.sys-icon.glass-citrus:after, .fa-glass-citrus:after {
+  content: "\10f869"; }
+
+.sys-icon.glass-martini:after, .fa-glass-martini:after {
+  content: "\10f000"; }
+
+.sys-icon.glass-martini-alt:after, .fa-glass-martini-alt:after {
+  content: "\10f57b"; }
+
+.sys-icon.glass-whiskey:after, .fa-glass-whiskey:after {
+  content: "\10f7a0"; }
+
+.sys-icon.glass-whiskey-rocks:after, .fa-glass-whiskey-rocks:after {
+  content: "\10f7a1"; }
+
+.sys-icon.glasses:after, .fa-glasses:after {
+  content: "\10f530"; }
+
+.sys-icon.glasses-alt:after, .fa-glasses-alt:after {
+  content: "\10f5f5"; }
+
+.sys-icon.globe:after, .fa-globe:after {
+  content: "\10f0ac"; }
+
+.sys-icon.globe-africa:after, .fa-globe-africa:after {
+  content: "\10f57c"; }
+
+.sys-icon.globe-americas:after, .fa-globe-americas:after {
+  content: "\10f57d"; }
+
+.sys-icon.globe-asia:after, .fa-globe-asia:after {
+  content: "\10f57e"; }
+
+.sys-icon.globe-europe:after, .fa-globe-europe:after {
+  content: "\10f7a2"; }
+
+.sys-icon.globe-snow:after, .fa-globe-snow:after {
+  content: "\10f7a3"; }
+
+.sys-icon.globe-stand:after, .fa-globe-stand:after {
+  content: "\10f5f6"; }
+
+.sys-icon.golf-ball:after, .fa-golf-ball:after {
+  content: "\10f450"; }
+
+.sys-icon.golf-club:after, .fa-golf-club:after {
+  content: "\10f451"; }
+
+.sys-icon.gopuram:after, .fa-gopuram:after {
+  content: "\10f664"; }
+
+.sys-icon.graduation-cap:after, .fa-graduation-cap:after {
+  content: "\10f19d"; }
+
+.sys-icon.greater-than:after, .fa-greater-than:after {
+  content: "\10f531"; }
+
+.sys-icon.greater-than-equal:after, .fa-greater-than-equal:after {
+  content: "\10f532"; }
+
+.sys-icon.grimace:after, .fa-grimace:after {
+  content: "\10f57f"; }
+
+.sys-icon.grin:after, .fa-grin:after {
+  content: "\10f580"; }
+
+.sys-icon.grin-alt:after, .fa-grin-alt:after {
+  content: "\10f581"; }
+
+.sys-icon.grin-beam:after, .fa-grin-beam:after {
+  content: "\10f582"; }
+
+.sys-icon.grin-beam-sweat:after, .fa-grin-beam-sweat:after {
+  content: "\10f583"; }
+
+.sys-icon.grin-hearts:after, .fa-grin-hearts:after {
+  content: "\10f584"; }
+
+.sys-icon.grin-squint:after, .fa-grin-squint:after {
+  content: "\10f585"; }
+
+.sys-icon.grin-squint-tears:after, .fa-grin-squint-tears:after {
+  content: "\10f586"; }
+
+.sys-icon.grin-stars:after, .fa-grin-stars:after {
+  content: "\10f587"; }
+
+.sys-icon.grin-tears:after, .fa-grin-tears:after {
+  content: "\10f588"; }
+
+.sys-icon.grin-tongue:after, .fa-grin-tongue:after {
+  content: "\10f589"; }
+
+.sys-icon.grin-tongue-squint:after, .fa-grin-tongue-squint:after {
+  content: "\10f58a"; }
+
+.sys-icon.grin-tongue-wink:after, .fa-grin-tongue-wink:after {
+  content: "\10f58b"; }
+
+.sys-icon.grin-wink:after, .fa-grin-wink:after {
+  content: "\10f58c"; }
+
+.sys-icon.grip-horizontal:after, .fa-grip-horizontal:after {
+  content: "\10f58d"; }
+
+.sys-icon.grip-lines:after, .fa-grip-lines:after {
+  content: "\10f7a4"; }
+
+.sys-icon.grip-lines-vertical:after, .fa-grip-lines-vertical:after {
+  content: "\10f7a5"; }
+
+.sys-icon.grip-vertical:after, .fa-grip-vertical:after {
+  content: "\10f58e"; }
+
+.sys-icon.guitar:after, .fa-guitar:after {
+  content: "\10f7a6"; }
+
+.sys-icon.h-square:after, .fa-h-square:after {
+  content: "\10f0fd"; }
+
+.sys-icon.h1:after, .fa-h1:after {
+  content: "\10f313"; }
+
+.sys-icon.h2:after, .fa-h2:after {
+  content: "\10f314"; }
+
+.sys-icon.h3:after, .fa-h3:after {
+  content: "\10f315"; }
+
+.sys-icon.h4:after, .fa-h4:after {
+  content: "\10f86a"; }
+
+.sys-icon.hamburger:after, .fa-hamburger:after {
+  content: "\10f805"; }
+
+.sys-icon.hammer:after, .fa-hammer:after {
+  content: "\10f6e3"; }
+
+.sys-icon.hammer-war:after, .fa-hammer-war:after {
+  content: "\10f6e4"; }
+
+.sys-icon.hamsa:after, .fa-hamsa:after {
+  content: "\10f665"; }
+
+.sys-icon.hand-heart:after, .fa-hand-heart:after {
+  content: "\10f4bc"; }
+
+.sys-icon.hand-holding:after, .fa-hand-holding:after {
+  content: "\10f4bd"; }
+
+.sys-icon.hand-holding-box:after, .fa-hand-holding-box:after {
+  content: "\10f47b"; }
+
+.sys-icon.hand-holding-heart:after, .fa-hand-holding-heart:after {
+  content: "\10f4be"; }
+
+.sys-icon.hand-holding-magic:after, .fa-hand-holding-magic:after {
+  content: "\10f6e5"; }
+
+.sys-icon.hand-holding-seedling:after, .fa-hand-holding-seedling:after {
+  content: "\10f4bf"; }
+
+.sys-icon.hand-holding-usd:after, .fa-hand-holding-usd:after {
+  content: "\10f4c0"; }
+
+.sys-icon.hand-holding-water:after, .fa-hand-holding-water:after {
+  content: "\10f4c1"; }
+
+.sys-icon.hand-lizard:after, .fa-hand-lizard:after {
+  content: "\10f258"; }
+
+.sys-icon.hand-middle-finger:after, .fa-hand-middle-finger:after {
+  content: "\10f806"; }
+
+.sys-icon.hand-paper:after, .fa-hand-paper:after {
+  content: "\10f256"; }
+
+.sys-icon.hand-peace:after, .fa-hand-peace:after {
+  content: "\10f25b"; }
+
+.sys-icon.hand-point-down:after, .fa-hand-point-down:after {
+  content: "\10f0a7"; }
+
+.sys-icon.hand-point-left:after, .fa-hand-point-left:after {
+  content: "\10f0a5"; }
+
+.sys-icon.hand-point-right:after, .fa-hand-point-right:after {
+  content: "\10f0a4"; }
+
+.sys-icon.hand-point-up:after, .fa-hand-point-up:after {
+  content: "\10f0a6"; }
+
+.sys-icon.hand-pointer:after, .fa-hand-pointer:after {
+  content: "\10f25a"; }
+
+.sys-icon.hand-receiving:after, .fa-hand-receiving:after {
+  content: "\10f47c"; }
+
+.sys-icon.hand-rock:after, .fa-hand-rock:after {
+  content: "\10f255"; }
+
+.sys-icon.hand-scissors:after, .fa-hand-scissors:after {
+  content: "\10f257"; }
+
+.sys-icon.hand-spock:after, .fa-hand-spock:after {
+  content: "\10f259"; }
+
+.sys-icon.hands:after, .fa-hands:after {
+  content: "\10f4c2"; }
+
+.sys-icon.hands-heart:after, .fa-hands-heart:after {
+  content: "\10f4c3"; }
+
+.sys-icon.hands-helping:after, .fa-hands-helping:after {
+  content: "\10f4c4"; }
+
+.sys-icon.hands-usd:after, .fa-hands-usd:after {
+  content: "\10f4c5"; }
+
+.sys-icon.handshake:after, .fa-handshake:after {
+  content: "\10f2b5"; }
+
+.sys-icon.handshake-alt:after, .fa-handshake-alt:after {
+  content: "\10f4c6"; }
+
+.sys-icon.hanukiah:after, .fa-hanukiah:after {
+  content: "\10f6e6"; }
+
+.sys-icon.hard-hat:after, .fa-hard-hat:after {
+  content: "\10f807"; }
+
+.sys-icon.hashtag:after, .fa-hashtag:after {
+  content: "\10f292"; }
+
+.sys-icon.hat-chef:after, .fa-hat-chef:after {
+  content: "\10f86b"; }
+
+.sys-icon.hat-santa:after, .fa-hat-santa:after {
+  content: "\10f7a7"; }
+
+.sys-icon.hat-winter:after, .fa-hat-winter:after {
+  content: "\10f7a8"; }
+
+.sys-icon.hat-witch:after, .fa-hat-witch:after {
+  content: "\10f6e7"; }
+
+.sys-icon.hat-wizard:after, .fa-hat-wizard:after {
+  content: "\10f6e8"; }
+
+.sys-icon.haykal:after, .fa-haykal:after {
+  content: "\10f666"; }
+
+.sys-icon.hdd:after, .fa-hdd:after {
+  content: "\10f0a0"; }
+
+.sys-icon.head-side:after, .fa-head-side:after {
+  content: "\10f6e9"; }
+
+.sys-icon.head-side-brain:after, .fa-head-side-brain:after {
+  content: "\10f808"; }
+
+.sys-icon.head-side-medical:after, .fa-head-side-medical:after {
+  content: "\10f809"; }
+
+.sys-icon.head-vr:after, .fa-head-vr:after {
+  content: "\10f6ea"; }
+
+.sys-icon.heading:after, .fa-heading:after {
+  content: "\10f1dc"; }
+
+.sys-icon.headphones:after, .fa-headphones:after {
+  content: "\10f025"; }
+
+.sys-icon.headphones-alt:after, .fa-headphones-alt:after {
+  content: "\10f58f"; }
+
+.sys-icon.headset:after, .fa-headset:after {
+  content: "\10f590"; }
+
+.sys-icon.heart:after, .fa-heart:after {
+  content: "\10f004"; }
+
+.sys-icon.heart-broken:after, .fa-heart-broken:after {
+  content: "\10f7a9"; }
+
+.sys-icon.heart-circle:after, .fa-heart-circle:after {
+  content: "\10f4c7"; }
+
+.sys-icon.heart-rate:after, .fa-heart-rate:after {
+  content: "\10f5f8"; }
+
+.sys-icon.heart-square:after, .fa-heart-square:after {
+  content: "\10f4c8"; }
+
+.sys-icon.heartbeat:after, .fa-heartbeat:after {
+  content: "\10f21e"; }
+
+.sys-icon.helicopter:after, .fa-helicopter:after {
+  content: "\10f533"; }
+
+.sys-icon.helmet-battle:after, .fa-helmet-battle:after {
+  content: "\10f6eb"; }
+
+.sys-icon.hexagon:after, .fa-hexagon:after {
+  content: "\10f312"; }
+
+.sys-icon.highlighter:after, .fa-highlighter:after {
+  content: "\10f591"; }
+
+.sys-icon.hiking:after, .fa-hiking:after {
+  content: "\10f6ec"; }
+
+.sys-icon.hippo:after, .fa-hippo:after {
+  content: "\10f6ed"; }
+
+.sys-icon.history:after, .fa-history:after {
+  content: "\10f1da"; }
+
+.sys-icon.hockey-mask:after, .fa-hockey-mask:after {
+  content: "\10f6ee"; }
+
+.sys-icon.hockey-puck:after, .fa-hockey-puck:after {
+  content: "\10f453"; }
+
+.sys-icon.hockey-sticks:after, .fa-hockey-sticks:after {
+  content: "\10f454"; }
+
+.sys-icon.holly-berry:after, .fa-holly-berry:after {
+  content: "\10f7aa"; }
+
+.sys-icon.home:after, .fa-home:after {
+  content: "\10f015"; }
+
+.sys-icon.home-alt:after, .fa-home-alt:after {
+  content: "\10f80a"; }
+
+.sys-icon.home-heart:after, .fa-home-heart:after {
+  content: "\10f4c9"; }
+
+.sys-icon.home-lg:after, .fa-home-lg:after {
+  content: "\10f80b"; }
+
+.sys-icon.home-lg-alt:after, .fa-home-lg-alt:after {
+  content: "\10f80c"; }
+
+.sys-icon.hood-cloak:after, .fa-hood-cloak:after {
+  content: "\10f6ef"; }
+
+.sys-icon.horizontal-rule:after, .fa-horizontal-rule:after {
+  content: "\10f86c"; }
+
+.sys-icon.horse:after, .fa-horse:after {
+  content: "\10f6f0"; }
+
+.sys-icon.horse-head:after, .fa-horse-head:after {
+  content: "\10f7ab"; }
+
+.sys-icon.hospital:after, .fa-hospital:after {
+  content: "\10f0f8"; }
+
+.sys-icon.hospital-alt:after, .fa-hospital-alt:after {
+  content: "\10f47d"; }
+
+.sys-icon.hospital-symbol:after, .fa-hospital-symbol:after {
+  content: "\10f47e"; }
+
+.sys-icon.hospital-user:after, .fa-hospital-user:after {
+  content: "\10f80d"; }
+
+.sys-icon.hospitals:after, .fa-hospitals:after {
+  content: "\10f80e"; }
+
+.sys-icon.hot-tub:after, .fa-hot-tub:after {
+  content: "\10f593"; }
+
+.sys-icon.hotdog:after, .fa-hotdog:after {
+  content: "\10f80f"; }
+
+.sys-icon.hotel:after, .fa-hotel:after {
+  content: "\10f594"; }
+
+.sys-icon.hourglass:after, .fa-hourglass:after {
+  content: "\10f254"; }
+
+.sys-icon.hourglass-end:after, .fa-hourglass-end:after {
+  content: "\10f253"; }
+
+.sys-icon.hourglass-half:after, .fa-hourglass-half:after {
+  content: "\10f252"; }
+
+.sys-icon.hourglass-start:after, .fa-hourglass-start:after {
+  content: "\10f251"; }
+
+.sys-icon.house-damage:after, .fa-house-damage:after {
+  content: "\10f6f1"; }
+
+.sys-icon.house-flood:after, .fa-house-flood:after {
+  content: "\10f74f"; }
+
+.sys-icon.hryvnia:after, .fa-hryvnia:after {
+  content: "\10f6f2"; }
+
+.sys-icon.humidity:after, .fa-humidity:after {
+  content: "\10f750"; }
+
+.sys-icon.hurricane:after, .fa-hurricane:after {
+  content: "\10f751"; }
+
+.sys-icon.i-cursor:after, .fa-i-cursor:after {
+  content: "\10f246"; }
+
+.sys-icon.ice-cream:after, .fa-ice-cream:after {
+  content: "\10f810"; }
+
+.sys-icon.ice-skate:after, .fa-ice-skate:after {
+  content: "\10f7ac"; }
+
+.sys-icon.icicles:after, .fa-icicles:after {
+  content: "\10f7ad"; }
+
+.sys-icon.icons:after, .fa-icons:after {
+  content: "\10f86d"; }
+
+.sys-icon.icons-alt:after, .fa-icons-alt:after {
+  content: "\10f86e"; }
+
+.sys-icon.id-badge:after, .fa-id-badge:after {
+  content: "\10f2c1"; }
+
+.sys-icon.id-card:after, .fa-id-card:after {
+  content: "\10f2c2"; }
+
+.sys-icon.id-card-alt:after, .fa-id-card-alt:after {
+  content: "\10f47f"; }
+
+.sys-icon.igloo:after, .fa-igloo:after {
+  content: "\10f7ae"; }
+
+.sys-icon.image:after, .fa-image:after {
+  content: "\10f03e"; }
+
+.sys-icon.images:after, .fa-images:after {
+  content: "\10f302"; }
+
+.sys-icon.inbox:after, .fa-inbox:after {
+  content: "\10f01c"; }
+
+.sys-icon.inbox-in:after, .fa-inbox-in:after {
+  content: "\10f310"; }
+
+.sys-icon.inbox-out:after, .fa-inbox-out:after {
+  content: "\10f311"; }
+
+.sys-icon.indent:after, .fa-indent:after {
+  content: "\10f03c"; }
+
+.sys-icon.industry:after, .fa-industry:after {
+  content: "\10f275"; }
+
+.sys-icon.industry-alt:after, .fa-industry-alt:after {
+  content: "\10f3b3"; }
+
+.sys-icon.infinity:after, .fa-infinity:after {
+  content: "\10f534"; }
+
+.sys-icon.info:after, .fa-info:after {
+  content: "\10f129"; }
+
+.sys-icon.info-circle:after, .fa-info-circle:after {
+  content: "\10f05a"; }
+
+.sys-icon.info-square:after, .fa-info-square:after {
+  content: "\10f30f"; }
+
+.sys-icon.inhaler:after, .fa-inhaler:after {
+  content: "\10f5f9"; }
+
+.sys-icon.integral:after, .fa-integral:after {
+  content: "\10f667"; }
+
+.sys-icon.intersection:after, .fa-intersection:after {
+  content: "\10f668"; }
+
+.sys-icon.inventory:after, .fa-inventory:after {
+  content: "\10f480"; }
+
+.sys-icon.island-tropical:after, .fa-island-tropical:after {
+  content: "\10f811"; }
+
+.sys-icon.italic:after, .fa-italic:after {
+  content: "\10f033"; }
+
+.sys-icon.jack-o-lantern:after, .fa-jack-o-lantern:after {
+  content: "\10f30e"; }
+
+.sys-icon.jedi:after, .fa-jedi:after {
+  content: "\10f669"; }
+
+.sys-icon.joint:after, .fa-joint:after {
+  content: "\10f595"; }
+
+.sys-icon.journal-whills:after, .fa-journal-whills:after {
+  content: "\10f66a"; }
+
+.sys-icon.kaaba:after, .fa-kaaba:after {
+  content: "\10f66b"; }
+
+.sys-icon.kerning:after, .fa-kerning:after {
+  content: "\10f86f"; }
+
+.sys-icon.key:after, .fa-key:after {
+  content: "\10f084"; }
+
+.sys-icon.key-skeleton:after, .fa-key-skeleton:after {
+  content: "\10f6f3"; }
+
+.sys-icon.keyboard:after, .fa-keyboard:after {
+  content: "\10f11c"; }
+
+.sys-icon.keynote:after, .fa-keynote:after {
+  content: "\10f66c"; }
+
+.sys-icon.khanda:after, .fa-khanda:after {
+  content: "\10f66d"; }
+
+.sys-icon.kidneys:after, .fa-kidneys:after {
+  content: "\10f5fb"; }
+
+.sys-icon.kiss:after, .fa-kiss:after {
+  content: "\10f596"; }
+
+.sys-icon.kiss-beam:after, .fa-kiss-beam:after {
+  content: "\10f597"; }
+
+.sys-icon.kiss-wink-heart:after, .fa-kiss-wink-heart:after {
+  content: "\10f598"; }
+
+.sys-icon.kite:after, .fa-kite:after {
+  content: "\10f6f4"; }
+
+.sys-icon.kiwi-bird:after, .fa-kiwi-bird:after {
+  content: "\10f535"; }
+
+.sys-icon.knife-kitchen:after, .fa-knife-kitchen:after {
+  content: "\10f6f5"; }
+
+.sys-icon.lambda:after, .fa-lambda:after {
+  content: "\10f66e"; }
+
+.sys-icon.lamp:after, .fa-lamp:after {
+  content: "\10f4ca"; }
+
+.sys-icon.landmark:after, .fa-landmark:after {
+  content: "\10f66f"; }
+
+.sys-icon.landmark-alt:after, .fa-landmark-alt:after {
+  content: "\10f752"; }
+
+.sys-icon.language:after, .fa-language:after {
+  content: "\10f1ab"; }
+
+.sys-icon.laptop:after, .fa-laptop:after {
+  content: "\10f109"; }
+
+.sys-icon.laptop-code:after, .fa-laptop-code:after {
+  content: "\10f5fc"; }
+
+.sys-icon.laptop-medical:after, .fa-laptop-medical:after {
+  content: "\10f812"; }
+
+.sys-icon.laugh:after, .fa-laugh:after {
+  content: "\10f599"; }
+
+.sys-icon.laugh-beam:after, .fa-laugh-beam:after {
+  content: "\10f59a"; }
+
+.sys-icon.laugh-squint:after, .fa-laugh-squint:after {
+  content: "\10f59b"; }
+
+.sys-icon.laugh-wink:after, .fa-laugh-wink:after {
+  content: "\10f59c"; }
+
+.sys-icon.layer-group:after, .fa-layer-group:after {
+  content: "\10f5fd"; }
+
+.sys-icon.layer-minus:after, .fa-layer-minus:after {
+  content: "\10f5fe"; }
+
+.sys-icon.layer-plus:after, .fa-layer-plus:after {
+  content: "\10f5ff"; }
+
+.sys-icon.leaf:after, .fa-leaf:after {
+  content: "\10f06c"; }
+
+.sys-icon.leaf-heart:after, .fa-leaf-heart:after {
+  content: "\10f4cb"; }
+
+.sys-icon.leaf-maple:after, .fa-leaf-maple:after {
+  content: "\10f6f6"; }
+
+.sys-icon.leaf-oak:after, .fa-leaf-oak:after {
+  content: "\10f6f7"; }
+
+.sys-icon.lemon:after, .fa-lemon:after {
+  content: "\10f094"; }
+
+.sys-icon.less-than:after, .fa-less-than:after {
+  content: "\10f536"; }
+
+.sys-icon.less-than-equal:after, .fa-less-than-equal:after {
+  content: "\10f537"; }
+
+.sys-icon.level-down:after, .fa-level-down:after {
+  content: "\10f149"; }
+
+.sys-icon.level-down-alt:after, .fa-level-down-alt:after {
+  content: "\10f3be"; }
+
+.sys-icon.level-up:after, .fa-level-up:after {
+  content: "\10f148"; }
+
+.sys-icon.level-up-alt:after, .fa-level-up-alt:after {
+  content: "\10f3bf"; }
+
+.sys-icon.life-ring:after, .fa-life-ring:after {
+  content: "\10f1cd"; }
+
+.sys-icon.lightbulb:after, .fa-lightbulb:after {
+  content: "\10f0eb"; }
+
+.sys-icon.lightbulb-dollar:after, .fa-lightbulb-dollar:after {
+  content: "\10f670"; }
+
+.sys-icon.lightbulb-exclamation:after, .fa-lightbulb-exclamation:after {
+  content: "\10f671"; }
+
+.sys-icon.lightbulb-on:after, .fa-lightbulb-on:after {
+  content: "\10f672"; }
+
+.sys-icon.lightbulb-slash:after, .fa-lightbulb-slash:after {
+  content: "\10f673"; }
+
+.sys-icon.lights-holiday:after, .fa-lights-holiday:after {
+  content: "\10f7b2"; }
+
+.sys-icon.line-columns:after, .fa-line-columns:after {
+  content: "\10f870"; }
+
+.sys-icon.line-height:after, .fa-line-height:after {
+  content: "\10f871"; }
+
+.sys-icon.link:after, .fa-link:after {
+  content: "\10f0c1"; }
+
+.sys-icon.lips:after, .fa-lips:after {
+  content: "\10f600"; }
+
+.sys-icon.lira-sign:after, .fa-lira-sign:after {
+  content: "\10f195"; }
+
+.sys-icon.list:after, .fa-list:after {
+  content: "\10f03a"; }
+
+.sys-icon.list-alt:after, .fa-list-alt:after {
+  content: "\10f022"; }
+
+.sys-icon.list-ol:after, .fa-list-ol:after {
+  content: "\10f0cb"; }
+
+.sys-icon.list-ul:after, .fa-list-ul:after {
+  content: "\10f0ca"; }
+
+.sys-icon.location:after, .fa-location:after {
+  content: "\10f601"; }
+
+.sys-icon.location-arrow:after, .fa-location-arrow:after {
+  content: "\10f124"; }
+
+.sys-icon.location-circle:after, .fa-location-circle:after {
+  content: "\10f602"; }
+
+.sys-icon.location-slash:after, .fa-location-slash:after {
+  content: "\10f603"; }
+
+.sys-icon.lock:after, .fa-lock:after {
+  content: "\10f023"; }
+
+.sys-icon.lock-alt:after, .fa-lock-alt:after {
+  content: "\10f30d"; }
+
+.sys-icon.lock-open:after, .fa-lock-open:after {
+  content: "\10f3c1"; }
+
+.sys-icon.lock-open-alt:after, .fa-lock-open-alt:after {
+  content: "\10f3c2"; }
+
+.sys-icon.long-arrow-alt-down:after, .fa-long-arrow-alt-down:after {
+  content: "\10f309"; }
+
+.sys-icon.long-arrow-alt-left:after, .fa-long-arrow-alt-left:after {
+  content: "\10f30a"; }
+
+.sys-icon.long-arrow-alt-right:after, .fa-long-arrow-alt-right:after {
+  content: "\10f30b"; }
+
+.sys-icon.long-arrow-alt-up:after, .fa-long-arrow-alt-up:after {
+  content: "\10f30c"; }
+
+.sys-icon.long-arrow-down:after, .fa-long-arrow-down:after {
+  content: "\10f175"; }
+
+.sys-icon.long-arrow-left:after, .fa-long-arrow-left:after {
+  content: "\10f177"; }
+
+.sys-icon.long-arrow-right:after, .fa-long-arrow-right:after {
+  content: "\10f178"; }
+
+.sys-icon.long-arrow-up:after, .fa-long-arrow-up:after {
+  content: "\10f176"; }
+
+.sys-icon.loveseat:after, .fa-loveseat:after {
+  content: "\10f4cc"; }
+
+.sys-icon.low-vision:after, .fa-low-vision:after {
+  content: "\10f2a8"; }
+
+.sys-icon.luchador:after, .fa-luchador:after {
+  content: "\10f455"; }
+
+.sys-icon.luggage-cart:after, .fa-luggage-cart:after {
+  content: "\10f59d"; }
+
+.sys-icon.lungs:after, .fa-lungs:after {
+  content: "\10f604"; }
+
+.sys-icon.mace:after, .fa-mace:after {
+  content: "\10f6f8"; }
+
+.sys-icon.magic:after, .fa-magic:after {
+  content: "\10f0d0"; }
+
+.sys-icon.magnet:after, .fa-magnet:after {
+  content: "\10f076"; }
+
+.sys-icon.mail-bulk:after, .fa-mail-bulk:after {
+  content: "\10f674"; }
+
+.sys-icon.mailbox:after, .fa-mailbox:after {
+  content: "\10f813"; }
+
+.sys-icon.male:after, .fa-male:after {
+  content: "\10f183"; }
+
+.sys-icon.mandolin:after, .fa-mandolin:after {
+  content: "\10f6f9"; }
+
+.sys-icon.map:after, .fa-map:after {
+  content: "\10f279"; }
+
+.sys-icon.map-marked:after, .fa-map-marked:after {
+  content: "\10f59f"; }
+
+.sys-icon.map-marked-alt:after, .fa-map-marked-alt:after {
+  content: "\10f5a0"; }
+
+.sys-icon.map-marker:after, .fa-map-marker:after {
+  content: "\10f041"; }
+
+.sys-icon.map-marker-alt:after, .fa-map-marker-alt:after {
+  content: "\10f3c5"; }
+
+.sys-icon.map-marker-alt-slash:after, .fa-map-marker-alt-slash:after {
+  content: "\10f605"; }
+
+.sys-icon.map-marker-check:after, .fa-map-marker-check:after {
+  content: "\10f606"; }
+
+.sys-icon.map-marker-edit:after, .fa-map-marker-edit:after {
+  content: "\10f607"; }
+
+.sys-icon.map-marker-exclamation:after, .fa-map-marker-exclamation:after {
+  content: "\10f608"; }
+
+.sys-icon.map-marker-minus:after, .fa-map-marker-minus:after {
+  content: "\10f609"; }
+
+.sys-icon.map-marker-plus:after, .fa-map-marker-plus:after {
+  content: "\10f60a"; }
+
+.sys-icon.map-marker-question:after, .fa-map-marker-question:after {
+  content: "\10f60b"; }
+
+.sys-icon.map-marker-slash:after, .fa-map-marker-slash:after {
+  content: "\10f60c"; }
+
+.sys-icon.map-marker-smile:after, .fa-map-marker-smile:after {
+  content: "\10f60d"; }
+
+.sys-icon.map-marker-times:after, .fa-map-marker-times:after {
+  content: "\10f60e"; }
+
+.sys-icon.map-pin:after, .fa-map-pin:after {
+  content: "\10f276"; }
+
+.sys-icon.map-signs:after, .fa-map-signs:after {
+  content: "\10f277"; }
+
+.sys-icon.marker:after, .fa-marker:after {
+  content: "\10f5a1"; }
+
+.sys-icon.mars:after, .fa-mars:after {
+  content: "\10f222"; }
+
+.sys-icon.mars-double:after, .fa-mars-double:after {
+  content: "\10f227"; }
+
+.sys-icon.mars-stroke:after, .fa-mars-stroke:after {
+  content: "\10f229"; }
+
+.sys-icon.mars-stroke-h:after, .fa-mars-stroke-h:after {
+  content: "\10f22b"; }
+
+.sys-icon.mars-stroke-v:after, .fa-mars-stroke-v:after {
+  content: "\10f22a"; }
+
+.sys-icon.mask:after, .fa-mask:after {
+  content: "\10f6fa"; }
+
+.sys-icon.meat:after, .fa-meat:after {
+  content: "\10f814"; }
+
+.sys-icon.medal:after, .fa-medal:after {
+  content: "\10f5a2"; }
+
+.sys-icon.medkit:after, .fa-medkit:after {
+  content: "\10f0fa"; }
+
+.sys-icon.megaphone:after, .fa-megaphone:after {
+  content: "\10f675"; }
+
+.sys-icon.meh:after, .fa-meh:after {
+  content: "\10f11a"; }
+
+.sys-icon.meh-blank:after, .fa-meh-blank:after {
+  content: "\10f5a4"; }
+
+.sys-icon.meh-rolling-eyes:after, .fa-meh-rolling-eyes:after {
+  content: "\10f5a5"; }
+
+.sys-icon.memory:after, .fa-memory:after {
+  content: "\10f538"; }
+
+.sys-icon.menorah:after, .fa-menorah:after {
+  content: "\10f676"; }
+
+.sys-icon.mercury:after, .fa-mercury:after {
+  content: "\10f223"; }
+
+.sys-icon.meteor:after, .fa-meteor:after {
+  content: "\10f753"; }
+
+.sys-icon.microchip:after, .fa-microchip:after {
+  content: "\10f2db"; }
+
+.sys-icon.microphone:after, .fa-microphone:after {
+  content: "\10f130"; }
+
+.sys-icon.microphone-alt:after, .fa-microphone-alt:after {
+  content: "\10f3c9"; }
+
+.sys-icon.microphone-alt-slash:after, .fa-microphone-alt-slash:after {
+  content: "\10f539"; }
+
+.sys-icon.microphone-slash:after, .fa-microphone-slash:after {
+  content: "\10f131"; }
+
+.sys-icon.microscope:after, .fa-microscope:after {
+  content: "\10f610"; }
+
+.sys-icon.mind-share:after, .fa-mind-share:after {
+  content: "\10f677"; }
+
+.sys-icon.minus:after, .fa-minus:after {
+  content: "\10f068"; }
+
+.sys-icon.minus-circle:after, .fa-minus-circle:after {
+  content: "\10f056"; }
+
+.sys-icon.minus-hexagon:after, .fa-minus-hexagon:after {
+  content: "\10f307"; }
+
+.sys-icon.minus-octagon:after, .fa-minus-octagon:after {
+  content: "\10f308"; }
+
+.sys-icon.minus-square:after, .fa-minus-square:after {
+  content: "\10f146"; }
+
+.sys-icon.mistletoe:after, .fa-mistletoe:after {
+  content: "\10f7b4"; }
+
+.sys-icon.mitten:after, .fa-mitten:after {
+  content: "\10f7b5"; }
+
+.sys-icon.mobile:after, .fa-mobile:after {
+  content: "\10f10b"; }
+
+.sys-icon.mobile-alt:after, .fa-mobile-alt:after {
+  content: "\10f3cd"; }
+
+.sys-icon.mobile-android:after, .fa-mobile-android:after {
+  content: "\10f3ce"; }
+
+.sys-icon.mobile-android-alt:after, .fa-mobile-android-alt:after {
+  content: "\10f3cf"; }
+
+.sys-icon.money-bill:after, .fa-money-bill:after {
+  content: "\10f0d6"; }
+
+.sys-icon.money-bill-alt:after, .fa-money-bill-alt:after {
+  content: "\10f3d1"; }
+
+.sys-icon.money-bill-wave:after, .fa-money-bill-wave:after {
+  content: "\10f53a"; }
+
+.sys-icon.money-bill-wave-alt:after, .fa-money-bill-wave-alt:after {
+  content: "\10f53b"; }
+
+.sys-icon.money-check:after, .fa-money-check:after {
+  content: "\10f53c"; }
+
+.sys-icon.money-check-alt:after, .fa-money-check-alt:after {
+  content: "\10f53d"; }
+
+.sys-icon.money-check-edit:after, .fa-money-check-edit:after {
+  content: "\10f872"; }
+
+.sys-icon.money-check-edit-alt:after, .fa-money-check-edit-alt:after {
+  content: "\10f873"; }
+
+.sys-icon.monitor-heart-rate:after, .fa-monitor-heart-rate:after {
+  content: "\10f611"; }
+
+.sys-icon.monkey:after, .fa-monkey:after {
+  content: "\10f6fb"; }
+
+.sys-icon.monument:after, .fa-monument:after {
+  content: "\10f5a6"; }
+
+.sys-icon.moon:after, .fa-moon:after {
+  content: "\10f186"; }
+
+.sys-icon.moon-cloud:after, .fa-moon-cloud:after {
+  content: "\10f754"; }
+
+.sys-icon.moon-stars:after, .fa-moon-stars:after {
+  content: "\10f755"; }
+
+.sys-icon.mortar-pestle:after, .fa-mortar-pestle:after {
+  content: "\10f5a7"; }
+
+.sys-icon.mosque:after, .fa-mosque:after {
+  content: "\10f678"; }
+
+.sys-icon.motorcycle:after, .fa-motorcycle:after {
+  content: "\10f21c"; }
+
+.sys-icon.mountain:after, .fa-mountain:after {
+  content: "\10f6fc"; }
+
+.sys-icon.mountains:after, .fa-mountains:after {
+  content: "\10f6fd"; }
+
+.sys-icon.mouse-pointer:after, .fa-mouse-pointer:after {
+  content: "\10f245"; }
+
+.sys-icon.mug:after, .fa-mug:after {
+  content: "\10f874"; }
+
+.sys-icon.mug-hot:after, .fa-mug-hot:after {
+  content: "\10f7b6"; }
+
+.sys-icon.mug-marshmallows:after, .fa-mug-marshmallows:after {
+  content: "\10f7b7"; }
+
+.sys-icon.mug-tea:after, .fa-mug-tea:after {
+  content: "\10f875"; }
+
+.sys-icon.music:after, .fa-music:after {
+  content: "\10f001"; }
+
+.sys-icon.narwhal:after, .fa-narwhal:after {
+  content: "\10f6fe"; }
+
+.sys-icon.network-wired:after, .fa-network-wired:after {
+  content: "\10f6ff"; }
+
+.sys-icon.neuter:after, .fa-neuter:after {
+  content: "\10f22c"; }
+
+.sys-icon.newspaper:after, .fa-newspaper:after {
+  content: "\10f1ea"; }
+
+.sys-icon.not-equal:after, .fa-not-equal:after {
+  content: "\10f53e"; }
+
+.sys-icon.notes-medical:after, .fa-notes-medical:after {
+  content: "\10f481"; }
+
+.sys-icon.object-group:after, .fa-object-group:after {
+  content: "\10f247"; }
+
+.sys-icon.object-ungroup:after, .fa-object-ungroup:after {
+  content: "\10f248"; }
+
+.sys-icon.octagon:after, .fa-octagon:after {
+  content: "\10f306"; }
+
+.sys-icon.oil-can:after, .fa-oil-can:after {
+  content: "\10f613"; }
+
+.sys-icon.oil-temp:after, .fa-oil-temp:after {
+  content: "\10f614"; }
+
+.sys-icon.om:after, .fa-om:after {
+  content: "\10f679"; }
+
+.sys-icon.omega:after, .fa-omega:after {
+  content: "\10f67a"; }
+
+.sys-icon.ornament:after, .fa-ornament:after {
+  content: "\10f7b8"; }
+
+.sys-icon.otter:after, .fa-otter:after {
+  content: "\10f700"; }
+
+.sys-icon.outdent:after, .fa-outdent:after {
+  content: "\10f03b"; }
+
+.sys-icon.overline:after, .fa-overline:after {
+  content: "\10f876"; }
+
+.sys-icon.page-break:after, .fa-page-break:after {
+  content: "\10f877"; }
+
+.sys-icon.pager:after, .fa-pager:after {
+  content: "\10f815"; }
+
+.sys-icon.paint-brush:after, .fa-paint-brush:after {
+  content: "\10f1fc"; }
+
+.sys-icon.paint-brush-alt:after, .fa-paint-brush-alt:after {
+  content: "\10f5a9"; }
+
+.sys-icon.paint-roller:after, .fa-paint-roller:after {
+  content: "\10f5aa"; }
+
+.sys-icon.palette:after, .fa-palette:after {
+  content: "\10f53f"; }
+
+.sys-icon.pallet:after, .fa-pallet:after {
+  content: "\10f482"; }
+
+.sys-icon.pallet-alt:after, .fa-pallet-alt:after {
+  content: "\10f483"; }
+
+.sys-icon.paper-plane:after, .fa-paper-plane:after {
+  content: "\10f1d8"; }
+
+.sys-icon.paperclip:after, .fa-paperclip:after {
+  content: "\10f0c6"; }
+
+.sys-icon.parachute-box:after, .fa-parachute-box:after {
+  content: "\10f4cd"; }
+
+.sys-icon.paragraph:after, .fa-paragraph:after {
+  content: "\10f1dd"; }
+
+.sys-icon.paragraph-rtl:after, .fa-paragraph-rtl:after {
+  content: "\10f878"; }
+
+.sys-icon.parking:after, .fa-parking:after {
+  content: "\10f540"; }
+
+.sys-icon.parking-circle:after, .fa-parking-circle:after {
+  content: "\10f615"; }
+
+.sys-icon.parking-circle-slash:after, .fa-parking-circle-slash:after {
+  content: "\10f616"; }
+
+.sys-icon.parking-slash:after, .fa-parking-slash:after {
+  content: "\10f617"; }
+
+.sys-icon.passport:after, .fa-passport:after {
+  content: "\10f5ab"; }
+
+.sys-icon.pastafarianism:after, .fa-pastafarianism:after {
+  content: "\10f67b"; }
+
+.sys-icon.paste:after, .fa-paste:after {
+  content: "\10f0ea"; }
+
+.sys-icon.pause:after, .fa-pause:after {
+  content: "\10f04c"; }
+
+.sys-icon.pause-circle:after, .fa-pause-circle:after {
+  content: "\10f28b"; }
+
+.sys-icon.paw:after, .fa-paw:after {
+  content: "\10f1b0"; }
+
+.sys-icon.paw-alt:after, .fa-paw-alt:after {
+  content: "\10f701"; }
+
+.sys-icon.paw-claws:after, .fa-paw-claws:after {
+  content: "\10f702"; }
+
+.sys-icon.peace:after, .fa-peace:after {
+  content: "\10f67c"; }
+
+.sys-icon.pegasus:after, .fa-pegasus:after {
+  content: "\10f703"; }
+
+.sys-icon.pen:after, .fa-pen:after {
+  content: "\10f304"; }
+
+.sys-icon.pen-alt:after, .fa-pen-alt:after {
+  content: "\10f305"; }
+
+.sys-icon.pen-fancy:after, .fa-pen-fancy:after {
+  content: "\10f5ac"; }
+
+.sys-icon.pen-nib:after, .fa-pen-nib:after {
+  content: "\10f5ad"; }
+
+.sys-icon.pen-square:after, .fa-pen-square:after {
+  content: "\10f14b"; }
+
+.sys-icon.pencil:after, .fa-pencil:after {
+  content: "\10f040"; }
+
+.sys-icon.pencil-alt:after, .fa-pencil-alt:after {
+  content: "\10f303"; }
+
+.sys-icon.pencil-paintbrush:after, .fa-pencil-paintbrush:after {
+  content: "\10f618"; }
+
+.sys-icon.pencil-ruler:after, .fa-pencil-ruler:after {
+  content: "\10f5ae"; }
+
+.sys-icon.pennant:after, .fa-pennant:after {
+  content: "\10f456"; }
+
+.sys-icon.people-carry:after, .fa-people-carry:after {
+  content: "\10f4ce"; }
+
+.sys-icon.pepper-hot:after, .fa-pepper-hot:after {
+  content: "\10f816"; }
+
+.sys-icon.percent:after, .fa-percent:after {
+  content: "\10f295"; }
+
+.sys-icon.percentage:after, .fa-percentage:after {
+  content: "\10f541"; }
+
+.sys-icon.person-booth:after, .fa-person-booth:after {
+  content: "\10f756"; }
+
+.sys-icon.person-carry:after, .fa-person-carry:after {
+  content: "\10f4cf"; }
+
+.sys-icon.person-dolly:after, .fa-person-dolly:after {
+  content: "\10f4d0"; }
+
+.sys-icon.person-dolly-empty:after, .fa-person-dolly-empty:after {
+  content: "\10f4d1"; }
+
+.sys-icon.person-sign:after, .fa-person-sign:after {
+  content: "\10f757"; }
+
+.sys-icon.phone:after, .fa-phone:after {
+  content: "\10f095"; }
+
+.sys-icon.phone-alt:after, .fa-phone-alt:after {
+  content: "\10f879"; }
+
+.sys-icon.phone-laptop:after, .fa-phone-laptop:after {
+  content: "\10f87a"; }
+
+.sys-icon.phone-office:after, .fa-phone-office:after {
+  content: "\10f67d"; }
+
+.sys-icon.phone-plus:after, .fa-phone-plus:after {
+  content: "\10f4d2"; }
+
+.sys-icon.phone-slash:after, .fa-phone-slash:after {
+  content: "\10f3dd"; }
+
+.sys-icon.phone-square:after, .fa-phone-square:after {
+  content: "\10f098"; }
+
+.sys-icon.phone-square-alt:after, .fa-phone-square-alt:after {
+  content: "\10f87b"; }
+
+.sys-icon.phone-volume:after, .fa-phone-volume:after {
+  content: "\10f2a0"; }
+
+.sys-icon.photo-video:after, .fa-photo-video:after {
+  content: "\10f87c"; }
+
+.sys-icon.pi:after, .fa-pi:after {
+  content: "\10f67e"; }
+
+.sys-icon.pie:after, .fa-pie:after {
+  content: "\10f705"; }
+
+.sys-icon.pig:after, .fa-pig:after {
+  content: "\10f706"; }
+
+.sys-icon.piggy-bank:after, .fa-piggy-bank:after {
+  content: "\10f4d3"; }
+
+.sys-icon.pills:after, .fa-pills:after {
+  content: "\10f484"; }
+
+.sys-icon.pizza:after, .fa-pizza:after {
+  content: "\10f817"; }
+
+.sys-icon.pizza-slice:after, .fa-pizza-slice:after {
+  content: "\10f818"; }
+
+.sys-icon.place-of-worship:after, .fa-place-of-worship:after {
+  content: "\10f67f"; }
+
+.sys-icon.plane:after, .fa-plane:after {
+  content: "\10f072"; }
+
+.sys-icon.plane-alt:after, .fa-plane-alt:after {
+  content: "\10f3de"; }
+
+.sys-icon.plane-arrival:after, .fa-plane-arrival:after {
+  content: "\10f5af"; }
+
+.sys-icon.plane-departure:after, .fa-plane-departure:after {
+  content: "\10f5b0"; }
+
+.sys-icon.play:after, .fa-play:after {
+  content: "\10f04b"; }
+
+.sys-icon.play-circle:after, .fa-play-circle:after {
+  content: "\10f144"; }
+
+.sys-icon.plug:after, .fa-plug:after {
+  content: "\10f1e6"; }
+
+.sys-icon.plus:after, .fa-plus:after {
+  content: "\10f067"; }
+
+.sys-icon.plus-circle:after, .fa-plus-circle:after {
+  content: "\10f055"; }
+
+.sys-icon.plus-hexagon:after, .fa-plus-hexagon:after {
+  content: "\10f300"; }
+
+.sys-icon.plus-octagon:after, .fa-plus-octagon:after {
+  content: "\10f301"; }
+
+.sys-icon.plus-square:after, .fa-plus-square:after {
+  content: "\10f0fe"; }
+
+.sys-icon.podcast:after, .fa-podcast:after {
+  content: "\10f2ce"; }
+
+.sys-icon.podium:after, .fa-podium:after {
+  content: "\10f680"; }
+
+.sys-icon.podium-star:after, .fa-podium-star:after {
+  content: "\10f758"; }
+
+.sys-icon.poll:after, .fa-poll:after {
+  content: "\10f681"; }
+
+.sys-icon.poll-h:after, .fa-poll-h:after {
+  content: "\10f682"; }
+
+.sys-icon.poll-people:after, .fa-poll-people:after {
+  content: "\10f759"; }
+
+.sys-icon.poo:after, .fa-poo:after {
+  content: "\10f2fe"; }
+
+.sys-icon.poo-storm:after, .fa-poo-storm:after {
+  content: "\10f75a"; }
+
+.sys-icon.poop:after, .fa-poop:after {
+  content: "\10f619"; }
+
+.sys-icon.popcorn:after, .fa-popcorn:after {
+  content: "\10f819"; }
+
+.sys-icon.portrait:after, .fa-portrait:after {
+  content: "\10f3e0"; }
+
+.sys-icon.pound-sign:after, .fa-pound-sign:after {
+  content: "\10f154"; }
+
+.sys-icon.power-off:after, .fa-power-off:after {
+  content: "\10f011"; }
+
+.sys-icon.pray:after, .fa-pray:after {
+  content: "\10f683"; }
+
+.sys-icon.praying-hands:after, .fa-praying-hands:after {
+  content: "\10f684"; }
+
+.sys-icon.prescription:after, .fa-prescription:after {
+  content: "\10f5b1"; }
+
+.sys-icon.prescription-bottle:after, .fa-prescription-bottle:after {
+  content: "\10f485"; }
+
+.sys-icon.prescription-bottle-alt:after, .fa-prescription-bottle-alt:after {
+  content: "\10f486"; }
+
+.sys-icon.presentation:after, .fa-presentation:after {
+  content: "\10f685"; }
+
+.sys-icon.print:after, .fa-print:after {
+  content: "\10f02f"; }
+
+.sys-icon.print-search:after, .fa-print-search:after {
+  content: "\10f81a"; }
+
+.sys-icon.print-slash:after, .fa-print-slash:after {
+  content: "\10f686"; }
+
+.sys-icon.procedures:after, .fa-procedures:after {
+  content: "\10f487"; }
+
+.sys-icon.project-diagram:after, .fa-project-diagram:after {
+  content: "\10f542"; }
+
+.sys-icon.pumpkin:after, .fa-pumpkin:after {
+  content: "\10f707"; }
+
+.sys-icon.puzzle-piece:after, .fa-puzzle-piece:after {
+  content: "\10f12e"; }
+
+.sys-icon.qrcode:after, .fa-qrcode:after {
+  content: "\10f029"; }
+
+.sys-icon.question:after, .fa-question:after {
+  content: "\10f128"; }
+
+.sys-icon.question-circle:after, .fa-question-circle:after {
+  content: "\10f059"; }
+
+.sys-icon.question-square:after, .fa-question-square:after {
+  content: "\10f2fd"; }
+
+.sys-icon.quidditch:after, .fa-quidditch:after {
+  content: "\10f458"; }
+
+.sys-icon.quote-left:after, .fa-quote-left:after {
+  content: "\10f10d"; }
+
+.sys-icon.quote-right:after, .fa-quote-right:after {
+  content: "\10f10e"; }
+
+.sys-icon.quran:after, .fa-quran:after {
+  content: "\10f687"; }
+
+.sys-icon.rabbit:after, .fa-rabbit:after {
+  content: "\10f708"; }
+
+.sys-icon.rabbit-fast:after, .fa-rabbit-fast:after {
+  content: "\10f709"; }
+
+.sys-icon.racquet:after, .fa-racquet:after {
+  content: "\10f45a"; }
+
+.sys-icon.radiation:after, .fa-radiation:after {
+  content: "\10f7b9"; }
+
+.sys-icon.radiation-alt:after, .fa-radiation-alt:after {
+  content: "\10f7ba"; }
+
+.sys-icon.rainbow:after, .fa-rainbow:after {
+  content: "\10f75b"; }
+
+.sys-icon.raindrops:after, .fa-raindrops:after {
+  content: "\10f75c"; }
+
+.sys-icon.ram:after, .fa-ram:after {
+  content: "\10f70a"; }
+
+.sys-icon.ramp-loading:after, .fa-ramp-loading:after {
+  content: "\10f4d4"; }
+
+.sys-icon.random:after, .fa-random:after {
+  content: "\10f074"; }
+
+.sys-icon.receipt:after, .fa-receipt:after {
+  content: "\10f543"; }
+
+.sys-icon.rectangle-landscape:after, .fa-rectangle-landscape:after {
+  content: "\10f2fa"; }
+
+.sys-icon.rectangle-portrait:after, .fa-rectangle-portrait:after {
+  content: "\10f2fb"; }
+
+.sys-icon.rectangle-wide:after, .fa-rectangle-wide:after {
+  content: "\10f2fc"; }
+
+.sys-icon.recycle:after, .fa-recycle:after {
+  content: "\10f1b8"; }
+
+.sys-icon.redo:after, .fa-redo:after {
+  content: "\10f01e"; }
+
+.sys-icon.redo-alt:after, .fa-redo-alt:after {
+  content: "\10f2f9"; }
+
+.sys-icon.registered:after, .fa-registered:after {
+  content: "\10f25d"; }
+
+.sys-icon.remove-format:after, .fa-remove-format:after {
+  content: "\10f87d"; }
+
+.sys-icon.repeat:after, .fa-repeat:after {
+  content: "\10f363"; }
+
+.sys-icon.repeat-1:after, .fa-repeat-1:after {
+  content: "\10f365"; }
+
+.sys-icon.repeat-1-alt:after, .fa-repeat-1-alt:after {
+  content: "\10f366"; }
+
+.sys-icon.repeat-alt:after, .fa-repeat-alt:after {
+  content: "\10f364"; }
+
+.sys-icon.reply:after, .fa-reply:after {
+  content: "\10f3e5"; }
+
+.sys-icon.reply-all:after, .fa-reply-all:after {
+  content: "\10f122"; }
+
+.sys-icon.republican:after, .fa-republican:after {
+  content: "\10f75e"; }
+
+.sys-icon.restroom:after, .fa-restroom:after {
+  content: "\10f7bd"; }
+
+.sys-icon.retweet:after, .fa-retweet:after {
+  content: "\10f079"; }
+
+.sys-icon.retweet-alt:after, .fa-retweet-alt:after {
+  content: "\10f361"; }
+
+.sys-icon.ribbon:after, .fa-ribbon:after {
+  content: "\10f4d6"; }
+
+.sys-icon.ring:after, .fa-ring:after {
+  content: "\10f70b"; }
+
+.sys-icon.rings-wedding:after, .fa-rings-wedding:after {
+  content: "\10f81b"; }
+
+.sys-icon.road:after, .fa-road:after {
+  content: "\10f018"; }
+
+.sys-icon.robot:after, .fa-robot:after {
+  content: "\10f544"; }
+
+.sys-icon.rocket:after, .fa-rocket:after {
+  content: "\10f135"; }
+
+.sys-icon.route:after, .fa-route:after {
+  content: "\10f4d7"; }
+
+.sys-icon.route-highway:after, .fa-route-highway:after {
+  content: "\10f61a"; }
+
+.sys-icon.route-interstate:after, .fa-route-interstate:after {
+  content: "\10f61b"; }
+
+.sys-icon.rss:after, .fa-rss:after {
+  content: "\10f09e"; }
+
+.sys-icon.rss-square:after, .fa-rss-square:after {
+  content: "\10f143"; }
+
+.sys-icon.ruble-sign:after, .fa-ruble-sign:after {
+  content: "\10f158"; }
+
+.sys-icon.ruler:after, .fa-ruler:after {
+  content: "\10f545"; }
+
+.sys-icon.ruler-combined:after, .fa-ruler-combined:after {
+  content: "\10f546"; }
+
+.sys-icon.ruler-horizontal:after, .fa-ruler-horizontal:after {
+  content: "\10f547"; }
+
+.sys-icon.ruler-triangle:after, .fa-ruler-triangle:after {
+  content: "\10f61c"; }
+
+.sys-icon.ruler-vertical:after, .fa-ruler-vertical:after {
+  content: "\10f548"; }
+
+.sys-icon.running:after, .fa-running:after {
+  content: "\10f70c"; }
+
+.sys-icon.rupee-sign:after, .fa-rupee-sign:after {
+  content: "\10f156"; }
+
+.sys-icon.rv:after, .fa-rv:after {
+  content: "\10f7be"; }
+
+.sys-icon.sack:after, .fa-sack:after {
+  content: "\10f81c"; }
+
+.sys-icon.sack-dollar:after, .fa-sack-dollar:after {
+  content: "\10f81d"; }
+
+.sys-icon.sad-cry:after, .fa-sad-cry:after {
+  content: "\10f5b3"; }
+
+.sys-icon.sad-tear:after, .fa-sad-tear:after {
+  content: "\10f5b4"; }
+
+.sys-icon.salad:after, .fa-salad:after {
+  content: "\10f81e"; }
+
+.sys-icon.sandwich:after, .fa-sandwich:after {
+  content: "\10f81f"; }
+
+.sys-icon.satellite:after, .fa-satellite:after {
+  content: "\10f7bf"; }
+
+.sys-icon.satellite-dish:after, .fa-satellite-dish:after {
+  content: "\10f7c0"; }
+
+.sys-icon.sausage:after, .fa-sausage:after {
+  content: "\10f820"; }
+
+.sys-icon.save:after, .fa-save:after {
+  content: "\10f0c7"; }
+
+.sys-icon.scalpel:after, .fa-scalpel:after {
+  content: "\10f61d"; }
+
+.sys-icon.scalpel-path:after, .fa-scalpel-path:after {
+  content: "\10f61e"; }
+
+.sys-icon.scanner:after, .fa-scanner:after {
+  content: "\10f488"; }
+
+.sys-icon.scanner-keyboard:after, .fa-scanner-keyboard:after {
+  content: "\10f489"; }
+
+.sys-icon.scanner-touchscreen:after, .fa-scanner-touchscreen:after {
+  content: "\10f48a"; }
+
+.sys-icon.scarecrow:after, .fa-scarecrow:after {
+  content: "\10f70d"; }
+
+.sys-icon.scarf:after, .fa-scarf:after {
+  content: "\10f7c1"; }
+
+.sys-icon.school:after, .fa-school:after {
+  content: "\10f549"; }
+
+.sys-icon.screwdriver:after, .fa-screwdriver:after {
+  content: "\10f54a"; }
+
+.sys-icon.scroll:after, .fa-scroll:after {
+  content: "\10f70e"; }
+
+.sys-icon.scroll-old:after, .fa-scroll-old:after {
+  content: "\10f70f"; }
+
+.sys-icon.scrubber:after, .fa-scrubber:after {
+  content: "\10f2f8"; }
+
+.sys-icon.scythe:after, .fa-scythe:after {
+  content: "\10f710"; }
+
+.sys-icon.sd-card:after, .fa-sd-card:after {
+  content: "\10f7c2"; }
+
+.sys-icon.search:after, .fa-search:after {
+  content: "\10f002"; }
+
+.sys-icon.search-dollar:after, .fa-search-dollar:after {
+  content: "\10f688"; }
+
+.sys-icon.search-location:after, .fa-search-location:after {
+  content: "\10f689"; }
+
+.sys-icon.search-minus:after, .fa-search-minus:after {
+  content: "\10f010"; }
+
+.sys-icon.search-plus:after, .fa-search-plus:after {
+  content: "\10f00e"; }
+
+.sys-icon.seedling:after, .fa-seedling:after {
+  content: "\10f4d8"; }
+
+.sys-icon.send-back:after, .fa-send-back:after {
+  content: "\10f87e"; }
+
+.sys-icon.send-backward:after, .fa-send-backward:after {
+  content: "\10f87f"; }
+
+.sys-icon.server:after, .fa-server:after {
+  content: "\10f233"; }
+
+.sys-icon.shapes:after, .fa-shapes:after {
+  content: "\10f61f"; }
+
+.sys-icon.share:after, .fa-share:after {
+  content: "\10f064"; }
+
+.sys-icon.share-all:after, .fa-share-all:after {
+  content: "\10f367"; }
+
+.sys-icon.share-alt:after, .fa-share-alt:after {
+  content: "\10f1e0"; }
+
+.sys-icon.share-alt-square:after, .fa-share-alt-square:after {
+  content: "\10f1e1"; }
+
+.sys-icon.share-square:after, .fa-share-square:after {
+  content: "\10f14d"; }
+
+.sys-icon.sheep:after, .fa-sheep:after {
+  content: "\10f711"; }
+
+.sys-icon.shekel-sign:after, .fa-shekel-sign:after {
+  content: "\10f20b"; }
+
+.sys-icon.shield:after, .fa-shield:after {
+  content: "\10f132"; }
+
+.sys-icon.shield-alt:after, .fa-shield-alt:after {
+  content: "\10f3ed"; }
+
+.sys-icon.shield-check:after, .fa-shield-check:after {
+  content: "\10f2f7"; }
+
+.sys-icon.shield-cross:after, .fa-shield-cross:after {
+  content: "\10f712"; }
+
+.sys-icon.ship:after, .fa-ship:after {
+  content: "\10f21a"; }
+
+.sys-icon.shipping-fast:after, .fa-shipping-fast:after {
+  content: "\10f48b"; }
+
+.sys-icon.shipping-timed:after, .fa-shipping-timed:after {
+  content: "\10f48c"; }
+
+.sys-icon.shish-kebab:after, .fa-shish-kebab:after {
+  content: "\10f821"; }
+
+.sys-icon.shoe-prints:after, .fa-shoe-prints:after {
+  content: "\10f54b"; }
+
+.sys-icon.shopping-bag:after, .fa-shopping-bag:after {
+  content: "\10f290"; }
+
+.sys-icon.shopping-basket:after, .fa-shopping-basket:after {
+  content: "\10f291"; }
+
+.sys-icon.shopping-cart:after, .fa-shopping-cart:after {
+  content: "\10f07a"; }
+
+.sys-icon.shovel:after, .fa-shovel:after {
+  content: "\10f713"; }
+
+.sys-icon.shovel-snow:after, .fa-shovel-snow:after {
+  content: "\10f7c3"; }
+
+.sys-icon.shower:after, .fa-shower:after {
+  content: "\10f2cc"; }
+
+.sys-icon.shredder:after, .fa-shredder:after {
+  content: "\10f68a"; }
+
+.sys-icon.shuttle-van:after, .fa-shuttle-van:after {
+  content: "\10f5b6"; }
+
+.sys-icon.shuttlecock:after, .fa-shuttlecock:after {
+  content: "\10f45b"; }
+
+.sys-icon.sickle:after, .fa-sickle:after {
+  content: "\10f822"; }
+
+.sys-icon.sigma:after, .fa-sigma:after {
+  content: "\10f68b"; }
+
+.sys-icon.sign:after, .fa-sign:after {
+  content: "\10f4d9"; }
+
+.sys-icon.sign-in:after, .fa-sign-in:after {
+  content: "\10f090"; }
+
+.sys-icon.sign-in-alt:after, .fa-sign-in-alt:after {
+  content: "\10f2f6"; }
+
+.sys-icon.sign-language:after, .fa-sign-language:after {
+  content: "\10f2a7"; }
+
+.sys-icon.sign-out:after, .fa-sign-out:after {
+  content: "\10f08b"; }
+
+.sys-icon.sign-out-alt:after, .fa-sign-out-alt:after {
+  content: "\10f2f5"; }
+
+.sys-icon.signal:after, .fa-signal:after {
+  content: "\10f012"; }
+
+.sys-icon.signal-1:after, .fa-signal-1:after {
+  content: "\10f68c"; }
+
+.sys-icon.signal-2:after, .fa-signal-2:after {
+  content: "\10f68d"; }
+
+.sys-icon.signal-3:after, .fa-signal-3:after {
+  content: "\10f68e"; }
+
+.sys-icon.signal-4:after, .fa-signal-4:after {
+  content: "\10f68f"; }
+
+.sys-icon.signal-alt:after, .fa-signal-alt:after {
+  content: "\10f690"; }
+
+.sys-icon.signal-alt-1:after, .fa-signal-alt-1:after {
+  content: "\10f691"; }
+
+.sys-icon.signal-alt-2:after, .fa-signal-alt-2:after {
+  content: "\10f692"; }
+
+.sys-icon.signal-alt-3:after, .fa-signal-alt-3:after {
+  content: "\10f693"; }
+
+.sys-icon.signal-alt-slash:after, .fa-signal-alt-slash:after {
+  content: "\10f694"; }
+
+.sys-icon.signal-slash:after, .fa-signal-slash:after {
+  content: "\10f695"; }
+
+.sys-icon.signature:after, .fa-signature:after {
+  content: "\10f5b7"; }
+
+.sys-icon.sim-card:after, .fa-sim-card:after {
+  content: "\10f7c4"; }
+
+.sys-icon.sitemap:after, .fa-sitemap:after {
+  content: "\10f0e8"; }
+
+.sys-icon.skating:after, .fa-skating:after {
+  content: "\10f7c5"; }
+
+.sys-icon.skeleton:after, .fa-skeleton:after {
+  content: "\10f620"; }
+
+.sys-icon.ski-jump:after, .fa-ski-jump:after {
+  content: "\10f7c7"; }
+
+.sys-icon.ski-lift:after, .fa-ski-lift:after {
+  content: "\10f7c8"; }
+
+.sys-icon.skiing:after, .fa-skiing:after {
+  content: "\10f7c9"; }
+
+.sys-icon.skiing-nordic:after, .fa-skiing-nordic:after {
+  content: "\10f7ca"; }
+
+.sys-icon.skull:after, .fa-skull:after {
+  content: "\10f54c"; }
+
+.sys-icon.skull-crossbones:after, .fa-skull-crossbones:after {
+  content: "\10f714"; }
+
+.sys-icon.slash:after, .fa-slash:after {
+  content: "\10f715"; }
+
+.sys-icon.sledding:after, .fa-sledding:after {
+  content: "\10f7cb"; }
+
+.sys-icon.sleigh:after, .fa-sleigh:after {
+  content: "\10f7cc"; }
+
+.sys-icon.sliders-h:after, .fa-sliders-h:after {
+  content: "\10f1de"; }
+
+.sys-icon.sliders-h-square:after, .fa-sliders-h-square:after {
+  content: "\10f3f0"; }
+
+.sys-icon.sliders-v:after, .fa-sliders-v:after {
+  content: "\10f3f1"; }
+
+.sys-icon.sliders-v-square:after, .fa-sliders-v-square:after {
+  content: "\10f3f2"; }
+
+.sys-icon.smile:after, .fa-smile:after {
+  content: "\10f118"; }
+
+.sys-icon.smile-beam:after, .fa-smile-beam:after {
+  content: "\10f5b8"; }
+
+.sys-icon.smile-plus:after, .fa-smile-plus:after {
+  content: "\10f5b9"; }
+
+.sys-icon.smile-wink:after, .fa-smile-wink:after {
+  content: "\10f4da"; }
+
+.sys-icon.smog:after, .fa-smog:after {
+  content: "\10f75f"; }
+
+.sys-icon.smoke:after, .fa-smoke:after {
+  content: "\10f760"; }
+
+.sys-icon.smoking:after, .fa-smoking:after {
+  content: "\10f48d"; }
+
+.sys-icon.smoking-ban:after, .fa-smoking-ban:after {
+  content: "\10f54d"; }
+
+.sys-icon.sms:after, .fa-sms:after {
+  content: "\10f7cd"; }
+
+.sys-icon.snake:after, .fa-snake:after {
+  content: "\10f716"; }
+
+.sys-icon.snooze:after, .fa-snooze:after {
+  content: "\10f880"; }
+
+.sys-icon.snow-blowing:after, .fa-snow-blowing:after {
+  content: "\10f761"; }
+
+.sys-icon.snowboarding:after, .fa-snowboarding:after {
+  content: "\10f7ce"; }
+
+.sys-icon.snowflake:after, .fa-snowflake:after {
+  content: "\10f2dc"; }
+
+.sys-icon.snowflakes:after, .fa-snowflakes:after {
+  content: "\10f7cf"; }
+
+.sys-icon.snowman:after, .fa-snowman:after {
+  content: "\10f7d0"; }
+
+.sys-icon.snowmobile:after, .fa-snowmobile:after {
+  content: "\10f7d1"; }
+
+.sys-icon.snowplow:after, .fa-snowplow:after {
+  content: "\10f7d2"; }
+
+.sys-icon.socks:after, .fa-socks:after {
+  content: "\10f696"; }
+
+.sys-icon.solar-panel:after, .fa-solar-panel:after {
+  content: "\10f5ba"; }
+
+.sys-icon.sort:after, .fa-sort:after {
+  content: "\10f0dc"; }
+
+.sys-icon.sort-alpha-down:after, .fa-sort-alpha-down:after {
+  content: "\10f15d"; }
+
+.sys-icon.sort-alpha-down-alt:after, .fa-sort-alpha-down-alt:after {
+  content: "\10f881"; }
+
+.sys-icon.sort-alpha-up:after, .fa-sort-alpha-up:after {
+  content: "\10f15e"; }
+
+.sys-icon.sort-alpha-up-alt:after, .fa-sort-alpha-up-alt:after {
+  content: "\10f882"; }
+
+.sys-icon.sort-alt:after, .fa-sort-alt:after {
+  content: "\10f883"; }
+
+.sys-icon.sort-amount-down:after, .fa-sort-amount-down:after {
+  content: "\10f160"; }
+
+.sys-icon.sort-amount-down-alt:after, .fa-sort-amount-down-alt:after {
+  content: "\10f884"; }
+
+.sys-icon.sort-amount-up:after, .fa-sort-amount-up:after {
+  content: "\10f161"; }
+
+.sys-icon.sort-amount-up-alt:after, .fa-sort-amount-up-alt:after {
+  content: "\10f885"; }
+
+.sys-icon.sort-down:after, .fa-sort-down:after {
+  content: "\10f0dd"; }
+
+.sys-icon.sort-numeric-down:after, .fa-sort-numeric-down:after {
+  content: "\10f162"; }
+
+.sys-icon.sort-numeric-down-alt:after, .fa-sort-numeric-down-alt:after {
+  content: "\10f886"; }
+
+.sys-icon.sort-numeric-up:after, .fa-sort-numeric-up:after {
+  content: "\10f163"; }
+
+.sys-icon.sort-numeric-up-alt:after, .fa-sort-numeric-up-alt:after {
+  content: "\10f887"; }
+
+.sys-icon.sort-shapes-down:after, .fa-sort-shapes-down:after {
+  content: "\10f888"; }
+
+.sys-icon.sort-shapes-down-alt:after, .fa-sort-shapes-down-alt:after {
+  content: "\10f889"; }
+
+.sys-icon.sort-shapes-up:after, .fa-sort-shapes-up:after {
+  content: "\10f88a"; }
+
+.sys-icon.sort-shapes-up-alt:after, .fa-sort-shapes-up-alt:after {
+  content: "\10f88b"; }
+
+.sys-icon.sort-size-down:after, .fa-sort-size-down:after {
+  content: "\10f88c"; }
+
+.sys-icon.sort-size-down-alt:after, .fa-sort-size-down-alt:after {
+  content: "\10f88d"; }
+
+.sys-icon.sort-size-up:after, .fa-sort-size-up:after {
+  content: "\10f88e"; }
+
+.sys-icon.sort-size-up-alt:after, .fa-sort-size-up-alt:after {
+  content: "\10f88f"; }
+
+.sys-icon.sort-up:after, .fa-sort-up:after {
+  content: "\10f0de"; }
+
+.sys-icon.soup:after, .fa-soup:after {
+  content: "\10f823"; }
+
+.sys-icon.spa:after, .fa-spa:after {
+  content: "\10f5bb"; }
+
+.sys-icon.space-shuttle:after, .fa-space-shuttle:after {
+  content: "\10f197"; }
+
+.sys-icon.spade:after, .fa-spade:after {
+  content: "\10f2f4"; }
+
+.sys-icon.sparkles:after, .fa-sparkles:after {
+  content: "\10f890"; }
+
+.sys-icon.spell-check:after, .fa-spell-check:after {
+  content: "\10f891"; }
+
+.sys-icon.spider:after, .fa-spider:after {
+  content: "\10f717"; }
+
+.sys-icon.spider-black-widow:after, .fa-spider-black-widow:after {
+  content: "\10f718"; }
+
+.sys-icon.spider-web:after, .fa-spider-web:after {
+  content: "\10f719"; }
+
+.sys-icon.spinner:after, .fa-spinner:after {
+  content: "\10f110"; }
+
+.sys-icon.spinner-third:after, .fa-spinner-third:after {
+  content: "\10f3f4"; }
+
+.sys-icon.splotch:after, .fa-splotch:after {
+  content: "\10f5bc"; }
+
+.sys-icon.spray-can:after, .fa-spray-can:after {
+  content: "\10f5bd"; }
+
+.sys-icon.square:after, .fa-square:after {
+  content: "\10f0c8"; }
+
+.sys-icon.square-full:after, .fa-square-full:after {
+  content: "\10f45c"; }
+
+.sys-icon.square-root:after, .fa-square-root:after {
+  content: "\10f697"; }
+
+.sys-icon.square-root-alt:after, .fa-square-root-alt:after {
+  content: "\10f698"; }
+
+.sys-icon.squirrel:after, .fa-squirrel:after {
+  content: "\10f71a"; }
+
+.sys-icon.staff:after, .fa-staff:after {
+  content: "\10f71b"; }
+
+.sys-icon.stamp:after, .fa-stamp:after {
+  content: "\10f5bf"; }
+
+.sys-icon.star:after, .fa-star:after {
+  content: "\10f005"; }
+
+.sys-icon.star-and-crescent:after, .fa-star-and-crescent:after {
+  content: "\10f699"; }
+
+.sys-icon.star-christmas:after, .fa-star-christmas:after {
+  content: "\10f7d4"; }
+
+.sys-icon.star-exclamation:after, .fa-star-exclamation:after {
+  content: "\10f2f3"; }
+
+.sys-icon.star-half:after, .fa-star-half:after {
+  content: "\10f089"; }
+
+.sys-icon.star-half-alt:after, .fa-star-half-alt:after {
+  content: "\10f5c0"; }
+
+.sys-icon.star-of-david:after, .fa-star-of-david:after {
+  content: "\10f69a"; }
+
+.sys-icon.star-of-life:after, .fa-star-of-life:after {
+  content: "\10f621"; }
+
+.sys-icon.stars:after, .fa-stars:after {
+  content: "\10f762"; }
+
+.sys-icon.steak:after, .fa-steak:after {
+  content: "\10f824"; }
+
+.sys-icon.steering-wheel:after, .fa-steering-wheel:after {
+  content: "\10f622"; }
+
+.sys-icon.step-backward:after, .fa-step-backward:after {
+  content: "\10f048"; }
+
+.sys-icon.step-forward:after, .fa-step-forward:after {
+  content: "\10f051"; }
+
+.sys-icon.stethoscope:after, .fa-stethoscope:after {
+  content: "\10f0f1"; }
+
+.sys-icon.sticky-note:after, .fa-sticky-note:after {
+  content: "\10f249"; }
+
+.sys-icon.stocking:after, .fa-stocking:after {
+  content: "\10f7d5"; }
+
+.sys-icon.stomach:after, .fa-stomach:after {
+  content: "\10f623"; }
+
+.sys-icon.stop:after, .fa-stop:after {
+  content: "\10f04d"; }
+
+.sys-icon.stop-circle:after, .fa-stop-circle:after {
+  content: "\10f28d"; }
+
+.sys-icon.stopwatch:after, .fa-stopwatch:after {
+  content: "\10f2f2"; }
+
+.sys-icon.store:after, .fa-store:after {
+  content: "\10f54e"; }
+
+.sys-icon.store-alt:after, .fa-store-alt:after {
+  content: "\10f54f"; }
+
+.sys-icon.stream:after, .fa-stream:after {
+  content: "\10f550"; }
+
+.sys-icon.street-view:after, .fa-street-view:after {
+  content: "\10f21d"; }
+
+.sys-icon.stretcher:after, .fa-stretcher:after {
+  content: "\10f825"; }
+
+.sys-icon.strikethrough:after, .fa-strikethrough:after {
+  content: "\10f0cc"; }
+
+.sys-icon.stroopwafel:after, .fa-stroopwafel:after {
+  content: "\10f551"; }
+
+.sys-icon.subscript:after, .fa-subscript:after {
+  content: "\10f12c"; }
+
+.sys-icon.subway:after, .fa-subway:after {
+  content: "\10f239"; }
+
+.sys-icon.suitcase:after, .fa-suitcase:after {
+  content: "\10f0f2"; }
+
+.sys-icon.suitcase-rolling:after, .fa-suitcase-rolling:after {
+  content: "\10f5c1"; }
+
+.sys-icon.sun:after, .fa-sun:after {
+  content: "\10f185"; }
+
+.sys-icon.sun-cloud:after, .fa-sun-cloud:after {
+  content: "\10f763"; }
+
+.sys-icon.sun-dust:after, .fa-sun-dust:after {
+  content: "\10f764"; }
+
+.sys-icon.sun-haze:after, .fa-sun-haze:after {
+  content: "\10f765"; }
+
+.sys-icon.sunglasses:after, .fa-sunglasses:after {
+  content: "\10f892"; }
+
+.sys-icon.sunrise:after, .fa-sunrise:after {
+  content: "\10f766"; }
+
+.sys-icon.sunset:after, .fa-sunset:after {
+  content: "\10f767"; }
+
+.sys-icon.superscript:after, .fa-superscript:after {
+  content: "\10f12b"; }
+
+.sys-icon.surprise:after, .fa-surprise:after {
+  content: "\10f5c2"; }
+
+.sys-icon.swatchbook:after, .fa-swatchbook:after {
+  content: "\10f5c3"; }
+
+.sys-icon.swimmer:after, .fa-swimmer:after {
+  content: "\10f5c4"; }
+
+.sys-icon.swimming-pool:after, .fa-swimming-pool:after {
+  content: "\10f5c5"; }
+
+.sys-icon.sword:after, .fa-sword:after {
+  content: "\10f71c"; }
+
+.sys-icon.swords:after, .fa-swords:after {
+  content: "\10f71d"; }
+
+.sys-icon.synagogue:after, .fa-synagogue:after {
+  content: "\10f69b"; }
+
+.sys-icon.sync:after, .fa-sync:after {
+  content: "\10f021"; }
+
+.sys-icon.sync-alt:after, .fa-sync-alt:after {
+  content: "\10f2f1"; }
+
+.sys-icon.syringe:after, .fa-syringe:after {
+  content: "\10f48e"; }
+
+.sys-icon.table:after, .fa-table:after {
+  content: "\10f0ce"; }
+
+.sys-icon.table-tennis:after, .fa-table-tennis:after {
+  content: "\10f45d"; }
+
+.sys-icon.tablet:after, .fa-tablet:after {
+  content: "\10f10a"; }
+
+.sys-icon.tablet-alt:after, .fa-tablet-alt:after {
+  content: "\10f3fa"; }
+
+.sys-icon.tablet-android:after, .fa-tablet-android:after {
+  content: "\10f3fb"; }
+
+.sys-icon.tablet-android-alt:after, .fa-tablet-android-alt:after {
+  content: "\10f3fc"; }
+
+.sys-icon.tablet-rugged:after, .fa-tablet-rugged:after {
+  content: "\10f48f"; }
+
+.sys-icon.tablets:after, .fa-tablets:after {
+  content: "\10f490"; }
+
+.sys-icon.tachometer:after, .fa-tachometer:after {
+  content: "\10f0e4"; }
+
+.sys-icon.tachometer-alt:after, .fa-tachometer-alt:after {
+  content: "\10f3fd"; }
+
+.sys-icon.tachometer-alt-average:after, .fa-tachometer-alt-average:after {
+  content: "\10f624"; }
+
+.sys-icon.tachometer-alt-fast:after, .fa-tachometer-alt-fast:after {
+  content: "\10f625"; }
+
+.sys-icon.tachometer-alt-fastest:after, .fa-tachometer-alt-fastest:after {
+  content: "\10f626"; }
+
+.sys-icon.tachometer-alt-slow:after, .fa-tachometer-alt-slow:after {
+  content: "\10f627"; }
+
+.sys-icon.tachometer-alt-slowest:after, .fa-tachometer-alt-slowest:after {
+  content: "\10f628"; }
+
+.sys-icon.tachometer-average:after, .fa-tachometer-average:after {
+  content: "\10f629"; }
+
+.sys-icon.tachometer-fast:after, .fa-tachometer-fast:after {
+  content: "\10f62a"; }
+
+.sys-icon.tachometer-fastest:after, .fa-tachometer-fastest:after {
+  content: "\10f62b"; }
+
+.sys-icon.tachometer-slow:after, .fa-tachometer-slow:after {
+  content: "\10f62c"; }
+
+.sys-icon.tachometer-slowest:after, .fa-tachometer-slowest:after {
+  content: "\10f62d"; }
+
+.sys-icon.taco:after, .fa-taco:after {
+  content: "\10f826"; }
+
+.sys-icon.tag:after, .fa-tag:after {
+  content: "\10f02b"; }
+
+.sys-icon.tags:after, .fa-tags:after {
+  content: "\10f02c"; }
+
+.sys-icon.tally:after, .fa-tally:after {
+  content: "\10f69c"; }
+
+.sys-icon.tanakh:after, .fa-tanakh:after {
+  content: "\10f827"; }
+
+.sys-icon.tape:after, .fa-tape:after {
+  content: "\10f4db"; }
+
+.sys-icon.tasks:after, .fa-tasks:after {
+  content: "\10f0ae"; }
+
+.sys-icon.tasks-alt:after, .fa-tasks-alt:after {
+  content: "\10f828"; }
+
+.sys-icon.taxi:after, .fa-taxi:after {
+  content: "\10f1ba"; }
+
+.sys-icon.teeth:after, .fa-teeth:after {
+  content: "\10f62e"; }
+
+.sys-icon.teeth-open:after, .fa-teeth-open:after {
+  content: "\10f62f"; }
+
+.sys-icon.temperature-frigid:after, .fa-temperature-frigid:after {
+  content: "\10f768"; }
+
+.sys-icon.temperature-high:after, .fa-temperature-high:after {
+  content: "\10f769"; }
+
+.sys-icon.temperature-hot:after, .fa-temperature-hot:after {
+  content: "\10f76a"; }
+
+.sys-icon.temperature-low:after, .fa-temperature-low:after {
+  content: "\10f76b"; }
+
+.sys-icon.tenge:after, .fa-tenge:after {
+  content: "\10f7d7"; }
+
+.sys-icon.tennis-ball:after, .fa-tennis-ball:after {
+  content: "\10f45e"; }
+
+.sys-icon.terminal:after, .fa-terminal:after {
+  content: "\10f120"; }
+
+.sys-icon.text:after, .fa-text:after {
+  content: "\10f893"; }
+
+.sys-icon.text-height:after, .fa-text-height:after {
+  content: "\10f034"; }
+
+.sys-icon.text-size:after, .fa-text-size:after {
+  content: "\10f894"; }
+
+.sys-icon.text-width:after, .fa-text-width:after {
+  content: "\10f035"; }
+
+.sys-icon.th:after, .fa-th:after {
+  content: "\10f00a"; }
+
+.sys-icon.th-large:after, .fa-th-large:after {
+  content: "\10f009"; }
+
+.sys-icon.th-list:after, .fa-th-list:after {
+  content: "\10f00b"; }
+
+.sys-icon.theater-masks:after, .fa-theater-masks:after {
+  content: "\10f630"; }
+
+.sys-icon.thermometer:after, .fa-thermometer:after {
+  content: "\10f491"; }
+
+.sys-icon.thermometer-empty:after, .fa-thermometer-empty:after {
+  content: "\10f2cb"; }
+
+.sys-icon.thermometer-full:after, .fa-thermometer-full:after {
+  content: "\10f2c7"; }
+
+.sys-icon.thermometer-half:after, .fa-thermometer-half:after {
+  content: "\10f2c9"; }
+
+.sys-icon.thermometer-quarter:after, .fa-thermometer-quarter:after {
+  content: "\10f2ca"; }
+
+.sys-icon.thermometer-three-quarters:after, .fa-thermometer-three-quarters:after {
+  content: "\10f2c8"; }
+
+.sys-icon.theta:after, .fa-theta:after {
+  content: "\10f69e"; }
+
+.sys-icon.thumbs-down:after, .fa-thumbs-down:after {
+  content: "\10f165"; }
+
+.sys-icon.thumbs-up:after, .fa-thumbs-up:after {
+  content: "\10f164"; }
+
+.sys-icon.thumbtack:after, .fa-thumbtack:after {
+  content: "\10f08d"; }
+
+.sys-icon.thunderstorm:after, .fa-thunderstorm:after {
+  content: "\10f76c"; }
+
+.sys-icon.thunderstorm-moon:after, .fa-thunderstorm-moon:after {
+  content: "\10f76d"; }
+
+.sys-icon.thunderstorm-sun:after, .fa-thunderstorm-sun:after {
+  content: "\10f76e"; }
+
+.sys-icon.ticket:after, .fa-ticket:after {
+  content: "\10f145"; }
+
+.sys-icon.ticket-alt:after, .fa-ticket-alt:after {
+  content: "\10f3ff"; }
+
+.sys-icon.tilde:after, .fa-tilde:after {
+  content: "\10f69f"; }
+
+.sys-icon.remove:after, .sys-icon.times:after, .fa-times:after {
+  content: "\10f00d"; }
+
+.sys-icon.times-circle:after, .fa-times-circle:after {
+  content: "\10f057"; }
+
+.sys-icon.times-hexagon:after, .fa-times-hexagon:after {
+  content: "\10f2ee"; }
+
+.sys-icon.times-octagon:after, .fa-times-octagon:after {
+  content: "\10f2f0"; }
+
+.sys-icon.times-square:after, .fa-times-square:after {
+  content: "\10f2d3"; }
+
+.sys-icon.tint:after, .fa-tint:after {
+  content: "\10f043"; }
+
+.sys-icon.tint-slash:after, .fa-tint-slash:after {
+  content: "\10f5c7"; }
+
+.sys-icon.tire:after, .fa-tire:after {
+  content: "\10f631"; }
+
+.sys-icon.tire-flat:after, .fa-tire-flat:after {
+  content: "\10f632"; }
+
+.sys-icon.tire-pressure-warning:after, .fa-tire-pressure-warning:after {
+  content: "\10f633"; }
+
+.sys-icon.tire-rugged:after, .fa-tire-rugged:after {
+  content: "\10f634"; }
+
+.sys-icon.tired:after, .fa-tired:after {
+  content: "\10f5c8"; }
+
+.sys-icon.toggle-off:after, .fa-toggle-off:after {
+  content: "\10f204"; }
+
+.sys-icon.toggle-on:after, .fa-toggle-on:after {
+  content: "\10f205"; }
+
+.sys-icon.toilet:after, .fa-toilet:after {
+  content: "\10f7d8"; }
+
+.sys-icon.toilet-paper:after, .fa-toilet-paper:after {
+  content: "\10f71e"; }
+
+.sys-icon.toilet-paper-alt:after, .fa-toilet-paper-alt:after {
+  content: "\10f71f"; }
+
+.sys-icon.tombstone:after, .fa-tombstone:after {
+  content: "\10f720"; }
+
+.sys-icon.tombstone-alt:after, .fa-tombstone-alt:after {
+  content: "\10f721"; }
+
+.sys-icon.toolbox:after, .fa-toolbox:after {
+  content: "\10f552"; }
+
+.sys-icon.tools:after, .fa-tools:after {
+  content: "\10f7d9"; }
+
+.sys-icon.tooth:after, .fa-tooth:after {
+  content: "\10f5c9"; }
+
+.sys-icon.toothbrush:after, .fa-toothbrush:after {
+  content: "\10f635"; }
+
+.sys-icon.torah:after, .fa-torah:after {
+  content: "\10f6a0"; }
+
+.sys-icon.torii-gate:after, .fa-torii-gate:after {
+  content: "\10f6a1"; }
+
+.sys-icon.tornado:after, .fa-tornado:after {
+  content: "\10f76f"; }
+
+.sys-icon.tractor:after, .fa-tractor:after {
+  content: "\10f722"; }
+
+.sys-icon.trademark:after, .fa-trademark:after {
+  content: "\10f25c"; }
+
+.sys-icon.traffic-cone:after, .fa-traffic-cone:after {
+  content: "\10f636"; }
+
+.sys-icon.traffic-light:after, .fa-traffic-light:after {
+  content: "\10f637"; }
+
+.sys-icon.traffic-light-go:after, .fa-traffic-light-go:after {
+  content: "\10f638"; }
+
+.sys-icon.traffic-light-slow:after, .fa-traffic-light-slow:after {
+  content: "\10f639"; }
+
+.sys-icon.traffic-light-stop:after, .fa-traffic-light-stop:after {
+  content: "\10f63a"; }
+
+.sys-icon.train:after, .fa-train:after {
+  content: "\10f238"; }
+
+.sys-icon.tram:after, .fa-tram:after {
+  content: "\10f7da"; }
+
+.sys-icon.transgender:after, .fa-transgender:after {
+  content: "\10f224"; }
+
+.sys-icon.transgender-alt:after, .fa-transgender-alt:after {
+  content: "\10f225"; }
+
+.sys-icon.trash:after, .fa-trash:after {
+  content: "\10f1f8"; }
+
+.sys-icon.trash-alt:after, .fa-trash-alt:after {
+  content: "\10f2ed"; }
+
+.sys-icon.trash-restore:after, .fa-trash-restore:after {
+  content: "\10f829"; }
+
+.sys-icon.trash-restore-alt:after, .fa-trash-restore-alt:after {
+  content: "\10f82a"; }
+
+.sys-icon.trash-undo:after, .fa-trash-undo:after {
+  content: "\10f895"; }
+
+.sys-icon.trash-undo-alt:after, .fa-trash-undo-alt:after {
+  content: "\10f896"; }
+
+.sys-icon.treasure-chest:after, .fa-treasure-chest:after {
+  content: "\10f723"; }
+
+.sys-icon.tree:after, .fa-tree:after {
+  content: "\10f1bb"; }
+
+.sys-icon.tree-alt:after, .fa-tree-alt:after {
+  content: "\10f400"; }
+
+.sys-icon.tree-christmas:after, .fa-tree-christmas:after {
+  content: "\10f7db"; }
+
+.sys-icon.tree-decorated:after, .fa-tree-decorated:after {
+  content: "\10f7dc"; }
+
+.sys-icon.tree-large:after, .fa-tree-large:after {
+  content: "\10f7dd"; }
+
+.sys-icon.tree-palm:after, .fa-tree-palm:after {
+  content: "\10f82b"; }
+
+.sys-icon.trees:after, .fa-trees:after {
+  content: "\10f724"; }
+
+.sys-icon.triangle:after, .fa-triangle:after {
+  content: "\10f2ec"; }
+
+.sys-icon.trophy:after, .fa-trophy:after {
+  content: "\10f091"; }
+
+.sys-icon.trophy-alt:after, .fa-trophy-alt:after {
+  content: "\10f2eb"; }
+
+.sys-icon.truck:after, .fa-truck:after {
+  content: "\10f0d1"; }
+
+.sys-icon.truck-container:after, .fa-truck-container:after {
+  content: "\10f4dc"; }
+
+.sys-icon.truck-couch:after, .fa-truck-couch:after {
+  content: "\10f4dd"; }
+
+.sys-icon.truck-loading:after, .fa-truck-loading:after {
+  content: "\10f4de"; }
+
+.sys-icon.truck-monster:after, .fa-truck-monster:after {
+  content: "\10f63b"; }
+
+.sys-icon.truck-moving:after, .fa-truck-moving:after {
+  content: "\10f4df"; }
+
+.sys-icon.truck-pickup:after, .fa-truck-pickup:after {
+  content: "\10f63c"; }
+
+.sys-icon.truck-plow:after, .fa-truck-plow:after {
+  content: "\10f7de"; }
+
+.sys-icon.truck-ramp:after, .fa-truck-ramp:after {
+  content: "\10f4e0"; }
+
+.sys-icon.tshirt:after, .fa-tshirt:after {
+  content: "\10f553"; }
+
+.sys-icon.tty:after, .fa-tty:after {
+  content: "\10f1e4"; }
+
+.sys-icon.turkey:after, .fa-turkey:after {
+  content: "\10f725"; }
+
+.sys-icon.turtle:after, .fa-turtle:after {
+  content: "\10f726"; }
+
+.sys-icon.tv:after, .fa-tv:after {
+  content: "\10f26c"; }
+
+.sys-icon.tv-retro:after, .fa-tv-retro:after {
+  content: "\10f401"; }
+
+.sys-icon.umbrella:after, .fa-umbrella:after {
+  content: "\10f0e9"; }
+
+.sys-icon.umbrella-beach:after, .fa-umbrella-beach:after {
+  content: "\10f5ca"; }
+
+.sys-icon.underline:after, .fa-underline:after {
+  content: "\10f0cd"; }
+
+.sys-icon.undo:after, .fa-undo:after {
+  content: "\10f0e2"; }
+
+.sys-icon.undo-alt:after, .fa-undo-alt:after {
+  content: "\10f2ea"; }
+
+.sys-icon.unicorn:after, .fa-unicorn:after {
+  content: "\10f727"; }
+
+.sys-icon.union:after, .fa-union:after {
+  content: "\10f6a2"; }
+
+.sys-icon.universal-access:after, .fa-universal-access:after {
+  content: "\10f29a"; }
+
+.sys-icon.university:after, .fa-university:after {
+  content: "\10f19c"; }
+
+.sys-icon.unlink:after, .fa-unlink:after {
+  content: "\10f127"; }
+
+.sys-icon.unlock:after, .fa-unlock:after {
+  content: "\10f09c"; }
+
+.sys-icon.unlock-alt:after, .fa-unlock-alt:after {
+  content: "\10f13e"; }
+
+.sys-icon.upload:after, .fa-upload:after {
+  content: "\10f093"; }
+
+.sys-icon.usd-circle:after, .fa-usd-circle:after {
+  content: "\10f2e8"; }
+
+.sys-icon.usd-square:after, .fa-usd-square:after {
+  content: "\10f2e9"; }
+
+.sys-icon.user:after, .fa-user:after {
+  content: "\10f007"; }
+
+.sys-icon.user-alt:after, .fa-user-alt:after {
+  content: "\10f406"; }
+
+.sys-icon.user-alt-slash:after, .fa-user-alt-slash:after {
+  content: "\10f4fa"; }
+
+.sys-icon.user-astronaut:after, .fa-user-astronaut:after {
+  content: "\10f4fb"; }
+
+.sys-icon.user-chart:after, .fa-user-chart:after {
+  content: "\10f6a3"; }
+
+.sys-icon.user-check:after, .fa-user-check:after {
+  content: "\10f4fc"; }
+
+.sys-icon.user-circle:after, .fa-user-circle:after {
+  content: "\10f2bd"; }
+
+.sys-icon.user-clock:after, .fa-user-clock:after {
+  content: "\10f4fd"; }
+
+.sys-icon.user-cog:after, .fa-user-cog:after {
+  content: "\10f4fe"; }
+
+.sys-icon.user-crown:after, .fa-user-crown:after {
+  content: "\10f6a4"; }
+
+.sys-icon.user-edit:after, .fa-user-edit:after {
+  content: "\10f4ff"; }
+
+.sys-icon.user-friends:after, .fa-user-friends:after {
+  content: "\10f500"; }
+
+.sys-icon.user-graduate:after, .fa-user-graduate:after {
+  content: "\10f501"; }
+
+.sys-icon.user-hard-hat:after, .fa-user-hard-hat:after {
+  content: "\10f82c"; }
+
+.sys-icon.user-headset:after, .fa-user-headset:after {
+  content: "\10f82d"; }
+
+.sys-icon.user-injured:after, .fa-user-injured:after {
+  content: "\10f728"; }
+
+.sys-icon.user-lock:after, .fa-user-lock:after {
+  content: "\10f502"; }
+
+.sys-icon.user-md:after, .fa-user-md:after {
+  content: "\10f0f0"; }
+
+.sys-icon.user-md-chat:after, .fa-user-md-chat:after {
+  content: "\10f82e"; }
+
+.sys-icon.user-minus:after, .fa-user-minus:after {
+  content: "\10f503"; }
+
+.sys-icon.user-ninja:after, .fa-user-ninja:after {
+  content: "\10f504"; }
+
+.sys-icon.user-nurse:after, .fa-user-nurse:after {
+  content: "\10f82f"; }
+
+.sys-icon.user-plus:after, .fa-user-plus:after {
+  content: "\10f234"; }
+
+.sys-icon.user-secret:after, .fa-user-secret:after {
+  content: "\10f21b"; }
+
+.sys-icon.user-shield:after, .fa-user-shield:after {
+  content: "\10f505"; }
+
+.sys-icon.user-slash:after, .fa-user-slash:after {
+  content: "\10f506"; }
+
+.sys-icon.user-tag:after, .fa-user-tag:after {
+  content: "\10f507"; }
+
+.sys-icon.user-tie:after, .fa-user-tie:after {
+  content: "\10f508"; }
+
+.sys-icon.user-times:after, .fa-user-times:after {
+  content: "\10f235"; }
+
+.sys-icon.group:after, .sys-icon.users:after, .fa-users:after {
+  content: "\10f0c0"; }
+
+.sys-icon.users-class:after, .fa-users-class:after {
+  content: "\10f63d"; }
+
+.sys-icon.users-cog:after, .fa-users-cog:after {
+  content: "\10f509"; }
+
+.sys-icon.users-crown:after, .fa-users-crown:after {
+  content: "\10f6a5"; }
+
+.sys-icon.users-medical:after, .fa-users-medical:after {
+  content: "\10f830"; }
+
+.sys-icon.utensil-fork:after, .fa-utensil-fork:after {
+  content: "\10f2e3"; }
+
+.sys-icon.utensil-knife:after, .fa-utensil-knife:after {
+  content: "\10f2e4"; }
+
+.sys-icon.utensil-spoon:after, .fa-utensil-spoon:after {
+  content: "\10f2e5"; }
+
+.sys-icon.utensils:after, .fa-utensils:after {
+  content: "\10f2e7"; }
+
+.sys-icon.utensils-alt:after, .fa-utensils-alt:after {
+  content: "\10f2e6"; }
+
+.sys-icon.value-absolute:after, .fa-value-absolute:after {
+  content: "\10f6a6"; }
+
+.sys-icon.vector-square:after, .fa-vector-square:after {
+  content: "\10f5cb"; }
+
+.sys-icon.venus:after, .fa-venus:after {
+  content: "\10f221"; }
+
+.sys-icon.venus-double:after, .fa-venus-double:after {
+  content: "\10f226"; }
+
+.sys-icon.venus-mars:after, .fa-venus-mars:after {
+  content: "\10f228"; }
+
+.sys-icon.vial:after, .fa-vial:after {
+  content: "\10f492"; }
+
+.sys-icon.vials:after, .fa-vials:after {
+  content: "\10f493"; }
+
+.sys-icon.video:after, .fa-video:after {
+  content: "\10f03d"; }
+
+.sys-icon.video-plus:after, .fa-video-plus:after {
+  content: "\10f4e1"; }
+
+.sys-icon.video-slash:after, .fa-video-slash:after {
+  content: "\10f4e2"; }
+
+.sys-icon.vihara:after, .fa-vihara:after {
+  content: "\10f6a7"; }
+
+.sys-icon.voicemail:after, .fa-voicemail:after {
+  content: "\10f897"; }
+
+.sys-icon.volcano:after, .fa-volcano:after {
+  content: "\10f770"; }
+
+.sys-icon.volleyball-ball:after, .fa-volleyball-ball:after {
+  content: "\10f45f"; }
+
+.sys-icon.volume:after, .fa-volume:after {
+  content: "\10f6a8"; }
+
+.sys-icon.volume-down:after, .fa-volume-down:after {
+  content: "\10f027"; }
+
+.sys-icon.volume-mute:after, .fa-volume-mute:after {
+  content: "\10f6a9"; }
+
+.sys-icon.volume-off:after, .fa-volume-off:after {
+  content: "\10f026"; }
+
+.sys-icon.volume-slash:after, .fa-volume-slash:after {
+  content: "\10f2e2"; }
+
+.sys-icon.volume-up:after, .fa-volume-up:after {
+  content: "\10f028"; }
+
+.sys-icon.vote-nay:after, .fa-vote-nay:after {
+  content: "\10f771"; }
+
+.sys-icon.vote-yea:after, .fa-vote-yea:after {
+  content: "\10f772"; }
+
+.sys-icon.vr-cardboard:after, .fa-vr-cardboard:after {
+  content: "\10f729"; }
+
+.sys-icon.walker:after, .fa-walker:after {
+  content: "\10f831"; }
+
+.sys-icon.walking:after, .fa-walking:after {
+  content: "\10f554"; }
+
+.sys-icon.wallet:after, .fa-wallet:after {
+  content: "\10f555"; }
+
+.sys-icon.wand:after, .fa-wand:after {
+  content: "\10f72a"; }
+
+.sys-icon.wand-magic:after, .fa-wand-magic:after {
+  content: "\10f72b"; }
+
+.sys-icon.warehouse:after, .fa-warehouse:after {
+  content: "\10f494"; }
+
+.sys-icon.warehouse-alt:after, .fa-warehouse-alt:after {
+  content: "\10f495"; }
+
+.sys-icon.washer:after, .fa-washer:after {
+  content: "\10f898"; }
+
+.sys-icon.watch:after, .fa-watch:after {
+  content: "\10f2e1"; }
+
+.sys-icon.watch-fitness:after, .fa-watch-fitness:after {
+  content: "\10f63e"; }
+
+.sys-icon.water:after, .fa-water:after {
+  content: "\10f773"; }
+
+.sys-icon.water-lower:after, .fa-water-lower:after {
+  content: "\10f774"; }
+
+.sys-icon.water-rise:after, .fa-water-rise:after {
+  content: "\10f775"; }
+
+.sys-icon.wave-sine:after, .fa-wave-sine:after {
+  content: "\10f899"; }
+
+.sys-icon.wave-square:after, .fa-wave-square:after {
+  content: "\10f83e"; }
+
+.sys-icon.wave-triangle:after, .fa-wave-triangle:after {
+  content: "\10f89a"; }
+
+.sys-icon.webcam:after, .fa-webcam:after {
+  content: "\10f832"; }
+
+.sys-icon.webcam-slash:after, .fa-webcam-slash:after {
+  content: "\10f833"; }
+
+.sys-icon.weight:after, .fa-weight:after {
+  content: "\10f496"; }
+
+.sys-icon.weight-hanging:after, .fa-weight-hanging:after {
+  content: "\10f5cd"; }
+
+.sys-icon.whale:after, .fa-whale:after {
+  content: "\10f72c"; }
+
+.sys-icon.wheat:after, .fa-wheat:after {
+  content: "\10f72d"; }
+
+.sys-icon.wheelchair:after, .fa-wheelchair:after {
+  content: "\10f193"; }
+
+.sys-icon.whistle:after, .fa-whistle:after {
+  content: "\10f460"; }
+
+.sys-icon.wifi:after, .fa-wifi:after {
+  content: "\10f1eb"; }
+
+.sys-icon.wifi-1:after, .fa-wifi-1:after {
+  content: "\10f6aa"; }
+
+.sys-icon.wifi-2:after, .fa-wifi-2:after {
+  content: "\10f6ab"; }
+
+.sys-icon.wifi-slash:after, .fa-wifi-slash:after {
+  content: "\10f6ac"; }
+
+.sys-icon.wind:after, .fa-wind:after {
+  content: "\10f72e"; }
+
+.sys-icon.wind-turbine:after, .fa-wind-turbine:after {
+  content: "\10f89b"; }
+
+.sys-icon.wind-warning:after, .fa-wind-warning:after {
+  content: "\10f776"; }
+
+.sys-icon.window:after, .fa-window:after {
+  content: "\10f40e"; }
+
+.sys-icon.window-alt:after, .fa-window-alt:after {
+  content: "\10f40f"; }
+
+.sys-icon.window-close:after, .fa-window-close:after {
+  content: "\10f410"; }
+
+.sys-icon.window-maximize:after, .fa-window-maximize:after {
+  content: "\10f2d0"; }
+
+.sys-icon.window-minimize:after, .fa-window-minimize:after {
+  content: "\10f2d1"; }
+
+.sys-icon.window-restore:after, .fa-window-restore:after {
+  content: "\10f2d2"; }
+
+.sys-icon.windsock:after, .fa-windsock:after {
+  content: "\10f777"; }
+
+.sys-icon.wine-bottle:after, .fa-wine-bottle:after {
+  content: "\10f72f"; }
+
+.sys-icon.wine-glass:after, .fa-wine-glass:after {
+  content: "\10f4e3"; }
+
+.sys-icon.wine-glass-alt:after, .fa-wine-glass-alt:after {
+  content: "\10f5ce"; }
+
+.sys-icon.won-sign:after, .fa-won-sign:after {
+  content: "\10f159"; }
+
+.sys-icon.wreath:after, .fa-wreath:after {
+  content: "\10f7e2"; }
+
+.sys-icon.wrench:after, .fa-wrench:after {
+  content: "\10f0ad"; }
+
+.sys-icon.x-ray:after, .fa-x-ray:after {
+  content: "\10f497"; }
+
+.sys-icon.yen-sign:after, .fa-yen-sign:after {
+  content: "\10f157"; }
+
+.sys-icon.yin-yang:after, .fa-yin-yang:after {
+  content: "\10f6ad"; }

+ 51 - 0
modules/boonex/forum/updates/10.0.3_10.0.4/install/config.php

@@ -0,0 +1,51 @@
+<?php
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ */
+
+$aConfig = array(
+    /**
+     * Main Section.
+     */
+    'title' => 'Discussions',
+    'version_from' => '10.0.3',
+    'version_to' => '10.0.4',
+    'vendor' => 'BoonEx',
+
+    'compatible_with' => array(
+        '10.0.0'
+    ),
+
+    /**
+     * 'home_dir' and 'home_uri' - should be unique. Don't use spaces in 'home_uri' and the other special chars.
+     */
+    'home_dir' => 'boonex/forum/updates/update_10.0.3_10.0.4/',
+    'home_uri' => 'forum_update_1003_1004',
+
+    'module_dir' => 'boonex/forum/',
+    'module_uri' => 'forum',
+
+    'db_prefix' => 'bx_forum_',
+    'class_prefix' => 'BxForum',
+
+    /**
+     * Installation/Uninstallation Section.
+     */
+    'install' => array(
+        'execute_sql' => 1,
+        'update_files' => 1,
+        'update_languages' => 0,
+        'clear_db_cache' => 1,
+    ),
+
+    /**
+     * Category for language keys.
+     */
+    'language_category' => 'Discussions',
+
+    /**
+     * Files Section
+     */
+    'delete_files' => array(),
+);

+ 13 - 0
modules/boonex/forum/updates/10.0.3_10.0.4/install/installer.php

@@ -0,0 +1,13 @@
+<?php
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ */
+
+class BxForumUpdater extends BxDolStudioUpdater
+{
+    function __construct($aConfig)
+    {
+        parent::__construct($aConfig);
+    }
+}

+ 5 - 0
modules/boonex/forum/updates/10.0.3_10.0.4/install/sql/enable.sql

@@ -0,0 +1,5 @@
+SET @sName = 'bx_forum';
+
+
+-- CATEGORY
+UPDATE `sys_objects_category` SET `join`='INNER JOIN `sys_profiles` ON (`sys_profiles`.`id` = ABS(`bx_forum_discussions`.`author`))' WHERE `object`='bx_forum_cats';

+ 136 - 0
modules/boonex/forum/updates/10.0.3_10.0.4/source/install/config.php

@@ -0,0 +1,136 @@
+<?php
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Forum Forum
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+$aConfig = array(
+
+    /**
+     * Main Section.
+     */
+    'type' => BX_DOL_MODULE_TYPE_MODULE,
+    'name' => 'bx_forum',
+    'title' => 'Discussions',
+    'note' => 'Discussions module.',
+    'version' => '10.0.4',
+    'vendor' => 'BoonEx',
+    'help_url' => 'http://feed.una.io/?section={module_name}',
+
+    'compatible_with' => array(
+        '10.0.0'
+    ),
+
+    /**
+     * 'home_dir' and 'home_uri' - should be unique. Don't use spaces in 'home_uri' and the other special chars.
+     */
+    'home_dir' => 'boonex/forum/',
+    'home_uri' => 'forum',
+
+    'db_prefix' => 'bx_forum_',
+    'class_prefix' => 'BxForum',
+
+    /**
+     * Category for language keys.
+     */
+    'language_category' => 'Discussions',
+    
+    /**
+     * List of page triggers.
+     */
+    'page_triggers' => array (
+    	'trigger_page_profile_view_entry',
+    ),
+    
+    /**
+     * Menu triggers.
+     */
+    'menu_triggers' => array(
+    	'trigger_profile_view_submenu',
+        'trigger_group_view_submenu'
+    ),
+
+	/**
+     * Storage objects to automatically delete files from upon module uninstallation.
+     * Note. Don't add storage objects used in transcoder objects.
+     */
+    'storages' => array(
+    	'bx_forum_files'
+    ),
+
+	/**
+     * Transcoders.
+     */
+    'transcoders' => array(
+		'bx_forum_preview',
+        'bx_forum_preview_cmts',
+        'bx_forum_gallery',
+        'bx_forum_cover'
+    ),
+
+    /**
+     * Extended Search Forms.
+     */
+    'esearches' => array(
+        'bx_forum',
+    	'bx_forum_cmts',
+    ),
+
+    /**
+     * Installation/Uninstallation Section.
+     */
+    'install' => array(
+        'execute_sql' => 1,
+        'update_languages' => 1,
+        'clear_db_cache' => 1,
+    ),
+    'uninstall' => array (
+    	'process_esearches' => 1,
+        'execute_sql' => 1,
+        'update_languages' => 1,
+    	'update_relations' => 1,
+        'clear_db_cache' => 1,
+    ),
+    'enable' => array(
+        'execute_sql' => 1,
+    	'update_relations' => 1,
+        'clear_db_cache' => 1,
+    ),
+	'enable_success' => array(
+    	'process_menu_triggers' => 1,
+        'process_page_triggers' => 1,
+    	'process_esearches' => 1,
+    	'register_transcoders' => 1,
+        'clear_db_cache' => 1,
+    ),
+    'disable' => array (
+        'execute_sql' => 1,
+    	'update_relations' => 1,
+    	'unregister_transcoders' => 1,
+        'clear_db_cache' => 1,
+    ),
+    'disable_failed' => array (
+    	'register_transcoders' => 1,
+    	'clear_db_cache' => 1,
+    ),
+
+    /**
+     * Dependencies Section
+     */
+    'dependencies' => array(),
+
+    /**
+     * Relations Section
+     */
+    'relations' => array(
+    	'bx_timeline',
+    	'bx_notifications'
+    ),
+);
+
+/** @} */

+ 561 - 0
modules/boonex/forum/updates/10.0.3_10.0.4/source/install/sql/enable.sql

@@ -0,0 +1,561 @@
+SET @sName = 'bx_forum';
+
+
+-- SETTINGS
+SET @iTypeOrder = (SELECT MAX(`order`) FROM `sys_options_types` WHERE `group` = 'modules');
+INSERT INTO `sys_options_types`(`group`, `name`, `caption`, `icon`, `order`) VALUES 
+('modules', @sName, '_bx_forum', 'bx_forum@modules/boonex/forum/|std-icon.svg', IF(ISNULL(@iTypeOrder), 1, @iTypeOrder + 1));
+SET @iTypeId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options_categories` (`type_id`, `name`, `caption`, `order`)
+VALUES (@iTypeId, @sName, '_bx_forum', 1);
+SET @iCategId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options` (`name`, `value`, `category_id`, `caption`, `type`, `check`, `check_error`, `extra`, `order`) VALUES
+('bx_forum_summary_chars', '700', @iCategId, '_bx_forum_option_summary_chars', 'digit', '', '', '', 1),
+('bx_forum_plain_summary_chars', '240', @iCategId, '_bx_forum_option_plain_summary_chars', 'digit', '', '', '', 2),
+('bx_forum_per_page_browse', '12', @iCategId, '_bx_forum_option_per_page_browse', 'digit', '', '', '', 10),
+('bx_forum_per_page_index', '6', @iCategId, '_bx_forum_option_per_page_index', 'digit', '', '', '', 11),
+('bx_forum_per_page_profile', '6', @iCategId, '_bx_forum_option_per_page_profile', 'digit', '', '', '', 12),
+('bx_forum_rss_num', '10', @iCategId, '_bx_forum_option_rss_num', 'digit', '', '', '', 20),
+('bx_forum_searchable_fields', 'title,text,text_comments', @iCategId, '_bx_forum_option_searchable_fields', 'list', '', '', 'a:2:{s:6:"module";s:8:"bx_forum";s:6:"method";s:21:"get_searchable_fields";}', 30);
+-- ('bx_forum_autosubscribe_created', '', @iCategId, '_bx_forum_option_autosubscribe_created', 'checkbox', '', '', '', 40),
+-- ('bx_forum_autosubscribe_replied', '', @iCategId, '_bx_forum_option_autosubscribe_replied', 'checkbox', '', '', '', 41),
+
+
+
+-- PAGE: create entry
+INSERT INTO `sys_objects_page`(`object`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `uri`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_forum_create_entry', '_bx_forum_page_title_sys_create_entry', '_bx_forum_page_title_create_entry', @sName, 5, 2147483647, 1, 'create-discussion', 'page.php?i=create-discussion', '', '', '', 0, 1, 0, 'BxForumPageBrowse', 'modules/boonex/forum/classes/BxForumPageBrowse.php');
+
+INSERT INTO `sys_pages_blocks` (`object`, `cell_id`, `module`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES
+('bx_forum_create_entry', 1, @sName, '_bx_forum_page_block_title_create_entry', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_forum";s:6:"method";s:13:"entity_create";}', 0, 1, 1);
+
+-- PAGE: edit entry
+INSERT INTO `sys_objects_page`(`object`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `uri`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_forum_edit_entry', '_bx_forum_page_title_sys_edit_entry', '_bx_forum_page_title_edit_entry', @sName, 5, 2147483647, 1, 'edit-discussion', '', '', '', '', 0, 1, 0, 'BxForumPageEntry', 'modules/boonex/forum/classes/BxForumPageEntry.php');
+
+INSERT INTO `sys_pages_blocks` (`object`, `cell_id`, `module`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES
+('bx_forum_edit_entry', 1, @sName, '_bx_forum_page_block_title_edit_entry', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_forum";s:6:"method";s:11:"entity_edit";}', 0, 0, 0);
+
+-- PAGE: delete entry
+INSERT INTO `sys_objects_page`(`object`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `uri`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_forum_delete_entry', '_bx_forum_page_title_sys_delete_entry', '_bx_forum_page_title_delete_entry', @sName, 5, 2147483647, 1, 'delete-discussion', '', '', '', '', 0, 1, 0, 'BxForumPageEntry', 'modules/boonex/forum/classes/BxForumPageEntry.php');
+
+INSERT INTO `sys_pages_blocks` (`object`, `cell_id`, `module`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES
+('bx_forum_delete_entry', 1, @sName, '_bx_forum_page_block_title_delete_entry', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_forum";s:6:"method";s:13:"entity_delete";}', 0, 0, 0);
+
+-- PAGE: view entry
+INSERT INTO `sys_objects_page`(`object`, `uri`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_forum_view_entry', 'view-discussion', '_bx_forum_page_title_sys_view_entry', '_bx_forum_page_title_view_entry', @sName, 12, 2147483647, 1, '', '', '', '', 0, 1, 0, 'BxForumPageEntry', 'modules/boonex/forum/classes/BxForumPageEntry.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `active`, `order`) VALUES 
+('bx_forum_view_entry', 1, @sName,'', '_bx_forum_page_block_title_entry_breadcrumb', 13, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_forum";s:6:"method";s:17:"entity_breadcrumb";}', 0, 0, 1, 1),
+('bx_forum_view_entry', 3, @sName,'', '_bx_forum_page_block_title_entry_author', 13, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_forum";s:6:"method";s:13:"entity_author";}', 0, 0, 1, 1),
+('bx_forum_view_entry', 3, @sName, '_bx_forum_page_block_title_sys_entry_context', '_bx_forum_page_block_title_entry_context', 13, 2147483647, 'service', 'a:2:{s:6:\"module\";s:8:\"bx_forum\";s:6:\"method\";s:14:\"entity_context\";}', 0, 0, 1, 2),
+('bx_forum_view_entry', 3, @sName,'', '_bx_forum_page_block_title_entry_participants', 13, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_forum";s:6:"method";s:19:"entity_participants";}', 0, 0, 1, 3),
+('bx_forum_view_entry', 3, @sName, '', '_bx_forum_page_block_title_entry_info', 11, 2147483647, 'service', 'a:2:{s:6:\"module\";s:8:\"bx_forum\";s:6:\"method\";s:11:\"entity_info\";}', 0, 0, 0, 0),
+('bx_forum_view_entry', 2, @sName,'', '_bx_forum_page_block_title_entry_text', 13, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_forum";s:6:"method";s:17:"entity_text_block";}', 0, 0, 1, 1),
+('bx_forum_view_entry', 1, @sName,'', '_bx_forum_page_block_title_entry_all_actions', 13, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_forum";s:6:"method";s:18:"entity_all_actions";}', 0, 0, 1, 2),
+('bx_forum_view_entry', 2, @sName,'', '_bx_forum_page_block_title_entry_attachments', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_forum";s:6:"method";s:18:"entity_attachments";}', 0, 0, 1, 2),
+('bx_forum_view_entry', 2, @sName,'', '_bx_forum_page_block_title_entry_comments', 0, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_forum";s:6:"method";s:15:"entity_comments";}', 0, 0, 1, 3);
+
+-- PAGE: new entries
+INSERT INTO `sys_objects_page`(`object`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `uri`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_forum_new', '_bx_forum_page_title_sys_entries_new', '_bx_forum_page_title_entries_new', @sName, 5, 2147483647, 1, 'discussions-new', 'page.php?i=discussions-new', '', '', '', 0, 1, 0, 'BxForumPageBrowse', 'modules/boonex/forum/classes/BxForumPageBrowse.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES 
+('bx_forum_new', 1, @sName, '_bx_forum_page_block_title_new_entries', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_forum";s:6:"method";s:10:"browse_new";s:6:"params";a:1:{i:0;s:5:"table";}}', 0, 1, 1);
+
+-- PAGE: top entries
+INSERT INTO `sys_objects_page`(`object`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `uri`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_forum_top', '_bx_forum_page_title_sys_entries_top', '_bx_forum_page_title_entries_top', @sName, 5, 2147483647, 1, 'discussions-top', 'page.php?i=discussions-top', '', '', '', 0, 1, 0, 'BxForumPageBrowse', 'modules/boonex/forum/classes/BxForumPageBrowse.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES 
+('bx_forum_top', 1, @sName, '_bx_forum_page_block_title_top_entries', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_forum";s:6:"method";s:10:"browse_top";s:6:"params";a:1:{i:0;s:5:"table";}}', 0, 1, 1);
+
+-- PAGE: popular entries
+INSERT INTO `sys_objects_page`(`object`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `uri`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_forum_popular', '_bx_forum_page_title_sys_entries_popular', '_bx_forum_page_title_entries_popular', @sName, 5, 2147483647, 1, 'discussions-popular', 'page.php?i=discussions-popular', '', '', '', 0, 1, 0, 'BxForumPageBrowse', 'modules/boonex/forum/classes/BxForumPageBrowse.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES 
+('bx_forum_popular', 1, @sName, '_bx_forum_page_block_title_popular_entries', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_forum";s:6:"method";s:14:"browse_popular";s:6:"params";a:1:{i:0;s:5:"table";}}', 0, 1, 1);
+
+-- PAGE: recently updated entries
+INSERT INTO `sys_objects_page`(`object`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `uri`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_forum_updated', '_bx_forum_page_title_sys_entries_updated', '_bx_forum_page_title_entries_updated', @sName, 5, 2147483647, 1, 'discussions-updated', 'page.php?i=discussions-updated', '', '', '', 0, 1, 0, 'BxForumPageBrowse', 'modules/boonex/forum/classes/BxForumPageBrowse.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES 
+('bx_forum_updated', 1, @sName, '_bx_forum_page_block_title_updated_entries', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_forum";s:6:"method";s:14:"browse_updated";s:6:"params";a:1:{i:0;s:5:"table";}}', 0, 1, 1);
+
+-- PAGE: categories
+INSERT INTO `sys_objects_page`(`object`, `uri`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_forum_categories', 'discussions-categories', '_bx_forum_page_title_sys_entries_categories', '_bx_forum_page_title_entries_categories', @sName, 5, 2147483647, 1, 'page.php?i=discussions-categories', '', '', '', 0, 1, 0, 'BxForumPageBrowse', 'modules/boonex/forum/classes/BxForumPageBrowse.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `active`, `order`) VALUES 
+('bx_forum_categories', 1, @sName, '', '_bx_forum_page_block_title_entries_categories', 13, 2147483647, 'service', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:15:"categories_list";s:6:"params";a:2:{i:0;s:13:"bx_forum_cats";i:1;a:1:{s:10:"show_empty";b:1;}}s:5:"class";s:20:"TemplServiceCategory";}', 0, 0, 1, 0);
+
+-- PAGE: entries by category
+INSERT INTO `sys_objects_page`(`object`, `uri`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_forum_category', 'discussions-category', '_bx_forum_page_title_sys_entries_by_category', '_bx_forum_page_title_entries_by_category', @sName, 5, 2147483647, 1, 'page.php?i=discussions-category', '', '', '', 0, 1, 0, 'BxForumPageBrowse', 'modules/boonex/forum/classes/BxForumPageBrowse.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `active`, `order`) VALUES 
+('bx_forum_category', 1, @sName, '_bx_forum_page_block_title_sys_entries_by_category', '_bx_forum_page_block_title_entries_by_category', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_forum";s:6:"method";s:15:"browse_category";s:6:"params";a:1:{i:0;s:5:"table";}}', 0, 0, 1, 1);
+
+-- PAGE: entries by keyword
+INSERT INTO `sys_objects_page`(`object`, `uri`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_forum_keyword', 'discussions-keyword', '_bx_forum_page_title_sys_entries_by_keyword', '_bx_forum_page_title_entries_by_keyword', @sName, 5, 2147483647, 1, 'page.php?i=discussions-keyword', '', '', '', 0, 1, 0, 'BxForumPageBrowse', 'modules/boonex/forum/classes/BxForumPageBrowse.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `active`, `order`) VALUES 
+('bx_forum_keyword', 1, @sName, '_bx_forum_page_block_title_sys_entries_by_keyword', '_bx_forum_page_block_title_entries_by_keyword', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_forum";s:6:"method";s:14:"browse_keyword";s:6:"params";a:1:{i:0;s:5:"table";}}', 0, 0, 1, 1);
+
+-- PAGE: entries of author
+INSERT INTO `sys_objects_page`(`object`, `uri`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_forum_author', 'discussions-author', '_bx_forum_page_title_sys_entries_of_author', '_bx_forum_page_title_entries_of_author', @sName, 5, 2147483647, 1, 'page.php?i=discussions-author', '', '', '', 0, 1, 0, 'BxForumPageAuthor', 'modules/boonex/forum/classes/BxForumPageAuthor.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `active`, `order`) VALUES 
+('bx_forum_author', 1, @sName, '', '_bx_forum_page_block_title_entries_actions', 13, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_forum";s:6:"method";s:18:"my_entries_actions";}', 0, 0, 1, 1),
+('bx_forum_author', 1, @sName, '_bx_forum_page_block_title_sys_favorites_of_author', '_bx_forum_page_block_title_favorites_of_author', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_forum";s:6:"method";s:15:"browse_favorite";s:6:"params";a:1:{i:0;s:12:"{profile_id}";}}', 0, 1, 1, 2),
+('bx_forum_author', 1, @sName, '_bx_forum_page_block_title_sys_entries_of_author', '_bx_forum_page_block_title_entries_of_author', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_forum";s:6:"method";s:13:"browse_author";}', 0, 0, 1, 3);
+
+-- PAGE: entries in context
+INSERT INTO `sys_objects_page`(`object`, `uri`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_forum_context', 'discussions-context', '_bx_forum_page_title_sys_entries_in_context', '_bx_forum_page_title_entries_in_context', 'bx_forum', 5, 2147483647, 1, '', '', '', '', 0, 1, 0, 'BxForumPageAuthor', 'modules/boonex/forum/classes/BxForumPageAuthor.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `active`, `order`) VALUES 
+('bx_forum_context', 1, @sName, '_bx_forum_page_block_title_sys_entries_in_context', '_bx_forum_page_block_title_entries_in_context', 11, 2147483647, 'service', 'a:2:{s:6:\"module\";s:8:\"bx_forum\";s:6:\"method\";s:14:\"browse_context\";}', 0, 0, 1, 1);
+
+-- PAGE: module home
+INSERT INTO `sys_objects_page`(`object`, `uri`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_forum_home', 'discussions-home', '_bx_forum_page_title_sys_home', '_bx_forum_page_title_home', @sName, 2, 2147483647, 1, 'page.php?i=discussions-home', '', '', '', 0, 1, 0, 'BxForumPageBrowse', 'modules/boonex/forum/classes/BxForumPageBrowse.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `active`, `order`) VALUES
+('bx_forum_home', 1, @sName, '', '_bx_forum_page_block_title_featured_entries', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_forum";s:6:"method";s:15:"browse_featured";s:6:"params";a:4:{i:0;s:5:"table";i:1;b:0;i:2;b:1;i:3;b:0;}}', 0, 1, 1, 0),
+('bx_forum_home', 1, @sName, '', '_bx_forum_page_block_title_latest_entries', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_forum";s:6:"method";s:13:"browse_latest";s:6:"params";a:1:{i:0;s:5:"table";}}', 0, 1, 1, 1),
+('bx_forum_home', 2, @sName, '', '_bx_forum_page_block_title_cats', 11, 2147483647, 'service', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:15:"categories_list";s:6:"params";a:2:{i:0;s:13:"bx_forum_cats";i:1;a:1:{s:10:"show_empty";b:1;}}s:5:"class";s:20:"TemplServiceCategory";}', 0, 1, 1, 0),
+('bx_forum_home', 2, @sName, '', '_bx_forum_page_block_title_popular_keywords', 11, 2147483647, 'service', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:14:"keywords_cloud";s:6:"params";a:2:{i:0;s:8:"bx_forum";i:1;s:8:"bx_forum";}s:5:"class";s:20:"TemplServiceMetatags";}', 0, 1, 1, 1);
+
+-- PAGE: module search
+INSERT INTO `sys_objects_page`(`object`, `uri`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_forum_search', 'discussions-search', '_bx_forum_page_title_sys_entries_search', '_bx_forum_page_title_entries_search', @sName, 5, 2147483647, 1, 'page.php?i=discussions-search', '', '', '', 0, 1, 0, 'BxForumPageBrowse', 'modules/boonex/forum/classes/BxForumPageBrowse.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `active`, `order`) VALUES 
+('bx_forum_search', 1, @sName, '', '_bx_forum_page_block_title_entries_search_form', 13, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_forum";s:6:"method";s:6:"search";}', 0, 0, 1, 0),
+('bx_forum_search', 1, @sName, '', '_bx_forum_page_block_title_entries_search_results', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_forum";s:6:"method";s:21:"browse_search_results";s:6:"params";a:1:{i:0;s:5:"table";}}', 0, 0, 1, 1),
+('bx_forum_search', 1, @sName, '', '_bx_forum_page_block_title_search_form', 11, 2147483647, 'service', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:8:"get_form";s:6:"params";a:1:{i:0;a:1:{s:6:"object";s:8:"bx_forum";}}s:5:"class";s:27:"TemplSearchExtendedServices";}', 0, 1, 0, 2),
+('bx_forum_search', 1, @sName, '', '_bx_forum_page_block_title_search_results', 11, 2147483647, 'service', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:11:"get_results";s:6:"params";a:1:{i:0;a:2:{s:6:"object";s:8:"bx_forum";s:10:"show_empty";b:1;}}s:5:"class";s:27:"TemplSearchExtendedServices";}', 0, 1, 0, 3),
+('bx_forum_search', 1, @sName, '', '_bx_forum_page_block_title_search_form_cmts', 11, 2147483647, 'service', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:8:"get_form";s:6:"params";a:1:{i:0;a:1:{s:6:"object";s:13:"bx_forum_cmts";}}s:5:"class";s:27:"TemplSearchExtendedServices";}', 0, 1, 0, 4),
+('bx_forum_search', 1, @sName, '', '_bx_forum_page_block_title_search_results_cmts', 11, 2147483647, 'service', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:11:"get_results";s:6:"params";a:1:{i:0;a:2:{s:6:"object";s:13:"bx_forum_cmts";s:10:"show_empty";b:1;}}s:5:"class";s:27:"TemplSearchExtendedServices";}', 0, 1, 0, 5);
+
+-- PAGE: module manage own
+INSERT INTO `sys_objects_page`(`object`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `uri`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_forum_manage', '_bx_forum_page_title_sys_manage', '_bx_forum_page_title_manage', @sName, 5, 2147483647, 1, 'discussions-manage', 'page.php?i=discussions-manage', '', '', '', 0, 1, 0, 'BxForumPageBrowse', 'modules/boonex/forum/classes/BxForumPageBrowse.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES 
+('bx_forum_manage', 1, @sName, '_bx_forum_page_block_title_system_manage', '_bx_forum_page_block_title_manage', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_forum";s:6:"method";s:12:"manage_tools";}}', 0, 1, 0);
+
+-- PAGE: module manage all
+INSERT INTO `sys_objects_page`(`object`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `uri`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_forum_administration', '_bx_forum_page_title_sys_manage_administration', '_bx_forum_page_title_manage', @sName, 5, 192, 1, 'discussions-administration', 'page.php?i=discussions-administration', '', '', '', 0, 1, 0, 'BxForumPageBrowse', 'modules/boonex/forum/classes/BxForumPageBrowse.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES 
+('bx_forum_administration', 1, @sName, '_bx_forum_page_block_title_system_manage_administration', '_bx_forum_page_block_title_manage', 11, 192, 'service', 'a:3:{s:6:"module";s:8:"bx_forum";s:6:"method";s:12:"manage_tools";s:6:"params";a:1:{i:0;s:14:"administration";}}', 0, 1, 0);
+
+-- PAGE: add block to homepage
+SET @iBlockOrder = (SELECT `order` FROM `sys_pages_blocks` WHERE `object` = 'sys_home' AND `cell_id` = 1 ORDER BY `order` DESC LIMIT 1);
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `active`, `order`) VALUES 
+('sys_home', 1, @sName, '_bx_forum_page_block_title_new_entries', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_forum";s:6:"method";s:12:"browse_index";s:6:"params";a:4:{i:0;s:5:"table";i:1;b:0;i:2;b:1;i:3;b:0;}}', 1, 0, 0, IFNULL(@iBlockOrder, 0) + 1);
+
+-- PAGES: add page block to profiles modules (trigger* page objects are processed separately upon modules enable/disable)
+SET @iPBCellProfile = 2;
+INSERT INTO `sys_pages_blocks` (`object`, `cell_id`, `module`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES
+('trigger_page_profile_view_entry', @iPBCellProfile, @sName, '_bx_forum_page_block_title_my_entries', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_forum";s:6:"method";s:13:"browse_author";s:6:"params";a:2:{i:0;s:12:"{profile_id}";i:1;a:1:{s:13:"empty_message";b:0;}}}', 0, 0, 0);
+
+-- PAGE: service blocks
+SET @iBlockOrder = (SELECT `order` FROM `sys_pages_blocks` WHERE `object` = '' AND `cell_id` = 0 ORDER BY `order` DESC LIMIT 1);
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES 
+('', 0, @sName, '_bx_forum_page_block_title_latest_entries', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_forum";s:6:"method";s:13:"browse_latest";s:6:"params";a:3:{i:0;s:7:"gallery";i:1;b:1;i:2;b:0;}}', 0, 1, IFNULL(@iBlockOrder, 0) + 1),
+('', 0, @sName, '_bx_forum_page_block_title_latest_entries_view_full', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_forum";s:6:"method";s:13:"browse_latest";s:6:"params";a:1:{i:0;s:4:"full";}}', 0, 1, IFNULL(@iBlockOrder, 0) + 2),
+('', 0, @sName, '_bx_forum_page_block_title_new_entries', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_forum";s:6:"method";s:10:"browse_new";s:6:"params";a:3:{i:0;s:7:"gallery";i:1;b:1;i:2;b:0;}}', 0, 1, IFNULL(@iBlockOrder, 0) + 3),
+('', 0, @sName, '_bx_forum_page_block_title_new_entries_view_full', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_forum";s:6:"method";s:10:"browse_new";s:6:"params";a:1:{i:0;s:4:"full";}}', 0, 1, IFNULL(@iBlockOrder, 0) + 4),
+('', 0, @sName, '_bx_forum_page_block_title_top_entries_view_extended', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_forum";s:6:"method";s:10:"browse_top";s:6:"params";a:1:{i:0;s:8:"extended";}}', 0, 1, IFNULL(@iBlockOrder, 0) + 5),
+('', 0, @sName, '_bx_forum_page_block_title_top_entries_view_full', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_forum";s:6:"method";s:10:"browse_top";s:6:"params";a:1:{i:0;s:4:"full";}}', 0, 1, IFNULL(@iBlockOrder, 0) + 6),
+('', 0, @sName, '_bx_forum_page_block_title_popular_entries_view_extended', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_forum";s:6:"method";s:14:"browse_popular";s:6:"params";a:1:{i:0;s:8:"extended";}}', 0, 1, IFNULL(@iBlockOrder, 0) + 7),
+('', 0, @sName, '_bx_forum_page_block_title_popular_entries_view_full', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_forum";s:6:"method";s:14:"browse_popular";s:6:"params";a:1:{i:0;s:4:"full";}}', 0, 1, IFNULL(@iBlockOrder, 0) + 8);
+
+
+-- MENU: add to site menu
+SET @iSiteMenuOrder = (SELECT `order` FROM `sys_menu_items` WHERE `set_name` = 'sys_site' AND `active` = 1 ORDER BY `order` DESC LIMIT 1);
+INSERT INTO `sys_menu_items` (`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES 
+('sys_site', @sName, 'discussions-home', '_bx_forum_menu_item_title_system_entries_home', '_bx_forum_menu_item_title_entries_home', 'page.php?i=discussions-home', '', '', 'far comments col-blue2', 'bx_forum_submenu', 2147483647, 1, 1, IFNULL(@iSiteMenuOrder, 0) + 1);
+
+-- MENU: add to homepage menu
+SET @iHomepageMenuOrder = (SELECT `order` FROM `sys_menu_items` WHERE `set_name` = 'sys_homepage' AND `active` = 1 ORDER BY `order` DESC LIMIT 1);
+INSERT INTO `sys_menu_items` (`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES 
+('sys_homepage', @sName, 'discussions-home', '_bx_forum_menu_item_title_system_entries_home', '_bx_forum_menu_item_title_entries_home', 'page.php?i=discussions-home', '', '', 'far comments col-blue2', 'bx_forum_submenu', 2147483647, 1, 1, IFNULL(@iHomepageMenuOrder, 0) + 1);
+
+-- MENU: add to "add content" menu
+SET @iAddMenuOrder = (SELECT `order` FROM `sys_menu_items` WHERE `set_name` = 'sys_add_content_links' AND `active` = 1 ORDER BY `order` DESC LIMIT 1);
+INSERT INTO `sys_menu_items` (`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES 
+('sys_add_content_links', @sName, 'create-discussion', '_bx_forum_menu_item_title_system_create_entry', '_bx_forum_menu_item_title_create_entry', 'page.php?i=create-discussion', '', '', 'far comments col-blue2', '', 2147483647, 1, 1, IFNULL(@iAddMenuOrder, 0) + 1);
+
+-- MENU: actions menu for view entry 
+INSERT INTO `sys_objects_menu`(`object`, `title`, `set_name`, `module`, `template_id`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES 
+('bx_forum_view', '_bx_forum_menu_title_view_entry', 'bx_forum_view', @sName, 9, 0, 1, 'BxForumMenuView', 'modules/boonex/forum/classes/BxForumMenuView.php');
+
+INSERT INTO `sys_menu_sets`(`set_name`, `module`, `title`, `deletable`) VALUES 
+('bx_forum_view', @sName, '_bx_forum_menu_set_title_view_entry', 0);
+
+INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `submenu_popup`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES
+-- ('bx_forum_view', @sName, 'subscribe-discussion', '_bx_forum_menu_item_title_system_subscribe', '_bx_forum_menu_item_title_subscribe', 'javascript:void(0)', 'bx_conn_action(this, \'bx_forum_subscribers\', \'add\', \'{content_id}\')', '', 'check', '', 0, 2147483647, 1, 0, 1),
+('bx_forum_view', @sName, 'stick-discussion', '_bx_forum_menu_item_title_system_stick_entry', '_bx_forum_menu_item_title_stick_entry', 'javascript:void(0);', '{js_object}.updateStatus(this, \'stick\', {content_id});', '', 'thumbtack', '', 0, 2147483647, 1, 0, 2),
+('bx_forum_view', @sName, 'lock-discussion', '_bx_forum_menu_item_title_system_lock_entry', '_bx_forum_menu_item_title_lock_entry', 'javascript:void(0);', '{js_object}.updateStatus(this, \'lock\', {content_id});', '', 'lock', '', 0, 2147483647, 1, 0, 3),
+('bx_forum_view', @sName, 'hide-discussion', '_bx_forum_menu_item_title_system_hide_entry', '_bx_forum_menu_item_title_hide_entry', 'javascript:void(0);', '{js_object}.updateStatus(this, \'hide\', {content_id});', '', 'stop-circle', '', 0, 2147483647, 1, 0, 4),
+('bx_forum_view', @sName, 'more', '_bx_forum_menu_item_title_system_more', '_bx_forum_menu_item_title_more', 'javascript:void(0)', 'bx_menu_popup(\'bx_forum_view_more\', this, {}, {id:{content_id}});', '', 'cog', 'bx_forum_view_more', 1, 2147483647, 1, 0, 9999);
+
+-- MENU: view actions more
+INSERT INTO `sys_objects_menu`(`object`, `title`, `set_name`, `module`, `template_id`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES 
+('bx_forum_view_more', '_bx_forum_menu_title_view_more', 'bx_forum_view_more', @sName, 6, 0, 1, 'BxForumMenuView', 'modules/boonex/forum/classes/BxForumMenuView.php');
+
+INSERT INTO `sys_menu_sets`(`set_name`, `module`, `title`, `deletable`) VALUES 
+('bx_forum_view_more', @sName, '_bx_forum_menu_set_title_view_more', 0);
+
+INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES 
+-- ('bx_forum_view_more', @sName, 'unsubscribe-discussion', '_bx_forum_menu_item_title_system_unsubscribe', '_bx_forum_menu_item_title_unsubscribe', 'javascript:void(0)', 'bx_conn_action(this, \'bx_forum_subscribers\', \'remove\', \'{content_id}\')', '', 'check', '', 2147483647, 1, 0, 1),
+('bx_forum_view_more', @sName, 'unstick-discussion', '_bx_forum_menu_item_title_system_unstick_entry', '_bx_forum_menu_item_title_unstick_entry', 'javascript:void(0);', '{js_object}.updateStatus(this, \'unstick\', {content_id});', '', 'thumbtack', '', 2147483647, 1, 0, 2),
+('bx_forum_view_more', @sName, 'unlock-discussion', '_bx_forum_menu_item_title_system_unlock_entry', '_bx_forum_menu_item_title_unlock_entry', 'javascript:void(0);', '{js_object}.updateStatus(this, \'unlock\', {content_id});', '', 'unlock', '', 2147483647, 1, 0, 3),
+('bx_forum_view_more', @sName, 'unhide-discussion', '_bx_forum_menu_item_title_system_unhide_entry', '_bx_forum_menu_item_title_unhide_entry', 'javascript:void(0);', '{js_object}.updateStatus(this, \'unhide\', {content_id});', '', 'play-circle', '', 2147483647, 1, 0, 4),
+('bx_forum_view_more', @sName, 'edit-discussion', '_bx_forum_menu_item_title_system_edit_entry', '_bx_forum_menu_item_title_edit_entry', 'page.php?i=edit-discussion&id={content_id}', '', '', 'pencil-alt', '', 2147483647, 1, 0, 5),
+('bx_forum_view_more', @sName, 'delete-discussion', '_bx_forum_menu_item_title_system_delete_entry', '_bx_forum_menu_item_title_delete_entry', 'page.php?i=delete-discussion&id={content_id}', '', '', 'remove', '', 2147483647, 1, 0, 6);
+
+-- MENU: all actions menu for view entry 
+INSERT INTO `sys_objects_menu`(`object`, `title`, `set_name`, `module`, `template_id`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES 
+('bx_forum_view_actions', '_sys_menu_title_view_actions', 'bx_forum_view_actions', @sName, 15, 0, 1, 'BxForumMenuViewActions', 'modules/boonex/forum/classes/BxForumMenuViewActions.php');
+
+INSERT INTO `sys_menu_sets`(`set_name`, `module`, `title`, `deletable`) VALUES 
+('bx_forum_view_actions', @sName, '_sys_menu_set_title_view_actions', 0);
+
+INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `addon`, `submenu_object`, `submenu_popup`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES 
+-- ('bx_forum_view_actions', @sName, 'subscribe-discussion', '_bx_forum_menu_item_title_system_subscribe', '', '', '', '', '', '', '', 0, 2147483647, 1, 0, 10),
+-- ('bx_forum_view_actions', @sName, 'unsubscribe-discussion', '_bx_forum_menu_item_title_system_unsubscribe', '', '', '', '', '', '', '', 0, 2147483647, 1, 0, 20),
+('bx_forum_view_actions', @sName, 'stick-discussion', '_bx_forum_menu_item_title_system_stick_entry', '', '', '', '', '', '', '', 0, 2147483647, 1, 0, 30),
+('bx_forum_view_actions', @sName, 'unstick-discussion', '_bx_forum_menu_item_title_system_unstick_entry', '', '', '', '', '', '', '', 0, 2147483647, 1, 0, 40),
+('bx_forum_view_actions', @sName, 'lock-discussion', '_bx_forum_menu_item_title_system_lock_entry', '', '', '', '', '', '', '', 0, 2147483647, 1, 0, 50),
+('bx_forum_view_actions', @sName, 'unlock-discussion', '_bx_forum_menu_item_title_system_unlock_entry', '', '', '', '', '', '', '', 0, 2147483647, 1, 0, 60),
+('bx_forum_view_actions', @sName, 'hide-discussion', '_bx_forum_menu_item_title_system_hide_entry', '', '', '', '', '', '', '', 0, 2147483647, 1, 0, 70),
+('bx_forum_view_actions', @sName, 'unhide-discussion', '_bx_forum_menu_item_title_system_unhide_entry', '', '', '', '', '', '', '', 0, 2147483647, 1, 0, 80),
+('bx_forum_view_actions', @sName, 'edit-discussion', '_bx_forum_menu_item_title_system_edit_entry', '', '', '', '', '', '', '', 0, 2147483647, 1, 0, 90),
+('bx_forum_view_actions', @sName, 'delete-discussion', '_bx_forum_menu_item_title_system_delete_entry', '', '', '', '', '', '', '', 0, 2147483647, 1, 0, 100),
+('bx_forum_view_actions', @sName, 'comment', '_sys_menu_item_title_system_va_comment', '', '', '', '', '', '', '', 0, 2147483647, 0, 0, 200),
+('bx_forum_view_actions', @sName, 'view', '_sys_menu_item_title_system_va_view', '', '', '', '', '', '', '', 0, 2147483647, 1, 0, 210),
+('bx_forum_view_actions', @sName, 'vote', '_sys_menu_item_title_system_va_vote', '', '', '', '', '', '', '', 0, 2147483647, 0, 0, 220),
+('bx_forum_view_actions', @sName, 'reaction', '_sys_menu_item_title_system_va_reaction', '', '', '', '', '', '', '', 0, 2147483647, 1, 0, 225),
+('bx_forum_view_actions', @sName, 'score', '_sys_menu_item_title_system_va_score', '', '', '', '', '', '', '', 0, 2147483647, 1, 0, 230),
+('bx_forum_view_actions', @sName, 'favorite', '_sys_menu_item_title_system_va_favorite', '', '', '', '', '', '', '', 0, 2147483647, 1, 0, 240),
+('bx_forum_view_actions', @sName, 'feature', '_sys_menu_item_title_system_va_feature', '', '', '', '', '', '', '', 0, 2147483647, 1, 0, 250),
+('bx_forum_view_actions', @sName, 'repost', '_sys_menu_item_title_system_va_repost', '', '', '', '', '', '', '', 0, 2147483647, 1, 0, 260),
+('bx_forum_view_actions', @sName, 'report', '_sys_menu_item_title_system_va_report', '', '', '', '', '', '', '', 0, 2147483647, 1, 0, 270),
+('bx_forum_view_actions', @sName, 'social-sharing-facebook', '_sys_menu_item_title_system_social_sharing_facebook', '', '', '', '', '', '', '', 0, 2147483647, 1, 0, 300),
+('bx_forum_view_actions', @sName, 'social-sharing-twitter', '_sys_menu_item_title_system_social_sharing_twitter', '', '', '', '', '', '', '', 0, 2147483647, 1, 0, 320),
+('bx_forum_view_actions', @sName, 'social-sharing-pinterest', '_sys_menu_item_title_system_social_sharing_pinterest', '', '', '', '', '', '', '', 0, 2147483647, 1, 0, 330),
+('bx_forum_view_actions', @sName, 'more-auto', '_sys_menu_item_title_system_va_more_auto', '_sys_menu_item_title_va_more_auto', 'javascript:void(0)', '', '', 'ellipsis-v', '', '', 0, 2147483647, 1, 0, 9999);
+
+-- MENU: actions menu for my entries
+INSERT INTO `sys_objects_menu`(`object`, `title`, `set_name`, `module`, `template_id`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES 
+('bx_forum_my', '_bx_forum_menu_title_entries_my', 'bx_forum_my', @sName, 9, 0, 1, 'BxForumMenu', 'modules/boonex/forum/classes/BxForumMenu.php');
+
+INSERT INTO `sys_menu_sets`(`set_name`, `module`, `title`, `deletable`) VALUES 
+('bx_forum_my', @sName, '_bx_forum_menu_set_title_entries_my', 0);
+
+INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES 
+('bx_forum_my', 'bx_forum', 'create-discussion', '_bx_forum_menu_item_title_system_create_entry', '_bx_forum_menu_item_title_create_entry', 'page.php?i=create-discussion', '', '', 'plus', '', 2147483647, 1, 0, 0);
+
+-- MENU: module sub-menu
+INSERT INTO `sys_objects_menu`(`object`, `title`, `set_name`, `module`, `template_id`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES 
+('bx_forum_submenu', '_bx_forum_menu_title_submenu', 'bx_forum_submenu', @sName, 8, 0, 1, '', '');
+
+INSERT INTO `sys_menu_sets`(`set_name`, `module`, `title`, `deletable`) VALUES 
+('bx_forum_submenu', @sName, '_bx_forum_menu_set_title_submenu', 0);
+
+INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES 
+('bx_forum_submenu', @sName, 'discussions-home', '_bx_forum_menu_item_title_system_entries_public', '_bx_forum_menu_item_title_entries_public', 'page.php?i=discussions-home', '', '', '', '', 2147483647, 1, 1, 1),
+('bx_forum_submenu', @sName, 'discussions-new', '_bx_forum_menu_item_title_system_entries_new', '_bx_forum_menu_item_title_entries_new', 'page.php?i=discussions-new', '', '', '', '', 2147483647, 1, 1, 2),
+('bx_forum_submenu', @sName, 'discussions-top', '_bx_forum_menu_item_title_system_entries_top', '_bx_forum_menu_item_title_entries_top', 'page.php?i=discussions-top', '', '', '', '', 2147483647, 1, 1, 3),
+('bx_forum_submenu', @sName, 'discussions-categories', '_bx_forum_menu_item_title_system_entries_categories', '_bx_forum_menu_item_title_entries_categories', 'page.php?i=discussions-categories', '', '', '', '', 2147483647, 1, 1, 4),
+('bx_forum_submenu', @sName, 'discussions-search', '_bx_forum_menu_item_title_system_entries_search', '_bx_forum_menu_item_title_entries_search', 'page.php?i=discussions-search', '', '', '', '', 2147483647, 1, 1, 5),
+('bx_forum_submenu', @sName, 'discussions-manage', '_bx_forum_menu_item_title_system_entries_manage', '_bx_forum_menu_item_title_entries_manage', 'page.php?i=discussions-manage', '', '', '', '', 2147483646, 1, 1, 6);
+
+-- MENU: custom menu for 'main' snippet meta info
+INSERT INTO `sys_objects_menu`(`object`, `title`, `set_name`, `module`, `template_id`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES 
+('bx_forum_snippet_meta_main', '_bx_forum_menu_title_snippet_meta_main', 'bx_forum_snippet_meta_main', 'bx_forum', 15, 0, 1, 'BxForumMenuSnippetMeta', 'modules/boonex/forum/classes/BxForumMenuSnippetMeta.php');
+
+INSERT INTO `sys_menu_sets`(`set_name`, `module`, `title`, `deletable`) VALUES 
+('bx_forum_snippet_meta_main', 'bx_forum', '_bx_forum_menu_set_title_snippet_meta_main', 0);
+
+INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `editable`, `order`) VALUES 
+('bx_forum_snippet_meta_main', 'bx_forum', 'author', '_sys_menu_item_title_system_sm_author', '_sys_menu_item_title_sm_author', '', '', '', '', '', 2147483647, 1, 0, 1, 1),
+('bx_forum_snippet_meta_main', 'bx_forum', 'date', '_sys_menu_item_title_system_sm_date', '_sys_menu_item_title_sm_date', '', '', '', '', '', 2147483647, 1, 0, 1, 2),
+('bx_forum_snippet_meta_main', 'bx_forum', 'category', '_sys_menu_item_title_system_sm_category', '_sys_menu_item_title_sm_category', '', '', '', '', '', 2147483647, 1, 0, 1, 3);
+
+-- MENU: custom menu for 'counters' snippet meta info
+INSERT INTO `sys_objects_menu`(`object`, `title`, `set_name`, `module`, `template_id`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES 
+('bx_forum_snippet_meta_counters', '_bx_forum_menu_title_snippet_meta_counters', 'bx_forum_snippet_meta_counters', 'bx_forum', 15, 0, 1, 'BxForumMenuSnippetMeta', 'modules/boonex/forum/classes/BxForumMenuSnippetMeta.php');
+
+INSERT INTO `sys_menu_sets`(`set_name`, `module`, `title`, `deletable`) VALUES 
+('bx_forum_snippet_meta_counters', 'bx_forum', '_bx_forum_menu_set_title_snippet_meta_counters', 0);
+
+INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `editable`, `order`) VALUES 
+('bx_forum_snippet_meta_counters', 'bx_forum', 'views', '_sys_menu_item_title_system_sm_views', '_sys_menu_item_title_sm_views', '', '', '', '', '', 2147483647, 1, 0, 1, 1),
+('bx_forum_snippet_meta_counters', 'bx_forum', 'votes', '_sys_menu_item_title_system_sm_votes', '_sys_menu_item_title_sm_votes', '', '', '', '', '', 2147483647, 1, 0, 1, 2),
+('bx_forum_snippet_meta_counters', 'bx_forum', 'comments', '_sys_menu_item_title_system_sm_comments', '_sys_menu_item_title_sm_comments', '', '', '', '', '', 2147483647, 1, 0, 1, 3);
+
+-- MENU: custom menu for 'reply' snippet meta info
+INSERT INTO `sys_objects_menu`(`object`, `title`, `set_name`, `module`, `template_id`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES 
+('bx_forum_snippet_meta_reply', '_bx_forum_menu_title_snippet_meta_reply', 'bx_forum_snippet_meta_reply', 'bx_forum', 15, 0, 1, 'BxForumMenuSnippetMeta', 'modules/boonex/forum/classes/BxForumMenuSnippetMeta.php');
+
+INSERT INTO `sys_menu_sets`(`set_name`, `module`, `title`, `deletable`) VALUES 
+('bx_forum_snippet_meta_reply', 'bx_forum', '_bx_forum_menu_set_title_snippet_meta_reply', 0);
+
+INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `editable`, `order`) VALUES 
+('bx_forum_snippet_meta_reply', 'bx_forum', 'reply-author', '_sys_menu_item_title_system_sm_author', '_sys_menu_item_title_sm_author', '', '', '', '', '', 2147483647, 1, 0, 1, 1),
+('bx_forum_snippet_meta_reply', 'bx_forum', 'reply-date', '_sys_menu_item_title_system_sm_date', '_sys_menu_item_title_sm_date', '', '', '', '', '', 2147483647, 1, 0, 1, 2),
+('bx_forum_snippet_meta_reply', 'bx_forum', 'reply-text', '_bx_forum_menu_item_title_system_sm_reply_text', '_bx_forum_menu_item_title_sm_reply_text', '', '', '', '', '', 2147483647, 1, 0, 1, 3);
+
+
+-- MENU: manage tools submenu
+INSERT INTO `sys_objects_menu`(`object`, `title`, `set_name`, `module`, `template_id`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES 
+('bx_forum_menu_manage_tools', '_bx_forum_menu_title_manage_tools', 'bx_forum_menu_manage_tools', 'bx_forum', 6, 0, 1, 'BxForumMenuManageTools', 'modules/boonex/forum/classes/BxForumMenuManageTools.php');
+
+INSERT INTO `sys_menu_sets`(`set_name`, `module`, `title`, `deletable`) VALUES 
+('bx_forum_menu_manage_tools', 'bx_forum', '_bx_forum_menu_set_title_manage_tools', 0);
+
+--INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES 
+--('bx_forum_menu_manage_tools', 'bx_forum', 'delete-with-content', '_bx_forum_menu_item_title_system_delete_with_content', '_bx_forum_menu_item_title_delete_with_content', 'javascript:void(0)', 'javascript:{js_object}.onClickDeleteWithContent({content_id});', '_self', 'far trash-alt', '', 128, 1, 0, 0);
+
+-- MENU: profile stats
+INSERT INTO `sys_menu_items` (`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `addon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES
+('sys_profile_stats', @sName, 'profile-stats-discussions', '_bx_forum_menu_item_title_system_discussions', '_bx_forum_menu_item_title_discussions', 'page.php?i=discussions-manage', '', '', 'far comments col-blue2', 'a:2:{s:6:"module";s:8:"bx_forum";s:6:"method";s:19:"get_discussions_num";}', '', 2147483646, 1, 0, 2);
+
+-- MENU: dashboard manage tools
+SET @iManageMenuOrder = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_menu_items` WHERE `set_name`='sys_account_dashboard_manage_tools' LIMIT 1);
+INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `addon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES 
+('sys_account_dashboard_manage_tools', @sName, 'discussions-administration', '_bx_forum_menu_item_title_system_admt_discussions', '_bx_forum_menu_item_title_admt_discussions', 'page.php?i=discussions-administration', '', '_self', 'far comments', 'a:2:{s:6:"module";s:8:"bx_forum";s:6:"method";s:27:"get_menu_addon_manage_tools";}', '', 192, 1, 0, @iManageMenuOrder + 1);
+
+-- MENU: add menu item to profiles modules (trigger* menu sets are processed separately upon modules enable/disable)
+INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES 
+('trigger_profile_view_submenu', @sName, 'discussions-author', '_bx_forum_menu_item_title_system_view_entries_author', '_bx_forum_menu_item_title_view_entries_author', 'page.php?i=discussions-author&profile_id={profile_id}', '', '', 'far comments col-blue2', '', 2147483647, 1, 0, 0),
+('trigger_group_view_submenu', @sName, 'discussions-context', '_bx_forum_menu_item_title_system_view_entries_in_context', '_bx_forum_menu_item_title_view_entries_in_context', 'page.php?i=discussions-context&profile_id={profile_id}', '', '', 'far comments col-blue2', '', 2147483647, 1, 0, 0);
+
+-- GRIDS: main
+INSERT INTO `sys_objects_grid` (`object`, `source_type`, `source`, `table`, `field_id`, `field_order`, `paginate_url`, `paginate_per_page`, `paginate_simple`, `paginate_get_start`, `paginate_get_per_page`, `filter_fields`, `filter_mode`, `sorting_fields`, `visible_for_levels`, `override_class_name`, `override_class_file`) VALUES
+(@sName, 'Sql', 'SELECT `bx_forum_discussions`.*, `bx_forum_cmts`.`cmt_text` AS `cmt_text` FROM `bx_forum_discussions` LEFT JOIN `bx_forum_cmts` ON (`bx_forum_cmts`.`cmt_id` = `bx_forum_discussions`.`lr_comment_id`) %s WHERE 1 %s', 'bx_forum_discussions', 'id', 'lr_timestamp', '', 10, NULL, 'start', '', 'title,text,text_comments', 'auto', '', 2147483647, 'BxForumGrid', 'modules/boonex/forum/classes/BxForumGrid.php'),
+('bx_forum_favorite', 'Sql', 'SELECT `bx_forum_discussions`.*, `bx_forum_cmts`.`cmt_text` AS `cmt_text` FROM `bx_forum_discussions` LEFT JOIN `bx_forum_cmts` ON (`bx_forum_cmts`.`cmt_id` = `bx_forum_discussions`.`lr_comment_id`) %s WHERE 1 %s', 'bx_forum_discussions', 'id', 'lr_timestamp', '', 10, NULL, 'start', '', 'title,text,text_comments', 'auto', '', 2147483647, 'BxForumGrid', 'modules/boonex/forum/classes/BxForumGrid.php'),
+('bx_forum_feature', 'Sql', 'SELECT `bx_forum_discussions`.*, `bx_forum_cmts`.`cmt_text` AS `cmt_text` FROM `bx_forum_discussions` LEFT JOIN `bx_forum_cmts` ON (`bx_forum_cmts`.`cmt_id` = `bx_forum_discussions`.`lr_comment_id`) %s WHERE 1 %s', 'bx_forum_discussions', 'id', 'lr_timestamp', '', 10, NULL, 'start', '', 'title,text,text_comments', 'auto', '', 2147483647, 'BxForumGrid', 'modules/boonex/forum/classes/BxForumGrid.php');
+
+INSERT INTO `sys_grid_fields` (`object`, `name`, `title`, `width`, `params`, `order`) VALUES
+(@sName, 'author', '', '10%', '', 1),
+(@sName, 'text', '', '90%', '', 2),
+
+('bx_forum_favorite', 'author', '', '10%', '', 1),
+('bx_forum_favorite', 'text', '', '90%', '', 2),
+
+('bx_forum_feature', 'author', '', '10%', '', 1),
+('bx_forum_feature', 'text', '', '90%', '', 2);
+
+INSERT INTO `sys_grid_actions` (`object`, `type`, `name`, `title`, `icon`, `confirm`, `order`) VALUES
+(@sName, 'independent', 'add', '_bx_forum_grid_action_title_add', '', 0, 1);
+
+-- GRIDS: moderation tools
+INSERT INTO `sys_objects_grid` (`object`, `source_type`, `source`, `table`, `field_id`, `field_order`, `field_active`, `paginate_url`, `paginate_per_page`, `paginate_simple`, `paginate_get_start`, `paginate_get_per_page`, `filter_fields`, `filter_fields_translatable`, `filter_mode`, `sorting_fields`, `sorting_fields_translatable`, `visible_for_levels`, `override_class_name`, `override_class_file`) VALUES
+('bx_forum_administration', 'Sql', 'SELECT * FROM `bx_forum_discussions` WHERE 1 ', 'bx_forum_discussions', 'id', 'added', 'status_admin', '', 20, NULL, 'start', '', 'title,text', '', 'like', 'reports', '', 192, 'BxForumGridAdministration', 'modules/boonex/forum/classes/BxForumGridAdministration.php'),
+('bx_forum_common', 'Sql', 'SELECT * FROM `bx_forum_discussions` WHERE 1 ', 'bx_forum_discussions', 'id', 'added', 'status', '', 20, NULL, 'start', '', 'title,text', '', 'like', '', '', 2147483647, 'BxForumGridCommon', 'modules/boonex/forum/classes/BxForumGridCommon.php');
+
+INSERT INTO `sys_grid_fields` (`object`, `name`, `title`, `width`, `translatable`, `chars_limit`, `params`, `order`) VALUES
+('bx_forum_administration', 'checkbox', '_sys_select', '2%', 0, '', '', 1),
+('bx_forum_administration', 'switcher', '_bx_forum_grid_column_title_adm_active', '8%', 0, '', '', 2),
+('bx_forum_administration', 'reports', '_sys_txt_reports_title', '5%', 0, '', '', 3),
+('bx_forum_administration', 'title', '_bx_forum_grid_column_title_adm_title', '25%', 0, '', '', 4),
+('bx_forum_administration', 'added', '_bx_forum_grid_column_title_adm_added', '20%', 1, '25', '', 5),
+('bx_forum_administration', 'author', '_bx_forum_grid_column_title_adm_author', '20%', 0, '25', '', 6),
+('bx_forum_administration', 'actions', '', '20%', 0, '', '', 7),
+
+('bx_forum_common', 'checkbox', '_sys_select', '2%', 0, '', '', 1),
+('bx_forum_common', 'switcher', '_bx_forum_grid_column_title_adm_active', '8%', 0, '', '', 2),
+('bx_forum_common', 'title', '_bx_forum_grid_column_title_adm_title', '40%', 0, '', '', 3),
+('bx_forum_common', 'added', '_bx_forum_grid_column_title_adm_added', '30%', 1, '25', '', 4),
+('bx_forum_common', 'actions', '', '20%', 0, '', '', 5);
+
+INSERT INTO `sys_grid_actions` (`object`, `type`, `name`, `title`, `icon`, `icon_only`, `confirm`, `order`) VALUES
+('bx_forum_administration', 'bulk', 'delete', '_bx_forum_grid_action_title_adm_delete', '', 0, 1, 1),
+('bx_forum_administration', 'single', 'edit', '_bx_forum_grid_action_title_adm_edit', 'pencil-alt', 1, 0, 1),
+('bx_forum_administration', 'single', 'delete', '_bx_forum_grid_action_title_adm_delete', 'remove', 1, 1, 2),
+('bx_forum_administration', 'single', 'settings', '_bx_forum_grid_action_title_adm_more_actions', 'cog', 1, 0, 3),
+
+('bx_forum_common', 'bulk', 'delete', '_bx_forum_grid_action_title_adm_delete', '', 0, 1, 1),
+('bx_forum_common', 'single', 'edit', '_bx_forum_grid_action_title_adm_edit', 'pencil-alt', 1, 0, 1),
+('bx_forum_common', 'single', 'delete', '_bx_forum_grid_action_title_adm_delete', 'remove', 1, 1, 2),
+('bx_forum_common', 'single', 'settings', '_bx_forum_grid_action_title_adm_more_actions', 'cog', 1, 0, 3);
+
+-- GRIDS: categories manager
+INSERT INTO `sys_objects_grid` (`object`, `source_type`, `source`, `table`, `field_id`, `field_order`, `paginate_url`, `paginate_per_page`, `paginate_simple`, `paginate_get_start`, `paginate_get_per_page`, `filter_fields`, `filter_mode`, `sorting_fields`, `visible_for_levels`, `override_class_name`, `override_class_file`) VALUES
+('bx_forum_categories', 'Array', '', '', 'category', '', '', 10, NULL, 'start', '', 'title', 'auto', '', 128, 'BxForumGridCategories', 'modules/boonex/forum/classes/BxForumGridCategories.php');
+
+INSERT INTO `sys_grid_fields` (`object`, `name`, `title`, `width`, `params`, `order`) VALUES
+('bx_forum_categories', 'title', '_bx_forum_grid_column_title_title', '60%', '', 1),
+('bx_forum_categories', 'visible_for_levels', '_bx_forum_grid_column_title_visible_for_levels', '40%', '', 2);
+
+INSERT INTO `sys_grid_actions` (`object`, `type`, `name`, `title`, `icon`, `confirm`, `order`) VALUES
+('bx_forum_categories', 'single', 'show_to', '_bx_forum_grid_action_title_show_to', '', 0, 1);
+
+
+-- ACL
+INSERT INTO `sys_acl_actions` (`Module`, `Name`, `AdditionalParamName`, `Title`, `Desc`, `Countable`, `DisabledForLevels`) VALUES
+(@sName, 'create entry', NULL, '_bx_forum_acl_action_create_entry', '', 1, 3);
+SET @iIdActionEntryCreate = LAST_INSERT_ID();
+
+INSERT INTO `sys_acl_actions` (`Module`, `Name`, `AdditionalParamName`, `Title`, `Desc`, `Countable`, `DisabledForLevels`) VALUES
+(@sName, 'delete entry', NULL, '_bx_forum_acl_action_delete_entry', '', 1, 3);
+SET @iIdActionEntryDelete = LAST_INSERT_ID();
+
+INSERT INTO `sys_acl_actions` (`Module`, `Name`, `AdditionalParamName`, `Title`, `Desc`, `Countable`, `DisabledForLevels`) VALUES
+(@sName, 'view entry', NULL, '_bx_forum_acl_action_view_entry', '', 1, 0);
+SET @iIdActionEntryView = LAST_INSERT_ID();
+
+INSERT INTO `sys_acl_actions` (`Module`, `Name`, `AdditionalParamName`, `Title`, `Desc`, `Countable`, `DisabledForLevels`) VALUES
+(@sName, 'set thumb', NULL, '_bx_forum_acl_action_set_thumb', '', 1, 3);
+SET @iIdActionSetThumb = LAST_INSERT_ID();
+
+INSERT INTO `sys_acl_actions` (`Module`, `Name`, `AdditionalParamName`, `Title`, `Desc`, `Countable`, `DisabledForLevels`) VALUES
+(@sName, 'edit any entry', NULL, '_bx_forum_acl_action_edit_any_entry', '', 1, 3);
+SET @iIdActionEntryEditAny = LAST_INSERT_ID();
+
+INSERT INTO `sys_acl_actions` (`Module`, `Name`, `AdditionalParamName`, `Title`, `Desc`, `Countable`, `DisabledForLevels`) VALUES
+(@sName, 'stick any entry', NULL, '_bx_forum_acl_action_stick_any_entry', '', 1, 3);
+SET @iIdActionEntryStickAny = LAST_INSERT_ID();
+
+INSERT INTO `sys_acl_actions` (`Module`, `Name`, `AdditionalParamName`, `Title`, `Desc`, `Countable`, `DisabledForLevels`) VALUES
+(@sName, 'lock any entry', NULL, '_bx_forum_acl_action_lock_any_entry', '', 1, 3);
+SET @iIdActionEntryLockAny = LAST_INSERT_ID();
+
+INSERT INTO `sys_acl_actions` (`Module`, `Name`, `AdditionalParamName`, `Title`, `Desc`, `Countable`, `DisabledForLevels`) VALUES
+(@sName, 'hide any entry', NULL, '_bx_forum_acl_action_hide_any_entry', '', 1, 3);
+SET @iIdActionEntryHideAny = LAST_INSERT_ID();
+
+SET @iUnauthenticated = 1;
+SET @iAccount = 2;
+SET @iStandard = 3;
+SET @iUnconfirmed = 4;
+SET @iPending = 5;
+SET @iSuspended = 6;
+SET @iModerator = 7;
+SET @iAdministrator = 8;
+SET @iPremium = 9;
+
+INSERT INTO `sys_acl_matrix` (`IDLevel`, `IDAction`) VALUES
+
+-- entry create
+(@iStandard, @iIdActionEntryCreate),
+(@iModerator, @iIdActionEntryCreate),
+(@iAdministrator, @iIdActionEntryCreate),
+(@iPremium, @iIdActionEntryCreate),
+
+-- entry delete
+(@iStandard, @iIdActionEntryDelete),
+(@iModerator, @iIdActionEntryDelete),
+(@iAdministrator, @iIdActionEntryDelete),
+(@iPremium, @iIdActionEntryDelete),
+
+-- entry view
+(@iUnauthenticated, @iIdActionEntryView),
+(@iAccount, @iIdActionEntryView),
+(@iStandard, @iIdActionEntryView),
+(@iUnconfirmed, @iIdActionEntryView),
+(@iPending, @iIdActionEntryView),
+(@iModerator, @iIdActionEntryView),
+(@iAdministrator, @iIdActionEntryView),
+(@iPremium, @iIdActionEntryView),
+
+-- set entry thumb
+(@iStandard, @iIdActionSetThumb),
+(@iModerator, @iIdActionSetThumb),
+(@iAdministrator, @iIdActionSetThumb),
+(@iPremium, @iIdActionSetThumb),
+
+-- edit any entry
+(@iModerator, @iIdActionEntryEditAny),
+(@iAdministrator, @iIdActionEntryEditAny),
+
+-- stick any entry
+(@iModerator, @iIdActionEntryStickAny),
+(@iAdministrator, @iIdActionEntryStickAny),
+
+-- lock any entry
+(@iModerator, @iIdActionEntryLockAny),
+(@iAdministrator, @iIdActionEntryLockAny),
+
+-- hide any entry
+(@iModerator, @iIdActionEntryHideAny),
+(@iAdministrator, @iIdActionEntryHideAny);
+
+
+-- PRIVACY 
+INSERT INTO `sys_objects_privacy` (`object`, `module`, `action`, `title`, `default_group`, `table`, `table_field_id`, `table_field_author`, `override_class_name`, `override_class_file`) VALUES
+('bx_forum_allow_view_to', @sName, 'view', '_bx_forum_form_entry_input_allow_view_to', '3', 'bx_forum_discussions', 'id', 'author', '', '');
+
+
+-- SEARCH
+SET @iSearchOrder = (SELECT IFNULL(MAX(`Order`), 0) FROM `sys_objects_search`);
+INSERT INTO `sys_objects_search` (`ObjectName`, `Title`, `Order`, `ClassName`, `ClassPath`) VALUES
+(@sName, '_bx_forum', @iSearchOrder + 1, 'BxForumSearchResult', 'modules/boonex/forum/classes/BxForumSearchResult.php'),
+('bx_forum_cmts', '_bx_forum_cmts', @iSearchOrder + 2, 'BxForumCmtsSearchResult', 'modules/boonex/forum/classes/BxForumCmtsSearchResult.php');
+
+
+-- CONNECTIONS
+INSERT INTO `sys_objects_connection` (`object`, `table`, `type`, `override_class_name`, `override_class_file`) VALUES
+('bx_forum_subscribers', 'bx_forum_subscribers', 'one-way', '', '');
+
+
+-- METATAGS
+INSERT INTO `sys_objects_metatags` (`object`, `table_keywords`, `table_locations`, `table_mentions`, `override_class_name`, `override_class_file`) VALUES
+(@sName, 'bx_forum_meta_keywords', '', 'bx_forum_meta_mentions', 'BxForumMetatags', 'modules/boonex/forum/classes/BxForumMetatags.php');
+
+
+-- CATEGORY
+INSERT INTO `sys_objects_category` (`object`, `search_object`, `form_object`, `list_name`, `table`, `field`, `join`, `where`, `override_class_name`, `override_class_file`) VALUES
+('bx_forum_cats', @sName, @sName, 'bx_forum_cats', 'bx_forum_discussions', 'cat', 'INNER JOIN `sys_profiles` ON (`sys_profiles`.`id` = ABS(`bx_forum_discussions`.`author`))', 'AND `sys_profiles`.`status` = ''active''', 'BxForumCategory', 'modules/boonex/forum/classes/BxForumCategory.php');
+
+
+-- STATS
+SET @iMaxOrderStats = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_statistics`);
+INSERT INTO `sys_statistics` (`module`, `name`, `title`, `link`, `icon`, `query`, `order`) VALUES 
+(@sName, @sName, '_bx_forum', 'page.php?i=discussions-home', 'far comments col-blue2', 'SELECT COUNT(*) FROM `bx_forum_discussions` WHERE 1 AND `status` = ''active'' AND `status_admin` = ''active''', @iMaxOrderStats + 1);
+
+
+-- CHARTS
+SET @iMaxOrderCharts = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_objects_chart`);
+INSERT INTO `sys_objects_chart` (`object`, `title`, `table`, `field_date_ts`, `field_date_dt`, `field_status`, `query`, `active`, `order`, `class_name`, `class_file`) VALUES
+('bx_forum_growth', '_bx_forum_chart_growth', 'bx_forum_discussions', 'added', '', 'status,status_admin', '', 1, @iMaxOrderCharts + 1, 'BxDolChartGrowth', ''),
+('bx_forum_growth_speed', '_bx_forum_chart_growth_speed', 'bx_forum_discussions', 'added', '', 'status,status_admin', '', 1, @iMaxOrderCharts + 2, 'BxDolChartGrowthSpeed', '');
+
+-- UPLOADERS
+
+INSERT INTO `sys_objects_uploader` (`object`, `active`, `override_class_name`, `override_class_file`) VALUES
+('bx_forum_simple', 1, 'BxForumUploaderSimple', 'modules/boonex/forum/classes/BxForumUploaderSimple.php'),
+('bx_forum_html5', 1, 'BxForumUploaderHTML5', 'modules/boonex/forum/classes/BxForumUploaderHTML5.php');
+
+-- ALERTS
+INSERT INTO `sys_alerts_handlers` (`name`, `class`, `file`, `service_call`) VALUES 
+(@sName, 'BxForumAlertsResponse', 'modules/boonex/forum/classes/BxForumAlertsResponse.php', '');
+SET @iHandler := LAST_INSERT_ID();
+
+INSERT INTO `sys_alerts` (`unit`, `action`, `handler_id`) VALUES
+('system', 'save_setting', @iHandler),
+('profile', 'delete', @iHandler),
+(@sName, 'commentPost', @iHandler),
+(@sName, 'commentUpdated', @iHandler),
+(@sName, 'commentRemoved', @iHandler);
+
+
+-- EMAIL TEMPLATES
+INSERT INTO `sys_email_templates` (`Module`, `NameSystem`, `Name`, `Subject`, `Body`) VALUES
+(@sName, '_bx_forum_email_new_reply', 'bx_forum_new_reply', '_bx_forum_email_new_reply_subject', '_bx_forum_email_new_reply_body');

+ 51 - 0
modules/boonex/notifications/updates/10.0.3_10.0.4/install/config.php

@@ -0,0 +1,51 @@
+<?php
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ */
+
+$aConfig = array(
+    /**
+     * Main Section.
+     */
+    'title' => 'Notifications',
+    'version_from' => '10.0.3',
+    'version_to' => '10.0.4',
+    'vendor' => 'BoonEx',
+
+    'compatible_with' => array(
+        '10.0.0'
+    ),
+
+    /**
+     * 'home_dir' and 'home_uri' - should be unique. Don't use spaces in 'home_uri' and the other special chars.
+     */
+    'home_dir' => 'boonex/notifications/updates/update_10.0.3_10.0.4/',
+    'home_uri' => 'notifications_update_1003_1004',
+
+    'module_dir' => 'boonex/notifications/',
+    'module_uri' => 'notifications',
+
+    'db_prefix' => 'bx_notifications_',
+    'class_prefix' => 'BxNtfs',
+
+    /**
+     * Installation/Uninstallation Section.
+     */
+    'install' => array(
+        'execute_sql' => 0,
+        'update_files' => 1,
+        'update_languages' => 0,
+        'clear_db_cache' => 0,
+    ),
+
+    /**
+     * Category for language keys.
+     */
+    'language_category' => 'Notifications',
+
+    /**
+     * Files Section
+     */
+    'delete_files' => array(),
+);

+ 13 - 0
modules/boonex/notifications/updates/10.0.3_10.0.4/install/installer.php

@@ -0,0 +1,13 @@
+<?php
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ */
+
+class BxNtfsUpdater extends BxDolStudioUpdater
+{
+    function __construct($aConfig)
+    {
+        parent::__construct($aConfig);
+    }
+}

+ 298 - 0
modules/boonex/notifications/updates/10.0.3_10.0.4/source/classes/BxNtfsDb.php

@@ -0,0 +1,298 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Notifications Notifications
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxNtfsDb extends BxBaseModNotificationsDb
+{
+    protected $_sTableEvt2Usr;
+    protected $_sTableQueue;
+
+    /*
+     * Constructor.
+     */
+    function __construct(&$oConfig)
+    {
+        parent::__construct($oConfig);
+
+        $this->_aDeliveryTypes = array(
+            BX_BASE_MOD_NTFS_DTYPE_SITE, 
+            BX_BASE_MOD_NTFS_DTYPE_EMAIL, 
+            BX_BASE_MOD_NTFS_DTYPE_PUSH
+        );
+
+        $this->_sTableEvt2Usr = $this->_sPrefix . 'events2users';
+        $this->_sTableQueue = $this->_sPrefix . 'queue';
+    }
+
+    public function markAsRead($iUserId, $iEventId)
+    {
+        $this->queueDeleteByProfile($iUserId, $iEventId);
+
+        return (int)$this->query("REPLACE `" . $this->_sTableEvt2Usr . "` SET `user_id`=:user_id, `event_id`=:event_id", array(
+            'user_id' => $iUserId,
+            'event_id' => $iEventId
+        )) > 0;
+    }
+
+    public function getLastRead($iUserId)
+    {
+        return (int)$this->getOne("SELECT `event_id` FROM `" . $this->_sTableEvt2Usr . "` WHERE `user_id`=:user_id LIMIT 1", array(
+            'user_id' => (int)$iUserId
+        ));
+    }
+
+    public function deleteEvent($aParams, $sWhereAddon = "")
+    {
+        $aEvents = $this->getAll("SELECT * FROM `{$this->_sTable}` WHERE " . $this->arrayToSQL($aParams, " AND ") . $sWhereAddon);
+        if(!empty($aEvents) && is_array($aEvents)) 
+            foreach($aEvents as $aEvent)
+                $this->queueDelete(array('event_id' => $aEvent['id']));
+
+        return parent::deleteEvent($aParams, $sWhereAddon);
+    }
+
+    public function getEvents($aParams, $bReturnCount = false)
+    {
+        if($aParams['browse'] != 'list' || $aParams['type'] != BX_NTFS_TYPE_OBJECT_OWNER_AND_CONNECTIONS)
+            return parent::getEvents($aParams, $bReturnCount);
+
+        $bCountOnly = !empty($aParams['count_only']);
+
+        //--- Get query for 'Object Owner' notifications
+        $sLimitClause = isset($aParams['per_page']) ? "LIMIT 0, " . ($aParams['start'] + $aParams['per_page']) : "";
+
+        $aParams['type'] = BX_BASE_MOD_NTFS_TYPE_OBJECT_OWNER;
+        list($sMethod, $sSelectClause, $sJoinClause, $sWhereClause, $sOrderClause) = $this->_getSqlPartsEvents($aParams);
+
+        $sQueryOwner = "SELECT {select}
+            FROM `{$this->_sTable}`
+            LEFT JOIN `{$this->_sTableHandlers}` ON `{$this->_sTable}`.`type`=`{$this->_sTableHandlers}`.`alert_unit` AND `{$this->_sTable}`.`action`=`{$this->_sTableHandlers}`.`alert_action` " . $sJoinClause . "
+            WHERE 1 " . $sWhereClause . (!$bCountOnly ? " " . $sOrderClause . " " . $sLimitClause : "");
+
+        //--- Get query for 'Connections based' notifications
+        $aParams['type'] = BX_BASE_MOD_NTFS_TYPE_CONNECTIONS;
+        list($sMethod, $sSelectClause, $sJoinClause, $sWhereClause, $sOrderClause) = $this->_getSqlPartsEvents($aParams);
+
+        $sQueryConnections = "SELECT {select}
+            FROM `{$this->_sTable}`
+            LEFT JOIN `{$this->_sTableHandlers}` ON `{$this->_sTable}`.`type`=`{$this->_sTableHandlers}`.`alert_unit` AND `{$this->_sTable}`.`action`=`{$this->_sTableHandlers}`.`alert_action` " . $sJoinClause . "
+            WHERE 1 " . $sWhereClause . (!$bCountOnly ? " " . $sOrderClause . " " . $sLimitClause : "");
+
+        //--- Combine both queries in one
+        $sUnionMethod = 'getColumn';
+        $sUnionOrderClause = $sUnionLimitClause = '';
+        if(!$bCountOnly) {
+            $sUnionMethod = $sMethod;
+            $sUnionOrderClause = "ORDER BY `date` DESC, `id` DESC";
+            $sUnionLimitClause = isset($aParams['per_page']) ? "LIMIT " . $aParams['start'] . ", " . $aParams['per_page'] : "";
+        }
+        
+        $sQuery = "(" . $sQueryOwner . ") UNION (" . $sQueryConnections . ") {order} {limit}";
+        $sQuery = str_replace(array('{select}', '{order}', '{limit}'), array($sSelectClause, $sUnionOrderClause, $sUnionLimitClause), $sQuery);
+        $aEntries = $this->$sUnionMethod($sQuery);
+
+        if($bCountOnly)
+            $aEntries = (int)array_sum($aEntries);
+
+        if(!$bReturnCount)
+            return $aEntries;
+
+        return array($aEntries, (int)$this->getOne(str_replace(array('{select}', '{order}', '{limit}'), array("COUNT(*)", "", ""), $sQuery)));
+    }
+
+    protected function _getSqlPartsEvents($aParams)
+    {
+        list($sMethod, $sSelectClause, $sJoinClause, $sWhereClause, $sOrderClause, $sLimitClause) = parent::_getSqlPartsEvents($aParams);
+
+        switch($aParams['browse']) {
+            case 'list':
+                if(!empty($aParams['count_only'])) {
+                    $sMethod = 'getOne';
+                    $sSelectClause = 'COUNT(DISTINCT `' . $this->_sTable . '`.`id`)';
+                }
+                else if(in_array($aParams['type'], array(BX_BASE_MOD_NTFS_TYPE_CONNECTIONS, BX_NTFS_TYPE_OBJECT_OWNER_AND_CONNECTIONS)))
+                    $sSelectClause = 'DISTINCT ' . $sSelectClause;
+
+                break;
+        }
+
+        $sJoinClause .= " INNER JOIN `{$this->_sTableSettings}` ON `{$this->_sTableHandlers}`.`id`=`{$this->_sTableSettings}`.`handler_id` AND `{$this->_sTableSettings}`.`delivery`='" . BX_BASE_MOD_NTFS_DTYPE_SITE . "' AND `{$this->_sTableSettings}`.`active`='1'";
+
+        $sJoinClauseS2U = " LEFT JOIN `{$this->_sTableSettings2Users}` ON `{$this->_sTableSettings}`.`id`=`{$this->_sTableSettings2Users}`.`setting_id` ";
+        if(!empty($aParams['owner_id']))
+            $sJoinClauseS2U = $this->prepareAsString($sJoinClauseS2U . "AND `{$this->_sTableSettings2Users}`.`user_id`=? ", $aParams['owner_id']);
+        $sJoinClause .= $sJoinClauseS2U;
+
+        return array($sMethod, $sSelectClause, $sJoinClause, $sWhereClause, $sOrderClause, $sLimitClause);
+    }
+
+    protected function _getSqlPartsEventsList($aParams)
+    {
+        $sJoinClause = $sWhereClause = "";
+
+        if(isset($aParams['active']))
+            $sWhereClause .= $this->prepareAsString("AND `{$this->_sTable}`.`active`=? ", (int)$aParams['active']);
+
+        //--- Apply modules or handlers filter
+        $sWhereModuleFilter = '';
+        if(!empty($aParams['modules']) && is_array($aParams['modules']))
+            $sWhereModuleFilter = "AND `" . $this->_sTable . "`.`type` IN (" . $this->implode_escape($aParams['modules']) . ") ";
+
+        if($sWhereModuleFilter == '') {
+            $aHidden = $this->_oConfig->getHandlersHidden();
+            $sWhereModuleFilter = !empty($aHidden) && is_array($aHidden) ? "AND `" . $this->_sTableHandlers . "`.`id` NOT IN (" . $this->implode_escape($aHidden) . ") " : "";
+        }
+
+        if($sWhereModuleFilter != '')
+            $sWhereClause .= $sWhereModuleFilter;
+
+        //--- Check flag 'New'
+        if(!empty($aParams['new']) && !empty($aParams['owner_id']))
+            $sWhereClause .= $this->prepareAsString("AND `{$this->_sTable}`.`id`>? ", $this->getLastRead((int)$aParams['owner_id']));
+
+        //--- Check type
+        if(!empty($aParams['owner_id']))
+            switch($aParams['type']) {
+                case BX_BASE_MOD_NTFS_TYPE_OWNER:
+                    $sWhereClause .= $this->prepareAsString("AND `{$this->_sTable}`.`owner_id`=? ", $aParams['owner_id']);
+                    break;
+
+                case BX_BASE_MOD_NTFS_TYPE_OBJECT_OWNER:
+                    $sWhereClause .= $this->prepareAsString("AND `{$this->_sTable}`.`owner_id`<>`{$this->_sTable}`.`object_owner_id` AND ((`{$this->_sTable}`.`owner_id`=? AND `{$this->_sTable}`.`object_privacy_view`<0 AND `{$this->_sTable}`.`owner_id`=ABS(`{$this->_sTable}`.`object_privacy_view`)) OR `{$this->_sTable}`.`object_owner_id`=?) ", $aParams['owner_id'], $aParams['owner_id']);
+                    $sWhereClause .= $this->prepareAsString("AND `{$this->_sTableSettings}`.`type`=? AND `{$this->_sTableSettings}`.`active`='1' AND (ISNULL(`{$this->_sTableSettings2Users}`.`active`) OR `{$this->_sTableSettings2Users}`.`active`='1') ", BX_NTFS_STYPE_PERSONAL);
+                    break;
+
+                case BX_BASE_MOD_NTFS_TYPE_CONNECTIONS:
+                    $oConnection = BxDolConnection::getObjectInstance($this->_oConfig->getObject('conn_subscriptions'));
+                    $aQueryParts = $oConnection->getConnectedContentAsSQLParts($this->_sPrefix . "events", 'owner_id', $aParams['owner_id']);
+                    if(empty($aQueryParts) || !is_array($aQueryParts) || empty($aQueryParts['join']))
+                        break;
+
+                    $sJoinClause .= " LEFT JOIN `sys_profiles` AS `tsp` ON `{$this->_sTable}`.`owner_id`=`tsp`.`id` " . $aQueryParts['join'];
+
+                    if(!empty($aQueryParts['fields']['added']))
+                        $sWhereClause .= "AND `{$this->_sTable}`.`date` > " . $aQueryParts['fields']['added'];
+
+                    list($aModulesProfiles, $aModulesContexts) = $this->_oConfig->getProfileBasedModules();
+                    $sWhereClause .= $this->prepareAsString("AND ((`{$this->_sTableSettings}`.`type`=? AND `tsp`.`type` IN (" . $this->implode_escape($aModulesProfiles) . ")) || (`{$this->_sTableSettings}`.`type`=? AND `tsp`.`type` IN (" . $this->implode_escape($aModulesContexts) . "))) AND `{$this->_sTableSettings}`.`active`='1' AND (ISNULL(`{$this->_sTableSettings2Users}`.`active`) OR `{$this->_sTableSettings2Users}`.`active`='1') ", BX_NTFS_STYPE_FOLLOW_MEMBER, BX_NTFS_STYPE_FOLLOW_CONTEXT);
+                    break;
+
+                case BX_NTFS_TYPE_OBJECT_OWNER_AND_CONNECTIONS:
+                    /**
+                     * 'personal' notifications are taken by: 
+                     * 1. 'owner_id', in case of somebody performed an action in requested profile's context
+                     * 'object_privacy_view' < 0 AND 'owner_id' == ABS('object_privacy_view'))
+                     * Currently it happens when somebody posted a Direct Timeline post in requested profile.
+                     * 2. 'object_owner_id', in case of somebody performed an action with content 
+                     * owned by the requested profile.
+                     */
+                    $sWhereClauseObjectOwner = $this->prepareAsString("`{$this->_sTable}`.`owner_id` <> `{$this->_sTable}`.`object_owner_id` AND ((`{$this->_sTable}`.`owner_id`=? AND `{$this->_sTable}`.`object_privacy_view`<0 AND `{$this->_sTable}`.`owner_id`=ABS(`{$this->_sTable}`.`object_privacy_view`)) OR `{$this->_sTable}`.`object_owner_id`=?) ", $aParams['owner_id'], $aParams['owner_id']);
+                    $sWhereClauseObjectOwner .= $this->prepareAsString("AND `{$this->_sTableSettings}`.`type`=?", BX_NTFS_STYPE_PERSONAL);
+
+                    /**
+                     * 'follow' notifications are taken by connection with `owner_id`
+                     */
+                    $sWhereClauseConnections = '0';
+                    $oConnection = BxDolConnection::getObjectInstance($this->_oConfig->getObject('conn_subscriptions'));
+                    $aQueryParts = $oConnection->getConnectedContentAsSQLPartsExt($this->_sTable, 'owner_id', $aParams['owner_id']);
+                    if(!empty($aQueryParts) && is_array($aQueryParts) && !empty($aQueryParts['join'])) {
+                        $sJoinClause .= " LEFT JOIN `sys_profiles` AS `tsp` ON `{$this->_sTable}`.`owner_id`=`tsp`.`id`";
+                        $sJoinClause .= " LEFT JOIN `" . $aQueryParts['join']['table'] . "` AS `" . $aQueryParts['join']['table_alias'] . "` ON (" . $aQueryParts['join']['condition'] . ")";
+
+                        $sWhereClauseConnections = "NOT ISNULL(`c`.`content`) ";
+                        if(!empty($aQueryParts['fields']['added']))
+                            $sWhereClauseConnections .= "AND `{$this->_sTable}`.`date` > `" . $aQueryParts['fields']['added']['table_alias'] . "`.`" . $aQueryParts['fields']['added']['name'] . "` ";
+
+                        list($aModulesProfiles, $aModulesContexts) = $this->_oConfig->getProfileBasedModules();
+                        $sWhereClauseConnections .= $this->prepareAsString("AND ((`{$this->_sTableSettings}`.`type`=? AND `tsp`.`type` IN (" . $this->implode_escape($aModulesProfiles) . ")) || (`{$this->_sTableSettings}`.`type`=? AND `tsp`.`type` IN (" . $this->implode_escape($aModulesContexts) . "))) ", BX_NTFS_STYPE_FOLLOW_MEMBER, BX_NTFS_STYPE_FOLLOW_CONTEXT);
+                    }
+
+                    $sWhereClause .= "AND ((" . $sWhereClauseObjectOwner . ") || (" . $sWhereClauseConnections . ")) AND `{$this->_sTableSettings}`.`active`='1' AND (ISNULL(`{$this->_sTableSettings2Users}`.`active`) OR `{$this->_sTableSettings2Users}`.`active`='1') ";
+                    break;
+            }
+
+        return array($sJoinClause, $sWhereClause);
+    }
+
+    public function queueGet($aParams)
+    {
+    	$aMethod = array('name' => 'getAll', 'params' => array(0 => 'query'));
+
+    	$sSelectClause = "*";
+    	$sWhereClause = $sOrderClause = $sLimitClause = "";
+
+        switch($aParams['type']) {
+            case 'id':
+            	$aMethod['name'] = 'getRow';
+            	$aMethod['params'][1] = array(
+                    'id' => $aParams['id']
+                );
+
+                $sWhereClause = " AND `id`=:id";
+                break;
+
+            case 'all_to_send':
+                $aMethod['params'][1] = array(
+                    'timeout' => $aParams['timeout']
+                );
+
+                $sWhereClause = " AND `date`+:timeout < UNIX_TIMESTAMP()";
+                $sOrderClause = "`date` ASC";
+                break;
+        }
+
+        $sOrderClause = !empty($sOrderClause) ? "ORDER BY " . $sOrderClause : $sOrderClause;
+        $sLimitClause = !empty($sLimitClause) ? "LIMIT " . $sLimitClause : $sLimitClause;
+
+        $aMethod['params'][0] = "SELECT
+                " . $sSelectClause . "
+            FROM `" . $this->_sTableQueue . "`
+            WHERE 1" . $sWhereClause . " " . $sOrderClause . " " . $sLimitClause;
+
+        return call_user_func_array(array($this, $aMethod['name']), $aMethod['params']);
+    }
+
+    public function queueAdd($aSet)
+    {
+        if(empty($aSet))
+            return false;
+
+        return (int)$this->query("INSERT INTO `" . $this->_sTableQueue . "` SET " . $this->arrayToSQL($aSet)) > 0;
+    }
+
+    public function queueDelete($aWhere)
+    {
+    	if(empty($aWhere))
+            return false;
+
+        return (int)$this->query("DELETE FROM `" . $this->_sTableQueue . "` WHERE " . $this->arrayToSQL($aWhere, ' AND ')) > 0;
+    }
+
+    public function queueDeleteByProfile($iProfileId, $iEventId)
+    {
+        return (int)$this->query("DELETE FROM `" . $this->_sTableQueue . "` WHERE `profile_id`=:profile_id AND `event_id`<=:event_id", array(
+            'profile_id' => $iProfileId,
+            'event_id' => $iEventId
+        )) > 0;
+    }
+
+    public function queueDeleteByIds($mixedId)
+    {
+        if(empty($mixedId))
+            return false;
+
+        if(!is_array($mixedId))
+            $mixedId = array($mixedId);
+
+        return (int)$this->query("DELETE FROM `" . $this->_sTableQueue . "` WHERE `id` IN (" . $this->implode_escape($mixedId) . ")") > 0;
+    }
+}
+
+/** @} */

+ 82 - 0
modules/boonex/notifications/updates/10.0.3_10.0.4/source/install/config.php

@@ -0,0 +1,82 @@
+<?php
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Notifications Notifications
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+$aConfig = array(
+    /**
+     * Main Section.
+     */
+    'type' => BX_DOL_MODULE_TYPE_MODULE,
+    'name' => 'bx_notifications',
+    'title' => 'Notifications',
+    'note' => 'Notifications module.',
+    'version' => '10.0.4',
+    'vendor' => 'BoonEx',
+    'help_url' => 'http://feed.una.io/?section={module_name}',
+
+    'compatible_with' => array(
+        '10.0.0'
+    ),
+
+    /**
+     * 'home_dir' and 'home_uri' - should be unique. Don't use spaces in 'home_uri' and the other special chars.
+     */
+    'home_dir' => 'boonex/notifications/',
+    'home_uri' => 'notifications',
+
+    'db_prefix' => 'bx_notifications_',
+    'class_prefix' => 'BxNtfs',
+
+    /**
+     * Category for language keys.
+     */
+    'language_category' => 'Notifications',
+
+    /**
+     * Installation/Uninstallation Section.
+     */
+    'install' => array(
+        'execute_sql' => 1,
+        'update_languages' => 1,
+        'clear_db_cache' => 1,
+    ),
+    'uninstall' => array (
+        'execute_sql' => 1,
+        'update_languages' => 1,
+        'clear_db_cache' => 1,
+    ),
+    'enable' => array(
+        'execute_sql' => 1,
+    	'update_relations_for_all' => 1,
+        'clear_db_cache' => 1,
+    ),
+    'disable' => array (
+        'execute_sql' => 1,
+    	'update_relations_for_all' => 1,
+        'clear_db_cache' => 1,
+    ),
+
+    /**
+     * Dependencies Section
+     */
+    'dependencies' => array(),
+
+    /**
+     * Relations Section
+     */
+    'relation_handlers' => array(
+    	'on_install' => '',
+    	'on_uninstall' => 'delete_module_events',
+	    'on_enable' => 'add_handlers',
+	    'on_disable' => 'delete_handlers',
+    ),
+);
+
+/** @} */

+ 51 - 0
modules/boonex/posts/updates/10.0.3_10.0.4/install/config.php

@@ -0,0 +1,51 @@
+<?php
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ */
+
+$aConfig = array(
+    /**
+     * Main Section.
+     */
+    'title' => 'Posts',
+    'version_from' => '10.0.3',
+    'version_to' => '10.0.4',
+    'vendor' => 'BoonEx',
+
+    'compatible_with' => array(
+        '10.0.0'
+    ),
+
+    /**
+     * 'home_dir' and 'home_uri' - should be unique. Don't use spaces in 'home_uri' and the other special chars.
+     */
+    'home_dir' => 'boonex/posts/updates/update_10.0.3_10.0.4/',
+    'home_uri' => 'posts_update_1003_1004',
+
+    'module_dir' => 'boonex/posts/',
+    'module_uri' => 'posts',
+
+    'db_prefix' => 'bx_posts_',
+    'class_prefix' => 'BxPosts',
+
+    /**
+     * Installation/Uninstallation Section.
+     */
+    'install' => array(
+        'execute_sql' => 1,
+        'update_files' => 1,
+        'update_languages' => 0,
+        'clear_db_cache' => 1,
+    ),
+
+    /**
+     * Category for language keys.
+     */
+    'language_category' => 'Posts',
+
+    /**
+     * Files Section
+     */
+    'delete_files' => array(),
+);

+ 13 - 0
modules/boonex/posts/updates/10.0.3_10.0.4/install/installer.php

@@ -0,0 +1,13 @@
+<?php
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ */
+
+class BxPostsUpdater extends BxDolStudioUpdater
+{
+    function __construct($aConfig)
+    {
+        parent::__construct($aConfig);
+    }
+}

+ 5 - 0
modules/boonex/posts/updates/10.0.3_10.0.4/install/sql/enable.sql

@@ -0,0 +1,5 @@
+SET @sName = 'bx_posts';
+
+
+-- CATEGORY
+UPDATE `sys_objects_category` SET `join`='INNER JOIN `sys_profiles` ON (`sys_profiles`.`id` = ABS(`bx_posts_posts`.`author`))' WHERE `object`='bx_posts_cats';

+ 5 - 0
modules/boonex/posts/updates/10.0.3_10.0.4/install/sql/install.sql

@@ -0,0 +1,5 @@
+SET @sName = 'bx_posts';
+
+
+-- FORMS
+UPDATE `sys_form_inputs` SET `html`='0' WHERE `object`='bx_posts_poll' AND `name`='text' AND `html`='3';

+ 150 - 0
modules/boonex/posts/updates/10.0.3_10.0.4/source/install/config.php

@@ -0,0 +1,150 @@
+<?php
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Posts Posts
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+$aConfig = array(
+
+    /**
+     * Main Section.
+     */
+    'type' => BX_DOL_MODULE_TYPE_MODULE,
+    'name' => 'bx_posts',
+    'title' => 'Posts',
+    'note' => 'Basic blogging module.',
+    'version' => '10.0.4',
+    'vendor' => 'BoonEx',
+    'help_url' => 'http://feed.una.io/?section={module_name}',
+
+    'compatible_with' => array(
+        '10.0.0'
+    ),
+
+    /**
+     * 'home_dir' and 'home_uri' - should be unique. Don't use spaces in 'home_uri' and the other special chars.
+     */
+    'home_dir' => 'boonex/posts/',
+    'home_uri' => 'posts',
+
+    'db_prefix' => 'bx_posts_',
+    'class_prefix' => 'BxPosts',
+
+    /**
+     * Category for language keys.
+     */
+    'language_category' => 'Posts',
+
+    /**
+     * List of page triggers.
+     */
+    'page_triggers' => array (
+    	'trigger_page_profile_view_entry',
+    ),
+    
+    /**
+     * Menu triggers.
+     */
+    'menu_triggers' => array(
+        'trigger_profile_view_submenu',
+        'trigger_group_view_submenu',
+    ),
+
+    /**
+     * Storage objects to automatically delete files from upon module uninstallation.
+     * Note. Don't add storage objects used in transcoder objects.
+     */
+    'storages' => array(
+        'bx_posts_covers',
+    	'bx_posts_photos',
+        'bx_posts_videos',
+        'bx_posts_files'
+    ),
+
+    /**
+     * Transcoders.
+     */
+    'transcoders' => array(
+        'bx_posts_preview',
+        'bx_posts_gallery',
+        'bx_posts_cover',
+
+        'bx_posts_preview_photos',
+        'bx_posts_gallery_photos', 
+
+        'bx_posts_videos_poster',
+        'bx_posts_videos_poster_preview',
+        'bx_posts_videos_mp4',
+        'bx_posts_videos_mp4_hd',
+
+        'bx_posts_preview_files',
+        'bx_posts_gallery_files'
+    ),
+
+    /**
+     * Extended Search Forms.
+     */
+    'esearches' => array(
+        'bx_posts',
+    	'bx_posts_cmts'
+    ),
+
+    /**
+     * Installation/Uninstallation Section.
+     */
+    'install' => array(
+        'execute_sql' => 1,
+        'update_languages' => 1,
+        'clear_db_cache' => 1,
+    ),
+    'uninstall' => array (
+    	'process_esearches' => 1,
+        'execute_sql' => 1,
+        'update_languages' => 1,
+        'update_relations' => 1,
+        'clear_db_cache' => 1,
+    ),
+    'enable' => array(
+        'execute_sql' => 1,
+        'update_relations' => 1,
+        'clear_db_cache' => 1,
+    ),
+    'enable_success' => array(
+        'process_menu_triggers' => 1,
+        'process_page_triggers' => 1,
+    	'process_esearches' => 1,
+        'register_transcoders' => 1,
+        'clear_db_cache' => 1,
+    ),
+    'disable' => array (
+        'execute_sql' => 1,
+        'update_relations' => 1,
+        'unregister_transcoders' => 1,
+        'clear_db_cache' => 1,
+    ),
+    'disable_failed' => array (
+        'register_transcoders' => 1,
+        'clear_db_cache' => 1,
+    ),
+
+    /**
+     * Dependencies Section
+     */
+    'dependencies' => array(),
+
+    /**
+     * Relations Section
+     */
+    'relations' => array(
+    	'bx_timeline',
+    	'bx_notifications'
+    ),
+
+);
+
+/** @} */

+ 486 - 0
modules/boonex/posts/updates/10.0.3_10.0.4/source/install/sql/enable.sql

@@ -0,0 +1,486 @@
+
+-- SETTINGS
+
+SET @iTypeOrder = (SELECT MAX(`order`) FROM `sys_options_types` WHERE `group` = 'modules');
+INSERT INTO `sys_options_types`(`group`, `name`, `caption`, `icon`, `order`) VALUES 
+('modules', 'bx_posts', '_bx_posts', 'bx_posts@modules/boonex/posts/|std-icon.svg', IF(ISNULL(@iTypeOrder), 1, @iTypeOrder + 1));
+SET @iTypeId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options_categories` (`type_id`, `name`, `caption`, `order`)
+VALUES (@iTypeId, 'bx_posts', '_bx_posts', 1);
+SET @iCategId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options` (`name`, `value`, `category_id`, `caption`, `type`, `check`, `check_error`, `extra`, `order`) VALUES
+('bx_posts_summary_chars', '700', @iCategId, '_bx_posts_option_summary_chars', 'digit', '', '', '', 1),
+('bx_posts_plain_summary_chars', '240', @iCategId, '_bx_posts_option_plain_summary_chars', 'digit', '', '', '', 2),
+('bx_posts_per_page_browse', '12', @iCategId, '_bx_posts_option_per_page_browse', 'digit', '', '', '', 10),
+('bx_posts_per_page_profile', '6', @iCategId, '_bx_posts_option_per_page_profile', 'digit', '', '', '', 12),
+('bx_posts_per_page_browse_showcase', '32', @iCategId, '_sys_option_per_page_browse_showcase', 'digit', '', '', '', 15),
+('bx_posts_rss_num', '10', @iCategId, '_bx_posts_option_rss_num', 'digit', '', '', '', 20),
+('bx_posts_searchable_fields', 'title,text', @iCategId, '_bx_posts_option_searchable_fields', 'list', '', '', 'a:2:{s:6:"module";s:8:"bx_posts";s:6:"method";s:21:"get_searchable_fields";}', 30);
+
+-- PAGE: create entry
+
+INSERT INTO `sys_objects_page`(`object`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `uri`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_posts_create_entry', '_bx_posts_page_title_sys_create_entry', '_bx_posts_page_title_create_entry', 'bx_posts', 5, 2147483647, 1, 'create-post', 'page.php?i=create-post', '', '', '', 0, 1, 0, 'BxPostsPageBrowse', 'modules/boonex/posts/classes/BxPostsPageBrowse.php');
+
+INSERT INTO `sys_pages_blocks` (`object`, `cell_id`, `module`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES
+('bx_posts_create_entry', 1, 'bx_posts', '_bx_posts_page_block_title_create_entry', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_posts";s:6:"method";s:13:"entity_create";}', 0, 1, 1);
+
+
+-- PAGE: edit entry
+
+INSERT INTO `sys_objects_page`(`object`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `uri`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_posts_edit_entry', '_bx_posts_page_title_sys_edit_entry', '_bx_posts_page_title_edit_entry', 'bx_posts', 5, 2147483647, 1, 'edit-post', '', '', '', '', 0, 1, 0, 'BxPostsPageEntry', 'modules/boonex/posts/classes/BxPostsPageEntry.php');
+
+INSERT INTO `sys_pages_blocks` (`object`, `cell_id`, `module`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES
+('bx_posts_edit_entry', 1, 'bx_posts', '_bx_posts_page_block_title_edit_entry', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_posts";s:6:"method";s:11:"entity_edit";}', 0, 0, 0);
+
+
+-- PAGE: delete entry
+
+INSERT INTO `sys_objects_page`(`object`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `uri`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_posts_delete_entry', '_bx_posts_page_title_sys_delete_entry', '_bx_posts_page_title_delete_entry', 'bx_posts', 5, 2147483647, 1, 'delete-post', '', '', '', '', 0, 1, 0, 'BxPostsPageEntry', 'modules/boonex/posts/classes/BxPostsPageEntry.php');
+
+INSERT INTO `sys_pages_blocks` (`object`, `cell_id`, `module`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES
+('bx_posts_delete_entry', 1, 'bx_posts', '_bx_posts_page_block_title_delete_entry', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_posts";s:6:"method";s:13:"entity_delete";}', 0, 0, 0);
+
+
+-- PAGE: view entry
+
+INSERT INTO `sys_objects_page`(`object`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `uri`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_posts_view_entry', '_bx_posts_page_title_sys_view_entry', '_bx_posts_page_title_view_entry', 'bx_posts', 12, 2147483647, 1, 'view-post', '', '', '', '', 0, 1, 0, 'BxPostsPageEntry', 'modules/boonex/posts/classes/BxPostsPageEntry.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `active`, `order`) VALUES 
+('bx_posts_view_entry', 2, 'bx_posts', '', '_bx_posts_page_block_title_entry_text', 13, 2147483647, 'service', 'a:2:{s:6:\"module\";s:8:\"bx_posts\";s:6:\"method\";s:17:\"entity_text_block\";}', 0, 0, 1, 2),
+('bx_posts_view_entry', 2, 'bx_posts', '', '_bx_posts_page_block_title_entry_author', 13, 2147483647, 'service', 'a:2:{s:6:\"module\";s:8:\"bx_posts\";s:6:\"method\";s:13:\"entity_author\";}', 0, 0, 1, 1),
+('bx_posts_view_entry', 3, 'bx_posts', '_bx_posts_page_block_title_sys_entry_context', '_bx_posts_page_block_title_entry_context', 13, 2147483647, 'service', 'a:2:{s:6:\"module\";s:8:\"bx_posts\";s:6:\"method\";s:14:\"entity_context\";}', 0, 0, 1, 1),
+('bx_posts_view_entry', 3, 'bx_posts', '', '_bx_posts_page_block_title_entry_info', 11, 2147483647, 'service', 'a:2:{s:6:\"module\";s:8:\"bx_posts\";s:6:\"method\";s:11:\"entity_info\";}', 0, 0, 1, 2),
+('bx_posts_view_entry', 3, 'bx_posts', '', '_bx_posts_page_block_title_entry_location', 13, 2147483647, 'service', 'a:2:{s:6:\"module\";s:8:\"bx_posts\";s:6:\"method\";s:15:\"entity_location\";}', 0, 0, 0, 0),
+('bx_posts_view_entry', 2, 'bx_posts', '', '_bx_posts_page_block_title_entry_all_actions', 13, 2147483647, 'service', 'a:2:{s:6:\"module\";s:8:\"bx_posts\";s:6:\"method\";s:18:\"entity_all_actions\";}', 0, 0, 1, 3),
+('bx_posts_view_entry', 4, 'bx_posts', '', '_bx_posts_page_block_title_entry_actions', 13, 2147483647, 'service', 'a:2:{s:6:\"module\";s:8:\"bx_posts\";s:6:\"method\";s:14:\"entity_actions\";}', 0, 0, 0, 0),
+('bx_posts_view_entry', 4, 'bx_posts', '', '_bx_posts_page_block_title_entry_social_sharing', 11, 2147483647, 'service', 'a:2:{s:6:\"module\";s:8:\"bx_posts\";s:6:\"method\";s:21:\"entity_social_sharing\";}', 0, 0, 0, 0),
+('bx_posts_view_entry', 2, 'bx_posts', '', '_bx_posts_page_block_title_entry_attachments', 11, 2147483647, 'service', 'a:2:{s:6:\"module\";s:8:\"bx_posts\";s:6:\"method\";s:18:\"entity_attachments\";}', 0, 0, 1, 4),
+('bx_posts_view_entry', 2, 'bx_posts', '', '_bx_posts_page_block_title_entry_comments', 11, 2147483647, 'service', 'a:2:{s:6:\"module\";s:8:\"bx_posts\";s:6:\"method\";s:15:\"entity_comments\";}', 0, 0, 1, 5),
+('bx_posts_view_entry', 3, 'bx_posts', '', '_bx_posts_page_block_title_entry_location', 3, 2147483647, 'service', 'a:4:{s:6:\"module\";s:6:\"system\";s:6:\"method\";s:13:\"locations_map\";s:6:\"params\";a:2:{i:0;s:8:\"bx_posts\";i:1;s:4:\"{id}\";}s:5:\"class\";s:20:\"TemplServiceMetatags\";}', 0, 0, 1, 3),
+('bx_posts_view_entry', 3, 'bx_posts', '', '_bx_posts_page_block_title_entry_polls', 11, 2147483647, 'service', 'a:2:{s:6:\"module\";s:8:\"bx_posts\";s:6:\"method\";s:12:\"entity_polls\";}', 0, 0, 1, 4),
+('bx_posts_view_entry', 3, 'bx_posts', '', '_bx_posts_page_block_title_featured_entries_view_extended', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_posts";s:6:"method";s:15:"browse_featured";s:6:"params";a:1:{i:0;s:8:"extended";}}', 0, 0, 1, 5);
+
+
+-- PAGE: view entry comments
+
+INSERT INTO `sys_objects_page`(`object`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `uri`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_posts_view_entry_comments', '_bx_posts_page_title_sys_view_entry_comments', '_bx_posts_page_title_view_entry_comments', 'bx_posts', 5, 2147483647, 1, 'view-post-comments', '', '', '', '', 0, 1, 0, 'BxPostsPageEntry', 'modules/boonex/posts/classes/BxPostsPageEntry.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES 
+('bx_posts_view_entry_comments', 1, 'bx_posts', '_bx_posts_page_block_title_entry_comments', '_bx_posts_page_block_title_entry_comments_link', 11, 2147483647, 'service', 'a:2:{s:6:\"module\";s:8:\"bx_posts\";s:6:\"method\";s:15:\"entity_comments\";}', 0, 0, 1);
+
+
+-- PAGE: popular entries
+
+INSERT INTO `sys_objects_page`(`object`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `uri`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_posts_popular', '_bx_posts_page_title_sys_entries_popular', '_bx_posts_page_title_entries_popular', 'bx_posts', 5, 2147483647, 1, 'posts-popular', 'page.php?i=posts-popular', '', '', '', 0, 1, 0, 'BxPostsPageBrowse', 'modules/boonex/posts/classes/BxPostsPageBrowse.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES 
+('bx_posts_popular', 1, 'bx_posts', '_bx_posts_page_block_title_popular_entries', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_posts";s:6:"method";s:14:"browse_popular";s:6:"params";a:3:{s:9:"unit_view";s:7:"gallery";s:13:"empty_message";b:1;s:13:"ajax_paginate";b:0;}}', 0, 1, 1);
+
+
+-- PAGE: recently updated entries
+
+INSERT INTO `sys_objects_page`(`object`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `uri`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_posts_updated', '_bx_posts_page_title_sys_entries_updated', '_bx_posts_page_title_entries_updated', 'bx_posts', 5, 2147483647, 1, 'posts-updated', 'page.php?i=posts-updated', '', '', '', 0, 1, 0, 'BxPostsPageBrowse', 'modules/boonex/posts/classes/BxPostsPageBrowse.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES 
+('bx_posts_updated', 1, 'bx_posts', '_bx_posts_page_block_title_updated_entries', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_posts";s:6:"method";s:14:"browse_updated";s:6:"params";a:3:{s:9:"unit_view";s:7:"gallery";s:13:"empty_message";b:1;s:13:"ajax_paginate";b:0;}}', 0, 1, 1);
+
+
+-- PAGE: entries of author
+
+INSERT INTO `sys_objects_page`(`object`, `uri`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_posts_author', 'posts-author', '_bx_posts_page_title_sys_entries_of_author', '_bx_posts_page_title_entries_of_author', 'bx_posts', 5, 2147483647, 1, '', '', '', '', 0, 1, 0, 'BxPostsPageAuthor', 'modules/boonex/posts/classes/BxPostsPageAuthor.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `active`, `order`) VALUES 
+('bx_posts_author', 1, 'bx_posts', '', '_bx_posts_page_block_title_entries_actions', 13, 2147483647, 'service', 'a:2:{s:6:\"module\";s:8:\"bx_posts\";s:6:\"method\";s:18:\"my_entries_actions\";}', 0, 0, 1, 1),
+('bx_posts_author', 1, 'bx_posts', '_bx_posts_page_block_title_sys_favorites_of_author', '_bx_posts_page_block_title_favorites_of_author', 11, 2147483647, 'service', 'a:3:{s:6:\"module\";s:8:\"bx_posts\";s:6:\"method\";s:15:\"browse_favorite\";s:6:"params";a:1:{i:0;s:12:"{profile_id}";}}', 0, 1, 1, 2),
+('bx_posts_author', 1, 'bx_posts', '_bx_posts_page_block_title_sys_entries_of_author', '_bx_posts_page_block_title_entries_of_author', 11, 2147483647, 'service', 'a:2:{s:6:\"module\";s:8:\"bx_posts\";s:6:\"method\";s:13:\"browse_author\";}', 0, 0, 1, 3);
+
+-- PAGE: entries in context
+
+INSERT INTO `sys_objects_page`(`object`, `uri`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_posts_context', 'posts-context', '_bx_posts_page_title_sys_entries_in_context', '_bx_posts_page_title_entries_in_context', 'bx_posts', 5, 2147483647, 1, '', '', '', '', 0, 1, 0, 'BxPostsPageAuthor', 'modules/boonex/posts/classes/BxPostsPageAuthor.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `active`, `order`) VALUES 
+('bx_posts_context', 1, 'bx_posts', '_bx_posts_page_block_title_sys_entries_in_context', '_bx_posts_page_block_title_entries_in_context', 11, 2147483647, 'service', 'a:2:{s:6:\"module\";s:8:\"bx_posts\";s:6:\"method\";s:14:\"browse_context\";}', 0, 0, 1, 1);
+
+-- PAGE: module home
+
+INSERT INTO `sys_objects_page`(`object`, `uri`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_posts_home', 'posts-home', '_bx_posts_page_title_sys_home', '_bx_posts_page_title_home', 'bx_posts', 2, 2147483647, 1, 'page.php?i=posts-home', '', '', '', 0, 1, 0, 'BxPostsPageBrowse', 'modules/boonex/posts/classes/BxPostsPageBrowse.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `active`, `order`) VALUES 
+('bx_posts_home', 1, 'bx_posts', '', '_bx_posts_page_block_title_featured_entries_view_extended', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_posts";s:6:"method";s:15:"browse_featured";s:6:"params";a:1:{i:0;s:8:"extended";}}', 0, 1, 1, 0),
+('bx_posts_home', 1, 'bx_posts', '', '_bx_posts_page_block_title_recent_entries_view_extended', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_posts";s:6:"method";s:13:"browse_public";s:6:"params";a:1:{i:0;s:8:"extended";}}', 0, 1, 1, 1),
+('bx_posts_home', 2, 'bx_posts', '', '_bx_posts_page_block_title_popular_keywords', 11, 2147483647, 'service', 'a:4:{s:6:\"module\";s:6:\"system\";s:6:\"method\";s:14:\"keywords_cloud\";s:6:\"params\";a:2:{i:0;s:8:\"bx_posts\";i:1;s:8:\"bx_posts\";}s:5:\"class\";s:20:\"TemplServiceMetatags\";}', 0, 1, 1, 0),
+('bx_posts_home', 2, 'bx_posts', '', '_bx_posts_page_block_title_cats', 11, 2147483647, 'service', 'a:4:{s:6:\"module\";s:6:\"system\";s:6:\"method\";s:15:\"categories_list\";s:6:\"params\";a:2:{i:0;s:13:\"bx_posts_cats\";i:1;a:1:{s:10:\"show_empty\";b:1;}}s:5:\"class\";s:20:\"TemplServiceCategory\";}', 0, 1, 1, 1);
+
+
+-- PAGE: search for entries
+
+INSERT INTO `sys_objects_page`(`object`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `uri`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_posts_search', '_bx_posts_page_title_sys_entries_search', '_bx_posts_page_title_entries_search', 'bx_posts', 5, 2147483647, 1, 'posts-search', 'page.php?i=posts-search', '', '', '', 0, 1, 0, 'BxPostsPageBrowse', 'modules/boonex/posts/classes/BxPostsPageBrowse.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `active`, `order`) VALUES 
+('bx_posts_search', 1, 'bx_posts', '_bx_posts_page_block_title_search_form', 11, 2147483647, 'service', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:8:"get_form";s:6:"params";a:1:{i:0;a:1:{s:6:"object";s:8:"bx_posts";}}s:5:"class";s:27:"TemplSearchExtendedServices";}', 0, 1, 1, 1),
+('bx_posts_search', 1, 'bx_posts', '_bx_posts_page_block_title_search_results', 11, 2147483647, 'service', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:11:"get_results";s:6:"params";a:1:{i:0;a:2:{s:6:"object";s:8:"bx_posts";s:10:"show_empty";b:1;}}s:5:"class";s:27:"TemplSearchExtendedServices";}', 0, 1, 1, 2),
+('bx_posts_search', 1, 'bx_posts', '_bx_posts_page_block_title_search_form_cmts', 11, 2147483647, 'service', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:8:"get_form";s:6:"params";a:1:{i:0;a:1:{s:6:"object";s:13:"bx_posts_cmts";}}s:5:"class";s:27:"TemplSearchExtendedServices";}', 0, 1, 0, 3),
+('bx_posts_search', 1, 'bx_posts', '_bx_posts_page_block_title_search_results_cmts', 11, 2147483647, 'service', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:11:"get_results";s:6:"params";a:1:{i:0;a:2:{s:6:"object";s:13:"bx_posts_cmts";s:10:"show_empty";b:1;}}s:5:"class";s:27:"TemplSearchExtendedServices";}', 0, 1, 0, 4);
+
+
+-- PAGE: module manage own
+INSERT INTO `sys_objects_page`(`object`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `uri`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_posts_manage', '_bx_posts_page_title_sys_manage', '_bx_posts_page_title_manage', 'bx_posts', 5, 2147483647, 1, 'posts-manage', 'page.php?i=posts-manage', '', '', '', 0, 1, 0, 'BxPostsPageBrowse', 'modules/boonex/posts/classes/BxPostsPageBrowse.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES 
+('bx_posts_manage', 1, 'bx_posts', '_bx_posts_page_block_title_system_manage', '_bx_posts_page_block_title_manage', 11, 2147483647, 'service', 'a:2:{s:6:\"module\";s:8:\"bx_posts\";s:6:\"method\";s:12:\"manage_tools\";}}', 0, 1, 0);
+
+-- PAGE: module manage all
+INSERT INTO `sys_objects_page`(`object`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `uri`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_posts_administration', '_bx_posts_page_title_sys_manage_administration', '_bx_posts_page_title_manage', 'bx_posts', 5, 192, 1, 'posts-administration', 'page.php?i=posts-administration', '', '', '', 0, 1, 0, 'BxPostsPageBrowse', 'modules/boonex/posts/classes/BxPostsPageBrowse.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES 
+('bx_posts_administration', 1, 'bx_posts', '_bx_posts_page_block_title_system_manage_administration', '_bx_posts_page_block_title_manage', 11, 192, 'service', 'a:3:{s:6:\"module\";s:8:\"bx_posts\";s:6:\"method\";s:12:\"manage_tools\";s:6:\"params\";a:1:{i:0;s:14:\"administration\";}}', 0, 1, 0);
+
+-- PAGE: add block to homepage
+
+SET @iBlockOrder = (SELECT `order` FROM `sys_pages_blocks` WHERE `object` = 'sys_home' AND `cell_id` = 1 ORDER BY `order` DESC LIMIT 1);
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `active`, `order`) VALUES 
+('sys_home', 1, 'bx_posts', '_bx_posts_page_block_title_recent_entries', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_posts";s:6:"method";s:13:"browse_public";s:6:"params";a:2:{i:0;b:0;i:1;b:0;}}', 1, 0, 0, IFNULL(@iBlockOrder, 0) + 1);
+
+-- PAGES: add page block to profiles modules (trigger* page objects are processed separately upon modules enable/disable)
+SET @iPBCellProfile = 3;
+INSERT INTO `sys_pages_blocks` (`object`, `cell_id`, `module`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES
+('trigger_page_profile_view_entry', @iPBCellProfile, 'bx_posts', '_bx_posts_page_block_title_my_entries', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_posts";s:6:"method";s:13:"browse_author";s:6:"params";a:2:{i:0;s:12:"{profile_id}";i:1;a:2:{s:8:"per_page";s:25:"bx_posts_per_page_profile";s:13:"empty_message";b:0;}}}', 0, 0, 0);
+
+-- PAGE: service blocks
+
+SET @iBlockOrder = (SELECT `order` FROM `sys_pages_blocks` WHERE `object` = '' AND `cell_id` = 0 ORDER BY `order` DESC LIMIT 1);
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system` , `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES 
+('', 0, 'bx_posts', '', '_bx_posts_page_block_title_recent_entries', 11, 2147483647, 'service', 'a:3:{s:6:\"module\";s:8:\"bx_posts\";s:6:\"method\";s:13:\"browse_public\";s:6:\"params\";a:3:{s:9:\"unit_view\";s:7:\"gallery\";s:13:\"empty_message\";b:1;s:13:\"ajax_paginate\";b:0;}}', 0, 1, IFNULL(@iBlockOrder, 0) + 1),
+
+('', 0, 'bx_posts', '', '_bx_posts_page_block_title_recent_entries_view_full', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_posts";s:6:"method";s:13:"browse_public";s:6:"params";a:1:{i:0;s:4:"full";}}', 0, 1, IFNULL(@iBlockOrder, 0) + 2),
+('', 0, 'bx_posts', '', '_bx_posts_page_block_title_popular_entries_view_extended', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_posts";s:6:"method";s:14:"browse_popular";s:6:"params";a:1:{i:0;s:8:"extended";}}', 0, 1, IFNULL(@iBlockOrder, 0) + 3),
+('', 0, 'bx_posts', '', '_bx_posts_page_block_title_popular_entries_view_full', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_posts";s:6:"method";s:14:"browse_popular";s:6:"params";a:1:{i:0;s:4:"full";}}', 0, 1, IFNULL(@iBlockOrder, 0) + 4),
+('', 0, 'bx_posts', '_bx_posts_page_block_title_sys_recent_entries_view_showcase', '_bx_posts_page_block_title_recent_entries_view_showcase', 11, 2147483647, 'service', 'a:3:{s:6:\"module\";s:8:\"bx_posts\";s:6:\"method\";s:13:\"browse_public\";s:6:\"params\";a:3:{s:9:\"unit_view\";s:8:\"showcase\";s:13:\"empty_message\";b:0;s:13:\"ajax_paginate\";b:0;}}', 0, 1, IFNULL(@iBlockOrder, 0) + 5),
+('', 0, 'bx_posts', '_bx_posts_page_block_title_sys_popular_entries_view_showcase', '_bx_posts_page_block_title_popular_entries_view_showcase', 11, 2147483647, 'service', 'a:3:{s:6:\"module\";s:8:\"bx_posts\";s:6:\"method\";s:14:\"browse_popular\";s:6:\"params\";a:3:{s:9:\"unit_view\";s:8:\"showcase\";s:13:\"empty_message\";b:0;s:13:\"ajax_paginate\";b:0;}}', 0, 1, IFNULL(@iBlockOrder, 0) + 6),
+('', 0, 'bx_posts', '_bx_posts_page_block_title_sys_featured_entries_view_showcase', '_bx_posts_page_block_title_featured_entries_view_showcase', 11, 2147483647, 'service', 'a:3:{s:6:\"module\";s:8:\"bx_posts\";s:6:\"method\";s:15:\"browse_featured\";s:6:\"params\";a:3:{s:9:\"unit_view\";s:8:\"showcase\";s:13:\"empty_message\";b:0;s:13:\"ajax_paginate\";b:0;}}', 0, 1, IFNULL(@iBlockOrder, 0) + 7);
+
+
+-- MENU: add to site menu
+
+SET @iSiteMenuOrder = (SELECT `order` FROM `sys_menu_items` WHERE `set_name` = 'sys_site' AND `active` = 1 ORDER BY `order` DESC LIMIT 1);
+INSERT INTO `sys_menu_items` (`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES 
+('sys_site', 'bx_posts', 'posts-home', '_bx_posts_menu_item_title_system_entries_home', '_bx_posts_menu_item_title_entries_home', 'page.php?i=posts-home', '', '', 'file-alt col-red3', 'bx_posts_submenu', 2147483647, 1, 1, IFNULL(@iSiteMenuOrder, 0) + 1);
+
+-- MENU: add to homepage menu
+
+SET @iHomepageMenuOrder = (SELECT `order` FROM `sys_menu_items` WHERE `set_name` = 'sys_homepage' AND `active` = 1 ORDER BY `order` DESC LIMIT 1);
+INSERT INTO `sys_menu_items` (`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES 
+('sys_homepage', 'bx_posts', 'posts-home', '_bx_posts_menu_item_title_system_entries_home', '_bx_posts_menu_item_title_entries_home', 'page.php?i=posts-home', '', '', 'file-alt col-red3', 'bx_posts_submenu', 2147483647, 1, 1, IFNULL(@iHomepageMenuOrder, 0) + 1);
+
+-- MENU: add to "add content" menu
+
+SET @iAddMenuOrder = (SELECT `order` FROM `sys_menu_items` WHERE `set_name` = 'sys_add_content_links' AND `active` = 1 ORDER BY `order` DESC LIMIT 1);
+INSERT INTO `sys_menu_items` (`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES 
+('sys_add_content_links', 'bx_posts', 'create-post', '_bx_posts_menu_item_title_system_create_entry', '_bx_posts_menu_item_title_create_entry', 'page.php?i=create-post', '', '', 'file-alt col-red3', '', 2147483647, 1, 1, IFNULL(@iAddMenuOrder, 0) + 1);
+
+-- MENU: create post form attachments (link, photo, video, etc)
+
+INSERT INTO `sys_objects_menu`(`object`, `title`, `set_name`, `module`, `template_id`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES 
+('bx_posts_entry_attachments', '_bx_posts_menu_title_entry_attachments', 'bx_posts_entry_attachments', 'bx_posts', 23, 0, 1, 'BxPostsMenuAttachments', 'modules/boonex/posts/classes/BxPostsMenuAttachments.php');
+
+INSERT INTO `sys_menu_sets`(`set_name`, `module`, `title`, `deletable`) VALUES 
+('bx_posts_entry_attachments', 'bx_posts', '_bx_posts_menu_set_title_entry_attachments', 0);
+
+INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `addon`, `submenu_object`, `visible_for_levels`, `visibility_custom`, `active`, `copyable`, `editable`, `order`) VALUES 
+('bx_posts_entry_attachments', 'bx_posts', 'photo_simple', '_bx_posts_menu_item_title_system_cpa_photo_simple', '_bx_posts_menu_item_title_cpa_photo_simple', 'javascript:void(0)', 'javascript:{js_object_uploader_photos_simple}.showUploaderForm();', '_self', 'camera', '', '', 2147483647, '', 0, 0, 1, 1),
+('bx_posts_entry_attachments', 'bx_posts', 'photo_html5', '_bx_posts_menu_item_title_system_cpa_photo_html5', '_bx_posts_menu_item_title_cpa_photo_html5', 'javascript:void(0)', 'javascript:{js_object_uploader_photos_html5}.showUploaderForm();', '_self', 'camera', '', '', 2147483647, '', 1, 0, 1, 2),
+('bx_posts_entry_attachments', 'bx_posts', 'video_simple', '_bx_posts_menu_item_title_system_cpa_video_simple', '_bx_posts_menu_item_title_cpa_video_simple', 'javascript:void(0)', 'javascript:{js_object_uploader_videos_simple}.showUploaderForm();', '_self', 'video', '', '', 2147483647, '', 0, 0, 1, 3),
+('bx_posts_entry_attachments', 'bx_posts', 'video_html5', '_bx_posts_menu_item_title_system_cpa_video_html5', '_bx_posts_menu_item_title_cpa_video_html5', 'javascript:void(0)', 'javascript:{js_object_uploader_videos_html5}.showUploaderForm();', '_self', 'video', '', '', 2147483647, '', 1, 0, 1, 4),
+('bx_posts_entry_attachments', 'bx_posts', 'file_simple', '_bx_posts_menu_item_title_system_cpa_file_simple', '_bx_posts_menu_item_title_cpa_file_simple', 'javascript:void(0)', 'javascript:{js_object_uploader_files_simple}.showUploaderForm();', '_self', 'file', '', '', 2147483647, '', 0, 0, 1, 5),
+('bx_posts_entry_attachments', 'bx_posts', 'file_html5', '_bx_posts_menu_item_title_system_cpa_file_html5', '_bx_posts_menu_item_title_cpa_file_html5', 'javascript:void(0)', 'javascript:{js_object_uploader_files_html5}.showUploaderForm();', '_self', 'file', '', '', 2147483647, '', 1, 0, 1, 6),
+('bx_posts_entry_attachments', 'bx_posts', 'poll', '_bx_posts_menu_item_title_system_cpa_poll', '_bx_posts_menu_item_title_cpa_poll', 'javascript:void(0)', 'javascript:{js_object}.showPollForm(this);', '_self', 'tasks', '', '', 2147483647, '', 1, 0, 1, 7);
+
+-- MENU: actions menu for view entry 
+
+INSERT INTO `sys_objects_menu`(`object`, `title`, `set_name`, `module`, `template_id`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES 
+('bx_posts_view', '_bx_posts_menu_title_view_entry', 'bx_posts_view', 'bx_posts', 9, 0, 1, 'BxPostsMenuView', 'modules/boonex/posts/classes/BxPostsMenuView.php');
+
+INSERT INTO `sys_menu_sets`(`set_name`, `module`, `title`, `deletable`) VALUES 
+('bx_posts_view', 'bx_posts', '_bx_posts_menu_set_title_view_entry', 0);
+
+INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES 
+('bx_posts_view', 'bx_posts', 'edit-post', '_bx_posts_menu_item_title_system_edit_entry', '_bx_posts_menu_item_title_edit_entry', 'page.php?i=edit-post&id={content_id}', '', '', 'pencil-alt', '', 2147483647, 1, 0, 1),
+('bx_posts_view', 'bx_posts', 'delete-post', '_bx_posts_menu_item_title_system_delete_entry', '_bx_posts_menu_item_title_delete_entry', 'page.php?i=delete-post&id={content_id}', '', '', 'remove', '', 2147483647, 1, 0, 2);
+
+
+-- MENU: all actions menu for view entry 
+
+INSERT INTO `sys_objects_menu`(`object`, `title`, `set_name`, `module`, `template_id`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES 
+('bx_posts_view_actions', '_sys_menu_title_view_actions', 'bx_posts_view_actions', 'bx_posts', 15, 0, 1, 'BxPostsMenuViewActions', 'modules/boonex/posts/classes/BxPostsMenuViewActions.php');
+
+INSERT INTO `sys_menu_sets`(`set_name`, `module`, `title`, `deletable`) VALUES 
+('bx_posts_view_actions', 'bx_posts', '_sys_menu_set_title_view_actions', 0);
+
+INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `addon`, `submenu_object`, `submenu_popup`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES 
+('bx_posts_view_actions', 'bx_posts', 'edit-post', '_bx_posts_menu_item_title_system_edit_entry', '', '', '', '', '', '', '', 0, 2147483647, 1, 0, 10),
+('bx_posts_view_actions', 'bx_posts', 'delete-post', '_bx_posts_menu_item_title_system_delete_entry', '', '', '', '', '', '', '', 0, 2147483647, 1, 0, 20),
+('bx_posts_view_actions', 'bx_posts', 'comment', '_sys_menu_item_title_system_va_comment', '', '', '', '', '', '', '', 0, 2147483647, 0, 0, 200),
+('bx_posts_view_actions', 'bx_posts', 'view', '_sys_menu_item_title_system_va_view', '', '', '', '', '', '', '', 0, 2147483647, 1, 0, 210),
+('bx_posts_view_actions', 'bx_posts', 'vote', '_sys_menu_item_title_system_va_vote', '', '', '', '', '', '', '', 0, 2147483647, 0, 0, 220),
+('bx_posts_view_actions', 'bx_posts', 'reaction', '_sys_menu_item_title_system_va_reaction', '', '', '', '', '', '', '', 0, 2147483647, 1, 0, 225),
+('bx_posts_view_actions', 'bx_posts', 'score', '_sys_menu_item_title_system_va_score', '', '', '', '', '', '', '', 0, 2147483647, 1, 0, 230),
+('bx_posts_view_actions', 'bx_posts', 'favorite', '_sys_menu_item_title_system_va_favorite', '', '', '', '', '', '', '', 0, 2147483647, 1, 0, 240),
+('bx_posts_view_actions', 'bx_posts', 'feature', '_sys_menu_item_title_system_va_feature', '', '', '', '', '', '', '', 0, 2147483647, 1, 0, 250),
+('bx_posts_view_actions', 'bx_posts', 'repost', '_sys_menu_item_title_system_va_repost', '', '', '', '', '', '', '', 0, 2147483647, 1, 0, 260),
+('bx_posts_view_actions', 'bx_posts', 'report', '_sys_menu_item_title_system_va_report', '', '', '', '', '', '', '', 0, 2147483647, 1, 0, 270),
+('bx_posts_view_actions', 'bx_posts', 'social-sharing-facebook', '_sys_menu_item_title_system_social_sharing_facebook', '', '', '', '', '', '', '', 0, 2147483647, 1, 0, 300),
+('bx_posts_view_actions', 'bx_posts', 'social-sharing-twitter', '_sys_menu_item_title_system_social_sharing_twitter', '', '', '', '', '', '', '', 0, 2147483647, 1, 0, 320),
+('bx_posts_view_actions', 'bx_posts', 'social-sharing-pinterest', '_sys_menu_item_title_system_social_sharing_pinterest', '', '', '', '', '', '', '', 0, 2147483647, 1, 0, 330),
+('bx_posts_view_actions', 'bx_posts', 'more-auto', '_sys_menu_item_title_system_va_more_auto', '_sys_menu_item_title_va_more_auto', 'javascript:void(0)', '', '', 'ellipsis-v', '', '', 0, 2147483647, 1, 0, 9999);
+
+
+-- MENU: actions menu for my entries
+
+INSERT INTO `sys_objects_menu`(`object`, `title`, `set_name`, `module`, `template_id`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES 
+('bx_posts_my', '_bx_posts_menu_title_entries_my', 'bx_posts_my', 'bx_posts', 9, 0, 1, 'BxPostsMenu', 'modules/boonex/posts/classes/BxPostsMenu.php');
+
+INSERT INTO `sys_menu_sets`(`set_name`, `module`, `title`, `deletable`) VALUES 
+('bx_posts_my', 'bx_posts', '_bx_posts_menu_set_title_entries_my', 0);
+
+INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES 
+('bx_posts_my', 'bx_posts', 'create-post', '_bx_posts_menu_item_title_system_create_entry', '_bx_posts_menu_item_title_create_entry', 'page.php?i=create-post', '', '', 'plus', '', 2147483647, 1, 0, 0);
+
+
+-- MENU: module sub-menu
+
+INSERT INTO `sys_objects_menu`(`object`, `title`, `set_name`, `module`, `template_id`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES 
+('bx_posts_submenu', '_bx_posts_menu_title_submenu', 'bx_posts_submenu', 'bx_posts', 8, 0, 1, '', '');
+
+INSERT INTO `sys_menu_sets`(`set_name`, `module`, `title`, `deletable`) VALUES 
+('bx_posts_submenu', 'bx_posts', '_bx_posts_menu_set_title_submenu', 0);
+
+INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES 
+('bx_posts_submenu', 'bx_posts', 'posts-home', '_bx_posts_menu_item_title_system_entries_public', '_bx_posts_menu_item_title_entries_public', 'page.php?i=posts-home', '', '', '', '', 2147483647, 1, 1, 1),
+('bx_posts_submenu', 'bx_posts', 'posts-popular', '_bx_posts_menu_item_title_system_entries_popular', '_bx_posts_menu_item_title_entries_popular', 'page.php?i=posts-popular', '', '', '', '', 2147483647, 1, 1, 2),
+('bx_posts_submenu', 'bx_posts', 'posts-search', '_bx_posts_menu_item_title_system_entries_search', '_bx_posts_menu_item_title_entries_search', 'page.php?i=posts-search', '', '', '', '', 2147483647, 1, 1, 3),
+('bx_posts_submenu', 'bx_posts', 'posts-manage', '_bx_posts_menu_item_title_system_entries_manage', '_bx_posts_menu_item_title_entries_manage', 'page.php?i=posts-manage', '', '', '', '', 2147483646, 1, 1, 4);
+
+-- MENU: sub-menu for view entry
+INSERT INTO `sys_objects_menu`(`object`, `title`, `set_name`, `module`, `template_id`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES 
+('bx_posts_view_submenu', '_bx_posts_menu_title_view_entry_submenu', 'bx_posts_view_submenu', 'bx_posts', 8, 0, 1, 'BxPostsMenuView', 'modules/boonex/posts/classes/BxPostsMenuView.php');
+
+INSERT INTO `sys_menu_sets`(`set_name`, `module`, `title`, `deletable`) VALUES 
+('bx_posts_view_submenu', 'bx_posts', '_bx_posts_menu_set_title_view_entry_submenu', 0);
+
+INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES 
+('bx_posts_view_submenu', 'bx_posts', 'view-post', '_bx_posts_menu_item_title_system_view_entry', '_bx_posts_menu_item_title_view_entry_submenu_entry', 'page.php?i=view-post&id={content_id}', '', '', '', '', 2147483647, 0, 0, 1),
+('bx_posts_view_submenu', 'bx_posts', 'view-post-comments', '_bx_posts_menu_item_title_system_view_entry_comments', '_bx_posts_menu_item_title_view_entry_submenu_comments', 'page.php?i=view-post-comments&id={content_id}', '', '', '', '', 2147483647, 0, 0, 2);
+
+-- MENU: custom menu for snippet meta info
+INSERT INTO `sys_objects_menu`(`object`, `title`, `set_name`, `module`, `template_id`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES 
+('bx_posts_snippet_meta', '_sys_menu_title_snippet_meta', 'bx_posts_snippet_meta', 'bx_posts', 15, 0, 1, 'BxPostsMenuSnippetMeta', 'modules/boonex/posts/classes/BxPostsMenuSnippetMeta.php');
+
+INSERT INTO `sys_menu_sets`(`set_name`, `module`, `title`, `deletable`) VALUES 
+('bx_posts_snippet_meta', 'bx_posts', '_sys_menu_set_title_snippet_meta', 0);
+
+INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `editable`, `order`) VALUES 
+('bx_posts_snippet_meta', 'bx_posts', 'date', '_sys_menu_item_title_system_sm_date', '_sys_menu_item_title_sm_date', '', '', '', '', '', 2147483647, 1, 0, 1, 1),
+('bx_posts_snippet_meta', 'bx_posts', 'author', '_sys_menu_item_title_system_sm_author', '_sys_menu_item_title_sm_author', '', '', '', '', '', 2147483647, 1, 0, 1, 2),
+('bx_posts_snippet_meta', 'bx_posts', 'category', '_sys_menu_item_title_system_sm_category', '_sys_menu_item_title_sm_category', '', '', '', '', '', 2147483647, 0, 0, 1, 3),
+('bx_posts_snippet_meta', 'bx_posts', 'tags', '_sys_menu_item_title_system_sm_tags', '_sys_menu_item_title_sm_tags', '', '', '', '', '', 2147483647, 0, 0, 1, 4),
+('bx_posts_snippet_meta', 'bx_posts', 'views', '_sys_menu_item_title_system_sm_views', '_sys_menu_item_title_sm_views', '', '', '', '', '', 2147483647, 0, 0, 1, 5),
+('bx_posts_snippet_meta', 'bx_posts', 'comments', '_sys_menu_item_title_system_sm_comments', '_sys_menu_item_title_sm_comments', '', '', '', '', '', 2147483647, 0, 0, 1, 6);
+
+-- MENU: profile stats
+SET @iNotifMenuOrder = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_menu_items` WHERE `set_name` = 'sys_profile_stats' AND `active` = 1 LIMIT 1);
+INSERT INTO `sys_menu_items` (`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `addon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES
+('sys_profile_stats', 'bx_posts', 'profile-stats-manage-posts', '_bx_posts_menu_item_title_system_manage_my_posts', '_bx_posts_menu_item_title_manage_my_posts', 'page.php?i=posts-manage', '', '_self', 'file-alt col-red3', 'a:2:{s:6:"module";s:8:"bx_posts";s:6:"method";s:41:"get_menu_addon_manage_tools_profile_stats";}', '', 2147483646, 1, 0, @iNotifMenuOrder + 1);
+
+-- MENU: manage tools submenu
+INSERT INTO `sys_objects_menu`(`object`, `title`, `set_name`, `module`, `template_id`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES 
+('bx_posts_menu_manage_tools', '_bx_posts_menu_title_manage_tools', 'bx_posts_menu_manage_tools', 'bx_posts', 6, 0, 1, 'BxPostsMenuManageTools', 'modules/boonex/posts/classes/BxPostsMenuManageTools.php');
+
+INSERT INTO `sys_menu_sets`(`set_name`, `module`, `title`, `deletable`) VALUES 
+('bx_posts_menu_manage_tools', 'bx_posts', '_bx_posts_menu_set_title_manage_tools', 0);
+
+--INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES 
+--('bx_posts_menu_manage_tools', 'bx_posts', 'delete-with-content', '_bx_posts_menu_item_title_system_delete_with_content', '_bx_posts_menu_item_title_delete_with_content', 'javascript:void(0)', 'javascript:{js_object}.onClickDeleteWithContent({content_id});', '_self', 'far trash-alt', '', 128, 1, 0, 0);
+
+-- MENU: dashboard manage tools
+SET @iManageMenuOrder = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_menu_items` WHERE `set_name`='sys_account_dashboard_manage_tools' LIMIT 1);
+INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `addon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES 
+('sys_account_dashboard_manage_tools', 'bx_posts', 'posts-administration', '_bx_posts_menu_item_title_system_admt_posts', '_bx_posts_menu_item_title_admt_posts', 'page.php?i=posts-administration', '', '_self', 'file-alt', 'a:2:{s:6:"module";s:8:"bx_posts";s:6:"method";s:27:"get_menu_addon_manage_tools";}', '', 192, 1, 0, @iManageMenuOrder + 1);
+
+-- MENU: add menu item to profiles modules (trigger* menu sets are processed separately upon modules enable/disable)
+
+INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES 
+('trigger_profile_view_submenu', 'bx_posts', 'posts-author', '_bx_posts_menu_item_title_system_view_entries_author', '_bx_posts_menu_item_title_view_entries_author', 'page.php?i=posts-author&profile_id={profile_id}', '', '', 'file-alt col-red3', '', 2147483647, 1, 0, 0),
+('trigger_group_view_submenu', 'bx_posts', 'posts-context', '_bx_posts_menu_item_title_system_view_entries_in_context', '_bx_posts_menu_item_title_view_entries_in_context', 'page.php?i=posts-context&profile_id={profile_id}', '', '', 'file-alt col-red3', '', 2147483647, 1, 0, 0);
+
+
+-- PRIVACY 
+
+INSERT INTO `sys_objects_privacy` (`object`, `module`, `action`, `title`, `default_group`, `table`, `table_field_id`, `table_field_author`, `override_class_name`, `override_class_file`) VALUES
+('bx_posts_allow_view_to', 'bx_posts', 'view', '_bx_posts_form_entry_input_allow_view_to', '3', 'bx_posts_posts', 'id', 'author', '', '');
+
+
+-- ACL
+
+INSERT INTO `sys_acl_actions` (`Module`, `Name`, `AdditionalParamName`, `Title`, `Desc`, `Countable`, `DisabledForLevels`) VALUES
+('bx_posts', 'create entry', NULL, '_bx_posts_acl_action_create_entry', '', 1, 3);
+SET @iIdActionEntryCreate = LAST_INSERT_ID();
+
+INSERT INTO `sys_acl_actions` (`Module`, `Name`, `AdditionalParamName`, `Title`, `Desc`, `Countable`, `DisabledForLevels`) VALUES
+('bx_posts', 'delete entry', NULL, '_bx_posts_acl_action_delete_entry', '', 1, 3);
+SET @iIdActionEntryDelete = LAST_INSERT_ID();
+
+INSERT INTO `sys_acl_actions` (`Module`, `Name`, `AdditionalParamName`, `Title`, `Desc`, `Countable`, `DisabledForLevels`) VALUES
+('bx_posts', 'view entry', NULL, '_bx_posts_acl_action_view_entry', '', 1, 0);
+SET @iIdActionEntryView = LAST_INSERT_ID();
+
+INSERT INTO `sys_acl_actions` (`Module`, `Name`, `AdditionalParamName`, `Title`, `Desc`, `Countable`, `DisabledForLevels`) VALUES
+('bx_posts', 'set thumb', NULL, '_bx_posts_acl_action_set_thumb', '', 1, 3);
+SET @iIdActionSetThumb = LAST_INSERT_ID();
+
+INSERT INTO `sys_acl_actions` (`Module`, `Name`, `AdditionalParamName`, `Title`, `Desc`, `Countable`, `DisabledForLevels`) VALUES
+('bx_posts', 'edit any entry', NULL, '_bx_posts_acl_action_edit_any_entry', '', 1, 3);
+SET @iIdActionEntryEditAny = LAST_INSERT_ID();
+
+SET @iUnauthenticated = 1;
+SET @iAccount = 2;
+SET @iStandard = 3;
+SET @iUnconfirmed = 4;
+SET @iPending = 5;
+SET @iSuspended = 6;
+SET @iModerator = 7;
+SET @iAdministrator = 8;
+SET @iPremium = 9;
+
+INSERT INTO `sys_acl_matrix` (`IDLevel`, `IDAction`) VALUES
+
+-- entry create
+(@iStandard, @iIdActionEntryCreate),
+(@iModerator, @iIdActionEntryCreate),
+(@iAdministrator, @iIdActionEntryCreate),
+(@iPremium, @iIdActionEntryCreate),
+
+-- entry delete
+(@iStandard, @iIdActionEntryDelete),
+(@iModerator, @iIdActionEntryDelete),
+(@iAdministrator, @iIdActionEntryDelete),
+(@iPremium, @iIdActionEntryDelete),
+
+-- entry view
+(@iUnauthenticated, @iIdActionEntryView),
+(@iAccount, @iIdActionEntryView),
+(@iStandard, @iIdActionEntryView),
+(@iUnconfirmed, @iIdActionEntryView),
+(@iPending, @iIdActionEntryView),
+(@iModerator, @iIdActionEntryView),
+(@iAdministrator, @iIdActionEntryView),
+(@iPremium, @iIdActionEntryView),
+
+-- set entry thumb
+(@iStandard, @iIdActionSetThumb),
+(@iModerator, @iIdActionSetThumb),
+(@iAdministrator, @iIdActionSetThumb),
+(@iPremium, @iIdActionSetThumb),
+
+-- edit any entry
+(@iModerator, @iIdActionEntryEditAny),
+(@iAdministrator, @iIdActionEntryEditAny);
+
+
+-- SEARCH
+SET @iSearchOrder = (SELECT IFNULL(MAX(`Order`), 0) FROM `sys_objects_search`);
+INSERT INTO `sys_objects_search` (`ObjectName`, `Title`, `Order`, `ClassName`, `ClassPath`) VALUES
+('bx_posts', '_bx_posts', @iSearchOrder + 1, 'BxPostsSearchResult', 'modules/boonex/posts/classes/BxPostsSearchResult.php'),
+('bx_posts_cmts', '_bx_posts_cmts', @iSearchOrder + 2, 'BxPostsCmtsSearchResult', 'modules/boonex/posts/classes/BxPostsCmtsSearchResult.php');
+
+-- METATAGS
+INSERT INTO `sys_objects_metatags` (`object`, `table_keywords`, `table_locations`, `table_mentions`, `override_class_name`, `override_class_file`) VALUES
+('bx_posts', 'bx_posts_meta_keywords', 'bx_posts_meta_locations', 'bx_posts_meta_mentions', '', '');
+
+-- CATEGORY
+INSERT INTO `sys_objects_category` (`object`, `search_object`, `form_object`, `list_name`, `table`, `field`, `join`, `where`, `override_class_name`, `override_class_file`) VALUES
+('bx_posts_cats', 'bx_posts', 'bx_posts', 'bx_posts_cats', 'bx_posts_posts', 'cat', 'INNER JOIN `sys_profiles` ON (`sys_profiles`.`id` = ABS(`bx_posts_posts`.`author`))', 'AND `sys_profiles`.`status` = ''active''', '', '');
+
+-- STATS
+SET @iMaxOrderStats = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_statistics`);
+INSERT INTO `sys_statistics` (`module`, `name`, `title`, `link`, `icon`, `query`, `order`) VALUES 
+('bx_posts', 'bx_posts', '_bx_posts', 'page.php?i=posts-home', 'file-alt col-red3', 'SELECT COUNT(*) FROM `bx_posts_posts` WHERE 1 AND `status` = ''active'' AND `status_admin` = ''active''', @iMaxOrderStats + 1);
+
+-- CHARTS
+SET @iMaxOrderCharts = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_objects_chart`);
+INSERT INTO `sys_objects_chart` (`object`, `title`, `table`, `field_date_ts`, `field_date_dt`, `field_status`, `query`, `active`, `order`, `class_name`, `class_file`) VALUES
+('bx_posts_growth', '_bx_posts_chart_growth', 'bx_posts_posts', 'added', '', 'status,status_admin', '', 1, @iMaxOrderCharts + 1, 'BxDolChartGrowth', ''),
+('bx_posts_growth_speed', '_bx_posts_chart_growth_speed', 'bx_posts_posts', 'added', '', 'status,status_admin', '', 1, @iMaxOrderCharts + 2, 'BxDolChartGrowthSpeed', '');
+
+-- GRIDS: moderation tools
+INSERT INTO `sys_objects_grid` (`object`, `source_type`, `source`, `table`, `field_id`, `field_order`, `field_active`, `paginate_url`, `paginate_per_page`, `paginate_simple`, `paginate_get_start`, `paginate_get_per_page`, `filter_fields`, `filter_fields_translatable`, `filter_mode`, `sorting_fields`, `sorting_fields_translatable`, `visible_for_levels`, `override_class_name`, `override_class_file`) VALUES
+('bx_posts_administration', 'Sql', 'SELECT * FROM `bx_posts_posts` WHERE 1 ', 'bx_posts_posts', 'id', 'added', 'status_admin', '', 20, NULL, 'start', '', 'title,text', '', 'like', 'reports', '', 192, 'BxPostsGridAdministration', 'modules/boonex/posts/classes/BxPostsGridAdministration.php'),
+('bx_posts_common', 'Sql', 'SELECT * FROM `bx_posts_posts` WHERE 1 ', 'bx_posts_posts', 'id', 'added', 'status', '', 20, NULL, 'start', '', 'title,text', '', 'like', '', '', 2147483647, 'BxPostsGridCommon', 'modules/boonex/posts/classes/BxPostsGridCommon.php');
+
+
+INSERT INTO `sys_grid_fields` (`object`, `name`, `title`, `width`, `translatable`, `chars_limit`, `params`, `order`) VALUES
+('bx_posts_administration', 'checkbox', '_sys_select', '2%', 0, '', '', 1),
+('bx_posts_administration', 'switcher', '_bx_posts_grid_column_title_adm_active', '8%', 0, '', '', 2),
+('bx_posts_administration', 'reports', '_sys_txt_reports_title', '5%', 0, '', '', 3),
+('bx_posts_administration', 'title', '_bx_posts_grid_column_title_adm_title', '25%', 0, '25', '', 4),
+('bx_posts_administration', 'added', '_bx_posts_grid_column_title_adm_added', '20%', 1, '25', '', 5),
+('bx_posts_administration', 'author', '_bx_posts_grid_column_title_adm_author', '20%', 0, '25', '', 6),
+('bx_posts_administration', 'actions', '', '20%', 0, '', '', 7),
+('bx_posts_common', 'checkbox', '_sys_select', '2%', 0, '', '', 1),
+('bx_posts_common', 'switcher', '_bx_posts_grid_column_title_adm_active', '8%', 0, '', '', 2),
+('bx_posts_common', 'title', '_bx_posts_grid_column_title_adm_title', '40%', 0, '35', '', 3),
+('bx_posts_common', 'added', '_bx_posts_grid_column_title_adm_added', '30%', 1, '25', '', 4),
+('bx_posts_common', 'actions', '', '20%', 0, '', '', 5);
+
+INSERT INTO `sys_grid_actions` (`object`, `type`, `name`, `title`, `icon`, `icon_only`, `confirm`, `order`) VALUES
+('bx_posts_administration', 'bulk', 'delete', '_bx_posts_grid_action_title_adm_delete', '', 0, 1, 1),
+('bx_posts_administration', 'single', 'edit', '_bx_posts_grid_action_title_adm_edit', 'pencil-alt', 1, 0, 1),
+('bx_posts_administration', 'single', 'delete', '_bx_posts_grid_action_title_adm_delete', 'remove', 1, 1, 2),
+('bx_posts_administration', 'single', 'settings', '_bx_posts_grid_action_title_adm_more_actions', 'cog', 1, 0, 3),
+('bx_posts_common', 'bulk', 'delete', '_bx_posts_grid_action_title_adm_delete', '', 0, 1, 1),
+('bx_posts_common', 'single', 'edit', '_bx_posts_grid_action_title_adm_edit', 'pencil-alt', 1, 0, 1),
+('bx_posts_common', 'single', 'delete', '_bx_posts_grid_action_title_adm_delete', 'remove', 1, 1, 2),
+('bx_posts_common', 'single', 'settings', '_bx_posts_grid_action_title_adm_more_actions', 'cog', 1, 0, 3);
+
+-- UPLOADERS
+
+INSERT INTO `sys_objects_uploader` (`object`, `active`, `override_class_name`, `override_class_file`) VALUES
+('bx_posts_simple', 1, 'BxPostsUploaderSimple', 'modules/boonex/posts/classes/BxPostsUploaderSimple.php'),
+('bx_posts_html5', 1, 'BxPostsUploaderHTML5', 'modules/boonex/posts/classes/BxPostsUploaderHTML5.php'),
+('bx_posts_photos_simple', 1, 'BxPostsUploaderSimpleAttach', 'modules/boonex/posts/classes/BxPostsUploaderSimpleAttach.php'),
+('bx_posts_photos_html5', 1, 'BxPostsUploaderHTML5Attach', 'modules/boonex/posts/classes/BxPostsUploaderHTML5Attach.php'),
+('bx_posts_videos_simple', 1, 'BxPostsUploaderSimpleAttach', 'modules/boonex/posts/classes/BxPostsUploaderSimpleAttach.php'),
+('bx_posts_videos_html5', 1, 'BxPostsUploaderHTML5Attach', 'modules/boonex/posts/classes/BxPostsUploaderHTML5Attach.php'),
+('bx_posts_files_simple', 1, 'BxPostsUploaderSimpleAttach', 'modules/boonex/posts/classes/BxPostsUploaderSimpleAttach.php'),
+('bx_posts_files_html5', 1, 'BxPostsUploaderHTML5Attach', 'modules/boonex/posts/classes/BxPostsUploaderHTML5Attach.php');
+
+-- ALERTS
+
+INSERT INTO `sys_alerts_handlers` (`name`, `class`, `file`, `service_call`) VALUES 
+('bx_posts', 'BxPostsAlertsResponse', 'modules/boonex/posts/classes/BxPostsAlertsResponse.php', '');
+SET @iHandler := LAST_INSERT_ID();
+
+INSERT INTO `sys_alerts` (`unit`, `action`, `handler_id`) VALUES
+('system', 'save_setting', @iHandler),
+('profile', 'delete', @iHandler),
+
+('bx_posts_videos_mp4', 'transcoded', @iHandler);
+
+
+-- CRON
+INSERT INTO `sys_cron_jobs` (`name`, `time`, `class`, `file`, `service_call`) VALUES
+('bx_posts_publishing', '* * * * *', 'BxPostsCronPublishing', 'modules/boonex/posts/classes/BxPostsCronPublishing.php', '');

+ 552 - 0
modules/boonex/posts/updates/10.0.3_10.0.4/source/install/sql/install.sql

@@ -0,0 +1,552 @@
+-- TABLE: entries
+CREATE TABLE IF NOT EXISTS `bx_posts_posts` (
+  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+  `author` int(11) NOT NULL,
+  `added` int(11) NOT NULL,
+  `changed` int(11) NOT NULL,
+  `published` int(11) NOT NULL,
+  `thumb` int(11) NOT NULL,
+  `title` varchar(255) NOT NULL,
+  `cat` int(11) NOT NULL,
+  `text` mediumtext NOT NULL,
+  `views` int(11) NOT NULL default '0',
+  `rate` float NOT NULL default '0',
+  `votes` int(11) NOT NULL default '0',
+  `rrate` float NOT NULL default '0',
+  `rvotes` int(11) NOT NULL default '0',
+  `score` int(11) NOT NULL default '0',
+  `sc_up` int(11) NOT NULL default '0',
+  `sc_down` int(11) NOT NULL default '0',
+  `favorites` int(11) NOT NULL default '0',
+  `comments` int(11) NOT NULL default '0',
+  `reports` int(11) NOT NULL default '0',
+  `featured` int(11) NOT NULL default '0',
+  `allow_view_to` varchar(16) NOT NULL DEFAULT '3',
+  `disable_comments` tinyint(4) NOT NULL DEFAULT '0',
+  `status` enum('active','awaiting','failed','hidden') NOT NULL DEFAULT 'active',
+  `status_admin` enum('active','hidden') NOT NULL DEFAULT 'active',
+  PRIMARY KEY (`id`),
+  FULLTEXT KEY `title_text` (`title`,`text`)
+);
+
+-- TABLE: storages & transcoders
+CREATE TABLE IF NOT EXISTS `bx_posts_covers` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `profile_id` int(10) unsigned NOT NULL,
+  `remote_id` varchar(128) NOT NULL,
+  `path` varchar(255) NOT NULL,
+  `file_name` varchar(255) NOT NULL,
+  `mime_type` varchar(128) NOT NULL,
+  `ext` varchar(32) NOT NULL,
+  `size` int(11) NOT NULL,
+  `added` int(11) NOT NULL,
+  `modified` int(11) NOT NULL,
+  `private` int(11) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `remote_id` (`remote_id`)
+);
+
+CREATE TABLE IF NOT EXISTS `bx_posts_files` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `profile_id` int(10) unsigned NOT NULL,
+  `remote_id` varchar(128) NOT NULL,
+  `path` varchar(255) NOT NULL,
+  `file_name` varchar(255) NOT NULL,
+  `mime_type` varchar(128) NOT NULL,
+  `ext` varchar(32) NOT NULL,
+  `size` int(11) NOT NULL,
+  `added` int(11) NOT NULL,
+  `modified` int(11) NOT NULL,
+  `private` int(11) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `remote_id` (`remote_id`)
+);
+
+CREATE TABLE IF NOT EXISTS `bx_posts_photos` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `profile_id` int(10) unsigned NOT NULL,
+  `remote_id` varchar(128) NOT NULL,
+  `path` varchar(255) NOT NULL,
+  `file_name` varchar(255) NOT NULL,
+  `mime_type` varchar(128) NOT NULL,
+  `ext` varchar(32) NOT NULL,
+  `size` int(11) NOT NULL,
+  `added` int(11) NOT NULL,
+  `modified` int(11) NOT NULL,
+  `private` int(11) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `remote_id` (`remote_id`)
+);
+
+CREATE TABLE IF NOT EXISTS `bx_posts_photos_resized` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `profile_id` int(10) unsigned NOT NULL,
+  `remote_id` varchar(128) NOT NULL,
+  `path` varchar(255) NOT NULL,
+  `file_name` varchar(255) NOT NULL,
+  `mime_type` varchar(128) NOT NULL,
+  `ext` varchar(32) NOT NULL,
+  `size` int(11) NOT NULL,
+  `added` int(11) NOT NULL,
+  `modified` int(11) NOT NULL,
+  `private` int(11) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `remote_id` (`remote_id`)
+);
+
+CREATE TABLE IF NOT EXISTS `bx_posts_videos` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `profile_id` int(10) unsigned NOT NULL,
+  `remote_id` varchar(128) NOT NULL,
+  `path` varchar(255) NOT NULL,
+  `file_name` varchar(255) NOT NULL,
+  `mime_type` varchar(128) NOT NULL,
+  `ext` varchar(32) NOT NULL,
+  `size` int(11) NOT NULL,
+  `added` int(11) NOT NULL,
+  `modified` int(11) NOT NULL,
+  `private` int(11) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `remote_id` (`remote_id`)
+);
+
+CREATE TABLE IF NOT EXISTS `bx_posts_videos_resized` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `profile_id` int(10) unsigned NOT NULL,
+  `remote_id` varchar(128) NOT NULL,
+  `path` varchar(255) NOT NULL,
+  `file_name` varchar(255) NOT NULL,
+  `mime_type` varchar(128) NOT NULL,
+  `ext` varchar(32) NOT NULL,
+  `size` int(11) NOT NULL,
+  `added` int(11) NOT NULL,
+  `modified` int(11) NOT NULL,
+  `private` int(11) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `remote_id` (`remote_id`)
+);
+
+-- TABLE: comments
+CREATE TABLE IF NOT EXISTS `bx_posts_cmts` (
+  `cmt_id` int(11) NOT NULL AUTO_INCREMENT,
+  `cmt_parent_id` int(11) NOT NULL DEFAULT '0',
+  `cmt_vparent_id` int(11) NOT NULL DEFAULT '0',
+  `cmt_object_id` int(11) NOT NULL DEFAULT '0',
+  `cmt_author_id` int(11) NOT NULL DEFAULT '0',
+  `cmt_level` int(11) NOT NULL DEFAULT '0',
+  `cmt_text` text NOT NULL,
+  `cmt_mood` tinyint(4) NOT NULL DEFAULT '0',
+  `cmt_rate` int(11) NOT NULL DEFAULT '0',
+  `cmt_rate_count` int(11) NOT NULL DEFAULT '0',
+  `cmt_time` int(11) unsigned NOT NULL DEFAULT '0',
+  `cmt_replies` int(11) NOT NULL DEFAULT '0',
+  PRIMARY KEY (`cmt_id`),
+  KEY `cmt_object_id` (`cmt_object_id`,`cmt_parent_id`),
+  FULLTEXT KEY `search_fields` (`cmt_text`)
+);
+
+-- TABLE: votes
+CREATE TABLE IF NOT EXISTS `bx_posts_votes` (
+  `object_id` int(11) NOT NULL default '0',
+  `count` int(11) NOT NULL default '0',
+  `sum` int(11) NOT NULL default '0',
+  UNIQUE KEY `object_id` (`object_id`)
+);
+
+CREATE TABLE IF NOT EXISTS `bx_posts_votes_track` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `object_id` int(11) NOT NULL default '0',
+  `author_id` int(11) NOT NULL default '0',
+  `author_nip` int(11) unsigned NOT NULL default '0',
+  `value` tinyint(4) NOT NULL default '0',
+  `date` int(11) NOT NULL default '0',
+  PRIMARY KEY (`id`),
+  KEY `vote` (`object_id`, `author_nip`)
+);
+
+CREATE TABLE IF NOT EXISTS `bx_posts_reactions` (
+  `object_id` int(11) NOT NULL default '0',
+  `reaction` varchar(32) NOT NULL default '',
+  `count` int(11) NOT NULL default '0',
+  `sum` int(11) NOT NULL default '0',
+  UNIQUE KEY `reaction` (`object_id`, `reaction`)
+);
+
+CREATE TABLE IF NOT EXISTS `bx_posts_reactions_track` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `object_id` int(11) NOT NULL default '0',
+  `author_id` int(11) NOT NULL default '0',
+  `author_nip` int(11) unsigned NOT NULL default '0',
+  `reaction` varchar(32) NOT NULL default '',
+  `value` tinyint(4) NOT NULL default '0',
+  `date` int(11) NOT NULL default '0',
+  PRIMARY KEY (`id`),
+  KEY `vote` (`object_id`, `author_nip`)
+);
+
+-- TABLE: views
+CREATE TABLE `bx_posts_views_track` (
+  `object_id` int(11) NOT NULL default '0',
+  `viewer_id` int(11) NOT NULL default '0',
+  `viewer_nip` int(11) unsigned NOT NULL default '0',
+  `date` int(11) NOT NULL default '0',
+  KEY `id` (`object_id`,`viewer_id`,`viewer_nip`)
+);
+
+-- TABLE: metas
+CREATE TABLE `bx_posts_meta_keywords` (
+  `object_id` int(10) unsigned NOT NULL,
+  `keyword` varchar(255) NOT NULL,
+  KEY `object_id` (`object_id`),
+  KEY `keyword` (`keyword`)
+);
+
+CREATE TABLE `bx_posts_meta_mentions` (
+  `object_id` int(10) unsigned NOT NULL,
+  `profile_id` int(10) unsigned NOT NULL,
+  KEY `object_id` (`object_id`),
+  KEY `profile_id` (`profile_id`)
+);
+
+CREATE TABLE `bx_posts_meta_locations` (
+  `object_id` int(10) unsigned NOT NULL,
+  `lat` double NOT NULL,
+  `lng` double NOT NULL,
+  `country` varchar(2) NOT NULL,
+  `state` varchar(255) NOT NULL,
+  `city` varchar(255) NOT NULL,
+  `zip` varchar(255) NOT NULL,
+  `street` varchar(255) NOT NULL,
+  `street_number` varchar(255) NOT NULL,
+  PRIMARY KEY (`object_id`),
+  KEY `country_state_city` (`country`,`state`(8),`city`(8))
+);
+
+-- TABLE: reports
+CREATE TABLE IF NOT EXISTS `bx_posts_reports` (
+  `object_id` int(11) NOT NULL default '0',
+  `count` int(11) NOT NULL default '0',
+  UNIQUE KEY `object_id` (`object_id`)
+);
+
+CREATE TABLE IF NOT EXISTS `bx_posts_reports_track` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `object_id` int(11) NOT NULL default '0',
+  `author_id` int(11) NOT NULL default '0',
+  `author_nip` int(11) unsigned NOT NULL default '0',
+  `type` varchar(32) NOT NULL default '',
+  `text` text NOT NULL default '',
+  `date` int(11) NOT NULL default '0',
+  PRIMARY KEY (`id`),
+  KEY `report` (`object_id`, `author_nip`)
+);
+
+-- TABLE: favorites
+CREATE TABLE `bx_posts_favorites_track` (
+  `object_id` int(11) NOT NULL default '0',
+  `author_id` int(11) NOT NULL default '0',
+  `date` int(11) NOT NULL default '0',
+  KEY `id` (`object_id`,`author_id`)
+);
+
+-- TABLE: scores
+CREATE TABLE IF NOT EXISTS `bx_posts_scores` (
+  `object_id` int(11) NOT NULL default '0',
+  `count_up` int(11) NOT NULL default '0',
+  `count_down` int(11) NOT NULL default '0',
+  UNIQUE KEY `object_id` (`object_id`)
+);
+
+CREATE TABLE IF NOT EXISTS `bx_posts_scores_track` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `object_id` int(11) NOT NULL default '0',
+  `author_id` int(11) NOT NULL default '0',
+  `author_nip` int(11) unsigned NOT NULL default '0',
+  `type` varchar(8) NOT NULL default '',
+  `date` int(11) NOT NULL default '0',
+  PRIMARY KEY (`id`),
+  KEY `vote` (`object_id`, `author_nip`)
+);
+
+-- TABLE: polls
+CREATE TABLE IF NOT EXISTS `bx_posts_polls` (
+  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+  `author_id` int(11) NOT NULL default '0',
+  `content_id` int(11) NOT NULL default '0',
+  `text` text NOT NULL,
+  PRIMARY KEY (`id`),
+  KEY `content_id` (`content_id`),
+  FULLTEXT KEY `search_fields` (`text`)
+);
+
+CREATE TABLE IF NOT EXISTS `bx_posts_polls_answers` (
+  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+  `poll_id` int(11) unsigned NOT NULL default '0',
+  `title` varchar(255) NOT NULL,
+  `rate` float NOT NULL default '0',
+  `votes` int(11) NOT NULL default '0',
+  `order` int(11) NOT NULL default '0',
+  PRIMARY KEY (`id`),
+  KEY `poll_id` (`poll_id`),
+  FULLTEXT KEY `title` (`title`)
+);
+
+CREATE TABLE IF NOT EXISTS `bx_posts_polls_answers_votes` (
+  `object_id` int(11) NOT NULL default '0',
+  `count` int(11) NOT NULL default '0',
+  `sum` int(11) NOT NULL default '0',
+  UNIQUE KEY `object_id` (`object_id`)
+);
+
+CREATE TABLE IF NOT EXISTS `bx_posts_polls_answers_votes_track` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `object_id` int(11) NOT NULL default '0',
+  `author_id` int(11) NOT NULL default '0',
+  `author_nip` int(11) unsigned NOT NULL default '0',
+  `value` tinyint(4) NOT NULL default '0',
+  `date` int(11) NOT NULL default '0',
+  PRIMARY KEY (`id`),
+  KEY `vote` (`object_id`, `author_nip`)
+);
+
+-- STORAGES & TRANSCODERS
+SET @sStorageEngine = (SELECT `value` FROM `sys_options` WHERE `name` = 'sys_storage_default');
+
+INSERT INTO `sys_objects_storage` (`object`, `engine`, `params`, `token_life`, `cache_control`, `levels`, `table_files`, `ext_mode`, `ext_allow`, `ext_deny`, `quota_size`, `current_size`, `quota_number`, `current_number`, `max_file_size`, `ts`) VALUES
+('bx_posts_covers', @sStorageEngine, '', 360, 2592000, 3, 'bx_posts_covers', 'allow-deny', 'jpg,jpeg,jpe,gif,png', '', 0, 0, 0, 0, 0, 0),
+
+('bx_posts_photos', @sStorageEngine, '', 360, 2592000, 3, 'bx_posts_photos', 'allow-deny', 'jpg,jpeg,jpe,gif,png', '', 0, 0, 0, 0, 0, 0),
+('bx_posts_photos_resized', @sStorageEngine, '', 360, 2592000, 3, 'bx_posts_photos_resized', 'allow-deny', 'jpg,jpeg,jpe,gif,png', '', 0, 0, 0, 0, 0, 0),
+
+('bx_posts_videos', @sStorageEngine, '', 360, 2592000, 3, 'bx_posts_videos', 'allow-deny', 'avi,flv,mpg,mpeg,wmv,mp4,m4v,mov,qt,divx,xvid,3gp,3g2,webm,mkv,ogv,ogg,rm,rmvb,asf,drc', '', 0, 0, 0, 0, 0, 0),
+('bx_posts_videos_resized', @sStorageEngine, '', 360, 2592000, 3, 'bx_posts_videos_resized', 'allow-deny', 'jpg,jpeg,jpe,gif,png,avi,flv,mpg,mpeg,wmv,mp4,m4v,mov,qt,divx,xvid,3gp,3g2,webm,mkv,ogv,ogg,rm,rmvb,asf,drc', '', 0, 0, 0, 0, 0, 0),
+
+('bx_posts_files', @sStorageEngine, '', 360, 2592000, 3, 'bx_posts_files', 'deny-allow', '', 'action,apk,app,bat,bin,cmd,com,command,cpl,csh,exe,gadget,inf,ins,inx,ipa,isu,job,jse,ksh,lnk,msc,msi,msp,mst,osx,out,paf,pif,prg,ps1,reg,rgs,run,sct,shb,shs,u3p,vb,vbe,vbs,vbscript,workflow,ws,wsf', 0, 0, 0, 0, 0, 0);
+
+INSERT INTO `sys_objects_transcoder` (`object`, `storage_object`, `source_type`, `source_params`, `private`, `atime_tracking`, `atime_pruning`, `ts`, `override_class_name`, `override_class_file`) VALUES 
+('bx_posts_preview', 'bx_posts_photos_resized', 'Storage', 'a:1:{s:6:"object";s:15:"bx_posts_covers";}', 'no', '1', '2592000', '0', '', ''),
+('bx_posts_gallery', 'bx_posts_photos_resized', 'Storage', 'a:1:{s:6:"object";s:15:"bx_posts_covers";}', 'no', '1', '2592000', '0', '', ''),
+('bx_posts_cover', 'bx_posts_photos_resized', 'Storage', 'a:1:{s:6:"object";s:15:"bx_posts_covers";}', 'no', '1', '2592000', '0', '', ''),
+
+('bx_posts_preview_photos', 'bx_posts_photos_resized', 'Storage', 'a:1:{s:6:"object";s:15:"bx_posts_photos";}', 'no', '1', '2592000', '0', '', ''),
+('bx_posts_gallery_photos', 'bx_posts_photos_resized', 'Storage', 'a:1:{s:6:"object";s:15:"bx_posts_photos";}', 'no', '1', '2592000', '0', '', ''),
+
+('bx_posts_videos_poster', 'bx_posts_videos_resized', 'Storage', 'a:1:{s:6:"object";s:15:"bx_posts_videos";}', 'no', '0', '0', '0', 'BxDolTranscoderVideo', ''),
+('bx_posts_videos_poster_preview', 'bx_posts_videos_resized', 'Storage', 'a:1:{s:6:"object";s:15:"bx_posts_videos";}', 'no', '0', '0', '0', 'BxDolTranscoderVideo', ''),
+('bx_posts_videos_mp4', 'bx_posts_videos_resized', 'Storage', 'a:1:{s:6:"object";s:15:"bx_posts_videos";}', 'no', '0', '0', '0', 'BxDolTranscoderVideo', ''),
+('bx_posts_videos_mp4_hd', 'bx_posts_videos_resized', 'Storage', 'a:1:{s:6:"object";s:15:"bx_posts_videos";}', 'no', '0', '0', '0', 'BxDolTranscoderVideo', ''),
+
+('bx_posts_preview_files', 'bx_posts_photos_resized', 'Storage', 'a:1:{s:6:"object";s:14:"bx_posts_files";}', 'no', '1', '2592000', '0', '', ''),
+('bx_posts_gallery_files', 'bx_posts_photos_resized', 'Storage', 'a:1:{s:6:"object";s:14:"bx_posts_files";}', 'no', '1', '2592000', '0', '', '');
+
+INSERT INTO `sys_transcoder_filters` (`transcoder_object`, `filter`, `filter_params`, `order`) VALUES 
+('bx_posts_preview', 'Resize', 'a:3:{s:1:"w";s:3:"300";s:1:"h";s:3:"200";s:11:"crop_resize";s:1:"1";}', '0'),
+('bx_posts_gallery', 'Resize', 'a:1:{s:1:"w";s:3:"500";}', '0'),
+('bx_posts_cover', 'Resize', 'a:1:{s:1:"w";s:4:"2000";}', '0'),
+
+('bx_posts_preview_photos', 'Resize', 'a:3:{s:1:"w";s:3:"300";s:1:"h";s:3:"200";s:11:"crop_resize";s:1:"1";}', '0'),
+('bx_posts_gallery_photos', 'Resize', 'a:1:{s:1:"w";s:4:"2000";}', '0'),
+
+('bx_posts_videos_poster_preview', 'Resize', 'a:3:{s:1:"w";s:3:"300";s:1:"h";s:3:"200";s:13:"square_resize";s:1:"1";}', 10),
+('bx_posts_videos_poster_preview', 'Poster', 'a:2:{s:1:"h";s:3:"480";s:10:"force_type";s:3:"jpg";}', 0),
+('bx_posts_videos_poster', 'Poster', 'a:2:{s:1:"h";s:3:"318";s:10:"force_type";s:3:"jpg";}', 0),
+('bx_posts_videos_mp4', 'Mp4', 'a:2:{s:1:"h";s:3:"318";s:10:"force_type";s:3:"mp4";}', 0),
+('bx_posts_videos_mp4_hd', 'Mp4', 'a:3:{s:1:"h";s:3:"720";s:13:"video_bitrate";s:4:"1536";s:10:"force_type";s:3:"mp4";}', 0),
+
+('bx_posts_preview_files', 'Resize', 'a:3:{s:1:"w";s:3:"300";s:1:"h";s:3:"200";s:11:"crop_resize";s:1:"1";}', '0'),
+('bx_posts_gallery_files', 'Resize', 'a:1:{s:1:"w";s:3:"500";}', '0');
+
+
+-- FORMS: entry (post)
+INSERT INTO `sys_objects_form`(`object`, `module`, `title`, `action`, `form_attrs`, `table`, `key`, `uri`, `uri_title`, `submit_name`, `params`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES 
+('bx_posts', 'bx_posts', '_bx_posts_form_entry', '', 'a:1:{s:7:"enctype";s:19:"multipart/form-data";}', 'bx_posts_posts', 'id', '', '', 'a:2:{i:0;s:9:"do_submit";i:1;s:10:"do_publish";}', '', 0, 1, 'BxPostsFormEntry', 'modules/boonex/posts/classes/BxPostsFormEntry.php');
+
+INSERT INTO `sys_form_displays`(`object`, `display_name`, `module`, `view_mode`, `title`) VALUES 
+('bx_posts', 'bx_posts_entry_add', 'bx_posts', 0, '_bx_posts_form_entry_display_add'),
+('bx_posts', 'bx_posts_entry_delete', 'bx_posts', 0, '_bx_posts_form_entry_display_delete'),
+('bx_posts', 'bx_posts_entry_edit', 'bx_posts', 0, '_bx_posts_form_entry_display_edit'),
+('bx_posts', 'bx_posts_entry_view', 'bx_posts', 1, '_bx_posts_form_entry_display_view');
+
+INSERT INTO `sys_form_inputs`(`object`, `module`, `name`, `value`, `values`, `checked`, `type`, `caption_system`, `caption`, `info`, `required`, `collapsed`, `html`, `attrs`, `attrs_tr`, `attrs_wrapper`, `checker_func`, `checker_params`, `checker_error`, `db_pass`, `db_params`, `editable`, `deletable`) VALUES 
+('bx_posts', 'bx_posts', 'allow_view_to', '', '', 0, 'custom', '_bx_posts_form_entry_input_sys_allow_view_to', '_bx_posts_form_entry_input_allow_view_to', '', 1, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
+('bx_posts', 'bx_posts', 'delete_confirm', 1, '', 0, 'checkbox', '_bx_posts_form_entry_input_sys_delete_confirm', '_bx_posts_form_entry_input_delete_confirm', '_bx_posts_form_entry_input_delete_confirm_info', 1, 0, 0, '', '', '', 'Avail', '', '_bx_posts_form_entry_input_delete_confirm_error', '', '', 1, 0),
+('bx_posts', 'bx_posts', 'do_publish', '_bx_posts_form_entry_input_do_publish', '', 0, 'submit', '_bx_posts_form_entry_input_sys_do_publish', '', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
+('bx_posts', 'bx_posts', 'do_submit', '_bx_posts_form_entry_input_do_submit', '', 0, 'submit', '_bx_posts_form_entry_input_sys_do_submit', '', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
+('bx_posts', 'bx_posts', 'location', '', '', 0, 'location', '_sys_form_input_sys_location', '_sys_form_input_location', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
+('bx_posts', 'bx_posts', 'covers', 'a:1:{i:0;s:14:"bx_posts_html5";}', 'a:2:{s:15:"bx_posts_simple";s:26:"_sys_uploader_simple_title";s:14:"bx_posts_html5";s:25:"_sys_uploader_html5_title";}', 0, 'files', '_bx_posts_form_entry_input_sys_covers', '_bx_posts_form_entry_input_covers', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
+('bx_posts', 'bx_posts', 'pictures', 'a:1:{i:0;s:21:"bx_posts_photos_html5";}', 'a:2:{s:22:"bx_posts_photos_simple";s:26:"_sys_uploader_simple_title";s:21:"bx_posts_photos_html5";s:25:"_sys_uploader_html5_title";}', 0, 'files', '_bx_posts_form_entry_input_sys_pictures', '_bx_posts_form_entry_input_pictures', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
+('bx_posts', 'bx_posts', 'videos', 'a:1:{i:0;s:21:"bx_posts_videos_html5";}', 'a:2:{s:22:"bx_posts_videos_simple";s:26:"_sys_uploader_simple_title";s:21:"bx_posts_videos_html5";s:25:"_sys_uploader_html5_title";}', 0, 'files', '_bx_posts_form_entry_input_sys_videos', '_bx_posts_form_entry_input_videos', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
+('bx_posts', 'bx_posts', 'files', 'a:1:{i:0;s:20:"bx_posts_files_html5";}', 'a:2:{s:21:"bx_posts_files_simple";s:26:"_sys_uploader_simple_title";s:20:"bx_posts_files_html5";s:25:"_sys_uploader_html5_title";}', 0, 'files', '_bx_posts_form_entry_input_sys_files', '_bx_posts_form_entry_input_files', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
+('bx_posts', 'bx_posts', 'polls', '', '', 0, 'custom', '_bx_posts_form_entry_input_sys_polls', '', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
+('bx_posts', 'bx_posts', 'text', '', '', 0, 'textarea', '_bx_posts_form_entry_input_sys_text', '_bx_posts_form_entry_input_text', '', 1, 0, 2, '', '', '', 'Avail', '', '_bx_posts_form_entry_input_text_err', 'XssHtml', '', 1, 0),
+('bx_posts', 'bx_posts', 'title', '', '', 0, 'text', '_bx_posts_form_entry_input_sys_title', '_bx_posts_form_entry_input_title', '', 1, 0, 0, '', '', '', 'Avail', '', '_bx_posts_form_entry_input_title_err', 'Xss', '', 1, 0),
+('bx_posts', 'bx_posts', 'cat', '', '#!bx_posts_cats', 0, 'select', '_bx_posts_form_entry_input_sys_cat', '_bx_posts_form_entry_input_cat', '', 1, 0, 0, '', '', '', 'avail', '', '_bx_posts_form_entry_input_cat_err', 'Xss', '', 1, 0),
+('bx_posts', 'bx_posts', 'added', '', '', 0, 'datetime', '_bx_posts_form_entry_input_sys_date_added', '_bx_posts_form_entry_input_date_added', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
+('bx_posts', 'bx_posts', 'changed', '', '', 0, 'datetime', '_bx_posts_form_entry_input_sys_date_changed', '_bx_posts_form_entry_input_date_changed', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
+('bx_posts', 'bx_posts', 'published', '', '', 0, 'datetime', '_bx_posts_form_entry_input_sys_date_published', '_bx_posts_form_entry_input_date_published', '_bx_posts_form_entry_input_date_published_info', 0, 0, 0, '', '', '', '', '', '', 'DateTimeUtc', '', 1, 0),
+('bx_posts', 'bx_posts', 'attachments', '', '', 0, 'custom', '_bx_posts_form_entry_input_sys_attachments', '', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
+('bx_posts', 'bx_posts', 'labels', '', '', 0, 'custom', '_sys_form_input_sys_labels', '_sys_form_input_labels', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
+('bx_posts', 'bx_posts', 'anonymous', '', '', 0, 'switcher', '_sys_form_input_sys_anonymous', '_sys_form_input_anonymous', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
+('bx_posts', 'bx_posts', 'disable_comments', '1', '', 0, 'switcher', '_bx_posts_form_entry_input_sys_disable_comments', '_bx_posts_form_entry_input_disable_comments', '', 0, 0, 0, '', '', '', '', '', '', 'Int', '', 1, 0);
+
+
+
+INSERT INTO `sys_form_display_inputs`(`display_name`, `input_name`, `visible_for_levels`, `active`, `order`) VALUES 
+('bx_posts_entry_add', 'delete_confirm', 2147483647, 0, 1),
+('bx_posts_entry_add', 'title', 2147483647, 1, 2),
+('bx_posts_entry_add', 'cat', 2147483647, 1, 3),
+('bx_posts_entry_add', 'text', 2147483647, 1, 4),
+('bx_posts_entry_add', 'attachments', 2147483647, 1, 5),
+('bx_posts_entry_add', 'pictures', 2147483647, 1, 6),
+('bx_posts_entry_add', 'videos', 2147483647, 1, 7),
+('bx_posts_entry_add', 'files', 2147483647, 1, 8),
+('bx_posts_entry_add', 'polls', 2147483647, 1, 9),
+('bx_posts_entry_add', 'covers', 2147483647, 1, 10),
+('bx_posts_entry_add', 'allow_view_to', 2147483647, 1, 11),
+('bx_posts_entry_add', 'location', 2147483647, 1, 12),
+('bx_posts_entry_add', 'published', 192, 1, 13),
+('bx_posts_entry_add', 'disable_comments', 192, 1, 14),
+('bx_posts_entry_add', 'do_publish', 2147483647, 1, 15),
+
+('bx_posts_entry_delete', 'delete_confirm', 2147483647, 1, 1),
+('bx_posts_entry_delete', 'do_submit', 2147483647, 1, 2),
+
+('bx_posts_entry_edit', 'do_publish', 2147483647, 0, 1),
+('bx_posts_entry_edit', 'delete_confirm', 2147483647, 0, 2),
+('bx_posts_entry_edit', 'title', 2147483647, 1, 3),
+('bx_posts_entry_edit', 'cat', 2147483647, 1, 4),
+('bx_posts_entry_edit', 'text', 2147483647, 1, 5),
+('bx_posts_entry_edit', 'attachments', 2147483647, 1, 6),
+('bx_posts_entry_edit', 'pictures', 2147483647, 1, 7),
+('bx_posts_entry_edit', 'videos', 2147483647, 1, 8),
+('bx_posts_entry_edit', 'files', 2147483647, 1, 9),
+('bx_posts_entry_edit', 'polls', 2147483647, 1, 10),
+('bx_posts_entry_edit', 'covers', 2147483647, 1, 11),
+('bx_posts_entry_edit', 'allow_view_to', 2147483647, 1, 12),
+('bx_posts_entry_edit', 'location', 2147483647, 1, 13),
+('bx_posts_entry_edit', 'disable_comments', 192, 1, 14),
+('bx_posts_entry_edit', 'published', 192, 1, 15),
+('bx_posts_entry_edit', 'do_submit', 2147483647, 1, 16),
+
+('bx_posts_entry_view', 'cat', 2147483647, 1, 1),
+('bx_posts_entry_view', 'added', 2147483647, 1, 2),
+('bx_posts_entry_view', 'changed', 2147483647, 1, 3),
+('bx_posts_entry_view', 'published', 192, 1, 4);
+
+-- FORMS: poll
+INSERT INTO `sys_objects_form` (`object`, `module`, `title`, `action`, `form_attrs`, `submit_name`, `table`, `key`, `uri`, `uri_title`, `params`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES
+('bx_posts_poll', 'bx_posts', '_bx_posts_form_poll', '', '', 'do_submit', 'bx_posts_polls', 'id', '', '', 'a:1:{s:14:"checker_helper";s:28:"BxPostsFormPollCheckerHelper";}', 0, 1, 'BxPostsFormPoll', 'modules/boonex/posts/classes/BxPostsFormPoll.php');
+
+INSERT INTO `sys_form_displays` (`display_name`, `module`, `object`, `title`, `view_mode`) VALUES
+('bx_posts_poll_add', 'bx_posts', 'bx_posts_poll', '_bx_posts_form_poll_display_add', 0);
+
+INSERT INTO `sys_form_inputs` (`object`, `module`, `name`, `value`, `values`, `checked`, `type`, `caption_system`, `caption`, `info`, `required`, `collapsed`, `html`, `attrs`, `attrs_tr`, `attrs_wrapper`, `checker_func`, `checker_params`, `checker_error`, `db_pass`, `db_params`, `editable`, `deletable`) VALUES
+('bx_posts_poll', 'bx_posts', 'text', '', '', 0, 'textarea', '_bx_posts_form_poll_input_sys_text', '_bx_posts_form_poll_input_text', '', 1, 0, 0, '', '', '', 'Avail', '', '_bx_posts_form_poll_input_text_err', 'Xss', '', 1, 0),
+('bx_posts_poll', 'bx_posts', 'answers', '', '', 0, 'custom', '_bx_posts_form_poll_input_sys_answers', '_bx_posts_form_poll_input_answers', '', 1, 0, 0, '', '', '', 'AvailAnswers', '', '_bx_posts_form_poll_input_answers_err', '', '', 1, 0),
+('bx_posts_poll', 'bx_posts', 'controls', '', 'do_submit,do_cancel', 0, 'input_set', '', '', '', 0, 0, 0, '', '', '', '', '', '', '', '', 0, 0),
+('bx_posts_poll', 'bx_posts', 'do_submit', '_bx_posts_form_poll_input_do_submit', '', 0, 'submit', '_bx_posts_form_poll_input_sys_do_submit', '', '', 0, 0, 0, '', '', '', '', '', '', '', '', 0, 0),
+('bx_posts_poll', 'bx_posts', 'do_cancel', '_bx_posts_form_poll_input_do_cancel', '', 0, 'button', '_bx_posts_form_poll_input_do_cancel', '', '', 0, 0, 0, 'a:2:{s:7:"onclick";s:45:"$(''.bx-popup-applied:visible'').dolPopupHide()";s:5:"class";s:22:"bx-def-margin-sec-left";}', '', '', '', '', '', '', '', 0, 0);
+
+INSERT INTO `sys_form_display_inputs` (`display_name`, `input_name`, `visible_for_levels`, `active`, `order`) VALUES
+('bx_posts_poll_add', 'text', 2147483647, 1, 1),
+('bx_posts_poll_add', 'answers', 2147483647, 1, 2),
+('bx_posts_poll_add', 'controls', 2147483647, 1, 3),
+('bx_posts_poll_add', 'do_submit', 2147483647, 1, 4),
+('bx_posts_poll_add', 'do_cancel', 2147483647, 1, 5);
+
+
+-- PRE-VALUES
+INSERT INTO `sys_form_pre_lists`(`key`, `title`, `module`, `use_for_sets`) VALUES
+('bx_posts_cats', '_bx_posts_pre_lists_cats', 'bx_posts', '0');
+
+INSERT INTO `sys_form_pre_values`(`Key`, `Value`, `Order`, `LKey`, `LKey2`) VALUES
+('bx_posts_cats', '', 0, '_sys_please_select', ''),
+('bx_posts_cats', '1', 1, '_bx_posts_cat_Animals_Pets', ''),
+('bx_posts_cats', '2', 2, '_bx_posts_cat_Architecture', ''),
+('bx_posts_cats', '3', 3, '_bx_posts_cat_Art', ''),
+('bx_posts_cats', '4', 4, '_bx_posts_cat_Cars_Motorcycles', ''),
+('bx_posts_cats', '5', 5, '_bx_posts_cat_Celebrities', ''),
+('bx_posts_cats', '6', 6, '_bx_posts_cat_Design', ''),
+('bx_posts_cats', '7', 7, '_bx_posts_cat_DIY_Crafts', ''),
+('bx_posts_cats', '8', 8, '_bx_posts_cat_Education', ''),
+('bx_posts_cats', '9', 9, '_bx_posts_cat_Film_Music_Books', ''),
+('bx_posts_cats', '10', 10, '_bx_posts_cat_Food_Drink', ''),
+('bx_posts_cats', '11', 11, '_bx_posts_cat_Gardening', ''),
+('bx_posts_cats', '12', 12, '_bx_posts_cat_Geek', ''),
+('bx_posts_cats', '13', 13, '_bx_posts_cat_Hair_Beauty', ''),
+('bx_posts_cats', '14', 14, '_bx_posts_cat_Health_Fitness', ''),
+('bx_posts_cats', '15', 15, '_bx_posts_cat_History', ''),
+('bx_posts_cats', '16', 16, '_bx_posts_cat_Holidays_Events', ''),
+('bx_posts_cats', '17', 17, '_bx_posts_cat_Home_Decor', ''),
+('bx_posts_cats', '18', 18, '_bx_posts_cat_Humor', ''),
+('bx_posts_cats', '19', 19, '_bx_posts_cat_Illustrations_Posters', ''),
+('bx_posts_cats', '20', 20, '_bx_posts_cat_Kids_Parenting', ''),
+('bx_posts_cats', '21', 21, '_bx_posts_cat_Mens_Fashion', ''),
+('bx_posts_cats', '22', 22, '_bx_posts_cat_Outdoors', ''),
+('bx_posts_cats', '23', 23, '_bx_posts_cat_Photography', ''),
+('bx_posts_cats', '24', 24, '_bx_posts_cat_Products', ''),
+('bx_posts_cats', '25', 25, '_bx_posts_cat_Quotes', ''),
+('bx_posts_cats', '26', 26, '_bx_posts_cat_Science_Nature', ''),
+('bx_posts_cats', '27', 27, '_bx_posts_cat_Sports', ''),
+('bx_posts_cats', '28', 28, '_bx_posts_cat_Tattoos', ''),
+('bx_posts_cats', '29', 29, '_bx_posts_cat_Technology', ''),
+('bx_posts_cats', '30', 30, '_bx_posts_cat_Travel', ''),
+('bx_posts_cats', '31', 31, '_bx_posts_cat_Weddings', ''),
+('bx_posts_cats', '32', 32, '_bx_posts_cat_Womens_Fashion', '');
+
+-- COMMENTS
+INSERT INTO `sys_objects_cmts` (`Name`, `Module`, `Table`, `CharsPostMin`, `CharsPostMax`, `CharsDisplayMax`, `Html`, `PerView`, `PerViewReplies`, `BrowseType`, `IsBrowseSwitch`, `PostFormPosition`, `NumberOfLevels`, `IsDisplaySwitch`, `IsRatable`, `ViewingThreshold`, `IsOn`, `RootStylePrefix`, `BaseUrl`, `ObjectVote`, `TriggerTable`, `TriggerFieldId`, `TriggerFieldAuthor`, `TriggerFieldTitle`, `TriggerFieldComments`, `ClassName`, `ClassFile`) VALUES
+('bx_posts', 'bx_posts', 'bx_posts_cmts', 1, 5000, 1000, 3, 5, 3, 'tail', 1, 'bottom', 1, 1, 1, -3, 1, 'cmt', 'page.php?i=view-post&id={object_id}', '', 'bx_posts_posts', 'id', 'author', 'title', 'comments', '', '');
+
+-- VOTES
+INSERT INTO `sys_objects_vote` (`Name`, `TableMain`, `TableTrack`, `PostTimeout`, `MinValue`, `MaxValue`, `IsUndo`, `IsOn`, `TriggerTable`, `TriggerFieldId`, `TriggerFieldAuthor`, `TriggerFieldRate`, `TriggerFieldRateCount`, `ClassName`, `ClassFile`) VALUES 
+('bx_posts', 'bx_posts_votes', 'bx_posts_votes_track', '604800', '1', '1', '0', '1', 'bx_posts_posts', 'id', 'author', 'rate', 'votes', '', ''),
+('bx_posts_reactions', 'bx_posts_reactions', 'bx_posts_reactions_track', '604800', '1', '1', '1', '1', 'bx_posts_posts', 'id', 'author', 'rrate', 'rvotes', 'BxTemplVoteReactions', ''),
+('bx_posts_poll_answers', 'bx_posts_polls_answers_votes', 'bx_posts_polls_answers_votes_track', '604800', '1', '1', '0', '1', 'bx_posts_polls_answers', 'id', 'author_id', 'rate', 'votes', 'BxPostsVotePollAnswers', 'modules/boonex/posts/classes/BxPostsVotePollAnswers.php');
+
+-- SCORES
+INSERT INTO `sys_objects_score` (`name`, `module`, `table_main`, `table_track`, `post_timeout`, `is_on`, `trigger_table`, `trigger_field_id`, `trigger_field_author`, `trigger_field_score`, `trigger_field_cup`, `trigger_field_cdown`, `class_name`, `class_file`) VALUES 
+('bx_posts', 'bx_posts', 'bx_posts_scores', 'bx_posts_scores_track', '604800', '0', 'bx_posts_posts', 'id', 'author', 'score', 'sc_up', 'sc_down', '', '');
+
+-- REPORTS
+INSERT INTO `sys_objects_report` (`name`, `table_main`, `table_track`, `is_on`, `base_url`, `trigger_table`, `trigger_field_id`, `trigger_field_author`, `trigger_field_count`, `class_name`, `class_file`) VALUES 
+('bx_posts', 'bx_posts_reports', 'bx_posts_reports_track', '1', 'page.php?i=view-post&id={object_id}', 'bx_posts_posts', 'id', 'author', 'reports', '', '');
+
+-- VIEWS
+INSERT INTO `sys_objects_view` (`name`, `table_track`, `period`, `is_on`, `trigger_table`, `trigger_field_id`, `trigger_field_author`, `trigger_field_count`, `class_name`, `class_file`) VALUES 
+('bx_posts', 'bx_posts_views_track', '86400', '1', 'bx_posts_posts', 'id', 'author', 'views', '', '');
+
+-- FAFORITES
+INSERT INTO `sys_objects_favorite` (`name`, `table_track`, `is_on`, `is_undo`, `is_public`, `base_url`, `trigger_table`, `trigger_field_id`, `trigger_field_author`, `trigger_field_count`, `class_name`, `class_file`) VALUES 
+('bx_posts', 'bx_posts_favorites_track', '1', '1', '1', 'page.php?i=view-post&id={object_id}', 'bx_posts_posts', 'id', 'author', 'favorites', '', '');
+
+-- FEATURED
+INSERT INTO `sys_objects_feature` (`name`, `is_on`, `is_undo`, `base_url`, `trigger_table`, `trigger_field_id`, `trigger_field_author`, `trigger_field_flag`, `class_name`, `class_file`) VALUES 
+('bx_posts', '1', '1', 'page.php?i=view-post&id={object_id}', 'bx_posts_posts', 'id', 'author', 'featured', '', '');
+
+-- CONTENT INFO
+INSERT INTO `sys_objects_content_info` (`name`, `title`, `alert_unit`, `alert_action_add`, `alert_action_update`, `alert_action_delete`, `class_name`, `class_file`) VALUES
+('bx_posts', '_bx_posts', 'bx_posts', 'added', 'edited', 'deleted', '', ''),
+('bx_posts_cmts', '_bx_posts_cmts', 'bx_posts', 'commentPost', 'commentUpdated', 'commentRemoved', 'BxDolContentInfoCmts', '');
+
+INSERT INTO `sys_content_info_grids` (`object`, `grid_object`, `grid_field_id`, `condition`, `selection`) VALUES
+('bx_posts', 'bx_posts_administration', 'id', '', ''),
+('bx_posts', 'bx_posts_common', 'id', '', '');
+
+-- SEARCH EXTENDED
+INSERT INTO `sys_objects_search_extended` (`object`, `object_content_info`, `module`, `title`, `active`, `class_name`, `class_file`) VALUES
+('bx_posts', 'bx_posts', 'bx_posts', '_bx_posts_search_extended', 1, '', ''),
+('bx_posts_cmts', 'bx_posts_cmts', 'bx_posts', '_bx_posts_search_extended_cmts', 1, 'BxTemplSearchExtendedCmts', '');
+
+-- STUDIO: page & widget
+INSERT INTO `sys_std_pages`(`index`, `name`, `header`, `caption`, `icon`) VALUES
+(3, 'bx_posts', '_bx_posts', '_bx_posts', 'bx_posts@modules/boonex/posts/|std-icon.svg');
+SET @iPageId = LAST_INSERT_ID();
+
+SET @iParentPageId = (SELECT `id` FROM `sys_std_pages` WHERE `name` = 'home');
+SET @iParentPageOrder = (SELECT MAX(`order`) FROM `sys_std_pages_widgets` WHERE `page_id` = @iParentPageId);
+INSERT INTO `sys_std_widgets` (`page_id`, `module`, `url`, `click`, `icon`, `caption`, `cnt_notices`, `cnt_actions`) VALUES
+(@iPageId, 'bx_posts', '{url_studio}module.php?name=bx_posts', '', 'bx_posts@modules/boonex/posts/|std-icon.svg', '_bx_posts', '', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:11:"get_actions";s:6:"params";a:0:{}s:5:"class";s:18:"TemplStudioModules";}');
+INSERT INTO `sys_std_pages_widgets` (`page_id`, `widget_id`, `order`) VALUES
+(@iParentPageId, LAST_INSERT_ID(), IF(ISNULL(@iParentPageOrder), 1, @iParentPageOrder + 1));
+