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

class PHOTO_CLASS_EventHandler
{
    
/**
     * @var PHOTO_CLASS_EventHandler
     */
    
private static $classInstance;

    const 
EVENT_ALBUM_ADD 'photo.album_add';
    const 
EVENT_ALBUM_FIND 'photo.album_find';
    const 
EVENT_ALBUM_DELETE 'photo.album_delete';
    const 
EVENT_ENTITY_ALBUMS_FIND 'photo.entity_albums_find';
    const 
EVENT_ENTITY_ALBUMS_COUNT 'photo.entity_albums_count';
    
    const 
EVENT_ENTITY_PHOTOS_FIND 'photo.entity_photos_find';
    const 
EVENT_ENTITY_PHOTOS_COUNT 'photo.entity_photos_count';
    const 
EVENT_ENTITY_ALBUMS_DELETE 'photo.entity_albums_delete';

    const 
EVENT_ON_ALBUM_ADD 'photo.on_album_add';
    const 
EVENT_ON_ALBUM_EDIT 'photo.on_album_edit';
    const 
EVENT_BEFORE_ALBUM_DELETE 'photo.before_album_delete';

    const 
EVENT_PHOTO_ADD 'photo.add';
    const 
EVENT_PHOTO_FIND 'photo.find';
    const 
EVENT_PHOTO_FINDS 'photo.finds';
    const 
EVENT_PHOTO_DELETE 'photo.delete';
    const 
EVENT_ALBUM_PHOTOS_COUNT 'photo.album_photos_count';
    const 
EVENT_ALBUM_PHOTOS_FIND 'photo.album_photos_find';
    const 
EVENT_INIT_FLOATBOX 'photo.init_floatbox';
    const 
EVENT_GET_PHOTO_VIEW_STATUS 'photo.get_photo_view_status';
    const 
EVENT_GET_ADDPHOTO_URL 'photo.getAddPhotoURL';
    const 
EVENT_ON_PHOTO_CONTENT_UPDATE 'photo.onUpdateContent';

    const 
EVENT_ON_PHOTO_ADD 'plugin.photos.add_photo';
    const 
EVENT_ON_PHOTO_EDIT 'photo.after_edit';
    const 
EVENT_ON_PHOTO_DELETE 'photo.after_delete';
    const 
EVENT_BEFORE_PHOTO_MOVE 'photo.onBeforePhotoMove';
    const 
EVENT_BEFORE_PHOTO_DELETE 'photo.onBeforeDelete';
    const 
EVENT_BEFORE_MULTIPLE_PHOTO_DELETE 'photo.onBeforeMultiplePhotoDelete';
    const 
EVENT_AFTER_PHOTO_MOVE 'photo.onAfterPhotoMove';
    const 
EVENT_CREATE_USER_ALBUM 'photo.createUserAlbum';
    const 
EVENT_GET_MAIN_ALBUM 'photo.getMainAlbum';
    const 
EVENT_ADD_SEARCH_DATA 'photo.addSearchData';
    const 
EVENT_BACKGROUND_LOAD_PHOTO 'photo.backgroundLoadPhoto';
    const 
EVENT_COLLECT_PHOTO_SUB_MENU 'photo.collectSubMenu';
    
    const 
EVENT_SUGGEST_DEFAULT_ALBUM 'photo.suggest_default_album';
    const 
EVENT_ON_FORM_READY 'photo.form_ready';
    const 
EVENT_ON_FORM_COMPLETE 'photo.form_complete';
    const 
EVENT_GET_UPLOAD_DATA 'photo.upload_data';
    const 
EVENT_GET_ALBUM_COVER_URL 'photo.get_cover';
    const 
EVENT_GET_ALBUM_NAMES 'photo.get_album_names';

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

        return 
self::$classInstance;
    }

    
/**
     * @var PHOTO_BOL_PhotoAlbumService
     */
    
private $albumService;

    
/**
     * @var PHOTO_BOL_PhotoService
     */
    
private $photoService;

    private function 
__construct()
    {
        
$this->albumService PHOTO_BOL_PhotoAlbumService::getInstance();
        
$this->photoService PHOTO_BOL_PhotoService::getInstance();
    }

    public function 
albumAddPEEP_Event $e )
    {
        
$params $e->getParams();
        
$data $e->getData();

        if ( empty(
$params['name']) )
        {
            return 
false;
        }

        
$albumName trim($params['name']);
        
$userId = !empty($params['userId']) ? (int) $params['userId'] : null;
        
$entityId = !empty($params['entityId']) ? (int) $params['entityId'] : $userId;
        
$entityType = !empty($params['entityType']) ? (int) $params['entityType'] : 'user';

        
$album $this->albumService->findEntityAlbumByName($albumName$entityId$entityType);
        
        if ( empty(
$album) && $entityType == "user" && !empty($userId) )
        {
            
$album $this->albumService->findAlbumByName($albumName$userId);
        }

        if ( !empty(
$album) )
        {
            
$data['albumId'] = $album->id;
            
$e->setData($data);

            return 
$data;
        }

        
$album = new PHOTO_BOL_PhotoAlbum();
        
$album->name $albumName;
        
$album->userId $userId;
        
$album->entityId $entityId;
        
$album->entityType $entityType;
        
$album->createDatetime time();

        
$albumId $this->albumService->addAlbum($album);

        
$data['albumId'] = $albumId;
        
$e->setData($data);

        return 
$data;
    }
    
    public function 
onAlbumAddPEEP_Event $event )
    {
        
$params $event->getParams();
        
        if ( empty(
$params['id']) || ($album $this->albumService->findAlbumById($params['id'])) === NULL )
        {
            return;
        }
        
        
PEEP::getEventManager()->trigger(new PEEP_Event(self::EVENT_ADD_SEARCH_DATA,
            array(
                
'entityId' => $album->id,
                
'entityType' => PHOTO_BOL_SearchService::ENTITY_TYPE_ALBUM,
                
'content' => $album->name ' ' $album->description
            
))
        );
    }
    
    public function 
onAlbumEditPEEP_Event $event )
    {
        
$params $event->getParams();
        
        if ( empty(
$params['id']) || ($album $this->albumService->findAlbumById($params['id'])) === NULL )
        {
            return;
        }
        
        
PEEP::getEventManager()->trigger(new PEEP_Event(self::EVENT_ADD_SEARCH_DATA,
            array(
                
'entityId' => $album->id,
                
'entityType' => PHOTO_BOL_SearchService::ENTITY_TYPE_ALBUM,
                
'content' => $album->name ' ' $album->description
            
))
        );
    }

    public function 
albumFindPEEP_Event $e )
    {
        
$params $e->getParams();
        
$data $e->getData();

        
$album $this->findRequestedAlbum($params);

        if ( empty(
$album) )
        {
            return 
null;
        }

        
$list $this->prepareAlbums(array($album));

        
$data $list[$album->id];
        
$e->setData($data);

        return 
$data;
    }

    public function 
albumDeletePEEP_Event $e )
    {
        
$params $e->getParams();
        
$data $e->getData();

        if ( empty(
$params['albumId']) )
        {
            return 
false;
        }

        
$album $this->albumService->findAlbumById($params['albumId']);

        if ( !
$album )
        {
            return 
false;
        }

        
$this->albumService->deleteAlbum($album->id);

        return 
$data;
    }

    public function 
entityAlbumsFindPEEP_Event $e )
    {
        
$params $e->getParams();
        
$data $e->getData();

        if ( empty(
$params['entityId']) )
        {
            return 
false;
        }

        
$entityType = !empty($params['entityType']) ? $params['entityType'] : 'user';
        
$offset = !empty($params['offset']) ? (int) $params['offset'] : 0;
        
$limit = !empty($params['limit']) ? (int) $params['limit'] : PEEP::getConfig()->getValue('photo''photos_per_page');

        
$albums $this->albumService->findEntityAlbums($params['entityId'], $entityType$offset$limit);
        
$list $this->prepareAlbums($albums);
        
$data['albums'] = $list;
        
$e->setData($data);

        return 
$data;
    }
    
    public function 
entityAlbumsCountPEEP_Event $e )
    {
        
$params $e->getParams();
        
$data $e->getData();

        if ( empty(
$params['entityId']) )
        {
            return 
false;
        }

        
$entityType = !empty($params['entityType']) ? $params['entityType'] : 'user';

        
$data["count"] = $this->albumService->countEntityAlbums($params['entityId'], $entityType);

        
$e->setData($data);
        
        return 
$data;
    }
    
    public function 
createUserAlbumPEEP_Event $event )
    {
        
$params $event->getParams();
        
        if ( empty(
$params['userId']) || ($user BOL_UserService::getInstance()->findUserById($params['userId'])) === NULL )
        {
            return 
FALSE;
        }

        
$albumName = !empty($params['name']) ? htmlspecialchars(trim($params['name'])) : PEEP::getLanguage()->text('photo''album_my_photos');
        
        if ( !(
$album PHOTO_BOL_PhotoAlbumService::getInstance()->findAlbumByName($albumName$user->id)) )
        {
            
$album = new PHOTO_BOL_PhotoAlbum();
            
$album->name $albumName;
            
$album->userId $user->id;
            
$album->entityId = !empty($params['entityId']) ? $params['entityId'] : $user->id;
            
$album->entityType = !empty($params['entityType']) ? $params['entityType'] : 'user';
            
$album->createDatetime time();
            
$album->description = !empty($params['description']) ? htmlspecialchars(trim($params['description'])) : '';
            
            
PHOTO_BOL_PhotoAlbumService::getInstance()->addAlbum($album);
        }
        
        
$event->setData(array('ablumId' => $album->id));
    }
    
    public function 
