Просмотр исходного кода

Ticket #4575 - Events: Enhancements. Point 3.

AntonLV 2 лет назад
Родитель
Сommit
a70fea6242
29 измененных файлов с 828 добавлено и 55 удалено
  1. 1 1
      inc/classes/BxDolRecommendation.php
  2. 83 0
      modules/base/groups/classes/BxBaseModGroupsDb.php
  3. 25 0
      modules/base/groups/classes/BxBaseModGroupsFormQuestion.php
  4. 4 0
      modules/base/groups/classes/BxBaseModGroupsFormsEntryHelper.php
  5. 27 0
      modules/base/groups/classes/BxBaseModGroupsGridConnections.php
  6. 156 0
      modules/base/groups/classes/BxBaseModGroupsGridQuestionsManage.php
  7. 29 17
      modules/base/groups/classes/BxBaseModGroupsMenuViewActions.php
  8. 104 0
      modules/base/groups/classes/BxBaseModGroupsModule.php
  9. 16 0
      modules/base/groups/classes/BxBaseModGroupsTemplate.php
  10. 60 0
      modules/base/groups/js/entry.js
  11. 8 0
      modules/base/groups/template/popup_qnr_answers.html
  12. 19 0
      modules/base/groups/template/popup_qnr_question.html
  13. 20 0
      modules/base/groups/template/popup_qnr_questionnaire.html
  14. 12 0
      modules/boonex/events/classes/BxEventsConfig.php
  15. 11 1
      modules/boonex/events/classes/BxEventsDb.php
  16. 1 1
      modules/boonex/events/classes/BxEventsFormEntry.php
  17. 22 0
      modules/boonex/events/classes/BxEventsFormQuestion.php
  18. 9 0
      modules/boonex/events/classes/BxEventsFormsEntryHelper.php
  19. 22 0
      modules/boonex/events/classes/BxEventsGridQuestionsManage.php
  20. 5 0
      modules/boonex/events/classes/BxEventsMenuViewActionsAll.php
  21. 29 2
      modules/boonex/events/classes/BxEventsModule.php
  22. 1 1
      modules/boonex/events/classes/BxEventsPageEntry.php
  23. 31 1
      modules/boonex/events/install/langs/en.xml
  24. 39 11
      modules/boonex/events/install/sql/enable.sql
  25. 56 0
      modules/boonex/events/install/sql/install.sql
  26. 1 1
      modules/boonex/events/install/sql/uninstall.sql
  27. 5 17
      modules/boonex/events/js/entry.js
  28. 2 2
      modules/boonex/events/template/popup_session.html
  29. 30 0
      modules/boonex/russian/data/langs/bx_events/ru.xml

+ 1 - 1
inc/classes/BxDolRecommendation.php

@@ -41,7 +41,7 @@ class BxDolRecommendation extends BxDolFactory implements iBxDolFactoryObject
         $this->_iReducerAdd = 5;
         $this->_iReducerIgnore = 10;
 
-        $this->_iPerPageDefault = 6;
+        $this->_iPerPageDefault = 24;
     }
 
     public static function getObjectInstance($sObject)

+ 83 - 0
modules/base/groups/classes/BxBaseModGroupsDb.php

@@ -462,6 +462,89 @@ class BxBaseModGroupsDb extends BxBaseModProfileDb
         $CNF = $this->_oConfig->CNF; 
         return $this->query("DELETE FROM `" . $CNF["TABLE_INVITES"] . "` WHERE `id` = :id", $aBindings);
     }
+
+    public function getQuestions($aParams = [])
+    {
+        $CNF = &$this->_oConfig->CNF;
+
+    	$aMethod = ['name' => 'getAll', 'params' => [0 => 'query']];
+
+        $sSelectClause = "`tq`.*";
+        $sJoinClause = $sWhereClause = $sOrderClause = $sLimitClause = "";
+        switch($aParams['sample']) {
+            case 'id':
+                $aMethod['name'] = 'getRow';
+                $aMethod['params'][1] = [
+                    'id' => $aParams['id']
+                ];
+
+                $sWhereClause = " AND `tq`.`id`=:id";
+                break;
+            
+             case 'content_id':
+                $aMethod['params'][1] = [
+                    'content_id' => $aParams['content_id']
+                ];
+
+                $sWhereClause = " AND `tq`.`content_id`=:content_id";
+                $sOrderClause = "`tq`.`order` ASC";
+                break;
+            
+            case 'answers':
+                $aMethod['params'][1] = [
+                    'content_id' => $aParams['content_id'],
+                    'profile_id' => $aParams['profile_id']
+                ];
+
+                $sSelectClause .= ", `ta`.`answer`";
+                $sJoinClause = "INNER JOIN `" . $CNF['TABLE_ANSWERS'] . "` AS `ta` ON `tq`.`id`=`ta`.`question_id` AND `ta`.`profile_id`=:profile_id";
+                $sWhereClause = " AND `tq`.`content_id`=:content_id";
+                break;
+        }
+
+        if(!empty($sOrderClause))
+            $sOrderClause = 'ORDER BY ' . $sOrderClause;
+
+        if(!empty($sLimitClause))
+            $sLimitClause = 'LIMIT ' . $sLimitClause;
+
+        $aMethod['params'][0] = "SELECT " . $sSelectClause . " FROM `" . $CNF['TABLE_QUESTIONS'] . "` AS `tq` " . $sJoinClause . " WHERE 1" . $sWhereClause . " " . $sOrderClause . " " . $sLimitClause;
+
+        return call_user_func_array([$this, $aMethod['name']], $aMethod['params']);
+    }
+
+    public function getQuestionOrderMax($iContentId)
+    {
+        $CNF = &$this->_oConfig->CNF;
+
+        return (int)$this->getOne("SELECT MAX(`order`) FROM `" . $CNF['TABLE_QUESTIONS'] . "` WHERE `content_id`=:content_id", [
+            'content_id' => $iContentId
+        ]);
+    }
+
+    public function insertAnswer($iQuestionId, $iProfileId, $sAnswer)
+    {
+        $CNF = &$this->_oConfig->CNF;
+
+        $sSetClause = $this->arrayToSQL([
+            'question_id' => $iQuestionId, 
+            'profile_id' => $iProfileId, 
+            'answer' => $sAnswer
+        ]);
+
+        return $this->query("INSERT INTO `" . $CNF['TABLE_ANSWERS'] . "` SET " . $sSetClause . ", `added`=UNIX_TIMESTAMP() ON DUPLICATE KEY UPDATE `answer`=:answer, `added`=UNIX_TIMESTAMP()", [
+            'answer' => $sAnswer
+        ]) !== false ? (int)$this->lastId() : false;
+    }
+
+    public function deleteQuestionnaires($iContentId) 
+    {
+        $CNF = &$this->_oConfig->CNF;
+
+        $this->query("DELETE FROM `tq`, `ta` USING `" . $CNF['TABLE_QUESTIONS'] . "` AS `tq` LEFT JOIN `" . $CNF['TABLE_ANSWERS'] . "` AS `ta` ON `tq`.`id`=`ta`.`question_id` WHERE `tq`.`content_id`=:content_id", [
+            'content_id' => $iContentId
+        ]) !== false;
+    }
 }
 
 /** @} */

+ 25 - 0
modules/base/groups/classes/BxBaseModGroupsFormQuestion.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    BaseGroups Base classes for groups modules
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxBaseModGroupsFormQuestion extends BxTemplFormView
+{
+    protected $_sModule;
+    protected $_oModule;
+
+    public function __construct($aInfo, $oTemplate = false)
+    {
+        $this->_oModule = BxDolModule::getInstance($this->_sModule);
+
+        parent::__construct($aInfo, $oTemplate);
+    }
+}
+
+/** @} */

+ 4 - 0
modules/base/groups/classes/BxBaseModGroupsFormsEntryHelper.php

@@ -178,8 +178,12 @@ class BxBaseModGroupsFormsEntryHelper extends BxBaseModProfileFormsEntryHelper
     public function onDataDeleteAfter ($iContentId, $aContentInfo, $oProfile)
     {
         $CNF = &$this->_oModule->_oConfig->CNF;
+
         $oGroupProfile = BxDolProfile::getInstanceByContentAndType($iContentId, $this->_oModule->_oConfig->getName());
 
+        if(isset($CNF['TABLE_QUESTIONS'], $CNF['TABLE_ANSWERS']))
+            $this->_oModule->_oDb->deleteQuestionnaires($iContentId);
+
         if ($oGroupProfile && isset($CNF['TABLE_ADMINS']))
             $this->_oModule->_oDb->deleteAdminsByGroupId($oGroupProfile->id());
 

+ 27 - 0
modules/base/groups/classes/BxBaseModGroupsGridConnections.php

@@ -72,6 +72,25 @@ class BxBaseModGroupsGridConnections extends BxDolGridConnections
         return $sResult;
     }
 
+    public function performActionQuestionnaire()
+    {
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
+        if(($mixedResult = $this->_oModule->checkAllowedManageAdmins($this->_iGroupProfileId)) !== CHECK_ACTION_RESULT_ALLOWED)
+            return echoJson(['msg' => $mixedResult]);
+
+        list($iId, $iViewedId) = $this->_prepareIds();
+        if(!$iId)
+            return echoJson(['msg' => _t('_sys_txt_error_occured')]);
+
+        $sPopupContent = $this->_oModule->_oTemplate->getPopupQuestionnaire($this->_aContentInfo[$CNF['FIELD_ID']], $iId);
+        if(!$sPopupContent)
+            return echoJson([]);
+
+        $oFunctions = BxTemplFunctions::getInstance();
+        return echoJson(['popup' => $oFunctions->transBox(str_replace('_', '-', $this->_sContentModule) . '-questionnaire-popup', $oFunctions->simpleBoxContent($sPopupContent))]);
+    }
+
     public function performActionSetRole()
     {
         if(!$this->_bRoles)
@@ -223,6 +242,14 @@ class BxBaseModGroupsGridConnections extends BxDolGridConnections
         return '';
     }
 
