Exemplo n.º 1
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);
 }
 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;
 }
Exemplo n.º 3
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();
 }
Exemplo n.º 4
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();
 }
Exemplo n.º 5
0
 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);
 }
Exemplo n.º 6
0
 protected function _postDelete()
 {
     if (!$this->getExtraData(self::EXTRA_DATA_SKIP_REBUILD)) {
         $this->_getWidgetModel()->buildCache();
     }
     WidgetFramework_Core::clearCachedWidgetById($this->get('widget_id'));
 }
Exemplo n.º 7
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();
 }
Exemplo n.º 8
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();
 }
Exemplo n.º 9
0
 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;
     }
 }
Exemplo n.º 10
0
 public function prepareParams()
 {
     $widgets = array();
     foreach ($this->_params['widgets'] as $widget) {
         $widgets[] = $widget;
     }
     $core = WidgetFramework_Core::getInstance();
     $core->addWidgets($widgets);
     parent::prepareParams();
 }
Exemplo n.º 11
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 _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;
 }
Exemplo n.º 14
0
 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();
    }
Exemplo n.º 16
0
 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();
 }
Exemplo n.º 17
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();
 }
Exemplo n.º 18
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();
 }
Exemplo n.º 19
0
 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;
 }
Exemplo n.º 20
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();
 }
Exemplo n.º 21
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();
 }
Exemplo n.º 22
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();
    }
Exemplo n.º 23
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);
 }
Exemplo n.º 24
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();
 }
Exemplo n.º 25
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();
 }
Exemplo n.º 26
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;
 }
Exemplo n.º 27
0
 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;
 }
Exemplo n.º 28
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();
 }
Exemplo n.º 29
0
 /**
  * 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;
 }
Exemplo n.º 30
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();
 }