Вход Регистрация
Файл: base-sys/base/components/content_presenter.php
Строк: 338
<?php

class BASE_CMP_ContentPresenter extends PEEP_Component
{
    private static 
$presenters = array();

    protected 
$content;
    
    public function 
__construct$content )
    {
        
parent::__construct();
        
        
$this->content = empty($content) ? array() : $content;
    }
    
    private function 
detectFormat$content )
    {
        
$formats = array(
            
"video" => array("html"),
            
"image_content" => array("image""title""description"),
            
"image" => array("image"),
            
"content" => array("title""description"),
            
"text" => array("text")
        );
        
        foreach ( 
$formats as $format => $fields )
        {
            if ( 
$this->testArray($content$fields) )
            {
                return 
$format;
            }
        }
        
        return 
"empty";
    }
        
    public function 
getPresenters()
    {
        if ( !empty(
self::$presenters) )
        {
            return 
self::$presenters;
        }
        
        
$presenters = array(
            
"video"         => "BASE_ContentPresenterVideo",
            
"image"         => "BASE_ContentPresenterImage",
            
"image_content" => "BASE_ContentPresenterImageContent",
            
"content"       => "BASE_ContentPresenterContent",
            
"text"          => "BASE_ContentPresenterText"
        
);
        
        
$event = new BASE_CLASS_EventCollector("content.collect_presenters");
        
PEEP::getEventManager()->trigger($event);
        
        foreach ( 
$event->getData() as $format )
        {
            
$presenters[$format["name"]] = $format["class"];
        }
        
        
self::$presenters $presenters;
        
        return 
self::$presenters;
    }
    
    public function 
render() 
    {
        
$presenters $this->getPresenters();
        
$typeInfo $this->content["typeInfo"];
        
        if ( !empty(
$this->content["displayFormat"]) )
        {
            
$typeInfo["displayFormat"] = $this->content["displayFormat"];
        }
        
        
$typeInfo["displayFormat"] = empty($typeInfo["displayFormat"]) 
                ? 
$this->detectFormat($this->content)
                : 
$typeInfo["displayFormat"];
        
        
$presenterClass = empty($presenters[$typeInfo["displayFormat"]])
                ? 
"BASE_ContentPresenter"
                
$presenters[$typeInfo["displayFormat"]];
        
        
$contentDefaults BOL_ContentService::getInstance()->_contentDataDefaults();
        
$tplContent array_merge($contentDefaults$this->content);
        
        
$presenter = new $presenterClass($tplContent$typeInfo["displayFormat"]);
        
        return 
$presenter->render();
    }
    
    private function 
testArray$array$fields )
    {
        foreach ( 
$array as &$value )
        {
            
$value is_array($value) ? array_filter($value) : $value;
            
$value is_string($value) ? trim($value) : $value;
        }
        
        return !
array_diff($fieldsarray_keys(array_filter($array)));
    }
}



// Presenters

class BASE_ContentPresenter extends PEEP_Component
{
    protected 
$content = array();
    protected 
$displayFormat;
    protected 
$uniqId;

    public function 
__construct$content$displayFormat 
    {
        
parent::__construct();
        
        
$this->setTemplate(PEEP::getPluginManager()->getPlugin("base")
                ->
getCmpViewDir() . "content_presenter.html");
        
        
$this->content $content;
        
$this->displayFormat $displayFormat;
        
        
$this->assign("displayFormat"$displayFormat);
        
$this->uniqId uniqid("cp-");
    }
    
    protected function 
processImage()
    {
        
$imageSet = & $this->content["image"];
        if ( 
is_string($imageSet) )
        {
            
$imageSet = array(
                
"fullsize" => $imageSet
            
);
        }
        
        
// Processing image data to ensure all image types are defined
        
$contentDefaults BOL_ContentService::getInstance()->_contentDataDefaults();
        
$imageTypes array_keys($contentDefaults["image"]);
        
$imageTypesCount count($imageTypes);
        
$filledType null;

        for ( 
$typeIndex 0$typeIndex $imageTypesCount 2$typeIndex++ ) 
        {
            
$imageType $imageTypes[$typeIndex >= $imageTypesCount 
                    
$imageTypesCount - ($typeIndex $imageTypesCount) - 
                    
$typeIndex];

            
$filledType = empty($imageSet[$imageType]) ? $filledType $imageType;

            if ( 
$filledType && empty($imageSet[$imageType]) )
            {
                
$imageSet[$imageType] = $imageSet[$filledType];
            }
        }
    }
    
    public function 
onBeforeRender() 
    {
        
parent::onBeforeRender();

        
$event = new PEEP_Event("content.before_presenter_render", array(
            
"name" => $this->displayFormat,
            
"content" => $this->content,
            
"uniqId" => $this->uniqId
        
), $this->content);
        
        
PEEP::getEventManager()->trigger($event);
        
        
$this->content $event->getData();
        
        
$this->prepare();
        
$this->assign("data"$this->content);
        
$this->assign("uniqId"$this->uniqId);
    }
    
    protected function 
prepare() {}
}

class 
BASE_ContentPresenterText extends BASE_ContentPresenter
{
    protected function 
prepare() 
    {
        
parent::prepare();
        
        
$this->content["text"] = empty($this->content["text"]) 
                ? 
null
                
strip_tags($this->content["text"]);
    }
}

class 
BASE_ContentPresenterContent extends BASE_ContentPresenterText
{
    protected function 
prepare() 
    {
        
parent::prepare();
        
        
$this->content["description"] = empty($this->content["description"]) 
                ? 
null
                
strip_tags($this->content["description"]);
    }
}

class 
BASE_ContentPresenterImageContent extends BASE_ContentPresenterContent
{
    protected function 
prepare() 
    {
        
parent::prepare();
        
        
$this->processImage();
    }
}

class 
BASE_ContentPresenterVideo extends BASE_ContentPresenterImageContent
{
    protected function 
prepare() 
    {
        
parent::prepare();
        
        if ( 
$this->content['html'] )
        {
            
$js UTIL_JsGenerator::newInstance();
        
            
$code BOL_TextFormatService::getInstance()->addVideoCodeParam($this->content['html'], "autoplay"1);
            
$code BOL_TextFormatService::getInstance()->addVideoCodeParam($code"play"1);

            
$js->addScript('$("[data-action=play]", "#" + {$uniqId}).click(function(e) { '
                    
'e.preventDefault(); e.stopPropagation();'
                    
'$(".peep_newsfeed_oembed_atch", "#" + {$uniqId}).addClass("peep_video_playing"); '
                    
'$(".peep_newsfeed_item_picture", "#" + {$uniqId}).html({$embed});'
                    
'return false; });', array(
                
"uniqId" => $this->uniqId,
                
"embed" => $code
            
));

            
PEEP::getDocument()->addOnloadScript($js);
        }
    }
}

class 
BASE_ContentPresenterImage extends BASE_ContentPresenterText
{
    protected function 
prepare() 
    {
        
parent::prepare();
        
        
$this->processImage();
    }
}
Онлайн: 0
Реклама