AntonLV пре 6 година
родитељ
комит
11ef43e9ae
34 измењених фајлова са 828 додато и 162 уклоњено
  1. 54 27
      modules/boonex/forum/classes/BxForumConfig.php
  2. 109 3
      modules/boonex/forum/classes/BxForumFormEntry.php
  3. 25 0
      modules/boonex/forum/classes/BxForumFormPoll.php
  4. 22 0
      modules/boonex/forum/classes/BxForumMenuAttachments.php
  5. 3 4
      modules/boonex/forum/classes/BxForumUploaderHTML5.php
  6. 27 0
      modules/boonex/forum/classes/BxForumUploaderHTML5Attach.php
  7. 3 4
      modules/boonex/forum/classes/BxForumUploaderSimple.php
  8. 27 0
      modules/boonex/forum/classes/BxForumUploaderSimpleAttach.php
  9. 22 0
      modules/boonex/forum/classes/BxForumVotePollAnswers.php
  10. 91 42
      modules/boonex/forum/install/langs/en.xml
  11. 4 2
      modules/boonex/forum/install/sql/disable.sql
  12. 27 3
      modules/boonex/forum/install/sql/enable.sql
  13. 192 14
      modules/boonex/forum/install/sql/install.sql
  14. 8 8
      modules/boonex/forum/install/sql/uninstall.sql
  15. 21 0
      modules/boonex/forum/js/polls.js
  16. 1 0
      modules/boonex/forum/template/css/polls.css
  17. 20 6
      modules/boonex/forum/template/form_ghost_template.html
  18. 22 0
      modules/boonex/forum/template/form_ghost_template_cover.html
  19. 19 0
      modules/boonex/forum/template/form_ghost_template_file.html
  20. 22 0
      modules/boonex/forum/template/form_ghost_template_video.html
  21. 1 0
      modules/boonex/forum/template/poll_answer_ve_block.html
  22. 1 0
      modules/boonex/forum/template/poll_form.html
  23. 1 0
      modules/boonex/forum/template/poll_form_answers.html
  24. 1 0
      modules/boonex/forum/template/poll_form_field.html
  25. 1 0
      modules/boonex/forum/template/poll_item.html
  26. 1 0
      modules/boonex/forum/template/poll_item_answers.html
  27. 1 0
      modules/boonex/forum/template/poll_item_results.html
  28. 1 0
      modules/boonex/forum/template/poll_items.html
  29. 1 0
      modules/boonex/forum/template/poll_items_embed.html
  30. 1 0
      modules/boonex/forum/template/poll_items_showcase.html
  31. 1 0
      modules/boonex/forum/template/uploader_button_html5_attach.html
  32. 1 0
      modules/boonex/forum/template/uploader_button_simple_attach.html
  33. 2 2
      modules/boonex/posts/classes/BxPostsFormEntry.php
  34. 95 47
      modules/boonex/russian/data/langs/bx_forum/ru.xml

+ 54 - 27
modules/boonex/forum/classes/BxForumConfig.php

@@ -28,14 +28,14 @@ class BxForumConfig extends BxBaseModTextConfig
             'delete-discussion' => 'checkAllowedDelete'
         );
 
-        $this->CNF = array (
+        $this->CNF = array_merge($this->CNF, array (
 
             // module icon
             'ICON' => 'far comments col-blue2',
 
             // database tables
             'TABLE_ENTRIES' => $aModule['db_prefix'] . 'discussions',
-        	'TABLE_ENTRIES_FULLTEXT' => 'title_text',
+            'TABLE_ENTRIES_FULLTEXT' => 'title_text',
 
             // database fields
             'FIELD_ID' => 'id',
@@ -52,8 +52,13 @@ class BxForumConfig extends BxBaseModTextConfig
             'FIELD_LR_ADDED' => 'lr_timestamp',
             'FIELD_LR_COMMENT_ID' => 'lr_comment_id',
             'FIELD_ALLOW_VIEW_TO' => 'allow_view_to',
-            'FIELD_PHOTO' => 'attachments',
+            'FIELD_COVER' => 'covers',
+            'FIELD_PHOTO' => 'pictures',
+            'FIELD_VIDEO' => 'videos',
+            'FIELD_FILE' => 'files',
+            'FIELD_POLL' => 'polls',
             'FIELD_THUMB' => 'thumb',
+            'FIELD_ATTACHMENTS' => 'attachments',
             'FIELD_VIEWS' => 'views',
             'FIELD_VOTES' => 'votes',
             'FIELD_COMMENTS' => 'comments',
@@ -68,7 +73,7 @@ class BxForumConfig extends BxBaseModTextConfig
              // some params
             'PARAM_MULTICAT_ENABLED' => true,
             'PARAM_MULTICAT_AUTO_ACTIVATION_FOR_CATEGORIES' => 'bx_forum_auto_activation_for_categories',
-            
+
             // page URIs
             'URI_VIEW_ENTRY' => 'view-discussion',
             'URI_AUTHOR_ENTRIES' => 'discussions-author',
@@ -103,13 +108,26 @@ class BxForumConfig extends BxBaseModTextConfig
             '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_STORAGE' => 'bx_forum_covers',
+            'OBJECT_STORAGE_FILES' => 'bx_forum_files',
+            'OBJECT_STORAGE_PHOTOS' => 'bx_forum_photos',
+            'OBJECT_STORAGE_VIDEOS' => 'bx_forum_videos',
+            'OBJECT_STORAGE_CMTS' => 'bx_forum_files_cmts', // for comments
             '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_IMAGES_TRANSCODER_PREVIEW_FILES' => 'bx_forum_preview_files',
+            'OBJECT_IMAGES_TRANSCODER_GALLERY_FILES' => 'bx_forum_gallery_files',
+            'OBJECT_IMAGES_TRANSCODER_PREVIEW_PHOTOS' => 'bx_forum_preview_photos',
+            'OBJECT_IMAGES_TRANSCODER_GALLERY_PHOTOS' => 'bx_forum_gallery_photos',
+            'OBJECT_IMAGES_TRANSCODER_PREVIEW_CMTS' => 'bx_forum_preview_cmts', // for comments
+            'OBJECT_VIDEOS_TRANSCODERS' => array(
+                'poster' => 'bx_forum_videos_poster', 
+            	'poster_preview' => 'bx_forum_videos_poster_preview',
+            	'mp4' => 'bx_forum_videos_mp4', 
+            	'mp4_hd' => 'bx_forum_videos_mp4_hd'
+            ),
+            'OBJECT_VIDEO_TRANSCODER_HEIGHT' => '480px',
             'OBJECT_REPORTS' => 'bx_forum',
             'OBJECT_VIEWS' => 'bx_forum',
             'OBJECT_VOTES' => 'bx_forum',
@@ -126,8 +144,11 @@ class BxForumConfig extends BxBaseModTextConfig
             '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_POLL' => 'bx_forum_poll',
+            'OBJECT_FORM_POLL_DISPLAY_ADD' => 'bx_forum_poll_add',
             'OBJECT_FORM_SEARCH' => 'bx_forum_search',
             'OBJECT_FORM_SEARCH_DISPLAY_FULL' => 'bx_forum_search_full',
+            'OBJECT_MENU_ENTRY_ATTACHMENTS' => 'bx_forum_entry_attachments', // attachments menu in create/edit forms
             '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
@@ -142,13 +163,13 @@ class BxForumConfig extends BxBaseModTextConfig
             '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',
-            
+
             'BADGES_AVALIABLE' => true,
 
             // menu items which visibility depends on custom visibility checking
             'MENU_ITEM_TO_METHOD' => array (
                 'bx_forum_view' => $aMenuItems2Methods,
-        		'bx_forum_view_more' => $aMenuItems2Methods,
+                'bx_forum_view_more' => $aMenuItems2Methods,
             ),
 
             // some language keys
@@ -171,30 +192,36 @@ class BxForumConfig extends BxBaseModTextConfig
                 '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'
+            	'txt_pict_use_as_thumb' => '_bx_forum_form_entry_input_picture_use_as_thumb',
+                'txt_poll_form_answers_add' => '_bx_forum_form_poll_input_answers_add',
+                'txt_poll_menu_view_answers' => '_bx_forum_txt_poll_view_answers',
+                'txt_poll_menu_view_results' => '_bx_forum_txt_poll_view_results',
+                'txt_poll_menu_view_' => '_bx_forum_txt_poll_view_',
+                'txt_poll_answer_vote_do_by' => '_bx_forum_txt_poll_answer_vote_do_by',
+                'txt_poll_answer_vote_counter' => '_bx_forum_txt_poll_answer_vote_counter',
+                'txt_poll_answer_vote_percent' => '_bx_forum_txt_poll_answer_vote_percent'
             ),
-        );
+        ));
 
-        $this->_aJsClasses = array(
-        	'main' => 'BxForumMain',
-        	'entry' => 'BxForumEntry',
-        	'manage_tools' => 'BxForumManageTools',
-        	'studio' => 'BxForumStudio',
+        $this->_aJsClasses = array_merge($this->_aJsClasses, array(
+            'main' => 'BxForumMain',
+            'entry' => 'BxForumEntry',
+            'manage_tools' => 'BxForumManageTools',
+            'studio' => 'BxForumStudio',
             'categories' => 'BxDolCategories'
-        );
+        ));
 
-        $this->_aJsObjects = array(
-        	'main' => 'oBxForumMain',
-        	'entry' => 'oBxForumEntry',
-        	'manage_tools' => 'oBxForumManageTools',
-        	'studio' => 'oBxForumStudio',
+        $this->_aJsObjects = array_merge($this->_aJsObjects, array(
+            'main' => 'oBxForumMain',
+            'entry' => 'oBxForumEntry',
+            'manage_tools' => 'oBxForumManageTools',
+            'studio' => 'oBxForumStudio',
             'categories' => 'oBxDolCategories'
-        );
+        ));
 
         $this->_aGridObjects = array(
-        	'common' => $this->CNF['OBJECT_GRID_COMMON'],
-        	'administration' => $this->CNF['OBJECT_GRID_ADMINISTRATION'],
-        	
+            'common' => $this->CNF['OBJECT_GRID_COMMON'],
+            'administration' => $this->CNF['OBJECT_GRID_ADMINISTRATION'],
         );
     }
 }

+ 109 - 3
modules/boonex/forum/classes/BxForumFormEntry.php

