Вход Регистрация
Файл: library/XenForo/NewsFeedHandler/Abstract.php
Строк: 224
<?php

// TODO: need to be able to limit news feed items to specific items for specific users or maybe usergroups (don't show posts from 'James', for example)

/**
 * Class to handle turning raw news feed events into renderable items
 *
 * @author kier
 *
 */
abstract class XenForo_NewsFeedHandler_Abstract
{
    
/**
    * Factory method to get the named news feed handler. The class must exist and be autoloadable
    * or an exception will be thrown.
    *
    * @param string Class to load
    *
    * @return XenForo_NewsFeedHandler_Abstract
    */
    
public static function create($class)
    {
        if (
XenForo_Application::autoload($class))
        {
            
$class XenForo_Application::resolveDynamicClass($class);
            
$obj = new $class();
            if (
$obj instanceof XenForo_NewsFeedHandler_Abstract)
            {
                return 
$obj;
            }
        }

        throw new 
XenForo_Exception("Invalid news feed handler '$class' specified");
    }

    
/**
     * Fetches the content required by news feed items.
     * Designed to be overridden by child classes using $model->getContentByIds($contentIds) or similar
     *
     * @param array $contentIds
     * @param XenForo_Model_NewsFeed $model
     * @param array $viewingUser Information about the viewing user (keys: user_id, permission_combination_id, permissions)
     *
     * @return array
     */
    
abstract public function getContentByIds(array $contentIds$model, array $viewingUser);

    
/**
     * Determines if the given news feed item is viewable.
     *
     * @param array $item
     * @param mixed $content
     * @param array $viewingUser
     *
     * @return boolean
     */
    
public function canViewNewsFeedItem(array $item$content, array $viewingUser)
    {
        return 
true;
    }

    
/**
     * Prepares a news feed item for rendering.
     * Designed to be overriden by extended classes, while retaining the call to _prepareNewsFeedItem.
     *
     * @param array $newsFeedItem
     * @param array $viewingUser Information about the viewing user (keys: user_id, permission_combination_id, permissions)
     *
     * @return array
     */
    
public function prepareNewsFeedItem(array $item, array $viewingUser)
    {
        
$methodName '_prepare' ucfirst($item['action']);

        
$item $this->_prepareNewsFeedItemBeforeAction($item$item['content'], $viewingUser);

        if (
method_exists($this$methodName))
        {
            
$item call_user_func(array($this$methodName), $item$viewingUser);
        }

        return 
$this->_prepareNewsFeedItemAfterAction($item$item['content'], $viewingUser);
    }

    
/**
     * Performs basic and generic preparation for news feed items, BEFORE content-type/action specific manipulation
     * Designed to be overridden by child classes
     *
     * @param array $newsFeedItem
     * @param mixed $newsFeedItem['content']
     * @param array $viewingUser Information about the viewing user (keys: user_id, permission_combination_id, permissions)
     *
     * @return array
     */
    
protected function _prepareNewsFeedItemBeforeAction(array $item$content, array $viewingUser)
    {
        return 
$item;
    }

    
/**
     * Performs basic and generic preparation for news feed items, AFTER content-type/action specific manipulation
     * Designed to be overridden by child classes
     *
     * @param array $newsFeedItem
     * @param mixed $newsFeedItem['content']
     * @param array $viewingUser Information about the viewing user (keys: user_id, permission_combination_id, permissions)
     *
     * @return array
     */
    
protected function _prepareNewsFeedItemAfterAction(array $item$content, array $viewingUser)
    {
        return 
$item;
    }


    
/**
     * Renders an item content template
     *
     * @param array $item
     * @param XenForo_View $view
     *
     * @return XenForo_Template_Public
     */
    
public function renderHtml(array $itemXenForo_View $view)
    {
        
$item['templateTitle'] = $this->_getDefaultTemplateTitle($item['content_type'], $item['action']);

        
$methodName '_renderHtml' ucfirst($item['action']);

        if (
method_exists($this$methodName))
        {
            return 
call_user_func(array($this$methodName), $item$view);
        }

        return 
$view->createTemplateObject($item['templateTitle'], $item);
    }

    
/**
     * Returns a template title in the form 'news_feed_item_{contentType}_{action}'
     *
     * @param string $contentType
     * @param string $action
     *
     * @return string
     */
    
protected function _getDefaultTemplateTitle($contentType$action)
    {
        return 
'news_feed_item_' $contentType '_' $action;
    }
}
Онлайн: 2
Реклама