Вход Регистрация
Файл: plugins/photo/bol/photo_temporary_service.php
Строк: 229
<?php

final class PHOTO_BOL_PhotoTemporaryService
{
    CONST 
TEMPORARY_PHOTO_LIVE_LIMIT 86400;
    
    
/**
     * @var PHOTO_BOL_PhotoTemporaryDao
     */
    
private $photoTemporaryDao;
    
/**
     * Class instance
     *
     * @var PHOTO_BOL_PhotoTemporaryService
     */
    
private static $classInstance;

    
/**
     * Class constructor
     *
     */
    
private function __construct()
    {
        
$this->photoTemporaryDao PHOTO_BOL_PhotoTemporaryDao::getInstance();
    }

    
/**
     * Returns class instance
     *
     * @return PHOTO_BOL_PhotoTemporaryService
     */
    
public static function getInstance()
    {
        if ( 
null === self::$classInstance )
        {
            
self::$classInstance = new self();
        }

        return 
self::$classInstance;
    }
    
    public function 
addTemporaryPhoto$source$userId$order )
    {
        if ( !
file_exists($source) || !$userId )
        {
            return 
false;
        }
        
        
$tmpPhoto = new PHOTO_BOL_PhotoTemporary();
        
$tmpPhoto->userId $userId;
        
$tmpPhoto->addDatetime time();
        
$tmpPhoto->hasFullsize 0;
        
$tmpPhoto->order $order;
        
$this->photoTemporaryDao->save($tmpPhoto);
        
        try
        {
            
/*
             * Beter performance but less quolity - small size images is slightly clouded
             * 
            $fullscreenTmp = $this->photoTemporaryDao->getTemporaryPhotoPath($tmpPhoto->id, 5);
            $originalTmp = $this->photoTemporaryDao->getTemporaryPhotoPath($tmpPhoto->id, 3);
            $mainTmp = $this->photoTemporaryDao->getTemporaryPhotoPath($tmpPhoto->id, 2);
            $previewTmp = $this->photoTemporaryDao->getTemporaryPhotoPath($tmpPhoto->id, 1);
            $smallTmp = $this->photoTemporaryDao->getTemporaryPhotoPath($tmpPhoto->id, 4);
            
            $image = new UTIL_Image($source);
            
            $storeFullSize = PEEP::getConfig()->getValue('photo', 'store_fullsize');
            
            if ( $storeFullSize )
            {   
                $image->resizeImage(PHOTO_BOL_PhotoService::DIM_FULLSCREEN_WIDTH, PHOTO_BOL_PhotoService::DIM_FULLSCREEN_HEIGHT)
                    ->orientateImage()
                    ->saveImage($fullscreenTmp);
                
                $tmpPhoto->hasFullsize = 1;
            }
            
            $image->resizeImage(PHOTO_BOL_PhotoService::DIM_ORIGINAL_WIDTH, PHOTO_BOL_PhotoService::DIM_ORIGINAL_HEIGHT);
            
            if ( !$storeFullSize )
            {
                $image->orientateImage();
            }
            
            $image->saveImage($originalTmp)
                    ->resizeImage(PHOTO_BOL_PhotoService::DIM_MAIN_WIDTH, PHOTO_BOL_PhotoService::DIM_MAIN_HEIGHT)
                    ->saveImage($mainTmp)
                    ->resizeImage(PHOTO_BOL_PhotoService::DIM_PREVIEW_WIDTH, PHOTO_BOL_PhotoService::DIM_PREVIEW_HEIGHT)
                    ->saveImage($previewTmp)
                    ->resizeImage(PHOTO_BOL_PhotoService::DIM_SMALL_WIDTH, PHOTO_BOL_PhotoService::DIM_SMALL_HEIGHT, TRUE)
                    ->saveImage($smallTmp)
                    ->destroy();
            
            $this->photoTemporaryDao->save($tmpPhoto);
             */
            
            
$smallTmp $this->photoTemporaryDao->getTemporaryPhotoPath($tmpPhoto->id4);
            
$smallImg = new UTIL_Image($source);
            
$smallImg->resizeImage(PHOTO_BOL_PhotoService::DIM_SMALL_WIDTHPHOTO_BOL_PhotoService::DIM_SMALL_HEIGHTTRUE)
                ->
orientateImage()
                ->
saveImage($smallTmp)
                ->
destroy();
            
            
            
$previewTmp $this->photoTemporaryDao->getTemporaryPhotoPath($tmpPhoto->id1);
            
$previewImage = new UTIL_Image($source);
            
$previewImage->resizeImage(PHOTO_BOL_PhotoService::DIM_PREVIEW_WIDTHPHOTO_BOL_PhotoService::DIM_PREVIEW_HEIGHT)
                ->
orientateImage()
                ->
saveImage($previewTmp)
                ->
destroy();
            
            
$mainTmp $this->photoTemporaryDao->getTemporaryPhotoPath($tmpPhoto->id2);
            
$main = new UTIL_Image($source);
            
$mainImage $main->resizeImage(PHOTO_BOL_PhotoService::DIM_MAIN_WIDTHPHOTO_BOL_PhotoService::DIM_MAIN_HEIGHT)
                ->
orientateImage()
                ->
saveImage($mainTmp);
            
$mainImageResized $mainImage->imageResized();
            
$mainImage->destroy();
            
            
$originalTmp $this->photoTemporaryDao->getTemporaryPhotoPath($tmpPhoto->id3);
            
$originalImage = new UTIL_Image($source);
            
$originalImage->resizeImage(PHOTO_BOL_PhotoService::DIM_ORIGINAL_WIDTHPHOTO_BOL_PhotoService::DIM_ORIGINAL_HEIGHT)
                ->
orientateImage()
                ->
saveImage($originalTmp)
                ->
destroy();
            
            if ( 
$mainImageResized && (bool)PEEP::getConfig()->getValue('photo''store_fullsize') )
            {
                
$fullscreenTmp $this->photoTemporaryDao->getTemporaryPhotoPath($tmpPhoto->id5);
                
$fullscreen = new UTIL_Image($source);
                
$fullscreen->resizeImage(PHOTO_BOL_PhotoService::DIM_FULLSCREEN_WIDTHPHOTO_BOL_PhotoService::DIM_FULLSCREEN_HEIGHT)
                    ->
orientateImage()
                    ->
saveImage($fullscreenTmp)
                    ->
destroy();
                
                
$tmpPhoto->hasFullsize 1;
            }
            
            
$this->photoTemporaryDao->save($tmpPhoto);
        }
        catch ( 
WideImage_Exception $e )
        {
            
$this->photoTemporaryDao->deleteById($tmpPhoto->id);
            
            return 
FALSE;
        }
        
        return 
$tmpPhoto->id;
    }
    
    public function 
