private function more($query, $data) { $userId = OW::getUser()->getId(); $questionId = $data['questionId']; $uniqId = $data['uniqId']; $count = empty($query['inc']) ? QUESTIONS_BOL_Service::INC_DISPLAY_COUNT : round($query['inc']); $tmp = $data['displayedCount'] > 10 ? 10 : $data['displayedCount']; $ost = $data['optionTotal'] - ($data['offset'] + $count); $inc = $ost <= $tmp ? $count + $ost : $count; $tmp = $this->service->findOptionListAndAnswerCountList($questionId, $data['startStamp'], $data['userContext'], array($query['offset'], $inc)); $optionList = $tmp['optionList']; $countList = $tmp['countList']; $data['displayedCount'] += $inc; $data['offset'] += $inc; $answerCount = $data['poll'] ? $this->service->findTotalAnswersCount($questionId) : $this->service->findMaxAnswersCount($questionId); $list = new QUESTIONS_CMP_OptionList($optionList, $uniqId, $userId); $list->setIsPoll($data['poll']); $list->setEditable($data['editable']); $list->setAnswerCount($answerCount); $list->setEditMode($data['editMode']); $list->setUsersContext($data['userContext']); $opts = $list->initOption($countList, $data['displayedCount']); $options = array(); foreach ($opts as $option) { $options[] = array('markup' => $list->getOption($option['id'])->render(), 'data' => $option); } return array('options' => $options, 'data' => $data); }
public function onBeforeRender() { if (!$this->doNotLoadStatic) { QUESTIONS_Plugin::getInstance()->addStatic(); } if ($this->editable === null) { $this->editable = $this->service->isCurrentUserCanInteract($this->question) && $this->service->isCurrentUserCanAnswer($this->question); } $tmp = $this->service->findOptionListAndAnswerCountList($this->question->id, $this->startStamp, $this->userContext, $this->limit); $optionsDtoList = $tmp['optionList']; $countList = $tmp['countList']; $userContext = null; if (is_array($this->userContext)) { $userContext = $this->userContext; $userContext[] = $this->userId; $userContext = array_unique($userContext); } $totalAnswerCount = $this->totalAnswerCount == null ? $this->service->findTotalAnswersCount($this->question->id) : $this->totalAnswerCount; $answerCount = $this->poll ? $totalAnswerCount : $this->service->findMaxAnswersCount($this->question->id); $optionList = new QUESTIONS_CMP_OptionList($optionsDtoList, $this->uniqId, $this->userId); $optionList->setAnswerCount($answerCount); $optionList->setEditable($this->editable); $optionList->setIsPoll($this->poll); $optionList->setUsersContext($userContext); $optionList->setEditMode($this->editMode); $options = $optionList->initOption($countList); $shareData = array('userId' => $this->userId, 'ownerId' => $this->question->userId, 'editable' => $this->editable, 'editMode' => $this->editMode, 'questionId' => $this->question->id, 'totalAnswers' => $answerCount, 'poll' => $this->poll, 'uniqId' => $this->uniqId, 'userContext' => $userContext, 'displayedCount' => count($options), 'optionTotal' => $this->optionTotal, 'startStamp' => $this->startStamp, 'ignoreOptions' => array(), 'expandedView' => $this->expandedView, 'inPopupMode' => $this->inPopupMode, 'ownerMode' => $this->userId == $this->question->userId, 'url' => $this->questionUrl); $shareData['offset'] = $shareData['displayedCount']; $shareData['st']['displayedCount'] = $shareData['displayedCount']; $shareData['st']['optionTotal'] = $shareData['optionTotal']; $jsAccessor = 'questionAnswers'; $js = UTIL_JsGenerator::newInstance(); $js->equateVarables($jsAccessor, array('QUESTIONS_AnswerListCollection', $this->uniqId)); $js->callFunction(array($jsAccessor, 'init'), array($this->uniqId, $options, $shareData, !$this->editable)); $js->callFunction(array($jsAccessor, 'setResponder'), array(OW::getRouter()->urlFor('QUESTIONS_CTRL_Questions', 'rsp'))); $this->assign('viewMore', $this->viewMore); $this->assign('editMode', $this->editMode); if ($this->viewMore) { $js->callFunction(array($jsAccessor, 'initViewMore'), array()); $this->assign('viewMoreUrl', $this->questionUrl); } $addNewAvaliable = $this->editable && !$this->poll; $this->assign('addNew', $addNewAvaliable); $this->assign('hideAddNew', !$this->isAddNewAvaliable()); if ($addNewAvaliable) { $js->callFunction(array($jsAccessor, 'initAddNew'), array()); } OW::getDocument()->addOnloadScript($js); $this->assign('uniqId', $this->uniqId); $this->addComponent('list', $optionList); OW::getLanguage()->addKeyForJs('questions', 'option_not_empty_delete_warning'); OW::getLanguage()->addKeyForJs('questions', 'question_fb_title'); OW::getLanguage()->addKeyForJs('questions', 'users_fb_title'); }