+    protected function _getActionQuestionnaire ($sType, $sKey, $a, $isSmall = false, $isDisabled = false, $aRow = array())
+    {
+        if($aRow['mutual'])
+            return '';
+
+        return parent::_getActionDefault ($sType, $sKey, $a, $isSmall, $isDisabled, $aRow);
+    }
+
     protected function _getActionAccept ($sType, $sKey, $a, $isSmall = false, $isDisabled = false, $aRow = array())
     {
         if ($aRow['mutual'])

+ 156 - 0
modules/base/groups/classes/BxBaseModGroupsGridQuestionsManage.php

@@ -0,0 +1,156 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    BaseGroups Base classes for groups modules
+ * @ingroup     UnaModules
+ * 
+ * @{
+ */
+
+class BxBaseModGroupsGridQuestionsManage extends BxTemplGrid
+{
+    protected $_sModule;
+    protected $_oModule;
+
+    protected $_sParamsDivider = '#-#';
+
+    protected $_iGroupProfileId;
+    protected $_iGroupContentId;
+    protected $_aGroupContentInfo;
+
+    public function __construct ($aOptions, $oTemplate = false)
+    {
+        $this->_oModule = BxDolModule::getInstance($this->_sModule);
+
+        parent::__construct ($aOptions, $oTemplate);
+
+        $this->_iGroupProfileId = 0;
+        $this->_iGroupContentId = 0;
+        $this->_aGroupContentInfo = [];
+        if(($iGroupProfileId = bx_get('profile_id')) !== false)
+            $this->setProfileId($iGroupProfileId);
+    }
+
+    public function setProfileId($iProfileId)
+    {
+        $this->_iGroupProfileId = (int)$iProfileId;
+        $this->_aQueryAppend['profile_id'] = $this->_iGroupProfileId;
+
+        if(($oGroupProfile = BxDolProfile::getInstance($this->_iGroupProfileId)) !== false) {
+            $this->_iGroupContentId = (int)$oGroupProfile->getContentId();
+            $this->_aGroupContentInfo = $this->_oModule->_oDb->getContentInfoById($this->_iGroupContentId);
+        }
+    }
+
+    public function performActionAdd()
+    {
+    	$CNF = &$this->_oModule->_oConfig->CNF;
+
+    	$sAction = 'add';
+
+        if(($mixedResult = $this->_oModule->checkAllowedEdit($this->_aGroupContentInfo)) !== CHECK_ACTION_RESULT_ALLOWED)
+            return echoJson(['msg' => $mixedResult]);
+
+        $sForm = $CNF['OBJECT_FORM_QUESTION_DISPLAY_ADD'];
+    	$oForm = BxDolForm::getObjectInstance($CNF['OBJECT_FORM_QUESTION'], $CNF['OBJECT_FORM_QUESTION_DISPLAY_ADD']);
+    	$oForm->setId($sForm);
+        $oForm->setName($sForm);
+        $oForm->setAction(BX_DOL_URL_ROOT . bx_append_url_params('grid.php', ['o' => $this->_sObject, 'a' => $sAction, 'profile_id' => $this->_iGroupProfileId]));
+
+        $oForm->initChecker();
+        if($oForm->isSubmittedAndValid()) {
+            $iId = (int)$oForm->insert(['content_id' => $this->_iGroupContentId, 'added' => time(), 'order' => $this->_oModule->_oDb->getQuestionOrderMax($this->_iGroupContentId) + 1]);
+            if($iId != 0)
+                $aResult = ['grid' => $this->getCode(false), 'blink' => $iId];
+            else
+                $aResult = ['msg' => _t($CNF['T']['err_cannot_perform'])];
+
+            return echoJson($aResult);
+        }
+
+        bx_import('BxTemplFunctions');
+        $sContent = BxTemplFunctions::getInstance()->popupBox($this->_oModule->_oConfig->getHtmlIds('popup_question'), _t($CNF['T']['popup_title_question_add']), $this->_oModule->_oTemplate->parseHtmlByName('popup_qnr_question.html', [
+            'form_id' => $oForm->getId(),
+            'form' => $oForm->getCode(true),
+            'object' => $this->_sObject,
+            'action' => $sAction
+        ]));
+
+        echoJson(['popup' => ['html' => $sContent, 'options' => ['closeOnOuterClick' => false]]]);
+    }
+
+    public function performActionEdit()
+    {
+    	$CNF = &$this->_oModule->_oConfig->CNF;
+
+        $sAction = 'edit';
+
+        if(($mixedResult = $this->_oModule->checkAllowedEdit($this->_aGroupContentInfo)) !== CHECK_ACTION_RESULT_ALLOWED)
+            return echoJson(['msg' => $mixedResult]);
+
+        $aIds = $this->_getIds();
+        if($aIds === false)
+            return echoJson([]);
+
+        $iItem = array_shift($aIds);
+        $aItem = $this->_oModule->_oDb->getQuestions(['sample' => 'id', 'id' => $iItem]);
+        if(!is_array($aItem) || empty($aItem))
+            return echoJson([]);
+
+        $sForm = $CNF['OBJECT_FORM_QUESTION_DISPLAY_EDIT'];
+        $oForm = BxDolForm::getObjectInstance($CNF['OBJECT_FORM_QUESTION'], $CNF['OBJECT_FORM_QUESTION_DISPLAY_EDIT']);
+        $oForm->setId($sForm);
+        $oForm->setName($sForm);
+    	$oForm->setAction(BX_DOL_URL_ROOT . bx_append_url_params('grid.php', ['o' => $this->_sObject, 'a' => $sAction, 'profile_id' => $this->_iGroupProfileId, 'id' => $iItem]));
+
+        $oForm->initChecker($aItem);
+        if($oForm->isSubmittedAndValid()) {
+            if($oForm->update($aItem['id']) !== false)
+                $aResult = ['grid' => $this->getCode(false), 'blink' => $aItem['id']];
+            else
+                $aResult = ['msg' => _t($CNF['T']['err_cannot_perform'])];
+
+            return echoJson($aResult);
+        }
+
+        bx_import('BxTemplFunctions');
+        $sContent = BxTemplFunctions::getInstance()->popupBox($this->_oModule->_oConfig->getHtmlIds('popup_question'), _t($CNF['T']['popup_title_question_edit']), $this->_oModule->_oTemplate->parseHtmlByName('popup_qnr_question.html', [
+            'form_id' => $oForm->getId(),
+            'form' => $oForm->getCode(true),
+            'object' => $this->_sObject,
+            'action' => $sAction
+        ]));
+
+        return echoJson(['popup' => ['html' => $sContent, 'options' => ['closeOnOuterClick' => false]]]);
+    }
+
+    protected function _getDataSql($sFilter, $sOrderField, $sOrderDir, $iStart, $iPerPage)
+    {
+        $this->_aOptions['source'] .= $this->_oModule->_oDb->prepareAsString("AND `content_id`=? AND `action`='add' ", $this->_iGroupContentId);
+
+        return parent::_getDataSql($sFilter, $sOrderField, $sOrderDir, $iStart, $iPerPage);
+    }
+
+    protected function _isVisibleGrid ($a)
+    {
+        return $this->_oModule->checkAllowedEdit($this->_aGroupContentInfo) == CHECK_ACTION_RESULT_ALLOWED;
+    }
+
+    protected function _getIds()
+    {
+        $aIds = bx_get('ids');
+        if(!$aIds || !is_array($aIds)) {
+            $iId = (int)bx_get('id');
+            if(!$iId) 
+                return false;
+
+            $aIds = [$iId];
+        }
+
+        return $aIds;
+    }
+}
+
+/** @} */

+ 29 - 17
modules/base/groups/classes/BxBaseModGroupsMenuViewActions.php

@@ -28,26 +28,38 @@ class BxBaseModGroupsMenuViewActions extends BxBaseModProfileMenuViewActions
             return;
 
         $CNF = &$this->_oModule->_oConfig->CNF;
+        
+        if(isset($CNF['OBJECT_CONNECTIONS']) && ($oConn = BxDolConnection::getObjectInstance($CNF['OBJECT_CONNECTIONS'])) !== false) {
+            $iProfileId = bx_get_logged_profile_id();
+            $iGroupProfileId = $this->_oProfile->id();
+            $sOnclickAddFan = "bx_conn_action(this, 'bx_events_fans', 'add', '" . $iGroupProfileId . "')";
 
-        $oConn = isset($CNF['OBJECT_CONNECTIONS']) ? BxDolConnection::getObjectInstance($CNF['OBJECT_CONNECTIONS']) : false;
-        if ($oConn && $oConn->isConnectedNotMutual(bx_get_logged_profile_id(), $this->_oProfile->id())) {
-            $this->addMarkers(array(
-                'title_add_fan' => _t($CNF['T']['menu_item_title_become_fan_sent']),
-                'title_remove_fan' => _t($CNF['T']['menu_item_title_leave_group_cancel_request']),
-            ));
-        } 
-        else {
-            if (isset($CNF['T']['menu_item_title_become_fan']) && isset($CNF['T']['menu_item_title_leave_group'])){
-                $this->addMarkers(array(
-                    'title_add_fan' => _t($CNF['T']['menu_item_title_become_fan']),
-                    'title_remove_fan' => _t($CNF['T']['menu_item_title_leave_group']),
-                ));
+            $aMarkers = [];
+            if($oConn->isConnectedNotMutual($iProfileId, $iGroupProfileId)) {
+                if(isset($CNF['T']['menu_item_title_become_fan_sent'], $CNF['T']['menu_item_title_leave_group_cancel_request']))
+                    $aMarkers = [
+                        'title_add_fan' => _t($CNF['T']['menu_item_title_become_fan_sent']),
+                        'onclick_add_fan' => $sOnclickAddFan,
+                        'title_remove_fan' => _t($CNF['T']['menu_item_title_leave_group_cancel_request']),
+                    ];
             }
-        }
+            else {
+                if(!empty($CNF['FIELD_JOIN_CONFIRMATION']) && (int)$this->_aContentInfo[$CNF['FIELD_JOIN_CONFIRMATION']] != 0)
+                    $sOnclickAddFan = $this->_oModule->_oConfig->getJsObject('entry') . ".connAction(this, 'bx_events_fans', 'add', '" . $iGroupProfileId . "')";
+
+                if(isset($CNF['T']['menu_item_title_become_fan'], $CNF['T']['menu_item_title_leave_group']))
+                    $aMarkers = [
+                        'title_add_fan' => _t($CNF['T']['menu_item_title_become_fan']),
+                        'onclick_add_fan' => $sOnclickAddFan,
+                        'title_remove_fan' => _t($CNF['T']['menu_item_title_leave_group']),
+                    ];
+            }
+            $this->addMarkers($aMarkers);
 
-        if ($oConn && $this->_oModule->isFan($this->_aContentInfo[$CNF['FIELD_ID']])) {
-            $a = $oConn->getConnectedInitiators($this->_oProfile->id());
-            $this->addMarkers(array('recipients' => implode(',', $a)));
+            if ($this->_oModule->isFan($this->_aContentInfo[$CNF['FIELD_ID']])) {
+                $a = $oConn->getConnectedInitiators($iGroupProfileId);
+                $this->addMarkers(array('recipients' => implode(',', $a)));
+            }
         }
     }
 }

+ 104 - 0
modules/base/groups/classes/BxBaseModGroupsModule.php

@@ -105,6 +105,23 @@ class BxBaseModGroupsModule extends BxBaseModProfileModule
     	));
     }
 