getMainAlbumPEEP_Event $event )
    {
        
$params $event->getParams();
        
        if ( empty(
$params['userId']) || ($user BOL_UserService::getInstance()->findUserById($params['userId'])) === NULL )
        {
            return;
        }
        
        
$albumName PEEP::getLanguage()->text('photo''album_my_photos');
        
$createAlbumEvent = new PEEP_Event(self::EVENT_CREATE_USER_ALBUM, array('userId' => $user->id'name' => $albumName));
        
PEEP::getEventManager()->trigger($createAlbumEvent);
        
        
$data $createAlbumEvent->getData();
        
$album $this->albumService->findAlbumById($data['ablumId']);
        
        
$photos PHOTO_BOL_PhotoDao::getInstance()->getAlbumAllPhotos($album->id);
        
$photoList = array();
        
        foreach ( 
$photos as $photo )
        {
            
$dim = !empty($photo->dimension) ? $photo->dimension FALSE;
            
            
$photoList[$photo->id] = get_object_vars($photo);
            
$photoList[$photo->id]['url'] = array();
            
$photoList[$photo->id]['url'][PHOTO_BOL_PhotoService::TYPE_ORIGINAL] = $this->photoService->getPhotoUrlByType($photo->idPHOTO_BOL_PhotoService::TYPE_ORIGINAL$photo->hash$dim);
            
$photoList[$photo->id]['url'][PHOTO_BOL_PhotoService::TYPE_MAIN] = $this->photoService->getPhotoUrlByType($photo->idPHOTO_BOL_PhotoService::TYPE_MAIN$photo->hash$dim);
            
$photoList[$photo->id]['url'][PHOTO_BOL_PhotoService::TYPE_PREVIEW] = $this->photoService->getPhotoUrlByType($photo->idPHOTO_BOL_PhotoService::TYPE_PREVIEW$photo->hash$dim);
            
$photoList[$photo->id]['url'][PHOTO_BOL_PhotoService::TYPE_SMALL] = $this->photoService->getPhotoUrlByType($photo->idPHOTO_BOL_PhotoService::TYPE_PREVIEW$photo->hash$dim);
            
            if ( 
$photo->hasFullsize && (bool)PEEP::getConfig()->getValue('photo''store_fullsize'))
            {
                
$photoList[$photo->id]['url'][PHOTO_BOL_PhotoService::TYPE_FULLSCREEN] = $this->photoService->getPhotoUrlByType($photo->idPHOTO_BOL_PhotoService::TYPE_FULLSCREEN$photo->hash$dim);
            }
        }
        
        
$event->setData(array(
            
'album' => get_object_vars($album),
            
'photoList' => $photoList
        
));
    }

    public function 
onPhotoAddPEEP_Event $event )
    {
        foreach ( 
$event->getParams() as $data )
        {
            
PHOTO_BOL_SearchService::getInstance()->addSearchIndex(PHOTO_BOL_SearchService::ENTITY_TYPE_PHOTO$data['photoId'], $data['description']);
        }
    }
    
    public function 
onAfterPhotoEditPEEP_Event $event )
    {
        
$params $event->getParams();
        
        if ( empty(
$params['id']) || ($photo $this->photoService->findPhotoById($params['id'])) === NULL )
        {
            return;
        }
        
        
PEEP::getEventManager()->trigger(new PEEP_Event(self::EVENT_ADD_SEARCH_DATA,
            array(
                
'entityId' => $photo->id,
                
'entityType' => PHOTO_BOL_SearchService::ENTITY_TYPE_PHOTO,
                
'content' => $photo->description
            
))
        );
    }
    
    public function 
photoAddPEEP_Event $e )
    {
        
$params $e->getParams();
        
$data $e->getData();
 
        if ( empty(
$params['albumId']) )
        {
            return 
false;
        }

        
$addToFeed = !isset($params["addToFeed"]) || $params["addToFeed"];
        
$status = empty($params["status"]) ? null $params["status"];
        
$silent $status !== null;
        
        
$album $this->albumService->findAlbumById($params['albumId']);

        if ( !
$album )
        {
            return 
false;
        }

        if ( empty(
$params['path']) || !file_exists($params['path']) )
        {
            return 
false;
        }

        
$description = !empty($params['description']) ? $params['description'] : null;
        
$tags = !empty($params['tags']) ? $params['tags'] : null;
        
$angle = !empty($params['angle']) ? $params['angle'] : 0;
        
$uploadKey = !empty($params['uploadKey']) ? $params['uploadKey'] : 0;
        
        
$tmpPhotoService PHOTO_BOL_PhotoTemporaryService::getInstance();
        
        if ( (
$tmpId $tmpPhotoService->addTemporaryPhoto($params['path'], $album->userId1)) )
        {
            
$photo $tmpPhotoService->moveTemporaryPhoto($tmpId$album->id$description$tags$angle$uploadKey$status);
            if ( 
$photo )
            {
                
$data['photoId'] = $photo->id;

                if ( 
$album->userId && $addToFeed )
                {
                    
//Cnews
                    
$event = new PEEP_Event('feed.action', array(
                        
'pluginKey' => 'photo',
                        
'entityType' => 'photo_comments',
                        
'entityId' => $photo->id,
                        
'userId' => $album->userId
                    
));
                    
PEEP::getEventManager()->trigger($event);
                }
                
                
$this->photoService->createAlbumCover($album->id, array($photo));
                
PHOTO_BOL_PhotoTemporaryService::getInstance()->deleteUserTemporaryPhotos($album->userId);
                
                
$movedArray[] = array(
                    
'addTimestamp' => time(), 
                    
'photoId' => $photo->id
                    
'description' => $photo->description
                    
"status" => $photo->status
                    
"silent" => $silent
                
);
                
                
$event = new PEEP_Event(PHOTO_CLASS_EventHandler::EVENT_ON_PHOTO_ADD$movedArray);
                
PEEP::getEventManager()->trigger($event);
            }
        }

        
$e->setData($data);

        return 
$data;
    }

    public function 
photoFindPEEP_Event $e )
    {
        
$params $e->getParams();
        
$data $e->getData();

        if ( empty(
$params['photoId']) )
        {
            return 
false;
        }

        
$photoId = (int) $params['photoId'];
        
$photo $this->photoService->findPhotoById($photoId);

        if ( !
$photo )
        {
            return 
false;
        }

        
$list $this->preparePhotos(array($photo));

        
$data['photo'] = $list[$photoId];
        
$e->setData($data);

        return 
$data;
    }

    public function 
photoFindsPEEP_Event $event )
    {
        
$params $event->getParams();

        if ( empty(
$params['idList']) )
        {
            return 
false;
        }

        
$photos $this->photoService->findPhotoListByIdList($params['idList'], 1count($params['idList']));

        if ( !
$photos )
        {
            return 
false;
        }

        
$list $this->preparePhotos($photos);
        
$event->setData(array(
            
'photos' => $list
        
));

        return 
$event->getData();
    }

    public function 
photoDeletePEEP_Event $e )
    {
        
$params $e->getParams();
        
$data $e->getData();

        if ( empty(
$params['photoId']) )
        {
            return 
false;
        }

        
$photo $this->photoService->findPhotoById($params['photoId']);

        if ( !
$photo )
        {
            return 
false;
        }

        
$this->photoService->deletePhoto($photo->id);

        return 
$data;
    }
    
    public function 
onPhotoDeletePEEP_Event $event )
    {
        
$params $event->getParams();
        
        
PHOTO_BOL_SearchService::getInstance()->deleteSearchItem(PHOTO_BOL_SearchService::ENTITY_TYPE_PHOTO$params['id']);

        
PEEP::getEventManager()->trigger(
            new 
PEEP_Event(BOL_ContentService::EVENT_BEFORE_DELETE, array(
                
'entityType' => PHOTO_CLASS_ContentProvider::ENTITY_TYPE,
                
'entityId' => $params['id']
            ))
        );
    }

    public function 
albumPhotosCountPEEP_Event $event )
    {
        
$params $event->getParams();

        if ( empty(
$params['albumId']) )
        {
            return 
null;
        }

        
$event->setData($this->photoService->countAlbumPhotos($params['albumId'], array()));

        return 
$event->getData();
    }

    
/**
     * @param PEEP_Event $e
     * @return array
     */
    
public function albumPhotosFindPEEP_Event $e )
    {
        
$params $e->getParams();

        
$album $this->findRequestedAlbum($params);

        if ( empty(
$album) )
        {
            return 
false;
        }

        
$offset = !empty($params['offset']) ? (int) $params['offset'] : 0;
        
$limit = !empty($params['limit']) ? (int) $params['limit'] : PEEP::getConfig()->getValue('photo''photos_per_page');
        
$listType = isset($params['listType']) ? $params['listType'] : 'latest';
        
$privacy = isset($params['privacy']) ? $params['privacy'] : 'everybody';

        
$photos $this->photoService->findAlbumPhotoList($album->id$listType$offset$limit$privacy);

        
$list $this->preparePhotos($photos);
        
$e->setData($list);

        return 
$list;
    }

    private function 