moveTemporaryPhoto$tmpId$albumId$desc$tag NULL$angle 0$uploadKey null$status null )
    {
        
$tmp $this->photoTemporaryDao->findById($tmpId);
        
$album PHOTO_BOL_PhotoAlbumService::getInstance()->findAlbumById($albumId);
        
        if ( !
$tmp || !$album )
        {
            return 
FALSE;
        }
        
        
$previewTmp $this->photoTemporaryDao->getTemporaryPhotoPath($tmp->id1);
        
$mainTmp $this->photoTemporaryDao->getTemporaryPhotoPath($tmp->id2);
        
$originalTmp $this->photoTemporaryDao->getTemporaryPhotoPath($tmp->id3);
        
$smallTmp $this->photoTemporaryDao->getTemporaryPhotoPath($tmp->id4);
        
$fullscreenTmp $this->photoTemporaryDao->getTemporaryPhotoPath($tmp->id5);
        
        
$privacy PEEP::getEventManager()->call('plugin.privacy.get_privacy'
            array(
'ownerId' => $album->userId'action' => 'photo_view_album')
        );
        
        
$photoService PHOTO_BOL_PhotoService::getInstance();
        
        
$photo = new PHOTO_BOL_Photo();
        
$photo->description htmlspecialchars(trim($desc));
        
$photo->albumId $albumId;
        
$photo->addDatetime time();
        
$photo->status = empty($status) ? "approved" $status;
        
$photo->hasFullsize = (int)$tmp->hasFullsize;
        
$photo->privacy = !empty($privacy) ? $privacy 'everybody';
        
$photo->hash uniqid();
        
$photo->uploadKey = empty($uploadKey) ? $photoService->getPhotoUploadKey($albumId) : $uploadKey;
        
PHOTO_BOL_PhotoDao::getInstance()->save($photo);
        
        try
        {
            
$storage PEEP::getStorage();
            
$dimension = array();
            
            if ( (int)
$angle !== )
            {
                
$tmpImage $tmp->hasFullsize ? ((bool)PEEP::getConfig()->getValue('photo''store_fullsize') ? $originalTmp $fullscreenTmp) : $mainTmp;
                
                
$smallImg = new UTIL_Image($tmpImage);
                
$smallImg->resizeImage(PHOTO_BOL_PhotoService::DIM_SMALL_WIDTHPHOTO_BOL_PhotoService::DIM_SMALL_HEIGHTTRUE)
                    ->
rotate($angle)
                    ->
saveImage($smallTmp);
                
$storage->copyFile($smallTmp,
                    
$photoService->getPhotoPath($photo->id$photo->hashPHOTO_BOL_PhotoService::TYPE_SMALL)
                );
                
$dimension[PHOTO_BOL_PhotoService::TYPE_SMALL] = array($smallImg->getWidth(), $smallImg->getHeight());
                
$smallImg->destroy();
            
                
$previewImage = new UTIL_Image($tmpImage);
                
$previewImage->resizeImage(PHOTO_BOL_PhotoService::DIM_PREVIEW_WIDTHPHOTO_BOL_PhotoService::DIM_PREVIEW_HEIGHT)
                    ->
rotate($angle)
                    ->
saveImage($previewTmp);
                
$storage->copyFile($previewTmp,
                    
$photoService->getPhotoPath($photo->id$photo->hashPHOTO_BOL_PhotoService::TYPE_PREVIEW)
                );
                
$dimension[PHOTO_BOL_PhotoService::TYPE_PREVIEW] = array($previewImage->getWidth(), $previewImage->getHeight());
                
$previewImage->destroy();
                
                
$main = new UTIL_Image($tmpImage);
                
$main->resizeImage(PHOTO_BOL_PhotoService::DIM_MAIN_WIDTHPHOTO_BOL_PhotoService::DIM_MAIN_HEIGHT)
                    ->
rotate($angle)
                    ->
saveImage($mainTmp);
                
$storage->copyFile($mainTmp,
                    
$photoService->getPhotoPath($photo->id$photo->hashPHOTO_BOL_PhotoService::TYPE_MAIN)
                );
                
$dimension[PHOTO_BOL_PhotoService::TYPE_MAIN] = array($main->getWidth(), $main->getHeight());
                
$main->destroy();
                
                
$originalImage = new UTIL_Image($tmpImage);
                
$originalImage->resizeImage(PHOTO_BOL_PhotoService::DIM_ORIGINAL_WIDTHPHOTO_BOL_PhotoService::DIM_ORIGINAL_HEIGHT)
                    ->
rotate($angle)
                    ->
saveImage($originalTmp);
                
$storage->copyFile($originalTmp,
                    
$photoService->getPhotoPath($photo->id$photo->hashPHOTO_BOL_PhotoService::TYPE_ORIGINAL)
                );
                
$dimension[PHOTO_BOL_PhotoService::TYPE_ORIGINAL] = array($originalImage->getWidth(), $originalImage->getHeight());
                
$originalImage->destroy();
                    
                if ( 
$tmp->hasFullsize && (bool)PEEP::getConfig()->getValue('photo''store_fullsize') )
                {
                    
$fullscreen = new UTIL_Image($tmpImage);
                    
$fullscreen->resizeImage(PHOTO_BOL_PhotoService::DIM_FULLSCREEN_WIDTHPHOTO_BOL_PhotoService::DIM_FULLSCREEN_HEIGHT)
                        ->
rotate($angle)
                        ->
saveImage($fullscreenTmp);
                    
$storage->copyFile($fullscreenTmp,
                        
$photoService->getPhotoPath($photo->id$photo->hashPHOTO_BOL_PhotoService::TYPE_FULLSCREEN)
                    );
                    
$dimension[PHOTO_BOL_PhotoService::TYPE_FULLSCREEN] = array($fullscreen->getWidth(), $fullscreen->getHeight());
                    
$fullscreen->destroy();
                }
            }
            else
            {
                
$storage->copyFile($smallTmp,
                    
$photoService->getPhotoPath($photo->id$photo->hashPHOTO_BOL_PhotoService::TYPE_SMALL)
                );
                list(
$width$height) = getimagesize($smallTmp);
                
$dimension[PHOTO_BOL_PhotoService::TYPE_SMALL] = array($width$height);
                
                
$storage->copyFile($previewTmp,
                    
$photoService->getPhotoPath($photo->id$photo->hashPHOTO_BOL_PhotoService::TYPE_PREVIEW)
                );
                list(
$width$height) = getimagesize($previewTmp);
                
$dimension[PHOTO_BOL_PhotoService::TYPE_PREVIEW] = array($width$height);
                
                
$storage->copyFile($mainTmp,
                    
$photoService->getPhotoPath($photo->id$photo->hashPHOTO_BOL_PhotoService::TYPE_MAIN)
                );
                list(
$width$height) = getimagesize($mainTmp);
                
$dimension[PHOTO_BOL_PhotoService::TYPE_MAIN] = array($width$height);
                
                
$storage->copyFile($originalTmp,
                    
$photoService->getPhotoPath($photo->id$photo->hashPHOTO_BOL_PhotoService::TYPE_ORIGINAL)
                );
                list(
$width$height) = getimagesize($originalTmp);
                
$dimension[PHOTO_BOL_PhotoService::TYPE_ORIGINAL] = array($width$height);
                
                if ( 
$tmp->hasFullsize && (bool)PEEP::getConfig()->getValue('photo''store_fullsize') )
                {
                    
$storage->copyFile($fullscreenTmp,
                        
$photoService->getPhotoPath($photo->id$photo->hashPHOTO_BOL_PhotoService::TYPE_FULLSCREEN)
                    );
                    list(
$width$height) = getimagesize($fullscreenTmp);
                    
$dimension[PHOTO_BOL_PhotoService::TYPE_FULLSCREEN] = array($width$height);
                }
            }
            
            
$photo->setDimension(json_encode($dimension));
            
PHOTO_BOL_PhotoDao::getInstance()->save($photo);

            if ( 
mb_strlen($desc) )
            {
                
BOL_TagService::getInstance()->updateEntityTags($photo->id'photo'$photoService->descToHashtag($desc));
            }
            
            if ( 
mb_strlen($tag) )
            {
                
BOL_TagService::getInstance()->updateEntityTags($photo->id'photo'explode(','$tag));
            }

            
PEEP::getEventManager()->trigger(new PEEP_Event('photo.onMoveTemporaryPhoto', array('tmpId' => $tmpId'albumId' => $albumId'photoId' => $photo->id)));
        }
        catch ( 
Exception $e )
        {
            
$photo NULL;
        }

        return 
$photo;
    }
    
    public function 
