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

class XenForo_Deferred_AttachmentThumb extends XenForo_Deferred_Abstract
{
    public function 
execute(array $deferred, array $data$targetRunTime, &$status)
    {
        
$data array_merge(array(
            
'batch' => 100,
            
'position' => 0
        
), $data);

        
/* @var $attachmentModel XenForo_Model_Attachment */
        
$attachmentModel XenForo_Model::create('XenForo_Model_Attachment');

        
$s microtime(true);

        
$dataIds $attachmentModel->getAttachmentDataIdsInRange($data['position'], $data['batch']);
        if (
sizeof($dataIds) == 0)
        {
            return 
false;
        }

        foreach (
$dataIds AS $dataId)
        {
            
$data['position'] = $dataId;

            
$dw XenForo_DataWriter::create('XenForo_DataWriter_AttachmentData'XenForo_DataWriter::ERROR_SILENT);
            if (
$dw->setExistingData($dataId)
                && 
$dw->get('width')
                && 
XenForo_Image_Abstract::canResize($dw->get('width'), $dw->get('height'))
            )
            {
                
$attach $dw->getMergedData();
                
$attachFile $attachmentModel->getAttachmentDataFilePath($attach);
                
$imageInfo = @getimagesize($attachFile);
                if (
$imageInfo)
                {
                    
$image XenForo_Image_Abstract::createFromFile($attachFile$imageInfo[2]);
                    if (
$image)
                    {
                        if (
$image->thumbnail(XenForo_Application::get('options')->attachmentThumbnailDimensions))
                        {
                            
ob_start();
                            
$image->output($imageInfo[2]);
                            
$thumbData ob_get_contents();
                            
ob_end_clean();
                        }
                        else
                        {
                            
// no resize necessary, use the original
                            
$thumbData file_get_contents($attachFile);
                        }

                        
$dw->set('thumbnail_width'$image->getWidth());
                        
$dw->set('thumbnail_height'$image->getHeight());
                        
$dw->setExtraData(XenForo_DataWriter_AttachmentData::DATA_THUMB_DATA$thumbData);
                        try
                        {
                            
$dw->save();
                        }
                        catch (
Exception $e)
                        {
                            
XenForo_Error::logException($efalse"Thumb rebuild for #$dataId: ");
                        }

                        unset(
$image);
                    }
                }
            }

            if (
$targetRunTime && microtime(true) - $s $targetRunTime)
            {
                break;
            }
        }

        
$actionPhrase = new XenForo_Phrase('rebuilding');
        
$typePhrase = new XenForo_Phrase('attachment_thumbnails');
        
$status sprintf('%s... %s (%s)'$actionPhrase$typePhraseXenForo_Locale::numberFormat($data['position']));

        return 
$data;
    }

    public function 
canCancel()
    {
        return 
true;
    }
}
Онлайн: 0
Реклама