findRequestedAlbum$params )
    {
        if ( empty(
$params['albumId']) )
        {
            if ( empty(
$params['userId']) || empty($params['albumTitle']) )
            {
                return 
null;
            }

            
$album $this->albumService->findAlbumByName($params['albumTitle'], $params['userId']);
        }
        else
        {
            
$album $this->albumService->findAlbumById($params['albumId']);
        }

        return 
$album;
    }
    
    public function 
entityPhotosFindPEEP_Event $e )
    {
        
$params $e->getParams();

        if ( empty(
$params['entityId']) || empty($params['entityType']) )
        {
            return 
null;
        }

        
$offset = !empty($params['offset']) ? (int) $params['offset'] : 0;
        
$limit = !empty($params['limit']) ? (int) $params['limit'] : PEEP::getConfig()->getValue('photo''photos_per_page');
        
$status = isset($params["status"]) ? $params["status"] : "approved";
        
$privacy = isset($params['privacy']) || $params['privacy'] === null $params['privacy'] : 'everybody';

        
$photos $this->photoService->findEntityPhotoList($params['entityType'], $params['entityId'], $offset$limit$status$privacy);
        
        
$list $this->preparePhotos($photos);
        
$e->setData($list);

        return 
$list;
    }
    
    public function 
entityPhotosCountPEEP_Event $e )
    {
        
$params $e->getParams();

        if ( empty(
$params['entityId']) || empty($params['entityType']) )
        {
            return 
null;
        }

        
$status = isset($params["status"]) ? $params["status"] : "approved";

        
$count $this->photoService->countEntityPhotos($params['entityType'], $params['entityId'], $status);
        
$e->setData($count);

        return 
$count;
    }
    
    public function 
entityAlbumsDeletePEEP_Event $e )
    {
        
$params $e->getParams();

        if ( empty(
$params['entityId']) || empty($params['entityType']) )
        {
            return 
null;
        }

        
$this->albumService->deleteEntityAlbums($params['entityId'], $params['entityType']);
    }
        
    private function 
prepareAlbums( array $albums )
    {
        if ( !
count($albums) )
        {
            return 
null;
        }

        
$list = array();
        foreach ( 
$albums as $album )
        {
            
$id $album->id;
            
$username BOL_UserService::getInstance()->getUserName($album->userId);

            
$list[$id]['id'] = $id;
            
$list[$id]['name'] = $album->name;
            
$list[$id]['userId'] = $album->userId;
            
$list[$id]['url'] = PEEP::getRouter()->urlForRoute('photo_user_album', array('user' => $username'album' => $album->id));
            
$list[$id]['coverImage'] = PHOTO_BOL_PhotoAlbumCoverDao::getInstance()->getAlbumCoverUrlByAlbumId($album->id);
            
$list[$id]['photoCount'] = $this->albumService->countAlbumPhotos($album->id);
            
$list[$id]['entityType'] = $album->entityType;
            
$list[$id]['entityId'] = $album->entityId;
        }

        return 
$list;
    }

    private function 
preparePhotos( array $photos )
    {
        if ( !
count($photos) )
        {
            return array();
        }

        
$list = array();
        foreach ( 
$photos as $_photo )
        {
            
$photo = (array)$_photo;
            
$dimensions = array();
            
            if ( !empty(
$photo['dimension']) )
            {
                
$dimensions json_decode($photo['dimension'], true);
            }
            
            
$id $photo['id'];
            
$album $this->albumService->findAlbumById($photo['albumId']);
            
$list[$id]['albumId'] = $photo['albumId'];
            
$list[$id]['id'] = $photo['id'];
            
$list[$id]['description'] = $photo['description'];
            
$list[$id]['userId'] = $album->userId;
            
$list[$id]['url'] = PEEP::getRouter()->urlForRoute('view_photo', array('id' => $id));
            
$list[$id]['dimension'] = $dimensions;
            
            
$list[$id]['photoUrl'] = $this->photoService->getPhotoUrlByType($idPHOTO_BOL_PhotoService::TYPE_MAIN$photo['hash'], $photo['dimension']);
            
$list[$id]['previewUrl'] = $this->photoService->getPhotoUrlByType($idPHOTO_BOL_PhotoService::TYPE_PREVIEW$photo['hash'], $photo['dimension']);
            
$list[$id]['smallUrl'] = $this->photoService->getPhotoUrlByType($idPHOTO_BOL_PhotoService::TYPE_SMALL$photo['hash'], $photo['dimension']);
            
$list[$id]['fullscreenUrl'] = $this->photoService->getPhotoUrlByType($idPHOTO_BOL_PhotoService::TYPE_FULLSCREEN$photo['hash'], $photo['dimension']);
            
$list[$id]['originalUrl'] = $this->photoService->getPhotoUrlByType($idPHOTO_BOL_PhotoService::TYPE_ORIGINAL$photo['hash'], $photo['dimension']);
            
$list[$id]['dto'] = $photo;
        }

        return 
$list;
    }


    public function 
initFloatboxPEEP_Event $event )
    {
        static 
$isInitialized FALSE;
        
        if ( 
$isInitialized )
        {
            return;
        }
        
        
$params $event->getParams();
        
$layout = (!empty($params['layout']) && in_array($params['layout'], array('page''floatbox'))) ? $params['layout'] : 'floatbox';
        
        
$document PEEP::getDocument();
        
$plugin PEEP::getPluginManager()->getPlugin('photo');
        
        
$document->addStyleSheet($plugin->getStaticCssUrl() . 'photo_floatbox.css');
        
$document->addScript(PEEP::getPluginManager()->getPlugin('base')->getStaticJsUrl() . 'jquery-ui.min.js');
        
$document->addScript($plugin->getStaticJsUrl() . 'slider.min.js''text/javascript'1000000);
        
$document->addScript($plugin->getStaticJsUrl() . 'utils.js');
        
$document->addScript($plugin->getStaticJsUrl() . 'photo.js');

        
$language PEEP::getLanguage();
        
        
$language->addKeyForJs('photo''tb_edit_photo');
        
$language->addKeyForJs('photo''confirm_delete');
        
$language->addKeyForJs('photo''mark_featured');
        
$language->addKeyForJs('photo''remove_from_featured');
        
$language->addKeyForJs('photo''rating_total');
        
$language->addKeyForJs('photo''rating_your');
        
$language->addKeyForJs('photo''of');
        
$language->addKeyForJs('photo''album');
        
$language->addKeyForJs('base''rate_cmp_owner_cant_rate_error_message');
        
$language->addKeyForJs('base''rate_cmp_auth_error_message');
        
$language->addKeyForJs('photo''slideshow_interval');
        
$language->addKeyForJs('photo''pending_approval');

        
$viewEvent = new PEEP_Event(self::EVENT_GET_PHOTO_VIEW_STATUS$params);
        
PEEP::getEventManager()->trigger($viewEvent);
        
$photoViewStatus $viewEvent->getData();
        
        
$document->addScriptDeclarationBeforeIncludes(
            
UTIL_JsGenerator::composeJsString('
                ;window.photoViewParams = Object.freeze({$params});'
,
                array(
                    
'params' => array(
                        
'ajaxResponder' => PEEP::getRouter()->urlFor('PHOTO_CTRL_Photo''ajaxResponder'),
                        
'rateUserId' => PEEP::getUser()->getId(),
                        
'layout' => $layout,
                        
'isClassic' => (bool)PEEP::getConfig()->getValue('photo''photo_view_classic'),
                        
'urlHome' => PEEP_URL_HOME,
                        
'isDisabled' => empty($photoViewStatus['available']),
                        
'isEnableFullscreen' => (bool)PEEP::getConfig()->getValue('photo''store_fullsize'),
                        
'tagUrl' => PEEP::getRouter()->urlForRoute('view_tagged_photo_list', array('tag' => '-tag-'))
                    )
                )
            )
        );
        
        
$document->addOnloadScript(';window.photoView.init();');
        
        
$cmp = new PHOTO_CMP_PhotoFloatbox($layout$photoViewStatus);
        
$document->appendBody($cmp->render());
        
        
$isInitialized TRUE;
    }

    
/**
     * @param BASE_CLASS_EventCollector $event
     */
    
public function addNewContentItemBASE_CLASS_EventCollector $event )
    {
        
$url PEEP::getEventManager()->call('photo.getAddPhotoURL');

        if ( 
$url !== false )
        {
            
$resultArray = array(
                
BASE_CMP_AddNewContent::DATA_KEY_ICON_CLASS => 'peep_ic_picture',
                
BASE_CMP_AddNewContent::DATA_KEY_URL => 'javascript:' $url '()',
                
BASE_CMP_AddNewContent::DATA_KEY_LABEL => PEEP::getLanguage()->text('photo''upload_photos')
            );

            
$event->add($resultArray);
        }
    }

    
/**
     * @param BASE_CLASS_EventCollector $event
     */
    
public function addQuickLinkBASE_CLASS_EventCollector $event )
    {
        if ( !
PEEP::getUser()->isAuthenticated() )
        {
            return;
        }

        
$service PHOTO_BOL_PhotoAlbumService::getInstance();
        
$userId PEEP::getUser()->getId();
        
$username PEEP::getUser()->getUserObject()->getUsername();

        
$albumCount = (int) $service->countUserAlbums($userIdnulltrue);

        if ( 
$albumCount )
        {
            
$event->add(array(
                
BASE_CMP_QuickLinksWidget::DATA_KEY_LABEL => PEEP::getLanguage()->text('photo''my_albums'),
                
BASE_CMP_QuickLinksWidget::DATA_KEY_URL => PEEP::getRouter()->urlForRoute('photo_user_albums', array('user' => $username)),
                
BASE_CMP_QuickLinksWidget::DATA_KEY_COUNT => $albumCount,
                
BASE_CMP_QuickLinksWidget::DATA_KEY_COUNT_URL => PEEP::getRouter()->urlForRoute('photo_user_albums', array('user' => $username))
            ));
        }
    }

    
