Esempio n. 1
0
 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;
 }
Esempio n. 2
0
 public function ajaxResponder()
 {
     if (empty($_POST["command"]) || !OW::getRequest()->isAjax()) {
         throw new Redirect404Exception();
     }
     $command = (string) $_POST["command"];
     switch ($command) {
         case 'DeleteQuestionValue':
             $result = false;
             $questionName = htmlspecialchars($_POST["questionName"]);
             if ($questionName === null) {
                 echo json_encode(array('result' => $result));
                 return;
             }
             $questionName = trim($questionName);
             $value = (int) $_POST["value"];
             if ($this->questionService->deleteQuestionValue($questionName, $value)) {
                 $result = true;
             }
             echo json_encode(array('result' => $result));
             break;
         case 'submit_add_values_form':
             $questionId = (int) $_POST["questionId"];
             $addQuestionValuesForm = new AddValuesForm($questionId);
             $addQuestionValuesForm->isValid($_POST);
             $addQuestionValuesForm->process();
             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;
         default:
     }
     exit;
 }