Файл: base-sys/admin/controllers/questions.php
Строк: 1439
<?php
/* Peepmatches Light By Peepdev co */
class ADMIN_CTRL_Questions extends ADMIN_CTRL_Abstract
{
const ADD_QUESTION_SESSION_VAR = "ADMIN_ADD_QUESTION";
const EDIT_QUESTION_SESSION_VAR = "ADMIN_EDIT_QUESTION";
const SESSION_VAR_ACCIUNT_TYPE = "BASE_QUESTION_ACCOUNT_TYPE";
/**
* @var BOL_QuestionService
*
*/
private $questionService;
private $ajaxResponderUrl;
private $columnCountValues = array();
/**
* @var BASE_CMP_ContentMenu
*/
private $contentMenu;
public function __construct()
{
parent::__construct();
$this->questionService = BOL_QuestionService::getInstance();
$this->ajaxResponderUrl = PEEP::getRouter()->urlFor("ADMIN_CTRL_Questions", "ajaxResponder");
$language = PEEP::getLanguage();
$this->setPageHeading($language->text('admin', 'heading_questions'));
$this->setPageHeadingIconClass('peep_ic_files');
PEEP::getNavigation()->activateMenuItem('admin_users', 'admin', 'sidebar_menu_item_questions');
}
public function pages( $params = array() )
{
$serviceLang = BOL_LanguageService::getInstance();
$language = PEEP::getLanguage();
$currentLanguageId = PEEP::getLanguage()->getCurrentId();
// -- Get all section, questions and question values --
$questions = $this->questionService->findAllQuestionsBySectionForAccountType('all');
$section = null;
$questionBySectionList = array();
$sectionDeleteUrlList = array();
$parentList = array();
$questionNameList = array();
$questionList = array();
$deleteEditButtonsContent = array();
$previewQuestionValuesContent = array();
$pagesCheckboxContent = array();
$sectionsNameList = array_keys($questions);
$sectionDtoList = BOL_QuestionService::getInstance()->findSectionBySectionNameList($sectionsNameList);
foreach ( $questions as $section => $list )
{
$sectionDeleteUrlList[$section] = PEEP::getRouter()->urlFor('ADMIN_CTRL_Questions', 'deleteSection', array("sectionName" => $section));
$questionBySectionList[$section] = array();
foreach ( $list as $question )
{
$questionList[$question['name']] = $question;
if ( !empty($question['parent']) )
{
$parent = $this->questionService->findQuestionByName($question['parent']);
if ( !empty($parent) )
{
$question['parentUrl'] = 'javascript://';
$question['parentLabel'] = $this->questionService->getQuestionLang($parent->name);
$question['parentId'] = $parent->id;
$parentList[$question['parent']][] = array(
'name' => $question['name'],
'editUrl' => 'javascript://');
}
else
{
$question['parent'] = '';
}
}
$questionBySectionList[$section][] = $question;
$questionNameList[] = $question['name'];
$event = new PEEP_Event('admin.questions.get_edit_delete_question_buttons_content', array( 'question' => $question ), null);
PEEP::getEventManager()->trigger($event);
$data = $event->getData();
$deleteEditButtonsContent[$question['name']] = $data;
$event = new PEEP_Event('admin.questions.get_preview_question_values_content', array( 'question' => $question ), null);
PEEP::getEventManager()->trigger($event);
$data = $event->getData();
$previewQuestionValuesContent[$question['name']] = $data;
$pageCheckboxData = array(
'required' => null,
'join' => null,
'edit' => null,
'view' => null,
'search' => null);
$event = new PEEP_Event('admin.questions.get_question_page_checkbox_content', array( 'actionList' => $pageCheckboxData, 'question' => $question ), $pageCheckboxData);
PEEP::getEventManager()->trigger($event);
$data = $event->getData();
$pagesCheckboxContent[$question['name']] = $data;
}
}
$questionDtoList = BOL_QuestionService::getInstance()->findQuestionByNameList($questionNameList);
foreach ( $questionList as $sort => $question )
{
if ( empty($question['name']) )
{
continue;
}
$text = $language->text('admin', 'questions_delete_question_confirmation');
if ( array_key_exists($question['name'], $parentList) )
{
$questionStringList = array();
foreach ( $parentList[$question['name']] as $child )
{
$questionStringList[] = BOL_QuestionService::getInstance()->getQuestionLang($child['name']);
}
$text = $language->text('admin', 'questions_delete_question_parent_confirmation', array('questions' => implode(', ', $questionStringList)));
}
$text = json_encode($text);
PEEP::getDocument()->addOnloadScript("PEEP.registerLanguageKey('admin', 'questions_delete_question_confirmation_" . (int) $question['id'] . "', {$text});");
// ------------------------------------------------------------
$disableActionList = $this->questionService->getQuestionDisableActionList($questionDtoList[$question['name']]);
$questionList[$sort] = array_merge($questionList[$sort], $disableActionList);
// ------------------------------------------------------------
}
$questionValues = $this->questionService->findQuestionsValuesByQuestionNameList($questionNameList);
$valueLabels = array();
foreach ( $questionValues as $name => $value )
{
if ( empty($valueLabels[$name]) )
{
$valueLabels[$name] = array();
}
/* @var $value BOL_QuestionValue */
foreach ( $value['values'] as $item )
{
$valueLabels[$item->questionName][$item->value] = BOL_QuestionService::getInstance()->getQuestionValueLang($item->questionName, $item->value);
}
}
$this->assign('questionList', $questionList);
$this->assign('questionsBySections', $questionBySectionList);
$this->assign('questionValues', $questionValues);
$this->assign('valueLabels', $valueLabels);
$this->assign('accountTypesUrl', PEEP::getRouter()->urlForRoute('questions_account_types'));
$this->assign('deleteEditButtons', $deleteEditButtonsContent);
$this->assign('previewValues', $previewQuestionValuesContent);
$this->assign('pagesCheckboxContent', $pagesCheckboxContent);
$this->assign('sectionList', $sectionDtoList);
$language->addKeyForJs('admin', 'questions_delete_section_confirmation');
$script = ' window.indexQuest = new indexQuestions( ' . json_encode(array('questions' => $questionList, 'questionAddUrl' => PEEP::getRouter()->urlFor("ADMIN_CTRL_Questions", "add"), 'ajaxResponderUrl' => $this->ajaxResponderUrl)) . ' )'; //' . json_encode( array( 'questionEditUrl' => $questionEditUrl ) ) . ' ); ';
PEEP::getDocument()->addOnloadScript($script);
$jsDir = PEEP::getPluginManager()->getPlugin("admin")->getStaticJsUrl();
PEEP::getDocument()->addScript($jsDir . "questions.js");
$baseJsDir = PEEP::getPluginManager()->getPlugin("base")->getStaticJsUrl();
PEEP::getDocument()->addScript($baseJsDir . "jquery-ui.min.js");
PEEP::getLanguage()->addKeyForJs('admin', 'questions_profile_question_sections_title');
PEEP::getLanguage()->addKeyForJs('admin', 'questions_edit_profile_question_title');
PEEP::getLanguage()->addKeyForJs('admin', 'questions_add_profile_question_title');
PEEP::getLanguage()->addKeyForJs('admin', 'questions_values_should_not_be_empty');
}
public function accountTypes( $params = array() )
{
$serviceLang = BOL_LanguageService::getInstance();
$language = PEEP::getLanguage();
$currentLanguageId = PEEP::getLanguage()->getCurrentId();
// -- Get all section, questions and question values --
$questions = $this->questionService->findAllQuestionsBySectionForAccountType('all');
$section = null;
$questionBySectionList = array();
$sectionDeleteUrlList = array();
$parentList = array();
$questionNameList = array();
$questionList = array();
$deleteEditButtonsContent = array();
$previewQuestionValuesContent = array();
$accountTypesCheckboxContent = array();
$sectionsNameList = array_keys($questions);
$sectionDtoList = BOL_QuestionService::getInstance()->findSectionBySectionNameList($sectionsNameList);
foreach ( $questions as $section => $list )
{
$sectionDeleteUrlList[$section] = PEEP::getRouter()->urlFor('ADMIN_CTRL_Questions', 'deleteSection', array("sectionName" => $section));
$questionBySectionList[$section] = array();
foreach ( $list as $question )
{
$questionList[$question['name']] = $question;
//$question['questionEditUrl'] = PEEP::getRouter()->urlFor('ADMIN_CTRL_Questions', 'edit', array("questionId" => $question['id']));
//$question['questionDeleteUrl'] = PEEP::getRouter()->urlFor('ADMIN_CTRL_Questions', 'deleteQuestion', array("questionId" => $question['id']));
if ( !empty($question['parent']) )
{
$parent = $this->questionService->findQuestionByName($question['parent']);
if ( !empty($parent) )
{
$question['parentUrl'] = 'javascript://';
$question['parentLabel'] = $this->questionService->getQuestionLang($parent->name);
$question['parentId'] = $parent->id;
$parentList[$question['parent']][] = array(
'name' => $question['name'],
'editUrl' => 'javascript://');
}
else
{
$question['parent'] = '';
}
}
$questionBySectionList[$section][] = $question;
$questionNameList[] = $question['name'];
$event = new PEEP_Event('admin.questions.get_edit_delete_question_buttons_content', array( 'question' => $question ), null);
PEEP::getEventManager()->trigger($event);
$data = $event->getData();
$deleteEditButtonsContent[$question['name']] = $data;
$event = new PEEP_Event('admin.questions.get_preview_question_values_content', array( 'question' => $question ), null);
PEEP::getEventManager()->trigger($event);
$data = $event->getData();
$previewQuestionValuesContent[$question['name']] = $data;
$event = new PEEP_Event('admin.questions.get_account_types_checkbox_content', array( 'question' => $question ), null);
PEEP::getEventManager()->trigger($event);
$data = $event->getData();
$accountTypesCheckboxContent[$question['name']] = $data;
}
}
$questionDtoList = BOL_QuestionService::getInstance()->findQuestionByNameList($questionNameList);
foreach ( $questionList as $sort => $question )
{
if ( empty($question['name']) )
{
continue;
}
$text = $language->text('admin', 'questions_delete_question_confirmation');
if ( array_key_exists($question['name'], $parentList) )
{
$questionStringList = array();
foreach ( $parentList[$question['name']] as $child )
{
$questionStringList[] = BOL_QuestionService::getInstance()->getQuestionLang($child['name']);
}
$text = $language->text('admin', 'questions_delete_question_parent_confirmation', array('questions' => implode(', ', $questionStringList)));
}
$text = json_encode($text);
PEEP::getDocument()->addOnloadScript("PEEP.registerLanguageKey('admin', 'questions_delete_question_confirmation_" . (int) $question['id'] . "', {$text});");
// ------------------------------------------------------------
$disableActionList = $this->questionService->getQuestionDisableActionList($questionDtoList[$question['name']]);
$questionList[$sort] = array_merge($questionList[$sort], $disableActionList);
// ------------------------------------------------------------
}
$questionValues = $this->questionService->findQuestionsValuesByQuestionNameList($questionNameList);
$accountTypeDtoList = $this->questionService->findAllAccountTypes();
$accountTypeList = array();
$valueLabels = array();
foreach ( $questionValues as $name => $value )
{
if ( empty($valueLabels[$name]) )
{
$valueLabels[$name] = array();
}
/* @var $value BOL_QuestionValue */
foreach ( $value['values'] as $item )
{
$valueLabels[$item->questionName][$item->value] = BOL_QuestionService::getInstance()->getQuestionValueLang($item->questionName, $item->value);
}
}
foreach ( $accountTypeDtoList as $dto )
{
$accountTypeList[$dto->name] = $dto->name;
}
$accountTypesToQuestionsDtoList = $this->getAccountTypesToQuestionsList();
$this->assign('questionList', $questionList);
$this->assign('td_width', (int) ( 375 / (count($accountTypeDtoList) + 1) ));
$this->assign('div_width', (int) ( 375 / (count($accountTypeDtoList) + 1)) - 18);
$this->assign('accountTypeDtoList', $accountTypeDtoList);
$this->assign('accountTypesCount', count($accountTypeDtoList) + 1);
$this->assign('tableColumnCount', count($accountTypeDtoList) + 5);
$this->assign('accountTypesToQuestionsDtoList', $accountTypesToQuestionsDtoList);
$this->assign('questionsBySections', $questionBySectionList);
$this->assign('questionValues', $questionValues);
$this->assign('valueLabels', $valueLabels);
$this->assign('sectionDeleteUrlList', $sectionDeleteUrlList);
$this->assign('propertiesUrl', PEEP::getRouter()->urlForRoute('questions_properties'));
$this->assign('deleteEditButtons', $deleteEditButtonsContent);
$this->assign('previewValues', $previewQuestionValuesContent);
$this->assign('accountTypesCheckboxContent', $accountTypesCheckboxContent);
$this->assign('sectionList', $sectionDtoList);
$language->addKeyForJs('admin', 'questions_delete_section_confirmation');
$script = ' window.indexQuest = new indexQuestions( ' . json_encode(array('questions' => $questionList, 'ajaxResponderUrl' => $this->ajaxResponderUrl, 'accountTypes' => array_keys($accountTypeList)) ) . ' )';
PEEP::getDocument()->addOnloadScript($script);
$jsDir = PEEP::getPluginManager()->getPlugin("admin")->getStaticJsUrl();
PEEP::getDocument()->addScript($jsDir . "questions.js");
$baseJsDir = PEEP::getPluginManager()->getPlugin("base")->getStaticJsUrl();
PEEP::getDocument()->addScript($baseJsDir . "jquery-ui.min.js");
PEEP::getLanguage()->addKeyForJs('admin', 'questions_profile_question_sections_title');
PEEP::getLanguage()->addKeyForJs('admin', 'questions_edit_profile_question_title');
PEEP::getLanguage()->addKeyForJs('admin', 'questions_add_profile_question_title');
PEEP::getLanguage()->addKeyForJs('admin', 'questions_add_account_type_title');
PEEP::getLanguage()->addKeyForJs('admin', 'questions_edit_account_type_title');
PEEP::getLanguage()->addKeyForJs('admin', 'questions_account_type_was_added');
PEEP::getLanguage()->addKeyForJs('admin', 'questions_account_type_was_updated');
PEEP::getLanguage()->addKeyForJs('admin', 'questions_account_type_added_error');
PEEP::getLanguage()->addKeyForJs('admin', 'questions_delete_account_type_confirmation');
PEEP::getLanguage()->addKeyForJs('admin', 'questions_values_should_not_be_empty');
$contextAction = new BASE_CMP_ContextAction();
$contextParentAction = new BASE_ContextAction();
$contextParentAction->setKey('account_type_menu');
$contextParentAction->setClass('peep_cnews_context');
$contextAction->addAction($contextParentAction);
$editAction = new BASE_ContextAction();
$editAction->setKey('edit');
$editAction->setLabel(PEEP::getLanguage()->text('admin', 'btn_label_edit'));
$editAction->setParentKey($contextParentAction->getKey());
$editAction->setClass('question_edit_account_type_button');
$editAction->setUrl('javascript://');
$editAction->setOrder(1);
$contextAction->addAction($editAction);
$deleteAction = new BASE_ContextAction();
$deleteAction->setKey('delete');
$deleteAction->setLabel(PEEP::getLanguage()->text('admin', 'btn_label_delete'));
$deleteAction->setParentKey($contextParentAction->getKey());
$deleteAction->setClass('question_delete_account_type_button');
$deleteAction->setUrl('javascript://');
$deleteAction->setOrder(2);
$contextAction->addAction($deleteAction);
$this->addComponent('accountTypeMenu', $contextAction);
}
protected function getAccountTypesToQuestionsList()
{
$list = $this->questionService->getAccountTypesToQuestionsList();
$result = array();
/* @var $dto BOL_QuestionToAccountType */
foreach ( $list as $dto )
{
$result[$dto->questionName][$dto->accountType] = $dto;
}
return $result;
}
private function addContentMenu()
{
$language = PEEP::getLanguage();
$router = PEEP_Router::getInstance();
$menuItems = array();
$menuItem = new BASE_MenuItem();
$menuItem->setKey('qst_index')->setLabel($language->text('base', 'questions_menu_index'))->setUrl($router->urlForRoute('questions_account_types'))->setOrder('1');
$menuItem->setIconClass('peep_ic_files');
$menuItems[] = $menuItem;
$this->contentMenu = new BASE_CMP_ContentMenu($menuItems);
$this->addComponent('contentMenu', $this->contentMenu);
}
public function ajaxResponder()
{
if ( !PEEP::getAuthorization()->isUserAuthorized(PEEP::getUser()->getId(), 'admin') || empty($_POST["command"]) || !PEEP::getRequest()->isAjax() )
{
throw new Redirect404Exception();
}
$command = (string) $_POST["command"];
switch ( $command )
{
case 'deleteQuestion':
$questionId = (int)$_POST['questionId'];
$question = $this->questionService->findQuestionById($questionId);
if ( empty($question) )
{
echo json_encode(array('result' => false));
exit;
}
$parent = null;
if ( !empty($question->parent) )
{
$parent = $this->questionService->findQuestionByName($question->parent);
}
if ( $question->base == 1 || !$question->removable || !empty($parent) )
{
echo json_encode(array('result' => false));
exit;
}
$childList = $this->questionService->findQuestionChildren($question->name);
$deleteList = array();
$deleteQuestionNameList = array();
foreach ( $childList as $child )
{
$deleteList[] = $child->id;
$deleteQuestionNameList[$child->name] = $child->name;
}
if ( !empty($deleteList) )
{
$this->questionService->deleteQuestion($deleteList);
}
if ( $this->questionService->deleteQuestion(array((int) $_POST['questionId'])) )
{
echo json_encode(array('result' => "success", 'message' => PEEP::getLanguage()->text('admin', 'questions_question_was_deleted'), 'deleteList' => $deleteQuestionNameList));
exit;
}
echo json_encode(array('result' => false));
exit;
break;
case 'findNearestSection':
$sectionName = $_POST['sectionName'];
if ( !empty($sectionName) )
{
$section = $this->questionService->findSectionBySectionName($sectionName);
if ( empty($section) )
{
echo json_encode(array('result' => false));
exit;
}
$nearSection = $this->questionService->findNearestSection( $section );
if ( empty($nearSection) )
{
echo json_encode(array('result' => false));
exit;
}
echo json_encode( array(
'result' => "success",
'message' => PEEP::getLanguage()->text('admin', 'questions_delete_section_confirmation_with_move_questions' , array('sectionName' => BOL_QuestionService::getInstance()->getSectionLang($nearSection->name) ))
) );
exit;
}
echo json_encode(array('result' => false));
exit;
break;
case 'deleteSection':
if ( !empty($_POST['sectionName']) && mb_strlen($_POST['sectionName']) > 0 )
{
/*@var $nearSection BOL_QuestionSection*/
$nearSection = $this->questionService->findSectionBySectionName($_POST['sectionName']);
$moveQuestionsToSection = null;
if ( !empty($nearSection) && $nearSection->isDeletable && $this->questionService->deleteSection(htmlspecialchars($_POST['sectionName']), $moveQuestionsToSection) )
{
$result = array('result' => "success", 'message' => PEEP::getLanguage()->text('admin', 'questions_section_was_deleted'));
if ( !empty($moveQuestionsToSection) )
{
$result['moveTo'] = $moveQuestionsToSection->name;
}
echo json_encode($result);
exit;
}
}
echo json_encode(array('result' => "false"));
exit;
break;
case 'DeleteQuestionValue':
$result = false;
$questionId = htmlspecialchars($_POST["questionId"]);
$question = $this->questionService->findQuestionById($questionId);
$value = (int) $_POST["value"];
if ( empty($question) || (empty($value) && $value !== 0) )
{
echo json_encode(array('result' => $result));
return;
}
if ( $this->questionService->deleteQuestionValue($question->name, $value) )
{
$result = true;
}
echo json_encode(array('result' => $result));
break;
case 'deleteAccountType':
if ( !empty($_POST['accountType']) && mb_strlen($_POST['accountType']) > 0 )
{
$accountTypes = $this->questionService->findAllAccountTypes();
$accountTypeList = array();
foreach ( $accountTypes as $key => $account )
{
if ( $account->name != $_POST['accountType'] )
{
$accountTypeList[$account->name] = $account->name;
}
}
if ( empty($accountTypeList) )
{
echo json_encode(array('result' => "false", 'message' => PEEP::getLanguage()->text('admin', 'questions_cant_delete_last_account_type')));
exit;
}
else if ( $this->questionService->deleteAccountType($_POST['accountType']) )
{
echo json_encode(array('result' => "success", 'message' => PEEP::getLanguage()->text('admin', 'questions_account_type_was_deleted')));
exit;
}
}
echo json_encode(array('result' => "false"));
exit;
break;
case 'AddQuestionValues':
$result = false;
$questionId = (int) $_POST["questionId"];
$question = $this->questionService->findQuestionById($questionId);
$values = !empty($_POST["values"]) && is_array($_POST["values"]) ? $_POST["values"] : array();
if ( empty($question) || empty($values) )
{
echo json_encode(array('result' => $result));
return;
}
if ( $this->questionService->updateQuestionValues($question, $values) )
{
$result = true;
}
echo json_encode(array('result' => $result));
break;
case 'AddAccountType':
$result = false;
$name = htmlspecialchars($_POST["accountTypeName"]);
$roleId = (int) $_POST["role"];
$accountType = new BOL_QuestionAccountType();
$accountType->name = $name;
$accountType->roleId = $roleId;
$form = new ADMIN_CLASS_AddAccountTypeForm($accountType);
$result = false;
if ( $form->isValid($_POST) )
{
$result = $form->process($_POST);
}
echo json_encode(array('result' => $result, 'accountTypeName' => $name, 'roleId' => $roleId ));
break;
case 'sortAccountType':
$sortAccountType = json_decode($_POST['accountTypeList'], true);
$result = false;
if ( isset($sortAccountType) && is_array($sortAccountType) && count($sortAccountType) > 0 )
{
$result = $this->questionService->reOrderAccountType($sortAccountType);
}
echo json_encode(array('result' => $result));
break;
case 'sortQuestions':
$sectionName = htmlspecialchars($_POST['sectionName']);
$sectionQuestionOrder = json_decode($_POST['questionOrder'], true);
$check = true;
if ( !isset($sectionName) )
{
$check = false;
}
if ( !isset($sectionQuestionOrder) || !is_array($sectionQuestionOrder) || !count($sectionQuestionOrder) > 0 )
{
$check = false;
}
if ( $sectionName === 'no_section' )
{
$sectionName = null;
}
$result = false;
if ( $check )
{
$result = $this->questionService->reOrderQuestion($sectionName, $sectionQuestionOrder);
}
echo json_encode(array('result' => $result));
break;
case 'sortSection':
$sectionOrder = json_decode($_POST['sectionOrder'], true);
if ( !isset($sectionOrder) || !is_array($sectionOrder) || !count($sectionOrder) > 0 )
{
return false;
}
$result = $this->questionService->reOrderSection($sectionOrder);
echo json_encode(array('result' => $result));
break;
case 'questionPages':
$question = $_POST['question'];
$required = $_POST['required'] == 'true';
$onJoin = $_POST['onJoin'] == 'true';
$onEdit = $_POST['onEdit'] == 'true';
$onView = $_POST['onView'] == 'true';
$onSearch = $_POST['onSearch'] == 'true';
$changed = !empty($_POST['changed']) ? $_POST['changed'] : null;
if ( empty($question) )
{
echo json_encode(array('result' => false));
exit;
}
$questionDto = $this->questionService->findQuestionByName($question);
if ( !empty($questionDto) )
{
$disableActionList = BOL_QuestionService::getInstance()->getQuestionDisableActionList($questionDto);
switch ( $changed )
{
case 'required':
if ( !$disableActionList['disable_required'] )
{
$questionDto->required = $required;
}
break;
case 'onJoin':
if ( !$disableActionList['disable_on_join'] )
{
$questionDto->onJoin = $onJoin;
}
break;
case 'onEdit':
if ( !$disableActionList['disable_on_edit'] )
{
$questionDto->onEdit = $onEdit;
}
break;
case 'onSearch':
if ( !$disableActionList['disable_on_search'] )
{
$questionDto->onSearch = $onSearch;
}
break;
case 'onView':
if ( !$disableActionList['disable_on_view'] )
{
$questionDto->onView = $onView;
}
break;
default:
if ( !$disableActionList['disable_required'] )
{
$questionDto->required = $required;
}
if ( !$disableActionList['disable_on_join'] )
{
$questionDto->onJoin = $onJoin;
}
if ( !$disableActionList['disable_on_edit'] )
{
$questionDto->onEdit = $onEdit;
}
if ( !$disableActionList['disable_on_view'] )
{
$questionDto->onView = $onView;
}
if ( !$disableActionList['disable_on_search'] )
{
$questionDto->onSearch = $onSearch;
}
break;
}
}
$this->questionService->saveOrUpdateQuestion($questionDto);
echo json_encode(json_encode(array('result' => true)));
break;
case 'questionAccountTypes':
$question = $_POST['question'];
$data = $_POST['data'];
if ( empty($question) || empty($data) )
{
echo json_encode(array('result' => false));
exit;
}
$questionDto = $this->questionService->findQuestionByName($question);
if ( !empty($questionDto) )
{
$disableActionList = BOL_QuestionService::getInstance()->getQuestionDisableActionList($questionDto);
if ( !$disableActionList['disable_account_type'] )
{
$add = array();
$delete = array();
foreach ( $data as $accountType => $value )
{
if ( $value === "true" )
{
$add[] = $accountType;
}
else
{
$delete[] = $accountType;
}
}
if ( !empty($delete) )
{
BOL_QuestionService::getInstance()->deleteQuestionToAccountType($questionDto->name, $delete);
}
if ( !empty($add) )
{
BOL_QuestionService::getInstance()->addQuestionToAccountType($questionDto->name, $add);
}
}
}
echo json_encode(json_encode(array('result' => true)));
break;
case 'addSection' :
if ( empty($_POST['section_name']) )
{
echo json_encode(array('result' => false, 'message' => ''));
exit;
}
$sectionName = $_POST['section_name'];
$questionSection = new BOL_QuestionSection();
$questionSection->name = md5(uniqid());
$questionSection->sortOrder = ($this->questionService->findLastSectionOrder()) + 1;
$this->questionService->saveOrUpdateSection($questionSection);
BOL_LanguageService::getInstance()->addOrUpdateValue(PEEP::getLanguage()->getCurrentId(), 'base', 'questions_section_' . ( $questionSection->name ) . '_label', htmlspecialchars($sectionName));
if ( PEEP::getDbo()->getAffectedRows() > 0 )
{
echo json_encode(array('result' => true, 'message' => PEEP::getLanguage()->text('admin', 'questions_section_was_added')));
}
break;
case 'addQuestion' :
$form = PEEP::getClassInstance('ADMIN_CLASS_AddQuestionForm', 'qst_add_form', '');
$form->process();
break;
case 'editQuestion' :
if ( empty($_POST['questionId']) )
{
echo json_encode(array('result' => false, 'errors' => array(), 'message' => PEEP::getLanguage()->text('admin', 'questions_not_found')));
exit;
}
$question = BOL_QuestionService::getInstance()->findQuestionById($_POST['questionId']);
if ( empty($question) || !($question instanceof BOL_Question) )
{
echo json_encode(array('result' => false, 'errors' => array(), 'message' => PEEP::getLanguage()->text('admin', 'questions_not_found')));
exit;
}
$form = PEEP::getClassInstance('ADMIN_CLASS_EditQuestionForm', 'qst_edit_form', '');
$form->loadQuestionData($question);
$form->process();
break;
default:
}
exit;
}
}