/**
     * @param BASE_CLASS_EventCollector $event
     */
    
public function adsEnabledBASE_CLASS_EventCollector $event )
    {
        
$event->add('photo');
    }

    
/**
     * @param BASE_CLASS_EventCollector $event
     */
    
public function addAuthLabelsBASE_CLASS_EventCollector $event )
    {
        
$language PEEP::getLanguage();
        
$event->add(
            array(
                
'photo' => array(
                    
'label' => $language->text('photo''auth_group_label'),
                    
'actions' => array(
                        
'upload' => $language->text('photo''auth_action_label_upload'),
                        
'view' => $language->text('photo''auth_action_label_view'),
                        
'add_comment' => $language->text('photo''auth_action_label_add_comment')
                    )
                )
            )
        );
    }

    
/**
     * @param PEEP_Event $event
     */
    
public function onUserUnregisterPEEP_Event $event )
    {
        
$params $event->getParams();

        if ( !isset(
$params['deleteContent']) || !(bool) $params['deleteContent'] )
        {
            return;
        }

        
$userId = (int) $params['userId'];

        if ( 
$userId )
        {
            
PHOTO_BOL_PhotoAlbumService::getInstance()->deleteUserAlbums($userId);
        }
    }

    
/**
     * @param BASE_CLASS_EventCollector $event
     */
    
public function addPrivacyActionBASE_CLASS_EventCollector $event )
    {
        
$language PEEP::getLanguage();

        
$action = array(
            
'key' => 'photo_view_album',
            
'pluginKey' => 'photo',
            
'label' => $language->text('photo''privacy_action_view_album'),
            
'description' => '',
            
'defaultValue' => 'everybody'
        
);

        
$event->add($action);
    }

    
/**
     * @param PEEP_Event $e
     */
    
public function onChangePrivacyPEEP_Event $e )
    {
        
$params $e->getParams();
        
$userId = (int) $params['userId'];

        
$actionList $params['actionList'];

        if ( empty(
$actionList['photo_view_album']) )
        {
            return;
        }

        
PHOTO_BOL_PhotoAlbumService::getInstance()->updatePhotosPrivacy($userId$actionList['photo_view_album']);
    }

    
/**
     * @param BASE_CLASS_EventCollector $e
     */
    
public function collectNotificationActionsBASE_CLASS_EventCollector $e )
    {
        
$e->add(array(
            
'section' => 'photo',
            
'action' => 'photo-add_comment',
            
'sectionIcon' => 'peep_ic_picture',
            
'sectionLabel' => PEEP::getLanguage()->text('photo''email_notifications_section_label'),
            
'description' => PEEP::getLanguage()->text('photo''email_notifications_setting_comment'),
            
'selected' => true
        
));
    }

    
/**
     * @param PEEP_Event $event
     */
    
public function notifyOnNewCommentPEEP_Event $event )
    {
        
$params $event->getParams();

        if ( empty(
$params['entityType']) || $params['entityType'] !== 'photo_comments' )
        {
            return;
        }

        
$entityId $params['entityId'];
        
$userId $params['userId'];
        
$commentId $params['commentId'];

        
$photoService PHOTO_BOL_PhotoService::getInstance();
        
$userService BOL_UserService::getInstance();
        
$ownerId $photoService->findPhotoOwner($entityId);

        if ( 
$ownerId != $userId )
        {
            
$params = array(
                
'pluginKey' => 'photo',
                
'entityType' => 'photo_add_comment',
                
'entityId' => $commentId,
                
'action' => 'photo-add_comment',
                
'userId' => $ownerId,
                
'time' => time()
            );

            
$comment BOL_CommentService::getInstance()->findComment($commentId);
            
$url PEEP::getRouter()->urlForRoute('view_photo', array('id' => $entityId));
            
$avatars BOL_AvatarService::getInstance()->getDataForUserAvatars(array($userId));

            
$data = array(
                
'avatar' => $avatars[$userId],
                
'string' => array(
                    
'key' => 'photo+email_notifications_comment',
                    
'vars' => array(
                        
'userName' => $userService->getDisplayName($userId),
                        
'userUrl' => $userService->getUserUrl($userId),
                        
'photoUrl' => $url
                    
)
                ),
                
'content' => $comment->getMessage(),
                
'url' => $url,
                
'contentImage' => $photoService->getPhotoUrlByType($entityIdPHOTO_BOL_PhotoService::TYPE_SMALL)
            );

            
$event = new PEEP_Event('notifications.add'$params$data);
            
PEEP::getEventManager()->trigger($event);
        }
    }
    
    public function 
feedBeforeStatusUpdatePEEP_Event $e )
    {
        
$params $e->getParams();

        if ( 
$params['type'] == 'photo' )
        {
            
$status BOL_AuthorizationService::getInstance()->getActionStatus('photo''upload');

            if ( 
$status['status'] != BOL_AuthorizationService::STATUS_AVAILABLE)
            {
                return;
            }

            
$userId PEEP::getUser()->getId();
            
$url $params['data']['url'];
            
            
$tmpFile PEEP::getPluginManager()->getPlugin('photo')->getPluginFilesDir() . md5($userId time()) . basename($url);
            
copy($url$tmpFile);
            
            if ( !
file_exists($tmpFile) )
            {
                return;
            }
            
            
$albumName PEEP::getLanguage()->text('photo''cnews_album');
            
            
$event = new PEEP_Event(self::EVENT_CREATE_USER_ALBUM, array('userId' => $userId'name' => $albumName));
            
PEEP::getEventManager()->trigger($event);
            
            
$p $event->getData();
            
            if ( empty(
$p['ablumId']) )
            {
                @
unlink($tmpFile);
                
                return;
            }
            
            
PHOTO_BOL_PhotoTemporaryService::getInstance()->deleteUserTemporaryPhotos($userId);
            
            
$album PHOTO_BOL_PhotoAlbumService::getInstance()->findAlbumById($p['ablumId']);
            
$desc $params['status'];
            
            if ( (
$tmpId PHOTO_BOL_PhotoTemporaryService::getInstance()->addTemporaryPhoto($tmpFile$userId)) )
            {
                
$photo PHOTO_BOL_PhotoTemporaryService::getInstance()->moveTemporaryPhoto($tmpId$album->id$desc);
                
PHOTO_BOL_PhotoTemporaryService::getInstance()->deleteTemporaryPhoto($tmpId);
                
                
BOL_AuthorizationService::getInstance()->trackAction('photo''upload'NULL, array('checkInterval' => FALSE));
                
                
$this->photoService->createAlbumCover($album->id, array($photo));

                
$albumUrl PEEP::getRouter()->urlForRoute('photo_user_album', array(
                    
'user' => BOL_UserService::getInstance()->getUserName($album->userId),
                    
'album' => $album->id
                
));

                
$data = array(
                    
'photoIdList' => array($photo->id),
                    
'string' => array(
                        
'key' => 'photo+feed_single_description',
                        
'vars' => array(
                            
'number' => 1,
                            
'albumUrl' => $albumUrl,
                            
'albumName' => $album->name
                        
)
                    )
                );

                if ( !empty(
$photo->description) )
                {
                    
$data['status'] = $photo->description;
                }
                
                
$eventParams = array(
                    
'pluginKey' => 'photo',
                    
'entityType' => 'photo_comments',
                    
'entityId' => $photo->id,
                    
'userId' => $album->userId,
                    
'postOnUserFeed' => false,
                    
'feedType' => $params['feedType'],
                    
'feedId' => $params['feedId']
                );
                
                if ( !empty(
$params['visibility']) )
                {
                    
$eventParams['visibility'] = $params['visibility'];
                }
                
                
PEEP::getEventManager()->trigger(new PEEP_Event('feed.action'$eventParams$data));

                
$movedArray = array(array('addTimestamp' => time(), 'photoId' => $photo->id'description' => $photo->description));
                
PEEP::getEventManager()->trigger(new PEEP_Event(PHOTO_CLASS_EventHandler::EVENT_ON_PHOTO_ADD$movedArray));

                
$status $this->photoService->findPhotoById($photo->id)->status;

                if ( 
$status == PHOTO_BOL_PhotoDao::STATUS_APPROVAL )
                {
                    
$e->setData(array('message' => PEEP::getLanguage()->text('photo''photo_uploaded_pending_approval')));
                }
                else
                {
                    
$e->setData(array('entityType' => 'photo_comments''entityId' => $photo->id));
                }
            }
            
            @
unlink($tmpFile);
        }
    }

    public function 