+    public function actionGetQuestionnaire()
+    {
+        $sObject = '';
+        if(($sObject = bx_get('o')) !== false)
+            $sObject = bx_process_url_param($sObject);
+        
+        $sAction = '';
+        if(($sAction = bx_get('a')) !== false)
+            $sAction = bx_process_url_param($sAction);
+
+        $iContentProfileId = 0;
+        if(($iContentProfileId = bx_get('cpi')) !== false)
+            $iContentProfileId = (int)$iContentProfileId;
+
+        echoJson($this->serviceGetQuestionnaire($sObject, $sAction, $iContentProfileId));
+    }
+
     public function serviceManageTools($sType = 'common')
     {
         $sResult = parent::serviceManageTools($sType);
@@ -1107,6 +1124,93 @@ class BxBaseModGroupsModule extends BxBaseModProfileModule
         return $this->unsetRole($aItemInfo['profile_id'], $iClientId);
     }
 
+    public function serviceGetQuestionnaire($sObject, $sAction, $iContentProfileId)
+    {
+        $CNF = &$this->_oConfig->CNF;
+
+        $aContentProfileInfo = BxDolProfileQuery::getInstance()->getInfoById($iContentProfileId);
+        if(empty($aContentProfileInfo) || !is_array($aContentProfileInfo))
+            return ['code' => 1];
+
+        $aForm = [
+            'form_attrs' => [
+                'id' => $this->getName() . '_questionnaire',
+                'action' => BX_DOL_URL_ROOT . bx_append_url_params($this->_oConfig->getBaseUri() . 'get_questionnaire', [
+                    'o' => $sObject, 
+                    'a' => $sAction, 
+                    'cpi' => $iContentProfileId
+                ])
+            ],
+            'params' => [
+                'db' => [
+                    'table' => $CNF['TABLE_ANSWERS'],
+                    'key' => '',
+                    'uri' => '',
+                    'uri_title' => '',
+                    'submit_name' => 'do_submit'
+                ],
+            ],
+            'inputs' => []
+        ];
+
+        $aQuestions = $this->_oDb->getQuestions(['sample' => 'content_id', 'content_id' => $aContentProfileInfo['content_id']]);
+        if(empty($aQuestions) || !is_array($aQuestions))
+            return ['code' => 1];
+
+        foreach($aQuestions as $aQuestion) {
+            $aForm['inputs'][] = [
+                'type' => 'text',
+                'name' => 'question_' . $aQuestion['id'],
+                'caption' => $aQuestion['question'],
+                'value' => '',
+                'required' => '1',
+                'checker' => [
+                    'func' => 'Avail',
+                    'params' => [],
+                    'error' => _t($CNF['T']['form_qnr_field_qn_err']),
+                ],
+                'db' => [
+                    'pass' => 'Xss',
+                ],
+            ];
+        }
+
+        $aForm['inputs']['controls'] = [
+            'name' => 'controls',
+            'type' => 'input_set', [
+                'type' => 'submit',
+                'name' => 'do_submit',
+                'value' => _t('_Submit'),
+            ], [
+                'type' => 'reset',
+                'name' => 'close',
+                'value' => _t('_Cancel'),
+                'attrs' => [
+                    'onclick' => "$('.bx-popup-applied:visible').dolPopupHide()",
+                    'class' => 'bx-def-margin-sec-left',
+                ],
+            ]
+        ];
+
+    	$oForm = new BxTemplFormView($aForm);
+        $oForm->initChecker();
+        if($oForm->isSubmittedAndValid()) {
+            $iProfileId = bx_get_logged_profile_id();
+
+            foreach($aQuestions as $aQuestion)
+                $this->_oDb->insertAnswer((int)$aQuestion['id'], $iProfileId, $oForm->getCleanValue('question_' . $aQuestion['id']));
+
+            return ['code' => 0, 'o' => $sObject, 'a' => $sAction, 'cpi' => $iContentProfileId, 'eval' => $this->_oConfig->getJsObject('entry') . '.connActionPerformed(oData)'];
+        }
+
+        bx_import('BxTemplFunctions');
+        $sContent = BxTemplFunctions::getInstance()->popupBox($this->_oConfig->getHtmlIds('popup_questionnaire'), _t($CNF['T']['popup_title_questionnaire']), $this->_oTemplate->parseHtmlByName('popup_qnr_questionnaire.html', [
+            'form_id' => $oForm->getId(),
+            'form' => $oForm->getCode(true),
+        ]));
+
+        return ['popup' => ['html' => $sContent, 'options' => ['closeOnOuterClick' => false]]];
+    }
 
     /**
      * Data for Notifications module

+ 16 - 0
modules/base/groups/classes/BxBaseModGroupsTemplate.php

@@ -86,6 +86,22 @@ class BxBaseModGroupsTemplate extends BxBaseModProfileTemplate
             'bx_repeat:roles' => $aTmplVarsRoles
         ));
     }
+    
+    public function getPopupQuestionnaire($iContentId, $iProfileId)
+    {
+        $aAnswers = $this->_oModule->_oDb->getQuestions(['sample' => 'answers', 'content_id' => $iContentId, 'profile_id' => $iProfileId]);
+        if(empty($aAnswers) || !is_array($aAnswers))
+            return '';
+
+        $aTmplVarsAnswers = [];
+        foreach($aAnswers as $aAnswer)
+            $aTmplVarsAnswers[] = [
+                'question' => $aAnswer['question'],
+                'answer' => $aAnswer['answer'],
+            ];
+
+        return $this->parseHtmlByName('popup_qnr_answers.html', ['bx_repeat:answers' => $aTmplVarsAnswers]);
+    }
 
     protected function _getUnitClass($aData, $sTemplateName = 'unit.html')
     {

+ 60 - 0
modules/base/groups/js/entry.js

@@ -0,0 +1,60 @@
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    BaseGroups Base classes for groups modules
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+function BxBaseModGroupsEntry(oOptions) {
+    this._sActionsUri = oOptions.sActionUri;
+    this._sActionsUrl = oOptions.sActionUrl;
+    this._sObjName = oOptions.sObjName == undefined ? 'oBxEventsEntry' : oOptions.sObjName;
+    this._sAnimationEffect = oOptions.sAnimationEffect == undefined ? 'slide' : oOptions.sAnimationEffect;
+    this._iAnimationSpeed = oOptions.iAnimationSpeed == undefined ? 'slow' : oOptions.iAnimationSpeed;
+    this._aHtmlIds = oOptions.aHtmlIds == undefined ? {} : oOptions.aHtmlIds;
+}
+
+BxBaseModGroupsEntry.prototype.connAction = function(oElement, sObject, sAction, iContentId) {
+    var $this = this;
+    var oParams = this._getDefaultData();
+    oParams['o'] = sObject;
+    oParams['a'] = sAction;
+    oParams['cpi'] = iContentId;
+
+    if(oElement)
+        this.loadingInButton(oElement, true);
+
+    jQuery.get (
+        this._sActionsUrl + 'get_questionnaire',
+        oParams,
+        function(oData) {
+            if(oElement)
+                $this.loadingInButton(oElement, false);
+
+            oData.element = oElement;
+            processJsonData(oData);
+        },
+        'json'
+    );
+};
+
+BxBaseModGroupsEntry.prototype.connActionPerformed = function(oData) {
+    bx_conn_action(oData.element, oData.o, oData.a, oData.cpi);
+};
+
+BxBaseModGroupsEntry.prototype.loadingInButton = function(e, bShow) {
+    if($(e).length)
+        bx_loading_btn($(e), bShow);
+    else
+        bx_loading($('body'), bShow);	
+};
+
+BxBaseModGroupsEntry.prototype._getDefaultData = function() {
+    var oDate = new Date();
+    return jQuery.extend({}, this._oRequestParams, {_t:oDate.getTime()});
+};
+
+/** @} */

+ 8 - 0
modules/base/groups/template/popup_qnr_answers.html

@@ -0,0 +1,8 @@
+<div class="bx-base-group-questionnaire bx-popup-width">
+    <bx_repeat:answers>
+        <div class="bx-base-group-qnr-answer bx-def-margin-sec-top-auto">
+            <div class="bx-base-group-qnr-a-question bx-def-font-large">__question__</div>
+            <div class="bx-base-group-qnr-a-answer bx-def-font-small">__answer__</div>
+        </div>
+    </bx_repeat:answers>
+</div>

+ 19 - 0
modules/base/groups/template/popup_qnr_question.html

@@ -0,0 +1,19 @@
+<div class="bx-base-group-question-form">
+    <div class="bx-base-group-question-form-cnt">
+        __form__
+        <script language="javascript">
+            $(document).ready(function () {
+                $("#__form_id__").ajaxForm({ 
+                    dataType: "json",
+                    beforeSubmit: function (formData, jqForm, options) {
+                        bx_loading($("#__form_id__"), true);
+                    },
+                    success: function (data) {
+                        $(".bx-popup-applied:visible").dolPopupHide();
+                        glGrids.__object__.processJson(data, '__action__');
+                    }
+                });
+            });
+        </script>
+    </div>
+</div>

+ 20 - 0
modules/base/groups/template/popup_qnr_questionnaire.html

