예제 #1
0
 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();
 }
예제 #2
0
 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 _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;
 }
예제 #4
0
 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);
 }
예제 #5
0
 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();
 }
예제 #6
0
 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();
 }
예제 #7
0
 public function prepareParams()
 {
     $widgets = array();
     foreach ($this->_params['widgets'] as $widget) {
         $widgets[] = $widget;
     }
     $core = WidgetFramework_Core::getInstance();
     $core->addWidgets($widgets);
     parent::prepareParams();
 }
예제 #8
0
 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 _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;
 }
 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 _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();
    }
예제 #12
0
파일: Stats.php 프로젝트: Sywooch/forums
 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();
 }
예제 #13
0
 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();
 }
예제 #14
0
 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();
 }
예제 #15
0
 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 _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;
 }
예제 #17
0
 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();
 }
예제 #18
0
    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();
    }
예제 #19
0
 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();
 }
예제 #20
0
 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);
 }
예제 #21
0
 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();
 }
예제 #22
0
 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;
 }
예제 #23
0
 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();
 }
예제 #24
0
 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();
 }
예제 #25
0
 protected function _render(array $widget, $positionCode, array $params, XenForo_Template_Abstract $renderTemplateObject)
 {
     if (empty($widget['options']['url'])) {
         return '';
     }
     if (empty($widget['options']['limit'])) {
         $widget['options']['limit'] = 5;
     }
     $core = WidgetFramework_Core::getInstance();
     /** @var XenForo_Model_Feed $feedModel */
     $feedModel = $core->getModelFromCache('XenForo_Model_Feed');
     $feedUrl = $widget['options']['url'];
     $feedData = $feedModel->getFeedData($feedUrl);
     $feedConfig = array();
     $feedConfig['baseUrl'] = $feedModel->getFeedBaseUrl($feedUrl);
     $entries = array();
     if (!empty($feedData['entries'])) {
         foreach ($feedData['entries'] as $entryRaw) {
             $entry = array();
             $entryRaw = $feedModel->prepareFeedEntry($entryRaw, $feedData, $feedConfig);
             $entry['link'] = $entryRaw['link'];
             $entry['author'] = $entryRaw['author'];
             $entry['title'] = $entryRaw['title'];
             $entry['content'] = $entryRaw['content'];
             if (defined('BDIMAGE_IS_WORKING')) {
                 // outsource the image processing + handling to [bd] Image
                 $entry['bdImage_image'] = call_user_func(array('bdImage_Integration', 'getBbCodeImage'), $entryRaw['content']);
             } else {
                 // TODO: support other method?
             }
             $entries[] = $entry;
             if (count($entries) >= $widget['options']['limit']) {
                 // we have got enough entries, stop here
                 break;
             }
         }
     }
     $renderTemplateObject->setParam('entries', $entries);
     return $renderTemplateObject->render();
 }
예제 #26
0
 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');
     }
     $tags = $tagModel->Tinhte_XenTag_getTrendingTags($cutoff, $limit);
     $tagsLevels = $tagModel->getTagCloudLevels($tags);
     $template->setParam('tags', $tags);
     $template->setParam('tagsLevels', $tagsLevels);
     return $template->render();
 }
 public function extraPrepareTitle(array $widget)
 {
     if (!empty($widget['title'])) {
         if (is_string($widget['title']) && preg_match('/^{xen:phrase ([^}]+)}$/i', $widget['title'], $matches)) {
             // {xen:phrase title} as widget title, use the specified phrase
             if (XenForo_Application::debugMode()) {
                 // this kind of usage is deprecated, log server error entry if debug mode is on
                 XenForo_Error::logError(sprintf('Widget title support for {xen:phrase title} has been deprecated. ' . 'Please update widget #%d.', $widget['widget_id']));
             }
             return new XenForo_Phrase($matches[1]);
         } else {
             if (!empty($widget['options'][WidgetFramework_DataWriter_Widget::WIDGET_OPTION_ADDON_VERSION_ID]) && $widget['widget_id'] > 0) {
                 // since 2.6.0
                 // use self-managed phrase for widget title
                 /** @var WidgetFramework_Model_Widget $widgetModel */
                 $widgetModel = WidgetFramework_Core::getInstance()->getModelFromCache('WidgetFramework_Model_Widget');
                 return new XenForo_Phrase($widgetModel->getWidgetTitlePhrase($widget['widget_id']));
             } else {
                 // legacy support
                 return $widget['title'];
             }
         }
     } else {
         return $this->getName();
     }
 }