feedOnEntityActionPEEP_Event $e )
    {
        
$params $e->getParams();
        
$data $e->getData();

        if ( !
in_array($params['entityType'], array('photo_comments''multiple_photo_upload')) )
        {
            return;
        }

        
$photoService PHOTO_BOL_PhotoService::getInstance();
        
$albumService PHOTO_BOL_PhotoAlbumService::getInstance();
        
$photoId = !empty($data['photoIdList']) ? $data['photoIdList'][0] : $params['entityId'];
        
$photo $photoService->findPhotoById($photoId);
        if ( !
$photo )
        {
            return;
        }

        
$album $albumService->findAlbumById($photo->albumId);
        if ( !
$album )
        {
            return;
        }

        
$info = array('route' => array(
            
'textKey' => 'photo+album',
            
'label' =>  UTIL_String::truncate(strip_tags($album->name), 100'...'),
            
'routeName' => 'photo_user_album',
            
'vars' => array(
                
'user' => BOL_UserService::getInstance()->getUserName($params['userId']),
                
'album' => $album->id
            
)
        ));

        
$entityType $params['entityType'];
        if ( 
$params['entityType'] == 'multiple_photo_upload' && count($data['photoIdList']) == )
        {
            
$data['params'] = array(
                
'entityType' => 'photo_comments',
                
'entityId' => $data['photoIdList'][0],
                
'merge' => array(
                    
'entityType' => 'multiple_photo_upload',
                    
'entityId' => $params['entityId']
                )
            );
            
$entityType 'photo_comments';
        }
        
        
$vars = array();
        
        if ( !empty(
$data['status']) )
        {
            
$vars['status'] = $data['status'];
        }
        
        
$actionFormat null;
        
        if ( isset(
$data["content"]) && is_array($data["content"]) )
        {
            
$vars = empty($data["content"]["vars"]) ? array() : $data["content"]["vars"];
            
$actionFormat = empty($data["content"]["format"]) ? null $data["content"]["format"];
        }

        switch ( 
$entityType )
        {
            case 
'multiple_photo_upload':
                
$format 'image_list';
                
$photoIdList array_slice($data['photoIdList'], 0PHOTO_BOL_PhotoService::FORMAT_LIST_LIMIT);
                
$list = array();
                
                foreach ( 
$photoIdList as $id )
                {
                    
$list[] = array(
                        
"image" => $photoService->getPhotoUrlByType($idPHOTO_BOL_PhotoService::TYPE_PREVIEW),
                        
"url" => array("routeName" => "view_photo""vars" => array('id' => $id))
                    );
                }
                
                
$vars["list"] = $list;
                
$data['features'] = array('likes');
                break;

            case 
'photo_comments':
                
$format 'image';
                
                if ( !empty(
$photo->dimension) )
                {
                    
$type PHOTO_BOL_PhotoService::TYPE_PREVIEW;
                }
                else
                {
                    
$type PHOTO_BOL_PhotoService::TYPE_MAIN;
                }
                
                
$vars["image"] = $photoService->getPhotoUrlByType($photo->id$type$photo->hash, !empty($photo->dimension) ? $photo->dimension FALSE);
                
$vars["url"] = array("routeName" => "view_photo""vars" => array('id' => $photoId));
                break;

            default:
                return;
        }

        
$vars['info'] = $info;
        
        if ( !empty(
$actionFormat) )
        {
            
$format $actionFormat;
        }
        
        
$data['content'] = array('format' => $format'vars' => $vars);
        
        
$data['view'] = array('iconClass' => 'peep_ic_picture');

        
$e->setData($data);
    }
    
    
/**
     * @param PEEP_Event $event
     */
    
public function feedOnItemRenderPEEP_Event $event )
    {
        
$params $event->getParams();
        
$data $event->getData();
        
$autoId $params['autoId'];
        
$dimension = array();

        switch ( 
$params['action']['entityType'] )
        {
            case 
'photo_comments':
                
$photoId = !empty($data['photoIdList']) ? $data['photoIdList'][0] : $params['action']['entityId'];
                
                if ( (
$photo $this->photoService->findPhotoById($photoId)) !== NULL && !empty($photo->dimension) )
                {
                    
$dimension[$photoId] = json_decode($photo->dimension);
                }
                
                
PEEP::getDocument()->addOnloadScript(
                    
UTIL_JsGenerator::composeJsString('$(".peep_cnews_item_picture a", "#" + {$autoId}).on("click", function( event )
                        {
                            event.preventDefault();
                            var dimension = {$dimension}, _data = {}, photoId = {$photoId};

                            if ( dimension.hasOwnProperty(photoId) && dimension[photoId].main )
                            {
                                _data.main = dimension[photoId].main;
                            }
                            else
                            {
                                var img = $(this).find("img")[0];
                                _data.main = [img.naturalWidth, img.naturalHeight];
                            }

                            _data.mainUrl = {$url};
                            window.photoView.setId(photoId, "latest", null, _data, {$photo});
                        });'
,
                        array(
                            
'autoId' => $autoId,
                            
'dimension' => $dimension,
                            
'photoId' => $photoId,
                            
'url' => $this->photoService->getPhotoUrlByType($photo->idPHOTO_BOL_PhotoService::TYPE_PREVIEW$photo->hash, !empty($photo->dimension) ? $photo->dimension FALSE),
                            
'photo' => array(
                                
'id' => $photo->id,
                                
'albumId' => $photo->albumId
                            
)
                        )
                    )
                );
                break;

            case 
'multiple_photo_upload':
                
$photos = array();

                if ( !empty(
$params['action']['format']) )
                {
                    
$photoList PHOTO_BOL_PhotoDao::getInstance()->findByIdList(array_slice($data['photoIdList'], 0PHOTO_BOL_PhotoService::FORMAT_LIST_LIMIT));

                    foreach ( 
$photoList as $photo )
                    {
                        
$photos[$photo->id] = array(
                            
'id' => $photo->id,
                            
'albumId' => $photo->albumId
                        
);

                        if ( !empty(
$photo->dimension) )
                        {
                            
$dimension[$photo->id] = json_decode($photo->dimension);
                        }
                    }
                }
                
                
PEEP::getDocument()->addOnloadScript(
                    
UTIL_JsGenerator::composeJsString('$(".peep_cnews_content a[class!=photo_view_more]", "#" + {$autoId}).on("click", function( event )
                        {
                            event.preventDefault();
                            var dimension = {$dimension}, _data = {};
                            var match = this.pathname.match(/d+$/);
                            var photoId = +match[0];
                            var url = $(this).attr("data-image");
                            var photos = {$photos};

                            if ( dimension.hasOwnProperty(photoId) && dimension[photoId].main )
                            {
                                _data.main = dimension[photoId].main;
                            }
                            else
                            {
                                var img = new Image();
                                img.src = url;
                                _data.main = [img.naturalWidth, img.naturalHeight];
                            }

                            _data.mainUrl = url;
                            window.photoView.setId(photoId, "latest", null, _data, photos[photoId] );
                        });'
,
                        array(
                            
'autoId' => $autoId,
                            
'dimension' => $dimension,
                            
'photos' => $photos
                        
)
                    )
                );
                break;

            default: return;
        }
        
        
PEEP::getEventManager()->trigger(new PEEP_Event(self::EVENT_INIT_FLOATBOX));
    }
    
    public function 
onBeforeAlbumDeletePEEP_Event $event )
    {
        
$params $event->getParams();
        
        if ( empty(
$params['id']) || ($album $this->albumService->findAlbumById($params['id'])) === NULL )
        {
            return;
        }

        foreach ( 
$this->photoService->findDistinctPhotoUploadKeyByAlbumId($album->id) as $photo )
        {
            
$this->photoService->feedDeleteItem('photo_comments'$photo->id);
            
$this->photoService->feedDeleteItem('multiple_photo_upload'$photo->uploadKey);
        }
        
        
PHOTO_BOL_PhotoAlbumCoverDao::getInstance()->deleteCoverByAlbumId($album->id);
        
PHOTO_BOL_SearchService::getInstance()->deleteSearchItem(PHOTO_BOL_SearchService::ENTITY_TYPE_ALBUM$album->id);
    }

    public function 
onBeforePhotoDeletePEEP_Event $event )
    {
        
$params $event->getParams();

        if ( empty(
$params['id']) || ($photo $this->photoService->findPhotoById($params['id'])) === NULL || ($album $this->albumService->findAlbumById($photo->albumId)) == NULL )
        {
            return;
        }
        
        if ( 
$this->albumService->isCnewsAlbum($album) )
        {
            
$this->photoService->feedDeleteItem('photo_comments'$photo->id);
            
            return;
        }

        if ( 
$photo->uploadKey )
        {
            
$this->photoService->feedDeleteItem('photo_comments'$photo->id);
            
$this->photoService->feedDeleteItem('multiple_photo_upload'$photo->uploadKey);
            
            
$photos $this->photoService->getPhotoListByUploadKey($photo->uploadKey, array($photo->id));

            if ( empty(
$photos) )
            {
                return;
            }
            
            if ( 
count($photos) === )
            {
                
$this->photoService->triggerCnewsEventOnSinglePhotoAdd($album$photos[0], FALSE);
            }
            else
            {
                
$this->photoService->triggerCnewsEventOnMultiplePhotosAdd($album$photosFALSE);
            }
        }
    }
    
    public function 
