Seditio Source
Root |
./othercms/croogo-4.0.7/vendor/croogo/croogo/FileManager/src/Event/FileManagerEventHandler.php
<?php

namespace Croogo\FileManager\Event;

use
Cake\Event\EventListenerInterface;
use
Cake\Log\Log;
use
Cake\ORM\TableRegistry;
use
Char0n\FFMpegPHP\Movie;
use
Croogo\Core\Croogo;
use
Croogo\Core\Nav;

/**
 * FileManagerEventHandler
 *
 * @category Event
 * @package  Croogo.FileManager.Event
 * @license  http://www.opensource.org/licenses/mit-license.php The MIT License
 * @link     http://www.croogo.org
 */
class FileManagerEventHandler implements EventListenerInterface
{

   
/**
     * implementedEvents
     */
   
public function implementedEvents()
    {
        return [
           
'Controller.FileManager/Attachment.newAttachment' => [
               
'callable' => 'onNewAttachment',
            ],
           
'Croogo.setupAdminData' => [
               
'callable' => 'onSetupAdminData',
            ],
           
'Controller.Links.setupLinkChooser' => [
               
'callable' => 'onSetupLinkChooser',
            ],
        ];
    }

   
/**
     * Registers usage when new attachment is created and attached to a resource
     */
   
public function onNewAttachment($event)
    {
       
$controller = $event->getSubject();
       
$request = $controller->request;
       
$attachment = $event->getData('attachment');

       
// create poster for video, ideally should be done via a job queue
       
$Attachments = TableRegistry::get('Croogo/FileManager.Attachments');
        if (
           
strstr($attachment->asset->mime_type, 'video') !== false &&
           
class_exists('Char0n\FFMpegPHP\Movie')
        ) {
           
$Attachments->createVideoThumbnail($attachment->id);
        }

        if (empty(
$attachment->asset->asset_usage)) {
           
Log::error('No asset usage record to register');

            return;
        }

       
$usage = $attachment->asset->asset_usage[0];
       
$Usage = TableRegistry::get('Croogo/FileManager.AssetUsages');
       
$data = $Usage->newEntity([
           
'asset_id' => $attachment->asset->id,
           
'model' => $usage['model'],
           
'foreign_key' => $usage['foreign_key'],
           
'featured_image' => $usage['featured_image'],
        ]);
       
$result = $Usage->save($data);
        if (!
$result) {
           
Log::error('Asset Usage registration failed');
           
Log::error(print_r($Usage->validationErrors, true));
        }
       
$event->result = $result;
    }

   
/**
     * Setup Link chooser values
     *
     * @return void
     */
   
public function onSetupLinkChooser($event)
    {
       
$linkChoosers = [];
       
$linkChoosers['Images'] = [
           
'title' => 'Images',
           
'description' => 'Attachments with an image mime type.',
           
'url' => [
               
'plugin' => 'Croogo/FileManager',
               
'controller' => 'Attachments',
               
'action' => 'index',
               
'?' => [
                   
'chooser_type' => 'image',
                   
'chooser' => 1,
                   
'KeepThis' => true,
                   
'TB_iframe' => true,
                   
'height' => 400,
                   
'width' => 600
               
]
            ]
        ];
       
$linkChoosers['Files'] = [
           
'title' => 'Files',
           
'description' => 'Attachments with other mime types, ie. pdf, xls, doc, etc.',
           
'url' => [
               
'plugin' => 'Croogo/FileManager',
               
'controller' => 'Attachments',
               
'action' => 'index',
               
'?' => [
                   
'chooser_type' => 'file',
                   
'chooser' => 1,
                   
'KeepThis' => true,
                   
'TB_iframe' => true,
                   
'height' => 400,
                   
'width' => 600
               
]
            ]
        ];
       
Croogo::mergeConfig('Croogo.linkChoosers', $linkChoosers);
    }

   
/**
     * Setup admin data
     */
   
public function onSetupAdminData($event)
    {
       
Nav::add('media.children.attachments', [
           
'title' => __d('croogo', 'Attachments'),
           
'url' => [
               
'prefix' => 'admin',
               
'plugin' => 'Croogo/FileManager',
               
'controller' => 'Attachments',
               
'action' => 'index',
            ],
        ]);
    }
}