public function onPostAdd(OW_Event $event) { $params = $event->getParams(); $userService = BOL_UserService::getInstance(); $userId = $params['userId']; $question = $this->service->findQuestion($params['questionId']); $post = UTIL_String::truncate($params['text'], 100, '...'); $postId = $params['id']; $ownerId = $question->userId; $questionUrl = OW::getRouter()->urlForRoute('questions-question', array('qid' => $question->id)); $questionText = UTIL_String::truncate($question->text, 100, '...'); $notificationParams = array('pluginKey' => QUESTIONS_Plugin::PLUGIN_KEY, 'action' => self::ACTION_POST, 'entityType' => 'questions-post', 'entityId' => $postId, 'userId' => null, 'time' => time()); $uniqId = uniqid('question_post'); $userAvatars = BOL_AvatarService::getInstance()->getDataForUserAvatars(array($userId)); $userAvatar = $userAvatars[$userId]; $string = array('key' => QUESTIONS_Plugin::PLUGIN_KEY . '+notifications_post', 'vars' => array('question' => '<a class="' . $uniqId . '" href="' . $questionUrl . '" >' . $questionText . '</a>', 'user' => '<a href="' . $userAvatar['url'] . '">' . $userAvatar['title'] . '</a>', 'post' => '<a class="' . $uniqId . '" href="' . $questionUrl . '" >' . $post . '</a>')); $questionSettings = array('userContext' => array((int) $userId), 'questionId' => $question->id, 'relationId' => $question->id); $notificationData = array('string' => $string, 'avatar' => $userAvatar, 'questionSettings' => $questionSettings, 'uniqId' => $uniqId, 'url' => $questionUrl); $follows = $this->service->findFollows($question->id, null, array($userId)); foreach ($follows as $f) { $notificationParams['userId'] = $f->userId; $event = new OW_Event('notifications.add', $notificationParams, $notificationData); OW::getEventManager()->trigger($event); } }
/** * Returns class instance * * @return QUESTIONS_BOL_Service */ public static function getInstance() { if (null === self::$classInstance) { self::$classInstance = new self(); } return self::$classInstance; }
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; }
public function onUserUnregister(OW_Event $event) { $params = $event->getParams(); $userId = $params["userId"]; // Delete Questions $questions = QUESTIONS_BOL_Service::getInstance()->findQuestionsByUserId($userId); foreach ($questions as $question) { QUESTIONS_BOL_Service::getInstance()->deleteQuestion($question->id); } // Delete Answers $answers = QUESTIONS_BOL_Service::getInstance()->findAnswersByUserId($userId); foreach ($answers as $answer) { QUESTIONS_BOL_Service::getInstance()->removeAnswerById($answer->id); } // Delete Follows $follows = QUESTIONS_BOL_Service::getInstance()->findFollowsByUserId($userId); foreach ($follows as $follow) { QUESTIONS_BOL_Service::getInstance()->removeFollow($follow->userId, $follow->questionId); } // Delete Activity $activityList = QUESTIONS_BOL_FeedService::getInstance()->findActivityByUserId($userId); foreach ($activityList as $activity) { /* @var $activity QUESTIONS_BOL_Activity */ QUESTIONS_BOL_FeedService::getInstance()->deleteActivity($activity->questionId, $activity->activityType, $activity->activityId); } }
public function __construct($optionId, $hiddenUsers) { $service = QUESTIONS_BOL_Service::getInstance(); $userIds = $service->findAnsweredUserIdList($optionId); $userIds = array_diff($userIds, $hiddenUsers); parent::__construct($userIds); $this->setTemplate(OW::getPluginManager()->getPlugin('base')->getCmpViewDir() . 'floatbox_user_list.html'); }
public function __construct() { parent::__construct(); if (!QUESTIONS_BOL_Service::getInstance()->isCurrentUserCanAsk()) { $this->setVisible(false); return; } $template = OW::getPluginManager()->getPlugin('questions')->getCmpViewDir() . 'question_add.html'; $this->setTemplate($template); }
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'); }
public function __construct($questionId, $context, $hidden) { $service = QUESTIONS_BOL_Service::getInstance(); $context = empty($context) ? array() : $context; $follows = $service->findFollows($questionId, $context, $hidden); $userIds = array(); foreach ($follows as $follow) { $userIds[] = (int) $follow->userId; } parent::__construct($userIds); $this->setTemplate(OW::getPluginManager()->getPlugin('base')->getCmpViewDir() . 'floatbox_user_list.html'); }
private function deleteQuestion($query, $data) { if (!OW::getUser()->isAuthenticated()) { return array('warning' => OW::getLanguage()->text('questions', 'not_authed_delete_warning')); } $questionId = $data['questionId']; $question = $this->service->findQuestion($questionId); if (!$this->service->isCurrentUserCanEdit($question)) { return array(); } $this->service->deleteQuestion($questionId); return array('message' => OW::getLanguage()->text('questions', 'question_delete_complete_msg'), 'listing' => array('loadMore' => 1)); }
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; }
public function __construct($questionId, $userContext = null, $count = null, $options = null) { parent::__construct(); $language = OW::getLanguage(); $configs = OW::getConfig()->getValues('questions'); $count = empty($count) ? QUESTIONS_BOL_Service::MORE_DISPLAY_COUNT : $count; $uniqId = uniqid('question_'); $this->assign('uniqId', $uniqId); $service = QUESTIONS_BOL_Service::getInstance(); $userId = OW::getUser()->getId(); $question = $service->findQuestion($questionId); if (empty($question)) { $this->assign('noQuestion', true); return; } $settings = $question->getSettings(); $isPoll = !$settings['allowAddOprions']; $optionTotal = $service->findOptionCount($questionId); $answerCount = $service->findTotalAnswersCount($questionId); $postCount = BOL_CommentService::getInstance()->findCommentCount('question', $questionId); $isAutor = $question->userId == $userId; if ($optionTotal - $count < 10) { $count = $optionTotal; } $limit = $count ? array(0, $count) : null; $answers = new QUESTIONS_CMP_Answers($question, $optionTotal, $limit); $answers->setExpandedView(); $answers->setSettings($options); if (isset($options['inPopup']) && $options['inPopup'] === true) { $answers->setInPopupMode(); } if (isset($options['loadStatic']) && $options['loadStatic'] === false) { $answers->setDoNotLoadStatic(); } $editable = $service->isCurrentUserCanInteract($question); $answers->setEditable($editable && $service->isCurrentUserCanAnswer($question)); if ($userContext !== null) { $answers->setUsersContext($userContext); } $answers->showAddNew(); $this->addComponent('answers', $answers); $followsCount = $service->findFollowsCount($question->id, $userContext, array($question->userId)); $statusCmp = new QUESTIONS_CMP_QuestionStatus($answers->getUniqId(), $postCount, $answerCount, $followsCount); $plugin = OW::getPluginManager()->getPlugin('questions'); $statusCmp->setTemplate($plugin->getCmpViewDir() . 'question_static_status.html'); $this->addComponent('questionStatus', $statusCmp); $tplQuestion = array('text' => nl2br($question->text)); $event = new OW_Event(QUESTIONS_BOL_Service::EVENT_ON_QUESTION_RENDER, array("questionId" => $question->id, "questionDto" => $question, "text" => $question->text, "settings" => $settings, "uniqId" => $uniqId), $tplQuestion); OW::getEventManager()->trigger($event); $this->assign('question', $event->getData()); $js = UTIL_JsGenerator::newInstance()->newObject('question', 'QUESTIONS_Question', array($uniqId, $question->id)); if ($configs['allow_comments']) { $commentsParams = new BASE_CommentsParams('questions', QUESTIONS_BOL_Service::ENTITY_TYPE); $commentsParams->setEntityId($question->id); $commentsParams->setDisplayType(BASE_CommentsParams::DISPLAY_TYPE_TOP_FORM_WITH_PAGING); $commentsParams->setCommentCountOnPage(5); $commentsParams->setOwnerId($question->userId); $commentsParams->setAddComment($editable); $commentCmp = new BASE_CMP_Comments($commentsParams); //$commentTemplate = OW::getPluginManager()->getPlugin('questions')->getCmpViewDir() . 'comments.html'; //$commentCmp->setTemplate($commentTemplate); $this->addComponent('comments', $commentCmp); if (!empty($options['focusToPost'])) { $js->addScript('question.focusOnPostInput()'); } } $jsSelector = 'QUESTIONS_AnswerListCollection.' . $answers->getUniqId(); $js->addScript('question.setAnswerList(' . $jsSelector . ');'); if (!empty($options['relation'])) { $js->addScript($jsSelector . '.setRelation("' . $options['relation'] . '");'); } $js->equateVarables(array('QUESTIONS_QuestionColletction', $uniqId), 'question'); OW::getDocument()->addOnloadScript($js); $toolbar = array(); if ($service->isCurrentUserCanInteract($question)) { if ($configs['enable_follow']) { $this->assign('follow', array('isFollow' => $service->isFollow($userId, $question->id), 'followId' => $answers->getUniqId() . '-follow', 'unfollowId' => $answers->getUniqId() . '-unfollow', 'followClick' => $jsSelector . '.followQuestion()', 'unfollowClick' => $jsSelector . '.unfollowQuestion()')); /*$followLabel = $language->text('questions', 'toolbar_follow_btn'); $unfollowLabel = $language->text('questions', 'toolbar_unfollow_btn'); if ( $service->isFollow($userId, $question->id) ) { $toolbar[] = array( 'label' => '<a id="' . $answers->getUniqId() . '-unfollow" href="javascript://" onclick="' .$jsSelector . '.unfollowQuestion()">' . $unfollowLabel . '</a> <a id="' . $answers->getUniqId() . '-follow" href="javascript://" style="display: none;" onclick="' .$jsSelector . '.followQuestion()">' . $followLabel . '</a>' ); } else { $toolbar[] = array( 'label' => '<a id="' . $answers->getUniqId() . '-unfollow" href="javascript://" style="display: none;" onclick="' .$jsSelector . '.unfollowQuestion()">' . $unfollowLabel . '</a> <a id="' . $answers->getUniqId() . '-follow" href="javascript://" onclick="' .$jsSelector . '.followQuestion()">' . $followLabel . '</a>' ); }*/ } } if ($isPoll) { $list = $service->findUserAnswerListByQuestionId($userId, $question->id); if (count($list)) { $toolbar[] = array('label' => '<a id="' . $answers->getUniqId() . '-unvote" href="javascript://" onclick="' . $jsSelector . '.unvote()">' . $language->text('questions', 'toolbar_unvote_btn') . '</a>'); } } if ($service->isCurrentUserCanEdit($question)) { $condEmbed = "confirm('" . $language->text('questions', 'delete_question_confirm') . "')"; $toolbar[] = array('label' => '<a href="javascript://" onclick="if(' . $condEmbed . ') ' . $jsSelector . '.deleteQuestion();">' . $language->text('questions', 'toolbar_delete_btn') . '</a>'); } $userData = BOL_AvatarService::getInstance()->getDataForUserAvatars(array($question->userId)); $questionInfo = array('avatar' => $userData[$question->userId], 'profileUrl' => $userData[$question->userId]['url'], 'displayName' => $userData[$question->userId]['title'], 'content' => '', 'toolbar' => $toolbar, 'date' => UTIL_DateTime::formatDate($question->timeStamp)); $this->assign('questionInfo', $questionInfo); }
public function onAnswerRemove(OW_Event $event) { $params = $event->getParams(); $optionId = (int) $params['optionId']; $optionDto = QUESTIONS_BOL_Service::getInstance()->findOption($optionId); $activityParams = array('entityType' => QUESTIONS_BOL_Service::ENTITY_TYPE, 'entityId' => $optionDto->questionId, 'activityType' => QUESTIONS_BOL_FeedService::ACTIVITY_ANSWER, 'activityId' => $params['id']); $event = new OW_Event('feed.delete_activity', $activityParams); OW::getEventManager()->trigger($event); }
public function onAnswerRemove(OW_Event $e) { $params = $e->getParams(); $option = QUESTIONS_BOL_Service::getInstance()->findOption($params['optionId']); if ($option === null) { return; } $this->service->deleteActivity($option->questionId, QUESTIONS_BOL_FeedService::ACTIVITY_ANSWER, $params['id']); }
public function onBeforeRender() { parent::onBeforeRender(); $language = OW::getLanguage(); $configs = OW::getConfig()->getValues('questions'); $optionTotal = QUESTIONS_BOL_Service::getInstance()->findOptionCount($this->question->id); $answerCount = QUESTIONS_BOL_Service::getInstance()->findTotalAnswersCount($this->question->id); $postCount = BOL_CommentService::getInstance()->findCommentCount(QUESTIONS_BOL_Service::ENTITY_TYPE, $this->question->id); $questionUrl = OW::getRouter()->urlForRoute('questions-question', array('qid' => $this->question->id)); $count = QUESTIONS_BOL_Service::DISPLAY_COUNT; if ($optionTotal - $count < 2) { $count = $optionTotal; } $answers = new QUESTIONS_CMP_Answers($this->question, $optionTotal, array(0, $count)); $answers->setTotalAnswerCount($answerCount); $answers->setUsersContext($this->getContextUserIds()); $bubbleActivity = $this->getBubbleActivity(); $jsSelector = 'QUESTIONS_AnswerListCollection.' . $answers->getUniqId(); $text = $this->getItemString($bubbleActivity, $jsSelector, $questionUrl); $avatars = BOL_AvatarService::getInstance()->getDataForUserAvatars(array($bubbleActivity->userId)); $allowPopups = !isset($configs['allow_popups']) || $configs['allow_popups']; $features = array(); $onClickStr = "window.location.href='{$questionUrl}'"; if ($configs['allow_comments']) { if ($allowPopups) { $onClickStr = "return {$jsSelector}.openQuestionDelegate(true);"; } $features[] = array('class' => 'q-' . $answers->getUniqId() . '-status-comments', 'iconClass' => 'ow_miniic_comment', 'label' => $postCount, 'onclick' => $onClickStr, 'string' => null); } if ($allowPopups) { $onClickStr = "return {$jsSelector}.openQuestionDelegate();"; } $features[] = array('class' => 'q-' . $answers->getUniqId() . '-status-votes', 'iconClass' => 'questions_miniicon_check', 'label' => $answerCount, 'onclick' => $onClickStr, 'string' => null); if ($configs['enable_follow']) { $onClickStr = "OW.error('" . $language->text('questions', 'follow_not_allowed') . "')"; $isFollowing = false; if (QUESTIONS_BOL_Service::getInstance()->isCurrentUserCanInteract($this->question)) { $userId = OW::getUser()->getId(); $isFollowing = QUESTIONS_BOL_Service::getInstance()->isFollow($userId, $this->question->id); $onClickStr = $isFollowing ? $jsSelector . '.unfollowQuestion();' : $jsSelector . '.followQuestion();'; } else { if (OW::getUser()->isAuthenticated()) { $isFollowing = QUESTIONS_BOL_Service::getInstance()->isFollow($userId, $this->question->id); if ($isFollowing) { $onClickStr = $jsSelector . '.unfollowQuestion();'; } } } $features[] = array('class' => 'q-' . $answers->getUniqId() . '-status-follows', 'iconClass' => 'questions_miniic_follow', 'label' => QUESTIONS_BOL_Service::getInstance()->findFollowsCount($this->question->id), 'onclick' => $onClickStr, 'active' => $isFollowing); } $settings = $this->question->getSettings(); $context = empty($settings['context']['url']) || empty($settings['context']['label']) ? null : array('url' => $settings['context']['url'], 'label' => $settings['context']['label']); $tplQuestion = array('questionId' => $this->question->id, 'uniqId' => $this->getUniqId(), 'text' => $text, 'timeStamp' => UTIL_DateTime::formatDate($bubbleActivity->timeStamp), 'lastItem' => $this->lastItem, 'answers' => $answers->render(), 'avatar' => $avatars[$bubbleActivity->userId], 'settings' => $settings, 'context' => $context, 'features' => $features, 'permalink' => $questionUrl); $event = new OW_Event(QUESTIONS_BOL_Service::EVENT_ON_LIST_ITEM_RENDER, array("questionId" => $this->question->id, "questionDto" => $this->question, "text" => $text, "settings" => $settings, "uniqId" => $this->getUniqId()), $tplQuestion); OW::getEventManager()->trigger($event); $this->assign('item', $event->getData()); }