AntonLV 7 лет назад
Родитель
Сommit
e4810498dd
100 измененных файлов с 15413 добавлено и 0 удалено
  1. 51 0
      modules/boonex/albums/updates/10.0.1_10.0.2/install/config.php
  2. 13 0
      modules/boonex/albums/updates/10.0.1_10.0.2/install/installer.php
  3. 6 0
      modules/boonex/albums/updates/10.0.1_10.0.2/install/langs/en.xml
  4. 203 0
      modules/boonex/albums/updates/10.0.1_10.0.2/source/classes/BxAlbumsConfig.php
  5. 143 0
      modules/boonex/albums/updates/10.0.1_10.0.2/source/install/config.php
  6. 272 0
      modules/boonex/albums/updates/10.0.1_10.0.2/source/install/langs/en.xml
  7. 51 0
      modules/boonex/convos/updates/10.0.1_10.0.2/install/config.php
  8. 13 0
      modules/boonex/convos/updates/10.0.1_10.0.2/install/installer.php
  9. 262 0
      modules/boonex/convos/updates/10.0.1_10.0.2/source/classes/BxCnvTemplate.php
  10. 104 0
      modules/boonex/convos/updates/10.0.1_10.0.2/source/install/config.php
  11. 37 0
      modules/boonex/convos/updates/10.0.1_10.0.2/source/template/images/icons/std-icon.svg
  12. 51 0
      modules/boonex/decorous/updates/10.0.0_10.0.1/install/config.php
  13. 26 0
      modules/boonex/decorous/updates/10.0.0_10.0.1/install/installer.php
  14. 14 0
      modules/boonex/decorous/updates/10.0.0_10.0.1/install/sql/install.sql
  15. 45 0
      modules/boonex/decorous/updates/10.0.0_10.0.1/source/data/template/system/_sub_header.html
  16. 891 0
      modules/boonex/decorous/updates/10.0.0_10.0.1/source/data/template/system/css/default.less
  17. 9 0
      modules/boonex/decorous/updates/10.0.0_10.0.1/source/data/template/system/menu_main_submenu_bar.html
  18. 354 0
      modules/boonex/decorous/updates/10.0.0_10.0.1/source/data/template/system/scripts/BxTemplConfig.php
  19. 68 0
      modules/boonex/decorous/updates/10.0.0_10.0.1/source/install/config.php
  20. 440 0
      modules/boonex/decorous/updates/10.0.0_10.0.1/source/install/sql/install.sql
  21. 53 0
      modules/boonex/elasticsearch/updates/9.0.2_10.0.0/install/config.php
  22. 13 0
      modules/boonex/elasticsearch/updates/9.0.2_10.0.0/install/installer.php
  23. 253 0
      modules/boonex/elasticsearch/updates/9.0.2_10.0.0/source/classes/BxElsApi.php
  24. 479 0
      modules/boonex/elasticsearch/updates/9.0.2_10.0.0/source/classes/BxElsModule.php
  25. 83 0
      modules/boonex/elasticsearch/updates/9.0.2_10.0.0/source/classes/BxElsSearch.php
  26. 71 0
      modules/boonex/elasticsearch/updates/9.0.2_10.0.0/source/install/config.php
  27. 51 0
      modules/boonex/files/updates/10.0.0_10.0.1/install/config.php
  28. 13 0
      modules/boonex/files/updates/10.0.0_10.0.1/install/installer.php
  29. 6 0
      modules/boonex/files/updates/10.0.0_10.0.1/install/langs/en.xml
  30. 157 0
      modules/boonex/files/updates/10.0.0_10.0.1/source/classes/BxFilesConfig.php
  31. 136 0
      modules/boonex/files/updates/10.0.0_10.0.1/source/install/config.php
  32. 230 0
      modules/boonex/files/updates/10.0.0_10.0.1/source/install/langs/en.xml
  33. 51 0
      modules/boonex/forum/updates/10.0.0_10.0.1/install/config.php
  34. 13 0
      modules/boonex/forum/updates/10.0.0_10.0.1/install/installer.php
  35. 6 0
      modules/boonex/forum/updates/10.0.0_10.0.1/install/langs/en.xml
  36. 5 0
      modules/boonex/forum/updates/10.0.0_10.0.1/install/sql/enable.sql
  37. 118 0
      modules/boonex/forum/updates/10.0.0_10.0.1/source/classes/BxForumCmts.php
  38. 192 0
      modules/boonex/forum/updates/10.0.0_10.0.1/source/classes/BxForumConfig.php
  39. 293 0
      modules/boonex/forum/updates/10.0.0_10.0.1/source/classes/BxForumGrid.php
  40. 100 0
      modules/boonex/forum/updates/10.0.0_10.0.1/source/classes/BxForumMenuSnippetMeta.php
  41. 909 0
      modules/boonex/forum/updates/10.0.0_10.0.1/source/classes/BxForumModule.php
  42. 204 0
      modules/boonex/forum/updates/10.0.0_10.0.1/source/classes/BxForumTemplate.php
  43. 136 0
      modules/boonex/forum/updates/10.0.0_10.0.1/source/install/config.php
  44. 294 0
      modules/boonex/forum/updates/10.0.0_10.0.1/source/install/langs/en.xml
  45. 561 0
      modules/boonex/forum/updates/10.0.0_10.0.1/source/install/sql/enable.sql
  46. 212 0
      modules/boonex/forum/updates/10.0.0_10.0.1/source/template/css/main.css
  47. 15 0
      modules/boonex/forum/updates/10.0.0_10.0.1/source/template/entry-preview.html
  48. 41 0
      modules/boonex/forum/updates/10.0.0_10.0.1/source/template/images/icons/std-icon.svg
  49. 1 0
      modules/boonex/forum/updates/10.0.0_10.0.1/source/template/unit_gallery.html
  50. 1 0
      modules/boonex/forum/updates/10.0.0_10.0.1/source/template/units.html
  51. 51 0
      modules/boonex/froala/updates/10.0.0_10.0.1/install/config.php
  52. 13 0
      modules/boonex/froala/updates/10.0.0_10.0.1/install/installer.php
  53. 258 0
      modules/boonex/froala/updates/10.0.0_10.0.1/source/classes/BxFroalaEditor.php
  54. 76 0
      modules/boonex/froala/updates/10.0.0_10.0.1/source/install/config.php
  55. 51 0
      modules/boonex/glossary/updates/10.0.0_10.0.1/install/config.php
  56. 13 0
      modules/boonex/glossary/updates/10.0.0_10.0.1/install/installer.php
  57. 6 0
      modules/boonex/glossary/updates/10.0.0_10.0.1/install/langs/en.xml
  58. 156 0
      modules/boonex/glossary/updates/10.0.0_10.0.1/source/classes/BxGlsrConfig.php
  59. 136 0
      modules/boonex/glossary/updates/10.0.0_10.0.1/source/install/config.php
  60. 227 0
      modules/boonex/glossary/updates/10.0.0_10.0.1/source/install/langs/en.xml
  61. 51 0
      modules/boonex/lucid/updates/10.0.0_10.0.1/install/config.php
  62. 26 0
      modules/boonex/lucid/updates/10.0.0_10.0.1/install/installer.php
  63. 17 0
      modules/boonex/lucid/updates/10.0.0_10.0.1/install/sql/install.sql
  64. 11 0
      modules/boonex/lucid/updates/10.0.0_10.0.1/source/data/template/bx_events/menu_main_submenu.html
  65. 9 0
      modules/boonex/lucid/updates/10.0.0_10.0.1/source/data/template/bx_forum/css/main.css
  66. 11 0
      modules/boonex/lucid/updates/10.0.0_10.0.1/source/data/template/bx_groups/menu_main_submenu.html
  67. 11 0
      modules/boonex/lucid/updates/10.0.0_10.0.1/source/data/template/bx_organizations/menu_main_submenu.html
  68. 11 0
      modules/boonex/lucid/updates/10.0.0_10.0.1/source/data/template/bx_persons/menu_main_submenu.html
  69. 11 0
      modules/boonex/lucid/updates/10.0.0_10.0.1/source/data/template/bx_spaces/menu_main_submenu.html
  70. 48 0
      modules/boonex/lucid/updates/10.0.0_10.0.1/source/data/template/system/_sub_header.html
  71. 48 0
      modules/boonex/lucid/updates/10.0.0_10.0.1/source/data/template/system/css/cmts.css
  72. 5 0
      modules/boonex/lucid/updates/10.0.0_10.0.1/source/data/template/system/css/cover.css
  73. 1179 0
      modules/boonex/lucid/updates/10.0.0_10.0.1/source/data/template/system/css/default.less
  74. 590 0
      modules/boonex/lucid/updates/10.0.0_10.0.1/source/data/template/system/css/menu.css
  75. 9 0
      modules/boonex/lucid/updates/10.0.0_10.0.1/source/data/template/system/menu_main_submenu_bar.html
  76. 423 0
      modules/boonex/lucid/updates/10.0.0_10.0.1/source/data/template/system/scripts/BxTemplConfig.php
  77. 68 0
      modules/boonex/lucid/updates/10.0.0_10.0.1/source/install/config.php
  78. 821 0
      modules/boonex/lucid/updates/10.0.0_10.0.1/source/install/sql/install.sql
  79. 51 0
      modules/boonex/market/updates/10.0.0_10.0.1/install/config.php
  80. 13 0
      modules/boonex/market/updates/10.0.0_10.0.1/install/installer.php
  81. 6 0
      modules/boonex/market/updates/10.0.0_10.0.1/install/langs/en.xml
  82. 250 0
      modules/boonex/market/updates/10.0.0_10.0.1/source/classes/BxMarketConfig.php
  83. 327 0
      modules/boonex/market/updates/10.0.0_10.0.1/source/classes/BxMarketFormEntry.php
  84. 428 0
      modules/boonex/market/updates/10.0.0_10.0.1/source/classes/BxMarketTemplate.php
  85. 140 0
      modules/boonex/market/updates/10.0.0_10.0.1/source/install/config.php
  86. 453 0
      modules/boonex/market/updates/10.0.0_10.0.1/source/install/langs/en.xml
  87. 57 0
      modules/boonex/market/updates/10.0.0_10.0.1/source/template/css/entry.css
  88. 23 0
      modules/boonex/market/updates/10.0.0_10.0.1/source/template/entry-text.html
  89. 44 0
      modules/boonex/market/updates/10.0.0_10.0.1/source/template/form_ghost_template_file.html
  90. 51 0
      modules/boonex/nexus/updates/10.0.0_10.0.1/install/config.php
  91. 13 0
      modules/boonex/nexus/updates/10.0.0_10.0.1/install/installer.php
  92. 68 0
      modules/boonex/nexus/updates/10.0.0_10.0.1/source/install/config.php
  93. 57 0
      modules/boonex/nexus/updates/10.0.0_10.0.1/source/template/styles.html
  94. 52 0
      modules/boonex/notifications/updates/10.0.0_10.0.1/install/config.php
  95. 13 0
      modules/boonex/notifications/updates/10.0.0_10.0.1/install/installer.php
  96. 298 0
      modules/boonex/notifications/updates/10.0.0_10.0.1/source/classes/BxNtfsDb.php
  97. 510 0
      modules/boonex/notifications/updates/10.0.0_10.0.1/source/classes/BxNtfsModule.php
  98. 340 0
      modules/boonex/notifications/updates/10.0.0_10.0.1/source/classes/BxNtfsTemplate.php
  99. 82 0
      modules/boonex/notifications/updates/10.0.0_10.0.1/source/install/config.php
  100. 51 0
      modules/boonex/ocean/updates/10.0.0_10.0.1/install/config.php

+ 51 - 0
modules/boonex/albums/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' => 'Albums',
+    'version_from' => '10.0.1',
+    'version_to' => '10.0.2',
+    'vendor' => 'BoonEx',
+
+    'compatible_with' => array(
+        '10.0.0-B2'
+    ),
+
+    /**
+     * 'home_dir' and 'home_uri' - should be unique. Don't use spaces in 'home_uri' and the other special chars.
+     */
+    'home_dir' => 'boonex/albums/updates/update_10.0.1_10.0.2/',
+    'home_uri' => 'albums_update_1001_1002',
+
+    'module_dir' => 'boonex/albums/',
+    'module_uri' => 'albums',
+
+    'db_prefix' => 'bx_albums_',
+    'class_prefix' => 'BxAlbums',
+
+    /**
+     * Installation/Uninstallation Section.
+     */
+    'install' => array(
+        'execute_sql' => 0,
+        'update_files' => 1,
+        'update_languages' => 1,
+        'clear_db_cache' => 0,
+    ),
+
+    /**
+     * Category for language keys.
+     */
+    'language_category' => 'Albums',
+
+    /**
+     * Files Section
+     */
+    'delete_files' => array(),
+);

+ 13 - 0
modules/boonex/albums/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 BxAlbumsUpdater extends BxDolStudioUpdater
+{
+    function __construct($aConfig)
+    {
+        parent::__construct($aConfig);
+    }
+}

+ 6 - 0
modules/boonex/albums/updates/10.0.1_10.0.2/install/langs/en.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources name="en" flag="gb" title="English">
+	<string_add name="_bx_albums_txt_sample_reaction_single"><![CDATA['{0}' reaction to album]]></string_add>
+
+	<string_upd name="_bx_albums_txt_all_entries_by"><![CDATA[{0} albums]]></string_upd>
+</resources>

+ 203 - 0
modules/boonex/albums/updates/10.0.1_10.0.2/source/classes/BxAlbumsConfig.php

@@ -0,0 +1,203 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Albums Albums
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+bx_import('BxDolInformer');
+
+class BxAlbumsConfig extends BxBaseModTextConfig
+{
+    function __construct($aModule)
+    {
+        parent::__construct($aModule);
+
+        $aMenuItems2Methods = array (
+            'add-images-to-album' => 'checkAllowedEdit',
+            'edit-album' => 'checkAllowedEdit',
+            'edit-image' => 'checkAllowedEdit',
+            'delete-album' => 'checkAllowedDelete',
+        );
+
+        $this->CNF = array (
+
+            // module icon
+            'ICON' => 'far image col-blue1',
+
+            // database tables
+            'TABLE_ENTRIES' => $aModule['db_prefix'] . 'albums',
+            'TABLE_ENTRIES_FULLTEXT' => 'title_text',
+            'TABLE_FILES2ENTRIES' => $aModule['db_prefix'] . 'files2albums',
+            'TABLE_FILES' => $aModule['db_prefix'] . 'files',
+
+            // database fields
+            'FIELD_ID' => 'id',
+            'FIELD_AUTHOR' => 'author',
+            'FIELD_ADDED' => 'added',
+            'FIELD_CHANGED' => 'changed',
+            'FIELD_TITLE' => 'title',
+            'FIELD_TEXT' => 'text',
+            'FIELD_TEXT_ID' => 'album-desc',
+            'FIELD_ALLOW_VIEW_TO' => 'allow_view_to',
+            'FIELD_PHOTO' => 'pictures',
+            'FIELD_THUMB' => 'thumb',
+            'FIELD_VIEWS' => 'views',
+            'FIELD_COMMENTS' => 'comments',
+            'FIELD_STATUS' => 'status',
+            'FIELD_STATUS_ADMIN' => 'status_admin',
+            'FIELD_LOCATION_PREFIX' => 'location',
+            'FIELD_LABELS' => 'labels',
+            'FIELDS_WITH_KEYWORDS' => 'auto', // can be 'auto', array of fields or comma separated string of field names, works only when OBJECT_METATAGS is specified
+            'FIELDS_DELAYED_PROCESSING' => 'pictures', // can be array of fields or comma separated string of field names
+
+            // page URIs
+            'URI_VIEW_ENTRY' => 'view-album',
+            'URI_VIEW_MEDIA' => 'view-album-media',
+            'URI_AUTHOR_ENTRIES' => 'albums-author',
+            'URI_ENTRIES_BY_CONTEXT' => 'albums-context',
+            'URI_ADD_ENTRY' => 'create-album',
+        	'URI_EDIT_ENTRY' => 'edit-album',
+        	'URI_MANAGE_COMMON' => 'albums-manage',
+
+            'URL_HOME' => 'page.php?i=albums-home',
+            'URL_POPULAR' => 'page.php?i=albums-popular',
+            'URL_UPDATED' => 'page.php?i=albums-home',
+            'URL_POPULAR_MEDIA' => 'page.php?i=albums-popular-media',
+            'URL_RECENT_MEDIA' => 'page.php?i=albums-recent-media', // TODO: add page
+        	'URL_MANAGE_COMMON' => 'page.php?i=albums-manage',
+        	'URL_MANAGE_ADMINISTRATION' => 'page.php?i=albums-administration',
+
+            // some params
+            'PARAM_CHARS_SUMMARY' => 'bx_albums_summary_chars',
+            'PARAM_CHARS_SUMMARY_PLAIN' => 'bx_albums_plain_summary_chars',
+            'PARAM_NUM_RSS' => 'bx_albums_rss_num',
+            'PARAM_SEARCHABLE_FIELDS' => 'bx_albums_searchable_fields',
+
+            // objects
+            'OBJECT_STORAGE' => 'bx_albums_files',
+            'OBJECT_IMAGES_TRANSCODER_PREVIEW' => 'bx_albums_proxy_preview',
+            'OBJECT_IMAGES_TRANSCODER_GALLERY' => '',
+            'OBJECT_IMAGES_TRANSCODER_BIG' => 'bx_albums_big',
+            'OBJECT_VIDEOS_TRANSCODERS' => array(
+                'poster' => 'bx_albums_video_poster_big', 
+                'poster_preview' => 'bx_albums_video_poster_preview', 
+                'mp4' => 'bx_albums_video_mp4', 
+                'mp4_hd' => 'bx_albums_video_mp4_hd'
+            ),
+            'OBJECT_VIDEO_TRANSCODER_HEIGHT' => '480px',
+            'OBJECT_TRANSCODER_BROWSE' => 'bx_albums_proxy_browse',
+            'OBJECT_TRANSCODER_COVER' => 'bx_albums_proxy_cover',
+            'OBJECT_REPORTS' => 'bx_albums',
+            'OBJECT_VIEWS' => 'bx_albums',
+            'OBJECT_VIEWS_MEDIA' => 'bx_albums_media',
+            'OBJECT_VOTES' => 'bx_albums',
+            'OBJECT_VOTES_MEDIA' => 'bx_albums_media',
+            'OBJECT_REACTIONS' => 'bx_albums_reactions',
+            'OBJECT_SCORES' => 'bx_albums',
+            'OBJECT_SCORES_MEDIA' => 'bx_albums_media',
+            'OBJECT_FAVORITES' => 'bx_albums',
+            'OBJECT_FAVORITES_MEDIA' => 'bx_albums_media',
+            'OBJECT_FEATURED' => 'bx_albums',
+            'OBJECT_FEATURED_MEDIA' => 'bx_albums_media',
+            'OBJECT_METATAGS' => 'bx_albums',
+            'OBJECT_METATAGS_MEDIA' => 'bx_albums_media',
+            'OBJECT_METATAGS_MEDIA_CAMERA' => 'bx_albums_media_camera',
+            'OBJECT_COMMENTS' => 'bx_albums',
+            'OBJECT_COMMENTS_MEDIA' => 'bx_albums_media',
+            'OBJECT_PRIVACY_VIEW' => 'bx_albums_allow_view_to',
+            'OBJECT_FORM_ENTRY' => 'bx_albums',
+            'OBJECT_FORM_ENTRY_DISPLAY_VIEW' => 'bx_albums_entry_view',
+            'OBJECT_FORM_ENTRY_DISPLAY_ADD' => 'bx_albums_entry_add',
+            'OBJECT_FORM_ENTRY_DISPLAY_EDIT' => 'bx_albums_entry_edit',
+            'OBJECT_FORM_ENTRY_DISPLAY_DELETE' => 'bx_albums_entry_delete',
+            'OBJECT_FORM_MEDIA' => 'bx_albums_media',
+            'OBJECT_FORM_MEDIA_DISPLAY_EDIT' => 'bx_albums_media_edit',
+            'OBJECT_MENU_ACTIONS_VIEW_ENTRY' => 'bx_albums_view', // actions menu on view entry page
+            'OBJECT_MENU_ACTIONS_VIEW_ENTRY_ALL' => 'bx_albums_view_actions', // all actions menu on view entry page
+            'OBJECT_MENU_ACTIONS_VIEW_MEDIA' => 'bx_albums_view_media', // actions menu on view media page
+            'OBJECT_MENU_ACTIONS_VIEW_MEDIA_ALL' => 'bx_albums_view_actions_media', // all actions menu on view media page
+            'OBJECT_MENU_ACTIONS_VIEW_MEDIA_UNIT' => 'bx_albums_view_actions_media_unit', // actions menu on media unit
+            'OBJECT_MENU_ACTIONS_MY_ENTRIES' => 'bx_albums_my', // actions menu on my entries page
+            'OBJECT_MENU_SUBMENU' => 'bx_albums_submenu', // main module submenu
+            'OBJECT_MENU_SUBMENU_VIEW_ENTRY' => 'bx_albums_view_submenu', // view entry submenu
+            'OBJECT_MENU_SUBMENU_VIEW_ENTRY_MAIN_SELECTION' => 'albums-home', // first item in view entry submenu from main module submenu
+            'OBJECT_MENU_SNIPPET_META' => 'bx_albums_snippet_meta', // menu for snippet meta info
+            'OBJECT_MENU_MANAGE_TOOLS' => 'bx_albums_menu_manage_tools', //manage menu in content administration tools
+            'OBJECT_GRID_ADMINISTRATION' => 'bx_albums_administration',
+        	'OBJECT_GRID_COMMON' => 'bx_albums_common',
+        	'OBJECT_UPLOADERS' => array('bx_albums_simple', 'bx_albums_html5', 'bx_albums_crop'),
+
+            // menu items which visibility depends on custom visibility checking
+            'MENU_ITEM_TO_METHOD' => array (
+                'bx_albums_my' => array (
+                    'create-album' => 'checkAllowedAdd',
+                ),
+                'bx_albums_view' => $aMenuItems2Methods,
+                'bx_albums_view_media' => $aMenuItems2Methods,
+            ),
+
+            // informer messages
+            'INFORMERS' => array (
+                'processing' => array (
+                    'name' => 'bx_albums-processing',
+                    'map' => array (
+                        'awaiting' => array('msg' => '_bx_albums_txt_processing_awaiting', 'type' => BX_INFORMER_ALERT),
+                        'failed' => array('msg' => '_bx_albums_txt_processing_failed', 'type' => BX_INFORMER_ERROR)
+                    ),
+                ),
+            ),
+
+            // some language keys
+            'T' => array (
+                'txt_sample_single' => '_bx_albums_txt_sample_single',
+            	'txt_sample_single_with_article' => '_bx_albums_txt_sample_single_with_article',
+            	'txt_sample_comment_single' => '_bx_albums_txt_sample_comment_single',
+            	'txt_sample_vote_single' => '_bx_albums_txt_sample_vote_single',
+                'txt_sample_reaction_single' => '_bx_albums_txt_sample_reaction_single',
+                'txt_sample_score_up_single' => '_bx_albums_txt_sample_score_up_single',
+                'txt_sample_score_down_single' => '_bx_albums_txt_sample_score_down_single',
+                'txt_sample_action_changed' => '_bx_albums_txt_sample_action_changed',
+                'txt_media_single' => '_bx_albums_txt_media_single',
+                'txt_media_comment_single' => '_bx_albums_txt_media_comment_single',
+            	'txt_media_vote_single' => '_bx_albums_txt_media_vote_single',
+                'txt_media_score_up_single' => '_bx_albums_txt_media_score_up_single',
+                'txt_media_score_down_single' => '_bx_albums_txt_media_score_down_single',
+            	'form_field_author' => '_bx_albums_form_entry_input_author',
+            	'grid_action_err_delete' => '_bx_albums_grid_action_err_delete',
+            	'grid_txt_account_manager' => '_bx_albums_grid_txt_account_manager',
+                'filter_item_active' => '_bx_albums_grid_filter_item_title_adm_active',
+            	'filter_item_hidden' => '_bx_albums_grid_filter_item_title_adm_hidden',
+            	'filter_item_select_one_filter1' => '_bx_albums_grid_filter_item_title_adm_select_one_filter1',
+            	'menu_item_manage_my' => '_bx_albums_menu_item_title_manage_my',
+            	'menu_item_manage_all' => '_bx_albums_menu_item_title_manage_all',
+                'txt_all_entries_by' => '_bx_albums_txt_all_entries_by',
+                'txt_all_entries_in' => '_bx_albums_txt_all_entries_in',
+            	'txt_all_entries_by_author' => '_bx_albums_page_title_browse_by_author',
+                'txt_all_entries_by_context' => '_bx_albums_page_title_browse_by_context',
+            ),
+        );
+
+        $this->_aJsClasses = array(
+        	'main' => 'BxAlbumsMain',
+        	'manage_tools' => 'BxAlbumsManageTools'
+        );
+
+        $this->_aJsObjects = array(
+        	'main' => 'oBxAlbumsMain',
+        	'manage_tools' => 'oBxAlbumsManageTools'
+        );
+
+        $this->_aGridObjects = array(
+        	'common' => $this->CNF['OBJECT_GRID_COMMON'],
+        	'administration' => $this->CNF['OBJECT_GRID_ADMINISTRATION'],
+        	
+        );
+    }
+}
+
+/** @} */

+ 143 - 0
modules/boonex/albums/updates/10.0.1_10.0.2/source/install/config.php

@@ -0,0 +1,143 @@
+<?php
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Albums Albums
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+$aConfig = array(
+
+    /**
+     * Main Section.
+     */
+    'type' => BX_DOL_MODULE_TYPE_MODULE,
+    'name' => 'bx_albums',
+    'title' => 'Albums',
+    'note' => 'Photos & videos',
+    'version' => '10.0.2',
+    'vendor' => 'BoonEx',
+    'help_url' => 'http://feed.una.io/?section={module_name}',
+
+    'compatible_with' => array(
+        '10.0.0-B2'
+    ),
+
+    /**
+     * 'home_dir' and 'home_uri' - should be unique. Don't use spaces in 'home_uri' and the other special chars.
+     */
+    'home_dir' => 'boonex/albums/',
+    'home_uri' => 'albums',
+
+    'db_prefix' => 'bx_albums_',
+    'class_prefix' => 'BxAlbums',
+
+    /**
+     * Category for language keys.
+     */
+    'language_category' => 'Albums',
+
+    /**
+     * 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_albums_files'
+    ),
+
+    /**
+     * Transcoders.
+     */
+    'transcoders' => array(
+        'bx_albums_preview',
+        'bx_albums_browse',
+        'bx_albums_big',
+        'bx_albums_video_poster_browse',
+        'bx_albums_video_poster_preview',
+        'bx_albums_video_poster_big',
+        'bx_albums_video_mp4',
+        'bx_albums_video_mp4_hd',
+    ),
+
+    /**
+     * Extended Search Forms.
+     */
+    'esearches' => array(
+        'bx_albums',
+    	'bx_albums_media',
+    	'bx_albums_cmts',
+        'bx_albums_media_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(),
+
+    /**
+     * Connections Section
+     */
+    'relations' => array(
+    	'bx_timeline',
+    	'bx_notifications'
+    ),
+
+);
+
+/** @} */

+ 272 - 0
modules/boonex/albums/updates/10.0.1_10.0.2/source/install/langs/en.xml

@@ -0,0 +1,272 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources name="en" flag="gb" title="English">
+
+	<string name="_bx_albums"><![CDATA[Albums]]></string>
+	<string name="_bx_albums_cmts"><![CDATA[Albums' Comments]]></string>
+	<string name="_bx_albums_media"><![CDATA[Images]]></string>
+	<string name="_bx_albums_media_cmts"><![CDATA[Images' Comments]]></string>
+
+	<string name="_bx_albums_option_summary_chars"><![CDATA[Number of characters in auto-cropped album summary]]></string>
+	<string name="_bx_albums_option_plain_summary_chars"><![CDATA[Number of characters in plain album description when album hasn't thumb]]></string>
+	<string name="_bx_albums_option_per_page_browse"><![CDATA[Number of items per page]]></string>
+	<string name="_bx_albums_option_per_page_profile"><![CDATA[Number of items on profile page]]></string>
+	<string name="_bx_albums_option_album_browsing_unit"><![CDATA[Number of items in album card]]></string>
+	<string name="_bx_albums_option_rss_num"><![CDATA[Number of items in RSS feed]]></string>
+	<string name="_bx_albums_option_searchable_fields"><![CDATA[Searchable fields for keyword search]]></string>
+
+	<string name="_bx_albums_form_entry"><![CDATA[Albums]]></string>
+	<string name="_bx_albums_form_entry_display_add"><![CDATA[Add Album]]></string>
+    <string name="_bx_albums_form_entry_display_edit"><![CDATA[Edit Album]]></string>
+	<string name="_bx_albums_form_entry_display_add_images"><![CDATA[Add Images To Album]]></string>
+	<string name="_bx_albums_form_entry_display_delete"><![CDATA[Delete Album]]></string>
+	<string name="_bx_albums_form_entry_display_view"><![CDATA[View Album]]></string>
+	<string name="_bx_albums_form_entry_input_author"><![CDATA[Author]]></string>
+	<string name="_bx_albums_form_entry_input_sys_do_submit"><![CDATA[Submit]]></string>
+	<string name="_bx_albums_form_entry_input_do_submit"><![CDATA[Submit]]></string>
+	<string name="_bx_albums_form_entry_input_sys_title"><![CDATA[Caption]]></string>
+	<string name="_bx_albums_form_entry_input_title"><![CDATA[Caption]]></string>
+	<string name="_bx_albums_form_entry_input_title_err"><![CDATA[Caption is essential. Please, fill in this field]]></string>
+	<string name="_bx_albums_form_entry_input_sys_text"><![CDATA[Album Description]]></string>
+	<string name="_bx_albums_form_entry_input_text"><![CDATA[Album Description]]></string>
+	<string name="_bx_albums_form_entry_input_sys_delete_confirm"><![CDATA[Delete confirmation]]></string>
+	<string name="_bx_albums_form_entry_input_delete_confirm"><![CDATA[I am sure I want to delete this album]]></string>
+	<string name="_bx_albums_form_entry_input_delete_confirm_info"><![CDATA[This action can not be undone]]></string>
+	<string name="_bx_albums_form_entry_input_delete_confirm_error"><![CDATA[Please check this checkbox if you really want to delete the album]]></string>
+	<string name="_bx_albums_form_entry_input_sys_pictures"><![CDATA[Pictures]]></string>
+	<string name="_bx_albums_form_entry_input_pictures"><![CDATA[Pictures]]></string>
+    <string name="_bx_albums_form_entry_input_sys_allow_view_to"><![CDATA[Visibility]]></string>
+    <string name="_bx_albums_form_entry_input_allow_view_to"><![CDATA[Visibility]]></string>
+    <string name="_bx_albums_form_entry_file_title"><![CDATA[Caption]]></string>
+	<string name="_bx_albums_form_entry_input_sys_date_added"><![CDATA[Created]]></string>
+	<string name="_bx_albums_form_entry_input_date_added"><![CDATA[Created]]></string>
+	<string name="_bx_albums_form_entry_input_sys_date_changed"><![CDATA[Updated]]></string>
+    <string name="_bx_albums_form_entry_input_date_changed"><![CDATA[Updated]]></string>
+
+        <string name="_bx_albums_form_media"><![CDATA[Medias]]></string>
+        <string name="_bx_albums_form_media_display_edit"><![CDATA[Edit Media]]></string>
+        <string name="_bx_albums_form_media_input_sys_title"><![CDATA[Caption]]></string>
+	<string name="_bx_albums_form_media_input_title"><![CDATA[Caption]]></string>
+        <string name="_bx_albums_form_media_input_sys_do_submit"><![CDATA[Submit]]></string>
+	<string name="_bx_albums_form_media_input_do_submit"><![CDATA[Submit]]></string>
+        <string name="_bx_albums_form_media_input_sys_do_cancel"><![CDATA[Cancel]]></string>
+	<string name="_bx_albums_form_media_input_do_cancel"><![CDATA[Cancel]]></string>
+
+	<string name="_bx_albums_acl_action_create_entry"><![CDATA[Create Album]]></string>
+	<string name="_bx_albums_acl_action_delete_entry"><![CDATA[Delete Album]]></string>
+	<string name="_bx_albums_acl_action_view_entry"><![CDATA[View Album]]></string>
+	<string name="_bx_albums_acl_action_set_thumb"><![CDATA[Set Album Cover]]></string>
+	<string name="_bx_albums_acl_action_edit_any_entry"><![CDATA[Edit Any Album]]></string>
+
+	<string name="_bx_albums_page_title_sys_create_entry"><![CDATA[New Album]]></string>
+	<string name="_bx_albums_page_title_create_entry"><![CDATA[New Album]]></string>
+	<string name="_bx_albums_page_block_title_create_entry"><![CDATA[New Album]]></string>
+	<string name="_bx_albums_page_title_sys_edit_entry"><![CDATA[Edit]]></string>
+    <string name="_bx_albums_page_title_edit_entry"><![CDATA[Edit]]></string>
+	<string name="_bx_albums_page_title_sys_add_images"><![CDATA[Add/Edit Pictures]]></string>
+	<string name="_bx_albums_page_title_add_images"><![CDATA[Add/Edit Pictures]]></string>
+    <string name="_bx_albums_page_block_title_edit_entry"><![CDATA[Edit]]></string>
+	<string name="_bx_albums_page_block_title_add_images"><![CDATA[Add/Edit Pictures]]></string>
+    <string name="_bx_albums_page_title_sys_delete_entry"><![CDATA[Delete]]></string>
+    <string name="_bx_albums_page_title_delete_entry"><![CDATA[Delete]]></string>
+    <string name="_bx_albums_page_block_title_delete_entry"><![CDATA[Delete]]></string>
+	<string name="_bx_albums_page_title_sys_view_entry"><![CDATA[View Album]]></string>
+	<string name="_bx_albums_page_title_view_entry"><![CDATA[{title}]]></string>
+	<string name="_bx_albums_page_title_sys_view_media"><![CDATA[View Image]]></string>
+	<string name="_bx_albums_page_title_view_media"><![CDATA[{title}]]></string>
+	<string name="_bx_albums_page_block_title_entry_view_media"><![CDATA[View Image]]></string>
+	<string name="_bx_albums_page_block_title_entry_view_media_exif"><![CDATA[EXIF]]></string>
+	<string name="_bx_albums_page_block_title_entry_attachments"><![CDATA[Attachments]]></string>
+	<string name="_bx_albums_page_block_title_entry_text"><![CDATA[Album Description]]></string>
+	<string name="_bx_albums_page_title_browse"><![CDATA[Albums]]></string>
+	<string name="_bx_albums_page_title_search_results"><![CDATA[Albums matching "{0}"]]></string>
+	<string name="_bx_albums_page_title_browse_by_author"><![CDATA[{display_name}'s Albums]]></string>
+  <string name="_bx_albums_page_title_browse_by_context"><![CDATA[Albums in {display_name}]]></string>
+	<string name="_bx_albums_page_title_browse_featured"><![CDATA[Featured Albums]]></string>
+	<string name="_bx_albums_page_title_browse_featured_media"><![CDATA[Featured Media]]></string>
+    <string name="_bx_albums_page_title_browse_recent"><![CDATA[Latest Albums]]></string>
+    <string name="_bx_albums_page_title_browse_popular"><![CDATA[Popular Albums]]></string>
+    <string name="_bx_albums_page_title_browse_popular_media"><![CDATA[Top Images]]></string>
+    <string name="_bx_albums_page_title_browse_recent_media"><![CDATA[Recent Images]]></string>
+    <string name="_bx_albums_page_title_browse_media_in_album"><![CDATA[Images]]></string>
+    <string name="_bx_albums_page_title_browse_updated"><![CDATA[Updated Albums]]></string>
+    <string name="_bx_albums_page_title_sys_home"><![CDATA[Albums Home]]></string>
+    <string name="_bx_albums_page_title_home"><![CDATA[Albums]]></string>
+    <string name="_bx_albums_page_block_title_featured_entries_view_extended"><![CDATA[Featured Albums]]></string>
+    <string name="_bx_albums_page_block_title_featured_entries_view_gallery_media"><![CDATA[Featured Media]]></string>
+    <string name="_bx_albums_page_block_title_recent_entries"><![CDATA[Latest Albums]]></string>
+    <string name="_bx_albums_page_block_title_entry_all_actions"><![CDATA[All Actions]]></string>
+    <string name="_bx_albums_page_block_title_entry_social_sharing"><![CDATA[Share]]></string>
+    <string name="_bx_albums_page_block_title_entry_author"><![CDATA[Author]]></string>
+    <string name="_bx_albums_page_block_title_entry_info"><![CDATA[Info]]></string>
+    <string name="_bx_albums_page_block_title_entry_actions"><![CDATA[Actions]]></string>
+    <string name="_bx_albums_page_block_title_entry_comments"><![CDATA[Comments]]></string>
+    <string name="_bx_albums_page_block_title_entry_comments_link"><![CDATA[Comments to <a href="{entry_link}">{title}</a>]]></string>
+    <string name="_bx_albums_page_block_title_entry_location"><![CDATA[Location]]></string>
+    <string name="_bx_albums_page_title_sys_entries_popular"><![CDATA[Popular]]></string>
+    <string name="_bx_albums_page_title_entries_popular"><![CDATA[Popular]]></string>
+    <string name="_bx_albums_page_title_sys_entries_popular_media"><![CDATA[Top Images]]></string>
+    <string name="_bx_albums_page_title_entries_popular_media"><![CDATA[Top Images]]></string>
+    <string name="_bx_albums_page_block_title_popular_entries"><![CDATA[Popular]]></string>
+    <string name="_bx_albums_page_block_title_popular_media"><![CDATA[Top Images]]></string>
+    <string name="_bx_albums_page_block_title_recent_media"><![CDATA[Recent Images]]></string>
+    <string name="_bx_albums_page_block_title_updated_entries"><![CDATA[Updated Albums]]></string>
+    <string name="_bx_albums_page_title_sys_view_entry_comments"><![CDATA[Comments]]></string>
+    <string name="_bx_albums_page_title_view_entry_comments"><![CDATA[Comments to {title}]]></string>
+    <string name="_bx_albums_page_title_sys_entries_of_author"><![CDATA[Albums of author]]></string>
+    <string name="_bx_albums_page_title_entries_of_author"><![CDATA[{display_name}'s albums]]></string>
+    <string name="_bx_albums_page_title_sys_entries_in_context"><![CDATA[Albums in context]]></string>
+    <string name="_bx_albums_page_title_entries_in_context"><![CDATA[Albums in {display_name}]]></string>
+    <string name="_bx_albums_page_block_title_favorites_of_author"><![CDATA[Favorite albums by <a href="{profile_link}">{display_name}</a>]]></string>
+    <string name="_bx_albums_page_block_title_sys_favorites_of_author"><![CDATA[Favorite albums of author]]></string>
+    <string name="_bx_albums_page_block_title_favorites_of_author_media"><![CDATA[Favorite media by <a href="{profile_link}">{display_name}</a>]]></string>
+    <string name="_bx_albums_page_block_title_sys_favorites_of_author_media"><![CDATA[Favorite media of author]]></string>
+    <string name="_bx_albums_page_block_title_entries_of_author"><![CDATA[Albums by <a href="{profile_link}">{display_name}</a>]]></string>   
+    <string name="_bx_albums_page_block_title_sys_entries_of_author"><![CDATA[Albums of author]]></string>
+    <string name="_bx_albums_page_block_title_entries_in_context"><![CDATA[Albums in <a href="{profile_link}">{display_name}</a>]]></string>
+    <string name="_bx_albums_page_block_title_sys_entries_in_context"><![CDATA[Albums in context]]></string>
+    <string name="_bx_albums_page_block_title_entries_actions"><![CDATA[Albums actions]]></string>
+    <string name="_bx_albums_page_block_title_browse_cmts"><![CDATA[Albums' Comments]]></string>
+    <string name="_bx_albums_page_block_title_browse_cmts_media"><![CDATA[Images Comments]]></string>
+	<string name="_bx_albums_page_title_sys_manage"><![CDATA[Manage Own Albums]]></string>
+	<string name="_bx_albums_page_title_sys_manage_administration"><![CDATA[Manage All Albums]]></string>
+	<string name="_bx_albums_page_title_manage"><![CDATA[Manage]]></string>
+	<string name="_bx_albums_page_block_title_system_manage"><![CDATA[Manage Own Albums]]></string>
+	<string name="_bx_albums_page_block_title_system_manage_administration"><![CDATA[Manage All Albums]]></string>  
+	<string name="_bx_albums_page_block_title_manage"><![CDATA[Manage]]></string>
+	<string name="_bx_albums_page_block_title_popular_keywords_albums"><![CDATA[Popular Albums Hashtags]]></string>
+	<string name="_bx_albums_page_block_title_popular_keywords_media"><![CDATA[Popular Media Hashtags]]></string>
+	<string name="_bx_albums_page_block_title_popular_keywords_media_camera"><![CDATA[Popular Cameras]]></string>
+	<string name="_bx_albums_page_block_title_my_entries"><![CDATA[My Albums]]></string>
+  	<string name="_bx_albums_page_title_sys_entries_search"><![CDATA[Search]]></string>
+    <string name="_bx_albums_page_title_entries_search"><![CDATA[Search]]></string>
+    <string name="_bx_albums_page_block_title_search_form"><![CDATA[Search Form]]></string>
+    <string name="_bx_albums_page_block_title_search_results"><![CDATA[Search Results]]></string>
+    <string name="_bx_albums_page_block_title_search_form_media"><![CDATA[Images Search Form]]></string>
+    <string name="_bx_albums_page_block_title_search_results_media"><![CDATA[Images Search Results]]></string>
+    <string name="_bx_albums_page_block_title_search_form_cmts"><![CDATA[Comments Search Form]]></string>
+    <string name="_bx_albums_page_block_title_search_results_cmts"><![CDATA[Comments Search Results]]></string>
+    <string name="_bx_albums_page_block_title_search_form_media_cmts"><![CDATA[Images Comments Search Form]]></string>
+    <string name="_bx_albums_page_block_title_search_results_media_cmts"><![CDATA[Images Comments Search Results]]></string>
+    <string name="_bx_albums_page_block_title_sys_recent_media_view_showcase"><![CDATA[Recent Images (Showcase View)]]></string>
+    <string name="_bx_albums_page_block_title_recent_media_view_showcase"><![CDATA[Recent Images]]></string>
+    <string name="_bx_albums_page_block_title_sys_popular_media_view_showcase"><![CDATA[Top Images (Showcase View)]]></string>
+    <string name="_bx_albums_page_block_title_popular_media_view_showcase"><![CDATA[Top Images]]></string>
+    <string name="_bx_albums_page_block_title_sys_featured_media_view_showcase"><![CDATA[Featured Images (Showcase View)]]></string>
+    <string name="_bx_albums_page_block_title_featured_media_view_showcase"><![CDATA[Featured Images]]></string>
+	<string name="_bx_albums_page_block_title_sys_entry_context"><![CDATA[Posted in]]></string>
+  	<string name="_bx_albums_page_block_title_entry_context"><![CDATA[Posted in]]></string>
+
+    <string name="_bx_albums_menu_set_title_view_entry"><![CDATA[Album Actions]]></string>
+    <string name="_bx_albums_menu_title_view_entry"><![CDATA[Album Actions]]></string>
+    <string name="_bx_albums_menu_set_title_view_media"><![CDATA[Media Actions]]></string>
+    <string name="_bx_albums_menu_title_view_media"><![CDATA[Media Actions]]></string>
+    <string name="_bx_albums_menu_set_title_view_actions_media"><![CDATA[Media All Actions]]></string>
+    <string name="_bx_albums_menu_title_view_actions_media"><![CDATA[Media All Actions]]></string>
+    <string name="_bx_albums_menu_set_title_view_actions_media_unit"><![CDATA[Media Card Actions]]></string>
+    <string name="_bx_albums_menu_title_view_actions_media_unit"><![CDATA[Media Card Actions]]></string>
+    <string name="_bx_albums_menu_title_submenu"><![CDATA[Albums Submenu]]></string>
+    <string name="_bx_albums_menu_set_title_submenu"><![CDATA[Albums Submenu]]></string>
+    <string name="_bx_albums_menu_item_title_system_create_entry"><![CDATA[Album]]></string>
+    <string name="_bx_albums_menu_item_title_create_entry"><![CDATA[Album]]></string>
+    <string name="_bx_albums_menu_item_title_system_edit_entry"><![CDATA[Edit]]></string>
+    <string name="_bx_albums_menu_item_title_edit_entry"><![CDATA[Edit]]></string>
+    <string name="_bx_albums_menu_item_title_system_edit_album"><![CDATA[Edit Album]]></string>
+    <string name="_bx_albums_menu_item_title_edit_album"><![CDATA[Edit Album]]></string>
+    <string name="_bx_albums_menu_item_title_system_add_images"><![CDATA[Add/Edit Pictures]]></string>
+    <string name="_bx_albums_menu_item_title_add_images"><![CDATA[Add/Edit Pictures]]></string>
+    <string name="_bx_albums_menu_item_title_system_edit_image"><![CDATA[Edit Image]]></string>
+    <string name="_bx_albums_menu_item_title_edit_image"><![CDATA[Edit Image]]></string>
+    <string name="_bx_albums_menu_item_title_system_delete_entry"><![CDATA[Delete]]></string>
+    <string name="_bx_albums_menu_item_title_delete_entry"><![CDATA[Delete]]></string>
+    <string name="_bx_albums_menu_item_title_system_view_entry"><![CDATA[View Album]]></string>
+    <string name="_bx_albums_menu_item_title_system_entries_home"><![CDATA[Albums]]></string>
+    <string name="_bx_albums_menu_item_title_entries_home"><![CDATA[Albums]]></string>
+    <string name="_bx_albums_menu_item_title_system_entries_recent"><![CDATA[Latest]]></string>
+    <string name="_bx_albums_menu_item_title_entries_recent"><![CDATA[Latest]]></string>
+    <string name="_bx_albums_menu_item_title_system_entries_search"><![CDATA[Search]]></string>
+    <string name="_bx_albums_menu_item_title_entries_search"><![CDATA[Search]]></string>
+    <string name="_bx_albums_menu_item_title_system_entries_manage"><![CDATA[Manage]]></string>
+    <string name="_bx_albums_menu_item_title_entries_manage"><![CDATA[Manage]]></string>
+    <string name="_bx_albums_menu_item_title_system_entries_popular"><![CDATA[Popular]]></string>
+    <string name="_bx_albums_menu_item_title_entries_popular"><![CDATA[Popular]]></string>
+    <string name="_bx_albums_menu_item_title_system_entries_popular_media"><![CDATA[Top Images]]></string>
+    <string name="_bx_albums_menu_item_title_entries_popular_media"><![CDATA[Top Images]]></string>
+    <string name="_bx_albums_menu_title_view_entry_submenu"><![CDATA[View Album Submenu]]></string>
+    <string name="_bx_albums_menu_set_title_view_entry_submenu"><![CDATA[View Album Submenu]]></string>
+    <string name="_bx_albums_menu_item_title_view_entry_submenu_entry"><![CDATA[Album]]></string>
+    <string name="_bx_albums_menu_item_title_view_entry_submenu_comments"><![CDATA[Comments]]></string>
+    <string name="_bx_albums_menu_item_title_system_view_entry_comments"><![CDATA[Comments]]></string>
+    <string name="_bx_albums_menu_item_title_system_view_entries_author"><![CDATA[Albums]]></string>
+    <string name="_bx_albums_menu_item_title_view_entries_author"><![CDATA[Albums]]></string>
+    <string name="_bx_albums_menu_item_title_system_view_entries_in_context"><![CDATA[Albums]]></string>
+    <string name="_bx_albums_menu_item_title_view_entries_in_context"><![CDATA[Albums]]></string>
+    <string name="_bx_albums_menu_title_entries_my"><![CDATA[My Albums Action Menu]]></string>
+    <string name="_bx_albums_menu_set_title_entries_my"><![CDATA[My Albums Menu]]></string>
+	<string name="_bx_albums_menu_item_title_system_manage_my_albums"><![CDATA[My albums]]></string>
+    <string name="_bx_albums_menu_item_title_manage_my_albums"><![CDATA[Albums]]></string>
+    <string name="_bx_albums_menu_set_title_manage_tools"><![CDATA[Manage Tools Submenu]]></string>
+    <string name="_bx_albums_menu_title_manage_tools"><![CDATA[Manage Tools Submenu]]></string>
+	<string name="_bx_albums_menu_item_title_system_admt_albums"><![CDATA[Albums]]></string>
+	<string name="_bx_albums_menu_item_title_admt_albums"><![CDATA[Albums]]></string>
+	<string name="_bx_albums_menu_item_title_manage_my"><![CDATA[My Albums]]></string>
+	<string name="_bx_albums_menu_item_title_manage_all"><![CDATA[All Albums]]></string>
+        <string name="_bx_albums_menu_item_title_system_sm_items"><![CDATA[Items]]></string>
+        <string name="_bx_albums_menu_item_title_sm_items"><![CDATA[{0} items]]></string>
+
+	<string name="_bx_albums_grid_filter_item_title_adm_select_one_filter1"><![CDATA[All Statuses]]></string>
+	<string name="_bx_albums_grid_filter_item_title_adm_active"><![CDATA[Active]]></string>
+	<string name="_bx_albums_grid_filter_item_title_adm_hidden"><![CDATA[Hidden]]></string>
+	<string name="_bx_albums_grid_column_title_adm_active"><![CDATA[Active]]></string>
+    <string name="_bx_albums_grid_column_title_adm_title"><![CDATA[Caption]]></string>
+    <string name="_bx_albums_grid_column_title_adm_added"><![CDATA[Added]]></string>
+    <string name="_bx_albums_grid_column_title_adm_author"><![CDATA[Author]]></string>
+    <string name="_bx_albums_grid_action_title_adm_edit"><![CDATA[Edit]]></string>
+    <string name="_bx_albums_grid_action_title_adm_delete"><![CDATA[Delete]]></string>
+    <string name="_bx_albums_grid_action_title_adm_more_actions"><![CDATA[More Actions]]></string>
+    <string name="_bx_albums_grid_action_err_delete"><![CDATA[Cannot delete the selected album(s).]]></string>
+    <string name="_bx_albums_grid_txt_account_manager"><![CDATA[Redirect to manage account.]]></string>
+
+    <string name="_bx_albums_chart_growth"><![CDATA[Albums: Growth]]></string>
+    <string name="_bx_albums_chart_growth_speed"><![CDATA[Albums: Growth Speed]]></string>
+    <string name="_bx_albums_chart_growth_media"><![CDATA[Images: Growth]]></string>
+    <string name="_bx_albums_chart_growth_speed_media"><![CDATA[Images: Growth Speed]]></string>
+
+    <string name="_bx_albums_search_extended"><![CDATA[Albums Search]]></string>
+    <string name="_bx_albums_search_extended_media"><![CDATA[Images Search]]></string>
+    <string name="_bx_albums_search_extended_cmts"><![CDATA[Albums Comments Search]]></string>
+    <string name="_bx_albums_search_extended_media_cmts"><![CDATA[Images Comments Search]]></string>
+
+    <string name="_bx_albums_txt_all_entries_by"><![CDATA[{0} albums]]></string>
+    <string name="_bx_albums_txt_all_entries_in"><![CDATA[<a href="{0}">All Albums in {1} ({2})</a>]]></string>
+    <string name="_bx_albums_txt_sample_single"><![CDATA[album]]></string>
+    <string name="_bx_albums_txt_sample_single_with_article"><![CDATA[an album]]></string>
+    <string name="_bx_albums_txt_sample_comment_single"><![CDATA[comment to album]]></string>
+    <string name="_bx_albums_txt_sample_vote_single"><![CDATA[vote to album]]></string>
+    <string name="_bx_albums_txt_sample_reaction_single"><![CDATA['{0}' reaction to album]]></string>
+    <string name="_bx_albums_txt_sample_score_up_single"><![CDATA[score up vote to album]]></string>
+    <string name="_bx_albums_txt_sample_score_down_single"><![CDATA[score down vote to album]]></string>
+    <string name="_bx_albums_txt_sample_action_changed"><![CDATA[changed {0}]]></string>
+    <string name="_bx_albums_txt_media_single"><![CDATA[image]]></string>
+    <string name="_bx_albums_txt_media_comment_single"><![CDATA[image's comment]]></string>
+    <string name="_bx_albums_txt_media_vote_single"><![CDATA[image's vote]]></string>
+    <string name="_bx_albums_txt_media_score_up_single"><![CDATA[image's score up vote]]></string>
+    <string name="_bx_albums_txt_media_score_down_single"><![CDATA[image's score down vote]]></string>
+    <string name="_bx_albums_txt_media_title_alt"><![CDATA[{0}'s media]]></string>
+    <string name="_bx_albums_txt_media_title_empty"><![CDATA[No Caption]]></string>
+    <string name="_bx_albums_txt_media_album_link"><![CDATA[<a href="{0}">{1}</a> album by <a href="{2}">{3}</a>]]></string>
+    <string name="_bx_albums_txt_media_album_camera"><![CDATA[Camera]]></string>
+    <string name="_bx_albums_txt_media_album_focal_length"><![CDATA[Focal length]]></string>
+    <string name="_bx_albums_txt_media_album_focal_length_value"><![CDATA[{0}mm]]></string>
+    <string name="_bx_albums_txt_media_album_aperture"><![CDATA[Aperture]]></string>
+    <string name="_bx_albums_txt_media_album_shutter_speed"><![CDATA[Exposure time]]></string>
+    <string name="_bx_albums_txt_media_album_shutter_speed_value"><![CDATA[{0}s]]></string>
+    <string name="_bx_albums_txt_media_album_iso"><![CDATA[ISO]]></string>
+    <string name="_bx_albums_txt_processing_awaiting"><![CDATA[Scheduled for publishing as soon as video conversion is complete.]]></string>
+    <string name="_bx_albums_txt_processing_failed"><![CDATA[Album isn't published because video conversion failed, edit video to fix the issue.]]></string>
+
+    <string name="_bx_albums_txt_err_cannot_perform_action"><![CDATA[Cannot perform the action. Please report.]]></string>
+
+    <string name="_bx_albums_alert_action_medias_added"><![CDATA[add images]]></string>
+    <string name="_bx_albums_alert_action_medias_added_follow_member"><![CDATA[New media]]></string>
+    <string name="_bx_albums_alert_action_medias_added_follow_context"><![CDATA[New media]]></string>
+</resources>

+ 51 - 0
modules/boonex/convos/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' => 'Conversations',
+    'version_from' => '10.0.1',
+    'version_to' => '10.0.2',
+    'vendor' => 'BoonEx',
+
+    'compatible_with' => array(
+        '10.0.0-B2'
+    ),
+
+    /**
+     * 'home_dir' and 'home_uri' - should be unique. Don't use spaces in 'home_uri' and the other special chars.
+     */
+    'home_dir' => 'boonex/convos/updates/update_10.0.1_10.0.2/',
+    'home_uri' => 'convos_update_1001_1002',
+
+    'module_dir' => 'boonex/convos/',
+    'module_uri' => 'convos',
+
+    'db_prefix' => 'bx_convos_',
+    'class_prefix' => 'BxCnv',
+
+    /**
+     * Installation/Uninstallation Section.
+     */
+    'install' => array(
+        'execute_sql' => 0,
+        'update_files' => 1,
+        'update_languages' => 0,
+        'clear_db_cache' => 0,
+    ),
+
+    /**
+     * Category for language keys.
+     */
+    'language_category' => 'Conversations',
+
+    /**
+     * Files Section
+     */
+    'delete_files' => array(),
+);

+ 13 - 0
modules/boonex/convos/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 BxCnvUpdater extends BxDolStudioUpdater
+{
+    function __construct($aConfig)
+    {
+        parent::__construct($aConfig);
+    }
+}

+ 262 - 0
modules/boonex/convos/updates/10.0.1_10.0.2/source/classes/BxCnvTemplate.php

@@ -0,0 +1,262 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Convos Convos
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+/*
+ * Module representation.
+ */
+class BxCnvTemplate extends BxBaseModTextTemplate
+{
+    /**
+     * Constructor
+     */
+    function __construct(&$oConfig, &$oDb)
+    {
+        $this->MODULE = 'bx_convos';
+        parent::__construct($oConfig, $oDb);
+    }
+
+    public function entryCollaborators ($aContentInfo, $iMaxVisible = 2, $sFloat = 'left')
+    {
+        $oModule = BxDolModule::getInstance($this->MODULE);
+        $CNF = &$oModule->_oConfig->CNF;
+
+        $aCollaborators = $this->_oDb->getCollaborators($aContentInfo[$CNF['FIELD_ID']]);
+        //unset($aCollaborators[$aContentInfo[$CNF['FIELD_AUTHOR']]]);
+
+        // sort collaborators: first - current user, second - last replier, third - author, all others sorted by max number of posts
+        $aCollaborators = $oModule->sortCollaborators($aCollaborators, $aContentInfo['last_reply_profile_id'], $aContentInfo[$CNF['FIELD_AUTHOR']]);
+        $iCollaboratorsNum = count($aCollaborators);
+
+        // prepare template variables
+        $aVarsPopup = array (
+            'float' => 'none',
+            'bx_repeat:collaborators' => array(),
+            'bx_if:collaborators_more' => array(
+                'condition' => false,
+                'content' => array(),
+            ),
+        );
+        $aVars = array (
+            'float' => $sFloat,
+            'bx_repeat:collaborators' => array(),
+            'bx_if:collaborators_more' => array(
+                'condition' => $iCollaboratorsNum > $iMaxVisible,
+                'content' => array(
+                    'popup' => '',
+                    'title_more' => _t('_bx_cnv_more', $iCollaboratorsNum - $iMaxVisible),
+                    'float' => $sFloat,
+                    'id' => $this->MODULE . '-popup-' . $aContentInfo[$CNF['FIELD_ID']],
+                ),
+            ),
+        );
+        $i = 0;
+        foreach ($aCollaborators as $iProfileId => $iReadComments) {
+            $oProfile = BxDolProfile::getInstanceMagic($iProfileId);
+
+            $aCollaborator = array (
+                'id' => $oProfile->id(),
+                'unit' => $oProfile->getUnit(0, array('template' => 'unit_wo_info')),
+                'float' => $sFloat,
+                'class' => $aContentInfo[$CNF['FIELD_AUTHOR']] == $iProfileId ? 'bx-cnv-collaborator-author' : '',
+                'bx_if:last_replier' => array (
+                    'condition' => ($aContentInfo['last_reply_profile_id'] == $iProfileId),
+                    'content' => array (
+                        'id' => $oProfile->id(),
+                        'title' => bx_html_attribute(_t('_bx_cnv_collaborator_last_replier')),
+                    ),
+                ),
+                'bx_if:author'  => array (
+                    'condition' => $aContentInfo[$CNF['FIELD_AUTHOR']] == $iProfileId,
+                    'content' => array (
+                        'id' => $oProfile->id(),
+                        'title' => bx_html_attribute(_t('_bx_cnv_collaborator_author')),
+                    ),
+                ),
+            );
+
+            if ($i < $iMaxVisible)
+                $aVars['bx_repeat:collaborators'][] = $aCollaborator;
+            if ($i >= $iMaxVisible)
+                $aVarsPopup['bx_repeat:collaborators'][] = $aCollaborator;
+
+            ++$i;
+        }
+
+        if ($aVarsPopup['bx_repeat:collaborators']) {
+            $aVars['bx_if:collaborators_more']['content']['popup'] = BxTemplFunctions::getInstance()->transBox('', '<div class="bx-def-padding">' . $this->parseHtmlByName('collaborators.html', $aVarsPopup) . '</div>');
+        }
+
+        return $this->parseHtmlByName('collaborators.html', $aVars);
+    }
+
+    function getAuthorDesc ($aData, $oProfile)
+    {
+        $oModule = BxDolModule::getInstance($this->MODULE);
+        if ($aData['last_reply_timestamp'] == $aData[$oModule->_oConfig->CNF['FIELD_ADDED']])
+            return bx_time_js($aData[$oModule->_oConfig->CNF['FIELD_ADDED']], BX_FORMAT_DATE);
+
+        return _t('_bx_cnv_author_desc', bx_time_js($aData[$oModule->_oConfig->CNF['FIELD_ADDED']], BX_FORMAT_DATE), bx_time_js($aData['last_reply_timestamp'], BX_FORMAT_DATE));
+    }
+
+    function getMessageLabel ($r, $oProfileLast = null)
+    {
+        $oModule = BxDolModule::getInstance($this->MODULE);
+
+        if (!$oProfileLast) {
+            $oProfileLast = BxDolProfile::getInstance($r['last_reply_profile_id']);
+            if (!$oProfileLast)
+                $oProfileLast = BxDolProfileUndefined::getInstance();
+        }
+
+        if (!isset($r['unread_messages']))
+            $r['unread_messages'] = $r['comments'] - $r['read_comments'];
+
+        $bReadByAll = true;
+        $aCollaborators = $oModule->_oDb->getCollaborators($r['id']);
+        foreach ($aCollaborators as $iReadComments) {
+            if ($r['comments'] - $iReadComments) {
+                $bReadByAll = false;
+                break;
+            }
+        }
+
+        if (!isset($r['unread_messages']))
+            $r['unread_messages'] = $r['comments'] - $r['read_comments'];
+
+        $aVars = array (
+            'bx_if:unread_messages' => array (
+                'condition' => $r['unread_messages'] > 0,
+                'content' => array (
+                    'unread_messages' => $r['unread_messages'],
+                ),
+            ),
+            'bx_if:viewer_is_last_replier' => array (
+                'condition' => !$bReadByAll && $oProfileLast->id() == bx_get_logged_profile_id(),
+                'content' => array (),
+            ),
+            'bx_if:is_read_by_all' => array (
+                'condition' => $bReadByAll,
+                'content' => array (),
+            ),
+        );
+
+        return $this->parseHtmlByName('message_label.html', $aVars);
+    }
+
+    function getMessagesPreviews ($a)
+    {
+        if (empty($a))
+            return MsgBox(_t('_Empty'));
+
+        $oModule = BxDolModule::getInstance($this->MODULE);
+
+        $aVars = array(
+            'see_all_url' => BX_DOL_URL_ROOT . BxDolPermalinks::getInstance()->permalink($oModule->_oConfig->CNF['URL_HOME']),
+            'bx_repeat:messages' => array(),
+        );
+        foreach ($a as $r) {
+
+            $oProfileAuthor = BxDolProfile::getInstance($r['author']);
+            if (!$oProfileAuthor)
+                $oProfileAuthor = BxDolProfileUndefined::getInstance();
+
+            $oProfileLast = BxDolProfile::getInstance($r['last_reply_profile_id']);
+            if (!$oProfileLast)
+                $oProfileLast = BxDolProfileUndefined::getInstance();
+
+            $sText = strmaxtextlen($r['text'], 90);
+            $sTextCmt = strmaxtextlen($r['cmt_text'], 50);
+
+            $aVars['bx_repeat:messages'][] = array (
+                'id' => $r['id'],
+                'url' => BX_DOL_URL_ROOT . BxDolPermalinks::getInstance()->permalink('page.php?i=' . $oModule->_oConfig->CNF['URI_VIEW_ENTRY'] . '&id=' . $r['id']),
+                'text' => $sText ? $sText : $oProfileAuthor->getDisplayName(),
+                'cmt_text' => $sTextCmt,
+                'unread_messages' => $r['unread_messages'],
+                'last_reply_time_and_replier' => _t('_bx_cnv_x_date_by_x_replier', bx_time_js($r['last_reply_timestamp'], BX_FORMAT_DATE), $oProfileLast->getDisplayName()),
+                'font_weight' => $r['unread_messages'] > 0 ? 'bold' : 'normal',
+                'label' => $this->getMessageLabel($r, $oProfileLast),
+
+                'author_id' => $oProfileAuthor->id(),
+                'author_url' => $oProfileAuthor->getUrl(),
+                'author_title' => $oProfileAuthor->getDisplayName(),
+                'author_title_attr' => bx_html_attribute($oProfileAuthor->getDisplayName()),
+                'author_thumb_url' => $oProfileAuthor->getThumb(),
+
+                'last_replier_id' => $oProfileLast->id(),
+                'last_replier_url' => $oProfileLast->getUrl(),
+                'last_replier_title' => $oProfileLast->getDisplayName(),
+                'last_replier_title_attr' => bx_html_attribute($oProfileLast->getDisplayName()),
+                'last_replier_thumb_url' => $oProfileLast->getThumb(),
+            );
+        }
+        return $this->parseHtmlByName('messages_previews.html', $aVars);
+    }
+
+    function entryMessagePreviewInGrid ($r)
+    {
+        $oModule = BxDolModule::getInstance($this->MODULE);
+
+        $oProfileLast = BxDolProfile::getInstance($r['last_reply_profile_id']);
+        if (!$oProfileLast)
+            $oProfileLast = BxDolProfileUndefined::getInstance();
+
+        $sText = strmaxtextlen($r['text'], 100);
+        $sTextCmt = strmaxtextlen($r['cmt_text'], 100);
+
+        if (!isset($r['unread_messages']))
+            $r['unread_messages'] = $r['comments'] - $r['read_comments'];
+
+        $aVars = array (
+            'url' => BX_DOL_URL_ROOT . BxDolPermalinks::getInstance()->permalink('page.php?i=' . $oModule->_oConfig->CNF['URI_VIEW_ENTRY'] . '&id=' . $r['id']),
+            'text' => $sText ? $sText : _t('_Empty'),
+            'cmt_text' => $sTextCmt,
+            'last_reply_time_and_replier' => _t('_bx_cnv_x_date_by_x_replier', bx_time_js($r['last_reply_timestamp'], BX_FORMAT_DATE), $oProfileLast->getDisplayName()),
+            'bx_if:unread_messages' => array (
+                'condition' => $r['unread_messages'] > 0,
+                'content' => array (),
+            ),
+        );
+        $aVars['bx_if:unread_messages2'] = $aVars['bx_if:unread_messages'];
+        return $this->parseHtmlByName('message_preview_in_grid.html', $aVars);
+    }
+
+    function getAuthorAddon ($aData, $oProfile)
+    {
+        return '';
+    }
+
+	public function entryBreadcrumb($aContentInfo, $aTmplVarsItems = array())
+    {
+        $CNF = &BxDolModule::getInstance($this->MODULE)->_oConfig->CNF;
+
+        $oPermalink = BxDolPermalinks::getInstance();
+
+        $oAuthor = BxDolProfile::getInstance($aContentInfo[$CNF['FIELD_AUTHOR']]);
+		if(!$oAuthor)
+			$oAuthor = BxDolProfileUndefined::getInstance();
+
+        $sText = strmaxtextlen($aContentInfo[$CNF['FIELD_TEXT']], 50);
+        $iFolder = $this->_oDb->getConversationFolder($aContentInfo[$CNF['FIELD_ID']], bx_get_logged_profile_id());
+
+    	$aTmplVarsItems = array(array(
+        	'url' => BX_DOL_URL_ROOT . $oPermalink->permalink($CNF['URL_FOLDER'] . $iFolder),
+        	'title' => _t($CNF['T']['txt_folder_' . $iFolder])
+        ), array(
+        	'url' => BX_DOL_URL_ROOT . $oPermalink->permalink('page.php?i=' . $CNF['URI_VIEW_ENTRY'] . '&id=' . $aContentInfo[$CNF['FIELD_ID']]),
+        	'title' => $sText ? $sText : $oAuthor->getDisplayName(),
+        ));
+
+    	return parent::entryBreadcrumb($aContentInfo, $aTmplVarsItems);
+    }
+}
+
+/** @} */

+ 104 - 0
modules/boonex/convos/updates/10.0.1_10.0.2/source/install/config.php

@@ -0,0 +1,104 @@
+<?php
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Convos Convos
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+$aConfig = array(
+
+    /**
+     * Main Section.
+     */
+    'type' => BX_DOL_MODULE_TYPE_MODULE,
+    'name' => 'bx_convos',
+    'title' => 'Conversations',
+    'note' => 'Conversations module.',
+    'version' => '10.0.2',
+    'vendor' => 'BoonEx',
+    'help_url' => 'http://feed.una.io/?section={module_name}',
+
+    'compatible_with' => array(
+        '10.0.0-B2'
+    ),
+
+    /**
+     * 'home_dir' and 'home_uri' - should be unique. Don't use spaces in 'home_uri' and the other special chars.
+     */
+    'home_dir' => 'boonex/convos/',
+    'home_uri' => 'convos',
+
+    'db_prefix' => 'bx_convos_',
+    'class_prefix' => 'BxCnv',
+
+    /**
+     * Category for language keys.
+     */
+    'language_category' => 'Conversations',
+
+    /**
+     * Menu triggers.
+     */
+    'menu_triggers' => array(
+        'trigger_profile_view_actions',
+        'trigger_group_view_actions',
+    ),
+
+	/**
+     * Storage objects to automatically delete files from upon module uninstallation.
+     * Note. Don't add storage objects used in transcoder objects.
+     */
+    'storages' => array(
+    	'bx_convos_files'
+    ),
+
+	/**
+     * Transcoders.
+     */
+    'transcoders' => array(
+		'bx_convos_preview'
+    ),
+
+    /**
+     * 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,
+        'clear_db_cache' => 1,
+    ),
+	'enable_success' => array(
+    	'process_menu_triggers' => 1,
+    	'register_transcoders' => 1,
+        'clear_db_cache' => 1,
+    ),
+    'disable' => array (
+        'execute_sql' => 1,
+    	'unregister_transcoders' => 1,
+        'clear_db_cache' => 1,
+    ),
+    'disable_failed' => array (
+    	'register_transcoders' => 1,
+    	'clear_db_cache' => 1,
+    ),
+
+    /**
+     * Dependencies Section
+     */
+    'dependencies' => array(),
+);
+
+/** @} */

+ 37 - 0
modules/boonex/convos/updates/10.0.1_10.0.2/source/template/images/icons/std-icon.svg

@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="64px" height="64px" viewBox="0 0 64 64" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <!-- Generator: Sketch 55 (78076) - https://sketchapp.com -->
+    <title>conversations</title>
+    <desc>Created with Sketch.</desc>
+    <defs>
+        <path d="M32,64 C46.0222222,64 53.8173667,64 58.9086889,58.9086889 C64,53.8173667 64,46.0222222 64,32 C64,17.9777778 64,10.1826333 58.9086889,5.09131111 C53.8173667,0 46.0222222,0 32,0 C17.9777778,0 10.1826333,0 5.09131111,5.09131111 C0,10.1826333 0,17.9777778 0,32 C0,46.0222222 0,53.8173667 5.09131111,58.9086889 C10.1826333,64 17.9777778,64 32,64 Z" id="path-1"></path>
+        <linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="linearGradient-3">
+            <stop stop-color="#FDFEFF" offset="0%"></stop>
+            <stop stop-color="#FBFCFD" stop-opacity="0.9" offset="100%"></stop>
+        </linearGradient>
+        <path d="M34.125,0 L4.875,0 C2.18613281,0 0,2.18600503 0,4.87471504 L0,26.8109327 C0,29.4996428 2.18613281,31.6856478 4.875,31.6856478 L12.1875,31.6856478 L12.1875,38.0837113 C12.1875,38.830152 13.040625,39.2643063 13.6423828,38.8225353 L23.15625,31.6856478 L34.125,31.6856478 C36.8138672,31.6856478 39,29.4996428 39,26.8109327 L39,4.87471504 C39,2.18600503 36.8138672,0 34.125,0 Z M21.9375,20.1081996 C21.9375,20.4433362 21.6632812,20.7175389 21.328125,20.7175389 L10.359375,20.7175389 C10.0242187,20.7175389 9.75,20.4433362 9.75,20.1081996 L9.75,18.8895208 C9.75,18.5543841 10.0242187,18.2801814 10.359375,18.2801814 L21.328125,18.2801814 C21.6632812,18.2801814 21.9375,18.5543841 21.9375,18.8895208 L21.9375,20.1081996 Z M29.25,12.796127 C29.25,13.1312637 28.9757812,13.4054664 28.640625,13.4054664 L10.359375,13.4054664 C10.0242187,13.4054664 9.75,13.1312637 9.75,12.796127 L9.75,11.5774482 C9.75,11.2423116 10.0242187,10.9681088 10.359375,10.9681088 L28.640625,10.9681088 C28.9757812,10.9681088 29.25,11.2423116 29.25,11.5774482 L29.25,12.796127 Z" id="path-5"></path>
+        <filter x="-5.1%" y="-2.6%" width="110.3%" height="110.3%" filterUnits="objectBoundingBox" id="filter-6">
+            <feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
+            <feGaussianBlur stdDeviation="0.5" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
+            <feColorMatrix values="0 0 0 0 0   0 0 0 0 0   0 0 0 0 0  0 0 0 0.1 0" type="matrix" in="shadowBlurOuter1"></feColorMatrix>
+        </filter>
+    </defs>
+    <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="Artboard" transform="translate(-1150.000000, -430.000000)">
+            <g id="conversations" transform="translate(1150.000000, 430.000000)">
+                <mask id="mask-2" fill="white">
+                    <use xlink:href="#path-1"></use>
+                </mask>
+                <use id="Path" fill="#00B356" xlink:href="#path-1"></use>
+                <g id="comment-alt-lines" mask="url(#mask-2)" fill-rule="nonzero">
+                    <g transform="translate(13.000000, 15.000000)" id="Shape">
+                        <g>
+                            <use fill="black" fill-opacity="1" filter="url(#filter-6)" xlink:href="#path-5"></use>
+                            <use fill="url(#linearGradient-3)" xlink:href="#path-5"></use>
+                        </g>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 51 - 0
modules/boonex/decorous/updates/10.0.0_10.0.1/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' => 'Decorous',
+    'version_from' => '10.0.0',
+    'version_to' => '10.0.1',
+    'vendor' => 'BoonEx',
+
+    'compatible_with' => array(
+        '10.0.0-B2'
+    ),
+
+    /**
+     * 'home_dir' and 'home_uri' - should be unique. Don't use spaces in 'home_uri' and the other special chars.
+     */
+    'home_dir' => 'boonex/decorous/updates/update_10.0.0_10.0.1/',
+    'home_uri' => 'decorous_update_1000_1001',
+
+    'module_dir' => 'boonex/decorous/',
+    'module_uri' => 'decorous',
+
+    'db_prefix' => 'bx_decorous_',
+    'class_prefix' => 'BxDecorous',
+
+    /**
+     * Installation/Uninstallation Section.
+     */
+    'install' => array(
+        'execute_sql' => 1,
+        'update_files' => 1,
+        'update_languages' => 0,
+        'clear_db_cache' => 1,
+    ),
+
+    /**
+     * Category for language keys.
+     */
+    'language_category' => 'Boonex Decorous Template',
+
+    /**
+     * Files Section
+     */
+    'delete_files' => array(),
+);

+ 26 - 0
modules/boonex/decorous/updates/10.0.0_10.0.1/install/installer.php

@@ -0,0 +1,26 @@
+<?php
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ */
+
+class BxDecorousUpdater extends BxDolStudioUpdater
+{
+    function __construct($aConfig)
+    {
+        parent::__construct($aConfig);
+    }
+
+    public function update($aParams)
+    {
+        $aResult = parent::update($aParams);
+        if(!$aResult['result'])
+            return $aResult;
+
+        $oCacheUtilities = BxDolCacheUtilities::getInstance();
+        $oCacheUtilities->clear('css');
+        $oCacheUtilities->clear('template');
+
+        return $aResult;
+    }
+}

+ 14 - 0
modules/boonex/decorous/updates/10.0.0_10.0.1/install/sql/install.sql

@@ -0,0 +1,14 @@
+SET @sName = 'bx_decorous';
+
+
+-- SETTINGS
+UPDATE `sys_options` SET `value`='rgba(245, 250, 255, 0.9)' WHERE `name`=CONCAT(@sName, '_cover_bg_color');
+UPDATE `sys_options` SET `value`='0px 1px 2px 0px rgba(0, 0, 0, 0.05)' WHERE `name`=CONCAT(@sName, '_cover_shadow');
+
+UPDATE `sys_options` SET `value`='rgba(245, 250, 255, 0.9)' WHERE `name`=CONCAT(@sName, '_menu_page_bg_color');
+UPDATE `sys_options` SET `value`='0px' WHERE `name`=CONCAT(@sName, '_menu_page_content_padding');
+UPDATE `sys_options` SET `value`='0px 1px 2px 0px rgba(0, 0, 0, 0.05)' WHERE `name`=CONCAT(@sName, '_menu_page_shadow');
+
+UPDATE `sys_options` SET `value`='100%' WHERE `name`=CONCAT(@sName, '_vpt_font_size_scale');
+
+UPDATE `sys_options` SET `value`='87.5%' WHERE `name`=CONCAT(@sName, '_vpm_font_size_scale');

+ 45 - 0
modules/boonex/decorous/updates/10.0.0_10.0.1/source/data/template/system/_sub_header.html

@@ -0,0 +1,45 @@
+<bx_include_auto:_header.html />
+
+<div class="bx-main <bx_injection:injection_main_class />">
+
+	<bx_injection:top />
+
+	<div id="bx-toolbar" class="bx-header bx-def-image-bg-header bx-def-color-bg-header bx-def-border-header bx-shadow-header bx-def-z-index-nav cd-main-header">
+	    <div class="bx-def-centered bx-def-padding-sec-leftright bx-def-box-sizing">
+	    	<div class="bx-toolbar-content-wrapper bx-content-padding-header">
+                    <div id="bx-toolbar-content" class="bx-clearfix">
+                        <div id="bx-menu-toolbar-1-container">
+                            <bx_menu:sys_toolbar_site />
+                        </div>
+                        <div id="bx-logo-container">
+                            <bx_injection:injection_logo_before />
+                                __main_logo__
+                            <bx_injection:injection_logo_after />
+                        </div>
+                        <div id="bx-menu-toolbar-2-container" class="cd-nav">
+                            <bx_menu:sys_toolbar_member />
+                        </div>
+                    </div>
+                </div>
+	    </div>
+	</div>
+
+	<div class="cd-main-content-wrp">
+            <div class="cd-main-content bx-clearfix">
+                <bx_menu:sys_site />
+	        <div class="content-wrapper-wrp">
+                    <div class="content-wrapper bx-def-box-sizing">
+                        <bx_injection:injection_between_cover_logo />
+                        __cover__
+                        <bx_injection:injection_between_cover_top_menu />
+
+                        <bx_menu:sys_site_submenu />
+
+                        <bx_injection:injection_between_content_menu />
+
+                        <div id="bx-content-wrapper">
+                            __informer__
+                            <div class="bx-page-wrapper bx-def-centered bx-def-padding-sec-leftright bx-def-page-width bx-def-box-sizing">
+                                <div id="bx-content-container" class="bx-def-padding-sec-left bx-def-padding-sec-right">
+                                    <bx_injection:injection_content_before />
+                                    <div id="bx-content-main" class="bx-def-margin-sec-topbottom">

+ 891 - 0
modules/boonex/decorous/updates/10.0.0_10.0.1/source/data/template/system/css/default.less

@@ -0,0 +1,891 @@
+@import '../../../../../../../template/css/default.less';
+
+/**
+ * Is used for inputs and buttons. They should have the same value 
+ * because Input and Button can be positioned in one line.
+ */
+@base-input-box-sizing: border-box;
+
+
+/* viewport */
+html.bx-media-tablet {
+    font-size: @bx-viewport-font-tablet !important;
+}
+
+html.bx-media-phone {
+    font-size: @bx-viewport-font-mobile !important;
+}
+
+/* height */
+.bx-header {
+	height: @bx-height-header !important;
+}
+.cd-side-nav,
+.cd-main-content .content-wrapper {
+    padding-top: @bx-height-header;
+}
+
+
+/* content paddings */
+.bx-content-padding-header {
+	padding: @bx-content-padding-header;
+}
+.bx-content-padding-footer {
+	padding: @bx-content-padding-footer;
+}
+.bx-content-padding-block {
+	padding: @bx-content-padding-block;
+}
+
+
+/* shadow */
+.bx-shadow-header {
+    -webkit-box-shadow: @bx-shadow-header;
+    -moz-box-shadow: @bx-shadow-header;
+    box-shadow: @bx-shadow-header;
+}
+.bx-shadow-footer {
+    -webkit-box-shadow: @bx-shadow-footer;
+    -moz-box-shadow: @bx-shadow-footer;
+    box-shadow: @bx-shadow-footer;
+}
+.bx-shadow-block {
+    -webkit-box-shadow: @bx-shadow-block;
+    -moz-box-shadow: @bx-shadow-block;
+    box-shadow: @bx-shadow-block;
+}
+.bx-def-box {
+    -webkit-box-shadow: @bx-shadow-card;
+    -moz-box-shadow: @bx-shadow-card;
+    box-shadow: @bx-shadow-card;
+}
+.bx-popup-applied {
+    border-radius: @bx-border-radius-popup;
+    background-clip: padding-box;
+}
+.bx-popup-applied:not(.bx-popup-chain),
+.bx-popup-applied.bx-popup-chain .bx-popup-chain-item {
+    -webkit-box-shadow: @bx-shadow-popup;
+    -moz-box-shadow: @bx-shadow-popup;
+    box-shadow: @bx-shadow-popup;
+}
+.bx-popup-applied.bx-popup-chain .bx-popup-chain-item a:hover {
+    background-color: @bx-color-hl;
+}
+.bx-popup-wrapper.bx-popup-slide-wrapper {
+    -webkit-box-shadow: @bx-shadow-menu-slide;
+    -moz-box-shadow: @bx-shadow-menu-slide;
+    box-shadow: @bx-shadow-menu-slide;
+}
+.bx-btn {
+    -webkit-box-shadow: @bx-shadow-button;
+    -moz-box-shadow: @bx-shadow-button;
+    box-shadow: @bx-shadow-button;
+}
+.bx-btn.bx-btn-small {
+    -webkit-box-shadow: @bx-shadow-button-small;
+    -moz-box-shadow: @bx-shadow-button-small;
+    box-shadow: @bx-shadow-button-small;
+}
+
+
+/* background images */
+.bx-def-image-bg-header,
+.bx-def-image-bg-footer,
+.bx-def-image-bg-page,
+.bx-def-image-bg-block,
+.bx-def-box,
+.bx-popup-color-bg,
+.bx-popup-wrapper.bx-popup-slide-wrapper,
+#bx-sliding-menu-sys_site.bx-sliding-smenu-main,
+#bx-sliding-menu-sys_add_content.bx-sliding-menu-main,
+#bx-sliding-menu-account.bx-sliding-menu-main,
+.bx-menu-main-bar-wrapper {
+    background-position: center center;
+}
+.bx-def-image-bg-header {
+	background-image: @bx-image-bg-header;
+	background-repeat: @bx-image-bg-header-repeat;
+	background-attachment: @bx-image-bg-header-attachment;
+    background-size: @bx-image-bg-header-size;
+}
+.bx-def-image-bg-footer {
+	background-image: @bx-image-bg-footer;
+	background-repeat: @bx-image-bg-footer-repeat;
+	background-attachment: @bx-image-bg-footer-attachment;
+    background-size: @bx-image-bg-footer-size;
+}
+.bx-def-image-bg-page {
+	background-image: @bx-image-bg-page;
+	background-repeat: @bx-image-bg-page-repeat;
+	background-attachment: @bx-image-bg-page-attachment;
+    background-size: @bx-image-bg-page-size;
+}
+.bx-def-image-bg-block {
+	background-image: @bx-image-bg-block;
+	background-repeat: @bx-image-bg-block-repeat;
+	background-attachment: @bx-image-bg-block-attachment;
+    background-size: @bx-image-bg-block-size;
+}
+.bx-def-box {
+	background-image: @bx-image-bg-box;
+	background-repeat: @bx-image-bg-box-repeat;
+	background-attachment: @bx-image-bg-box-attachment;
+    background-size: @bx-image-bg-box-size;
+}
+
+/* body */
+a {
+	color: @bx-color-link-body; 
+}
+a:hover {
+	color: @bx-color-link-body-hover; 
+}
+.sys-icon:not(.sys-colored),
+.sys-icon-a:not(.sys-colored) {
+    color: @bx-color-icon-body; 
+}
+a:hover > .sys-icon:not(.sys-colored),
+a:hover > .sys-icon-a:not(.sys-colored) {
+	color: @bx-color-icon-body-hover; 
+}
+.sys-icon-a i {
+	.background-color (@bx-color-icon-body) !important;
+	color: @bx-color-icon-body;
+}
+a:hover > .sys-icon-a i {
+	.background-color (@bx-color-icon-body-hover) !important;
+	color: @bx-color-icon-body-hover;
+}
+
+/* header */
+.bx-header.bx-def-color-bg-header {
+    .background-color (@bx-color-header);
+}
+.bx-header.bx-def-border-header {
+    border-bottom-width: @bx-border-width-header;
+    border-bottom-style: @bx-border-type;
+    border-bottom-color: @bx-color-border-header;
+}
+.bx-header a {
+	color: @bx-color-link-header; 
+}
+.bx-header a:hover {
+	color: @bx-color-link-header-hover;
+}
+.bx-header .sys-icon,
+.bx-header .sys-icon-a {
+	color: @bx-color-icon-header; 
+}
+.bx-header .cd-nav-trigger span, 
+.bx-header .cd-nav-trigger span::before, 
+.bx-header .cd-nav-trigger span::after,
+.bx-header .cd-nav-trigger.nav-is-visible span::before, 
+.bx-header .cd-nav-trigger.nav-is-visible span::after {
+    background: @bx-color-icon-header;
+}
+.bx-header a:hover .sys-icon,
+.bx-header a:hover .sys-icon-a {
+	color: @bx-color-icon-header-hover; 
+}
+.bx-header .cd-nav-trigger.nav-is-visible:hover span {
+  background: rgba(255, 255, 255, 0);
+}
+.bx-header .cd-nav-trigger:hover span, 
+.bx-header .cd-nav-trigger:hover span::before, 
+.bx-header .cd-nav-trigger:hover span::after,
+.bx-header .cd-nav-trigger.nav-is-visible:hover span::before, 
+.bx-header .cd-nav-trigger.nav-is-visible:hover span::after {
+    background: @bx-color-icon-header-hover;
+}
+.bx-header .sys-icon-a i {
+	.background-color (@bx-color-icon-header) !important;
+	color: @bx-color-icon-header;
+}
+.bx-header a:hover .sys-icon-a i {
+	.background-color (@bx-color-icon-header-hover) !important;
+	color: @bx-color-icon-header-hover;
+}
+
+/* footer */
+.bx-footer-wrapper.bx-def-color-bg-footer {
+    .background-color (@bx-color-footer);    
+}
+.bx-footer-wrapper.bx-def-border-footer {
+    border-top-width: @bx-border-width-footer;
+    border-top-style: @bx-border-type;
+    border-top-color: @bx-color-border-footer;
+}
+
+.bx-footer {
+	color: @bx-font-color-footer;
+}
+.bx-footer a {
+	color: @bx-color-link-footer; 
+}
+.bx-footer a:hover {
+	color: @bx-color-link-footer-hover; 
+}
+.bx-footer .sys-icon,
+.bx-footer .sys-icon-a {
+	color: @bx-color-icon-footer; 
+}
+.bx-footer a:hover .sys-icon,
+.bx-footer a:hover .sys-icon-a {
+	color: @bx-color-icon-footer-hover; 
+}
+.bx-footer .sys-icon-a i {
+	.background-color (@bx-color-icon-footer) !important;
+	color: @bx-color-icon-footer;
+}
+.bx-footer a:hover .sys-icon-a i {
+	.background-color (@bx-color-icon-footer-hover) !important;
+	color: @bx-color-icon-footer-hover;
+}
+
+/* fonts */
+.bx-def-font-inputs {
+	font-family: @bx-font-family-form-input;
+	font-size: @bx-font-size-form-input;
+	color: @bx-font-color-form-input;
+}
+
+h1,
+.bx-def-font-h1 {
+	font-weight: @bx-font-weight-h1;
+	color: @bx-font-color-default-h1;
+}
+h1.bx-def-font-grayed,
+h1 .bx-def-font-grayed,
+.bx-def-font-h1.bx-def-font-grayed,
+.bx-def-font-h1 .bx-def-font-grayed {
+	color: @bx-font-color-grayed-h1;
+}
+h1.bx-def-font-contrasted,
+h1.bx-def-font-contrasted:after,
+h1.bx-def-font-contrasted:before,
+h1 .bx-def-font-contrasted,
+h1 .bx-def-font-contrasted:after,
+h1 .bx-def-font-contrasted:before,
+.bx-def-font-h1.bx-def-font-contrasted,
+.bx-def-font-h1.bx-def-font-contrasted:after,
+.bx-def-font-h1.bx-def-font-contrasted:before,
+.bx-def-font-h1 .bx-def-font-contrasted,
+.bx-def-font-h1 .bx-def-font-contrasted:after,
+.bx-def-font-h1 .bx-def-font-contrasted:before {
+	color: @bx-font-color-contrasted-h1;
+}
+h1 a,
+.bx-def-font-h1 a,
+a.bx-def-font-h1 {
+	color: @bx-font-color-link-h1;
+}
+h1 a:hover,
+.bx-def-font-h1 a:hover,
+a.bx-def-font-h1:hover {
+	color: @bx-font-color-link-h1-hover;
+}
+
+h2,
+.bx-def-font-h2 {
+	font-weight: @bx-font-weight-h2;
+	color: @bx-font-color-default-h2;
+}
+h2.bx-def-font-grayed,
+h2 .bx-def-font-grayed,
+.bx-def-font-h2.bx-def-font-grayed,
+.bx-def-font-h2 .bx-def-font-grayed {
+	color: @bx-font-color-grayed-h2;
+}
+h2.bx-def-font-contrasted,
+h2.bx-def-font-contrasted:after,
+h2.bx-def-font-contrasted:before,
+h2 .bx-def-font-contrasted,
+h2 .bx-def-font-contrasted:after,
+h2 .bx-def-font-contrasted:before,
+.bx-def-font-h2.bx-def-font-contrasted,
+.bx-def-font-h2.bx-def-font-contrasted:after,
+.bx-def-font-h2.bx-def-font-contrasted:before,
+.bx-def-font-h2 .bx-def-font-contrasted,
+.bx-def-font-h2 .bx-def-font-contrasted:after,
+.bx-def-font-h2 .bx-def-font-contrasted:before {
+	color: @bx-font-color-contrasted-h2;
+}
+h2 a,
+.bx-def-font-h2 a,
+a.bx-def-font-h2 {
+	color: @bx-font-color-link-h2;
+}
+h2 a:hover,
+.bx-def-font-h2 a:hover,
+a.bx-def-font-h2:hover {
+	color: @bx-font-color-link-h2-hover;
+}
+
+h3,
+.bx-def-font-h3 {
+	font-weight: @bx-font-weight-h3;
+	color: @bx-font-color-default-h3;
+}
+h3.bx-def-font-grayed,
+h3 .bx-def-font-grayed,
+.bx-def-font-h3.bx-def-font-grayed,
+.bx-def-font-h3 .bx-def-font-grayed {
+	color: @bx-font-color-grayed-h3;
+}
+h3.bx-def-font-contrasted,
+h3.bx-def-font-contrasted:after,
+h3.bx-def-font-contrasted:before,
+h3 .bx-def-font-contrasted,
+h3 .bx-def-font-contrasted:after,
+h3 .bx-def-font-contrasted:before,
+.bx-def-font-h3.bx-def-font-contrasted,
+.bx-def-font-h3.bx-def-font-contrasted:after,
+.bx-def-font-h3.bx-def-font-contrasted:before,
+.bx-def-font-h3 .bx-def-font-contrasted,
+.bx-def-font-h3 .bx-def-font-contrasted:after,
+.bx-def-font-h3 .bx-def-font-contrasted:before {
+	color: @bx-font-color-contrasted-h3;
+}
+h3 a,
+.bx-def-font-h3 a,
+a.bx-def-font-h3 {
+	color: @bx-font-color-link-h3;
+}
+h3 a:hover,
+.bx-def-font-h3 a:hover,
+a.bx-def-font-h3:hover {
+	color: @bx-font-color-link-h3-hover;
+}
+
+/* cover */
+.bx-menu-toolbar-padding .bx-def-cover-color-bg {
+    background-color: @bx-color-cover;
+}
+
+.bx-menu-toolbar-padding .bx-cover-wrapper {
+    border-width: @bx-border-width-cover;
+    border-style: @bx-border-type;
+    border-color: @bx-color-border-cover;
+
+    border-radius: @bx-border-radius-cover;
+    background-clip: padding-box;
+
+    -webkit-box-shadow: @bx-shadow-cover;
+    -moz-box-shadow: @bx-shadow-cover;
+    box-shadow: @bx-shadow-cover;
+}
+.bx-cover-wrapper .bx-cover {
+    min-height: @bx-height-cover;
+}
+.bx-cover-wrapper .bx-cover,
+.bx-cover-wrapper .bx-cover .bx-cover-actions .bx-menu-btns-hor {
+    text-align: @bx-text-align-cover;
+}
+.bx-cover-wrapper .bx-cover.bx-def-padding {
+    padding: @bx-content-padding-cover;
+}
+.bx-cover-wrapper .bx-cover .bx-cover-image img {
+    border-width: @bx-border-width-cover-icon;
+    border-style: @bx-border-type;
+    border-color: @bx-color-border-cover-icon;
+
+    border-radius: @bx-border-radius-cover-icon;
+    background-clip: padding-box;
+
+    -webkit-box-shadow: @bx-shadow-cover-icon;
+    -moz-box-shadow: @bx-shadow-cover-icon;
+    box-shadow: @bx-shadow-cover-icon;
+}
+
+.bx-cover-wrapper .bx-cover .bx-cover-title {
+    text-shadow: @bx-shadow-text-cover;
+
+    font-family: @bx-font-family-cover;
+}
+.bx-cover-wrapper .bx-cover .bx-cover-title,
+.bx-cover-wrapper .bx-cover .bx-cover-title .bx-def-font-contrasted {
+    color: @bx-color-font-cover;
+}
+.bx-cover-wrapper .bx-cover .bx-cover-title,
+.bx-cover-wrapper .bx-cover .bx-cover-title.bx-def-font-h1 {
+    font-size: @bx-font-size-cover;
+    font-weight: @bx-font-weight-cover;
+}
+
+
+/* block */
+.bx-def-border-block {
+    border-width: @bx-border-width-block;
+    border-style: @bx-border-type;
+    border-color: @bx-color-border-block;
+
+    border-radius: @bx-border-radius-block;
+    background-clip: padding-box;
+}
+.bx-def-border-radius-block {
+    border-radius: @bx-border-radius-block;
+    background-clip: padding-box;
+}
+.bx-db-header {
+    padding: @bx-title-padding-block;
+
+    border-width: @bx-border-width-block-title;
+    border-style: solid;
+    border-color: @bx-color-border-block-title;
+
+    border-radius: @bx-border-radius-block-title;
+}
+.bx-def-color-bg-block .bx-db-header,
+.bx-def-image-bg-block .bx-db-header {
+    background-color: @bx-color-block-title;
+}
+.bx-db-header .bx-db-title {
+    font-family: @bx-font-family-block-title;
+    font-weight: @bx-font-weight-block-title;
+    color: @bx-color-font-block-title;
+}
+.bx-db-header .bx-db-title.bx-def-font-h2 {
+    font-size: @bx-font-size-block-title;
+}
+.bx-db-divider {
+    border-top:@bx-height-block-title-div @bx-border-type @bx-color-block-title-div;
+}
+
+
+/* box */
+.bx-def-box {
+    border-width: @bx-border-width-box;
+    border-style: @bx-border-type;
+    border-color: @bx-color-border-box;
+}
+.bx-def-box.bx-def-padding {
+    padding: @bx-content-padding-card;
+}
+.bx-def-box.bx-def-color-bg-box {
+    .background-color (@bx-color-box);
+}
+.bx-def-box.bx-def-color-bg-box-active,
+.bx-def-box.bx-def-color-bg-box-hover:hover {
+    .background-color (@bx-color-box-hover);
+}
+.bx-def-box-round-corners,
+.bx-def-box.bx-def-round-corners {
+    border-radius: @bx-border-radius-box;
+    background-clip: padding-box;
+}
+.bx-def-box-round-corners-int {
+    border-radius: @bx-border-radius-box-itl @bx-border-radius-box-itr @bx-border-radius-box-ibr @bx-border-radius-box-ibl;
+    background-clip: padding-box;
+}
+.bx-def-box-round-corners-int-top {
+    border-radius: @bx-border-radius-box-itl @bx-border-radius-box-itr 0 0;
+    background-clip: padding-box;
+}
+.bx-def-box-round-corners-int-bottom {
+    border-radius: 0 0 @bx-border-radius-box-ibr @bx-border-radius-box-ibl;
+    background-clip: padding-box;
+}
+.bx-base-pofile-unit-with-cover .bx-def-round-corners .bx-base-pofile-unit-cover {
+    border-radius: @bx-border-radius-box-itl @bx-border-radius-box-itr 0 0;
+}
+.bx-base-text-unit.bx-base-text-unit-ext.bx-def-round-corners img.bx-base-text-unit-cover.bx-def-round-corners,
+.bx-base-text-unit.bx-base-text-unit-ext .bx-def-round-corners img.bx-base-text-unit-cover.bx-def-round-corners {
+    border-radius: @bx-border-radius-box-itl @bx-border-radius-box-itr 0 0;
+}
+.bx-base-text-unit.bx-base-text-unit-gallery.bx-def-round-corners .bx-base-text-unit-thumb.bx-def-round-corners,
+.bx-base-text-unit.bx-base-text-unit-gallery .bx-def-round-corners .bx-base-text-unit-thumb.bx-def-round-corners {
+    border-radius: @bx-border-radius-box-itl @bx-border-radius-box-itr 0 0;
+}
+
+/* popup */
+.bx-popup-border {
+    border-width: @bx-border-width-popup;
+    border-style: solid;
+    border-color: @bx-color-border-popup;
+
+    border-radius: @bx-border-radius-popup;
+    background-clip: padding-box;
+}
+.bx-popup-color-bg {
+    background-color: @bx-color-popup;
+
+    background-image: @bx-image-bg-popup;
+    background-repeat: @bx-image-bg-popup-repeat;
+    background-attachment: @bx-image-bg-popup-attachment;
+    background-size: @bx-image-bg-popup-size;
+}
+.bx-popup-content-indent {
+	padding: @bx-content-padding-popup;
+}
+.bx-popup-header {
+	padding: @bx-title-padding-popup;
+}
+.bx-popup-header-color-bg {
+	background-color: @bx-color-popup-title;
+}
+.bx-popup-header h2 {
+    line-height: 1.8rem;
+    font-family: @bx-font-family-popup-title;
+    font-size: @bx-font-size-popup-title;
+}
+.bx-popup-header h2,
+.bx-popup-header.bx-def-font-contrasted h2,
+.bx-popup-header .bx-popup-element-close,
+.bx-popup-header.bx-def-font-contrasted .bx-popup-element-close,
+.bx-popup-header .bx-popup-element-close .sys-icon,
+.bx-popup-header.bx-def-font-contrasted .bx-popup-element-close .sys-icon {
+	color: @bx-color-font-popup-title;
+}
+
+/* slide menu */
+.bx-popup-wrapper.bx-popup-slide-wrapper {
+	border-width: @bx-border-width-menu-slide;
+	border-style: solid;
+	border-color: @bx-color-border-menu-slide;
+
+	.background-color (@bx-color-menu-slide);
+
+	background-image: @bx-image-bg-menu-slide;
+	background-repeat: @bx-image-bg-menu-slide-repeat;
+	background-attachment: @bx-image-bg-menu-slide-attachment;
+    background-size: @bx-image-bg-menu-slide-size;
+}
+.bx-popup-wrapper.bx-popup-slide-wrapper.bx-def-padding {
+	padding: @bx-content-padding-menu-slide;
+}
+.bx-popup-wrapper.bx-popup-slide-wrapper li a {
+	text-shadow: @bx-shadow-font-menu-slide;
+
+	font-family: @bx-font-family-menu-slide;
+	font-size: @bx-font-size-menu-slide;
+	font-weight: @bx-font-weight-menu-slide;
+	color: @bx-font-color-menu-slide;
+}
+.bx-popup-wrapper.bx-popup-slide-wrapper li a:hover {
+	color: @bx-font-color-menu-slide-hover;
+}
+.bx-popup-wrapper.bx-popup-slide-wrapper li.bx-menu-tab-active a,
+.bx-popup-wrapper.bx-popup-slide-wrapper li.bx-menu-inter-act {
+	color: @bx-font-color-menu-slide-active;
+}
+
+/* main menu */
+.cd-main-content .cd-side-nav {
+	-webkit-box-shadow: @bx-shadow-menu-main;
+	-moz-box-shadow: @bx-shadow-menu-main;
+	box-shadow: @bx-shadow-menu-main;
+
+	border-width: @bx-border-width-menu-main;
+	border-style: solid;
+	border-color: @bx-color-border-menu-main;
+
+	background-color: @bx-color-menu-main;
+
+	background-image: @bx-image-bg-menu-main;
+	background-repeat: @bx-image-bg-menu-main-repeat;
+	background-attachment: @bx-image-bg-menu-main-attachment;
+    background-size: @bx-image-bg-menu-main-size;
+}
+
+#bx-sliding-menu-sys_site.bx-sliding-smenu-main .bx-sliding-menu-main-cnt {
+	padding: @bx-content-padding-menu-main;
+}
+#bx-sliding-menu-sys_site.bx-sliding-smenu-main .bx-sliding-menu-main-cnt li a {
+	text-shadow: @bx-shadow-font-menu-main;
+
+	font-family: @bx-font-family-menu-main;
+	font-size: @bx-font-size-menu-main;
+	font-weight: @bx-font-weight-menu-main;
+	color: @bx-font-color-menu-main;
+}
+#bx-sliding-menu-sys_site.bx-sliding-smenu-main .bx-sliding-menu-main-cnt li.bx-menu-tab-active a {
+	color: @bx-font-color-menu-main-active;
+}
+#bx-sliding-menu-sys_site.bx-sliding-smenu-main .bx-sliding-menu-main-cnt li a:hover {
+	color: @bx-font-color-menu-main-hover;
+}
+
+
+/* account menu */
+#bx-sliding-menu-account.bx-sliding-menu-main {
+    -webkit-box-shadow: @bx-shadow-menu-account;
+    -moz-box-shadow: @bx-shadow-menu-account;
+    box-shadow: @bx-shadow-menu-account;
+
+    border-width: @bx-border-width-menu-account;
+    border-style: solid;
+    border-color: @bx-color-border-menu-account;
+
+    background-color: @bx-color-menu-account;
+
+    background-image: @bx-image-bg-menu-account;
+    background-repeat: @bx-image-bg-menu-account-repeat;
+    background-attachment: @bx-image-bg-menu-account-attachment;
+    background-size: @bx-image-bg-menu-account-size;
+}
+#bx-sliding-menu-account.bx-sliding-menu-main .bx-sliding-menu-main-cnt {
+    padding: @bx-content-padding-menu-account;
+}
+#bx-sliding-menu-account.bx-sliding-menu-main .bx-sliding-menu-main-cnt,
+#bx-sliding-menu-account.bx-sliding-menu-main .bx-sliding-menu-main-cnt .bx-def-font-h1,
+#bx-sliding-menu-account.bx-sliding-menu-main .bx-sliding-menu-main-cnt .bx-def-font-h2,
+#bx-sliding-menu-account.bx-sliding-menu-main .bx-sliding-menu-main-cnt a,
+#bx-sliding-menu-account.bx-sliding-menu-main .bx-sliding-menu-main-cnt .sys-icon {
+    color: @bx-font-color-menu-account;
+}
+#bx-sliding-menu-account.bx-sliding-menu-main .bx-menu-account-popup li a,
+#bx-sliding-menu-account.bx-sliding-menu-main .bx-menu-account-popup li a .bx-menu-floating-blocks-title {
+    text-shadow: @bx-shadow-font-menu-account;
+
+    font-family: @bx-font-family-menu-account;
+    font-size: @bx-font-size-menu-account;
+    font-weight: @bx-font-weight-menu-account;
+}
+#bx-sliding-menu-account.bx-sliding-menu-main .bx-menu-account-popup li.bx-menu-tab-active a {
+    color: @bx-font-color-menu-account-active;
+}
+#bx-sliding-menu-account.bx-sliding-menu-main .bx-menu-account-popup li a:hover {
+    color: @bx-font-color-menu-account-hover;
+}
+
+/* add menu */
+#bx-sliding-menu-sys_add_content.bx-sliding-menu-main {
+    -webkit-box-shadow: @bx-shadow-menu-add;
+    -moz-box-shadow: @bx-shadow-menu-add;
+    box-shadow: @bx-shadow-menu-add;
+
+    border-width: @bx-border-width-menu-add;
+    border-style: solid;
+    border-color: @bx-color-border-menu-add;
+
+    background-color: @bx-color-menu-add;
+
+    background-image: @bx-image-bg-menu-add;
+    background-repeat: @bx-image-bg-menu-add-repeat;
+    background-attachment: @bx-image-bg-menu-add-attachment;
+    background-size: @bx-image-bg-menu-add-size;
+}
+#bx-sliding-menu-sys_add_content.bx-sliding-menu-main .bx-sliding-menu-main-cnt {
+    padding: @bx-content-padding-menu-add;
+}
+#bx-sliding-menu-sys_add_content.bx-sliding-menu-main .bx-sliding-menu-main-cnt li a {
+    text-shadow: @bx-shadow-font-menu-add;
+
+    font-family: @bx-font-family-menu-add;
+    font-size: @bx-font-size-menu-add;
+    font-weight: @bx-font-weight-menu-add;
+    color: @bx-font-color-menu-add;
+}
+#bx-sliding-menu-sys_add_content.bx-sliding-menu-main .bx-sliding-menu-main-cnt li.bx-menu-tab-active a {
+    color: @bx-font-color-menu-add-active;
+}
+#bx-sliding-menu-sys_add_content.bx-sliding-menu-main .bx-sliding-menu-main-cnt li a:hover {
+    color: @bx-font-color-menu-add-hover;
+}
+
+/* page menu */
+.bx-menu-main-bar-wrapper {
+    -webkit-box-shadow: @bx-shadow-menu-page;
+    -moz-box-shadow: @bx-shadow-menu-page;
+    box-shadow: @bx-shadow-menu-page;
+
+    border-width: @bx-border-width-menu-page;
+    border-style: solid;
+    border-color: @bx-color-border-menu-page;
+    border-bottom-right-radius: @bx-border-radius-block-br;
+    border-bottom-left-radius: @bx-border-radius-block-bl;
+
+    background-color: @bx-color-menu-page;
+
+    background-image: @bx-image-bg-menu-page;
+    background-repeat: @bx-image-bg-menu-page-repeat;
+    background-attachment: @bx-image-bg-menu-page-attachment;
+    background-size: @bx-image-bg-menu-page-size;
+}
+.bx-menu-main-bar-wrapper .bx-menu-main-submenu {
+	padding: @bx-content-padding-menu-page;
+}
+.bx-menu-main-bar-wrapper .bx-menu-main-submenu li a {
+	text-shadow: @bx-shadow-font-menu-page;
+
+	font-family: @bx-font-family-menu-page;
+	font-size: @bx-font-size-menu-page;
+	font-weight: @bx-font-weight-menu-page;
+	color: @bx-font-color-menu-page;
+}
+.bx-menu-main-bar-wrapper .bx-menu-main-submenu li a:hover {
+	color: @bx-font-color-menu-page-hover;
+}
+.bx-menu-main-bar-wrapper .bx-menu-main-submenu li.bx-menu-tab-active a {
+	color: @bx-font-color-menu-page-active;
+}
+
+/* form */
+.bx-form-value .bx-form-input-slider,
+.bx-form-value .bx-form-input-doublerange,
+.bx-form-value .bx-form-input-select_multiple,
+.bx-form-value .bx-form-input-select,
+.bx-form-value .bx-form-input-radio_set,
+.bx-form-value .bx-form-input-checkbox_set,
+.bx-form-value .bx-form-input-number,
+.bx-form-value .bx-form-input-datepicker,
+.bx-form-value .bx-form-input-datetime,
+.bx-form-value .bx-form-input-textarea,
+.bx-form-value .bx-form-input-password,
+.bx-form-value .bx-form-input-text {
+    .box-sizing(@base-input-box-sizing);
+
+    border-color: @bx-color-border-form-input;
+    border-width: @bx-border-width-form-input;
+
+    background-color: @bx-color-form-input;
+
+    -webkit-box-shadow: @bx-shadow-form-input;
+    -moz-box-shadow: @bx-shadow-form-input;
+    box-shadow: @bx-shadow-form-input;
+}
+.bx-form-value .bx-form-input-slider,
+.bx-form-value .bx-form-input-doublerange,
+.bx-form-value .bx-form-input-select,
+.bx-form-value .bx-form-input-number,
+.bx-form-value .bx-form-input-datepicker,
+.bx-form-value .bx-form-input-datetime,
+.bx-form-value .bx-form-input-password,
+.bx-form-value .bx-form-input-text {
+	height: @bx-height-form-input;
+}
+.bx-form-value .bx-form-input-text.bx-form-input-autotoken b {
+    line-height: @bx-height-form-input;
+}
+.bx-form-value .bx-form-input-text.bx-form-input-autotoken b .bx-def-thumb-size {
+	width: @bx-height-form-input;
+    height: @bx-height-form-input;
+    line-height: @bx-height-form-input;
+}
+.bx-form-value .bx-form-input-slider:focus,
+.bx-form-value .bx-form-input-doublerange:focus,
+.bx-form-value .bx-form-input-number:focus,
+.bx-form-value .bx-form-input-datepicker:focus,
+.bx-form-value .bx-form-input-datetime:focus,
+.bx-form-value .bx-form-input-textarea:focus,
+.bx-form-value .bx-form-input-password:focus,
+.bx-form-value .bx-form-input-text:focus {
+	border-color: @bx-color-border-form-input-active;
+	background-color: @bx-color-form-input-active;
+}
+.bx-form-value .bx-switcher-cont {
+	border-color: @bx-color-border-form-input;
+	border-width: @bx-border-width-form-input;
+
+	background-color: @bx-color-form-input;
+
+	-webkit-box-shadow: @bx-shadow-form-input;
+	-moz-box-shadow: @bx-shadow-form-input;
+	box-shadow: @bx-shadow-form-input;
+}
+
+/* button large */
+.bx-btn,
+.bx-btn.bx-btn-primary {
+	.box-sizing(@base-input-box-sizing);
+
+	height: @bx-height-button;
+	line-height: (@bx-height-button - 0.2);
+
+	.background-color (@bx-color-button);
+
+	border-width: @bx-border-width-button;
+	border-style: solid;
+	border-color: @bx-color-border-button;
+
+        border-radius: @bx-border-radius-button;
+	background-clip: padding-box;
+
+	text-shadow: @bx-shadow-font-button;
+
+	font-family: @bx-font-family-button;
+	font-size: @bx-font-size-button;
+	font-weight: @bx-font-weight-button;
+	color: @bx-font-color-button;
+}
+.bx-btn-height {
+	height: @bx-height-button;
+	line-height: @bx-height-button;
+}
+.bx-btn-border {
+	border-width: @bx-border-width-button;
+	border-style: solid;
+	border-color: transparent;
+}
+.bx-btn:hover,
+.bx-btn:active,
+.bx-btn.bx-btn-primary:hover,
+.bx-btn.bx-btn-primary:active {
+	border-width: @bx-border-width-button;
+	border-style: solid;
+	border-color: @bx-color-border-button-hover;
+
+	.background-color (@bx-color-button-hover);
+
+	color: @bx-font-color-button-hover;
+}
+.bx-btn .sys-icon:not(.sys-colored) {
+    color: @bx-font-color-button;
+}
+.bx-btn:hover .sys-icon:not(.sys-colored),
+.bx-btn:active .sys-icon:not(.sys-colored),
+.bx-btn.bx-btn-primary:hover .sys-icon:not(.sys-colored),
+.bx-btn.bx-btn-primary:active .sys-icon:not(.sys-colored) {
+    color: @bx-font-color-button-hover;
+}
+
+/* button small */
+.bx-btn.bx-btn-small {
+	.box-sizing(@base-input-box-sizing);
+
+	height: @bx-height-button-small;
+	line-height: (@bx-height-button-small - 0.1);
+
+	.background-color (@bx-color-button-small);
+
+	border-width: @bx-border-width-button-small;
+	border-style: solid;
+	border-color: @bx-color-border-button-small;
+
+        border-radius: @bx-border-radius-button-small;
+	background-clip: padding-box;
+
+	text-shadow: @bx-shadow-font-button-small;
+
+	font-family: @bx-font-family-button-small;
+	font-size: @bx-font-size-button-small;
+	font-weight: @bx-font-weight-button-small;
+	color: @bx-font-color-button-small;
+}
+.bx-btn-small-height {
+	height: @bx-height-button-small;
+	line-height: @bx-height-button-small;
+}
+.bx-btn-small-border {
+	border-width: @bx-border-width-button-small;
+	border-style: solid;
+	border-color: transparent;
+}
+.bx-btn.bx-btn-small:hover,
+.bx-btn.bx-btn-small:active {
+	border-width: @bx-border-width-button-small;
+	border-style: solid;
+	border-color: @bx-color-border-button-small-hover;
+
+	.background-color (@bx-color-button-small-hover);
+
+	color: @bx-font-color-button-small-hover;
+}
+.bx-btn.bx-btn-small .sys-icon {
+	color: @bx-font-color-button-small;
+}
+.bx-btn.bx-btn-small:hover .sys-icon,
+.bx-btn.bx-btn-small:active .sys-icon {
+	color: @bx-font-color-button-small-hover;
+}

+ 9 - 0
modules/boonex/decorous/updates/10.0.0_10.0.1/source/data/template/system/menu_main_submenu_bar.html

@@ -0,0 +1,9 @@
+<div class="bx-menu-main-bar-gap bx-def-centered bx-def-padding-leftright bx-def-page-width bx-def-box-sizing">
+    <div id="bx-menu-main-bar-wrapper" class="bx-menu-main-bar-wrapper bx-def-round-corners bx-def-color-bg-sec">
+        <div id="bx-menu-main-bar" class="bx-menu-main-bar">
+            <bx_injection:injection_top_menu_before />
+            __code__
+            <bx_injection:injection_top_menu_after />
+        </div>
+    </div>
+</div>

+ 354 - 0
modules/boonex/decorous/updates/10.0.0_10.0.1/source/data/template/system/scripts/BxTemplConfig.php

@@ -0,0 +1,354 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    UnaTemplate UNA Template Classes
+ * @{
+ */
+
+class BxTemplConfig extends BxBaseConfig
+{
+    protected $_isModule;
+
+    function __construct()
+    {
+        parent::__construct();
+
+        $sName = 'bx_decorous';
+        $this->_isModule = BxDolModuleQuery::getInstance()->isModuleByName($sName);
+
+
+        //--- Images
+        $oStorage = BxDolStorage::getObjectInstance('sys_images_custom');
+
+        $this->_aConfig['aLessConfig']['bx-image-bg-header'] = $this->_setBgUrl($sName . '_header_bg_image', $oStorage);
+        $this->_aConfig['aLessConfig']['bx-image-bg-header-repeat'] = $this->_setBgRepeat($sName . '_header_bg_image_repeat', 'no-repeat');
+        $this->_aConfig['aLessConfig']['bx-image-bg-header-attachment'] = $this->_setBgAttachment($sName . '_header_bg_image_attachment', 'scroll');
+        $this->_aConfig['aLessConfig']['bx-image-bg-header-size'] = $this->_setBgSize($sName . '_header_bg_image_size', 'cover');
+        $this->_aConfig['aLessConfig']['bx-image-bg-footer'] = $this->_setBgUrl($sName . '_footer_bg_image', $oStorage);
+        $this->_aConfig['aLessConfig']['bx-image-bg-footer-repeat'] = $this->_setBgRepeat($sName . '_footer_bg_image_repeat', 'no-repeat');
+        $this->_aConfig['aLessConfig']['bx-image-bg-footer-attachment'] = $this->_setBgAttachment($sName . '_footer_bg_image_attachment', 'scroll');
+        $this->_aConfig['aLessConfig']['bx-image-bg-footer-size'] = $this->_setBgSize($sName . '_footer_bg_image_size', 'cover');
+        $this->_aConfig['aLessConfig']['bx-image-bg-page'] = $this->_setBgUrl($sName . '_body_bg_image', $oStorage);
+        $this->_aConfig['aLessConfig']['bx-image-bg-page-repeat'] = $this->_setBgRepeat($sName . '_body_bg_image_repeat', 'no-repeat');
+        $this->_aConfig['aLessConfig']['bx-image-bg-page-attachment'] = $this->_setBgAttachment($sName . '_body_bg_image_attachment', 'scroll');
+        $this->_aConfig['aLessConfig']['bx-image-bg-page-size'] = $this->_setBgSize($sName . '_body_bg_image_size', 'cover');
+        $this->_aConfig['aLessConfig']['bx-image-bg-block'] = $this->_setBgUrl($sName . '_block_bg_image', $oStorage);
+        $this->_aConfig['aLessConfig']['bx-image-bg-block-repeat'] = $this->_setBgRepeat($sName . '_block_bg_image_repeat', 'no-repeat');
+        $this->_aConfig['aLessConfig']['bx-image-bg-block-attachment'] = $this->_setBgAttachment($sName . '_block_bg_image_attachment', 'scroll');
+        $this->_aConfig['aLessConfig']['bx-image-bg-block-size'] = $this->_setBgSize($sName . '_block_bg_image_size', 'cover');
+        $this->_aConfig['aLessConfig']['bx-image-bg-box'] = $this->_setBgUrl($sName . '_card_bg_image', $oStorage);
+        $this->_aConfig['aLessConfig']['bx-image-bg-box-repeat'] = $this->_setBgRepeat($sName . '_card_bg_image_repeat', 'no-repeat');
+        $this->_aConfig['aLessConfig']['bx-image-bg-box-attachment'] = $this->_setBgAttachment($sName . '_card_bg_image_attachment', 'scroll');
+        $this->_aConfig['aLessConfig']['bx-image-bg-box-size'] = $this->_setBgSize($sName . '_card_bg_image_size', 'cover');
+        $this->_aConfig['aLessConfig']['bx-image-bg-popup'] = $this->_setBgUrl($sName . '_popup_bg_image', $oStorage);
+        $this->_aConfig['aLessConfig']['bx-image-bg-popup-repeat'] = $this->_setBgRepeat($sName . '_popup_bg_image_repeat', 'no-repeat');
+        $this->_aConfig['aLessConfig']['bx-image-bg-popup-attachment'] = $this->_setBgAttachment($sName . '_popup_bg_image_attachment', 'scroll');
+        $this->_aConfig['aLessConfig']['bx-image-bg-popup-size'] = $this->_setBgSize($sName . '_popup_bg_image_size', 'cover');
+        $this->_aConfig['aLessConfig']['bx-image-bg-menu-main'] = $this->_setBgUrl($sName . '_menu_main_bg_image', $oStorage);
+        $this->_aConfig['aLessConfig']['bx-image-bg-menu-main-repeat'] = $this->_setBgRepeat($sName . '_menu_main_bg_image_repeat', 'no-repeat');
+        $this->_aConfig['aLessConfig']['bx-image-bg-menu-main-attachment'] = $this->_setBgAttachment($sName . '_menu_main_bg_image_attachment', 'scroll');
+        $this->_aConfig['aLessConfig']['bx-image-bg-menu-main-size'] = $this->_setBgSize($sName . '_menu_main_bg_image_size', 'cover');
+        $this->_aConfig['aLessConfig']['bx-image-bg-menu-account'] = $this->_setBgUrl($sName . '_menu_account_bg_image', $oStorage);
+        $this->_aConfig['aLessConfig']['bx-image-bg-menu-account-repeat'] = $this->_setBgRepeat($sName . '_menu_account_bg_image_repeat', 'no-repeat');
+        $this->_aConfig['aLessConfig']['bx-image-bg-menu-account-attachment'] = $this->_setBgAttachment($sName . '_menu_account_bg_image_attachment', 'scroll');
+        $this->_aConfig['aLessConfig']['bx-image-bg-menu-account-size'] = $this->_setBgSize($sName . '_menu_account_bg_image_size', 'cover');
+        $this->_aConfig['aLessConfig']['bx-image-bg-menu-add'] = $this->_setBgUrl($sName . '_menu_add_bg_image', $oStorage);
+        $this->_aConfig['aLessConfig']['bx-image-bg-menu-add-repeat'] = $this->_setBgRepeat($sName . '_menu_add_bg_image_repeat', 'no-repeat');
+        $this->_aConfig['aLessConfig']['bx-image-bg-menu-add-attachment'] = $this->_setBgAttachment($sName . '_menu_add_bg_image_attachment', 'scroll');
+        $this->_aConfig['aLessConfig']['bx-image-bg-menu-add-size'] = $this->_setBgSize($sName . '_menu_add_bg_image_size', 'cover');
+        $this->_aConfig['aLessConfig']['bx-image-bg-menu-page'] = $this->_setBgUrl($sName . '_menu_page_bg_image', $oStorage);
+        $this->_aConfig['aLessConfig']['bx-image-bg-menu-page-repeat'] = $this->_setBgRepeat($sName . '_menu_page_bg_image_repeat', 'no-repeat');
+        $this->_aConfig['aLessConfig']['bx-image-bg-menu-page-attachment'] = $this->_setBgAttachment($sName . '_menu_page_bg_image_attachment', 'scroll');
+        $this->_aConfig['aLessConfig']['bx-image-bg-menu-page-size'] = $this->_setBgSize($sName . '_menu_page_bg_image_size', 'cover');
+        $this->_aConfig['aLessConfig']['bx-image-bg-menu-slide'] = $this->_setBgUrl($sName . '_menu_slide_bg_image', $oStorage);
+        $this->_aConfig['aLessConfig']['bx-image-bg-menu-slide-repeat'] = $this->_setBgRepeat($sName . '_menu_slide_bg_image_repeat', 'no-repeat');
+        $this->_aConfig['aLessConfig']['bx-image-bg-menu-slide-attachment'] = $this->_setBgAttachment($sName . '_menu_slide_bg_image_attachment', 'scroll');
+        $this->_aConfig['aLessConfig']['bx-image-bg-menu-slide-size'] = $this->_setBgSize($sName . '_menu_slide_bg_image_size', 'cover');
+
+
+        //--- Shadow
+        $this->_aConfig['aLessConfig']['bx-shadow-header'] = $this->_setShadow($sName . '_header_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-footer'] = $this->_setShadow($sName . '_footer_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-cover'] = $this->_setShadow($sName . '_cover_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-cover-icon'] = $this->_setShadow($sName . '_cover_icon_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-block'] = $this->_setShadow($sName . '_block_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-card'] = $this->_setShadow($sName . '_card_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-popup'] = $this->_setShadow($sName . '_popup_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-menu-main'] = $this->_setShadow($sName . '_menu_main_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-menu-account'] = $this->_setShadow($sName . '_menu_account_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-menu-add'] = $this->_setShadow($sName . '_menu_add_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-menu-page'] = $this->_setShadow($sName . '_menu_page_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-menu-slide'] = $this->_setShadow($sName . '_menu_slide_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-form-input'] = $this->_setShadow($sName . '_form_input_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-button'] = $this->_setShadow($sName . '_button_lg_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-button-small'] = $this->_setShadow($sName . '_button_sm_shadow');
+
+        $this->_aConfig['aLessConfig']['bx-shadow-text-cover'] = $this->_setShadowFont($sName . '_cover_text_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-font-menu-main'] = $this->_setShadowFont($sName . '_menu_main_font_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-font-menu-account'] = $this->_setShadowFont($sName . '_menu_account_font_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-font-menu-add'] = $this->_setShadowFont($sName . '_menu_add_font_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-font-menu-page'] = $this->_setShadowFont($sName . '_menu_page_font_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-font-menu-slide'] = $this->_setShadowFont($sName . '_menu_slide_font_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-font-button'] = $this->_setShadowFont($sName . '_button_lg_font_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-font-button-small'] = $this->_setShadowFont($sName . '_button_sm_font_shadow');
+
+        //--- Height
+        $this->_aConfig['aLessConfig']['bx-height-header'] = $this->_setSize($sName . '_header_height', '3rem');
+        $this->_aConfig['aLessConfig']['bx-height-cover'] = $this->_setSize($sName . '_cover_height', '40vh');
+        $this->_aConfig['aLessConfig']['bx-height-block-title-div'] = $this->_setSize($sName . '_block_title_div_height', '1px');
+        $this->_aConfig['aLessConfig']['bx-height-form-input'] = $this->_setSize($sName . '_form_input_height', '2.2rem');
+        $this->_aConfig['aLessConfig']['bx-height-button'] = $this->_setSize($sName . '_button_lg_height', '2.25rem');
+        $this->_aConfig['aLessConfig']['bx-height-button-small'] = $this->_setSize($sName . '_button_sm_height', '1.5rem');
+
+
+        //--- Title/Content Margins
+        $this->_aConfig['aLessConfig']['bx-content-padding-header'] = $this->_setMargin($sName . '_header_content_padding');
+        $this->_aConfig['aLessConfig']['bx-content-padding-footer'] = $this->_setMargin($sName . '_footer_content_padding');
+        $this->_aConfig['aLessConfig']['bx-content-padding-cover'] = $this->_setMargin($sName . '_cover_content_padding');
+        $this->_aConfig['aLessConfig']['bx-content-padding-block'] = $this->_setMargin($sName . '_block_content_padding');
+        $this->_aConfig['aLessConfig']['bx-content-padding-card'] = $this->_setMargin($sName . '_card_content_padding');
+        $this->_aConfig['aLessConfig']['bx-content-padding-popup'] = $this->_setMargin($sName . '_popup_content_padding');
+        $this->_aConfig['aLessConfig']['bx-content-padding-menu-main'] = $this->_setMargin($sName . '_menu_main_content_padding');
+        $this->_aConfig['aLessConfig']['bx-content-padding-menu-account'] = $this->_setMargin($sName . '_menu_account_content_padding');
+        $this->_aConfig['aLessConfig']['bx-content-padding-menu-add'] = $this->_setMargin($sName . '_menu_add_content_padding');
+        $this->_aConfig['aLessConfig']['bx-content-padding-menu-page'] = $this->_setMargin($sName . '_menu_page_content_padding');
+        $this->_aConfig['aLessConfig']['bx-content-padding-menu-slide'] = $this->_setMargin($sName . '_menu_slide_content_padding');
+
+        $this->_aConfig['aLessConfig']['bx-title-padding-block'] = $this->_setMargin($sName . '_block_title_padding');
+        $this->_aConfig['aLessConfig']['bx-title-padding-popup'] = $this->_setMargin($sName . '_popup_title_padding');
+
+
+        //--- Colors
+        if($this->_isModule) {
+            $this->_aConfig['aLessConfig']['bx-color-hl'] = $this->_setColorRgba($sName . '_general_item_bg_color_hover', 'rgba(196, 248, 156, 0.2)');
+            $this->_aConfig['aLessConfig']['bx-color-active'] = $this->_setColorRgba($sName . '_general_item_bg_color_active', 'rgba(196, 248, 156, 0.4)');
+            $this->_aConfig['aLessConfig']['bx-color-disabled'] = $this->_setColorRgba($sName . '_general_item_bg_color_disabled', 'rgba(221, 221, 221, 1.0)');
+        }
+
+        $this->_aConfig['aLessConfig']['bx-color-header'] = $this->_setColorRgba($sName . '_header_bg_color', 'rgba(59, 134, 134, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-footer'] = $this->_setColorRgba($sName . '_footer_bg_color', 'rgba(255, 255, 255, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-page'] = $this->_setColorRgb($sName . '_body_bg_color', 'rgb(255, 255, 255)');
+        $this->_aConfig['aLessConfig']['bx-color-cover'] = $this->_setColorRgba($sName . '_cover_bg_color', 'rgba(255, 255, 255, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-block'] = $this->_setColorRgba($sName . '_block_bg_color', 'rgba(255, 255, 255, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-block-title'] = $this->_setColorRgba($sName . '_block_title_bg_color', 'rgba(255, 255, 255, 1.0)');
+        $this->_aConfig['aLessConfig']['bx-color-block-title-div'] = $this->_setColorRgba($sName . '_block_title_div_bg_color', 'rgba(208, 208, 208, 1)');        
+        $this->_aConfig['aLessConfig']['bx-color-box'] = $this->_setColorRgba($sName . '_card_bg_color', 'rgba(242, 242, 242, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-box-hover'] = $this->_setColorRgba($sName . '_card_bg_color_hover', 'rgba(242, 242, 242, 0.5)');
+        $this->_aConfig['aLessConfig']['bx-color-popup'] = $this->_setColorRgba($sName . '_popup_bg_color', 'rgba(255, 255, 255, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-popup-title'] = $this->_setColorRgba($sName . '_popup_title_bg_color', 'rgba(40, 60, 80, 0.9)');
+        $this->_aConfig['aLessConfig']['bx-color-menu-main'] = $this->_setColorRgba($sName . '_menu_main_bg_color', 'rgba(255, 255, 255, 0.9)');
+        $this->_aConfig['aLessConfig']['bx-color-menu-account'] = $this->_setColorRgba($sName . '_menu_account_bg_color', 'rgba(255, 255, 255, 0.9)');
+        $this->_aConfig['aLessConfig']['bx-color-menu-add'] = $this->_setColorRgba($sName . '_menu_add_bg_color', 'rgba(255, 255, 255, 0.9)');
+        $this->_aConfig['aLessConfig']['bx-color-menu-page'] = $this->_setColorRgba($sName . '_menu_page_bg_color', 'rgba(242, 242, 242, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-menu-slide'] = $this->_setColorRgba($sName . '_menu_slide_bg_color', 'rgba(255, 255, 255, 0.9)');
+        $this->_aConfig['aLessConfig']['bx-color-form-input'] = $this->_setColorRgba($sName . '_form_input_bg_color', 'rgba(255, 255, 255, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-form-input-active'] = $this->_setColorRgba($sName . '_form_input_bg_color_active', 'rgba(255, 255, 255, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-button'] = $this->_setColorRgba($sName . '_button_lg_bg_color', 'rgba(108, 170, 138, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-button-hover'] = $this->_setColorRgba($sName . '_button_lg_bg_color_hover', 'rgba(58, 134, 134, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-button-small'] = $this->_setColorRgba($sName . '_button_sm_bg_color', 'rgba(108, 170, 138, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-button-small-hover'] = $this->_setColorRgba($sName . '_button_sm_bg_color_hover', 'rgba(58, 134, 134, 1)');
+
+        $this->_aConfig['aLessConfig']['bx-color-font-cover'] = $this->_setColorRgba($sName . '_cover_font_color', 'rgba(255, 255, 255, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-font-block-title'] = $this->_setColorRgba($sName . '_block_title_font_color', 'rgba(0, 0, 20, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-font-popup-title'] = $this->_setColorRgba($sName . '_popup_title_font_color', 'rgba(255, 255, 255, 1.0)');
+
+        $sDefColBorder = 'rgba(208, 208, 208, 1)';
+        $this->_aConfig['aLessConfig']['bx-color-border-header'] = $this->_setColorRgba($sName . '_header_border_color', $sDefColBorder);
+        $this->_aConfig['aLessConfig']['bx-color-border-footer'] = $this->_setColorRgba($sName . '_footer_border_color', $sDefColBorder);
+        $this->_aConfig['aLessConfig']['bx-color-border-cover'] = $this->_setColorRgba($sName . '_cover_border_color', $sDefColBorder);
+        $this->_aConfig['aLessConfig']['bx-color-border-cover-icon'] = $this->_setColorRgba($sName . '_cover_icon_border_color', $sDefColBorder);
+        $this->_aConfig['aLessConfig']['bx-color-border-block'] = $this->_setColorRgba($sName . '_block_border_color', $sDefColBorder);
+        $this->_aConfig['aLessConfig']['bx-color-border-block-title'] = $this->_setColorRgba($sName . '_block_title_border_color', $sDefColBorder);
+        $this->_aConfig['aLessConfig']['bx-color-border-box'] = $this->_setColorRgba($sName . '_card_border_color', $sDefColBorder);
+        $this->_aConfig['aLessConfig']['bx-color-border-popup'] = $this->_setColorRgba($sName . '_popup_border_color', $sDefColBorder);
+        $this->_aConfig['aLessConfig']['bx-color-border-menu-main'] = $this->_setColorRgba($sName . '_menu_main_border_color', $sDefColBorder);
+        $this->_aConfig['aLessConfig']['bx-color-border-menu-account'] = $this->_setColorRgba($sName . '_menu_account_border_color', $sDefColBorder);
+        $this->_aConfig['aLessConfig']['bx-color-border-menu-add'] = $this->_setColorRgba($sName . '_menu_add_border_color', $sDefColBorder);
+        $this->_aConfig['aLessConfig']['bx-color-border-menu-page'] = $this->_setColorRgba($sName . '_menu_page_border_color', $sDefColBorder);
+        $this->_aConfig['aLessConfig']['bx-color-border-menu-slide'] = $this->_setColorRgba($sName . '_menu_slide_border_color', $sDefColBorder);
+        $this->_aConfig['aLessConfig']['bx-color-border-form-input'] = $this->_setColorRgba($sName . '_form_input_border_color', 'rgba(121, 189, 154, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-border-form-input-active'] = $this->_setColorRgba($sName . '_form_input_border_color_active', 'rgba(108, 170, 138, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-border-button'] = $this->_setColorRgba($sName . '_button_lg_border_color', $sDefColBorder);
+        $this->_aConfig['aLessConfig']['bx-color-border-button-hover'] = $this->_setColorRgba($sName . '_button_lg_border_color_hover', $sDefColBorder);
+        $this->_aConfig['aLessConfig']['bx-color-border-button-small'] = $this->_setColorRgba($sName . '_button_sm_border_color', $sDefColBorder);
+        $this->_aConfig['aLessConfig']['bx-color-border-button-small-hover'] = $this->_setColorRgba($sName . '_button_sm_border_color_hover', $sDefColBorder);
+
+        $this->_aConfig['aLessConfig']['bx-color-icon-header'] = $this->_setColorRgba($sName . '_header_icon_color', 'rgba(255, 255, 255, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-icon-header-hover'] = $this->_setColorRgba($sName . '_header_icon_color_hover', 'rgba(255, 255, 255, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-icon-footer'] = $this->_setColorRgba($sName . '_footer_icon_color', 'rgba(62, 134, 133, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-icon-footer-hover'] = $this->_setColorRgba($sName . '_footer_icon_color_hover', 'rgba(62, 134, 133, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-icon-body'] = $this->_setColorRgba($sName . '_body_icon_color', 'rgba(62, 134, 133, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-icon-body-hover'] = $this->_setColorRgba($sName . '_body_icon_color_hover', 'rgba(62, 134, 133, 1)');
+
+        $this->_aConfig['aLessConfig']['bx-color-link-header'] = $this->_setColorRgba($sName . '_header_link_color', 'rgba(255, 255, 255, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-link-header-hover'] = $this->_setColorRgba($sName . '_header_link_color_hover', 'rgba(255, 255, 255, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-link-footer'] = $this->_setColorRgba($sName . '_footer_link_color', 'rgba(62, 134, 133, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-link-footer-hover'] = $this->_setColorRgba($sName . '_footer_link_color_hover', 'rgba(62, 134, 133, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-link-body'] = $this->_setColorRgba($sName . '_body_link_color', 'rgba(62, 134, 133, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-link-body-hover'] = $this->_setColorRgba($sName . '_body_link_color_hover', 'rgba(62, 134, 133, 1)');
+
+        //--- Borders
+        $this->_aConfig['aLessConfig']['bx-border-width-header'] = $this->_setSize($sName . '_header_border_size');
+        $this->_aConfig['aLessConfig']['bx-border-width-footer'] = $this->_setSize($sName . '_footer_border_size', '1px');
+        $this->_aConfig['aLessConfig']['bx-border-width-cover'] = $this->_setSize($sName . '_cover_border_size', '0px');
+        $this->_aConfig['aLessConfig']['bx-border-width-cover-icon'] = $this->_setSize($sName . '_cover_icon_border_size', '1px');
+        $this->_aConfig['aLessConfig']['bx-border-width-block'] = $this->_setSize($sName . '_block_border_size');
+        $this->_aConfig['aLessConfig']['bx-border-width-block-title'] = $this->_setSize($sName . '_block_title_border_size');
+        $this->_aConfig['aLessConfig']['bx-border-width-box'] = $this->_setSize($sName . '_card_border_size');
+        $this->_aConfig['aLessConfig']['bx-border-width-popup'] = $this->_setSize($sName . '_popup_border_size');
+        $this->_aConfig['aLessConfig']['bx-border-width-menu-main'] = $this->_setSize($sName . '_menu_main_border_size');
+        $this->_aConfig['aLessConfig']['bx-border-width-menu-account'] = $this->_setSize($sName . '_menu_account_border_size');
+        $this->_aConfig['aLessConfig']['bx-border-width-menu-add'] = $this->_setSize($sName . '_menu_add_border_size');
+        $this->_aConfig['aLessConfig']['bx-border-width-menu-page'] = $this->_setSize($sName . '_menu_page_border_size');
+        $this->_aConfig['aLessConfig']['bx-border-width-menu-slide'] = $this->_setSize($sName . '_menu_slide_border_size');
+        $this->_aConfig['aLessConfig']['bx-border-width-form-input'] = $this->_setSize($sName . '_form_input_border_size');
+        $this->_aConfig['aLessConfig']['bx-border-width-button'] = $this->_setSize($sName . '_button_lg_border_size');
+        $this->_aConfig['aLessConfig']['bx-border-width-button-small'] = $this->_setSize($sName . '_button_sm_border_size');
+
+        $this->_aConfig['aLessConfig']['bx-border-radius-block'] = $this->_setSize($sName . '_block_border_radius');
+        list(
+            $this->_aConfig['aLessConfig']['bx-border-radius-block-tl'],
+            $this->_aConfig['aLessConfig']['bx-border-radius-block-tr'],
+            $this->_aConfig['aLessConfig']['bx-border-radius-block-br'],
+            $this->_aConfig['aLessConfig']['bx-border-radius-block-bl']
+        ) = $this->_setSizeDivided($this->_aConfig['aLessConfig']['bx-border-radius-block']);
+        $this->_aConfig['aLessConfig']['bx-border-radius-cover'] = $this->_setSize($sName . '_cover_border_radius');
+        $this->_aConfig['aLessConfig']['bx-border-radius-cover-icon'] = $this->_setSize($sName . '_cover_icon_border_radius');
+        $this->_aConfig['aLessConfig']['bx-border-radius-block-title'] = $this->_setSize($sName . '_block_title_border_radius');
+        $this->_aConfig['aLessConfig']['bx-border-radius-box'] = $this->_setSize($sName . '_card_border_radius', '3px');
+        list(
+            $this->_aConfig['aLessConfig']['bx-border-radius-box-tl'],
+            $this->_aConfig['aLessConfig']['bx-border-radius-box-tr'],
+            $this->_aConfig['aLessConfig']['bx-border-radius-box-br'],
+            $this->_aConfig['aLessConfig']['bx-border-radius-box-bl']
+        ) = $this->_setSizeDivided($this->_aConfig['aLessConfig']['bx-border-radius-box']);
+        list(
+            $this->_aConfig['aLessConfig']['bx-border-radius-box-itl'],
+            $this->_aConfig['aLessConfig']['bx-border-radius-box-itr'],
+            $this->_aConfig['aLessConfig']['bx-border-radius-box-ibr'],
+            $this->_aConfig['aLessConfig']['bx-border-radius-box-ibl']
+        ) = $this->_setInnerSizeDivided($this->_aConfig['aLessConfig']['bx-border-radius-box']);
+        $this->_aConfig['aLessConfig']['bx-border-radius-popup'] = $this->_setSize($sName . '_popup_border_radius', '3px');
+        list(
+            $this->_aConfig['aLessConfig']['bx-border-radius-popup-tl'],
+            $this->_aConfig['aLessConfig']['bx-border-radius-popup-tr'],
+            $this->_aConfig['aLessConfig']['bx-border-radius-popup-br'],
+            $this->_aConfig['aLessConfig']['bx-border-radius-popup-bl']
+        ) = $this->_setSizeDivided($this->_aConfig['aLessConfig']['bx-border-radius-popup']);
+        $this->_aConfig['aLessConfig']['bx-border-radius-button'] = $this->_setSize($sName . '_button_lg_border_radius');
+        $this->_aConfig['aLessConfig']['bx-border-radius-button-small'] = $this->_setSize($sName . '_button_sm_border_radius');
+
+        //--- Text
+        $this->_aConfig['aLessConfig']['bx-text-align-cover'] = $this->_setAlign($sName . '_cover_text_align');
+
+        //--- Default Fonts
+        if($this->_isModule) {
+            $this->_aConfig['aLessConfig']['bx-font-family'] = $this->_setValue($sName . '_font_family', 'Helvetica, Arial, sans-serif');
+            $this->_aConfig['aLessConfig']['bx-font-size-default'] = $this->_setSize($sName . '_font_size_default', '18px');
+            $this->_aConfig['aLessConfig']['bx-font-size-small'] = $this->_setSize($sName . '_font_size_small', '14px');
+            $this->_aConfig['aLessConfig']['bx-font-size-middle'] = $this->_setSize($sName . '_font_size_middle', '16px');
+            $this->_aConfig['aLessConfig']['bx-font-size-large'] = $this->_setSize($sName . '_font_size_large', '22px');
+            $this->_aConfig['aLessConfig']['bx-font-size-h1'] = $this->_setSize($sName . '_font_size_h1', '38px');
+            $this->_aConfig['aLessConfig']['bx-font-size-h2'] = $this->_setSize($sName . '_font_size_h2', '24px');
+            $this->_aConfig['aLessConfig']['bx-font-size-h3'] = $this->_setSize($sName . '_font_size_h3', '18px');
+
+            $this->_aConfig['aLessConfig']['bx-font-color-default'] = $this->_setColorRgba($sName . '_font_color_default', 'rgba(51, 51, 51, 1)');
+            $this->_aConfig['aLessConfig']['bx-font-color-grayed'] = $this->_setColorRgba($sName . '_font_color_grayed', 'rgba(153, 153, 153, 1)');
+            $this->_aConfig['aLessConfig']['bx-font-color-contrasted'] = $this->_setColorRgba($sName . '_font_color_contrasted', 'rgba(255, 255, 255, 1)');
+        }
+
+        //--- Font Family
+        $this->_aConfig['aLessConfig']['bx-font-family-cover'] = $this->_setValue($sName . '_cover_font_family');
+        $this->_aConfig['aLessConfig']['bx-font-family-block-title'] = $this->_setValue($sName . '_block_title_font_family');
+        $this->_aConfig['aLessConfig']['bx-font-family-popup-title'] = $this->_setValue($sName . '_popup_title_font_family');
+        $this->_aConfig['aLessConfig']['bx-font-family-form-input'] = $this->_setValue($sName . '_form_input_font_family');
+        $this->_aConfig['aLessConfig']['bx-font-family-menu-main'] = $this->_setValue($sName . '_menu_main_font_family');
+        $this->_aConfig['aLessConfig']['bx-font-family-menu-account'] = $this->_setValue($sName . '_menu_account_font_family');
+        $this->_aConfig['aLessConfig']['bx-font-family-menu-add'] = $this->_setValue($sName . '_menu_add_font_family');
+        $this->_aConfig['aLessConfig']['bx-font-family-menu-page'] = $this->_setValue($sName . '_menu_page_font_family');
+        $this->_aConfig['aLessConfig']['bx-font-family-menu-slide'] = $this->_setValue($sName . '_menu_slide_font_family');
+        $this->_aConfig['aLessConfig']['bx-font-family-button'] = $this->_setValue($sName . '_button_lg_font_family');
+        $this->_aConfig['aLessConfig']['bx-font-family-button-small'] = $this->_setValue($sName . '_button_sm_font_family');
+
+        //--- Font Size
+        $this->_aConfig['aLessConfig']['bx-font-size-cover'] = $this->_setSize($sName . '_cover_font_size', '2.0rem');
+        $this->_aConfig['aLessConfig']['bx-font-size-block-title'] = $this->_setSize($sName . '_block_title_font_size', '1.5rem');
+        $this->_aConfig['aLessConfig']['bx-font-size-popup-title'] = $this->_setSize($sName . '_popup_title_font_size', '1.5rem');
+        $this->_aConfig['aLessConfig']['bx-font-size-form-input'] = $this->_setSize($sName . '_form_input_font_size', '1.125rem');
+        $this->_aConfig['aLessConfig']['bx-font-size-menu-main'] = $this->_setSize($sName . '_menu_main_font_size', '1.125rem');
+        $this->_aConfig['aLessConfig']['bx-font-size-menu-account'] = $this->_setSize($sName . '_menu_account_font_size', '1.125rem');
+        $this->_aConfig['aLessConfig']['bx-font-size-menu-add'] = $this->_setSize($sName . '_menu_add_font_size', '1.125rem');
+        $this->_aConfig['aLessConfig']['bx-font-size-menu-page'] = $this->_setSize($sName . '_menu_page_font_size', '1.2rem');
+        $this->_aConfig['aLessConfig']['bx-font-size-menu-slide'] = $this->_setSize($sName . '_menu_slide_font_size', '1.0rem');
+        $this->_aConfig['aLessConfig']['bx-font-size-button'] = $this->_setSize($sName . '_button_lg_font_size', '1rem');
+        $this->_aConfig['aLessConfig']['bx-font-size-button-small'] = $this->_setSize($sName . '_button_sm_font_size', '0.9rem');
+
+        //--- Font Color
+        $sColFontDef = 'rgba(51, 51, 51, 1.0)';		//--- Default
+        $sColFontGrd = 'rgba(153, 153, 153, 1)';	//--- Grayed
+        $sColFontCnt = 'rgba(255, 255, 255, 1)';	//--- Contrasted
+        $sColFontLnk = 'rgba(62, 134, 133, 1)';		//--- Link
+        $sColFontLnkHov = 'rgba(62, 134, 133, 1)';	//--- Link on-hiver
+        $this->_aConfig['aLessConfig']['bx-font-color-footer'] = $this->_setColorRgba($sName . '_footer_font_color', $sColFontDef);
+        $this->_aConfig['aLessConfig']['bx-font-color-menu-main'] = $this->_setColorRgba($sName . '_menu_main_font_color', 'rgba(62, 134, 133, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-menu-main-hover'] = $this->_setColorRgba($sName . '_menu_main_font_color_hover', 'rgba(62, 134, 133, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-menu-main-active'] = $this->_setColorRgba($sName . '_menu_main_font_color_active', 'rgba(0, 0, 0, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-menu-account'] = $this->_setColorRgba($sName . '_menu_account_font_color', 'rgba(62, 134, 133, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-menu-account-hover'] = $this->_setColorRgba($sName . '_menu_account_font_color_hover', 'rgba(62, 134, 133, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-menu-account-active'] = $this->_setColorRgba($sName . '_menu_account_font_color_active', 'rgba(0, 0, 0, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-menu-add'] = $this->_setColorRgba($sName . '_menu_add_font_color', 'rgba(62, 134, 133, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-menu-add-hover'] = $this->_setColorRgba($sName . '_menu_add_font_color_hover', 'rgba(62, 134, 133, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-menu-add-active'] = $this->_setColorRgba($sName . '_menu_add_font_color_active', 'rgba(0, 0, 0, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-menu-page'] = $this->_setColorRgba($sName . '_menu_page_font_color', 'rgba(62, 134, 133, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-menu-page-hover'] = $this->_setColorRgba($sName . '_menu_page_font_color_hover', 'rgba(62, 134, 133, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-menu-page-active'] = $this->_setColorRgba($sName . '_menu_page_font_color_active', 'rgba(0, 0, 0, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-menu-slide'] = $this->_setColorRgba($sName . '_menu_slide_font_color', 'rgba(62, 134, 133, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-menu-slide-hover'] = $this->_setColorRgba($sName . '_menu_slide_font_color_hover', 'rgba(62, 134, 133, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-menu-slide-active'] = $this->_setColorRgba($sName . '_menu_slide_font_color_active', 'rgba(0, 0, 0, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-button'] = $this->_setColorRgba($sName . '_button_lg_font_color', 'rgba(255, 255, 255, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-button-hover'] = $this->_setColorRgba($sName . '_button_lg_font_color_hover', 'rgba(255, 255, 255, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-button-small'] = $this->_setColorRgba($sName . '_button_sm_font_color', 'rgba(255, 255, 255, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-button-small-hover'] = $this->_setColorRgba($sName . '_button_sm_font_color_hover', 'rgba(255, 255, 255, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-form-input'] = $this->_setColorRgba($sName . '_form_input_font_color', $sColFontDef);
+        $this->_aConfig['aLessConfig']['bx-font-color-default-h1'] = $this->_setColorRgba($sName . '_font_color_default_h1', $sColFontDef);
+        $this->_aConfig['aLessConfig']['bx-font-color-grayed-h1'] = $this->_setColorRgba($sName . '_font_color_grayed_h1', $sColFontGrd);
+        $this->_aConfig['aLessConfig']['bx-font-color-contrasted-h1'] = $this->_setColorRgba($sName . '_font_color_contrasted_h1', $sColFontCnt);
+        $this->_aConfig['aLessConfig']['bx-font-color-link-h1'] = $this->_setColorRgba($sName . '_font_color_link_h1', $sColFontLnk);
+        $this->_aConfig['aLessConfig']['bx-font-color-link-h1-hover'] = $this->_setColorRgba($sName . '_font_color_link_h1_hover', $sColFontLnkHov);
+        $this->_aConfig['aLessConfig']['bx-font-color-default-h2'] = $this->_setColorRgba($sName . '_font_color_default_h2', $sColFontDef);
+        $this->_aConfig['aLessConfig']['bx-font-color-grayed-h2'] = $this->_setColorRgba($sName . '_font_color_grayed_h2', $sColFontGrd);
+        $this->_aConfig['aLessConfig']['bx-font-color-contrasted-h2'] = $this->_setColorRgba($sName . '_font_color_contrasted_h2', $sColFontCnt);
+        $this->_aConfig['aLessConfig']['bx-font-color-link-h2'] = $this->_setColorRgba($sName . '_font_color_link_h2', $sColFontLnk);
+        $this->_aConfig['aLessConfig']['bx-font-color-link-h2-hover'] = $this->_setColorRgba($sName . '_font_color_link_h2_hover', $sColFontLnkHov);
+        $this->_aConfig['aLessConfig']['bx-font-color-default-h3'] = $this->_setColorRgba($sName . '_font_color_default_h3', $sColFontDef);
+        $this->_aConfig['aLessConfig']['bx-font-color-grayed-h3'] = $this->_setColorRgba($sName . '_font_color_grayed_h3', $sColFontGrd);
+        $this->_aConfig['aLessConfig']['bx-font-color-contrasted-h3'] = $this->_setColorRgba($sName . '_font_color_contrasted_h3', $sColFontCnt);
+        $this->_aConfig['aLessConfig']['bx-font-color-link-h3'] = $this->_setColorRgba($sName . '_font_color_link_h3', $sColFontLnk);
+        $this->_aConfig['aLessConfig']['bx-font-color-link-h3-hover'] = $this->_setColorRgba($sName . '_font_color_link_h3_hover', $sColFontLnkHov);
+
+        //--- Font Weight
+        $this->_aConfig['aLessConfig']['bx-font-weight-cover'] = $this->_setValue($sName . '_cover_font_weight', '700');
+        $this->_aConfig['aLessConfig']['bx-font-weight-block-title'] = $this->_setValue($sName . '_block_title_font_weight', '500');
+        $this->_aConfig['aLessConfig']['bx-font-weight-menu-main'] = $this->_setValue($sName . '_menu_main_font_weight', '400');
+        $this->_aConfig['aLessConfig']['bx-font-weight-menu-account'] = $this->_setValue($sName . '_menu_account_font_weight', '400');
+        $this->_aConfig['aLessConfig']['bx-font-weight-menu-add'] = $this->_setValue($sName . '_menu_add_font_weight', '400');
+        $this->_aConfig['aLessConfig']['bx-font-weight-menu-page'] = $this->_setValue($sName . '_menu_page_font_weight', '400');
+        $this->_aConfig['aLessConfig']['bx-font-weight-menu-slide'] = $this->_setValue($sName . '_menu_slide_font_weight', '400');
+        $this->_aConfig['aLessConfig']['bx-font-weight-button'] = $this->_setValue($sName . '_button_lg_font_weight', '400');
+        $this->_aConfig['aLessConfig']['bx-font-weight-button-small'] = $this->_setValue($sName . '_button_sm_font_weight', '400');
+        $this->_aConfig['aLessConfig']['bx-font-weight-h1'] = $this->_setValue($sName . '_font_weight_h1', '700');
+        $this->_aConfig['aLessConfig']['bx-font-weight-h2'] = $this->_setValue($sName . '_font_weight_h2', '700');
+        $this->_aConfig['aLessConfig']['bx-font-weight-h3'] = $this->_setValue($sName . '_font_weight_h3', '500');
+
+        //--- Viewport 
+        $this->_aConfig['aLessConfig']['bx-viewport-font-tablet'] = $this->_setValue($sName . '_vpt_font_size_scale', '100%');
+        $this->_aConfig['aLessConfig']['bx-viewport-font-mobile'] = $this->_setValue($sName . '_vpm_font_size_scale', '85%');
+
+        if($this->_isModule)
+            $this->setPageWidth('bx_decorous_page_width');
+    }
+}
+
+/** @} */

+ 68 - 0
modules/boonex/decorous/updates/10.0.0_10.0.1/source/install/config.php

@@ -0,0 +1,68 @@
+<?php
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Decorous Decorous template
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+$aConfig = array(
+    /**
+     * Main Section.
+     */
+    'type' => BX_DOL_MODULE_TYPE_TEMPLATE,
+    'name' => 'bx_decorous',
+    'title' => 'Decorous',
+    'note' => 'Design template',
+    'version' => '10.0.1',
+    'vendor' => 'Boonex',
+    'help_url' => 'http://feed.una.io/?section={module_name}',
+
+    'compatible_with' => array(
+        '10.0.0-B2'
+    ),
+
+    /**
+     * 'home_dir' and 'home_uri' - should be unique. Don't use spaces in 'home_uri' and the other special chars.
+     */
+    'home_dir' => 'boonex/decorous/',
+    'home_uri' => 'decorous',
+
+    'db_prefix' => 'bx_decorous_',
+    'class_prefix' => 'BxDecorous',
+
+    /**
+     * Category for language keys.
+     */
+    'language_category' => 'Boonex Decorous Template',
+
+    /**
+     * 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
+    ),
+    'disable' => array(
+        'execute_sql' => 1
+    ),
+
+    /**
+     * Dependencies Section
+     */
+    'dependencies' => array(),
+);
+
+/** @} */

+ 440 - 0
modules/boonex/decorous/updates/10.0.0_10.0.1/source/install/sql/install.sql

@@ -0,0 +1,440 @@
+SET @sName = 'bx_decorous';
+
+
+-- SETTINGS
+INSERT INTO `sys_options_types`(`group`, `name`, `caption`, `icon`, `order`) VALUES 
+('templates', @sName, '_bx_decorous_stg_cpt_type', 'bx_decorous@modules/boonex/decorous/|std-icon.svg', 2);
+SET @iTypeId = LAST_INSERT_ID();
+
+-- SETTINGS: Decorous template System
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_system'), '_bx_decorous_stg_cpt_category_system', 10);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_switcher_title'), '_bx_decorous_stg_cpt_option_switcher_name', 'Decorous', 'digit', '', '', '', 1);
+
+
+-- SETTINGS: Decorous template Styles General
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_styles_general'), '_bx_decorous_stg_cpt_category_styles_general', 20);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_general_item_bg_color_hover'), '_bx_decorous_stg_cpt_option_general_item_bg_color_hover', 'rgba(210, 230, 250, 0.2)', 'rgba', '', '', '', 1),
+(@iCategoryId, CONCAT(@sName, '_general_item_bg_color_active'), '_bx_decorous_stg_cpt_option_general_item_bg_color_active', 'rgba(210, 230, 250, 0.4)', 'rgba', '', '', '', 2),
+(@iCategoryId, CONCAT(@sName, '_general_item_bg_color_disabled'), '_bx_decorous_stg_cpt_option_general_item_bg_color_disabled', 'rgba(221, 221, 221, 1.0)', 'rgba', '', '', '', 3);
+
+
+-- SETTINGS: Decorous template Styles Header
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_styles_header'), '_bx_decorous_stg_cpt_category_styles_header', 30);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_header_height'), '_bx_decorous_stg_cpt_option_header_height', '4rem', 'digit', '', '', '', 1),
+(@iCategoryId, CONCAT(@sName, '_header_content_padding'), '_bx_decorous_stg_cpt_option_header_content_padding', '0.5rem', 'digit', '', '', '', 2),
+(@iCategoryId, CONCAT(@sName, '_header_bg_color'), '_bx_decorous_stg_cpt_option_header_bg_color', 'rgba(40, 60, 80, 1.0)', 'rgba', '', '', '', 3),
+(@iCategoryId, CONCAT(@sName, '_header_bg_image'), '_bx_decorous_stg_cpt_option_header_bg_image', '', 'image', '', '', '', 4),
+(@iCategoryId, CONCAT(@sName, '_header_bg_image_repeat'), '_bx_decorous_stg_cpt_option_header_bg_image_repeat', 'no-repeat', 'select', 'no-repeat,repeat,repeat-x,repeat-y', '', '', 5),
+(@iCategoryId, CONCAT(@sName, '_header_bg_image_attachment'), '_bx_decorous_stg_cpt_option_header_bg_image_attachment', 'scroll', 'select', 'fixed,scroll,local', '', '', 6),
+(@iCategoryId, CONCAT(@sName, '_header_bg_image_size'), '_bx_decorous_stg_cpt_option_header_bg_image_size', 'cover', 'select', 'auto,cover,contain', '', '', 7),
+(@iCategoryId, CONCAT(@sName, '_site_logo'), '_bx_decorous_stg_cpt_option_site_logo', '', 'image', '', '', '', 8),
+(@iCategoryId, CONCAT(@sName, '_site_logo_alt'), '_bx_decorous_stg_cpt_option_site_logo_alt', '', 'text', '', '', '', 9),
+(@iCategoryId, CONCAT(@sName, '_site_logo_width'), '_bx_decorous_stg_cpt_option_site_logo_width', '240', 'digit', '', '', '', 10),
+(@iCategoryId, CONCAT(@sName, '_site_logo_height'), '_bx_decorous_stg_cpt_option_site_logo_height', '48', 'digit', '', '', '', 11),
+(@iCategoryId, CONCAT(@sName, '_header_border_color'), '_bx_decorous_stg_cpt_option_header_border_color', 'rgba(0, 0, 0, 0.2)', 'rgba', '', '', '', 12),
+(@iCategoryId, CONCAT(@sName, '_header_border_size'), '_bx_decorous_stg_cpt_option_header_border_size', '2px', 'digit', '', '', '', 13),
+(@iCategoryId, CONCAT(@sName, '_header_shadow'), '_bx_decorous_stg_cpt_option_header_shadow', '0px 1px 3px 0px rgba(0, 0, 0, 0.5)', 'digit', '', '', '', 14),
+(@iCategoryId, CONCAT(@sName, '_header_icon_color'), '_bx_decorous_stg_cpt_option_header_icon_color', 'rgba(215, 235, 255, 1)', 'rgba', '', '', '', 15),
+(@iCategoryId, CONCAT(@sName, '_header_icon_color_hover'), '_bx_decorous_stg_cpt_option_header_icon_color_hover', 'rgba(255, 255, 255, 1)', 'rgba', '', '', '', 16),
+(@iCategoryId, CONCAT(@sName, '_header_link_color'), '_bx_decorous_stg_cpt_option_header_link_color', 'rgba(215, 235, 255, 1)', 'rgba', '', '', '', 17),
+(@iCategoryId, CONCAT(@sName, '_header_link_color_hover'), '_bx_decorous_stg_cpt_option_header_link_color_hover', 'rgba(255, 255, 255, 1)', 'rgba', '', '', '', 18);
+
+-- SETTINGS: Decorous template Styles Footer
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_styles_footer'), '_bx_decorous_stg_cpt_category_styles_footer', 40);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_footer_bg_color'), '_bx_decorous_stg_cpt_option_footer_bg_color', 'rgba(40, 60, 80, 0.0)', 'rgba', '', '', '', 1),
+(@iCategoryId, CONCAT(@sName, '_footer_bg_image'), '_bx_decorous_stg_cpt_option_footer_bg_image', '', 'image', '', '', '', 2),
+(@iCategoryId, CONCAT(@sName, '_footer_bg_image_repeat'), '_bx_decorous_stg_cpt_option_footer_bg_image_repeat', 'no-repeat', 'select', 'no-repeat,repeat,repeat-x,repeat-y', '', '', 3),
+(@iCategoryId, CONCAT(@sName, '_footer_bg_image_attachment'), '_bx_decorous_stg_cpt_option_footer_bg_image_attachment', 'scroll', 'select', 'fixed,scroll,local', '', '', 4),
+(@iCategoryId, CONCAT(@sName, '_footer_bg_image_size'), '_bx_decorous_stg_cpt_option_footer_bg_image_size', 'cover', 'select', 'auto,cover,contain', '', '', 5),
+(@iCategoryId, CONCAT(@sName, '_footer_content_padding'), '_bx_decorous_stg_cpt_option_footer_content_padding', '1rem', 'digit', '', '', '', 6),
+(@iCategoryId, CONCAT(@sName, '_footer_border_color'), '_bx_decorous_stg_cpt_option_footer_border_color', 'rgba(40, 60, 80, 0.1)', 'rgba', '', '', '', 7),
+(@iCategoryId, CONCAT(@sName, '_footer_border_size'), '_bx_decorous_stg_cpt_option_footer_border_size', '1px', 'digit', '', '', '', 8),
+(@iCategoryId, CONCAT(@sName, '_footer_shadow'), '_bx_decorous_stg_cpt_option_footer_shadow', 'none', 'digit', '', '', '', 9),
+(@iCategoryId, CONCAT(@sName, '_footer_font_color'), '_bx_decorous_stg_cpt_option_footer_font_color', 'rgba(40, 60, 80, 1)', 'rgba', '', '', '', 10),
+(@iCategoryId, CONCAT(@sName, '_footer_icon_color'), '_bx_decorous_stg_cpt_option_footer_icon_color', 'rgba(30, 140, 240, 1)', 'rgba', '', '', '', 11),
+(@iCategoryId, CONCAT(@sName, '_footer_icon_color_hover'), '_bx_decorous_stg_cpt_option_footer_icon_color_hover', 'rgba(10, 120, 220, 1)', 'rgba', '', '', '', 12),
+(@iCategoryId, CONCAT(@sName, '_footer_link_color'), '_bx_decorous_stg_cpt_option_footer_link_color', 'rgba(30, 140, 240, 1)', 'rgba', '', '', '', 13),
+(@iCategoryId, CONCAT(@sName, '_footer_link_color_hover'), '_bx_decorous_stg_cpt_option_footer_link_color_hover', 'rgba(10, 120, 220, 1)', 'rgba', '', '', '', 14);
+
+-- SETTINGS: Decorous template Styles Body
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_styles_body'), '_bx_decorous_stg_cpt_category_styles_body', 50);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_body_bg_color'), '_bx_decorous_stg_cpt_option_body_bg_color', 'rgb(230, 240, 250)', 'rgb', '', '', '', 1),
+(@iCategoryId, CONCAT(@sName, '_body_bg_image'), '_bx_decorous_stg_cpt_option_body_bg_image', '', 'image', '', '', '', 2),
+(@iCategoryId, CONCAT(@sName, '_body_bg_image_repeat'), '_bx_decorous_stg_cpt_option_body_bg_image_repeat', 'no-repeat', 'select', 'no-repeat,repeat,repeat-x,repeat-y', '', '', 3),
+(@iCategoryId, CONCAT(@sName, '_body_bg_image_attachment'), '_bx_decorous_stg_cpt_option_body_bg_image_attachment', 'scroll', 'select', 'fixed,scroll,local', '', '', 4),
+(@iCategoryId, CONCAT(@sName, '_body_bg_image_size'), '_bx_decorous_stg_cpt_option_body_bg_image_size', 'cover', 'select', 'auto,cover,contain', '', '', 5),
+(@iCategoryId, CONCAT(@sName, '_page_width'), '_bx_decorous_stg_cpt_option_page_width', '1024', 'digit', '', '', '', 6),
+(@iCategoryId, CONCAT(@sName, '_body_icon_color'), '_bx_decorous_stg_cpt_option_body_icon_color', 'rgba(30, 150, 250, 0.9)', 'rgba', '', '', '', 7),
+(@iCategoryId, CONCAT(@sName, '_body_icon_color_hover'), '_bx_decorous_stg_cpt_option_body_icon_color_hover', 'rgba(30, 150, 250, 1)', 'rgba', '', '', '', 8),
+(@iCategoryId, CONCAT(@sName, '_body_link_color'), '_bx_decorous_stg_cpt_option_body_link_color', 'rgba(30, 150, 250, 0.9)', 'rgba', '', '', '', 9),
+(@iCategoryId, CONCAT(@sName, '_body_link_color_hover'), '_bx_decorous_stg_cpt_option_body_link_color_hover', 'rgba(30, 150, 250, 1)', 'rgba', '', '', '', 10);
+
+
+-- SETTINGS: Decorous template Styles Cover
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_styles_cover'), '_bx_decorous_stg_cpt_category_styles_cover', 55);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_cover_height'), '_bx_decorous_stg_cpt_option_cover_height', '30vh', 'digit', '', '', '', 1),
+(@iCategoryId, CONCAT(@sName, '_cover_bg_color'), '_bx_decorous_stg_cpt_option_cover_bg_color', 'rgba(245, 250, 255, 0.9)', 'rgba', '', '', '', 2),
+(@iCategoryId, CONCAT(@sName, '_cover_content_padding'), '_bx_decorous_stg_cpt_option_cover_content_padding', '2rem 3rem 2rem 3rem', 'digit', '', '', '', 3),
+(@iCategoryId, CONCAT(@sName, '_cover_border_color'), '_bx_decorous_stg_cpt_option_cover_border_color', 'rgba(208, 208, 208, 0)', 'rgba', '', '', '', 4),
+(@iCategoryId, CONCAT(@sName, '_cover_border_size'), '_bx_decorous_stg_cpt_option_cover_border_size', '0px', 'digit', '', '', '', 5),
+(@iCategoryId, CONCAT(@sName, '_cover_border_radius'), '_bx_decorous_stg_cpt_option_cover_border_radius', '0px', 'digit', '', '', '', 6),
+(@iCategoryId, CONCAT(@sName, '_cover_shadow'), '_bx_decorous_stg_cpt_option_cover_shadow', '0px 1px 2px 0px rgba(0, 0, 0, 0.05)', 'digit', '', '', '', 7),
+(@iCategoryId, CONCAT(@sName, '_cover_icon_border_color'), '_bx_decorous_stg_cpt_option_cover_icon_border_color', 'rgba(208, 208, 208, 1)', 'rgba', '', '', '', 8),
+(@iCategoryId, CONCAT(@sName, '_cover_icon_border_size'), '_bx_decorous_stg_cpt_option_cover_icon_border_size', '1px', 'digit', '', '', '', 9),
+(@iCategoryId, CONCAT(@sName, '_cover_icon_border_radius'), '_bx_decorous_stg_cpt_option_cover_icon_border_radius', '3px', 'digit', '', '', '', 10),
+(@iCategoryId, CONCAT(@sName, '_cover_icon_shadow'), '_bx_decorous_stg_cpt_option_cover_icon_shadow', 'none', 'digit', '', '', '', 11),
+(@iCategoryId, CONCAT(@sName, '_cover_text_align'), '_bx_decorous_stg_cpt_option_cover_text_align', 'center', 'select', 'left,center,right', '', '', 12),
+(@iCategoryId, CONCAT(@sName, '_cover_text_shadow'), '_bx_decorous_stg_cpt_option_cover_text_shadow', '0px 1px 3px rgba(0, 0, 0, .3)', 'digit', '', '', '', 13),
+(@iCategoryId, CONCAT(@sName, '_cover_font_family'), '_bx_decorous_stg_cpt_option_cover_font_family', 'Arial, sans-serif', 'digit', '', '', '', 14),
+(@iCategoryId, CONCAT(@sName, '_cover_font_size'), '_bx_decorous_stg_cpt_option_cover_font_size', '2.0rem', 'digit', '', '', '', 15),
+(@iCategoryId, CONCAT(@sName, '_cover_font_color'), '_bx_decorous_stg_cpt_option_cover_font_color', 'rgba(255, 255, 255, 1)', 'rgba', '', '', '', 16),
+(@iCategoryId, CONCAT(@sName, '_cover_font_weight'), '_bx_decorous_stg_cpt_option_cover_font_weight', '700', 'digit', '', '', '', 17);
+
+
+-- SETTINGS: Decorous template Styles Block
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_styles_block'), '_bx_decorous_stg_cpt_category_styles_block', 60);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_block_bg_color'), '_bx_decorous_stg_cpt_option_block_bg_color', 'rgba(245, 250, 255, 0.9)', 'rgba', '', '', '', 1),
+(@iCategoryId, CONCAT(@sName, '_block_bg_image'), '_bx_decorous_stg_cpt_option_block_bg_image', '', 'image', '', '', '', 2),
+(@iCategoryId, CONCAT(@sName, '_block_bg_image_repeat'), '_bx_decorous_stg_cpt_option_block_bg_image_repeat', 'no-repeat', 'select', 'no-repeat,repeat,repeat-x,repeat-y', '', '', 3),
+(@iCategoryId, CONCAT(@sName, '_block_bg_image_attachment'), '_bx_decorous_stg_cpt_option_block_bg_image_attachment', 'scroll', 'select', 'fixed,scroll,local', '', '', 4),
+(@iCategoryId, CONCAT(@sName, '_block_bg_image_size'), '_bx_decorous_stg_cpt_option_block_bg_image_size', 'cover', 'select', 'auto,cover,contain', '', '', 5),
+(@iCategoryId, CONCAT(@sName, '_block_content_padding'), '_bx_decorous_stg_cpt_option_block_content_padding', '1rem', 'digit', '', '', '', 6),
+(@iCategoryId, CONCAT(@sName, '_block_border_color'), '_bx_decorous_stg_cpt_option_block_border_color', 'rgba(0, 0, 0, 0)', 'rgba', '', '', '', 7),
+(@iCategoryId, CONCAT(@sName, '_block_border_size'), '_bx_decorous_stg_cpt_option_block_border_size', '0px', 'digit', '', '', '', 8),
+(@iCategoryId, CONCAT(@sName, '_block_border_radius'), '_bx_decorous_stg_cpt_option_block_border_radius', '3px', 'digit', '', '', '', 9),
+(@iCategoryId, CONCAT(@sName, '_block_shadow'), '_bx_decorous_stg_cpt_option_block_shadow', '0px 1px 2px 0px rgba(0, 0, 0, 0.05)', 'digit', '', '', '', 10),
+(@iCategoryId, CONCAT(@sName, '_block_title_bg_color'), '_bx_decorous_stg_cpt_option_block_title_bg_color', 'rgba(255, 255, 255, 0)', 'rgba', '', '', '', 11),
+(@iCategoryId, CONCAT(@sName, '_block_title_padding'), '_bx_decorous_stg_cpt_option_block_title_padding', '0.3rem 1rem 0rem 1rem', 'digit', '', '', '', 12),
+(@iCategoryId, CONCAT(@sName, '_block_title_border_color'), '_bx_decorous_stg_cpt_option_block_title_border_color', 'rgba(0, 0, 0, 0)', 'rgba', '', '', '', 13),
+(@iCategoryId, CONCAT(@sName, '_block_title_border_size'), '_bx_decorous_stg_cpt_option_block_title_border_size', '0px', 'digit', '', '', '', 14),
+(@iCategoryId, CONCAT(@sName, '_block_title_border_radius'), '_bx_decorous_stg_cpt_option_block_title_border_radius', '0px', 'digit', '', '', '', 15),
+(@iCategoryId, CONCAT(@sName, '_block_title_font_family'), '_bx_decorous_stg_cpt_option_block_title_font_family', 'Arial, sans-serif', 'digit', '', '', '', 16),
+(@iCategoryId, CONCAT(@sName, '_block_title_font_size'), '_bx_decorous_stg_cpt_option_block_title_font_size', '1rem', 'digit', '', '', '', 17),
+(@iCategoryId, CONCAT(@sName, '_block_title_font_color'), '_bx_decorous_stg_cpt_option_block_title_font_color', 'rgba(40, 50, 60, 0.8)', 'rgba', '', '', '', 18),
+(@iCategoryId, CONCAT(@sName, '_block_title_font_weight'), '_bx_decorous_stg_cpt_option_block_title_font_weight', '700', 'digit', '', '', '', 19),
+(@iCategoryId, CONCAT(@sName, '_block_title_div_height'), '_bx_decorous_stg_cpt_option_block_title_div_height', '0px', 'digit', '', '', '', 20),
+(@iCategoryId, CONCAT(@sName, '_block_title_div_bg_color'), '_bx_decorous_stg_cpt_option_block_title_div_bg_color', 'rgba(40, 60, 80, 0)', 'rgba', '', '', '', 21);
+
+
+-- SETTINGS: Decorous template Styles Card
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_styles_card'), '_bx_decorous_stg_cpt_category_styles_card', 70);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_card_bg_color'), '_bx_decorous_stg_cpt_option_card_bg_color', 'rgba(255, 255, 255, 1)', 'rgba', '', '', '', 1),
+(@iCategoryId, CONCAT(@sName, '_card_bg_color_hover'), '_bx_decorous_stg_cpt_option_card_bg_color_hover', 'rgba(255, 255, 255, 0.5)', 'rgba', '', '', '', 2),
+(@iCategoryId, CONCAT(@sName, '_card_bg_image'), '_bx_decorous_stg_cpt_option_card_bg_image', '', 'image', '', '', '', 3),
+(@iCategoryId, CONCAT(@sName, '_card_bg_image_repeat'), '_bx_decorous_stg_cpt_option_card_bg_image_repeat', 'no-repeat', 'select', 'no-repeat,repeat,repeat-x,repeat-y', '', '', 4),
+(@iCategoryId, CONCAT(@sName, '_card_bg_image_attachment'), '_bx_decorous_stg_cpt_option_card_bg_image_attachment', 'scroll', 'select', 'fixed,scroll,local', '', '', 5),
+(@iCategoryId, CONCAT(@sName, '_card_bg_image_size'), '_bx_decorous_stg_cpt_option_card_bg_image_size', 'cover', 'select', 'auto,cover,contain', '', '', 6),
+(@iCategoryId, CONCAT(@sName, '_card_content_padding'), '_bx_decorous_stg_cpt_option_card_content_padding', '1rem', 'digit', '', '', '', 7),
+(@iCategoryId, CONCAT(@sName, '_card_border_color'), '_bx_decorous_stg_cpt_option_card_border_color', 'rgba(0, 0, 0, 0.1)', 'rgba', '', '', '', 8),
+(@iCategoryId, CONCAT(@sName, '_card_border_size'), '_bx_decorous_stg_cpt_option_card_border_size', '1px', 'digit', '', '', '', 9),
+(@iCategoryId, CONCAT(@sName, '_card_border_radius'), '_bx_decorous_stg_cpt_option_card_border_radius', '3px', 'digit', '', '', '', 10),
+(@iCategoryId, CONCAT(@sName, '_card_shadow'), '_bx_decorous_stg_cpt_option_card_shadow', '0px 1px 3px 0px rgba(0, 0, 0, 0.05)', 'digit', '', '', '', 11);
+
+
+-- SETTINGS: Decorous template Styles Popups
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_styles_popup'), '_bx_decorous_stg_cpt_category_styles_popup', 80);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_popup_bg_color'), '_bx_decorous_stg_cpt_option_popup_bg_color', 'rgba(255, 255, 255, 1)', 'rgba', '', '', '', 1),
+(@iCategoryId, CONCAT(@sName, '_popup_bg_image'), '_bx_decorous_stg_cpt_option_popup_bg_image', '', 'image', '', '', '', 2),
+(@iCategoryId, CONCAT(@sName, '_popup_bg_image_repeat'), '_bx_decorous_stg_cpt_option_popup_bg_image_repeat', 'no-repeat', 'select', 'no-repeat,repeat,repeat-x,repeat-y', '', '', 3),
+(@iCategoryId, CONCAT(@sName, '_popup_bg_image_attachment'), '_bx_decorous_stg_cpt_option_popup_bg_image_attachment', 'scroll', 'select', 'fixed,scroll,local', '', '', 4),
+(@iCategoryId, CONCAT(@sName, '_popup_bg_image_size'), '_bx_decorous_stg_cpt_option_popup_bg_image_size', 'cover', 'select', 'auto,cover,contain', '', '', 5),
+(@iCategoryId, CONCAT(@sName, '_popup_content_padding'), '_bx_decorous_stg_cpt_option_popup_content_padding', '1.25rem', 'digit', '', '', '', 6),
+(@iCategoryId, CONCAT(@sName, '_popup_border_color'), '_bx_decorous_stg_cpt_option_popup_border_color', 'rgba(0, 0, 0, 0.2)', 'rgba', '', '', '', 7),
+(@iCategoryId, CONCAT(@sName, '_popup_border_size'), '_bx_decorous_stg_cpt_option_popup_border_size', '1px', 'digit', '', '', '', 8),
+(@iCategoryId, CONCAT(@sName, '_popup_border_radius'), '_bx_decorous_stg_cpt_option_popup_border_radius', '3px', 'digit', '', '', '', 9),
+(@iCategoryId, CONCAT(@sName, '_popup_shadow'), '_bx_decorous_stg_cpt_option_popup_shadow', '0px 1px 5px 0px rgba(0, 0, 0, 0.05)', 'digit', '', '', '', 10),
+(@iCategoryId, CONCAT(@sName, '_popup_title_bg_color'), '_bx_decorous_stg_cpt_option_popup_title_bg_color', 'rgba(230, 240, 250, 0.9)', 'rgba', '', '', '', 11),
+(@iCategoryId, CONCAT(@sName, '_popup_title_padding'), '_bx_decorous_stg_cpt_option_popup_title_padding', '1.25rem', 'digit', '', '', '', 12),
+(@iCategoryId, CONCAT(@sName, '_popup_title_font_family'), '_bx_decorous_stg_cpt_option_popup_title_font_family', 'Arial, sans-serif', 'digit', '', '', '', 13),
+(@iCategoryId, CONCAT(@sName, '_popup_title_font_size'), '_bx_decorous_stg_cpt_option_popup_title_font_size', '1rem', 'digit', '', '', '', 14),
+(@iCategoryId, CONCAT(@sName, '_popup_title_font_color'), '_bx_decorous_stg_cpt_option_popup_title_font_color', 'rgba(40, 50, 60, 0.9)', 'rgba', '', '', '', 15);
+
+
+-- SETTINGS: Decorous template Styles Main Menu
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_styles_menu_main'), '_bx_decorous_stg_cpt_category_styles_menu_main', 90);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_menu_main_bg_color'), '_bx_decorous_stg_cpt_option_menu_main_bg_color', 'rgba(38, 48, 54, 1.0)', 'rgba', '', '', '', 1),
+(@iCategoryId, CONCAT(@sName, '_menu_main_bg_image'), '_bx_decorous_stg_cpt_option_menu_main_bg_image', '', 'image', '', '', '', 2),
+(@iCategoryId, CONCAT(@sName, '_menu_main_bg_image_repeat'), '_bx_decorous_stg_cpt_option_menu_main_bg_image_repeat', 'no-repeat', 'select', 'no-repeat,repeat,repeat-x,repeat-y', '', '', 3),
+(@iCategoryId, CONCAT(@sName, '_menu_main_bg_image_attachment'), '_bx_decorous_stg_cpt_option_menu_main_bg_image_attachment', 'scroll', 'select', 'fixed,scroll,local', '', '', 4),
+(@iCategoryId, CONCAT(@sName, '_menu_main_bg_image_size'), '_bx_decorous_stg_cpt_option_menu_main_bg_image_size', 'cover', 'select', 'auto,cover,contain', '', '', 5),
+(@iCategoryId, CONCAT(@sName, '_menu_main_content_padding'), '_bx_decorous_stg_cpt_option_menu_main_content_padding', '0.625rem', 'digit', '', '', '', 6),
+(@iCategoryId, CONCAT(@sName, '_menu_main_border_color'), '_bx_decorous_stg_cpt_option_menu_main_border_color', 'rgba(0, 0, 0, 0.1)', 'rgba', '', '', '', 7),
+(@iCategoryId, CONCAT(@sName, '_menu_main_border_size'), '_bx_decorous_stg_cpt_option_menu_main_border_size', '0px', 'digit', '', '', '', 8),
+(@iCategoryId, CONCAT(@sName, '_menu_main_shadow'), '_bx_decorous_stg_cpt_option_menu_main_shadow', 'none', 'digit', '', '', '', 9),
+(@iCategoryId, CONCAT(@sName, '_menu_main_font_family'), '_bx_decorous_stg_cpt_option_menu_main_font_family', 'Arial, sans-serif', 'digit', '', '', '', 10),
+(@iCategoryId, CONCAT(@sName, '_menu_main_font_size'), '_bx_decorous_stg_cpt_option_menu_main_font_size', '1rem', 'digit', '', '', '', 11),
+(@iCategoryId, CONCAT(@sName, '_menu_main_font_color'), '_bx_decorous_stg_cpt_option_menu_main_font_color', 'rgba(255, 255, 255, 0.8)', 'rgba', '', '', '', 12),
+(@iCategoryId, CONCAT(@sName, '_menu_main_font_color_hover'), '_bx_decorous_stg_cpt_option_menu_main_font_color_hover', 'rgba(255, 255, 255, 0.8)', 'rgba', '', '', '', 13),
+(@iCategoryId, CONCAT(@sName, '_menu_main_font_color_active'), '_bx_decorous_stg_cpt_option_menu_main_font_color_active', 'rgba(255, 255, 255, 1)', 'rgba', '', '', '', 14),
+(@iCategoryId, CONCAT(@sName, '_menu_main_font_shadow'), '_bx_decorous_stg_cpt_option_menu_main_font_shadow', 'none', 'digit', '', '', '', 15),
+(@iCategoryId, CONCAT(@sName, '_menu_main_font_weight'), '_bx_decorous_stg_cpt_option_menu_main_font_weight', '400', 'digit', '', '', '', 16);
+
+
+-- SETTINGS: Decorous template Styles Account Menu
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_styles_menu_account'), '_bx_decorous_stg_cpt_category_styles_menu_account', 95);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_menu_account_bg_color'), '_bx_decorous_stg_cpt_option_menu_account_bg_color', 'rgba(38, 48, 54, 1.0)', 'rgba', '', '', '', 1),
+(@iCategoryId, CONCAT(@sName, '_menu_account_bg_image'), '_bx_decorous_stg_cpt_option_menu_account_bg_image', '', 'image', '', '', '', 2),
+(@iCategoryId, CONCAT(@sName, '_menu_account_bg_image_repeat'), '_bx_decorous_stg_cpt_option_menu_account_bg_image_repeat', 'no-repeat', 'select', 'no-repeat,repeat,repeat-x,repeat-y', '', '', 3),
+(@iCategoryId, CONCAT(@sName, '_menu_account_bg_image_attachment'), '_bx_decorous_stg_cpt_option_menu_account_bg_image_attachment', 'scroll', 'select', 'fixed,scroll,local', '', '', 4),
+(@iCategoryId, CONCAT(@sName, '_menu_account_bg_image_size'), '_bx_decorous_stg_cpt_option_menu_account_bg_image_size', 'cover', 'select', 'auto,cover,contain', '', '', 5),
+(@iCategoryId, CONCAT(@sName, '_menu_account_content_padding'), '_bx_decorous_stg_cpt_option_menu_account_content_padding', '1.25rem', 'digit', '', '', '', 6),
+(@iCategoryId, CONCAT(@sName, '_menu_account_border_color'), '_bx_decorous_stg_cpt_option_menu_account_border_color', 'rgba(0, 0, 0, 0.1)', 'rgba', '', '', '', 7),
+(@iCategoryId, CONCAT(@sName, '_menu_account_border_size'), '_bx_decorous_stg_cpt_option_menu_account_border_size', '0px', 'digit', '', '', '', 8),
+(@iCategoryId, CONCAT(@sName, '_menu_account_shadow'), '_bx_decorous_stg_cpt_option_menu_account_shadow', 'none', 'digit', '', '', '', 9),
+(@iCategoryId, CONCAT(@sName, '_menu_account_font_family'), '_bx_decorous_stg_cpt_option_menu_account_font_family', 'Arial, sans-serif', 'digit', '', '', '', 10),
+(@iCategoryId, CONCAT(@sName, '_menu_account_font_size'), '_bx_decorous_stg_cpt_option_menu_account_font_size', '1rem', 'digit', '', '', '', 11),
+(@iCategoryId, CONCAT(@sName, '_menu_account_font_color'), '_bx_decorous_stg_cpt_option_menu_account_font_color', 'rgba(255, 255, 255, 0.8)', 'rgba', '', '', '', 12),
+(@iCategoryId, CONCAT(@sName, '_menu_account_font_color_hover'), '_bx_decorous_stg_cpt_option_menu_account_font_color_hover', 'rgba(255, 255, 255, 0.8)', 'rgba', '', '', '', 13),
+(@iCategoryId, CONCAT(@sName, '_menu_account_font_color_active'), '_bx_decorous_stg_cpt_option_menu_account_font_color_active', 'rgba(255, 255, 255, 1)', 'rgba', '', '', '', 14),
+(@iCategoryId, CONCAT(@sName, '_menu_account_font_shadow'), '_bx_decorous_stg_cpt_option_menu_account_font_shadow', 'none', 'digit', '', '', '', 15),
+(@iCategoryId, CONCAT(@sName, '_menu_account_font_weight'), '_bx_decorous_stg_cpt_option_menu_account_font_weight', '400', 'digit', '', '', '', 16);
+
+
+-- SETTINGS: Decorous template Styles Add Menu
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_styles_menu_add'), '_bx_decorous_stg_cpt_category_styles_menu_add', 97);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_menu_add_bg_color'), '_bx_decorous_stg_cpt_option_menu_add_bg_color', 'rgba(38, 48, 54, 1.0)', 'rgba', '', '', '', 1),
+(@iCategoryId, CONCAT(@sName, '_menu_add_bg_image'), '_bx_decorous_stg_cpt_option_menu_add_bg_image', '', 'image', '', '', '', 2),
+(@iCategoryId, CONCAT(@sName, '_menu_add_bg_image_repeat'), '_bx_decorous_stg_cpt_option_menu_add_bg_image_repeat', 'no-repeat', 'select', 'no-repeat,repeat,repeat-x,repeat-y', '', '', 3),
+(@iCategoryId, CONCAT(@sName, '_menu_add_bg_image_attachment'), '_bx_decorous_stg_cpt_option_menu_add_bg_image_attachment', 'scroll', 'select', 'fixed,scroll,local', '', '', 4),
+(@iCategoryId, CONCAT(@sName, '_menu_add_bg_image_size'), '_bx_decorous_stg_cpt_option_menu_add_bg_image_size', 'cover', 'select', 'auto,cover,contain', '', '', 5),
+(@iCategoryId, CONCAT(@sName, '_menu_add_content_padding'), '_bx_decorous_stg_cpt_option_menu_add_content_padding', '1.25rem', 'digit', '', '', '', 6),
+(@iCategoryId, CONCAT(@sName, '_menu_add_border_color'), '_bx_decorous_stg_cpt_option_menu_add_border_color', 'rgba(0, 0, 0, 0.1)', 'rgba', '', '', '', 7),
+(@iCategoryId, CONCAT(@sName, '_menu_add_border_size'), '_bx_decorous_stg_cpt_option_menu_add_border_size', '0px', 'digit', '', '', '', 8),
+(@iCategoryId, CONCAT(@sName, '_menu_add_shadow'), '_bx_decorous_stg_cpt_option_menu_add_shadow', 'none', 'digit', '', '', '', 9),
+(@iCategoryId, CONCAT(@sName, '_menu_add_font_family'), '_bx_decorous_stg_cpt_option_menu_add_font_family', 'Arial, sans-serif', 'digit', '', '', '', 10),
+(@iCategoryId, CONCAT(@sName, '_menu_add_font_size'), '_bx_decorous_stg_cpt_option_menu_add_font_size', '1rem', 'digit', '', '', '', 11),
+(@iCategoryId, CONCAT(@sName, '_menu_add_font_color'), '_bx_decorous_stg_cpt_option_menu_add_font_color', 'rgba(255, 255, 255, 0.8)', 'rgba', '', '', '', 12),
+(@iCategoryId, CONCAT(@sName, '_menu_add_font_color_hover'), '_bx_decorous_stg_cpt_option_menu_add_font_color_hover', 'rgba(255, 255, 255, 0.8)', 'rgba', '', '', '', 13),
+(@iCategoryId, CONCAT(@sName, '_menu_add_font_color_active'), '_bx_decorous_stg_cpt_option_menu_add_font_color_active', 'rgba(255, 255, 255, 1)', 'rgba', '', '', '', 14),
+(@iCategoryId, CONCAT(@sName, '_menu_add_font_shadow'), '_bx_decorous_stg_cpt_option_menu_add_font_shadow', 'none', 'digit', '', '', '', 15),
+(@iCategoryId, CONCAT(@sName, '_menu_add_font_weight'), '_bx_decorous_stg_cpt_option_menu_add_font_weight', '400', 'digit', '', '', '', 16);
+
+
+-- SETTINGS: Decorous template Styles Page Menu
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_styles_menu_page'), '_bx_decorous_stg_cpt_category_styles_menu_page', 100);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_menu_page_bg_color'), '_bx_decorous_stg_cpt_option_menu_page_bg_color', 'rgba(245, 250, 255, 0.9)', 'rgba', '', '', '', 1),
+(@iCategoryId, CONCAT(@sName, '_menu_page_bg_image'), '_bx_decorous_stg_cpt_option_menu_page_bg_image', '', 'image', '', '', '', 2),
+(@iCategoryId, CONCAT(@sName, '_menu_page_bg_image_repeat'), '_bx_decorous_stg_cpt_option_menu_page_bg_image_repeat', 'no-repeat', 'select', 'no-repeat,repeat,repeat-x,repeat-y', '', '', 3),
+(@iCategoryId, CONCAT(@sName, '_menu_page_bg_image_attachment'), '_bx_decorous_stg_cpt_option_menu_page_bg_image_attachment', 'scroll', 'select', 'fixed,scroll,local', '', '', 4),
+(@iCategoryId, CONCAT(@sName, '_menu_page_bg_image_size'), '_bx_decorous_stg_cpt_option_menu_page_bg_image_size', 'cover', 'select', 'auto,cover,contain', '', '', 5),
+(@iCategoryId, CONCAT(@sName, '_menu_page_content_padding'), '_bx_decorous_stg_cpt_option_menu_page_content_padding', '0px', 'digit', '', '', '', 6),
+(@iCategoryId, CONCAT(@sName, '_menu_page_border_color'), '_bx_decorous_stg_cpt_option_menu_page_border_color', 'rgba(0, 0, 0, 0.1)', 'rgba', '', '', '', 7),
+(@iCategoryId, CONCAT(@sName, '_menu_page_border_size'), '_bx_decorous_stg_cpt_option_menu_page_border_size', '1px 0px 0px 0px', 'digit', '', '', '', 8),
+(@iCategoryId, CONCAT(@sName, '_menu_page_shadow'), '_bx_decorous_stg_cpt_option_menu_page_shadow', '0px 1px 2px 0px rgba(0, 0, 0, 0.05)', 'digit', '', '', '', 9),
+(@iCategoryId, CONCAT(@sName, '_menu_page_font_family'), '_bx_decorous_stg_cpt_option_menu_page_font_family', 'Arial, sans-serif', 'digit', '', '', '', 10),
+(@iCategoryId, CONCAT(@sName, '_menu_page_font_size'), '_bx_decorous_stg_cpt_option_menu_page_font_size', '1rem', 'digit', '', '', '', 11),
+(@iCategoryId, CONCAT(@sName, '_menu_page_font_color'), '_bx_decorous_stg_cpt_option_menu_page_font_color', 'rgba(40, 50, 60, 0.8)', 'rgba', '', '', '', 12),
+(@iCategoryId, CONCAT(@sName, '_menu_page_font_color_hover'), '_bx_decorous_stg_cpt_option_menu_page_font_color_hover', 'rgba(30, 150, 250, 1)', 'rgba', '', '', '', 13),
+(@iCategoryId, CONCAT(@sName, '_menu_page_font_color_active'), '_bx_decorous_stg_cpt_option_menu_page_font_color_active', 'rgba(30, 150, 250, 1)', 'rgba', '', '', '', 14),
+(@iCategoryId, CONCAT(@sName, '_menu_page_font_shadow'), '_bx_decorous_stg_cpt_option_menu_page_font_shadow', 'none', 'digit', '', '', '', 15),
+(@iCategoryId, CONCAT(@sName, '_menu_page_font_weight'), '_bx_decorous_stg_cpt_option_menu_page_font_weight', '400', 'digit', '', '', '', 16);
+
+
+-- SETTINGS: Decorous template Styles Slide Menus
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_styles_menu_slide'), '_bx_decorous_stg_cpt_category_styles_menu_slide', 110);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_menu_slide_bg_color'), '_bx_decorous_stg_cpt_option_menu_slide_bg_color', 'rgba(255, 255, 255, 0.9)', 'rgba', '', '', '', 1),
+(@iCategoryId, CONCAT(@sName, '_menu_slide_bg_image'), '_bx_decorous_stg_cpt_option_menu_slide_bg_image', '', 'image', '', '', '', 2),
+(@iCategoryId, CONCAT(@sName, '_menu_slide_bg_image_repeat'), '_bx_decorous_stg_cpt_option_menu_slide_bg_image_repeat', 'no-repeat', 'select', 'no-repeat,repeat,repeat-x,repeat-y', '', '', 3),
+(@iCategoryId, CONCAT(@sName, '_menu_slide_bg_image_attachment'), '_bx_decorous_stg_cpt_option_menu_slide_bg_image_attachment', 'scroll', 'select', 'fixed,scroll,local', '', '', 4),
+(@iCategoryId, CONCAT(@sName, '_menu_slide_bg_image_size'), '_bx_decorous_stg_cpt_option_menu_slide_bg_image_size', 'cover', 'select', 'auto,cover,contain', '', '', 5),
+(@iCategoryId, CONCAT(@sName, '_menu_slide_content_padding'), '_bx_decorous_stg_cpt_option_menu_slide_content_padding', '1.25rem', 'digit', '', '', '', 6),
+(@iCategoryId, CONCAT(@sName, '_menu_slide_border_color'), '_bx_decorous_stg_cpt_option_menu_slide_border_color', 'rgba(0, 0, 0, 0.1)', 'rgba', '', '', '', 7),
+(@iCategoryId, CONCAT(@sName, '_menu_slide_border_size'), '_bx_decorous_stg_cpt_option_menu_slide_border_size', '1px 0px 1px 0px', 'digit', '', '', '', 8),
+(@iCategoryId, CONCAT(@sName, '_menu_slide_shadow'), '_bx_decorous_stg_cpt_option_menu_slide_shadow', 'none', 'digit', '', '', '', 9),
+(@iCategoryId, CONCAT(@sName, '_menu_slide_font_family'), '_bx_decorous_stg_cpt_option_menu_slide_font_family', 'Arial, sans-serif', 'digit', '', '', '', 10),
+(@iCategoryId, CONCAT(@sName, '_menu_slide_font_size'), '_bx_decorous_stg_cpt_option_menu_slide_font_size', '1.0rem', 'digit', '', '', '', 11),
+(@iCategoryId, CONCAT(@sName, '_menu_slide_font_color'), '_bx_decorous_stg_cpt_option_menu_slide_font_color', 'rgba(40, 50, 60, 0.8)', 'rgba', '', '', '', 12),
+(@iCategoryId, CONCAT(@sName, '_menu_slide_font_color_hover'), '_bx_decorous_stg_cpt_option_menu_slide_font_color_hover', 'rgba(40, 50, 60, 0.9)', 'rgba', '', '', '', 13),
+(@iCategoryId, CONCAT(@sName, '_menu_slide_font_color_active'), '_bx_decorous_stg_cpt_option_menu_slide_font_color_active', 'rgba(20, 30, 40, 1)', 'rgba', '', '', '', 14),
+(@iCategoryId, CONCAT(@sName, '_menu_slide_font_shadow'), '_bx_decorous_stg_cpt_option_menu_slide_font_shadow', 'none', 'digit', '', '', '', 15),
+(@iCategoryId, CONCAT(@sName, '_menu_slide_font_weight'), '_bx_decorous_stg_cpt_option_menu_slide_font_weight', '400', 'digit', '', '', '', 16);
+
+
+-- SETTINGS: Decorous template Styles Forms
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_styles_form'), '_bx_decorous_stg_cpt_category_styles_form', 120);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_form_input_height'), '_bx_decorous_stg_cpt_option_form_input_height', '2rem', 'digit', '', '', '', 1),
+(@iCategoryId, CONCAT(@sName, '_form_input_bg_color'), '_bx_decorous_stg_cpt_option_form_input_bg_color', 'rgba(255, 255, 255, 0.8)', 'rgba', '', '', '', 2),
+(@iCategoryId, CONCAT(@sName, '_form_input_bg_color_active'), '_bx_decorous_stg_cpt_option_form_input_bg_color_active', 'rgba(255, 255, 255, 1)', 'rgba', '', '', '', 3),
+(@iCategoryId, CONCAT(@sName, '_form_input_border_color'), '_bx_decorous_stg_cpt_option_form_input_border_color', 'rgba(40, 60, 80, 0.5)', 'rgba', '', '', '', 4),
+(@iCategoryId, CONCAT(@sName, '_form_input_border_color_active'), '_bx_decorous_stg_cpt_option_form_input_border_color_active', 'rgba(30, 150, 250, 1)', 'rgba', '', '', '', 5),
+(@iCategoryId, CONCAT(@sName, '_form_input_border_size'), '_bx_decorous_stg_cpt_option_form_input_border_size', '1px', 'digit', '', '', '', 6),
+(@iCategoryId, CONCAT(@sName, '_form_input_shadow'), '_bx_decorous_stg_cpt_option_form_input_shadow', 'inset 0px 0px 2px 1px rgba(0,0,0,0.15)', 'digit', '', '', '', 7),
+(@iCategoryId, CONCAT(@sName, '_form_input_font_family'), '_bx_decorous_stg_cpt_option_form_input_font_family', 'Arial, sans-serif', 'digit', '', '', '', 8),
+(@iCategoryId, CONCAT(@sName, '_form_input_font_size'), '_bx_decorous_stg_cpt_option_form_input_font_size', '1rem', 'digit', '', '', '', 9),
+(@iCategoryId, CONCAT(@sName, '_form_input_font_color'), '_bx_decorous_stg_cpt_option_form_input_font_color', 'rgba(20, 30, 40, 1)', 'rgba', '', '', '', 10);
+
+
+-- SETTINGS: Decorous template Styles Large Buttons
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_styles_large_button'), '_bx_decorous_stg_cpt_category_styles_large_button', 130);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_button_lg_height'), '_bx_decorous_stg_cpt_option_button_lg_height', '2rem', 'digit', '', '', '', 1),
+(@iCategoryId, CONCAT(@sName, '_button_lg_bg_color'), '_bx_decorous_stg_cpt_option_button_lg_bg_color', 'rgba(40, 50, 60, 0.8)', 'rgba', '', '', '', 2),
+(@iCategoryId, CONCAT(@sName, '_button_lg_bg_color_hover'), '_bx_decorous_stg_cpt_option_button_lg_bg_color_hover', 'rgba(40, 50, 60, 1)', 'rgba', '', '', '', 3),
+(@iCategoryId, CONCAT(@sName, '_button_lg_border_color'), '_bx_decorous_stg_cpt_option_button_lg_border_color', 'rgba(40, 50, 60, 1)', 'rgba', '', '', '', 4),
+(@iCategoryId, CONCAT(@sName, '_button_lg_border_color_hover'), '_bx_decorous_stg_cpt_option_button_lg_border_color_hover', 'rgba(40, 50, 60, 1)', 'rgba', '', '', '', 5),
+(@iCategoryId, CONCAT(@sName, '_button_lg_border_size'), '_bx_decorous_stg_cpt_option_button_lg_border_size', '0px', 'digit', '', '', '', 6),
+(@iCategoryId, CONCAT(@sName, '_button_lg_border_radius'), '_bx_decorous_stg_cpt_option_button_lg_border_radius', '3px', 'digit', '', '', '', 7),
+(@iCategoryId, CONCAT(@sName, '_button_lg_shadow'), '_bx_decorous_stg_cpt_option_button_lg_shadow', '0px 0px 0px 1px rgba(0,0,0,0.0)', 'digit', '', '', '', 8),
+(@iCategoryId, CONCAT(@sName, '_button_lg_font_family'), '_bx_decorous_stg_cpt_option_button_lg_font_family', 'Arial, sans-serif', 'digit', '', '', '', 9),
+(@iCategoryId, CONCAT(@sName, '_button_lg_font_size'), '_bx_decorous_stg_cpt_option_button_lg_font_size', '1rem', 'digit', '', '', '', 10),
+(@iCategoryId, CONCAT(@sName, '_button_lg_font_color'), '_bx_decorous_stg_cpt_option_button_lg_font_color', 'rgba(255, 255, 255, 0.9)', 'rgba', '', '', '', 11),
+(@iCategoryId, CONCAT(@sName, '_button_lg_font_color_hover'), '_bx_decorous_stg_cpt_option_button_lg_font_color_hover', 'rgba(255, 255, 255, 1)', 'rgba', '', '', '', 12),
+(@iCategoryId, CONCAT(@sName, '_button_lg_font_shadow'), '_bx_decorous_stg_cpt_option_button_lg_font_shadow', 'none', 'digit', '', '', '', 13),
+(@iCategoryId, CONCAT(@sName, '_button_lg_font_weight'), '_bx_decorous_stg_cpt_option_button_lg_font_weight', '700', 'digit', '', '', '', 14);
+
+-- SETTINGS: Decorous template Styles Small Buttons
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_styles_small_button'), '_bx_decorous_stg_cpt_category_styles_small_button', 140);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_button_sm_height'), '_bx_decorous_stg_cpt_option_button_sm_height', '1.5rem', 'digit', '', '', '', 1),
+(@iCategoryId, CONCAT(@sName, '_button_sm_bg_color'), '_bx_decorous_stg_cpt_option_button_sm_bg_color', 'rgba(40, 50, 60, 0.8)', 'rgba', '', '', '', 2),
+(@iCategoryId, CONCAT(@sName, '_button_sm_bg_color_hover'), '_bx_decorous_stg_cpt_option_button_sm_bg_color_hover', 'rgba(40, 50, 60, 1)', 'rgba', '', '', '', 3),
+(@iCategoryId, CONCAT(@sName, '_button_sm_border_color'), '_bx_decorous_stg_cpt_option_button_sm_border_color', 'rgba(40, 50, 60, 1)', 'rgba', '', '', '', 4),
+(@iCategoryId, CONCAT(@sName, '_button_sm_border_color_hover'), '_bx_decorous_stg_cpt_option_button_sm_border_color_hover', 'rgba(40, 50, 60, 1)', 'rgba', '', '', '', 5),
+(@iCategoryId, CONCAT(@sName, '_button_sm_border_size'), '_bx_decorous_stg_cpt_option_button_sm_border_size', '0px', 'digit', '', '', '', 6),
+(@iCategoryId, CONCAT(@sName, '_button_sm_border_radius'), '_bx_decorous_stg_cpt_option_button_sm_border_radius', '2px', 'digit', '', '', '', 7),
+(@iCategoryId, CONCAT(@sName, '_button_sm_shadow'), '_bx_decorous_stg_cpt_option_button_sm_shadow', '0px 0px 0px 1px rgba(0,0,0,0)', 'digit', '', '', '', 8),
+(@iCategoryId, CONCAT(@sName, '_button_sm_font_family'), '_bx_decorous_stg_cpt_option_button_sm_font_family', 'Arial, sans-serif', 'digit', '', '', '', 9),
+(@iCategoryId, CONCAT(@sName, '_button_sm_font_size'), '_bx_decorous_stg_cpt_option_button_sm_font_size', '0.75rem', 'digit', '', '', '', 10),
+(@iCategoryId, CONCAT(@sName, '_button_sm_font_color'), '_bx_decorous_stg_cpt_option_button_sm_font_color', 'rgba(255, 255, 255, 0.9)', 'rgba', '', '', '', 11),
+(@iCategoryId, CONCAT(@sName, '_button_sm_font_color_hover'), '_bx_decorous_stg_cpt_option_button_sm_font_color_hover', 'rgba(255, 255, 255, 1)', 'rgba', '', '', '', 12),
+(@iCategoryId, CONCAT(@sName, '_button_sm_font_shadow'), '_bx_decorous_stg_cpt_option_button_sm_font_shadow', 'none', 'digit', '', '', '', 13),
+(@iCategoryId, CONCAT(@sName, '_button_sm_font_weight'), '_bx_decorous_stg_cpt_option_button_sm_font_weight', '400', 'digit', '', '', '', 14);
+
+-- SETTINGS: Decorous template Styles Font
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_styles_font'), '_bx_decorous_stg_cpt_category_styles_font', 150);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_font_family'), '_bx_decorous_stg_cpt_option_font_family', 'Arial, sans-serif', 'digit', '', '', '', 1),
+(@iCategoryId, CONCAT(@sName, '_font_size_default'), '_bx_decorous_stg_cpt_option_font_size_default', '18px', 'digit', '', '', '', 2),
+(@iCategoryId, CONCAT(@sName, '_font_color_default'), '_bx_decorous_stg_cpt_option_font_color_default', 'rgba(40, 50, 60, 0.9)', 'rgba', '', '', '', 3),
+(@iCategoryId, CONCAT(@sName, '_font_color_grayed'), '_bx_decorous_stg_cpt_option_font_color_grayed', 'rgba(40, 50, 60, 0.5)', 'rgba', '', '', '', 4),
+(@iCategoryId, CONCAT(@sName, '_font_color_contrasted'), '_bx_decorous_stg_cpt_option_font_color_contrasted', 'rgba(255, 255, 255, 1)', 'rgba', '', '', '', 5),
+(@iCategoryId, CONCAT(@sName, '_font_size_small'), '_bx_decorous_stg_cpt_option_font_size_small', '12px', 'digit', '', '', '', 6),
+(@iCategoryId, CONCAT(@sName, '_font_size_middle'), '_bx_decorous_stg_cpt_option_font_size_middle', '15px', 'digit', '', '', '', 7),
+(@iCategoryId, CONCAT(@sName, '_font_size_large'), '_bx_decorous_stg_cpt_option_font_size_large', '18px', 'digit', '', '', '', 8),
+(@iCategoryId, CONCAT(@sName, '_font_size_h1'), '_bx_decorous_stg_cpt_option_font_size_h1', '32px', 'digit', '', '', '', 9),
+(@iCategoryId, CONCAT(@sName, '_font_weight_h1'), '_bx_decorous_stg_cpt_option_font_weight_h1', '700', 'digit', '', '', '', 10),
+(@iCategoryId, CONCAT(@sName, '_font_color_default_h1'), '_bx_decorous_stg_cpt_option_font_color_default_h1', 'rgba(40, 50, 60, 1)', 'rgba', '', '', '', 11),
+(@iCategoryId, CONCAT(@sName, '_font_color_grayed_h1'), '_bx_decorous_stg_cpt_option_font_color_grayed_h1', 'rgba(40, 50, 60, 0.5)', 'rgba', '', '', '', 12),
+(@iCategoryId, CONCAT(@sName, '_font_color_contrasted_h1'), '_bx_decorous_stg_cpt_option_font_color_contrasted_h1', 'rgba(255, 255, 255, 0.9)', 'rgba', '', '', '', 13),
+(@iCategoryId, CONCAT(@sName, '_font_color_link_h1'), '_bx_decorous_stg_cpt_option_font_color_link_h1', 'rgba(30, 150, 250, 0.9)', 'rgba', '', '', '', 14),
+(@iCategoryId, CONCAT(@sName, '_font_color_link_h1_hover'), '_bx_decorous_stg_cpt_option_font_color_link_h1_hover', 'rgba(30, 150, 250, 1)', 'rgba', '', '', '', 15),
+(@iCategoryId, CONCAT(@sName, '_font_size_h2'), '_bx_decorous_stg_cpt_option_font_size_h2', '24px', 'digit', '', '', '', 16),
+(@iCategoryId, CONCAT(@sName, '_font_weight_h2'), '_bx_decorous_stg_cpt_option_font_weight_h2', '700', 'digit', '', '', '', 17),
+(@iCategoryId, CONCAT(@sName, '_font_color_default_h2'), '_bx_decorous_stg_cpt_option_font_color_default_h2', 'rgba(40, 60, 80, 0.9)', 'rgba', '', '', '', 18),
+(@iCategoryId, CONCAT(@sName, '_font_color_grayed_h2'), '_bx_decorous_stg_cpt_option_font_color_grayed_h2', 'rgba(40, 60, 80, 0.5)', 'rgba', '', '', '', 19),
+(@iCategoryId, CONCAT(@sName, '_font_color_contrasted_h2'), '_bx_decorous_stg_cpt_option_font_color_contrasted_h2', 'rgba(255, 255, 255, 1)', 'rgba', '', '', '', 20),
+(@iCategoryId, CONCAT(@sName, '_font_color_link_h2'), '_bx_decorous_stg_cpt_option_font_color_link_h2', 'rgba(30, 150, 250, 0.9)', 'rgba', '', '', '', 21),
+(@iCategoryId, CONCAT(@sName, '_font_color_link_h2_hover'), '_bx_decorous_stg_cpt_option_font_color_link_h2_hover', 'rgba(30, 150, 250, 1)', 'rgba', '', '', '', 22),
+(@iCategoryId, CONCAT(@sName, '_font_size_h3'), '_bx_decorous_stg_cpt_option_font_size_h3', '20px', 'digit', '', '', '', 23),
+(@iCategoryId, CONCAT(@sName, '_font_weight_h3'), '_bx_decorous_stg_cpt_option_font_weight_h3', '500', 'digit', '', '', '', 24),
+(@iCategoryId, CONCAT(@sName, '_font_color_default_h3'), '_bx_decorous_stg_cpt_option_font_color_default_h3', 'rgba(40, 60, 80, 0.9)', 'rgba', '', '', '', 25),
+(@iCategoryId, CONCAT(@sName, '_font_color_grayed_h3'), '_bx_decorous_stg_cpt_option_font_color_grayed_h3', 'rgba(40, 60, 80, 0.5)', 'rgba', '', '', '', 26),
+(@iCategoryId, CONCAT(@sName, '_font_color_contrasted_h3'), '_bx_decorous_stg_cpt_option_font_color_contrasted_h3', 'rgba(255, 255, 255, 1)', 'rgba', '', '', '', 27),
+(@iCategoryId, CONCAT(@sName, '_font_color_link_h3'), '_bx_decorous_stg_cpt_option_font_color_link_h3', 'rgba(30, 150, 250, 0.9)', 'rgba', '', '', '', 28),
+(@iCategoryId, CONCAT(@sName, '_font_color_link_h3_hover'), '_bx_decorous_stg_cpt_option_font_color_link_h3_hover', 'rgba(30, 150, 250, 1)', 'rgba', '', '', '', 29);
+
+-- SETTINGS: Decorous template Custom Styles
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_styles_custom'), '_bx_decorous_stg_cpt_category_styles_custom', 160);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_styles_custom'), '_bx_decorous_stg_cpt_option_styles_custom', 'div.bx-market-unit-cover div.bx-base-text-unit-no-thumb {\r\n border-width: 0px;\r\n}', 'text', '', '', '', 1);
+
+-- SETTINGS: Decorous template Viewport Tablet
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_viewport_tablet'), '_bx_decorous_stg_cpt_category_viewport_tablet', 170);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_vpt_font_size_scale'), '_bx_decorous_stg_cpt_option_vpt_font_size_scale', '100%', 'digit', '', '', '', 1);
+
+-- SETTINGS: Decorous template Viewport Mobile
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_viewport_mobile'), '_bx_decorous_stg_cpt_category_viewport_mobile', 180);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_vpm_font_size_scale'), '_bx_decorous_stg_cpt_option_vpm_font_size_scale', '87.5%', 'digit', '', '', '', 1);
+
+
+-- STUDIO PAGE & WIDGET
+INSERT INTO `sys_std_pages`(`index`, `name`, `header`, `caption`, `icon`) VALUES
+(3, @sName, '', '', 'bx_decorous@modules/boonex/decorous/|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, @sName, CONCAT('{url_studio}design.php?name=', @sName), '', 'bx_decorous@modules/boonex/decorous/|std-icon.svg', '_bx_decorous_wgt_cpt', '', '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:"TemplStudioDesigns";}');
+INSERT INTO `sys_std_pages_widgets`(`page_id`, `widget_id`, `order`) VALUES
+(@iParentPageId, LAST_INSERT_ID(), @iParentPageOrder + 1);

+ 53 - 0
modules/boonex/elasticsearch/updates/9.0.2_10.0.0/install/config.php

@@ -0,0 +1,53 @@
+<?php
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ */
+
+$aConfig = array(
+    /**
+     * Main Section.
+     */
+    'title' => 'ElasticSearch',
+    'version_from' => '9.0.2',
+    'version_to' => '10.0.0',
+    'vendor' => 'BoonEx',
+
+    'compatible_with' => array(
+        '10.0.0-B2'
+    ),
+
+    /**
+     * 'home_dir' and 'home_uri' - should be unique. Don't use spaces in 'home_uri' and the other special chars.
+     */
+    'home_dir' => 'boonex/elasticsearch/updates/update_9.0.2_10.0.0/',
+    'home_uri' => 'elasticsearch_update_902_1000',
+
+    'module_dir' => 'boonex/elasticsearch/',
+    'module_uri' => 'elasticsearch',
+
+    'db_prefix' => 'bx_els_',
+    'class_prefix' => 'BxEls',
+
+    /**
+     * Installation/Uninstallation Section.
+     */
+    'install' => array(
+        'execute_sql' => 0,
+        'update_files' => 1,
+        'update_languages' => 0,
+        'clear_db_cache' => 0,
+    ),
+
+    /**
+     * Category for language keys.
+     */
+    'language_category' => 'ElasticSearch',
+
+    /**
+     * Files Section
+     */
+    'delete_files' => array(
+        'template/css/'
+    ),
+);

+ 13 - 0
modules/boonex/elasticsearch/updates/9.0.2_10.0.0/install/installer.php

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

+ 253 - 0
modules/boonex/elasticsearch/updates/9.0.2_10.0.0/source/classes/BxElsApi.php

@@ -0,0 +1,253 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    ElasticSearch ElasticSearch
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+define('BX_ELASTICSEARCH_LOG', 1);
+
+/**
+ * ElasticSearch API
+ */
+class BxElsApi extends BxDol
+{
+    static $TYPE = 'doc';
+    
+	protected $_oModule;
+
+    protected $_sError = false;
+    protected $_iTimeout = 30;
+    protected $_sApiUrl = 'http://localhost:9200';
+
+    protected $_aOprs = array('AND' => array('AG' => 'bool', 'FN' => 'filter'), 'OR' => array('AG' => 'dis_max', 'FN' => 'queries'));
+
+    public function __construct(&$oModule)
+    {
+        $this->_oModule = $oModule;
+
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
+        $this->_sApiUrl = getParam($CNF['PARAM_API_URL']);
+    }
+
+    public function searchSimple($sIndex, $sType, $sTerm) 
+    {
+        if ($sType) {
+            $sQuery = "/{$sIndex}@{$sType}/" . self::$TYPE . "/_search";
+            return $this->api($sQuery, array('query' => array('simple_query_string' => array('query' => $sTerm))));
+        } 
+        else {
+            $this->log('ERROR: searchSimple - search without specifying particular module(type) isn\'t supported');
+        }
+    }
+
+    public function searchExtended($sIndex, $sType, $aCondition, $aSelection = array()) 
+    {
+        if ($sType) {
+            $sQuery = "/{$sIndex}@{$sType}/" . self::$TYPE . "/_search";
+
+            $aQuery = array('query' => $this->_prepareConditionsGroup($aCondition));
+            if(!empty($aSelection))
+                $aQuery = array_merge($aQuery, $aSelection);
+
+            return $this->api($sQuery, $aQuery);
+        }
+        else {
+            $this->log('ERROR: searchExtended - search without specifying particular module(type) isn\'t supported');
+        }
+    }
+
+    protected function _prepareConditionsGroup($aGrp)
+    {
+        if(!isset($aGrp['grp']) || !(bool)$aGrp['grp'])
+			return $this->_prepareConditionsSingle($aGrp);
+
+        $aResult = array();
+    	if(!isset($aGrp['opr'], $aGrp['cnds']) || empty($aGrp['cnds']) || !is_array($aGrp['cnds']))
+    		return $aResult;
+
+        $aOpr = $this->_aOprs[$aGrp['opr']];
+        $aResult[$aOpr['AG']] = array($aOpr['FN'] => array());
+
+        foreach($aGrp['cnds'] as $aCnd) {
+    		$sMethod = '_prepareConditions' . (isset($aCnd['grp']) && (bool)$aCnd['grp'] ? 'Group' : 'Single');
+    		$aResultCnd = $this->$sMethod($aCnd);
+    		if(!empty($aResultCnd))
+    		    $aResult[$aOpr['AG']][$aOpr['FN']][] = $aResultCnd;
+    	}
+
+        return $aResult;
+    }
+
+    protected function _prepareConditionsSingle($aCnd)
+    {
+        if(!isset($aCnd['val']) && !(isset($aCnd['val1']) || isset($aCnd['val2'])))
+            return array();
+
+        $bTp = !empty($aCnd['tp']);
+        $bFld = !empty($aCnd['fld']);
+        $bOprIn = !empty($aCnd['opr']) && $aCnd['opr'] == 'IN';
+
+        if($bTp)
+            $sType = $aCnd['tp'];
+        else if($bFld) {
+            if($bOprIn)
+                $sType = 'terms';
+            else 
+                $sType = 'term';
+        }
+        else 
+            $sType = 'simple_query_string';
+
+        $aQuery = array();
+        switch ($sType) {
+            case 'term':
+            case 'terms':
+                $aQuery = array($aCnd['fld'] => $aCnd['val']);
+                break;
+
+            case 'range':
+                $aOpr = array();
+                if(!empty($aCnd['opr1']) && isset($aCnd['val1']))
+                    $aOpr[$aCnd['opr1']] = $aCnd['val1'];
+                if(!empty($aCnd['opr2']) && isset($aCnd['val2']))
+                    $aOpr[$aCnd['opr2']] = $aCnd['val2'];
+
+                $aQuery = array($aCnd['fld'] => $aOpr);
+                break;
+
+            case 'simple_query_string':
+                $aQuery = array('query' => $aCnd['val']);
+                break;
+        }
+
+        return array($sType => $aQuery);
+    }
+
+    public function getData($sIndex, $sType, $iContentId) 
+    {
+        return $this->api("/{$sIndex}@{$sType}/" . self::$TYPE . "/$iContentId");
+    }
+
+    public function indexData($sIndex, $sType, $iContentId, $aData) 
+    {
+        return $this->api("/{$sIndex}@{$sType}/" . self::$TYPE . "/$iContentId", $aData, 'put');
+    }
+
+    public function updateData($sIndex, $sType, $iContentId, $aData)
+    {
+        return $this->api("/{$sIndex}@{$sType}/" . self::$TYPE . "/$iContentId", $aData, 'post');
+    }
+
+    public function deleteData($sIndex, $sType, $iContentId)
+    {
+        return $this->api("/{$sIndex}@{$sType}/" . self::$TYPE . "/$iContentId", array(), 'delete');
+    }
+
+    public function getErrorMsg() 
+    {
+        return $this->_sError;
+    }
+    
+    public function api($sAction, $aData = array(), $sMetod = 'get', $bJsonResponse = true) 
+    {
+        if (!$this->_sApiUrl) {
+            $this->_sError = 'Host isn\'t defined';
+            return null;
+        }
+
+        if (!$sAction) {
+            $this->_sError = 'Action isn\'t defined';
+            return null;
+        }        
+
+        $sUrl = bx_append_url_params($this->_sApiUrl . $sAction, array(
+            'format' => 'json',
+            'human' => false,
+        ));
+
+        $sHttpCode = 200;
+        $s = $this->curl($sUrl, $aData, $sMetod, $sHttpCode);
+
+        $this->log($s);
+
+        if ($sHttpCode >= 300 || $sHttpCode < 200) {
+            $this->_sError = 'Action('.$sAction.') returned status - ' . $sHttpCode;
+            return null;
+        }
+
+        // return JSON response
+        if ($s && $bJsonResponse) {
+            if (null === ($a = json_decode($s, true))) {
+                $this->_sError = 'Can not decode response';
+                return null;
+            }
+            return $a;
+        }
+    
+        return $s;
+    }
+
+    protected function curl ($sUrl, $aData = array(), $sMethod = 'get', &$sHttpCode = null, $aBasicAuth = array()) 
+    {
+        $rConnect = curl_init();
+
+        curl_setopt($rConnect, CURLOPT_USERAGENT, 'UNA ' . BX_DOL_VERSION);
+        curl_setopt($rConnect, CURLOPT_URL, $sUrl);
+        curl_setopt($rConnect, CURLOPT_HEADER, NULL === $sHttpCode ? false : true);
+        curl_setopt($rConnect, CURLOPT_RETURNTRANSFER, 1);
+        curl_setopt($rConnect, CURLOPT_VERBOSE, 0);
+        curl_setopt($rConnect, CURLOPT_HEADER, 0);
+
+        curl_setopt($rConnect, CURLOPT_CONNECTTIMEOUT, $this->_iTimeout);
+        curl_setopt($rConnect, CURLOPT_TIMEOUT, $this->_iTimeout);
+
+        if (!ini_get('open_basedir'))
+            curl_setopt($rConnect, CURLOPT_FOLLOWLOCATION, 1);
+
+        if ($aBasicAuth)
+            curl_setopt($rConnect, CURLOPT_USERPWD, $aBasicAuth['user'] . ':' . $aBasicAuth['password']);
+
+        if ('get' != $sMethod)
+            curl_setopt($rConnect, CURLOPT_CUSTOMREQUEST, strtoupper($sMethod));
+
+        if ('post' == $sMethod)
+            curl_setopt($rConnect, CURLOPT_POST, true);
+
+        if ($aData) {
+            curl_setopt($rConnect, CURLOPT_POSTFIELDS, json_encode($aData));
+            curl_setopt($rConnect, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
+        }
+
+        $sResult = curl_exec($rConnect);
+
+        if (NULL !== $sHttpCode)
+            $sHttpCode = curl_getinfo($rConnect, CURLINFO_HTTP_CODE);
+
+        curl_close($rConnect);
+
+        return $sResult;
+    }
+
+    protected function log ($mixed, $sProvider = '')
+    {
+        if (!defined('BX_ELASTICSEARCH_LOG') || !constant('BX_ELASTICSEARCH_LOG'))
+            return;
+        $fn = BX_DIRECTORY_PATH_ROOT . "logs/elasticsearch.log";
+        $f = @fopen ($fn, 'a');
+        if (!$f)
+            return;
+        if (is_array($mixed))
+            fwrite ($f, date(DATE_RFC822) . "\n" . print_r($mixed, true) . "\n");
+        else
+            fwrite ($f, date(DATE_RFC822) . "\t" . $mixed . "\n");
+        fclose ($f);
+    }
+}
+
+/** @} */

+ 479 - 0
modules/boonex/elasticsearch/updates/9.0.2_10.0.0/source/classes/BxElsModule.php

@@ -0,0 +1,479 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    ElasticSearch ElasticSearch
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxElsModule extends BxBaseModGeneralModule
+{
+    protected $_oApi;
+
+    function __construct(&$aModule)
+    {
+        parent::__construct($aModule);
+
+        bx_import('Api', $aModule);
+        $this->_oApi = new BxElsApi($this);
+    }
+
+    public function actionDeleteOldIndex()
+    {
+        if (!isAdmin()) {
+            BxDolTemplate::getInstance()->displayAccessDenied();
+            exit;
+        }
+
+        $mixed = $this->_oApi->api('/' . $this->_oConfig->getIndex(), array(), 'delete');
+
+        echo '<pre>';
+        if (null === $mixed)
+            echo $this->_oApi->getErrorMsg();
+        else
+            var_dump($mixed);
+        echo '</pre>';
+    }
+
+    public function actionDebug($sIndex = '')
+    {
+        if(empty($sIndex))
+            $sIndex = $this->_oConfig->getIndex();
+
+        // search all
+        $mixed = $this->_oApi->api('/' . $sIndex . '@bx_posts/doc/_search?q=*');
+        // $mixed = $this->_oApi->api('/testdata/_search', ['query' => ['match_all' => (object)[]]]);
+
+        // search for the term
+        // $mixed = $this->_oApi->api('/testdata/_search', ['query' => ['simple_query_string' => ['query' => 'palm']]]);
+        // $mixed = $this->_oApi->api('/testdata/_search?q=palm');
+
+        // search in a field
+        // $mixed = $this->_oApi->api('/testdata/_search', ['query' => ['simple_query_string' => ['query' => 'palm', 'fields' => ['name']]]]);
+
+        // compound searchs
+        /*
+        $mixed = $this->_oApi->api('/testdata/_search', array(
+        	'query' => array(
+            	'bool' => array(
+            		'filter' => array(
+                        array('term' => array('featured' => '0')),
+                        array('term' => array('allow_view_to' => '3')),
+                        array(
+                            'dis_max' => array(
+                                'queries' => array(
+                                    array('term' => array('title' => 'uupdd')),
+                                    array('term' => array('text' => 'uupdd'))
+                                )
+                            ),
+                        )
+                    ),
+                ))
+            ));
+
+		$mixed = $this->api('/testdata/_search', array(
+        	'query' => array(
+            	'dis_max' => array(
+            		'queries' => array(
+            			array('simple_query_string' => array('query' => 'uupd')),
+                        array('term' => array('title' => 'uupdd')),
+                        array('term' => array('text' => 'uupdd')),
+                        array(
+                            'bool' => array(
+                                'filter' => array(
+                                    array('term' => array('featured' => '0')),
+                                    array('term' => array('allow_view_to' => '3')),   
+                                )
+                            ),
+                        )
+                    ),
+                ))
+            ));
+		*/
+
+        // delete index
+        //$mixed = $this->_oApi->api('/' . $this->_oConfig->getIndex(), array(), 'delete'); 
+
+        // delete indexed doc
+        //$mixed = $this->_oApi->api('/' . $this->_oConfig->getIndex() . '/trees/23', [], 'delete'); 
+
+        // get indexed doc
+        // $mixed = $this->_oApi->api('/testdata/trees/23'); 
+
+        // index a doc
+        // $mixed = $this->_oApi->indexData('testdata', 'trees', 23, ['name' => 'apple tree', 'fruits' => 'apples']); 
+        // $mixed = $this->_oApi->indexData('testdata', 'trees', 24, ['name' => 'palm', 'fruits' => 'coconuts']);
+
+        // get indexes
+        // $mixed = $this->_oApi->api('/_cat/indices'); 
+
+        // add index
+        // $mixed = $this->_oApi->api('/testdata', [], 'PUT'); 
+
+        // test
+        //$mixed = $this->_oApi->api('/_cat/health'); 
+        
+        // mapping put
+        //$mixed = $this->_oApi->api('/' . $sIndex . '/_mapping/bx_forum', array('properties' => array('featured' => array('type' => 'long'))));
+
+        // mapping get
+        //$mixed = $this->_oApi->api('/' . $sIndex . '/_mapping' . (!empty($sType) ? '/' . $sType : ''));
+
+        echo '<pre>';
+        if (null === $mixed)
+            echo $this->_oApi->getErrorMsg();
+        else
+            var_dump($mixed);
+        echo '</pre>';
+    }
+
+    /**
+     * @page service Service Calls
+     * @section bx_elasticsearch ElasticSearch
+     * @subsection bx_elasticsearch-other Other
+     * @subsubsection bx_elasticsearch-is_configured is_configured
+     * 
+     * @code bx_srv('bx_elasticsearch', 'is_configured', [...]); @endcode
+     * 
+     * Checkes whether the module is correctly configured or not. 
+     *
+     * @return boolean value determining where the module is configured or not.
+     * 
+     * @see BxElsModule::serviceIsConfigured
+     */
+    /** 
+     * @ref bx_elasticsearch-is_configured "is_configured"
+     */
+    public function serviceIsConfigured()
+    {
+        $CNF = &$this->_oConfig->CNF;
+
+        return isset($CNF['PARAM_API_URL']) && getParam($CNF['PARAM_API_URL']) != '';
+    }
+
+    /**
+     * @page service Service Calls
+     * @section bx_elasticsearch ElasticSearch
+     * @subsection bx_elasticsearch-search Search
+     * @subsubsection bx_elasticsearch-search_simple search_simple
+     * 
+     * @code bx_srv('bx_elasticsearch', 'search_simple', [...]); @endcode
+     * 
+     * Perform a simple search by term. Index and Type to search in can be specified.
+     *
+     * @param $sTerm string value with keyword to search for.
+     * @param $sType (optional) if type is specified then the search will be performed in this type only.
+     * @param $sIndex (optional) if index is specified then the search will be performed in this index only.
+     * @return an array with search results.
+     * 
+     * @see BxElsModule::serviceSearchSimple
+     */
+    /** 
+     * @ref bx_elasticsearch-search_simple "search_simple"
+     */
+    public function serviceSearchSimple($sTerm, $sType = '', $sIndex = '')
+    {
+        if(empty($sIndex))
+            $sIndex = $this->_oConfig->getIndex();
+
+        $mixedResult = $this->_oApi->searchSimple($sIndex, $sType, $sTerm);
+        if(!$mixedResult || !is_array($mixedResult))
+            return false;
+
+        return $mixedResult['hits'];
+    }
+
+    /**
+     * @page service Service Calls
+     * @section bx_elasticsearch ElasticSearch
+     * @subsection bx_elasticsearch-search Search
+     * @subsubsection bx_elasticsearch-search_extended search_extended
+     * 
+     * @code bx_srv('bx_elasticsearch', 'search_extended', [...]); @endcode
+     * 
+     * Perform an extended search by provided conditions. Index and Type to search in can be specified.
+     *
+     * @param $aCondition an array with conditions to construct search request from.
+     * @param $aSelection (optional) an array with custom condition. 
+     * @param $sType (optional) if type is specified then the search will be performed in this type only.
+     * @param $sIndex (optional) if index is specified then the search will be performed in this index only.
+     * @return an array with search results.
+     * 
+     * Condition #1: keyword search
+     * $aCondition = array('val' => 'test');
+     * 
+     * Condition #2: `featured`='1'
+     * $aCondition = array('fld' => 'featured', 'val' => 0);
+     * 
+     * Condition #3: (`title`='test' OR `text`='test' OR (`featured`='1' AND `allow_view_to`='3'))
+     * $aCondition = array('grp' => true, 'opr' => 'OR', 'cnds' => array(
+     * 		array('fld' => 'title', 'val' => 'test'),
+     * 		array('fld' => 'text', 'val' => 'test'),
+     * 		array('grp' => true, 'opr' => 'AND', 'cnds' => array(
+     * 			array('fld' => 'featured', 'val' => 1),
+     * 			array('fld' => 'allow_view_to', 'val' => 3)
+     * 		)),
+     * 		array('simple_query_string' => array('query' => 'test')),
+     * ));
+     * 
+     * Condition #4: ((`title`='test' OR `text`='test') AND `featured`='1' AND `allow_view_to`='3')
+     * $aCondition = array('grp' => true, 'opr' => 'AND', 'cnds' => array(
+     * 		array('grp' => true, 'opr' => 'OR', 'cnds' => array(
+     * 			array('fld' => 'title', 'val' => 'test'),
+     * 			array('fld' => 'text', 'val' => 'test'),
+     * 		)),
+     * 		array('fld' => 'featured', 'val' => 0),
+     * 		array('fld' => 'allow_view_to', 'val' => 3)
+     * ));
+     * 
+     * @see BxElsModule::serviceSearchExtended
+     */
+    /** 
+     * @ref bx_elasticsearch-search_extended "search_extended"
+     */
+    public function serviceSearchExtended($aCondition, $aSelection = array(), $sType = '', $sIndex = '')
+    {
+        if(empty($sIndex))
+            $sIndex = $this->_oConfig->getIndex();
+
+        $mixedResult = $this->_oApi->searchExtended($sIndex, $sType, $aCondition, $aSelection);
+        if(!$mixedResult || !is_array($mixedResult))
+            return false;
+
+        return $mixedResult['hits'];
+    }
+
+    /**
+     * @page service Service Calls
+     * @section bx_elasticsearch ElasticSearch
+     * @subsection bx_elasticsearch-manage Manage
+     * @subsubsection bx_elasticsearch-get get
+     * 
+     * @code bx_srv('bx_elasticsearch', 'get', [...]); @endcode
+     * 
+     * Get item's data by content ID and type.
+     *
+     * @param $iContentId integer value with content ID.
+     * @param $sType a string with content type.
+     * @param $sIndex (optional) if index is specified then the item will be searched in this index only.
+     * @return an array with item's data.
+     * 
+     * @see BxElsModule::serviceGet
+     */
+    /** 
+     * @ref bx_elasticsearch-get "get"
+     */
+    public function serviceGet($iContentId, $sType, $sIndex = '')
+    {
+        if(empty($sIndex))
+            $sIndex = $this->_oConfig->getIndex();
+
+        return $this->_oApi->getData($sIndex, $sType, $iContentId);
+    }
+
+    /**
+     * @page service Service Calls
+     * @section bx_elasticsearch ElasticSearch
+     * @subsection bx_elasticsearch-manage Manage
+     * @subsubsection bx_elasticsearch-add add
+     * 
+     * @code bx_srv('bx_elasticsearch', 'add', [...]); @endcode
+     * 
+     * Add item to store in Elasticsearch.
+     *
+     * @param $iContentId integer value with content ID.
+     * @param $mixedContentInfo mixed value with content info to store.
+     * @param $sIndex (optional) if index is specified then the item will be stored in this index.
+     * @return boolean value determining where the item was added or not.
+     * 
+     * @see BxElsModule::serviceAdd
+     */
+    /** 
+     * @ref bx_elasticsearch-add "add"
+     */
+    public function serviceAdd($iContentId, $mixedContentInfo, $sIndex = '')
+    {
+        if(is_array($mixedContentInfo)) {
+            $sMethod = 'getObjectInstanceByAlert' . bx_gen_method_name($mixedContentInfo['alert_type']);
+            $mixedContentInfo = BxDolContentInfo::$sMethod($mixedContentInfo['unit'], $mixedContentInfo['action']);
+        }
+
+        if(!($mixedContentInfo instanceof BxDolContentInfo))
+            return false;
+
+        $CNF = &$this->_oConfig->CNF;
+
+        if(empty($sIndex))
+            $sIndex = $this->_oConfig->getIndex();
+
+        $aInfo = array(
+            $CNF['FIELD_AUTHOR'] => $mixedContentInfo->getContentAuthor($iContentId),
+            $CNF['FIELD_ADDED'] => $mixedContentInfo->getContentDateAdded($iContentId),
+            $CNF['FIELD_CHANGED'] => $mixedContentInfo->getContentDateChanged($iContentId),
+            $CNF['FIELD_LINK'] => $mixedContentInfo->getContentLink($iContentId),
+            $CNF['FIELD_TITLE'] => $mixedContentInfo->getContentTitle($iContentId),
+            $CNF['FIELD_TEXT'] => $mixedContentInfo->getContentText($iContentId),
+        );
+        $aInfo = array_merge($aInfo, $mixedContentInfo->getContentInfo($iContentId));
+
+        $mixedResult = $this->_oApi->indexData($sIndex, $mixedContentInfo->getName(), $iContentId, $this->_prepareToIndex($aInfo));
+        if($mixedResult === null)
+            return false;
+
+        return $mixedResult['result'] == 'created';
+    }
+
+    /**
+     * @page service Service Calls
+     * @section bx_elasticsearch ElasticSearch
+     * @subsection bx_elasticsearch-manage Manage
+     * @subsubsection bx_elasticsearch-update update
+     * 
+     * @code bx_srv('bx_elasticsearch', 'update', [...]); @endcode
+     * 
+     * Update item in Elasticsearch storage.
+     *
+     * @param $iContentId integer value with content ID.
+     * @param $mixedContentInfo mixed value with new content info.
+     * @param $sIndex (optional) if index is specified then the item will be updated in this index.
+     * @return boolean value determining where the item was updated or not.
+     * 
+     * @see BxElsModule::serviceUpdate
+     */
+    /** 
+     * @ref bx_elasticsearch-update "update"
+     */
+    public function serviceUpdate($iContentId, $mixedContentInfo, $sIndex = '')
+    {
+        if(is_array($mixedContentInfo)) {
+            $sMethod = 'getObjectInstanceByAlert' . bx_gen_method_name($mixedContentInfo['alert_type']);
+            $mixedContentInfo = BxDolContentInfo::$sMethod($mixedContentInfo['unit'], $mixedContentInfo['action']);
+        }
+
+        if(!($mixedContentInfo instanceof BxDolContentInfo))
+            return false;
+
+        $CNF = &$this->_oConfig->CNF;
+
+        if(empty($sIndex))
+            $sIndex = $this->_oConfig->getIndex();
+
+        $aInfo = array(
+            $CNF['FIELD_AUTHOR'] => $mixedContentInfo->getContentAuthor($iContentId),
+            $CNF['FIELD_ADDED'] => $mixedContentInfo->getContentDateAdded($iContentId),
+            $CNF['FIELD_CHANGED'] => $mixedContentInfo->getContentDateChanged($iContentId),
+            $CNF['FIELD_LINK'] => $mixedContentInfo->getContentLink($iContentId),
+            $CNF['FIELD_TITLE'] => $mixedContentInfo->getContentTitle($iContentId),
+            $CNF['FIELD_TEXT'] => $mixedContentInfo->getContentText($iContentId),
+        );
+        $aInfo = array_merge($aInfo, $mixedContentInfo->getContentInfo($iContentId));
+
+        $mixedResult = $this->_oApi->updateData($sIndex, $mixedContentInfo->getName(), $iContentId, $this->_prepareToIndex($aInfo));
+        if($mixedResult === null)
+            return false;
+
+        return $mixedResult['result'] == 'updated';
+    }
+
+    /**
+     * @page service Service Calls
+     * @section bx_elasticsearch ElasticSearch
+     * @subsection bx_elasticsearch-manage Manage
+     * @subsubsection bx_elasticsearch-delete delete
+     * 
+     * @code bx_srv('bx_elasticsearch', 'delete', [...]); @endcode
+     * 
+     * Delete item from Elasticsearch storage.
+     *
+     * @param $iContentId integer value with content ID.
+     * @param $mixedContentInfo mixed value with content info which is needed during deletion.
+     * @param $sIndex (optional) if index is specified then the item will be deleted from this index.
+     * @return boolean value determining where the item was deleted or not.
+     * 
+     * @see BxElsModule::serviceDelete
+     */
+    /** 
+     * @ref bx_elasticsearch-delete "delete"
+     */
+    public function serviceDelete($iContentId, $mixedContentInfo, $sIndex = '')
+    {
+        if(is_array($mixedContentInfo)) {
+            $sMethod = 'getObjectInstanceByAlert' . bx_gen_method_name($mixedContentInfo['alert_type']);
+            $mixedContentInfo = BxDolContentInfo::$sMethod($mixedContentInfo['unit'], $mixedContentInfo['action']);
+        }
+
+        if(!($mixedContentInfo instanceof BxDolContentInfo))
+            return false;
+
+        $CNF = &$this->_oConfig->CNF;
+
+        if(empty($sIndex))
+            $sIndex = $this->_oConfig->getIndex();
+
+        $mixedResult = $this->_oApi->deleteData($sIndex, $mixedContentInfo->getName(), $iContentId);
+        if($mixedResult === null)
+            return false;
+
+        return $mixedResult['result'] == 'deleted';
+    }
+
+    /**
+     * @page service Service Calls
+     * @section bx_elasticsearch ElasticSearch
+     * @subsection bx_elasticsearch-manage Manage
+     * @subsubsection bx_elasticsearch-index index
+     * 
+     * @code bx_srv('bx_elasticsearch', 'delete', [...]); @endcode
+     * 
+     * Index data in Elasticsearch storage.
+     *
+     * @param $sIndex string value with storage's index name which will be indexed.
+     * @param $sType (optional) if type is specified then data in this type will be indexed only.
+     * @return boolean value determining where the data was indexed or not.
+     * 
+     * @see BxElsModule::serviceIndex
+     */
+    /** 
+     * @ref bx_elasticsearch-index "index"
+     */
+    public function serviceIndex($sIndex, $sType = '')
+    {
+        if(empty($sIndex))
+            $sIndex = $this->_oConfig->getIndex();
+
+        $aTypes = !empty($sType) ? array($sType) : array_keys(BxDolContentInfo::getSystems());
+        if(empty($aTypes) || !is_array($aTypes))
+            return false;
+
+        foreach($aTypes as $sType) {
+            $oContentInfo = BxDolContentInfo::getObjectInstance($sType);
+            if(!$oContentInfo)
+                continue;
+
+            $aIds = $oContentInfo->getAll(array('type' => 'all_ids'));
+            if(empty($aIds) || !is_array($aIds))
+                continue;
+
+            foreach($aIds as $iId)
+                $this->serviceAdd($iId, $oContentInfo);
+        }
+
+        return true;
+    }
+
+    protected function _prepareToIndex($mixed)
+    {
+        if(!is_array($mixed))
+            return strip_tags($mixed);
+
+        foreach($mixed as $mixedKey => $mixedValue)
+            $mixed[$mixedKey] = strip_tags($mixedValue);
+
+        return $mixed;
+    }
+}
+
+/** @} */

+ 83 - 0
modules/boonex/elasticsearch/updates/9.0.2_10.0.0/source/classes/BxElsSearch.php

@@ -0,0 +1,83 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    ElasticSearch ElasticSearch
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxElsSearch extends BxTemplSearch
+{
+    protected $_sModule;
+    protected $_oModule;
+
+    public function __construct ($aChoice = '')
+    {
+        parent::__construct($aChoice);
+
+        $this->aClasses = array();
+        $this->aChoice = array();
+
+        $this->_sModule = 'bx_elasticsearch';
+        $this->_oModule = BxDolModule::getInstance($this->_sModule);
+
+        $aSystems = BxDolContentInfo::getSystems();
+        foreach($aSystems as $aSystem) 
+            $this->aClasses[$aSystem['name']] = array_merge($aSystem, array(
+                'GlobalSearch' => 1
+            ));
+
+        if (is_array($aChoice) && !empty($aChoice))
+            foreach ($aChoice as $sValue) {
+                if (!isset($this->aClasses[$sValue]))
+                    continue;
+
+                $this->aChoice[$sValue] = $this->aClasses[$sValue];
+            }
+        else
+            $this->aChoice = $this->aClasses;
+    }
+
+    public function response ()
+    {
+        $sKeyword = bx_process_input(bx_get('keyword'));
+
+        $sUnitTemplate = '';
+        if($this->_bLiveSearch)
+            $sUnitTemplate = 'unit_live_search.html';
+
+        $sResult = '';
+        foreach ($this->aChoice as $sKey => $aValue) {
+            if (!$this->_sMetaType && !$aValue['GlobalSearch'])
+                continue;
+
+            $aResults = $this->_oModule->serviceSearchSimple($sKeyword, $sKey);
+            if((int)$aResults['total'] == 0 || empty($aResults['hits']))
+                continue;
+
+            $sContent = '';
+            foreach ($aResults['hits'] as $aResult) {
+                if (!isset($aResult['_index']))
+                    continue;
+                list ($sHost, $sObject) = explode('@', $aResult['_index']);
+                if (empty($sObject))
+                    continue;
+                if (!($oContentInfo = BxDolContentInfo::getObjectInstance($sObject)))
+                    continue;
+                $sContent .= $oContentInfo->getContentSearchResultUnit($aResult['_id'], $sUnitTemplate);
+            }
+
+            $sResult .= $this->_oModule->_oTemplate->parseHtmlByName('search_results_block.html', array(
+                'id' => $aValue['id'],
+                'content' => DesignBoxContent(_t($aValue['title']), $sContent, BX_DB_PADDING_DEF)
+            ));
+        }
+
+        return $sResult;
+    }
+}
+
+/** @} */

+ 71 - 0
modules/boonex/elasticsearch/updates/9.0.2_10.0.0/source/install/config.php

@@ -0,0 +1,71 @@
+<?php
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    ElasticSearch ElasticSearch
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+$aConfig = array(
+    /**
+     * Main Section.
+     */
+    'type' => BX_DOL_MODULE_TYPE_MODULE,
+    'name' => 'bx_elasticsearch',
+    'title' => 'ElasticSearch',
+    'note' => 'Allows to translate content of the site on different languages',
+    'version' => '10.0.0',
+    'vendor' => 'BoonEx',
+    'help_url' => 'http://feed.una.io/?section={module_name}',
+
+    'compatible_with' => array(
+        '10.0.0-B2'
+    ),
+
+    /**
+     * 'home_dir' and 'home_uri' - should be unique. Don't use spaces in 'home_uri' and the other special chars.
+     */
+    'home_dir' => 'boonex/elasticsearch/',
+    'home_uri' => 'elasticsearch',
+
+    'db_prefix' => 'bx_els_',
+    'class_prefix' => 'BxEls',
+
+    /**
+     * Category for language keys.
+     */
+    'language_category' => 'ElasticSearch',
+
+    /**
+     * 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,
+    	'process_content_alerts' => 1,    //Note. It's essential to make this action AFTER 'execute_sql' one.
+        'clear_db_cache' => 1,
+    ),
+    'disable' => array (
+        'execute_sql' => 1,
+        'clear_db_cache' => 1,
+    ),
+
+    /**
+     * Dependencies Section
+     */
+    'dependencies' => array(),
+);
+
+/** @} */

+ 51 - 0
modules/boonex/files/updates/10.0.0_10.0.1/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' => 'Files',
+    'version_from' => '10.0.0',
+    'version_to' => '10.0.1',
+    'vendor' => 'BoonEx',
+
+    'compatible_with' => array(
+        '10.0.0-B2'
+    ),
+
+    /**
+     * 'home_dir' and 'home_uri' - should be unique. Don't use spaces in 'home_uri' and the other special chars.
+     */
+    'home_dir' => 'boonex/files/updates/update_10.0.0_10.0.1/',
+    'home_uri' => 'files_update_1000_1001',
+
+    'module_dir' => 'boonex/files/',
+    'module_uri' => 'files',
+
+    'db_prefix' => 'bx_files_',
+    'class_prefix' => 'BxFiles',
+
+    /**
+     * Installation/Uninstallation Section.
+     */
+    'install' => array(
+        'execute_sql' => 0,
+        'update_files' => 1,
+        'update_languages' => 1,
+        'clear_db_cache' => 0,
+    ),
+
+    /**
+     * Category for language keys.
+     */
+    'language_category' => 'Files',
+
+    /**
+     * Files Section
+     */
+    'delete_files' => array(),
+);

+ 13 - 0
modules/boonex/files/updates/10.0.0_10.0.1/install/installer.php

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

+ 6 - 0
modules/boonex/files/updates/10.0.0_10.0.1/install/langs/en.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources name="en" flag="gb" title="English">
+	<string_add name="_bx_files_txt_sample_reaction_single"><![CDATA['{0}' reaction to file]]></string_add>
+
+	<string_upd name="_bx_files_txt_all_entries_by"><![CDATA[{0} files]]></string_upd>
+</resources>

+ 157 - 0
modules/boonex/files/updates/10.0.0_10.0.1/source/classes/BxFilesConfig.php

@@ -0,0 +1,157 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Files Files
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxFilesConfig extends BxBaseModTextConfig
+{
+    function __construct($aModule)
+    {
+        parent::__construct($aModule);
+
+        $aMenuItems2Methods = array (
+            'download-file' => 'checkAllowedView',
+            'edit-file' => 'checkAllowedEdit',
+            'delete-file' => 'checkAllowedDelete',
+        );
+
+        $this->CNF = array (
+
+            // module icon
+            'ICON' => 'far file col-red3',
+
+            // database tables
+            'TABLE_ENTRIES' => $aModule['db_prefix'] . 'main',
+            'TABLE_ENTRIES_FULLTEXT' => 'search_fields',
+            'TABLE_FILES' => $aModule['db_prefix'] . 'files',
+
+            // database fields
+            'FIELD_ID' => 'id',
+            'FIELD_AUTHOR' => 'author',
+            'FIELD_ADDED' => 'added',
+            'FIELD_CHANGED' => 'changed',
+            'FIELD_FILE_ID' => 'file_id',
+            'FIELD_FOR_STORING_FILE_ID' => 'file_id',
+            'FIELD_TITLE' => 'title',
+            'FIELD_CATEGORY' => 'cat',
+            'FIELD_TEXT' => 'desc',
+            'FIELD_TEXT_ID' => 'file-desc',
+            'FIELD_ALLOW_VIEW_TO' => 'allow_view_to',
+            'FIELD_PHOTO' => 'attachments',
+            'FIELD_VIEWS' => 'views',
+            'FIELD_COMMENTS' => 'comments',
+            'FIELD_STATUS' => 'status',
+            'FIELD_STATUS_ADMIN' => 'status_admin',
+            'FIELD_LOCATION_PREFIX' => 'location',
+            'FIELD_LABELS' => 'labels',
+            'FIELDS_WITH_KEYWORDS' => 'auto', // can be 'auto', array of fields or comma separated string of field names, works only when OBJECT_METATAGS is specified
+			
+            // page URIs
+            'URI_VIEW_ENTRY' => 'view-file',
+            'URI_AUTHOR_ENTRIES' => 'files-author',
+            'URI_ENTRIES_BY_CONTEXT' => 'files-context',
+            'URI_ADD_ENTRY' => 'create-file',
+            'URI_EDIT_ENTRY' => 'edit-file',
+            'URI_MANAGE_COMMON' => 'files-manage',
+
+            'URL_HOME' => 'page.php?i=files-home',
+            'URL_POPULAR' => 'page.php?i=files-popular',
+            'URL_UPDATED' => 'page.php?i=files-updated',
+            'URL_MANAGE_COMMON' => 'page.php?i=files-manage',
+            'URL_MANAGE_ADMINISTRATION' => 'page.php?i=files-administration',
+
+            // some params
+            'PARAM_CHARS_SUMMARY' => 'bx_files_summary_chars',
+            'PARAM_CHARS_SUMMARY_PLAIN' => '',
+            'PARAM_NUM_RSS' => 'bx_files_rss_num',
+            'PARAM_SEARCHABLE_FIELDS' => 'bx_files_searchable_fields',
+
+            // objects
+            'OBJECT_STORAGE' => 'bx_files_files',
+            'OBJECT_IMAGES_TRANSCODER_PREVIEW' => 'bx_files_preview',
+            'OBJECT_IMAGES_TRANSCODER_GALLERY' => 'bx_files_gallery',
+            'OBJECT_VIDEOS_TRANSCODERS' => array(),
+            'OBJECT_REPORTS' => 'bx_files',
+            'OBJECT_VIEWS' => 'bx_files',
+            'OBJECT_VOTES' => 'bx_files',
+            'OBJECT_REACTIONS' => 'bx_files_reactions',
+            'OBJECT_SCORES' => 'bx_files',
+            'OBJECT_FAVORITES' => 'bx_files',
+            'OBJECT_FEATURED' => 'bx_files',
+            'OBJECT_METATAGS' => 'bx_files',
+            'OBJECT_COMMENTS' => 'bx_files',
+            'OBJECT_CATEGORY' => 'bx_files_cats',
+            'OBJECT_PRIVACY_VIEW' => 'bx_files_allow_view_to',
+            'OBJECT_FORM_ENTRY' => 'bx_files',
+            'OBJECT_FORM_ENTRY_DISPLAY_VIEW' => 'bx_files_entry_view',
+            'OBJECT_FORM_ENTRY_DISPLAY_ADD' => 'bx_files_entry_edit',
+            'OBJECT_FORM_ENTRY_DISPLAY_EDIT' => 'bx_files_entry_edit',
+            'OBJECT_FORM_ENTRY_DISPLAY_DELETE' => 'bx_files_entry_delete',
+            'OBJECT_MENU_ACTIONS_VIEW_ENTRY' => 'bx_files_view', // actions menu on view entry page
+            'OBJECT_MENU_ACTIONS_VIEW_ENTRY_ALL' => 'bx_files_view_actions', // all actions menu on view entry page
+            'OBJECT_MENU_ACTIONS_MY_ENTRIES' => 'bx_files_my', // actions menu on my entries page
+            'OBJECT_MENU_SUBMENU' => 'bx_files_submenu', // main module submenu
+            'OBJECT_MENU_SUBMENU_VIEW_ENTRY' => 'bx_files_view_submenu', // view entry submenu
+            'OBJECT_MENU_SUBMENU_VIEW_ENTRY_MAIN_SELECTION' => 'files-home', // first item in view entry submenu from main module submenu
+            'OBJECT_MENU_SNIPPET_META' => 'bx_files_snippet_meta', // menu for snippet meta info
+            'OBJECT_MENU_MANAGE_TOOLS' => 'bx_files_menu_manage_tools', //manage menu in content administration tools
+            'OBJECT_GRID_ADMINISTRATION' => 'bx_files_administration',
+            'OBJECT_GRID_COMMON' => 'bx_files_common',
+            'OBJECT_UPLOADERS' => array('sys_simple', 'sys_html5'),
+
+            // menu items which visibility depends on custom visibility checking
+            'MENU_ITEM_TO_METHOD' => array (
+                'bx_files_my' => array (
+                    'create-file' => 'checkAllowedAdd',
+                ),
+                'bx_files_view' => $aMenuItems2Methods,
+            ),
+
+            // some language keys
+            'T' => array (
+                'txt_sample_single' => '_bx_files_txt_sample_single',
+            	'txt_sample_single_with_article' => '_bx_files_txt_sample_single_with_article',
+            	'txt_sample_comment_single' => '_bx_files_txt_sample_comment_single',
+            	'txt_sample_vote_single' => '_bx_files_txt_sample_vote_single',
+                'txt_sample_reaction_single' => '_bx_files_txt_sample_reaction_single',
+                'txt_sample_score_up_single' => '_bx_files_txt_sample_score_up_single',
+                'txt_sample_score_down_single' => '_bx_files_txt_sample_score_down_single',
+             	'form_field_author' => '_bx_files_form_entry_input_author',
+                'form_entry_upload_single_for_update' => '_bx_files_form_entry_input_pictures_upload',
+            	'grid_action_err_delete' => '_bx_files_grid_action_err_delete',
+            	'grid_txt_account_manager' => '_bx_files_grid_txt_account_manager',
+                'filter_item_active' => '_bx_files_grid_filter_item_title_adm_active',
+            	'filter_item_hidden' => '_bx_files_grid_filter_item_title_adm_hidden',
+            	'filter_item_select_one_filter1' => '_bx_files_grid_filter_item_title_adm_select_one_filter1',
+            	'menu_item_manage_my' => '_bx_files_menu_item_title_manage_my',
+            	'menu_item_manage_all' => '_bx_files_menu_item_title_manage_all',
+                'txt_all_entries_by' => '_bx_files_txt_all_entries_by',
+                'txt_all_entries_in' => '_bx_files_txt_all_entries_in',
+                'txt_all_entries_by_author' => '_bx_files_page_title_browse_by_author',
+                'txt_all_entries_by_context' => '_bx_files_page_title_browse_by_context',
+            ),
+        );
+
+        $this->_aJsClasses = array(
+        	'manage_tools' => 'BxFilesManageTools'
+        );
+
+        $this->_aJsObjects = array(
+        	'manage_tools' => 'oBxFilesManageTools'
+        );
+
+        $this->_aGridObjects = array(
+        	'common' => $this->CNF['OBJECT_GRID_COMMON'],
+        	'administration' => $this->CNF['OBJECT_GRID_ADMINISTRATION'],
+        	
+        );
+    }
+}
+
+/** @} */

+ 136 - 0
modules/boonex/files/updates/10.0.0_10.0.1/source/install/config.php

@@ -0,0 +1,136 @@
+<?php
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Files Files
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+$aConfig = array(
+
+    /**
+     * Main Section.
+     */
+    'type' => BX_DOL_MODULE_TYPE_MODULE,
+    'name' => 'bx_files',
+    'title' => 'Files',
+    'note' => 'Basic blogging module.',
+    'version' => '10.0.1',
+    'vendor' => 'BoonEx',
+    'help_url' => 'http://feed.una.io/?section={module_name}',
+
+    'compatible_with' => array(
+        '10.0.0-B2'
+    ),
+
+    /**
+     * 'home_dir' and 'home_uri' - should be unique. Don't use spaces in 'home_uri' and the other special chars.
+     */
+    'home_dir' => 'boonex/files/',
+    'home_uri' => 'files',
+
+    'db_prefix' => 'bx_files_',
+    'class_prefix' => 'BxFiles',
+
+    /**
+     * Category for language keys.
+     */
+    'language_category' => 'Files',
+
+    /**
+     * List of page triggers.
+     */
+    'page_triggers' => array (
+    	'trigger_page_profile_view_entry',
+    	'trigger_page_group_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_files_files'
+    ),
+
+    /**
+     * Transcoders.
+     */
+    'transcoders' => array(
+		'bx_files_preview',
+        'bx_files_gallery',
+    ),
+
+	/**
+     * Extended Search Forms.
+     */
+    'esearches' => array(
+        'bx_files',
+    	'bx_files_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',
+    ),
+
+);
+
+/** @} */

+ 230 - 0
modules/boonex/files/updates/10.0.0_10.0.1/source/install/langs/en.xml

@@ -0,0 +1,230 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources name="en" flag="gb" title="English">
+
+	<string name="_bx_files"><![CDATA[Files]]></string>
+	<string name="_bx_files_cmts"><![CDATA[Files' Comments]]></string>
+
+	<string name="_bx_files_option_summary_chars"><![CDATA[Number of characters in auto-cropped file summary]]></string>
+	<string name="_bx_files_option_per_page_browse"><![CDATA[Number of items per page]]></string>
+    <string name="_bx_files_option_per_page_profile"><![CDATA[Number of items on profile/group page]]></string>
+	<string name="_bx_files_option_rss_num"><![CDATA[Number of items in RSS feed]]></string>
+	<string name="_bx_files_option_searchable_fields"><![CDATA[Searchable fields for keyword search]]></string>
+
+	<string name="_bx_files_form_upload"><![CDATA[Files Upload]]></string>
+	<string name="_bx_files_form_entry"><![CDATA[Files]]></string>
+	<string name="_bx_files_form_entry_display_add"><![CDATA[Add Files]]></string>
+	<string name="_bx_files_form_entry_display_edit"><![CDATA[Edit File]]></string>
+	<string name="_bx_files_form_entry_display_delete"><![CDATA[Delete File]]></string>
+	<string name="_bx_files_form_entry_display_view"><![CDATA[View File]]></string>
+	<string name="_bx_files_form_entry_input_author"><![CDATA[Author]]></string>
+	<string name="_bx_files_form_entry_input_sys_do_submit"><![CDATA[Submit]]></string>
+	<string name="_bx_files_form_entry_input_do_submit"><![CDATA[Submit]]></string>
+	<string name="_bx_files_form_entry_input_sys_do_publish"><![CDATA[Publish]]></string>
+	<string name="_bx_files_form_entry_input_do_publish"><![CDATA[Publish]]></string>
+	<string name="_bx_files_form_entry_input_sys_title"><![CDATA[Title]]></string>
+	<string name="_bx_files_form_entry_input_title"><![CDATA[Title]]></string>
+	<string name="_bx_files_form_entry_input_title_err"><![CDATA[Title is essential. Please, fill in this field]]></string>
+	<string name="_bx_files_form_entry_input_sys_cat"><![CDATA[Category]]></string>
+	<string name="_bx_files_form_entry_input_cat"><![CDATA[Category]]></string>
+    <string name="_bx_files_form_entry_input_cat_err"><![CDATA[Please select category]]></string>
+	<string name="_bx_files_form_entry_input_sys_desc"><![CDATA[Description]]></string>
+    <string name="_bx_files_form_entry_input_desc"><![CDATA[Description]]></string>
+	<string name="_bx_files_form_entry_input_sys_data"><![CDATA[File data]]></string>
+	<string name="_bx_files_form_entry_input_data"><![CDATA[File data]]></string>
+	<string name="_bx_files_form_entry_input_sys_delete_confirm"><![CDATA[Delete confirmation]]></string>
+	<string name="_bx_files_form_entry_input_delete_confirm"><![CDATA[I am sure I want to delete this file]]></string>
+	<string name="_bx_files_form_entry_input_delete_confirm_info"><![CDATA[This action can not be undone]]></string>
+	<string name="_bx_files_form_entry_input_delete_confirm_error"><![CDATA[Please check this checkbox if you really want to delete the file]]></string>
+	<string name="_bx_files_form_entry_input_sys_attachment"><![CDATA[File]]></string>
+        <string name="_bx_files_form_entry_input_attachment"><![CDATA[File]]></string>
+        <string name="_bx_files_form_entry_input_attachment_err"><![CDATA[File is essential. Please, upload a file.]]></string>
+	<string name="_bx_files_form_entry_input_sys_attachments"><![CDATA[Files]]></string>
+	<string name="_bx_files_form_entry_input_attachments"><![CDATA[Files]]></string>
+        <string name="_bx_files_form_entry_input_attachments_err"><![CDATA[File is essential. Please, upload some file(s).]]></string>    
+    <string name="_bx_files_form_entry_input_sys_allow_view_to"><![CDATA[Visibility]]></string>
+    <string name="_bx_files_form_entry_input_allow_view_to"><![CDATA[Visibility]]></string>
+    <string name="_bx_files_form_entry_input_picture_use_as_thumb"><![CDATA[Cover Image]]></string>
+    <string name="_bx_files_form_entry_input_sys_date_added"><![CDATA[Created]]></string>
+    <string name="_bx_files_form_entry_input_date_added"><![CDATA[Created]]></string>
+    <string name="_bx_files_form_entry_input_sys_date_changed"><![CDATA[Updated]]></string>
+    <string name="_bx_files_form_entry_input_date_changed"><![CDATA[Updated]]></string>
+	<string name="_bx_files_form_entry_input_pictures_upload"><![CDATA[Upload]]></string>
+	
+
+	<string name="_bx_files_acl_action_create_entry"><![CDATA[Create File]]></string>
+	<string name="_bx_files_acl_action_delete_entry"><![CDATA[Delete File]]></string>
+	<string name="_bx_files_acl_action_view_entry"><![CDATA[View File]]></string>
+	<string name="_bx_files_acl_action_edit_any_entry"><![CDATA[Edit Any File]]></string>
+
+	<string name="_bx_files_page_title_sys_create_entry"><![CDATA[Upload Files]]></string>
+	<string name="_bx_files_page_title_create_entry"><![CDATA[Upload Files]]></string>
+	<string name="_bx_files_page_block_title_create_entry"><![CDATA[Upload Files]]></string>
+	<string name="_bx_files_page_title_sys_edit_entry"><![CDATA[Edit]]></string>
+	<string name="_bx_files_page_title_edit_entry"><![CDATA[Edit]]></string>
+	<string name="_bx_files_page_block_title_edit_entry"><![CDATA[Edit]]></string>
+    <string name="_bx_files_page_title_sys_delete_entry"><![CDATA[Delete]]></string>
+    <string name="_bx_files_page_title_delete_entry"><![CDATA[Delete]]></string>
+    <string name="_bx_files_page_block_title_delete_entry"><![CDATA[Delete]]></string>
+	<string name="_bx_files_page_title_sys_view_entry"><![CDATA[View File]]></string>
+	<string name="_bx_files_page_title_view_entry"><![CDATA[{title}]]></string>
+	<string name="_bx_files_page_block_title_entry_text"><![CDATA[File Description]]></string>
+	<string name="_bx_files_page_title_browse"><![CDATA[Files]]></string>
+	<string name="_bx_files_page_title_search_results"><![CDATA[Files matching "{0}"]]></string>
+	<string name="_bx_files_page_title_browse_by_author"><![CDATA[Files of {display_name}]]></string>
+  <string name="_bx_files_page_title_browse_by_context"><![CDATA[Files in {display_name}]]></string>
+	<string name="_bx_files_page_title_browse_featured"><![CDATA[Featured Files]]></string>
+    <string name="_bx_files_page_title_browse_recent"><![CDATA[Latest Files]]></string>
+    <string name="_bx_files_page_title_browse_popular"><![CDATA[Popular Files]]></string>
+    <string name="_bx_files_page_title_browse_updated"><![CDATA[Updated Files]]></string>
+    <string name="_bx_files_page_title_sys_home"><![CDATA[Files Home]]></string>
+    <string name="_bx_files_page_title_home"><![CDATA[Files]]></string>
+    <string name="_bx_files_page_block_title_featured_entries_view_extended"><![CDATA[Featured Files]]></string>
+    <string name="_bx_files_page_block_title_recent_entries"><![CDATA[Latest Files (Gallery View)]]></string>
+    <string name="_bx_files_page_block_title_recent_entries_view_extended"><![CDATA[Latest Files]]></string>
+    <string name="_bx_files_page_block_title_entry_social_sharing"><![CDATA[Share]]></string>
+    <string name="_bx_files_page_block_title_entry_author"><![CDATA[Author]]></string>
+    <string name="_bx_files_page_block_title_entry_actions"><![CDATA[Actions]]></string>
+    <string name="_bx_files_page_block_title_sys_entry_context"><![CDATA[Posted in]]></string>
+    <string name="_bx_files_page_block_title_entry_context"><![CDATA[Posted in]]></string>
+    <string name="_bx_files_page_block_title_entry_comments"><![CDATA[Comments]]></string>
+    <string name="_bx_files_page_block_title_entry_comments_link"><![CDATA[Comments to <a href="{entry_link}">{title}</a>]]></string>
+    <string name="_bx_files_page_block_title_entry_location"><![CDATA[Location]]></string>
+    <string name="_bx_files_page_block_title_entry_attachments"><![CDATA[Attachments]]></string>
+    <string name="_bx_files_page_block_title_entry_all_actions"><![CDATA[All Actions]]></string>
+    <string name="_bx_files_page_title_sys_entries_popular"><![CDATA[Popular Files]]></string>
+    <string name="_bx_files_page_title_entries_popular"><![CDATA[Popular Files]]></string>
+    <string name="_bx_files_page_title_sys_entries_updated"><![CDATA[Updated Files]]></string>
+    <string name="_bx_files_page_title_entries_updated"><![CDATA[Updated Files]]></string>
+    <string name="_bx_files_page_block_title_popular_entries"><![CDATA[Popular Files]]></string>
+    <string name="_bx_files_page_block_title_popular_entries_view_extended"><![CDATA[Popular Files (Extended View)]]></string>
+    <string name="_bx_files_page_block_title_updated_entries"><![CDATA[Updated Files]]></string>
+    <string name="_bx_files_page_title_sys_view_entry_comments"><![CDATA[File Comments]]></string>
+    <string name="_bx_files_page_title_view_entry_comments"><![CDATA[Comments to {title}]]></string>
+    <string name="_bx_files_page_title_sys_entries_of_author"><![CDATA[Files of author]]></string>
+    <string name="_bx_files_page_title_entries_of_author"><![CDATA[Files by {display_name}]]></string>
+    <string name="_bx_files_page_title_sys_entries_in_context"><![CDATA[Files in context]]></string>
+    <string name="_bx_files_page_title_entries_in_context"><![CDATA[Files in {display_name}]]></string>
+    <string name="_bx_files_page_block_title_favorites_of_author"><![CDATA[Favorites by <a href="{profile_link}">{display_name}</a>]]></string>
+    <string name="_bx_files_page_block_title_sys_favorites_of_author"><![CDATA[Favorites of author]]></string>
+    <string name="_bx_files_page_block_title_entries_of_author"><![CDATA[Files by <a href="{profile_link}">{display_name}</a>]]></string>
+    <string name="_bx_files_page_block_title_sys_entries_of_author"><![CDATA[Files of author]]></string>
+    <string name="_bx_files_page_block_title_entries_in_context"><![CDATA[Files in <a href="{profile_link}">{display_name}</a>]]></string>
+    <string name="_bx_files_page_block_title_sys_entries_in_context"><![CDATA[Files in context]]></string>
+    <string name="_bx_files_page_block_title_entries_actions"><![CDATA[Files actions]]></string>
+    <string name="_bx_files_page_block_title_browse_cmts"><![CDATA[Files' Comments]]></string>
+	<string name="_bx_files_page_title_sys_manage"><![CDATA[Manage Own]]></string>
+	<string name="_bx_files_page_title_sys_manage_administration"><![CDATA[Manage All]]></string>
+	<string name="_bx_files_page_title_manage"><![CDATA[Manage]]></string>
+	<string name="_bx_files_page_block_title_system_manage"><![CDATA[Manage Own]]></string>
+	<string name="_bx_files_page_block_title_system_manage_administration"><![CDATA[Manage All]]></string>
+	<string name="_bx_files_page_block_title_manage"><![CDATA[Manage]]></string>    
+	<string name="_bx_files_page_block_title_popular_keywords"><![CDATA[Popular Hashtags]]></string>
+	<string name="_bx_files_page_block_title_cats"><![CDATA[Files Categories]]></string>
+	<string name="_bx_files_page_block_title_entry_info"><![CDATA[Info]]></string>
+	<string name="_bx_files_page_block_title_my_entries"><![CDATA[My Files]]></string>
+	<string name="_bx_files_page_block_title_entry_file_preview"><![CDATA[File Preview]]></string>
+	<string name="_bx_files_page_block_title_group_entries"><![CDATA[Files]]></string>
+	<string name="_bx_files_page_title_sys_entries_search"><![CDATA[Search]]></string>
+    <string name="_bx_files_page_title_entries_search"><![CDATA[Search]]></string>
+    <string name="_bx_files_page_block_title_search_form"><![CDATA[Search Form]]></string>
+    <string name="_bx_files_page_block_title_search_results"><![CDATA[Search Results]]></string>
+    <string name="_bx_files_page_block_title_search_form_cmts"><![CDATA[Comments Search Form]]></string>
+    <string name="_bx_files_page_block_title_search_results_cmts"><![CDATA[Comments Search Results]]></string>
+    <string name="_bx_files_page_block_title_sys_recent_entries_view_showcase"><![CDATA[Latest Files (Showcase View)]]></string>
+    <string name="_bx_files_page_block_title_recent_entries_view_showcase"><![CDATA[Latest Files]]></string>
+    <string name="_bx_files_page_block_title_sys_popular_entries_view_showcase"><![CDATA[Popular Files (Showcase View)]]></string>
+    <string name="_bx_files_page_block_title_popular_entries_view_showcase"><![CDATA[Popular Files]]></string>
+    <string name="_bx_files_page_block_title_sys_featured_entries_view_showcase"><![CDATA[Featured Files (Showcase View)]]></string>
+    <string name="_bx_files_page_block_title_featured_entries_view_showcase"><![CDATA[Featured Files]]></string>
+
+    <string name="_bx_files_menu_set_title_view_entry"><![CDATA[File Actions]]></string>
+    <string name="_bx_files_menu_title_view_entry"><![CDATA[File Actions]]></string>
+    <string name="_bx_files_menu_title_submenu"><![CDATA[Files Submenu]]></string>
+    <string name="_bx_files_menu_set_title_submenu"><![CDATA[Files Submenu]]></string>
+    <string name="_bx_files_menu_item_title_system_create_entry"><![CDATA[File]]></string>
+    <string name="_bx_files_menu_item_title_create_entry"><![CDATA[File]]></string>
+    <string name="_bx_files_menu_item_title_system_edit_entry"><![CDATA[Edit]]></string>
+    <string name="_bx_files_menu_item_title_edit_entry"><![CDATA[Edit]]></string>
+    <string name="_bx_files_menu_item_title_system_delete_entry"><![CDATA[Delete]]></string>
+    <string name="_bx_files_menu_item_title_delete_entry"><![CDATA[Delete]]></string>
+    <string name="_bx_files_menu_item_title_system_view_entry"><![CDATA[View File]]></string>
+    <string name="_bx_files_menu_item_title_system_entries_home"><![CDATA[Files]]></string>
+    <string name="_bx_files_menu_item_title_entries_home"><![CDATA[Files]]></string>
+    <string name="_bx_files_menu_item_title_system_entries_public"><![CDATA[Latest]]></string>
+    <string name="_bx_files_menu_item_title_entries_public"><![CDATA[Latest]]></string>
+    <string name="_bx_files_menu_item_title_system_entries_search"><![CDATA[Search]]></string>
+    <string name="_bx_files_menu_item_title_entries_search"><![CDATA[Search]]></string>
+    <string name="_bx_files_menu_item_title_system_entries_manage"><![CDATA[Manage]]></string>
+    <string name="_bx_files_menu_item_title_entries_manage"><![CDATA[Manage]]></string>
+    <string name="_bx_files_menu_item_title_system_entries_popular"><![CDATA[Popular]]></string>
+    <string name="_bx_files_menu_item_title_entries_popular"><![CDATA[Popular]]></string>
+    <string name="_bx_files_menu_title_view_entry_submenu"><![CDATA[View File Submenu]]></string>
+    <string name="_bx_files_menu_set_title_view_entry_submenu"><![CDATA[View File Submenu]]></string>
+    <string name="_bx_files_menu_item_title_view_entry_submenu_entry"><![CDATA[File]]></string>
+    <string name="_bx_files_menu_item_title_view_entry_submenu_comments"><![CDATA[Comments]]></string>
+    <string name="_bx_files_menu_item_title_system_view_entry_comments"><![CDATA[File Comments]]></string>
+    <string name="_bx_files_menu_item_title_system_view_entries_author"><![CDATA[Files]]></string>
+    <string name="_bx_files_menu_item_title_view_entries_author"><![CDATA[Files]]></string>
+    <string name="_bx_files_menu_item_title_system_view_entries_in_context"><![CDATA[Files]]></string>
+    <string name="_bx_files_menu_item_title_view_entries_in_context"><![CDATA[Files]]></string>
+    <string name="_bx_files_menu_title_entries_my"><![CDATA[My Files Action Menu]]></string>
+    <string name="_bx_files_menu_set_title_entries_my"><![CDATA[My Files Menu]]></string>
+	<string name="_bx_files_menu_item_title_system_manage_my_files"><![CDATA[My files]]></string>
+    <string name="_bx_files_menu_item_title_manage_my_files"><![CDATA[Files]]></string>
+    <string name="_bx_files_menu_set_title_manage_tools"><![CDATA[Manage Tools Submenu]]></string>
+    <string name="_bx_files_menu_title_manage_tools"><![CDATA[Manage Tools Submenu]]></string>
+    <string name="_bx_files_menu_item_title_system_manage_account"><![CDATA[Manage account]]></string>
+    <string name="_bx_files_menu_item_title_manage_account"><![CDATA[Manage account]]></string>
+	<string name="_bx_files_menu_item_title_system_admt_files"><![CDATA[Files]]></string>
+	<string name="_bx_files_menu_item_title_admt_files"><![CDATA[Files]]></string>
+	<string name="_bx_files_menu_item_title_manage_my"><![CDATA[My Files]]></string>
+	<string name="_bx_files_menu_item_title_manage_all"><![CDATA[All Files]]></string>
+	<string name="_bx_files_menu_item_title_system_download_file"><![CDATA[Download]]></string>
+	<string name="_bx_files_menu_item_title_download_file"><![CDATA[Download]]></string>
+
+	<string name="_bx_files_grid_filter_item_title_adm_select_one_filter1"><![CDATA[All Statuses]]></string>
+	<string name="_bx_files_grid_filter_item_title_adm_active"><![CDATA[Active]]></string>
+	<string name="_bx_files_grid_filter_item_title_adm_hidden"><![CDATA[Hidden]]></string>
+	<string name="_bx_files_grid_column_title_adm_active"><![CDATA[Active]]></string>
+    <string name="_bx_files_grid_column_title_adm_title"><![CDATA[Title]]></string>
+    <string name="_bx_files_grid_column_title_adm_added"><![CDATA[Added]]></string>
+    <string name="_bx_files_grid_column_title_adm_author"><![CDATA[Author]]></string>
+    <string name="_bx_files_grid_action_title_adm_edit"><![CDATA[Edit]]></string>
+    <string name="_bx_files_grid_action_title_adm_delete"><![CDATA[Delete]]></string>
+    <string name="_bx_files_grid_action_title_adm_more_actions"><![CDATA[More Actions]]></string>
+    <string name="_bx_files_grid_action_err_delete"><![CDATA[Cannot delete the selected file(s).]]></string>
+    <string name="_bx_files_grid_txt_account_manager"><![CDATA[Redirect to manage account.]]></string>
+
+    <string name="_bx_files_chart_growth"><![CDATA[Files: Growth]]></string>
+    <string name="_bx_files_chart_growth_speed"><![CDATA[Files: Growth Speed]]></string>
+
+    <string name="_bx_files_search_extended"><![CDATA[Files Search]]></string>
+    <string name="_bx_files_search_extended_cmts"><![CDATA[Files Comments Search]]></string>
+
+    <string name="_bx_files_pre_lists_cats"><![CDATA[File categories]]></string>
+    <string name="_bx_files_cat_documentation"><![CDATA[Documentation]]></string>
+    <string name="_bx_files_cat_presentation"><![CDATA[Presentation]]></string>
+    <string name="_bx_files_cat_report"><![CDATA[Report]]></string>
+    <string name="_bx_files_cat_proposal"><![CDATA[Proposal]]></string>
+    <string name="_bx_files_cat_list"><![CDATA[List]]></string>
+    <string name="_bx_files_cat_record"><![CDATA[Audio record]]></string>
+    <string name="_bx_files_cat_screencast"><![CDATA[Screencast]]></string>
+    <string name="_bx_files_cat_screenshot"><![CDATA[Screenshot]]></string>
+    <string name="_bx_files_cat_sketch"><![CDATA[Sketch]]></string>
+    <string name="_bx_files_cat_archive"><![CDATA[Archive]]></string>
+    <string name="_bx_files_cat_backup"><![CDATA[Backup]]></string>
+
+    <string name="_bx_files_txt_all_entries_by"><![CDATA[{0} files]]></string>
+    <string name="_bx_files_txt_all_entries_in"><![CDATA[<a href="{0}">All Files in {1} ({2})</a>]]></string>
+    <string name="_bx_files_txt_preview_not_available"><![CDATA[Preview isn't available, please download this file to view it]]></string>
+    <string name="_bx_files_txt_sample_single"><![CDATA[file]]></string>
+    <string name="_bx_files_txt_sample_single_with_article"><![CDATA[a file]]></string>
+    <string name="_bx_files_txt_sample_comment_single"><![CDATA[comment to file]]></string>
+    <string name="_bx_files_txt_sample_vote_single"><![CDATA[vote to file]]></string>
+    <string name="_bx_files_txt_sample_reaction_single"><![CDATA['{0}' reaction to file]]></string>
+    <string name="_bx_files_txt_sample_score_up_single"><![CDATA[score up vote to file]]></string>
+    <string name="_bx_files_txt_sample_score_down_single"><![CDATA[score down vote to file]]></string>
+
+    <string name="_bx_files_privacy_public"><![CDATA[Public]]></string>
+    <string name="_bx_files_privacy_participants"><![CDATA[Participants]]></string>
+</resources>

+ 51 - 0
modules/boonex/forum/updates/10.0.0_10.0.1/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.0',
+    'version_to' => '10.0.1',
+    'vendor' => 'BoonEx',
+
+    'compatible_with' => array(
+        '10.0.0-B2'
+    ),
+
+    /**
+     * '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.0_10.0.1/',
+    'home_uri' => 'forum_update_1000_1001',
+
+    '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' => 1,
+        'clear_db_cache' => 1,
+    ),
+
+    /**
+     * Category for language keys.
+     */
+    'language_category' => 'Discussions',
+
+    /**
+     * Files Section
+     */
+    'delete_files' => array(),
+);

+ 13 - 0
modules/boonex/forum/updates/10.0.0_10.0.1/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);
+    }
+}

+ 6 - 0
modules/boonex/forum/updates/10.0.0_10.0.1/install/langs/en.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources name="en" flag="gb" title="English">
+	<string_add name="_bx_forum_txt_sample_reaction_single"><![CDATA['{0}' reaction to discussion]]></string_add>
+
+	<string_del name="_bx_forum_x_date_by_x_replier"><![CDATA[{0} by {1}]]></string_del>
+</resources>

+ 5 - 0
modules/boonex/forum/updates/10.0.0_10.0.1/install/sql/enable.sql

@@ -0,0 +1,5 @@
+SET @sName = 'bx_forum';
+
+
+-- PAGES
+UPDATE `sys_pages_blocks` SET `designbox_id`='0' WHERE `object`='bx_forum_view_entry' AND `title`='_bx_forum_page_block_title_entry_comments' AND `designbox_id`='11';

+ 118 - 0
modules/boonex/forum/updates/10.0.0_10.0.1/source/classes/BxForumCmts.php

@@ -0,0 +1,118 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Forum Forum
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxForumCmts extends BxTemplCmts
+{
+	protected $MODULE;
+	protected $_oModule;
+
+	public function __construct($sSystem, $iId, $iInit = 1)
+    {
+    	$this->MODULE = 'bx_forum';
+    	$this->_oModule = BxDolModule::getInstance($this->MODULE);
+
+        parent::__construct($sSystem, $iId, $iInit, $this->_oModule->_oTemplate);
+
+        $this->setTableNameFiles('bx_forum_files');
+    }
+
+    public function registerTranscoders()
+    {
+        parent::registerTranscoders();
+
+        $aTranscoders = array(
+            $this->getTranscoderPreviewName()
+        );
+
+        BxDolTranscoderImage::registerHandlersArray($aTranscoders);
+    }
+
+    public function unregisterTranscoders()
+    {
+        parent::unregisterTranscoders();
+
+        $aTranscoders = array(
+            $this->getTranscoderPreviewName()
+        );
+
+        BxDolTranscoderImage::unregisterHandlersArray($aTranscoders);
+        BxDolTranscoderImage::cleanupObjectsArray($aTranscoders);
+    }
+
+	public function isPostReplyAllowed($isPerformAction = false)
+    {
+    	$aContentInfo = $this->_oModule->_oDb->getContentInfoById($this->_iId);
+        if(!$aContentInfo || (int)$aContentInfo[$this->_oModule->_oConfig->CNF['FIELD_LOCK']] == 1)
+            return false;
+
+    	return parent::isPostReplyAllowed($isPerformAction);
+    }
+
+    public function onPostAfter($iId)
+    {
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
+        if(!parent::onPostAfter($iId))
+            return false;
+
+        if(getParam($CNF['PARAM_AUTOSUBSCRIBE_REPLIED']) == 'on')
+            BxDolConnection::getObjectInstance($CNF['OBJECT_CONNECTION_SUBSCRIBERS'])->actionAdd((int)$this->getId(), (int)$this->_getAuthorId());
+    }
+
+    public function getCommentsBlock($aBp = array(), $aDp = array())
+    {
+        $mixedBlock = parent::getCommentsBlock($aBp, $aDp);
+        if (is_array($mixedBlock) && isset($mixedBlock['title']))
+            $mixedBlock['title'] = _t('_bx_forum_page_block_title_entry_comments', $this->getCommentsCount());
+        return $mixedBlock;
+    }
+
+    public function getComment($mixedCmt, $aBp = array(), $aDp = array())
+    {
+        return parent::getComment($mixedCmt, $aBp, array_merge($aDp, array(
+            'class_comment' => 'bx-def-box bx-def-padding bx-def-round-corners bx-def-color-bg-box'
+        )));
+    }
+
+    protected function _getEmpty($aDp = array())
+    {
+        return parent::_getEmpty(array_merge($aDp, array(
+            'class' => 'bx-def-box bx-def-padding bx-def-round-corners bx-def-color-bg-box'
+        )));
+    }
+
+    protected function _getFormBox($sType, $aBp, $aDp)
+    {
+        if(!isset($aBp['parent_id']) || (int)$aBp['parent_id'] == 0)
+            $aDp = array_merge($aDp, array(
+                'class' => 'bx-def-box bx-def-padding bx-def-round-corners bx-def-color-bg-box'
+            ));
+
+        return parent::_getFormBox($sType, $aBp, $aDp);
+    }
+
+    protected function _getFormObject($sAction = BX_CMT_ACTION_POST)
+    {
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
+        $oResult = parent::_getFormObject($sAction);
+        if(!isset($oResult->aInputs['cmt_image']))
+            return $oResult;
+
+        $oResult->aInputs['cmt_image']['storage_object'] = $CNF['OBJECT_STORAGE_CMTS']; 
+        $oResult->aInputs['cmt_image']['images_transcoder'] = $CNF['OBJECT_IMAGES_TRANSCODER_PREVIEW_CMTS'];
+        $oResult->aInputs['cmt_image']['upload_buttons_titles'] = array('Simple' => 'paperclip');
+
+        return $oResult;
+    }
+}
+
+/** @} */

+ 192 - 0
modules/boonex/forum/updates/10.0.0_10.0.1/source/classes/BxForumConfig.php

@@ -0,0 +1,192 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Forum Forum
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxForumConfig extends BxBaseModTextConfig
+{
+    function __construct($aModule)
+    {
+        parent::__construct($aModule);
+
+        $aMenuItems2Methods = array (
+            'subscribe-discussion' => 'checkAllowedSubscribe',
+            'unsubscribe-discussion' => 'checkAllowedUnsubscribe',
+            'stick-discussion' => 'checkAllowedStickAnyEntry',
+            'unstick-discussion' => 'checkAllowedUnstickAnyEntry',
+            'lock-discussion' => 'checkAllowedLockAnyEntry',
+            'unlock-discussion' => 'checkAllowedUnlockAnyEntry',
+            'hide-discussion' => 'checkAllowedHideAnyEntry',
+            'unhide-discussion' => 'checkAllowedUnhideAnyEntry',
+            'edit-discussion' => 'checkAllowedEdit',
+            'delete-discussion' => 'checkAllowedDelete'
+        );
+
+        $this->CNF = array (
+
+            // module icon
+            'ICON' => 'far comments col-blue2',
+
+            // database tables
+            'TABLE_ENTRIES' => $aModule['db_prefix'] . 'discussions',
+        	'TABLE_ENTRIES_FULLTEXT' => 'title_text',
+
+            // database fields
+            'FIELD_ID' => 'id',
+            'FIELD_AUTHOR' => 'author',
+            'FIELD_ADDED' => 'added',
+            'FIELD_CHANGED' => 'changed',
+            'FIELD_TITLE' => 'title',
+            'FIELD_TEXT' => 'text',
+            'FIELD_TEXT_ID' => 'discussion-text',
+            'FIELD_TEXT_COMMENTS' => 'text_comments',
+            'FIELD_CATEGORY' => 'cat',
+            'FIELD_LR_AUTHOR' => 'lr_profile_id',
+            'FIELD_LR_ADDED' => 'lr_timestamp',
+            'FIELD_LR_COMMENT_ID' => 'lr_comment_id',
+            'FIELD_ALLOW_VIEW_TO' => 'allow_view_to',
+            'FIELD_PHOTO' => 'attachments',
+            'FIELD_THUMB' => 'thumb',
+            'FIELD_VIEWS' => 'views',
+            'FIELD_VOTES' => 'votes',
+            'FIELD_COMMENTS' => 'comments',
+            'FIELD_STICK' => 'stick',
+            'FIELD_LOCK' => 'lock',
+            'FIELD_STATUS' => 'status',
+            'FIELD_STATUS_ADMIN' => 'status_admin',
+            'FIELD_LABELS' => 'labels',
+            'FIELD_ANONYMOUS' => 'anonymous',
+            'FIELDS_WITH_KEYWORDS' => 'auto', // can be 'auto', array of fields or comma separated string of field names, works only when OBJECT_METATAGS is specified
+
+            // page URIs
+            'URI_VIEW_ENTRY' => 'view-discussion',
+            'URI_AUTHOR_ENTRIES' => 'discussions-author',
+            'URI_ENTRIES_BY_CONTEXT' => 'discussions-context',
+            'URI_CATEGORY_ENTRIES' => 'discussions-category',
+            'URI_KEYWORD_ENTRIES' => 'discussions-keyword',
+            'URI_ADD_ENTRY' => 'create-discussion',
+            'URI_EDIT_ENTRY' => 'edit-discussion',
+            'URI_MANAGE_COMMON' => 'discussions-manage',
+
+            'URL_HOME' => 'page.php?i=discussions-home',
+            'URL_UPDATED' => 'page.php?i=discussions-updated',
+            'URL_NEW' => 'page.php?i=discussions-new',
+            'URL_TOP' => 'page.php?i=discussions-top',
+            'URL_POPULAR' => 'page.php?i=discussions-popular',
+            'URL_MANAGE_COMMON' => 'page.php?i=discussions-manage',
+            'URL_MANAGE_ADMINISTRATION' => 'page.php?i=discussions-administration',
+
+            // some params
+            'PARAM_CHARS_SUMMARY' => 'bx_forum_summary_chars',
+            'PARAM_CHARS_SUMMARY_PLAIN' => 'bx_forum_plain_summary_chars',
+            'PARAM_NUM_RSS' => 'bx_forum_rss_num',
+            'PARAM_SEARCHABLE_FIELDS' => 'bx_forum_searchable_fields',
+            'PARAM_AUTOSUBSCRIBE_CREATED' => 'bx_forum_autosubscribe_created',
+            'PARAM_AUTOSUBSCRIBE_REPLIED' => 'bx_forum_autosubscribe_replied',           
+
+            // objects
+            'OBJECT_GRID' => 'bx_forum',
+            'OBJECT_GRID_FAVORITE' => 'bx_forum_favorite',
+            'OBJECT_GRID_FEATURE' => 'bx_forum_feature',
+            'OBJECT_GRID_ADMINISTRATION' => 'bx_forum_administration',
+            'OBJECT_GRID_COMMON' => 'bx_forum_common',
+            'OBJECT_GRID_CATEGORIES' => 'bx_forum_categories',
+            'OBJECT_STORAGE' => 'bx_forum_files',
+            'OBJECT_STORAGE_CMTS' => 'bx_forum_files_cmts',
+            'OBJECT_IMAGES_TRANSCODER_PREVIEW' => 'bx_forum_preview',
+            'OBJECT_IMAGES_TRANSCODER_PREVIEW_CMTS' => 'bx_forum_preview_cmts',
+            'OBJECT_IMAGES_TRANSCODER_GALLERY' => 'bx_forum_gallery',
+            'OBJECT_IMAGES_TRANSCODER_COVER' => 'bx_forum_cover',
+            'OBJECT_VIDEOS_TRANSCODERS' => array(),
+            'OBJECT_REPORTS' => 'bx_forum',
+            'OBJECT_VIEWS' => 'bx_forum',
+            'OBJECT_VOTES' => 'bx_forum',
+            'OBJECT_REACTIONS' => 'bx_forum_reactions',
+            'OBJECT_SCORES' => 'bx_forum',
+            'OBJECT_FAVORITES' => 'bx_forum',
+            'OBJECT_FEATURED' => 'bx_forum',
+            'OBJECT_CATEGORY' => 'bx_forum_cats',
+            'OBJECT_COMMENTS' => 'bx_forum',
+            'OBJECT_METATAGS' => 'bx_forum',
+            'OBJECT_PRIVACY_VIEW' => 'bx_forum_allow_view_to',
+            'OBJECT_FORM_ENTRY' => 'bx_forum',
+            'OBJECT_FORM_ENTRY_DISPLAY_VIEW' => 'bx_forum_entry_view',
+            'OBJECT_FORM_ENTRY_DISPLAY_ADD' => 'bx_forum_entry_add',
+            'OBJECT_FORM_ENTRY_DISPLAY_EDIT' => 'bx_forum_entry_edit',
+            'OBJECT_FORM_ENTRY_DISPLAY_DELETE' => 'bx_forum_entry_delete',
+            'OBJECT_FORM_SEARCH' => 'bx_forum_search',
+            'OBJECT_FORM_SEARCH_DISPLAY_FULL' => 'bx_forum_search_full',
+            'OBJECT_MENU_ACTIONS_VIEW_ENTRY' => 'bx_forum_view', // actions menu on view entry page
+            'OBJECT_MENU_ACTIONS_VIEW_ENTRY_MORE' => 'bx_forum_view_more', // more actions menu on view entry page
+            'OBJECT_MENU_ACTIONS_VIEW_ENTRY_ALL' => 'bx_forum_view_actions', // all actions menu on view entry page
+            'OBJECT_MENU_ACTIONS_MY_ENTRIES' => 'bx_forum_my', // actions menu on my entries page
+            'OBJECT_MENU_SNIPPET_META' => 'bx_forum_snippet_meta_main', // menu for 'main' snippet meta info
+            'OBJECT_MENU_SNIPPET_META_MAIN' => 'bx_forum_snippet_meta_main', // menu for 'main' snippet meta info
+            'OBJECT_MENU_SNIPPET_META_COUNTERS' => 'bx_forum_snippet_meta_counters', // menu for 'counters' snippet meta info
+            'OBJECT_MENU_SNIPPET_META_REPLY' => 'bx_forum_snippet_meta_reply', // menu for 'reply' snippet meta info
+            'OBJECT_MENU_MANAGE_TOOLS' => 'bx_forum_menu_manage_tools', //manage menu in content administration tools
+            'OBJECT_MENU_SUBMENU' => 'bx_forum_submenu', // main module submenu
+            'OBJECT_MENU_SUBMENU_VIEW_ENTRY' => '', // view entry submenu
+            'OBJECT_MENU_SUBMENU_VIEW_ENTRY_MAIN_SELECTION' => 'forum', // first item in view entry submenu from main module submenu
+            'OBJECT_UPLOADERS' => array('sys_simple', 'sys_html5'),
+            'OBJECT_CONNECTION_SUBSCRIBERS' => 'bx_forum_subscribers',
+
+            // menu items which visibility depends on custom visibility checking
+            'MENU_ITEM_TO_METHOD' => array (
+                'bx_forum_view' => $aMenuItems2Methods,
+        		'bx_forum_view_more' => $aMenuItems2Methods,
+            ),
+
+            // some language keys
+            'T' => array (
+                'txt_sample_single' => '_bx_forum_txt_sample_single',
+            	'txt_sample_single_with_article' => '_bx_forum_txt_sample_single_with_article',
+            	'txt_sample_comment_single' => '_bx_forum_txt_sample_comment_single',
+            	'txt_sample_vote_single' => '_bx_forum_txt_sample_vote_single',
+                'txt_sample_reaction_single' => '_bx_forum_txt_sample_reaction_single',
+                'txt_sample_score_up_single' => '_bx_forum_txt_sample_score_up_single',
+                'txt_sample_score_down_single' => '_bx_forum_txt_sample_score_down_single',
+            	'form_field_author' => '_bx_forum_form_entry_input_author',
+            	'grid_action_err_delete' => '_bx_forum_grid_action_err_delete',
+            	'grid_txt_account_manager' => '_bx_forum_grid_txt_account_manager',
+            	'filter_item_active' => '_bx_forum_grid_filter_item_title_adm_active',
+            	'filter_item_hidden' => '_bx_forum_grid_filter_item_title_adm_hidden',
+            	'filter_item_select_one_filter1' => '_bx_forum_grid_filter_item_title_adm_select_one_filter1',
+            	'menu_item_manage_my' => '_bx_forum_menu_item_title_manage_my',
+            	'menu_item_manage_all' => '_bx_forum_menu_item_title_manage_all',
+                'txt_all_entries_in' => '_bx_forum_txt_all_entries_in',
+            	'txt_all_entries_by_author' => '_bx_forum_page_title_browse_by_author',
+                'txt_all_entries_by_context' => '_bx_forum_page_title_browse_by_context',
+            	'txt_pict_use_as_thumb' => '_bx_forum_form_entry_input_picture_use_as_thumb'
+            ),
+        );
+
+        $this->_aJsClasses = array(
+        	'main' => 'BxForumMain',
+        	'entry' => 'BxForumEntry',
+        	'manage_tools' => 'BxForumManageTools',
+        	'studio' => 'BxForumStudio'
+        );
+
+        $this->_aJsObjects = array(
+        	'main' => 'oBxForumMain',
+        	'entry' => 'oBxForumEntry',
+        	'manage_tools' => 'oBxForumManageTools',
+        	'studio' => 'oBxForumStudio'
+        );
+
+        $this->_aGridObjects = array(
+        	'common' => $this->CNF['OBJECT_GRID_COMMON'],
+        	'administration' => $this->CNF['OBJECT_GRID_ADMINISTRATION'],
+        	
+        );
+    }
+}
+
+/** @} */

+ 293 - 0
modules/boonex/forum/updates/10.0.0_10.0.1/source/classes/BxForumGrid.php

@@ -0,0 +1,293 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Forum Forum
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+require_once(BX_DIRECTORY_PATH_INC . "design.inc.php");
+
+class BxForumGrid extends BxTemplGrid
+{
+    protected $_oModule;
+    protected $_sDefaultSource; 
+
+    public function __construct ($aOptions, $oTemplate = false)
+    {
+        $this->_oModule = BxDolModule::getInstance('bx_forum');
+
+        parent::__construct ($aOptions, $oTemplate);
+
+        $this->_sDefaultSortingOrder = 'DESC';
+        $this->_sDefaultSource = $this->_aOptions['source'];
+    }
+
+    public function setBrowseParams($aParams)
+    {
+        parent::setBrowseParams($aParams);
+
+    	$sField = 'added';
+    	if(!empty($this->_aBrowseParams['type']))
+	    	switch($this->_aBrowseParams['type']) {
+	    		case 'new':
+                case 'index':
+	    		case 'author':
+                case 'favorite':
+	    		case 'category':
+	                $sField = 'added';
+	                break;
+
+                case 'featured':
+					$sField = 'featured';
+	                break;
+
+				case 'updated':
+					$sField = 'changed';
+	                break;
+
+				case 'latest':
+					$sField = 'lr_timestamp';
+	                break;
+
+				case 'top':
+					$sField = 'comments';
+	                break;
+
+	            case 'popular':
+	            	$sField = 'views';
+	                break;
+	    	}
+
+		$this->_aOptions['field_order'] = $sField;
+		$this->_aOptions['paginate_per_page'] = !empty($this->_aBrowseParams['per_page']) ? (int)$this->_aBrowseParams['per_page'] : (int)$this->_oModule->_oDb->getParam('bx_forum_per_page_browse');
+    }
+
+    public function getCode ($isDisplayHeader = true)
+    {
+        $sCode = parent::getCode($isDisplayHeader);
+        if(empty($sCode))
+            return '';
+
+    	return $this->_oModule->_oTemplate->parseHtmlByName('units.html', array(
+            'code' => $sCode,
+            'js_code' => $this->_oModule->_oTemplate->getJsCode('main')
+        ));
+    }
+
+    protected function _getActionAdd ($sType, $sKey, $a, $isSmall = false, $isDisabled = false, $aRow = array())
+    {
+        if($this->_oModule->checkAllowedAdd() !== CHECK_ACTION_RESULT_ALLOWED)
+            return '';
+
+        $sUrl = BX_DOL_URL_ROOT . BxDolPermalinks::getInstance()->permalink('page.php?i=' . $this->_oModule->_oConfig->CNF['URI_ADD_ENTRY']);
+
+        unset($a['attr']['bx_grid_action_independent']);
+        $a['attr'] = array_merge($a['attr'], array(
+    		"onclick" => "window.open('" . $sUrl . "','_self');"
+    	));
+
+        return parent::_getActionDefault ($sType, $sKey, $a, $isSmall, $isDisabled, $aRow);
+    }
+
+    protected function _getRowHead ()
+    {
+    	return array();
+    }
+
+    protected function _getCellDefault ($mixedValue, $sKey, $aField, $aRow)
+    {
+        $aField['attr_cell']['class'] = 'bx-grid-table-cell-' . $sKey;
+
+        return parent::_getCellDefault($mixedValue, $sKey, $aField, $aRow);
+    }
+
+    protected function _getCellAuthor($mixedValue, $sKey, $aField, $aRow)
+    {
+    	$mixedValue = $this->_oModule->_oTemplate->getEntryAuthor($aRow);
+
+        return self::_getCellDefault($mixedValue, $sKey, $aField, $aRow);
+    }
+
+    protected function _getCellText($mixedValue, $sKey, $aField, $aRow)
+    {
+        $mixedValue = $this->_oModule->_oTemplate->getEntryPreview($aRow);
+
+        return self::_getCellDefault($mixedValue, $sKey, $aField, $aRow);
+    }
+
+    protected function _addJsCss()
+    {
+        parent::_addJsCss();
+
+        $this->_oModule->_oTemplate->addJs(array('main.js'));
+        $this->_oModule->_oTemplate->addCss(array('main.css', 'main-media-phone.css', 'main-media-tablet.css', 'main-media-desktop.css'));
+    }
+
+    protected function _getDataSql($sFilter, $sOrderField, $sOrderDir, $iStart, $iPerPage)
+    {
+    	$sJoinClause = $sWhereClause = '';
+
+    	//--- Check status
+    	$sWhereClause .= " AND `" . $this->_oModule->_oConfig->CNF['FIELD_STATUS'] . "`='active'";
+    	$sWhereClause .= " AND `" . $this->_oModule->_oConfig->CNF['FIELD_STATUS_ADMIN'] . "`='active'";
+
+    	//--- Check privacy
+    	$iAuthorId = 0;
+    	if(!empty($this->_aBrowseParams['author'])) {
+    		$oProfileAuthor = BxDolProfile::getInstance((int)$this->_aBrowseParams['author']);
+    		if($oProfileAuthor)
+    			$iAuthorId = $oProfileAuthor->id();
+    	}
+
+		$sPrivacy = $this->_oModule->_oConfig->CNF['OBJECT_PRIVACY_VIEW'];
+		$oPrivacy = BxDolPrivacy::getObjectInstance($sPrivacy);
+		$aCondition = $oPrivacy ? $oPrivacy->getContentPublicAsSQLPart($iAuthorId) : array();
+		if(isset($aCondition['join']))
+			$sJoinClause .= $aCondition['join'];
+		if(isset($aCondition['where']))
+			$sWhereClause .= $aCondition['where'];
+
+		//--- Check browse params
+        if(!empty($this->_aBrowseParams['join']) && is_array($this->_aBrowseParams['join'])) {
+			$sJoinClauseBrowse = $this->_getSqlJoinGroup($this->_aBrowseParams['join']);
+			if(!empty($sJoinClauseBrowse))
+				$sJoinClause .= " " . $sJoinClauseBrowse;
+		}
+
+		if(!empty($this->_aBrowseParams['where']) && is_array($this->_aBrowseParams['where'])) {
+			$sWhereClauseBrowse = $this->_getSqlWhereFromGroup($this->_aBrowseParams['where']);
+			if(!empty($sWhereClauseBrowse))
+				$sWhereClause .= " AND " . $sWhereClauseBrowse;
+		}
+
+		$this->_aOptions['source'] = sprintf($this->_sDefaultSource, $sJoinClause, $sWhereClause);
+		return parent::_getDataSql($sFilter, $sOrderField, $sOrderDir, $iStart, $iPerPage);
+    }
+
+    protected function _getDataSqlOrderClause($sOrderByFilter, $sOrderField, $sOrderDir, $bFieldsOnly = false)
+    {
+    	$sOrder = parent::_getDataSqlOrderClause($sOrderByFilter, $sOrderField, $sOrderDir, true);
+
+    	return " ORDER BY `" . $this->_oModule->_oConfig->CNF['FIELD_STICK'] . "` DESC, " . $sOrder;
+    }
+
+    protected function _getSqlJoinGroup($aGrp)
+    {
+        if(!isset($aGrp['grp']) || (bool)$aGrp['grp'] !== true)
+            return $this->_getSqlJoinCondition($aGrp);
+
+        $sResult = "";
+        if(empty($aGrp['cnds']) || !is_array($aGrp['cnds']))
+            return $sResult;
+
+        $sOprGrp = " ";
+        foreach($aGrp['cnds'] as $aCnd) {
+            $sResultCnd = $this->_getSqlJoinCondition($aCnd);
+            if(!empty($sResultCnd))
+                $sResult .= $sOprGrp . $sResultCnd;
+        }
+
+        return trim($sResult, $sOprGrp);
+    }
+
+    protected function _getSqlJoinCondition($aCnd)
+    {
+    	$sResult = "";
+    	if(!isset($aCnd['tp'], $aCnd['tbl1'], $aCnd['fld1'], $aCnd['fld2']))
+            return $sResult;
+
+        $sField1 = "`" . $aCnd['tbl1'] . "`.`" . $aCnd['fld1'] . "`";
+
+        $sField2 = "`" . $aCnd['fld2'] . "`";
+        if(!empty($aCnd['tbl2']))
+            $sField2 = "`" . $aCnd['tbl2'] . "`." . $sField2;
+
+        return $aCnd['tp'] . " JOIN `" . $aCnd['tbl1'] . "` ON (" . $sField1 . " = " . $sField2 . ")";
+    }
+
+    protected function _getSqlWhereFromGroup($aGrp)
+    {
+        if(!isset($aGrp['grp']) || (bool)$aGrp['grp'] !== true)
+            return $this->_getSqlWhereFromCondition($aGrp);
+
+        $sResult = "";
+        if(!isset($aGrp['opr'], $aGrp['cnds']) || empty($aGrp['cnds']) || !is_array($aGrp['cnds']))
+            return $sResult;
+
+        $sOprGrp = " " . $aGrp['opr'] . " ";
+        foreach($aGrp['cnds'] as $aCnd) {
+            $sMethod = '_getSqlWhereFrom' . (isset($aGrp['grp']) && (bool)$aGrp['grp'] === true ? 'Group' : 'Condition');
+            $sResultCnd = $this->$sMethod($aCnd);
+            if(!empty($sResultCnd))
+                $sResult .= $sOprGrp . $sResultCnd;
+        }
+
+        $sResult = trim($sResult, $sOprGrp);
+        if(!empty($sResult))
+            $sResult = "(" . $sResult . ")";
+
+    	return $sResult;
+    }
+
+    protected function _getSqlWhereFromCondition($aCnd)
+    {
+        $sResult = "";
+        if(!isset($aCnd['fld'], $aCnd['val'], $aCnd['opr']))
+            return $sResult;
+
+        $sMethod = '_getSqlWhereFromCondition' . bx_gen_method_name($aCnd['fld']);
+        if(method_exists($this, $sMethod)) {
+            $mixedResult = $this->$sMethod($aCnd);
+            if(is_array($mixedResult) && isset($mixedResult['fld'], $mixedResult['val'], $mixedResult['opr']))
+                $aCnd = $mixedResult;
+            else
+                return $mixedResult;
+        }
+        
+        $sField = "`" . $aCnd['fld'] . "`";
+        if(!empty($aCnd['tbl']))
+            $sField = "`" . $aCnd['tbl'] . "`." . $sField;
+
+        switch($aCnd['opr']) {
+            case 'IN':
+                if(empty($aCnd['val']) || !is_array($aCnd['val']))
+                    break;
+
+                $sResult .= $sField . " IN (" . $this->_oModule->_oDb->implode_escape($aCnd['val']) . ")";
+                break;
+
+            case 'LIKE':
+                $sResult .= $sField . " LIKE " . $this->_oModule->_oDb->escape('%' . $aCnd['val'] . '%');
+                break;
+
+            default:
+                $sResult .= $sField . " " . $aCnd['opr'] . " " . $this->_oModule->_oDb->escape($aCnd['val']);
+        }
+
+        return $sResult;
+    }
+
+    protected function _getSqlWhereFromConditionAuthorComment($aCnd)
+    {
+        $aEntriesIds = $this->_oModule->_oDb->getComments(array('type' => 'entries_author_search', 'author' => $aCnd['val']));
+        if(!empty($aEntriesIds) && is_array($aEntriesIds))
+            return array('fld' => 'id', 'val' => $aEntriesIds, 'opr' => 'IN');
+
+        return '';
+    }
+
+    protected function _getSqlWhereFromConditionKeywordComment($aCnd)
+    {
+        $aEntriesIds = $this->_oModule->_oDb->getComments(array('type' => 'entries_keyword_search', 'keyword' => $aCnd['val']));
+        if(!empty($aEntriesIds) && is_array($aEntriesIds))
+            return array('fld' => 'id', 'val' => $aEntriesIds, 'opr' => 'IN');
+
+        return '';
+    }
+}
+
+/** @} */

+ 100 - 0
modules/boonex/forum/updates/10.0.0_10.0.1/source/classes/BxForumMenuSnippetMeta.php

@@ -0,0 +1,100 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Forum Forum
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxForumMenuSnippetMeta extends BxBaseModTextMenuSnippetMeta
+{
+    public function __construct($aObject, $oTemplate = false)
+    {
+        $this->_sModule = 'bx_forum';
+
+        parent::__construct($aObject, $oTemplate);
+    }
+
+    protected function _getMenuItemViews($aItem)
+    {
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
+        if(empty($CNF['FIELD_VIEWS']) || empty($CNF['FIELD_VIEWS']) || (empty($this->_aContentInfo[$CNF['FIELD_VIEWS']]) && !$this->_bShowZeros))
+            return false;
+
+        $oViews = BxDolView::getObjectInstance($CNF['OBJECT_VIEWS'], $this->_aContentInfo[$CNF['FIELD_ID']]);
+        if(!$oViews || !$oViews->isEnabled())
+            return false;
+
+        return $this->getUnitMetaItemCustom($oViews->getElementInline(array('show_counter' => true)));
+    }
+
+    protected function _getMenuItemVotes($aItem)
+    {
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
+        if(empty($CNF['OBJECT_VOTES']) || empty($CNF['FIELD_VOTES']) || (empty($this->_aContentInfo[$CNF['FIELD_VOTES']]) && !$this->_bShowZeros))
+            return false;
+
+        $oVotes = BxDolVote::getObjectInstance($CNF['OBJECT_VOTES'], $this->_aContentInfo[$CNF['FIELD_ID']]);
+        if(!$oVotes || !$oVotes->isEnabled())
+            return false;
+
+        return $this->getUnitMetaItemCustom($oVotes->getElementInline(array('show_counter' => true)));
+    }
+
+    protected function _getMenuItemComments($aItem)
+    {
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
+        if(empty($CNF['OBJECT_COMMENTS']) || empty($CNF['FIELD_COMMENTS']) || (empty($this->_aContentInfo[$CNF['FIELD_COMMENTS']]) && !$this->_bShowZeros))
+            return false;
+
+        $oComments = BxDolCmts::getObjectInstance($CNF['OBJECT_COMMENTS'], $this->_aContentInfo[$CNF['FIELD_ID']]);
+        if(!$oComments || !$oComments->isEnabled())
+            return false;
+
+        return $this->getUnitMetaItemCustom($oComments->getElementInline(array('show_counter' => true)));
+    }
+
+    protected function _getMenuItemReplyAuthor($aItem)
+    {
+        $CNF = &$this->_oModule->_oConfig->CNF;
+        if(empty($this->_aContentInfo[$CNF['FIELD_LR_COMMENT_ID']]))
+            return '';
+
+        $oProfile = BxDolProfile::getInstanceMagic($this->_aContentInfo[$CNF['FIELD_LR_AUTHOR']]);
+        return $this->getUnitMetaItemCustom($oProfile->getUnit(0, array('template' => array(
+            'name' => 'unit',
+            'size' => 'icon'
+        ))));
+    }
+
+    protected function _getMenuItemReplyDate($aItem)
+    {
+        $CNF = &$this->_oModule->_oConfig->CNF;
+        if(empty($this->_aContentInfo[$CNF['FIELD_LR_COMMENT_ID']]))
+            return '';
+
+        return $this->getUnitMetaItemText(bx_time_js($this->_aContentInfo[$CNF['FIELD_LR_ADDED']], BX_FORMAT_DATE));
+    }
+
+    protected function _getMenuItemReplyText($aItem)
+    {
+        $CNF = &$this->_oModule->_oConfig->CNF;
+        if(empty($this->_aContentInfo[$CNF['FIELD_LR_COMMENT_ID']]))
+            return '';
+
+        $iComment = $this->_aContentInfo[$CNF['FIELD_LR_COMMENT_ID']];
+        $aComment = BxDolCmts::getObjectInstance($CNF['OBJECT_COMMENTS'], $this->_aContentInfo[$CNF['FIELD_ID']])->getCommentRow($iComment);
+        if(empty($aComment) || !is_array($aComment))
+            return '';
+
+        return $this->getUnitMetaItemText(strmaxtextlen($aComment['cmt_text'], 100), array('class' => $this->_sModule . '-gpm-reply-text'));
+    }
+}
+
+/** @} */

+ 909 - 0
modules/boonex/forum/updates/10.0.0_10.0.1/source/classes/BxForumModule.php

@@ -0,0 +1,909 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Forum Forum
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxForumModule extends BxBaseModTextModule
+{
+    function __construct(&$aModule)
+    {
+        parent::__construct($aModule);
+    }
+
+    public function sortParticipants ($aParticipants, $iProfileIdLastComment, $iProfileIdAuthor, $iProfileIdCurrent = 0)
+    {
+        if (!$iProfileIdCurrent)
+            $iProfileIdCurrent = bx_get_logged_profile_id();
+
+        $aMoveUp = array($iProfileIdCurrent, $iProfileIdLastComment, $iProfileIdAuthor);
+
+        asort($aParticipants, SORT_NUMERIC);
+
+        foreach ($aMoveUp as $iProfileId) {
+            if (!isset($aParticipants[$iProfileId]))
+                continue;
+
+            $a = array($iProfileId => $aParticipants[$iProfileId]);
+            unset($aParticipants[$iProfileId]);
+            $aParticipants = $a + $aParticipants;
+        }
+
+        return $aParticipants;
+    }
+
+    /**
+     * Action methods
+     */
+    public function actionUpdateStatus($sAction = '', $iContentId = 0)
+    {
+    	if(empty($sAction) && bx_get('action') !== false)
+   			$sAction = bx_process_input(bx_get('action'));
+
+		if(empty($iContentId) && bx_get('id') !== false)
+    		$iContentId = (int)bx_get('id');
+
+    	$aContentInfo = $this->_oDb->getContentInfoById($iContentId);
+        if(empty($aContentInfo) || !is_array($aContentInfo))
+			return echoJson(array('code' => 1, 'message' => _t('_bx_forum_err_not_found')));
+
+		$sMethodCheck = 'checkAllowed' . bx_gen_method_name($sAction) . 'AnyEntry';
+		$sResult = $this->$sMethodCheck($aContentInfo);
+        if($sResult !== CHECK_ACTION_RESULT_ALLOWED)
+        	return echoJson(array('code' => 2, 'message' => $sResult));
+
+        if(!$this->_oDb->updateStatus($sAction, $aContentInfo))
+        	return echoJson(array('code' => 3, 'message' => _t('_error occured')));
+
+    	echoJson(array('code' => 0, 'id' => $iContentId, 'reload' => 1));
+    }
+
+    public function actionAjaxGetAuthors()
+    {
+        $aResult = BxDolService::call('system', 'profiles_search', array(bx_get('term')), 'TemplServiceProfiles');
+
+        header('Content-Type:text/javascript; charset=utf-8');
+        echo json_encode($aResult);
+    }
+
+    /**
+     * Service methods
+     */
+    /**
+     * @page service Service Calls
+     * @section bx_forum Discussions
+     * @subsection bx_forum-other Other
+     * @subsubsection bx_forum-get_searchable_fields get_searchable_fields
+     * 
+     * @code bx_srv('bx_forum', 'get_searchable_fields', [...]); @endcode
+     * 
+     * Get searchable fields for Studio settings.
+     * 
+     * @return an array with key-value pairs to be used in settings dropdown field.
+     * 
+     * @see BxForumModule::serviceGetSearchableFields
+     */
+    /** 
+     * @ref bx_forum-get_searchable_fields "get_searchable_fields"
+     */
+    public function serviceGetSearchableFields ($aInputsAdd = array())
+    {
+        $CNF = &$this->_oConfig->CNF;
+
+        $aResult = parent::serviceGetSearchableFields($aInputsAdd);
+        $aResult[$CNF['FIELD_TEXT_COMMENTS']] = _t('_bx_forum_form_entry_input_text_comments');
+
+        return $aResult;
+    }
+
+    /**
+     * Service methods
+     */
+    /**
+     * @page service Service Calls
+     * @section bx_forum Discussions
+     * @subsection bx_forum-other Other
+     * @subsubsection bx_forum-get_info get_info
+     * 
+     * @code bx_srv('bx_forum', 'get_info', [...]); @endcode
+     * 
+     * Get content info by content ID. Is used in "Content Info Objects" system.
+     * 
+     * @param $iContentId integer value with content ID.
+     * @param $bSearchableFieldsOnly (optional) boolean value determining all info or "searchable fields" only will be returned.
+     * @return an array with content info. Empty array is returned if something is wrong.
+     * 
+     * @see BxForumModule::serviceGetInfo
+     */
+    /** 
+     * @ref bx_forum-get_info "get_info"
+     */
+    public function serviceGetInfo ($iContentId, $bSearchableFieldsOnly = true)
+    {
+        $aContentInfo = $this->_getFields($iContentId);
+        if(empty($aContentInfo))
+            return array();
+
+        return $aContentInfo;
+    }
+
+    /**
+     * @page service Service Calls
+     * @section bx_forum Discussions
+     * @subsection bx_forum-page_blocks Page Blocks
+     * @subsubsection bx_forum-browse_new browse_new
+     * 
+     * @code bx_srv('bx_forum', 'browse_new', [...]); @endcode
+     * 
+     * Get page block with a list of items ordered by newness and represented as table.
+     * 
+     * @param $sUnitView (optional) string with unit view type.
+     * @param $bEmptyMessage (optional) boolean value determining whether an "Empty" message should be returned or not.
+     * @param $bAjaxPaginate (optional) boolean value determining whether an Ajax based pagination should be used or not.
+     * @return HTML string with block content to display on the site or false if something is wrong. All necessary CSS and JS files are automatically added to the HEAD section of the site HTML.
+     * 
+     * @see BxForumModule::serviceBrowseNew
+     */
+    /** 
+     * @ref bx_forum-browse_new "browse_new"
+     */
+	public function serviceBrowseNew ($sUnitView = false, $bEmptyMessage = true, $bAjaxPaginate = true, $bShowHeader = false)
+    {
+    	$sType = 'new';
+
+    	if($sUnitView != 'table')   
+        	return $this->_serviceBrowse($sType, $sUnitView ? array('unit_view' => $sUnitView) : false, BX_DB_PADDING_DEF, $bEmptyMessage, $bAjaxPaginate);
+
+        return $this->_serviceBrowseTable(array('type' => $sType), $bShowHeader);
+    }
+
+    /**
+     * @page service Service Calls
+     * @section bx_forum Discussions
+     * @subsection bx_forum-page_blocks Page Blocks
+     * @subsubsection bx_forum-browse_latest browse_latest
+     * 
+     * @code bx_srv('bx_forum', 'browse_latest', [...]); @endcode
+     * 
+     * Get page block with a list of items ordered by Recent Posts in them and represented as table.
+     * 
+     * @param $sUnitView (optional) string with unit view type.
+     * @param $bEmptyMessage (optional) boolean value determining whether an "Empty" message should be returned or not.
+     * @param $bAjaxPaginate (optional) boolean value determining whether an Ajax based pagination should be used or not.
+     * @param $bShowHeader (optional) boolean value determining whether a resulting table should have Header section or not.
+     * @return HTML string with block content to display on the site or false if something is wrong. All necessary CSS and JS files are automatically added to the HEAD section of the site HTML.
+     * 
+     * @see BxForumModule::serviceBrowseNew
+     */
+    /** 
+     * @ref bx_forum-browse_latest "browse_latest"
+     */
+    public function serviceBrowseLatest($sUnitView = false, $bEmptyMessage = true, $bAjaxPaginate = true, $bShowHeader = false)
+    {
+        $sType = 'latest';
+
+        if($sUnitView != 'table')
+            return $this->_serviceBrowse($sType, $sUnitView ? array('unit_view' => $sUnitView) : false, BX_DB_PADDING_DEF, $bEmptyMessage, $bAjaxPaginate);
+
+        return $this->_serviceBrowseTable(array('type' => $sType), $bShowHeader);
+    }
+
+    /**
+     * @page service Service Calls
+     * @section bx_forum Discussions
+     * @subsection bx_forum-page_blocks Page Blocks
+     * @subsubsection bx_forum-browse_featured browse_featured
+     * 
+     * @code bx_srv('bx_forum', 'browse_featured', [...]); @endcode
+     * 
+     * Get page block with a list of featured items represented as table.
+     * 
+     * @param $sUnitView (optional) string with unit view type.
+     * @param $bEmptyMessage (optional) boolean value determining whether an "Empty" message should be returned or not.
+     * @param $bAjaxPaginate (optional) boolean value determining whether an Ajax based pagination should be used or not.
+     * @param $bShowHeader (optional) boolean value determining whether a resulting table should have Header section or not.
+     * @return HTML string with block content to display on the site or false if something is wrong. All necessary CSS and JS files are automatically added to the HEAD section of the site HTML.
+     * 
+     * @see BxForumModule::serviceBrowseFeatured
+     */
+    /** 
+     * @ref bx_forum-browse_featured "browse_featured"
+     */
+    public function serviceBrowseFeatured($sUnitView = false, $bEmptyMessage = false, $bAjaxPaginate = true, $bShowHeader = false)
+    {
+        $CNF = &$this->_oConfig->CNF;
+
+    	$sType = 'featured';
+
+    	if($sUnitView != 'table')
+            return $this->_serviceBrowse($sType, $sUnitView ? array('unit_view' => $sUnitView) : false, BX_DB_PADDING_DEF, $bEmptyMessage, $bAjaxPaginate);
+
+        return $this->_serviceBrowseTable(array(
+            'grid' => $CNF['OBJECT_GRID_FEATURE'],
+            'type' => $sType, 
+            'where' => array('fld' => 'featured', 'val' => 0, 'opr' => '<>'),
+            'empty_message' => $bEmptyMessage
+        ), $bShowHeader);
+    }
+
+    /**
+     * @page service Service Calls
+     * @section bx_forum Discussions
+     * @subsection bx_forum-page_blocks Page Blocks
+     * @subsubsection bx_forum-browse_top browse_top
+     * 
+     * @code bx_srv('bx_forum', 'browse_top', [...]); @endcode
+     * 
+     * Get page block with a list of items ordered by a number of comments and represented as table.
+     * 
+     * @param $sUnitView (optional) string with unit view type.
+     * @param $bEmptyMessage (optional) boolean value determining whether an "Empty" message should be returned or not.
+     * @param $bAjaxPaginate (optional) boolean value determining whether an Ajax based pagination should be used or not.
+     * @return HTML string with block content to display on the site or false if something is wrong. All necessary CSS and JS files are automatically added to the HEAD section of the site HTML.
+     * 
+     * @see BxForumModule::serviceBrowseTop
+     */
+    /** 
+     * @ref bx_forum-browse_top "browse_top"
+     */
+    public function serviceBrowseTop($sUnitView = false, $bEmptyMessage = true, $bAjaxPaginate = true, $bShowHeader = false)
+    {
+        $sType = 'top';
+
+        if($sUnitView != 'table')
+            return $this->_serviceBrowse($sType, $sUnitView ? array('unit_view' => $sUnitView) : false, BX_DB_PADDING_DEF, $bEmptyMessage, $bAjaxPaginate);
+
+        return $this->_serviceBrowseTable(array('type' => $sType), $bShowHeader);
+    }
+
+    /**
+     * @page service Service Calls
+     * @section bx_forum Discussions
+     * @subsection bx_forum-page_blocks Page Blocks
+     * @subsubsection bx_forum-browse_popular browse_popular
+     * 
+     * @code bx_srv('bx_forum', 'browse_popular', [...]); @endcode
+     * 
+     * Get page block with a list of items ordered by a number of views and represented as table.
+     * 
+     * @param $sUnitView (optional) string with unit view type.
+     * @param $bEmptyMessage (optional) boolean value determining whether an "Empty" message should be returned or not.
+     * @param $bAjaxPaginate (optional) boolean value determining whether an Ajax based pagination should be used or not.
+     * @return HTML string with block content to display on the site or false if something is wrong. All necessary CSS and JS files are automatically added to the HEAD section of the site HTML.
+     * 
+     * @see BxForumModule::serviceBrowsePopular
+     */
+    /** 
+     * @ref bx_forum-browse_popular "browse_popular"
+     */
+    public function serviceBrowsePopular ($sUnitView = false, $bEmptyMessage = true, $bAjaxPaginate = true, $bShowHeader = false)
+    {
+        $sType = 'popular';
+
+        if($sUnitView != 'table')
+            $this->_serviceBrowse($sType, $sUnitView ? array('unit_view' => $sUnitView) : false, BX_DB_PADDING_DEF, $bEmptyMessage, $bAjaxPaginate);
+
+        return $this->_serviceBrowseTable(array('type' => $sType), $bShowHeader);
+    }
+
+    /**
+     * @page service Service Calls
+     * @section bx_forum Discussions
+     * @subsection bx_forum-page_blocks Page Blocks
+     * @subsubsection bx_forum-browse_updated browse_updated
+     * 
+     * @code bx_srv('bx_forum', 'browse_updated', [...]); @endcode
+     * 
+     * Get page block with a list of updated items represented as table.
+     * 
+     * @param $sUnitView (optional) string with unit view type.
+     * @param $bEmptyMessage (optional) boolean value determining whether an "Empty" message should be returned or not.
+     * @param $bAjaxPaginate (optional) boolean value determining whether an Ajax based pagination should be used or not.
+     * @return HTML string with block content to display on the site or false if something is wrong. All necessary CSS and JS files are automatically added to the HEAD section of the site HTML.
+     * 
+     * @see BxForumModule::serviceBrowseUpdated
+     */
+    /** 
+     * @ref bx_forum-browse_updated "browse_updated"
+     */
+    public function serviceBrowseUpdated ($sUnitView = false, $bEmptyMessage = true, $bAjaxPaginate = true, $bShowHeader = false)
+    {
+        $sType = 'updated';
+
+        if($sUnitView != 'table')
+            $this->_serviceBrowse($sType, $sUnitView ? array('unit_view' => $sUnitView) : false, BX_DB_PADDING_DEF, $bEmptyMessage, $bAjaxPaginate);
+
+        return $this->_serviceBrowseTable(array('type' => $sType), $bShowHeader);
+    }
+
+    /**
+     * @page service Service Calls
+     * @section bx_forum Discussions
+     * @subsection bx_forum-page_blocks Page Blocks
+     * @subsubsection bx_forum-browse_index browse_index
+     * 
+     * @code bx_srv('bx_forum', 'browse_index', [...]); @endcode
+     * 
+     * Get page block for Site's Home page with a list of items ordered by newness and represented as table.
+     * 
+     * @param $sUnitView (optional) string with unit view type.
+     * @param $bEmptyMessage (optional) boolean value determining whether an "Empty" message should be returned or not.
+     * @param $bAjaxPaginate (optional) boolean value determining whether an Ajax based pagination should be used or not.
+     * @param $bShowHeader (optional) boolean value determining whether a resulting table should have Header section or not.
+     * @return HTML string with block content to display on the site or false if something is wrong. All necessary CSS and JS files are automatically added to the HEAD section of the site HTML.
+     * 
+     * @see BxForumModule::serviceBrowseIndex
+     */
+    /** 
+     * @ref bx_forum-browse_index "browse_index"
+     */
+    public function serviceBrowseIndex($sUnitView = false, $bEmptyMessage = true, $bAjaxPaginate = true, $bShowHeader = false)
+    {
+    	$sType = 'index';
+
+    	if($sUnitView != 'table')
+            return $this->_serviceBrowse($sType, $sUnitView ? array('unit_view' => $sUnitView) : false, BX_DB_PADDING_DEF, $bEmptyMessage, $bAjaxPaginate);
+
+        return $this->_serviceBrowseTable(array(
+            'type' => $sType,
+            'per_page' => (int)$this->_oDb->getParam('bx_forum_per_page_index'),
+            'empty_message' => $bEmptyMessage
+        ), $bShowHeader);
+    }
+
+    /**
+     * @page service Service Calls
+     * @section bx_forum Discussions
+     * @subsection bx_forum-page_blocks Page Blocks
+     * @subsubsection bx_forum-browse_author browse_author
+     * 
+     * @code bx_srv('bx_forum', 'browse_author', [...]); @endcode
+     * 
+     * Get page block with a list of items filtered by Author and represented as table.
+     * 
+     * @param $iProfileId (optional) integer value with author ID. If empty value is provided, an attempt to get it from GET/POST arrays will be performed.
+     * @param $aParams (optional) an array of additional params. It's not used for now.
+     * @return HTML string with block content to display on the site or false if something is wrong. All necessary CSS and JS files are automatically added to the HEAD section of the site HTML.
+     * 
+     * @see BxForumModule::serviceBrowseAuthor
+     */
+    /** 
+     * @ref bx_forum-browse_author "browse_author"
+     */
+	public function serviceBrowseAuthor ($iProfileId = 0, $aParams = array())
+    {
+        if(!$iProfileId)
+            $iProfileId = bx_process_input(bx_get('profile_id'), BX_DATA_INT);
+
+        if(!$iProfileId)
+            return '';
+
+        $bEmptyMessage = true;
+        if(isset($aParams['empty_message'])) {
+            $bEmptyMessage = (bool)$aParams['empty_message'];
+            unset($aParams['empty_message']);
+        }
+
+        return $this->_serviceBrowseTable(array(
+        	'type' => 'author', 
+        	'author' => $iProfileId, 
+        	'where' => array('fld' => 'author', 'val' => $iProfileId, 'opr' => '='), 
+        	'per_page' => (int)$this->_oDb->getParam('bx_forum_per_page_profile'),
+        	'empty_message' => $bEmptyMessage
+        ), false);
+    }
+
+    /**
+     * @page service Service Calls
+     * @section bx_forum Discussions
+     * @subsection bx_forum-page_blocks Page Blocks
+     * @subsubsection bx_forum-browse_favorite browse_favorite
+     * 
+     * @code bx_srv('bx_forum', 'browse_favorite', [...]); @endcode
+     * 
+     * Get page block with a list of favorited items by some profile and represented as table.
+     * 
+     * @param $iProfileId (optional) integer value with profile ID. If empty value is provided, an attempt to get it from GET/POST arrays will be performed.
+     * @param $aParams (optional) an array of additional params. It's not used for now.
+     * @return HTML string with block content to display on the site or false if something is wrong. All necessary CSS and JS files are automatically added to the HEAD section of the site HTML.
+     * 
+     * @see BxForumModule::serviceBrowseFavorite
+     */
+    /** 
+     * @ref bx_forum-browse_favorite "browse_favorite"
+     */
+    public function serviceBrowseFavorite ($iProfileId = 0, $aParams = array())
+    {
+        $CNF = &$this->_oConfig->CNF;
+
+        $oProfile = null;
+        if((int)$iProfileId)
+            $oProfile = BxDolProfile::getInstance($iProfileId);
+        if(!$oProfile && bx_get('profile_id') !== false)
+            $oProfile = BxDolProfile:: getInstance(bx_process_input(bx_get('profile_id'), BX_DATA_INT));
+        if(!$oProfile)
+            $oProfile = BxDolProfile::getInstance();
+        if(!$oProfile)
+            return '';
+
+        $iProfileAuthor = $oProfile->id();
+        $oFavorite = $this->getObjectFavorite();
+        if(!$oFavorite->isPublic() && $iProfileAuthor != bx_get_logged_profile_id())
+            return '';
+
+        $bEmptyMessage = false;
+        if(isset($aParams['empty_message'])) {
+            $bEmptyMessage = (bool)$aParams['empty_message'];
+            unset($aParams['empty_message']);
+        }
+
+        $aConditions = $oFavorite->getConditionsTrack($CNF['TABLE_ENTRIES'], 'id', $iProfileAuthor);
+        if(empty($aConditions) || !is_array($aConditions)) 
+            return '';
+
+        $aJoinGroup = array('grp' => true, 'cnds' => array());
+        if(!empty($aConditions['join']))
+            foreach($aConditions['join'] as $aCondition)
+                $aJoinGroup['cnds'][] = array(
+                    'tp' => $aCondition['type'],
+                    'tbl1' => $aCondition['table'],
+                    'fld1' => $aCondition['onField'],
+                    'tbl2' => $aCondition['mainTable'],
+                	'fld2' => $aCondition['mainField']
+                );
+
+        $aWhereGroup = array('grp' => true, 'opr' => 'AND', 'cnds' => array());
+        if(!empty($aConditions['restriction']))
+            foreach($aConditions['restriction'] as $aCondition)
+                $aWhereGroup['cnds'][] = array(
+                	'tbl' => (!empty($aCondition['table']) ? $aCondition['table'] : ''), 
+                	'fld' => $aCondition['field'], 
+                	'val' => $aCondition['value'], 
+                	'opr' => $aCondition['operator']
+                );
+
+        return $this->_serviceBrowseTable(array(
+			'grid' => $CNF['OBJECT_GRID_FAVORITE'],
+        	'type' => 'favorite', 
+        	'author' => $iProfileId, 
+            'join' => $aJoinGroup,
+        	'where' => $aWhereGroup, 
+        	'per_page' => (int)$this->_oDb->getParam('bx_forum_per_page_profile'),
+        	'empty_message' => $bEmptyMessage
+        ), false);
+    }
+
+    /**
+     * @page service Service Calls
+     * @section bx_forum Discussions
+     * @subsection bx_forum-page_blocks Page Blocks
+     * @subsubsection bx_forum-browse_category browse_category
+     * 
+     * @code bx_srv('bx_forum', 'browse_category', [...]); @endcode
+     * 
+     * Get page block with a list of items filter by some category and represented as table.
+     * 
+     * @param $sUnitView (optional) string with unit view type.
+     * @param $bEmptyMessage (optional) boolean value determining whether an "Empty" message should be returned or not.
+     * @param $bAjaxPaginate (optional) boolean value determining whether an Ajax based pagination should be used or not.
+     * @return HTML string with block content to display on the site or false if something is wrong. All necessary CSS and JS files are automatically added to the HEAD section of the site HTML.
+     * 
+     * @see BxForumModule::serviceBrowseCategory
+     */
+    /** 
+     * @ref bx_forum-browse_category "browse_category"
+     */
+    public function serviceBrowseCategory($sUnitView = false, $bEmptyMessage = true, $bAjaxPaginate = true, $bShowHeader = false)
+    {
+        $sType = 'category';
+        $iCategory = bx_process_input(bx_get('category'), BX_DATA_INT);
+
+        $aCategory = $this->_oDb->getCategories(array('type' => 'by_category', 'category' => $iCategory));
+        if(!empty($aCategory['visible_for_levels']) && !BxDolAcl::getInstance()->isMemberLevelInSet($aCategory['visible_for_levels']))
+            return $bEmptyMessage ? MsgBox(_t('_sys_txt_access_denied')) : '';
+
+        if($sUnitView != 'table')   
+            return $this->_serviceBrowse($sType, $sUnitView ? array('unit_view' => $sUnitView) : false, BX_DB_PADDING_DEF, $bEmptyMessage, $bAjaxPaginate);
+
+        return $this->_serviceBrowseTable(array('type' => $sType, 'where' => array('fld' => 'cat', 'val' => $iCategory, 'opr' => '=')), $bShowHeader);
+    }
+
+    /**
+     * @page service Service Calls
+     * @section bx_forum Discussions
+     * @subsection bx_forum-page_blocks Page Blocks
+     * @subsubsection bx_forum-browse_keyword browse_keyword
+     * 
+     * @code bx_srv('bx_forum', 'browse_keyword', [...]); @endcode
+     * 
+     * Get page block with a list of items filter by some keyword and represented as table.
+     * 
+     * @param $sUnitView (optional) string with unit view type.
+     * @param $bEmptyMessage (optional) boolean value determining whether an "Empty" message should be returned or not.
+     * @param $bAjaxPaginate (optional) boolean value determining whether an Ajax based pagination should be used or not.
+     * @return HTML string with block content to display on the site or false if something is wrong. All necessary CSS and JS files are automatically added to the HEAD section of the site HTML.
+     * 
+     * @see BxForumModule::serviceBrowseKeyword
+     */
+    /** 
+     * @ref bx_forum-browse_keyword "browse_keyword"
+     */
+    public function serviceBrowseKeyword($sUnitView = false, $bEmptyMessage = true, $bAjaxPaginate = true, $bShowHeader = false)
+    {
+        $sType = 'keyword';
+        $sKeyword = bx_process_input(bx_get('keyword'));
+
+        if($sUnitView != 'table')   
+            return $this->_serviceBrowse($sType, $sUnitView ? array('unit_view' => $sUnitView) : false, BX_DB_PADDING_DEF, $bEmptyMessage, $bAjaxPaginate);
+
+        return $this->_serviceBrowseTable(array('type' => $sType, 'where' => $this->_getSearchKeywordDescriptor('#' . $sKeyword)), $bShowHeader);
+    }
+
+    /**
+     * @page service Service Calls
+     * @section bx_forum Discussions
+     * @subsection bx_forum-page_blocks Page Blocks
+     * @subsubsection bx_forum-browse_search_results browse_search_results
+     * 
+     * @code bx_srv('bx_forum', 'browse_search_results', [...]); @endcode
+     * 
+     * Get page block with search results by Author(s), Category, Keyword represented as table.
+     * 
+     * @param $sUnitView (optional) string with unit view type.
+     * @param $bEmptyMessage (optional) boolean value determining whether an "Empty" message should be returned or not.
+     * @param $bAjaxPaginate (optional) boolean value determining whether an Ajax based pagination should be used or not.
+     * @return HTML string with block content to display on the site or false if something is wrong. All necessary CSS and JS files are automatically added to the HEAD section of the site HTML.
+     * 
+     * @see BxForumModule::serviceBrowseSearchResults
+     */
+    /** 
+     * @ref bx_forum-browse_search_results "browse_search_results"
+     */
+    public function serviceBrowseSearchResults($sUnitView = false, $bEmptyMessage = true, $bAjaxPaginate = true)
+    {
+        $sType = 'search';
+
+        $aAuthors = bx_process_input(bx_get('author'));
+        $iCategory = bx_process_input(bx_get('category'), BX_DATA_INT);
+        $sKeyword = bx_process_input(bx_get('keyword'));
+
+        $aCategory = $this->_oDb->getCategories(array('type' => 'by_category', 'category' => $iCategory));
+        if(!empty($aCategory['visible_for_levels']) && !BxDolAcl::getInstance()->isMemberLevelInSet($aCategory['visible_for_levels']))
+            return $bEmptyMessage ? MsgBox(_t('_sys_txt_access_denied')) : '';
+
+        if($sUnitView != 'table')   
+            return $this->_serviceBrowse('', $sUnitView ? array('unit_view' => $sUnitView) : false, BX_DB_PADDING_DEF, $bEmptyMessage, $bAjaxPaginate);
+
+        $aWhereGroupAnd = array('grp' => true, 'opr' => 'AND', 'cnds' => array());
+        if(!empty($aAuthors) && is_array($aAuthors))
+            $aWhereGroupAnd['cnds'][] = $this->_getSearchAuthorDescriptor($aAuthors);
+
+        if(!empty($iCategory))
+            $aWhereGroupAnd['cnds'][] = array('fld' => 'cat', 'val' => $iCategory, 'opr' => '=');
+
+        if(!empty($sKeyword))
+            $aWhereGroupAnd['cnds'][] = $this->_getSearchKeywordDescriptor($sKeyword);
+
+        return $this->_serviceBrowseTable(array('type' => $sType, 'where' => $aWhereGroupAnd), false);
+    }
+
+    /**
+     * @page service Service Calls
+     * @section bx_forum Discussions
+     * @subsection bx_forum-other Other
+     * @subsubsection bx_forum-get_discussions_num get_discussions_num
+     * 
+     * @code bx_srv('bx_forum', 'get_discussions_num', [...]); @endcode
+     * 
+     * Get number of discussions for some profile.
+     * 
+     * @param $iProfileId (optional) profile to get discussions for, if omitted then currently logged in profile is used.
+     * @return integer value with a number of discussions.
+     * 
+     * @see BxForumModule::serviceGetDiscussionsNum
+     */
+    /** 
+     * @ref bx_forum-get_discussions_num "get_discussions_num"
+     */
+    public function serviceGetDiscussionsNum ($iProfileId = 0)
+    {
+        if (!$iProfileId)
+            $iProfileId = bx_get_logged_profile_id();
+
+        return $this->_oDb->getEntriesNumByAuthor((int)$iProfileId);
+    }
+
+    /**
+     * @page service Service Calls
+     * @section bx_forum Discussions
+     * @subsection bx_forum-other Other
+     * @subsubsection bx_forum-get_unreplied_discussions_num get_unreplied_discussions_num
+     * 
+     * @code bx_srv('bx_forum', 'get_unreplied_discussions_num', [...]); @endcode
+     * 
+     * Get number of unreplied discussions for some profile.
+     * 
+     * @param $iProfileId (optional) profile to get unreplied discussions for, if omitted then currently logged is profile is used.
+     * @return integer value with a number of discussions.
+     * 
+     * @see BxForumModule::serviceGetUnrepliedDiscussionsNum
+     */
+    /** 
+     * @ref bx_forum-get_unreplied_discussions_num "get_unreplied_discussions_num"
+     */
+    public function serviceGetUnrepliedDiscussionsNum ($iProfileId = 0)
+    {
+        if (!$iProfileId)
+            $iProfileId = bx_get_logged_profile_id();
+
+        return $this->_oDb->getUnrepliedDiscussionsNum((int)$iProfileId);
+    }
+
+    /**
+     * 
+     */
+    /**
+     * @page service Service Calls
+     * @section bx_forum Discussions
+     * @subsection bx_forum-other Other
+     * @subsubsection bx_forum-trigger_comment_post trigger_comment_post
+     * 
+     * @code bx_srv('bx_forum', 'trigger_comment_post', [...]); @endcode
+     * 
+     * Update last comment time and author when new comment was added in the discussion.
+     * 
+     * @param $iContentId integer value with content ID.
+     * @param $iProfileId integer value with profile ID.
+     * @param $iCommentId integer value with comment ID.
+     * @param $iTimestamp (optional) date in UNIX Timestamp format, if omitted then current date is used.
+     * @param $sCommentText (optional) string value with text of comment.
+     * @return boolean value determining where the operation is successful or not.
+     * 
+     * @see BxForumModule::serviceTriggerCommentPost
+     */
+    /** 
+     * @ref bx_forum-trigger_comment_post "trigger_comment_post"
+     */
+    public function serviceTriggerCommentPost ($iContentId, $iProfileId, $iCommentId, $iTimestamp = 0, $sCommentText = '')
+    {
+    	$CNF = $this->_oConfig->CNF;
+
+    	$iContentId = (int)$iContentId;
+        if(!$iContentId)
+            return false;
+
+        $aContentInfo = $this->_oDb->getContentInfoById($iContentId);
+        if(!$aContentInfo)
+			return false;
+
+        $oCmts = BxDolCmts::getObjectInstance($CNF['OBJECT_COMMENTS'], $iContentId);
+        if(!$oCmts)
+            return false;
+
+        if(!$iTimestamp)
+			$iTimestamp = time();
+
+        if(!$this->_oDb->updateLastCommentTimeProfile((int)$iContentId, (int)$iProfileId, $iCommentId, $iTimestamp))
+			return false;
+
+        // send notification to author
+        if($iProfileId != $aContentInfo[$CNF['FIELD_AUTHOR']]) {
+	        $oProfile = BxDolProfile::getInstanceMagic($iProfileId);
+	        if($oProfile) 
+                sendMailTemplate('bx_forum_new_reply', 0, $aContentInfo[$CNF['FIELD_AUTHOR']], array(
+                    'SenderDisplayName' => $oProfile->getDisplayName(),
+                    'SenderUrl' => $oProfile->getUrl(),
+                    'PageUrl' => $oCmts->getItemUrl($iCommentId),
+                    'PageTitle' => $oCmts->getObjectTitle(),
+                    'Message' => $sCommentText,
+                ), BX_EMAIL_NOTIFY);
+        }
+
+        return true;
+    }
+
+    /**
+     * @page service Service Calls
+     * @section bx_forum Discussions
+     * @subsection bx_forum-page_blocks Page Blocks
+     * @subsubsection bx_forum-entity_participants entity_participants
+     * 
+     * @code bx_srv('bx_forum', 'entity_participants', [...]); @endcode
+     * 
+     * Get page block with discussion's collaborators.
+     * 
+     * @param $iContentId (optional) content ID. If empty value is provided, an attempt to get it from GET/POST arrays will be performed.
+     * @return HTML string with block content to display on the site or false if something is wrong. All necessary CSS and JS files are automatically added to the HEAD section of the site HTML.
+     * 
+     * @see BxForumModule::serviceEntityParticipants
+     */
+    /** 
+     * @ref bx_forum-entity_participants "entity_participants"
+     */
+    public function serviceEntityParticipants ($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->entryParticipants ($aContentInfo, 5, 'right');
+    }
+
+    /**
+     * @page service Service Calls
+     * @section bx_forum Discussions
+     * @subsection bx_forum-page_blocks Page Blocks
+     * @subsubsection bx_forum-search search
+     * 
+     * @code bx_srv('bx_forum', 'search', [...]); @endcode
+     * 
+     * Get page block with search form.
+     * 
+     * @return HTML string with block content to display on the site or false if something is wrong. All necessary CSS and JS files are automatically added to the HEAD section of the site HTML.
+     * 
+     * @see BxForumModule::serviceSearch
+     */
+    /** 
+     * @ref bx_forum-search "search"
+     */
+	public function serviceSearch()
+    {
+    	$CNF = $this->_oConfig->CNF;
+    	$oForm = BxDolForm::getObjectInstance($CNF['OBJECT_FORM_SEARCH'], $CNF['OBJECT_FORM_SEARCH_DISPLAY_FULL'], $this->_oTemplate);
+    	$oForm->initChecker();
+
+        return $oForm->getCode();
+    }
+
+    public function checkAllowedSubscribe(&$aDataEntry, $isPerformAction = false)
+    {
+        $CNF = &$this->_oConfig->CNF;
+
+        $sMsg = $this->checkAllowedView($aDataEntry);
+        if($sMsg !== CHECK_ACTION_RESULT_ALLOWED)
+            return $sMsg;
+
+        return $this->_checkAllowedConnect ($aDataEntry, $isPerformAction, $CNF['OBJECT_CONNECTION_SUBSCRIBERS'], false, false);
+    }
+
+    public function checkAllowedUnsubscribe(&$aDataEntry, $isPerformAction = false)
+    {
+        $CNF = &$this->_oConfig->CNF;
+
+        return $this->_checkAllowedConnect ($aDataEntry, $isPerformAction, $CNF['OBJECT_CONNECTION_SUBSCRIBERS'], false, true);
+    }
+
+    public function checkAllowedStickAnyEntry($aDataEntry, $isPerformAction = false)
+    {
+    	$CNF = &$this->_oConfig->CNF;
+
+    	if((int)$aDataEntry[$CNF['FIELD_STICK']] != 0)
+    		return false;
+
+		return $this->_checkAllowedAction('stick any entry', $aDataEntry, $isPerformAction);
+    }
+
+    public function checkAllowedUnstickAnyEntry($aDataEntry, $isPerformAction = false)
+    {
+    	$CNF = $this->_oConfig->CNF;
+
+    	if((int)$aDataEntry[$CNF['FIELD_STICK']] != 1)
+			return false;
+
+    	return $this->_checkAllowedAction('stick any entry', $aDataEntry, $isPerformAction);
+    }
+
+    public function checkAllowedLockAnyEntry($aDataEntry, $isPerformAction = false)
+    {
+    	$CNF = $this->_oConfig->CNF;
+
+    	if((int)$aDataEntry[$CNF['FIELD_LOCK']] != 0)
+    		return false;
+
+		return $this->_checkAllowedAction('lock any entry', $aDataEntry, $isPerformAction);
+    }
+
+	public function checkAllowedUnlockAnyEntry($aDataEntry, $isPerformAction = false)
+    {
+    	$CNF = $this->_oConfig->CNF;
+
+    	if((int)$aDataEntry[$CNF['FIELD_LOCK']] != 1)
+    		return false;
+
+		return $this->_checkAllowedAction('lock any entry', $aDataEntry, $isPerformAction);
+    }
+
+    public function checkAllowedHideAnyEntry($aDataEntry, $isPerformAction = false)
+    {
+    	$CNF = $this->_oConfig->CNF;
+
+    	if($aDataEntry[$CNF['FIELD_STATUS_ADMIN']] == 'hidden')
+    		return false;
+
+		return $this->_checkAllowedAction('hide any entry', $aDataEntry, $isPerformAction);
+    }
+
+	public function checkAllowedUnhideAnyEntry($aDataEntry, $isPerformAction = false)
+    {
+    	$CNF = &$this->_oConfig->CNF;
+
+    	if($aDataEntry[$CNF['FIELD_STATUS_ADMIN']] != 'hidden')
+    		return false;
+
+		return $this->_checkAllowedAction('hide any entry', $aDataEntry, $isPerformAction);
+    }
+
+    protected function _checkAllowedConnect (&$aDataEntry, $isPerformAction, $sObjConnection, $isMutual, $isInvertResult)
+    {
+        $CNF = &$this->_oConfig->CNF;
+
+        if(!$this->_iProfileId)
+            return _t('_sys_txt_access_denied');
+
+        $isConnected = BxDolConnection::getObjectInstance($sObjConnection)->isConnected($this->_iProfileId, $aDataEntry[$CNF['FIELD_ID']], $isMutual);
+        if($isInvertResult)
+            $isConnected = !$isConnected;
+
+        return $isConnected ? _t('_sys_txt_access_denied') : CHECK_ACTION_RESULT_ALLOWED;
+    }
+
+	/**
+     * @return CHECK_ACTION_RESULT_ALLOWED if access is granted or error message if access is forbidden. So make sure to make strict(===) checking.
+     */
+    protected function _checkAllowedAction($sAction, $aDataEntry, $isPerformAction = false)
+    {
+        if($this->_isModerator($isPerformAction))
+			return CHECK_ACTION_RESULT_ALLOWED;
+
+		$aCheck = checkActionModule($this->_iProfileId, $sAction, $this->getName(), $isPerformAction);
+    	if($aCheck[CHECK_ACTION_RESULT] === CHECK_ACTION_RESULT_ALLOWED)
+    		return CHECK_ACTION_RESULT_ALLOWED;
+
+        return _t('_sys_txt_access_denied');
+    }
+
+    protected function _serviceBrowseTable($aParams, $isDisplayHeader = true)
+    {
+        $sGrid = $this->_oConfig->CNF['OBJECT_GRID'];
+        if(!empty($aParams['grid'])) {
+            $sGrid = $aParams['grid'];
+            unset($aParams['grid']);
+        }
+
+        $oGrid = BxDolGrid::getObjectInstance($sGrid);
+        if(!$oGrid)
+            return false;
+
+        $oGrid->setBrowseParams($aParams);
+
+        return $oGrid->getCode($isDisplayHeader);
+    }
+
+    protected function _getSearchAuthorDescriptor($aAutor)
+    {
+        return array('grp' => true, 'opr' => 'OR', 'cnds' => array(
+            array('fld' => 'author', 'val' => $aAutor, 'opr' => 'IN'),
+            array('fld' => 'author_comment', 'val' => $aAutor, 'opr' => 'IN'),
+        ));
+    }
+
+    protected function _getSearchKeywordDescriptor($sKeyword)
+    {
+        return array('grp' => true, 'opr' => 'OR', 'cnds' => array(
+            array('fld' => 'title', 'val' => $sKeyword, 'opr' => 'LIKE'),
+            array('fld' => 'text', 'val' => $sKeyword, 'opr' => 'LIKE'),
+            array('fld' => 'text_comments', 'val' => $sKeyword, 'opr' => 'LIKE')
+        ));
+    }
+}
+
+/** @} */

+ 204 - 0
modules/boonex/forum/updates/10.0.0_10.0.1/source/classes/BxForumTemplate.php

@@ -0,0 +1,204 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Forum Forum
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+/*
+ * Module representation.
+ */
+class BxForumTemplate extends BxBaseModTextTemplate
+{
+    /**
+     * Constructor
+     */
+    function __construct(&$oConfig, &$oDb)
+    {
+        $this->MODULE = 'bx_forum';
+        parent::__construct($oConfig, $oDb);
+    }
+
+    public function entryBreadcrumb($aContentInfo, $aTmplVarsItems = array())
+    {
+    	$CNF = &BxDolModule::getInstance($this->MODULE)->_oConfig->CNF;
+
+        $oPermalink = BxDolPermalinks::getInstance();
+        $oCategory = BxDolCategory::getObjectInstance($CNF['OBJECT_CATEGORY']);
+
+    	$aTmplVarsItems = array(array(
+        	'url' => bx_append_url_params($oPermalink->permalink('page.php?i=' . $CNF['URI_CATEGORY_ENTRIES']), array(
+        		'category' => $aContentInfo[$CNF['FIELD_CATEGORY']]
+        	)),
+        	'title' => $oCategory->getCategoryTitle($aContentInfo[$CNF['FIELD_CATEGORY']])
+        ), array(
+        	'url' => $oPermalink->permalink('page.php?i=' . $CNF['URI_VIEW_ENTRY'] . '&id=' . $aContentInfo[$CNF['FIELD_ID']]),
+        	'title' => bx_process_output($aContentInfo[$CNF['FIELD_TITLE']])
+        ));
+
+    	return parent::entryBreadcrumb($aContentInfo, $aTmplVarsItems);
+    }
+
+    public function entryParticipants($aContentInfo, $iMaxVisible = 2, $sFloat = 'left')
+    {
+        $oModule = BxDolModule::getInstance($this->MODULE);
+        $CNF = &$oModule->_oConfig->CNF;
+
+        $iAuthorId = $aContentInfo[$CNF['FIELD_AUTHOR']];
+        $aParticipants = $this->_oDb->getComments(array('type' => 'author_comments', 'object_id' => $aContentInfo[$CNF['FIELD_ID']]));
+        $aParticipants[$iAuthorId] = !empty($aParticipants[$iAuthorId]) ? $aParticipants[$iAuthorId] + 1 : 1;
+
+        // sort participants: first - current user, second - last replier, third - author, all others sorted by max number of posts
+        $aParticipants = $oModule->sortParticipants($aParticipants, $aContentInfo['lr_profile_id'], $iAuthorId);
+        $iParticipantsNum = count($aParticipants);
+
+        // prepare template variables
+        $aVarsPopup = array (
+            'float' => 'none',
+            'bx_repeat:participants' => array(),
+            'bx_if:participants_more' => array(
+                'condition' => false,
+                'content' => array(),
+            ),
+        );
+        $aVars = array (
+            'float' => $sFloat,
+            'bx_repeat:participants' => array(),
+            'bx_if:participants_more' => array(
+                'condition' => $iParticipantsNum > $iMaxVisible,
+                'content' => array(
+                    'popup' => '',
+                    'title_more' => _t('_bx_forum_more', $iParticipantsNum - $iMaxVisible),
+                    'float' => $sFloat,
+                    'id' => $this->MODULE . '-popup-' . $aContentInfo[$CNF['FIELD_ID']],
+                ),
+            ),
+        );
+        $i = 0;
+        foreach ($aParticipants as $iProfileId => $iComments) {
+            $oProfile = BxDolProfile::getInstanceMagic($iProfileId);
+
+            $aParticipant = array (
+                'id' => $oProfile->id(),
+                'unit' => $oProfile->getUnit(0, array('template' => 'unit_wo_info')),
+                'float' => $sFloat,
+                'class' => $iAuthorId == $iProfileId ? 'bx-forum-participant-author' : '',
+            	'bx_if:replies_count' => array(
+            		'condition' => $iComments > 0,
+            		'content' => array(
+            			'count' => $iComments
+            		)
+            	),
+                'bx_if:last_replier' => array (
+                    'condition' => ($aContentInfo['lr_profile_id'] == $iProfileId),
+                    'content' => array (
+                        'id' => $oProfile->id(),
+                        'title' => bx_html_attribute(_t('_bx_forum_participant_last_replier')),
+                    ),
+                ),
+                'bx_if:author'  => array (
+                    'condition' => $iAuthorId == $iProfileId,
+                    'content' => array (
+                        'id' => $oProfile->id(),
+                        'title' => bx_html_attribute(_t('_bx_forum_participant_author')),
+                    ),
+                ),
+            );
+
+            if ($i < $iMaxVisible)
+                $aVars['bx_repeat:participants'][] = $aParticipant;
+            if ($i >= $iMaxVisible)
+                $aVarsPopup['bx_repeat:participants'][] = $aParticipant;
+
+            ++$i;
+        }
+
+        if ($aVarsPopup['bx_repeat:participants']) {
+            $aVars['bx_if:participants_more']['content']['popup'] = BxTemplFunctions::getInstance()->transBox('', '<div class="bx-def-padding">' . $this->parseHtmlByName('participants.html', $aVarsPopup) . '</div>');
+        }
+
+        return $this->parseHtmlByName('participants.html', $aVars);
+    }
+
+	function getEntryAuthor($aRow)
+    {
+    	$oProfileAuthor = BxDolProfile::getInstanceMagic($aRow['author']);
+
+    	return $this->parseHtmlByName('entry-author.html', array(
+			'unit' => $oProfileAuthor->getUnit(0, array('template' => 'unit_wo_info')),
+    	));
+    }
+
+    function getEntryPreview($aRow)
+    {
+        $oModule = BxDolModule::getInstance($this->MODULE);
+        $CNF = &$oModule->_oConfig->CNF;
+
+        $oProfileLast = BxDolProfile::getInstanceMagic($aRow['lr_profile_id']);
+
+        $sTitle = strmaxtextlen($aRow[$CNF['FIELD_TITLE']], 100);
+        $sText = strmaxtextlen($aRow[$CNF['FIELD_TEXT']], 100);
+
+        $aMetas = array('main' => false, 'counters' => false, 'reply' => false);
+        foreach(array_keys($aMetas) as $sMeta) {
+            $sKey = 'OBJECT_MENU_SNIPPET_META_' . strtoupper($sMeta);
+            if(empty($CNF[$sKey]))
+                continue;
+
+            $oMenuMeta = BxDolMenu::getObjectInstance($CNF[$sKey], $this);
+            if(!$oMenuMeta) 
+                continue;
+
+            $oMenuMeta->setContentId($aRow[$CNF['FIELD_ID']]);
+            $sMenuMeta = $oMenuMeta->getCode();
+            if(empty($sMenuMeta))
+                continue;
+
+            $aMetas[$sMeta] = array(
+                'content' => $sMenuMeta
+            );
+        }
+
+        return $this->parseHtmlByName('entry-preview.html', array(
+            'bx_if:show_stick' => array(
+                'condition' => (int)$aRow[$CNF['FIELD_STICK']] == 1,
+                'content' => array()
+            ),
+            'bx_if:show_lock' => array(
+                'condition' => (int)$aRow[$CNF['FIELD_LOCK']] == 1,
+                'content' => array()
+            ),
+            'url' => BX_DOL_URL_ROOT . BxDolPermalinks::getInstance()->permalink('page.php?i=' . $oModule->_oConfig->CNF['URI_VIEW_ENTRY'] . '&id=' . $aRow['id']),
+            'title' => $sTitle ? $sTitle : _t('_Empty'),
+            'text' => $sText,
+            'bx_if:meta_main' => array(
+                'condition' => $aMetas['main'] !== false,
+                'content' => $aMetas['main']
+            ),
+            'bx_if:meta_counters' => array(
+                'condition' => $aMetas['counters'] !== false,
+                'content' => $aMetas['counters']
+            ),
+            'bx_if:meta_reply' => array(
+                'condition' => $aMetas['reply'] !== false,
+                'content' => $aMetas['reply']
+            )
+        ));
+    }
+
+    function getAuthorDesc ($aData, $oProfile)
+    {
+        return '';
+    }
+
+    function getAuthorAddon ($aData, $oProfile)
+    {
+        return '';
+    }
+}
+
+/** @} */

+ 136 - 0
modules/boonex/forum/updates/10.0.0_10.0.1/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.1',
+    'vendor' => 'BoonEx',
+    'help_url' => 'http://feed.una.io/?section={module_name}',
+
+    'compatible_with' => array(
+        '10.0.0-B2'
+    ),
+
+    /**
+     * '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'
+    ),
+);
+
+/** @} */

+ 294 - 0
modules/boonex/forum/updates/10.0.0_10.0.1/source/install/langs/en.xml

@@ -0,0 +1,294 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources name="en" flag="gb" title="English">
+
+	<string name="_bx_forum"><![CDATA[Discussions]]></string>
+	<string name="_bx_forum_cmts"><![CDATA[Discussions's Comments]]></string>
+
+	<string name="_bx_forum_option_summary_chars"><![CDATA[Number of characters in auto-cropped discussion summary]]></string>
+	<string name="_bx_forum_option_plain_summary_chars"><![CDATA[Number of characters in plain discussion description when discussion hasn't thumb]]></string>
+	<string name="_bx_forum_option_per_page_browse"><![CDATA[Number of items per page]]></string>
+	<string name="_bx_forum_option_per_page_index"><![CDATA[Number of items on site home page]]></string>
+	<string name="_bx_forum_option_per_page_profile"><![CDATA[Number of items on profile page]]></string>
+	<string name="_bx_forum_option_rss_num"><![CDATA[Number of items in RSS feed]]></string>
+	<string name="_bx_forum_option_searchable_fields"><![CDATA[Searchable fields for keyword search]]></string>
+	<string name="_bx_forum_option_autosubscribe_created"><![CDATA[Autosubscribe to newly created discussions]]></string>
+	<string name="_bx_forum_option_autosubscribe_replied"><![CDATA[Autosubscribe to replied discussions]]></string>
+
+	<string name="_bx_forum_form_entry"><![CDATA[Forum]]></string>
+	<string name="_bx_forum_form_entry_display_add"><![CDATA[New discussion]]></string>
+	<string name="_bx_forum_form_entry_display_delete"><![CDATA[Delete discussion]]></string>
+	<string name="_bx_forum_form_entry_display_edit"><![CDATA[Edit discussion]]></string>
+	<string name="_bx_forum_form_entry_display_view"><![CDATA[View discussion]]></string>
+	<string name="_bx_forum_form_entry_input_author"><![CDATA[Author]]></string>
+	<string name="_bx_forum_form_entry_input_sys_do_submit"><![CDATA[Submit]]></string>
+	<string name="_bx_forum_form_entry_input_do_submit"><![CDATA[Submit]]></string>
+	<string name="_bx_forum_form_entry_input_sys_text"><![CDATA[Text]]></string>
+	<string name="_bx_forum_form_entry_input_text"><![CDATA[Text]]></string>
+	<string name="_bx_forum_form_entry_input_text_err"><![CDATA[Text field can't be empty]]></string>
+        <string name="_bx_forum_form_entry_input_text_comments"><![CDATA[Comments Text]]></string>
+	<string name="_bx_forum_form_entry_input_sys_delete_confirm"><![CDATA[Delete confirmation]]></string>
+	<string name="_bx_forum_form_entry_input_delete_confirm"><![CDATA[I am sure I want to delete this discussion]]></string>
+	<string name="_bx_forum_form_entry_input_delete_confirm_info"><![CDATA[This action can not be undone]]></string>
+	<string name="_bx_forum_form_entry_input_delete_confirm_error"><![CDATA[Please check this checkbox if you really want to delete the discussion]]></string>
+	<string name="_bx_forum_form_entry_input_sys_attachments"><![CDATA[Attachments]]></string>
+	<string name="_bx_forum_form_entry_input_attachments"><![CDATA[Attachments]]></string>
+	<string name="_bx_forum_form_entry_input_sys_allow_view_to"><![CDATA[Visibility]]></string>
+    <string name="_bx_forum_form_entry_input_allow_view_to"><![CDATA[Visibility]]></string>
+    <string name="_bx_forum_form_entry_input_picture_use_as_thumb"><![CDATA[Header Image]]></string>
+    <string name="_bx_forum_form_entry_input_sys_date_added"><![CDATA[Added]]></string>
+    <string name="_bx_forum_form_entry_input_date_added"><![CDATA[Added]]></string>
+    <string name="_bx_forum_form_entry_input_sys_date_changed"><![CDATA[Changed]]></string>
+    <string name="_bx_forum_form_entry_input_date_changed"><![CDATA[Changed]]></string>
+    <string name="_bx_forum_form_entry_input_sys_title"><![CDATA[Topic]]></string>
+    <string name="_bx_forum_form_entry_input_title"><![CDATA[Topic]]></string>
+    <string name="_bx_forum_form_entry_input_title_err"><![CDATA[Topic is mandatory]]></string>
+    <string name="_bx_forum_form_entry_input_sys_cat"><![CDATA[Category]]></string>
+    <string name="_bx_forum_form_entry_input_cat"><![CDATA[Category]]></string>
+    <string name="_bx_forum_form_entry_input_cat_err"><![CDATA[Please select category]]></string>
+    <string name="_bx_forum_form_search"><![CDATA[Search]]></string>
+	<string name="_bx_forum_form_search_display_full"><![CDATA[Full Search]]></string>
+	<string name="_bx_forum_form_search_input_sys_author"><![CDATA[Author]]></string>
+	<string name="_bx_forum_form_search_input_author"><![CDATA[Author]]></string>
+	<string name="_bx_forum_form_search_input_sys_category"><![CDATA[Category]]></string>
+	<string name="_bx_forum_form_search_input_category"><![CDATA[Category]]></string>
+	<string name="_bx_forum_form_search_input_sys_keyword"><![CDATA[Keyword]]></string>
+	<string name="_bx_forum_form_search_input_keyword"><![CDATA[Keyword]]></string>
+	<string name="_bx_forum_form_search_input_do_submit"><![CDATA[Search]]></string>
+	<string name="_bx_forum_form_search_input_sys_do_submit"><![CDATA[Search]]></string>
+
+	<string name="_bx_forum_acl_action_create_entry"><![CDATA[Create new discussion]]></string>
+	<string name="_bx_forum_acl_action_delete_entry"><![CDATA[Delete discussion]]></string>
+	<string name="_bx_forum_acl_action_view_entry"><![CDATA[View discussion]]></string>
+	<string name="_bx_forum_acl_action_set_thumb"><![CDATA[Set discussion's cover]]></string>
+	<string name="_bx_forum_acl_action_edit_any_entry"><![CDATA[Edit any discussion]]></string>
+	<string name="_bx_forum_acl_action_stick_any_entry"><![CDATA[Pin any discussion]]></string>
+	<string name="_bx_forum_acl_action_lock_any_entry"><![CDATA[Lock any discussion]]></string>
+	<string name="_bx_forum_acl_action_hide_any_entry"><![CDATA[Hide any discussion]]></string>
+
+	<string name="_bx_forum_page_title_sys_create_entry"><![CDATA[New discussion]]></string>
+	<string name="_bx_forum_page_title_create_entry"><![CDATA[New discussion]]></string>
+	<string name="_bx_forum_page_block_title_create_entry"><![CDATA[New discussion]]></string>
+	<string name="_bx_forum_page_title_sys_edit_entry"><![CDATA[Edit]]></string>
+	<string name="_bx_forum_page_title_edit_entry"><![CDATA[Edit]]></string>
+	<string name="_bx_forum_page_block_title_edit_entry"><![CDATA[Edit]]></string>
+    <string name="_bx_forum_page_title_sys_delete_entry"><![CDATA[Delete]]></string>
+    <string name="_bx_forum_page_title_delete_entry"><![CDATA[Delete]]></string>
+    <string name="_bx_forum_page_block_title_delete_entry"><![CDATA[Delete]]></string>
+	<string name="_bx_forum_page_title_sys_view_entry"><![CDATA[View discussion]]></string>
+	<string name="_bx_forum_page_title_view_entry"><![CDATA[{title}]]></string>
+	<string name="_bx_forum_page_block_title_entry_all_actions"><![CDATA[All Actions]]></string>
+	<string name="_bx_forum_page_block_title_entry_attachments"><![CDATA[Attachments]]></string>
+	<string name="_bx_forum_page_block_title_entry_text"><![CDATA[Text]]></string>
+    <string name="_bx_forum_page_block_title_entry_author"><![CDATA[Author]]></string>
+    <string name="_bx_forum_page_block_title_entry_actions"><![CDATA[Actions]]></string>
+    <string name="_bx_forum_page_block_title_entry_breadcrumb"><![CDATA[Breadcrumb]]></string>
+    <string name="_bx_forum_page_block_title_entry_comments"><![CDATA[Replies ({0})]]></string>
+    <string name="_bx_forum_page_block_title_entry_participants"><![CDATA[Participants]]></string>
+    <string name="_bx_forum_page_block_title_entry_info"><![CDATA[Info]]></string>
+    <string name="_bx_forum_page_title_browse"><![CDATA[Discussions]]></string>
+	<string name="_bx_forum_page_title_search_results"><![CDATA[Discussions matching "{0}"]]></string>
+	<string name="_bx_forum_page_title_browse_by_author"><![CDATA[Discussions of {display_name}]]></string>
+  <string name="_bx_forum_page_title_browse_by_context"><![CDATA[Discussions in {display_name}]]></string>
+	<string name="_bx_forum_page_title_browse_featured"><![CDATA[Featured Discussions]]></string>
+	<string name="_bx_forum_page_title_browse_by_category"><![CDATA[Discussions by {category_name}]]></string>
+	<string name="_bx_forum_page_title_browse_new"><![CDATA[New Discussions]]></string>
+    <string name="_bx_forum_page_title_browse_latest"><![CDATA[Latest Discussions]]></string>
+    <string name="_bx_forum_page_title_browse_top"><![CDATA[Top Discussions]]></string>
+    <string name="_bx_forum_page_title_browse_popular"><![CDATA[Popular Discussions]]></string>
+    <string name="_bx_forum_page_title_browse_updated"><![CDATA[Updated Discussions]]></string>
+    <string name="_bx_forum_page_title_sys_home"><![CDATA[Discussions Home]]></string>
+    <string name="_bx_forum_page_title_home"><![CDATA[Discussions]]></string>
+    <string name="_bx_forum_page_block_title_featured_entries"><![CDATA[Featured Discussions]]></string>
+    <string name="_bx_forum_page_title_sys_entries_new"><![CDATA[New Discussions]]></string>
+    <string name="_bx_forum_page_title_entries_new"><![CDATA[New Discussions]]></string>
+    <string name="_bx_forum_page_title_sys_entries_top"><![CDATA[Top Discussions]]></string>
+    <string name="_bx_forum_page_title_entries_top"><![CDATA[Top Discussions]]></string>
+    <string name="_bx_forum_page_title_sys_entries_popular"><![CDATA[Popular Discussions]]></string>
+    <string name="_bx_forum_page_title_entries_popular"><![CDATA[Popular Discussions]]></string>
+    <string name="_bx_forum_page_title_sys_entries_updated"><![CDATA[Updated Discussions]]></string>
+    <string name="_bx_forum_page_title_entries_updated"><![CDATA[Updated Discussions]]></string>
+    <string name="_bx_forum_page_block_title_new_entries"><![CDATA[New Discussions]]></string>
+    <string name="_bx_forum_page_block_title_new_entries_view_extended"><![CDATA[New Discussions (Extended View)]]></string>
+    <string name="_bx_forum_page_block_title_new_entries_view_full"><![CDATA[New Discussions (Full View)]]></string>
+    <string name="_bx_forum_page_block_title_latest_entries"><![CDATA[Discussions With Recent Posts]]></string>
+    <string name="_bx_forum_page_block_title_latest_entries_view_extended"><![CDATA[Discussions With Recent Posts (Extended View)]]></string>
+    <string name="_bx_forum_page_block_title_latest_entries_view_full"><![CDATA[Discussions With Recent Posts (Full View)]]></string>
+    <string name="_bx_forum_page_block_title_top_entries"><![CDATA[Top Discussions]]></string>
+    <string name="_bx_forum_page_block_title_top_entries_view_extended"><![CDATA[Top Discussions (Extended View)]]></string>
+    <string name="_bx_forum_page_block_title_top_entries_view_full"><![CDATA[Top Discussions (Full View)]]></string>
+    <string name="_bx_forum_page_block_title_popular_entries"><![CDATA[Popular Discussions]]></string>
+    <string name="_bx_forum_page_block_title_popular_entries_view_extended"><![CDATA[Popular Discussions (Extended View)]]></string>
+    <string name="_bx_forum_page_block_title_popular_entries_view_full"><![CDATA[Popular Discussions (Full View)]]></string>
+    <string name="_bx_forum_page_block_title_updated_entries"><![CDATA[Updated Discussions]]></string>
+    <string name="_bx_forum_page_title_sys_entries_categories"><![CDATA[Discussions Categories]]></string>
+    <string name="_bx_forum_page_title_entries_categories"><![CDATA[Discussions Categories]]></string>
+    <string name="_bx_forum_page_block_title_entries_categories"><![CDATA[Discussions Categories]]></string>
+    <string name="_bx_forum_page_title_sys_entries_by_category"><![CDATA[Discussions by category]]></string>
+    <string name="_bx_forum_page_title_entries_by_category"><![CDATA[Discussions by {category_name}]]></string>
+    <string name="_bx_forum_page_block_title_sys_entries_by_category"><![CDATA[Discussions by category]]></string>
+    <string name="_bx_forum_page_block_title_entries_by_category"><![CDATA[{category_name}]]></string>
+    <string name="_bx_forum_page_title_sys_entries_by_keyword"><![CDATA[Discussions by keyword]]></string>
+    <string name="_bx_forum_page_title_entries_by_keyword"><![CDATA[Discussions by {keyword_name}]]></string>
+    <string name="_bx_forum_page_block_title_sys_entries_by_keyword"><![CDATA[Discussions by keyword]]></string>
+    <string name="_bx_forum_page_block_title_entries_by_keyword"><![CDATA[Discussions by {keyword_name}]]></string>
+    <string name="_bx_forum_page_title_sys_entries_of_author"><![CDATA[Discussions of author]]></string>
+    <string name="_bx_forum_page_title_entries_of_author"><![CDATA[Discussions by {display_name}]]></string>
+    <string name="_bx_forum_page_title_sys_entries_in_context"><![CDATA[Discussions in context]]></string>
+    <string name="_bx_forum_page_title_entries_in_context"><![CDATA[Discussions in {display_name}]]></string>
+    <string name="_bx_forum_page_block_title_favorites_of_author"><![CDATA[Favorites by <a href="{profile_link}">{display_name}</a>]]></string>
+    <string name="_bx_forum_page_block_title_sys_favorites_of_author"><![CDATA[Favorites of author]]></string>
+    <string name="_bx_forum_page_block_title_entries_of_author"><![CDATA[Discussions by <a href="{profile_link}">{display_name}</a>]]></string>
+    <string name="_bx_forum_page_block_title_sys_entries_of_author"><![CDATA[Discussions of author]]></string>
+    <string name="_bx_forum_page_block_title_entries_in_context"><![CDATA[Discussions in <a href="{profile_link}">{display_name}</a>]]></string>
+    <string name="_bx_forum_page_block_title_sys_entries_in_context"><![CDATA[Discussions in context]]></string>
+    <string name="_bx_forum_page_block_title_entries_actions"><![CDATA[Discussions actions]]></string>
+	<string name="_bx_forum_page_block_title_sys_entry_context"><![CDATA[Posted in]]></string>
+  	<string name="_bx_forum_page_block_title_entry_context"><![CDATA[Posted in]]></string>
+    
+	<string name="_bx_forum_page_block_title_browse_cmts"><![CDATA[Forum's Comments]]></string>
+    <string name="_bx_forum_page_title_sys_manage"><![CDATA[Manage Own]]></string>
+	<string name="_bx_forum_page_title_sys_manage_administration"><![CDATA[Manage All]]></string>
+	<string name="_bx_forum_page_title_manage"><![CDATA[Manage]]></string>
+	<string name="_bx_forum_page_block_title_system_manage"><![CDATA[Manage Own]]></string>
+	<string name="_bx_forum_page_block_title_system_manage_administration"><![CDATA[Manage All]]></string>
+	<string name="_bx_forum_page_block_title_manage"><![CDATA[Manage]]></string>    
+    <string name="_bx_forum_page_block_title_popular_keywords"><![CDATA[Popular Hashtags]]></string>
+	<string name="_bx_forum_page_block_title_cats"><![CDATA[Discussions Categories]]></string>
+	<string name="_bx_forum_page_block_title_my_entries"><![CDATA[My Discussions]]></string>
+	<string name="_bx_forum_page_title_sys_entries_search"><![CDATA[Search]]></string>
+	<string name="_bx_forum_page_title_entries_search"><![CDATA[Search]]></string>
+	<string name="_bx_forum_page_block_title_entries_search_form"><![CDATA[Search]]></string>
+	<string name="_bx_forum_page_block_title_entries_search_results"><![CDATA[Search Results]]></string>
+	<string name="_bx_forum_page_block_title_search_form"><![CDATA[Search Form]]></string>
+    <string name="_bx_forum_page_block_title_search_results"><![CDATA[Search Results]]></string>
+    <string name="_bx_forum_page_block_title_search_form_cmts"><![CDATA[Comments Search Form]]></string>
+    <string name="_bx_forum_page_block_title_search_results_cmts"><![CDATA[Comments Search Results]]></string>
+    <string name="_bx_forum_menu_title_submenu"><![CDATA[Forum Submenu]]></string>
+    <string name="_bx_forum_menu_set_title_submenu"><![CDATA[Forum Submenu]]></string>
+    <string name="_bx_forum_menu_item_title_system_create_entry"><![CDATA[Discussion]]></string>
+    <string name="_bx_forum_menu_item_title_create_entry"><![CDATA[Discussion]]></string>
+    <string name="_bx_forum_menu_item_title_system_edit_entry"><![CDATA[Edit]]></string>
+    <string name="_bx_forum_menu_item_title_edit_entry"><![CDATA[Edit]]></string>
+    <string name="_bx_forum_menu_item_title_system_delete_entry"><![CDATA[Delete]]></string>
+    <string name="_bx_forum_menu_item_title_delete_entry"><![CDATA[Delete]]></string>
+    <string name="_bx_forum_menu_item_title_system_stick_entry"><![CDATA[Pin]]></string>
+    <string name="_bx_forum_menu_item_title_stick_entry"><![CDATA[Pin]]></string>
+    <string name="_bx_forum_menu_item_title_system_unstick_entry"><![CDATA[Unpin]]></string>
+    <string name="_bx_forum_menu_item_title_unstick_entry"><![CDATA[Unpin]]></string>
+    <string name="_bx_forum_menu_item_title_system_lock_entry"><![CDATA[Lock]]></string>
+    <string name="_bx_forum_menu_item_title_lock_entry"><![CDATA[Lock]]></string>
+    <string name="_bx_forum_menu_item_title_system_unlock_entry"><![CDATA[Unlock]]></string>
+    <string name="_bx_forum_menu_item_title_unlock_entry"><![CDATA[Unlock]]></string>
+    <string name="_bx_forum_menu_item_title_system_hide_entry"><![CDATA[Hide]]></string>
+    <string name="_bx_forum_menu_item_title_hide_entry"><![CDATA[Hide]]></string>
+    <string name="_bx_forum_menu_item_title_system_unhide_entry"><![CDATA[Unhide]]></string>
+    <string name="_bx_forum_menu_item_title_unhide_entry"><![CDATA[Unhide]]></string>
+    <string name="_bx_forum_menu_item_title_system_subscribe"><![CDATA[Subscribe]]></string>
+    <string name="_bx_forum_menu_item_title_subscribe"><![CDATA[Subscribe]]></string>
+    <string name="_bx_forum_menu_item_title_system_unsubscribe"><![CDATA[Unsubscribe]]></string>
+    <string name="_bx_forum_menu_item_title_unsubscribe"><![CDATA[Unsubscribe]]></string>
+    <string name="_bx_forum_menu_item_title_system_more"><![CDATA[More Actions]]></string>
+    <string name="_bx_forum_menu_item_title_more"><![CDATA[]]></string>
+    <string name="_bx_forum_menu_item_title_system_entries_home"><![CDATA[Discussions]]></string>
+    <string name="_bx_forum_menu_item_title_entries_home"><![CDATA[Discussions]]></string>
+    <string name="_bx_forum_menu_item_title_system_entries_public"><![CDATA[Latest]]></string>
+    <string name="_bx_forum_menu_item_title_entries_public"><![CDATA[Latest]]></string>
+    <string name="_bx_forum_menu_item_title_system_entries_manage"><![CDATA[Manage]]></string>
+    <string name="_bx_forum_menu_item_title_entries_manage"><![CDATA[Manage]]></string>
+    <string name="_bx_forum_menu_item_title_system_entries_new"><![CDATA[New]]></string>
+    <string name="_bx_forum_menu_item_title_entries_new"><![CDATA[New]]></string>
+    <string name="_bx_forum_menu_item_title_system_entries_top"><![CDATA[Top]]></string>
+    <string name="_bx_forum_menu_item_title_entries_top"><![CDATA[Top]]></string>
+    <string name="_bx_forum_menu_item_title_system_entries_categories"><![CDATA[Сategories]]></string>
+    <string name="_bx_forum_menu_item_title_entries_categories"><![CDATA[Сategories]]></string>
+    <string name="_bx_forum_menu_item_title_system_entries_search"><![CDATA[Search]]></string>
+    <string name="_bx_forum_menu_item_title_entries_search"><![CDATA[Search]]></string>
+    <string name="_bx_forum_menu_set_title_view_entry"><![CDATA[Discussion Actions]]></string>
+    <string name="_bx_forum_menu_title_view_entry"><![CDATA[Discussion Actions]]></string>
+    <string name="_bx_forum_menu_set_title_view_more"><![CDATA[Discussion More Actions]]></string>
+    <string name="_bx_forum_menu_title_view_more"><![CDATA[Discussion More Actions]]></string>
+    <string name="_bx_forum_menu_item_title_system_view_entries_author"><![CDATA[Discussions]]></string>
+    <string name="_bx_forum_menu_item_title_view_entries_author"><![CDATA[Discussions]]></string>
+    <string name="_bx_forum_menu_item_title_system_view_entries_in_context"><![CDATA[Discussions]]></string>
+    <string name="_bx_forum_menu_item_title_view_entries_in_context"><![CDATA[Discussions]]></string>
+    <string name="_bx_forum_menu_title_entries_my"><![CDATA[My Discussions Action Menu]]></string>
+    <string name="_bx_forum_menu_set_title_entries_my"><![CDATA[My Discussions Menu]]></string>
+    <string name="_bx_forum_menu_set_title_manage_tools"><![CDATA[Manage Tools Submenu]]></string>
+    <string name="_bx_forum_menu_title_manage_tools"><![CDATA[Manage Tools Submenu]]></string>
+    <string name="_bx_forum_menu_item_title_system_manage_account"><![CDATA[Manage account]]></string>
+    <string name="_bx_forum_menu_item_title_manage_account"><![CDATA[Manage account]]></string>
+    <string name="_bx_forum_menu_item_title_system_admt_discussions"><![CDATA[Discussions]]></string>
+    <string name="_bx_forum_menu_item_title_admt_discussions"><![CDATA[Discussions]]></string>
+    <string name="_bx_forum_menu_item_title_manage_my"><![CDATA[My Discussions]]></string>
+    <string name="_bx_forum_menu_item_title_manage_all"><![CDATA[All Discussions]]></string>
+    <string name="_bx_forum_menu_item_title_system_discussions"><![CDATA[Discussions number]]></string>
+    <string name="_bx_forum_menu_item_title_discussions"><![CDATA[Discussions]]></string>
+    <string name="_bx_forum_lmi_cpt_categories"><![CDATA[Categories]]></string>
+    <string name="_bx_forum_menu_title_snippet_meta_main"><![CDATA[Snippet Meta Info: Main]]></string>
+    <string name="_bx_forum_menu_set_title_snippet_meta_main"><![CDATA[Snippet Meta Info: Main]]></string>
+    <string name="_bx_forum_menu_title_snippet_meta_counters"><![CDATA[Snippet Meta Info: Counters]]></string>
+    <string name="_bx_forum_menu_set_title_snippet_meta_counters"><![CDATA[Snippet Meta Info: Counters]]></string>
+    <string name="_bx_forum_menu_title_snippet_meta_reply"><![CDATA[Snippet Meta Info: Reply]]></string>
+    <string name="_bx_forum_menu_set_title_snippet_meta_reply"><![CDATA[Snippet Meta Info: Reply]]></string>
+    <string name="_bx_forum_menu_item_title_system_sm_reply_text"><![CDATA[Reply text]]></string>
+    <string name="_bx_forum_menu_item_title_sm_reply_text"><![CDATA[Reply text]]></string>
+
+    <string name="_bx_forum_grid_filter_item_title_adm_select_one_filter1"><![CDATA[All Statuses]]></string>
+    <string name="_bx_forum_grid_filter_item_title_adm_active"><![CDATA[Active]]></string>
+    <string name="_bx_forum_grid_filter_item_title_adm_hidden"><![CDATA[Hidden]]></string>
+    <string name="_bx_forum_grid_column_title_adm_active"><![CDATA[Active]]></string>
+    <string name="_bx_forum_grid_column_title_adm_title"><![CDATA[Title]]></string>
+    <string name="_bx_forum_grid_column_title_adm_added"><![CDATA[Added]]></string>
+    <string name="_bx_forum_grid_column_title_adm_author"><![CDATA[Author]]></string>
+    <string name="_bx_forum_grid_column_title_title"><![CDATA[Category]]></string>
+    <string name="_bx_forum_grid_column_title_visible_for_levels"><![CDATA[Visible For]]></string>
+    <string name="_bx_forum_grid_action_title_adm_edit"><![CDATA[Edit]]></string>
+    <string name="_bx_forum_grid_action_title_adm_delete"><![CDATA[Delete]]></string>
+    <string name="_bx_forum_grid_action_title_adm_more_actions"><![CDATA[More Actions]]></string>
+    <string name="_bx_forum_grid_action_title_add"><![CDATA[New discussion]]></string>
+    <string name="_bx_forum_grid_action_title_show_to"><![CDATA[Show To]]></string>
+    <string name="_bx_forum_grid_action_err_delete"><![CDATA[Cannot delete the selected discussion(s).]]></string>
+    <string name="_bx_forum_grid_txt_account_manager"><![CDATA[Redirect to manage account.]]></string>
+    <string name="_bx_forum_grid_txt_manage_visibility"><![CDATA[Manage visibility settings.]]></string>
+    <string name="_bx_forum_grid_show_to_popup"><![CDATA[Show category to:]]></string>
+    <string name="_bx_forum_grid_txt_visible_for"><![CDATA[Visible For]]></string>
+    <string name="_bx_forum_grid_txt_visible_for_all"><![CDATA[Anyone]]></string>
+    <string name="_bx_forum_grid_txt_visible_for_levels"><![CDATA[Select Levels]]></string>
+    <string name="_bx_forum_grid_txt_visible_for_selected"><![CDATA[Selected levels]]></string>
+    <string name="_bx_forum_grid_inf_visible_for_levels"><![CDATA[Select user levels that can view this category]]></string>
+    <string name="_bx_forum_grid_err_show_to"><![CDATA[Cannot update category.]]></string>
+    <string name="_bx_forum_grid_btn_save"><![CDATA[Save]]></string>
+    <string name="_bx_forum_grid_btn_cancel"><![CDATA[Cancel]]></string>
+
+    <string name="_bx_forum_pre_lists_cats"><![CDATA[Forum categories]]></string>
+    <string name="_bx_forum_cat_General"><![CDATA[General]]></string>
+
+    <string name="_bx_forum_chart_growth"><![CDATA[Discussions: Growth]]></string>
+    <string name="_bx_forum_chart_growth_speed"><![CDATA[Discussions: Growth Speed]]></string>
+
+    <string name="_bx_forum_search_extended"><![CDATA[Discussions Search]]></string>
+    <string name="_bx_forum_search_extended_cmts"><![CDATA[Discussions Comments Search]]></string>
+
+    <string name="_bx_forum_err_not_found"><![CDATA[Discussion wasn't found.]]></string>
+    <string name="_bx_forum_more"><![CDATA[{0} more]]></string>
+    <string name="_bx_forum_participant_author"><![CDATA[author]]></string>
+    <string name="_bx_forum_participant_last_replier"><![CDATA[last replier]]></string>
+    <string name="_bx_forum_txt_entry_locked"><![CDATA[Locked discussion]]></string>
+    <string name="_bx_forum_txt_entry_sticked"><![CDATA[Pinned discussion]]></string>
+    <string name="_bx_forum_txt_sample_comment_single"><![CDATA[comment to discussion]]></string>
+    <string name="_bx_forum_txt_sample_vote_single"><![CDATA[vote to discussion]]></string>
+    <string name="_bx_forum_txt_sample_reaction_single"><![CDATA['{0}' reaction to discussion]]></string>
+    <string name="_bx_forum_txt_sample_score_up_single"><![CDATA[score up vote to discussion]]></string>
+    <string name="_bx_forum_txt_sample_score_down_single"><![CDATA[score down vote to discussion]]></string>
+    <string name="_bx_forum_txt_sample_single"><![CDATA[discussion]]></string>
+    <string name="_bx_forum_txt_sample_single_with_article"><![CDATA[a discussion]]></string>
+
+    <string name="_bx_forum_txt_all_entries_in"><![CDATA[<a href="{0}">All Discussions in {1} ({2})</a>]]></string>
+    <string name="_bx_forum_email_new_reply"><![CDATA[New reply]]></string>
+    <string name="_bx_forum_email_new_reply_subject"><![CDATA[New reply in "{PageTitle}" discussion]]></string>
+    <string name="_bx_forum_email_new_reply_body"><![CDATA[{email_header}
+<p>New reply in <a href="{PageUrl}">{PageTitle}</a> discussion from <a href="{SenderUrl}">{SenderDisplayName}</a>:</p>
+<hr />
+<p>{Message}</p>
+{email_footer}]]></string>
+</resources>

+ 561 - 0
modules/boonex/forum/updates/10.0.0_10.0.1/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` = `bx_forum_discussions`.`author` OR `sys_profiles`.`id` = -`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');

+ 212 - 0
modules/boonex/forum/updates/10.0.0_10.0.1/source/template/css/main.css

@@ -0,0 +1,212 @@
+@import url(../../../../base/text/template/css/main.css);
+
+/*-- Participants --*/
+
+.bx-forum-participant {
+    position:relative;
+    display:block;
+    float:right;
+}
+
+.bx-forum-participant-alert-last-replier {
+    left:0;
+    right:auto;
+}
+
+.bx-forum-participant-alert-author {
+    left:0;
+    right:auto;
+    top:auto;
+    bottom:0;
+}
+
+/*-- Replies --*/
+.cmt.bx-def-box .cmts.cmts-margin {
+	margin-top: 0px;
+}
+.cmt-attached-preview.bx-forum-attached-preview {
+	display: block;
+	float: none;
+
+	width: auto;
+	height: 2rem;
+	line-height: 2rem;
+	white-space: nowrap;
+
+	overflow: hidden;
+    text-overflow: ellipsis;
+}
+.cmt-attached-preview.bx-forum-attached-preview img,
+.cmt-attached-preview.bx-forum-attached-preview .sys-icon {
+	display: inline-block;
+	vertical-align: middle;
+
+	width: 2rem;
+    height: 2rem;
+}
+.cmt-attached-preview.bx-forum-attached-preview .sys-icon {
+	text-align: center;
+	font-size: 1.5rem;
+}
+
+/*-- Preview --*/
+.bx-forum-preview {
+    position:relative;
+}
+
+.bx-forum-title {    
+    padding-right:2em;
+    white-space:nowrap;    
+    text-overflow:ellipsis;
+    overflow:hidden;
+}
+
+/*-- Grid --*/
+.bx-forum-grid .bx-grid-table tr.bx-def-color-bg-hl {
+    background-color: transparent;
+}
+
+.bx-forum-grid .bx-grid-table tr th:first-child,
+.bx-forum-grid .bx-grid-table tr td:first-child {
+    padding-left: 0;
+}
+
+.bx-forum-grid .bx-grid-table tr th:last-child,
+.bx-forum-grid .bx-grid-table tr td:last-child {
+    padding-right: 0;
+}
+
+.bx-forum-grid-field-replies .bx-def-unit-alert-middle {
+    position:static;
+    display:inline-block;
+    vertical-align:middle;
+}
+
+.bx-forum-grid-field-replies > span {
+    vertical-align:middle;
+}
+
+.bx-forum-grid-field-replies {
+    white-space:nowrap;
+}
+
+.bx-forum-grid-field-label {
+    display:inline-block;
+}
+
+.bx-forum-preview .bx-forum-grid-field-label {
+    position: absolute;
+    right: 0;
+    top: 0;
+}
+
+.bx-forum-preview .bx-def-unit-info {
+    line-height:1.15em;
+}
+
+.bx-grid-table-cell-author {
+    vertical-align: top;
+}
+
+.bx-grid-table-cell-author .bx-base-pofile-unit-wo-info {
+	display: inline-block;
+}
+
+.bx-forum-grid-preview .bx-forum-gp-title,
+.bx-forum-grid-preview .bx-forum-gp-text {
+    white-space: nowrap;
+    text-overflow: ellipsis;
+    overflow: hidden;
+}
+
+.bx-forum-grid-preview .bx-forum-gp-meta {
+    display: -webkit-flex;
+    display: flex;
+    -webkit-align-items: center;
+    align-items: center;
+    -webkit-flex-wrap: wrap;
+    flex-wrap: wrap;
+}
+
+.bx-forum-grid-preview .bx-forum-gp-meta.bx-forum-gpm-top {
+    -webkit-justify-content: space-between;
+    justify-content: space-between;
+
+    padding-bottom: 0.2rem;
+}
+
+.bx-forum-grid-preview .bx-forum-gp-meta.bx-forum-gpm-bottom {
+    padding-top: 0.2rem;
+}
+
+.bx-forum-grid-preview .bx-forum-gp-meta .bx-menu-custom.bx-menu-hor {
+    margin: 0;
+}
+
+.bx-forum-grid-preview .bx-forum-gp-meta.bx-forum-gpm-bottom .bx-menu-custom.bx-menu-hor {
+    -webkit-align-items: center;
+    align-items: center;
+}
+
+.bx-layout-col.bx-layout-column-thin .bx-forum-grid-preview .bx-forum-gp-meta .bx-def-media-phone-hide {
+    display: none;
+}
+
+.bx-forum-grid-preview .bx-forum-gp-meta.bx-forum-gpm-bottom .bx-forum-gpm-reply {
+    display: -webkit-flex;
+    display: flex;
+    -webkit-align-items: center;
+    align-items: center;
+}
+
+.bx-forum-grid-preview .bx-forum-gp-meta.bx-forum-gpm-bottom .bx-forum-gpm-reply .bx-menu-item-reply-author .bx-base-pofile-unit {
+    width: auto;
+    margin: 0;
+}
+
+.bx-forum-grid-preview .bx-forum-gp-meta.bx-forum-gpm-bottom .bx-forum-gpm-reply .bx-menu-item-reply-author .bx-def-icon-size {
+    width: 1.0rem;
+    height: 1.0rem;
+
+    line-height: 0.875rem;
+    font-size: 0.6rem;
+}
+
+.bx-forum-grid-preview .bx-forum-gp-meta.bx-forum-gpm-bottom .bx-forum-gpm-reply .bx-menu-item-reply-author .bx-def-icon-size-min-height {
+    min-height: 1.0rem;
+}
+
+.bx-forum-grid-preview .bx-forum-gp-meta.bx-forum-gpm-bottom .bx-forum-gpm-reply .bx-menu-item-reply-author .bx-def-icon-size-max-height {
+    max-height: 1.0rem;
+}
+
+.bx-forum-grid-preview .bx-forum-gp-meta.bx-forum-gpm-bottom .bx-forum-gpm-reply .bx-menu-item-reply-author .bx-def-icon-size-left-indent {
+    margin-left: 1.25rem;
+}
+
+.bx-forum-grid-preview .bx-forum-gp-meta.bx-forum-gpm-bottom .bx-forum-gpm-reply .bx-menu-item-reply-author .bx-def-unit-img .bx-base-pofile-unit-thumb {
+    display: block;
+    border-width: 1px;
+}
+
+.bx-forum-grid-preview .bx-forum-gp-meta.bx-forum-gpm-bottom .bx-forum-gpm-reply .bx-menu-item-reply-author .bx-base-pofile-unit-online {
+    display: none;
+}
+
+.bx-base-general-unit-meta ul.bx-menu-object-bx_forum_snippet_meta_counters li span {
+    position: relative;
+    display: inline-block;
+    vertical-align: top;
+    height: 1.5rem;
+    margin-top: 0;
+    margin-bottom: 0;
+    border-width: 0px;
+    line-height: 1.5rem;
+}
+.bx-base-general-unit-meta ul.bx-menu-object-bx_forum_snippet_meta_counters li .sys-icon {
+    width: 1.0rem;
+    height: 1.0rem;
+    text-align: center;
+    line-height: 1.0rem;
+    vertical-align: baseline;
+}

+ 15 - 0
modules/boonex/forum/updates/10.0.0_10.0.1/source/template/entry-preview.html

@@ -0,0 +1,15 @@
+<div class="bx-forum-grid-preview">
+    <div class="bx-forum-gp-meta bx-forum-gpm-top bx-def-font-small">
+        <bx_if:meta_main><div class="bx-base-general-unit-meta">__content__</div></bx_if:meta_main>
+        <bx_if:meta_counters><div class="bx-base-general-unit-meta bx-def-media-phone-hide">__content__</div></bx_if:meta_counters>
+    </div>
+    <div class="bx-forum-gp-title bx-def-font">
+    	<bx_if:show_stick><i class="sys-icon thumbtack" title="<bx_text_attribute:_bx_forum_txt_entry_sticked />"></i></bx_if:show_stick>
+    	<bx_if:show_lock><i class="sys-icon lock" title="<bx_text_attribute:_bx_forum_txt_entry_locked />"></i></bx_if:show_lock>
+    	<a class="bx-def-font-h3" href="__url__">__title__</a>
+    </div>
+    <div class="bx-forum-gp-text bx-def-font-middle bx-def-padding-thd-top">__text__</div>
+    <div class="bx-forum-gp-meta bx-forum-gpm-bottom bx-def-font-small">
+        <bx_if:meta_reply><div class="bx-base-general-unit-meta bx-forum-gpm-reply">__content__</div></bx_if:meta_reply>
+    </div>
+</div>

+ 41 - 0
modules/boonex/forum/updates/10.0.0_10.0.1/source/template/images/icons/std-icon.svg

@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="64px" height="64px" viewBox="0 0 64 64" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <!-- Generator: Sketch 55 (78076) - https://sketchapp.com -->
+    <title>discussions</title>
+    <desc>Created with Sketch.</desc>
+    <defs>
+        <path d="M32,64 C46.0222222,64 53.8173667,64 58.9086889,58.9086889 C64,53.8173667 64,46.0222222 64,32 C64,17.9777778 64,10.1826333 58.9086889,5.09131111 C53.8173667,0 46.0222222,0 32,0 C17.9777778,0 10.1826333,0 5.09131111,5.09131111 C0,10.1826333 0,17.9777778 0,32 C0,46.0222222 0,53.8173667 5.09131111,58.9086889 C10.1826333,64 17.9777778,64 32,64 Z" id="path-1"></path>
+        <linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="linearGradient-3">
+            <stop stop-color="#FDFEFF" offset="0%"></stop>
+            <stop stop-color="#FBFCFD" stop-opacity="0.9" offset="100%"></stop>
+        </linearGradient>
+        <linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="linearGradient-5">
+            <stop stop-color="#FDFEFF" offset="0%"></stop>
+            <stop stop-color="#FBFCFD" stop-opacity="0.9" offset="100%"></stop>
+        </linearGradient>
+        <path d="M29.6111111,15.693693 L29.6111111,4.48391228 C29.6111111,2.01075441 27.5682292,0 25.0555556,0 L4.55555556,0 C2.04288194,0 0,2.01075441 0,4.48391228 L0,15.693693 C0,18.1668509 2.04288194,20.1776053 4.55555556,20.1776053 L4.55555556,23.9749185 C4.55555556,24.5354075 5.20329861,24.8576887 5.65885417,24.5213953 L11.5526042,20.1705992 L25.0555556,20.1705992 C27.5682292,20.1776053 29.6111111,18.1668509 29.6111111,15.693693 Z M36.4444444,11.2097807 L31.8888889,11.2097807 L31.8888889,15.693693 C31.8888889,19.3999267 28.8210069,22.4195614 25.0555556,22.4195614 L13.6666667,22.4195614 L13.6666667,26.9034737 C13.6666667,29.3766316 15.7095486,31.387386 18.2222222,31.387386 L27.1696181,31.387386 L33.0633681,35.7381821 C33.5189236,36.0744755 34.1666667,35.7521943 34.1666667,35.1917053 L34.1666667,31.387386 L36.4444444,31.387386 C38.9571181,31.387386 41,29.3766316 41,26.9034737 L41,15.693693 C41,13.2205351 38.9571181,11.2097807 36.4444444,11.2097807 Z" id="path-6"></path>
+        <filter x="-4.9%" y="-2.8%" width="109.8%" height="111.1%" filterUnits="objectBoundingBox" id="filter-7">
+            <feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
+            <feGaussianBlur stdDeviation="0.5" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
+            <feColorMatrix values="0 0 0 0 0   0 0 0 0 0   0 0 0 0 0  0 0 0 0.1 0" type="matrix" in="shadowBlurOuter1"></feColorMatrix>
+        </filter>
+    </defs>
+    <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="Artboard" transform="translate(-1069.000000, -430.000000)">
+            <g id="discussions" transform="translate(1069.000000, 430.000000)">
+                <mask id="mask-2" fill="white">
+                    <use xlink:href="#path-1"></use>
+                </mask>
+                <use id="Path" fill="#00B356" xlink:href="#path-1"></use>
+                <g id="comments-alt" mask="url(#mask-2)" fill-rule="nonzero">
+                    <g transform="translate(12.000000, 16.000000)" id="Shape">
+                        <g>
+                            <use fill="black" fill-opacity="1" filter="url(#filter-7)" xlink:href="#path-6"></use>
+                            <use fill="url(#linearGradient-5)" xlink:href="#path-6"></use>
+                        </g>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 1 - 0
modules/boonex/forum/updates/10.0.0_10.0.1/source/template/unit_gallery.html

@@ -0,0 +1 @@
+<bx_include_base:../modules/base/text/template/unit_gallery.html />

+ 1 - 0
modules/boonex/forum/updates/10.0.0_10.0.1/source/template/units.html

@@ -0,0 +1 @@
+<div class="bx-forum-grid">__code____js_code__</div>

+ 51 - 0
modules/boonex/froala/updates/10.0.0_10.0.1/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' => 'Froala',
+    'version_from' => '10.0.0',
+    'version_to' => '10.0.1',
+    'vendor' => 'BoonEx',
+
+    'compatible_with' => array(
+        '10.0.0-B2'
+    ),
+
+    /**
+     * 'home_dir' and 'home_uri' - should be unique. Don't use spaces in 'home_uri' and the other special chars.
+     */
+    'home_dir' => 'boonex/froala/updates/update_10.0.0_10.0.1/',
+    'home_uri' => 'froala_update_1000_1001',
+
+    'module_dir' => 'boonex/froala/',
+    'module_uri' => 'froala',
+
+    'db_prefix' => 'bx_froala_',
+    'class_prefix' => 'BxFroala',
+
+    /**
+     * Installation/Uninstallation Section.
+     */
+    'install' => array(
+        'execute_sql' => 0,
+        'update_files' => 1,
+        'update_languages' => 0,
+        'clear_db_cache' => 0,
+    ),
+
+    /**
+     * Category for language keys.
+     */
+    'language_category' => 'Froala',
+
+    /**
+     * Files Section
+     */
+    'delete_files' => array(),
+);

+ 13 - 0
modules/boonex/froala/updates/10.0.0_10.0.1/install/installer.php

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

+ 258 - 0
modules/boonex/froala/updates/10.0.0_10.0.1/source/classes/BxFroalaEditor.php

@@ -0,0 +1,258 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Froala Froala editor integration
+ * @ingroup     UnaModules
+ * 
+ * @{
+ */
+
+/**
+ * Froala editor representation.
+ * @see BxDolEditor
+ */
+class BxFroalaEditor extends BxDolEditor
+{
+    /**
+     * Common initialization params
+     */
+    protected static $CONF_COMMON = <<<EOS
+        new FroalaEditor('{bx_var_selector}', {
+            {bx_var_custom_init}
+            {bx_var_custom_conf}
+            key:'SDB17hD9B4F4B3eMRPYa1c1REe1BGQOQIc1CDBREJImD6F5F4I4E1B9B6C3F5C4==',
+            attribution: false,
+            embedlyKey: '{bx_var_embedly_key}',
+            emoticonsUseImage: false,
+            charCounterCount: false,
+            toolbarSticky: false,
+            quickInsertTags: [],
+            pastePlain: true,
+            entities: '',
+            imageUpload: true,
+            imageUploadURL: '{bx_var_image_upload_url}',
+            videoUpload: false,
+            language: '{bx_var_lang}',
+            theme: '{bx_var_skin}',
+            iconsTemplate: '{bx_var_icons_template}',
+            events: { 
+                'initialized': function () {
+                    var editor = this;
+                    \$('{bx_var_selector}').data('froala-instance', editor);
+                    \$(editor.el).atwho({
+                        searchKey: 'label',
+                        at: "@", 
+                        limit: 20,
+                        displayTpl: '<li class="bx-mention-row" data-value="\${value}"><span>\${label}</span> <img class="bx-def-round-corners" src="\${thumb}" /></li>',
+                        insertTpl: '<a class="bx-mention" data-profile-id="\${value}" href="\${url}">\${label}</a>',
+                        callbacks: {
+                            remoteFilter: function(query, callback) {
+                                $.getJSON("{bx_url_root}searchExtended.php?action=get_authors", {term: query}, function(data) {
+                                    callback(data);
+                                });
+                            }
+                        },
+                    });
+                    bx_editor_on_init('{bx_var_selector}');
+                },
+                'keydown': function (e) {
+                    var editor = this;
+                    if (e.which == FroalaEditor.KEYCODE.ENTER || e.which == FroalaEditor.KEYCODE.SPACE)
+                        bx_editor_on_space_enter('{bx_var_selector}');
+                    if (e.which == FroalaEditor.KEYCODE.ENTER && \$(editor.el).atwho('isSelecting'))
+                        return false;
+                },
+            }
+        });
+EOS;
+
+    /**
+     * Standard view initialization params
+     */
+    protected static $CONF_STANDARD = "";
+
+    /**
+     * Minimal view initialization params
+     */
+    protected static $CONF_MINI = "";
+
+    /**
+     * Full view initialization params
+     */
+    protected static $CONF_FULL = "";
+
+    /**
+     * Available editor languages
+     */
+    protected static $CONF_LANGS = array('ar' => 1, 'bs' => 1, 'cs' => 1, 'da' => 1, 'de' => 1, 'el' => 1, 'en_ca' => 1, 'en_gb' => 1, 'es' => 1, 'et' => 1, 'fa' => 1, 'fi' => 1, 'fr' => 1, 'he' => 1, 'hr' => 1, 'hu' => 1, 'id' => 1, 'it' => 1, 'ja' => 1, 'ko' => 1, 'ku' => 1, 'me' => 1, 'nb' => 1, 'nl' => 1, 'pl' => 1, 'pt_br' => 1, 'pt_pt' => 1, 'ro' => 1, 'ru' => 1, 'sk' => 1, 'sr' => 1, 'sv' => 1, 'th' => 1, 'tr' => 1, 'uk' => 1, 'vi' => 1, 'zh_cn' => 1, 'zh_tw' => 1);
+
+    protected $_oTemplate;
+    protected $_bJsCssAdded = false;
+
+    public function __construct ($aObject, $oTemplate)
+    {
+        parent::__construct ($aObject);
+
+        if ($oTemplate)
+            $this->_oTemplate = $oTemplate;
+        else
+            $this->_oTemplate = BxDolTemplate::getInstance();
+
+        $this->_aSkins = array(
+            'dark' => array('name' => 'dark', 'title' => '_bx_froala_txt_skin_dark'),
+            'gray' => array('name' => 'gray', 'title' => '_bx_froala_txt_skin_gray'),
+            'royal' => array('name' => 'royal', 'title' => '_bx_froala_txt_skin_royal')
+        );
+    }
+
+    /**
+     * Attach editor to HTML element, in most cases - textarea.
+     * @param $sSelector - jQuery selector to attach editor to.
+     * @param $iViewMode - editor view mode: BX_EDITOR_STANDARD, BX_EDITOR_MINI, BX_EDITOR_FULL
+     * @param $bDynamicMode - is AJAX mode or not, the HTML with editor area is loaded dynamically.
+     */
+    public function attachEditor ($sSelector, $iViewMode = BX_EDITOR_STANDARD, $bDynamicMode = false)
+    {
+        // set visual mode
+        switch ($iViewMode) {
+            case BX_EDITOR_MINI:
+                $aToolbarItems = explode(',', $this->_sButtonsCustom !== false ? $this->_sButtonsCustom : getParam('bx_froala_option_toolbar_mini'));
+                $sCustomInit = self::$CONF_MINI;
+                break;
+            case BX_EDITOR_FULL:
+                $aToolbarItems = explode(',', $this->_sButtonsCustom !== false ? $this->_sButtonsCustom : getParam('bx_froala_option_toolbar_full'));
+                $sCustomInit = self::$CONF_FULL;
+            break;
+            case BX_EDITOR_STANDARD:
+            default:
+                $aToolbarItems = explode(',', $this->_sButtonsCustom !== false ? $this->_sButtonsCustom : getParam('bx_froala_option_toolbar_standard'));
+                $sCustomInit = self::$CONF_STANDARD;
+        }
+        $sCustomInit .= "\ntoolbarButtons: " . json_encode($aToolbarItems) . ",";
+        $sCustomInit .= "\ntoolbarButtonsSM: " . json_encode($aToolbarItems) . ",";
+        $sCustomInit .= "\ntoolbarButtonsXS: " . json_encode($aToolbarItems) . ",";
+
+        // detect language
+        $sLang = BxDolLanguages::getInstance()->detectLanguageFromArray (self::$CONF_LANGS, 'en', true);
+
+        $sCss = 'editor.less';
+        $aCss = BxDolTemplate::getInstance()->_lessCss(array(
+        	'path' => $this->_oTemplate->getCssPath($sCss),
+        	'url' => $this->_oTemplate->getCssUrl($sCss)
+        ));
+
+        $oModule = BxDolModule::getInstance('bx_froala');
+
+        // initialize editor
+        $sInitEditor = $this->_replaceMarkers(self::$CONF_COMMON, array(
+            'bx_var_custom_init' => $sCustomInit,
+            'bx_var_custom_conf' => $this->_sConfCustom,
+            'bx_var_plugins_path' => bx_js_string(BX_DOL_URL_PLUGINS_PUBLIC, BX_ESCAPE_STR_APOS),
+            'bx_var_css_path' => bx_js_string($aCss['url'], BX_ESCAPE_STR_APOS),
+            'bx_var_skin' => bx_js_string($this->_sSkin, BX_ESCAPE_STR_APOS),
+            'bx_var_lang' => bx_js_string($sLang, BX_ESCAPE_STR_APOS),
+            'bx_var_selector' => bx_js_string($sSelector, BX_ESCAPE_STR_APOS),
+            'bx_url_root' => bx_js_string(BX_DOL_URL_ROOT, BX_ESCAPE_STR_APOS),
+            'bx_var_embedly_key' => bx_js_string(getParam('sys_embedly_api_key'), BX_ESCAPE_STR_APOS),            
+            'bx_var_image_upload_url' => $oModule ? BX_DOL_URL_ROOT . $oModule->_oConfig->getBaseUri() . 'upload' : '',
+            'bx_var_icons_template' => getParam('bx_froala_icons_template'),
+        ));
+
+        if ($bDynamicMode) {
+
+            list($aJs, $aCss) = $this->_getJsCss(true);
+            
+            $sCss = $this->_oTemplate->addCss($aCss, true);
+            
+            $sScript = $sCss . "<script>
+                if ('undefined' == typeof(window.FroalaEditor)) {
+                    bx_get_scripts(" . json_encode($aJs) . ", function () {
+                        $sInitEditor
+                    });
+                } else {
+                	setTimeout(function () {
+                    	$sInitEditor
+                    }, 10); // wait while html is rendered in case of dynamic adding html
+                }
+            </script>";
+
+        } else {
+
+            $sScript = "
+            <script>
+                $(document).ready(function () {
+                    $sInitEditor
+                });
+            </script>";
+
+        }
+
+        return $this->_addJsCss($bDynamicMode) . $sScript;
+    }
+
+    /**
+     * Add css/js files which are needed for editor display and functionality.
+     */
+    protected function _addJsCss($bDynamicMode = false, $sInitEditor = '')
+    {
+        if ($bDynamicMode)
+            return '';
+        if ($this->_bJsCssAdded)
+            return '';
+
+        list($aJs, $aCss) = $this->_getJsCss();
+
+        $this->_oTemplate->addJs($aJs);
+        $this->_oTemplate->addCss($aCss);
+        $this->_bJsCssAdded = true;
+        return '';
+    }
+
+    protected function _getPlugins($b3rdParty = false)
+    {
+        $a3rdParty = array('embedly', 'image_aviary', 'spell_checker');
+        $a = explode(',', $this->_sPluginsCustom !== false ? $this->_sPluginsCustom : getParam('bx_froala_option_plugins'));
+        return array_filter($a, function ($s) use ($a3rdParty, $b3rdParty) {
+            return !($b3rdParty ^ in_array($s, $a3rdParty));
+        });
+    }
+
+    protected function _getJsCss($bUseUrlsForJs = false)
+    {
+        $sLang = BxDolLanguages::getInstance()->detectLanguageFromArray (self::$CONF_LANGS, 'en', true);
+        $sJsPrefix = $bUseUrlsForJs ? BX_DOL_URL_MODULES : BX_DIRECTORY_PATH_MODULES;
+        $sJsSuffix = $bUseUrlsForJs ? '' : '|';
+        
+        $aJs = array(
+            $sJsPrefix . 'boonex/froala/js/' . $sJsSuffix . 'editor.js',
+            $sJsPrefix . 'boonex/froala/plugins/froala/js/' . $sJsSuffix . 'froala_editor.pkgd.min.js',
+        );
+        if ($sLang && 'en' != $sLang)
+            $aJs[] = $sJsPrefix . 'boonex/froala/plugins/froala/js/languages/' . $sJsSuffix . $sLang . '.js';
+        
+        $aCss = array(
+            BX_DIRECTORY_PATH_MODULES . 'boonex/froala/template/css/|editor.css',
+            BX_DIRECTORY_PATH_MODULES . 'boonex/froala/plugins/froala/css/|froala_editor.pkgd.min.css', 
+            BX_DIRECTORY_PATH_MODULES . 'boonex/froala/plugins/froala/css/|froala_style.min.css',
+            BX_DIRECTORY_PATH_MODULES . 'boonex/froala/plugins/froala/css/themes/|' . $this->_sSkin . '.min.css',
+        );
+
+        $aPlugins = $this->_getPlugins(true);
+        foreach ($aPlugins as $sPlugin) {
+            $aJs[] = $sJsPrefix . 'boonex/froala/plugins/froala/js/third_party/' . $sJsSuffix . $sPlugin . '.min.js';
+            $aCss[] = BX_DIRECTORY_PATH_MODULES . 'boonex/froala/plugins/froala/css/third_party/|' . $sPlugin . '.min.css';
+        }
+
+        $aPlugins = $this->_getPlugins(false);
+        foreach ($aPlugins as $sPlugin) {
+            $aJs[] = $sJsPrefix . 'boonex/froala/plugins/froala/js/plugins/' . $sJsSuffix . $sPlugin . '.min.js';
+            $aCss[] = BX_DIRECTORY_PATH_MODULES . 'boonex/froala/plugins/froala/css/plugins/|' . $sPlugin . '.min.css';
+        }
+        
+        return array($aJs, $aCss);
+    }
+}
+
+/** @} */

+ 76 - 0
modules/boonex/froala/updates/10.0.0_10.0.1/source/install/config.php

@@ -0,0 +1,76 @@
+<?php
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Froala Froala editor integration
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+$aConfig = array(
+    /**
+     * Main Section.
+     */
+    'type' => BX_DOL_MODULE_TYPE_MODULE,
+    'name' => 'bx_froala',
+    'title' => 'Froala',
+    'note' => 'Froala editor integration.',
+    'version' => '10.0.1',
+    'vendor' => 'BoonEx',
+    'help_url' => 'http://feed.una.io/?section={module_name}',
+
+    'compatible_with' => array(
+        '10.0.0-B2'
+    ),
+
+    /**
+     * 'home_dir' and 'home_uri' - should be unique. Don't use spaces in 'home_uri' and the other special chars.
+     */
+    'home_dir' => 'boonex/froala/',
+    'home_uri' => 'froala',
+
+    'db_prefix' => 'bx_froala_',
+    'class_prefix' => 'BxFroala',
+
+    /**
+     * Category for language keys.
+     */
+    'language_category' => 'Froala',
+
+	/**
+     * Storage objects to automatically delete files from upon module uninstallation.
+     * Note. Don't add storage objects used in transcoder objects.
+     */
+    'storages' => array(
+    	'bx_froala_files'
+    ),
+    
+    /**
+     * 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(),
+);
+
+/** @} */

+ 51 - 0
modules/boonex/glossary/updates/10.0.0_10.0.1/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' => 'Glossary',
+    'version_from' => '10.0.0',
+    'version_to' => '10.0.1',
+    'vendor' => 'BoonEx',
+
+    'compatible_with' => array(
+        '10.0.0-B2'
+    ),
+
+    /**
+     * 'home_dir' and 'home_uri' - should be unique. Don't use spaces in 'home_uri' and the other special chars.
+     */
+    'home_dir' => 'boonex/glossary/updates/update_10.0.0_10.0.1/',
+    'home_uri' => 'glossary_update_1000_1001',
+
+    'module_dir' => 'boonex/glossary/',
+    'module_uri' => 'glossary',
+
+    'db_prefix' => 'bx_glossary_',
+    'class_prefix' => 'BxGlsr',
+
+    /**
+     * Installation/Uninstallation Section.
+     */
+    'install' => array(
+        'execute_sql' => 0,
+        'update_files' => 1,
+        'update_languages' => 1,
+        'clear_db_cache' => 0,
+    ),
+
+    /**
+     * Category for language keys.
+     */
+    'language_category' => 'Glossary',
+
+    /**
+     * Files Section
+     */
+    'delete_files' => array(),
+);

+ 13 - 0
modules/boonex/glossary/updates/10.0.0_10.0.1/install/installer.php

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

+ 6 - 0
modules/boonex/glossary/updates/10.0.0_10.0.1/install/langs/en.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources name="en" flag="gb" title="English">
+	<string_add name="_bx_glossary_txt_sample_reaction_single"><![CDATA['{0}' reaction to term]]></string_add>
+
+	<string_upd name="_bx_glossary_txt_all_entries_by"><![CDATA[{0} terms]]></string_upd>
+</resources>

+ 156 - 0
modules/boonex/glossary/updates/10.0.0_10.0.1/source/classes/BxGlsrConfig.php

@@ -0,0 +1,156 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Glossary Glossary 
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxGlsrConfig extends BxBaseModTextConfig
+{
+    function __construct($aModule)
+    {
+        parent::__construct($aModule);
+
+        $aMenuItems2Methods = array (
+            'edit-glossary' => 'checkAllowedEdit',
+            'delete-glossary' => 'checkAllowedDelete',
+        );
+
+        $this->CNF = array (
+
+            // module icon
+            'ICON' => 'fa-book col-red3',
+
+            // database tables
+            'TABLE_ENTRIES' => $aModule['db_prefix'] . 'terms',
+            'TABLE_ENTRIES_FULLTEXT' => 'title_text',
+
+            // database fields
+            'FIELD_ID' => 'id',
+            'FIELD_AUTHOR' => 'author',
+            'FIELD_ADDED' => 'added',
+            'FIELD_CHANGED' => 'changed',
+            'FIELD_TITLE' => 'title',
+            'FIELD_TEXT' => 'text',
+            'FIELD_TEXT_ID' => 'glossary-text',
+            'FIELD_CATEGORY' => 'cat',
+            'FIELD_ALLOW_VIEW_TO' => 'allow_view_to',
+            'FIELD_PHOTO' => 'pictures',
+            'FIELD_THUMB' => 'thumb',
+            'FIELD_VIEWS' => 'views',
+            'FIELD_COMMENTS' => 'comments',
+            'FIELD_STATUS' => 'status',
+            'FIELD_STATUS_ADMIN' => 'status_admin',
+            'FIELD_LABELS' => 'labels',
+            'FIELDS_WITH_KEYWORDS' => 'auto', // can be 'auto', array of fields or comma separated string of field names, works only when OBJECT_METATAGS is specified
+
+            // page URIs
+            'URI_VIEW_ENTRY' => 'view-glossary',
+            'URI_AUTHOR_ENTRIES' => 'glossary-author',
+            'URI_ENTRIES_BY_CONTEXT' => 'glossary-context',
+            'URI_ADD_ENTRY' => 'create-glossary',
+            'URI_EDIT_ENTRY' => 'edit-glossary',
+            'URI_MANAGE_COMMON' => 'glossary-manage',
+
+            'URL_HOME' => 'page.php?i=glossary-home',
+            'URL_POPULAR' => 'page.php?i=glossary-popular',
+            'URL_UPDATED' => 'page.php?i=glossary-updated',
+            'URL_MANAGE_COMMON' => 'page.php?i=glossary-manage',
+            'URL_MANAGE_ADMINISTRATION' => 'page.php?i=glossary-administration',
+
+            // some params
+            'PARAM_CHARS_SUMMARY' => 'bx_glossary_summary_chars',
+            'PARAM_CHARS_SUMMARY_PLAIN' => 'bx_glossary_plain_summary_chars',
+            'PARAM_NUM_RSS' => 'bx_glossary_rss_num',
+            'PARAM_SEARCHABLE_FIELDS' => 'bx_glossary_searchable_fields',
+            'PARAM_PER_PAGE_BROWSE_SHOWCASE' => 'bx_glossary_per_page_browse_showcase',
+
+            // objects
+            'OBJECT_STORAGE' => 'bx_glossary_files',
+            'OBJECT_IMAGES_TRANSCODER_PREVIEW' => 'bx_glossary_preview',
+            'OBJECT_IMAGES_TRANSCODER_GALLERY' => 'bx_glossary_gallery',
+            'OBJECT_IMAGES_TRANSCODER_COVER' => 'bx_glossary_cover',
+            'OBJECT_VIDEOS_TRANSCODERS' => array(),
+            'OBJECT_REPORTS' => 'bx_glossary',
+            'OBJECT_VIEWS' => 'bx_glossary',
+            'OBJECT_VOTES' => 'bx_glossary',
+            'OBJECT_REACTIONS' => 'bx_glossary_reactions',
+            'OBJECT_SCORES' => 'bx_glossary',
+            'OBJECT_FAVORITES' => 'bx_glossary',
+            'OBJECT_FEATURED' => 'bx_glossary',
+            'OBJECT_METATAGS' => 'bx_glossary',
+            'OBJECT_COMMENTS' => 'bx_glossary',
+            'OBJECT_CATEGORY' => 'bx_glossary_cats',
+            'OBJECT_PRIVACY_VIEW' => 'bx_glossary_allow_view_to',
+            'OBJECT_FORM_ENTRY' => 'bx_glossary',
+            'OBJECT_FORM_ENTRY_DISPLAY_VIEW' => 'bx_glossary_entry_view',
+            'OBJECT_FORM_ENTRY_DISPLAY_ADD' => 'bx_glossary_entry_add',
+            'OBJECT_FORM_ENTRY_DISPLAY_EDIT' => 'bx_glossary_entry_edit',
+            'OBJECT_FORM_ENTRY_DISPLAY_DELETE' => 'bx_glossary_entry_delete',
+            'OBJECT_MENU_ACTIONS_VIEW_ENTRY' => 'bx_glossary_view', // actions menu on view entry page
+            'OBJECT_MENU_ACTIONS_VIEW_ENTRY_ALL' => 'bx_glossary_view_actions', // all actions menu on view entry page
+            'OBJECT_MENU_ACTIONS_MY_ENTRIES' => 'bx_glossary_my', // actions menu on my entries page
+            'OBJECT_MENU_SUBMENU' => 'bx_glossary_submenu', // main module submenu
+            'OBJECT_MENU_SUBMENU_VIEW_ENTRY' => 'bx_glossary_view_submenu', // view entry submenu
+            'OBJECT_MENU_SUBMENU_VIEW_ENTRY_MAIN_SELECTION' => 'glossary-home', // first item in view entry submenu from main module submenu
+            'OBJECT_MENU_SNIPPET_META' => 'bx_glossary_snippet_meta', // menu for snippet meta info
+            'OBJECT_MENU_MANAGE_TOOLS' => 'bx_glossary_menu_manage_tools', //manage menu in content administration tools
+            'OBJECT_GRID_ADMINISTRATION' => 'bx_glossary_administration',
+            'OBJECT_GRID_COMMON' => 'bx_glossary_common',
+            'OBJECT_UPLOADERS' => array('sys_simple', 'sys_html5'),
+
+            // menu items which visibility depends on custom visibility checking
+            'MENU_ITEM_TO_METHOD' => array (
+                'bx_glossary_my' => array (
+                    'create-glossary' => 'checkAllowedAdd',
+                ),
+                'bx_glossary_view' => $aMenuItems2Methods,
+            ),
+
+            // some language keys
+            'T' => array (
+                'txt_sample_single' => '_bx_glossary_txt_sample_single',
+                'txt_sample_single_with_article' => '_bx_glossary_txt_sample_single_with_article',
+                'txt_sample_comment_single' => '_bx_glossary_txt_sample_comment_single',
+                'txt_sample_vote_single' => '_bx_glossary_txt_sample_vote_single',
+                'txt_sample_reaction_single' => '_bx_glossary_txt_sample_reaction_single',
+                'txt_sample_score_up_single' => '_bx_glossary_txt_sample_score_up_single',
+                'txt_sample_score_down_single' => '_bx_glossary_txt_sample_score_down_single',
+                'form_field_author' => '_bx_glossary_form_entry_input_author',
+                'grid_action_err_delete' => '_bx_glossary_grid_action_err_delete',
+                'grid_txt_account_manager' => '_bx_glossary_grid_txt_account_manager',
+                'filter_item_active' => '_bx_glossary_grid_filter_item_title_adm_active',
+                'filter_item_hidden' => '_bx_glossary_grid_filter_item_title_adm_hidden',
+                'filter_item_pending' => '_bx_glossary_grid_filter_item_title_adm_pending',
+                'filter_item_select_one_filter1' => '_bx_glossary_grid_filter_item_title_adm_select_one_filter1',
+                'menu_item_manage_my' => '_bx_glossary_menu_item_title_manage_my',
+                'menu_item_manage_all' => '_bx_glossary_menu_item_title_manage_all',
+                'txt_all_entries_by' => '_bx_glossary_txt_all_entries_by',
+                'txt_all_entries_in' => '_bx_glossary_txt_all_entries_in',
+                'txt_all_entries_by_author' => '_bx_glossary_page_title_browse_by_author',
+                'txt_all_entries_by_context' => '_bx_glossary_page_title_browse_by_context',
+                'txt_pict_use_as_thumb' => '_bx_glossary_form_entry_input_picture_use_as_thumb'
+            ),
+        );
+
+        $this->_aJsClasses = array(
+            'manage_tools' => 'BxGlsrManageTools'
+        );
+
+        $this->_aJsObjects = array(
+            'manage_tools' => 'oBxGlsrManageTools'
+        );
+
+        $this->_aGridObjects = array(
+            'common' => $this->CNF['OBJECT_GRID_COMMON'],
+            'administration' => $this->CNF['OBJECT_GRID_ADMINISTRATION'],
+            
+        );
+    }
+}
+
+/** @} */

+ 136 - 0
modules/boonex/glossary/updates/10.0.0_10.0.1/source/install/config.php

@@ -0,0 +1,136 @@
+<?php
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Glossary Glossary
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+$aConfig = array(
+
+    /**
+      * Main Section.
+      */
+    'type' => BX_DOL_MODULE_TYPE_MODULE,
+    'name' => 'bx_glossary',
+    'title' => 'Glossary',
+    'note' => 'Glossary module.',
+    'version' => '10.0.1',
+    'vendor' => 'BoonEx',
+    'help_url' => 'http://feed.una.io/?section={module_name}',
+
+    'compatible_with' => array(
+        '10.0.0-B2'
+    ),
+
+    /**
+      * 'home_dir' and 'home_uri' - should be unique. Don't use spaces in 'home_uri' and the other special chars.
+      */
+    'home_dir' => 'boonex/glossary/',
+    'home_uri' => 'glossary',
+
+    'db_prefix' => 'bx_glossary_',
+    'class_prefix' => 'BxGlsr',
+
+    /**
+      * Category for language keys.
+      */
+    'language_category' => 'Glossary',
+
+    /**
+      * 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_glossary_files'
+    ),
+
+    /**
+      * Transcoders.
+      */
+    'transcoders' => array(
+        'bx_glossary_preview',
+        'bx_glossary_gallery',
+        'bx_glossary_cover'
+    ),
+
+    /**
+      * Extended Search Forms.
+      */
+    'esearches' => array(
+        'bx_glossary',
+        'bx_glossary_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'
+    ),
+
+);
+
+/** @} */

+ 227 - 0
modules/boonex/glossary/updates/10.0.0_10.0.1/source/install/langs/en.xml

@@ -0,0 +1,227 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources name="en" flag="gb" title="English">
+
+	<string name="_bx_glossary"><![CDATA[Glossary]]></string>
+	<string name="_bx_glossary_cmts"><![CDATA[Glossary' Comments]]></string>
+
+	<string name="_bx_glossary_option_summary_chars"><![CDATA[Number of characters in auto-cropped term summary]]></string>
+	<string name="_bx_glossary_option_plain_summary_chars"><![CDATA[Number of characters in plain term description when term hasn't thumb]]></string>
+	<string name="_bx_glossary_option_per_page_browse"><![CDATA[Number of items per page]]></string>
+	<string name="_bx_glossary_option_per_page_profile"><![CDATA[Number of items on profile/group page]]></string>
+	<string name="_bx_glossary_option_rss_num"><![CDATA[Number of items in RSS feed]]></string>
+	<string name="_bx_glossary_option_searchable_fields"><![CDATA[Searchable fields for keyword search]]></string>
+  <string name="_bx_glossary_option_activate_terms_after_creation"><![CDATA[Activate terms after creation]]></string>  
+
+  <string name="_bx_glossary_form_entry"><![CDATA[Glossary]]></string>
+	<string name="_bx_glossary_form_entry_display_add"><![CDATA[Add Term]]></string>
+	<string name="_bx_glossary_form_entry_display_edit"><![CDATA[Edit Term]]></string>
+	<string name="_bx_glossary_form_entry_display_delete"><![CDATA[Delete Term]]></string>
+	<string name="_bx_glossary_form_entry_display_view"><![CDATA[View Term]]></string>
+	<string name="_bx_glossary_form_entry_input_author"><![CDATA[Author]]></string>
+	<string name="_bx_glossary_form_entry_input_sys_do_submit"><![CDATA[Submit]]></string>
+	<string name="_bx_glossary_form_entry_input_do_submit"><![CDATA[Submit]]></string>
+	<string name="_bx_glossary_form_entry_input_sys_do_publish"><![CDATA[Publish]]></string>
+	<string name="_bx_glossary_form_entry_input_do_publish"><![CDATA[Publish]]></string>
+	<string name="_bx_glossary_form_entry_input_sys_title"><![CDATA[Title]]></string>
+	<string name="_bx_glossary_form_entry_input_title"><![CDATA[Title]]></string>
+	<string name="_bx_glossary_form_entry_input_title_err"><![CDATA[Title is essential. Please, fill in this field]]></string>
+	<string name="_bx_glossary_form_entry_input_sys_cat"><![CDATA[Category]]></string>
+	<string name="_bx_glossary_form_entry_input_cat"><![CDATA[Category]]></string>
+  <string name="_bx_glossary_form_entry_input_cat_err"><![CDATA[Please select category]]></string>
+  <string name="_bx_glossary_form_entry_input_status_admin_error"><![CDATA[Please select status]]></string>
+	<string name="_bx_glossary_form_entry_input_sys_text"><![CDATA[Text]]></string>
+	<string name="_bx_glossary_form_entry_input_text"><![CDATA[Text]]></string>
+	<string name="_bx_glossary_form_entry_input_text_err"><![CDATA[Text field can't be empty]]></string>
+	<string name="_bx_glossary_form_entry_input_sys_delete_confirm"><![CDATA[Delete confirmation]]></string>
+	<string name="_bx_glossary_form_entry_input_delete_confirm"><![CDATA[I am sure I want to delete this term]]></string>
+	<string name="_bx_glossary_form_entry_input_delete_confirm_info"><![CDATA[This action can not be undone]]></string>
+	<string name="_bx_glossary_form_entry_input_delete_confirm_error"><![CDATA[Please check this checkbox if you really want to delete the term]]></string>
+	<string name="_bx_glossary_form_entry_input_sys_pictures"><![CDATA[Pictures]]></string>
+	<string name="_bx_glossary_form_entry_input_pictures"><![CDATA[Pictures]]></string>
+    <string name="_bx_glossary_form_entry_input_sys_allow_view_to"><![CDATA[Visibility]]></string>
+    <string name="_bx_glossary_form_entry_input_allow_view_to"><![CDATA[Visibility]]></string>
+    <string name="_bx_glossary_form_entry_input_picture_use_as_thumb"><![CDATA[Cover Image]]></string>
+    <string name="_bx_glossary_form_entry_input_sys_date_added"><![CDATA[Created]]></string>
+    <string name="_bx_glossary_form_entry_input_date_added"><![CDATA[Created]]></string>
+    <string name="_bx_glossary_form_entry_input_sys_date_changed"><![CDATA[Updated]]></string>
+    <string name="_bx_glossary_form_entry_input_date_changed"><![CDATA[Updated]]></string>
+    <string name="_bx_glossary_form_entry_input_sys_status_admin"><![CDATA[Status]]></string>
+    <string name="_bx_glossary_form_entry_input_status_admin"><![CDATA[Status]]></string>
+
+	<string name="_bx_glossary_acl_action_create_entry"><![CDATA[Create Term]]></string>
+	<string name="_bx_glossary_acl_action_delete_entry"><![CDATA[Delete Term]]></string>
+	<string name="_bx_glossary_acl_action_view_entry"><![CDATA[View Term]]></string>
+	<string name="_bx_glossary_acl_action_set_thumb"><![CDATA[Set Term Thumbnail]]></string>
+	<string name="_bx_glossary_acl_action_edit_any_entry"><![CDATA[Edit Any Term]]></string>
+
+	<string name="_bx_glossary_page_title_sys_create_entry"><![CDATA[New Term]]></string>
+	<string name="_bx_glossary_page_title_create_entry"><![CDATA[New Term]]></string>
+	<string name="_bx_glossary_page_block_title_create_entry"><![CDATA[New Term]]></string>
+	<string name="_bx_glossary_page_title_sys_edit_entry"><![CDATA[Edit]]></string>
+	<string name="_bx_glossary_page_title_edit_entry"><![CDATA[Edit]]></string>
+	<string name="_bx_glossary_page_block_title_edit_entry"><![CDATA[Edit]]></string>
+    <string name="_bx_glossary_page_title_sys_delete_entry"><![CDATA[Delete]]></string>
+    <string name="_bx_glossary_page_title_delete_entry"><![CDATA[Delete]]></string>
+    <string name="_bx_glossary_page_block_title_delete_entry"><![CDATA[Delete]]></string>
+	<string name="_bx_glossary_page_title_sys_view_entry"><![CDATA[View Term]]></string>
+	<string name="_bx_glossary_page_title_view_entry"><![CDATA[{title}]]></string>
+	<string name="_bx_glossary_page_block_title_entry_text"><![CDATA[Term Text]]></string>
+	<string name="_bx_glossary_page_title_browse"><![CDATA[Glossary]]></string>
+	<string name="_bx_glossary_page_title_search_results"><![CDATA[Terms matching "{0}"]]></string>
+	<string name="_bx_glossary_page_title_browse_by_author"><![CDATA[Terms of {display_name}]]></string>
+  <string name="_bx_glossary_page_title_browse_by_context"><![CDATA[Terms in {display_name}]]></string>
+	<string name="_bx_glossary_page_title_browse_featured"><![CDATA[Featured Terms]]></string>
+    <string name="_bx_glossary_page_title_browse_recent"><![CDATA[Latest Terms]]></string>
+    <string name="_bx_glossary_page_title_browse_popular"><![CDATA[Popular Terms]]></string>
+    <string name="_bx_glossary_page_title_browse_alphabetical"><![CDATA[Alphabetical Index]]></string>
+    <string name="_bx_glossary_page_title_browse_updated"><![CDATA[Updated Terms]]></string>
+    <string name="_bx_glossary_page_title_sys_home"><![CDATA[Glossary Home]]></string>
+    <string name="_bx_glossary_page_title_home"><![CDATA[Glossary]]></string>
+    <string name="_bx_glossary_page_block_title_featured_entries_view_extended"><![CDATA[Featured Terms]]></string>
+    <string name="_bx_glossary_page_block_title_featured_entries_view_alphabetical"><![CDATA[Alphabetical Terms]]></string>
+    <string name="_bx_glossary_page_block_title_recent_entries"><![CDATA[Latest Terms (Gallery View)]]></string>
+    <string name="_bx_glossary_page_block_title_recent_entries_view_extended"><![CDATA[Latest Terms]]></string>
+    <string name="_bx_glossary_page_block_title_recent_entries_view_full"><![CDATA[Latest Terms (Full View)]]></string>
+    <string name="_bx_glossary_page_block_title_entry_social_sharing"><![CDATA[Share]]></string>
+    <string name="_bx_glossary_page_block_title_entry_author"><![CDATA[Author]]></string>
+    <string name="_bx_glossary_page_block_title_entry_actions"><![CDATA[Actions]]></string>
+    <string name="_bx_glossary_page_block_title_entry_comments"><![CDATA[Comments]]></string>
+    <string name="_bx_glossary_page_block_title_entry_comments_link"><![CDATA[Comments to <a href="{entry_link}">{title}</a>]]></string>
+    <string name="_bx_glossary_page_block_title_entry_attachments"><![CDATA[Attachments]]></string>
+    <string name="_bx_glossary_page_block_title_entry_all_actions"><![CDATA[All Actions]]></string>
+    <string name="_bx_glossary_page_title_sys_entries_popular"><![CDATA[Popular Terms]]></string>
+    <string name="_bx_glossary_page_title_entries_popular"><![CDATA[Popular Terms]]></string>
+    <string name="_bx_glossary_page_title_sys_entries_updated"><![CDATA[Updated Terms]]></string>
+    <string name="_bx_glossary_page_title_entries_updated"><![CDATA[Updated Terms]]></string>
+    <string name="_bx_glossary_page_title_sys_entries_search"><![CDATA[Search]]></string>
+    <string name="_bx_glossary_page_title_entries_search"><![CDATA[Search]]></string>
+    <string name="_bx_glossary_page_block_title_search_form"><![CDATA[Search Form]]></string>
+    <string name="_bx_glossary_page_block_title_search_results"><![CDATA[Search Results]]></string>
+    <string name="_bx_glossary_page_block_title_search_form_cmts"><![CDATA[Comments Search Form]]></string>
+    <string name="_bx_glossary_page_block_title_search_results_cmts"><![CDATA[Comments Search Results]]></string>
+    <string name="_bx_glossary_page_block_title_popular_entries"><![CDATA[Popular Terms]]></string>
+    <string name="_bx_glossary_page_block_title_popular_entries_view_extended"><![CDATA[Popular Terms (Extended View)]]></string>
+    <string name="_bx_glossary_page_block_title_popular_entries_view_full"><![CDATA[Popular Terms (Full View)]]></string>
+    <string name="_bx_glossary_page_block_title_updated_entries"><![CDATA[Updated Terms]]></string>
+    <string name="_bx_glossary_page_title_sys_view_entry_comments"><![CDATA[Term Comments]]></string>
+    <string name="_bx_glossary_page_title_view_entry_comments"><![CDATA[Comments to {title}]]></string>
+    <string name="_bx_glossary_page_title_sys_entries_of_author"><![CDATA[Terms of author]]></string>
+    <string name="_bx_glossary_page_title_entries_of_author"><![CDATA[Terms by {display_name}]]></string>
+    <string name="_bx_glossary_page_block_title_favorites_of_author"><![CDATA[Favorites by <a href="{profile_link}">{display_name}</a>]]></string>
+    <string name="_bx_glossary_page_block_title_sys_favorites_of_author"><![CDATA[Favorites of author]]></string>
+    <string name="_bx_glossary_page_block_title_entries_of_author"><![CDATA[Terms by <a href="{profile_link}">{display_name}</a>]]></string>
+    <string name="_bx_glossary_page_title_sys_entries_in_context"><![CDATA[Terms in context]]></string>
+    <string name="_bx_glossary_page_title_entries_in_context"><![CDATA[Terms in {display_name}]]></string>
+    <string name="_bx_glossary_page_block_title_sys_entries_of_author"><![CDATA[Terms of author]]></string>
+    <string name="_bx_glossary_page_block_title_entries_in_context"><![CDATA[Terms in <a href="{profile_link}">{display_name}</a>]]></string>
+    <string name="_bx_glossary_page_block_title_sys_entries_in_context"><![CDATA[Terms in context]]></string>
+    <string name="_bx_glossary_page_block_title_entries_actions"><![CDATA[Terms actions]]></string>
+    <string name="_bx_glossary_page_block_title_browse_cmts"><![CDATA[Terms' Comments]]></string>
+	<string name="_bx_glossary_page_title_sys_manage"><![CDATA[Manage Own]]></string>
+	<string name="_bx_glossary_page_title_sys_manage_administration"><![CDATA[Manage All]]></string> 
+	<string name="_bx_glossary_page_title_manage"><![CDATA[Manage]]></string>
+	<string name="_bx_glossary_page_block_title_system_manage"><![CDATA[Manage Own]]></string>
+	<string name="_bx_glossary_page_block_title_system_manage_administration"><![CDATA[Manage All]]></string>
+	<string name="_bx_glossary_page_block_title_manage"><![CDATA[Manage]]></string>    
+	<string name="_bx_glossary_page_block_title_popular_keywords"><![CDATA[Popular Hashtags]]></string>
+	<string name="_bx_glossary_page_block_title_cats"><![CDATA[Terms Categories]]></string>
+	<string name="_bx_glossary_page_block_title_entry_info"><![CDATA[Info]]></string>
+	<string name="_bx_glossary_page_block_title_my_entries"><![CDATA[My Terms]]></string>
+    <string name="_bx_glossary_page_block_title_sys_recent_entries_view_showcase"><![CDATA[Latest Terms (Showcase View)]]></string>
+    <string name="_bx_glossary_page_block_title_recent_entries_view_showcase"><![CDATA[Latest Terms]]></string>
+    <string name="_bx_glossary_page_block_title_sys_popular_entries_view_showcase"><![CDATA[Popular Terms (Showcase View)]]></string>
+    <string name="_bx_glossary_page_block_title_popular_entries_view_showcase"><![CDATA[Popular Terms]]></string>
+    <string name="_bx_glossary_page_block_title_sys_featured_entries_view_showcase"><![CDATA[Featured Terms (Showcase View)]]></string>
+    <string name="_bx_glossary_page_block_title_featured_entries_view_showcase"><![CDATA[Featured Terms]]></string>
+	<string name="_bx_glossary_page_block_title_sys_entry_context"><![CDATA[Posted in]]></string>
+	<string name="_bx_glossary_page_block_title_entry_context"><![CDATA[Posted in]]></string>
+
+    <string name="_bx_glossary_menu_set_title_view_entry"><![CDATA[Term Actions]]></string>
+    <string name="_bx_glossary_menu_title_view_entry"><![CDATA[Term Actions]]></string>
+    <string name="_bx_glossary_menu_title_submenu"><![CDATA[Glossary Submenu]]></string>
+    <string name="_bx_glossary_menu_set_title_submenu"><![CDATA[Glossary Submenu]]></string>
+    <string name="_bx_glossary_menu_item_title_system_create_entry"><![CDATA[Term]]></string>
+    <string name="_bx_glossary_menu_item_title_create_entry"><![CDATA[Term]]></string>
+    <string name="_bx_glossary_menu_item_title_system_edit_entry"><![CDATA[Edit]]></string>
+    <string name="_bx_glossary_menu_item_title_edit_entry"><![CDATA[Edit]]></string>
+    <string name="_bx_glossary_menu_item_title_system_delete_entry"><![CDATA[Delete]]></string>
+    <string name="_bx_glossary_menu_item_title_delete_entry"><![CDATA[Delete]]></string>
+    <string name="_bx_glossary_menu_item_title_system_view_entry"><![CDATA[View Term]]></string>
+    <string name="_bx_glossary_menu_item_title_system_entries_home"><![CDATA[Glossary]]></string>
+    <string name="_bx_glossary_menu_item_title_entries_home"><![CDATA[Glossary]]></string>
+    <string name="_bx_glossary_menu_item_title_system_entries_public"><![CDATA[Alphabetical]]></string>
+    <string name="_bx_glossary_menu_item_title_entries_public"><![CDATA[Alphabetical]]></string>
+    <string name="_bx_glossary_menu_item_title_system_entries_manage"><![CDATA[Manage]]></string>
+    <string name="_bx_glossary_menu_item_title_entries_manage"><![CDATA[Manage]]></string>
+    <string name="_bx_glossary_menu_item_title_system_entries_popular"><![CDATA[Popular]]></string>
+    <string name="_bx_glossary_menu_item_title_entries_popular"><![CDATA[Popular]]></string>
+    <string name="_bx_glossary_menu_item_title_system_entries_search"><![CDATA[Search]]></string>
+    <string name="_bx_glossary_menu_item_title_entries_search"><![CDATA[Search]]></string>
+    <string name="_bx_glossary_menu_title_view_entry_submenu"><![CDATA[View Glossary Submenu]]></string>
+    <string name="_bx_glossary_menu_set_title_view_entry_submenu"><![CDATA[View Glossary Submenu]]></string>
+    <string name="_bx_glossary_menu_item_title_view_entry_submenu_entry"><![CDATA[Term]]></string>
+    <string name="_bx_glossary_menu_item_title_view_entry_submenu_comments"><![CDATA[Comments]]></string>
+    <string name="_bx_glossary_menu_item_title_system_view_entry_comments"><![CDATA[Term Comments]]></string>
+    <string name="_bx_glossary_menu_item_title_system_view_entries_author"><![CDATA[Glossary]]></string>
+    <string name="_bx_glossary_menu_item_title_view_entries_author"><![CDATA[Glossary]]></string>
+    <string name="_bx_glossary_menu_item_title_system_view_entries_in_context"><![CDATA[Glossary]]></string>
+    <string name="_bx_glossary_menu_item_title_view_entries_in_context"><![CDATA[Glossary]]></string>
+    <string name="_bx_glossary_menu_title_entries_my"><![CDATA[My Glossary Action Menu]]></string>
+    <string name="_bx_glossary_menu_set_title_entries_my"><![CDATA[My Glossary Menu]]></string>
+	<string name="_bx_glossary_menu_item_title_system_manage_my_glossary"><![CDATA[My terms]]></string>
+    <string name="_bx_glossary_menu_item_title_manage_my_glossary"><![CDATA[Terms]]></string>
+    <string name="_bx_glossary_menu_set_title_manage_tools"><![CDATA[Manage Tools Submenu]]></string>
+    <string name="_bx_glossary_menu_title_manage_tools"><![CDATA[Manage Tools Submenu]]></string>
+    <string name="_bx_glossary_menu_item_title_system_manage_account"><![CDATA[Manage account]]></string>
+    <string name="_bx_glossary_menu_item_title_manage_account"><![CDATA[Manage account]]></string>
+	<string name="_bx_glossary_menu_item_title_system_admt_glossary"><![CDATA[Glossary]]></string>
+	<string name="_bx_glossary_menu_item_title_admt_glossary"><![CDATA[Glossary]]></string>
+	<string name="_bx_glossary_menu_item_title_manage_my"><![CDATA[My Terms]]></string>
+	<string name="_bx_glossary_menu_item_title_manage_all"><![CDATA[All Terms]]></string>
+
+	<string name="_bx_glossary_grid_filter_item_title_adm_select_one_filter1"><![CDATA[All Statuses]]></string>
+	<string name="_bx_glossary_grid_filter_item_title_adm_active"><![CDATA[Active]]></string>
+	<string name="_bx_glossary_grid_filter_item_title_adm_hidden"><![CDATA[Hidden]]></string>
+  <string name="_bx_glossary_grid_filter_item_title_adm_pending"><![CDATA[Pending]]></string>
+  <string name="_bx_glossary_grid_column_title_adm_active"><![CDATA[Active]]></string>
+    <string name="_bx_glossary_grid_column_title_adm_title"><![CDATA[Title]]></string>
+    <string name="_bx_glossary_grid_column_title_adm_added"><![CDATA[Added]]></string>
+    <string name="_bx_glossary_grid_column_title_adm_author"><![CDATA[Author]]></string>
+    <string name="_bx_glossary_grid_action_title_adm_edit"><![CDATA[Edit]]></string>
+    <string name="_bx_glossary_grid_action_title_adm_delete"><![CDATA[Delete]]></string>
+    <string name="_bx_glossary_grid_action_title_adm_more_actions"><![CDATA[More Actions]]></string>
+    <string name="_bx_glossary_grid_action_err_delete"><![CDATA[Cannot delete the selected term(s).]]></string>
+    <string name="_bx_glossary_grid_txt_account_manager"><![CDATA[Redirect to manage account.]]></string>
+
+    <string name="_bx_glossary_chart_growth"><![CDATA[Terms: Growth]]></string>
+    <string name="_bx_glossary_chart_growth_speed"><![CDATA[Terms: Growth Speed]]></string>
+
+    <string name="_bx_glossary_search_extended"><![CDATA[Terms Search]]></string>
+    <string name="_bx_glossary_search_extended_cmts"><![CDATA[Terms Comments Search]]></string>
+
+    <string name="_bx_glossary_pre_lists_cats"><![CDATA[Term categories]]></string>
+    <string name="_bx_glossary_cat_Nouns"><![CDATA[Nouns]]></string>
+    <string name="_bx_glossary_cat_Pronouns"><![CDATA[Pronouns]]></string>
+    <string name="_bx_glossary_cat_Verbs"><![CDATA[Verbs]]></string>
+    <string name="_bx_glossary_cat_Adverbs"><![CDATA[Adverbs]]></string>
+    <string name="_bx_glossary_cat_Adjectives"><![CDATA[Adjectives]]></string>
+    <string name="_bx_glossary_cat_Interjections"><![CDATA[Interjections]]></string>
+    <string name="_bx_glossary_cat_Prepositions"><![CDATA[Prepositions]]></string>
+    <string name="_bx_glossary_cat_Infinitives"><![CDATA[Infinitives]]></string>
+
+    <string name="_bx_glossary_pre_lists_statuses"><![CDATA[Term status]]></string>
+    <string name="_bx_glossary_item_admin_status_active"><![CDATA[Active]]></string>
+    <string name="_bx_glossary_item_admin_status_hidden"><![CDATA[Hidden]]></string>
+    <string name="_bx_glossary_item_admin_status_pending"><![CDATA[Pending]]></string>
+
+    <string name="_bx_glossary_txt_all_entries_by"><![CDATA[{0} terms]]></string>
+    <string name="_bx_glossary_txt_all_entries_in"><![CDATA[<a href="{0}">All Terms in {1} ({2})</a>]]></string>
+    <string name="_bx_glossary_txt_sample_single"><![CDATA[term]]></string>
+    <string name="_bx_glossary_txt_sample_single_with_article"><![CDATA[a term]]></string>
+    <string name="_bx_glossary_txt_sample_comment_single"><![CDATA[comment to term]]></string>
+    <string name="_bx_glossary_txt_sample_vote_single"><![CDATA[vote to term]]></string>
+    <string name="_bx_glossary_txt_sample_reaction_single"><![CDATA['{0}' reaction to term]]></string>
+    <string name="_bx_glossary_txt_sample_score_up_single"><![CDATA[score up vote to term]]></string>
+    <string name="_bx_glossary_txt_sample_score_down_single"><![CDATA[score down vote to term]]></string>
+    <string name="_bx_glossary_txt_term_in_pending_status"><![CDATA[This term is pending approval.]]></string>
+</resources>

+ 51 - 0
modules/boonex/lucid/updates/10.0.0_10.0.1/install/config.php

@@ -0,0 +1,51 @@
+<?php
+/**
+ * Copyright (c) BoonEx Pty Limited - http://www.boonex.com/
+ * CC-BY License - http://creativecommons.org/licenses/by/3.0/
+ */
+
+$aConfig = array(
+    /**
+     * Main Section.
+     */
+    'title' => 'Lucid',
+    'version_from' => '10.0.0',
+    'version_to' => '10.0.1',
+    'vendor' => 'BoonEx',
+
+    'compatible_with' => array(
+        '10.0.0-B2'
+    ),
+
+    /**
+     * 'home_dir' and 'home_uri' - should be unique. Don't use spaces in 'home_uri' and the other special chars.
+     */
+    'home_dir' => 'boonex/lucid/updates/update_10.0.0_10.0.1/',
+    'home_uri' => 'lucid_update_1000_1001',
+
+    'module_dir' => 'boonex/lucid/',
+    'module_uri' => 'lucid',
+
+    'db_prefix' => 'bx_lucid_',
+    'class_prefix' => 'BxLucid',
+
+    /**
+     * Installation/Uninstallation Section.
+     */
+    'install' => array(
+        'execute_sql' => 1,
+        'update_files' => 1,
+        'update_languages' => 0,
+        'clear_db_cache' => 1,
+    ),
+
+    /**
+     * Category for language keys.
+     */
+    'language_category' => 'Boonex Lucid Template',
+
+    /**
+     * Files Section
+     */
+    'delete_files' => array(),
+);

+ 26 - 0
modules/boonex/lucid/updates/10.0.0_10.0.1/install/installer.php

@@ -0,0 +1,26 @@
+<?php
+/**
+ * Copyright (c) BoonEx Pty Limited - http://www.boonex.com/
+ * CC-BY License - http://creativecommons.org/licenses/by/3.0/
+ */
+
+class BxLucidUpdater extends BxDolStudioUpdater
+{
+    function __construct($aConfig)
+    {
+        parent::__construct($aConfig);
+    }
+
+    public function update($aParams)
+    {
+        $aResult = parent::update($aParams);
+        if(!$aResult['result'])
+            return $aResult;
+
+        $oCacheUtilities = BxDolCacheUtilities::getInstance();
+        $oCacheUtilities->clear('css');
+        $oCacheUtilities->clear('template');
+
+        return $aResult;
+    }
+}

+ 17 - 0
modules/boonex/lucid/updates/10.0.0_10.0.1/install/sql/install.sql

@@ -0,0 +1,17 @@
+SET @sName = 'bx_lucid';
+
+
+-- SETTINGS
+UPDATE `sys_options` SET `value`='100%' WHERE `name`=CONCAT(@sName, '_vpt_font_size_scale');
+
+UPDATE `sys_options` SET `value`='87.5%' WHERE `name`=CONCAT(@sName, '_vpm_font_size_scale');
+
+
+-- MIXES
+SET @iMixId = (SELECT `id` FROM `sys_options_mixes` WHERE `type`=@sName AND `name`='Light-Mix' LIMIT 1);
+UPDATE sys_options_mixes2options SET `value`='100%' WHERE `option`='bx_lucid_vpt_font_size_scale' AND `mix_id`=@iMixId;
+UPDATE sys_options_mixes2options SET `value`='87.5%' WHERE `option`='bx_lucid_vpm_font_size_scale' AND `mix_id`=@iMixId;
+UPDATE sys_options_mixes2options SET `value`='8px' WHERE `option`='bx_lucid_cover_border_radius' AND `mix_id`=@iMixId;
+UPDATE sys_options_mixes2options SET `value`='1px' WHERE `option`='bx_lucid_cover_border_size' AND `mix_id`=@iMixId;
+UPDATE sys_options_mixes2options SET `value`='rgba(20, 80, 100, 0.1)' WHERE `option`='bx_lucid_cover_border_color' AND `mix_id`=@iMixId;
+UPDATE sys_options_mixes2options SET `value`='0px 2px 6px 0px rgba(0, 0, 0, 0.05)' WHERE `option`='bx_lucid_cover_shadow' AND `mix_id`=@iMixId;

+ 11 - 0
modules/boonex/lucid/updates/10.0.0_10.0.1/source/data/template/bx_events/menu_main_submenu.html

@@ -0,0 +1,11 @@
+<div class="bx-menu-main-submenu-wrp bx-menu-profile-view-submenu-wrp">
+    <div class="bx-menu-main-submenu-group">
+        <ul id="bx-menu-main-submenu" class="bx-menu-main-submenu<bx_if:show_more_auto_class> bx-menu-more-auto</bx_if:show_more_auto_class> bx-menu-object-__object__ bx-clearfix">
+            <bx_repeat:menu_items>
+                <li class="bx-menu-item bx-menu-item-__name__ bx-def-padding-sec-leftright bx-def-color-bg-hl-hover bx-def-box-sizing __class_add__"><a href="__link__" target="__target__" onclick="__onclick__">__title__</a><div class="bx-mms-item-hr"></div>__popup__</li>
+            </bx_repeat:menu_items>
+        </ul>
+        <div class="bx-menu-main-submenu-hr"></div>
+    </div>
+</div>
+__js_code__

+ 9 - 0
modules/boonex/lucid/updates/10.0.0_10.0.1/source/data/template/bx_forum/css/main.css

@@ -0,0 +1,9 @@
+@import url(../../../../../forum/template/css/main.css);
+
+.cmt-reply.cmt-reply-bottom.bx-def-box {
+    margin-top: 1rem;
+}
+
+.cmt.bx-def-box .cmt-info > .bx-def-hr {
+    display: none;
+}

+ 11 - 0
modules/boonex/lucid/updates/10.0.0_10.0.1/source/data/template/bx_groups/menu_main_submenu.html

@@ -0,0 +1,11 @@
+<div class="bx-menu-main-submenu-wrp bx-menu-profile-view-submenu-wrp">
+    <div class="bx-menu-main-submenu-group">
+        <ul id="bx-menu-main-submenu" class="bx-menu-main-submenu<bx_if:show_more_auto_class> bx-menu-more-auto</bx_if:show_more_auto_class> bx-menu-object-__object__ bx-clearfix">
+            <bx_repeat:menu_items>
+                <li class="bx-menu-item bx-menu-item-__name__ bx-def-padding-sec-leftright bx-def-color-bg-hl-hover bx-def-box-sizing __class_add__"><a href="__link__" target="__target__" onclick="__onclick__">__title__</a><div class="bx-mms-item-hr"></div>__popup__</li>
+            </bx_repeat:menu_items>
+        </ul>
+        <div class="bx-menu-main-submenu-hr"></div>
+    </div>
+</div>
+__js_code__

+ 11 - 0
modules/boonex/lucid/updates/10.0.0_10.0.1/source/data/template/bx_organizations/menu_main_submenu.html

@@ -0,0 +1,11 @@
+<div class="bx-menu-main-submenu-wrp bx-menu-profile-view-submenu-wrp">
+    <div class="bx-menu-main-submenu-group">
+        <ul id="bx-menu-main-submenu" class="bx-menu-main-submenu<bx_if:show_more_auto_class> bx-menu-more-auto</bx_if:show_more_auto_class> bx-menu-object-__object__ bx-clearfix">
+            <bx_repeat:menu_items>
+                <li class="bx-menu-item bx-menu-item-__name__ bx-def-padding-sec-leftright bx-def-color-bg-hl-hover bx-def-box-sizing __class_add__"><a href="__link__" target="__target__" onclick="__onclick__">__title__</a><div class="bx-mms-item-hr"></div>__popup__</li>
+            </bx_repeat:menu_items>
+        </ul>
+        <div class="bx-menu-main-submenu-hr"></div>
+    </div>
+</div>
+__js_code__

+ 11 - 0
modules/boonex/lucid/updates/10.0.0_10.0.1/source/data/template/bx_persons/menu_main_submenu.html

@@ -0,0 +1,11 @@
+<div class="bx-menu-main-submenu-wrp bx-menu-profile-view-submenu-wrp">
+    <div class="bx-menu-main-submenu-group">
+        <ul id="bx-menu-main-submenu" class="bx-menu-main-submenu<bx_if:show_more_auto_class> bx-menu-more-auto</bx_if:show_more_auto_class> bx-menu-object-__object__ bx-clearfix">
+            <bx_repeat:menu_items>
+                <li class="bx-menu-item bx-menu-item-__name__ bx-def-padding-sec-leftright bx-def-color-bg-hl-hover bx-def-box-sizing __class_add__"><a href="__link__" target="__target__" onclick="__onclick__">__title__</a><div class="bx-mms-item-hr"></div>__popup__</li>
+            </bx_repeat:menu_items>
+        </ul>
+        <div class="bx-menu-main-submenu-hr"></div>
+    </div>
+</div>
+__js_code__

+ 11 - 0
modules/boonex/lucid/updates/10.0.0_10.0.1/source/data/template/bx_spaces/menu_main_submenu.html

@@ -0,0 +1,11 @@
+<div class="bx-menu-main-submenu-wrp bx-menu-profile-view-submenu-wrp">
+    <div class="bx-menu-main-submenu-group">
+        <ul id="bx-menu-main-submenu" class="bx-menu-main-submenu<bx_if:show_more_auto_class> bx-menu-more-auto</bx_if:show_more_auto_class> bx-menu-object-__object__ bx-clearfix">
+            <bx_repeat:menu_items>
+                <li class="bx-menu-item bx-menu-item-__name__ bx-def-padding-sec-leftright bx-def-color-bg-hl-hover bx-def-box-sizing __class_add__"><a href="__link__" target="__target__" onclick="__onclick__">__title__</a><div class="bx-mms-item-hr"></div>__popup__</li>
+            </bx_repeat:menu_items>
+        </ul>
+        <div class="bx-menu-main-submenu-hr"></div>
+    </div>
+</div>
+__js_code__

+ 48 - 0
modules/boonex/lucid/updates/10.0.0_10.0.1/source/data/template/system/_sub_header.html

@@ -0,0 +1,48 @@
+<bx_include_auto:_header.html />
+
+<div class="bx-main <bx_injection:injection_main_class />">
+        <bx_injection:top />
+
+        <div id="bx-toolbar" class="bx-header bx-def-image-bg-header bx-def-color-bg-header bx-def-border-header bx-shadow-header bx-def-z-index-nav cd-main-header">
+            <div class="bx-toolbar-content-hgap bx-def-padding-sec-leftright bx-def-box-sizing">
+                <div class="bx-toolbar-content-wrapper bx-content-padding-header">
+                    <div id="bx-toolbar-content" class="bx-toolbar-content bx-clearfix">
+                        <div id="bx-menu-toolbar-1-container" class="bx-toolbar-item bx-ti-left">
+                            <!-- <a href="#0" class="cd-nav-trigger cd-dropdown-trigger">Menu<span></span></a> -->
+
+                            <bx_menu:sys_toolbar_site />
+                        </div>
+                        <div id="bx-logo-container" class="bx-toolbar-item bx-ti-logo">
+                            <bx_injection:injection_logo_before />
+                                __main_logo__
+                            <bx_injection:injection_logo_after />
+                        </div>
+                        <div id="bx-menu-main-container" class="bx-toolbar-item bx-ti-menu bx-ti-stretcher">
+                                                    <bx_menu:sys_site />
+                        </div>
+                        <div id="bx-menu-toolbar-2-container" class="bx-toolbar-item bx-ti-right cd-nav">
+                            <bx_menu:sys_toolbar_member />
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+
+	<div class="cd-main-content-wrp">
+            <div class="cd-main-content bx-clearfix">
+            <div class="content-wrapper-wrp">
+                <div class="content-wrapper bx-def-box-sizing">
+                    <bx_injection:injection_between_cover_logo />
+                    __cover__
+                    <bx_injection:injection_between_cover_top_menu />
+
+                    <bx_menu:sys_site_submenu />
+
+                    <bx_injection:injection_between_content_menu />
+
+                    <div id="bx-content-wrapper" class="bx-content-wrapper">
+                        __informer__
+                        <div class="bx-page-wrapper bx-def-centered bx-def-padding-sec-leftright bx-def-page-width bx-def-box-sizing">
+                            <div id="bx-content-container" class="bx-def-padding-sec-left bx-def-padding-sec-right">
+                                <bx_injection:injection_content_before />
+                                <div id="bx-content-main" class="bx-def-margin-sec-topbottom">

+ 48 - 0
modules/boonex/lucid/updates/10.0.0_10.0.1/source/data/template/system/css/cmts.css

@@ -0,0 +1,48 @@
+@import url(../../../../../../../template/css/cmts.css);
+
+div.cmts ul.cmts-margin,
+div.cmts div.cmt-reply-margin {
+	margin-top: 1rem;
+	padding-left: 2.5rem;
+}
+
+div.cmts li .cmt-cnt {
+	border: 1px solid transparent;
+}
+
+div.cmts li.cmt div.cmt-cnt .bx-def-hr {
+	border-color: rgba(20, 80, 100, 0.1);
+}
+
+div.cmts li.cmt div.cmt-cnt .cmt-info.bx-def-thumb-size-left-indent {
+	margin-left: 2.5rem;
+}
+
+div.cmts li.cmt div.cmt-cnt div.cmt-head .cmt-meta-username {
+	font-weight: 600;
+	font-size: 0.875rem;
+}
+div.cmts li.cmt div.cmt-cnt div.cmt-head .cmt-meta-ago,
+div.cmts li.cmt div.cmt-cnt div.cmt-head .cmt-meta-ago a {
+	color: #cccccc;
+}
+
+div.cmts li.cmt div.cmt-cnt div.cmt-cont,
+div.cmts li.cmt div.cmt-cnt div.cmt-cont p {
+	margin-top: 0.5rem;
+	margin-bottom: 0.5rem;
+}
+
+div.cmts li.cmt div.cmt-cnt div.cmt-cont .cmt-body {
+	font-size: 0.875rem;
+}
+
+div.cmts li.cmt div.cmt-cnt .cmt-actions .bx-menu-custom.bx-menu-hor > li > span {
+	margin-top: 0;
+	margin-bottom: 0;
+}
+
+div.cmts li.cmt div.cmt-cnt .cmt-actions .cmt-comment-manage-link {
+	margin-top: 0;
+	margin-bottom: 0;
+}

+ 5 - 0
modules/boonex/lucid/updates/10.0.0_10.0.1/source/data/template/system/css/cover.css

@@ -0,0 +1,5 @@
+@import url(../../../../../../../template/css/cover.css);
+.bx-menu-toolbar-padding .bx-cover-wrapper {
+    border-top-left-radius: 0;
+    border-top-right-radius: 0;
+}

+ 1179 - 0
modules/boonex/lucid/updates/10.0.0_10.0.1/source/data/template/system/css/default.less

@@ -0,0 +1,1179 @@
+@import '../../../../../../../template/css/default.less';
+
+/**
+ * Is used for inputs and buttons. They should have the same value 
+ * because Input and Button can be positioned in one line.
+ */
+@base-input-box-sizing: border-box;
+
+
+/* viewport */
+html.bx-media-tablet {
+    font-size: @bx-viewport-font-tablet !important;
+}
+
+html.bx-media-phone {
+	font-size: @bx-viewport-font-mobile !important;
+}
+
+/* height */
+.bx-header {
+    height: auto !important;
+}
+
+#bx-toolbar-content {
+	height: @bx-height-header !important;
+}
+
+.bx-toolbar-item .bx-menu-toolbar .bx-menu-toolbar-item a img:not(.bx-def-thumb-size) {
+    max-width: @bx-height-header - 2;
+    max-height: @bx-height-header - 2;
+}
+
+.cd-main-content .content-wrapper {
+    padding-top: @bx-height-header;
+}
+
+
+/* content paddings */
+.bx-content-padding-header {
+	padding: @bx-content-padding-header;
+}
+.bx-content-padding-footer {
+	padding: @bx-content-padding-footer;
+}
+.bx-content-padding-block {
+	padding: @bx-content-padding-block;
+}
+
+
+/* shadow */
+.bx-shadow-header {
+    -webkit-box-shadow: @bx-shadow-header;
+    -moz-box-shadow: @bx-shadow-header;
+    box-shadow: @bx-shadow-header;
+}
+.bx-shadow-footer {
+    -webkit-box-shadow: @bx-shadow-footer;
+    -moz-box-shadow: @bx-shadow-footer;
+    box-shadow: @bx-shadow-footer;
+}
+.bx-shadow-block {
+    -webkit-box-shadow: @bx-shadow-block;
+    -moz-box-shadow: @bx-shadow-block;
+    box-shadow: @bx-shadow-block;
+}
+.bx-def-box {
+    -webkit-box-shadow: @bx-shadow-card;
+    -moz-box-shadow: @bx-shadow-card;
+    box-shadow: @bx-shadow-card;
+}
+.bx-popup-applied {
+    border-radius: @bx-border-radius-popup;
+    background-clip: padding-box;
+}
+.bx-popup-applied:not(.bx-popup-chain),
+.bx-popup-applied.bx-popup-chain .bx-popup-chain-item {
+    -webkit-box-shadow: @bx-shadow-popup;
+    -moz-box-shadow: @bx-shadow-popup;
+    box-shadow: @bx-shadow-popup;
+}
+.bx-popup-applied.bx-popup-chain .bx-popup-chain-item a:hover {
+    background-color: @bx-color-hl;
+}
+.bx-popup-wrapper.bx-popup-slide-wrapper {
+    -webkit-box-shadow: @bx-shadow-menu-slide;
+    -moz-box-shadow: @bx-shadow-menu-slide;
+    box-shadow: @bx-shadow-menu-slide;
+}
+
+
+/* background images */
+.bx-def-image-bg-header,
+.bx-def-image-bg-footer,
+.bx-def-image-bg-page,
+.bx-def-image-bg-block,
+.bx-def-box,
+.bx-popup-color-bg,
+.bx-popup-wrapper.bx-popup-slide-wrapper,
+#bx-sliding-menu-sys_site.bx-sliding-smenu-main,
+#bx-sliding-menu-sys_add_content.bx-sliding-menu-main,
+#bx-sliding-menu-account.bx-sliding-menu-main,
+.bx-menu-main-bar-wrapper {
+    background-position: center center;
+}
+.bx-def-image-bg-header {
+	background-image: @bx-image-bg-header;
+	background-repeat: @bx-image-bg-header-repeat;
+    background-size: @bx-image-bg-header-size;
+}
+.bx-def-image-bg-footer {
+	background-image: @bx-image-bg-footer;
+	background-repeat: @bx-image-bg-footer-repeat;
+    background-size: @bx-image-bg-footer-size;
+}
+.bx-def-image-bg-page {
+	background-image: @bx-image-bg-page;
+	background-repeat: @bx-image-bg-page-repeat;
+    background-size: @bx-image-bg-page-size;
+}
+.bx-def-image-bg-block {
+	background-image: @bx-image-bg-block;
+	background-repeat: @bx-image-bg-block-repeat;
+    background-size: @bx-image-bg-block-size;
+}
+.bx-def-box {
+	background-image: @bx-image-bg-box;
+	background-repeat: @bx-image-bg-box-repeat;
+	background-attachment: @bx-image-bg-box-attachment;
+    background-size: @bx-image-bg-box-size;
+}
+
+/* body */
+a {
+    color: @bx-color-link-body; 
+}
+a:hover {
+    color: @bx-color-link-body-hover; 
+}
+.sys-icon:not(.sys-colored),
+.sys-icon-a:not(.sys-colored) {
+    color: @bx-color-icon-body; 
+}
+a:hover > .sys-icon:not(.sys-colored),
+a:hover > .sys-icon-a:not(.sys-colored) {
+    color: @bx-color-icon-body-hover; 
+}
+.sys-icon-a i {
+    .background-color (@bx-color-icon-body) !important;
+    color: @bx-color-icon-body;
+}
+a:hover > .sys-icon-a i {
+    .background-color (@bx-color-icon-body-hover) !important;
+    color: @bx-color-icon-body-hover;
+}
+
+/* header */
+.bx-header.bx-def-color-bg-header {
+    .background-color (@bx-color-header);
+}
+.bx-header.bx-def-border-header {
+    border-bottom-width: @bx-border-width-header;
+    border-bottom-style: @bx-border-type;
+    border-bottom-color: @bx-color-border-header;
+}
+.bx-header a {
+	color: @bx-color-link-header; 
+}
+.bx-header a:hover {
+	color: @bx-color-link-header-hover;
+}
+.bx-header .sys-icon,
+.bx-header .sys-icon-a {
+	color: @bx-color-icon-header; 
+}
+.bx-header .cd-nav-trigger span, 
+.bx-header .cd-nav-trigger span::before, 
+.bx-header .cd-nav-trigger span::after,
+.bx-header .cd-nav-trigger.nav-is-visible span::before, 
+.bx-header .cd-nav-trigger.nav-is-visible span::after {
+    background: @bx-color-icon-header;
+}
+.bx-header a:hover .sys-icon,
+.bx-header a:hover .sys-icon-a,
+.bx-header li.bx-menu-tab-active a .sys-icon,
+.bx-header li.bx-menu-tab-active a .sys-icon-a {
+	color: @bx-color-icon-header-hover; 
+}
+.bx-header .cd-nav-trigger.nav-is-visible:hover span {
+  background: rgba(255, 255, 255, 0);
+}
+.bx-header .cd-nav-trigger:hover span, 
+.bx-header .cd-nav-trigger:hover span::before, 
+.bx-header .cd-nav-trigger:hover span::after,
+.bx-header .cd-nav-trigger.nav-is-visible:hover span::before, 
+.bx-header .cd-nav-trigger.nav-is-visible:hover span::after {
+    background: @bx-color-icon-header-hover;
+}
+.bx-header .sys-icon-a i {
+	.background-color (@bx-color-icon-header) !important;
+	color: @bx-color-icon-header;
+}
+.bx-header a:hover .sys-icon-a i {
+	.background-color (@bx-color-icon-header-hover) !important;
+	color: @bx-color-icon-header-hover;
+}
+
+/* footer */
+.bx-footer-wrapper.bx-def-color-bg-footer {
+    .background-color (@bx-color-footer);    
+}
+.bx-footer-wrapper.bx-def-border-footer {
+    border-top-width: @bx-border-width-footer;
+    border-top-style: @bx-border-type;
+    border-top-color: @bx-color-border-footer;
+}
+
+.bx-footer {
+	color: @bx-font-color-footer;
+}
+.bx-footer a {
+	color: @bx-color-link-footer; 
+}
+.bx-footer a:hover {
+	color: @bx-color-link-footer-hover; 
+}
+.bx-footer .sys-icon,
+.bx-footer .sys-icon-a {
+	color: @bx-color-icon-footer; 
+}
+.bx-footer a:hover .sys-icon,
+.bx-footer a:hover .sys-icon-a {
+	color: @bx-color-icon-footer-hover; 
+}
+.bx-footer .sys-icon-a i {
+	.background-color (@bx-color-icon-footer) !important;
+	color: @bx-color-icon-footer;
+}
+.bx-footer a:hover .sys-icon-a i {
+	.background-color (@bx-color-icon-footer-hover) !important;
+	color: @bx-color-icon-footer-hover;
+}
+
+/* fonts */
+.bx-def-font-inputs {
+	font-family: @bx-font-family-form-input;
+	font-size: @bx-font-size-form-input;
+	color: @bx-font-color-form-input;
+}
+
+h1,
+.bx-def-font-h1 {
+	font-weight: @bx-font-weight-h1;
+	color: @bx-font-color-default-h1;
+}
+h1.bx-def-font-grayed,
+h1 .bx-def-font-grayed,
+.bx-def-font-h1.bx-def-font-grayed,
+.bx-def-font-h1 .bx-def-font-grayed {
+	color: @bx-font-color-grayed-h1;
+}
+h1.bx-def-font-contrasted,
+h1.bx-def-font-contrasted:after,
+h1.bx-def-font-contrasted:before,
+h1 .bx-def-font-contrasted,
+h1 .bx-def-font-contrasted:after,
+h1 .bx-def-font-contrasted:before,
+.bx-def-font-h1.bx-def-font-contrasted,
+.bx-def-font-h1.bx-def-font-contrasted:after,
+.bx-def-font-h1.bx-def-font-contrasted:before,
+.bx-def-font-h1 .bx-def-font-contrasted,
+.bx-def-font-h1 .bx-def-font-contrasted:after,
+.bx-def-font-h1 .bx-def-font-contrasted:before {
+	color: @bx-font-color-contrasted-h1;
+}
+h1 a,
+.bx-def-font-h1 a,
+a.bx-def-font-h1 {
+	color: @bx-font-color-link-h1;
+}
+h1 a:hover,
+.bx-def-font-h1 a:hover,
+a.bx-def-font-h1:hover {
+	color: @bx-font-color-link-h1-hover;
+}
+
+h2,
+.bx-def-font-h2 {
+	font-weight: @bx-font-weight-h2;
+	color: @bx-font-color-default-h2;
+}
+h2.bx-def-font-grayed,
+h2 .bx-def-font-grayed,
+.bx-def-font-h2.bx-def-font-grayed,
+.bx-def-font-h2 .bx-def-font-grayed {
+	color: @bx-font-color-grayed-h2;
+}
+h2.bx-def-font-contrasted,
+h2.bx-def-font-contrasted:after,
+h2.bx-def-font-contrasted:before,
+h2 .bx-def-font-contrasted,
+h2 .bx-def-font-contrasted:after,
+h2 .bx-def-font-contrasted:before,
+.bx-def-font-h2.bx-def-font-contrasted,
+.bx-def-font-h2.bx-def-font-contrasted:after,
+.bx-def-font-h2.bx-def-font-contrasted:before,
+.bx-def-font-h2 .bx-def-font-contrasted,
+.bx-def-font-h2 .bx-def-font-contrasted:after,
+.bx-def-font-h2 .bx-def-font-contrasted:before {
+	color: @bx-font-color-contrasted-h2;
+}
+h2 a,
+.bx-def-font-h2 a,
+a.bx-def-font-h2 {
+	color: @bx-font-color-link-h2;
+}
+h2 a:hover,
+.bx-def-font-h2 a:hover,
+a.bx-def-font-h2:hover {
+	color: @bx-font-color-link-h2-hover;
+}
+
+h3,
+.bx-def-font-h3 {
+	font-weight: @bx-font-weight-h3;
+	color: @bx-font-color-default-h3;
+}
+h3.bx-def-font-grayed,
+h3 .bx-def-font-grayed,
+.bx-def-font-h3.bx-def-font-grayed,
+.bx-def-font-h3 .bx-def-font-grayed {
+	color: @bx-font-color-grayed-h3;
+}
+h3.bx-def-font-contrasted,
+h3.bx-def-font-contrasted:after,
+h3.bx-def-font-contrasted:before,
+h3 .bx-def-font-contrasted,
+h3 .bx-def-font-contrasted:after,
+h3 .bx-def-font-contrasted:before,
+.bx-def-font-h3.bx-def-font-contrasted,
+.bx-def-font-h3.bx-def-font-contrasted:after,
+.bx-def-font-h3.bx-def-font-contrasted:before,
+.bx-def-font-h3 .bx-def-font-contrasted,
+.bx-def-font-h3 .bx-def-font-contrasted:after,
+.bx-def-font-h3 .bx-def-font-contrasted:before {
+	color: @bx-font-color-contrasted-h3;
+}
+h3 a,
+.bx-def-font-h3 a,
+a.bx-def-font-h3 {
+	color: @bx-font-color-link-h3;
+}
+h3 a:hover,
+.bx-def-font-h3 a:hover,
+a.bx-def-font-h3:hover {
+	color: @bx-font-color-link-h3-hover;
+}
+
+/* cover */
+.bx-menu-toolbar-padding .bx-def-cover-color-bg {
+    background-color: @bx-color-cover;
+}
+
+.bx-menu-toolbar-padding .bx-cover-wrapper,
+.bx-menu-toolbar-padding .bx-base-pofile-cover {
+    border-width: @bx-border-width-cover;
+    border-style: @bx-border-type;
+    border-color: @bx-color-border-cover;
+
+    border-radius: @bx-border-radius-cover;
+    background-clip: padding-box;
+
+    -webkit-box-shadow: @bx-shadow-cover;
+    -moz-box-shadow: @bx-shadow-cover;
+    box-shadow: @bx-shadow-cover;
+}
+.bx-cover-wrapper .bx-cover {
+    min-height: @bx-height-cover;
+}
+.bx-cover-wrapper .bx-cover,
+.bx-cover-wrapper .bx-cover .bx-cover-actions .bx-menu-btns-hor {
+    text-align: @bx-text-align-cover;
+}
+.bx-cover-wrapper .bx-cover.bx-def-padding {
+    padding: @bx-content-padding-cover;
+}
+.bx-cover-wrapper .bx-cover .bx-cover-image img {
+    border-width: @bx-border-width-cover-icon;
+    border-style: @bx-border-type;
+    border-color: @bx-color-border-cover-icon;
+
+    border-radius: @bx-border-radius-cover-icon;
+    background-clip: padding-box;
+
+    -webkit-box-shadow: @bx-shadow-cover-icon;
+    -moz-box-shadow: @bx-shadow-cover-icon;
+    box-shadow: @bx-shadow-cover-icon;
+}
+
+.bx-cover-wrapper .bx-cover .bx-cover-title {
+    text-shadow: @bx-shadow-text-cover;
+
+    font-family: @bx-font-family-cover;
+}
+.bx-cover-wrapper .bx-cover .bx-cover-title,
+.bx-cover-wrapper .bx-cover .bx-cover-title .bx-def-font-contrasted {
+    color: @bx-color-font-cover;
+}
+.bx-cover-wrapper .bx-cover .bx-cover-title,
+.bx-cover-wrapper .bx-cover .bx-cover-title.bx-def-font-h1 {
+    font-size: @bx-font-size-cover;
+    font-weight: @bx-font-weight-cover;
+}
+
+
+/* block */
+.bx-def-border-block {
+    border-width: @bx-border-width-block;
+    border-style: @bx-border-type;
+    border-color: @bx-color-border-block;
+
+    border-radius: @bx-border-radius-block;
+    background-clip: padding-box;
+}
+.bx-def-border-radius-block {
+    border-radius: @bx-border-radius-block;
+    background-clip: padding-box;
+}
+.bx-db-header {
+    padding: @bx-title-padding-block;
+
+    border-width: @bx-border-width-block-title;
+    border-style: solid;
+    border-color: @bx-color-border-block-title;
+
+    border-radius: @bx-border-radius-block-title;
+}
+.bx-def-color-bg-block .bx-db-header,
+.bx-def-image-bg-block .bx-db-header {
+    background-color: @bx-color-block-title;
+}
+.bx-db-header .bx-db-title {
+	font-family: @bx-font-family-block-title;
+	font-weight: @bx-font-weight-block-title;
+	color: @bx-color-font-block-title;
+}
+.bx-db-header .bx-db-title.bx-def-font-h2 {
+	font-size: @bx-font-size-block-title;
+}
+.bx-db-divider {
+	border-top:@bx-height-block-title-div @bx-border-type @bx-color-block-title-div;
+}
+
+
+/* box */
+.bx-def-box {
+	border-width: @bx-border-width-box;
+	border-style: @bx-border-type;
+	border-color: @bx-color-border-box;
+}
+.bx-def-box.bx-def-padding {
+	padding: @bx-content-padding-card;
+}
+.bx-def-box.bx-def-color-bg-box {
+	.background-color (@bx-color-box);
+}
+.bx-def-color-bg-box-active,
+.bx-def-color-bg-box-hover:hover {
+    .background-color (@bx-color-box-hover);
+}
+.bx-def-box-round-corners,
+.bx-def-box.bx-def-round-corners {
+    border-radius: @bx-border-radius-box;
+    background-clip: padding-box;
+}
+.bx-def-box-round-corners-int {
+    border-radius: @bx-border-radius-box-itl @bx-border-radius-box-itr @bx-border-radius-box-ibr @bx-border-radius-box-ibl;
+    background-clip: padding-box;
+}
+.bx-def-box-round-corners-int-top {
+    border-radius: @bx-border-radius-box-itl @bx-border-radius-box-itr 0 0;
+    background-clip: padding-box;
+}
+.bx-def-box-round-corners-int-bottom {
+    border-radius: 0 0 @bx-border-radius-box-ibr @bx-border-radius-box-ibl;
+    background-clip: padding-box;
+}
+.bx-base-pofile-unit-with-cover .bx-def-round-corners .bx-base-pofile-unit-cover {
+    border-radius: @bx-border-radius-box-itl @bx-border-radius-box-itr 0 0;
+}
+.bx-base-text-unit.bx-base-text-unit-ext.bx-def-round-corners img.bx-base-text-unit-cover.bx-def-round-corners,
+.bx-base-text-unit.bx-base-text-unit-ext .bx-def-round-corners img.bx-base-text-unit-cover.bx-def-round-corners {
+    border-radius: @bx-border-radius-box-itl @bx-border-radius-box-itr 0 0;
+}
+.bx-base-text-unit.bx-base-text-unit-gallery.bx-def-round-corners .bx-base-text-unit-thumb.bx-def-round-corners,
+.bx-base-text-unit.bx-base-text-unit-gallery .bx-def-round-corners .bx-base-text-unit-thumb.bx-def-round-corners {
+    border-radius: @bx-border-radius-box-itl @bx-border-radius-box-itr 0 0;
+}
+
+/* box: timeline */
+.bx-tl-view div.bx-tl-item div.bx-tl-item-footer {
+    border-radius: 0 0 @bx-border-radius-box-ibr @bx-border-radius-box-ibl;
+}
+
+/* popup */
+.bx-popup-border {
+    border-width: @bx-border-width-popup;
+    border-style: solid;
+    border-color: @bx-color-border-popup;
+
+    border-radius: @bx-border-radius-popup;
+    background-clip: padding-box;
+}
+.bx-popup-color-bg {
+    background-color: @bx-color-popup;
+
+    background-image: @bx-image-bg-popup;
+    background-repeat: @bx-image-bg-popup-repeat;
+    background-size: @bx-image-bg-popup-size;
+}
+.bx-popup-content-indent {
+	padding: @bx-content-padding-popup;
+}
+.bx-popup-header {
+	padding: @bx-title-padding-popup;
+}
+.bx-popup-header-color-bg {
+	background-color: @bx-color-popup-title;
+}
+.bx-popup-header h2 {
+    line-height: 1.8rem;
+    font-family: @bx-font-family-popup-title;
+    font-size: @bx-font-size-popup-title;
+}
+.bx-popup-header h2,
+.bx-popup-header.bx-def-font-contrasted h2,
+.bx-popup-header .bx-popup-element-close,
+.bx-popup-header.bx-def-font-contrasted .bx-popup-element-close,
+.bx-popup-header .bx-popup-element-close .sys-icon,
+.bx-popup-header.bx-def-font-contrasted .bx-popup-element-close .sys-icon {
+	color: @bx-color-font-popup-title;
+}
+
+/* slide menu */
+.bx-popup-wrapper.bx-popup-slide-wrapper {
+	border-width: @bx-border-width-menu-slide;
+	border-style: solid;
+	border-color: @bx-color-border-menu-slide;
+
+	.background-color (@bx-color-menu-slide);
+
+	background-image: @bx-image-bg-menu-slide;
+	background-repeat: @bx-image-bg-menu-slide-repeat;
+    background-size: @bx-image-bg-menu-slide-size;
+}
+.bx-popup-wrapper.bx-popup-slide-wrapper.bx-def-padding {
+	padding: @bx-content-padding-menu-slide;
+}
+.bx-popup-wrapper.bx-popup-slide-wrapper li a {
+	text-shadow: @bx-shadow-font-menu-slide;
+
+	font-family: @bx-font-family-menu-slide;
+	font-size: @bx-font-size-menu-slide;
+	font-weight: @bx-font-weight-menu-slide;
+	color: @bx-font-color-menu-slide;
+}
+.bx-popup-wrapper.bx-popup-slide-wrapper li a:hover {
+	color: @bx-font-color-menu-slide-hover;
+}
+.bx-popup-wrapper.bx-popup-slide-wrapper li.bx-menu-tab-active a,
+.bx-popup-wrapper.bx-popup-slide-wrapper li.bx-menu-inter-act {
+	color: @bx-font-color-menu-slide-active;
+}
+
+/* main menu */
+#bx-sliding-menu-sys_site.bx-sliding-smenu-main .bx-sliding-menu-main-cnt {
+    padding: @bx-content-padding-menu-main;
+}
+#bx-sliding-menu-sys_site.bx-sliding-smenu-main ul.bx-menu-object-sys_site {
+	-webkit-justify-content: @bx-text-align-menu-main-items;
+	justify-content: @bx-text-align-menu-main-items;
+}
+#bx-sliding-menu-sys_site.bx-sliding-smenu-main .bx-sliding-menu-main-cnt li a {
+	text-shadow: @bx-shadow-font-menu-main;
+
+	font-family: @bx-font-family-menu-main;
+	font-size: @bx-font-size-menu-main;
+	font-weight: @bx-font-weight-menu-main;
+	color: @bx-font-color-menu-main;
+}
+#bx-sliding-menu-sys_site.bx-sliding-smenu-main .bx-sliding-menu-main-cnt li.bx-menu-tab-active a {
+	color: @bx-font-color-menu-main-active;
+}
+#bx-sliding-menu-sys_site.bx-sliding-smenu-main .bx-sliding-menu-main-cnt li a:hover {
+	color: @bx-font-color-menu-main-hover;
+}
+
+
+/* account menu */
+#bx-sliding-menu-account.bx-sliding-menu-main,
+#bx-sliding-menu-search.bx-sliding-menu-main,
+#bx_notifications_preview.bx-sliding-menu,
+ {
+    -webkit-box-shadow: @bx-shadow-menu-account;
+    -moz-box-shadow: @bx-shadow-menu-account;
+    box-shadow: @bx-shadow-menu-account;
+
+    border-width: @bx-border-width-menu-account;
+    border-style: solid;
+    border-color: @bx-color-border-menu-account;
+
+    background-color: @bx-color-menu-account;
+
+    background-image: @bx-image-bg-menu-account;
+    background-repeat: @bx-image-bg-menu-account-repeat;
+    background-size: @bx-image-bg-menu-account-size;
+}
+#bx-sliding-menu-account.bx-sliding-menu-main .bx-sliding-menu-main-cnt {
+    padding: @bx-content-padding-menu-account;
+}
+#bx-sliding-menu-account.bx-sliding-menu-main .bx-sliding-menu-main-cnt,
+#bx-sliding-menu-account.bx-sliding-menu-main .bx-sliding-menu-main-cnt .bx-def-font-h1,
+#bx-sliding-menu-account.bx-sliding-menu-main .bx-sliding-menu-main-cnt .bx-def-font-h2,
+#bx-sliding-menu-account.bx-sliding-menu-main .bx-sliding-menu-main-cnt a:not(.bx-btn),
+#bx-sliding-menu-account.bx-sliding-menu-main .bx-sliding-menu-main-cnt .sys-icon {
+    color: @bx-font-color-menu-account;
+}
+#bx-sliding-menu-account.bx-sliding-menu-main .bx-menu-account-popup li a:not(.bx-btn),
+#bx-sliding-menu-account.bx-sliding-menu-main .bx-menu-account-popup li a .bx-menu-floating-blocks-title {
+    text-shadow: @bx-shadow-font-menu-account;
+
+    font-family: @bx-font-family-menu-account;
+    font-size: @bx-font-size-menu-account;
+    font-weight: @bx-font-weight-menu-account;
+}
+#bx-sliding-menu-account.bx-sliding-menu-main .bx-menu-account-popup li.bx-menu-tab-active a:not(.bx-btn) {
+    color: @bx-font-color-menu-account-active;
+}
+#bx-sliding-menu-account.bx-sliding-menu-main .bx-menu-account-popup li a:not(.bx-btn):hover {
+    color: @bx-font-color-menu-account-hover;
+}
+.bx-menu-ver.bx-menu-object-sys_profile_stats li a:hover,
+.bx-menu-ver.bx-menu-object-sys_profile_stats li a:hover .sys-icon,
+.bx-menu-ver.bx-menu-object-sys_profile_stats li a:hover .sys-icon-a {
+    color: @bx-font-color-menu-account-hover;
+}
+
+
+.bx-media-phone #bx-sliding-menu-sys_site.bx-sliding-smenu-main .bx-sliding-menu-main-cnt li a,
+.bx-media-phone #bx-sliding-menu-sys_site.bx-sliding-smenu-main .bx-sliding-menu-main-cnt li a .sys-icon,
+.bx-media-phone #bx-sliding-menu-sys_site.bx-sliding-smenu-main .bx-sliding-menu-main-cnt li a .sys-icon-a {
+    color: @bx-font-color-menu-account;
+}
+.bx-media-phone #bx-sliding-menu-sys_site.bx-sliding-smenu-main .bx-sliding-menu-main-cnt li.bx-menu-tab-active a,
+.bx-media-phone #bx-sliding-menu-sys_site.bx-sliding-smenu-main .bx-sliding-menu-main-cnt li.bx-menu-tab-active a .sys-icon,
+.bx-media-phone #bx-sliding-menu-sys_site.bx-sliding-smenu-main .bx-sliding-menu-main-cnt li.bx-menu-tab-active a .sys-icon-a {
+    color: @bx-font-color-menu-account-active;
+}
+.bx-media-phone #bx-sliding-menu-sys_site.bx-sliding-smenu-main .bx-sliding-menu-main-cnt li a:hover,
+.bx-media-phone #bx-sliding-menu-sys_site.bx-sliding-smenu-main .bx-sliding-menu-main-cnt li a:hover .sys-icon,
+.bx-media-phone #bx-sliding-menu-sys_site.bx-sliding-smenu-main .bx-sliding-menu-main-cnt li a:hover .sys-icon-a {
+    color: @bx-font-color-menu-account-hover;
+}
+
+
+/* add menu */
+#bx-sliding-menu-sys_add_content.bx-sliding-menu-main {
+    -webkit-box-shadow: @bx-shadow-menu-add;
+    -moz-box-shadow: @bx-shadow-menu-add;
+    box-shadow: @bx-shadow-menu-add;
+
+    border-width: @bx-border-width-menu-add;
+    border-style: solid;
+    border-color: @bx-color-border-menu-add;
+
+    background-color: @bx-color-menu-add;
+
+    background-image: @bx-image-bg-menu-add;
+    background-repeat: @bx-image-bg-menu-add-repeat;
+    background-size: @bx-image-bg-menu-add-size;
+}
+#bx-sliding-menu-sys_add_content.bx-sliding-menu-main .bx-sliding-menu-main-cnt {
+    padding: @bx-content-padding-menu-add;
+}
+#bx-sliding-menu-sys_add_content.bx-sliding-menu-main .bx-sliding-menu-main-cnt li a {
+    text-shadow: @bx-shadow-font-menu-add;
+
+    font-family: @bx-font-family-menu-add;
+    font-size: @bx-font-size-menu-add;
+    font-weight: @bx-font-weight-menu-add;
+}
+
+#bx-sliding-menu-sys_add_content.bx-sliding-menu-main .bx-sliding-menu-main-cnt li a,
+#bx-sliding-menu-sys_add_content.bx-sliding-menu-main .bx-sliding-menu-main-cnt li a .sys-icon {
+    color: @bx-font-color-menu-add;
+}
+
+#bx-sliding-menu-sys_add_content.bx-sliding-menu-main .bx-sliding-menu-main-cnt li.bx-menu-tab-active a,
+#bx-sliding-menu-sys_add_content.bx-sliding-menu-main .bx-sliding-menu-main-cnt li.bx-menu-tab-active a .sys-icon {
+    color: @bx-font-color-menu-add-active;
+}
+#bx-sliding-menu-sys_add_content.bx-sliding-menu-main .bx-sliding-menu-main-cnt li a:hover,
+#bx-sliding-menu-sys_add_content.bx-sliding-menu-main .bx-sliding-menu-main-cnt li a:hover .sys-icon {
+    color: @bx-font-color-menu-add-hover;
+}
+
+/* page menu */
+.bx-menu-main-bar-wrapper {
+	-webkit-box-shadow: @bx-shadow-menu-page;
+	-moz-box-shadow: @bx-shadow-menu-page;
+	box-shadow: @bx-shadow-menu-page;
+
+	border-width: @bx-border-width-menu-page;
+	border-style: solid;
+	border-color: @bx-color-border-menu-page;
+
+	background-color: @bx-color-menu-page;
+
+	background-image: @bx-image-bg-menu-page;
+	background-repeat: @bx-image-bg-menu-page-repeat;
+    background-size: @bx-image-bg-menu-page-size;
+}
+.bx-menu-main-bar-wrapper .bx-menu-main-submenu {
+	padding: @bx-content-padding-menu-page;
+}
+.bx-menu-main-bar-wrapper .bx-menu-main-submenu li a {
+	text-shadow: @bx-shadow-font-menu-page;
+
+	font-family: @bx-font-family-menu-page;
+	font-size: @bx-font-size-menu-page;
+	font-weight: @bx-font-weight-menu-page;
+	color: @bx-font-color-menu-page;
+}
+.bx-menu-main-bar-wrapper .bx-menu-main-submenu li a:hover {
+	color: @bx-font-color-menu-page-hover;
+}
+.bx-menu-main-bar-wrapper .bx-menu-main-submenu li.bx-menu-tab-active a {
+	color: @bx-font-color-menu-page-active;
+}
+
+/* form */
+.bx-form-value .bx-form-input-slider,
+.bx-form-value .bx-form-input-doublerange,
+.bx-form-value .bx-form-input-select_multiple,
+.bx-form-value .bx-form-input-select,
+.bx-form-value .bx-form-input-radio_set,
+.bx-form-value .bx-form-input-checkbox_set,
+.bx-form-value .bx-form-input-number,
+.bx-form-value .bx-form-input-datepicker,
+.bx-form-value .bx-form-input-datetime,
+.bx-form-value .bx-form-input-wrapper-textarea.bx-form-input-wrapper-html,
+.bx-form-value .bx-form-input-textarea,
+.bx-form-value .bx-form-input-password,
+.bx-form-value .bx-form-input-text {
+    .box-sizing(@base-input-box-sizing);
+
+    border-color: @bx-color-border-form-input;
+    border-width: @bx-border-width-form-input;
+
+    border-radius: @bx-border-radius-form-input;
+    background-clip: padding-box;
+
+    background-color: @bx-color-form-input;
+
+    -webkit-box-shadow: @bx-shadow-form-input;
+    -moz-box-shadow: @bx-shadow-form-input;
+    box-shadow: @bx-shadow-form-input;
+}
+.bx-form-value .bx-form-input-slider,
+.bx-form-value .bx-form-input-doublerange,
+.bx-form-value .bx-form-input-select,
+.bx-form-value .bx-form-input-number,
+.bx-form-value .bx-form-input-datepicker,
+.bx-form-value .bx-form-input-datetime,
+.bx-form-value .bx-form-input-password,
+.bx-form-value .bx-form-input-text {
+	height: @bx-height-form-input;
+}
+.bx-form-value .bx-form-input-wrapper-textarea.bx-form-input-wrapper-html {
+	border-style: solid;
+}
+.bx-form-value .bx-form-input-textarea {
+	-webkit-box-shadow: none;
+	-moz-box-shadow: none;
+	box-shadow: none;
+}
+.bx-form-value .bx-form-input-textarea.bx-form-input-html 
+{
+	border-width: 0;
+}
+.bx-form-value .bx-form-input-text.bx-form-input-autotoken b {
+    line-height: @bx-height-form-input;
+}
+.bx-form-value .bx-form-input-text.bx-form-input-autotoken b .bx-def-thumb-size {
+	width: @bx-height-form-input;
+    height: @bx-height-form-input;
+    line-height: @bx-height-form-input;
+}
+.bx-form-value .bx-form-input-slider:focus,
+.bx-form-value .bx-form-input-doublerange:focus,
+.bx-form-value .bx-form-input-number:focus,
+.bx-form-value .bx-form-input-datepicker:focus,
+.bx-form-value .bx-form-input-datetime:focus,
+.bx-form-value .bx-form-input-textarea:focus,
+.bx-form-value .bx-form-input-password:focus,
+.bx-form-value .bx-form-input-text:focus {
+	border-color: @bx-color-border-form-input-active;
+	background-color: @bx-color-form-input-active;
+}
+.bx-form-value .bx-switcher-cont {
+	border-color: @bx-color-border-form-input;
+	border-width: @bx-border-width-form-input;
+
+	background-color: @bx-color-form-input;
+
+	-webkit-box-shadow: @bx-shadow-form-input;
+	-moz-box-shadow: @bx-shadow-form-input;
+	box-shadow: @bx-shadow-form-input;
+}
+
+
+/* button (normal) */
+.bx-btn {
+	.box-sizing(@base-input-box-sizing);
+
+	height: @bx-height-button;
+	line-height: (@bx-height-button - 0.1);
+
+	.background-color (@bx-color-button);
+
+	border-width: @bx-border-width-button;
+	border-style: solid;
+	border-color: @bx-color-border-button;
+
+        border-radius: @bx-border-radius-button;
+	background-clip: padding-box;
+
+	-webkit-box-shadow: @bx-shadow-button;
+	-moz-box-shadow: @bx-shadow-button;
+	box-shadow: @bx-shadow-button;
+
+	text-shadow: @bx-shadow-font-button;
+
+	font-family: @bx-font-family-button;
+	font-size: @bx-font-size-button;
+	font-weight: @bx-font-weight-button;
+	color: @bx-font-color-button;
+}
+.bx-btn.bx-btn-primary {
+	.box-sizing(@base-input-box-sizing);
+
+	height: @bx-height-button-primary;
+	line-height: (@bx-height-button-primary - 0.1);
+
+	.background-color (@bx-color-button-primary);
+
+	border-width: @bx-border-width-button-primary;
+	border-style: solid;
+	border-color: @bx-color-border-button-primary;
+
+        border-radius: @bx-border-radius-button-primary;
+	background-clip: padding-box;
+
+	-webkit-box-shadow: @bx-shadow-button-primary;
+	-moz-box-shadow: @bx-shadow-button-primary;
+	box-shadow: @bx-shadow-button-primary;
+
+	text-shadow: @bx-shadow-font-button-primary;
+
+	font-family: @bx-font-family-button-primary;
+	font-size: @bx-font-size-button-primary;
+	font-weight: @bx-font-weight-button-primary;
+	color: @bx-font-color-button-primary;
+}
+.bx-btn-height {
+	height: @bx-height-button;
+	line-height: @bx-height-button;
+}
+.bx-btn-border {
+    border-width: @bx-border-width-button;
+    border-style: solid;
+    border-color: transparent;
+}
+.bx-btn-height.bx-btn-primary {
+	height: @bx-height-button-primary;
+	line-height: @bx-height-button-primary;
+}
+.bx-btn-border.bx-btn-primary {
+	border-width: @bx-border-width-button-primary;
+	border-style: solid;
+	border-color: transparent;
+}
+.bx-btn:hover,
+.bx-btn:active {
+	border-width: @bx-border-width-button;
+	border-style: solid;
+	border-color: @bx-color-border-button-hover;
+
+	.background-color (@bx-color-button-hover);
+
+	color: @bx-font-color-button-hover;
+}
+.bx-btn.bx-btn-primary:hover,
+.bx-btn.bx-btn-primary:active {
+	border-width: @bx-border-width-button-primary;
+	border-style: solid;
+	border-color: @bx-color-border-button-primary-hover;
+
+	.background-color (@bx-color-button-primary-hover);
+
+	color: @bx-font-color-button-primary-hover;
+}
+.bx-btn .sys-icon:not(.sys-colored) {
+	color: @bx-font-color-button;
+}
+.bx-btn.bx-btn-primary .sys-icon:not(.sys-colored) {
+	color: @bx-font-color-button-primary;
+}
+.bx-btn:hover .sys-icon:not(.sys-colored),
+.bx-btn:active .sys-icon:not(.sys-colored) {
+	color: @bx-font-color-button-hover;
+}
+.bx-btn.bx-btn-primary:hover .sys-icon:not(.sys-colored),
+.bx-btn.bx-btn-primary:active .sys-icon:not(.sys-colored) {
+	color: @bx-font-color-button-primary-hover;
+}
+
+/* button (large) */
+.bx-btn.bx-btn-large {
+	.box-sizing(@base-input-box-sizing);
+
+	height: @bx-height-button-large;
+	line-height: (@bx-height-button-large - 0.2);
+
+	.background-color (@bx-color-button-large);
+
+	border-width: @bx-border-width-button-large;
+	border-style: solid;
+	border-color: @bx-color-border-button-large;
+
+        border-radius: @bx-border-radius-button-large;
+	background-clip: padding-box;
+
+	-webkit-box-shadow: @bx-shadow-button-large;
+	-moz-box-shadow: @bx-shadow-button-large;
+	box-shadow: @bx-shadow-button-large;
+
+	text-shadow: @bx-shadow-font-button-large;
+
+	font-family: @bx-font-family-button-large;
+	font-size: @bx-font-size-button-large;
+	font-weight: @bx-font-weight-button-large;
+	color: @bx-font-color-button-large;
+}
+.bx-btn.bx-btn-large.bx-btn-primary {
+	.box-sizing(@base-input-box-sizing);
+
+	height: @bx-height-button-large-primary;
+	line-height: (@bx-height-button-large-primary - 0.2);
+
+	.background-color (@bx-color-button-large-primary);
+
+	border-width: @bx-border-width-button-large-primary;
+	border-style: solid;
+	border-color: @bx-color-border-button-large-primary;
+
+        border-radius: @bx-border-radius-button-large-primary;
+	background-clip: padding-box;
+
+	-webkit-box-shadow: @bx-shadow-button-large-primary;
+	-moz-box-shadow: @bx-shadow-button-large-primary;
+	box-shadow: @bx-shadow-button-large-primary;
+	
+	text-shadow: @bx-shadow-font-button-large-primary;
+
+	font-family: @bx-font-family-button-large-primary;
+	font-size: @bx-font-size-button-large-primary;
+	font-weight: @bx-font-weight-button-large-primary;
+	color: @bx-font-color-button-large-primary;
+}
+.bx-btn-large-height {
+	height: @bx-height-button-large;
+	line-height: @bx-height-button-large;
+}
+.bx-btn-large-height.bx-btn-primary {
+	height: @bx-height-button-large-primary;
+	line-height: @bx-height-button-large-primary;
+}
+.bx-btn-large-border {
+	border-width: @bx-border-width-button-large;
+	border-style: solid;
+	border-color: transparent;
+}
+.bx-btn-large-border.bx-btn-primary {
+	border-width: @bx-border-width-button-large-primary;
+	border-style: solid;
+	border-color: transparent;
+}
+.bx-btn.bx-btn-large:hover,
+.bx-btn.bx-btn-large:active {
+	border-width: @bx-border-width-button-large;
+	border-style: solid;
+	border-color: @bx-color-border-button-large-hover;
+
+	.background-color (@bx-color-button-large-hover);
+
+	color: @bx-font-color-button-large-hover;
+}
+.bx-btn.bx-btn-large.bx-btn-primary:hover,
+.bx-btn.bx-btn-large.bx-btn-primary:active {
+	border-width: @bx-border-width-button-large-primary;
+	border-style: solid;
+	border-color: @bx-color-border-button-large-primary-hover;
+
+	.background-color (@bx-color-button-large-primary-hover);
+
+	color: @bx-font-color-button-large-primary-hover;
+}
+.bx-btn.bx-btn-large .sys-icon {
+	color: @bx-font-color-button-large;
+}
+.bx-btn.bx-btn-large.bx-btn-primary .sys-icon {
+	color: @bx-font-color-button-large-primary;
+}
+.bx-btn.bx-btn-large:hover .sys-icon,
+.bx-btn.bx-btn-large:active .sys-icon {
+	color: @bx-font-color-button-large-hover;
+}
+.bx-btn.bx-btn-large.bx-btn-primary:hover .sys-icon,
+.bx-btn.bx-btn-large.bx-btn-primary:active .sys-icon {
+	color: @bx-font-color-button-large-primary-hover;
+}
+
+/* button (small) */
+.bx-btn.bx-btn-small {
+	.box-sizing(@base-input-box-sizing);
+
+	height: @bx-height-button-small;
+	line-height: (@bx-height-button-small - 0.1);
+
+	.background-color (@bx-color-button-small);
+
+	border-width: @bx-border-width-button-small;
+	border-style: solid;
+	border-color: @bx-color-border-button-small;
+
+        border-radius: @bx-border-radius-button-small;
+        background-clip: padding-box;
+
+	-webkit-box-shadow: @bx-shadow-button-small;
+	-moz-box-shadow: @bx-shadow-button-small;
+	box-shadow: @bx-shadow-button-small;
+
+	text-shadow: @bx-shadow-font-button-small;
+
+	font-family: @bx-font-family-button-small;
+	font-size: @bx-font-size-button-small;
+	font-weight: @bx-font-weight-button-small;
+	color: @bx-font-color-button-small;
+}
+.bx-btn.bx-btn-small.bx-btn-primary {
+	.box-sizing(@base-input-box-sizing);
+
+	height: @bx-height-button-small-primary;
+	line-height: (@bx-height-button-small-primary - 0.1);
+
+	.background-color (@bx-color-button-small-primary);
+
+	border-width: @bx-border-width-button-small-primary;
+	border-style: solid;
+	border-color: @bx-color-border-button-small-primary;
+
+        border-radius: @bx-border-radius-button-small-primary;
+        background-clip: padding-box;
+
+	-webkit-box-shadow: @bx-shadow-button-small-primary;
+	-moz-box-shadow: @bx-shadow-button-small-primary;
+	box-shadow: @bx-shadow-button-small-primary;
+
+	text-shadow: @bx-shadow-font-button-small-primary;
+
+	font-family: @bx-font-family-button-small-primary;
+	font-size: @bx-font-size-button-small-primary;
+	font-weight: @bx-font-weight-button-small-primary;
+	color: @bx-font-color-button-small-primary;
+}
+.bx-btn-small-height {
+	height: @bx-height-button-small;
+	line-height: @bx-height-button-small;
+}
+.bx-btn-small-height.bx-btn-primary {
+	height: @bx-height-button-small-primary;
+	line-height: @bx-height-button-small-primary;
+}
+.bx-btn-small-border {
+	border-width: @bx-border-width-button-small;
+	border-style: solid;
+	border-color: transparent;
+}
+.bx-btn-small-border.bx-btn-primary {
+	border-width: @bx-border-width-button-small-primary;
+	border-style: solid;
+	border-color: transparent;
+}
+.bx-btn.bx-btn-small:hover,
+.bx-btn.bx-btn-small:active {
+	border-width: @bx-border-width-button-small;
+	border-style: solid;
+	border-color: @bx-color-border-button-small-hover;
+
+	.background-color (@bx-color-button-small-hover);
+
+	color: @bx-font-color-button-small-hover;
+}
+.bx-btn.bx-btn-small.bx-btn-primary:hover,
+.bx-btn.bx-btn-small.bx-btn-primary:active {
+	border-width: @bx-border-width-button-small-primary;
+	border-style: solid;
+	border-color: @bx-color-border-button-small-primary-hover;
+
+	.background-color (@bx-color-button-small-primary-hover);
+
+	color: @bx-font-color-button-small-primary-hover;
+}
+.bx-btn.bx-btn-small .sys-icon {
+	color: @bx-font-color-button-small;
+}
+.bx-btn.bx-btn-small.bx-btn-primary .sys-icon {
+	color: @bx-font-color-button-small-primary;
+}
+.bx-btn.bx-btn-small:hover .sys-icon,
+.bx-btn.bx-btn-small:active .sys-icon {
+	color: @bx-font-color-button-small-hover;
+}
+.bx-btn.bx-btn-small.bx-btn-primary:hover .sys-icon,
+.bx-btn.bx-btn-small.bx-btn-primary:active .sys-icon {
+	color: @bx-font-color-button-small-primary-hover;
+}
+
+
+/*--- Menus: Mobile Dropdown ---*/
+.bx-lcd-menu-dropdown.cd-dropdown,
+.bx-lcd-menu-dropdown.cd-dropdown .cd-dropdown-title {
+	background-color: @bx-color-header;
+}
+
+
+/*--- Alerts: Toolbar ---*/
+ul.bx-menu-toolbar li a .bx-menu-item-addon {
+	border: 0.125rem solid @bx-color-header;
+}
+ul.bx-menu-toolbar li a .bx-menu-item-addon.bx-def-unit-alert {
+	top: -(@bx-font-size-default + 2) / 2;
+    right: -(@bx-font-size-default + 2) / 2;
+}
+ul.bx-menu-toolbar li a .bx-menu-item-addon.bx-def-unit-alert-small {
+    top: -(@bx-font-size-small + 5) / 2;
+    right: -(@bx-font-size-small + 5) / 2
+}
+ul.bx-menu-toolbar li a .bx-menu-item-addon.bx-def-unit-alert-middle {
+    top: -(@bx-font-size-middle + 2) / 2;
+    right: -(@bx-font-size-middle + 2) / 2;
+}
+
+
+/*--- Timeline -> Card: Annachmants ---*/
+div.bx-tl-item div.bx-tl-item-images.bx-tl-ii-gallery div.bx-tl-item-image img,
+div.bx-tl-item div.bx-tl-item-attachments.bx-tl-ia-gallery div.bx-tl-item-attachment img,
+div.bx-tl-item .bx-tl-item-links .bx-tl-item-link {
+    border-radius: @bx-border-radius-box;
+}
+div.bx-tl-item div.bx-tl-item-images.bx-tl-ii-gallery div.bx-tl-item-image img,
+div.bx-tl-item div.bx-tl-item-attachments.bx-tl-ia-gallery div.bx-tl-item-attachment img {
+    background-clip: padding-box;
+}
+
+/*--- Timeline Card -> Comments: Font size ---*/
+div.bx-tl-item-comments-holder div.bx-tl-item-comments .cmts.cmts-margin {
+	.font-size(@bx-font-size-default);
+}

+ 590 - 0
modules/boonex/lucid/updates/10.0.0_10.0.1/source/data/template/system/css/menu.css

@@ -0,0 +1,590 @@
+@import url(../../../../../../../template/css/menu.css);
+
+.bx-menu-toolbar-padding {
+    padding-top: 0;
+}
+
+
+/*--- Main (Top) Menu ---*/
+#bx-sliding-menu-sys_site.bx-sliding-smenu-main ul.bx-menu-object-sys_site {
+	display: block;
+    white-space: normal;
+}
+
+#bx-sliding-menu-sys_site.bx-sliding-smenu-main ul.bx-menu-object-sys_site li {
+	display: block;
+    width: auto;
+    height: auto;
+}
+
+#bx-sliding-menu-sys_site.bx-sliding-smenu-main ul.bx-menu-object-sys_site > li > a {
+    padding: 0px 1.0rem;
+}
+
+#bx-sliding-menu-sys_site.bx-sliding-smenu-main ul.bx-menu-object-sys_site li:hover {
+	opacity: 1.0;
+}
+	
+
+
+.bx-sliding-smenu-submenu {
+	position: absolute;
+	display: none;
+
+	top: 100%;
+	left: 0px;
+	min-width: 100%;
+
+	background-color: #ffffff;
+}
+
+#bx-sliding-menu-sys_site.bx-sliding-smenu-main ul.bx-menu-object-sys_site > li.bx-sliding-smenu-tab-active .bx-sliding-smenu-submenu {
+    display: block;
+}
+
+.bx-sliding-smenu-submenu .bx-sliding-sms-cnt ul li,
+.bx-sliding-smenu-submenu .bx-sliding-sms-cnt ul li a {
+	margin: 0px;
+	padding: 0px;
+}
+.bx-sliding-smenu-submenu .bx-sliding-sms-cnt ul li a {
+	line-height: 2.0rem;
+}
+.bx-sliding-smenu-submenu .bx-sliding-sms-cnt ul li:hover,
+.bx-sliding-smenu-submenu .bx-sliding-sms-cnt ul li a:hover {
+	background-color: transparent;
+}
+
+#bx-sliding-menu-sys_site.bx-sliding-smenu-main .bx-menu-object-sys_site li .bx-menu-floating-blocks-icon, 
+#bx-sliding-menu-sys_site.bx-sliding-smenu-main .bx-menu-object-sys_site li .bx-menu-floating-blocks-title,
+#bx-sliding-menu-sys_site.bx-sliding-smenu-main .bx-menu-object-sys_site li .bx-menu-floating-blocks-arrow {
+    display: inline-block;
+    vertical-align: middle;
+}
+#bx-sliding-menu-sys_site.bx-sliding-smenu-main .bx-menu-object-sys_site li .bx-menu-floating-blocks-icon img,
+#bx-sliding-menu-sys_site.bx-sliding-smenu-main .bx-menu-object-sys_site li .bx-menu-floating-blocks-icon .sys-icon {
+    width: auto;
+    max-height: 2rem;
+
+    margin: 0 0.625rem 0 0;
+}
+#bx-sliding-menu-sys_site.bx-sliding-smenu-main .bx-menu-object-sys_site li .bx-menu-floating-blocks-icon .sys-icon {
+	line-height: 2rem;
+    font-size: 1.2rem;
+}
+#bx-sliding-menu-sys_site.bx-sliding-smenu-main .bx-menu-object-sys_site li .bx-menu-floating-blocks-icon img {
+	background-pocition: center center;
+	background-repeat: none;
+	background-size: 60% 60%;
+}
+
+#bx-sliding-menu-sys_site.bx-sliding-smenu-main .bx-menu-object-sys_site li .bx-menu-floating-blocks-arrow .sys-icon {
+	width: auto;
+    height: auto;
+
+    margin: 0px;
+
+    font-size: 1.2rem;
+}
+
+#bx-sliding-menu-sys_site.bx-sliding-smenu-main .bx-menu-object-sys_site li .bx-menu-floating-blocks-arrow .sys-icon.active {
+    display: none;
+}
+
+#bx-sliding-menu-sys_site.bx-sliding-smenu-main .bx-menu-object-sys_site li.bx-sliding-smenu-tab-active .bx-menu-floating-blocks-arrow .sys-icon.active {
+    display: inline;
+}
+
+#bx-sliding-menu-sys_site.bx-sliding-smenu-main .bx-menu-object-sys_site li.bx-sliding-smenu-tab-active .bx-menu-floating-blocks-arrow .sys-icon.inactive {
+    display: none;
+}
+
+@media only screen and (min-width: 720px) {
+    #bx-sliding-menu-sys_site.bx-sliding-smenu-main {
+        position: relative;
+        height: 100%;
+    }
+
+    #bx-sliding-menu-sys_site.bx-sliding-smenu-main .bx-sliding-menu-main-cnt {
+    	position: relative;
+    	height: 100%;
+        padding: 0px;
+    }
+
+    #bx-sliding-menu-sys_site.bx-sliding-smenu-main ul.bx-menu-object-sys_site {
+    	position: relative;
+    	display: -webkit-flex;
+    	display: flex;
+    	-webkit-align-items: center;
+    	align-items: center;
+    	height: 100%;
+        overflow: auto;
+    }
+
+    #bx-sliding-menu-sys_site.bx-sliding-smenu-main ul.bx-menu-object-sys_site li {
+        position: relative;
+    	display: inline-block;
+
+    	height: 2.125rem;
+        border: 1px solid transparent;
+    	border-radius: 1.5rem;
+    }
+    #bx-sliding-menu-sys_site.bx-sliding-smenu-main ul.bx-menu-object-sys_site li > a {
+        position: relative;
+    	display: -webkit-flex;
+    	display: flex;
+    	-webkit-align-items: center;
+    	align-items: center;
+    	height: 100%;
+	}
+
+    #bx-sliding-menu-sys_site.bx-sliding-smenu-main ul.bx-menu-object-sys_site li .bx-menu-floating-blocks-line {
+    	position: absolute;
+    	display: none;
+
+		top: 0px;
+		left: 0px;
+    	width: 100%;
+		height: 0.1875rem;
+
+		-webkit-border-radius: 0.25rem;
+	    border-radius: 0.25rem;
+	    background-color: rgba(255, 255, 255, 1.0);
+	}
+
+    #bx-sliding-menu-sys_site.bx-sliding-smenu-main ul.bx-menu-object-sys_site li .bx-sliding-smenu-submenu ul,
+    #bx-sliding-menu-sys_site.bx-sliding-smenu-main ul.bx-menu-object-sys_site li .bx-sliding-smenu-submenu ul li{
+        display: block; 
+    }
+
+    #bx-sliding-menu-sys_site.bx-sliding-smenu-main ul.bx-menu-object-sys_site > li:hover,
+    #bx-sliding-menu-sys_site.bx-sliding-smenu-main ul.bx-menu-object-sys_site > li.bx-menu-tab-active {
+		border: 1px solid rgba(0, 0, 0, 0.05);
+		background-color: rgba(0, 0, 0, 0.05);
+    }
+
+    #bx-sliding-menu-sys_site.bx-sliding-smenu-main ul.bx-menu-object-sys_site > li:hover .bx-sliding-smenu-submenu {
+        display: block;
+    }
+
+	#bx-sliding-menu-sys_site.bx-sliding-smenu-main .bx-menu-object-sys_site li:hover .bx-menu-floating-blocks-arrow .sys-icon.active {
+	    display: inline;
+	}
+	
+	#bx-sliding-menu-sys_site.bx-sliding-smenu-main .bx-menu-object-sys_site li:hover .bx-menu-floating-blocks-arrow .sys-icon.inactive {
+	    display: none;
+	}
+
+    #bx-sliding-menu-sys_site.bx-sliding-smenu-main ul.bx-menu-object-sys_site > li.bx-menu-tab-active .bx-menu-floating-blocks-title {
+        font-weight: 900;
+    }
+}
+
+@media (max-width:720px) {
+    #bx-sliding-menu-sys_site.bx-sliding-smenu-main ul.bx-menu-object-sys_site li {
+	   height: auto;
+    }
+
+    #bx-sliding-menu-sys_site.bx-sliding-smenu-main ul.bx-menu-object-sys_site li .bx-sliding-sms-cnt {
+	   padding: 0px 0px 0px 1.7rem;
+    }
+    
+	.bx-sliding-smenu-submenu {
+	    position: relative;
+	
+	    top: 0px;
+	    left: 0px;
+	
+	    background-color: #transparent;
+        box-shadow: none;
+	}	
+}
+
+ul.bx-menu-toolbar li a .bx-menu-item-addon {
+	bottom: auto;
+}
+
+
+/*--- Submenu ---*/
+.bx-menu-main-bar-wrapper .bx-menu-main-submenu-wrp {
+	position: relative;
+	overflow-x: auto;
+    -webkit-overflow-scrolling: touch;
+}
+.bx-menu-main-bar-wrapper .bx-menu-main-submenu-group {
+	position: relative;
+	display: table;
+	width: 100%;
+}
+.bx-menu-main-bar-wrapper .bx-menu-main-submenu-hr {
+	width: 100%;
+	height: 0.1875rem;
+	-webkit-border-radius: 2px;
+    border-radius: 2px;
+    background-color: rgba(15, 93, 162, 0.2);
+    box-shadow: 0 1px 0 0 rgba(255,255,255,1);
+}
+.bx-menu-main-bar-wrapper .bx-menu-main-submenu {
+	line-height: 2.875rem;
+}
+.bx-menu-main-bar-wrapper .bx-menu-main-submenu li {
+	position: relative;
+}
+.bx-menu-main-bar-wrapper .bx-menu-main-submenu li > a {
+	display: -webkit-flex;
+	display: flex;
+	-webkit-flex-flow: row nowrap;
+	flex-flow: row nowrap;
+	-webkit-align-items: center;
+	align-items: center;
+	line-height: 3.125rem;
+}
+
+.bx-menu-main-bar-wrapper .bx-menu-main-submenu li.bx-menu-tab-active > a {
+	font-weight: 900;
+}
+.bx-menu-main-bar-wrapper .bx-menu-main-submenu li > a span {
+	margin-left: 0.625rem;
+}
+.bx-menu-main-bar-wrapper .bx-menu-main-submenu li > a span:first-child {
+	margin-left: 0;
+}
+.bx-menu-main-bar-wrapper .bx-menu-main-submenu li .bx-mms-item-hr {
+	position: absolute;
+	display: none;
+
+	width: 100%;
+	height: 0.1875rem;
+	left: 0;
+	bottom: -0.1875rem;
+
+	-webkit-border-radius: 0.25rem;
+    border-radius: 0.25rem;
+    background-color: rgba(29, 75, 96, 1);
+}
+.bx-menu-main-bar-wrapper .bx-menu-main-submenu li.bx-menu-tab-active .bx-mms-item-hr {
+	display: block;
+}
+
+
+/*--- Profile View Submenu ---*/
+.bx-menu-main-bar-wrapper .bx-menu-main-submenu-wrp.bx-menu-profile-view-submenu-wrp {
+    overflow-x: visible;
+}
+.bx-menu-main-bar-wrapper .bx-menu-main-submenu-wrp.bx-menu-profile-view-submenu-wrp .bx-menu-main-submenu-group {
+    display: block;
+}
+
+
+/*--- Toolbars ---*/
+.bx-toolbar-item .bx-menu-toolbar .bx-menu-toolbar-item a.bx-btn {
+	width: auto;
+	height: 1.875rem;
+
+	line-height: 1.675rem;
+}
+
+.bx-toolbar-item .bx-menu-toolbar .bx-menu-toolbar-item a {
+    width: auto;
+    height: auto;
+
+    line-height: normal;
+}
+
+.bx-toolbar-item .bx-menu-toolbar .bx-menu-toolbar-item a .sys-icon,
+.bx-toolbar-item .bx-menu-toolbar .bx-menu-toolbar-item a .sys-icon-a,
+.bx-toolbar-item .bx-menu-toolbar .bx-menu-toolbar-item a img,
+.bx-toolbar-item .bx-menu-toolbar .bx-menu-toolbar-item a span {
+    vertical-align: middle;
+}
+
+
+/*--- Toolbar Site ---*/
+#bx-menu-toolbar-1-container .bx-menu-toolbar li {
+	padding: 0.625rem;
+}
+
+#bx-menu-toolbar-1-container ul.bx-menu-toolbar li a .sys-icon-a {
+	margin-top: 0;
+}
+
+
+/*--- Toolbar Member ---*/
+#bx-menu-toolbar-2-container .bx-menu-toolbar {
+	position: relative;
+    display: -webkit-flex;
+    display: flex;
+    -webkit-align-items: center;
+    align-items: center;
+    float: none;
+}
+
+#bx-menu-toolbar-2-container .bx-menu-toolbar li {
+	position: relative;
+	display: block;
+	float: none;
+
+    -webkit-flex: 0 0 auto; 
+    -ms-flex:  0 0 auto; 
+    flex:  0 0 auto;
+
+	padding: 0.625rem;
+}
+
+#bx-menu-toolbar-2-container .bx-menu-toolbar li.bx-menu-item-account {
+	-webkit-flex-grow: 1; 
+    flex-grow: 1;
+    white-space: nowrap;
+}
+
+#bx-menu-toolbar-2-container .bx-menu-toolbar li.bx-menu-item-account a {
+	width: auto;
+}
+
+#bx-menu-toolbar-2-container .bx-menu-toolbar li.bx-menu-item-account .bx-menu-toolbar-item-title {
+	display: none;
+}
+	
+#bx-menu-toolbar-2-container .bx-menu-toolbar li .sys-icon-a {
+	margin-top: 0px;
+	vertical-align: middle;
+}
+#bx-menu-toolbar-2-container .bx-menu-toolbar li .sys-icon {
+	width: auto;
+	height: auto;
+}
+
+#bx-menu-toolbar-2-container .bx-menu-toolbar .bx-menu-toolbar-item a .bx-def-thumb-size {
+	width: 2rem;
+	height: 2rem;
+	line-height: 1.9rem;
+	font-size: 1.5rem;
+}
+
+#bx-menu-toolbar-2-container .bx-menu-toolbar li a {
+	font-size: 0.875rem;
+}
+
+
+/*--- Sliding Menu ---*/
+.bx-sliding-menu, .bx-sliding-menu-main {
+    left: auto !important;
+    right: 0 !important;
+    max-width: 31.25rem;
+}
+
+/*--- Search Popup ---*/
+#bx-sliding-menu-search.bx-sliding-menu-main .bx-def-page-width {
+    width: 100%;
+}
+
+/*--- Notifications Popup ---*/
+#bx_notifications_preview.bx-sliding-menu .bx-def-page-width {
+    width: 100%;
+}
+
+/*--- Account Popup ---*/
+@media (min-width:720px) {
+    #bx-sliding-menu-account.bx-sliding-menu-main {
+        left: auto !important;
+        right: 0px !important;
+        width: auto !important;
+    }
+}
+#bx-sliding-menu-account.bx-sliding-menu-main.bx-sliding-menu-fullheight {
+    height: calc(100% - 3.75rem);
+}
+.bx-menu-account-popup .bx-menu-account-popup-profile {
+    margin-right: 4rem;
+}
+
+
+/*--- Account Popup Submenu & Add Content Menu ---*/
+.bx-menu-account-popup-profile,
+.bx-menu-account-popup-menu {
+	text-align: left;
+}
+.bx-menu-account-popup-menu ul.bx-menu-floating-blocks-wide,
+.bx-menu-object-sys_account_notifications li,
+.bx-menu-object-sys_add_content li {
+	display: block;
+	width: 100%;
+	height: auto;
+}
+.bx-menu-object-sys_account_notifications li .bx-menu-floating-blocks-icon,
+.bx-menu-object-sys_account_notifications li .bx-menu-floating-blocks-title,
+.bx-menu-object-sys_add_content li .bx-menu-floating-blocks-icon,
+.bx-menu-object-sys_add_content li .bx-menu-floating-blocks-title {
+	display: inline-block;
+	vertical-align: top;
+}
+.bx-popup .bx-menu-ver li a,
+.bx-popup .bx-menu-custom-ver li a, 
+.bx-menu-object-sys_account_notifications li a,
+.bx-menu-object-sys_account_notifications li .bx-menu-floating-blocks-title,
+.bx-menu-object-sys_add_content li .bx-menu-floating-blocks-title {
+	line-height: 2.25rem;
+}
+.bx-menu-object-sys_account_notifications li .bx-menu-floating-blocks-title,
+.bx-menu-object-sys_add_content li .bx-menu-floating-blocks-title {
+	padding-left: 0.5rem;
+	padding-right: 0.5rem;
+}
+.bx-menu-object-sys_account_notifications li img,
+.bx-menu-object-sys_account_notifications li .sys-icon,
+.bx-menu-object-sys_account_notifications li .bx-menu-floating-blocks-icon img,
+.bx-menu-object-sys_account_notifications li .bx-menu-floating-blocks-icon .sys-icon,
+.bx-menu-object-sys_add_content li .bx-menu-floating-blocks-icon img,
+.bx-menu-object-sys_add_content li .bx-menu-floating-blocks-icon .sys-icon {
+	height: 2rem;
+    width: 2rem;
+
+	margin: 0px;	
+}
+.bx-menu-object-sys_account_notifications li .sys-icon,
+.bx-menu-object-sys_account_notifications li .bx-menu-floating-blocks-icon .sys-icon,
+.bx-menu-object-sys_add_content li .bx-menu-floating-blocks-icon .sys-icon {
+    line-height: 2rem;
+    font-size: 1.2rem;
+}
+.bx-menu-object-sys_account_notifications li img,
+.bx-menu-object-sys_account_notifications li .bx-menu-floating-blocks-icon img,
+.bx-menu-object-sys_add_content li .bx-menu-floating-blocks-icon img {
+	background-pocition: center center;
+    background-repeat: none;
+    background-size: 60% 60%;
+}
+.bx-menu-object-sys_account_notifications li .bx-def-unit-alert-middle {
+	top: calc(50% - 11px);
+	right: 4px;
+}
+.bx-menu-object-sys_account_notifications li:hover {
+    opacity:0.8;
+}
+
+/*--- Add Content Menu ---*/
+@media (min-width:720px) {
+	#bx-sliding-menu-sys_add_content.bx-sliding-menu-main {
+	    left: auto !important;
+	    right: 0px !important;
+	    width: auto !important;
+	}
+}
+#bx-sliding-menu-sys_add_content.bx-sliding-menu-main .bx-menu-object-sys_add_content {
+	display: block;
+    width: 100%;
+}
+
+/*--- Vertical (Vertical Custom) Menus (in Popup) ---*/
+.bx-popup .bx-menu-ver li,
+.bx-popup .bx-menu-custom-ver li,
+.bx-menu-floating-blocks-wide.bx-menu-object-sys_account_notifications li {
+	margin: 0.625rem 0;
+
+	border-radius: 0; 
+}
+.bx-popup .bx-menu-ver li,
+.bx-popup .bx-menu-custom-ver li,
+.bx-popup .bx-menu-ver li.bx-def-color-bg-hl-hover,
+.bx-popup .bx-menu-custom-ver li.bx-def-color-bg-hl-hover,
+.bx-menu-ver.bx-menu-object-sys_profile_stats li.bx-def-color-bg-hl-hover,
+.bx-menu-floating-blocks-wide.bx-menu-object-sys_account_notifications li.bx-def-color-bg-hl-hover {
+	border: 1px solid transparent;
+}
+.bx-popup .bx-menu-ver li:hover,
+.bx-popup .bx-menu-custom-ver li:hover,
+.bx-popup .bx-menu-ver li.bx-def-color-bg-hl-hover:hover,
+.bx-popup .bx-menu-custom-ver li.bx-def-color-bg-hl-hover:hover,
+.bx-menu-ver.bx-menu-object-sys_profile_stats li.bx-def-color-bg-hl-hover:hover,
+.bx-menu-floating-blocks-wide.bx-menu-object-sys_account_notifications li.bx-def-color-bg-hl-hover:hover {
+	border-radius: 0.5rem;
+	border-color: rgba(20, 80, 100, 0.05);
+	background-color: #ffffff;
+}
+.bx-popup .bx-menu-ver li.bx-def-color-bg-active,
+.bx-popup .bx-menu-custom-ver li.bx-def-color-bg-active,
+.bx-menu-ver.bx-menu-object-sys_profile_stats li.bx-def-color-bg-active,
+.bx-menu-floating-blocks-wide.bx-menu-object-sys_account_notifications li.bx-def-color-bg-active {
+	border-color: rgba(20, 80, 100, 0.05);
+	border-radius: 0.5rem;
+	background-color: #ffffff;
+}
+.bx-popup .bx-menu-custom-ver li > span {
+	width: 100%;
+	margin: 0 !important;
+}
+.bx-popup .bx-menu-custom-ver li a,
+.bx-menu-floating-blocks-wide.bx-menu-object-sys_account_notifications li > a {
+	position: relative;
+	display: -webkit-flex;
+    display: flex;
+    -webkit-flex-flow: row nowrap;
+    flex-flow: row nowrap;
+    -webkit-align-items: center;
+    align-items: center;
+    -webkit-justify-content: flex-start;
+    justify-content: flex-start;
+	box-sizing: border-box;
+	width: 100%;
+	padding: 0 0.625rem;
+}
+.bx-popup .bx-menu-ver li.bx-def-color-bg-active a,
+.bx-popup .bx-menu-custom-ver li.bx-def-color-bg-active a,
+.bx-menu-ver.bx-menu-object-sys_profile_stats li.bx-def-color-bg-active a,
+.bx-menu-floating-blocks-wide.bx-menu-object-sys_account_notifications li.bx-def-color-bg-active a, 
+.bx-popup .bx-menu-ver li.bx-def-color-bg-active .sys-icon,
+.bx-popup .bx-menu-custom-ver li.bx-def-color-bg-active .sys-icon,
+.bx-menu-ver.bx-menu-object-sys_profile_stats li.bx-def-color-bg-active .sys-icon,
+.bx-menu-floating-blocks-wide.bx-menu-object-sys_account_notifications li.bx-def-color-bg-active .sys-icon {
+	font-weight: 800;
+	color: rgba(20,80,100,1) !important;
+}
+.bx-popup .bx-menu-ver li img,
+.bx-popup .bx-menu-ver li .sys-icon,
+.bx-popup .bx-menu-custom-ver li img,
+.bx-popup .bx-menu-custom-ver li .sys-icon {
+	display: inline-block;
+    vertical-align: middle;
+	width: 1.5rem;
+	height: 1.5rem;
+	line-height: 1.5rem;
+	font-size: 1.5rem;
+}
+.bx-menu-floating-blocks-wide.bx-menu-object-sys_account_notifications li img,
+.bx-menu-floating-blocks-wide.bx-menu-object-sys_account_notifications li .sys-icon {
+	width: 1.5rem;
+	height: 1.5rem;
+	line-height: 1.5rem;
+}
+.bx-popup .bx-menu-ver li a div {
+	padding-left: 1.25rem;
+	white-space: nowrap;
+}
+.bx-popup .bx-menu-ver li a span,
+.bx-popup .bx-menu-custom-ver li a span {
+	margin-left: 0.625rem;
+	white-space: nowrap;
+	vertical-align: middle;
+}
+.bx-menu-floating-blocks-wide.bx-menu-object-sys_account_notifications li .bx-menu-item-addon {
+	top: 0.375rem;
+}
+.bx-menu-floating-blocks-dash li {
+    width:12.5%;
+}
+
+.bx-media-tablet .bx-menu-floating-blocks-dash li {
+    width:25%;
+}
+
+/* --------------- profile stats menu */
+.bx-menu-ver.bx-menu-object-sys_profile_stats li .bx-menu-addon-cnt.bx-def-color-bg-hl {
+	background-color: transparent;
+}
+
+/*--- Custom Menu with More Auto ---*/
+.bx-menu-custom.bx-menu-hor.bx-menu-more-auto .bx-menu-submenu-more-auto .bx-menu-item a,
+.bx-menu-custom.bx-menu-hor.bx-menu-more-auto .bx-menu-submenu-more-auto .bx-menu-item .bx-btn,
+.bx-menu-custom.bx-menu-hor.bx-menu-more-auto .bx-menu-submenu-more-auto .bx-menu-item .bx-btn .sys-icon {
+    color: inherit;
+}

+ 9 - 0
modules/boonex/lucid/updates/10.0.0_10.0.1/source/data/template/system/menu_main_submenu_bar.html

@@ -0,0 +1,9 @@
+<div class="bx-menu-main-bar-gap bx-def-centered bx-def-padding-leftright bx-def-page-width bx-def-box-sizing">
+    <div id="bx-menu-main-bar-wrapper" class="bx-menu-main-bar-wrapper bx-def-color-bg-sec">
+        <div id="bx-menu-main-bar" class="bx-menu-main-bar">
+            <bx_injection:injection_top_menu_before />
+            __code__
+            <bx_injection:injection_top_menu_after />
+        </div>
+    </div>
+</div>

+ 423 - 0
modules/boonex/lucid/updates/10.0.0_10.0.1/source/data/template/system/scripts/BxTemplConfig.php

@@ -0,0 +1,423 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    UnaTemplate UNA Template Classes
+ * @{
+ */
+
+class BxTemplConfig extends BxBaseConfig
+{
+    protected $_isModule;
+
+    function __construct()
+    {
+        parent::__construct();
+
+        $sName = 'bx_lucid';
+        $this->_isModule = BxDolModuleQuery::getInstance()->isModuleByName($sName);
+
+        //--- Defaults
+        $this->_aConfig['aLessConfig'] = array_merge($this->_aConfig['aLessConfig'], array(
+            'bx-size-thumb' => '32px'
+        ));
+
+        //--- Images
+        $oStorage = BxDolStorage::getObjectInstance('sys_images_custom');
+
+        $this->_aConfig['aLessConfig']['bx-image-bg-header'] = $this->_setBgUrl($sName . '_header_bg_image', $oStorage);
+        $this->_aConfig['aLessConfig']['bx-image-bg-header-repeat'] = $this->_setBgRepeat($sName . '_header_bg_image_repeat', 'no-repeat');
+        $this->_aConfig['aLessConfig']['bx-image-bg-header-size'] = $this->_setBgSize($sName . '_header_bg_image_size', 'cover');
+        $this->_aConfig['aLessConfig']['bx-image-bg-footer'] = $this->_setBgUrl($sName . '_footer_bg_image', $oStorage);
+        $this->_aConfig['aLessConfig']['bx-image-bg-footer-repeat'] = $this->_setBgRepeat($sName . '_footer_bg_image_repeat', 'no-repeat');
+        $this->_aConfig['aLessConfig']['bx-image-bg-footer-size'] = $this->_setBgSize($sName . '_footer_bg_image_size', 'cover');
+        $this->_aConfig['aLessConfig']['bx-image-bg-page'] = $this->_setBgUrl($sName . '_body_bg_image', $oStorage);
+        $this->_aConfig['aLessConfig']['bx-image-bg-page-repeat'] = $this->_setBgRepeat($sName . '_body_bg_image_repeat', 'no-repeat');
+        $this->_aConfig['aLessConfig']['bx-image-bg-page-size'] = $this->_setBgSize($sName . '_body_bg_image_size', 'cover');
+        $this->_aConfig['aLessConfig']['bx-image-bg-block'] = $this->_setBgUrl($sName . '_block_bg_image', $oStorage);
+        $this->_aConfig['aLessConfig']['bx-image-bg-block-repeat'] = $this->_setBgRepeat($sName . '_block_bg_image_repeat', 'no-repeat');
+        $this->_aConfig['aLessConfig']['bx-image-bg-block-size'] = $this->_setBgSize($sName . '_block_bg_image_size', 'cover');
+        $this->_aConfig['aLessConfig']['bx-image-bg-box'] = $this->_setBgUrl($sName . '_card_bg_image', $oStorage);
+        $this->_aConfig['aLessConfig']['bx-image-bg-box-repeat'] = $this->_setBgRepeat($sName . '_card_bg_image_repeat', 'no-repeat');
+        $this->_aConfig['aLessConfig']['bx-image-bg-box-attachment'] = $this->_setBgAttachment($sName . '_card_bg_image_attachment', 'scroll');
+        $this->_aConfig['aLessConfig']['bx-image-bg-box-size'] = $this->_setBgSize($sName . '_card_bg_image_size', 'cover');
+        $this->_aConfig['aLessConfig']['bx-image-bg-popup'] = $this->_setBgUrl($sName . '_popup_bg_image', $oStorage);
+        $this->_aConfig['aLessConfig']['bx-image-bg-popup-repeat'] = $this->_setBgRepeat($sName . '_popup_bg_image_repeat', 'no-repeat');
+        $this->_aConfig['aLessConfig']['bx-image-bg-popup-size'] = $this->_setBgSize($sName . '_popup_bg_image_size', 'cover');
+        $this->_aConfig['aLessConfig']['bx-image-bg-menu-main'] = $this->_setBgUrl($sName . '_menu_main_bg_image', $oStorage);
+        $this->_aConfig['aLessConfig']['bx-image-bg-menu-main-repeat'] = $this->_setBgRepeat($sName . '_menu_main_bg_image_repeat', 'no-repeat');
+        $this->_aConfig['aLessConfig']['bx-image-bg-menu-main-size'] = $this->_setBgSize($sName . '_menu_main_bg_image_size', 'cover');
+        $this->_aConfig['aLessConfig']['bx-image-bg-menu-account'] = $this->_setBgUrl($sName . '_menu_account_bg_image', $oStorage);
+        $this->_aConfig['aLessConfig']['bx-image-bg-menu-account-repeat'] = $this->_setBgRepeat($sName . '_menu_account_bg_image_repeat', 'no-repeat');
+        $this->_aConfig['aLessConfig']['bx-image-bg-menu-account-size'] = $this->_setBgSize($sName . '_menu_account_bg_image_size', 'cover');
+        $this->_aConfig['aLessConfig']['bx-image-bg-menu-add'] = $this->_setBgUrl($sName . '_menu_add_bg_image', $oStorage);
+        $this->_aConfig['aLessConfig']['bx-image-bg-menu-add-repeat'] = $this->_setBgRepeat($sName . '_menu_add_bg_image_repeat', 'no-repeat');
+        $this->_aConfig['aLessConfig']['bx-image-bg-menu-add-size'] = $this->_setBgSize($sName . '_menu_add_bg_image_size', 'cover');
+        $this->_aConfig['aLessConfig']['bx-image-bg-menu-page'] = $this->_setBgUrl($sName . '_menu_page_bg_image', $oStorage);
+        $this->_aConfig['aLessConfig']['bx-image-bg-menu-page-repeat'] = $this->_setBgRepeat($sName . '_menu_page_bg_image_repeat', 'no-repeat');
+        $this->_aConfig['aLessConfig']['bx-image-bg-menu-page-size'] = $this->_setBgSize($sName . '_menu_page_bg_image_size', 'cover');
+        $this->_aConfig['aLessConfig']['bx-image-bg-menu-slide'] = $this->_setBgUrl($sName . '_menu_slide_bg_image', $oStorage);
+        $this->_aConfig['aLessConfig']['bx-image-bg-menu-slide-repeat'] = $this->_setBgRepeat($sName . '_menu_slide_bg_image_repeat', 'no-repeat');
+        $this->_aConfig['aLessConfig']['bx-image-bg-menu-slide-size'] = $this->_setBgSize($sName . '_menu_slide_bg_image_size', 'cover');
+
+
+        //--- Shadow
+        $this->_aConfig['aLessConfig']['bx-shadow-header'] = $this->_setShadow($sName . '_header_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-footer'] = $this->_setShadow($sName . '_footer_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-cover'] = $this->_setShadow($sName . '_cover_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-cover-icon'] = $this->_setShadow($sName . '_cover_icon_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-block'] = $this->_setShadow($sName . '_block_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-card'] = $this->_setShadow($sName . '_card_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-popup'] = $this->_setShadow($sName . '_popup_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-menu-main'] = $this->_setShadow($sName . '_menu_main_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-menu-account'] = $this->_setShadow($sName . '_menu_account_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-menu-add'] = $this->_setShadow($sName . '_menu_add_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-menu-page'] = $this->_setShadow($sName . '_menu_page_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-menu-slide'] = $this->_setShadow($sName . '_menu_slide_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-form-input'] = $this->_setShadow($sName . '_form_input_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-button-large'] = $this->_setShadow($sName . '_button_lg_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-button-large-primary'] = $this->_setShadow($sName . '_button_lgp_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-button'] = $this->_setShadow($sName . '_button_nl_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-button-primary'] = $this->_setShadow($sName . '_button_nlp_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-button-small'] = $this->_setShadow($sName . '_button_sm_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-button-small-primary'] = $this->_setShadow($sName . '_button_smp_shadow');
+
+        $this->_aConfig['aLessConfig']['bx-shadow-text-cover'] = $this->_setShadowFont($sName . '_cover_text_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-font-menu-main'] = $this->_setShadowFont($sName . '_menu_main_font_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-font-menu-account'] = $this->_setShadowFont($sName . '_menu_account_font_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-font-menu-add'] = $this->_setShadowFont($sName . '_menu_add_font_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-font-menu-page'] = $this->_setShadowFont($sName . '_menu_page_font_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-font-menu-slide'] = $this->_setShadowFont($sName . '_menu_slide_font_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-font-button-large'] = $this->_setShadowFont($sName . '_button_lg_font_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-font-button-large-primary'] = $this->_setShadowFont($sName . '_button_lgp_font_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-font-button'] = $this->_setShadowFont($sName . '_button_nl_font_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-font-button-primary'] = $this->_setShadowFont($sName . '_button_nlp_font_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-font-button-small'] = $this->_setShadowFont($sName . '_button_sm_font_shadow');
+        $this->_aConfig['aLessConfig']['bx-shadow-font-button-small-primary'] = $this->_setShadowFont($sName . '_button_smp_font_shadow');
+
+        //--- Height
+        $this->_aConfig['aLessConfig']['bx-height-header'] = $this->_setSize($sName . '_header_height', '3rem');
+        $this->_aConfig['aLessConfig']['bx-height-cover'] = $this->_setSize($sName . '_cover_height', '40vh');
+        $this->_aConfig['aLessConfig']['bx-height-block-title-div'] = $this->_setSize($sName . '_block_title_div_height', '1px');
+        $this->_aConfig['aLessConfig']['bx-height-form-input'] = $this->_setSize($sName . '_form_input_height', '2.2rem');
+        $this->_aConfig['aLessConfig']['bx-height-button-large'] = $this->_setSize($sName . '_button_lg_height', '2.25rem');
+        $this->_aConfig['aLessConfig']['bx-height-button-large-primary'] = $this->_setSize($sName . '_button_lgp_height', '2.25rem');
+        $this->_aConfig['aLessConfig']['bx-height-button'] = $this->_setSize($sName . '_button_nl_height', '2.25rem');
+        $this->_aConfig['aLessConfig']['bx-height-button-primary'] = $this->_setSize($sName . '_button_nlp_height', '2.25rem');
+        $this->_aConfig['aLessConfig']['bx-height-button-small'] = $this->_setSize($sName . '_button_sm_height', '1.5rem');
+        $this->_aConfig['aLessConfig']['bx-height-button-small-primary'] = $this->_setSize($sName . '_button_smp_height', '1.5rem');
+
+
+        //--- Title/Content Margins
+        $this->_aConfig['aLessConfig']['bx-content-padding-header'] = $this->_setMargin($sName . '_header_content_padding');
+        $this->_aConfig['aLessConfig']['bx-content-padding-footer'] = $this->_setMargin($sName . '_footer_content_padding');
+        $this->_aConfig['aLessConfig']['bx-content-padding-cover'] = $this->_setMargin($sName . '_cover_content_padding');
+        $this->_aConfig['aLessConfig']['bx-content-padding-block'] = $this->_setMargin($sName . '_block_content_padding');
+        $this->_aConfig['aLessConfig']['bx-content-padding-card'] = $this->_setMargin($sName . '_card_content_padding');
+        $this->_aConfig['aLessConfig']['bx-content-padding-popup'] = $this->_setMargin($sName . '_popup_content_padding');
+        $this->_aConfig['aLessConfig']['bx-content-padding-menu-main'] = $this->_setMargin($sName . '_menu_main_content_padding');
+        $this->_aConfig['aLessConfig']['bx-content-padding-menu-account'] = $this->_setMargin($sName . '_menu_account_content_padding');
+        $this->_aConfig['aLessConfig']['bx-content-padding-menu-add'] = $this->_setMargin($sName . '_menu_add_content_padding');
+        $this->_aConfig['aLessConfig']['bx-content-padding-menu-page'] = $this->_setMargin($sName . '_menu_page_content_padding');
+        $this->_aConfig['aLessConfig']['bx-content-padding-menu-slide'] = $this->_setMargin($sName . '_menu_slide_content_padding');
+
+        $this->_aConfig['aLessConfig']['bx-title-padding-block'] = $this->_setMargin($sName . '_block_title_padding');
+        $this->_aConfig['aLessConfig']['bx-title-padding-popup'] = $this->_setMargin($sName . '_popup_title_padding');
+
+
+        //--- Colors
+        if($this->_isModule) {
+            $this->_aConfig['aLessConfig']['bx-color-hl'] = $this->_setColorRgba($sName . '_general_item_bg_color_hover', 'rgba(196, 248, 156, 0.2)');
+            $this->_aConfig['aLessConfig']['bx-color-active'] = $this->_setColorRgba($sName . '_general_item_bg_color_active', 'rgba(196, 248, 156, 0.4)');
+            $this->_aConfig['aLessConfig']['bx-color-disabled'] = $this->_setColorRgba($sName . '_general_item_bg_color_disabled', 'rgba(221, 221, 221, 1.0)');
+        }
+
+        $this->_aConfig['aLessConfig']['bx-color-header'] = $this->_setColorRgba($sName . '_header_bg_color', 'rgba(59, 134, 134, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-footer'] = $this->_setColorRgba($sName . '_footer_bg_color', 'rgba(255, 255, 255, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-page'] = $this->_setColorRgb($sName . '_body_bg_color', 'rgb(255, 255, 255)');
+        $this->_aConfig['aLessConfig']['bx-color-cover'] = $this->_setColorRgba($sName . '_cover_bg_color', 'rgba(255, 255, 255, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-block'] = $this->_setColorRgba($sName . '_block_bg_color', 'rgba(255, 255, 255, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-block-title'] = $this->_setColorRgba($sName . '_block_title_bg_color', 'rgba(255, 255, 255, 1.0)');
+        $this->_aConfig['aLessConfig']['bx-color-block-title-div'] = $this->_setColorRgba($sName . '_block_title_div_bg_color', 'rgba(208, 208, 208, 1)');        
+        $this->_aConfig['aLessConfig']['bx-color-box'] = $this->_setColorRgba($sName . '_card_bg_color', 'rgba(242, 242, 242, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-box-hover'] = $this->_setColorRgba($sName . '_card_bg_color_hover', 'rgba(242, 242, 242, 0.5)');
+        $this->_aConfig['aLessConfig']['bx-color-popup'] = $this->_setColorRgba($sName . '_popup_bg_color', 'rgba(255, 255, 255, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-popup-title'] = $this->_setColorRgba($sName . '_popup_title_bg_color', 'rgba(40, 60, 80, 0.9)');
+        $this->_aConfig['aLessConfig']['bx-color-menu-main'] = $this->_setColorRgba($sName . '_menu_main_bg_color', 'rgba(255, 255, 255, 0.9)');
+        $this->_aConfig['aLessConfig']['bx-color-menu-account'] = $this->_setColorRgba($sName . '_menu_account_bg_color', 'rgba(255, 255, 255, 0.9)');
+        $this->_aConfig['aLessConfig']['bx-color-menu-add'] = $this->_setColorRgba($sName . '_menu_add_bg_color', 'rgba(255, 255, 255, 0.9)');
+        $this->_aConfig['aLessConfig']['bx-color-menu-page'] = $this->_setColorRgba($sName . '_menu_page_bg_color', 'rgba(242, 242, 242, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-menu-slide'] = $this->_setColorRgba($sName . '_menu_slide_bg_color', 'rgba(255, 255, 255, 0.9)');
+        $this->_aConfig['aLessConfig']['bx-color-form-input'] = $this->_setColorRgba($sName . '_form_input_bg_color', 'rgba(255, 255, 255, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-form-input-active'] = $this->_setColorRgba($sName . '_form_input_bg_color_active', 'rgba(255, 255, 255, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-button-large'] = $this->_setColorRgba($sName . '_button_lg_bg_color', 'rgba(108, 170, 138, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-button-large-hover'] = $this->_setColorRgba($sName . '_button_lg_bg_color_hover', 'rgba(58, 134, 134, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-button-large-primary'] = $this->_setColorRgba($sName . '_button_lgp_bg_color', 'rgba(108, 170, 138, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-button-large-primary-hover'] = $this->_setColorRgba($sName . '_button_lgp_bg_color_hover', 'rgba(58, 134, 134, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-button'] = $this->_setColorRgba($sName . '_button_nl_bg_color', 'rgba(108, 170, 138, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-button-hover'] = $this->_setColorRgba($sName . '_button_nl_bg_color_hover', 'rgba(58, 134, 134, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-button-primary'] = $this->_setColorRgba($sName . '_button_nlp_bg_color', 'rgba(108, 170, 138, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-button-primary-hover'] = $this->_setColorRgba($sName . '_button_nlp_bg_color_hover', 'rgba(58, 134, 134, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-button-small'] = $this->_setColorRgba($sName . '_button_sm_bg_color', 'rgba(108, 170, 138, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-button-small-hover'] = $this->_setColorRgba($sName . '_button_sm_bg_color_hover', 'rgba(58, 134, 134, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-button-small-primary'] = $this->_setColorRgba($sName . '_button_smp_bg_color', 'rgba(108, 170, 138, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-button-small-primary-hover'] = $this->_setColorRgba($sName . '_button_smp_bg_color_hover', 'rgba(58, 134, 134, 1)');
+
+        $this->_aConfig['aLessConfig']['bx-color-font-cover'] = $this->_setColorRgba($sName . '_cover_font_color', 'rgba(255, 255, 255, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-font-block-title'] = $this->_setColorRgba($sName . '_block_title_font_color', 'rgba(0, 0, 20, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-font-popup-title'] = $this->_setColorRgba($sName . '_popup_title_font_color', 'rgba(255, 255, 255, 1.0)');
+
+        $sDefColBorder = 'rgba(208, 208, 208, 1)';
+        $this->_aConfig['aLessConfig']['bx-color-border-header'] = $this->_setColorRgba($sName . '_header_border_color', $sDefColBorder);
+        $this->_aConfig['aLessConfig']['bx-color-border-footer'] = $this->_setColorRgba($sName . '_footer_border_color', $sDefColBorder);
+        $this->_aConfig['aLessConfig']['bx-color-border-cover'] = $this->_setColorRgba($sName . '_cover_border_color', $sDefColBorder);
+        $this->_aConfig['aLessConfig']['bx-color-border-cover-icon'] = $this->_setColorRgba($sName . '_cover_icon_border_color', $sDefColBorder);
+        $this->_aConfig['aLessConfig']['bx-color-border-block'] = $this->_setColorRgba($sName . '_block_border_color', $sDefColBorder);
+        $this->_aConfig['aLessConfig']['bx-color-border-block-title'] = $this->_setColorRgba($sName . '_block_title_border_color', $sDefColBorder);
+        $this->_aConfig['aLessConfig']['bx-color-border-box'] = $this->_setColorRgba($sName . '_card_border_color', $sDefColBorder);
+        $this->_aConfig['aLessConfig']['bx-color-border-popup'] = $this->_setColorRgba($sName . '_popup_border_color', $sDefColBorder);
+        $this->_aConfig['aLessConfig']['bx-color-border-menu-main'] = $this->_setColorRgba($sName . '_menu_main_border_color', $sDefColBorder);
+        $this->_aConfig['aLessConfig']['bx-color-border-menu-account'] = $this->_setColorRgba($sName . '_menu_account_border_color', $sDefColBorder);
+        $this->_aConfig['aLessConfig']['bx-color-border-menu-add'] = $this->_setColorRgba($sName . '_menu_add_border_color', $sDefColBorder);
+        $this->_aConfig['aLessConfig']['bx-color-border-menu-page'] = $this->_setColorRgba($sName . '_menu_page_border_color', $sDefColBorder);
+        $this->_aConfig['aLessConfig']['bx-color-border-menu-slide'] = $this->_setColorRgba($sName . '_menu_slide_border_color', $sDefColBorder);
+        $this->_aConfig['aLessConfig']['bx-color-border-form-input'] = $this->_setColorRgba($sName . '_form_input_border_color', 'rgba(121, 189, 154, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-border-form-input-active'] = $this->_setColorRgba($sName . '_form_input_border_color_active', 'rgba(108, 170, 138, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-border-button-large'] = $this->_setColorRgba($sName . '_button_lg_border_color', $sDefColBorder);
+        $this->_aConfig['aLessConfig']['bx-color-border-button-large-hover'] = $this->_setColorRgba($sName . '_button_lg_border_color_hover', $sDefColBorder);
+        $this->_aConfig['aLessConfig']['bx-color-border-button-large-primary'] = $this->_setColorRgba($sName . '_button_lgp_border_color', $sDefColBorder);
+        $this->_aConfig['aLessConfig']['bx-color-border-button-large-primary-hover'] = $this->_setColorRgba($sName . '_button_lgp_border_color_hover', $sDefColBorder);
+        $this->_aConfig['aLessConfig']['bx-color-border-button'] = $this->_setColorRgba($sName . '_button_nl_border_color', $sDefColBorder);
+        $this->_aConfig['aLessConfig']['bx-color-border-button-hover'] = $this->_setColorRgba($sName . '_button_nl_border_color_hover', $sDefColBorder);
+        $this->_aConfig['aLessConfig']['bx-color-border-button-primary'] = $this->_setColorRgba($sName . '_button_nlp_border_color', $sDefColBorder);
+        $this->_aConfig['aLessConfig']['bx-color-border-button-primary-hover'] = $this->_setColorRgba($sName . '_button_nlp_border_color_hover', $sDefColBorder);
+        $this->_aConfig['aLessConfig']['bx-color-border-button-small'] = $this->_setColorRgba($sName . '_button_sm_border_color', $sDefColBorder);
+        $this->_aConfig['aLessConfig']['bx-color-border-button-small-hover'] = $this->_setColorRgba($sName . '_button_sm_border_color_hover', $sDefColBorder);
+        $this->_aConfig['aLessConfig']['bx-color-border-button-small-primary'] = $this->_setColorRgba($sName . '_button_smp_border_color', $sDefColBorder);
+        $this->_aConfig['aLessConfig']['bx-color-border-button-small-primary-hover'] = $this->_setColorRgba($sName . '_button_smp_border_color_hover', $sDefColBorder);
+
+        $this->_aConfig['aLessConfig']['bx-color-icon-header'] = $this->_setColorRgba($sName . '_header_icon_color', 'rgba(255, 255, 255, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-icon-header-hover'] = $this->_setColorRgba($sName . '_header_icon_color_hover', 'rgba(255, 255, 255, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-icon-footer'] = $this->_setColorRgba($sName . '_footer_icon_color', 'rgba(62, 134, 133, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-icon-footer-hover'] = $this->_setColorRgba($sName . '_footer_icon_color_hover', 'rgba(62, 134, 133, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-icon-body'] = $this->_setColorRgba($sName . '_body_icon_color', 'rgba(62, 134, 133, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-icon-body-hover'] = $this->_setColorRgba($sName . '_body_icon_color_hover', 'rgba(62, 134, 133, 1)');
+
+        $this->_aConfig['aLessConfig']['bx-color-link-header'] = $this->_setColorRgba($sName . '_header_link_color', 'rgba(255, 255, 255, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-link-header-hover'] = $this->_setColorRgba($sName . '_header_link_color_hover', 'rgba(255, 255, 255, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-link-footer'] = $this->_setColorRgba($sName . '_footer_link_color', 'rgba(62, 134, 133, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-link-footer-hover'] = $this->_setColorRgba($sName . '_footer_link_color_hover', 'rgba(62, 134, 133, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-link-body'] = $this->_setColorRgba($sName . '_body_link_color', 'rgba(62, 134, 133, 1)');
+        $this->_aConfig['aLessConfig']['bx-color-link-body-hover'] = $this->_setColorRgba($sName . '_body_link_color_hover', 'rgba(62, 134, 133, 1)');
+
+        //--- Borders
+        $this->_aConfig['aLessConfig']['bx-border-width-header'] = $this->_setSize($sName . '_header_border_size');
+        $this->_aConfig['aLessConfig']['bx-border-width-footer'] = $this->_setSize($sName . '_footer_border_size', '1px');
+        $this->_aConfig['aLessConfig']['bx-border-width-cover'] = $this->_setSize($sName . '_cover_border_size', '0px');
+        $this->_aConfig['aLessConfig']['bx-border-width-cover-icon'] = $this->_setSize($sName . '_cover_icon_border_size', '1px');
+        $this->_aConfig['aLessConfig']['bx-border-width-block'] = $this->_setSize($sName . '_block_border_size');
+        $this->_aConfig['aLessConfig']['bx-border-width-block-title'] = $this->_setSize($sName . '_block_title_border_size');
+        $this->_aConfig['aLessConfig']['bx-border-width-box'] = $this->_setSize($sName . '_card_border_size');
+        $this->_aConfig['aLessConfig']['bx-border-width-popup'] = $this->_setSize($sName . '_popup_border_size');
+        $this->_aConfig['aLessConfig']['bx-border-width-menu-main'] = $this->_setSize($sName . '_menu_main_border_size');
+        $this->_aConfig['aLessConfig']['bx-border-width-menu-account'] = $this->_setSize($sName . '_menu_account_border_size');
+        $this->_aConfig['aLessConfig']['bx-border-width-menu-add'] = $this->_setSize($sName . '_menu_add_border_size');
+        $this->_aConfig['aLessConfig']['bx-border-width-menu-page'] = $this->_setSize($sName . '_menu_page_border_size');
+        $this->_aConfig['aLessConfig']['bx-border-width-menu-slide'] = $this->_setSize($sName . '_menu_slide_border_size');
+        $this->_aConfig['aLessConfig']['bx-border-width-form-input'] = $this->_setSize($sName . '_form_input_border_size');
+        $this->_aConfig['aLessConfig']['bx-border-width-button-large'] = $this->_setSize($sName . '_button_lg_border_size');
+        $this->_aConfig['aLessConfig']['bx-border-width-button-large-primary'] = $this->_setSize($sName . '_button_lgp_border_size');
+        $this->_aConfig['aLessConfig']['bx-border-width-button'] = $this->_setSize($sName . '_button_nl_border_size');
+        $this->_aConfig['aLessConfig']['bx-border-width-button-primary'] = $this->_setSize($sName . '_button_nlp_border_size');
+        $this->_aConfig['aLessConfig']['bx-border-width-button-small'] = $this->_setSize($sName . '_button_sm_border_size');
+        $this->_aConfig['aLessConfig']['bx-border-width-button-small-primary'] = $this->_setSize($sName . '_button_smp_border_size');
+
+        $this->_aConfig['aLessConfig']['bx-border-radius-block'] = $this->_setSize($sName . '_block_border_radius');
+        list(
+            $this->_aConfig['aLessConfig']['bx-border-radius-block-tl'],
+            $this->_aConfig['aLessConfig']['bx-border-radius-block-tr'],
+            $this->_aConfig['aLessConfig']['bx-border-radius-block-br'],
+            $this->_aConfig['aLessConfig']['bx-border-radius-block-bl']
+        ) = $this->_setSizeDivided($this->_aConfig['aLessConfig']['bx-border-radius-block']);
+        $this->_aConfig['aLessConfig']['bx-border-radius-cover'] = $this->_setSize($sName . '_cover_border_radius');
+        $this->_aConfig['aLessConfig']['bx-border-radius-cover-icon'] = $this->_setSize($sName . '_cover_icon_border_radius');
+        $this->_aConfig['aLessConfig']['bx-border-radius-block-title'] = $this->_setSize($sName . '_block_title_border_radius');
+        $this->_aConfig['aLessConfig']['bx-border-radius-box'] = $this->_setSize($sName . '_card_border_radius', '3px');
+        list(
+            $this->_aConfig['aLessConfig']['bx-border-radius-box-tl'],
+            $this->_aConfig['aLessConfig']['bx-border-radius-box-tr'],
+            $this->_aConfig['aLessConfig']['bx-border-radius-box-br'],
+            $this->_aConfig['aLessConfig']['bx-border-radius-box-bl']
+        ) = $this->_setSizeDivided($this->_aConfig['aLessConfig']['bx-border-radius-box']);
+        list(
+            $this->_aConfig['aLessConfig']['bx-border-radius-box-itl'],
+            $this->_aConfig['aLessConfig']['bx-border-radius-box-itr'],
+            $this->_aConfig['aLessConfig']['bx-border-radius-box-ibr'],
+            $this->_aConfig['aLessConfig']['bx-border-radius-box-ibl']
+        ) = $this->_setInnerSizeDivided($this->_aConfig['aLessConfig']['bx-border-radius-box']);
+        $this->_aConfig['aLessConfig']['bx-border-radius-popup'] = $this->_setSize($sName . '_popup_border_radius', '3px');
+        list(
+            $this->_aConfig['aLessConfig']['bx-border-radius-popup-tl'],
+            $this->_aConfig['aLessConfig']['bx-border-radius-popup-tr'],
+            $this->_aConfig['aLessConfig']['bx-border-radius-popup-br'],
+            $this->_aConfig['aLessConfig']['bx-border-radius-popup-bl']
+        ) = $this->_setSizeDivided($this->_aConfig['aLessConfig']['bx-border-radius-popup']);
+        $this->_aConfig['aLessConfig']['bx-border-radius-form-input'] = $this->_setSize($sName . '_form_input_border_radius', '3px');
+        $this->_aConfig['aLessConfig']['bx-border-radius-button-large'] = $this->_setSize($sName . '_button_lg_border_radius');
+        $this->_aConfig['aLessConfig']['bx-border-radius-button-large-primary'] = $this->_setSize($sName . '_button_lgp_border_radius');
+        $this->_aConfig['aLessConfig']['bx-border-radius-button'] = $this->_setSize($sName . '_button_nl_border_radius');
+        $this->_aConfig['aLessConfig']['bx-border-radius-button-primary'] = $this->_setSize($sName . '_button_nlp_border_radius');
+        $this->_aConfig['aLessConfig']['bx-border-radius-button-small'] = $this->_setSize($sName . '_button_sm_border_radius');
+        $this->_aConfig['aLessConfig']['bx-border-radius-button-small-primary'] = $this->_setSize($sName . '_button_smp_border_radius');
+
+        //--- Text
+        $this->_aConfig['aLessConfig']['bx-text-align-cover'] = $this->_setAlign($sName . '_cover_text_align');
+        $this->_aConfig['aLessConfig']['bx-text-align-menu-main-items'] = $this->_setAlign($sName . '_menu_main_align_items');
+
+        //--- Default Fonts
+        if($this->_isModule) {
+            $this->_aConfig['aLessConfig']['bx-font-family'] = $this->_setValue($sName . '_font_family', 'Helvetica, Arial, sans-serif');
+            $this->_aConfig['aLessConfig']['bx-font-size-default'] = $this->_setSize($sName . '_font_size_default', '18px');
+            $this->_aConfig['aLessConfig']['bx-font-size-small'] = $this->_setSize($sName . '_font_size_small', '14px');
+            $this->_aConfig['aLessConfig']['bx-font-size-middle'] = $this->_setSize($sName . '_font_size_middle', '16px');
+            $this->_aConfig['aLessConfig']['bx-font-size-large'] = $this->_setSize($sName . '_font_size_large', '22px');
+            $this->_aConfig['aLessConfig']['bx-font-size-h1'] = $this->_setSize($sName . '_font_size_h1', '38px');
+            $this->_aConfig['aLessConfig']['bx-font-size-h2'] = $this->_setSize($sName . '_font_size_h2', '24px');
+            $this->_aConfig['aLessConfig']['bx-font-size-h3'] = $this->_setSize($sName . '_font_size_h3', '18px');
+
+            $this->_aConfig['aLessConfig']['bx-font-color-default'] = $this->_setColorRgba($sName . '_font_color_default', 'rgba(51, 51, 51, 1)');
+            $this->_aConfig['aLessConfig']['bx-font-color-grayed'] = $this->_setColorRgba($sName . '_font_color_grayed', 'rgba(153, 153, 153, 1)');
+            $this->_aConfig['aLessConfig']['bx-font-color-contrasted'] = $this->_setColorRgba($sName . '_font_color_contrasted', 'rgba(255, 255, 255, 1)');
+        }
+
+        //--- Font Family
+        $this->_aConfig['aLessConfig']['bx-font-family-cover'] = $this->_setValue($sName . '_cover_font_family');
+        $this->_aConfig['aLessConfig']['bx-font-family-block-title'] = $this->_setValue($sName . '_block_title_font_family');
+        $this->_aConfig['aLessConfig']['bx-font-family-popup-title'] = $this->_setValue($sName . '_popup_title_font_family');
+        $this->_aConfig['aLessConfig']['bx-font-family-form-input'] = $this->_setValue($sName . '_form_input_font_family');
+        $this->_aConfig['aLessConfig']['bx-font-family-menu-main'] = $this->_setValue($sName . '_menu_main_font_family');
+        $this->_aConfig['aLessConfig']['bx-font-family-menu-account'] = $this->_setValue($sName . '_menu_account_font_family');
+        $this->_aConfig['aLessConfig']['bx-font-family-menu-add'] = $this->_setValue($sName . '_menu_add_font_family');
+        $this->_aConfig['aLessConfig']['bx-font-family-menu-page'] = $this->_setValue($sName . '_menu_page_font_family');
+        $this->_aConfig['aLessConfig']['bx-font-family-menu-slide'] = $this->_setValue($sName . '_menu_slide_font_family');
+        $this->_aConfig['aLessConfig']['bx-font-family-button-large'] = $this->_setValue($sName . '_button_lg_font_family');
+        $this->_aConfig['aLessConfig']['bx-font-family-button-large-primary'] = $this->_setValue($sName . '_button_lgp_font_family');
+        $this->_aConfig['aLessConfig']['bx-font-family-button'] = $this->_setValue($sName . '_button_nl_font_family');
+        $this->_aConfig['aLessConfig']['bx-font-family-button-primary'] = $this->_setValue($sName . '_button_nlp_font_family');
+        $this->_aConfig['aLessConfig']['bx-font-family-button-small'] = $this->_setValue($sName . '_button_sm_font_family');
+        $this->_aConfig['aLessConfig']['bx-font-family-button-small-primary'] = $this->_setValue($sName . '_button_smp_font_family');
+
+        //--- Font Size
+        $this->_aConfig['aLessConfig']['bx-font-size-cover'] = $this->_setSize($sName . '_cover_font_size', '2.0rem');
+        $this->_aConfig['aLessConfig']['bx-font-size-block-title'] = $this->_setSize($sName . '_block_title_font_size', '1.5rem');
+        $this->_aConfig['aLessConfig']['bx-font-size-popup-title'] = $this->_setSize($sName . '_popup_title_font_size', '1.5rem');
+        $this->_aConfig['aLessConfig']['bx-font-size-form-input'] = $this->_setSize($sName . '_form_input_font_size', '1.125rem');
+        $this->_aConfig['aLessConfig']['bx-font-size-menu-main'] = $this->_setSize($sName . '_menu_main_font_size', '1.125rem');
+        $this->_aConfig['aLessConfig']['bx-font-size-menu-account'] = $this->_setSize($sName . '_menu_account_font_size', '1.125rem');
+        $this->_aConfig['aLessConfig']['bx-font-size-menu-add'] = $this->_setSize($sName . '_menu_add_font_size', '1.125rem');
+        $this->_aConfig['aLessConfig']['bx-font-size-menu-page'] = $this->_setSize($sName . '_menu_page_font_size', '1.2rem');
+        $this->_aConfig['aLessConfig']['bx-font-size-menu-slide'] = $this->_setSize($sName . '_menu_slide_font_size', '1.0rem');
+        $this->_aConfig['aLessConfig']['bx-font-size-button-large'] = $this->_setSize($sName . '_button_lg_font_size', '1rem');
+        $this->_aConfig['aLessConfig']['bx-font-size-button-large-primary'] = $this->_setSize($sName . '_button_lgp_font_size', '1rem');
+        $this->_aConfig['aLessConfig']['bx-font-size-button'] = $this->_setSize($sName . '_button_nl_font_size', '1rem');
+        $this->_aConfig['aLessConfig']['bx-font-size-button-primary'] = $this->_setSize($sName . '_button_nlp_font_size', '1rem');
+        $this->_aConfig['aLessConfig']['bx-font-size-button-small'] = $this->_setSize($sName . '_button_sm_font_size', '0.9rem');
+        $this->_aConfig['aLessConfig']['bx-font-size-button-small-primary'] = $this->_setSize($sName . '_button_smp_font_size', '0.9rem');
+
+        //--- Font Color
+        $sColFontDef = 'rgba(51, 51, 51, 1.0)';		//--- Default
+        $sColFontGrd = 'rgba(153, 153, 153, 1)';	//--- Grayed
+        $sColFontCnt = 'rgba(255, 255, 255, 1)';	//--- Contrasted
+        $sColFontLnk = 'rgba(62, 134, 133, 1)';		//--- Link
+        $sColFontLnkHov = 'rgba(62, 134, 133, 1)';	//--- Link on-hiver
+        $this->_aConfig['aLessConfig']['bx-font-color-footer'] = $this->_setColorRgba($sName . '_footer_font_color', $sColFontDef);
+        $this->_aConfig['aLessConfig']['bx-font-color-menu-main'] = $this->_setColorRgba($sName . '_menu_main_font_color', 'rgba(62, 134, 133, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-menu-main-hover'] = $this->_setColorRgba($sName . '_menu_main_font_color_hover', 'rgba(62, 134, 133, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-menu-main-active'] = $this->_setColorRgba($sName . '_menu_main_font_color_active', 'rgba(0, 0, 0, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-menu-account'] = $this->_setColorRgba($sName . '_menu_account_font_color', 'rgba(62, 134, 133, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-menu-account-hover'] = $this->_setColorRgba($sName . '_menu_account_font_color_hover', 'rgba(62, 134, 133, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-menu-account-active'] = $this->_setColorRgba($sName . '_menu_account_font_color_active', 'rgba(0, 0, 0, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-menu-add'] = $this->_setColorRgba($sName . '_menu_add_font_color', 'rgba(62, 134, 133, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-menu-add-hover'] = $this->_setColorRgba($sName . '_menu_add_font_color_hover', 'rgba(62, 134, 133, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-menu-add-active'] = $this->_setColorRgba($sName . '_menu_add_font_color_active', 'rgba(0, 0, 0, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-menu-page'] = $this->_setColorRgba($sName . '_menu_page_font_color', 'rgba(62, 134, 133, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-menu-page-hover'] = $this->_setColorRgba($sName . '_menu_page_font_color_hover', 'rgba(62, 134, 133, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-menu-page-active'] = $this->_setColorRgba($sName . '_menu_page_font_color_active', 'rgba(0, 0, 0, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-menu-slide'] = $this->_setColorRgba($sName . '_menu_slide_font_color', 'rgba(62, 134, 133, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-menu-slide-hover'] = $this->_setColorRgba($sName . '_menu_slide_font_color_hover', 'rgba(62, 134, 133, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-menu-slide-active'] = $this->_setColorRgba($sName . '_menu_slide_font_color_active', 'rgba(0, 0, 0, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-button-large'] = $this->_setColorRgba($sName . '_button_lg_font_color', 'rgba(255, 255, 255, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-button-large-hover'] = $this->_setColorRgba($sName . '_button_lg_font_color_hover', 'rgba(255, 255, 255, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-button-large-primary'] = $this->_setColorRgba($sName . '_button_lgp_font_color', 'rgba(255, 255, 255, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-button-large-primary-hover'] = $this->_setColorRgba($sName . '_button_lgp_font_color_hover', 'rgba(255, 255, 255, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-button'] = $this->_setColorRgba($sName . '_button_nl_font_color', 'rgba(255, 255, 255, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-button-hover'] = $this->_setColorRgba($sName . '_button_nl_font_color_hover', 'rgba(255, 255, 255, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-button-primary'] = $this->_setColorRgba($sName . '_button_nlp_font_color', 'rgba(255, 255, 255, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-button-primary-hover'] = $this->_setColorRgba($sName . '_button_nlp_font_color_hover', 'rgba(255, 255, 255, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-button-small'] = $this->_setColorRgba($sName . '_button_sm_font_color', 'rgba(255, 255, 255, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-button-small-hover'] = $this->_setColorRgba($sName . '_button_sm_font_color_hover', 'rgba(255, 255, 255, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-button-small-primary'] = $this->_setColorRgba($sName . '_button_smp_font_color', 'rgba(255, 255, 255, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-button-small-primary-hover'] = $this->_setColorRgba($sName . '_button_smp_font_color_hover', 'rgba(255, 255, 255, 1)');
+        $this->_aConfig['aLessConfig']['bx-font-color-form-input'] = $this->_setColorRgba($sName . '_form_input_font_color', $sColFontDef);
+        $this->_aConfig['aLessConfig']['bx-font-color-default-h1'] = $this->_setColorRgba($sName . '_font_color_default_h1', $sColFontDef);
+        $this->_aConfig['aLessConfig']['bx-font-color-grayed-h1'] = $this->_setColorRgba($sName . '_font_color_grayed_h1', $sColFontGrd);
+        $this->_aConfig['aLessConfig']['bx-font-color-contrasted-h1'] = $this->_setColorRgba($sName . '_font_color_contrasted_h1', $sColFontCnt);
+        $this->_aConfig['aLessConfig']['bx-font-color-link-h1'] = $this->_setColorRgba($sName . '_font_color_link_h1', $sColFontLnk);
+        $this->_aConfig['aLessConfig']['bx-font-color-link-h1-hover'] = $this->_setColorRgba($sName . '_font_color_link_h1_hover', $sColFontLnkHov);
+        $this->_aConfig['aLessConfig']['bx-font-color-default-h2'] = $this->_setColorRgba($sName . '_font_color_default_h2', $sColFontDef);
+        $this->_aConfig['aLessConfig']['bx-font-color-grayed-h2'] = $this->_setColorRgba($sName . '_font_color_grayed_h2', $sColFontGrd);
+        $this->_aConfig['aLessConfig']['bx-font-color-contrasted-h2'] = $this->_setColorRgba($sName . '_font_color_contrasted_h2', $sColFontCnt);
+        $this->_aConfig['aLessConfig']['bx-font-color-link-h2'] = $this->_setColorRgba($sName . '_font_color_link_h2', $sColFontLnk);
+        $this->_aConfig['aLessConfig']['bx-font-color-link-h2-hover'] = $this->_setColorRgba($sName . '_font_color_link_h2_hover', $sColFontLnkHov);
+        $this->_aConfig['aLessConfig']['bx-font-color-default-h3'] = $this->_setColorRgba($sName . '_font_color_default_h3', $sColFontDef);
+        $this->_aConfig['aLessConfig']['bx-font-color-grayed-h3'] = $this->_setColorRgba($sName . '_font_color_grayed_h3', $sColFontGrd);
+        $this->_aConfig['aLessConfig']['bx-font-color-contrasted-h3'] = $this->_setColorRgba($sName . '_font_color_contrasted_h3', $sColFontCnt);
+        $this->_aConfig['aLessConfig']['bx-font-color-link-h3'] = $this->_setColorRgba($sName . '_font_color_link_h3', $sColFontLnk);
+        $this->_aConfig['aLessConfig']['bx-font-color-link-h3-hover'] = $this->_setColorRgba($sName . '_font_color_link_h3_hover', $sColFontLnkHov);
+
+        //--- Font Weight
+        $this->_aConfig['aLessConfig']['bx-font-weight-cover'] = $this->_setValue($sName . '_cover_font_weight', '700');
+        $this->_aConfig['aLessConfig']['bx-font-weight-block-title'] = $this->_setValue($sName . '_block_title_font_weight', '500');
+        $this->_aConfig['aLessConfig']['bx-font-weight-menu-main'] = $this->_setValue($sName . '_menu_main_font_weight', '400');
+        $this->_aConfig['aLessConfig']['bx-font-weight-menu-account'] = $this->_setValue($sName . '_menu_account_font_weight', '400');
+        $this->_aConfig['aLessConfig']['bx-font-weight-menu-add'] = $this->_setValue($sName . '_menu_add_font_weight', '400');
+        $this->_aConfig['aLessConfig']['bx-font-weight-menu-page'] = $this->_setValue($sName . '_menu_page_font_weight', '400');
+        $this->_aConfig['aLessConfig']['bx-font-weight-menu-slide'] = $this->_setValue($sName . '_menu_slide_font_weight', '400');
+        $this->_aConfig['aLessConfig']['bx-font-weight-button-large'] = $this->_setValue($sName . '_button_lg_font_weight', '400');
+        $this->_aConfig['aLessConfig']['bx-font-weight-button-large-primary'] = $this->_setValue($sName . '_button_lgp_font_weight', '400');
+        $this->_aConfig['aLessConfig']['bx-font-weight-button'] = $this->_setValue($sName . '_button_nl_font_weight', '400');
+        $this->_aConfig['aLessConfig']['bx-font-weight-button-primary'] = $this->_setValue($sName . '_button_nlp_font_weight', '400');
+        $this->_aConfig['aLessConfig']['bx-font-weight-button-small'] = $this->_setValue($sName . '_button_sm_font_weight', '400');
+        $this->_aConfig['aLessConfig']['bx-font-weight-button-small-primary'] = $this->_setValue($sName . '_button_smp_font_weight', '400');
+        $this->_aConfig['aLessConfig']['bx-font-weight-h1'] = $this->_setValue($sName . '_font_weight_h1', '700');
+        $this->_aConfig['aLessConfig']['bx-font-weight-h2'] = $this->_setValue($sName . '_font_weight_h2', '700');
+        $this->_aConfig['aLessConfig']['bx-font-weight-h3'] = $this->_setValue($sName . '_font_weight_h3', '500');
+
+        //--- Viewport 
+        $this->_aConfig['aLessConfig']['bx-viewport-font-tablet'] = $this->_setValue($sName . '_vpt_font_size_scale', '100%');
+        $this->_aConfig['aLessConfig']['bx-viewport-font-mobile'] = $this->_setValue($sName . '_vpm_font_size_scale', '85%');
+
+        if($this->_isModule) {
+            $this->setPageWidth('bx_lucid_page_width');
+
+            $oModule = BxDolModule::getInstance($sName);
+            if($oModule)
+                $oModule->_oTemplate->addJs(array(
+                    //'jquery.mobile.custom.min.js',
+                    'jquery.menu-aim.js',
+                ));
+        }
+
+        BxDolTemplate::getInstance()->addJs(array(
+            'modernizr.min.js'
+        ));
+
+        BxDolTemplate::getInstance()->addCss(array(
+            'custom.css',
+            'menu-dropdown.css'
+        ));
+    }
+}
+
+/** @} */

+ 68 - 0
modules/boonex/lucid/updates/10.0.0_10.0.1/source/install/config.php

@@ -0,0 +1,68 @@
+<?php
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Lucid Lucid template
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+$aConfig = array(
+    /**
+     * Main Section.
+     */
+    'type' => BX_DOL_MODULE_TYPE_TEMPLATE,
+    'name' => 'bx_lucid',
+    'title' => 'Lucid',
+    'note' => 'Design template',
+    'version' => '10.0.1',
+    'vendor' => 'Boonex',
+    'help_url' => 'http://feed.una.io/?section={module_name}',
+
+    'compatible_with' => array(
+        '10.0.0-B2'
+    ),
+
+    /**
+     * 'home_dir' and 'home_uri' - should be unique. Don't use spaces in 'home_uri' and the other special chars.
+     */
+    'home_dir' => 'boonex/lucid/',
+    'home_uri' => 'lucid',
+
+    'db_prefix' => 'bx_lucid_',
+    'class_prefix' => 'BxLucid',
+
+    /**
+     * Category for language keys.
+     */
+    'language_category' => 'Boonex Lucid Template',
+
+    /**
+     * 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
+    ),
+    'disable' => array(
+        'execute_sql' => 1
+    ),
+
+    /**
+     * Dependencies Section
+     */
+    'dependencies' => array(),
+);
+
+/** @} */

+ 821 - 0
modules/boonex/lucid/updates/10.0.0_10.0.1/source/install/sql/install.sql

@@ -0,0 +1,821 @@
+SET @sName = 'bx_lucid';
+
+
+-- SETTINGS
+INSERT INTO `sys_options_types`(`group`, `name`, `caption`, `icon`, `order`) VALUES 
+('templates', @sName, '_bx_lucid_stg_cpt_type', 'bx_lucid@modules/boonex/lucid/|std-icon.svg', 2);
+SET @iTypeId = LAST_INSERT_ID();
+
+-- SETTINGS: Lucid template System
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_system'), '_bx_lucid_stg_cpt_category_system', 10);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_switcher_title'), '_bx_lucid_stg_cpt_option_switcher_name', 'Lucid', 'digit', '', '', '', 1);
+
+
+-- SETTINGS: Lucid template Styles General
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_styles_general'), '_bx_lucid_stg_cpt_category_styles_general', 20);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_general_item_bg_color_hover'), '_bx_lucid_stg_cpt_option_general_item_bg_color_hover', 'rgba(210, 230, 250, 0.2)', 'rgba', '', '', '', 1),
+(@iCategoryId, CONCAT(@sName, '_general_item_bg_color_active'), '_bx_lucid_stg_cpt_option_general_item_bg_color_active', 'rgba(210, 230, 250, 0.4)', 'rgba', '', '', '', 2),
+(@iCategoryId, CONCAT(@sName, '_general_item_bg_color_disabled'), '_bx_lucid_stg_cpt_option_general_item_bg_color_disabled', 'rgba(221, 221, 221, 1.0)', 'rgba', '', '', '', 3);
+
+
+
+-- SETTINGS: Lucid template Styles Header
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_styles_header'), '_bx_lucid_stg_cpt_category_styles_header', 30);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_header_height'), '_bx_lucid_stg_cpt_option_header_height', '3.5rem', 'digit', '', '', '', 1),
+(@iCategoryId, CONCAT(@sName, '_header_content_padding'), '_bx_lucid_stg_cpt_option_header_content_padding', '0px', 'digit', '', '', '', 2),
+(@iCategoryId, CONCAT(@sName, '_header_bg_color'), '_bx_lucid_stg_cpt_option_header_bg_color', 'rgba(76, 103, 159, 1.0)', 'rgba', '', '', '', 3),
+(@iCategoryId, CONCAT(@sName, '_header_bg_image'), '_bx_lucid_stg_cpt_option_header_bg_image', '', 'image', '', '', '', 4),
+(@iCategoryId, CONCAT(@sName, '_header_bg_image_repeat'), '_bx_lucid_stg_cpt_option_header_bg_image_repeat', 'no-repeat', 'select', 'no-repeat,repeat,repeat-x,repeat-y', '', '', 5),
+(@iCategoryId, CONCAT(@sName, '_header_bg_image_size'), '_bx_lucid_stg_cpt_option_header_bg_image_size', 'cover', 'select', 'auto,cover,contain', '', '', 6),
+(@iCategoryId, CONCAT(@sName, '_site_logo'), '_bx_lucid_stg_cpt_option_site_logo', '', 'image', '', '', '', 7),
+(@iCategoryId, CONCAT(@sName, '_site_logo_alt'), '_bx_lucid_stg_cpt_option_site_logo_alt', '', 'text', '', '', '', 8),
+(@iCategoryId, CONCAT(@sName, '_site_logo_width'), '_bx_lucid_stg_cpt_option_site_logo_width', '240', 'digit', '', '', '', 9),
+(@iCategoryId, CONCAT(@sName, '_site_logo_height'), '_bx_lucid_stg_cpt_option_site_logo_height', '48', 'digit', '', '', '', 10),
+(@iCategoryId, CONCAT(@sName, '_header_border_color'), '_bx_lucid_stg_cpt_option_header_border_color', 'rgba(255, 255, 255, 1.0)', 'rgba', '', '', '', 11),
+(@iCategoryId, CONCAT(@sName, '_header_border_size'), '_bx_lucid_stg_cpt_option_header_border_size', '1px', 'digit', '', '', '', 12),
+(@iCategoryId, CONCAT(@sName, '_header_shadow'), '_bx_lucid_stg_cpt_option_header_shadow', 'none', 'digit', '', '', '', 13),
+(@iCategoryId, CONCAT(@sName, '_header_icon_color'), '_bx_lucid_stg_cpt_option_header_icon_color', 'rgba(255, 255, 255, 0.8)', 'rgba', '', '', '', 14),
+(@iCategoryId, CONCAT(@sName, '_header_icon_color_hover'), '_bx_lucid_stg_cpt_option_header_icon_color_hover', 'rgba(255, 255, 255, 1)', 'rgba', '', '', '', 15),
+(@iCategoryId, CONCAT(@sName, '_header_link_color'), '_bx_lucid_stg_cpt_option_header_link_color', 'rgba(215, 235, 255, 1)', 'rgba', '', '', '', 16),
+(@iCategoryId, CONCAT(@sName, '_header_link_color_hover'), '_bx_lucid_stg_cpt_option_header_link_color_hover', 'rgba(255, 255, 255, 1)', 'rgba', '', '', '', 17);
+
+-- SETTINGS: Lucid template Styles Footer
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_styles_footer'), '_bx_lucid_stg_cpt_category_styles_footer', 40);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_footer_bg_color'), '_bx_lucid_stg_cpt_option_footer_bg_color', 'rgba(40, 60, 80, 0.0)', 'rgba', '', '', '', 1),
+(@iCategoryId, CONCAT(@sName, '_footer_bg_image'), '_bx_lucid_stg_cpt_option_footer_bg_image', '', 'image', '', '', '', 2),
+(@iCategoryId, CONCAT(@sName, '_footer_bg_image_repeat'), '_bx_lucid_stg_cpt_option_footer_bg_image_repeat', 'no-repeat', 'select', 'no-repeat,repeat,repeat-x,repeat-y', '', '', 3),
+(@iCategoryId, CONCAT(@sName, '_footer_bg_image_size'), '_bx_lucid_stg_cpt_option_footer_bg_image_size', 'cover', 'select', 'auto,cover,contain', '', '', 4),
+(@iCategoryId, CONCAT(@sName, '_footer_content_padding'), '_bx_lucid_stg_cpt_option_footer_content_padding', '1rem', 'digit', '', '', '', 5),
+(@iCategoryId, CONCAT(@sName, '_footer_border_color'), '_bx_lucid_stg_cpt_option_footer_border_color', 'rgba(40, 60, 80, 0.1)', 'rgba', '', '', '', 6),
+(@iCategoryId, CONCAT(@sName, '_footer_border_size'), '_bx_lucid_stg_cpt_option_footer_border_size', '1px', 'digit', '', '', '', 7),
+(@iCategoryId, CONCAT(@sName, '_footer_shadow'), '_bx_lucid_stg_cpt_option_footer_shadow', 'none', 'digit', '', '', '', 8),
+(@iCategoryId, CONCAT(@sName, '_footer_font_color'), '_bx_lucid_stg_cpt_option_footer_font_color', 'rgba(40, 60, 80, 1)', 'rgba', '', '', '', 9),
+(@iCategoryId, CONCAT(@sName, '_footer_icon_color'), '_bx_lucid_stg_cpt_option_footer_icon_color', 'rgba(30, 140, 240, 1)', 'rgba', '', '', '', 10),
+(@iCategoryId, CONCAT(@sName, '_footer_icon_color_hover'), '_bx_lucid_stg_cpt_option_footer_icon_color_hover', 'rgba(10, 120, 220, 1)', 'rgba', '', '', '', 11),
+(@iCategoryId, CONCAT(@sName, '_footer_link_color'), '_bx_lucid_stg_cpt_option_footer_link_color', 'rgba(30, 140, 240, 1)', 'rgba', '', '', '', 12),
+(@iCategoryId, CONCAT(@sName, '_footer_link_color_hover'), '_bx_lucid_stg_cpt_option_footer_link_color_hover', 'rgba(10, 120, 220, 1)', 'rgba', '', '', '', 13);
+
+-- SETTINGS: Lucid template Styles Body
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_styles_body'), '_bx_lucid_stg_cpt_category_styles_body', 50);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_body_bg_color'), '_bx_lucid_stg_cpt_option_body_bg_color', 'rgb(230, 240, 250)', 'rgb', '', '', '', 1),
+(@iCategoryId, CONCAT(@sName, '_body_bg_image'), '_bx_lucid_stg_cpt_option_body_bg_image', '', 'image', '', '', '', 2),
+(@iCategoryId, CONCAT(@sName, '_body_bg_image_repeat'), '_bx_lucid_stg_cpt_option_body_bg_image_repeat', 'no-repeat', 'select', 'no-repeat,repeat,repeat-x,repeat-y', '', '', 3),
+(@iCategoryId, CONCAT(@sName, '_body_bg_image_size'), '_bx_lucid_stg_cpt_option_body_bg_image_size', 'cover', 'select', 'auto,cover,contain', '', '', 4),
+(@iCategoryId, CONCAT(@sName, '_page_width'), '_bx_lucid_stg_cpt_option_page_width', '1024', 'digit', '', '', '', 5),
+(@iCategoryId, CONCAT(@sName, '_body_icon_color'), '_bx_lucid_stg_cpt_option_body_icon_color', 'rgba(30, 150, 250, 0.9)', 'rgba', '', '', '', 6),
+(@iCategoryId, CONCAT(@sName, '_body_icon_color_hover'), '_bx_lucid_stg_cpt_option_body_icon_color_hover', 'rgba(30, 150, 250, 1)', 'rgba', '', '', '', 7),
+(@iCategoryId, CONCAT(@sName, '_body_link_color'), '_bx_lucid_stg_cpt_option_body_link_color', 'rgba(30, 150, 250, 0.9)', 'rgba', '', '', '', 8),
+(@iCategoryId, CONCAT(@sName, '_body_link_color_hover'), '_bx_lucid_stg_cpt_option_body_link_color_hover', 'rgba(30, 150, 250, 1)', 'rgba', '', '', '', 9);
+
+
+-- SETTINGS: Lucid template Styles Cover
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_styles_cover'), '_bx_lucid_stg_cpt_category_styles_cover', 55);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_cover_height'), '_bx_lucid_stg_cpt_option_cover_height', '30vh', 'digit', '', '', '', 1),
+(@iCategoryId, CONCAT(@sName, '_cover_bg_color'), '_bx_lucid_stg_cpt_option_cover_bg_color', 'rgba(255, 255, 255, 1)', 'rgba', '', '', '', 2),
+(@iCategoryId, CONCAT(@sName, '_cover_content_padding'), '_bx_lucid_stg_cpt_option_cover_content_padding', '2rem 3rem 2rem 3rem', 'digit', '', '', '', 3),
+(@iCategoryId, CONCAT(@sName, '_cover_border_color'), '_bx_lucid_stg_cpt_option_cover_border_color', 'rgba(208, 208, 208, 0)', 'rgba', '', '', '', 4),
+(@iCategoryId, CONCAT(@sName, '_cover_border_size'), '_bx_lucid_stg_cpt_option_cover_border_size', '0px', 'digit', '', '', '', 5),
+(@iCategoryId, CONCAT(@sName, '_cover_border_radius'), '_bx_lucid_stg_cpt_option_cover_border_radius', '0px', 'digit', '', '', '', 6),
+(@iCategoryId, CONCAT(@sName, '_cover_shadow'), '_bx_lucid_stg_cpt_option_cover_shadow', 'none', 'digit', '', '', '', 7),
+(@iCategoryId, CONCAT(@sName, '_cover_icon_border_color'), '_bx_lucid_stg_cpt_option_cover_icon_border_color', 'rgba(208, 208, 208, 1)', 'rgba', '', '', '', 8),
+(@iCategoryId, CONCAT(@sName, '_cover_icon_border_size'), '_bx_lucid_stg_cpt_option_cover_icon_border_size', '1px', 'digit', '', '', '', 9),
+(@iCategoryId, CONCAT(@sName, '_cover_icon_border_radius'), '_bx_lucid_stg_cpt_option_cover_icon_border_radius', '3px', 'digit', '', '', '', 10),
+(@iCategoryId, CONCAT(@sName, '_cover_icon_shadow'), '_bx_lucid_stg_cpt_option_cover_icon_shadow', 'none', 'digit', '', '', '', 11),
+(@iCategoryId, CONCAT(@sName, '_cover_text_align'), '_bx_lucid_stg_cpt_option_cover_text_align', 'center', 'select', 'left,center,right', '', '', 12),
+(@iCategoryId, CONCAT(@sName, '_cover_text_shadow'), '_bx_lucid_stg_cpt_option_cover_text_shadow', '0px 1px 3px rgba(0, 0, 0, .3)', 'digit', '', '', '', 13),
+(@iCategoryId, CONCAT(@sName, '_cover_font_family'), '_bx_lucid_stg_cpt_option_cover_font_family', 'Arial, sans-serif', 'digit', '', '', '', 14),
+(@iCategoryId, CONCAT(@sName, '_cover_font_size'), '_bx_lucid_stg_cpt_option_cover_font_size', '2.0rem', 'digit', '', '', '', 15),
+(@iCategoryId, CONCAT(@sName, '_cover_font_color'), '_bx_lucid_stg_cpt_option_cover_font_color', 'rgba(255, 255, 255, 1)', 'rgba', '', '', '', 16),
+(@iCategoryId, CONCAT(@sName, '_cover_font_weight'), '_bx_lucid_stg_cpt_option_cover_font_weight', '700', 'digit', '', '', '', 17);
+
+
+-- SETTINGS: Lucid template Styles Block
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_styles_block'), '_bx_lucid_stg_cpt_category_styles_block', 60);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_block_bg_color'), '_bx_lucid_stg_cpt_option_block_bg_color', 'rgba(245, 250, 255, 0.9)', 'rgba', '', '', '', 1),
+(@iCategoryId, CONCAT(@sName, '_block_bg_image'), '_bx_lucid_stg_cpt_option_block_bg_image', '', 'image', '', '', '', 2),
+(@iCategoryId, CONCAT(@sName, '_block_bg_image_repeat'), '_bx_lucid_stg_cpt_option_block_bg_image_repeat', 'no-repeat', 'select', 'no-repeat,repeat,repeat-x,repeat-y', '', '', 3),
+(@iCategoryId, CONCAT(@sName, '_block_bg_image_size'), '_bx_lucid_stg_cpt_option_block_bg_image_size', 'cover', 'select', 'auto,cover,contain', '', '', 4),
+(@iCategoryId, CONCAT(@sName, '_block_content_padding'), '_bx_lucid_stg_cpt_option_block_content_padding', '1rem', 'digit', '', '', '', 5),
+(@iCategoryId, CONCAT(@sName, '_block_border_color'), '_bx_lucid_stg_cpt_option_block_border_color', 'rgba(0, 0, 0, 0)', 'rgba', '', '', '', 6),
+(@iCategoryId, CONCAT(@sName, '_block_border_size'), '_bx_lucid_stg_cpt_option_block_border_size', '0px', 'digit', '', '', '', 7),
+(@iCategoryId, CONCAT(@sName, '_block_border_radius'), '_bx_lucid_stg_cpt_option_block_border_radius', '3px', 'digit', '', '', '', 8),
+(@iCategoryId, CONCAT(@sName, '_block_shadow'), '_bx_lucid_stg_cpt_option_block_shadow', '0px 1px 2px 0px rgba(0, 0, 0, 0.05)', 'digit', '', '', '', 9),
+(@iCategoryId, CONCAT(@sName, '_block_title_bg_color'), '_bx_lucid_stg_cpt_option_block_title_bg_color', 'rgba(255, 255, 255, 0)', 'rgba', '', '', '', 10),
+(@iCategoryId, CONCAT(@sName, '_block_title_padding'), '_bx_lucid_stg_cpt_option_block_title_padding', '0.3rem 1rem 0rem 1rem', 'digit', '', '', '', 11),
+(@iCategoryId, CONCAT(@sName, '_block_title_border_color'), '_bx_lucid_stg_cpt_option_block_title_border_color', 'rgba(0, 0, 0, 0)', 'rgba', '', '', '', 12),
+(@iCategoryId, CONCAT(@sName, '_block_title_border_size'), '_bx_lucid_stg_cpt_option_block_title_border_size', '0px', 'digit', '', '', '', 13),
+(@iCategoryId, CONCAT(@sName, '_block_title_border_radius'), '_bx_lucid_stg_cpt_option_block_title_border_radius', '0px', 'digit', '', '', '', 14),
+(@iCategoryId, CONCAT(@sName, '_block_title_font_family'), '_bx_lucid_stg_cpt_option_block_title_font_family', 'Arial, sans-serif', 'digit', '', '', '', 15),
+(@iCategoryId, CONCAT(@sName, '_block_title_font_size'), '_bx_lucid_stg_cpt_option_block_title_font_size', '1rem', 'digit', '', '', '', 16),
+(@iCategoryId, CONCAT(@sName, '_block_title_font_color'), '_bx_lucid_stg_cpt_option_block_title_font_color', 'rgba(40, 50, 60, 0.8)', 'rgba', '', '', '', 17),
+(@iCategoryId, CONCAT(@sName, '_block_title_font_weight'), '_bx_lucid_stg_cpt_option_block_title_font_weight', '700', 'digit', '', '', '', 18),
+(@iCategoryId, CONCAT(@sName, '_block_title_div_height'), '_bx_lucid_stg_cpt_option_block_title_div_height', '0px', 'digit', '', '', '', 19),
+(@iCategoryId, CONCAT(@sName, '_block_title_div_bg_color'), '_bx_lucid_stg_cpt_option_block_title_div_bg_color', 'rgba(40, 60, 80, 0)', 'rgba', '', '', '', 20);
+
+
+-- SETTINGS: Lucid template Styles Card
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_styles_card'), '_bx_lucid_stg_cpt_category_styles_card', 70);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_card_bg_color'), '_bx_lucid_stg_cpt_option_card_bg_color', 'rgba(255, 255, 255, 1)', 'rgba', '', '', '', 1),
+(@iCategoryId, CONCAT(@sName, '_card_bg_color_hover'), '_bx_lucid_stg_cpt_option_card_bg_color_hover', 'rgba(255, 255, 255, 0.5)', 'rgba', '', '', '', 2),
+(@iCategoryId, CONCAT(@sName, '_card_bg_image'), '_bx_lucid_stg_cpt_option_card_bg_image', '', 'image', '', '', '', 3),
+(@iCategoryId, CONCAT(@sName, '_card_bg_image_repeat'), '_bx_lucid_stg_cpt_option_card_bg_image_repeat', 'no-repeat', 'select', 'no-repeat,repeat,repeat-x,repeat-y', '', '', 4),
+(@iCategoryId, CONCAT(@sName, '_card_bg_image_attachment'), '_bx_lucid_stg_cpt_option_card_bg_image_attachment', 'scroll', 'select', 'fixed,scroll,local', '', '', 5),
+(@iCategoryId, CONCAT(@sName, '_card_bg_image_size'), '_bx_lucid_stg_cpt_option_card_bg_image_size', 'cover', 'select', 'auto,cover,contain', '', '', 6),
+(@iCategoryId, CONCAT(@sName, '_card_content_padding'), '_bx_lucid_stg_cpt_option_card_content_padding', '1rem', 'digit', '', '', '', 7),
+(@iCategoryId, CONCAT(@sName, '_card_border_color'), '_bx_lucid_stg_cpt_option_card_border_color', 'rgba(0, 0, 0, 0.1)', 'rgba', '', '', '', 8),
+(@iCategoryId, CONCAT(@sName, '_card_border_size'), '_bx_lucid_stg_cpt_option_card_border_size', '1px', 'digit', '', '', '', 9),
+(@iCategoryId, CONCAT(@sName, '_card_border_radius'), '_bx_lucid_stg_cpt_option_card_border_radius', '3px', 'digit', '', '', '', 10),
+(@iCategoryId, CONCAT(@sName, '_card_shadow'), '_bx_lucid_stg_cpt_option_card_shadow', '0px 1px 3px 0px rgba(0, 0, 0, 0.05)', 'digit', '', '', '', 11);
+
+
+-- SETTINGS: Lucid template Styles Popups
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_styles_popup'), '_bx_lucid_stg_cpt_category_styles_popup', 80);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_popup_bg_color'), '_bx_lucid_stg_cpt_option_popup_bg_color', 'rgba(255, 255, 255, 1)', 'rgba', '', '', '', 1),
+(@iCategoryId, CONCAT(@sName, '_popup_bg_image'), '_bx_lucid_stg_cpt_option_popup_bg_image', '', 'image', '', '', '', 2),
+(@iCategoryId, CONCAT(@sName, '_popup_bg_image_repeat'), '_bx_lucid_stg_cpt_option_popup_bg_image_repeat', 'no-repeat', 'select', 'no-repeat,repeat,repeat-x,repeat-y', '', '', 3),
+(@iCategoryId, CONCAT(@sName, '_popup_bg_image_size'), '_bx_lucid_stg_cpt_option_popup_bg_image_size', 'cover', 'select', 'auto,cover,contain', '', '', 4),
+(@iCategoryId, CONCAT(@sName, '_popup_content_padding'), '_bx_lucid_stg_cpt_option_popup_content_padding', '1.25rem', 'digit', '', '', '', 5),
+(@iCategoryId, CONCAT(@sName, '_popup_border_color'), '_bx_lucid_stg_cpt_option_popup_border_color', 'rgba(0, 0, 0, 0.2)', 'rgba', '', '', '', 6),
+(@iCategoryId, CONCAT(@sName, '_popup_border_size'), '_bx_lucid_stg_cpt_option_popup_border_size', '1px', 'digit', '', '', '', 7),
+(@iCategoryId, CONCAT(@sName, '_popup_border_radius'), '_bx_lucid_stg_cpt_option_popup_border_radius', '3px', 'digit', '', '', '', 8),
+(@iCategoryId, CONCAT(@sName, '_popup_shadow'), '_bx_lucid_stg_cpt_option_popup_shadow', '0px 1px 5px 0px rgba(0, 0, 0, 0.05)', 'digit', '', '', '', 9),
+(@iCategoryId, CONCAT(@sName, '_popup_title_bg_color'), '_bx_lucid_stg_cpt_option_popup_title_bg_color', 'rgba(230, 240, 250, 0.9)', 'rgba', '', '', '', 10),
+(@iCategoryId, CONCAT(@sName, '_popup_title_padding'), '_bx_lucid_stg_cpt_option_popup_title_padding', '1.25rem', 'digit', '', '', '', 11),
+(@iCategoryId, CONCAT(@sName, '_popup_title_font_family'), '_bx_lucid_stg_cpt_option_popup_title_font_family', 'Arial, sans-serif', 'digit', '', '', '', 12),
+(@iCategoryId, CONCAT(@sName, '_popup_title_font_size'), '_bx_lucid_stg_cpt_option_popup_title_font_size', '1rem', 'digit', '', '', '', 13),
+(@iCategoryId, CONCAT(@sName, '_popup_title_font_color'), '_bx_lucid_stg_cpt_option_popup_title_font_color', 'rgba(40, 50, 60, 0.9)', 'rgba', '', '', '', 14);
+
+
+-- SETTINGS: Lucid template Styles Main Menu
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_styles_menu_main'), '_bx_lucid_stg_cpt_category_styles_menu_main', 90);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_menu_main_bg_color'), '_bx_lucid_stg_cpt_option_menu_main_bg_color', 'rgba(248, 249, 252, 1.0)', 'rgba', '', '', '', 1),
+(@iCategoryId, CONCAT(@sName, '_menu_main_bg_image'), '_bx_lucid_stg_cpt_option_menu_main_bg_image', '', 'image', '', '', '', 2),
+(@iCategoryId, CONCAT(@sName, '_menu_main_bg_image_repeat'), '_bx_lucid_stg_cpt_option_menu_main_bg_image_repeat', 'no-repeat', 'select', 'no-repeat,repeat,repeat-x,repeat-y', '', '', 3),
+(@iCategoryId, CONCAT(@sName, '_menu_main_bg_image_size'), '_bx_lucid_stg_cpt_option_menu_main_bg_image_size', 'cover', 'select', 'auto,cover,contain', '', '', 4),
+(@iCategoryId, CONCAT(@sName, '_menu_main_content_padding'), '_bx_lucid_stg_cpt_option_menu_main_content_padding', '0.625rem', 'digit', '', '', '', 5),
+(@iCategoryId, CONCAT(@sName, '_menu_main_border_color'), '_bx_lucid_stg_cpt_option_menu_main_border_color', 'rgba(0, 0, 0, 0.1)', 'rgba', '', '', '', 6),
+(@iCategoryId, CONCAT(@sName, '_menu_main_border_size'), '_bx_lucid_stg_cpt_option_menu_main_border_size', '0px', 'digit', '', '', '', 7),
+(@iCategoryId, CONCAT(@sName, '_menu_main_shadow'), '_bx_lucid_stg_cpt_option_menu_main_shadow', 'none', 'digit', '', '', '', 8),
+(@iCategoryId, CONCAT(@sName, '_menu_main_align_items'), '_bx_lucid_stg_cpt_option_menu_main_align_items', 'left', 'select', 'left,center,right', '', '', 9),
+(@iCategoryId, CONCAT(@sName, '_menu_main_font_family'), '_bx_lucid_stg_cpt_option_menu_main_font_family', 'Arial, sans-serif', 'digit', '', '', '', 10),
+(@iCategoryId, CONCAT(@sName, '_menu_main_font_size'), '_bx_lucid_stg_cpt_option_menu_main_font_size', '1rem', 'digit', '', '', '', 11),
+(@iCategoryId, CONCAT(@sName, '_menu_main_font_color'), '_bx_lucid_stg_cpt_option_menu_main_font_color', 'rgba(255, 255, 255, 0.8)', 'rgba', '', '', '', 12),
+(@iCategoryId, CONCAT(@sName, '_menu_main_font_color_hover'), '_bx_lucid_stg_cpt_option_menu_main_font_color_hover', 'rgba(255, 255, 255, 1.0)', 'rgba', '', '', '', 13),
+(@iCategoryId, CONCAT(@sName, '_menu_main_font_color_active'), '_bx_lucid_stg_cpt_option_menu_main_font_color_active', 'rgba(255, 255, 255, 1.0)', 'rgba', '', '', '', 14),
+(@iCategoryId, CONCAT(@sName, '_menu_main_font_shadow'), '_bx_lucid_stg_cpt_option_menu_main_font_shadow', 'none', 'digit', '', '', '', 15),
+(@iCategoryId, CONCAT(@sName, '_menu_main_font_weight'), '_bx_lucid_stg_cpt_option_menu_main_font_weight', '400', 'digit', '', '', '', 16);
+
+
+-- SETTINGS: Lucid template Styles Account Menu
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_styles_menu_account'), '_bx_lucid_stg_cpt_category_styles_menu_account', 95);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_menu_account_bg_color'), '_bx_lucid_stg_cpt_option_menu_account_bg_color', 'rgba(248, 249, 252, 1.0)', 'rgba', '', '', '', 1),
+(@iCategoryId, CONCAT(@sName, '_menu_account_bg_image'), '_bx_lucid_stg_cpt_option_menu_account_bg_image', '', 'image', '', '', '', 2),
+(@iCategoryId, CONCAT(@sName, '_menu_account_bg_image_repeat'), '_bx_lucid_stg_cpt_option_menu_account_bg_image_repeat', 'no-repeat', 'select', 'no-repeat,repeat,repeat-x,repeat-y', '', '', 3),
+(@iCategoryId, CONCAT(@sName, '_menu_account_bg_image_size'), '_bx_lucid_stg_cpt_option_menu_account_bg_image_size', 'cover', 'select', 'auto,cover,contain', '', '', 4),
+(@iCategoryId, CONCAT(@sName, '_menu_account_content_padding'), '_bx_lucid_stg_cpt_option_menu_account_content_padding', '1.25rem', 'digit', '', '', '', 5),
+(@iCategoryId, CONCAT(@sName, '_menu_account_border_color'), '_bx_lucid_stg_cpt_option_menu_account_border_color', 'rgba(0, 0, 0, 0.1)', 'rgba', '', '', '', 6),
+(@iCategoryId, CONCAT(@sName, '_menu_account_border_size'), '_bx_lucid_stg_cpt_option_menu_account_border_size', '0px', 'digit', '', '', '', 7),
+(@iCategoryId, CONCAT(@sName, '_menu_account_shadow'), '_bx_lucid_stg_cpt_option_menu_account_shadow', 'none', 'digit', '', '', '', 8),
+(@iCategoryId, CONCAT(@sName, '_menu_account_font_family'), '_bx_lucid_stg_cpt_option_menu_account_font_family', 'Arial, sans-serif', 'digit', '', '', '', 9),
+(@iCategoryId, CONCAT(@sName, '_menu_account_font_size'), '_bx_lucid_stg_cpt_option_menu_account_font_size', '1rem', 'digit', '', '', '', 10),
+(@iCategoryId, CONCAT(@sName, '_menu_account_font_color'), '_bx_lucid_stg_cpt_option_menu_account_font_color', 'rgba(76, 103, 159, 0.8)', 'rgba', '', '', '', 11),
+(@iCategoryId, CONCAT(@sName, '_menu_account_font_color_hover'), '_bx_lucid_stg_cpt_option_menu_account_font_color_hover', 'rgba(76, 103, 159, 1.0)', 'rgba', '', '', '', 12),
+(@iCategoryId, CONCAT(@sName, '_menu_account_font_color_active'), '_bx_lucid_stg_cpt_option_menu_account_font_color_active', 'rgba(76, 103, 159, 1.0)', 'rgba', '', '', '', 13),
+(@iCategoryId, CONCAT(@sName, '_menu_account_font_shadow'), '_bx_lucid_stg_cpt_option_menu_account_font_shadow', 'none', 'digit', '', '', '', 14),
+(@iCategoryId, CONCAT(@sName, '_menu_account_font_weight'), '_bx_lucid_stg_cpt_option_menu_account_font_weight', '400', 'digit', '', '', '', 15);
+
+
+-- SETTINGS: Lucid template Styles Add Menu
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_styles_menu_add'), '_bx_lucid_stg_cpt_category_styles_menu_add', 97);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_menu_add_bg_color'), '_bx_lucid_stg_cpt_option_menu_add_bg_color', 'rgba(248, 249, 252, 1.0)', 'rgba', '', '', '', 1),
+(@iCategoryId, CONCAT(@sName, '_menu_add_bg_image'), '_bx_lucid_stg_cpt_option_menu_add_bg_image', '', 'image', '', '', '', 2),
+(@iCategoryId, CONCAT(@sName, '_menu_add_bg_image_repeat'), '_bx_lucid_stg_cpt_option_menu_add_bg_image_repeat', 'no-repeat', 'select', 'no-repeat,repeat,repeat-x,repeat-y', '', '', 3),
+(@iCategoryId, CONCAT(@sName, '_menu_add_bg_image_size'), '_bx_lucid_stg_cpt_option_menu_add_bg_image_size', 'cover', 'select', 'auto,cover,contain', '', '', 4),
+(@iCategoryId, CONCAT(@sName, '_menu_add_content_padding'), '_bx_lucid_stg_cpt_option_menu_add_content_padding', '1.25rem', 'digit', '', '', '', 5),
+(@iCategoryId, CONCAT(@sName, '_menu_add_border_color'), '_bx_lucid_stg_cpt_option_menu_add_border_color', 'rgba(0, 0, 0, 0.1)', 'rgba', '', '', '', 6),
+(@iCategoryId, CONCAT(@sName, '_menu_add_border_size'), '_bx_lucid_stg_cpt_option_menu_add_border_size', '0px', 'digit', '', '', '', 7),
+(@iCategoryId, CONCAT(@sName, '_menu_add_shadow'), '_bx_lucid_stg_cpt_option_menu_add_shadow', 'none', 'digit', '', '', '', 8),
+(@iCategoryId, CONCAT(@sName, '_menu_add_font_family'), '_bx_lucid_stg_cpt_option_menu_add_font_family', 'Arial, sans-serif', 'digit', '', '', '', 9),
+(@iCategoryId, CONCAT(@sName, '_menu_add_font_size'), '_bx_lucid_stg_cpt_option_menu_add_font_size', '1rem', 'digit', '', '', '', 10),
+(@iCategoryId, CONCAT(@sName, '_menu_add_font_color'), '_bx_lucid_stg_cpt_option_menu_add_font_color', 'rgba(76, 103, 159, 0.8)', 'rgba', '', '', '', 11),
+(@iCategoryId, CONCAT(@sName, '_menu_add_font_color_hover'), '_bx_lucid_stg_cpt_option_menu_add_font_color_hover', 'rgba(76, 103, 159, 1.0)', 'rgba', '', '', '', 12),
+(@iCategoryId, CONCAT(@sName, '_menu_add_font_color_active'), '_bx_lucid_stg_cpt_option_menu_add_font_color_active', 'rgba(76, 103, 159, 1.0)', 'rgba', '', '', '', 13),
+(@iCategoryId, CONCAT(@sName, '_menu_add_font_shadow'), '_bx_lucid_stg_cpt_option_menu_add_font_shadow', 'none', 'digit', '', '', '', 14),
+(@iCategoryId, CONCAT(@sName, '_menu_add_font_weight'), '_bx_lucid_stg_cpt_option_menu_add_font_weight', '400', 'digit', '', '', '', 15);
+
+
+-- SETTINGS: Lucid template Styles Page Menu
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_styles_menu_page'), '_bx_lucid_stg_cpt_category_styles_menu_page', 100);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_menu_page_bg_color'), '_bx_lucid_stg_cpt_option_menu_page_bg_color', 'rgba(255, 255, 255, 0.9)', 'rgba', '', '', '', 1),
+(@iCategoryId, CONCAT(@sName, '_menu_page_bg_image'), '_bx_lucid_stg_cpt_option_menu_page_bg_image', '', 'image', '', '', '', 2),
+(@iCategoryId, CONCAT(@sName, '_menu_page_bg_image_repeat'), '_bx_lucid_stg_cpt_option_menu_page_bg_image_repeat', 'no-repeat', 'select', 'no-repeat,repeat,repeat-x,repeat-y', '', '', 3),
+(@iCategoryId, CONCAT(@sName, '_menu_page_bg_image_size'), '_bx_lucid_stg_cpt_option_menu_page_bg_image_size', 'cover', 'select', 'auto,cover,contain', '', '', 4),
+(@iCategoryId, CONCAT(@sName, '_menu_page_content_padding'), '_bx_lucid_stg_cpt_option_menu_page_content_padding', '0.3rem', 'digit', '', '', '', 5),
+(@iCategoryId, CONCAT(@sName, '_menu_page_border_color'), '_bx_lucid_stg_cpt_option_menu_page_border_color', 'rgba(0, 0, 0, 0.1)', 'rgba', '', '', '', 6),
+(@iCategoryId, CONCAT(@sName, '_menu_page_border_size'), '_bx_lucid_stg_cpt_option_menu_page_border_size', '1px', 'digit', '', '', '', 7),
+(@iCategoryId, CONCAT(@sName, '_menu_page_shadow'), '_bx_lucid_stg_cpt_option_menu_page_shadow', 'none', 'digit', '', '', '', 8),
+(@iCategoryId, CONCAT(@sName, '_menu_page_font_family'), '_bx_lucid_stg_cpt_option_menu_page_font_family', 'Arial, sans-serif', 'digit', '', '', '', 9),
+(@iCategoryId, CONCAT(@sName, '_menu_page_font_size'), '_bx_lucid_stg_cpt_option_menu_page_font_size', '1rem', 'digit', '', '', '', 10),
+(@iCategoryId, CONCAT(@sName, '_menu_page_font_color'), '_bx_lucid_stg_cpt_option_menu_page_font_color', 'rgba(40, 50, 60, 0.8)', 'rgba', '', '', '', 11),
+(@iCategoryId, CONCAT(@sName, '_menu_page_font_color_hover'), '_bx_lucid_stg_cpt_option_menu_page_font_color_hover', 'rgba(30, 150, 250, 1)', 'rgba', '', '', '', 12),
+(@iCategoryId, CONCAT(@sName, '_menu_page_font_color_active'), '_bx_lucid_stg_cpt_option_menu_page_font_color_active', 'rgba(30, 150, 250, 1)', 'rgba', '', '', '', 13),
+(@iCategoryId, CONCAT(@sName, '_menu_page_font_shadow'), '_bx_lucid_stg_cpt_option_menu_page_font_shadow', 'none', 'digit', '', '', '', 14),
+(@iCategoryId, CONCAT(@sName, '_menu_page_font_weight'), '_bx_lucid_stg_cpt_option_menu_page_font_weight', '400', 'digit', '', '', '', 15);
+
+
+-- SETTINGS: Lucid template Styles Slide Menus
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_styles_menu_slide'), '_bx_lucid_stg_cpt_category_styles_menu_slide', 110);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_menu_slide_bg_color'), '_bx_lucid_stg_cpt_option_menu_slide_bg_color', 'rgba(255, 255, 255, 0.9)', 'rgba', '', '', '', 1),
+(@iCategoryId, CONCAT(@sName, '_menu_slide_bg_image'), '_bx_lucid_stg_cpt_option_menu_slide_bg_image', '', 'image', '', '', '', 2),
+(@iCategoryId, CONCAT(@sName, '_menu_slide_bg_image_repeat'), '_bx_lucid_stg_cpt_option_menu_slide_bg_image_repeat', 'no-repeat', 'select', 'no-repeat,repeat,repeat-x,repeat-y', '', '', 3),
+(@iCategoryId, CONCAT(@sName, '_menu_slide_bg_image_size'), '_bx_lucid_stg_cpt_option_menu_slide_bg_image_size', 'cover', 'select', 'auto,cover,contain', '', '', 4),
+(@iCategoryId, CONCAT(@sName, '_menu_slide_content_padding'), '_bx_lucid_stg_cpt_option_menu_slide_content_padding', '1.25rem', 'digit', '', '', '', 5),
+(@iCategoryId, CONCAT(@sName, '_menu_slide_border_color'), '_bx_lucid_stg_cpt_option_menu_slide_border_color', 'rgba(0, 0, 0, 0.1)', 'rgba', '', '', '', 6),
+(@iCategoryId, CONCAT(@sName, '_menu_slide_border_size'), '_bx_lucid_stg_cpt_option_menu_slide_border_size', '1px 0px 1px 0px', 'digit', '', '', '', 7),
+(@iCategoryId, CONCAT(@sName, '_menu_slide_shadow'), '_bx_lucid_stg_cpt_option_menu_slide_shadow', 'none', 'digit', '', '', '', 8),
+(@iCategoryId, CONCAT(@sName, '_menu_slide_font_family'), '_bx_lucid_stg_cpt_option_menu_slide_font_family', 'Arial, sans-serif', 'digit', '', '', '', 9),
+(@iCategoryId, CONCAT(@sName, '_menu_slide_font_size'), '_bx_lucid_stg_cpt_option_menu_slide_font_size', '1.0rem', 'digit', '', '', '', 10),
+(@iCategoryId, CONCAT(@sName, '_menu_slide_font_color'), '_bx_lucid_stg_cpt_option_menu_slide_font_color', 'rgba(40, 50, 60, 0.8)', 'rgba', '', '', '', 11),
+(@iCategoryId, CONCAT(@sName, '_menu_slide_font_color_hover'), '_bx_lucid_stg_cpt_option_menu_slide_font_color_hover', 'rgba(40, 50, 60, 0.9)', 'rgba', '', '', '', 12),
+(@iCategoryId, CONCAT(@sName, '_menu_slide_font_color_active'), '_bx_lucid_stg_cpt_option_menu_slide_font_color_active', 'rgba(20, 30, 40, 1)', 'rgba', '', '', '', 13),
+(@iCategoryId, CONCAT(@sName, '_menu_slide_font_shadow'), '_bx_lucid_stg_cpt_option_menu_slide_font_shadow', 'none', 'digit', '', '', '', 14),
+(@iCategoryId, CONCAT(@sName, '_menu_slide_font_weight'), '_bx_lucid_stg_cpt_option_menu_slide_font_weight', '400', 'digit', '', '', '', 15);
+
+
+-- SETTINGS: Lucid template Styles Forms
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_styles_form'), '_bx_lucid_stg_cpt_category_styles_form', 120);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_form_input_height'), '_bx_lucid_stg_cpt_option_form_input_height', '2rem', 'digit', '', '', '', 1),
+(@iCategoryId, CONCAT(@sName, '_form_input_bg_color'), '_bx_lucid_stg_cpt_option_form_input_bg_color', 'rgba(255, 255, 255, 0.8)', 'rgba', '', '', '', 2),
+(@iCategoryId, CONCAT(@sName, '_form_input_bg_color_active'), '_bx_lucid_stg_cpt_option_form_input_bg_color_active', 'rgba(255, 255, 255, 1)', 'rgba', '', '', '', 3),
+(@iCategoryId, CONCAT(@sName, '_form_input_border_color'), '_bx_lucid_stg_cpt_option_form_input_border_color', 'rgba(40, 60, 80, 0.5)', 'rgba', '', '', '', 4),
+(@iCategoryId, CONCAT(@sName, '_form_input_border_color_active'), '_bx_lucid_stg_cpt_option_form_input_border_color_active', 'rgba(30, 150, 250, 1)', 'rgba', '', '', '', 5),
+(@iCategoryId, CONCAT(@sName, '_form_input_border_size'), '_bx_lucid_stg_cpt_option_form_input_border_size', '1px', 'digit', '', '', '', 6),
+(@iCategoryId, CONCAT(@sName, '_form_input_border_radius'), '_bx_lucid_stg_cpt_option_form_input_border_radius', '3px', 'digit', '', '', '', 7),
+(@iCategoryId, CONCAT(@sName, '_form_input_shadow'), '_bx_lucid_stg_cpt_option_form_input_shadow', 'inset 0px 0px 2px 1px rgba(0,0,0,0.15)', 'digit', '', '', '', 8),
+(@iCategoryId, CONCAT(@sName, '_form_input_font_family'), '_bx_lucid_stg_cpt_option_form_input_font_family', 'Arial, sans-serif', 'digit', '', '', '', 9),
+(@iCategoryId, CONCAT(@sName, '_form_input_font_size'), '_bx_lucid_stg_cpt_option_form_input_font_size', '1rem', 'digit', '', '', '', 10),
+(@iCategoryId, CONCAT(@sName, '_form_input_font_color'), '_bx_lucid_stg_cpt_option_form_input_font_color', 'rgba(20, 30, 40, 1)', 'rgba', '', '', '', 11);
+
+
+-- SETTINGS: Lucid template Styles Large Buttons
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_styles_large_button'), '_bx_lucid_stg_cpt_category_styles_large_button', 130);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_button_lg_height'), '_bx_lucid_stg_cpt_option_button_height', '2rem', 'digit', '', '', '', 1),
+(@iCategoryId, CONCAT(@sName, '_button_lg_bg_color'), '_bx_lucid_stg_cpt_option_button_bg_color', 'rgba(76, 103, 159, 1.0)', 'rgba', '', '', '', 2),
+(@iCategoryId, CONCAT(@sName, '_button_lg_bg_color_hover'), '_bx_lucid_stg_cpt_option_button_bg_color_hover', 'rgba(76, 103, 159, 0.8)', 'rgba', '', '', '', 3),
+(@iCategoryId, CONCAT(@sName, '_button_lg_border_color'), '_bx_lucid_stg_cpt_option_button_border_color', 'rgba(76, 103, 159, 1.0)', 'rgba', '', '', '', 4),
+(@iCategoryId, CONCAT(@sName, '_button_lg_border_color_hover'), '_bx_lucid_stg_cpt_option_button_border_color_hover', 'rgba(76, 103, 159, 0.8)', 'rgba', '', '', '', 5),
+(@iCategoryId, CONCAT(@sName, '_button_lg_border_size'), '_bx_lucid_stg_cpt_option_button_border_size', '0px', 'digit', '', '', '', 6),
+(@iCategoryId, CONCAT(@sName, '_button_lg_border_radius'), '_bx_lucid_stg_cpt_option_button_border_radius', '3px', 'digit', '', '', '', 7),
+(@iCategoryId, CONCAT(@sName, '_button_lg_shadow'), '_bx_lucid_stg_cpt_option_button_shadow', '0px 0px 0px 1px rgba(0,0,0,0.0)', 'digit', '', '', '', 8),
+(@iCategoryId, CONCAT(@sName, '_button_lg_font_family'), '_bx_lucid_stg_cpt_option_button_font_family', 'Arial, sans-serif', 'digit', '', '', '', 9),
+(@iCategoryId, CONCAT(@sName, '_button_lg_font_size'), '_bx_lucid_stg_cpt_option_button_font_size', '1rem', 'digit', '', '', '', 10),
+(@iCategoryId, CONCAT(@sName, '_button_lg_font_color'), '_bx_lucid_stg_cpt_option_button_font_color', 'rgba(255, 255, 255, 1.0)', 'rgba', '', '', '', 11),
+(@iCategoryId, CONCAT(@sName, '_button_lg_font_color_hover'), '_bx_lucid_stg_cpt_option_button_font_color_hover', 'rgba(255, 255, 255, 0.9)', 'rgba', '', '', '', 12),
+(@iCategoryId, CONCAT(@sName, '_button_lg_font_shadow'), '_bx_lucid_stg_cpt_option_button_font_shadow', 'none', 'digit', '', '', '', 13),
+(@iCategoryId, CONCAT(@sName, '_button_lg_font_weight'), '_bx_lucid_stg_cpt_option_button_font_weight', '700', 'digit', '', '', '', 14);
+
+
+-- SETTINGS: Lucid template Styles Large Primary Buttons
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_styles_large_button_primary'), '_bx_lucid_stg_cpt_category_styles_large_button_primary', 131);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_button_lgp_height'), '_bx_lucid_stg_cpt_option_button_height', '2rem', 'digit', '', '', '', 1),
+(@iCategoryId, CONCAT(@sName, '_button_lgp_bg_color'), '_bx_lucid_stg_cpt_option_button_bg_color', 'rgba(76, 103, 159, 1.0)', 'rgba', '', '', '', 2),
+(@iCategoryId, CONCAT(@sName, '_button_lgp_bg_color_hover'), '_bx_lucid_stg_cpt_option_button_bg_color_hover', 'rgba(76, 103, 159, 0.8)', 'rgba', '', '', '', 3),
+(@iCategoryId, CONCAT(@sName, '_button_lgp_border_color'), '_bx_lucid_stg_cpt_option_button_border_color', 'rgba(76, 103, 159, 1.0)', 'rgba', '', '', '', 4),
+(@iCategoryId, CONCAT(@sName, '_button_lgp_border_color_hover'), '_bx_lucid_stg_cpt_option_button_border_color_hover', 'rgba(76, 103, 159, 0.8)', 'rgba', '', '', '', 5),
+(@iCategoryId, CONCAT(@sName, '_button_lgp_border_size'), '_bx_lucid_stg_cpt_option_button_border_size', '0px', 'digit', '', '', '', 6),
+(@iCategoryId, CONCAT(@sName, '_button_lgp_border_radius'), '_bx_lucid_stg_cpt_option_button_border_radius', '3px', 'digit', '', '', '', 7),
+(@iCategoryId, CONCAT(@sName, '_button_lgp_shadow'), '_bx_lucid_stg_cpt_option_button_shadow', '0px 0px 0px 1px rgba(0,0,0,0.0)', 'digit', '', '', '', 8),
+(@iCategoryId, CONCAT(@sName, '_button_lgp_font_family'), '_bx_lucid_stg_cpt_option_button_font_family', 'Arial, sans-serif', 'digit', '', '', '', 9),
+(@iCategoryId, CONCAT(@sName, '_button_lgp_font_size'), '_bx_lucid_stg_cpt_option_button_font_size', '1rem', 'digit', '', '', '', 10),
+(@iCategoryId, CONCAT(@sName, '_button_lgp_font_color'), '_bx_lucid_stg_cpt_option_button_font_color', 'rgba(255, 255, 255, 1.0)', 'rgba', '', '', '', 11),
+(@iCategoryId, CONCAT(@sName, '_button_lgp_font_color_hover'), '_bx_lucid_stg_cpt_option_button_font_color_hover', 'rgba(255, 255, 255, 0.9)', 'rgba', '', '', '', 12),
+(@iCategoryId, CONCAT(@sName, '_button_lgp_font_shadow'), '_bx_lucid_stg_cpt_option_button_font_shadow', 'none', 'digit', '', '', '', 13),
+(@iCategoryId, CONCAT(@sName, '_button_lgp_font_weight'), '_bx_lucid_stg_cpt_option_button_font_weight', '700', 'digit', '', '', '', 14);
+
+-- SETTINGS: Lucid template Styles Normal Buttons
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_styles_button'), '_bx_lucid_stg_cpt_category_styles_button', 135);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_button_nl_height'), '_bx_lucid_stg_cpt_option_button_height', '2rem', 'digit', '', '', '', 1),
+(@iCategoryId, CONCAT(@sName, '_button_nl_bg_color'), '_bx_lucid_stg_cpt_option_button_bg_color', 'rgba(76, 103, 159, 1.0)', 'rgba', '', '', '', 2),
+(@iCategoryId, CONCAT(@sName, '_button_nl_bg_color_hover'), '_bx_lucid_stg_cpt_option_button_bg_color_hover', 'rgba(76, 103, 159, 0.8)', 'rgba', '', '', '', 3),
+(@iCategoryId, CONCAT(@sName, '_button_nl_border_color'), '_bx_lucid_stg_cpt_option_button_border_color', 'rgba(76, 103, 159, 1.0)', 'rgba', '', '', '', 4),
+(@iCategoryId, CONCAT(@sName, '_button_nl_border_color_hover'), '_bx_lucid_stg_cpt_option_button_border_color_hover', 'rgba(76, 103, 159, 0.8)', 'rgba', '', '', '', 5),
+(@iCategoryId, CONCAT(@sName, '_button_nl_border_size'), '_bx_lucid_stg_cpt_option_button_border_size', '0px', 'digit', '', '', '', 6),
+(@iCategoryId, CONCAT(@sName, '_button_nl_border_radius'), '_bx_lucid_stg_cpt_option_button_border_radius', '3px', 'digit', '', '', '', 7),
+(@iCategoryId, CONCAT(@sName, '_button_nl_shadow'), '_bx_lucid_stg_cpt_option_button_shadow', '0px 0px 0px 1px rgba(0,0,0,0.0)', 'digit', '', '', '', 8),
+(@iCategoryId, CONCAT(@sName, '_button_nl_font_family'), '_bx_lucid_stg_cpt_option_button_font_family', 'Arial, sans-serif', 'digit', '', '', '', 9),
+(@iCategoryId, CONCAT(@sName, '_button_nl_font_size'), '_bx_lucid_stg_cpt_option_button_font_size', '1rem', 'digit', '', '', '', 10),
+(@iCategoryId, CONCAT(@sName, '_button_nl_font_color'), '_bx_lucid_stg_cpt_option_button_font_color', 'rgba(255, 255, 255, 1.0)', 'rgba', '', '', '', 11),
+(@iCategoryId, CONCAT(@sName, '_button_nl_font_color_hover'), '_bx_lucid_stg_cpt_option_button_font_color_hover', 'rgba(255, 255, 255, 0.9)', 'rgba', '', '', '', 12),
+(@iCategoryId, CONCAT(@sName, '_button_nl_font_shadow'), '_bx_lucid_stg_cpt_option_button_font_shadow', 'none', 'digit', '', '', '', 13),
+(@iCategoryId, CONCAT(@sName, '_button_nl_font_weight'), '_bx_lucid_stg_cpt_option_button_font_weight', '700', 'digit', '', '', '', 14);
+
+
+-- SETTINGS: Lucid template Styles Large Primary Buttons
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_styles_button_primary'), '_bx_lucid_stg_cpt_category_styles_button_primary', 136);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_button_nlp_height'), '_bx_lucid_stg_cpt_option_button_height', '2rem', 'digit', '', '', '', 1),
+(@iCategoryId, CONCAT(@sName, '_button_nlp_bg_color'), '_bx_lucid_stg_cpt_option_button_bg_color', 'rgba(76, 103, 159, 1.0)', 'rgba', '', '', '', 2),
+(@iCategoryId, CONCAT(@sName, '_button_nlp_bg_color_hover'), '_bx_lucid_stg_cpt_option_button_bg_color_hover', 'rgba(76, 103, 159, 0.8)', 'rgba', '', '', '', 3),
+(@iCategoryId, CONCAT(@sName, '_button_nlp_border_color'), '_bx_lucid_stg_cpt_option_button_border_color', 'rgba(76, 103, 159, 1.0)', 'rgba', '', '', '', 4),
+(@iCategoryId, CONCAT(@sName, '_button_nlp_border_color_hover'), '_bx_lucid_stg_cpt_option_button_border_color_hover', 'rgba(76, 103, 159, 0.8)', 'rgba', '', '', '', 5),
+(@iCategoryId, CONCAT(@sName, '_button_nlp_border_size'), '_bx_lucid_stg_cpt_option_button_border_size', '0px', 'digit', '', '', '', 6),
+(@iCategoryId, CONCAT(@sName, '_button_nlp_border_radius'), '_bx_lucid_stg_cpt_option_button_border_radius', '3px', 'digit', '', '', '', 7),
+(@iCategoryId, CONCAT(@sName, '_button_nlp_shadow'), '_bx_lucid_stg_cpt_option_button_shadow', '0px 0px 0px 1px rgba(0,0,0,0.0)', 'digit', '', '', '', 8),
+(@iCategoryId, CONCAT(@sName, '_button_nlp_font_family'), '_bx_lucid_stg_cpt_option_button_font_family', 'Arial, sans-serif', 'digit', '', '', '', 9),
+(@iCategoryId, CONCAT(@sName, '_button_nlp_font_size'), '_bx_lucid_stg_cpt_option_button_font_size', '1rem', 'digit', '', '', '', 10),
+(@iCategoryId, CONCAT(@sName, '_button_nlp_font_color'), '_bx_lucid_stg_cpt_option_button_font_color', 'rgba(255, 255, 255, 1.0)', 'rgba', '', '', '', 11),
+(@iCategoryId, CONCAT(@sName, '_button_nlp_font_color_hover'), '_bx_lucid_stg_cpt_option_button_font_color_hover', 'rgba(255, 255, 255, 0.9)', 'rgba', '', '', '', 12),
+(@iCategoryId, CONCAT(@sName, '_button_nlp_font_shadow'), '_bx_lucid_stg_cpt_option_button_font_shadow', 'none', 'digit', '', '', '', 13),
+(@iCategoryId, CONCAT(@sName, '_button_nlp_font_weight'), '_bx_lucid_stg_cpt_option_button_font_weight', '700', 'digit', '', '', '', 14);
+
+-- SETTINGS: Lucid template Styles Small Buttons
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_styles_small_button'), '_bx_lucid_stg_cpt_category_styles_small_button', 140);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_button_sm_height'), '_bx_lucid_stg_cpt_option_button_height', '1.5rem', 'digit', '', '', '', 1),
+(@iCategoryId, CONCAT(@sName, '_button_sm_bg_color'), '_bx_lucid_stg_cpt_option_button_bg_color', 'rgba(76, 103, 159, 1.0)', 'rgba', '', '', '', 2),
+(@iCategoryId, CONCAT(@sName, '_button_sm_bg_color_hover'), '_bx_lucid_stg_cpt_option_button_bg_color_hover', 'rgba(76, 103, 159, 0.8)', 'rgba', '', '', '', 3),
+(@iCategoryId, CONCAT(@sName, '_button_sm_border_color'), '_bx_lucid_stg_cpt_option_button_border_color', 'rgba(76, 103, 159, 1.0)', 'rgba', '', '', '', 4),
+(@iCategoryId, CONCAT(@sName, '_button_sm_border_color_hover'), '_bx_lucid_stg_cpt_option_button_border_color_hover', 'rgba(76, 103, 159, 0.8)', 'rgba', '', '', '', 5),
+(@iCategoryId, CONCAT(@sName, '_button_sm_border_size'), '_bx_lucid_stg_cpt_option_button_border_size', '0px', 'digit', '', '', '', 6),
+(@iCategoryId, CONCAT(@sName, '_button_sm_border_radius'), '_bx_lucid_stg_cpt_option_button_border_radius', '2px', 'digit', '', '', '', 7),
+(@iCategoryId, CONCAT(@sName, '_button_sm_shadow'), '_bx_lucid_stg_cpt_option_button_shadow', '0px 0px 0px 1px rgba(0,0,0,0)', 'digit', '', '', '', 8),
+(@iCategoryId, CONCAT(@sName, '_button_sm_font_family'), '_bx_lucid_stg_cpt_option_button_font_family', 'Arial, sans-serif', 'digit', '', '', '', 9),
+(@iCategoryId, CONCAT(@sName, '_button_sm_font_size'), '_bx_lucid_stg_cpt_option_button_font_size', '0.75rem', 'digit', '', '', '', 10),
+(@iCategoryId, CONCAT(@sName, '_button_sm_font_color'), '_bx_lucid_stg_cpt_option_button_font_color', 'rgba(255, 255, 255, 1.0)', 'rgba', '', '', '', 11),
+(@iCategoryId, CONCAT(@sName, '_button_sm_font_color_hover'), '_bx_lucid_stg_cpt_option_button_font_color_hover', 'rgba(255, 255, 255, 0.9)', 'rgba', '', '', '', 12),
+(@iCategoryId, CONCAT(@sName, '_button_sm_font_shadow'), '_bx_lucid_stg_cpt_option_button_font_shadow', 'none', 'digit', '', '', '', 13),
+(@iCategoryId, CONCAT(@sName, '_button_sm_font_weight'), '_bx_lucid_stg_cpt_option_button_font_weight', '400', 'digit', '', '', '', 14);
+
+-- SETTINGS: Lucid template Styles Small Primary Buttons
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_styles_small_button_primary'), '_bx_lucid_stg_cpt_category_styles_small_button_primary', 141);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_button_smp_height'), '_bx_lucid_stg_cpt_option_button_height', '1.5rem', 'digit', '', '', '', 1),
+(@iCategoryId, CONCAT(@sName, '_button_smp_bg_color'), '_bx_lucid_stg_cpt_option_button_bg_color', 'rgba(76, 103, 159, 1.0)', 'rgba', '', '', '', 2),
+(@iCategoryId, CONCAT(@sName, '_button_smp_bg_color_hover'), '_bx_lucid_stg_cpt_option_button_bg_color_hover', 'rgba(76, 103, 159, 0.8)', 'rgba', '', '', '', 3),
+(@iCategoryId, CONCAT(@sName, '_button_smp_border_color'), '_bx_lucid_stg_cpt_option_button_border_color', 'rgba(76, 103, 159, 1.0)', 'rgba', '', '', '', 4),
+(@iCategoryId, CONCAT(@sName, '_button_smp_border_color_hover'), '_bx_lucid_stg_cpt_option_button_border_color_hover', 'rgba(76, 103, 159, 0.8)', 'rgba', '', '', '', 5),
+(@iCategoryId, CONCAT(@sName, '_button_smp_border_size'), '_bx_lucid_stg_cpt_option_button_border_size', '0px', 'digit', '', '', '', 6),
+(@iCategoryId, CONCAT(@sName, '_button_smp_border_radius'), '_bx_lucid_stg_cpt_option_button_border_radius', '2px', 'digit', '', '', '', 7),
+(@iCategoryId, CONCAT(@sName, '_button_smp_shadow'), '_bx_lucid_stg_cpt_option_button_shadow', '0px 0px 0px 1px rgba(0,0,0,0)', 'digit', '', '', '', 8),
+(@iCategoryId, CONCAT(@sName, '_button_smp_font_family'), '_bx_lucid_stg_cpt_option_button_font_family', 'Arial, sans-serif', 'digit', '', '', '', 9),
+(@iCategoryId, CONCAT(@sName, '_button_smp_font_size'), '_bx_lucid_stg_cpt_option_button_font_size', '0.75rem', 'digit', '', '', '', 10),
+(@iCategoryId, CONCAT(@sName, '_button_smp_font_color'), '_bx_lucid_stg_cpt_option_button_font_color', 'rgba(255, 255, 255, 1.0)', 'rgba', '', '', '', 11),
+(@iCategoryId, CONCAT(@sName, '_button_smp_font_color_hover'), '_bx_lucid_stg_cpt_option_button_font_color_hover', 'rgba(255, 255, 255, 0.9)', 'rgba', '', '', '', 12),
+(@iCategoryId, CONCAT(@sName, '_button_smp_font_shadow'), '_bx_lucid_stg_cpt_option_button_font_shadow', 'none', 'digit', '', '', '', 13),
+(@iCategoryId, CONCAT(@sName, '_button_smp_font_weight'), '_bx_lucid_stg_cpt_option_button_font_weight', '400', 'digit', '', '', '', 14);
+
+-- SETTINGS: Lucid template Styles Font
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_styles_font'), '_bx_lucid_stg_cpt_category_styles_font', 150);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_font_family'), '_bx_lucid_stg_cpt_option_font_family', 'Arial, sans-serif', 'digit', '', '', '', 1),
+(@iCategoryId, CONCAT(@sName, '_font_size_default'), '_bx_lucid_stg_cpt_option_font_size_default', '18px', 'digit', '', '', '', 2),
+(@iCategoryId, CONCAT(@sName, '_font_color_default'), '_bx_lucid_stg_cpt_option_font_color_default', 'rgba(40, 50, 60, 0.9)', 'rgba', '', '', '', 3),
+(@iCategoryId, CONCAT(@sName, '_font_color_grayed'), '_bx_lucid_stg_cpt_option_font_color_grayed', 'rgba(40, 50, 60, 0.5)', 'rgba', '', '', '', 4),
+(@iCategoryId, CONCAT(@sName, '_font_color_contrasted'), '_bx_lucid_stg_cpt_option_font_color_contrasted', 'rgba(255, 255, 255, 1)', 'rgba', '', '', '', 5),
+(@iCategoryId, CONCAT(@sName, '_font_size_small'), '_bx_lucid_stg_cpt_option_font_size_small', '12px', 'digit', '', '', '', 6),
+(@iCategoryId, CONCAT(@sName, '_font_size_middle'), '_bx_lucid_stg_cpt_option_font_size_middle', '15px', 'digit', '', '', '', 7),
+(@iCategoryId, CONCAT(@sName, '_font_size_large'), '_bx_lucid_stg_cpt_option_font_size_large', '18px', 'digit', '', '', '', 8),
+(@iCategoryId, CONCAT(@sName, '_font_size_h1'), '_bx_lucid_stg_cpt_option_font_size_h1', '32px', 'digit', '', '', '', 9),
+(@iCategoryId, CONCAT(@sName, '_font_weight_h1'), '_bx_lucid_stg_cpt_option_font_weight_h1', '700', 'digit', '', '', '', 10),
+(@iCategoryId, CONCAT(@sName, '_font_color_default_h1'), '_bx_lucid_stg_cpt_option_font_color_default_h1', 'rgba(40, 50, 60, 1)', 'rgba', '', '', '', 11),
+(@iCategoryId, CONCAT(@sName, '_font_color_grayed_h1'), '_bx_lucid_stg_cpt_option_font_color_grayed_h1', 'rgba(40, 50, 60, 0.5)', 'rgba', '', '', '', 12),
+(@iCategoryId, CONCAT(@sName, '_font_color_contrasted_h1'), '_bx_lucid_stg_cpt_option_font_color_contrasted_h1', 'rgba(255, 255, 255, 0.9)', 'rgba', '', '', '', 13),
+(@iCategoryId, CONCAT(@sName, '_font_color_link_h1'), '_bx_lucid_stg_cpt_option_font_color_link_h1', 'rgba(30, 150, 250, 0.9)', 'rgba', '', '', '', 14),
+(@iCategoryId, CONCAT(@sName, '_font_color_link_h1_hover'), '_bx_lucid_stg_cpt_option_font_color_link_h1_hover', 'rgba(30, 150, 250, 1)', 'rgba', '', '', '', 15),
+(@iCategoryId, CONCAT(@sName, '_font_size_h2'), '_bx_lucid_stg_cpt_option_font_size_h2', '24px', 'digit', '', '', '', 16),
+(@iCategoryId, CONCAT(@sName, '_font_weight_h2'), '_bx_lucid_stg_cpt_option_font_weight_h2', '700', 'digit', '', '', '', 17),
+(@iCategoryId, CONCAT(@sName, '_font_color_default_h2'), '_bx_lucid_stg_cpt_option_font_color_default_h2', 'rgba(40, 60, 80, 0.9)', 'rgba', '', '', '', 18),
+(@iCategoryId, CONCAT(@sName, '_font_color_grayed_h2'), '_bx_lucid_stg_cpt_option_font_color_grayed_h2', 'rgba(40, 60, 80, 0.5)', 'rgba', '', '', '', 19),
+(@iCategoryId, CONCAT(@sName, '_font_color_contrasted_h2'), '_bx_lucid_stg_cpt_option_font_color_contrasted_h2', 'rgba(255, 255, 255, 1)', 'rgba', '', '', '', 20),
+(@iCategoryId, CONCAT(@sName, '_font_color_link_h2'), '_bx_lucid_stg_cpt_option_font_color_link_h2', 'rgba(30, 150, 250, 0.9)', 'rgba', '', '', '', 21),
+(@iCategoryId, CONCAT(@sName, '_font_color_link_h2_hover'), '_bx_lucid_stg_cpt_option_font_color_link_h2_hover', 'rgba(30, 150, 250, 1)', 'rgba', '', '', '', 22),
+(@iCategoryId, CONCAT(@sName, '_font_size_h3'), '_bx_lucid_stg_cpt_option_font_size_h3', '20px', 'digit', '', '', '', 23),
+(@iCategoryId, CONCAT(@sName, '_font_weight_h3'), '_bx_lucid_stg_cpt_option_font_weight_h3', '500', 'digit', '', '', '', 24),
+(@iCategoryId, CONCAT(@sName, '_font_color_default_h3'), '_bx_lucid_stg_cpt_option_font_color_default_h3', 'rgba(40, 60, 80, 0.9)', 'rgba', '', '', '', 25),
+(@iCategoryId, CONCAT(@sName, '_font_color_grayed_h3'), '_bx_lucid_stg_cpt_option_font_color_grayed_h3', 'rgba(40, 60, 80, 0.5)', 'rgba', '', '', '', 26),
+(@iCategoryId, CONCAT(@sName, '_font_color_contrasted_h3'), '_bx_lucid_stg_cpt_option_font_color_contrasted_h3', 'rgba(255, 255, 255, 1)', 'rgba', '', '', '', 27),
+(@iCategoryId, CONCAT(@sName, '_font_color_link_h3'), '_bx_lucid_stg_cpt_option_font_color_link_h3', 'rgba(30, 150, 250, 0.9)', 'rgba', '', '', '', 28),
+(@iCategoryId, CONCAT(@sName, '_font_color_link_h3_hover'), '_bx_lucid_stg_cpt_option_font_color_link_h3_hover', 'rgba(30, 150, 250, 1)', 'rgba', '', '', '', 29);
+
+-- SETTINGS: Lucid template Custom Styles
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_styles_custom'), '_bx_lucid_stg_cpt_category_styles_custom', 160);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_styles_custom'), '_bx_lucid_stg_cpt_option_styles_custom', 'div.bx-market-unit-cover div.bx-base-text-unit-no-thumb {\r\n border-width: 0px;\r\n}', 'text', '', '', '', 1);
+
+-- SETTINGS: Lucid template Viewport Tablet
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_viewport_tablet'), '_bx_lucid_stg_cpt_category_viewport_tablet', 170);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_vpt_font_size_scale'), '_bx_lucid_stg_cpt_option_vpt_font_size_scale', '100%', 'digit', '', '', '', 1);
+
+-- SETTINGS: Lucid template Viewport Mobile
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `order`) VALUES 
+(@iTypeId, CONCAT(@sName, '_viewport_mobile'), '_bx_lucid_stg_cpt_category_viewport_mobile', 180);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, CONCAT(@sName, '_vpm_font_size_scale'), '_bx_lucid_stg_cpt_option_vpm_font_size_scale', '87.5%', 'digit', '', '', '', 1);
+
+
+-- MIXES
+INSERT INTO `sys_options_mixes` (`type`, `category`, `name`, `title`, `active`, `editable`) VALUES
+(@sName, '', 'Light-Mix', 'Light Mix', 1, 0);
+SET @iMixId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options_mixes2options` (`option`, `mix_id`, `value`) VALUES
+('bx_lucid_button_nlp_bg_color_hover', @iMixId, 'rgba(50, 100, 180, 1)'),
+('bx_lucid_button_nlp_bg_color', @iMixId, 'rgba(50, 150, 250, 1)'),
+('bx_lucid_button_nlp_height', @iMixId, '2rem'),
+('bx_lucid_button_nl_font_weight', @iMixId, '600'),
+('bx_lucid_button_nl_font_color', @iMixId, 'rgba(20, 80, 100, 1)'),
+('bx_lucid_button_nl_font_family', @iMixId, 'Nunito, Lato, Arial, sans-serif'),
+('bx_lucid_button_nl_font_size', @iMixId, '1rem'),
+('bx_lucid_button_nl_font_shadow', @iMixId, 'none'),
+('bx_lucid_button_nl_font_color_hover', @iMixId, 'rgba(20, 80, 100, 1)'),
+('bx_lucid_button_nl_shadow', @iMixId, '0px 1px 3px 0px rgba(0, 0, 0, 0.05)'),
+('bx_lucid_button_nl_border_size', @iMixId, '1px'),
+('bx_lucid_button_nl_border_radius', @iMixId, '20px'),
+('bx_lucid_button_nl_border_color', @iMixId, 'rgba(0, 0, 0, 0.05)'),
+('bx_lucid_button_nl_border_color_hover', @iMixId, 'rgba(0, 0, 0, 0.1)'),
+('bx_lucid_button_lgp_font_shadow', @iMixId, 'none'),
+('bx_lucid_button_nl_bg_color', @iMixId, 'rgba(255, 255, 255, 1)'),
+('bx_lucid_button_nl_height', @iMixId, '2rem'),
+('bx_lucid_button_nl_bg_color_hover', @iMixId, 'rgba(230, 240, 250, 1)'),
+('bx_lucid_button_lgp_font_color_hover', @iMixId, 'rgba(255, 255, 255, 1)'),
+('bx_lucid_button_lgp_shadow', @iMixId, '0px 1px 3px 0px rgba(0, 0, 0, 0.05)'),
+('bx_lucid_button_lgp_font_size', @iMixId, '1.5rem'),
+('bx_lucid_button_lgp_font_color', @iMixId, 'rgba(255, 255, 255, 1)'),
+('bx_lucid_button_lgp_font_weight', @iMixId, '600'),
+('bx_lucid_button_lgp_font_family', @iMixId, 'Nunito, Lato, Arial, sans-serif'),
+('bx_lucid_button_lgp_border_color_hover', @iMixId, 'rgba(0, 0, 0, 0.1)'),
+('bx_lucid_button_lgp_height', @iMixId, '3rem'),
+('bx_lucid_button_lgp_border_size', @iMixId, '1px'),
+('bx_lucid_button_lgp_border_radius', @iMixId, '30px'),
+('bx_lucid_button_lgp_bg_color', @iMixId, 'rgba(50, 150, 250, 1)'),
+('bx_lucid_button_lgp_bg_color_hover', @iMixId, 'rgba(50, 100, 180, 1)'),
+('bx_lucid_button_lgp_border_color', @iMixId, 'rgba(0, 0, 0, 0.05)'),
+('bx_lucid_card_bg_image_attachment', @iMixId, 'scroll'),
+('bx_lucid_card_bg_color_hover', @iMixId, 'rgba(255, 255, 255, 0.5)'),
+('bx_lucid_font_color_contrasted_h3', @iMixId, 'rgba(255, 255, 255, 1)'),
+('bx_lucid_font_color_grayed_h3', @iMixId, 'rgba(40, 60, 80, 0.5)'),
+('bx_lucid_font_color_link_h3', @iMixId, 'rgba(20, 80, 100, 1)'),
+('bx_lucid_font_size_h3', @iMixId, '20px'),
+('bx_lucid_font_color_default_h3', @iMixId, 'rgba(20, 80, 100, 1)'),
+('bx_lucid_font_color_link_h2_hover', @iMixId, 'rgba(50, 100, 180, 1)'),
+('bx_lucid_font_weight_h3', @iMixId, '600'),
+('bx_lucid_font_color_contrasted_h2', @iMixId, 'rgba(255, 255, 255, 1)'),
+('bx_lucid_font_color_grayed_h2', @iMixId, 'rgba(40, 60, 80, 0.5)'),
+('bx_lucid_font_color_link_h2', @iMixId, 'rgba(20, 80, 100, 1)'),
+('bx_lucid_font_color_default_h2', @iMixId, 'rgba(20, 80, 100, 1)'),
+('bx_lucid_font_color_contrasted_h1', @iMixId, 'rgba(255, 255, 255, 1)'),
+('bx_lucid_font_weight_h2', @iMixId, '700'),
+('bx_lucid_font_color_link_h1', @iMixId, 'rgba(20, 80, 100, 1)'),
+('bx_lucid_font_size_h2', @iMixId, '24px'),
+('bx_lucid_font_color_default_h1', @iMixId, 'rgba(20, 80, 100, 1)'),
+('bx_lucid_font_color_grayed_h1', @iMixId, 'rgba(40, 50, 60, 0.5)'),
+('bx_lucid_font_weight_h1', @iMixId, '800'),
+('bx_lucid_font_size_small', @iMixId, '12px'),
+('bx_lucid_font_size_h1', @iMixId, '32px'),
+('bx_lucid_button_sm_font_color', @iMixId, 'rgba(20, 80, 100, 1)'),
+('bx_lucid_font_size_middle', @iMixId, '14px'),
+('bx_lucid_font_size_large', @iMixId, '18px'),
+('bx_lucid_font_color_contrasted', @iMixId, 'rgba(255, 255, 255, 1)'),
+('bx_lucid_font_color_default', @iMixId, 'rgba(20, 80, 100, 1)'),
+('bx_lucid_font_color_grayed', @iMixId, 'rgba(20, 80, 100, 0.5)'),
+('bx_lucid_button_sm_font_shadow', @iMixId, 'none'),
+('bx_lucid_font_size_default', @iMixId, '16px'),
+('bx_lucid_font_family', @iMixId, 'Nunito, Lato, Arial, sans-serif'),
+('bx_lucid_button_sm_font_weight', @iMixId, '600'),
+('bx_lucid_button_sm_font_size', @iMixId, '0.75rem'),
+('bx_lucid_button_sm_border_radius', @iMixId, '15px'),
+('bx_lucid_button_sm_font_family', @iMixId, 'Nunito, Lato, Arial, sans-serif'),
+('bx_lucid_button_sm_font_color_hover', @iMixId, 'rgba(20, 80, 100, 1)'),
+('bx_lucid_button_sm_border_color', @iMixId, 'rgba(0, 0, 0, 0.05)'),
+('bx_lucid_button_sm_shadow', @iMixId, '0px 1px 3px 0px rgba(0, 0, 0, 0.05)'),
+('bx_lucid_button_sm_border_color_hover', @iMixId, 'rgba(0, 0, 0, 0.1)'),
+('bx_lucid_button_sm_border_size', @iMixId, '1px'),
+('bx_lucid_button_sm_bg_color', @iMixId, 'rgba(255, 255, 255, 1)'),
+('bx_lucid_button_sm_height', @iMixId, '1.5rem'),
+('bx_lucid_button_lg_font_weight', @iMixId, '600'),
+('bx_lucid_button_lg_font_family', @iMixId, 'Nunito, Lato, Arial, sans-serif'),
+('bx_lucid_button_lg_font_size', @iMixId, '1.5rem'),
+('bx_lucid_button_lg_font_color_hover', @iMixId, 'rgba(20, 80, 100, 1)'),
+('bx_lucid_button_sm_bg_color_hover', @iMixId, 'rgba(230, 240, 250, 1)'),
+('bx_lucid_button_lg_font_color', @iMixId, 'rgba(20, 80, 100, 1)'),
+('bx_lucid_button_lg_border_size', @iMixId, '1px'),
+('bx_lucid_button_lg_bg_color_hover', @iMixId, 'rgba(230, 240, 250, 1)'),
+('bx_lucid_button_lg_border_radius', @iMixId, '30px'),
+('bx_lucid_button_lg_shadow', @iMixId, '0px 1px 3px 0px rgba(0, 0, 0, 0.05)'),
+('bx_lucid_button_lg_border_color_hover', @iMixId, 'rgba(0, 0, 0, 0.1)'),
+('bx_lucid_button_lg_border_color', @iMixId, 'rgba(0, 0, 0, 0.05)'),
+('bx_lucid_form_input_font_color', @iMixId, 'rgba(20, 80, 100, 1)'),
+('bx_lucid_button_lg_height', @iMixId, '3rem'),
+('bx_lucid_button_lg_bg_color', @iMixId, 'rgba(255, 255, 255, 1)'),
+('bx_lucid_form_input_font_family', @iMixId, 'Nunito, Lato, Arial, sans-serif'),
+('bx_lucid_form_input_border_color_active', @iMixId, 'rgba(50, 150, 250, 1)'),
+('bx_lucid_form_input_shadow', @iMixId, '0px 1px 3px 0px rgba(0, 0, 0, 0)'),
+('bx_lucid_form_input_font_size', @iMixId, '1rem'),
+('bx_lucid_form_input_bg_color_active', @iMixId, 'rgba(255, 255, 255, 1)'),
+('bx_lucid_form_input_border_size', @iMixId, '1px'),
+('bx_lucid_menu_slide_font_color_active', @iMixId, 'rgba(20, 80, 100, 1)'),
+('bx_lucid_menu_slide_font_color_hover', @iMixId, 'rgba(50, 100, 180, 1)'),
+('bx_lucid_form_input_border_color', @iMixId, 'rgba(50, 100, 180, 0.2)'),
+('bx_lucid_form_input_bg_color', @iMixId, 'rgba(255, 255, 255, 0.9)'),
+('bx_lucid_form_input_height', @iMixId, '2.5rem'),
+('bx_lucid_menu_slide_font_shadow', @iMixId, 'none'),
+('bx_lucid_menu_slide_font_color', @iMixId, 'rgba(50, 150, 250, 1)'),
+('bx_lucid_menu_slide_font_family', @iMixId, 'Nunito, Lato, Arial, sans-serif'),
+('bx_lucid_menu_slide_font_weight', @iMixId, '600'),
+('bx_lucid_menu_slide_font_size', @iMixId, '1rem'),
+('bx_lucid_menu_slide_border_color', @iMixId, 'rgba(20, 80, 100, 0.2)'),
+('bx_lucid_menu_slide_border_size', @iMixId, '1px'),
+('bx_lucid_menu_slide_shadow', @iMixId, '0px 4px 12px 0px rgba(0, 0, 0, 0.1)'),
+('bx_lucid_menu_slide_bg_color', @iMixId, 'rgba(255, 255, 255, 0.9)'),
+('bx_lucid_menu_slide_content_padding', @iMixId, '1rem'),
+('bx_lucid_menu_slide_bg_image_repeat', @iMixId, 'no-repeat'),
+('bx_lucid_menu_slide_bg_image_size', @iMixId, 'cover'),
+('bx_lucid_menu_page_font_color_hover', @iMixId, 'rgba(50, 100, 180, 1)'),
+('bx_lucid_menu_page_font_weight', @iMixId, '600'),
+('bx_lucid_menu_page_font_color', @iMixId, 'rgba(50, 150, 250, 1)'),
+('bx_lucid_menu_page_font_shadow', @iMixId, 'none'),
+('bx_lucid_menu_page_font_color_active', @iMixId, 'rgba(20, 80, 100, 1)'),
+('bx_lucid_menu_page_font_size', @iMixId, '1rem'),
+('bx_lucid_menu_page_shadow', @iMixId, 'none'),
+('bx_lucid_menu_page_border_size', @iMixId, '0px'),
+('bx_lucid_menu_page_font_family', @iMixId, 'Nunito, Lato, Arial, sans-serif'),
+('bx_lucid_menu_page_border_color', @iMixId, 'rgba(0, 0, 0, 0.1)'),
+('bx_lucid_menu_page_content_padding', @iMixId, '0px'),
+('bx_lucid_menu_page_bg_image_size', @iMixId, 'cover'),
+('bx_lucid_menu_page_bg_color', @iMixId, 'rgba(220, 230, 240, 1)'),
+('bx_lucid_menu_page_bg_image_repeat', @iMixId, 'no-repeat'),
+('bx_lucid_menu_add_font_color_active', @iMixId, 'rgba(20, 80, 100, 1)'),
+('bx_lucid_menu_add_font_shadow', @iMixId, 'none'),
+('bx_lucid_menu_add_font_weight', @iMixId, '600'),
+('bx_lucid_menu_add_font_color_hover', @iMixId, 'rgba(50, 100, 180, 1)'),
+('bx_lucid_menu_add_font_size', @iMixId, '1rem'),
+('bx_lucid_menu_add_font_color', @iMixId, 'rgba(50, 150, 250, 1)'),
+('bx_lucid_menu_add_font_family', @iMixId, 'Nunito, Lato, Arial, sans-serif'),
+('bx_lucid_menu_add_shadow', @iMixId, '0px 4px 12px 0px rgba(0, 0, 0, 0.2)'),
+('bx_lucid_menu_add_bg_image_repeat', @iMixId, 'no-repeat'),
+('bx_lucid_menu_add_bg_image_size', @iMixId, 'cover'),
+('bx_lucid_menu_add_border_size', @iMixId, '1px'),
+('bx_lucid_menu_add_border_color', @iMixId, 'rgba(20, 80, 100, 0.05)'),
+('bx_lucid_menu_add_content_padding', @iMixId, '1rem'),
+('bx_lucid_menu_account_font_color_active', @iMixId, 'rgba(20, 80, 100, 1)'),
+('bx_lucid_menu_add_bg_color', @iMixId, 'rgba(255, 255, 255, 1)'),
+('bx_lucid_menu_account_font_family', @iMixId, 'Nunito, Lato, Arial, sans-serif'),
+('bx_lucid_menu_account_font_weight', @iMixId, '600'),
+('bx_lucid_menu_account_font_color_hover', @iMixId, 'rgba(50, 100, 180, 1)'),
+('bx_lucid_menu_account_border_color', @iMixId, 'rgba(20, 80, 100, 0.2)'),
+('bx_lucid_menu_account_font_shadow', @iMixId, 'none'),
+('bx_lucid_menu_account_border_size', @iMixId, '1px'),
+('bx_lucid_menu_account_font_color', @iMixId, 'rgba(50, 150, 250, 1)'),
+('bx_lucid_menu_account_content_padding', @iMixId, '1rem'),
+('bx_lucid_menu_account_font_size', @iMixId, '1rem'),
+('bx_lucid_menu_account_shadow', @iMixId, '0px 4px 12px 0px rgba(0, 0, 0, 0.2)'),
+('bx_lucid_menu_account_bg_image_repeat', @iMixId, 'no-repeat'),
+('bx_lucid_menu_account_bg_image_size', @iMixId, 'cover'),
+('bx_lucid_menu_main_font_weight', @iMixId, '600'),
+('bx_lucid_menu_account_bg_color', @iMixId, 'rgba(255, 255, 255, 1)'),
+('bx_lucid_menu_main_font_shadow', @iMixId, 'none'),
+('bx_lucid_menu_main_font_color_active', @iMixId, 'rgba(255, 255, 255, 1)'),
+('bx_lucid_menu_main_font_color_hover', @iMixId, 'rgba(255, 255, 255, 1)'),
+('bx_lucid_menu_main_border_size', @iMixId, '0px'),
+('bx_lucid_menu_main_font_color', @iMixId, 'rgba(255, 255, 255, 0.9)'),
+('bx_lucid_menu_main_font_size', @iMixId, '1rem'),
+('bx_lucid_menu_main_font_family', @iMixId, 'Nunito, Lato, Arial, sans-serif'),
+('bx_lucid_menu_main_shadow', @iMixId, 'none'),
+('bx_lucid_menu_main_border_color', @iMixId, 'rgba(0, 0, 0, 0)'),
+('bx_lucid_menu_main_content_padding', @iMixId, '0.625rem'),
+('bx_lucid_menu_main_bg_image_size', @iMixId, 'cover'),
+('bx_lucid_menu_main_bg_image_repeat', @iMixId, 'no-repeat'),
+('bx_lucid_menu_main_bg_color', @iMixId, 'rgba(0, 0, 0, 0)'),
+('bx_lucid_popup_title_font_family', @iMixId, 'Nunito, Lato, Arial, sans-serif'),
+('bx_lucid_popup_title_font_size', @iMixId, '1rem'),
+('bx_lucid_popup_title_font_color', @iMixId, 'rgba(20, 80, 100, 1)'),
+('bx_lucid_popup_shadow', @iMixId, '0px 4px 12px 0px rgba(0, 0, 0, 0.2)'),
+('bx_lucid_popup_title_bg_color', @iMixId, 'rgba(230, 240, 250, 0.9)'),
+('bx_lucid_popup_border_size', @iMixId, '1px'),
+('bx_lucid_popup_border_color', @iMixId, 'rgba(20, 80, 100, 0.2)'),
+('bx_lucid_popup_title_padding', @iMixId, '1rem'),
+('bx_lucid_popup_content_padding', @iMixId, '1rem 1rem'),
+('bx_lucid_popup_border_radius', @iMixId, '8px'),
+('bx_lucid_popup_bg_image_size', @iMixId, 'cover'),
+('bx_lucid_popup_bg_image_repeat', @iMixId, 'no-repeat'),
+('bx_lucid_card_content_padding', @iMixId, '1rem'),
+('bx_lucid_popup_bg_color', @iMixId, 'rgba(255, 255, 255, 1)'),
+('bx_lucid_card_shadow', @iMixId, '0px 2px 6px 0px rgba(0, 0, 0, 0.05)'),
+('bx_lucid_vpt_font_size_scale', @iMixId, '100%'),
+('bx_lucid_card_border_radius', @iMixId, '8px'),
+('bx_lucid_vpm_font_size_scale', @iMixId, '87.5%'),
+('bx_lucid_card_border_size', @iMixId, '1px'),
+('bx_lucid_card_border_color', @iMixId, 'rgba(20, 80, 100, 0.1)'),
+('bx_lucid_styles_custom', @iMixId, 'div.bx-market-unit-cover div.bx-base-text-unit-no-thumb {\r\n border-width: 0px;\r\n}'),
+('bx_lucid_font_color_link_h3_hover', @iMixId, 'rgba(50, 100, 180, 1)'),
+('bx_lucid_block_title_div_bg_color', @iMixId, 'rgba(20, 80, 100, 0.1)'),
+('bx_lucid_card_bg_color', @iMixId, 'rgba(255, 255, 255, 1)'),
+('bx_lucid_card_bg_image_repeat', @iMixId, 'no-repeat'),
+('bx_lucid_card_bg_image_size', @iMixId, 'cover'),
+('bx_lucid_block_title_font_family', @iMixId, 'Nunito, Lato, Arial, sans-serif'),
+('bx_lucid_block_title_div_height', @iMixId, '1px'),
+('bx_lucid_block_title_border_radius', @iMixId, '0px'),
+('bx_lucid_block_title_border_size', @iMixId, '0px'),
+('bx_lucid_block_title_font_color', @iMixId, 'rgba(20, 80, 100, 1)'),
+('bx_lucid_block_title_font_weight', @iMixId, '800'),
+('bx_lucid_block_title_bg_color', @iMixId, 'rgba(255, 255, 255, 0)'),
+('bx_lucid_block_shadow', @iMixId, '0px 2px 6px 0px rgba(0, 0, 0, 0.05)'),
+('bx_lucid_block_border_size', @iMixId, '1px'),
+('bx_lucid_block_title_padding', @iMixId, '0rem 1rem 0rem 1rem'),
+('bx_lucid_block_border_radius', @iMixId, '8px'),
+('bx_lucid_block_title_font_size', @iMixId, '1rem'),
+('bx_lucid_block_title_border_color', @iMixId, 'rgba(0, 0, 0, 0)'),
+('bx_lucid_block_border_color', @iMixId, 'rgba(20, 80, 100, 0.1)'),
+('bx_lucid_cover_font_size', @iMixId, '2.0rem'),
+('bx_lucid_block_content_padding', @iMixId, '1rem'),
+('bx_lucid_cover_font_color', @iMixId, 'rgba(255, 255, 255, 1)'),
+('bx_lucid_cover_font_family', @iMixId, 'Nunito, Lato, Arial, sans-serif'),
+('bx_lucid_block_bg_image_size', @iMixId, 'cover'),
+('bx_lucid_block_bg_color', @iMixId, 'rgba(255, 255, 255, 0.8)'),
+('bx_lucid_cover_font_weight', @iMixId, '700'),
+('bx_lucid_block_bg_image_repeat', @iMixId, 'no-repeat'),
+('bx_lucid_cover_icon_shadow', @iMixId, 'none'),
+('bx_lucid_cover_text_shadow', @iMixId, '0px 1px 3px rgba(0, 0, 0, .3)'),
+('bx_lucid_cover_border_radius', @iMixId, '8px'),
+('bx_lucid_cover_icon_border_color', @iMixId, 'rgba(208, 208, 208, 1)'),
+('bx_lucid_cover_icon_border_size', @iMixId, '1px'),
+('bx_lucid_cover_icon_border_radius', @iMixId, '3px'),
+('bx_lucid_cover_text_align', @iMixId, 'center'),
+('bx_lucid_cover_border_size', @iMixId, '1px'),
+('bx_lucid_cover_border_color', @iMixId, 'rgba(20, 80, 100, 0.1)'),
+('bx_lucid_cover_shadow', @iMixId, '0px 2px 6px 0px rgba(0, 0, 0, 0.05)'),
+('bx_lucid_cover_content_padding', @iMixId, '2rem 3rem 2rem 3rem'),
+('bx_lucid_cover_height', @iMixId, '8rem'),
+('bx_lucid_body_icon_color_hover', @iMixId, 'rgba(20, 80, 160, 1)'),
+('bx_lucid_body_link_color_hover', @iMixId, 'rgba(20, 80, 160, 1)'),
+('bx_lucid_cover_bg_color', @iMixId, 'rgba(255, 255, 255, 1)'),
+('bx_lucid_body_link_color', @iMixId, 'rgba(50, 150, 250, 1)'),
+('bx_lucid_font_color_link_h1_hover', @iMixId, 'rgba(50, 100, 180, 1)'),
+('bx_lucid_button_lg_font_shadow', @iMixId, 'none'),
+('bx_lucid_page_width', @iMixId, '100%'),
+('bx_lucid_body_icon_color', @iMixId, 'rgba(50, 150, 250, 1)'),
+('bx_lucid_body_bg_image_size', @iMixId, 'cover'),
+('bx_lucid_body_bg_color', @iMixId, 'rgb(220, 230, 240)'),
+('bx_lucid_body_bg_image_repeat', @iMixId, 'no-repeat'),
+('bx_lucid_footer_icon_color_hover', @iMixId, 'rgba(20, 80, 160, 1)'),
+('bx_lucid_footer_link_color_hover', @iMixId, 'rgba(20, 80, 160, 1)'),
+('bx_lucid_footer_link_color', @iMixId, 'rgba(50, 150, 250, 1)'),
+('bx_lucid_footer_border_size', @iMixId, '1px'),
+('bx_lucid_button_smp_font_family', @iMixId, 'Nunito, Lato, Arial, sans-serif'),
+('bx_lucid_button_smp_font_size', @iMixId, '0.75rem'),
+('bx_lucid_button_smp_font_color', @iMixId, 'rgba(255, 255, 255, 0.9)'),
+('bx_lucid_button_smp_font_weight', @iMixId, '600'),
+('bx_lucid_button_smp_font_shadow', @iMixId, 'none'),
+('bx_lucid_button_smp_font_color_hover', @iMixId, 'rgba(255, 255, 255, 1)'),
+('bx_lucid_button_smp_shadow', @iMixId, '0px 1px 3px 0px rgba(0, 0, 0, 0.05)'),
+('bx_lucid_button_smp_border_radius', @iMixId, '15px'),
+('bx_lucid_button_smp_border_color_hover', @iMixId, 'rgba(255, 255, 255, 0.5)'),
+('bx_lucid_button_smp_border_size', @iMixId, '1px'),
+('bx_lucid_button_smp_border_color', @iMixId, 'rgba(255, 255, 255, 0.2)'),
+('bx_lucid_button_smp_bg_color_hover', @iMixId, 'rgba(50, 100, 180, 1)'),
+('bx_lucid_button_smp_height', @iMixId, '1.5rem'),
+('bx_lucid_button_smp_bg_color', @iMixId, 'rgba(50, 150, 250, 1)'),
+('bx_lucid_button_nlp_font_weight', @iMixId, '600'),
+('bx_lucid_button_nlp_font_shadow', @iMixId, 'none'),
+('bx_lucid_button_nlp_font_size', @iMixId, '1rem'),
+('bx_lucid_button_nlp_font_color_hover', @iMixId, 'rgba(255, 255, 255, 1)'),
+('bx_lucid_button_nlp_font_color', @iMixId, 'rgba(255, 255, 255, 0.9)'),
+('bx_lucid_button_nlp_shadow', @iMixId, '0px 1px 3px 0px rgba(0, 0, 0, 0.05)'),
+('bx_lucid_button_nlp_font_family', @iMixId, 'Nunito, Lato, Arial, sans-serif'),
+('bx_lucid_button_nlp_border_radius', @iMixId, '20px'),
+('bx_lucid_button_nlp_border_size', @iMixId, '1px'),
+('bx_lucid_button_nlp_border_color_hover', @iMixId, 'rgba(255, 255, 255, 0.5)'),
+('bx_lucid_footer_content_padding', @iMixId, '1rem'),
+('bx_lucid_footer_border_color', @iMixId, 'rgba(40, 60, 80, 0.1)'),
+('bx_lucid_button_nlp_border_color', @iMixId, 'rgba(255, 255, 255, 0.2)'),
+('bx_lucid_footer_font_color', @iMixId, 'rgba(20, 80, 100, 1)'),
+('bx_lucid_footer_icon_color', @iMixId, 'rgba(50, 150, 250, 1)'),
+('bx_lucid_footer_shadow', @iMixId, 'none'),
+('bx_lucid_footer_bg_color', @iMixId, 'rgba(40, 60, 80, 0)'),
+('bx_lucid_footer_bg_image_size', @iMixId, 'cover'),
+('bx_lucid_footer_bg_image_repeat', @iMixId, 'no-repeat'),
+('bx_lucid_header_shadow', @iMixId, '0px 2px 6px 0px rgba(0, 0, 0, 0.4)'),
+('bx_lucid_header_icon_color', @iMixId, 'rgba(255, 255, 255, 1)'),
+('bx_lucid_header_border_size', @iMixId, '1px'),
+('bx_lucid_header_link_color', @iMixId, 'rgba(255, 255, 255, 1)'),
+('bx_lucid_header_icon_color_hover', @iMixId, 'rgba(255, 255, 255, 0.8)'),
+('bx_lucid_site_logo_alt', @iMixId, ''),
+('bx_lucid_header_link_color_hover', @iMixId, 'rgba(255, 255, 255, 0.8)'),
+('bx_lucid_site_logo_height', @iMixId, '30'),
+('bx_lucid_site_logo_width', @iMixId, '0'),
+('bx_lucid_header_border_color', @iMixId, 'rgba(25, 50, 90, 1)'),
+('bx_lucid_header_bg_image_size', @iMixId, 'cover'),
+('bx_lucid_header_bg_image_repeat', @iMixId, 'no-repeat'),
+('bx_lucid_header_bg_color', @iMixId, 'rgba(50, 100, 180, 1)'),
+('bx_lucid_general_item_bg_color_active', @iMixId, 'rgba(238, 241, 244, 1)'),
+('bx_lucid_header_content_padding', @iMixId, ' 0 1rem'),
+('bx_lucid_header_height', @iMixId, '4rem'),
+('bx_lucid_form_input_border_radius', @iMixId, '8px'),
+('bx_lucid_general_item_bg_color_hover', @iMixId, 'rgba(238, 241, 244, 1)'),
+('bx_lucid_menu_main_align_items', @iMixId, 'left');
+
+
+-- STUDIO PAGE & WIDGET
+INSERT INTO `sys_std_pages`(`index`, `name`, `header`, `caption`, `icon`) VALUES
+(3, @sName, '', '', 'bx_lucid@modules/boonex/lucid/|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, @sName, CONCAT('{url_studio}design.php?name=', @sName), '', 'bx_lucid@modules/boonex/lucid/|std-icon.svg', '_bx_lucid_wgt_cpt', '', '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:"TemplStudioDesigns";}');
+INSERT INTO `sys_std_pages_widgets`(`page_id`, `widget_id`, `order`) VALUES
+(@iParentPageId, LAST_INSERT_ID(), @iParentPageOrder + 1);

+ 51 - 0
modules/boonex/market/updates/10.0.0_10.0.1/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' => 'Market',
+    'version_from' => '10.0.0',
+    'version_to' => '10.0.1',
+    'vendor' => 'BoonEx',
+
+    'compatible_with' => array(
+        '10.0.0-B2'
+    ),
+
+    /**
+     * 'home_dir' and 'home_uri' - should be unique. Don't use spaces in 'home_uri' and the other special chars.
+     */
+    'home_dir' => 'boonex/market/updates/update_10.0.0_10.0.1/',
+    'home_uri' => 'market_update_1000_1001',
+
+    'module_dir' => 'boonex/market/',
+    'module_uri' => 'market',
+
+    'db_prefix' => 'bx_market_',
+    'class_prefix' => 'BxMarket',
+
+    /**
+     * Installation/Uninstallation Section.
+     */
+    'install' => array(
+        'execute_sql' => 0,
+        'update_files' => 1,
+        'update_languages' => 1,
+        'clear_db_cache' => 0,
+    ),
+
+    /**
+     * Category for language keys.
+     */
+    'language_category' => 'Market',
+
+    /**
+     * Files Section
+     */
+    'delete_files' => array(),
+);

+ 13 - 0
modules/boonex/market/updates/10.0.0_10.0.1/install/installer.php

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

+ 6 - 0
modules/boonex/market/updates/10.0.0_10.0.1/install/langs/en.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources name="en" flag="gb" title="English">
+	<string_add name="_bx_market_txt_sample_reaction_single"><![CDATA['{0}' reaction to product]]></string_add>
+
+    <string_upd name="_bx_market_txt_all_entries_by"><![CDATA[{0} products]]></string_upd>
+</resources>

+ 250 - 0
modules/boonex/market/updates/10.0.0_10.0.1/source/classes/BxMarketConfig.php

@@ -0,0 +1,250 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Market Market
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxMarketConfig extends BxBaseModTextConfig
+{
+	protected $_aCurrency;
+
+    function __construct($aModule)
+    {
+        parent::__construct($aModule);
+
+        $aMenuItems2Methods = array (
+            'hide-product' => 'checkAllowedHide',
+            'unhide-product' => 'checkAllowedUnhide',
+            'edit-product' => 'checkAllowedEdit',
+            'delete-product' => 'checkAllowedDelete',
+            'product-more' => 'checkAllowedViewMoreMenu'
+        );
+
+        $this->CNF = array (
+
+            // module icon
+            'ICON' => 'shopping-cart col-green3',
+
+            // database tables
+            'TABLE_ENTRIES' => $aModule['db_prefix'] . 'products',
+            'TABLE_ENTRIES_FULLTEXT' => 'title_text',
+            'TABLE_PHOTOS2ENTRIES' => $aModule['db_prefix'] . 'photos2products',
+            'TABLE_FILES2ENTRIES' => $aModule['db_prefix'] . 'files2products',
+            'TABLE_FILES' => $aModule['db_prefix'] . 'files',
+            'TABLE_DOWNLOADS' => $aModule['db_prefix'] . 'downloads_track',
+            'TABLE_LICENSES' => $aModule['db_prefix'] . 'licenses',
+            'TABLE_LICENSES_DELETED' => $aModule['db_prefix'] . 'licenses_deleted',
+
+            // database fields
+            'FIELD_ID' => 'id',
+            'FIELD_AUTHOR' => 'author',
+            'FIELD_ADDED' => 'added',
+            'FIELD_CHANGED' => 'changed',
+            'FIELD_NAME' => 'name',
+            'FIELD_TITLE' => 'title',
+            'FIELD_TEXT' => 'text',
+            'FIELD_TEXT_ID' => 'product-text',
+            'FIELD_CATEGORY' => 'cat',
+            'FIELD_HEADER_BEG_SINGLE' => 'header_beg_single',
+            'FIELD_WARNING_SINGLE' => 'warning_single',
+            'FIELD_PRICE_SINGLE' => 'price_single',
+            'FIELD_HEADER_END_SINGLE' => 'header_end_single',
+            'FIELD_HEADER_BEG_RECURRING' => 'header_beg_recurring',
+            'FIELD_WARNING_RECURRING' => 'warning_recurring',
+            'FIELD_PRICE_RECURRING' => 'price_recurring',
+            'FIELD_DURATION_RECURRING' => 'duration_recurring',
+            'FIELD_TRIAL_RECURRING' => 'trial_recurring',
+            'FIELD_HEADER_END_RECURRING' => 'header_end_recurring',
+            'FIELD_ALLOW_VIEW_TO' => 'allow_view_to',
+            'FIELD_ALLOW_PURCHASE_TO' => 'allow_purchase_to',
+            'FIELD_ALLOW_COMMENT_TO' => 'allow_comment_to',
+            'FIELD_ALLOW_VOTE_TO' => 'allow_vote_to',
+            'FIELD_SUBENTRIES' => 'subentries',
+            'FIELD_PHOTO' => 'pictures',
+            'FIELD_THUMB' => 'thumb',
+            'FIELD_COVER' => 'cover',
+            'FIELD_FILE' => 'files',
+            'FIELD_PACKAGE' => 'package',
+            'FIELD_NOTES_PURCHASED' => 'notes_purchased',
+            'FIELD_VIEWS' => 'views',
+            'FIELD_COMMENTS' => 'comments',
+            'FIELD_FEATURED' => 'featured',
+            'FIELD_STATUS' => 'status',
+            'FIELD_STATUS_ADMIN' => 'status_admin',
+            'FIELD_LOCATION_PREFIX' => 'location',
+            'FIELD_LABELS' => 'labels',
+            'FIELDS_QUICK_SEARCH' => array('title'),
+            'FIELDS_WITH_KEYWORDS' => 'auto', // can be 'auto', array of fields or comma separated string of field names, works only when OBJECT_METATAGS is specified
+
+            // page URIs
+            'URI_VIEW_ENTRY' => 'view-product',
+            'URI_AUTHOR_ENTRIES' => 'products-author',
+            'URI_ENTRIES_BY_CONTEXT' => 'products-context',
+            'URI_ADD_ENTRY' => 'create-product',
+            'URI_EDIT_ENTRY' => 'edit-product',
+            'URI_DOWNLOAD_ENTRY' => 'download-product',
+            'URI_MANAGE_COMMON' => 'products-manage',
+
+            'URL_HOME' => 'page.php?i=products-home',
+            'URL_LATEST' => 'page.php?i=products-latest',
+            'URL_FEATURED' => 'page.php?i=products-featured',
+            'URL_POPULAR' => 'page.php?i=products-popular',
+            'URL_UPDATED' => 'page.php?i=products-updated',
+            'URL_MANAGE_COMMON' => 'page.php?i=products-manage',
+            'URL_MANAGE_ADMINISTRATION' => 'page.php?i=products-administration',
+            'URL_LICENSES_COMMON' => 'page.php?i=products-licenses',
+            'URL_LICENSES_ADMINISTRATION' => 'page.php?i=products-licenses-administration',
+            'URL_VIEW_ENTRY' => 'page.php?i=view-product&id=',
+
+            // some params
+            'PARAM_CHARS_SUMMARY' => 'bx_market_summary_chars',
+            'PARAM_CHARS_SUMMARY_PLAIN' => 'bx_market_plain_summary_chars',
+            'PARAM_NUM_RSS' => 'bx_market_rss_num',
+            'PARAM_SEARCHABLE_FIELDS' => 'bx_market_searchable_fields',
+
+            // objects            
+            'OBJECT_STORAGE' => 'bx_market_photos',
+            'OBJECT_STORAGE_FILES' => 'bx_market_files',
+            'OBJECT_IMAGES_TRANSCODER_PREVIEW' => 'bx_market_preview',
+            'OBJECT_IMAGES_TRANSCODER_ICON' => 'bx_market_icon',
+            'OBJECT_IMAGES_TRANSCODER_THUMB' => 'bx_market_thumb',
+            'OBJECT_IMAGES_TRANSCODER_COVER' => 'bx_market_cover',
+            'OBJECT_IMAGES_TRANSCODER_SCREENSHOT' => 'bx_market_screenshot',
+            'OBJECT_IMAGES_TRANSCODER_GALLERY' => 'bx_market_gallery',
+            'OBJECT_VIDEOS_TRANSCODERS' => array(),
+            'OBJECT_REPORTS' => 'bx_market',
+            'OBJECT_VIEWS' => 'bx_market',
+            'OBJECT_VOTES' => 'bx_market',
+            'OBJECT_REACTIONS' => 'bx_market_reactions',
+            'OBJECT_SCORES' => 'bx_market',
+            'OBJECT_FAVORITES' => 'bx_market',
+            'OBJECT_FEATURED' => 'bx_market',
+            'OBJECT_METATAGS' => 'bx_market',
+            'OBJECT_COMMENTS' => 'bx_market',
+            'OBJECT_CATEGORY' => 'bx_market_cats',
+            'OBJECT_PRIVACY_VIEW' => 'bx_market_allow_view_to',
+            'OBJECT_PRIVACY_PURCHASE' => 'bx_market_allow_purchase_to',
+            'OBJECT_PRIVACY_COMMENT' => 'bx_market_allow_comment_to',
+            'OBJECT_PRIVACY_VOTE' => 'bx_market_allow_vote_to',
+            'OBJECT_FORM_ENTRY' => 'bx_market',
+            'OBJECT_FORM_ENTRY_DISPLAY_VIEW' => 'bx_market_entry_view',
+            'OBJECT_FORM_ENTRY_DISPLAY_VIEW_FULL' => 'bx_market_entry_view_full',
+            'OBJECT_FORM_ENTRY_DISPLAY_ADD' => 'bx_market_entry_add',
+            'OBJECT_FORM_ENTRY_DISPLAY_EDIT' => 'bx_market_entry_edit',
+            'OBJECT_FORM_ENTRY_DISPLAY_DELETE' => 'bx_market_entry_delete',
+            'OBJECT_MENU_ACTIONS_VIEW_ENTRY' => 'bx_market_view', // actions menu on view entry page
+            'OBJECT_MENU_ACTIONS_VIEW_ENTRY_MORE' => 'bx_market_view_more', 
+            'OBJECT_MENU_ACTIONS_VIEW_ENTRY_ALL' => 'bx_market_view_actions', // all actions menu on view entry page
+            'OBJECT_MENU_ACTIONS_MY_ENTRIES' => 'bx_market_my', // actions menu on my entries page
+            'OBJECT_MENU_ACTIONS_SNIPPET' => 'bx_market_snippet', // actions menu for entry snippet
+            'OBJECT_MENU_ACTIONS_SNIPPET_MORE' => 'bx_market_snippet_more', // actions menu (short) from view entry page but created for snippet actions menu
+            'OBJECT_MENU_SUBMENU' => 'bx_market_submenu', // main module submenu
+            'OBJECT_MENU_SUBMENU_VIEW_ENTRY' => 'bx_market_view_submenu', // view entry submenu
+            'OBJECT_MENU_SUBMENU_VIEW_ENTRY_MAIN_SELECTION' => 'products-home', // first item in view entry submenu from main module submenu
+            'OBJECT_MENU_SNIPPET_META' => 'bx_market_snippet_meta', // menu for snippet meta info
+            'OBJECT_MENU_MANAGE_TOOLS' => 'bx_market_menu_manage_tools', //manage menu in content administration tools
+            'OBJECT_MENU_LICENSES' => 'bx_market_licenses_submenu',
+            'OBJECT_GRID_ADMINISTRATION' => 'bx_market_administration',
+            'OBJECT_GRID_COMMON' => 'bx_market_common',
+            'OBJECT_GRID_LICENSES_ADMINISTRATION' => 'bx_market_licenses_administration',
+            'OBJECT_GRID_LICENSES' => 'bx_market_licenses',
+            'OBJECT_UPLOADERS' => array('bx_market_simple', 'bx_market_html5'),
+            'OBJECT_CONNECTION_SUBENTRIES' => 'bx_market_subentries',
+
+            // menu items which visibility depends on custom visibility checking
+            'MENU_ITEM_TO_METHOD' => array (
+                'bx_market_my' => array (
+                    'create-product' => 'checkAllowedAdd',
+                ),
+                'bx_market_view' => $aMenuItems2Methods,
+                'bx_market_view_more' => $aMenuItems2Methods,
+                'bx_market_snippet_more' => $aMenuItems2Methods,
+            ),
+
+            // global settings
+            'OPTION_ENABLE_RECURRING' => 'bx_market_enable_recurring',
+            'OPTION_RECURRING_RESERVE' => 'bx_market_recurring_reserve',
+
+            // email templates
+            'ETEMPLATE_PURCHASED' => 'bx_market_purchased',
+
+            // some language keys
+            'T' => array (
+                'txt_sample_single' => '_bx_market_txt_sample_single',
+            	'txt_sample_single_with_article' => '_bx_market_txt_sample_single_with_article',
+            	'txt_sample_comment_single' => '_bx_market_txt_sample_comment_single',
+            	'txt_sample_vote_single' => '_bx_market_txt_sample_vote_single',
+                'txt_sample_reaction_single' => '_bx_market_txt_sample_reaction_single',
+                'txt_sample_score_up_single' => '_bx_market_txt_sample_score_up_single',
+                'txt_sample_score_down_single' => '_bx_market_txt_sample_score_down_single',
+            	'form_field_author' => '_bx_market_form_entry_input_author',
+            	'grid_action_err_delete' => '_bx_market_grid_action_err_delete',
+            	'grid_txt_account_manager' => '_bx_market_grid_txt_account_manager',
+                'filter_item_active' => '_bx_market_grid_filter_item_title_adm_active',
+            	'filter_item_hidden' => '_bx_market_grid_filter_item_title_adm_hidden',
+            	'filter_item_select_one_filter1' => '_bx_market_grid_filter_item_title_adm_select_one_filter1',
+            	'menu_item_manage_my' => '_bx_market_menu_item_title_manage_my',
+            	'menu_item_manage_all' => '_bx_market_menu_item_title_manage_all',
+                'txt_all_entries_by' => '_bx_market_txt_all_entries_by',
+                'txt_all_entries_in' => '_bx_market_txt_all_entries_in',
+                'txt_all_entries_by_author' => '_bx_market_page_title_browse_by_author',
+                'txt_all_entries_by_context' => '_bx_market_page_title_browse_by_context',
+                'txt_per_day' => '_bx_market_txt_per_day',
+                'txt_per_day_short' => '_bx_market_txt_per_day_short',
+                'txt_per_week' => '_bx_market_txt_per_week',
+                'txt_per_week_short' => '_bx_market_txt_per_week_short',
+                'txt_per_month' => '_bx_market_txt_per_month',
+                'txt_per_month_short' => '_bx_market_txt_per_month_short',
+            	'txt_per_year' => '_bx_market_txt_per_year',
+                'txt_per_year_short' => '_bx_market_txt_per_year_short',
+                
+            ),
+        );
+
+        $this->_aJsClasses = array(
+        	'form' => 'BxMarketForm',
+        	'entry' => 'BxMarketEntry',
+        	'manage_tools' => 'BxMarketManageTools',
+        	'licenses' => 'BxMarketLicenses'
+        );
+
+        $this->_aJsObjects = array(
+        	'form' => 'oBxMarketForm',
+        	'entry' => 'oBxMarketEntry',
+        	'manage_tools' => 'oBxMarketManageTools',
+        	'licenses' => 'oBxMarketLicenses'
+        );
+
+        $this->_aGridObjects = array(
+        	'common' => $this->CNF['OBJECT_GRID_COMMON'],
+        	'administration' => $this->CNF['OBJECT_GRID_ADMINISTRATION'],
+                'licenses_administration' => $this->CNF['OBJECT_GRID_LICENSES_ADMINISTRATION'],
+        	'licenses' => $this->CNF['OBJECT_GRID_LICENSES'],
+        );
+
+        $oPayments = BxDolPayments::getInstance();
+        $this->_aCurrency = array(
+        	'code' => $oPayments->getOption('default_currency_code'),
+        	'sign' => $oPayments->getOption('default_currency_sign')
+        );
+    }
+
+    public function getCurrency()
+    {
+    	return $this->_aCurrency;
+    }
+
+    public function getEntryName($sName)
+    {
+        $sName = strtolower($sName);
+
+        return uriGenerate($sName, $this->CNF['TABLE_ENTRIES'], $this->CNF['FIELD_NAME']);
+    }
+}
+
+/** @} */

+ 327 - 0
modules/boonex/market/updates/10.0.0_10.0.1/source/classes/BxMarketFormEntry.php

@@ -0,0 +1,327 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Market Market
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+/**
+ * Create/Edit entry form
+ */
+class BxMarketFormEntry extends BxBaseModTextFormEntry
+{
+    public function __construct($aInfo, $oTemplate = false)
+    {
+        $this->MODULE = 'bx_market';
+        parent::__construct($aInfo, $oTemplate);
+
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
+        $iProfileId = bx_get_logged_profile_id();
+
+        if(isset($this->aInputs[$CNF['FIELD_TITLE']], $this->aInputs[$CNF['FIELD_NAME']])) {
+        	$sJsObject = $this->_oModule->_oConfig->getJsObject('form');
+
+        	$aMask = array('mask' => "javascript:%s.checkName('%s', '%s');", $sJsObject, $CNF['FIELD_TITLE'], $CNF['FIELD_NAME']);
+            if($this->aParams['display'] == $CNF['OBJECT_FORM_ENTRY_DISPLAY_EDIT'] && bx_get('id') !== false) {
+                $aMask['mask'] = "javascript:%s.checkName('%s', '%s', %d);";
+                $aMask[] = (int)bx_get('id');
+            }
+
+            $sOnBlur = call_user_func_array('sprintf', array_values($aMask)); 
+        	$this->aInputs[$CNF['FIELD_TITLE']]['attrs']['onblur'] = $sOnBlur;
+        	$this->aInputs[$CNF['FIELD_NAME']]['attrs']['onblur'] = $sOnBlur;
+        }
+
+	    if(isset($this->aInputs[$CNF['FIELD_FILE']])) {
+            $this->aInputs[$CNF['FIELD_FILE']]['storage_object'] = $CNF['OBJECT_STORAGE_FILES'];
+            $this->aInputs[$CNF['FIELD_FILE']]['uploaders'] =  !empty($this->aInputs[$CNF['FIELD_FILE']]['value']) ? unserialize($this->aInputs[$CNF['FIELD_FILE']]['value']) : $CNF['OBJECT_UPLOADERS'];
+            $this->aInputs[$CNF['FIELD_FILE']]['images_transcoder'] = '';
+            $this->aInputs[$CNF['FIELD_FILE']]['storage_private'] = 1;
+            $this->aInputs[$CNF['FIELD_FILE']]['multiple'] = true;
+            $this->aInputs[$CNF['FIELD_FILE']]['content_id'] = 0;
+            $this->aInputs[$CNF['FIELD_FILE']]['ghost_template'] = '';
+        }
+
+        $bRecurring = $this->_oModule->_oDb->getParam($CNF['OPTION_ENABLE_RECURRING']) == 'on';
+        if(!$bRecurring) {
+        	$this->aInputs[$CNF['FIELD_DURATION_RECURRING']]['type'] = 'hidden';
+			$this->aInputs[$CNF['FIELD_PRICE_RECURRING']]['type'] = 'hidden';
+			$this->aInputs[$CNF['FIELD_PRICE_RECURRING']]['value'] = 0;
+
+			unset($this->aInputs[$CNF['FIELD_HEADER_BEG_RECURRING']]);
+			unset($this->aInputs[$CNF['FIELD_HEADER_END_RECURRING']]);
+        }
+
+        $oPayment = BxDolPayments::getInstance();
+        if(isset($this->aInputs[$CNF['FIELD_WARNING_SINGLE']])) {
+	        if(!$oPayment->isAcceptingPayments($iProfileId, BX_PAYMENT_TYPE_SINGLE)) 
+	        	$this->aInputs[$CNF['FIELD_WARNING_SINGLE']]['value'] = MsgBox(_t($this->aInputs[$CNF['FIELD_WARNING_SINGLE']]['value'], $oPayment->getDetailsUrl()));
+	        else 
+	        	unset($this->aInputs[$CNF['FIELD_WARNING_SINGLE']]);
+        }
+
+        if(isset($this->aInputs[$CNF['FIELD_WARNING_RECURRING']])) {
+	        if($bRecurring && !$oPayment->isAcceptingPayments($iProfileId, BX_PAYMENT_TYPE_RECURRING))
+	        	$this->aInputs[$CNF['FIELD_WARNING_RECURRING']]['value'] = MsgBox(_t($this->aInputs[$CNF['FIELD_WARNING_RECURRING']]['value'], $oPayment->getDetailsUrl()));
+	        else 
+	        	unset($this->aInputs[$CNF['FIELD_WARNING_RECURRING']]);
+        }
+
+		if(isset($this->aInputs[$CNF['FIELD_ALLOW_PURCHASE_TO']]))
+			$this->aInputs[$CNF['FIELD_ALLOW_PURCHASE_TO']] = BxDolPrivacy::getGroupChooser($CNF['OBJECT_PRIVACY_PURCHASE']);
+
+		$aDynamicGroups = array(
+			array ('key' => '', 'value' => '----'),
+			array ('key' => 'c', 'value' => _t('_bx_market_privacy_group_customers'))
+		);
+
+		if(isset($this->aInputs[$CNF['FIELD_ALLOW_COMMENT_TO']])) {
+			$this->aInputs[$CNF['FIELD_ALLOW_COMMENT_TO']] = BxDolPrivacy::getGroupChooser($CNF['OBJECT_PRIVACY_COMMENT'], $iProfileId, array('dynamic_groups' => $aDynamicGroups));
+			$this->aInputs[$CNF['FIELD_ALLOW_COMMENT_TO']]['db']['pass'] = 'Xss';
+		}
+
+		if(isset($this->aInputs[$CNF['FIELD_ALLOW_VOTE_TO']])) {
+			$this->aInputs[$CNF['FIELD_ALLOW_VOTE_TO']] = BxDolPrivacy::getGroupChooser($CNF['OBJECT_PRIVACY_VOTE'], $iProfileId, array('dynamic_groups' => $aDynamicGroups));
+			$this->aInputs[$CNF['FIELD_ALLOW_VOTE_TO']]['db']['pass'] = 'Xss';
+		}
+
+		if(isset($this->aInputs[$CNF['FIELD_SUBENTRIES']]) && $this->_oModule->checkAllowedSetSubentries() !== CHECK_ACTION_RESULT_ALLOWED)
+		    unset($this->aInputs[$CNF['FIELD_SUBENTRIES']]);
+    }
+
+    function getCode($bDynamicMode = false)
+    {
+    	$sJs = $this->_oModule->_oTemplate->addJs(array('form.js'), $bDynamicMode);
+
+        $sCode = '';
+        if($bDynamicMode)
+        	$sCode .= $sJs;
+
+		$sCode .= $this->_oModule->_oTemplate->getJsCode('form');
+		$sCode .= $this->_oModule->_oTemplate->parseHtmlByName('form.html', array(
+            'content' => parent::getCode($bDynamicMode)
+        ));
+
+        return $sCode;
+    }
+
+    function initChecker ($aValues = array (), $aSpecificValues = array())
+    {
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
+        if(isset($this->aInputs[$CNF['FIELD_SUBENTRIES']]) && !empty($aValues[$CNF['FIELD_ID']])) {
+            $oConnection = BxDolConnection::getObjectInstance($CNF['OBJECT_CONNECTION_SUBENTRIES']);
+            if($oConnection)
+                $this->aInputs[$CNF['FIELD_SUBENTRIES']]['value'] = $oConnection->getConnectedContent((int)$aValues[$CNF['FIELD_ID']]);
+        }
+
+        return parent::initChecker($aValues, $aSpecificValues);
+    }
+
+	public function insert ($aValsToAdd = array(), $isIgnore = false)
+    {
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
+        if(isset($this->aInputs[$CNF['FIELD_NAME']])) {
+            $sName = BxDolForm::getSubmittedValue($CNF['FIELD_NAME'], $this->aFormAttrs['method'], $this->_aSpecificValues);
+            $sName = $this->_oModule->_oConfig->getEntryName($sName);
+            BxDolForm::setSubmittedValue($CNF['FIELD_NAME'], $sName, $this->aFormAttrs['method'], $this->_aSpecificValues);
+        }
+
+	    if($this->_oModule->checkAllowedSetCover() === CHECK_ACTION_RESULT_ALLOWED) {
+            $aCover = isset($_POST[$CNF['FIELD_COVER']]) ? bx_process_input ($_POST[$CNF['FIELD_COVER']], BX_DATA_INT) : false;
+
+            $aValsToAdd[$CNF['FIELD_COVER']] = 0;
+            if(!empty($aCover) && is_array($aCover) && ($iFileCover = array_pop($aCover)))
+                $aValsToAdd[$CNF['FIELD_COVER']] = $iFileCover;
+        }
+
+        $aPackage = bx_process_input(bx_get($CNF['FIELD_PACKAGE']), BX_DATA_INT);
+		$aValsToAdd[$CNF['FIELD_PACKAGE']] = 0;
+		if(!empty($aPackage) && is_array($aPackage) && ($iFilePackage = array_pop($aPackage)))
+			$aValsToAdd[$CNF['FIELD_PACKAGE']] = $iFilePackage;
+
+        $iContentId = parent::insert ($aValsToAdd, $isIgnore);
+        if(!empty($iContentId))
+            $this->processFiles($CNF['FIELD_FILE'], $iContentId, true, $CNF['OBJECT_STORAGE_FILES']);
+
+        return $iContentId;
+    }
+
+	function update ($iContentId, $aValsToAdd = array(), &$aTrackTextFieldsChanges = null)
+    {
+        $CNF = &$this->_oModule->_oConfig->CNF;
+        
+
+        $sNameKey = $CNF['FIELD_NAME'];
+        if(isset($this->aInputs[$sNameKey])) {
+            $sName = $this->getCleanValue($sNameKey);
+            $aContentInfo = $this->_oModule->_oDb->getContentInfoById($iContentId);
+
+            if($aContentInfo[$sNameKey] != $sName) {
+                $sName = $this->_oModule->_oConfig->getEntryName($sName);
+                BxDolForm::setSubmittedValue($sNameKey, $sName, $this->aFormAttrs['method'], $this->_aSpecificValues);
+            }
+        }
+
+	    if($this->_oModule->checkAllowedSetCover() === CHECK_ACTION_RESULT_ALLOWED) {
+            $aCover = bx_process_input (bx_get($CNF['FIELD_COVER']), BX_DATA_INT);
+
+            $aValsToAdd[$CNF['FIELD_COVER']] = 0;
+            if (!empty($aCover) && is_array($aCover) && ($iFileCover = array_pop($aCover)))
+                $aValsToAdd[$CNF['FIELD_COVER']] = $iFileCover;
+        }
+
+		$aPackage = bx_process_input(bx_get($CNF['FIELD_PACKAGE']), BX_DATA_INT);
+		$aValsToAdd[$CNF['FIELD_PACKAGE']] = 0;
+		if(!empty($aPackage) && is_array($aPackage) && ($iFilePackage = array_pop($aPackage)))
+			$aValsToAdd[$CNF['FIELD_PACKAGE']] = $iFilePackage;
+
+        $iResult = parent::update ($iContentId, $aValsToAdd, $aTrackTextFieldsChanges);
+
+        $this->processFiles($CNF['FIELD_FILE'], $iContentId, false, $CNF['OBJECT_STORAGE_FILES']);
+
+        return $iResult;
+    }
+
+	function delete ($iContentId, $aContentInfo = array())
+    {
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
+        $bResult = parent::delete($iContentId, $aContentInfo);
+        if(!$bResult)
+            return $bResult;
+
+        // delete associated files
+        if (!empty($CNF['OBJECT_STORAGE_FILES'])) {
+            $oStorage = BxDolStorage::getObjectInstance($CNF['OBJECT_STORAGE_FILES']);
+            if($oStorage)
+                $oStorage->queueFilesForDeletionFromGhosts($aContentInfo[$CNF['FIELD_AUTHOR']], $iContentId);
+        }
+
+        // delete associations
+        $bResult &= $this->_oModule->_oDb->deassociatePhotoWithContent($iContentId, 0);
+        $bResult &= $this->_oModule->_oDb->deassociateFileWithContent($iContentId, 0);
+
+        return $bResult;
+    }
+
+    protected function _associalFileWithContent($oStorage, $iFileId, $iProfileId, $iContentId, $sPictureField = '')
+    {
+        parent::_associalFileWithContent($oStorage, $iFileId, $iProfileId, $iContentId, $sPictureField);
+
+        $sStorage = $oStorage->getObject();
+        switch($sStorage) {
+        	case $this->_oModule->_oConfig->CNF['OBJECT_STORAGE']:
+        		$this->_oModule->_oDb->associatePhotoWithContent($iContentId, $iFileId, $this->getCleanValue('title-' . $iFileId));
+        		break;
+
+        	case $this->_oModule->_oConfig->CNF['OBJECT_STORAGE_FILES']:
+        		$aParams = array(
+        			'type' => $this->getCleanValue('type-' . $iFileId)        			
+        		);
+
+        		switch ($aParams['type']) {
+        			case BX_MARKET_FILE_TYPE_VERSION:
+        				$aParams = array_merge($aParams, array(
+        					'version' => $this->getCleanValue('version-' . $iFileId),
+        				));
+        				break;
+        				
+        			case BX_MARKET_FILE_TYPE_UPDATE:
+        				$aParams = array_merge($aParams, array(
+        					'version' => $this->getCleanValue('version-from-' . $iFileId),
+        					'version_to' => $this->getCleanValue('version-to-' . $iFileId),
+        				));
+        				break;
+        		}
+
+        		$this->_oModule->_oDb->associateFileWithContent($iContentId, $iFileId, $aParams);
+        		break;
+        }
+    }
+
+    protected function _getPhotoGhostTmplVars($aContentInfo = array())
+    {
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
+        $aResult = parent::_getPhotoGhostTmplVars($aContentInfo);
+        $aResult = array_merge($aResult, array(
+            'cover_id' => isset($aContentInfo[$CNF['FIELD_COVER']]) ? $aContentInfo[$CNF['FIELD_COVER']] : 0,
+            'bx_if:set_cover' => array (
+                'condition' => CHECK_ACTION_RESULT_ALLOWED === $this->_oModule->checkAllowedSetCover(),
+                'content' => array (
+                    'name_cover' => $CNF['FIELD_COVER'],
+                ),
+            ),
+        ));
+
+        return $aResult;
+    }
+
+    protected function _getFileGhostTmplVars($aContentInfo = array())
+    {
+    	$CNF = &$this->_oModule->_oConfig->CNF;
+
+        $aResult = parent::_getFileGhostTmplVars($aContentInfo);
+        $aResult = array_merge($aResult, array(
+            'thumb_id' => isset($aContentInfo[$CNF['FIELD_PACKAGE']]) ? $aContentInfo[$CNF['FIELD_PACKAGE']] : 0,
+            'bx_if:set_thumb' => array (
+                'condition' => true,
+                'content' => array(
+                    'name_thumb' => $CNF['FIELD_PACKAGE'],
+                ),
+            ),
+        ));
+
+    	return $aResult;
+    }
+
+    protected function genCustomInputSubentries($aInput)
+    {
+        $this->addCssJsUi();
+
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
+        $sGetSubentriesUrl = BX_DOL_URL_ROOT . $this->_oModule->_oConfig->getBaseUri() . 'get_subentries';
+        $sPlaceholder = bx_html_attribute(_t('_bx_market_form_entry_input_subentries_placeholder'), BX_ESCAPE_STR_QUOTE);
+
+        $this->oTemplate->addJs(array(
+            'jquery.form.min.js',
+        ));
+
+        $sVals = '';
+        if (!empty($aInput['value']) && is_array($aInput['value'])) {
+            foreach ($aInput['value'] as $iValue) {
+                $iValue = (int)$iValue;
+                if(!$iValue)
+                    continue;
+
+                $aContentInfo = $this->_oModule->_oDb->getContentInfoById($iValue);
+                if(empty($aContentInfo) || !is_array($aContentInfo))
+                    continue;
+                
+               $sVals .= '<b class="val bx-def-color-bg-hl bx-def-round-corners">' . $aContentInfo[$CNF['FIELD_TITLE']] . '<input type="hidden" name="' . $aInput['name'] . '[]" value="' . $iValue . '" /></b>';
+            }
+            $sVals = trim($sVals, ',');
+        }
+
+        return $this->oTemplate->parseHtmlByName('form_field_custom_suggestions.html', array(
+            'id' => $aInput['name'] . time(),
+            'url_get_recipients' => $sGetSubentriesUrl,
+            'name' => $aInput['name'],
+			'b_img' => 1,
+			'only_once' => 0,
+			'on_select' => 'null',
+		    'placeholder' => $sPlaceholder,
+            'vals' => $sVals,
+        ));
+    }
+}
+
+/** @} */

+ 428 - 0
modules/boonex/market/updates/10.0.0_10.0.1/source/classes/BxMarketTemplate.php

@@ -0,0 +1,428 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Market Market
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+/*
+ * Module representation.
+ */
+class BxMarketTemplate extends BxBaseModTextTemplate
+{
+	protected $_aCurrency;
+
+    /**
+     * Constructor
+     */
+    function __construct(&$oConfig, &$oDb)
+    {
+        $this->MODULE = 'bx_market';
+
+        parent::__construct($oConfig, $oDb);
+
+        $this->_aCurrency = $this->_oConfig->getCurrency();
+    }
+
+    public function entryBreadcrumb($aContentInfo, $aTmplVarsItems = array())
+    {
+    	$CNF = &$this->getModule()->_oConfig->CNF;
+
+        $oPermalink = BxDolPermalinks::getInstance();
+        $oCategory = BxDolCategory::getObjectInstance($CNF['OBJECT_CATEGORY']);
+
+    	$aTmplVarsItems = array(array(
+            'url' => $oCategory->getCategoryUrl($aContentInfo[$CNF['FIELD_CATEGORY']]),
+            'title' => $oCategory->getCategoryTitle($aContentInfo[$CNF['FIELD_CATEGORY']])
+        ), array(
+            'url' => $oPermalink->permalink('page.php?i=' . $CNF['URI_VIEW_ENTRY'] . '&id=' . $aContentInfo[$CNF['FIELD_ID']]),
+            'title' => bx_process_output($aContentInfo[$CNF['FIELD_TITLE']])
+        ));
+
+    	return parent::entryBreadcrumb($aContentInfo, $aTmplVarsItems);
+    }
+
+    public function entryRating($aData)
+    {
+        $CNF = &$this->getModule()->_oConfig->CNF;
+
+    	$sVotes = '';
+        $oVotes = BxDolVote::getObjectInstance($CNF['OBJECT_VOTES'], $aData['id']);
+        if($oVotes) {
+			$sVotes = $oVotes->getElementBlock(array('show_counter' => true, 'show_legend' => true));
+			if(!empty($sVotes))
+				$sVotes = $this->parseHtmlByName('entry-rating.html', array(
+		    		'content' => $sVotes,
+		    	));
+        }
+
+    	return $sVotes; 
+    }
+
+    public function getTmplVarsText($aData)
+    {
+        $oModule = $this->getModule();
+        $CNF = &$oModule->_oConfig->CNF;
+
+        $aVars = parent::getTmplVarsText($aData);
+
+        $sIcon = '';
+        $mixedIcon = $oModule->getEntryImageData($aData, 'FIELD_THUMB', array('OBJECT_IMAGES_TRANSCODER_ICON', 'OBJECT_IMAGES_TRANSCODER_THUMB'));
+        if($mixedIcon !== false) {
+            if(!empty($mixedIcon['object']))
+                $o = BxDolStorage::getObjectInstance($mixedIcon['object']);
+            else if(!empty($mixedIcon['transcoder']))
+                $o = BxDolTranscoder::getObjectInstance($mixedIcon['transcoder']);
+
+            if($o)
+                $sIcon = $o->getFileUrlById($mixedIcon['id']);
+        }
+
+        $aVars['bx_if:show_icon'] = array(
+            'condition' => !empty($sIcon),
+            'content' => array(
+                'entry_icon' => $sIcon
+            )
+        );
+
+        $sScreenshots = $this->getScreenshots($aData);
+        $bScreenshots = !empty($sScreenshots);
+        if($bScreenshots) {
+            $this->addCss(BX_DIRECTORY_PATH_PLUGINS_PUBLIC . 'flickity/|flickity.css');
+            $this->addJs('flickity/flickity.pkgd.min.js');
+        }
+
+        $aVars['bx_if:show_screenshots'] = array(
+            'condition' => $bScreenshots,
+            'content' => array(
+                'screenshots' => $sScreenshots
+            )
+        );
+        
+        return $aVars;
+    }
+
+    public function getScreenshots($aData)
+    {
+    	$oModule = $this->getModule();
+
+    	$CNF = &$oModule->_oConfig->CNF;
+    	$aPhotos = $oModule->serviceGetScreenshots($aData[$CNF['FIELD_ID']]);
+		if(empty($aPhotos) || !is_array($aPhotos))
+    		return '';
+
+		return $this->parseHtmlByName('entry-screenshots.html', array(
+    		'bx_repeat:items' => $aPhotos
+    	));
+    }
+    
+    public function getAuthorAddon ($aData, $oProfile)
+    {
+        $aAccount = $oProfile->getAccountObject()->getInfo();
+
+        $sContent = $this->parseHtmlByName('entry-author.html', array(
+    		'joined' => bx_time_js($aAccount['added']),
+	    	'last_active' => bx_time_js($aAccount['logged']),
+	    	'installs' => '?',
+    	));
+
+    	return $sContent . parent::getAuthorAddon ($aData, $oProfile);
+    }
+
+    public function getGhostTemplateFileOptions($sField, $aFile, $aVersions)
+    {
+    	$bField = !empty($aFile) && is_array($aFile) && isset($aFile[$sField]);
+    	
+    	$aTmplVarsVersions = array();
+    	foreach ($aVersions as $aVersion) {
+    		if($aVersion['type'] != 'version' || empty($aVersion['version']))
+    			continue;
+
+			$aTmplVarsVersions[] = array(
+				'value' => $aVersion['version'],
+				'title' =>  $aVersion['version'],
+				'bx_if:selected' => array(
+					'condition' => $bField && $aFile[$sField] == $aVersion['version'],
+					'content' => array()
+				)
+			);
+    	}
+
+    	return $this->parseHtmlByName('form_ghost_template_file_options.html', array(
+    		'bx_repeat:versions' => $aTmplVarsVersions
+    	));    	
+    }
+
+    protected function getUnit ($aData, $aParams = array())
+    {
+        $bTmplVarsSectionAuthor = false;
+        $bTmplVarsSectionPricing = false;
+        $bTmplVarsSectionVoting = true;
+
+        $oModule = $this->getModule();
+    	$CNF = &$oModule->_oConfig->CNF;
+
+    	$aUnit = parent::getUnit($aData, $aParams);
+        $oPayment = BxDolPayments::getInstance();
+        $oPermalinks = BxDolPermalinks::getInstance();
+
+        list($sAuthorName, $sAuthorUrl, $sAuthorIcon, $sAuthorUnit, $sAuthorUnitShort) = $oModule->getUserInfo($aData[$CNF['FIELD_AUTHOR']]);
+
+        $aTmplVarsSectionAuthor = array();
+        if($bTmplVarsSectionAuthor) {
+            //--- Author Info
+            $bAuthorIcon = !empty($sAuthorIcon);
+            $sAuthorName = $this->parseHtmlByName('author_link.html', array(
+                'href' => $sAuthorUrl,
+                'title' => bx_html_attribute($sAuthorName),
+                'content' => $sAuthorName,
+                'bx_if:show_account' => array(
+                    'condition' => false,
+                    'content' => array()
+                )
+            ));
+
+            //--- Actions
+            $sActions = '';
+        	$oActions = BxDolMenu::getObjectInstance($CNF['OBJECT_MENU_ACTIONS_SNIPPET']);
+        	if($oActions) {
+        	    $oActions->setContentId($aData[$CNF['FIELD_ID']]);
+        	    $sActions = $oActions->getCode();
+        	}
+
+            $sDate = $this->parseHtmlByName('snippet-date.html', array(
+                'date' => bx_time_js($aData[$CNF['FIELD_ADDED']])
+            ));
+
+        	$aTmplVarsSectionAuthor = array(
+                'actions' => $sActions,
+                'author_unit' => $sAuthorUnitShort,
+                'author_width_date' => _t('_bx_market_txt_author_added_product', $sAuthorName, $sDate),
+	        );
+        }
+
+        //--- Main Info
+        $sUrl = BX_DOL_URL_ROOT . $oPermalinks->permalink('page.php?i=' . $CNF['URI_VIEW_ENTRY'] . '&id=' . $aData[$CNF['FIELD_ID']]);
+        $sLinkMore = ' <a title="' . bx_html_attribute(_t('_sys_read_more', $aData[$CNF['FIELD_TITLE']])) . '" href="' . $sUrl . '"><i class="sys-icon ellipsis-h"></i></a>';
+        $sSummary = strmaxtextlen($aData[$CNF['FIELD_TEXT']], (int)getParam($CNF['PARAM_CHARS_SUMMARY']), $sLinkMore);
+        $sSummaryPlain = BxTemplFunctions::getInstance()->getStringWithLimitedLength(strip_tags($sSummary), (int)getParam($CNF['PARAM_CHARS_SUMMARY_PLAIN']));
+        
+
+        //--- Icon Info
+        $sIconUrl = '';
+        if(!empty($CNF['FIELD_THUMB']) && $aData[$CNF['FIELD_THUMB']]) {
+            $oImagesTranscoder = BxDolTranscoderImage::getObjectInstance($CNF['OBJECT_IMAGES_TRANSCODER_ICON']);
+            if($oImagesTranscoder)
+                $sIconUrl = $oImagesTranscoder->getFileUrl($aData[$CNF['FIELD_THUMB']]);
+
+            if(empty($sIconUrl)) {
+                $oImagesTranscoder = BxDolTranscoderImage::getObjectInstance($CNF['OBJECT_IMAGES_TRANSCODER_THUMB']);
+                if($oImagesTranscoder)
+                    $sIconUrl = $oImagesTranscoder->getFileUrl($aData[$CNF['FIELD_THUMB']]);
+            }
+        }
+
+        //--- Cover Info
+        $sCoverUrl = '';
+        if(!empty($CNF['FIELD_COVER']) && $aData[$CNF['FIELD_COVER']]) {
+            $oImagesTranscoder = BxDolTranscoderImage::getObjectInstance($CNF['OBJECT_IMAGES_TRANSCODER_GALLERY']);
+                if($oImagesTranscoder)
+                    $sCoverUrl = $oImagesTranscoder->getFileUrl($aData[$CNF['FIELD_COVER']]);
+
+            if(empty($sCoverUrl)) {
+                $oImagesTranscoder = BxDolTranscoderImage::getObjectInstance($CNF['OBJECT_IMAGES_TRANSCODER_COVER']);
+                if($oImagesTranscoder)
+                    $sCoverUrl = $oImagesTranscoder->getFileUrl($aData[$CNF['FIELD_COVER']]);
+            }
+        }
+
+        $aTmplVarsSectionPricing = array();
+        if($bTmplVarsSectionPricing) {
+            //--- Price Single
+        	$bTmplVarsSingle = (float)$aData[$CNF['FIELD_PRICE_SINGLE']] != 0;
+        	$aTmplVarsSingle = array();
+        	if($bTmplVarsSingle) {
+        		$aJsSingle = $oPayment->getAddToCartJs($aData[$CNF['FIELD_AUTHOR']], $this->_oConfig->getName(), $aData[$CNF['FIELD_ID']], 1, true);
+        		if(!empty($aJsSingle) && is_array($aJsSingle)) {
+        			list($sJsCode, $sSingleOnclick) = $aJsSingle;
+        			
+    	    		$aTmplVarsSingle = array(
+    	    			'price_single_onclick' => $sSingleOnclick,
+    					'price_single' => _t('_bx_market_txt_price_single', $this->_aCurrency['sign'], $aData[$CNF['FIELD_PRICE_SINGLE']])
+    				);
+        		}
+        		else 
+        			$bTmplVarsSingle = false;
+        	}
+    
+        	//--- Price Recurring
+        	$bTmplVarsRecurring = (float)$aData[$CNF['FIELD_PRICE_RECURRING']] != 0;
+        	$aTmplVarsRecurring = array();
+        	if($bTmplVarsRecurring) {
+            	$aJsRecurring = $oPayment->getSubscribeJs($aData[$CNF['FIELD_AUTHOR']], '', $this->_oConfig->getName(), $aData[$CNF['FIELD_ID']], 1);
+            	if(!empty($aJsRecurring) && is_array($aJsRecurring)) {
+    				list($sJsCode, $sRecurringOnclick) = $aJsRecurring;
+    
+    	        	$aTmplVarsRecurring = array(
+    	        		'price_recurring_onclick' => $sRecurringOnclick,
+    					'price_recurring' => _t('_bx_market_txt_price_recurring', $this->_aCurrency['sign'], $aData[$CNF['FIELD_PRICE_RECURRING']], _t($CNF['T']['txt_per_' . $aData[$CNF['FIELD_DURATION_RECURRING']] . '_short']))
+    				);
+            	}
+            	else 
+            		$bTmplVarsRecurring = false;
+        	}
+
+        	$aTmplVarsSectionPricing = array(
+        	    'bx_if:show_single' => array(
+        			'condition' => $bTmplVarsSingle,
+        			'content' => $aTmplVarsSingle
+        		),
+        		'bx_if:show_recurring' => array(
+        			'condition' => $bTmplVarsRecurring,
+        			'content' => $aTmplVarsRecurring
+        		),
+        		'bx_if:show_free' => array(
+        			'condition' => !$bTmplVarsSingle && !$bTmplVarsRecurring,
+        			'content' => array(
+        		        'price_free_href' => $oPermalinks->permalink('page.php?i=' . $CNF['URI_DOWNLOAD_ENTRY'] . '&id=' . $aData[$CNF['FIELD_ID']])
+        		    )
+        		)
+        	);
+        }
+
+        $aTmplVarsSectionVoting = array();
+        if($bTmplVarsSectionVoting) {
+            $sVoting = '';
+        	$oVoting = BxDolVote::getObjectInstance($CNF['OBJECT_VOTES'], $aData[$CNF['FIELD_ID']]);
+            if($oVoting)
+    			$sVoting = $oVoting->getElementBlock(array('show_counter' => false));
+
+            $sPricing = "";
+            if((float)$aData[$CNF['FIELD_PRICE_RECURRING']] != 0)
+                $sPricing = _t('_bx_market_txt_price_recurring_short', $this->_aCurrency['sign'], $aData[$CNF['FIELD_PRICE_RECURRING']], _t($CNF['T']['txt_per_' . $aData[$CNF['FIELD_DURATION_RECURRING']] . '_short']));
+
+            if(empty($sPricing) && (float)$aData[$CNF['FIELD_PRICE_SINGLE']] != 0)
+                $sPricing = _t('_bx_market_txt_price_single_short', $this->_aCurrency['sign'], $aData[$CNF['FIELD_PRICE_SINGLE']]);
+
+            if(empty($sPricing))
+                 $sPricing = _t('_bx_market_txt_price_free');
+
+            $aTmplVarsSectionVoting = array(
+                'voting' => $sVoting,
+                'pricing' => $sPricing
+            );
+            
+        }
+
+
+    	$aUnit = array_merge($aUnit, array(
+    	    'bx_if:show_section_author' => array(
+    	        'condition' => $bTmplVarsSectionAuthor,
+    	        'content' => $aTmplVarsSectionAuthor
+    	    ),
+            'bx_if:show_icon' => array (
+                'condition' => $sIconUrl,
+                'content' => array(
+                	'icon_url' => $sIconUrl,
+                ),
+            ),
+            'bx_if:show_icon_empty' => array (
+                'condition' => !$sIconUrl,
+                'content' => array(
+                    'icon' => $CNF['ICON']
+                ),
+            ),
+            'bx_if:show_cover' => array (
+                'condition' => $sCoverUrl,
+                'content' => array (
+                    'summary_attr' => bx_html_attribute($sSummaryPlain),
+                    'content_url' => $sUrl,
+                    'cover_url' => $sCoverUrl,
+                    'strecher' => str_repeat('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ', 40),
+                ),
+            ),
+            'bx_if:show_cover_empty' => array (
+                'condition' => !$sCoverUrl,
+                'content' => array (
+                    'summary_plain' => $sSummaryPlain,
+                    'strecher' => mb_strlen($sSummaryPlain) > 240 ? '' : str_repeat('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ', round((240 - mb_strlen($sSummaryPlain)) / 6)),
+                ),
+            ),
+            'author_name' => $sAuthorName,
+            'content_url' => $sUrl,
+    		'bx_if:show_section_pricing' => array(
+                'condition' => $bTmplVarsSectionPricing,
+                'content' => $aTmplVarsSectionPricing
+            ),
+            'bx_if:show_section_voting' => array(
+            	'condition' => $bTmplVarsSectionVoting,
+                'content' => $aTmplVarsSectionVoting
+            )
+    	));
+
+    	return $aUnit;
+    }
+
+    protected function getAttachments($sStorage, $aData, $aParams = array())
+    {
+    	$aFiles = $this->_oDb->getFile(array('type' => 'content_id_key_file_id', 'content_id' => $aData['id']));
+
+    	$aAttachments = parent::getAttachments($sStorage, $aData, $aParams);
+    	if(empty($aAttachments) || !is_array($aAttachments))
+    		return $aAttachments;
+
+        $aResults = array();
+    	foreach($aAttachments as $iIndex => $aAttachment) {
+    		$iAttachmentId = (int)$aAttachment['id'];
+
+    		$aAttachments[$iIndex]['class'] = (int)$aData['package'] == $iAttachmentId ? ' bx-market-attachment-main' : '';
+    		$aAttachments[$iIndex]['bx_if:main'] = array(
+    			'condition' => (int)$aData['package'] == $iAttachmentId,
+    			'content' => array()
+    		);
+
+    		$bAttachment = !empty($aFiles[$iAttachmentId]);
+    		$aAttachments[$iIndex]['bx_if:not_image']['content'] = array_merge($aAttachments[$iIndex]['bx_if:not_image']['content'], array(
+    			'file_type' => $bAttachment ? _t('_bx_market_form_entry_input_files_type_' . $aFiles[$iAttachmentId]['type']) : '',
+    			'bx_if:show_version' => array(
+    				'condition' => $bAttachment && $aFiles[$iAttachmentId]['type'] == BX_MARKET_FILE_TYPE_VERSION,
+    				'content' => array(
+    					'file_version' => $bAttachment ? $aFiles[$iAttachmentId]['version'] : ''
+    				)
+    			),
+    			'bx_if:show_update' => array(
+    				'condition' => $bAttachment && $aFiles[$iAttachmentId]['type'] == BX_MARKET_FILE_TYPE_UPDATE,
+    				'content' => array(
+    					'file_version_from_to' => $bAttachment ? _t('_bx_market_form_entry_input_files_version_from_x_to_y', $aFiles[$iAttachmentId]['version'], $aFiles[$iAttachmentId]['version_to']) : ''
+    				)
+    			)
+    		));
+
+    		$aFiles[$iAttachmentId] = $aAttachments[$iIndex];
+    		$aResults[$iAttachmentId] = $aAttachments[$iIndex];
+    	}
+
+    	return array_intersect_key($aFiles, $aResults);
+    }
+
+    protected function getAttachmentsImagesTranscoders ($sStorage = '')
+    {
+        $CNF = &$this->getModule()->_oConfig->CNF;
+
+        $oTranscoder = BxDolTranscoderImage::getObjectInstance($CNF['OBJECT_IMAGES_TRANSCODER_PREVIEW']);
+        $oTranscoderPreview = isset($CNF['OBJECT_IMAGES_TRANSCODER_PICTURE']) && $CNF['OBJECT_IMAGES_TRANSCODER_PICTURE'] ? BxDolTranscoderImage::getObjectInstance($CNF['OBJECT_IMAGES_TRANSCODER_PICTURE']) : null;
+
+        return array($oTranscoder, $oTranscoderPreview);
+    }
+
+    protected function _getHeaderImage($aData)
+    {
+        return $this->getModule()->getEntryImageData($aData, 'FIELD_COVER');
+    }
+}
+
+/** @} */

+ 140 - 0
modules/boonex/market/updates/10.0.0_10.0.1/source/install/config.php

@@ -0,0 +1,140 @@
+<?php
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Market Market
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+$aConfig = array(
+
+    /**
+     * Main Section.
+     */
+    'type' => BX_DOL_MODULE_TYPE_MODULE,
+    'name' => 'bx_market',
+    'title' => 'Market',
+    'note' => 'Market module.',
+    'version' => '10.0.1',
+    'vendor' => 'BoonEx',
+    'help_url' => 'http://feed.una.io/?section={module_name}',
+
+    'compatible_with' => array(
+        '10.0.0-B2'
+    ),
+
+    /**
+     * 'home_dir' and 'home_uri' - should be unique. Don't use spaces in 'home_uri' and the other special chars.
+     */
+    'home_dir' => 'boonex/market/',
+    'home_uri' => 'market',
+
+    'db_prefix' => 'bx_market_',
+    'class_prefix' => 'BxMarket',
+
+    /**
+     * Category for language keys.
+     */
+    'language_category' => 'Market',
+
+	/**
+     * 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_market_files',
+        'bx_market_photos'
+    ),
+
+    /**
+     * Transcoders.
+     */
+    'transcoders' => array(
+        'bx_market_icon',
+        'bx_market_thumb',
+        'bx_market_cover',
+        'bx_market_screenshot',
+		'bx_market_preview',
+        'bx_market_gallery',
+    ),
+
+    /**
+     * Extended Search Forms.
+     */
+    'esearches' => array(
+        'bx_market',
+    	'bx_market_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_page_triggers' => 1,
+    	'process_menu_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(),
+
+    /**
+     * Connections Section
+     */
+    'relations' => array(
+    	'bx_timeline',
+    	'bx_notifications'
+    ),
+
+);
+
+/** @} */

+ 453 - 0
modules/boonex/market/updates/10.0.0_10.0.1/source/install/langs/en.xml

@@ -0,0 +1,453 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources name="en" flag="gb" title="English">
+
+	<string name="_bx_market"><![CDATA[Market]]></string>
+	<string name="_bx_market_cmts"><![CDATA[Market's Reviews]]></string>
+
+	<string name="_bx_market_option_enable_recurring"><![CDATA[Allow to sell subscriptions]]></string>
+	<string name="_bx_market_option_recurring_reserve"><![CDATA[Reserve (in days) to accept and process recurring payment notification]]></string>
+	<string name="_bx_market_option_summary_chars"><![CDATA[Number of characters in auto-cropped product summary]]></string>
+	<string name="_bx_market_option_plain_summary_chars"><![CDATA[Number of characters in plain product description when product hasn't thumb]]></string>
+	<string name="_bx_market_option_per_page_browse"><![CDATA[Number of items per page]]></string>
+	<string name="_bx_market_option_per_page_profile"><![CDATA[Number of items on profile page]]></string>
+	<string name="_bx_market_option_rss_num"><![CDATA[Number of items in RSS feed]]></string>
+	<string name="_bx_market_option_searchable_fields"><![CDATA[Searchable fields for keyword search]]></string>
+
+	<string name="_bx_market_form_entry"><![CDATA[Product]]></string>
+	<string name="_bx_market_form_entry_display_add"><![CDATA[Add Product]]></string>
+	<string name="_bx_market_form_entry_display_edit"><![CDATA[Edit Product]]></string>
+	<string name="_bx_market_form_entry_display_delete"><![CDATA[Delete Product]]></string>
+	<string name="_bx_market_form_entry_display_view"><![CDATA[View Product]]></string>
+	<string name="_bx_market_form_entry_display_view_full"><![CDATA[Full View Product]]></string>
+	<string name="_bx_market_form_entry_input_author"><![CDATA[Author]]></string>
+	<string name="_bx_market_form_entry_input_sys_do_submit"><![CDATA[Submit]]></string>
+	<string name="_bx_market_form_entry_input_do_submit"><![CDATA[Submit]]></string>
+	<string name="_bx_market_form_entry_input_sys_do_publish"><![CDATA[Publish]]></string>
+	<string name="_bx_market_form_entry_input_do_publish"><![CDATA[Publish]]></string>
+	<string name="_bx_market_form_entry_input_sys_title"><![CDATA[Title]]></string>
+	<string name="_bx_market_form_entry_input_title"><![CDATA[Title]]></string>
+	<string name="_bx_market_form_entry_input_title_err"><![CDATA[Title is essential. Please, fill in this field]]></string>
+	<string name="_bx_market_form_entry_input_sys_name"><![CDATA[Name]]></string>
+	<string name="_bx_market_form_entry_input_name"><![CDATA[Name]]></string>
+	<string name="_bx_market_form_entry_input_name_err"><![CDATA[Name should be unique and is needed for internal usage. Please, fill in this field]]></string>
+	<string name="_bx_market_form_entry_input_sys_cat"><![CDATA[Category]]></string>
+	<string name="_bx_market_form_entry_input_cat"><![CDATA[Category]]></string>
+    <string name="_bx_market_form_entry_input_cat_err"><![CDATA[Please select category]]></string>
+    <string name="_bx_market_form_entry_input_sys_price_single"><![CDATA[Price]]></string>
+	<string name="_bx_market_form_entry_input_price_single"><![CDATA[Price]]></string>
+    <string name="_bx_market_form_entry_input_price_single_inf"><![CDATA[Leave empty to make the product free.]]></string>
+    <string name="_bx_market_form_entry_input_sys_price_recurring"><![CDATA[Recurring price]]></string>
+	<string name="_bx_market_form_entry_input_price_recurring"><![CDATA[Price]]></string>
+    <string name="_bx_market_form_entry_input_price_recurring_inf"><![CDATA[Select 'None' to make the product free.]]></string>
+    <string name="_bx_market_form_entry_input_sys_duration_recurring"><![CDATA[Billing period]]></string>
+    <string name="_bx_market_form_entry_input_duration_recurring"><![CDATA[Billing period]]></string>
+    <string name="_bx_market_form_entry_input_sys_trial_recurring"><![CDATA[Recurring trial]]></string>
+    <string name="_bx_market_form_entry_input_trial_recurring"><![CDATA[Trial period]]></string>
+    <string name="_bx_market_form_entry_input_trial_recurring_inf"><![CDATA[The number of days new customers should receive a free trial. Leave empty to disable trial period.]]></string>
+    <string name="_bx_market_form_entry_input_sys_header_beg_single"><![CDATA[One-time payment: begin]]></string>
+    <string name="_bx_market_form_entry_input_header_beg_single"><![CDATA[One-time payment]]></string>
+    <string name="_bx_market_form_entry_input_sys_header_beg_recurring"><![CDATA[Recurring payment: begin]]></string>
+    <string name="_bx_market_form_entry_input_header_beg_recurring"><![CDATA[Recurring payment]]></string>
+    <string name="_bx_market_form_entry_input_sys_header_beg_privacy"><![CDATA[Privacy: begin]]></string>
+    <string name="_bx_market_form_entry_input_header_beg_privacy"><![CDATA[Privacy]]></string>
+    <string name="_bx_market_form_entry_input_sys_header_beg_notes"><![CDATA[Notes: begin]]></string>
+    <string name="_bx_market_form_entry_input_header_beg_notes"><![CDATA[Notes]]></string>
+    <string name="_bx_market_form_entry_input_sys_header_beg_other"><![CDATA[Other: begin]]></string>
+    <string name="_bx_market_form_entry_input_header_beg_other"><![CDATA[Other]]></string>
+    <string name="_bx_market_form_entry_input_sys_header_end_single"><![CDATA[One-time payment: end]]></string>
+    <string name="_bx_market_form_entry_input_sys_header_end_recurring"><![CDATA[Recurring payment: end]]></string>
+    <string name="_bx_market_form_entry_input_sys_header_end_privacy"><![CDATA[Privacy: end]]></string>
+    <string name="_bx_market_form_entry_input_sys_header_end_notes"><![CDATA[Notes: end]]></string>
+    <string name="_bx_market_form_entry_input_sys_header_end_other"><![CDATA[Other: end]]></string>
+	<string name="_bx_market_form_entry_input_sys_text"><![CDATA[Text]]></string>
+	<string name="_bx_market_form_entry_input_text"><![CDATA[Text]]></string>
+	<string name="_bx_market_form_entry_input_text_err"><![CDATA[Text field can't be empty]]></string>
+	<string name="_bx_market_form_entry_input_sys_notes"><![CDATA[Notes]]></string>
+	<string name="_bx_market_form_entry_input_notes"><![CDATA[Notes]]></string>
+        <string name="_bx_market_form_entry_input_notes_inf"><![CDATA[Will be shown on product's info page.]]></string>
+        <string name="_bx_market_form_entry_input_sys_notes_purchased"><![CDATA[After purchase notes]]></string>
+        <string name="_bx_market_form_entry_input_notes_purchased"><![CDATA[After purchase notes]]></string>
+        <string name="_bx_market_form_entry_input_notes_purchased_inf"><![CDATA[Will be attached to email message which is sent to buyer after purchase.]]></string>
+	<string name="_bx_market_form_entry_input_sys_delete_confirm"><![CDATA[Delete confirmation]]></string>
+	<string name="_bx_market_form_entry_input_delete_confirm"><![CDATA[I am sure I want to delete this product]]></string>
+	<string name="_bx_market_form_entry_input_delete_confirm_info"><![CDATA[This action can not be undone]]></string>
+	<string name="_bx_market_form_entry_input_delete_confirm_error"><![CDATA[Please check this checkbox if you really want to delete the product]]></string>
+	<string name="_bx_market_form_entry_input_sys_pictures"><![CDATA[Pictures]]></string>
+	<string name="_bx_market_form_entry_input_pictures"><![CDATA[Pictures]]></string>
+	<string name="_bx_market_form_entry_input_pictures_title"><![CDATA[Title]]></string>
+	<string name="_bx_market_form_entry_input_pictures_use_as_thumb"><![CDATA[Icon]]></string>
+	<string name="_bx_market_form_entry_input_pictures_use_as_cover"><![CDATA[Header Image]]></string>
+	<string name="_bx_market_form_entry_input_sys_files"><![CDATA[Files]]></string>
+	<string name="_bx_market_form_entry_input_files"><![CDATA[Files]]></string>
+	<string name="_bx_market_form_entry_input_files_use_as_main"><![CDATA[Use as Main]]></string>
+	<string name="_bx_market_form_entry_input_files_name"><![CDATA[Name:]]></string>
+	<string name="_bx_market_form_entry_input_files_version"><![CDATA[Version:]]></string>
+	<string name="_bx_market_form_entry_input_files_type"><![CDATA[Type:]]></string>
+	<string name="_bx_market_form_entry_input_files_type_version"><![CDATA[version]]></string>
+	<string name="_bx_market_form_entry_input_files_type_update"><![CDATA[update]]></string>
+	<string name="_bx_market_form_entry_input_files_version_from"><![CDATA[Version from:]]></string>
+	<string name="_bx_market_form_entry_input_files_version_to"><![CDATA[Version to:]]></string>
+	<string name="_bx_market_form_entry_input_files_version_from_x_to_y"><![CDATA[Version from {0} to {1}]]></string>
+    <string name="_bx_market_form_entry_input_sys_allow_view_to"><![CDATA[Who can view]]></string>
+    <string name="_bx_market_form_entry_input_allow_view_to"><![CDATA[Who can view]]></string>
+    <string name="_bx_market_form_entry_input_sys_allow_purchase_to"><![CDATA[Who can purchase]]></string>
+    <string name="_bx_market_form_entry_input_allow_purchase_to"><![CDATA[Who can purchase]]></string>
+    <string name="_bx_market_form_entry_input_sys_allow_comment_to"><![CDATA[Who can review]]></string>
+    <string name="_bx_market_form_entry_input_allow_comment_to"><![CDATA[Who can review]]></string>
+    <string name="_bx_market_form_entry_input_sys_allow_vote_to"><![CDATA[Who can vote]]></string>
+    <string name="_bx_market_form_entry_input_allow_vote_to"><![CDATA[Who can vote]]></string>
+    <string name="_bx_market_form_entry_input_sys_added"><![CDATA[Created]]></string>
+    <string name="_bx_market_form_entry_input_added"><![CDATA[Created]]></string>
+    <string name="_bx_market_form_entry_input_sys_changed"><![CDATA[Updated]]></string>
+    <string name="_bx_market_form_entry_input_changed"><![CDATA[Updated]]></string>
+    <string name="_bx_market_form_entry_input_sys_warning_single"><![CDATA[Warning for single payments]]></string>
+    <string name="_bx_market_form_entry_input_sys_warning_recurring"><![CDATA[Warning for recurring payments]]></string>
+    <string name="_bx_market_form_entry_input_sys_subentries"><![CDATA[Subproducts]]></string>
+    <string name="_bx_market_form_entry_input_subentries"><![CDATA[Subproducts]]></string>
+    <string name="_bx_market_form_entry_input_subentries_inf"><![CDATA[Leave empty if you don't want to create association.]]></string>
+    <string name="_bx_market_form_entry_input_subentries_placeholder"><![CDATA[Type product name here...]]></string>
+
+	<string name="_bx_market_acl_action_create_entry"><![CDATA[Create Product]]></string>
+	<string name="_bx_market_acl_action_delete_entry"><![CDATA[Delete Product]]></string>
+	<string name="_bx_market_acl_action_download_entry"><![CDATA[Download Product]]></string>
+	<string name="_bx_market_acl_action_view_entry"><![CDATA[View Product]]></string>
+	<string name="_bx_market_acl_action_set_cover"><![CDATA[Set Product Cover]]></string>
+	<string name="_bx_market_acl_action_set_subentries"><![CDATA[Set Product Subproducts]]></string>
+	<string name="_bx_market_acl_action_set_thumb"><![CDATA[Set Product Thumbnail]]></string>
+	<string name="_bx_market_acl_action_edit_any_entry"><![CDATA[Edit Any Product]]></string>
+
+	<string name="_bx_market_privacy_group_customers"><![CDATA[Customers]]></string>
+
+	<string name="_bx_market_page_title_sys_create_entry"><![CDATA[New Product]]></string>
+	<string name="_bx_market_page_title_create_entry"><![CDATA[New Product]]></string>
+	<string name="_bx_market_page_block_title_create_entry"><![CDATA[New Product]]></string>
+	<string name="_bx_market_page_title_sys_edit_entry"><![CDATA[Edit Product]]></string>
+	<string name="_bx_market_page_title_edit_entry"><![CDATA[Edit Product]]></string>
+	<string name="_bx_market_page_block_title_edit_entry"><![CDATA[Edit Product]]></string>
+    <string name="_bx_market_page_title_sys_delete_entry"><![CDATA[Delete Product]]></string>
+    <string name="_bx_market_page_title_delete_entry"><![CDATA[Delete Product]]></string>
+    <string name="_bx_market_page_block_title_delete_entry"><![CDATA[Delete Product]]></string>
+	<string name="_bx_market_page_title_sys_download_entry"><![CDATA[Download Product]]></string>
+    <string name="_bx_market_page_title_download_entry"><![CDATA[Download Product]]></string>
+    <string name="_bx_market_page_block_title_download_entry"><![CDATA[Download Product]]></string>
+	<string name="_bx_market_page_title_sys_view_entry"><![CDATA[View Product]]></string>
+	<string name="_bx_market_page_title_view_entry"><![CDATA[{title}]]></string>
+	<string name="_bx_market_page_block_title_entry_text"><![CDATA[Product Overview]]></string>
+	<string name="_bx_market_page_title_browse"><![CDATA[Products]]></string>
+	<string name="_bx_market_page_title_search_results"><![CDATA[Products matching "{0}"]]></string>
+	<string name="_bx_market_page_title_browse_by_author"><![CDATA[Products of {display_name}]]></string>
+  <string name="_bx_market_page_title_browse_by_context"><![CDATA[Products in {display_name}]]></string>
+	<string name="_bx_market_page_title_browse_featured"><![CDATA[Featured Products]]></string>
+    <string name="_bx_market_page_title_browse_latest"><![CDATA[Latest Products]]></string>
+    <string name="_bx_market_page_title_browse_popular"><![CDATA[Popular Products]]></string>
+    <string name="_bx_market_page_title_browse_updated"><![CDATA[Updated Products]]></string>
+    <string name="_bx_market_page_title_browse_category"><![CDATA[Products by category: {0}]]></string>
+    <string name="_bx_market_page_title_browse_keyword"><![CDATA[Products by hashtag: {0}]]></string>
+    <string name="_bx_market_page_title_sys_home"><![CDATA[Market Home]]></string>
+    <string name="_bx_market_page_title_home"><![CDATA[Market]]></string>
+    <string name="_bx_market_page_block_title_featured_entries"><![CDATA[Featured Products]]></string>
+    <string name="_bx_market_page_block_title_featured_entries_view_extended"><![CDATA[Featured Products (Extended View)]]></string>
+    <string name="_bx_market_page_block_title_featured_entries_view_full"><![CDATA[Featured Products (Full View)]]></string>
+    <string name="_bx_market_page_block_title_latest_entries"><![CDATA[Latest Products]]></string>
+    <string name="_bx_market_page_block_title_latest_entries_view_extended"><![CDATA[Latest Products (Extended View)]]></string>
+    <string name="_bx_market_page_block_title_latest_entries_view_full"><![CDATA[Latest Products (Full View)]]></string>
+    <string name="_bx_market_page_block_title_entry_social_sharing"><![CDATA[Share]]></string>
+    <string name="_bx_market_page_block_title_entry_author"><![CDATA[Vendor]]></string>
+    <string name="_bx_market_page_block_title_entry_author_entries"><![CDATA[More Products From {0}]]></string>
+    <string name="_bx_market_page_block_title_entry_actions"><![CDATA[Actions]]></string>
+    <string name="_bx_market_page_block_title_entry_breadcrumb"><![CDATA[Breadcrumb]]></string>
+    <string name="_bx_market_page_block_title_entry_comments"><![CDATA[Reviews]]></string>
+    <string name="_bx_market_page_block_title_entry_comments_link"><![CDATA[Reviews to <a href="{entry_link}">{title}</a>]]></string>
+    <string name="_bx_market_page_block_title_entry_comments_n"><![CDATA[Reviews ({0})]]></string>
+    <string name="_bx_market_page_block_title_entry_info"><![CDATA[Info]]></string>
+    <string name="_bx_market_page_block_title_entry_info_link"><![CDATA[<a href="{entry_link}">{title}</a> Info]]></string>
+    <string name="_bx_market_page_block_title_entry_location"><![CDATA[Location]]></string>
+    <string name="_bx_market_page_block_title_entry_attachments"><![CDATA[Attachments]]></string>
+    <string name="_bx_market_page_block_title_entry_all_actions"><![CDATA[All Actions]]></string>
+    <string name="_bx_market_page_block_title_entry_rating"><![CDATA[Rating]]></string>
+    <string name="_bx_market_page_title_sys_entries_latest"><![CDATA[Latest Products]]></string>
+    <string name="_bx_market_page_title_entries_latest"><![CDATA[Latest Products]]></string>
+    <string name="_bx_market_page_title_sys_entries_featured"><![CDATA[Featured Products]]></string>
+    <string name="_bx_market_page_title_entries_featured"><![CDATA[Featured Products]]></string>
+    <string name="_bx_market_page_title_sys_entries_popular"><![CDATA[Popular Products]]></string>
+    <string name="_bx_market_page_title_entries_popular"><![CDATA[Popular Products]]></string>
+    <string name="_bx_market_page_title_sys_entries_updated"><![CDATA[Updated Products]]></string>
+    <string name="_bx_market_page_title_entries_updated"><![CDATA[Updated Products]]></string>
+    <string name="_bx_market_page_block_title_popular_entries"><![CDATA[Popular Products]]></string>
+    <string name="_bx_market_page_block_title_popular_entries_view_extended"><![CDATA[Popular Products (Extended View)]]></string>
+    <string name="_bx_market_page_block_title_popular_entries_view_full"><![CDATA[Popular Products (Full View)]]></string>
+    <string name="_bx_market_page_block_title_updated_entries"><![CDATA[Updated Products]]></string>
+    <string name="_bx_market_page_block_title_updated_entries_view_extended"><![CDATA[Updated Products (Extended View)]]></string>
+    <string name="_bx_market_page_block_title_updated_entries_view_full"><![CDATA[Updated Products (Full View)]]></string>
+	<string name="_bx_market_page_block_title_sys_entry_context"><![CDATA[Posted in]]></string>
+    <string name="_bx_market_page_block_title_entry_context"><![CDATA[Posted in]]></string>
+	
+    <string name="_bx_market_page_title_sys_view_entry_comments"><![CDATA[Product Reviews]]></string>
+    <string name="_bx_market_page_title_view_entry_comments"><![CDATA[Reviews to {title}]]></string>
+    <string name="_bx_market_page_title_sys_view_entry_info"><![CDATA[Product Info]]></string>
+    <string name="_bx_market_page_title_view_entry_info"><![CDATA[{title} Info]]></string>
+    <string name="_bx_market_page_title_sys_entries_of_author"><![CDATA[Products of author]]></string>
+    <string name="_bx_market_page_title_entries_of_author"><![CDATA[Products by {display_name}]]></string>
+    <string name="_bx_market_page_title_sys_entries_in_context"><![CDATA[Products in context]]></string>
+    <string name="_bx_market_page_title_entries_in_context"><![CDATA[Products in {display_name}]]></string>
+    <string name="_bx_market_page_block_title_favorites_of_author"><![CDATA[Favorites by <a href="{profile_link}">{display_name}</a>]]></string>
+    <string name="_bx_market_page_block_title_sys_favorites_of_author"><![CDATA[Favorites of author]]></string>
+    <string name="_bx_market_page_block_title_entries_of_author"><![CDATA[Products by <a href="{profile_link}">{display_name}</a>]]></string>
+    <string name="_bx_market_page_block_title_sys_entries_of_author"><![CDATA[Products of author]]></string>
+    <string name="_bx_market_page_block_title_entries_in_context"><![CDATA[Products in <a href="{profile_link}">{display_name}</a>]]></string>
+    <string name="_bx_market_page_block_title_sys_entries_in_context"><![CDATA[Products in context]]></string>
+    <string name="_bx_market_page_block_title_entries_actions"><![CDATA[Products actions]]></string>
+    <string name="_bx_market_page_block_title_browse_cmts"><![CDATA[Products' Reviews]]></string>
+	<string name="_bx_market_page_title_sys_manage"><![CDATA[Manage Own Products]]></string>
+	<string name="_bx_market_page_title_sys_manage_administration"><![CDATA[Manage All Products]]></string>
+	<string name="_bx_market_page_title_manage"><![CDATA[Manage Products]]></string>
+	<string name="_bx_market_page_block_title_system_manage"><![CDATA[Manage Own Products]]></string>
+	<string name="_bx_market_page_block_title_system_manage_administration"><![CDATA[Manage All Products]]></string>
+	<string name="_bx_market_page_block_title_manage"><![CDATA[Manage Products]]></string>    
+	<string name="_bx_market_page_block_title_popular_keywords"><![CDATA[Popular Hashtags]]></string>
+	<string name="_bx_market_page_block_title_cats"><![CDATA[Products Categories]]></string>
+	<string name="_bx_market_page_title_sys_entries_categories"><![CDATA[Categories]]></string>
+    <string name="_bx_market_page_title_entries_categories"><![CDATA[Categories]]></string>
+    <string name="_bx_market_page_block_title_categories_entries"><![CDATA[Products]]></string>
+    
+    <string name="_bx_market_page_title_sys_licenses_administration"><![CDATA[Licenses]]></string>
+    <string name="_bx_market_page_title_licenses_administration"><![CDATA[Licenses]]></string>
+    <string name="_bx_market_page_block_title_licenses_administration"><![CDATA[Licenses]]></string>
+    <string name="_bx_market_page_title_sys_licenses"><![CDATA[Licenses]]></string>
+    <string name="_bx_market_page_title_licenses"><![CDATA[Licenses]]></string>
+    <string name="_bx_market_page_block_title_licenses"><![CDATA[Licenses]]></string>
+    <string name="_bx_market_page_block_title_licenses_note"><![CDATA[Note]]></string>
+    <string name="_bx_market_page_block_content_licenses_note"><![CDATA[The licenses are for reference only. There is no need to "register" them, as you can simply download and install licensed UNA apps directly from your site Studio Apps store.]]></string>
+    <string name="_bx_market_page_block_title_view_profile"><![CDATA[My Products]]></string>
+    <string name="_bx_market_page_title_sys_entries_search"><![CDATA[Search]]></string>
+    <string name="_bx_market_page_title_entries_search"><![CDATA[Search]]></string>
+    <string name="_bx_market_page_block_title_search_form"><![CDATA[Search Form]]></string>
+    <string name="_bx_market_page_block_title_search_results"><![CDATA[Search Results]]></string>
+    <string name="_bx_market_page_block_title_search_form_cmts"><![CDATA[Comments Search Form]]></string>
+    <string name="_bx_market_page_block_title_search_results_cmts"><![CDATA[Comments Search Results]]></string>
+    <string name="_bx_market_page_block_title_sys_recent_entries_view_showcase"><![CDATA[Latest Products (Showcase View)]]></string>
+    <string name="_bx_market_page_block_title_recent_entries_view_showcase"><![CDATA[Latest Products]]></string>
+    <string name="_bx_market_page_block_title_sys_popular_entries_view_showcase"><![CDATA[Popular Products (Showcase View)]]></string>
+    <string name="_bx_market_page_block_title_popular_entries_view_showcase"><![CDATA[Popular Products]]></string>
+    <string name="_bx_market_page_block_title_sys_featured_entries_view_showcase"><![CDATA[Featured Products (Showcase View)]]></string>
+    <string name="_bx_market_page_block_title_featured_entries_view_showcase"><![CDATA[Featured Products]]></string>
+
+    <string name="_bx_market_menu_set_title_view_entry"><![CDATA[Product Actions]]></string>
+    <string name="_bx_market_menu_title_view_entry"><![CDATA[Product Actions]]></string>
+    <string name="_bx_market_menu_set_title_view_entry_more"><![CDATA[Product More Actions]]></string>
+    <string name="_bx_market_menu_title_view_entry_more"><![CDATA[Product More Actions]]></string>
+    <string name="_bx_market_menu_title_submenu"><![CDATA[Market Submenu]]></string>
+    <string name="_bx_market_menu_set_title_submenu"><![CDATA[Market Submenu]]></string>
+    <string name="_bx_market_menu_item_title_system_create_entry"><![CDATA[Product]]></string>
+    <string name="_bx_market_menu_item_title_create_entry"><![CDATA[Product]]></string>
+    <string name="_bx_market_menu_item_title_system_edit_entry"><![CDATA[Edit Product]]></string>
+    <string name="_bx_market_menu_item_title_edit_entry"><![CDATA[Edit]]></string>
+    <string name="_bx_market_menu_item_title_system_delete_entry"><![CDATA[Delete Product]]></string>
+    <string name="_bx_market_menu_item_title_delete_entry"><![CDATA[Delete]]></string>
+    <string name="_bx_market_menu_item_title_system_add_to_cart"><![CDATA[Add to Cart]]></string>
+    <string name="_bx_market_menu_item_title_add_to_cart"><![CDATA[Buy for {0}{1}]]></string>
+    <string name="_bx_market_menu_item_title_system_subscribe"><![CDATA[Rent]]></string>
+    <string name="_bx_market_menu_item_title_subscribe"><![CDATA[Rent for {0}{1}/{2}]]></string>
+    <string name="_bx_market_menu_item_title_system_download"><![CDATA[Download Product]]></string>
+    <string name="_bx_market_menu_item_title_download"><![CDATA[Download]]></string>
+    <string name="_bx_market_menu_item_title_system_product_more"><![CDATA[More Actions]]></string>
+    <string name="_bx_market_menu_item_title_product_more"><![CDATA[]]></string>
+    <string name="_bx_market_menu_item_title_system_unhide_entry"><![CDATA[Unhide Product]]></string>
+    <string name="_bx_market_menu_item_title_unhide_entry"><![CDATA[Publish]]></string>
+    <string name="_bx_market_menu_item_title_system_hide_entry"><![CDATA[Hide Product]]></string>
+    <string name="_bx_market_menu_item_title_hide_entry"><![CDATA[Hide]]></string>
+    <string name="_bx_market_menu_item_title_system_entries_home"><![CDATA[Market]]></string>
+    <string name="_bx_market_menu_item_title_entries_home"><![CDATA[Market]]></string>
+    <string name="_bx_market_menu_item_title_system_entries_categories"><![CDATA[Categories]]></string>
+    <string name="_bx_market_menu_item_title_entries_categories"><![CDATA[Categories]]></string>
+    <string name="_bx_market_menu_item_title_system_entries_public"><![CDATA[Storefront]]></string>
+    <string name="_bx_market_menu_item_title_entries_public"><![CDATA[Storefront]]></string>
+    <string name="_bx_market_menu_item_title_system_entries_search"><![CDATA[Search]]></string>
+    <string name="_bx_market_menu_item_title_entries_search"><![CDATA[Search]]></string>
+    <string name="_bx_market_menu_item_title_system_entries_manage"><![CDATA[Manage Products]]></string>
+    <string name="_bx_market_menu_item_title_entries_manage"><![CDATA[Manage]]></string>
+    <string name="_bx_market_menu_item_title_system_entries_latest"><![CDATA[Latest Products]]></string>
+    <string name="_bx_market_menu_item_title_entries_latest"><![CDATA[Latest]]></string>
+    <string name="_bx_market_menu_item_title_system_entries_featured"><![CDATA[Featured Products]]></string>
+    <string name="_bx_market_menu_item_title_entries_featured"><![CDATA[Featured]]></string>
+    <string name="_bx_market_menu_item_title_system_entries_popular"><![CDATA[Popular Products]]></string>
+    <string name="_bx_market_menu_item_title_entries_popular"><![CDATA[Popular]]></string>
+    <string name="_bx_market_menu_item_title_system_entries_updated"><![CDATA[Updated Products]]></string>
+    <string name="_bx_market_menu_item_title_entries_updated"><![CDATA[Updated]]></string>
+    <string name="_bx_market_menu_title_view_entry_submenu"><![CDATA[View Product Submenu]]></string>
+    <string name="_bx_market_menu_set_title_view_entry_submenu"><![CDATA[View Product Submenu]]></string>
+    <string name="_bx_market_menu_item_title_system_view_entry_submenu_entry"><![CDATA[Overview]]></string>
+    <string name="_bx_market_menu_item_title_view_entry_submenu_entry"><![CDATA[Overview]]></string>
+    <string name="_bx_market_menu_item_title_system_view_entry_submenu_comments"><![CDATA[Reviews]]></string>
+    <string name="_bx_market_menu_item_title_view_entry_submenu_comments"><![CDATA[Reviews]]></string>
+    <string name="_bx_market_menu_item_title_system_view_entry_submenu_info"><![CDATA[Info]]></string>
+    <string name="_bx_market_menu_item_title_view_entry_submenu_info"><![CDATA[Info]]></string>
+    <string name="_bx_market_menu_item_title_system_view_entries_author"><![CDATA[Products]]></string>
+    <string name="_bx_market_menu_item_title_view_entries_author"><![CDATA[Products]]></string>
+    <string name="_bx_market_menu_item_title_system_view_entries_in_context"><![CDATA[Products]]></string>
+    <string name="_bx_market_menu_item_title_view_entries_in_context"><![CDATA[Products]]></string>
+    <string name="_bx_market_menu_title_entries_my"><![CDATA[My Products Action Menu]]></string>
+    <string name="_bx_market_menu_set_title_entries_my"><![CDATA[My Products Menu]]></string>
+	<string name="_bx_market_menu_item_title_system_manage_my_products"><![CDATA[My products]]></string>
+    <string name="_bx_market_menu_item_title_manage_my_products"><![CDATA[Products]]></string>
+    <string name="_bx_market_menu_set_title_manage_tools"><![CDATA[Manage Tools Submenu]]></string>
+    <string name="_bx_market_menu_title_manage_tools"><![CDATA[Manage Tools Submenu]]></string>
+    <string name="_bx_market_menu_item_title_system_manage_account"><![CDATA[Manage account]]></string>
+    <string name="_bx_market_menu_item_title_manage_account"><![CDATA[Manage account]]></string>
+	<string name="_bx_market_menu_item_title_system_admt_products"><![CDATA[Products]]></string>
+	<string name="_bx_market_menu_item_title_admt_products"><![CDATA[Products]]></string>
+	<string name="_bx_market_menu_item_title_manage_my"><![CDATA[My Products]]></string>
+	<string name="_bx_market_menu_item_title_manage_all"><![CDATA[All Products]]></string>
+	<string name="_bx_market_menu_item_title_system_licenses"><![CDATA[Licenses]]></string>
+	<string name="_bx_market_menu_item_title_licenses"><![CDATA[Licenses]]></string>
+	<string name="_bx_market_menu_title_snippet"><![CDATA[Snippet Actions]]></string>
+    <string name="_bx_market_menu_set_title_snippet"><![CDATA[Snippet Actions]]></string>
+    <string name="_bx_market_menu_item_title_system_snippet_more"><![CDATA[More Actions]]></string>
+    <string name="_bx_market_menu_item_title_snippet_more"><![CDATA[More Actions]]></string>
+    <string name="_bx_market_menu_title_snippet_more"><![CDATA[Snippet More Actions]]></string>
+    <string name="_bx_market_menu_set_title_snippet_more"><![CDATA[Snippet More Actions]]></string>
+    <string name="_bx_market_menu_item_title_downloads_more"><![CDATA[Show More]]></string>
+    <string name="_bx_market_menu_title_licenses_submenu"><![CDATA[Licenses Submenu]]></string>
+    <string name="_bx_market_menu_set_title_licenses_submenu"><![CDATA[Licenses Submenu]]></string>
+    <string name="_bx_market_menu_item_title_system_products_licenses_administration"><![CDATA[All Licenses]]></string>
+    <string name="_bx_market_menu_item_title_products_licenses_administration"><![CDATA[All Licenses]]></string>
+    <string name="_bx_market_menu_item_title_system_products_licenses"><![CDATA[My Licenses]]></string>
+    <string name="_bx_market_menu_item_title_products_licenses"><![CDATA[My Licenses]]></string>
+    
+
+	<string name="_bx_market_grid_filter_item_title_adm_select_one_filter1"><![CDATA[All Statuses]]></string>
+	<string name="_bx_market_grid_filter_item_title_adm_active"><![CDATA[Active]]></string>
+	<string name="_bx_market_grid_filter_item_title_adm_hidden"><![CDATA[Hidden]]></string>
+	<string name="_bx_market_grid_column_title_adm_active"><![CDATA[Active]]></string>
+    <string name="_bx_market_grid_column_title_adm_title"><![CDATA[Title]]></string>
+    <string name="_bx_market_grid_column_title_adm_added"><![CDATA[Added]]></string>
+    <string name="_bx_market_grid_column_title_adm_author"><![CDATA[Author]]></string>
+    <string name="_bx_market_grid_action_title_adm_edit"><![CDATA[Edit]]></string>
+    <string name="_bx_market_grid_action_title_adm_delete"><![CDATA[Delete]]></string>
+    <string name="_bx_market_grid_action_title_adm_more_actions"><![CDATA[More Actions]]></string>
+    <string name="_bx_market_grid_action_err_delete"><![CDATA[Cannot delete the selected product(s).]]></string>
+    <string name="_bx_market_grid_txt_account_manager"><![CDATA[Redirect to manage account.]]></string>
+
+
+    <string name="_bx_market_grid_column_title_lcs_profile_id"><![CDATA[Owner]]></string>
+    <string name="_bx_market_grid_column_title_lcs_transaction"><![CDATA[Order]]></string>
+    <string name="_bx_market_grid_column_title_lcs_product"><![CDATA[Product]]></string>
+    <string name="_bx_market_grid_column_title_lcs_license"><![CDATA[License]]></string>
+    <string name="_bx_market_grid_column_title_lcs_type"><![CDATA[Type]]></string>
+    <string name="_bx_market_grid_column_title_lcs_domain"><![CDATA[Domain]]></string>
+    <string name="_bx_market_grid_column_title_lcs_added"><![CDATA[Begin]]></string>
+    <string name="_bx_market_grid_column_title_lcs_expired"><![CDATA[Expire]]></string>
+    <string name="_bx_market_grid_action_title_lcs_reset"><![CDATA[Reset]]></string>
+    <string name="_bx_market_grid_action_err_cannot_perform"><![CDATA[Cannot perform the action. Please report.]]></string>
+    <string name="_bx_market_grid_txt_lcs_type_single"><![CDATA[one-time]]></string>
+    <string name="_bx_market_grid_txt_lcs_type_recurring"><![CDATA[recurring]]></string>
+    <string name="_bx_market_grid_txt_lcs_never"><![CDATA[never]]></string>
+
+    <string name="_bx_market_chart_growth"><![CDATA[Market: Growth]]></string>
+    <string name="_bx_market_chart_growth_speed"><![CDATA[Market: Growth Speed]]></string>
+
+    <string name="_bx_market_search_extended"><![CDATA[Market Search]]></string>
+    <string name="_bx_market_search_extended_cmts"><![CDATA[Market Comments Search]]></string>
+
+    <string name="_bx_market_pre_lists_cats"><![CDATA[Product categories]]></string>
+    <string name="_bx_market_cat_administration"><![CDATA[Administration]]></string>
+    <string name="_bx_market_cat_adult"><![CDATA[Adult]]></string>
+    <string name="_bx_market_cat_advertisement"><![CDATA[Advertisement]]></string>
+    <string name="_bx_market_cat_affiliates"><![CDATA[Affiliates]]></string>
+    <string name="_bx_market_cat_authentication"><![CDATA[Authentication]]></string>
+    <string name="_bx_market_cat_calendars"><![CDATA[Calendars]]></string>
+    <string name="_bx_market_cat_communication"><![CDATA[Communication]]></string>
+    <string name="_bx_market_cat_content"><![CDATA[Content]]></string>
+    <string name="_bx_market_cat_conversion"><![CDATA[Conversion]]></string>
+    <string name="_bx_market_cat_core_changes"><![CDATA[Core Changes]]></string>
+    <string name="_bx_market_cat_dating"><![CDATA[Dating]]></string>
+    <string name="_bx_market_cat_documentation"><![CDATA[Documentation]]></string>
+    <string name="_bx_market_cat_ecommerce"><![CDATA[eCommerce]]></string>
+    <string name="_bx_market_cat_events"><![CDATA[Events]]></string>
+    <string name="_bx_market_cat_feedback"><![CDATA[Feedback]]></string>
+    <string name="_bx_market_cat_flash"><![CDATA[Flash]]></string>
+    <string name="_bx_market_cat_games"><![CDATA[Games]]></string>
+    <string name="_bx_market_cat_graphics"><![CDATA[Graphics]]></string>
+    <string name="_bx_market_cat_hosting"><![CDATA[Hosting]]></string>
+    <string name="_bx_market_cat_integrations"><![CDATA[Integrations]]></string>
+    <string name="_bx_market_cat_location"><![CDATA[Location]]></string>
+    <string name="_bx_market_cat_management"><![CDATA[Management]]></string>
+    <string name="_bx_market_cat_mobile"><![CDATA[Mobile]]></string>
+    <string name="_bx_market_cat_multimedia"><![CDATA[Multimedia]]></string>
+    <string name="_bx_market_cat_music"><![CDATA[Music]]></string>
+    <string name="_bx_market_cat_navigation"><![CDATA[Navigation]]></string>
+    <string name="_bx_market_cat_other"><![CDATA[Other]]></string>
+    <string name="_bx_market_cat_performance"><![CDATA[Performance]]></string>
+    <string name="_bx_market_cat_photos"><![CDATA[Photos]]></string>
+    <string name="_bx_market_cat_search"><![CDATA[Search]]></string>
+    <string name="_bx_market_cat_security"><![CDATA[Security]]></string>
+    <string name="_bx_market_cat_services"><![CDATA[Services]]></string>
+    <string name="_bx_market_cat_social"><![CDATA[Social]]></string>
+    <string name="_bx_market_cat_spam_prevention"><![CDATA[Spam Prevention]]></string>
+    <string name="_bx_market_cat_statistics"><![CDATA[Statistics]]></string>
+    <string name="_bx_market_cat_templates"><![CDATA[Templates]]></string>
+    <string name="_bx_market_cat_tools"><![CDATA[Tools]]></string>
+    <string name="_bx_market_cat_translations"><![CDATA[Translations]]></string>
+    <string name="_bx_market_cat_video"><![CDATA[Video]]></string>
+
+    <string name="_bx_market_pre_lists_prices"><![CDATA[Product prices]]></string>
+    <string name="_bx_market_cat_price_0"><![CDATA[None]]></string>
+    <string name="_bx_market_cat_price_1"><![CDATA[1]]></string>
+    <string name="_bx_market_cat_price_2"><![CDATA[2]]></string>
+    <string name="_bx_market_cat_price_3"><![CDATA[3]]></string>
+    <string name="_bx_market_cat_price_4"><![CDATA[4]]></string>
+    <string name="_bx_market_cat_price_5"><![CDATA[5]]></string>
+
+	<string name="_bx_market_pre_lists_durations"><![CDATA[Product durations]]></string>
+	<string name="_bx_market_cat_duration_day"><![CDATA[daily]]></string>
+	<string name="_bx_market_cat_duration_week"><![CDATA[weekly]]></string>
+	<string name="_bx_market_cat_duration_month"><![CDATA[monthly]]></string>
+	<string name="_bx_market_cat_duration_year"><![CDATA[yearly]]></string>
+
+    <string name="_bx_market_vote_counter"><![CDATA[{0} ratings]]></string>
+
+	<string name="_bx_market_err_access_denied"><![CDATA[Access denied.]]></string>
+	<string name="_bx_market_err_no_payments"><![CDATA[There is no installed payment processing module.]]></string>
+	<string name="_bx_market_err_not_accept_payments"><![CDATA[You need to activate at least one payment provider. You may do it via My Account menu -> Settings page -> <a href="{0}">Payments</a> tab.]]></string>
+	<string name="_bx_market_err_not_accept_payments_single"><![CDATA[You need to activate at least one payment provider, which is working with Shopping Cart. You may do it via My Account menu -> Settings page -> <a href="{0}">Payments</a> tab.]]></string>
+	<string name="_bx_market_err_not_accept_payments_recurring"><![CDATA[You need to activate at least one payment provider, which is working with Subscriptions. You may do it via My Account menu -> Settings page -> <a href="{0}">Payments</a> tab.]]></string>
+
+    <string name="_bx_market_txt_all_entries_by"><![CDATA[{0} products]]></string>
+    <string name="_bx_market_txt_all_entries_in"><![CDATA[<a href="{0}">All Products in {1} ({2})</a>]]></string>
+    <string name="_bx_market_txt_category"><![CDATA[Category:]]></string>
+    <string name="_bx_market_txt_most_current_version"><![CDATA[The most current version]]></string>
+    <string name="_bx_market_txt_sample_single"><![CDATA[product]]></string>
+    <string name="_bx_market_txt_sample_single_with_article"><![CDATA[a product]]></string>
+    <string name="_bx_market_txt_sample_comment_single"><![CDATA[comment to product]]></string>
+    <string name="_bx_market_txt_sample_vote_single"><![CDATA[vote to product]]></string>
+    <string name="_bx_market_txt_sample_reaction_single"><![CDATA['{0}' reaction to product]]></string>
+    <string name="_bx_market_txt_sample_score_up_single"><![CDATA[score up vote to product]]></string>
+    <string name="_bx_market_txt_sample_score_down_single"><![CDATA[score down vote to product]]></string>
+    <string name="_bx_market_txt_author_added_product"><![CDATA[{0} {1}]]></string>
+    <string name="_bx_market_txt_joined"><![CDATA[Joined:]]></string>
+    <string name="_bx_market_txt_last_active"><![CDATA[Last Active:]]></string>
+    <string name="_bx_market_txt_price_single"><![CDATA[Buy for {0}{1}]]></string>
+    <string name="_bx_market_txt_price_single_short"><![CDATA[{0}{1}]]></string>
+    <string name="_bx_market_txt_price_recurring"><![CDATA[Rent for {0}{1}/{2}]]></string>
+    <string name="_bx_market_txt_price_recurring_short"><![CDATA[{0}{1}/{2}]]></string>
+    <string name="_bx_market_txt_price_free"><![CDATA[Free]]></string>
+    <string name="_bx_market_txt_per_day"><![CDATA[day]]></string>
+    <string name="_bx_market_txt_per_day_short"><![CDATA[day]]></string>
+    <string name="_bx_market_txt_per_week"><![CDATA[week]]></string>
+    <string name="_bx_market_txt_per_week_short"><![CDATA[week]]></string>
+    <string name="_bx_market_txt_per_month"><![CDATA[month]]></string>
+    <string name="_bx_market_txt_per_month_short"><![CDATA[month]]></string>
+    <string name="_bx_market_txt_per_year"><![CDATA[year]]></string>
+    <string name="_bx_market_txt_per_year_short"><![CDATA[year]]></string>
+    <string name="_bx_market_txt_get_for_free"><![CDATA[Download for Free]]></string>
+    <string name="_bx_market_txt_purchased_note"><![CDATA[Contact <a href="{0}">{1}</a> if you have any questions or need support.]]></string>
+
+    <!-- EMAIL TEMPLATES -->
+    <string name="_bx_market_et_txt_name_purchased"><![CDATA[Product purchased.]]></string>
+    <string name="_bx_market_et_txt_subject_purchased"><![CDATA[You've purchased {product_name} product.]]></string>
+    <string name="_bx_market_et_txt_body_purchased"><![CDATA[{email_header}
+<p>Hello, {client_name}.</p>
+<p>You've purchased <a href="{product_url}">{product_name}</a> product from <a href="{vendor_url}">{vendor_name}</a>.<br />Your license is <b>{license}</b>.</p>
+<p>{notes}</p>
+{email_footer}]]></string>
+</resources>

+ 57 - 0
modules/boonex/market/updates/10.0.0_10.0.1/source/template/css/entry.css

@@ -0,0 +1,57 @@
+/*--- Entry Cover ---*/
+.bx-cover-wrapper .bx-cover .bx-cover-image img {
+	border-width: 0px;
+	background-position: center center;
+}
+
+/*--- Entry Content ---*/
+div.bx-market-entity-content {}
+
+div.bx-market-ec-title {
+    position: relative;
+    display: -webkit-flex;
+    display: flex;
+
+    -webkit-align-items: center;
+    align-items: center;
+    -webkit-justify-content: flex-start;
+    justify-content: flex-start;
+}
+div.bx-market-ect-icon {
+    -webkit-flex: 0 2 auto;
+    flex: 0 2 auto;
+}
+div.bx-market-ect-title {
+    -webkit-flex: 1 1 auto;
+    flex: 1 1 auto;
+}
+
+
+/*--- Entry Screenshots ---*/
+div.bx-market-screenshots {
+	position: relative;
+	height: 120px;
+	height: 7.5rem;
+
+	overflow: hidden;
+}
+div.bx-market-screenshots-cnt {
+	position: relative;
+	white-space: nowrap;
+}
+div.bx-market-ss-item {
+	position: relative;
+	display: inline-block;
+	vertical-align: top;
+
+	margin-right: 2px;
+	margin-right: 0.125rem;
+}
+div.bx-market-ss-item .bx-market-ssi-img {
+	position: relative;
+	display: block;
+
+	background-position: center center;
+	background-repeat: no-repeat;
+	background-color: #ffffff;
+}

+ 23 - 0
modules/boonex/market/updates/10.0.0_10.0.1/source/template/entry-text.html

@@ -0,0 +1,23 @@
+<div class="bx-content-description-before">__content_description_before__</div>
+<div class="bx-content-description">
+    <bx_if:show_image>
+        <div class="bx-base-text-entity-image bx-def-margin-bottom bx-def-font-align-center">
+            <img class="bx-def-border-radius-block" src="__entry_image__" />
+        </div>
+    </bx_if:show_image>
+    <div class="bx-base-text-entity-content bx-market-entity-content bx-def-constraint-list bx-def-constraint-pre bx-def-constraint-object bx-def-constraint-iframe bx-def-constraint-img">
+        <div class="bx-market-ec-title">
+            <bx_if:show_icon>
+                <div class="bx-market-ect-icon bx-def-margin-right"><img class="bx-def-icon-size bx-def-round-corners" src="__entry_icon__"/></div>
+            </bx_if:show_icon>
+            <div class="bx-market-ect-title">
+                <h1>__entry_title__</h1>
+            </div>
+        </div>
+        <div class="bx-market-ec-description bx-def-margin-top">__entry_text__</div>
+    </div>
+    <bx_if:show_screenshots>
+        <div class="bx-market-ec-slideshow bx-def-margin-top">__screenshots__</div>
+    </bx_if:show_screenshots>
+</div>
+<div class="bx-content-description-after">__content_description_after__</div>

+ 44 - 0
modules/boonex/market/updates/10.0.0_10.0.1/source/template/form_ghost_template_file.html

@@ -0,0 +1,44 @@
+<div id="bx-uploader-file-{storage_object}-{file_id}" class="bx-uploader-ghost bx-market-uploader-ghost-file bx-def-margin-sec-top bx-clearfix">
+    <div class="bx-uploader-ghost-header bx-def-padding-thd-topbottom bx-def-padding-sec-leftright">
+        <a href="javascript:void(0)" onclick="javascript:bx_market_ghost_toggle(this);"><i class="sys-icon chevron-right"></i></a> {file_name}
+    </div>
+    <div class="bx-uploader-ghost-body bx-def-padding-thd-topbottom">
+	    <input type="hidden" name="__name__" value="{file_id}" />
+	    <div class="bx-base-general-icon-wrapper bx-def-margin-sec-right">
+	        <img src="{file_icon}" class="bx-def-round-corners bx-base-general-icon bx-base-general-icon-{file_id}" />
+	    </div>
+	    <span class="bx-base-general-uploader-ghost">
+                <b><bx_text:_bx_market_form_entry_input_files_name /></b><br />
+	        <input class="bx-def-font-inputs bx-form-input-text bx-def-margin-sec-bottom" type="text" value="{file_name}" readonly="1" /><br />
+	
+                <b><bx_text:_bx_market_form_entry_input_files_type /></b><br />
+                <select class="bx-def-font-inputs bx-form-input-select bx-def-margin-sec-bottom" name="type-{file_id}" onchange="javascript:oBxMarketForm.changeFileType(this);">
+                    <option value="version"{file_type_version_selected}><bx_text:_bx_market_form_entry_input_files_type_version /></option>
+                    <option value="update"{file_type_update_selected}><bx_text:_bx_market_form_entry_input_files_type_update /></option>
+                </select><br />
+	
+                <span class="bx-uploader-ghost-type-rel bx-uploader-ghost-type-version"{file_type_version_elements}>
+                    <b><bx_text:_bx_market_form_entry_input_files_version /></b><br />
+                    <input class="bx-def-font-inputs bx-form-input-text bx-def-margin-sec-bottom" type="text" name="version-{file_id}" value="{file_version_attr}" /><br />
+                </span>
+	
+                <span class="bx-uploader-ghost-type-rel bx-uploader-ghost-type-update"{file_type_update_elements}>
+                    <b><bx_text:_bx_market_form_entry_input_files_version_from /></b><br />
+                    <select class="bx-def-font-inputs bx-form-input-select bx-def-margin-sec-bottom" name="version-from-{file_id}">{file_version_from_options}</select><br />
+                        <b><bx_text:_bx_market_form_entry_input_files_version_to /></b><br />
+                    <select class="bx-def-font-inputs bx-form-input-select bx-def-margin-sec-bottom" name="version-to-{file_id}">{file_version_to_options}</select><br />
+                </span>
+	        <a class="bx-btn bx-btn-small bx-def-margin-sec-right" href="javascript:void(0);" onclick="bx_base_general_delete_ghost('{file_id}', '{file_url}', '{file_icon}', ['__editor_id__'], {js_instance_name});"><bx_text:_sys_txt_form_entry_input_picture_delete /></a>
+
+	        <bx_if:set_thumb>
+	            <span class="bx-base-general-use-as-thumb bx-uploader-ghost-type-rel bx-uploader-ghost-type-version"{file_type_version_elements}>
+	                <input type="checkbox" name="__name_thumb__[]" value="{file_id}" onclick="bx_base_general_select_thumb(this)" id="__name_thumb__-{file_id}" /> 
+	                <label for="__name_thumb__-{file_id}"><bx_text:_bx_market_form_entry_input_files_use_as_main /></label>
+	            </span>
+	        </bx_if:set_thumb>
+	    </span>
+    </div>
+</div>
+<script type="text/javascript" language="javascript">
+    bx_market_ghost_init($('#bx-uploader-file-{storage_object}-{file_id}'), {file_id}, __thumb_id__);
+</script>

+ 51 - 0
modules/boonex/nexus/updates/10.0.0_10.0.1/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' => 'Nexus',
+    'version_from' => '10.0.0',
+    'version_to' => '10.0.1',
+    'vendor' => 'BoonEx',
+
+    'compatible_with' => array(
+        '10.0.0-B2'
+    ),
+
+    /**
+     * 'home_dir' and 'home_uri' - should be unique. Don't use spaces in 'home_uri' and the other special chars.
+     */
+    'home_dir' => 'boonex/nexus/updates/update_10.0.0_10.0.1/',
+    'home_uri' => 'nexus_update_1000_1001',
+
+    'module_dir' => 'boonex/nexus/',
+    'module_uri' => 'nexus',
+
+    'db_prefix' => 'bx_nexus_',
+    'class_prefix' => 'BxNexus',
+
+    /**
+     * Installation/Uninstallation Section.
+     */
+    'install' => array(
+        'execute_sql' => 0,
+        'update_files' => 1,
+        'update_languages' => 0,
+        'clear_db_cache' => 0,
+    ),
+
+    /**
+     * Category for language keys.
+     */
+    'language_category' => 'Nexus',
+
+    /**
+     * Files Section
+     */
+    'delete_files' => array(),
+);

+ 13 - 0
modules/boonex/nexus/updates/10.0.0_10.0.1/install/installer.php

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

+ 68 - 0
modules/boonex/nexus/updates/10.0.0_10.0.1/source/install/config.php

@@ -0,0 +1,68 @@
+<?php
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Nexus Nexus - Mobile Apps and Desktop apps connector
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+$aConfig = array(
+    /**
+     * Main Section.
+     */
+    'type' => BX_DOL_MODULE_TYPE_MODULE,
+    'name' => 'bx_nexus',
+    'title' => 'Nexus',
+    'note' => 'Nexus - Mobile Apps and Desktop apps connector.',
+    'version' => '10.0.1',
+    'vendor' => 'BoonEx',
+    'help_url' => 'http://feed.una.io/?section={module_name}',
+
+    'compatible_with' => array(
+        '10.0.0-B2'
+    ),
+
+    /**
+     * 'home_dir' and 'home_uri' - should be unique. Don't use spaces in 'home_uri' and the other special chars.
+     */
+    'home_dir' => 'boonex/nexus/',
+    'home_uri' => 'nexus',
+
+    'db_prefix' => 'bx_nexus_',
+    'class_prefix' => 'BxNexus',
+
+    /**
+     * Category for language keys.
+     */
+    'language_category' => 'Nexus',
+    
+    /**
+     * 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(),
+);
+
+/** @} */

+ 57 - 0
modules/boonex/nexus/updates/10.0.0_10.0.1/source/template/styles.html

@@ -0,0 +1,57 @@
+<style>
+
+.bx-def-mobile-app-hide {
+    display:none !important;
+}
+.bx-def-mobile-app-show-block {
+    display:block;
+}
+
+html #bx-toolbar {
+    height:0 !important;    
+}
+html .bx-header {
+    border-bottom-width: 0 !important;
+}
+html .bx-shadow-header {
+    box-shadow: none;
+}
+html .bx-menu-toolbar-padding {
+    padding-top:0 !important;
+}
+html #bx-toolbar-content {
+    display:none;
+}
+html .cd-side-nav,
+html .cd-main-content .content-wrapper {
+    padding-top:0;
+}
+html .cd-main-content .content-wrapper {
+    margin-left:0;
+}
+html .bx-sliding-menu-fullheight {
+    height:100%;
+}
+html  nav.cd-stretchy-nav {
+    display:none;
+}
+html #bx-footer-wrapper {
+    display:none;
+}
+
+/* main menu & add content menu */
+html #bx-sliding-menu-sys_site.bx-sliding-menu-main, 
+html #bx-sliding-menu-sys_add_content.bx-sliding-menu-main, 
+html #bx-sliding-menu-account.bx-sliding-menu-main {
+    background-color:#fff;
+    height:100%;
+    overflow-x:hidden;
+    overflow-y:auto;
+}
+html .bx-sliding-menu-main ul.bx-menu-floating-blocks-big {
+    white-space:normal;
+}
+html .bx-sliding-menu-main ul.bx-menu-floating-blocks-big {
+    text-align:center;
+}
+</style>

+ 52 - 0
modules/boonex/notifications/updates/10.0.0_10.0.1/install/config.php

@@ -0,0 +1,52 @@
+<?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.0',
+    'version_to' => '10.0.1',
+    'vendor' => 'BoonEx',
+
+    'compatible_with' => array(
+        '10.0.0-B2'
+    ),
+
+    /**
+     * '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.0_10.0.1/',
+    'home_uri' => 'notifications_update_1000_1001',
+
+    '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,
+        'update_relations_for_all' => 1,
+        'clear_db_cache' => 1,
+    ),
+
+    /**
+     * Category for language keys.
+     */
+    'language_category' => 'Notifications',
+
+    /**
+     * Files Section
+     */
+    'delete_files' => array(),
+);

+ 13 - 0
modules/boonex/notifications/updates/10.0.0_10.0.1/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.0_10.0.1/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}`.`object_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;
+    }
+}
+
+/** @} */

+ 510 - 0
modules/boonex/notifications/updates/10.0.0_10.0.1/source/classes/BxNtfsModule.php

@@ -0,0 +1,510 @@
+<?php use nspace\func;
+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
+ *
+ * @{
+ */
+
+bx_import('BxBaseModNotificationsModule');
+
+define('BX_NTFS_TYPE_OBJECT_OWNER_AND_CONNECTIONS', 'obj_own_and_con');
+define('BX_NTFS_TYPE_DEFAULT', BX_NTFS_TYPE_OBJECT_OWNER_AND_CONNECTIONS);
+
+/**
+ * STYPE - Setting Type:
+ * 1. personal - related to you;
+ * 2. follow_member - related to members you follow;
+ * 3. follow_context - related to contexts you follow;
+ * 4. other - others.
+ */
+define('BX_NTFS_STYPE_PERSONAL', 'personal');
+define('BX_NTFS_STYPE_FOLLOW_MEMBER', 'follow_member');
+define('BX_NTFS_STYPE_FOLLOW_CONTEXT', 'follow_context');
+define('BX_NTFS_STYPE_OTHER', 'other');
+
+/**
+ * SLTMODE - Silent mode:
+ * It is needed for alert sending module to tell that the alert should be ignored 
+ * with Notifications module completely or partially. Available values: 
+ * 1. disabled (value = 0) - all notifications are available;
+ * 2. absolute (value = 1) - alert isn't registered which means that there is no notifications at all;
+ * 3. on-site only (value = 2) - alert is registered. It means that on-site notification is available while the others are disabled.
+ * 4. on-site + email (value = 3) - alert is registered (on-site) and notification via 'email' is enabled.
+ * 5. on-site + push (value = 4) - alert is registered (on-site) and notification via 'push' is enabled.
+ * 
+ * @see BxNtfsResponse::response - 'silent_mode' parameter in Alerts Extras array.
+ */
+define('BX_NTFS_SLTMODE_DISABLED', 0);
+define('BX_NTFS_SLTMODE_ABSOLUTE', 1);
+define('BX_NTFS_SLTMODE_SITE', 2);
+define('BX_NTFS_SLTMODE_SITE_EMAIL', 3);
+define('BX_NTFS_SLTMODE_SITE_PUSH', 4);
+
+class BxNtfsModule extends BxBaseModNotificationsModule
+{
+    /**
+     * Constructor
+     */
+    function __construct($aModule)
+    {
+        parent::__construct($aModule);
+
+        $this->_iOwnerId = $this->getUserId();
+    }
+
+    /**
+     * ACTION METHODS
+     */
+    function actionGetPosts()
+    {
+        $aParams = $this->_prepareParamsGet();
+        $sEvents = $this->_oTemplate->getPosts($aParams);
+
+        echoJson(array('events' => $sEvents));
+    }
+
+    /**
+     * SERVICE METHODS
+     */
+
+    /**
+     * @page service Service Calls
+     * @section bx_notifications Invitations
+     * @subsection bx_notifications-other Other
+     * @subsubsection bx_notifications-get_include get_include
+     * 
+     * @code bx_srv('bx_notifications', 'get_include', [...]); @endcode
+     * 
+     * Get all necessary CSS and JS files to include in a page.
+     *
+     * @return string with all necessary CSS and JS files.
+     * 
+     * @see BxInvModule::serviceGetInclude
+     */
+    /** 
+     * @ref bx_notifications-get_include "get_include"
+     */
+    public function serviceGetInclude($bIncludeCss = true, $mixedIncludeJs = false)
+    {
+        return $this->_oTemplate->getInclude($bIncludeCss, $mixedIncludeJs);
+    }
+
+    /**
+     * @page service Service Calls
+     * @section bx_notifications Notifications
+     * @subsection bx_notifications-page_blocks Page Blocks
+     * @subsubsection bx_notifications-get_block_settings get_block_settings
+     * 
+     * @code bx_srv('bx_notifications', 'get_block_settings', [...]); @endcode
+     * 
+     * Get Settings block for a separate page.
+     *
+     * @return a string with block content to display on the site. All necessary CSS and JS files are automatically added to the HEAD section of the site HTML.
+     * 
+     * @see BxNtfsModule::serviceGetBlockSettings
+     */
+    /** 
+     * @ref bx_notifications-get_block_settings "get_block_settings"
+     */
+    public function serviceGetBlockSettings($sDeliveryType = '', $aParams = array())
+    {
+        if(!isLogged())
+            return '';
+
+        if(empty($sDeliveryType) && bx_get('delivery') !== false)
+            $sDeliveryType = bx_process_input(bx_get('delivery'));
+
+        if(empty($sDeliveryType))
+            $sDeliveryType = BX_BASE_MOD_NTFS_DTYPE_SITE;
+
+        $iUserId = bx_get_logged_profile_id();
+        if(!empty($aParams['user_id']))
+            $iUserId = (int)$aParams['user_id'];
+        else
+            $aParams['user_id'] = $iUserId;
+
+        $this->_oDb->initSettingUser($iUserId);
+
+        return array(
+            'content' => $this->getBlockSettings($sDeliveryType, $aParams),
+        );
+    }
+
+    /**
+     * @page service Service Calls
+     * @section bx_notifications Notifications
+     * @subsection bx_notifications-page_blocks Page Blocks
+     * @subsubsection bx_notifications-get_block_view get_block_view
+     * 
+     * @code bx_srv('bx_notifications', 'get_block_view', [...]); @endcode
+     * 
+     * Get View block for a separate page. Will return a block with "Empty" message if nothing found.
+     *
+     * @return an array describing a block to display on the site. All necessary CSS and JS files are automatically added to the HEAD section of the site HTML.
+     * 
+     * @see BxNtfsModule::serviceGetBlockView
+     */
+    /** 
+     * @ref bx_notifications-get_block_view "get_block_view"
+     */
+    public function serviceGetBlockView($sType = '', $iStart = -1, $iPerPage = -1, $aModules = array())
+    {
+    	$aBrowseTypes = array(BX_NTFS_TYPE_OBJECT_OWNER_AND_CONNECTIONS, BX_BASE_MOD_NTFS_TYPE_CONNECTIONS, BX_BASE_MOD_NTFS_TYPE_OBJECT_OWNER);
+
+    	if(empty($sType)) {
+    		$mixedType = bx_get('type');
+    		if($mixedType !== false && in_array($mixedType, $aBrowseTypes))
+    			$sType = $mixedType;
+
+	    	if(empty($sType))
+    			$sType = BX_NTFS_TYPE_DEFAULT;
+    	}
+
+    	$iOwnerId = $this->getUserId();
+        if(!$iOwnerId)
+            return array('content' => MsgBox(_t('_bx_ntfs_txt_msg_no_results')));
+
+		$aParams = $this->_prepareParams($sType, $iOwnerId, $iStart, $iPerPage, $aModules);
+		$sContent = $this->_oTemplate->getViewBlock($aParams);
+
+		$aParams['browse'] = 'first';
+    	$aEvent = $this->_oDb->getEvents($aParams);
+    	if(!empty($aEvent))
+			$this->_oDb->markAsRead($iOwnerId, $aEvent['id']);
+
+		$sModule = $this->_oConfig->getName();
+		$sJsObject = $this->_oConfig->getJsObject('view');
+
+        return array('content' => $sContent); 
+    }
+
+    /**
+     * @page service Service Calls
+     * @section bx_notifications Notifications
+     * @subsection bx_notifications-browsing Browsing
+     * @subsubsection bx_notifications-get_event_by_id get_event_by_id
+     * 
+     * @code bx_srv('bx_notifications', 'get_event_by_id', [...]); @endcode
+     * 
+     * Get event's data by event ID.
+     *
+     * @return an array with event's data.
+     * 
+     * @see BxNtfsModule::serviceGetEventById
+     */
+    /** 
+     * @ref bx_notifications-get_event_by_id "get_event_by_id"
+     */
+    public function serviceGetEventById($iId)
+    {
+        $aParams = array(
+            'browse' => 'id',
+            'value' => $iId,
+        );
+    	return $this->_oDb->getEvents($aParams);
+    }
+
+    /**
+     * @page service Service Calls
+     * @section bx_notifications Notifications
+     * @subsection bx_notifications-other Other
+     * @subsubsection bx_notifications-get_notifications get_notifications
+     * 
+     * @code bx_srv('bx_notifications', 'get_notifications', [...]); @endcode
+     * 
+     * Get notifications by params.
+     *
+     * @return array with notifications.
+     * 
+     * @see BxNtfsModule::serviceGetNotifications
+     */
+    /** 
+     * @ref bx_notifications-get_notifications "get_notifications"
+     */
+    public function serviceGetNotifications($iOwnerId = 0, $aBrowseParams = array())
+    {
+    	if(!$iOwnerId)
+			$iOwnerId = $this->getUserId();
+
+		if(!$iOwnerId)
+			return 0;
+
+		$aParams = $this->_prepareParams(BX_NTFS_TYPE_DEFAULT, $iOwnerId);
+		if(!empty($aBrowseParams) && is_array($aBrowseParams))
+		    $aParams = array_merge($aParams, $aBrowseParams);
+
+		list($aEvent) = $this->_oDb->getEvents($aParams, true);
+
+        // returns parsed content for React Jot
+		if (!is_array($aBrowseParams) && $aBrowseParams === 'return_parsed_content')
+		    foreach ($aEvent as &$aContent)
+                $this->_oTemplate->getPost($aContent, array('return_parsed_content'));
+
+
+        return $aEvent;
+    }
+
+    /**
+     * @page service Service Calls
+     * @section bx_notifications Notifications
+     * @subsection bx_notifications-other Other
+     * @subsubsection bx_notifications-get_unread_notifications get_unread_notifications
+     * 
+     * @code bx_srv('bx_notifications', 'get_unread_notifications', [...]); @endcode
+     * 
+     * Get unread notifications.
+     *
+     * @return array with unread notifications.
+     * 
+     * @see BxNtfsModule::serviceGetUnreadNotifications
+     */
+    /** 
+     * @ref bx_notifications-get_unread_notifications "get_unread_notifications"
+     */
+    public function serviceGetUnreadNotifications($iOwnerId = 0)
+    {
+		return $this->serviceGetNotifications($iOwnerId, array('new' => 1));
+    }
+
+    /**
+     * @page service Service Calls
+     * @section bx_notifications Notifications
+     * @subsection bx_notifications-other Other
+     * @subsubsection bx_notifications-get_unread_notifications_num get_unread_notifications_num
+     * 
+     * @code bx_srv('bx_notifications', 'get_unread_notifications_num', [...]); @endcode
+     * 
+     * Get number of unread notifications.
+     *
+     * @return integer value with number of unread notifications.
+     * 
+     * @see BxNtfsModule::serviceGetUnreadNotificationsNum
+     */
+    /** 
+     * @ref bx_notifications-get_unread_notifications_num "get_unread_notifications_num"
+     */
+    public function serviceGetUnreadNotificationsNum($iOwnerId = 0)
+    {
+        if(!$iOwnerId)
+            $iOwnerId = $this->getUserId();
+
+        if(!$iOwnerId)
+            return 0;
+
+        $aParams = $this->_prepareParams(BX_NTFS_TYPE_DEFAULT, $iOwnerId);
+        $aParams = array_merge($aParams, array(
+            'new' => 1,
+            'count_only' => 1
+        ));
+
+        return (int)$this->_oDb->getEvents($aParams);
+    }
+
+    /**
+     * @page service Service Calls
+     * @section bx_notifications Notifications
+     * @subsection bx_notifications-other Other
+     * @subsubsection bx_notifications-get_live_updates get_live_updates
+     * 
+     * @code bx_srv('bx_notifications', 'get_live_updates', [...]); @endcode
+     * 
+     * Get data for Live Updates system.
+     *
+     * @return an array with special format.
+     * 
+     * @see BxNtfsModule::serviceGetLiveUpdates
+     */
+    /** 
+     * @ref bx_notifications-get_live_updates "get_live_updates"
+     */
+    public function serviceGetLiveUpdates($aMenuItemParent, $aMenuItemChild, $iCount = 0)
+    {
+        $iOwnerId = $this->getUserId();
+        $iCountNew = $this->serviceGetUnreadNotificationsNum($iOwnerId);
+        if($iCountNew == $iCount)
+			return false;
+
+        return array(
+    		'count' => $iCountNew, // required
+    		'method' => 'bx_menu_show_live_update(oData)', // required
+    		'data' => array(
+    			'code' => BxDolTemplate::getInstance()->parseHtmlByTemplateName('menu_item_addon', array(
+    				'content' => '{count}'
+                )),
+                'mi_parent' => $aMenuItemParent,
+                'mi_child' => $aMenuItemChild
+    		),  // optional, may have some additional data to be passed in JS method provided using 'method' param above.
+    	);
+    }
+
+    /*
+     * COMMON METHODS
+     */
+    public function getBlockSettings($sDeliveryType, $aParams = array())
+    {
+        return $this->_oTemplate->getSettingsBlock($sDeliveryType, $aParams);
+    }
+
+    public function setSubmenu($sSelected)
+    {
+    	$oSubmenuSystem = BxDolMenu::getObjectInstance('sys_site_submenu');
+        if(!$oSubmenuSystem)
+            return;
+
+        $CNF = &$this->_oConfig->CNF;
+
+        $oSubmenuSystem->setObjectSubmenu($CNF['OBJECT_MENU_SUBMENU'], array (
+            'title' => _t('_bx_ntfs'),
+            'link' => BX_DOL_URL_ROOT . BxDolPermalinks::getInstance()->permalink($CNF['URL_HOME']),
+            'icon' => '',
+        ));
+
+        $oSubmenuModule = BxDolMenu::getObjectInstance($CNF['OBJECT_MENU_SUBMENU']);
+        if($oSubmenuModule)
+            $oSubmenuModule->setSelected($this->_oConfig->getName(), $sSelected);
+    }
+
+    public function onPost($iId)
+    {
+    	//--- Event -> Post for Alerts Engine ---//
+        $oAlert = new BxDolAlerts($this->_oConfig->getObject('alert'), 'post', $iId);
+        $oAlert->alert();
+        //--- Event -> Post for Alerts Engine ---//
+    }
+
+    public function enableSettingsLike($iId, $bValue, $bAdministration = false)
+    {
+        $aSetting = $this->_oDb->getSetting(array(
+            'by' => $bAdministration ? 'id' : 'tsu_id', 
+            'id' => (int)$iId
+        ));
+        if(empty($aSetting) || !is_array($aSetting))
+            return false;
+
+        $aSettingsIds = $this->_oDb->getSetting(array(
+            'by' => 'group_type_delivery', 
+            'group' => $aSetting['group'], 
+            'delivery' => $aSetting['delivery'], 
+            'type' => $aSetting['type'], 
+            'active' => !$bAdministration
+        ));
+        if(empty($aSettingsIds) || !is_array($aSettingsIds))
+            return false;
+
+        $iUserId = bx_get_logged_profile_id();
+
+        $mixedResult = false;
+        if($bAdministration)
+            $mixedResult =  $this->_oDb->activateSettingById($bValue, $aSettingsIds);
+        else
+            $mixedResult = $this->_oDb->activateSettingByIdUser($bValue, $iUserId, $aSettingsIds);
+
+        return $mixedResult;
+    }
+
+    public function sendNotificationEmail($oProfile, $aNotification)
+    {
+        if(!$oProfile)
+            return false;
+
+        $oAccount = $oProfile->getAccountObject();
+        if(!$oAccount)
+            return false;
+
+        $aSettings = &$aNotification['settings'];
+
+        $sTemplate = !empty($aSettings['template']) ? $aSettings['template'] : 'bx_notifications_new_event';
+        $aTemplateMarkers = array('content' => $aNotification['content']);
+        if(!empty($aSettings['markers']) && is_array($aSettings['markers']))
+            $aTemplateMarkers = array_merge($aTemplateMarkers, $aSettings['markers']);              
+
+        $aTemplate = BxDolEmailTemplates::getInstance()->parseTemplate($sTemplate, $aTemplateMarkers, $oAccount->id(), $oProfile->id());
+        if(!$aTemplate)
+            return false;
+
+        $sSubject = !empty($aSettings['subject']) ? $aSettings['subject'] : $aTemplate['Subject'];
+        return sendMail($oAccount->getEmail(), $sSubject, $aTemplate['Body'], 0, array(), BX_EMAIL_NOTIFY, 'html', false, array(), true);
+    }
+
+    public function sendNotificationPush($oProfile, $aNotification)
+    {
+        if(!$oProfile)
+            return false;
+
+        $oAccount = $oProfile->getAccountObject();
+        if(!$oAccount)
+            return false;
+
+        $oLanguage = BxDolLanguages::getInstance();
+
+        $iLanguage = $oAccount->getLanguageId();
+        if(empty($iLanguage))
+            $iLanguage = $oLanguage->getCurrentLangId();
+
+        $sLanguage = $oLanguage->getLangName($iLanguage);
+
+        $aContent = &$aNotification['content'];
+        $aSettings = &$aNotification['settings'];
+
+        $sSubject = !empty($aSettings['subject']) ? $aSettings['subject'] : _t('_bx_ntfs_push_new_event_subject', getParam('site_title'));
+        return BxDolPush::getInstance()->send($oProfile->id(), array(
+            'contents' => array(
+                $sLanguage => $aContent['message']
+            ),
+            'headings' => array(
+                $sLanguage => $sSubject
+            ),
+            'url' => $aContent['url'],
+            'icon' => $aContent['icon']
+        ), true);
+    }
+
+    /*
+     * INTERNAL METHODS
+     */
+    protected function _prepareParams($sType = '', $iOwnerId = 0, $iStart = -1, $iPerPage = -1, $aModules = array())
+    {
+        $aParams = array();
+        $aParams['browse'] = 'list';
+        $aParams['type'] = !empty($sType) ? $sType : BX_NTFS_TYPE_DEFAULT;
+        $aParams['owner_id'] = (int)$iOwnerId != 0 ? $iOwnerId : $this->getUserId();
+        $aParams['start'] = (int)$iStart > 0 ? $iStart : 0;
+        $aParams['per_page'] = (int)$iPerPage > 0 ? $iPerPage : $this->_oConfig->getPerPage();
+        $aParams['modules'] = is_array($aModules) && !empty($aModules) ? $aModules : array();
+        $aParams['last_read'] = $this->_oDb->getLastRead($aParams['owner_id']);
+        $aParams['active'] = 1;
+
+        return $aParams;
+    }
+
+    protected function _prepareParamsGet()
+    {
+        $aParams = array();
+        $aParams['browse'] = 'list';
+
+        $sType = bx_get('type');
+        $aParams['type'] = $sType !== false ? bx_process_input($sType, BX_DATA_TEXT) : BX_NTFS_TYPE_DEFAULT;
+
+        $aParams['owner_id'] = $sType !== false ? bx_process_input(bx_get('owner_id'), BX_DATA_INT) : $this->getUserId();
+
+        $iStart = bx_get('start');
+        $aParams['start'] = $iStart !== false ? bx_process_input($iStart, BX_DATA_INT) : 0;
+
+        $iPerPage = bx_get('per_page');
+        $aParams['per_page'] = $iPerPage !== false ? bx_process_input($iPerPage, BX_DATA_INT) : $this->_oConfig->getPerPage();
+
+        $aModules = bx_get('modules');
+        $aParams['modules'] = $aModules !== false ? bx_process_input($aModules, BX_DATA_TEXT) : array();
+
+        $aParams['active'] = 1;
+
+        return $aParams;
+    }
+}
+
+/** @} */

+ 340 - 0
modules/boonex/notifications/updates/10.0.0_10.0.1/source/classes/BxNtfsTemplate.php

@@ -0,0 +1,340 @@
+<?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
+ *
+ * @{
+ */
+
+require_once(BX_DIRECTORY_PATH_INC . "design.inc.php");
+
+class BxNtfsTemplate extends BxBaseModNotificationsTemplate
+{
+    function __construct(&$oConfig, &$oDb)
+    {
+        parent::__construct($oConfig, $oDb);
+    }
+
+    public function getInclude($bIncludeCss = true, $mixedIncludeJs = false)
+    {
+        if($bIncludeCss)
+            $this->getCss();
+
+        $sResult = '';
+        if(is_string($mixedIncludeJs) && !empty($mixedIncludeJs)) {
+            $this->getJs();
+            
+            $sResult = $this->getJsCode($mixedIncludeJs);
+        }
+            
+        return $sResult;
+    }
+
+    public function getViewBlock($aParams)
+    {
+        return $this->parseHtmlByName('block_view.html', array(
+        	'html_id_view_block' => $this->_oConfig->getHtmlIds('view', 'block'),
+        	'html_id_events' => $this->_oConfig->getHtmlIds('view', 'events'),
+            'style_prefix' => $this->_oConfig->getPrefix('style'),
+            'content' => $this->getPosts($aParams),
+            'js_content' => $this->getJsCode('view', array(
+        		'oRequestParams' => array(
+	                'type' => $aParams['type'],
+	                'owner_id' => $aParams['owner_id'],
+	                'start' => $aParams['start'],
+	                'per_page' => $aParams['per_page'],
+	                'modules' => $aParams['modules']
+       			)
+            ))
+        ));
+    }
+
+    public function getSettingsBlock($sDeliveryType, $aParams = array())
+    {
+        $CNF = &$this->_oConfig->CNF;
+
+        $iUserId = !empty($aParams['user_id']) ? (int)$aParams['user_id'] : bx_get_logged_profile_id();
+        $sGrid = !empty($aParams['grid']) ? $aParams['grid'] : $CNF['OBJECT_GRID_SETTINGS_COMMON'];
+        $oTemplate = !empty($aParams['template']) ? $aParams['template'] : $this;
+
+        $oGrid = BxDolGrid::getObjectInstance($sGrid, $oTemplate);
+        if(!$oGrid)
+            return '';
+
+        $oGrid->setDeliveryType($sDeliveryType);
+        if(method_exists($oGrid, 'setUserId'))
+            $oGrid->setUserId($iUserId);
+
+        return $oGrid->getCode();
+    }
+
+    public function getPosts($aParams)
+    {
+    	$sJsObject = $this->_oConfig->getJsObject('view');
+
+    	$aParamsDb = $aParams;
+    	$aParamsDb['per_page'] = 3 * $aParamsDb['per_page'];
+
+        $aEvents = $this->_oDb->getEvents($aParamsDb);
+        if(empty($aEvents))
+        	return $this->getEmpty();
+
+        $aTmplVarsEvents = array();
+        foreach($aEvents as $aEvent) {
+            $sEvent = $this->getPost($aEvent, $aParams);
+            if(empty($sEvent))
+                continue;
+
+            $aTmplVarsEvents[] = array('event' => $sEvent);
+            if(count($aTmplVarsEvents) >= ($aParams['per_page'] + 1))
+            	break;
+        }
+
+        $oPaginate = new BxTemplPaginate(array(
+        	'start' => $aParams['start'],
+            'per_page' => $aParams['per_page'],
+        	'page_url' => $this->_oConfig->getViewUrl(),
+        	'on_change_page' => $sJsObject . ".changePage(this, {start}, {per_page})"
+        ));
+        $oPaginate->setNumFromDataArray($aTmplVarsEvents);
+
+        return $this->parseHtmlByName('events.html', array(
+        	'style_prefix' => $this->_oConfig->getPrefix('style'),
+        	'bx_repeat:events' => $aTmplVarsEvents,
+        	'paginate' => $oPaginate->getSimplePaginate()
+        ));
+    }
+
+    /**
+     * Enter description here ...
+     * @example Available keys are:
+     * 1. owner_name and owner_link
+     * 2. entry_caption and entry_url
+     * 3. subentry_url and subentry_sample
+     * 
+     */
+    public function getPost(&$aEvent, $aBrowseParams = array())
+    {
+    	$oModule = $this->getModule();
+
+        if(!empty($aEvent['content']) && is_string($aEvent['content']))
+            $aEvent['content'] = unserialize($aEvent['content']);
+
+    	if((int)$aEvent['processed'] == 0)
+            $this->_processContent($aEvent);
+
+        if((int)$aEvent['processed'] == 0 || empty($aEvent['content']))
+            return '';
+
+        $sParam = 'perform_privacy_check';
+        if(!isset($aBrowseParams[$sParam]) || $aBrowseParams[$sParam] === true) {
+            $oPrivacyInt = BxDolPrivacy::getObjectInstance($this->_oConfig->getObject('privacy_view'));
+            if(!$oPrivacyInt->check($aEvent['id']))
+                return '';
+
+            $oPrivacyExt = $oModule->_oConfig->getPrivacyObject($aEvent['type'] . '_' . $aEvent['action']);
+            if($oPrivacyExt !== false && !$oPrivacyExt->check($aEvent['id']))
+                return '';
+
+            $sService = 'check_allowed_with_content';
+            if(BxDolRequest::serviceExists($aEvent['type'], $sService) && BxDolService::call($aEvent['type'], $sService, array('view', $this->_getContentObjectId($aEvent))) !== CHECK_ACTION_RESULT_ALLOWED)
+                return '';
+        }
+
+        $oOwner = $oModule->getObjectUser($aEvent['owner_id']);
+
+        $aEvent['content']['owner_name'] = strmaxtextlen($oOwner->getDisplayName(), $this->_oConfig->getOwnerNameMaxLen());
+        $aEvent['content']['owner_link'] = $oOwner->getUrl();
+        $aEvent['content']['owner_icon'] = $oOwner->getThumb();
+
+        if(!empty($aEvent['content']['entry_caption'])) {
+            $sEntryCaption = bx_process_output($aEvent['content']['entry_caption'], BX_DATA_TEXT);
+            if(get_mb_substr($sEntryCaption, 0, 1) == '_')
+                $sEntryCaption = _t($sEntryCaption);
+
+            $aEvent['content']['entry_caption'] = strmaxtextlen($sEntryCaption, $this->_oConfig->getContentMaxLen());
+        }
+
+        $iObjectOwner = (int)$aEvent['object_owner_id'];
+        if(empty($iObjectOwner) && !empty($aEvent['content']['entry_author']))
+            $iObjectOwner = (int)$aEvent['content']['entry_author'];
+
+        $oObjectOwner = $oModule->getObjectUser($iObjectOwner);
+        if($oObjectOwner) {
+            $aEvent['content']['object_owner_name'] = strmaxtextlen($oObjectOwner->getDisplayName(), $this->_oConfig->getOwnerNameMaxLen());
+            $aEvent['content']['object_owner_link'] = $oObjectOwner->getUrl();
+            $aEvent['content']['object_owner_icon'] = $oObjectOwner->getThumb();
+        }
+
+        foreach($aEvent['content'] as $sKey => $sValue) {
+            if(!is_string($sValue) || substr($sValue, 0, 1) != '_') 
+                continue;
+
+            $aCallParams = array($sValue);
+
+            $sKeyParams = $sKey . '_params';
+            if(isset($aEvent['content'][$sKeyParams]) && is_array($aEvent['content'][$sKeyParams])) {
+                foreach($aEvent['content'][$sKeyParams] as $iParamIndex => $sParamValue)
+                    if(is_string($sParamValue) && substr($sParamValue, 0, 1) == '_')
+                        $aEvent['content'][$sKeyParams][$iParamIndex] = _t($sParamValue);
+
+                $aCallParams = array_merge($aCallParams, $aEvent['content'][$sKeyParams]);
+                unset($aEvent['content'][$sKeyParams]);
+            }
+
+            $aEvent['content'][$sKey] = call_user_func_array('_t', $aCallParams);
+        }
+
+    	$bEventParsed = false;
+        bx_alert($this->_oConfig->getName(), 'get_notification', 0, 0, array('event' => &$aEvent, 'event_parsed' => &$bEventParsed, 'owner' => &$oOwner));
+        if (!$bEventParsed){
+    	    $aEvent['content_parsed'] = _t(!empty($aEvent['content']['lang_key']) ? $aEvent['content']['lang_key'] : $this->_getContentLangKey($aEvent));
+    	    $aEvent['content_parsed'] = $this->parseHtmlByContent($aEvent['content_parsed'], $aEvent['content'], array('{', '}'));
+        }
+
+        // returns parsed content for React Jot
+        if(isset($aBrowseParams['return_parsed_content']))
+            return $aEvent;
+
+        return $this->parseHtmlByName('event.html', array (
+            'html_id' => $this->_oConfig->getHtmlIds('view', 'event') . $aEvent['id'],
+            'style_prefix' => $this->_oConfig->getPrefix('style'),
+            'js_object' => $this->_oConfig->getJsObject('view'),
+            'class' => !empty($aBrowseParams['last_read']) && $aEvent['id'] > $aBrowseParams['last_read'] ? ' bx-def-color-bg-box-active' : '', 
+            'id' => $aEvent['id'],
+            'author_unit' => $this->_isInContext($aEvent) && $oObjectOwner ? $oObjectOwner->getUnit(0, array('template' => 'unit_wo_info_links')) : $oOwner->getUnit(0, array('template' => 'unit_wo_info_links')),
+            'link' => $this->_getContentLink($aEvent),
+            'content' => $aEvent['content_parsed'],
+            'date' => bx_time_js($aEvent['date']),
+        ));
+    }
+
+    public function getNotificationEmail(&$aEvent)
+    {
+        $sEvent = $this->getPost($aEvent, array('perform_privacy_check' => false));
+        if(empty($sEvent) || empty($aEvent['content_parsed']))
+            return false;
+
+        $aContent = &$aEvent['content'];
+        return array(
+            'content' => $this->parseHtmlByName('et_new_event.html', array(
+                'icon_url' => !empty($aContent['owner_icon']) ? $aContent['owner_icon'] : $this->getIconUrl('std-icon.svg'),
+                'content_url' => $this->_getContentLink($aEvent),
+                'content' => $aEvent['content_parsed'],
+                'date' => bx_process_output($aEvent['date'], BX_DATA_DATETIME_TS),
+            )),
+            'settings' => !empty($aContent['settings']['email']) ? $aContent['settings']['email'] : array()
+        );
+    }
+
+    public function getNotificationPush(&$aEvent)
+    {
+        $sEvent = $this->getPost($aEvent, array('perform_privacy_check' => false));
+        if(empty($sEvent) || empty($aEvent['content_parsed']))
+            return false;
+
+        $sMessage = preg_replace('/<\/?[a-zA-Z0-9=\'":;\(\)\s_-]+>/i', '"', $aEvent['content_parsed']);
+        if($sMessage)
+            $sMessage = BxTemplFunctions::getInstance()->getStringWithLimitedLength(html_entity_decode($sMessage), $this->_oConfig->getPushMaxLen());
+
+        if(empty($sMessage))
+            return false;
+
+        $aContent = &$aEvent['content'];
+        return array(
+            'content' => array(
+                'url' => $this->_getContentLink($aEvent),
+                'message' => $sMessage,
+                'icon' => !empty($aContent['owner_icon']) ? $aContent['owner_icon'] : ''
+            ),
+            'settings' => !empty($aContent['settings']['push']) ? $aContent['settings']['push'] : array()
+        );
+    }
+
+    public function getEmpty($bVisible = true)
+    {
+        return $this->parseHtmlByName('empty.html', array(
+            'style_prefix' => $this->_oConfig->getPrefix('style'),
+            'visible' => $bVisible ? 'block' : 'none',
+            'content' => MsgBox(_t('_bx_ntfs_txt_msg_no_results'))
+        ));
+    }
+
+    protected function _processContent(&$aEvent)
+    {
+    	$aContent = $this->_getContent($aEvent);
+        if(empty($aContent) || !is_array($aContent)) 
+            return;
+
+        $aSet = array();
+        if(!empty($aContent['entry_author'])) {
+            $aSet['object_owner_id'] = (int)$aContent['entry_author'];
+            unset($aContent['entry_author']);
+        }
+
+        if(!empty($aContent['entry_privacy'])) {
+            $aSet['allow_view_event_to'] = $aContent['entry_privacy'];
+            $aEvent['allow_view_event_to'] = $aContent['entry_privacy'];
+            unset($aContent['entry_privacy']);
+        }
+
+        $aEvent['content'] = $aContent;
+        $aEvent['processed'] = 1;
+
+        $aSet = array_merge($aSet, array(
+            'content' => serialize($aEvent['content']), 
+            'processed' => 1
+        ));
+
+        $this->_oDb->updateEvent($aSet, array('id' => $aEvent['id']));
+        return;
+    }
+
+    protected function _getContent(&$aEvent)
+    {
+        $sHandler = $aEvent['type'] . '_' . $aEvent['action'];
+        if(!$this->_oConfig->isHandler($sHandler))
+            return array();
+
+        $aHandler = $this->_oConfig->getHandlers($sHandler);
+        if(!empty($aHandler['module_name']) && !empty($aHandler['module_class']) && !empty($aHandler['module_method']))
+            return BxDolService::call($aHandler['module_name'], $aHandler['module_method'], array($aEvent), $aHandler['module_class']);
+
+        $sMethod = 'display' . bx_gen_method_name($aHandler['alert_unit'] . '_' . $aHandler['alert_action']);
+        if(!method_exists($this, $sMethod))
+            return array();
+
+        return $this->$sMethod($aEvent);
+    }
+
+    protected function _getContentObjectId(&$aEvent)
+    {
+        return !empty($aEvent['content']['object_id']) ? (int)$aEvent['content']['object_id'] : (int)$aEvent['object_id'];
+    }
+
+    protected function _getContentLangKey(&$aEvent)
+    {
+        if(!empty($aEvent['subobject_id']))
+            return '_bx_ntfs_txt_subobject_added';
+
+        if($this->_isInContext($aEvent))
+            return '_bx_ntfs_txt_object_added_in_context';
+
+    	return '_bx_ntfs_txt_object_added';
+    }
+
+    protected function _getContentLink(&$aEvent)
+    {
+        return !empty($aEvent['subobject_id']) && !empty($aEvent['content']['subentry_url']) ? $aEvent['content']['subentry_url'] : $aEvent['content']['entry_url'];
+    }
+
+    protected function _isInContext(&$aEvent)
+    {
+        return (int)$aEvent['object_privacy_view'] < 0;
+    }
+}
+
+/** @} */

+ 82 - 0
modules/boonex/notifications/updates/10.0.0_10.0.1/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.1',
+    'vendor' => 'BoonEx',
+    'help_url' => 'http://feed.una.io/?section={module_name}',
+
+    'compatible_with' => array(
+        '10.0.0-B2'
+    ),
+
+    /**
+     * '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/ocean/updates/10.0.0_10.0.1/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' => 'Ocean',
+    'version_from' => '10.0.0',
+    'version_to' => '10.0.1',
+    'vendor' => 'BoonEx',
+
+    'compatible_with' => array(
+        '10.0.0-B2'
+    ),
+
+    /**
+     * 'home_dir' and 'home_uri' - should be unique. Don't use spaces in 'home_uri' and the other special chars.
+     */
+    'home_dir' => 'boonex/ocean/updates/update_10.0.0_10.0.1/',
+    'home_uri' => 'ocean_update_1000_1001',
+
+    'module_dir' => 'boonex/ocean/',
+    'module_uri' => 'ocean',
+
+    'db_prefix' => 'bx_ocean_',
+    'class_prefix' => 'BxOcean',
+
+    /**
+     * Installation/Uninstallation Section.
+     */
+    'install' => array(
+        'execute_sql' => 0,
+        'update_files' => 1,
+        'update_languages' => 0,
+        'clear_db_cache' => 0,
+    ),
+
+    /**
+     * Category for language keys.
+     */
+    'language_category' => 'BoonEx Ocean',
+
+    /**
+     * Files Section
+     */
+    'delete_files' => array(),
+);

Некоторые файлы не были показаны из-за большого количества измененных файлов