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

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

        throw new 
XenForo_Exception("Invalid user alert handler '$class' specified");
    }

    
/**
     * Fetches the content required by alerts.
     * Designed to be overridden by child classes using $model->getContentByIds($contentIds) or similar
     *
     * @param array $contentIds
     * @param XenForo_Model_Alert $model Alert model invoking this
     * @param integer $userId User ID the alerts are for
     * @param array $viewingUser Information about the viewing user (keys: user_id, permission_combination_id, permissions)
     *
     * @return array
     */
    
abstract public function getContentByIds(array $contentIds$model$userId, array $viewingUser);

    
/**
     * Determines if the given alert is viewable.
     *
     * @param array $alert
     * @param mixed $content
     * @param array $viewingUser Information about the viewing user (keys: user_id, permission_combination_id, permissions)
     *
     * @return boolean
     */
    
public function canViewAlert(array $alert$content, array $viewingUser)
    {
        return 
true;
    }

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

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

        if (isset(
$item['content']['title']))
        {
            
$item['content']['title'] = XenForo_Helper_String::censorString($item['content']['title']);
        }

        
$item['extra'] = @unserialize($item['extra_data']);

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

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

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

    
/**
     * Performs basic and generic preparation for alerts, AFTER content-type/action specific manipulation
     * Designed to be overridden by child classes
     *
     * @param array $alert
     * @param mixed $alert['content']
     * @param array $viewingUser Information about the viewing user (keys: user_id, permission_combination_id, permissions)
     *
     * @return array
     */
    
protected function _prepareAlertAfterAction(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 'alert_{contentType}_{action}'
     *
     * @param string $contentType
     * @param string $action
     *
     * @return string
     */
    
protected function _getDefaultTemplateTitle($contentType$action)
    {
        return 
'alert_' $contentType '_' $action;
    }
}
Онлайн: 1
Реклама