@@ -0,0 +1,20 @@
+<div class="bx-base-group-questionnaire-form">
+    <div class="bx-base-group-questionnaire-form-cnt">
+        __form__
+        <script language="javascript">
+            $(document).ready(function () {
+                $("#__form_id__").ajaxForm({ 
+                    dataType: "json",
+                    beforeSubmit: function (formData, jqForm, options) {
+                        bx_loading($("#__form_id__"), true);
+                    },
+                    success: function (data) {
+                        $(".bx-popup-applied:visible").dolPopupHide();
+
+                        processJsonData(data);
+                    }
+                });
+            });
+        </script>
+    </div>
+</div>

+ 12 - 0
modules/boonex/events/classes/BxEventsConfig.php

@@ -38,6 +38,8 @@ class BxEventsConfig extends BxBaseModGroupsConfig
             'TABLE_CHECK_IN' => $aModule['db_prefix'] . 'check_in',
             'TABLE_INVITES' => $aModule['db_prefix'] . 'invites',
             'TABLE_PRICES' => $aModule['db_prefix'] . 'prices',
+            'TABLE_QUESTIONS' => $aModule['db_prefix'] . 'qnr_questions',
+            'TABLE_ANSWERS' => $aModule['db_prefix'] . 'qnr_answers',
             'TABLE_SESSIONS' => $aModule['db_prefix'] . 'sessions',
 
             // database fields
@@ -137,6 +139,9 @@ class BxEventsConfig extends BxBaseModGroupsConfig
             'OBJECT_FORM_ENTRY_DISPLAY_EDIT_COVER' => 'bx_event_edit_cover',
             'OBJECT_FORM_ENTRY_DISPLAY_DELETE' => 'bx_event_delete',
             'OBJECT_FORM_ENTRY_DISPLAY_INVITE' => 'bx_event_invite',
+            'OBJECT_FORM_QUESTION' => 'bx_events_question',
+            'OBJECT_FORM_QUESTION_DISPLAY_ADD' => 'bx_events_question_add',
+            'OBJECT_FORM_QUESTION_DISPLAY_EDIT' => 'bx_events_question_edit',
             'OBJECT_FORM_SESSION' => 'bx_events_session',
             'OBJECT_FORM_SESSION_DISPLAY_ADD' => 'bx_events_session_add',
             'OBJECT_FORM_SESSION_DISPLAY_EDIT' => 'bx_events_session_edit',
@@ -163,6 +168,7 @@ class BxEventsConfig extends BxBaseModGroupsConfig
             'OBJECT_GRID_COMMON' => 'bx_events_common',
             'OBJECT_GRID_CONNECTIONS' => 'bx_events_fans',
             'OBJECT_GRID_INVITES' => 'bx_events_invites',
+            'OBJECT_GRID_QUESTIONS_MANAGE' => 'bx_events_questions_manage',
             'OBJECT_GRID_SESSIONS_MANAGE' => 'bx_events_sessions_manage',
             'OBJECT_GRID_PRICES_MANAGE' => 'bx_events_prices_manage',
             'OBJECT_GRID_PRICES_VIEW' => 'bx_events_prices_view',
@@ -276,6 +282,10 @@ class BxEventsConfig extends BxBaseModGroupsConfig
                 'txt_cart_item_title' => '_bx_events_txt_cart_item_title',
                 'txt_cart_item_title_lifetime' => '_bx_events_txt_cart_item_title_lifetime',
                 'txt_subscribe_title' => '_bx_events_grid_action_title_subscribe_title',
+                'form_qnr_field_qn_err' => '_bx_events_form_questionnaire_input_question_err',
+                'popup_title_questionnaire' => '_bx_events_popup_title_questionnaire',
+                'popup_title_question_add' => '_bx_events_popup_title_qn_add',
+                'popup_title_question_edit' => '_bx_events_popup_title_qn_edit',
                 'popup_title_price_add' => '_bx_events_popup_title_price_add',
                 'popup_title_price_edit' => '_bx_events_popup_title_price_edit',
                 'msg_performed' => '_bx_events_msg_performed',
@@ -309,6 +319,8 @@ class BxEventsConfig extends BxBaseModGroupsConfig
 
         $sHtmlPrefix = str_replace('_', '-', $this->_sName);
         $this->_aHtmlIds = array_merge($this->_aHtmlIds, [
+            'popup_question' => $sHtmlPrefix . '-popup-question',
+            'popup_questionnaire' => $sHtmlPrefix . '-popup-questionnaire',
             'popup_session' => $sHtmlPrefix . '-popup-session'
         ]);
     }

+ 11 - 1
modules/boonex/events/classes/BxEventsDb.php

@@ -215,7 +215,7 @@ class BxEventsDb extends BxBaseModGroupsDb
             'event_id' => $iId
         ]) > 0;
     }
-    
+
     public function getSessions($aParams = [])
     {
         $CNF = &$this->_oConfig->CNF;
@@ -263,6 +263,16 @@ class BxEventsDb extends BxBaseModGroupsDb
             'event_id' => $iEventId
         ]);
     }
+    
+    public function deleteSessions($aWhere)
+    {
+        $CNF = &$this->_oConfig->CNF;
+
+        if(empty($aWhere) || !is_array($aWhere))
+            return false;
+
+        return (int)$this->query("DELETE FROM `" . $CNF['TABLE_SESSIONS'] . "` WHERE " . $this->arrayToSQL($aWhere, ' AND ')) > 0;
+    }
 }
 
 /** @} */

+ 1 - 1
modules/boonex/events/classes/BxEventsFormEntry.php

@@ -337,7 +337,7 @@ class BxEventsFormEntry extends BxBaseModGroupsFormEntry
     function addCssJs ()
     {
         if ((!isset($this->aParams['view_mode']) || !$this->aParams['view_mode']) && !self::$_isCssJsEventsAdded) {
-            $this->oTemplate->addJs(array('moment-timezone-with-data-1970-2030.min.js', 'entry.js', 'intervals.js'));
+            $this->oTemplate->addJs(array('moment-timezone-with-data-1970-2030.min.js', 'modules/base/groups/js/|entry.js', 'entry.js', 'intervals.js'));
             $this->oTemplate->addCss('informer.css');
             self::$_isCssJsEventsAdded = true;
         }  

+ 22 - 0
modules/boonex/events/classes/BxEventsFormQuestion.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    Events Events
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxEventsFormQuestion extends BxBaseModGroupsFormQuestion
+{
+    public function __construct($aInfo, $oTemplate = false)
+    {
+        $this->_sModule = 'bx_events';
+
+        parent::__construct($aInfo, $oTemplate);
+    }
+}
+
+/** @} */

+ 9 - 0
modules/boonex/events/classes/BxEventsFormsEntryHelper.php

@@ -18,6 +18,15 @@ class BxEventsFormsEntryHelper extends BxBaseModGroupsFormsEntryHelper
     {
         parent::__construct($oModule);
     }
+
+    public function onDataDeleteAfter($iContentId, $aContentInfo, $oProfile)
+    {
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
+        $this->_oModule->_oDb->deleteSessions(['event_id' => $iContentId]);
+
+        return parent::onDataDeleteAfter($iContentId, $aContentInfo, $oProfile);
+    }
 }
 
 /** @} */

+ 22 - 0
modules/boonex/events/classes/BxEventsGridQuestionsManage.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    Events Events
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxEventsGridQuestionsManage extends BxBaseModGroupsGridQuestionsManage
+{
+    public function __construct ($aOptions, $oTemplate = false)
+    {
+        $this->_sModule = 'bx_events';
+
+        parent::__construct ($aOptions, $oTemplate);
+    }
+}
+
+/** @} */

+ 5 - 0
modules/boonex/events/classes/BxEventsMenuViewActionsAll.php

@@ -46,6 +46,11 @@ class BxEventsMenuViewActionsAll extends BxBaseModGroupsMenuViewActionsAll
         return $this->_getMenuItemByNameActionsMore($aItem);
     }
 
+    protected function _getMenuItemEditEventQuestionnaire($aItem)
+    {
+        return $this->_getMenuItemByNameActionsMore($aItem);
+    }
+
     protected function _getMenuItemEditEventSessions($aItem)
     {
         return $this->_getMenuItemByNameActionsMore($aItem);

+ 29 - 2
modules/boonex/events/classes/BxEventsModule.php

@@ -276,6 +276,33 @@ class BxEventsModule extends BxBaseModGroupsModule implements iBxDolCalendarServ
         ]);
     }
 
+    public function serviceEntityEditQuestionnaire($iProfileId = 0)
+    {
+        $CNF = &$this->_oConfig->CNF;
+
+        if(!$iProfileId)
+            $iProfileId = bx_process_input(bx_get('profile_id'), BX_DATA_INT);
+        if(!$iProfileId)
+            return '';
+
+        $aProfileInfo = BxDolProfileQuery::getInstance()->getInfoById($iProfileId);
+        if(empty($aProfileInfo) || !is_array($aProfileInfo))
+            return '';
+        
+        $aContentInfo = $this->_oDb->getContentInfoById($aProfileInfo['content_id']);
+        if(empty($aContentInfo) || !is_array($aContentInfo))
+            return '';
+
+        if($this->checkAllowedEdit($aContentInfo) !== CHECK_ACTION_RESULT_ALLOWED)
+            return MsgBox(_t('_Access denied'));
+
+        $oGrid = BxDolGrid::getObjectInstance($CNF['OBJECT_GRID_QUESTIONS_MANAGE']);
+        if(!$oGrid)
+            return '';
+
+        return $oGrid->getCode();
+    }
+
     public function serviceEntitySessions($iProfileId = 0)
     {
         $CNF = &$this->_oConfig->CNF;
@@ -287,11 +314,11 @@ class BxEventsModule extends BxBaseModGroupsModule implements iBxDolCalendarServ
 
         $aProfileInfo = BxDolProfileQuery::getInstance()->getInfoById($iProfileId);
         if(empty($aProfileInfo) || !is_array($aProfileInfo))
-            return [];
+            return '';
         
         $aContentInfo = $this->_oDb->getContentInfoById($aProfileInfo['content_id']);
         if(empty($aContentInfo) || !is_array($aContentInfo))
-            return [];
+            return '';
 
         if($this->checkAllowedEdit($aContentInfo) !== CHECK_ACTION_RESULT_ALLOWED)
             return MsgBox(_t('_Access denied'));

+ 1 - 1
modules/boonex/events/classes/BxEventsPageEntry.php

@@ -27,7 +27,7 @@ class BxEventsPageEntry extends BxBaseModGroupsPageEntry
         if(!empty($sResult))
             $sResult .= $this->_oModule->_oTemplate->getJsCode('entry');
 
-        $this->_oModule->_oTemplate->addJs(['entry.js']);
+        $this->_oModule->_oTemplate->addJs(['modules/base/groups/js/|entry.js', 'entry.js']);
         return $sResult;
     }
 }