onBeforeMultiplePhotoDeletePEEP_Event $event )
    {
        
$params $event->getParams();
        
        if ( empty(
$params['albumId']) || empty($params['photoIdList']) || ($album $this->albumService->findAlbumById($params['albumId'])) === NULL )
        {
            return;
        }
        
        if ( 
$this->albumService->isCnewsAlbum($album) )
        {
            foreach ( 
$params['photoIdList'] as $photoId )
            {
                
$this->photoService->feedDeleteItem('photo_comments'$photoId);
            }
            
            return;
        }
        
        
$photo $this->photoService->findPhotoById($params['photoIdList'][0]);

        
$this->photoService->feedDeleteItem('photo_comments'$photo->id);
        
$this->photoService->feedDeleteItem('multiple_photo_upload'$photo->uploadKey);

        
$photos PHOTO_BOL_PhotoDao::getInstance()->getAlbumAllPhotos($album->id$params['photoIdList']);
        
        if ( empty(
$photos) )
        {
            return;
        }
        
        if ( 
count($photos) === )
        {
            
$this->photoService->triggerCnewsEventOnSinglePhotoAdd($album$photos[0], FALSE);
        }
        else
        {
            
$this->photoService->triggerCnewsEventOnMultiplePhotosAdd($album$photosFALSE);
        }
    }

    
/**
     * @param BASE_CLASS_EventCollector $event
     */
    
public function feedCollectConfigurableActivityBASE_CLASS_EventCollector $event )
    {
        
$language PEEP::getLanguage();
        
$event->add(array(
            
'label' => $language->text('photo''feed_content_label'),
            
'activity' => array('*:photo_comments''*:multiple_photo_upload')
        ));
    }

    
/**
     * @param BASE_CLASS_EventCollector $event
     */
    
public function feedCollectPrivacyBASE_CLASS_EventCollector $event )
    {
        
$event->add(array('create:photo_comments,create:multiple_photo_upload''photo_view_album'));
    }

    
/**
     * @param PEEP_Event $event
     */
    
public function feedAfterCommentAddPEEP_Event $event )
    {
        
$params $event->getParams();

        if ( 
$params['entityType'] != 'photo_comments' )
        {
            return;
        }

        
$service PHOTO_BOL_PhotoService::getInstance();
        
$photo $service->findPhotoById($params['entityId']);
        
$album PHOTO_BOL_PhotoAlbumService::getInstance()->findAlbumById($photo->albumId);
        
$userId $album->userId;

        if ( 
$userId == $params['userId'] )
        {
            
$string = array('key' => 'photo+feed_activity_owner_photo_string');
        }
        else
        {
            
$userName BOL_UserService::getInstance()->getDisplayName($userId);
            
$userUrl BOL_UserService::getInstance()->getUserUrl($userId);
            
$userEmbed '<a href="' $userUrl '">' $userName '</a>';
            
$string = array('key' => 'photo+feed_activity_photo_string''vars' => array('user' => $userEmbed));
        }

        
PEEP::getEventManager()->trigger(new PEEP_Event('feed.activity', array(
            
'activityType' => 'comment',
            
'activityId' => $params['commentId'],
            
'entityId' => $params['entityId'],
            
'entityType' => $params['entityType'],
            
'userId' => $params['userId'],
            
'pluginKey' => 'photo'
        
), array(
            
'string' => $string
        
)));
    }

    
/**
     * @param PEEP_Event $event
     */
    
public function feedAfterLikeAddedPEEP_Event $event )
    {
        
$params $event->getParams();

        if ( 
$params['entityType'] != 'photo_comments' )
        {
            return;
        }

        
$service PHOTO_BOL_PhotoService::getInstance();
        
$photo $service->findPhotoById($params['entityId']);
        
$album PHOTO_BOL_PhotoAlbumService::getInstance()->findAlbumById($photo->albumId);
        
$userId $album->userId;

        
$userName BOL_UserService::getInstance()->getDisplayName($userId);
        
$userUrl BOL_UserService::getInstance()->getUserUrl($userId);
        
$userEmbed '<a href="' $userUrl '">' $userName '</a>';

        if ( 
$params['userId'] == $userId )
        {
            
$string = array('key' => 'photo+feed_activity_owner_photo_like');
        }
        else
        {
            
$string = array('key' => 'photo+feed_activity_photo_string_like''vars' => array('user' => $userEmbed));
        }

        
PEEP::getEventManager()->trigger(new PEEP_Event('feed.activity', array(
            
'activityType' => 'like',
            
'activityId' => $params['userId'],
            
'entityId' => $params['entityId'],
            
'entityType' => $params['entityType'],
            
'userId' => $params['userId'],
            
'pluginKey' => 'photo'
        
), array(
            
'string' => $string
        
)));
    }

    public function 
sosialSharingGetPhotoInfoPEEP_Event $event )
    {
        
$params $event->getParams();
        
$data $event->getData();
        
$service PHOTO_BOL_PhotoService::getInstance();

        
$data['display'] = false;
        
        if ( empty(
$params['entityId']) )
        {
            return;
        }
        
        if ( 
$params['entityType'] == 'photo' )
        {
            if ( !
BOL_AuthorizationService::getInstance()->isActionAuthorizedForGuest('photo''view') )
            {
                
$event->setData($data);
                return;
            }

            
$photo $service->findPhotoById($params['entityId']);
            
$data['display'] = $photo->privacy == 'everybody';

            
$event->setData($data);
        }
        else if ( 
$params['entityType'] == 'photo_album' )
        {
            if ( !
BOL_AuthorizationService::getInstance()->isActionAuthorizedForGuest('photo''view') )
            {
                
$event->setData($data);
                return;
            }

            
$album PHOTO_BOL_PhotoAlbumService::getInstance()->findAlbumById($params['entityId']);
            
$list $service->findAlbumPhotoList($params['entityId'], 'latest'0500);

            foreach ( 
$list as $photo )
            {
                if ( 
$photo['privacy'] == 'everybody' )
                {
                    
$data['image'] = $service->getPhotoUrl($photo['id']);
                    
$data['title'] = $album->name;
                    
$data['display'] = true;
                    break;
                }
            }
            
            
$event->setData($data);
        }
    }
    
    public function 
onBeforePhotoMovePEEP_Event $event )
    {
        
$params $event->getParams();
        
        if ( empty(
$params['fromAlbum']) || empty($params['photoIdList']) )
        {
            return;
        }
        
        
$fromAlbum $this->albumService->findAlbumById($params['fromAlbum']);
        
$fromAlbumLastPhoto PHOTO_BOL_PhotoDao::getInstance()->getLastPhoto($params['fromAlbum']);
        
        
$toAlbum $this->albumService->findAlbumById($params['toAlbum']);
        
$toAlbumLastPhoto PHOTO_BOL_PhotoDao::getInstance()->getLastPhoto($params['toAlbum']);
        
        if ( 
$fromAlbumLastPhoto )
        {
            
$this->photoService->feedDeleteItem('photo_comments'$fromAlbumLastPhoto->id);
            
$this->photoService->feedDeleteItem('multiple_photo_upload'$fromAlbumLastPhoto->uploadKey);
        }
        
        if ( 
$toAlbumLastPhoto )
        {
            
$this->photoService->feedDeleteItem('photo_comments'$toAlbumLastPhoto->id);
            
$this->photoService->feedDeleteItem('multiple_photo_upload'$toAlbumLastPhoto->uploadKey);
        }
        
        if ( empty(
$params['toAlbum']) )
        {
            
$photoIdList PHOTO_BOL_PhotoDao::getInstance()->findPhotoIdListByAlbumId($fromAlbum->id);
            
$count count($photoIdList);
            
$user BOL_UserService::getInstance()->findUserById($fromAlbum->userId);
            
$albumUrl PEEP::getRouter()->urlForRoute('photo.user_photos', array('user' => $user->username));
            
            
$event = new PEEP_Event('feed.action', array(
                
'pluginKey' => 'photo',
                
'entityType' => $count === 'photo_comments' 'multiple_photo_upload',
                
'entityId' => $fromAlbumLastPhoto->uploadKey,
                
'userId' => $user->id
            
), array(
                
'photoIdList' => $photoIdList,
                
'string' => array(
                    
'key' => 'photo+feed_move_photo_descriptions',
                    
'vars' => array('number' => $count'albumUrl' => $albumUrl)
                ),
                
'features' => array('likes'),
                
'content' => '',
                
'view' => array('iconClass' => 'peep_ic_picture')
            ));

            
PEEP::getEventManager()->trigger($event);
        }
        else
        {
            
$fromPhotoIdList PHOTO_BOL_PhotoDao::getInstance()->findPhotoIdListByAlbumId($fromAlbum->id$params['photoIdList']);
            
            if ( empty(
$fromPhotoIdList) )
            {
                
$photo $this->photoService->findPhotoById($params['photoIdList'][0]);

                
$this->photoService->feedDeleteItem('photo_comments'$photo->id);
                
$this->photoService->feedDeleteItem('photo_comments'$photo->uploadKey);
                
$this->photoService->feedDeleteItem('multiple_photo_upload'$photo->uploadKey);
            }
            else
            {
                
$fromCount count($fromPhotoIdList);
                
$fromEntityType $fromCount === 'photo_comments' 'multiple_photo_upload';
                
$fromAlbumUrl PEEP::getRouter()->urlForRoute('photo_user_album', array(
                    
'user' => BOL_UserService::getInstance()->getUserName($fromAlbum->userId),
                    
'album' => $fromAlbum->id
                
));

                
$event = new PEEP_Event('feed.action', array(
                    
'pluginKey' => 'photo',
                    
'entityType' => $fromEntityType,
                    
'entityId' => $fromAlbumLastPhoto->uploadKey,
                    
'userId' => $fromAlbum->userId
                
), array(
                    
'photoIdList' => $fromPhotoIdList,
                    
'string' => array(
                        
'key' => 'photo+feed_multiple_descriptions',
                        
'vars' => array(
                            
'number' => $fromCount,
                            
'albumUrl' => $fromAlbumUrl,
                            
'albumName' => $fromAlbum->name
                        
)
                    ),
                    
'features' => array('likes'),
                    
'content' => '',
                    
'view' => array('iconClass' => 'peep_ic_picture')
                ));

                
PEEP::getEventManager()->trigger($event);
            }
            
            if ( 
$toAlbumLastPhoto )
            {
                
$toPhotoIdList array_merge(
                    
PHOTO_BOL_PhotoDao::getInstance()->findPhotoIdListByAlbumId($toAlbum->id),
                    
$params['photoIdList']
                );
                
$toAlbumUrl PEEP::getRouter()->urlForRoute('photo_user_album', array(
                    
'user' => BOL_UserService::getInstance()->getUserName($toAlbum->userId),
                    
'album' => $toAlbum->id
                
));

                
$event = new PEEP_Event('feed.action', array(
                    
'pluginKey' => 'photo',
                    
'entityType' => 'multiple_photo_upload',
                    
'entityId' => $toAlbumLastPhoto->uploadKey,
                    
'userId' => $toAlbum->userId
                
), array(
                    
'photoIdList' => $toPhotoIdList,
                    
'string' => array(
                        
'key' => 'photo+feed_multiple_descriptions',
                        
'vars' => array(
                            
'number' => count($toPhotoIdList),
                            
'albumUrl' => $toAlbumUrl,
                            
'albumName' => $toAlbum->name
                        
)
                    ),
                    
'features' => array('likes'),
                    
'content' => '',
                    
'view' => array('iconClass' => 'peep_ic_picture')
                ));

                
PEEP::getEventManager()->trigger($event);
            }
        }
    }
    
    public function 
