Вход Регистрация
Файл: plugins/cnews/classes/driver.php
Строк: 225
<?php

abstract class CNEWS_CLASS_Driver
{
    protected 
$params = array(), $defaultParams = array();
    protected 
$actionList = array();
    protected 
$count false;

    protected 
$context = array();
    protected 
$formats null;
    protected 
$actionIdList = array();

    
/**
     *
     * @var CNEWS_BOL_Service
     */
    
protected $service;

    public function 
__construct()
    {
        
$this->service CNEWS_BOL_Service::getInstance();

        
$this->defaultParams = array(
            
'offset' => 0,
            
'length' => false,
            
'displayCount' => 20,
            
"formats" => null
        
);
    }

    public function 
setup$params )
    {
        
$this->params array_merge($this->defaultParams$params);

        
$this->count $this->params['length'];
        
$this->context = empty($params['context']) ? array() : $params['context'];
    }
    
    public function 
setFormats$formats )
    {
        
$this->params['formats'] = $formats;
        
$this->params['formats'][] = CNEWS_CLASS_FormatManager::FORMAT_EMPTY;
    }

    public function 
moveCursor$to null )
    {
        
$this->params['offset'] = empty($to) ? $this->params['offset'] + $this->params['displayCount'] : $to;
    }

    public function 
getState()
    {
        
$this->params['length'] = $this->count;

        return array(
            
'class' => get_class($this),
            
'params' => $this->params
        
);
    }

    public function 
getActionList()
    {
        
$actionList $this->findActionList($this->params);

        if ( empty(
$actionList) )
        {
            
$this->count 0;

            return array();
        }

        
$this->count $this->getActionCount();

        foreach ( 
$actionList as $actionDto )
        {
            
$this->actionIdList[$actionDto->entityType ':' $actionDto->entityId] = $actionDto->id;
        }

        
$activityList $this->findActivityList($this->paramsarray_values($this->actionIdList));

        
$actionActivityList = array();
        foreach ( 
$activityList as $activity )
        {
            
$actionActivityList[$activity->actionId][$activity->id] = $activity;
        }

        
$createActivityIdList = array();
        
        foreach ( 
$actionList as $actionDto )
        {
            
$aList = empty($actionActivityList[$actionDto->id]) 
                    ? array() 
                    : 
$actionActivityList[$actionDto->id];
            
            
/* @var $actionDto CNEWS_BOL_Action */
           
$action $this->makeAction($actionDto$aList);

           if ( 
$action !== null )
           {
                
$this->actionList[$actionDto->id] = $action;
                
                
$createActivity $action->getCreateActivity();
                
                if ( !empty(
$createActivity) )
                {
                   
$createActivityIdList[] = $createActivity->id;
                }
           }
        }

        
$feedList $this->service->findFeedListByActivityids($createActivityIdList);
        
        foreach ( 
$this->actionList as $action )
        {
            
/* @var $actionDto CNEWS_BOL_Action */
            
$createActivity $action->getCreateActivity();
                
            if ( !empty(
$createActivity) && isset($feedList[$createActivity->id]) )
            {
               
$action->setFeedList($feedList[$createActivity->id]);
            }
        }
        
        return 
$this->actionList;
    }

    
/**
     *
     * @param int $actionId
     * @return CNEWS_CLASS_Action
     */
    
public function getActionById$actionId )
    {
        if ( empty(
$this->actionList[$actionId]) )
        {
            
$action CNEWS_BOL_ActionDao::getInstance()->findActionById($actionId);

            if ( 
$action === null )
            {
                return 
null;
            }

            
$activityList $this->findActivityList($this->params, array($actionId));
            
$action $this->makeAction($action$activityList);

            if ( 
$action === null )
            {
                return 
null;
            }

            
$actionKey $action->getEntity()->type .':'$action->getEntity()->id;

            
$this->actionList[$action->getId()] = $action;
            
$this->actionIdList[$actionKey] = $action->getId();
        }

        return 
$this->actionList[$actionId];
    }

    public function 
getAction$entityType$entityId )
    {
        
$actionKey $entityType .':'$entityId;

        if ( empty(
$this->actionIdList[$actionKey]) )
        {
            
$action CNEWS_BOL_ActionDao::getInstance()->findAction($entityType$entityId);

            if ( 
$action === null )
            {
                return 
null;
            }

            
$activityList $this->findActivityList($this->params, array($action->id));
            
$action $this->makeAction($action$activityList);

            if ( 
$action === null )
            {
                return 
null;
            }

            
$this->actionList[$action->getId()] = $action;
            
$this->actionIdList[$actionKey] = $action->getId();
        }

        return 
$this->actionList[$this->actionIdList[$actionKey]];
    }

    public function 
getActionCount()
    {
        if ( 
$this->count === false )
        {
            return 
$this->findActionCount($this->params);
        }

        return 
$this->count;
    }

    abstract protected function 
findActionList$params );
    abstract protected function 
findActionCount$params );
    abstract protected function 
findActivityList$params$actionIdList );

    
/**
     *
     * @param CNEWS_BOL_Action $dto
     * @return CNEWS_CLASS_Action
     */
    
private function makeAction$actionDto$activityList )
    {
        if ( empty(
$activityList) )
        {
            return 
null;
        }
        
        
$action = new CNEWS_CLASS_Action();
        
$action->setId($actionDto->id);
        
$action->setDatajson_decode($actionDto->datatrue) );
        
$action->setEntity($actionDto->entityType$actionDto->entityId);
        
$action->setPluginKey($actionDto->pluginKey);
        
$action->setFormat($actionDto->format);

        
$action->setActivityList($activityList);

        return 
$action;
    }
}
Онлайн: 0
Реклама