public function __construct($accountTypeName = '') { $accountType = BOL_QuestionService::getInstance()->findAccountTypeByName($accountTypeName); if (empty($accountType)) { $this->setVisible(false); } $form = new ADMIN_CLASS_AddAccountTypeForm($accountType, 'editAccountType'); $form->setAjaxResetOnSuccess(false); $this->addForm($form); $list = BOL_LanguageService::getInstance()->findActiveList(); $key = BOL_QuestionService::getInstance()->getQuestionLangKeyName(BOL_QuestionService::LANG_KEY_TYPE_ACCOUNT_TYPE, $accountType->name); $this->assign('langs', $list); $this->assign('prefix', 'base'); $this->assign('key', $key); $this->assign('form', $form); $this->setTemplate(OW::getPluginManager()->getPlugin('admin')->getCmpViewDir() . 'add_account_type.html'); }
public function ajaxResponder() { if (!OW::getAuthorization()->isUserAuthorized(OW::getUser()->getId(), 'admin') || empty($_POST["command"]) || !OW::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' => OW::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' => OW::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' => OW::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' => OW::getLanguage()->text('admin', 'questions_cant_delete_last_account_type'))); exit; } else { if ($this->questionService->deleteAccountType($_POST['accountType'])) { echo json_encode(array('result' => "success", 'message' => OW::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(OW::getLanguage()->getCurrentId(), 'base', 'questions_section_' . $questionSection->name . '_label', htmlspecialchars($sectionName)); if (OW::getDbo()->getAffectedRows() > 0) { echo json_encode(array('result' => true, 'message' => OW::getLanguage()->text('admin', 'questions_section_was_added'))); } break; case 'addQuestion': /* @var $form ADMIN_CLASS_AddQuestionForm */ $form = OW::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' => OW::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' => OW::getLanguage()->text('admin', 'questions_not_found'))); exit; } $form = OW::getClassInstance('ADMIN_CLASS_EditQuestionForm', 'qst_edit_form', ''); $form->loadQuestionData($question); $form->process(); break; default: } exit; }