public function initOption($countList, $optionCount = null) { if (empty($this->optionDtoList)) { return array(); } foreach ($this->optionDtoList as $opt) { $this->optionIdList[] = $opt->id; $cmp = new QUESTIONS_CMP_Answer($opt, $this->uniqId); $this->optionList[$opt->id] = $cmp; $cmp->setDisbled(!$this->editable); $cmp->setIsMultiple(!$this->poll); } $checkedOptions = array(); $optionsState = array(); $totalAnswers = $this->answerCount; //$countList = $this->service->findAnswersCount($this->optionIdList); $answerDtoList = $this->service->findUserAnswerList($this->userId, $this->optionIdList); foreach ($answerDtoList as $item) { $checkedOptions[] = $item->optionId; $this->getOption($item->optionId)->setVoted(); } $optionCount = empty($optionCount) ? count($this->optionDtoList) : $optionCount; foreach ($this->optionDtoList as $optionDto) { $optionId = $optionDto->id; $checked = in_array($optionId, $checkedOptions); $voteCount = $countList[$optionId]; $users = $this->service->findAnsweredUserIdList($optionId, $this->usersContext, $checked ? 4 : 3); $optionsState[] = array('id' => $optionId, 'users' => $users, 'voteCount' => $voteCount, 'checked' => $checked); $this->getOption($optionId)->setVoteCount($voteCount); $this->getOption($optionId)->setUsers($users); $canEdit = $optionDto->userId == $this->userId && ($voteCount == 0 || $voteCount == 1 && $checked); $canEdit = $this->editMode || $canEdit; $canEdit = $this->poll ? $canEdit && $optionCount > 2 : $canEdit; $this->getOption($optionId)->setEditMode($canEdit); if ($totalAnswers) { $this->getOption($optionId)->setPercents($voteCount * 100 / $totalAnswers); } } return $optionsState; }