public function addQuestion() { if (!OW::getRequest()->isAjax()) { throw new Redirect404Exception(); } if (!OW::getUser()->isAuthenticated()) { echo json_encode(false); exit; } if (empty($_POST['question'])) { echo json_encode(false); exit; } $question = empty($_POST['question']) ? '' : strip_tags($_POST['question']); $question = UTIL_HtmlTag::autoLink($question); $answers = empty($_POST['answers']) ? array() : array_filter($_POST['answers'], 'trim'); $allowAddOprions = !empty($_POST['allowAddOprions']); $userId = OW::getUser()->getId(); $questionDto = $this->service->addQuestion($userId, $question, array('allowAddOprions' => $allowAddOprions)); foreach ($answers as $ans) { $this->service->addOption($questionDto->id, $userId, $ans); } $event = new OW_Event('feed.action', array('entityType' => QUESTIONS_BOL_Service::ENTITY_TYPE, 'entityId' => $questionDto->id, 'pluginKey' => 'questions', 'userId' => $userId, 'visibility' => 15)); OW::getEventManager()->trigger($event); $activityList = QUESTIONS_BOL_FeedService::getInstance()->findMainActivity(time(), array($questionDto->id), array(0, 6)); $cmp = new QUESTIONS_CMP_FeedItem($questionDto, reset($activityList[$questionDto->id]), $activityList[$questionDto->id]); $html = $cmp->render(); $script = OW::getDocument()->getOnloadScript(); echo json_encode(array('markup' => array('html' => $html, 'script' => $script, 'position' => 'prepend'))); exit; }
private function addAnswer($query, $data, $relation) { $userId = OW::getUser()->getId(); $questionId = $data['questionId']; $uniqId = $data['uniqId']; $text = strip_tags(trim($query['text'])); $option = $this->service->findOptionByText($questionId, $text); $new = false; if ($option === null) { $new = true; $option = $this->service->addOption($questionId, $userId, $text); } $cmp = new QUESTIONS_CMP_Answer($option, $uniqId); $cmp->setIsMultiple(!$data['poll']); $voteCount = 0; $checked = false; $users = array(); if ($new) { $cmp->setEditMode(); $data['optionTotal']++; } else { $canEdit = $option->userId == $userId; $answerCount = $data['poll'] ? $this->service->findTotalAnswersCount($questionId) : $this->service->findMaxAnswersCount($questionId); if ($answerCount) { $voteCount = $this->service->findAnswerCountByOptionId($option->id); if ($voteCount) { $checked = $this->service->findAnswer($userId, $option->id) !== null; $users = $this->service->findAnsweredUserIdList($option->id, $data['userContext'], $checked ? 4 : 3); $cmp->setVoteCount($voteCount); $cmp->setVoted($checked); $cmp->setUsers($users); $cmp->setPercents($voteCount * 100 / $answerCount); $canEdit = $canEdit && ($voteCount == 0 || $voteCount == 1 && $checked); } } $cmp->setEditMode($data['editMode'] || $canEdit); } $data['displayedCount']++; $options = array(); $options[] = array('markup' => $cmp->render(), 'data' => array('newOption' => $new, 'checked' => $checked, 'users' => $users, 'voteCount' => $voteCount, 'id' => $option->id)); if (!empty($relation)) { $relation = $this->reload(array(), $relation['data']); } return array('options' => $options, 'data' => $data, 'relation' => $relation); }