예제 #28
0
 protected function _prepareThreads(array $widget, $positionCode, array $params, XenForo_Template_Abstract $renderTemplateObject, array &$threads)
 {
     $core = WidgetFramework_Core::getInstance();
     $layoutNeedPost = $renderTemplateObject->getParam('layoutNeedPost');
     /** @var WidgetFramework_XenForo_Model_Thread $threadModel */
     $threadModel = $core->getModelFromCache('XenForo_Model_Thread');
     /** @var XenForo_Model_Node $nodeModel */
     $nodeModel = $core->getModelFromCache('XenForo_Model_Node');
     /** @var XenForo_Model_Forum $forumModel */
     $forumModel = $core->getModelFromCache('XenForo_Model_Forum');
     /** @var XenForo_Model_User $userModel */
     $userModel = $core->getModelFromCache('XenForo_Model_User');
     /** @var XenForo_Model_Post $postModel */
     $postModel = $core->getModelFromCache('XenForo_Model_Post');
     $nodePermissions = $nodeModel->getNodePermissionsForPermissionCombination(empty($widget['options']['as_guest']) ? null : 1);
     $viewObj = self::getViewObject($params, $renderTemplateObject);
     if ($layoutNeedPost and !empty($viewObj)) {
         $bbCodeFormatter = XenForo_BbCode_Formatter_Base::create('Base', array('view' => $viewObj));
         if (XenForo_Application::$versionId < 1020000) {
             // XenForo 1.1.x
             $bbCodeParser = new XenForo_BbCode_Parser($bbCodeFormatter);
         } else {
             // XenForo 1.2.x
             $bbCodeParser = XenForo_BbCode_Parser::create($bbCodeFormatter);
         }
         $bbCodeOptions = array('states' => array(), 'contentType' => 'post', 'contentIdKey' => 'post_id');
         $postsWithAttachment = array();
         foreach (array_keys($threads) as $threadId) {
             $threadRef =& $threads[$threadId];
             if (empty($threadRef['attach_count'])) {
                 continue;
             }
             if (!empty($threadRef['fetched_last_post'])) {
                 $postsWithAttachment[$threadRef['last_post_id']] = array('post_id' => $threadRef['last_post_id'], 'thread_id' => $threadId, 'attach_count' => $threadRef['attach_count']);
             } else {
                 $postsWithAttachment[$threadRef['first_post_id']] = array('post_id' => $threadRef['first_post_id'], 'thread_id' => $threadId, 'attach_count' => $threadRef['attach_count']);
             }
         }
         if (!empty($postsWithAttachment)) {
             $postsWithAttachment = $postModel->getAndMergeAttachmentsIntoPosts($postsWithAttachment);
             foreach ($postsWithAttachment as $postWithAttachment) {
                 if (empty($postWithAttachment['attachments'])) {
                     continue;
                 }
                 if (empty($threads[$postWithAttachment['thread_id']])) {
                     continue;
                 }
                 $threadRef =& $threads[$postWithAttachment['thread_id']];
                 $threadRef['attachments'] = $postWithAttachment['attachments'];
             }
         }
     }
     $threadForumIds = array();
     foreach ($threads as $thread) {
         $threadForumIds[] = $thread['node_id'];
     }
     $threadForums = $forumModel->getForumsByIds($threadForumIds);
     $viewingUser = empty($widget['options']['as_guest']) ? null : $userModel->getVisitingGuestUser();
     foreach (array_keys($threads) as $threadId) {
         $threadRef =& $threads[$threadId];
         if (empty($nodePermissions[$threadRef['node_id']])) {
             unset($threads[$threadId]);
             continue;
         }
         $threadPermissionsRef =& $nodePermissions[$threadRef['node_id']];
         if (empty($threadForums[$threadRef['node_id']])) {
             unset($threads[$threadId]);
             continue;
         }
         $threadForumRef =& $threadForums[$threadRef['node_id']];
         if ($threadModel->isRedirect($threadRef)) {
             unset($threads[$threadId]);
             continue;
         }
         if (!$threadModel->canViewThread($threadRef, $threadForumRef, $null, $threadPermissionsRef, $viewingUser)) {
             unset($threads[$threadId]);
             continue;
         }
         if (!empty($bbCodeParser) and !empty($bbCodeOptions)) {
             $threadBbCodeOptions = $bbCodeOptions;
             $threadBbCodeOptions['states']['viewAttachments'] = $threadModel->canViewAttachmentsInThread($threadRef, $threadForumRef, $null, $threadPermissionsRef, $viewingUser);
             $threadRef['messageHtml'] = XenForo_ViewPublic_Helper_Message::getBbCodeWrapper($threadRef, $bbCodeParser, $threadBbCodeOptions);
         }
         $threadRef = $threadModel->WidgetFramework_prepareThreadForRendererThreads($threadRef, $threadForumRef, $threadPermissionsRef, $viewingUser);
     }
 }
예제 #29
0
파일: Listener.php 프로젝트: Sywooch/forums
 public static function front_controller_post_view(XenForo_FrontController $fc, &$output)
 {
     if (defined('WIDGET_FRAMEWORK_LOADED')) {
         WidgetFramework_Core::getInstance()->shutdown();
     }
 }