@@ -14,10 +14,86 @@
  */
 class BxForumFormEntry extends BxBaseModTextFormEntry
 {
+    protected $_sGhostTemplateCover = 'form_ghost_template_cover.html';
+
     public function __construct($aInfo, $oTemplate = false)
     {
         $this->MODULE = 'bx_forum';
         parent::__construct($aInfo, $oTemplate);
+
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
+        if(isset($CNF['FIELD_COVER']) && isset($this->aInputs[$CNF['FIELD_COVER']])) {
+            if($this->_oModule->checkAllowedSetThumb() === CHECK_ACTION_RESULT_ALLOWED) {
+                $this->aInputs[$CNF['FIELD_COVER']]['storage_object'] = $CNF['OBJECT_STORAGE'];
+                $this->aInputs[$CNF['FIELD_COVER']]['uploaders'] = !empty($this->aInputs[$CNF['FIELD_COVER']]['value']) ? unserialize($this->aInputs[$CNF['FIELD_COVER']]['value']) : $CNF['OBJECT_UPLOADERS'];
+                $this->aInputs[$CNF['FIELD_COVER']]['upload_buttons_titles'] = array(
+                    'Simple' => _t('_bx_forum_form_entry_input_covers_uploader_simple_title'), 
+                    'HTML5' => _t('_bx_forum_form_entry_input_covers_uploader_html5_title')
+                );
+                $this->aInputs[$CNF['FIELD_COVER']]['images_transcoder'] = $CNF['OBJECT_IMAGES_TRANSCODER_PREVIEW'];
+                $this->aInputs[$CNF['FIELD_COVER']]['storage_private'] = 0;
+                $this->aInputs[$CNF['FIELD_COVER']]['multiple'] = false;
+                $this->aInputs[$CNF['FIELD_COVER']]['content_id'] = 0;
+                $this->aInputs[$CNF['FIELD_COVER']]['ghost_template'] = '';
+            }
+            else
+                unset($this->aInputs[$CNF['FIELD_COVER']]);
+        }
+
+        if(isset($CNF['FIELD_PHOTO']) && isset($this->aInputs[$CNF['FIELD_PHOTO']])) {
+            $this->aInputs[$CNF['FIELD_PHOTO']]['storage_object'] = $CNF['OBJECT_STORAGE_PHOTOS'];
+            $this->aInputs[$CNF['FIELD_PHOTO']]['uploaders'] = !empty($this->aInputs[$CNF['FIELD_PHOTO']]['value']) ? unserialize($this->aInputs[$CNF['FIELD_PHOTO']]['value']) : $CNF['OBJECT_UPLOADERS'];
+            $this->aInputs[$CNF['FIELD_PHOTO']]['images_transcoder'] = $CNF['OBJECT_IMAGES_TRANSCODER_PREVIEW_PHOTOS'];
+            $this->aInputs[$CNF['FIELD_PHOTO']]['storage_private'] = 0;
+            $this->aInputs[$CNF['FIELD_PHOTO']]['multiple'] = true;
+            $this->aInputs[$CNF['FIELD_PHOTO']]['content_id'] = 0;
+            $this->aInputs[$CNF['FIELD_PHOTO']]['ghost_template'] = '';
+            $this->aInputs[$CNF['FIELD_PHOTO']]['tr_attrs'] = array('class'=> 'bx-base-text-attachment-item');
+        }
+
+        if(isset($this->aInputs[$CNF['FIELD_VIDEO']])) {
+            $this->aInputs[$CNF['FIELD_VIDEO']]['storage_object'] = $CNF['OBJECT_STORAGE_VIDEOS'];
+            $this->aInputs[$CNF['FIELD_VIDEO']]['uploaders'] = !empty($this->aInputs[$CNF['FIELD_VIDEO']]['value']) ? unserialize($this->aInputs[$CNF['FIELD_VIDEO']]['value']) : $CNF['OBJECT_UPLOADERS'];
+            $this->aInputs[$CNF['FIELD_VIDEO']]['images_transcoder'] = $CNF['OBJECT_VIDEOS_TRANSCODERS']['poster_preview'];
+            $this->aInputs[$CNF['FIELD_VIDEO']]['storage_private'] = 0;
+            $this->aInputs[$CNF['FIELD_VIDEO']]['multiple'] = true;
+            $this->aInputs[$CNF['FIELD_VIDEO']]['content_id'] = 0;
+            $this->aInputs[$CNF['FIELD_VIDEO']]['ghost_template'] = '';
+            $this->aInputs[$CNF['FIELD_VIDEO']]['tr_attrs'] = array('class'=> 'bx-base-text-attachment-item');
+        }
+
+        if (isset($CNF['FIELD_FILE']) && 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'] = $CNF['OBJECT_IMAGES_TRANSCODER_PREVIEW_FILES'];
+            $this->aInputs[$CNF['FIELD_FILE']]['storage_private'] = 0;
+            $this->aInputs[$CNF['FIELD_FILE']]['multiple'] = true;
+            $this->aInputs[$CNF['FIELD_FILE']]['content_id'] = 0;
+            $this->aInputs[$CNF['FIELD_FILE']]['ghost_template'] = '';
+            $this->aInputs[$CNF['FIELD_FILE']]['tr_attrs'] = array('class'=> 'bx-base-text-attachment-item');
+        }
+
+        if(isset($this->aInputs[$CNF['FIELD_POLL']])) {
+            $this->aInputs[$CNF['FIELD_POLL']]['tr_attrs'] = array('class'=> 'bx-base-text-attachment-item');
+        }
+    }
+
+    function initChecker ($aValues = array (), $aSpecificValues = array())
+    {
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
+        $bValues = $aValues && !empty($aValues['id']);
+        $aContentInfo = $bValues ? $this->_oModule->_oDb->getContentInfoById($aValues['id']) : false;
+
+        if (isset($CNF['FIELD_COVER']) && isset($this->aInputs[$CNF['FIELD_COVER']])) {
+            if($bValues)
+                $this->aInputs[$CNF['FIELD_COVER']]['content_id'] = $aValues['id'];
+
+            $this->aInputs[$CNF['FIELD_COVER']]['ghost_template'] = $this->_oModule->_oTemplate->parseHtmlByName($this->_sGhostTemplateCover, $this->_getCoverGhostTmplVars($aContentInfo));
+        }
+
+        parent::initChecker ($aValues, $aSpecificValues);
     }
 
     public function insert($aValsToAdd = array(), $isIgnore = false)
@@ -27,7 +103,11 @@ class BxForumFormEntry extends BxBaseModTextFormEntry
         $aValsToAdd['lr_timestamp'] = time();
         $aValsToAdd['lr_profile_id'] = (isset($CNF['FIELD_ANONYMOUS']) && isset($this->aInputs[$CNF['FIELD_ANONYMOUS']]) && $this->getCleanValue($CNF['FIELD_ANONYMOUS']) ? -1 : 1) * bx_get_logged_profile_id();
 
-        return parent::insert($aValsToAdd, $isIgnore);
+        $iContentId =  parent::insert($aValsToAdd, $isIgnore);
+        if(!empty($iContentId)){
+            $this->processFiles($CNF['FIELD_COVER'], $iContentId, true);
+        }
+        return $iContentId;
     }
 
     function update ($iContentId, $aValsToAdd = array(), &$aTrackTextFieldsChanges = null)
@@ -37,8 +117,10 @@ class BxForumFormEntry extends BxBaseModTextFormEntry
         $aContentInfo = $this->_oModule->_oDb->getContentInfoById ($iContentId);
         if (isset($CNF['FIELD_ANONYMOUS']) && isset($this->aInputs[$CNF['FIELD_ANONYMOUS']]) && !$aContentInfo['lr_comment_id'])
             $aValsToAdd['lr_profile_id'] = ($this->getCleanValue($CNF['FIELD_ANONYMOUS']) ? -1 : 1) * abs($aContentInfo['lr_profile_id']);
-            
-        return parent::update ($iContentId, $aValsToAdd, $aTrackTextFieldsChanges);
+
+        $iResult = parent::update ($iContentId, $aValsToAdd, $aTrackTextFieldsChanges);
+        $this->processFiles($CNF['FIELD_COVER'], $iContentId, false);   
+        return $iResult;
     }
     
     public function delete ($iContentId, $aContentInfo = array())
@@ -53,6 +135,30 @@ class BxForumFormEntry extends BxBaseModTextFormEntry
 
         return $mixedResult;
     }
+
+    protected function _getCoverGhostTmplVars($aContentInfo = array())
+    {
+    	$CNF = &$this->_oModule->_oConfig->CNF;
+
+    	return array (
+            'name' => $this->aInputs[$CNF['FIELD_COVER']]['name'],
+            'content_id' => $this->aInputs[$CNF['FIELD_COVER']]['content_id'],
+            'editor_id' => isset($CNF['FIELD_TEXT_ID']) ? $CNF['FIELD_TEXT_ID'] : '',
+            'thumb_id' => isset($CNF['FIELD_THUMB']) && isset($aContentInfo[$CNF['FIELD_THUMB']]) ? $aContentInfo[$CNF['FIELD_THUMB']] : 0,
+            'name_thumb' => isset($CNF['FIELD_THUMB']) ? $CNF['FIELD_THUMB'] : ''
+        );
+    }
+
+    protected function _getPhotoGhostTmplVars($aContentInfo = array())
+    {
+    	$CNF = &$this->_oModule->_oConfig->CNF;
+
+    	return array (
+            'name' => $this->aInputs[$CNF['FIELD_PHOTO']]['name'],
+            'content_id' => (int)$this->aInputs[$CNF['FIELD_PHOTO']]['content_id'],
+            'editor_id' => isset($CNF['FIELD_TEXT_ID']) ? $CNF['FIELD_TEXT_ID'] : ''
+    	);
+    }
 }
 
 /** @} */

+ 25 - 0
modules/boonex/forum/classes/BxForumFormPoll.php

@@ -0,0 +1,25 @@
+<?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 BxForumFormPoll extends BxBaseModTextFormPoll
+{
+    public function __construct($aInfo, $oTemplate = false)
+    {
+        $this->_sModule = 'bx_forum';
+        $this->_aFieldsCheckForSpam = array('answers');
+
+        parent::__construct($aInfo, $oTemplate);
+    }
+}
+
+class BxForumFormPollCheckerHelper extends BxBaseModTextFormPollCheckerHelper {}
+
+/** @} */

+ 22 - 0
modules/boonex/forum/classes/BxForumMenuAttachments.php

@@ -0,0 +1,22 @@
+<?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 BxForumMenuAttachments extends BxBaseModTextMenuAttachments
+{
+    public function __construct($aObject, $oTemplate = false)
+    {
+        $this->_sModule = 'bx_forum';
+
+        parent::__construct($aObject, $oTemplate);
+    }
+}
+
+/** @} */

+ 3 - 4
modules/boonex/forum/classes/BxForumUploaderHTML5.php