onAfterPhotoMovePEEP_Event $event )
    {
        
$params $event->getParams();
        
        if ( empty(
$params['fromAlbum']) || empty($params['toAlbum']) )
        {
            return;
        }
        
        
$fromAlbumId = (int)$params['fromAlbum'];
        
$toAlbumId = (int)$params['toAlbum'];
        
$coverDao PHOTO_BOL_PhotoAlbumCoverDao::getInstance();
        
        
$fromCover $coverDao->findByAlbumId($fromAlbumId);
        
        if ( 
$fromCover === NULL || (int)$fromCover->auto )
        {
            
$coverDao->deleteCoverByAlbumId($fromAlbumId);

            
$this->photoService->createAlbumCover($fromAlbumIdarray_reverse(PHOTO_BOL_PhotoDao::getInstance()->getAlbumAllPhotos($fromAlbumId)));
        }
        
        
$toCover $coverDao->findByAlbumId($toAlbumId);
        
        if ( 
$toCover === NULL || (int)$toCover->auto )
        {
            
$coverDao->deleteCoverByAlbumId($toAlbumId);

            
$this->photoService->createAlbumCover($toAlbumIdarray_reverse(PHOTO_BOL_PhotoDao::getInstance()->getAlbumAllPhotos($toAlbumId)));
        }
    }

    public function 
addPhotoURLPEEP_Event $event )
    {
        
$id uniqid('addNewPhoto');
        
        
$params $event->getParams();
        
$albumId = !empty($params['albumId']) ? (int)$params['albumId'] : null;
        
$albumName = !empty($params['albumName']) ? $params['albumName'] : null;
        
$albumDescription = !empty($params['albumDescription']) ? $params['albumDescription'] : null;
        
$url = !empty($params['url']) ? $params['url'] : null;
        
$data $event->getData();

        
$extraEventData PEEP::getEventManager()->trigger(new PEEP_Event(self::EVENT_GET_UPLOAD_DATA$params$data));
        
        if ( !
PEEP::getUser()->isAuthorized('photo''upload') )
        {
            
$status BOL_AuthorizationService::getInstance()->getActionStatus('photo''upload');

            
PEEP::getDocument()->addScriptDeclaration(
                
UTIL_JsGenerator::composeJsString(
                    
';window[{$addNewPhoto}] = function()
                    {
                        PEEP.authorizationLimitedFloatbox({$msg});
                    }'
,
                    array(
                        
'addNewPhoto' => $id,
                        
'msg' => $status['msg']
                    )
                )
            );
        }
        else
        {
            
PEEP::getDocument()->addScriptDeclaration(
                
UTIL_JsGenerator::composeJsString(';window[{$addNewPhoto}] = function()
                    {
                        var ajaxUploadPhotoFB = PEEP.ajaxFloatBox("PHOTO_CMP_AjaxUpload", [{$albumId}, {$albumName}, {$albumDescription}, {$url}, {$data}], {
                            title: {$title},
                            width: "746px"
                        });

                        ajaxUploadPhotoFB.bind("close", function()
                        {
                            if ( ajaxPhotoUploader.isHasData() )
                            {
                                if ( confirm({$close_alert}) )
                                {
                                    PEEP.trigger("photo.onCloseUploaderFloatBox");
                                    return true;
                                }
                                
                                return false;
                            }
                            else
                            {
                                PEEP.trigger("photo.onCloseUploaderFloatBox");
                            }
                        });
                    }'
, array(
                        
'addNewPhoto' => $id,
                        
'albumId' => $albumId,
                        
'albumName' => $albumName,
                        
'albumDescription' => $albumDescription,
                        
'url' => $url,
                        
'data' => $extraEventData->getData(),
                        
'title' => PEEP::getLanguage()->text('photo''upload_photos'),
                        
'close_alert' => PEEP::getLanguage()->text('photo''close_alert')
                    )
                )
            );
        }
        
        return 
$id;
    }
    
    public function 
addSearchDataPEEP_Event $event )
    {
        
$params $event->getParams();
        
        if ( empty(
$params['entityId']) || empty($params['entityType']) || empty($params['content']) )
        {
            return;
        }
        
        
PHOTO_BOL_SearchService::getInstance()->addSearchData($params['entityId'], $params['entityType'], $params['content']);
    }
    
    public function 
backgroundLoadPhotoPEEP_Event $event )
    {
        
$params $event->getParams();
        
        if ( empty(
$params['photoIdList']) )
        {
            return;
        }
        
        
$photoList PHOTO_BOL_PhotoDao::getInstance()->findByIdList($params['photoIdList']);
        
$js '$(window).load(function(){';
        
        foreach ( 
$photoList as $photo )
        {
            if ( 
$photo->hasFullsize )
            {
                
$js .= ';new Image().src = ' json_encode($this->photoService->getPhotoFullsizeUrl($photo->id$photo->hash));
            }
            else
            {
                
$js .= ';new Image().src = ' json_encode($this->photoService->getPhotoUrl($photo->idFALSE$photo->hash));
            }
        }
        
        
$js .= '});';
        
        
PEEP::getDocument()->addScriptDeclaration($js);
    }

    public function 
collectAlbumsForAvatarBASE_CLASS_EventCollector $e )
    {
        if ( !
PEEP::getUser()->isAuthenticated() )
        {
            return;
        }

        
$params $e->getParams();
        
$userId PEEP::getUser()->getId();

        
$total $this->albumService->countUserAlbums($userId);
        
$albums $this->albumService->findUserAlbums($userId0$total);

        if ( !
$albums )
        {
            return;
        }

        foreach ( 
$albums as $album )
        {
            
$photoCount $this->photoService->countAlbumPhotos($album->id, array());
            if ( !
$photoCount )
            {
                continue;
            }

            
$photos $this->photoService->getAlbumPhotos($album->id1$params['limit']);

            
$list = array();
            foreach ( 
$photos as $photo )
            {
                
$list[] = array(
                    
'id' => $photo['id'],
                    
'entityId' => $album->id,
                    
'entityType' => 'photo_album',
                    
'url' => $photo['url'],
                    
'bigUrl' => $this->photoService->getPhotoUrlByType($photo['id'], PHOTO_BOL_PhotoService::TYPE_MAIN$photo['dto']->hash$photo['dto']->dimension)
                );
            }

            
$section = array(
                
'entityId' => $album->id,
                
'entityType' => 'photo_album',
                
'label' => $album->name,
                
'count' => $photoCount,
                
'list' => $list
            
);

            
$e->add($section);
        }
    }

    public function 
collectAlbumPhotosForAvatarBASE_CLASS_EventCollector $e )
    {
        if ( !
PEEP::getUser()->isAuthenticated() )
        {
            return;
        }

        
$params $e->getParams();

        if ( 
$params['entityType'] != 'photo_album' )
        {
            return;
        }

        
$albumId $params['entityId'];
        
$page floor($params['offset'] / $params['limit']) + 1;

        
$photos $this->photoService->getAlbumPhotos($albumId$page$params['limit']);

        if ( !
$photos )
        {
            return;
        }

        
$list = array();
        foreach ( 
$photos as $photo )
        {
            
$list[] = array(
                
'id' => $photo['id'],
                
'url' => $photo['url'],
                
'bigUrl' => $this->photoService->getPhotoUrlByType($photo['id'], PHOTO_BOL_PhotoService::TYPE_MAIN$photo['dto']->hash$photo['dto']->dimension)
            );
        }

        
$section = array(
            
'count' => $this->photoService->countAlbumPhotos($albumId, array()),
            
'list' => $list
        
);

        
$e->add($section);
    }

    public function 