findUserTemporaryPhotos$userId$orderBy 'timestamp' )
    {
        
$list $this->photoTemporaryDao->findByUserId($userId$orderBy);
        
        
$result = array();
        if ( 
$list )
        {
            foreach ( 
$list as $photo )
            {
                
$result[$photo->id]['dto'] = $photo;
                
$result[$photo->id]['imageSrc'] = $this->photoTemporaryDao->getTemporaryPhotoUrl($photo->id1);
            }
        }
        
        return 
$result;
    }
    
    public function 
deleteUserTemporaryPhotos$userId )
    {
        
$list $this->photoTemporaryDao->findByUserId($userId);
        
        if ( !
$list )
        {
            return 
true;
        }
        
        foreach ( 
$list as $photo )
        {
            @
unlink($this->photoTemporaryDao->getTemporaryPhotoPath($photo->id1));
            @
unlink($this->photoTemporaryDao->getTemporaryPhotoPath($photo->id2));
            @
unlink($this->photoTemporaryDao->getTemporaryPhotoPath($photo->id3));
            @
unlink($this->photoTemporaryDao->getTemporaryPhotoPath($photo->id4));
            @
unlink($this->photoTemporaryDao->getTemporaryPhotoPath($photo->id5));
            
            
$this->photoTemporaryDao->delete($photo);
        }
        
        return 
true;
    }
    
    public function 
deleteTemporaryPhoto$photoId )
    {
        
/** @var PHOTO_BOL_Photo $photo */
        
$photo $this->photoTemporaryDao->findById($photoId);
        if ( !
$photo )
        {
            return 
false;
        }
        
        @
unlink($this->photoTemporaryDao->getTemporaryPhotoPath($photoId1));
        @
unlink($this->photoTemporaryDao->getTemporaryPhotoPath($photoId2));
        @
unlink($this->photoTemporaryDao->getTemporaryPhotoPath($photoId3));
        @
unlink($this->photoTemporaryDao->getTemporaryPhotoPath($photoId4));
        @
unlink($this->photoTemporaryDao->getTemporaryPhotoPath($photoId5));
        
        
$this->photoTemporaryDao->delete($photo);
        
        return 
true;
    }
    
    public function 
deleteLimitedPhotos()
    {   
        foreach ( 
$this->photoTemporaryDao->findLimitedPhotos(self::TEMPORARY_PHOTO_LIVE_LIMIT) as $id )
        {
            
$this->deleteTemporaryPhoto($id);
        }
    }
}
Онлайн: 1
Реклама