@@ -9,14 +9,13 @@
  * @{
  */
 
-class BxForumUploaderHTML5 extends BxTemplUploaderHTML5
+class BxForumUploaderHTML5 extends BxBaseModTextUploaderHTML5
 {
-    protected $_oModule;
-
     public function __construct ($aObject, $sStorageObject, $sUniqId, $oTemplate)
     {
+        $this->_sModule = 'bx_forum';
+
         parent::__construct($aObject, $sStorageObject, $sUniqId, $oTemplate);
-        $this->_oModule = BxDolModule::getInstance('bx_forum');
     }
 
     protected function isAdmin ($iContentId = 0)

+ 27 - 0
modules/boonex/forum/classes/BxForumUploaderHTML5Attach.php

@@ -0,0 +1,27 @@
+<?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 BxForumUploaderHTML5Attach extends BxBaseModTextUploaderHTML5Attach
+{
+    public function __construct ($aObject, $sStorageObject, $sUniqId, $oTemplate)
+    {
+        $this->_sModule = 'bx_forum';
+
+        parent::__construct($aObject, $sStorageObject, $sUniqId, $oTemplate);
+    }
+
+    protected function isAdmin ($iContentId = 0)
+    {
+        return $this->_oModule->_isModerator (false);
+    }
+}
+
+/** @} */

+ 3 - 4
modules/boonex/forum/classes/BxForumUploaderSimple.php

@@ -9,14 +9,13 @@
  * @{
  */
 
-class BxForumUploaderSimple extends BxTemplUploaderSimple
+class BxForumUploaderSimple extends BxBaseModTextUploaderSimple
 {
-    protected $_oModule;
-
     public function __construct ($aObject, $sStorageObject, $sUniqId, $oTemplate)
     {
+        $this->_sModule = 'bx_forum';
+
         parent::__construct($aObject, $sStorageObject, $sUniqId, $oTemplate);
-        $this->_oModule = BxDolModule::getInstance('bx_forum');
     }
 
     protected function isAdmin ($iContentId = 0)

+ 27 - 0
modules/boonex/forum/classes/BxForumUploaderSimpleAttach.php

@@ -0,0 +1,27 @@
+<?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 BxForumUploaderSimpleAttach extends BxBaseModTextUploaderSimpleAttach
+{
+    public function __construct ($aObject, $sStorageObject, $sUniqId, $oTemplate)
+    {
+        $this->_sModule = 'bx_forum';
+
+        parent::__construct($aObject, $sStorageObject, $sUniqId, $oTemplate);
+    }
+
+    protected function isAdmin ($iContentId = 0)
+    {
+        return $this->_oModule->_isModerator (false);
+    }
+}
+
+/** @} */

+ 22 - 0
modules/boonex/forum/classes/BxForumVotePollAnswers.php

@@ -0,0 +1,22 @@
+<?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 BxForumVotePollAnswers extends BxBaseModTextVotePollAnswers
+{
+    function __construct($sSystem, $iId, $iInit = 1)
+    {
+    	$this->_sModule = 'bx_forum';
+
+        parent::__construct($sSystem, $iId, $iInit);
+    }
+}
+
+/** @} */

+ 91 - 42
modules/boonex/forum/install/langs/en.xml

@@ -1,40 +1,51 @@
 <?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_reactions"><![CDATA[Discussions's Reactions]]></string>
+    <string name="_bx_forum"><![CDATA[Discussions]]></string>
+    <string name="_bx_forum_cmts"><![CDATA[Discussions's Comments]]></string>
+    <string name="_bx_forum_reactions"><![CDATA[Discussions's Reactions]]></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_option_auto_activation_for_categories"><![CDATA[Auto-Activation For Categories]]></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_option_auto_activation_for_categories"><![CDATA[Auto-Activation For Categories]]></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"><![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_sys_covers"><![CDATA[Header Image]]></string>
+    <string name="_bx_forum_form_entry_input_covers"><![CDATA[Header Image]]></string>
+    <string name="_bx_forum_form_entry_input_covers_uploader_simple_title"><![CDATA[Upload]]></string>
+    <string name="_bx_forum_form_entry_input_covers_uploader_html5_title"><![CDATA[Upload]]></string>
+    <string name="_bx_forum_form_entry_input_sys_pictures"><![CDATA[Images]]></string>
+    <string name="_bx_forum_form_entry_input_pictures"><![CDATA[]]></string>
+    <string name="_bx_forum_form_entry_input_sys_videos"><![CDATA[Videos]]></string>
+    <string name="_bx_forum_form_entry_input_videos"><![CDATA[]]></string>
+    <string name="_bx_forum_form_entry_input_sys_files"><![CDATA[Files]]></string>
+    <string name="_bx_forum_form_entry_input_files"><![CDATA[]]></string>
+    <string name="_bx_forum_form_entry_input_sys_polls"><![CDATA[Polls]]></string>
+    <string name="_bx_forum_form_entry_input_media"><![CDATA[Media]]></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>
@@ -50,16 +61,30 @@
     <string name="_bx_forum_form_entry_input_sys_multicat"><![CDATA[Categories]]></string>
     <string name="_bx_forum_form_entry_input_multicat"><![CDATA[Categories]]></string>
     <string name="_bx_forum_form_entry_input_multicat_err"><![CDATA[Please select category]]></string>
+
+    <string name="_bx_forum_form_poll"><![CDATA[Polls]]></string>
+    <string name="_bx_forum_form_poll_display_add"><![CDATA[Add Poll]]></string>
+    <string name="_bx_forum_form_poll_input_sys_text"><![CDATA[Question]]></string>
+    <string name="_bx_forum_form_poll_input_text"><![CDATA[Question]]></string>
+    <string name="_bx_forum_form_poll_input_text_err"><![CDATA[Question is essential. Please, fill in this field]]></string>
+    <string name="_bx_forum_form_poll_input_sys_answers"><![CDATA[Answers]]></string>
+    <string name="_bx_forum_form_poll_input_answers"><![CDATA[Answers]]></string>
+    <string name="_bx_forum_form_poll_input_answers_err"><![CDATA[Poll should have at least 2 non-empty answers.]]></string>
+    <string name="_bx_forum_form_poll_input_answers_add"><![CDATA[Add More]]></string>
+    <string name="_bx_forum_form_poll_input_sys_do_submit"><![CDATA[Add]]></string>
+    <string name="_bx_forum_form_poll_input_do_submit"><![CDATA[Add]]></string>
+    <string name="_bx_forum_form_poll_input_do_cancel"><![CDATA[Close]]></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_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>
@@ -83,6 +108,7 @@
 	<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_polls"><![CDATA[Polls]]></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>
@@ -173,7 +199,24 @@
     <string name="_bx_forum_page_title_sys_entries_partaken"><![CDATA[Partaken]]></string>
     <string name="_bx_forum_page_title_entries_partaken"><![CDATA[Partaken]]></string>
     <string name="_bx_forum_page_block_title_partaken_entries"><![CDATA[Partaken]]></string>
-    
+
+    <string name="_bx_forum_menu_title_entry_attachments"><![CDATA[Form Attachments]]></string>
+    <string name="_bx_forum_menu_set_title_entry_attachments"><![CDATA[Form Attachments]]></string>
+    <string name="_bx_forum_menu_item_title_system_cpa_photo_simple"><![CDATA[Add Photo (simple)]]></string>
+    <string name="_bx_forum_menu_item_title_cpa_photo_simple"><![CDATA[Add Photo]]></string>
+    <string name="_bx_forum_menu_item_title_system_cpa_photo_html5"><![CDATA[Add Photo (html5)]]></string>
+    <string name="_bx_forum_menu_item_title_cpa_photo_html5"><![CDATA[Add Photos]]></string>
+    <string name="_bx_forum_menu_item_title_system_cpa_video_simple"><![CDATA[Add Video (simple)]]></string>
+    <string name="_bx_forum_menu_item_title_cpa_video_simple"><![CDATA[Add Video]]></string>
+    <string name="_bx_forum_menu_item_title_system_cpa_video_html5"><![CDATA[Add Video (html5)]]></string>
+    <string name="_bx_forum_menu_item_title_cpa_video_html5"><![CDATA[Add Videos]]></string>
+    <string name="_bx_forum_menu_item_title_system_cpa_file_simple"><![CDATA[Add File (simple)]]></string>
+    <string name="_bx_forum_menu_item_title_cpa_file_simple"><![CDATA[Add File]]></string>
+    <string name="_bx_forum_menu_item_title_system_cpa_file_html5"><![CDATA[Add File (html5)]]></string>
+    <string name="_bx_forum_menu_item_title_cpa_file_html5"><![CDATA[Add Files]]></string>
+    <string name="_bx_forum_menu_item_title_system_cpa_poll"><![CDATA[Add Poll]]></string>
+    <string name="_bx_forum_menu_item_title_cpa_poll"><![CDATA[Add Poll]]></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>
@@ -297,6 +340,12 @@
     <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_poll_view_answers"><![CDATA[poll]]></string>
+    <string name="_bx_forum_txt_poll_view_results"><![CDATA[results]]></string>
+    <string name="_bx_forum_txt_poll_answer_vote_do_by"><![CDATA[Voted for]]></string>
+    <string name="_bx_forum_txt_poll_answer_vote_counter"><![CDATA[{0} votes]]></string>
+    <string name="_bx_forum_txt_poll_answer_vote_percent"><![CDATA[({0}%)]]></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>

+ 4 - 2
modules/boonex/forum/install/sql/disable.sql

@@ -17,7 +17,7 @@ DELETE FROM `sys_pages_blocks` WHERE `module` = @sName OR `object` LIKE 'bx_foru
 -- MENU
 DELETE FROM `sys_objects_menu` WHERE `module` = @sName;
 DELETE FROM `sys_menu_sets` WHERE `module` = @sName;
-DELETE FROM `sys_menu_items` WHERE `module` = @sName OR `set_name` IN('bx_forum_view', 'bx_forum_view_more', 'bx_forum_view_actions', 'bx_forum_submenu', 'bx_forum_my', 'bx_forum_snippet_meta_main', 'bx_forum_snippet_meta_counters', 'bx_forum_snippet_meta_reply', 'bx_forum_menu_manage_tools');
+DELETE FROM `sys_menu_items` WHERE `module` = @sName OR `set_name` IN('bx_forum_entry_attachments',  'bx_forum_view', 'bx_forum_view_more', 'bx_forum_view_actions', 'bx_forum_submenu', 'bx_forum_my', 'bx_forum_snippet_meta_main', 'bx_forum_snippet_meta_counters', 'bx_forum_snippet_meta_reply', 'bx_forum_menu_manage_tools');
 
 
 -- GRID
@@ -58,8 +58,10 @@ DELETE FROM `sys_statistics` WHERE `name` LIKE 'bx_forum%';
 -- CHARTS
 DELETE FROM `sys_objects_chart` WHERE `object` LIKE 'bx_forum%';
 
+
 -- UPLOADERS
-DELETE FROM `sys_objects_uploader` WHERE `object` IN('bx_forum_simple', 'bx_forum_html5');
+DELETE FROM `sys_objects_uploader` WHERE `object` LIKE 'bx_forum_%';
+
 
 -- ALERTS
 SET @iHandler := (SELECT `id` FROM `sys_alerts_handlers` WHERE `name` = @sName LIMIT 1);

+ 27 - 3
modules/boonex/forum/install/sql/enable.sql

@@ -59,7 +59,8 @@ INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system`, `t
 ('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', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_forum";s:6:"method";s:15:"entity_comments";}', 0, 0, 1, 3);
+('bx_forum_view_entry', 2, @sName, '', '_bx_forum_page_block_title_entry_polls', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_forum";s:6:"method";s:12:"entity_polls";}', 0, 0, 1, 3),
+('bx_forum_view_entry', 2, @sName,'', '_bx_forum_page_block_title_entry_comments', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_forum";s:6:"method";s:15:"entity_comments";}', 0, 0, 1, 4);
 
 -- 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 
@@ -209,6 +210,22 @@ SET @iAddMenuOrder = (SELECT `order` FROM `sys_menu_items` WHERE `set_name` = 's
 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: create post form attachments (link, photo, video, etc)
+INSERT INTO `sys_objects_menu`(`object`, `title`, `set_name`, `module`, `template_id`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES 
+('bx_forum_entry_attachments', '_bx_forum_menu_title_entry_attachments', 'bx_forum_entry_attachments', @sName, 23, 0, 1, 'BxForumMenuAttachments', 'modules/boonex/forum/classes/BxForumMenuAttachments.php');
+
+INSERT INTO `sys_menu_sets`(`set_name`, `module`, `title`, `deletable`) VALUES 
+('bx_forum_entry_attachments', @sName, '_bx_forum_menu_set_title_entry_attachments', 0);
+
+INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `addon`, `submenu_object`, `visible_for_levels`, `visibility_custom`, `active`, `copyable`, `editable`, `order`) VALUES 
+('bx_forum_entry_attachments', @sName, 'photo_simple', '_bx_forum_menu_item_title_system_cpa_photo_simple', '_bx_forum_menu_item_title_cpa_photo_simple', 'javascript:void(0)', 'javascript:{js_object_uploader_photos_simple}.showUploaderForm();', '_self', 'camera', '', '', 2147483647, '', 0, 0, 1, 1),
+('bx_forum_entry_attachments', @sName, 'photo_html5', '_bx_forum_menu_item_title_system_cpa_photo_html5', '_bx_forum_menu_item_title_cpa_photo_html5', 'javascript:void(0)', 'javascript:{js_object_uploader_photos_html5}.showUploaderForm();', '_self', 'camera', '', '', 2147483647, '', 1, 0, 1, 2),
+('bx_forum_entry_attachments', @sName, 'video_simple', '_bx_forum_menu_item_title_system_cpa_video_simple', '_bx_forum_menu_item_title_cpa_video_simple', 'javascript:void(0)', 'javascript:{js_object_uploader_videos_simple}.showUploaderForm();', '_self', 'video', '', '', 2147483647, '', 0, 0, 1, 3),
+('bx_forum_entry_attachments', @sName, 'video_html5', '_bx_forum_menu_item_title_system_cpa_video_html5', '_bx_forum_menu_item_title_cpa_video_html5', 'javascript:void(0)', 'javascript:{js_object_uploader_videos_html5}.showUploaderForm();', '_self', 'video', '', '', 2147483647, '', 1, 0, 1, 4),
+('bx_forum_entry_attachments', @sName, 'file_simple', '_bx_forum_menu_item_title_system_cpa_file_simple', '_bx_forum_menu_item_title_cpa_file_simple', 'javascript:void(0)', 'javascript:{js_object_uploader_files_simple}.showUploaderForm();', '_self', 'file', '', '', 2147483647, '', 0, 0, 1, 5),
+('bx_forum_entry_attachments', @sName, 'file_html5', '_bx_forum_menu_item_title_system_cpa_file_html5', '_bx_forum_menu_item_title_cpa_file_html5', 'javascript:void(0)', 'javascript:{js_object_uploader_files_html5}.showUploaderForm();', '_self', 'file', '', '', 2147483647, '', 1, 0, 1, 6),
+('bx_forum_entry_attachments', @sName, 'poll', '_bx_forum_menu_item_title_system_cpa_poll', '_bx_forum_menu_item_title_cpa_poll', 'javascript:void(0)', 'javascript:{js_object}.showPollForm(this);', '_self', 'tasks', '', '', 2147483647, '', 1, 0, 1, 7);
+
 -- MENU: actions menu for view entry 
 INSERT INTO `sys_objects_menu`(`object`, `title`, `set_name`, `module`, `template_id`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES 
 ('bx_forum_view', '_bx_forum_menu_title_view_entry', 'bx_forum_view', @sName, 9, 0, 1, 'BxForumMenuView', 'modules/boonex/forum/classes/BxForumMenuView.php');
@@ -550,11 +567,18 @@ INSERT INTO `sys_objects_chart` (`object`, `title`, `table`, `field_date_ts`, `f
 ('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
 
+-- 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');
+('bx_forum_html5', 1, 'BxForumUploaderHTML5', 'modules/boonex/forum/classes/BxForumUploaderHTML5.php'),
+('bx_forum_photos_simple', 1, 'BxForumUploaderSimpleAttach', 'modules/boonex/forum/classes/BxForumUploaderSimpleAttach.php'),
+('bx_forum_photos_html5', 1, 'BxForumUploaderHTML5Attach', 'modules/boonex/forum/classes/BxForumUploaderHTML5Attach.php'),
+('bx_forum_videos_simple', 1, 'BxForumUploaderSimpleAttach', 'modules/boonex/forum/classes/BxForumUploaderSimpleAttach.php'),
+('bx_forum_videos_html5', 1, 'BxForumUploaderHTML5Attach', 'modules/boonex/forum/classes/BxForumUploaderHTML5Attach.php'),
+('bx_forum_files_simple', 1, 'BxForumUploaderSimpleAttach', 'modules/boonex/forum/classes/BxForumUploaderSimpleAttach.php'),
+('bx_forum_files_html5', 1, 'BxForumUploaderHTML5Attach', 'modules/boonex/forum/classes/BxForumUploaderHTML5Attach.php');
+
 
 -- ALERTS
 INSERT INTO `sys_alerts_handlers` (`name`, `class`, `file`, `service_call`) VALUES 

+ 192 - 14
modules/boonex/forum/install/sql/install.sql

@@ -46,6 +46,22 @@ CREATE TABLE IF NOT EXISTS `bx_forum_categories` (
 );
 
 -- TABLE: storages & transcoders
+CREATE TABLE IF NOT EXISTS `bx_forum_covers` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `profile_id` int(10) unsigned NOT NULL,
+  `remote_id` varchar(128) NOT NULL,
+  `path` varchar(255) NOT NULL,
+  `file_name` varchar(255) NOT NULL,
+  `mime_type` varchar(128) NOT NULL,
+  `ext` varchar(32) NOT NULL,
+  `size` bigint(20) NOT NULL,
+  `added` int(11) NOT NULL,
+  `modified` int(11) NOT NULL,
+  `private` int(11) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `remote_id` (`remote_id`)
+);
+
 CREATE TABLE IF NOT EXISTS `bx_forum_files` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `profile_id` int(10) unsigned NOT NULL,
@@ -62,6 +78,22 @@ CREATE TABLE IF NOT EXISTS `bx_forum_files` (
   UNIQUE KEY `remote_id` (`remote_id`)
 );
 
+CREATE TABLE IF NOT EXISTS `bx_forum_photos` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `profile_id` int(10) unsigned NOT NULL,
+  `remote_id` varchar(128) NOT NULL,
+  `path` varchar(255) NOT NULL,
+  `file_name` varchar(255) NOT NULL,
+  `mime_type` varchar(128) NOT NULL,
+  `ext` varchar(32) NOT NULL,
+  `size` bigint(20) NOT NULL,
+  `added` int(11) NOT NULL,
+  `modified` int(11) NOT NULL,
+  `private` int(11) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `remote_id` (`remote_id`)
+);
+
 CREATE TABLE IF NOT EXISTS `bx_forum_photos_resized` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `profile_id` int(10) unsigned NOT NULL,
@@ -78,6 +110,38 @@ CREATE TABLE IF NOT EXISTS `bx_forum_photos_resized` (
   UNIQUE KEY `remote_id` (`remote_id`)
 );
 
+CREATE TABLE IF NOT EXISTS `bx_forum_videos` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `profile_id` int(10) unsigned NOT NULL,
+  `remote_id` varchar(128) NOT NULL,
+  `path` varchar(255) NOT NULL,
+  `file_name` varchar(255) NOT NULL,
+  `mime_type` varchar(128) NOT NULL,
+  `ext` varchar(32) NOT NULL,
+  `size` bigint(20) NOT NULL,
+  `added` int(11) NOT NULL,
+  `modified` int(11) NOT NULL,
+  `private` int(11) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `remote_id` (`remote_id`)
+);
+
+CREATE TABLE IF NOT EXISTS `bx_forum_videos_resized` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `profile_id` int(10) unsigned NOT NULL,
+  `remote_id` varchar(128) NOT NULL,
+  `path` varchar(255) NOT NULL,
+  `file_name` varchar(255) NOT NULL,
+  `mime_type` varchar(128) NOT NULL,
+  `ext` varchar(32) NOT NULL,
+  `size` bigint(20) NOT NULL,
+  `added` int(11) NOT NULL,
+  `modified` int(11) NOT NULL,
+  `private` int(11) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `remote_id` (`remote_id`)
+);
+
 -- TABLE: subscribers
 CREATE TABLE IF NOT EXISTS `bx_forum_subscribers` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
@@ -217,24 +281,101 @@ CREATE TABLE IF NOT EXISTS `bx_forum_scores_track` (
   KEY `vote` (`object_id`, `author_nip`)
 );
 
+-- TABLE: polls
+CREATE TABLE IF NOT EXISTS `bx_forum_polls` (
+  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+  `author_id` int(11) NOT NULL default '0',
+  `content_id` int(11) NOT NULL default '0',
+  `text` text NOT NULL,
+  PRIMARY KEY (`id`),
+  KEY `content_id` (`content_id`),
+  FULLTEXT KEY `search_fields` (`text`)
+);
+
+CREATE TABLE IF NOT EXISTS `bx_forum_polls_answers` (
+  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+  `poll_id` int(11) unsigned NOT NULL default '0',
+  `title` varchar(255) NOT NULL,
+  `rate` float NOT NULL default '0',
+  `votes` int(11) NOT NULL default '0',
+  `order` int(11) NOT NULL default '0',
+  PRIMARY KEY (`id`),
+  KEY `poll_id` (`poll_id`),
+  FULLTEXT KEY `title` (`title`)
+);
+
+CREATE TABLE IF NOT EXISTS `bx_forum_polls_answers_votes` (
+  `object_id` int(11) NOT NULL default '0',
+  `count` int(11) NOT NULL default '0',
+  `sum` int(11) NOT NULL default '0',
+  UNIQUE KEY `object_id` (`object_id`)
+);
+
+CREATE TABLE IF NOT EXISTS `bx_forum_polls_answers_votes_track` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `object_id` int(11) NOT NULL default '0',
+  `author_id` int(11) NOT NULL default '0',
+  `author_nip` int(11) unsigned NOT NULL default '0',
+  `value` tinyint(4) NOT NULL default '0',
+  `date` int(11) NOT NULL default '0',
+  PRIMARY KEY (`id`),
+  KEY `vote` (`object_id`, `author_nip`)
+);
+
 
 -- STORAGES & TRANSCODERS
 INSERT INTO `sys_objects_storage` (`object`, `engine`, `params`, `token_life`, `cache_control`, `levels`, `table_files`, `ext_mode`, `ext_allow`, `ext_deny`, `quota_size`, `current_size`, `quota_number`, `current_number`, `max_file_size`, `ts`) VALUES
+('bx_forum_covers', @sStorageEngine, '', 360, 2592000, 3, 'bx_forum_covers', 'deny-allow', '', 'action,apk,app,bat,bin,cmd,com,command,cpl,csh,exe,gadget,inf,ins,inx,ipa,isu,job,jse,ksh,lnk,msc,msi,msp,mst,osx,out,paf,pif,prg,ps1,reg,rgs,run,sct,shb,shs,u3p,vb,vbe,vbs,vbscript,workflow,ws,wsf', 0, 0, 0, 0, 0, 0),
+
+('bx_forum_photos', @sStorageEngine, '', 360, 2592000, 3, 'bx_forum_photos', 'allow-deny', 'jpg,jpeg,jpe,gif,png', '', 0, 0, 0, 0, 0, 0),
+('bx_forum_photos_resized', @sStorageEngine, '', 360, 2592000, 3, 'bx_forum_photos_resized', 'allow-deny', 'jpg,jpeg,jpe,gif,png', '', 0, 0, 0, 0, 0, 0),
+
+('bx_forum_videos', @sStorageEngine, '', 360, 2592000, 3, 'bx_forum_videos', 'allow-deny', 'avi,flv,mpg,mpeg,wmv,mp4,m4v,mov,qt,divx,xvid,3gp,3g2,webm,mkv,ogv,ogg,rm,rmvb,asf,drc', '', 0, 0, 0, 0, 0, 0),
+('bx_forum_videos_resized', @sStorageEngine, '', 360, 2592000, 3, 'bx_forum_videos_resized', 'allow-deny', 'jpg,jpeg,jpe,gif,png,avi,flv,mpg,mpeg,wmv,mp4,m4v,mov,qt,divx,xvid,3gp,3g2,webm,mkv,ogv,ogg,rm,rmvb,asf,drc', '', 0, 0, 0, 0, 0, 0),
+
 ('bx_forum_files', @sStorageEngine, '', 360, 2592000, 3, 'bx_forum_files', 'deny-allow', '', 'action,apk,app,bat,bin,cmd,com,command,cpl,csh,exe,gadget,inf,ins,inx,ipa,isu,job,jse,ksh,lnk,msc,msi,msp,mst,osx,out,paf,pif,prg,ps1,reg,rgs,run,sct,shb,shs,u3p,vb,vbe,vbs,vbscript,workflow,ws,wsf', 0, 0, 0, 0, 0, 0),
-('bx_forum_files_cmts', @sStorageEngine, '', 360, 2592000, 3, 'bx_forum_files', 'deny-allow', '', 'action,apk,app,bat,bin,cmd,com,command,cpl,csh,exe,gadget,inf,ins,inx,ipa,isu,job,jse,ksh,lnk,msc,msi,msp,mst,osx,out,paf,pif,prg,ps1,reg,rgs,run,sct,shb,shs,u3p,vb,vbe,vbs,vbscript,workflow,ws,wsf', 0, 0, 0, 0, 0, 0),
-('bx_forum_photos_resized', @sStorageEngine, '', 360, 2592000, 3, 'bx_forum_photos_resized', 'allow-deny', 'jpg,jpeg,jpe,gif,png', '', 0, 0, 0, 0, 0, 0);
+
+-- For Comments
+('bx_forum_files_cmts', @sStorageEngine, '', 360, 2592000, 3, 'bx_forum_files', 'deny-allow', '', 'action,apk,app,bat,bin,cmd,com,command,cpl,csh,exe,gadget,inf,ins,inx,ipa,isu,job,jse,ksh,lnk,msc,msi,msp,mst,osx,out,paf,pif,prg,ps1,reg,rgs,run,sct,shb,shs,u3p,vb,vbe,vbs,vbscript,workflow,ws,wsf', 0, 0, 0, 0, 0, 0);
 
 INSERT INTO `sys_objects_transcoder` (`object`, `storage_object`, `source_type`, `source_params`, `private`, `atime_tracking`, `atime_pruning`, `ts`, `override_class_name`, `override_class_file`) VALUES 
-('bx_forum_preview', 'bx_forum_photos_resized', 'Storage', 'a:1:{s:6:"object";s:14:"bx_forum_files";}', 'no', '1', '2592000', '0', '', ''),
-('bx_forum_preview_cmts', 'bx_forum_photos_resized', 'Storage', 'a:1:{s:6:"object";s:19:"bx_forum_files_cmts";}', 'no', '1', '2592000', '0', '', ''),
-('bx_forum_gallery', 'bx_forum_photos_resized', 'Storage', 'a:1:{s:6:"object";s:14:"bx_forum_files";}', 'no', '1', '2592000', '0', '', ''),
-('bx_forum_cover', 'bx_forum_photos_resized', 'Storage', 'a:1:{s:6:"object";s:14:"bx_forum_files";}', 'no', '1', '2592000', '0', '', '');
+('bx_forum_preview', 'bx_forum_photos_resized', 'Storage', 'a:1:{s:6:"object";s:15:"bx_forum_covers";}', 'no', '1', '2592000', '0', '', ''),
+('bx_forum_gallery', 'bx_forum_photos_resized', 'Storage', 'a:1:{s:6:"object";s:15:"bx_forum_covers";}', 'no', '1', '2592000', '0', '', ''),
+('bx_forum_cover', 'bx_forum_photos_resized', 'Storage', 'a:1:{s:6:"object";s:15:"bx_forum_covers";}', 'no', '1', '2592000', '0', '', ''),
+
+('bx_forum_preview_photos', 'bx_forum_photos_resized', 'Storage', 'a:1:{s:6:"object";s:15:"bx_forum_photos";}', 'no', '1', '2592000', '0', '', ''),
+('bx_forum_gallery_photos', 'bx_forum_photos_resized', 'Storage', 'a:1:{s:6:"object";s:15:"bx_forum_photos";}', 'no', '1', '2592000', '0', '', ''),
+
+('bx_forum_videos_poster', 'bx_forum_videos_resized', 'Storage', 'a:1:{s:6:"object";s:15:"bx_forum_videos";}', 'no', '0', '0', '0', 'BxDolTranscoderVideo', ''),
+('bx_forum_videos_poster_preview', 'bx_forum_videos_resized', 'Storage', 'a:1:{s:6:"object";s:15:"bx_forum_videos";}', 'no', '0', '0', '0', 'BxDolTranscoderVideo', ''),
+('bx_forum_videos_mp4', 'bx_forum_videos_resized', 'Storage', 'a:1:{s:6:"object";s:15:"bx_forum_videos";}', 'no', '0', '0', '0', 'BxDolTranscoderVideo', ''),
+('bx_forum_videos_mp4_hd', 'bx_forum_videos_resized', 'Storage', 'a:1:{s:6:"object";s:15:"bx_forum_videos";}', 'no', '0', '0', '0', 'BxDolTranscoderVideo', ''),
+
+('bx_forum_preview_files', 'bx_forum_photos_resized', 'Storage', 'a:1:{s:6:"object";s:14:"bx_forum_files";}', 'no', '1', '2592000', '0', '', ''),
+('bx_forum_gallery_files', 'bx_forum_photos_resized', 'Storage', 'a:1:{s:6:"object";s:14:"bx_forum_files";}', 'no', '1', '2592000', '0', '', ''),
+
+-- For Comments
+('bx_forum_preview_cmts', 'bx_forum_photos_resized', 'Storage', 'a:1:{s:6:"object";s:19:"bx_forum_files_cmts";}', 'no', '1', '2592000', '0', '', '');
 
 INSERT INTO `sys_transcoder_filters` (`transcoder_object`, `filter`, `filter_params`, `order`) VALUES 
 ('bx_forum_preview', 'Resize', 'a:3:{s:1:"w";s:3:"300";s:1:"h";s:3:"200";s:11:"crop_resize";s:1:"1";}', '0'),
-('bx_forum_preview_cmts', 'Resize', 'a:4:{s:1:"w";s:3:"100";s:1:"h";s:3:"100";s:13:"square_resize";s:1:"1";s:10:"force_type";s:3:"jpg";}', '0'),
 ('bx_forum_gallery', 'Resize', 'a:1:{s:1:"w";s:3:"500";}', '0'),
-('bx_forum_cover', 'Resize', 'a:1:{s:1:"w";s:4:"2000";}', '0');
+('bx_forum_cover', 'Resize', 'a:1:{s:1:"w";s:4:"2000";}', '0'),
+
+('bx_forum_preview_photos', 'Resize', 'a:3:{s:1:"w";s:3:"300";s:1:"h";s:3:"200";s:11:"crop_resize";s:1:"1";}', '0'),
+('bx_forum_gallery_photos', 'Resize', 'a:1:{s:1:"w";s:4:"2000";}', '0'),
+
+('bx_forum_videos_poster_preview', 'Resize', 'a:3:{s:1:"w";s:3:"300";s:1:"h";s:3:"200";s:13:"square_resize";s:1:"1";}', 10),
+('bx_forum_videos_poster_preview', 'Poster', 'a:2:{s:1:"h";s:3:"480";s:10:"force_type";s:3:"jpg";}', 0),
+('bx_forum_videos_poster', 'Poster', 'a:2:{s:1:"h";s:3:"318";s:10:"force_type";s:3:"jpg";}', 0),
+('bx_forum_videos_mp4', 'Mp4', 'a:2:{s:1:"h";s:3:"318";s:10:"force_type";s:3:"mp4";}', 0),
+('bx_forum_videos_mp4_hd', 'Mp4', 'a:3:{s:1:"h";s:3:"720";s:13:"video_bitrate";s:4:"1536";s:10:"force_type";s:3:"mp4";}', 0),
+
+('bx_forum_preview_files', 'Resize', 'a:3:{s:1:"w";s:3:"300";s:1:"h";s:3:"200";s:11:"crop_resize";s:1:"1";}', '0'),
+('bx_forum_gallery_files', 'Resize', 'a:1:{s:1:"w";s:3:"500";}', '0'),
+
+-- For Comments
+('bx_forum_preview_cmts', 'Resize', 'a:4:{s:1:"w";s:3:"100";s:1:"h";s:3:"100";s:13:"square_resize";s:1:"1";s:10:"force_type";s:3:"jpg";}', '0');
 
 
 -- FORMS
@@ -258,7 +399,12 @@ INSERT INTO `sys_form_inputs`(`object`, `module`, `name`, `value`, `values`, `ch
 (@sName, @sName, 'title', '', '', 0, 'text', '_bx_forum_form_entry_input_sys_title', '_bx_forum_form_entry_input_title', '', 1, 0, 0, '', '', '', 'Avail', '', '_bx_forum_form_entry_input_title_err', 'Xss', '', 1, 0),
 (@sName, @sName, 'cat', '', '#!bx_forum_cats', 0, 'select', '_bx_forum_form_entry_input_sys_cat', '_bx_forum_form_entry_input_cat', '', 1, 0, 0, '', '', '', 'avail', '', '_bx_forum_form_entry_input_cat_err', 'Xss', '', 1, 0),
 (@sName, @sName, 'multicat', '', '', 0, 'custom', '_bx_forum_form_entry_input_sys_multicat', '_bx_forum_form_entry_input_multicat', '', 1, 0, 0, '', '', '', 'avail', '', '_bx_forum_form_entry_input_multicat_err', 'Xss', '', 1, 0),
-(@sName, @sName, 'attachments', 'a:1:{i:0;s:14:"bx_forum_html5";}', 'a:2:{s:15:"bx_forum_simple";s:26:"_sys_uploader_simple_title";s:14:"bx_forum_html5";s:25:"_sys_uploader_html5_title";}', 0, 'files', '_bx_forum_form_entry_input_sys_attachments', '_bx_forum_form_entry_input_attachments', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
+(@sName, @sName, 'attachments', '', '', 0, 'custom', '_bx_forum_form_entry_input_sys_attachments', '', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
+(@sName, @sName, 'covers', 'a:1:{i:0;s:14:"bx_forum_html5";}', 'a:2:{s:15:"bx_forum_simple";s:26:"_sys_uploader_simple_title";s:14:"bx_forum_html5";s:25:"_sys_uploader_html5_title";}', 0, 'files', '_bx_forum_form_entry_input_sys_covers', '_bx_forum_form_entry_input_covers', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
+(@sName, @sName, 'pictures', 'a:1:{i:0;s:21:"bx_forum_photos_html5";}', 'a:2:{s:22:"bx_forum_photos_simple";s:26:"_sys_uploader_simple_title";s:21:"bx_forum_photos_html5";s:25:"_sys_uploader_html5_title";}', 0, 'files', '_bx_forum_form_entry_input_sys_pictures', '_bx_forum_form_entry_input_pictures', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
+(@sName, @sName, 'videos', 'a:1:{i:0;s:21:"bx_forum_videos_html5";}', 'a:2:{s:22:"bx_forum_videos_simple";s:26:"_sys_uploader_simple_title";s:21:"bx_forum_videos_html5";s:25:"_sys_uploader_html5_title";}', 0, 'files', '_bx_forum_form_entry_input_sys_videos', '_bx_forum_form_entry_input_videos', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
+(@sName, @sName, 'files', 'a:1:{i:0;s:20:"bx_forum_files_html5";}', 'a:2:{s:21:"bx_forum_files_simple";s:26:"_sys_uploader_simple_title";s:20:"bx_forum_files_html5";s:25:"_sys_uploader_html5_title";}', 0, 'files', '_bx_forum_form_entry_input_sys_files', '_bx_forum_form_entry_input_files', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
+(@sName, @sName, 'polls', '', '', 0, 'custom', '_bx_forum_form_entry_input_sys_polls', '', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
 (@sName, @sName, 'labels', '', '', 0, 'custom', '_sys_form_input_sys_labels', '_sys_form_input_labels', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
 (@sName, @sName, 'anonymous', '', '', 0, 'switcher', '_sys_form_input_sys_anonymous', '_sys_form_input_anonymous', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
 (@sName, @sName, 'added', '', '', 0, 'datetime', '_bx_forum_form_entry_input_sys_date_added', '_bx_forum_form_entry_input_date_added', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
@@ -274,15 +420,25 @@ INSERT INTO `sys_form_display_inputs` (`display_name`, `input_name`, `visible_fo
 ('bx_forum_entry_add', 'cat', 2147483647, 1, 2),
 ('bx_forum_entry_add', 'text', 2147483647, 1, 3),
 ('bx_forum_entry_add', 'attachments', 2147483647, 1, 4),
-('bx_forum_entry_add', 'allow_view_to', 2147483647, 1, 5),
-('bx_forum_entry_add', 'do_submit', 2147483647, 1, 6),
+('bx_forum_entry_add', 'pictures', 2147483647, 1, 5),
+('bx_forum_entry_add', 'videos', 2147483647, 1, 6),
+('bx_forum_entry_add', 'files', 2147483647, 1, 7),
+('bx_forum_entry_add', 'polls', 2147483647, 1, 8),
+('bx_forum_entry_add', 'covers', 2147483647, 1, 9),
+('bx_forum_entry_add', 'allow_view_to', 2147483647, 1, 10),
+('bx_forum_entry_add', 'do_submit', 2147483647, 1, 11),
 
 ('bx_forum_entry_edit', 'title', 2147483647, 1, 1),
 ('bx_forum_entry_edit', 'cat', 2147483647, 1, 2),
 ('bx_forum_entry_edit', 'text', 2147483647, 1, 3),
 ('bx_forum_entry_edit', 'attachments', 2147483647, 1, 4),
-('bx_forum_entry_edit', 'allow_view_to', 2147483647, 1, 5),
-('bx_forum_entry_edit', 'do_submit', 2147483647, 1, 6),
+('bx_forum_entry_edit', 'pictures', 2147483647, 1, 5),
+('bx_forum_entry_edit', 'videos', 2147483647, 1, 6),
+('bx_forum_entry_edit', 'files', 2147483647, 1, 7),
+('bx_forum_entry_edit', 'polls', 2147483647, 1, 8),
+('bx_forum_entry_edit', 'covers', 2147483647, 1, 9),
+('bx_forum_entry_edit', 'allow_view_to', 2147483647, 1, 10),
+('bx_forum_entry_edit', 'do_submit', 2147483647, 1, 11),
 
 ('bx_forum_entry_view', 'title', 2147483647, 1, 1),
 ('bx_forum_entry_view', 'cat', 2147483647, 1, 2),
@@ -296,6 +452,27 @@ INSERT INTO `sys_form_display_inputs` (`display_name`, `input_name`, `visible_fo
 ('bx_forum_search_full', 'keyword', 2147483647, 1, 3),
 ('bx_forum_search_full', 'do_submit', 2147483647, 1, 4);
 
+-- FORMS: poll
+INSERT INTO `sys_objects_form` (`object`, `module`, `title`, `action`, `form_attrs`, `submit_name`, `table`, `key`, `uri`, `uri_title`, `params`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES
+('bx_forum_poll', 'bx_forum', '_bx_forum_form_poll', '', '', 'do_submit', 'bx_forum_polls', 'id', '', '', 'a:1:{s:14:"checker_helper";s:28:"BxForumFormPollCheckerHelper";}', 0, 1, 'BxForumFormPoll', 'modules/boonex/forum/classes/BxForumFormPoll.php');
+
+INSERT INTO `sys_form_displays` (`display_name`, `module`, `object`, `title`, `view_mode`) VALUES
+('bx_forum_poll_add', 'bx_forum', 'bx_forum_poll', '_bx_forum_form_poll_display_add', 0);
+
+INSERT INTO `sys_form_inputs` (`object`, `module`, `name`, `value`, `values`, `checked`, `type`, `caption_system`, `caption`, `info`, `required`, `collapsed`, `html`, `attrs`, `attrs_tr`, `attrs_wrapper`, `checker_func`, `checker_params`, `checker_error`, `db_pass`, `db_params`, `editable`, `deletable`) VALUES
+('bx_forum_poll', 'bx_forum', 'text', '', '', 0, 'text', '_bx_forum_form_poll_input_sys_text', '_bx_forum_form_poll_input_text', '', 1, 0, 0, '', '', '', 'Avail', '', '_bx_forum_form_poll_input_text_err', 'Xss', '', 1, 0),
+('bx_forum_poll', 'bx_forum', 'answers', '', '', 0, 'custom', '_bx_forum_form_poll_input_sys_answers', '_bx_forum_form_poll_input_answers', '', 1, 0, 0, '', '', '', 'AvailAnswers', '', '_bx_forum_form_poll_input_answers_err', '', '', 1, 0),
+('bx_forum_poll', 'bx_forum', 'controls', '', 'do_submit,do_cancel', 0, 'input_set', '', '', '', 0, 0, 0, '', '', '', '', '', '', '', '', 0, 0),
+('bx_forum_poll', 'bx_forum', 'do_submit', '_bx_forum_form_poll_input_do_submit', '', 0, 'submit', '_bx_forum_form_poll_input_sys_do_submit', '', '', 0, 0, 0, '', '', '', '', '', '', '', '', 0, 0),
+('bx_forum_poll', 'bx_forum', 'do_cancel', '_bx_forum_form_poll_input_do_cancel', '', 0, 'button', '_bx_forum_form_poll_input_do_cancel', '', '', 0, 0, 0, 'a:2:{s:7:"onclick";s:45:"$(''.bx-popup-applied:visible'').dolPopupHide()";s:5:"class";s:22:"bx-def-margin-sec-left";}', '', '', '', '', '', '', '', 0, 0);
+
+INSERT INTO `sys_form_display_inputs` (`display_name`, `input_name`, `visible_for_levels`, `active`, `order`) VALUES
+('bx_forum_poll_add', 'text', 2147483647, 1, 1),
+('bx_forum_poll_add', 'answers', 2147483647, 1, 2),
+('bx_forum_poll_add', 'controls', 2147483647, 1, 3),
+('bx_forum_poll_add', 'do_submit', 2147483647, 1, 4),
+('bx_forum_poll_add', 'do_cancel', 2147483647, 1, 5);
+
 
 -- PRE-VALUES
 INSERT INTO `sys_form_pre_lists`(`key`, `title`, `module`, `use_for_sets`) VALUES
@@ -319,7 +496,8 @@ INSERT INTO `sys_objects_view` (`name`, `table_track`, `period`, `is_on`, `trigg
 -- VOTES
 INSERT INTO `sys_objects_vote` (`Name`, `TableMain`, `TableTrack`, `PostTimeout`, `MinValue`, `MaxValue`, `IsUndo`, `IsOn`, `TriggerTable`, `TriggerFieldId`, `TriggerFieldAuthor`, `TriggerFieldRate`, `TriggerFieldRateCount`, `ClassName`, `ClassFile`) VALUES 
 (@sName, 'bx_forum_votes', 'bx_forum_votes_track', '604800', '1', '1', '0', '1', 'bx_forum_discussions', 'id', 'author', 'rate', 'votes', '', ''),
-('bx_forum_reactions', 'bx_forum_reactions', 'bx_forum_reactions_track', '604800', '1', '1', '1', '1', 'bx_forum_discussions', 'id', 'author', 'rrate', 'rvotes', 'BxTemplVoteReactions', '');
+('bx_forum_reactions', 'bx_forum_reactions', 'bx_forum_reactions_track', '604800', '1', '1', '1', '1', 'bx_forum_discussions', 'id', 'author', 'rrate', 'rvotes', 'BxTemplVoteReactions', ''),
+('bx_forum_poll_answers', 'bx_forum_polls_answers_votes', 'bx_forum_polls_answers_votes_track', '604800', '1', '1', '0', '1', 'bx_forum_polls_answers', 'id', 'author_id', 'rate', 'votes', 'BxForumVotePollAnswers', 'modules/boonex/forum/classes/BxForumVotePollAnswers.php');
 
 
 -- SCORES

+ 8 - 8
modules/boonex/forum/install/sql/uninstall.sql

@@ -2,23 +2,23 @@ SET @sName = 'bx_forum';
 
 
 -- TABLES: entries
-DROP TABLE IF EXISTS `bx_forum_discussions`, `bx_forum_categories`, `bx_forum_files`, `bx_forum_photos_resized`, `bx_forum_subscribers`, `bx_forum_cmts`, `bx_forum_views_track`, `bx_forum_votes`, `bx_forum_votes_track`, `bx_forum_reactions`, `bx_forum_reactions_track`, `bx_forum_meta_keywords`, `bx_forum_meta_mentions`, `bx_forum_reports`, `bx_forum_reports_track`, `bx_forum_favorites_track`, `bx_forum_scores`, `bx_forum_scores_track`;
+DROP TABLE IF EXISTS `bx_forum_discussions`, `bx_forum_categories`, `bx_forum_covers`, `bx_forum_files`, `bx_forum_photos`, `bx_forum_photos_resized`, `bx_forum_videos`, `bx_forum_videos_resized`, `bx_forum_subscribers`, `bx_forum_cmts`, `bx_forum_views_track`, `bx_forum_votes`, `bx_forum_votes_track`, `bx_forum_reactions`, `bx_forum_reactions_track`, `bx_forum_meta_keywords`, `bx_forum_meta_mentions`, `bx_forum_reports`, `bx_forum_reports_track`, `bx_forum_favorites_track`, `bx_forum_scores`, `bx_forum_scores_track`, `bx_forum_polls`, `bx_forum_polls_answers`, `bx_forum_polls_answers_votes`, `bx_forum_polls_answers_votes_track`;
 
 
 -- STORAGES & TRANSCODERS
-DELETE FROM `sys_objects_storage` WHERE `object` IN ('bx_forum_files', 'bx_forum_files_cmts', 'bx_forum_photos_resized');
-DELETE FROM `sys_storage_tokens` WHERE `object` IN ('bx_forum_files', 'bx_forum_files_cmts', 'bx_forum_photos_resized');
+DELETE FROM `sys_objects_storage` WHERE `object` LIKE 'bx_forum_%';
+DELETE FROM `sys_storage_tokens` WHERE `object` LIKE 'bx_forum_%';
 
-DELETE FROM `sys_objects_transcoder` WHERE `object` IN ('bx_forum_preview', 'bx_forum_preview_cmts', 'bx_forum_gallery', 'bx_forum_cover');
-DELETE FROM `sys_transcoder_filters` WHERE `transcoder_object` IN ('bx_forum_preview', 'bx_forum_preview_cmts', 'bx_forum_gallery', 'bx_forum_cover');
-DELETE FROM `sys_transcoder_images_files` WHERE `transcoder_object` IN ('bx_forum_preview', 'bx_forum_preview_cmts', 'bx_forum_gallery', 'bx_forum_cover');
+DELETE FROM `sys_objects_transcoder` WHERE `object` LIKE 'bx_forum_%';
+DELETE FROM `sys_transcoder_filters` WHERE `transcoder_object` LIKE 'bx_forum_%';
+DELETE FROM `sys_transcoder_images_files` WHERE `transcoder_object` LIKE 'bx_forum_%';
 
 
 -- FORMS
 DELETE FROM `sys_objects_form` WHERE `module` = @sName;
 DELETE FROM `sys_form_displays` WHERE `module` = @sName;
 DELETE FROM `sys_form_inputs` WHERE `module` = @sName;
-DELETE FROM `sys_form_display_inputs` WHERE `display_name` IN('bx_forum_entry_add', 'bx_forum_entry_edit', 'bx_forum_entry_view', 'bx_forum_entry_delete', 'bx_forum_search_full');
+DELETE FROM `sys_form_display_inputs` WHERE `display_name` LIKE 'bx_forum_%';
 
 
 -- PRE-VALUES
@@ -35,7 +35,7 @@ DELETE FROM `sys_objects_view` WHERE `Name` = @sName;
 
 
 -- VOTES
-DELETE FROM `sys_objects_vote` WHERE `Name` IN (@sName, 'bx_forum_reactions');
+DELETE FROM `sys_objects_vote` WHERE `Name` IN (@sName, 'bx_forum_reactions', 'bx_forum_poll_answers');
 
 
 -- SCORES

+ 21 - 0
modules/boonex/forum/js/polls.js

@@ -0,0 +1,21 @@
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Forum Forum
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+function BxForumPolls(oOptions)
+{
+    BxBaseModTextPolls.call(this, oOptions);
+
+    this._sObjName = oOptions.sObjName == undefined ? 'oBxForumPolls' : oOptions.sObjName;
+}
+
+BxForumPolls.prototype = Object.create(BxBaseModTextPolls.prototype);
+BxForumPolls.prototype.constructor = BxForumPolls;
+
+/** @} */

+ 1 - 0
modules/boonex/forum/template/css/polls.css

@@ -0,0 +1 @@
+@import url(../../../../base/text/template/css/polls.css);

+ 20 - 6
modules/boonex/forum/template/form_ghost_template.html

@@ -1,8 +1,22 @@
-<bx_include_base:../modules/base/text/template/form_ghost_template.html />
+<div id="bx-uploader-file-{storage_object}-{file_id}" class="bx-uploader-ghost bx-def-margin-sec-top bx-clearfix">
+    <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:_sys_txt_form_entry_input_picture_pic_url /></b><br />
+        <input class="bx-def-font-inputs bx-form-input-text bx-def-margin-sec-bottom" type="text" value="{file_url}" readonly="1" /> <br />
+        <span id="bx-base-general-intert-to-post-link-{file_id}" style="display:none;">
+            <a class="bx-btn bx-btn-small bx-def-margin-sec-right" href="javascript:void(0);" onclick="bx_base_general_insert_to_post('{file_id}', '{file_url}', '__editor_id__');"><bx_text:_sys_txt_form_entry_input_picture_insert /></a>
+        </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>
+    </span>
+</div>
 <script>
-var aType = '{file_type}'.split('/');
-if(!aType || aType[0] != 'image' || -1 === $.inArray(aType[1], ['gif', 'jpeg', 'png'])) {
-    $('#bx-base-general-intert-to-post-link-{file_id}').remove();
-    $('#bx-uploader-file-{storage_object}-{file_id} .bx-base-general-use-as-thumb').remove();
-}
+    $('#bx-base-general-intert-to-post-link-{file_id}').show();
+
+    // disable images drag&drop, because resized images address can be reset after some time
+    $(".bx-base-general-icon-{file_id}").bind('dragstart', function(){
+        return false; 
+    });
 </script>

+ 22 - 0
modules/boonex/forum/template/form_ghost_template_cover.html

@@ -0,0 +1,22 @@
+<div id="bx-uploader-file-{storage_object}-{file_id}" class="bx-uploader-ghost bx-def-margin-sec-top bx-clearfix">
+    <input type="hidden" name="__name__[]" value="{file_id}" />
+    <input type="hidden" name="__name_thumb__[]" value="{file_id}" onclick="bx_base_general_select_thumb(this)" id="__name_thumb__-{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">
+        <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>
+    </span>
+</div>
+<script>
+    var aType = '{file_type}'.split('/');
+    if(!aType || aType[0] != 'image' || -1 === $.inArray(aType[1], ['gif', 'jpeg', 'png'])) {
+        $('#bx-base-general-intert-to-post-link-{file_id}').remove();
+        $('#bx-uploader-file-{storage_object}-{file_id} .bx-base-general-use-as-thumb').remove();
+    }
+
+    // disable images drag&drop, because resized images address can be reset after some time
+    $(".bx-base-general-icon-{file_id}").bind('dragstart', function(){
+        return false; 
+    });
+</script>

+ 19 - 0
modules/boonex/forum/template/form_ghost_template_file.html

@@ -0,0 +1,19 @@
+<div id="bx-uploader-file-{storage_object}-{file_id}" class="bx-uploader-ghost bx-def-margin-sec-top bx-clearfix">
+    <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:_sys_txt_form_entry_input_picture_pic_url /></b><br />
+        <input class="bx-def-font-inputs bx-form-input-text bx-def-margin-sec-bottom" type="text" value="{file_url}" readonly="1" /> <br />
+        <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>
+    </span>
+</div>
+<script>
+    $('#bx-base-general-intert-to-post-link-{file_id}').show();
+
+    // disable images drag&drop, because resized images address can be reset after some time
+    $(".bx-base-general-icon-{file_id}").bind('dragstart', function(){
+        return false; 
+    });
+</script>

+ 22 - 0
modules/boonex/forum/template/form_ghost_template_video.html

@@ -0,0 +1,22 @@
+<div id="bx-uploader-file-{storage_object}-{file_id}" class="bx-uploader-ghost bx-def-margin-sec-top bx-clearfix">
+    <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:_sys_txt_form_entry_input_picture_pic_url /></b><br />
+        <input class="bx-def-font-inputs bx-form-input-text bx-def-margin-sec-bottom" type="text" value="{file_url}" readonly="1" /> <br />
+        <span id="bx-base-general-intert-to-post-link-{file_id}" style="display:none;">
+            <a class="bx-btn bx-btn-small bx-def-margin-sec-right" href="javascript:void(0);" onclick="bx_base_general_insert_to_post('{file_id}', '{file_url}', '__editor_id__', '{file_type}', '__embed_url__');"><bx_text:_sys_txt_form_entry_input_picture_insert /></a>
+        </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>
+    </span>
+</div>
+<script>
+    $('#bx-base-general-intert-to-post-link-{file_id}').show();
+
+    // disable images drag&drop, because resized images address can be reset after some time
+    $(".bx-base-general-icon-{file_id}").bind('dragstart', function(){
+        return false; 
+    });
+</script>

+ 1 - 0
modules/boonex/forum/template/poll_answer_ve_block.html

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

+ 1 - 0
modules/boonex/forum/template/poll_form.html

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

+ 1 - 0
modules/boonex/forum/template/poll_form_answers.html

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

+ 1 - 0
modules/boonex/forum/template/poll_form_field.html

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

+ 1 - 0
modules/boonex/forum/template/poll_item.html

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

+ 1 - 0
modules/boonex/forum/template/poll_item_answers.html

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

+ 1 - 0
modules/boonex/forum/template/poll_item_results.html

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

+ 1 - 0
modules/boonex/forum/template/poll_items.html

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

+ 1 - 0
modules/boonex/forum/template/poll_items_embed.html

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

+ 1 - 0
modules/boonex/forum/template/poll_items_showcase.html

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

+ 1 - 0
modules/boonex/forum/template/uploader_button_html5_attach.html

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

+ 1 - 0
modules/boonex/forum/template/uploader_button_simple_attach.html

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

+ 2 - 2
modules/boonex/posts/classes/BxPostsFormEntry.php

@@ -108,7 +108,7 @@ class BxPostsFormEntry extends BxBaseModTextFormEntry
             $iAdded = 0;
             if(isset($this->aInputs[$CNF['FIELD_ADDED']]))
                 $iAdded = $this->getCleanValue($CNF['FIELD_ADDED']);
-            
+
             if(empty($iAdded))
                  $iAdded = time();
 
@@ -146,7 +146,7 @@ class BxPostsFormEntry extends BxBaseModTextFormEntry
 
             $aValsToAdd[$CNF['FIELD_PUBLISHED']] = $iPublished;
         }
-        
+
         $iResult = parent::update ($iContentId, $aValsToAdd, $aTrackTextFieldsChanges);
         $this->processFiles($CNF['FIELD_COVER'], $iContentId, false);   
         return $iResult;

+ 95 - 47
modules/boonex/russian/data/langs/bx_forum/ru.xml

@@ -1,40 +1,50 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources name="ru" flag="ru" title="Russian">
 
-	<string name="_bx_forum"><![CDATA[Обсуждения]]></string>
-	<string name="_bx_forum_cmts"><![CDATA[Обсуждения - Комментарии]]></string>
-        <string name="_bx_forum_reactions"><![CDATA[Обсуждения - Реакции]]></string>
+    <string name="_bx_forum"><![CDATA[Обсуждения]]></string>
+    <string name="_bx_forum_cmts"><![CDATA[Обсуждения - Комментарии]]></string>
+    <string name="_bx_forum_reactions"><![CDATA[Обсуждения - Реакции]]></string>
 
-	<string name="_bx_forum_option_summary_chars"><![CDATA[Количество символов в автогенерируемой сводке к обсуждению]]></string>
-	<string name="_bx_forum_option_plain_summary_chars"><![CDATA[Количество символов в описании обсуждения при отсутствующей картинке обсуждения]]></string>
-	<string name="_bx_forum_option_per_page_browse"><![CDATA[Количество элементов на странице]]></string>
-	<string name="_bx_forum_option_per_page_index"><![CDATA[Количество элементов на главной странице сайта]]></string>
-	<string name="_bx_forum_option_per_page_profile"><![CDATA[Количество элементов на странице профиля]]></string>
-	<string name="_bx_forum_option_rss_num"><![CDATA[Количество элементов в ленте RSS]]></string>
-	<string name="_bx_forum_option_searchable_fields"><![CDATA[Поля для поиска по ключевому слову]]></string>
-	<string name="_bx_forum_option_autosubscribe_created"><![CDATA[Автоподписка на новые обсуждения]]></string>
-	<string name="_bx_forum_option_autosubscribe_replied"><![CDATA[Автоподписка на отвеченные обсуждения]]></string>
-  <string name="_bx_forum_option_auto_activation_for_categories"><![CDATA[Автоактивация для категорий]]></string>
+    <string name="_bx_forum_option_summary_chars"><![CDATA[Количество символов в автогенерируемой сводке к обсуждению]]></string>
+    <string name="_bx_forum_option_plain_summary_chars"><![CDATA[Количество символов в описании обсуждения при отсутствующей картинке обсуждения]]></string>
+    <string name="_bx_forum_option_per_page_browse"><![CDATA[Количество элементов на странице]]></string>
+    <string name="_bx_forum_option_per_page_index"><![CDATA[Количество элементов на главной странице сайта]]></string>
+    <string name="_bx_forum_option_per_page_profile"><![CDATA[Количество элементов на странице профиля]]></string>
+    <string name="_bx_forum_option_rss_num"><![CDATA[Количество элементов в ленте RSS]]></string>
+    <string name="_bx_forum_option_searchable_fields"><![CDATA[Поля для поиска по ключевому слову]]></string>
+    <string name="_bx_forum_option_autosubscribe_created"><![CDATA[Автоподписка на новые обсуждения]]></string>
+    <string name="_bx_forum_option_autosubscribe_replied"><![CDATA[Автоподписка на отвеченные обсуждения]]></string>
+    <string name="_bx_forum_option_auto_activation_for_categories"><![CDATA[Автоактивация для категорий]]></string>
 
-	<string name="_bx_forum_form_entry"><![CDATA[Форум]]></string>
-	<string name="_bx_forum_form_entry_display_add"><![CDATA[Создание обсуждения]]></string>
-	<string name="_bx_forum_form_entry_display_delete"><![CDATA[Удаление обсуждения]]></string>
-	<string name="_bx_forum_form_entry_display_edit"><![CDATA[Редактирование обсуждения]]></string>
-	<string name="_bx_forum_form_entry_display_view"><![CDATA[Просмотр обсуждения]]></string>
-	<string name="_bx_forum_form_entry_input_author"><![CDATA[Автор]]></string>
-	<string name="_bx_forum_form_entry_input_sys_do_submit"><![CDATA[Выполнить]]></string>
-	<string name="_bx_forum_form_entry_input_do_submit"><![CDATA[Выполнить]]></string>
-	<string name="_bx_forum_form_entry_input_sys_text"><![CDATA[Текст]]></string>
-	<string name="_bx_forum_form_entry_input_text"><![CDATA[Текст]]></string>
-	<string name="_bx_forum_form_entry_input_text_err"><![CDATA[Поле для текста не может быть пустым]]></string>
-        <string name="_bx_forum_form_entry_input_text_comments"><![CDATA[Текст комментариев]]></string>
-	<string name="_bx_forum_form_entry_input_sys_delete_confirm"><![CDATA[Удалить подтверждение]]></string>
-	<string name="_bx_forum_form_entry_input_delete_confirm"><![CDATA[Я уверен, что хочу удалить это обсуждение]]></string>
-	<string name="_bx_forum_form_entry_input_delete_confirm_info"><![CDATA[Это действие не может быть отменено]]></string>
-	<string name="_bx_forum_form_entry_input_delete_confirm_error"><![CDATA[Пожалуйста, отметьте флажок, если действительно хотите удалить обсуждение]]></string>
-	<string name="_bx_forum_form_entry_input_sys_attachments"><![CDATA[Прикрепления]]></string>
-	<string name="_bx_forum_form_entry_input_attachments"><![CDATA[Прикрепления]]></string>
-	<string name="_bx_forum_form_entry_input_sys_allow_view_to"><![CDATA[Видимость]]></string>
+    <string name="_bx_forum_form_entry"><![CDATA[Форум]]></string>
+    <string name="_bx_forum_form_entry_display_add"><![CDATA[Создание обсуждения]]></string>
+    <string name="_bx_forum_form_entry_display_delete"><![CDATA[Удаление обсуждения]]></string>
+    <string name="_bx_forum_form_entry_display_edit"><![CDATA[Редактирование обсуждения]]></string>
+    <string name="_bx_forum_form_entry_display_view"><![CDATA[Просмотр обсуждения]]></string>
+    <string name="_bx_forum_form_entry_input_author"><![CDATA[Автор]]></string>
+    <string name="_bx_forum_form_entry_input_sys_do_submit"><![CDATA[Выполнить]]></string>
+    <string name="_bx_forum_form_entry_input_do_submit"><![CDATA[Выполнить]]></string>
+    <string name="_bx_forum_form_entry_input_sys_text"><![CDATA[Текст]]></string>
+    <string name="_bx_forum_form_entry_input_text"><![CDATA[Текст]]></string>
+    <string name="_bx_forum_form_entry_input_text_err"><![CDATA[Поле для текста не может быть пустым]]></string>
+    <string name="_bx_forum_form_entry_input_text_comments"><![CDATA[Текст комментариев]]></string>
+    <string name="_bx_forum_form_entry_input_sys_delete_confirm"><![CDATA[Удалить подтверждение]]></string>
+    <string name="_bx_forum_form_entry_input_delete_confirm"><![CDATA[Я уверен, что хочу удалить это обсуждение]]></string>
+    <string name="_bx_forum_form_entry_input_delete_confirm_info"><![CDATA[Это действие не может быть отменено]]></string>
+    <string name="_bx_forum_form_entry_input_delete_confirm_error"><![CDATA[Пожалуйста, отметьте флажок, если действительно хотите удалить обсуждение]]></string>
+    <string name="_bx_forum_form_entry_input_sys_attachments"><![CDATA[Прикрепления]]></string>
+    <string name="_bx_forum_form_entry_input_sys_covers"><![CDATA[Изображение заголовка]]></string>
+    <string name="_bx_forum_form_entry_input_covers"><![CDATA[Изображение заголовка]]></string>
+    <string name="_bx_forum_form_entry_input_covers_uploader_simple_title"><![CDATA[Загрузить]]></string>
+    <string name="_bx_forum_form_entry_input_covers_uploader_html5_title"><![CDATA[Загрузить]]></string>
+    <string name="_bx_forum_form_entry_input_sys_pictures"><![CDATA[Изображения]]></string>
+    <string name="_bx_forum_form_entry_input_pictures"><![CDATA[]]></string>
+    <string name="_bx_forum_form_entry_input_sys_videos"><![CDATA[Видео]]></string>
+    <string name="_bx_forum_form_entry_input_videos"><![CDATA[]]></string>
+    <string name="_bx_forum_form_entry_input_sys_files"><![CDATA[Файлы]]></string>
+    <string name="_bx_forum_form_entry_input_files"><![CDATA[]]></string>
+    <string name="_bx_forum_form_entry_input_sys_polls"><![CDATA[Голосования]]></string>
+    <string name="_bx_forum_form_entry_input_sys_allow_view_to"><![CDATA[Видимость]]></string>
     <string name="_bx_forum_form_entry_input_allow_view_to"><![CDATA[Видимость]]></string>
     <string name="_bx_forum_form_entry_input_picture_use_as_thumb"><![CDATA[Изображение обложки]]></string>
     <string name="_bx_forum_form_entry_input_sys_date_added"><![CDATA[Дата создания]]></string>
@@ -45,21 +55,35 @@
     <string name="_bx_forum_form_entry_input_title"><![CDATA[Тема]]></string>
     <string name="_bx_forum_form_entry_input_title_err"><![CDATA[Необходимо указать тему]]></string>
     <string name="_bx_forum_form_entry_input_sys_cat"><![CDATA[Категория]]></string>
-	<string name="_bx_forum_form_entry_input_cat"><![CDATA[Категория]]></string>
-	<string name="_bx_forum_form_entry_input_cat_err"><![CDATA[Нужно обязательно выбрать категорию]]></string>
-  <string name="_bx_forum_form_entry_input_sys_multicat"><![CDATA[Категории]]></string>
-  <string name="_bx_forum_form_entry_input_multicat"><![CDATA[Категории]]></string>
-  <string name="_bx_forum_form_entry_input_multicat_err"><![CDATA[Нужно обязательно выбрать категории]]></string>
-	<string name="_bx_forum_form_search"><![CDATA[Поиск]]></string>
-	<string name="_bx_forum_form_search_display_full"><![CDATA[Полный поиск]]></string>
-	<string name="_bx_forum_form_search_input_sys_author"><![CDATA[Автор]]></string>
-	<string name="_bx_forum_form_search_input_author"><![CDATA[Автор]]></string>
-	<string name="_bx_forum_form_search_input_sys_category"><![CDATA[Категория]]></string>
-	<string name="_bx_forum_form_search_input_category"><![CDATA[Категория]]></string>
-	<string name="_bx_forum_form_search_input_sys_keyword"><![CDATA[Ключевое слово]]></string>
-	<string name="_bx_forum_form_search_input_keyword"><![CDATA[Ключевое слово]]></string>
-	<string name="_bx_forum_form_search_input_do_submit"><![CDATA[Искать]]></string>
-	<string name="_bx_forum_form_search_input_sys_do_submit"><![CDATA[Искать]]></string>
+    <string name="_bx_forum_form_entry_input_cat"><![CDATA[Категория]]></string>
+    <string name="_bx_forum_form_entry_input_cat_err"><![CDATA[Нужно обязательно выбрать категорию]]></string>
+    <string name="_bx_forum_form_entry_input_sys_multicat"><![CDATA[Категории]]></string>
+    <string name="_bx_forum_form_entry_input_multicat"><![CDATA[Категории]]></string>
+    <string name="_bx_forum_form_entry_input_multicat_err"><![CDATA[Нужно обязательно выбрать категории]]></string>
+
+    <string name="_bx_forum_form_poll"><![CDATA[Голосования]]></string>
+    <string name="_bx_forum_form_poll_display_add"><![CDATA[Добавить голосование]]></string>
+    <string name="_bx_forum_form_poll_input_sys_text"><![CDATA[Вопрос]]></string>
+    <string name="_bx_forum_form_poll_input_text"><![CDATA[Вопрос]]></string>
+    <string name="_bx_forum_form_poll_input_text_err"><![CDATA[Вопрос обязателен. Пожалуйста, заполните это поле]]></string>
+    <string name="_bx_forum_form_poll_input_sys_answers"><![CDATA[Ответы]]></string>
+    <string name="_bx_forum_form_poll_input_answers"><![CDATA[Ответы]]></string>
+    <string name="_bx_forum_form_poll_input_answers_err"><![CDATA[Голосование должно иметь как минимум 2 не пустых ответа.]]></string>
+    <string name="_bx_forum_form_poll_input_answers_add"><![CDATA[Добавить ещё]]></string>    
+    <string name="_bx_forum_form_poll_input_sys_do_submit"><![CDATA[Добавить]]></string>
+    <string name="_bx_forum_form_poll_input_do_submit"><![CDATA[Добавить]]></string>
+    <string name="_bx_forum_form_poll_input_do_cancel"><![CDATA[Закрыть]]></string>
+
+    <string name="_bx_forum_form_search"><![CDATA[Поиск]]></string>
+    <string name="_bx_forum_form_search_display_full"><![CDATA[Полный поиск]]></string>
+    <string name="_bx_forum_form_search_input_sys_author"><![CDATA[Автор]]></string>
+    <string name="_bx_forum_form_search_input_author"><![CDATA[Автор]]></string>
+    <string name="_bx_forum_form_search_input_sys_category"><![CDATA[Категория]]></string>
+    <string name="_bx_forum_form_search_input_category"><![CDATA[Категория]]></string>
+    <string name="_bx_forum_form_search_input_sys_keyword"><![CDATA[Ключевое слово]]></string>
+    <string name="_bx_forum_form_search_input_keyword"><![CDATA[Ключевое слово]]></string>
+    <string name="_bx_forum_form_search_input_do_submit"><![CDATA[Искать]]></string>
+    <string name="_bx_forum_form_search_input_sys_do_submit"><![CDATA[Искать]]></string>
 
 	<string name="_bx_forum_acl_action_create_entry"><![CDATA[Создавать новое обсуждение]]></string>
 	<string name="_bx_forum_acl_action_delete_entry"><![CDATA[Удалить обсуждение]]></string>
@@ -83,6 +107,7 @@
 	<string name="_bx_forum_page_title_view_entry"><![CDATA[{title}]]></string>
 	<string name="_bx_forum_page_block_title_entry_all_actions"><![CDATA[Все действия]]></string>
 	<string name="_bx_forum_page_block_title_entry_attachments"><![CDATA[Прикрепления]]></string>
+        <string name="_bx_forum_page_block_title_entry_polls"><![CDATA[Голосования]]></string>
 	<string name="_bx_forum_page_block_title_entry_text"><![CDATA[Текст]]></string>
     <string name="_bx_forum_page_block_title_entry_author"><![CDATA[Автор]]></string>
     <string name="_bx_forum_page_block_title_entry_actions"><![CDATA[Действия]]></string>
@@ -174,6 +199,23 @@
     <string name="_bx_forum_page_title_entries_partaken"><![CDATA[Отвеченные мной]]></string>
     <string name="_bx_forum_page_block_title_partaken_entries"><![CDATA[Отвеченные мной]]></string>
 
+    <string name="_bx_forum_menu_title_entry_attachments"><![CDATA[Форма - Прикрепления]]></string>
+    <string name="_bx_forum_menu_set_title_entry_attachments"><![CDATA[Форма - Прикрепления]]></string>
+    <string name="_bx_forum_menu_item_title_system_cpa_photo_simple"><![CDATA[Добавить фото (один)]]></string>
+    <string name="_bx_forum_menu_item_title_cpa_photo_simple"><![CDATA[Добавить фото]]></string>
+    <string name="_bx_forum_menu_item_title_system_cpa_photo_html5"><![CDATA[Добавить фото (много)]]></string>
+    <string name="_bx_forum_menu_item_title_cpa_photo_html5"><![CDATA[Добавить фото]]></string>
+    <string name="_bx_forum_menu_item_title_system_cpa_video_simple"><![CDATA[Добавить видео (один)]]></string>
+    <string name="_bx_forum_menu_item_title_cpa_video_simple"><![CDATA[Добавить видео]]></string>
+    <string name="_bx_forum_menu_item_title_system_cpa_video_html5"><![CDATA[Добавить видео (много)]]></string>
+    <string name="_bx_forum_menu_item_title_cpa_video_html5"><![CDATA[Добавить видео]]></string>
+    <string name="_bx_forum_menu_item_title_system_cpa_file_simple"><![CDATA[Добавить файл (один)]]></string>
+    <string name="_bx_forum_menu_item_title_cpa_file_simple"><![CDATA[Добавить файл]]></string>
+    <string name="_bx_forum_menu_item_title_system_cpa_file_html5"><![CDATA[Добавить файл (много)]]></string>
+    <string name="_bx_forum_menu_item_title_cpa_file_html5"><![CDATA[Добавить файл]]></string>
+    <string name="_bx_forum_menu_item_title_system_cpa_poll"><![CDATA[Добавить голосование]]></string>
+    <string name="_bx_forum_menu_item_title_cpa_poll"><![CDATA[Добавить голосование]]></string>
+
     <string name="_bx_forum_menu_title_submenu"><![CDATA[Форум - Подменю]]></string>
     <string name="_bx_forum_menu_set_title_submenu"><![CDATA[Форум - Подменю]]></string>
     <string name="_bx_forum_menu_item_title_system_create_entry"><![CDATA[Обсуждение]]></string>
@@ -298,6 +340,12 @@
     <string name="_bx_forum_txt_sample_single"><![CDATA[обсуждение]]></string>
     <string name="_bx_forum_txt_sample_single_with_article"><![CDATA[обсуждение]]></string>
 
+    <string name="_bx_forum_txt_poll_view_answers"><![CDATA[опрос]]></string>
+    <string name="_bx_forum_txt_poll_view_results"><![CDATA[результаты]]></string>
+    <string name="_bx_forum_txt_poll_answer_vote_do_by"><![CDATA[Проголосовали за]]></string>
+    <string name="_bx_forum_txt_poll_answer_vote_counter"><![CDATA[{0} голосов]]></string>
+    <string name="_bx_forum_txt_poll_answer_vote_percent"><![CDATA[({0}%)]]></string>
+
     <string name="_bx_forum_email_new_reply"><![CDATA[Новый ответ]]></string>
     <string name="_bx_forum_email_new_reply_subject"><![CDATA[Новый ответ в "{PageTitle}" дискуссии]]></string>
     <string name="_bx_forum_email_new_reply_body"><![CDATA[{email_header}