getPhotoForAvatarPEEP_Event $e )
    {
        
$params $e->getParams();

        if ( 
$params['entityType'] == 'photo_album' )
        {
            
$id $params['id'];
            
$photo $this->photoService->findPhotoById($id);

            if ( 
$photo )
            {
                
$type = (bool)$photo->hasFullsize PHOTO_BOL_PhotoService::TYPE_ORIGINAL PHOTO_BOL_PhotoService::TYPE_MAIN;

                
$data = array(
                    
'url' => $this->photoService->getPhotoUrlByType($photo->id$type$photo->hash$photo->dimension),
                    
'path' => $this->photoService->getPhotoPath($photo->id$photo->hash$type)
                );

                
$e->setData($data);

                return 
$data;
            }
        }
    }

    public function 
onUpdateContentPEEP_Event $event )
    {
        
$params $event->getParams();

        if ( empty(
$params['id']) )
        {
            return;
        }

        
$this->photoService->updateFeedEntity($params['id']);
    }

    public function 
getPhotoViewStatusPEEP_Event $event )
    {
        
$params $event->getParams();
        
$modPermissions PEEP::getUser()->isAuthorized('photo');

        if ( 
$modPermissions || !empty($params['isOwner']) )
        {
            
$event->setData(array('available' => true));
        }
        else
        {
            
$status BOL_AuthorizationService::getInstance()->getActionStatus('photo''view');

            
$event->setData(array(
                
'available' => $status['status'] == BOL_AuthorizationService::STATUS_AVAILABLE,
                
'msg' => $status['msg']
            ));
        }

        return 
$event->getData();
    }

    public function 
getAlbumCoverUrlPEEP_Event $event )
    {
        
$params $event->getParams();
        
$albumId $params['albumId'];
        
$coverDao PHOTO_BOL_PhotoAlbumCoverDao::getInstance();

        if ( (
$coverDto $coverDao->findByAlbumId($albumId)) === null )
        {
            if ( (
$photo $this->albumService->getLastPhotoByAlbumId($albumId)) === null )
            {
                
$coverUrl $coverDao->getAlbumCoverDefaultUrl();
            }
            else
            {
                
$coverUrl $this->photoService->getPhotoUrlByType($photo->idPHOTO_BOL_PhotoService::TYPE_MAIN$photo->hash, !empty($photo->dimension) ? $photo->dimension false);
            }

            
$coverUrlOrig $coverUrl;
        }
        else
        {
            
$coverUrl $coverDao->getAlbumCoverUrlForCoverEntity($coverDto);
            
$coverUrlOrig $coverDao->getAlbumCoverOrigUrlForCoverEntity($coverDto);
        }

        
$event->setData(array(
            
'coverUrl' => $coverUrl,
            
'coverUrlOrig' => $coverUrlOrig
        
));

        return 
$event->getData();
    }

    public function 
getAlbumNamesPEEP_Event $event )
    {
        
$params $event->getParams();

        if ( empty(
$params['userId']) )
        {
            
$event->setData(array());

            return 
$event->getData();
        }

        
$exclude = !empty($params['exclude']) && is_array($params['exclude']) ? $params['exclude'] : array();
        
$event->setData($this->albumService->findAlbumNameListByUserId($params['userId'], $exclude));

        return 
$event->getData();
    }

    public function 
init()
    {
        
$this->genericInit();
        
$em PEEP::getEventManager();

        
$em->bind(BASE_CMP_AddNewContent::EVENT_NAME, array($this'addNewContentItem'));
        
$em->bind(BASE_CMP_QuickLinksWidget::EVENT_NAME, array($this'addQuickLink'));
        
$em->bind('feed.on_item_render', array($this'feedOnItemRender'));
        
$em->bind(self::EVENT_BEFORE_MULTIPLE_PHOTO_DELETE, array($this'onBeforeMultiplePhotoDelete'));
        
$em->bind(self::EVENT_BEFORE_PHOTO_MOVE, array($this'onBeforePhotoMove'));
        
$em->bind(self::EVENT_AFTER_PHOTO_MOVE, array($this'onAfterPhotoMove'));
        
$em->bind(self::EVENT_GET_ADDPHOTO_URL, array($this'addPhotoURL'));
        
$em->bind('base.avatar_change_collect_sections', array($this'collectAlbumsForAvatar'));
        
$em->bind('base.avatar_change_get_section', array($this'collectAlbumPhotosForAvatar'));
        
$em->bind('base.avatar_change_get_item', array($this'getPhotoForAvatar'));
    }

    public function 
genericInit()
    {
        
$em PEEP::getEventManager();

        
$em->bind(self::EVENT_ALBUM_ADD, array($this'albumAdd'));
        
$em->bind(self::EVENT_ALBUM_FIND, array($this'albumFind'));
        
$em->bind(self::EVENT_ALBUM_DELETE, array($this'albumDelete'));
        
$em->bind(self::EVENT_ENTITY_ALBUMS_FIND, array($this'entityAlbumsFind'));
        
$em->bind(self::EVENT_PHOTO_ADD, array($this'photoAdd'));
        
$em->bind(self::EVENT_PHOTO_FIND, array($this'photoFind'));
        
$em->bind(self::EVENT_PHOTO_FINDS, array($this'photoFinds'));
        
$em->bind(self::EVENT_PHOTO_DELETE, array($this'photoDelete'));
        
$em->bind(self::EVENT_ALBUM_PHOTOS_COUNT, array($this'albumPhotosCount'));
        
$em->bind(self::EVENT_ALBUM_PHOTOS_FIND, array($this'albumPhotosFind'));
        
        
$em->bind(self::EVENT_ENTITY_ALBUMS_COUNT, array($this'entityAlbumsCount'));
        
        
$em->bind(self::EVENT_ENTITY_PHOTOS_FIND, array($this'entityPhotosFind'));
        
$em->bind(self::EVENT_ENTITY_PHOTOS_COUNT, array($this'entityPhotosCount'));
        
$em->bind(self::EVENT_ENTITY_ALBUMS_DELETE, array($this'entityAlbumsDelete'));
        
        
$em->bind(self::EVENT_INIT_FLOATBOX, array($this'initFloatbox'));
        
$em->bind(self::EVENT_GET_PHOTO_VIEW_STATUS, array($this'getPhotoViewStatus'));

        
$em->bind('ads.enabled_plugins', array($this'adsEnabled'));
        
$em->bind('admin.add_auth_labels', array($this'addAuthLabels'));
        
$em->bind(PEEP_EventManager::ON_USER_UNREGISTER, array($this'onUserUnregister'));
        
$em->bind('plugin.privacy.get_action_list', array($this'addPrivacyAction'));
        
$em->bind('plugin.privacy.on_change_action_privacy', array($this'onChangePrivacy'));
        
$em->bind('notifications.collect_actions', array($this'collectNotificationActions'));
        
$em->bind('base_add_comment', array($this'notifyOnNewComment'));
        
$em->bind('feed.on_entity_action', array($this'feedOnEntityAction'));
        
$em->bind('feed.collect_configurable_activity', array($this'feedCollectConfigurableActivity'));
        
$em->bind('feed.collect_privacy', array($this'feedCollectPrivacy'));
        
$em->bind('feed.after_comment_add', array($this'feedAfterCommentAdd'));
        
$em->bind('feed.after_like_added', array($this'feedAfterLikeAdded'));

        
$credits = new PHOTO_CLASS_Credits();
        
$em->bind('usercredits.on_action_collect', array($credits'bindCreditActionsCollect'));
        
$em->bind('usercredits.get_action_key', array($credits'getActionKey'));

        
$em->bind('socialsharing.get_entity_info', array($this'sosialSharingGetPhotoInfo'));
        
        
$em->bind(self::EVENT_ON_ALBUM_ADD, array($this'onAlbumAdd'));
        
$em->bind(self::EVENT_ON_ALBUM_EDIT, array($this'onAlbumEdit'));
        
$em->bind(self::EVENT_BEFORE_ALBUM_DELETE, array($this'onBeforeAlbumDelete'));
        
$em->bind(self::EVENT_ON_PHOTO_ADD, array($this'onPhotoAdd'));
        
$em->bind(self::EVENT_ON_PHOTO_EDIT, array($this'onAfterPhotoEdit'));
        
$em->bind(self::EVENT_BEFORE_PHOTO_DELETE, array($this'onBeforePhotoDelete'));
        
$em->bind(self::EVENT_ON_PHOTO_DELETE, array($this'onPhotoDelete'));
        
$em->bind(self::EVENT_CREATE_USER_ALBUM, array($this'createUserAlbum'));
        
$em->bind(self::EVENT_GET_MAIN_ALBUM, array($this'getMainAlbum'));
        
$em->bind(self::EVENT_ADD_SEARCH_DATA, array($this'addSearchData'));
        
$em->bind('feed.before_content_add', array($this'feedBeforeStatusUpdate'));
        
$em->bind(self::EVENT_BACKGROUND_LOAD_PHOTO, array($this'backgroundLoadPhoto'));
        
$em->bind(self::EVENT_ON_PHOTO_CONTENT_UPDATE, array($this'onUpdateContent'));

        
$em->bind(self::EVENT_GET_ALBUM_COVER_URL, array($this'getAlbumCoverUrl'));
        
$em->bind(self::EVENT_GET_ALBUM_NAMES, array($this'getAlbumNames'));

        
PHOTO_CLASS_ContentProvider::getInstance()->init();
    }
}
Онлайн: 0
Реклама