+ 31 - 1
modules/boonex/events/install/langs/en.xml

@@ -90,6 +90,22 @@
     <string name="_bx_events_form_input_repeat_day_of_week"><![CDATA[Repeat day of week]]></string>
     <string name="_bx_events_form_input_stop_repeating"><![CDATA[Stop repeating]]></string>
 
+    <string name="_bx_events_form_question"><![CDATA[Question]]></string>
+    <string name="_bx_events_form_question_display_add"><![CDATA[Add Question]]></string>
+    <string name="_bx_events_form_question_display_edit"><![CDATA[Edit Question]]></string>
+    <string name="_bx_events_form_question_input_sys_action"><![CDATA[Action]]></string>
+    <string name="_bx_events_form_question_input_sys_question"><![CDATA[Question]]></string>
+    <string name="_bx_events_form_question_input_question"><![CDATA[Question]]></string>
+    <string name="_bx_events_form_question_input_question_err"><![CDATA[Question is mandatory.]]></string>
+    <string name="_bx_events_form_question_input_sys_answer"><![CDATA[Answer]]></string>
+    <string name="_bx_events_form_question_input_sys_controls"><![CDATA[Controls]]></string>
+    <string name="_bx_events_form_question_input_sys_do_submit"><![CDATA[Submit]]></string>
+    <string name="_bx_events_form_question_input_do_submit"><![CDATA[Submit]]></string>
+    <string name="_bx_events_form_question_input_sys_do_cancel"><![CDATA[Cancel]]></string>
+    <string name="_bx_events_form_question_input_do_cancel"><![CDATA[Cancel]]></string>
+
+    <string name="_bx_events_form_questionnaire_input_question_err"><![CDATA[Please, answer the question.]]></string>
+
     <string name="_bx_events_form_session"><![CDATA[Session]]></string>
     <string name="_bx_events_form_session_display_add"><![CDATA[Add Session]]></string>
     <string name="_bx_events_form_session_display_edit"><![CDATA[Edit Session]]></string>
@@ -156,6 +172,8 @@
     <string name="_bx_events_page_title_edit_profile"><![CDATA[Edit Event]]></string>
     <string name="_bx_events_page_title_sys_edit_profile_cover"><![CDATA[Edit Event Cover]]></string>
     <string name="_bx_events_page_title_edit_profile_cover"><![CDATA[Edit Cover]]></string>
+    <string name="_bx_events_page_title_sys_edit_questionnaire"><![CDATA[Edit Questionnaire]]></string>
+    <string name="_bx_events_page_title_edit_questionnaire"><![CDATA[Edit Questionnaire]]></string>
     <string name="_bx_events_page_title_sys_delete_profile"><![CDATA[Delete Event]]></string>
     <string name="_bx_events_page_title_delete_profile"><![CDATA[Delete Event]]></string>
     <string name="_bx_events_page_title_sys_join_profile"><![CDATA[Join Course]]></string>
@@ -230,6 +248,7 @@
     <string name="_bx_events_page_block_title_create_profile"><![CDATA[Create Event]]></string>
     <string name="_bx_events_page_block_title_edit_profile"><![CDATA[Edit Event]]></string>
     <string name="_bx_events_page_block_title_edit_profile_cover"><![CDATA[Edit Cover]]></string>
+    <string name="_bx_events_page_block_title_edit_questionnaire"><![CDATA[Edit Questionnaire]]></string>
     <string name="_bx_events_page_block_title_delete_profile"><![CDATA[Delete Event]]></string>
     <string name="_bx_events_page_block_title_join_profile"><![CDATA[Join Event]]></string>
     <string name="_bx_events_page_block_title_profile_info_link"><![CDATA[About <a href="{profile_link}">{display_name}</a>]]></string>
@@ -310,6 +329,8 @@
     <string name="_bx_events_menu_item_title_clear_reports"><![CDATA[Clear reports]]></string>
     <string name="_bx_events_menu_item_title_system_edit_cover"><![CDATA[Edit Cover]]></string>
     <string name="_bx_events_menu_item_title_edit_cover"><![CDATA[Edit Cover]]></string>
+    <string name="_bx_events_menu_item_title_system_edit_questionnaire"><![CDATA[Edit Questionnaire]]></string>
+    <string name="_bx_events_menu_item_title_edit_questionnaire"><![CDATA[Edit Questionnaire]]></string>
     <string name="_bx_events_menu_item_title_system_edit_sessions"><![CDATA[Edit Sessions]]></string>
     <string name="_bx_events_menu_item_title_edit_sessions"><![CDATA[Edit Sessions]]></string>
     <string name="_bx_events_menu_item_title_system_edit_pricing"><![CDATA[Edit Pricing]]></string>
@@ -426,7 +447,15 @@
     <string name="_bx_events_grid_action_title_adm_clear_reports"><![CDATA[Сlear reports]]></string>
     <string name="_bx_events_grid_action_err_delete"><![CDATA[Cannot delete the selected event(s).]]></string>
     <string name="_bx_events_grid_txt_account_manager"><![CDATA[Redirect to manage account.]]></string>
-    
+
+    <string name="_bx_events_grid_column_title_qn_question"><![CDATA[Question]]></string>
+    <string name="_bx_events_grid_action_title_qn_add"><![CDATA[Add]]></string>
+    <string name="_bx_events_grid_action_title_qn_edit"><![CDATA[Edit]]></string>
+    <string name="_bx_events_grid_action_title_qn_delete"><![CDATA[Delete]]></string>
+    <string name="_bx_events_popup_title_qn_add"><![CDATA[Add Question]]></string>
+    <string name="_bx_events_popup_title_qn_edit"><![CDATA[Edit Question]]></string>
+    <string name="_bx_events_popup_title_questionnaire"><![CDATA[Questionnaire]]></string>
+
     <string name="_bx_events_grid_column_title_sn_title"><![CDATA[Title]]></string>
     <string name="_bx_events_grid_column_title_sn_description"><![CDATA[Description]]></string>
     <string name="_bx_events_grid_column_title_sn_date_start"><![CDATA[Date start]]></string>
@@ -475,6 +504,7 @@
     <string name="_bx_events_txt_sample_score_up_single"><![CDATA[score up vote to event]]></string>
     <string name="_bx_events_txt_sample_score_down_single"><![CDATA[score down vote to event]]></string>
     <string name="_bx_events_txt_set_role"><![CDATA[Set Role]]></string>
+    <string name="_bx_events_txt_view_answers"><![CDATA[View questionnaire answers]]></string>
     <string name="_bx_events_txt_private_group"><![CDATA[Private event]]></string>
     <string name="_bx_events_txt_from_time_to_time"><![CDATA[{0} - {1}]]></string>
     <string name="_bx_events_txt_invite_popup_text"><![CDATA[You have been invited to a event. Click the button below to accept the invitation.]]></string>

+ 39 - 11
modules/boonex/events/install/sql/enable.sql

