public function prepareParams() { if (!empty($this->_params['_preparedParams'])) { return; } $this->_params['_preparedParams'] = true; $widget = $this->_params['widget']; $widget['_ajaxLoadParams'] = $this->_params['ajaxLoadParams']; $position = 'wf_widget_ajax'; $hookPosition = 'hook:wf_widget_ajax'; if (!empty($widget['_ajaxLoadParams'][WidgetFramework_WidgetRenderer::PARAM_IS_HOOK])) { $widget['position'] = $hookPosition; $widget['template_for_hooks'] = array($hookPosition => array($position)); } else { $widget['position'] = $position; } $widgets = array($widget['widget_id'] => $widget); $core = WidgetFramework_Core::getInstance(); $core->removeAllWidgets(); $core->addWidgets($widgets); $_REQUEST['_getRender'] = 1; $_REQUEST['_getRenderAsTemplateHtml'] = 1; $_REQUEST['_renderedIds'] = $widget['widget_id']; WidgetFramework_Listener::saveLayoutEditorRendered(true); }
protected function _getProfilePosts(array $widget, $positionCode, array $params, XenForo_Template_Abstract $renderTemplateObject) { if ($positionCode == 'forum_list' and $widget['options']['limit'] == XenForo_Application::getOptions()->get('forumListNewProfilePosts')) { if (!empty($params['profilePosts'])) { return $params['profilePosts']; } } $core = WidgetFramework_Core::getInstance(); $visitor = XenForo_Visitor::getInstance(); /** @var WidgetFramework_XenForo_Model_ProfilePost $profilePostModel */ $profilePostModel = $core->getModelFromCache('XenForo_Model_ProfilePost'); $profilePosts = $profilePostModel->WidgetFramework_getLatestProfilePosts(array('deleted' => false, 'moderated' => false), array('limit' => $widget['options']['limit'] * 3, 'join' => XenForo_Model_ProfilePost::FETCH_USER_POSTER | XenForo_Model_ProfilePost::FETCH_USER_RECEIVER | XenForo_Model_ProfilePost::FETCH_USER_RECEIVER_PRIVACY, 'permissionCombinationId' => $visitor->get('permission_combination_id'))); foreach ($profilePosts as $id => &$profilePost) { $receivingUser = $profilePostModel->getProfileUserFromProfilePost($profilePost); if (!$profilePostModel->canViewProfilePostAndContainer($profilePost, $receivingUser)) { unset($profilePosts[$id]); } $profilePost = $profilePostModel->prepareProfilePost($profilePost, $receivingUser); if (!empty($profilePost['isIgnored'])) { unset($profilePosts[$id]); } } $profilePosts = array_slice($profilePosts, 0, $widget['options']['limit'], true); return $profilePosts; }
protected function _render(array $widget, $positionCode, array $params, XenForo_Template_Abstract $renderTemplateObject) { if (empty($widget['options']['limit'])) { $widget['options']['limit'] = 5; } if (empty($widget['options']['type'])) { $widget['options']['type'] = 'new'; } $core = WidgetFramework_Core::getInstance(); $visitor = XenForo_Visitor::getInstance(); $userModel = $core->getModelFromCache('XenForo_Model_User'); $teamModel = $core->getModelFromCache('Nobita_Teams_Model_Team'); $memberModel = $core->getModelFromCache('Nobita_Teams_Model_Member'); $conditions = array('moderated' => false, 'deleted' => false, 'privacy_state' => array(Nobita_Teams_Model_Team::PRIVACY_OPEN, Nobita_Teams_Model_Team::PRIVACY_CLOSED)); $fetchOptions = array('join' => Nobita_Teams_Model_Team::FETCH_PROFILE | Nobita_Teams_Model_Team::FETCH_PRIVACY | Nobita_Teams_Model_Team::FETCH_CATEGORY); switch ($widget['options']['type']) { case 'new': $teams = $teamModel->getTeams($conditions, array_merge($fetchOptions, array('order' => 'team_date', 'direction' => 'desc', 'limit' => $widget['options']['limit']))); break; case 'most_message': $teams = $teamModel->getTeams($conditions, array_merge($fetchOptions, array('order' => 'message_count', 'direction' => 'desc', 'limit' => $widget['options']['limit']))); break; case 'most_member': $teams = $teamModel->getTeams($conditions, array_merge($fetchOptions, array('order' => 'member_count', 'direction' => 'desc', 'limit' => $widget['options']['limit']))); break; case 'suggestion': $users = $userModel->getUsersFollowing($visitor['user_id'], array('limit' => $widget['options']['limit'] * 3)); $setup = Nobita_Teams_Setup::getInstance(); $teamIds = $memberModel->getTeamIdsByUserId(array_keys($users)); $user = $visitor->toArray(); foreach ($teamIds as $key => &$val) { if ($setup->getTeamFromVisitor($val, $user)) { unset($teamIds[$key]); // remove team which visitor has joined } } if (empty($users)) { if (empty($teamIds)) { $teams = array(); } else { $teams = $teamModel->getTeams($conditions, array_merge($fetchOptions, array('team_id' => $teamIds, 'order' => 'random', 'limit' => $widget['options']['limit'] * 3))); } } else { if (empty($teamIds)) { $teams = array(); } else { $teams = $teamModel->getTeams($conditions, array_merge($fetchOptions, array('team_id' => $teamIds, 'order' => 'random', 'limit' => $widget['options']['limit'] * 3))); } } break; } $teams = $teamModel->filterUnviewableTeams($teams); $teams = $teamModel->prepareTeams($teams); if (count($teams) > $widget['options']['limit']) { // too many teams (because we fetched 3 times as needed) $teams = array_slice($teams, 0, $widget['options']['limit'], true); } $renderTemplateObject->setParam('teams', $teams); return $renderTemplateObject->render(); }
protected function _render(array $widget, $positionCode, array $params, XenForo_Template_Abstract $template) { $threads = array(); if (isset($params['thread']) and !empty($params['thread']['thread_id'])) { // $thread is found in the template params, try to fetch the tags $tagsOrTexts = Tinhte_XenTag_Helper::unserialize($params['thread'][Tinhte_XenTag_Constants::FIELD_THREAD_TAGS]); } if (empty($tagsOrTexts) and isset($params['page']) and !empty($params['page']['node_id'])) { // fetch page's tags $tagsOrTexts = Tinhte_XenTag_Helper::unserialize($params['page'][Tinhte_XenTag_Constants::FIELD_PAGE_TAGS]); } if (empty($tagsOrTexts) and isset($params['forum']) and !empty($params['forum']['node_id'])) { // fetch forum's tags $tagsOrTexts = Tinhte_XenTag_Helper::unserialize($params['forum'][Tinhte_XenTag_Constants::FIELD_FORUM_TAGS]); } if (empty($tagsOrTexts) and isset($params['resource']) and !empty($params['resource']['resource_id'])) { // fetch resource's tags $tagsOrTexts = Tinhte_XenTag_Helper::unserialize($params['resource'][Tinhte_XenTag_Constants::FIELD_RESOURCE_TAGS]); } if (!empty($tagsOrTexts)) { $core = WidgetFramework_Core::getInstance(); /* @var $threadModel XenForo_Model_Thread */ $threadModel = $core->getModelFromCache('XenForo_Model_Thread'); /* @var $tagModel Tinhte_XenTag_Model_Tag */ $tagModel = $core->getModelFromCache('Tinhte_XenTag_Model_Tag'); $tagTexts = Tinhte_XenTag_Helper::getTextsFromTagsOrTexts($tagsOrTexts); $tags = $tagModel->getTagsByText($tagTexts); $threadIds = array(); foreach ($tags as $tag) { $latest = Tinhte_XenTag_Helper::unserialize($tag['latest_tagged_contents']); if (empty($latest)) { // for some reason, the latest_tagged_contents field is empty // this is illogical because at least there is 1 tagged content (current thread) // so we will rebuild the tag... $latest = $tagModel->updateTag($tag['tag_id']); } if (!empty($latest)) { foreach ($latest as $taggedContent) { if ($taggedContent['content_type'] == 'thread') { // ignore current thread id, obviously!!! if (!empty($params['thread']['thread_id']) and $taggedContent['content_id'] == $params['thread']['thread_id']) { continue; } $threadIds[] = $taggedContent['content_id']; } } } } if (!empty($threadIds)) { $threadIds = array_unique($threadIds); $forumIds = $this->_helperGetForumIdsFromOption(array(), $params, empty($widget['options']['as_guest']) ? false : true); // quick way to get all viewable forum ids $conditions = array('node_id' => $forumIds, Tinhte_XenTag_XenForo_Model_Thread::CONDITIONS_THREAD_ID => $threadIds, 'deleted' => false, 'moderated' => false); $fetchOptions = array('limit' => $widget['options']['limit'], 'join' => XenForo_Model_Thread::FETCH_AVATAR, 'order' => 'post_date', 'orderDirection' => 'desc'); $threads = $threadModel->getThreads($conditions, $fetchOptions); } } $template->setParam('threads', $threads); return $template->render(); }
public function __toString() { $strings = array(); $exceptions = array(); foreach ($this->_arrays as $item) { if (is_string($item)) { $strings[] = $item; } elseif ($item instanceof XenForo_Template_Abstract) { try { $strings[] = $item->render(); } catch (Exception $e) { $exceptions[] = $e; } } else { try { $strings[] = strval($item); } catch (Exception $e) { $exceptions[] = $e; } } } if (!empty($exceptions)) { if (WidgetFramework_Core::debugMode()) { // do this to display the exception (only done in our debug mode) var_dump($exceptions); exit; } else { // throw the first exception to let people know that something is wrong $e = reset($exceptions); throw $e; } } return implode($this->_glue, $strings); }
protected function _postDelete() { if (!$this->getExtraData(self::EXTRA_DATA_SKIP_REBUILD)) { $this->_getWidgetModel()->buildCache(); } WidgetFramework_Core::clearCachedWidgetById($this->get('widget_id')); }
protected function _render(array $widget, $positionCode, array $params, XenForo_Template_Abstract $renderTemplateObject) { if (empty($widget['options']['limit'])) { $widget['options']['limit'] = 5; } if (empty($widget['options']['order'])) { $widget['options']['order'] = 'register_date'; } if (empty($widget['options']['direction'])) { $widget['options']['direction'] = 'DESC'; } $users = false; // try to be smart and get the users data if they happen to be available if ($positionCode == 'member_list') { if ($widget['options']['limit'] == 12 && $widget['options']['order'] == 'message_count' and !empty($params['activeUsers'])) { $users = $params['activeUsers']; } if ($widget['options']['limit'] == 8 && $widget['options']['order'] == 'register_date' and !empty($params['latestUsers'])) { $users = $params['latestUsers']; } } if ($users === false) { /** @var XenForo_Model_User $userModel */ $userModel = WidgetFramework_Core::getInstance()->getModelFromCache('XenForo_Model_User'); $conditions = array('user_state' => 'valid', 'is_banned' => 0); $fetchOptions = array('limit' => $widget['options']['limit'], 'order' => $widget['options']['order'], 'direction' => $widget['options']['direction']); $users = $userModel->getUsers($conditions, $fetchOptions); } $renderTemplateObject->setParam('users', $users); return $renderTemplateObject->render(); }
protected function _render(array $widget, $templateName, array $params, XenForo_Template_Abstract $renderTemplateObject) { $userModel = WidgetFramework_Core::getInstance()->getModelFromCache('XenForo_Model_User'); $fetchOptions = array(); $users = $userModel->getTopUsers($widget['options']); $renderTemplateObject->setParam('users', $users); return $renderTemplateObject->render(); }
public static function verifyClass($class, XenForo_DataWriter $dw, $fieldName = false) { $widgetRenderer = WidgetFramework_Core::getRenderer($class); if (empty($widgetRenderer)) { $dw->error(new XenForo_Phrase('wf_invalid_widget_renderer_x', array('renderer' => $class)), $fieldName); } else { return true; } }
public function prepareParams() { $widgets = array(); foreach ($this->_params['widgets'] as $widget) { $widgets[] = $widget; } $core = WidgetFramework_Core::getInstance(); $core->addWidgets($widgets); parent::prepareParams(); }
protected function _render(array $widget, $positionCode, array $params, XenForo_Template_Abstract $renderTemplateObject) { $core = WidgetFramework_Core::getInstance(); /** @var XenForo_Model_Thread $threadModel */ $threadModel = $core->getModelFromCache('XenForo_Model_Thread'); /** @var XenForo_Model_Poll $pollModel */ $pollModel = $core->getModelFromCache('XenForo_Model_Poll'); /** @var XenForo_Model_Node $nodeModel */ $nodeModel = $core->getModelFromCache('XenForo_Model_Node'); $thread = array(); $poll = array(); if (empty($widget['options']['thread_id']) or $widget['options']['thread_id'] === 'random') { $forumIds = array_keys($this->_helperGetViewableNodeList(false)); $conditions = array('node_id' => $forumIds, WidgetFramework_XenForo_Model_Thread::CONDITIONS_DISCUSSION_TYPE => 'poll', 'deleted' => false, 'moderated' => false); if (!empty($widget['options']['open_only'])) { $conditions['discussion_open'] = true; } $fetchOptions = array('order' => $widget['options']['thread_id'] === 'random' ? WidgetFramework_XenForo_Model_Thread::FETCH_OPTIONS_ORDER_RANDOM : 'post_date', 'orderDirection' => 'desc', WidgetFramework_XenForo_Model_Thread::FETCH_OPTIONS_POLL_JOIN => true, WidgetFramework_XenForo_Model_Thread::FETCH_OPTIONS_FORUM_FULL_JOIN => true, 'limit' => 3); $threads = $threadModel->getThreads($conditions, $fetchOptions); if (!empty($threads)) { $thread = array(); $nodePermissions = $nodeModel->getNodePermissionsForPermissionCombination(); foreach ($threads as $_thread) { if ($threadModel->canViewThread($_thread, $_thread, $null, $nodePermissions[$_thread['node_id']])) { $thread = $_thread; break; } } } } else { $thread = $threadModel->getThreadById($widget['options']['thread_id'], array(WidgetFramework_XenForo_Model_Thread::FETCH_OPTIONS_POLL_JOIN => true, WidgetFramework_XenForo_Model_Thread::FETCH_OPTIONS_FORUM_FULL_JOIN => true)); if ($thread['discussion_type'] != 'poll') { $thread = array(); } if (!empty($widget['options']['open_only'])) { if (empty($thread['discussion_open'])) { $thread = array(); } } } if (!empty($thread)) { if (XenForo_Application::$versionId > 1040000) { // XenForo 1.4.0+ has some major changes regarding polls $poll = $pollModel->getPollByContent('thread', $thread['thread_id']); if (!empty($poll)) { $poll = $pollModel->preparePoll($poll, $threadModel->canVoteOnPoll($poll, $thread, $thread)); } } else { $poll = $pollModel->preparePoll($thread, $threadModel->canVoteOnPoll($thread, $thread)); } } $renderTemplateObject->setParam('thread', $thread); $renderTemplateObject->setParam('poll', $poll); return $renderTemplateObject->render(); }
protected function _render(array $widget, $positionCode, array $params, XenForo_Template_Abstract $renderTemplateObject) { $limit = XenForo_Application::getOptions()->get('xengalleryShowTopContributors', 'limit'); if (!empty($widget['options']['limit'])) { $limit = $widget['options']['limit']; } /** @var XenGallery_Model_Media $mediaModel */ $mediaModel = WidgetFramework_Core::getInstance()->getModelFromCache('XenGallery_Model_Media'); $users = $mediaModel->getTopContributors($limit); $renderTemplateObject->setParam('users', $users); return $renderTemplateObject->render(); }
protected function _getProfilePosts(array $widget, $positionCode, array $params, XenForo_Template_Abstract $renderTemplateObject) { $core = WidgetFramework_Core::getInstance(); /** @var XenForo_Model_User $userModel */ $userModel = $core->getModelFromCache('XenForo_Model_User'); /** @var XenForo_Model_UserProfile $userProfileModel */ $userProfileModel = $core->getModelFromCache('XenForo_Model_UserProfile'); /** @var XenForo_Model_ProfilePost $profilePostModel */ $profilePostModel = $core->getModelFromCache('XenForo_Model_ProfilePost'); if (XenForo_Visitor::getUserId() == 0 or empty($widget['options']['friends_only'])) { // get statuses from all users if friends_only option is not used // also do it if current user is guest (guest has no friend list, lol) $conditions = array(WidgetFramework_XenForo_Model_User::CONDITIONS_STATUS_DATE => array('>', 0)); $fetchOptions = array('join' => XenForo_Model_User::FETCH_USER_PROFILE, 'order' => WidgetFramework_XenForo_Model_User::ORDER_STATUS_DATE, 'direction' => 'desc', 'limit' => $widget['options']['limit'] * 3); $users = $userModel->getUsers($conditions, $fetchOptions); // remove users if current user has no permission foreach (array_keys($users) as $userId) { if ($userProfileModel->canViewProfilePosts($users[$userId]) == false) { unset($users[$userId]); } } } else { $users = $userModel->getFollowedUserProfiles(XenForo_Visitor::getUserId(), $widget['options']['limit'], 'user_profile.status_date DESC'); // remove users if no status is found foreach (array_keys($users) as $userId) { if (empty($users[$userId]['status_date'])) { unset($users[$userId]); } } } $profilePostIds = array(); if (!empty($widget['options']['show_duplicates']) and !empty($users)) { $userIds = array_keys($users); /** @var WidgetFramework_XenForo_Model_ProfilePost $profilePostModel */ $profilePostModel = $core->getModelFromCache('XenForo_Model_ProfilePost'); $profilePostIds = $profilePostModel->WidgetFramework_getProfilePostIdsOfUserStatuses($userIds, intval($widget['options']['limit'])); } else { foreach ($users as $user) { $profilePostIds[] = $user['status_profile_post_id']; } } $profilePosts = $profilePostModel->getProfilePostsByIds($profilePostIds, array('join' => XenForo_Model_ProfilePost::FETCH_USER_POSTER | XenForo_Model_ProfilePost::FETCH_USER_RECEIVER | XenForo_Model_ProfilePost::FETCH_USER_RECEIVER_PRIVACY)); foreach ($profilePosts as $id => &$profilePost) { $receivingUser = $profilePostModel->getProfileUserFromProfilePost($profilePost); $profilePost = $profilePostModel->prepareProfilePost($profilePost, $receivingUser); if (!empty($profilePost['isIgnored'])) { unset($profilePosts[$id]); } } uasort($profilePosts, array(__CLASS__, '_cmpFunction')); $profilePosts = array_slice($profilePosts, 0, $widget['options']['limit'], true); return $profilePosts; }
public function renderHtml() { $widget =& $this->_params['widget']; if (!empty($widget['class'])) { $renderer = WidgetFramework_Core::getRenderer($widget['class'], false); } else { $renderer = WidgetFramework_Core::getRenderer('WidgetFramework_WidgetRenderer_None', false); } if ($renderer) { $renderer->renderOptions($this->_renderer, $this->_params); } }
protected function _render(array $widget, $positionCode, array $params, XenForo_Template_Abstract $template) { $core = WidgetFramework_Core::getInstance(); /** @var Tinhte_XenTag_XenForo_Model_Tag $tagModel */ $tagModel = $core->getModelFromCache('XenForo_Model_Tag'); if (!empty($widget['options']['days'])) { $days = $widget['options']['days']; } else { $days = Tinhte_XenTag_Option::get('trendingDays'); } $cutoff = XenForo_Application::$time - $days * 86400; if (!empty($widget['options']['limit'])) { $limit = $widget['options']['limit']; } else { $limit = Tinhte_XenTag_Option::get('trendingMax'); } $forumIds = array(); if (!empty($widget['options']['forums'])) { $forumIds = $this->_helperGetForumIdsFromOption($widget['options']['forums'], $params, true); } $db = XenForo_Application::getDb(); $counts = $db->fetchPairs(' SELECT tag_content.tag_id, COUNT(*) AS tagged_count FROM `xf_tag_content` AS tag_content ' . (!empty($forumIds) ? 'INNER JOIN `xf_thread` AS thread ON (thread.thread_id = tag_content.content_id)' : '') . ' WHERE tag_content.content_type = "thread" AND tag_content.add_date > ? ' . (!empty($forumIds) ? 'AND thread.node_id IN (' . $db->quote($forumIds) . ')' : '') . ' GROUP BY tag_content.tag_id ORDER BY tagged_count DESC LIMIT ?; ', array($cutoff, $limit)); $tags = array(); if (!empty($counts)) { $tagsDb = $tagModel->fetchAllKeyed(' SELECT * FROM `xf_tag` WHERE tag_id IN (' . $db->quote(array_keys($counts)) . ') ', 'tag_id'); foreach ($counts as $tagId => $count) { if (isset($tagsDb[$tagId])) { $tags[$tagId] = $tagsDb[$tagId]; $tags[$tagId]['use_count'] = $count; } } } $tagsLevels = $tagModel->getTagCloudLevels($tags); $template->setParam('tags', $tags); $template->setParam('tagsLevels', $tagsLevels); return $template->render(); }
protected function _render(array $widget, $positionCode, array $params, XenForo_Template_Abstract $renderTemplateObject) { if ('forum_list' == $positionCode) { $renderTemplateObject->setParam('boardTotals', $params['boardTotals']); } else { $core = WidgetFramework_Core::getInstance(); $boardTotals = $core->getModelFromCache('XenForo_Model_DataRegistry')->get('boardTotals'); if (!$boardTotals) { $boardTotals = $core->getModelFromCache('XenForo_Model_Counters')->rebuildBoardTotalsCounter(); } $renderTemplateObject->setParam('boardTotals', $boardTotals); } return $renderTemplateObject->render(); }
protected function _render(array $widget, $positionCode, array $params, XenForo_Template_Abstract $renderTemplateObject) { if ('forum_list' === $positionCode and !empty($params['onlineUsers'])) { $renderTemplateObject->setParam('onlineUsers', $params['onlineUsers']); } else { if (empty($GLOBALS['WidgetFramework_onlineUsers'])) { $visitor = XenForo_Visitor::getInstance(); $sessionModel = WidgetFramework_Core::getInstance()->getModelFromCache('XenForo_Model_Session'); $GLOBALS['WidgetFramework_onlineUsers'] = $sessionModel->getSessionActivityQuickList($visitor->toArray(), array('cutOff' => array('>', $sessionModel->getOnlineStatusTimeout())), $visitor['user_id'] ? $visitor->toArray() : null); } $renderTemplateObject->setParam('onlineUsers', $GLOBALS['WidgetFramework_onlineUsers']); } return $renderTemplateObject->render(); }
protected function _render(array $widget, $positionCode, array $params, XenForo_Template_Abstract $template) { $threads = array(); if (isset($params['thread']) and !empty($params['thread']['thread_id'])) { // $thread is found in the template params, try to fetch the tags $tags = Tinhte_XenTag_Helper::unserialize($params['thread'][Tinhte_XenTag_Constants::FIELD_THREAD_TAGS]); } if (empty($tags) and isset($params['page']) and !empty($params['page']['node_id'])) { // fetch page's tags $tags = Tinhte_XenTag_Helper::unserialize($params['page'][Tinhte_XenTag_Constants::FIELD_PAGE_TAGS]); } if (empty($tags) and isset($params['forum']) and !empty($params['forum']['node_id'])) { // fetch forum's tags $tags = Tinhte_XenTag_Helper::unserialize($params['forum'][Tinhte_XenTag_Constants::FIELD_FORUM_TAGS]); } if (empty($tags) and isset($params['resource']) and !empty($params['resource']['resource_id'])) { // fetch resource's tags $tags = Tinhte_XenTag_Helper::unserialize($params['resource'][Tinhte_XenTag_Constants::FIELD_RESOURCE_TAGS]); } if (!empty($tags)) { $core = WidgetFramework_Core::getInstance(); /* @var $searchModel XenForo_Model_Search */ $searchModel = $core->getModelFromCache('XenForo_Model_Search'); $tagConstraint = implode(' ', array_keys($tags)); $constraints = array(Tinhte_XenTag_Constants::SEARCH_CONSTRAINT_TAGS => $tagConstraint); $searcher = new XenForo_Search_Searcher($searchModel); $searchQuery = ''; $order = 'date'; $typeHandler = $searchModel->getSearchDataHandler('thread'); $results = $searcher->searchType($typeHandler, $searchQuery, $constraints, $order, false, $widget['options']['limit'] * 10); if (!empty($results)) { $threadIds = array(); foreach ($results as $result) { if ($result[0] === 'thread') { $threadIds[] = $result[1]; } } $threadIds = array_unique($threadIds); $forumIds = $this->_helperGetForumIdsFromOption(array(), $params, empty($widget['options']['as_guest']) ? false : true); $conditions = array('node_id' => $forumIds, Tinhte_XenTag_XenForo_Model_Thread::CONDITIONS_THREAD_ID => $threadIds, 'deleted' => false, 'moderated' => false); $fetchOptions = array('limit' => $widget['options']['limit'], 'join' => XenForo_Model_Thread::FETCH_AVATAR, 'order' => 'post_date', 'orderDirection' => 'desc'); /* @var $threadModel XenForo_Model_Thread */ $threadModel = $core->getModelFromCache('XenForo_Model_Thread'); $threads = $threadModel->getThreads($conditions, $fetchOptions); } } $template->setParam('threads', $threads); return $template->render(); }
protected function _getOnlineUsers() { try { $onlineUsers = XenForo_Application::get(self::APPLICATION_KEY); } catch (Exception $e) { $onlineUsers = false; } if (empty($onlineUsers)) { $visitor = XenForo_Visitor::getInstance(); /* @var $sessionModel XenForo_Model_Session */ $sessionModel = WidgetFramework_Core::getInstance()->getModelFromCache('XenForo_Model_Session'); $onlineUsers = $sessionModel->getSessionActivityQuickList($visitor->toArray(), array('cutOff' => array('>', $sessionModel->getOnlineStatusTimeout())), $visitor['user_id'] ? $visitor->toArray() : null); XenForo_Application::set(self::APPLICATION_KEY, $onlineUsers); } return $onlineUsers; }
protected function _render(array $widget, $positionCode, array $params, XenForo_Template_Abstract $template) { $core = WidgetFramework_Core::getInstance(); /** @var Tinhte_XenTag_XenForo_Model_Tag $tagModel */ $tagModel = $core->getModelFromCache('XenForo_Model_Tag'); if (!empty($widget['options']['limit'])) { $limit = $widget['options']['limit']; } else { $limit = XenForo_Application::getOptions()->get('tagCloud', 'count'); } $tags = $tagModel->getTagsForCloud($limit); $tagsLevels = $tagModel->getTagCloudLevels($tags); $template->setParam('tags', $tags); $template->setParam('tagsLevels', $tagsLevels); return $template->render(); }
protected function _render(array $widget, $positionCode, array $params, XenForo_Template_Abstract $template) { $threads = array(); $tags = Tinhte_XenTag_Helper::explodeTags($widget['options']['tags']); $tagsText = array(); foreach ($tags as $tag) { $tag = trim($tag); if (!empty($tag)) { $tagsText[] = $tag; } } if (!empty($tagsText)) { $core = WidgetFramework_Core::getInstance(); /* @var $threadModel XenForo_Model_Thread */ $threadModel = $core->getModelFromCache('XenForo_Model_Thread'); /* @var $tagModel Tinhte_XenTag_Model_Tag */ $tagModel = $core->getModelFromCache('Tinhte_XenTag_Model_Tag'); $tags = $tagModel->getTagsByText($tagsText); $threadIds = array(); foreach ($tags as $tag) { $latest = Tinhte_XenTag_Helper::unserialize($tag['latest_tagged_contents']); if (empty($latest)) { // for some reason, the latest_tagged_contents field is empty // this is illogical because at least there is 1 tagged content (current thread) // so we will rebuild the tag... $latest = $tagModel->updateTag($tag['tag_id']); } if (!empty($latest)) { foreach ($latest as $taggedContent) { if ($taggedContent['content_type'] == 'thread') { $threadIds[] = $taggedContent['content_id']; } } } } if (!empty($threadIds)) { $threadIds = array_unique($threadIds); $forumIds = $this->_helperGetForumIdsFromOption(array(), $params, empty($widget['options']['as_guest']) ? false : true); // quick way to get all viewable forum ids $conditions = array('node_id' => $forumIds, Tinhte_XenTag_XenForo_Model_Thread::CONDITIONS_THREAD_ID => $threadIds, 'deleted' => false, 'moderated' => false); $fetchOptions = array('limit' => $widget['options']['limit'], 'join' => XenForo_Model_Thread::FETCH_AVATAR, 'order' => 'post_date', 'orderDirection' => 'desc'); $threads = $threadModel->getThreads($conditions, $fetchOptions); } } $template->setParam('threads', $threads); return $template->render(); }
protected function _render(array $widget, $positionCode, array $params, XenForo_Template_Abstract $template) { $core = WidgetFramework_Core::getInstance(); $tagModel = $core->getModelFromCache('Tinhte_XenTag_Model_Tag'); if (!empty($widget['options']['days'])) { $days = $widget['options']['days']; } else { $days = Tinhte_XenTag_Option::get('trendingDays'); } $cutoff = XenForo_Application::$time - $days * 86400; $createdCutoff = 0; if (!empty($widget['options']['created_days'])) { $createdCutoff = XenForo_Application::$time - $widget['options']['created_days'] * 86400; } if (!empty($widget['options']['limit'])) { $limit = $widget['options']['limit']; } else { $limit = Tinhte_XenTag_Option::get('trendingMax'); } $forumIds = $this->_helperGetForumIdsFromOption($widget['options']['forums'], $params, true); $db = XenForo_Application::getDb(); $taggedCount = $db->fetchPairs(' SELECT tagged.tag_id, count(*) AS tagged_count FROM `xf_tinhte_xentag_tagged_content` AS tagged INNER JOIN `xf_thread` AS thread ON (thread.thread_id = tagged.content_id) ' . ($createdCutoff > 0 ? 'INNER JOIN `xf_tinhte_xentag_tag` AS tag ON (tag.tag_id = tagged.tag_id AND tag.created_date > ' . $createdCutoff . ')' : '') . ' WHERE tagged.content_type = "thread" AND tagged.tagged_date > ? ' . (!empty($forumIds) ? 'AND thread.node_id IN (' . $db->quote($forumIds) . ')' : '') . ' GROUP BY tagged.tag_id ORDER BY tagged_count DESC LIMIT ?; ', array($cutoff, $limit)); $tags = array(); if (!empty($taggedCount)) { $tagsDb = $tagModel->getAllTag(array('tag_id' => array_keys($taggedCount))); foreach ($taggedCount as $tagId => $count) { if (isset($tagsDb[$tagId])) { $tags[$tagId] = $tagsDb[$tagId]; $tags[$tagId]['tagged_count'] = $count; } } } $tagModel->calculateCloudLevel($tags); $template->setParam('tags', $tags); return $template->render(); }
protected function _renderOptions(XenForo_Template_Abstract $template) { $existingCategoryIds = array(); $existingOptions = $template->getParam('options'); if (!empty($existingOptions['categoryIds'])) { $existingCategoryIds = $existingOptions['categoryIds']; } /** @var XenGallery_Model_Category $categoryModel */ $categoryModel = WidgetFramework_Core::getInstance()->getModelFromCache('XenGallery_Model_Category'); $rows = $categoryModel->getCategoryStructure(); $categories = array(); foreach ($rows as $category) { $categories[] = array('value' => $category['category_id'], 'label' => $category['category_title'], 'depth' => $category['depth'], 'selected' => in_array($category['category_id'], $existingCategoryIds)); } $template->setParam('categories', $categories); return parent::_renderOptions($template); }
protected function _render(array $widget, $positionCode, array $params, XenForo_Template_Abstract $renderTemplateObject) { if (empty($widget['options']['limit'])) { $widget['options']['limit'] = 5; } $users = false; // try to be smart and get the users data if they happen to be available if ($positionCode == 'member_notable' and $widget['options']['limit'] == 0 and !empty($params['staff'])) { $users = $params['staff']; } if ($users === false) { $userModel = WidgetFramework_Core::getInstance()->getModelFromCache('XenForo_Model_User'); $users = $userModel->getUsers(array('is_staff' => true), array('join' => XenForo_Model_User::FETCH_USER_FULL, 'limit' => $widget['options']['limit'], 'order' => 'username')); } $renderTemplateObject->setParam('users', $users); return $renderTemplateObject->render(); }
protected function _render(array $widget, $positionCode, array $params, XenForo_Template_Abstract $renderTemplateObject) { $limit = XenForo_Application::getOptions()->get('xengalleryShowTopContributors', 'limit'); if (!empty($widget['options']['limit'])) { $limit = $widget['options']['limit']; } /** @var XenGallery_Model_Album $albumModel */ $albumModel = WidgetFramework_Core::getInstance()->getModelFromCache('XenGallery_Model_Album'); /** @var XenGallery_Model_Media $mediaModel */ $mediaModel = WidgetFramework_Core::getInstance()->getModelFromCache('XenGallery_Model_Media'); $visitor = XenForo_Visitor::getInstance(); $conditions = array('deleted' => false, 'privacyUserId' => $visitor->getUserId(), 'viewAlbums' => XenForo_Permission::hasPermission($visitor->getPermissions(), 'xengallery', 'viewAlbums'), 'viewCategoryIds' => $mediaModel->getViewableCategoriesForVisitor($visitor->toArray()), 'album_media_count' => '> 0', 'is_banned' => 0); $fetchOptions = array('order' => 'new', 'orderDirection' => 'desc', 'limit' => $limit, 'join' => XenGallery_Model_Album::FETCH_PRIVACY | XenGallery_Model_Album::FETCH_USER); $albums = $albumModel->getAlbums($conditions, $fetchOptions); $albums = $albumModel->prepareAlbums($albums); $renderTemplateObject->setParam('albums', $albums); return $renderTemplateObject->render(); }
protected function _getResources(array $widget, $positionCode, array $params, XenForo_Template_Abstract $renderTemplateObject) { $core = WidgetFramework_Core::getInstance(); /** @var XenResource_Model_Category $categoryModel */ $categoryModel = $core->getModelFromCache('XenResource_Model_Category'); /** @var XenResource_Model_Resource $resourceModel */ $resourceModel = $core->getModelFromCache('XenResource_Model_Resource'); $visitor = XenForo_Visitor::getInstance(); $categoryIds = array(); $resources = array(); $viewableCategories = $categoryModel->getViewableCategories(); foreach ($viewableCategories as $category) { if (!empty($widget['options']['categories'])) { if (in_array($category['resource_category_id'], $widget['options']['categories'])) { // configured with some category id // only include those that were selected $categoryIds[] = $category['resource_category_id']; } } else { $categoryIds[] = $category['resource_category_id']; } } if (!empty($categoryIds)) { $conditions = array('deleted' => $visitor->isSuperAdmin(), 'moderated' => $visitor->isSuperAdmin(), 'resource_category_id' => $categoryIds); $fetchOptions = array('limit' => $widget['options']['limit'], 'join' => XenResource_Model_Resource::FETCH_USER | XenResource_Model_Resource::FETCH_CATEGORY | XenResource_Model_Resource::FETCH_DESCRIPTION); switch ($widget['options']['type']) { case 'latest_update': $resources = $resourceModel->getResources($conditions, array_merge($fetchOptions, array('order' => 'last_update', 'direction' => 'desc'))); break; case 'highest_rating': $resources = $resourceModel->getResources($conditions, array_merge($fetchOptions, array('order' => 'rating_weighted', 'direction' => 'desc'))); break; case 'most_downloaded': $resources = $resourceModel->getResources($conditions, array_merge($fetchOptions, array('order' => 'download_count', 'direction' => 'desc'))); break; case 'new': default: $resources = $resourceModel->getResources($conditions, array_merge($fetchOptions, array('order' => 'resource_date', 'direction' => 'desc'))); break; } $resources = $resourceModel->prepareResources($resources); } return $resources; }
public function rebuild($position = 0, array &$options = array(), &$detailedMessage = '') { $options['batch'] = max(1, isset($options['batch']) ? $options['batch'] : 100); /* @var $tagModel Tinhte_XenTag_Model_Tag */ $tagModel = XenForo_Model::create('Tinhte_XenTag_Model_Tag'); $tags = $tagModel->getAllTag(array(), array('limit' => $options['batch'], 'offset' => $position)); if (empty($tags)) { if (class_exists('WidgetFramework_Core')) { WidgetFramework_Core::clearCachedWidgetByClass('Tinhte_XenTag_WidgetRenderer_Cloud'); } return true; } foreach ($tags as $tag) { $position = $tag['tag_id']; $tagModel->updateTag($tag['tag_id']); } $detailedMessage = XenForo_Locale::numberFormat($position); return $position; }
protected function _render(array $widget, $positionCode, array $params, XenForo_Template_Abstract $renderTemplateObject) { $core = WidgetFramework_Core::getInstance(); /** @var XenForo_Model_User $userModel */ $userModel = $core->getModelFromCache('XenForo_Model_User'); /** @var XenForo_Model_UserProfile $userProfileModel */ $userProfileModel = $core->getModelFromCache('XenForo_Model_UserProfile'); $todayStart = XenForo_Locale::getDayStartTimestamps(); $todayStart = $todayStart['today']; $day = XenForo_Locale::getFormattedDate($todayStart, 'd'); $month = XenForo_Locale::getFormattedDate($todayStart, 'm'); $conditions = array(WidgetFramework_XenForo_Model_User::CONDITIONS_DOB => array('d' => $day, 'm' => $month), 'user_state' => 'valid', 'is_banned' => false); $fetchOptions = array('order' => 'username', 'join' => XenForo_Model_User::FETCH_USER_PROFILE + XenForo_Model_User::FETCH_USER_OPTION); if (!empty($widget['options']['limit'])) { $fetchOptions['limit'] = $widget['options']['limit']; } if (!empty($widget['options']['avatar_only'])) { $conditions[WidgetFramework_XenForo_Model_User::CONDITIONS_HAS_AVATAR] = true; } $users = $userModel->getUsers($conditions, $fetchOptions); foreach (array_keys($users) as $userId) { $user =& $users[$userId]; if (!empty($widget['options']['whitelist_user_groups'])) { // check for whitelist user groups if (!$userModel->isMemberOfUserGroup($user, $widget['options']['whitelist_user_groups'])) { unset($users[$userId]); continue; } } if (!empty($widget['options']['blacklist_user_groups'])) { // check for blacklist user groups if ($userModel->isMemberOfUserGroup($user, $widget['options']['blacklist_user_groups'])) { unset($users[$userId]); continue; } } // we can call XenForo_Model_User::prepareUserCard instead $user['age'] = $userProfileModel->getUserAge($user); } $renderTemplateObject->setParam('users', array_values($users)); return $renderTemplateObject->render(); }
/** * Save input data either to portal table or WF table depending on whether it is content or sidebar targeted. * @param $widgetId * @param $dwInput * @param $options * @param $input * @return bool */ public function saveWidget($widgetId, $dwInput, $options, $input) { $flagGoBackToEdit = false; $dw = XenForo_DataWriter::create('WidgetFramework_DataWriter_Widget'); if ($widgetId) { $dw->setExistingData($widgetId); } $dw->bulkSet($dwInput); if ($options == $dwInput['class']) { // process options now $renderer = WidgetFramework_Core::getRenderer($dwInput['class']); $widgetOptions = $renderer->parseOptionsInput($input, $dw->getMergedData()); $dw->set('options', $widgetOptions); } else { // skip options, mark to redirect later $flagGoBackToEdit = true; } $dw->save(); return $flagGoBackToEdit; }
protected function _render(array $widget, $positionCode, array $params, XenForo_Template_Abstract $renderTemplateObject) { $core = WidgetFramework_Core::getInstance(); $threadModel = $core->getModelFromCache('XenForo_Model_Thread'); $visitor = XenForo_Visitor::getInstance(); // Get data for each param. $new = $this->_getDataForThisVar(); $recent = $this->_getDataForThisVar(); $popular = $this->_getDataForThisVar(); $mostReplied = $this->_getDataForThisVar(); $mostLiked = $this->_getDataForThisVar(); $polls = $this->_getDataForThisVar(); $renderTemplateObject->setParam('new', $new); $renderTemplateObject->setParam('recent', $recent); $renderTemplateObject->setParam('popular', $popular); $renderTemplateObject->setParam('mostReplied', $mostReplied); $renderTemplateObject->setParam('mostLiked', $mostLiked); $renderTemplateObject->setParam('polls', $polls); return $renderTemplateObject->render(); }