Seditio Source
Root |
./othercms/croogo-4.0.7/vendor/croogo/croogo/FileManager/src/View/Helper/AssetsFilterHelper.php
<?php

namespace Croogo\FileManager\View\Helper;

use
Cake\Event\Event;
use
Cake\Log\LogTrait;
use
Cake\ORM\TableRegistry;
use
Cake\View\Helper;
use
Cake\View\View;
use
Croogo\Core\Utility\StringConverter;

class
AssetsFilterHelper extends Helper
{

    use
LogTrait;

   
/**
     * @var array
     */
   
public $helpers = [
       
'Html',
       
'Croogo/Nodes.Nodes',
    ];

   
/**
     * AssetsFilterHelper constructor.
     * @param View $view
     * @param array $settings
     */
   
public function __construct(View $view, $settings = [])
    {
       
parent::__construct($view);
       
$this->_setupEvents();
    }

   
/**
     * @return void
     */
   
protected function _setupEvents()
    {
       
$events = [
           
'Helper.Layout.beforeFilter' => [
               
'callable' => 'filter', 'passParams' => true,
            ],
        ];
       
$eventManager = $this->_View->getEventManager();
        foreach (
$events as $name => $config) {
           
$eventManager->on($name, $config, [$this, 'filter']);
        }
    }

   
/**
     * @param Event $event
     *
     * @return string|string[]|null
     */
   
public function filter(Event $event)
    {
       
$content =& $event->result['content'];
       
$options =& $event->result['options'];
       
$converter = new StringConverter();
       
$conditions = [];
       
$identifier = '';
        if (isset(
$options['model']) && isset($options['id'])) {
           
$conditions = [
               
'AssetUsages.model' => $options['model'],
               
'AssetUsages.foreign_key' => $options['id'],
            ];
           
$identifier = $options['model'] . '.' . $options['id'];
        }

       
preg_match_all('/\[(image):[ ]*([A-Za-z0-9_\-]*)(.*?)\]/i', $content, $tagMatches);
       
$AssetUsages = TableRegistry::get('Croogo/FileManager.AssetUsages');

        for (
$i = 0, $ii = count($tagMatches[1]); $i < $ii; $i++) {
           
$assets = $converter->parseString('image|i', $tagMatches[0][$i]);
           
$assetId = $tagMatches[2][$i];
           
$conditions['AssetUsages.id'] = $assetId;
           
$assetUsage = $AssetUsages->find()
                ->
contain('Assets')
                ->
where($conditions)
                ->
cache('asset_filtered_' . $assetId, 'nodes')
                ->
first();
            if (!
$assetUsage) {
               
$this->log(sprintf(
                   
'%s - Asset not found for %s',
                   
$identifier,
                   
$tagMatches[0][$i]
                ));
               
$regex = '/' . preg_quote($tagMatches[0][$i]) . '/';
               
$content = preg_replace($regex, '', $content);
                continue;
            }

           
$options = !empty($assets[$assetId]) ? $assets[$assetId] : ['class' => $this->_View->Theme->getCssClass('thumbnailClass')];
           
$img = $this->Html->image($assetUsage->asset->path, $options);
           
$regex = '/' . preg_quote($tagMatches[0][$i]) . '/';
           
$content = preg_replace($regex, $img, $content);
        }

        return
$content;
    }

   
/**
     * @return void
     */
   
public function afterSetNode()
    {
       
$body = $this->Nodes->field('body');
       
//$body = $this->filter($body, array(
        //    'model' => 'Node', 'id' => $this->Nodes->field('id')
        //));
       
$body = $this->filter(new Event('Helper.Layout.beforeFilter', $this, [
           
'content' => $body,
           
'model' => 'Node',
           
'id' => $this->Nodes->field('id'),
        ]));

       
$this->Nodes->field('body', $body);
    }
}