@@ -75,6 +75,15 @@ INSERT INTO `sys_objects_page`(`object`, `uri`, `title_system`, `title`, `module
 INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES 
 ('bx_events_edit_profile', 1, 'bx_events', '_bx_events_page_block_title_edit_profile', 11, 2147483647, 'service', 'a:2:{s:6:\"module\";s:9:\"bx_events\";s:6:\"method\";s:11:\"entity_edit\";}', 0, 0, 0);
 
+-- PAGE: questionnaire (join)
+
+INSERT INTO `sys_objects_page`(`object`, `uri`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_events_questionnaire', 'edit-event-questionnaire', '_bx_events_page_title_sys_edit_questionnaire', '_bx_events_page_title_edit_questionnaire', 'bx_events', 5, 2147483647, 1, 'page.php?i=edit-event-questionnaire', '', '', '', 0, 1, 0, 'BxEventsPageEntry', 'modules/boonex/events/classes/BxEventsPageEntry.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES 
+('bx_events_questionnaire', 1, 'bx_events', '_bx_events_page_block_title_edit_questionnaire', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:9:"bx_events";s:6:"method";s:25:"entity_edit_questionnaire";}', 0, 0, 0);
+
+
 -- PAGE: invite members
 
 INSERT INTO `sys_objects_page`(`object`, `uri`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
@@ -302,7 +311,7 @@ INSERT INTO `sys_menu_sets`(`set_name`, `module`, `title`, `deletable`) VALUES
 
 INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `submenu_popup`, `visible_for_levels`, `visibility_custom`, `active`, `copyable`, `editable`, `order`) VALUES 
 ('bx_events_view_actions', 'bx_events', 'join-event-profile', '_bx_events_menu_item_title_system_pay_and_join', '_bx_events_menu_item_title_pay_and_join', 'page.php?i=join-event-profile&profile_id={profile_id}', '', '', 'sign-in-alt', '', 0, 2147483647, 'a:3:{s:6:"module";s:9:"bx_events";s:6:"method";s:22:"is_paid_join_avaliable";s:6:"params";a:1:{i:0;s:12:"{profile_id}";}}', 1, 0, 0, 5),
-('bx_events_view_actions', 'bx_events', 'profile-fan-add', '_bx_events_menu_item_title_system_become_fan', '{title_add_fan}', 'javascript:void(0)', 'bx_conn_action(this, \'bx_events_fans\', \'add\', \'{profile_id}\')', '', 'sign-in-alt', '', 0, 2147483647, 'a:3:{s:6:"module";s:9:"bx_events";s:6:"method";s:22:"is_free_join_avaliable";s:6:"params";a:1:{i:0;s:12:"{profile_id}";}}', 1, 0, 0, 5),
+('bx_events_view_actions', 'bx_events', 'profile-fan-add', '_bx_events_menu_item_title_system_become_fan', '{title_add_fan}', 'javascript:void(0)', '{onclick_add_fan}', '', 'sign-in-alt', '', 0, 2147483647, 'a:3:{s:6:"module";s:9:"bx_events";s:6:"method";s:22:"is_free_join_avaliable";s:6:"params";a:1:{i:0;s:12:"{profile_id}";}}', 1, 0, 0, 5),
 ('bx_events_view_actions', 'bx_events', 'profile-subscribe-add', '_bx_events_menu_item_title_system_subscribe', '_bx_events_menu_item_title_subscribe', 'javascript:void(0)', 'bx_conn_action(this, \'sys_profiles_subscriptions\', \'add\', \'{profile_id}\')', '', 'check', '', 0, 2147483647, '', 1, 0, 1, 20),
 ('bx_events_view_actions', 'bx_events', 'profile-check-in', '_bx_events_menu_item_title_system_check_in', '_bx_events_menu_item_title_check_in', 'javascript:void(0)', 'javascript:{js_object_entry}.checkIn(this, {content_id});', '', 'check', '', 0, 2147483647, '', 1, 0, 1, 25),
 ('bx_events_view_actions', 'bx_events', 'profile-set-badges', '_sys_menu_item_title_system_set_badges', '_sys_menu_item_title_set_badges', 'javascript:void(0)', 'bx_menu_popup(''sys_set_badges'', window, {}, {module: ''bx_events'', content_id: {content_id}});', '', 'check-circle', '', 0, 192, 'a:2:{s:6:"module";s:9:"bx_events";s:6:"method";s:19:"is_badges_avaliable";}', 1, 0, 1, 30),
@@ -321,9 +330,10 @@ INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `titl
 ('bx_events_view_actions_more', 'bx_events', 'profile-fan-remove', '_bx_events_menu_item_title_system_leave_group', '{title_remove_fan}', 'javascript:void(0)', 'bx_conn_action(this, \'bx_events_fans\', \'remove\', \'{profile_id}\')', '', 'sign-out-alt', '', 2147483647, '', 1, 0, 10),
 ('bx_events_view_actions_more', 'bx_events', 'profile-subscribe-remove', '_bx_events_menu_item_title_system_unsubscribe', '_bx_events_menu_item_title_unsubscribe', 'javascript:void(0)', 'bx_conn_action(this, \'sys_profiles_subscriptions\', \'remove\', \'{profile_id}\')', '', 'check', '', 2147483647, '', 1, 0, 20),
 ('bx_events_view_actions_more', 'bx_events', 'edit-event-profile', '_bx_events_menu_item_title_system_edit_profile', '_bx_events_menu_item_title_edit_profile', 'page.php?i=edit-event-profile&id={content_id}', '', '', 'pencil-alt', '', 2147483647, '', 1, 0, 40),
-('bx_events_view_actions_more', 'bx_events', 'edit-event-sessions', '_bx_events_menu_item_title_system_edit_sessions', '_bx_events_menu_item_title_edit_sessions', 'page.php?i=edit-event-sessions&profile_id={profile_id}', '', '', 'calendar-day', '', 2147483647, '', 1, 0, 41),
-('bx_events_view_actions_more', 'bx_events', 'edit-event-pricing', '_bx_events_menu_item_title_system_edit_pricing', '_bx_events_menu_item_title_edit_pricing', 'page.php?i=edit-event-pricing&profile_id={profile_id}', '', '', 'money-check-alt', '', 2147483647, 'a:3:{s:6:"module";s:9:"bx_events";s:6:"method";s:20:"is_pricing_avaliable";s:6:"params";a:1:{i:0;s:12:"{profile_id}";}}', 1, 0, 42),
-('bx_events_view_actions_more', 'bx_events', 'invite-to-event', '_bx_events_menu_item_title_system_invite', '_bx_events_menu_item_title_invite', 'page.php?i=invite-to-event&id={content_id}', '', '', 'user-friends', '', 2147483647, '', 1, 0, 43),
+('bx_events_view_actions_more', 'bx_events', 'edit-event-questionnaire', '_bx_events_menu_item_title_system_edit_questionnaire', '_bx_events_menu_item_title_edit_questionnaire', 'page.php?i=edit-event-questionnaire&profile_id={profile_id}', '', '', 'check-double', '', 2147483647, '', 1, 0, 41),
+('bx_events_view_actions_more', 'bx_events', 'edit-event-sessions', '_bx_events_menu_item_title_system_edit_sessions', '_bx_events_menu_item_title_edit_sessions', 'page.php?i=edit-event-sessions&profile_id={profile_id}', '', '', 'calendar-day', '', 2147483647, '', 1, 0, 42),
+('bx_events_view_actions_more', 'bx_events', 'edit-event-pricing', '_bx_events_menu_item_title_system_edit_pricing', '_bx_events_menu_item_title_edit_pricing', 'page.php?i=edit-event-pricing&profile_id={profile_id}', '', '', 'money-check-alt', '', 2147483647, 'a:3:{s:6:"module";s:9:"bx_events";s:6:"method";s:20:"is_pricing_avaliable";s:6:"params";a:1:{i:0;s:12:"{profile_id}";}}', 1, 0, 43),
+('bx_events_view_actions_more', 'bx_events', 'invite-to-event', '_bx_events_menu_item_title_system_invite', '_bx_events_menu_item_title_invite', 'page.php?i=invite-to-event&id={content_id}', '', '', 'user-friends', '', 2147483647, '', 1, 0, 44),
 ('bx_events_view_actions_more', 'bx_events', 'delete-event-profile', '_bx_events_menu_item_title_system_delete_profile', '_bx_events_menu_item_title_delete_profile', 'page.php?i=delete-event-profile&id={content_id}', '', '', 'remove', '', 2147483647, '', 1, 0, 50),
 ('bx_events_view_actions_more', 'bx_events', 'approve-event-profile', '_sys_menu_item_title_system_va_approve', '_sys_menu_item_title_va_approve', 'javascript:void(0)', 'javascript:bx_approve(this, ''{module_uri}'', {content_id});', '', 'check', '', 2147483647, '', 1, 0, 60);
 
@@ -356,6 +366,7 @@ INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `titl
 ('bx_events_view_actions_all', 'bx_events', 'audit', '_sys_menu_item_title_system_va_audit', '_sys_menu_item_title_va_audit', 'page.php?i=dashboard-audit&module=bx_events&content_id={content_id}', '', '', 'history', '', '', 0, 192, '', 1, 0, 290),
 ('bx_events_view_actions_all', 'bx_events', 'social-sharing', '_sys_menu_item_title_system_social_sharing', '_sys_menu_item_title_social_sharing', 'javascript:void(0)', 'oBxDolPage.share(this, \'{url_encoded}\')', '', 'share', '', '', 0, 2147483647, '', 1, 0, 300),
 ('bx_events_view_actions_all', 'bx_events', 'edit-event-profile', '_bx_events_menu_item_title_system_edit_profile', '', '', '', '', '', '', '', 0, 2147483647, '', 1, 0, 410),
+('bx_events_view_actions_all', 'bx_events', 'edit-event-questionnaire', '_bx_events_menu_item_title_system_edit_questionnaire', '', '', '', '', '', '', '', 0, 2147483647, '', 1, 0, 411),
 ('bx_events_view_actions_all', 'bx_events', 'edit-event-sessions', '_bx_events_menu_item_title_system_edit_sessions', '', '', '', '', '', '', '', 0, 2147483647, '', 1, 0, 412),
 ('bx_events_view_actions_all', 'bx_events', 'edit-event-pricing', '_bx_events_menu_item_title_system_edit_pricing', '', '', '', '', '', '', '', 0, 2147483647, '', 1, 0, 415),
 ('bx_events_view_actions_all', 'bx_events', 'invite-to-event', '_bx_events_menu_item_title_system_invite', '', '', '', '', '', '', '', 0, 2147483647, '', 1, 0, 420),
@@ -602,17 +613,18 @@ INSERT INTO `sys_objects_grid` (`object`, `source_type`, `source`, `table`, `fie
 ('bx_events_fans', 'Sql', 'SELECT `p`.`id`, `c`.`added`, `c`.`mutual` FROM `sys_profiles` AS `p` INNER JOIN `sys_accounts` AS `a` ON (`a`.`id` = `p`.`account_id`) {join_connections}', 'sys_profiles', 'id', 'c`.`added', '', '', 10, NULL, 'start', '', 'name,email', '', 'auto', '', '', 2147483647, 0, 'BxEventsGridConnections', 'modules/boonex/events/classes/BxEventsGridConnections.php');
 
 INSERT INTO `sys_grid_fields` (`object`, `name`, `title`, `width`, `params`, `order`) VALUES
-('bx_events_fans', 'name', '_sys_name', '50%', '', 10),
+('bx_events_fans', 'name', '_sys_name', '40%', '', 10),
 ('bx_events_fans', 'role', '_bx_events_txt_role', '10%', '', 15),
 ('bx_events_fans', 'role_added', '_bx_events_txt_role_added', '10%', '', 16),
 ('bx_events_fans', 'role_expired', '_bx_events_txt_role_expired', '10%', '', 17),
-('bx_events_fans', 'actions', '', '20%', '', 20);
+('bx_events_fans', 'actions', '', '30%', '', 20);
 
-INSERT INTO `sys_grid_actions` (`object`, `type`, `name`, `title`, `icon`, `confirm`, `order`) VALUES
-('bx_events_fans', 'single', 'accept', '_sys_accept', '', 0, 10),
-('bx_events_fans', 'single', 'set_role', '_bx_events_txt_set_role', '', 0, 20),
-('bx_events_fans', 'single', 'set_role_submit', '', '', 0, 21),
-('bx_events_fans', 'single', 'delete', '', 'remove', 1, 40);
+INSERT INTO `sys_grid_actions` (`object`, `type`, `name`, `title`, `icon`, `icon_only`, `confirm`, `order`) VALUES
+('bx_events_fans', 'single', 'questionnaire', '_bx_events_txt_view_answers', 'check-double', 1, 0, 5),
+('bx_events_fans', 'single', 'accept', '_sys_accept', '', 0, 0, 10),
+('bx_events_fans', 'single', 'set_role', '_bx_events_txt_set_role', '', 0, 0, 20),
+('bx_events_fans', 'single', 'set_role_submit', '', '', 0, 0, 21),
+('bx_events_fans', 'single', 'delete', '', 'remove', 0, 1, 40);
 
 -- GRID: invites
 INSERT INTO `sys_objects_grid` (`object`, `source_type`, `source`, `table`, `field_id`, `field_order`, `field_active`, `paginate_url`, `paginate_per_page`, `paginate_simple`, `paginate_get_start`, `paginate_get_per_page`, `filter_fields`, `filter_fields_translatable`, `filter_mode`, `sorting_fields`, `sorting_fields_translatable`, `visible_for_levels`, `responsive`, `override_class_name`, `override_class_file`) VALUES
@@ -658,6 +670,22 @@ INSERT INTO `sys_grid_actions` (`object`, `type`, `name`, `title`, `icon`, `icon
 ('bx_events_common', 'bulk', 'delete_with_content', '_bx_events_grid_action_title_adm_delete_with_content', '', 0, 1, 0, 2),
 ('bx_events_common', 'single', 'settings', '_bx_events_grid_action_title_adm_more_actions', 'cog', 1, 0, 1, 1);
 
+-- GRIDS: questionnaire
+INSERT INTO `sys_objects_grid` (`object`, `source_type`, `source`, `table`, `field_id`, `field_order`, `field_active`, `paginate_url`, `paginate_per_page`, `paginate_simple`, `paginate_get_start`, `paginate_get_per_page`, `filter_fields`, `filter_fields_translatable`, `filter_mode`, `sorting_fields`, `sorting_fields_translatable`, `visible_for_levels`, `override_class_name`, `override_class_file`) VALUES
+('bx_events_questions_manage', 'Sql', 'SELECT * FROM `bx_events_qnr_questions` WHERE 1 ', 'bx_events_qnr_questions', 'id', 'order', '', '', 100, NULL, 'start', '', 'question', '', 'like', '', '', 2147483647, 'BxEventsGridQuestionsManage', 'modules/boonex/events/classes/BxEventsGridQuestionsManage.php');
+
+INSERT INTO `sys_grid_fields` (`object`, `name`, `title`, `width`, `translatable`, `chars_limit`, `params`, `order`) VALUES
+('bx_events_questions_manage', 'checkbox', '_sys_select', '1%', 0, '', '', 1),
+('bx_events_questions_manage', 'order', '', '1%', 0, '', '', 2),
+('bx_events_questions_manage', 'question', '_bx_events_grid_column_title_qn_question', '78%', 0, 64, '', 3),
+('bx_events_questions_manage', 'actions', '', '20%', 0, '', '', 4);
+
+INSERT INTO `sys_grid_actions` (`object`, `type`, `name`, `title`, `icon`, `icon_only`, `confirm`, `order`) VALUES
+('bx_events_questions_manage', 'independent', 'add', '_bx_events_grid_action_title_qn_add', '', 0, 0, 1),
+('bx_events_questions_manage', 'single', 'edit', '_bx_events_grid_action_title_qn_edit', 'pencil-alt', 1, 0, 1),
+('bx_events_questions_manage', 'single', 'delete', '_bx_events_grid_action_title_qn_delete', 'remove', 1, 1, 2),
+('bx_events_questions_manage', 'bulk', 'delete', '_bx_events_grid_action_title_qn_delete', '', 0, 1, 1);
+
 -- GRIDS: Sessions
 INSERT INTO `sys_objects_grid` (`object`, `source_type`, `source`, `table`, `field_id`, `field_order`, `field_active`, `paginate_url`, `paginate_per_page`, `paginate_simple`, `paginate_get_start`, `paginate_get_per_page`, `filter_fields`, `filter_fields_translatable`, `filter_mode`, `sorting_fields`, `sorting_fields_translatable`, `visible_for_levels`, `override_class_name`, `override_class_file`) VALUES
 ('bx_events_sessions_manage', 'Sql', 'SELECT * FROM `bx_events_sessions` WHERE 1 ', 'bx_events_sessions', 'id', 'order', '', '', 100, NULL, 'start', '', 'title,description', '', 'like', '', '', 2147483647, 'BxEventsGridSessionsManage', 'modules/boonex/events/classes/BxEventsGridSessionsManage.php');

+ 56 - 0
modules/boonex/events/install/sql/install.sql

@@ -55,6 +55,31 @@ CREATE TABLE IF NOT EXISTS `bx_events_intervals` (
   KEY `event_id` (`event_id`)
 ) AUTO_INCREMENT=1000;
 
+
+-- TABLE: QUESTIONS
+CREATE TABLE IF NOT EXISTS `bx_events_qnr_questions` (
+  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+  `content_id` int(10) unsigned NOT NULL DEFAULT '0',
+  `added` int(10) NOT NULL DEFAULT '0',
+  `action` varchar(16) NOT NULL DEFAULT 'add',
+  `question` varchar(255) NOT NULL DEFAULT '',
+  `answer` varchar(16) NOT NULL DEFAULT 'text',
+  `extra` text NOT NULL,
+  `order` int(11) NOT NULL DEFAULT '0',
+  PRIMARY KEY (`id`)
+);
+
+-- TABLE: ANSWERS
+CREATE TABLE IF NOT EXISTS `bx_events_qnr_answers` (
+  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+  `question_id` int(10) unsigned NOT NULL DEFAULT '0',
+  `profile_id` int(10) unsigned NOT NULL DEFAULT '0',
+  `added` int(10) NOT NULL DEFAULT '0',
+  `answer` varchar(255) NOT NULL DEFAULT '',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `answer` (`question_id`, `profile_id`)
+);
+
 -- TABLE: SESSIONS
 CREATE TABLE IF NOT EXISTS `bx_events_sessions` (
   `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
@@ -504,6 +529,37 @@ INSERT INTO `sys_form_display_inputs`(`display_name`, `input_name`, `visible_for
 ('bx_event_view_full', 'changed', 192, 1, 17),
 ('bx_event_view_full', 'published', 192, 1, 18);
 
+-- FORMS: Question
+INSERT INTO `sys_objects_form`(`object`, `module`, `title`, `action`, `form_attrs`, `table`, `key`, `uri`, `uri_title`, `submit_name`, `params`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES 
+('bx_events_question', 'bx_events', '_bx_events_form_question', '', 'a:1:{s:7:\"enctype\";s:19:\"multipart/form-data\";}', 'bx_events_qnr_questions', 'id', '', '', 'do_submit', '', 0, 1, 'BxEventsFormQuestion', 'modules/boonex/events/classes/BxEventsFormQuestion.php');
+
+INSERT INTO `sys_form_displays`(`object`, `display_name`, `module`, `view_mode`, `title`) VALUES 
+('bx_events_question', 'bx_events_question_add', 'bx_events', 0, '_bx_events_form_question_display_add'),
+('bx_events_question', 'bx_events_question_edit', 'bx_events', 0, '_bx_events_form_question_display_edit');
+
+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_events_question', 'bx_events', 'action', 'add', '', 0, 'hidden', '_bx_events_form_question_input_sys_action', '', '', 0, 0, 0, '', '', '', '', '', '', 'Xss', '', 0, 0),
+('bx_events_question', 'bx_events', 'question', '', '', 0, 'text', '_bx_events_form_question_input_sys_question', '_bx_events_form_question_input_question', '', 1, 0, 0, '', '', '', 'Avail', '', '_bx_events_form_question_input_question_err', 'Xss', '', 1, 0),
+('bx_events_question', 'bx_events', 'answer', 'text', '', 0, 'hidden', '_bx_events_form_question_input_sys_answer', '', '', 0, 0, 0, '', '', '', '', '', '', 'Xss', '', 0, 0),
+('bx_events_question', 'bx_events', 'controls', '_bx_events_form_question_input_sys_controls', 'do_submit,do_cancel', 0, 'input_set', '', '', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
+('bx_events_question', 'bx_events', 'do_submit', '_bx_events_form_question_input_do_submit', '', 0, 'submit', '_bx_events_form_question_input_sys_do_submit', '', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
+('bx_events_question', 'bx_events', 'do_cancel', '_bx_events_form_question_input_do_cancel', '', 0, 'button', '_bx_events_form_question_input_sys_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";}', '', '', '', '', '', '', '', 1, 0);
+
+INSERT INTO `sys_form_display_inputs`(`display_name`, `input_name`, `visible_for_levels`, `active`, `order`) VALUES 
+('bx_events_question_add', 'action', 2147483647, 1, 1),
+('bx_events_question_add', 'question', 2147483647, 1, 2),
+('bx_events_question_add', 'answer', 2147483647, 1, 3),
+('bx_events_question_add', 'controls', 2147483647, 1, 4),
+('bx_events_question_add', 'do_submit', 2147483647, 1, 5),
+('bx_events_question_add', 'do_cancel', 2147483647, 1, 6),
+
+('bx_events_question_edit', 'action', 2147483647, 1, 1),
+('bx_events_question_edit', 'question', 2147483647, 1, 2),
+('bx_events_question_edit', 'answer', 2147483647, 1, 3),
+('bx_events_question_edit', 'controls', 2147483647, 1, 4),
+('bx_events_question_edit', 'do_submit', 2147483647, 1, 5),
+('bx_events_question_edit', 'do_cancel', 2147483647, 1, 6);
+
 -- FORMS: Session
 INSERT INTO `sys_objects_form`(`object`, `module`, `title`, `action`, `form_attrs`, `table`, `key`, `uri`, `uri_title`, `submit_name`, `params`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES 
 ('bx_events_session', 'bx_events', '_bx_events_form_session', '', 'a:1:{s:7:\"enctype\";s:19:\"multipart/form-data\";}', 'bx_events_sessions', 'id', '', '', 'do_submit', '', 0, 1, 'BxEventsFormSession', 'modules/boonex/events/classes/BxEventsFormSession.php');

+ 1 - 1
modules/boonex/events/install/sql/uninstall.sql

@@ -1,6 +1,6 @@
 
 -- TABLES
-DROP TABLE IF EXISTS `bx_events_data`, `bx_events_intervals`, `bx_events_sessions`, `bx_events_pics`, `bx_events_pics_resized`, `bx_events_cmts`, `bx_events_cmts_notes`, `bx_events_views_track`, `bx_events_meta_keywords`, `bx_events_meta_locations`, `bx_events_meta_mentions`, `bx_events_fans`, `bx_events_admins`, `bx_events_check_in`, `bx_events_votes`, `bx_events_votes_track`, `bx_events_reports`, `bx_events_reports_track`, `bx_events_favorites_track`, `bx_events_favorites_lists`, `bx_events_scores`, `bx_events_scores_track`, `bx_events_invites`, `bx_events_prices`;
+DROP TABLE IF EXISTS `bx_events_data`, `bx_events_intervals`, `bx_events_questions`, `bx_events_sessions`, `bx_events_pics`, `bx_events_pics_resized`, `bx_events_cmts`, `bx_events_cmts_notes`, `bx_events_views_track`, `bx_events_meta_keywords`, `bx_events_meta_locations`, `bx_events_meta_mentions`, `bx_events_fans`, `bx_events_admins`, `bx_events_check_in`, `bx_events_votes`, `bx_events_votes_track`, `bx_events_reports`, `bx_events_reports_track`, `bx_events_favorites_track`, `bx_events_favorites_lists`, `bx_events_scores`, `bx_events_scores_track`, `bx_events_invites`, `bx_events_prices`;
 
 -- PROFILES
 DELETE FROM sys_profiles WHERE `type` = 'bx_events';

+ 5 - 17
modules/boonex/events/js/entry.js

@@ -9,12 +9,9 @@
  */
 
 function BxEventsEntry(oOptions) {
-    this._sActionsUri = oOptions.sActionUri;
-    this._sActionsUrl = oOptions.sActionUrl;
+    BxBaseModGroupsEntry.call(this, oOptions);
+
     this._sObjName = oOptions.sObjName == undefined ? 'oBxEventsEntry' : oOptions.sObjName;
-    this._sAnimationEffect = oOptions.sAnimationEffect == undefined ? 'slide' : oOptions.sAnimationEffect;
-    this._iAnimationSpeed = oOptions.iAnimationSpeed == undefined ? 'slow' : oOptions.iAnimationSpeed;
-    this._aHtmlIds = oOptions.aHtmlIds == undefined ? {} : oOptions.aHtmlIds;
 
     var $this = this;
     $(document).ready(function() {
@@ -22,6 +19,9 @@ function BxEventsEntry(oOptions) {
     });
 }
 
+BxEventsEntry.prototype = Object.create(BxBaseModGroupsEntry.prototype);
+BxEventsEntry.prototype.constructor = BxEventsEntry;
+
 BxEventsEntry.prototype.init = function() {
     if ('UTC' == $("[name = 'timezone']").val())
         $("[name = 'timezone']").val(moment.tz.guess());
@@ -48,16 +48,4 @@ BxEventsEntry.prototype.checkIn = function(oElement, iId) {
     );
 };
 
-BxEventsEntry.prototype.loadingInButton = function(e, bShow) {
-    if($(e).length)
-        bx_loading_btn($(e), bShow);
-    else
-        bx_loading($('body'), bShow);	
-};
-
-BxEventsEntry.prototype._getDefaultData = function() {
-    var oDate = new Date();
-    return jQuery.extend({}, this._oRequestParams, {_t:oDate.getTime()});
-};
-
 /** @} */

+ 2 - 2
modules/boonex/events/template/popup_session.html

@@ -1,5 +1,5 @@
-<div class="bx-base-group-session-form">
-    <div class="bx-base-group-session-form-cnt">
+<div class="bx-events-session-form">
+    <div class="bx-events-session-form-cnt">
         __form__
         <script language="javascript">
             $(document).ready(function () {

+ 30 - 0
modules/boonex/russian/data/langs/bx_events/ru.xml

@@ -90,6 +90,22 @@
     <string name="_bx_events_form_input_repeat_day_of_week"><![CDATA[Повторять: день недели]]></string>
     <string name="_bx_events_form_input_stop_repeating"><![CDATA[Отстановить повтор]]></string>
 
+    <string name="_bx_events_form_question"><![CDATA[Вопрос]]></string>
+    <string name="_bx_events_form_question_display_add"><![CDATA[Добавление вопроса]]></string>
+    <string name="_bx_events_form_question_display_edit"><![CDATA[Редактирование вопроса]]></string>
+    <string name="_bx_events_form_question_input_sys_action"><![CDATA[Действие]]></string>
+    <string name="_bx_events_form_question_input_sys_question"><![CDATA[Вопрос]]></string>
+    <string name="_bx_events_form_question_input_question"><![CDATA[Вопрос]]></string>
+    <string name="_bx_events_form_question_input_question_err"><![CDATA[Вопрос обязателен.]]></string>
+    <string name="_bx_events_form_question_input_sys_answer"><![CDATA[Ответ]]></string>
+    <string name="_bx_events_form_question_input_sys_controls"><![CDATA[Элементы управления]]></string>
+    <string name="_bx_events_form_question_input_sys_do_submit"><![CDATA[Выполнить]]></string>
+    <string name="_bx_events_form_question_input_do_submit"><![CDATA[Выполнить]]></string>
+    <string name="_bx_events_form_question_input_sys_do_cancel"><![CDATA[Отмена]]></string>
+    <string name="_bx_events_form_question_input_do_cancel"><![CDATA[Отмена]]></string>
+
+    <string name="_bx_events_form_questionnaire_input_question_err"><![CDATA[Пожалуйста, ответьте на вопрос.]]></string>
+
     <string name="_bx_events_form_session"><![CDATA[Сессия]]></string>
     <string name="_bx_events_form_session_display_add"><![CDATA[Добавление сессии]]></string>
     <string name="_bx_events_form_session_display_edit"><![CDATA[Редактирование сессии]]></string>
@@ -131,6 +147,8 @@
     <string name="_bx_events_page_title_edit_profile"><![CDATA[Редактировать событие]]></string>
     <string name="_bx_events_page_title_sys_edit_profile_cover"><![CDATA[Редактировать обложку события]]></string>
     <string name="_bx_events_page_title_edit_profile_cover"><![CDATA[Редактировать обложку]]></string>
+    <string name="_bx_events_page_title_sys_edit_questionnaire"><![CDATA[Редактировать анкету]]></string>
+    <string name="_bx_events_page_title_edit_questionnaire"><![CDATA[Редактировать анкету]]></string>
     <string name="_bx_events_page_title_sys_delete_profile"><![CDATA[Удалить событие]]></string>
     <string name="_bx_events_page_title_delete_profile"><![CDATA[Удалить событие]]></string>
     <string name="_bx_events_page_title_sys_view_profile_closed"><![CDATA[Просмотр закрытого события]]></string>
@@ -195,6 +213,7 @@
     <string name="_bx_events_page_block_title_create_profile"><![CDATA[Создать событие]]></string>
     <string name="_bx_events_page_block_title_edit_profile"><![CDATA[Редактировать событие]]></string>
     <string name="_bx_events_page_block_title_edit_profile_cover"><![CDATA[Редактировать обложку]]></string>
+    <string name="_bx_events_page_block_title_edit_questionnaire"><![CDATA[Редактировать анкету]]></string>
     <string name="_bx_events_page_block_title_delete_profile"><![CDATA[Удалить событие]]></string>
     <string name="_bx_events_page_block_title_profile_info_link"><![CDATA["<a href="{profile_link}">{display_name}</a>" - инфо]]></string>
     <string name="_bx_events_page_block_title_profile_info"><![CDATA[Инфо]]></string>
@@ -384,6 +403,14 @@
     <string name="_bx_events_grid_action_err_delete"><![CDATA[Невозможно удалить выбранные события.]]></string>
     <string name="_bx_events_grid_txt_account_manager"><![CDATA[Перенаправить в управление аккаунтом.]]></string>
 
+    <string name="_bx_events_grid_column_title_qn_question"><![CDATA[Вопрос]]></string>
+    <string name="_bx_events_grid_action_title_qn_add"><![CDATA[Добавить]]></string>
+    <string name="_bx_events_grid_action_title_qn_edit"><![CDATA[Редактировать]]></string>
+    <string name="_bx_events_grid_action_title_qn_delete"><![CDATA[Удалить]]></string>
+    <string name="_bx_events_popup_title_qn_add"><![CDATA[Добавить вопрос]]></string>
+    <string name="_bx_events_popup_title_qn_edit"><![CDATA[Редактировать вопрос]]></string>
+    <string name="_bx_events_popup_title_questionnaire"><![CDATA[Анкета]]></string>
+
     <string name="_bx_events_grid_column_title_sn_title"><![CDATA[Заголовок]]></string>
     <string name="_bx_events_grid_column_title_sn_description"><![CDATA[Описание]]></string>
     <string name="_bx_events_grid_column_title_sn_date_start"><![CDATA[Начало]]></string>
@@ -416,6 +443,7 @@
     <string name="_bx_events_txt_sample_score_up_single"><![CDATA[голос за событие]]></string>
     <string name="_bx_events_txt_sample_score_down_single"><![CDATA[голос против события]]></string>
     <string name="_bx_events_txt_set_role"><![CDATA[Задать роль]]></string>
+    <string name="_bx_events_txt_view_answers"><![CDATA[Посмотреть ответы на анкету]]></string>
     <string name="_bx_events_txt_private_group"><![CDATA[Приватная группа]]></string>
     <string name="_bx_events_txt_from_time_to_time"><![CDATA[{0} - {1}]]></string>
     <string name="_bx_events_txt_invite_popup_text"><![CDATA[Вы были приглашены на это собыите.  Нажмите кнопку ниже чтобы принять приглашение.]]></string>
@@ -541,6 +569,8 @@
     <string name="_bx_events_page_block_title_profile_pricing"><![CDATA[Цены]]></string>
     <string name="_bx_events_page_block_title_profile_pricing_link"><![CDATA[Цены на <a href="{profile_link}">{display_name}</a>]]></string>
     <string name="_bx_events_page_block_title_entry_reports"><![CDATA[Отчеты]]></string>
+    <string name="_bx_events_menu_item_title_system_edit_questionnaire"><![CDATA[Редактировать анкету]]></string>
+    <string name="_bx_events_menu_item_title_edit_questionnaire"><![CDATA[Редактировать анкету]]></string>
     <string name="_bx_events_menu_item_title_system_edit_sessions"><![CDATA[Редактировать сессии]]></string>
     <string name="_bx_events_menu_item_title_edit_sessions"><![CDATA[Редактировать сессии]]></string>
     <string name="_bx_events_menu_item_title_system_edit_pricing"><![CDATA[Редактировать цены]]></string>