예제 #30
0
 /**
  * Renders the widget.
  * Add variables to the template obj: $renderTemplateObject->setParam('users', $users);
  * @param array $widget
  * @param string $positionCode
  * @param array $params
  * @param XenForo_Template_Abstract $renderTemplateObject
  * @return string
  */
 protected function _render(array $widget, $positionCode, array $params, XenForo_Template_Abstract $renderTemplateObject)
 {
     //        $widget['passObject']=true;
     //        return parent::_render( $widget, $positionCode, $params, $renderTemplateObject );
     $core = WidgetFramework_Core::getInstance();
     $threadModel = $core->getModelFromCache('XenForo_Model_Thread');
     $visitor = XenForo_Visitor::getInstance();
     $forumIds = $this->_helperGetForumIdsFromOption($widget['options']['forums'], $params, empty($widget['options']['as_guest']) ? false : true);
     $conditions = array('node_id' => $forumIds, 'deleted' => $visitor->isSuperAdmin() and empty($widget['options']['as_guest']), 'moderated' => $visitor->isSuperAdmin() and empty($widget['options']['as_guest']));
     $fetchOptions = array('limit' => $widget['options']['limit'], 'join' => XenForo_Model_Thread::FETCH_AVATAR | XenForo_Model_Thread::FETCH_FIRSTPOST);
     // process prefix
     // since 1.3.4
     if (!empty($widget['options']['prefixes'])) {
         $conditions['prefix_id'] = $widget['options']['prefixes'];
     }
     if (in_array($widget['options']['type'], array('new', 'all'))) {
         $new = $threadModel->getThreads($conditions, array_merge($fetchOptions, array('order' => 'post_date', 'orderDirection' => 'desc')));
     } else {
         $new = array();
     }
     if (in_array($widget['options']['type'], array('recent', 'all'))) {
         $recent = $threadModel->getThreads($conditions, array_merge($fetchOptions, array('order' => 'last_post_date', 'orderDirection' => 'desc', 'last_post_join' => XenForo_Model_Thread::FETCH_AVATAR)));
         foreach ($recent as &$thread) {
             $thread['user_id'] = $thread['last_post_user_id'];
             $thread['username'] = $thread['last_post_username'];
         }
     } else {
         $recent = array();
     }
     if (in_array($widget['options']['type'], array('popular', 'all'))) {
         $popular = $threadModel->getThreads(array_merge($conditions, array('post_date' => array('>', XenForo_Application::$time - $widget['options']['cutoff'] * 86400))), array_merge($fetchOptions, array('order' => 'view_count', 'orderDirection' => 'desc')));
     } else {
         $popular = array();
     }
     if (in_array($widget['options']['type'], array('most_replied', 'all'))) {
         $mostReplied = $threadModel->getThreads(array_merge($conditions, array('post_date' => array('>', XenForo_Application::$time - $widget['options']['cutoff'] * 86400))), array_merge($fetchOptions, array('order' => 'reply_count', 'orderDirection' => 'desc')));
         foreach (array_keys($mostReplied) as $postId) {
             if ($mostReplied[$postId]['reply_count'] == 0) {
                 // remove threads with zero reply_count
                 unset($mostReplied[$postId]);
             }
         }
     } else {
         $mostReplied = array();
     }
     if (in_array($widget['options']['type'], array('most_liked', 'all'))) {
         $mostLiked = $threadModel->getThreads(array_merge($conditions, array('post_date' => array('>', XenForo_Application::$time - $widget['options']['cutoff'] * 86400))), array_merge($fetchOptions, array('order' => 'first_post_likes', 'orderDirection' => 'desc')));
         foreach (array_keys($mostLiked) as $postId) {
             if ($mostLiked[$postId]['first_post_likes'] == 0) {
                 // remove threads with zero first_post_likes
                 unset($mostLiked[$postId]);
             }
         }
     } else {
         $mostLiked = array();
     }
     if (in_array($widget['options']['type'], array('polls', 'all'))) {
         $polls = $threadModel->getThreads(array_merge($conditions, array('discussion_type' => 'poll')), array_merge($fetchOptions, array('order' => 'post_date', 'orderDirection' => 'desc')));
     } else {
         $polls = array();
     }
     $renderTemplateObject->setParam('new', WidgetPortal_Helper_Post::helperPreparePostDataForDisplay($new));
     $renderTemplateObject->setParam('recent', WidgetPortal_Helper_Post::helperPreparePostDataForDisplay($recent));
     $renderTemplateObject->setParam('popular', WidgetPortal_Helper_Post::helperPreparePostDataForDisplay($popular));
     $renderTemplateObject->setParam('mostReplied', WidgetPortal_Helper_Post::helperPreparePostDataForDisplay($mostReplied));
     $renderTemplateObject->setParam('mostLiked', WidgetPortal_Helper_Post::helperPreparePostDataForDisplay($mostLiked));
     $renderTemplateObject->setParam('polls', WidgetPortal_Helper_Post::helperPreparePostDataForDisplay($polls));
     return $renderTemplateObject->render();
 }