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

class XenForo_Importer_vBulletin4x extends XenForo_Importer_vBulletin
{
    public static function 
getName()
    {
        return 
'vBulletin 4.x';
    }

    public function 
stepAttachments($start, array $options)
    {
        
$options = array_merge(array(
            
'path' => isset($this->_config['attachmentPath']) ? $this->_config['attachmentPath'] : '',
            
'limit' => 50,
            
'max' => false
        
), $options);

        
$sDb = $this->_sourceDb;
        
$prefix = $this->_prefix;

        
/* @var $model XenForo_Model_Import */
        
$model = $this->_importModel;

        if (
$options['max'] === false)
        {
            
$options['max'] = $sDb->fetchOne('
                SELECT MAX(attachmentid)
                FROM ' 
. $prefix . 'attachment
            '
);
        }

        
$contentId = $sDb->fetchOne('SELECT contenttypeid FROM ' . $prefix .'contenttype WHERE class = 'Post'');

        
$attachments = $sDb->fetchAll($sDb->limit(
            
'
                SELECT attachment.attachmentid, attachment.userid, attachment.dateline,
                    attachment.filename, attachment.counter, attachment.contentid, attachment.filedataid,
                    filedata.userid AS filedata_userid
                FROM ' 
. $prefix . 'attachment AS attachment
                INNER JOIN ' 
. $prefix . 'filedata AS filedata ON (filedata.filedataid = attachment.filedataid)
                WHERE attachment.attachmentid > ' 
. $sDb->quote($start) . '
                    AND attachment.contenttypeid = ' 
. $sDb->quote($contentId) . '
                    AND attachment.state = '
visible'
                ORDER BY attachment.attachmentid
            '
, $options['limit']
        ));
        if (!
$attachments)
        {
            return 
true;
        }

        
$next = 0;
        
$total = 0;

        
$userIdMap = $model->getUserIdsMapFromArray($attachments, 'userid');

        
$postIdMap = $model->getPostIdsMapFromArray($attachments, 'contentid');
        
$posts = $model->getModelFromCache('XenForo_Model_Post')->getPostsByIds($postIdMap);

        foreach (
$attachments AS $attachment)
        {
            
$next = $attachment['attachmentid'];

            
$newPostId = $this->_mapLookUp($postIdMap, $attachment['contentid']);
            if (!
$newPostId)
            {
                continue;
            }

            if (!
$options['path'])
            {
                
$fData = $sDb->fetchOne('
                    SELECT filedata
                    FROM ' 
. $prefix . 'filedata
                    WHERE filedataid = ' 
. $sDb->quote($attachment['filedataid'])
                );
                if (
$fData === '')
                {
                    continue;
                }

                
$attachFile = tempnam(XenForo_Helper_File::getTempDir(), 'xf');
                if (!
$attachFile || !@file_put_contents($attachFile, $fData))
                {
                    continue;
                }

                
$isTemp = true;
            }
            else
            {
                
$attachFileOrig = "$options[path]/" . implode('/', str_split($attachment['filedata_userid'])) . "/$attachment[filedataid].attach";
                if (!
file_exists($attachFileOrig))
                {
                    continue;
                }

                
$attachFile = tempnam(XenForo_Helper_File::getTempDir(), 'xf');
                
copy($attachFileOrig, $attachFile);

                
$isTemp = true;
            }

            
$success = $model->importPostAttachment(
                
$attachment['attachmentid'],
                
$this->_convertToUtf8($attachment['filename']),
                
$attachFile,
                
$this->_mapLookUp($userIdMap, $attachment['userid'], 0),
                
$newPostId,
                
$attachment['dateline'],
                array(
'view_count' => $attachment['counter']),
                array(
$this, 'processAttachmentTags'),
                
$posts[$newPostId]['message']
            );
            if (
$success)
            {
                
$total++;
            }

            if (
$isTemp)
            {
                @
unlink($attachFile);
            }
        }

        
$this->_session->incrementStepImportTotal($total);

        return array(
$next, $options, $this->_getProgressOutput($next, $options['max']));
    }
}
Онлайн: 3
Реклама