<?php
/**
 * @copyright (C) 2013 iJoomla, Inc. - All rights reserved.
 * @license GNU General Public License, version 2 (http://www.gnu.org/licenses/gpl-2.0.html)
 * @author iJoomla.com <webmaster@ijoomla.com>
 * @url https://www.jomsocial.com/license-agreement
 * The PHP code portions are distributed under the GPL license. If not otherwise stated, all images, manuals, cascading style sheets, and included JavaScript *are NOT GPL, and are released under the IJOOMLA Proprietary Use License v1.0
 * More info at https://www.jomsocial.com/license-agreement
 */

use Joomla\CMS\Date\Date;
use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Table\Table;

// no direct access
defined('_JEXEC') or die('Restricted access');

if (!class_exists('CommunityViewPhotos')) {

    class CommunityViewPhotos extends CommunityView {

        public function regen() {
            /**
             * Opengraph
             */
            CHeadHelper::setType('website', Text::_('Running the Utility'));

            $tmpl = new CTemplate();

            echo $tmpl->fetch('photos.regen');
        }

        public function _addSubmenu() {
            $handler = $this->_getHandler();
            $handler->setSubmenus();
        }

        public function _flashuploader() {
            $jinput = Factory::getApplication()->input;
            $groupId = $jinput->request->getInt('groupid', '');
            $pageId = $jinput->request->getInt('pageid', '');
            $model = CFactory::getModel('photos');

            // Since upload will always be the browser's photos, use the browsers id
            $my = CFactory::getUser();

            // Maintenance mode, clear out tokens that are older than 1 hours
            $model->cleanUpTokens();
            $token = $model->getUserUploadToken($my->id);

            // We need to generate our own session management since there
            // are some bridges causes the flash browser to not really work.
            if (!$token && $my->id != 0) {
                // Get the current browsers session object.
                $mySession = Factory::getSession();

                // Generate a session handler for this user.
                $myToken = $mySession->getToken(true);

                $date = JDate::getInstance();
                $token = new stdClass();
                $token->userid = $my->id;
                $token->datetime = $date->toSql();
                $token->token = $myToken;

                $model->addUserUploadSession($token);
            }

            $mainframe = Factory::getApplication();
            $jinput = $mainframe->input;
            $config = CFactory::getConfig();
            $albumId = $jinput->request->get('albumid', '', 'INT');
            $handler = $this->_getHandler();
            $uploadURI = $handler->getFlashUploadURI($token, $albumId);

            $albums = '';
            $createAlbumLink = '';
            $photoUploaded = '';
            $photoUploadLimit = '';
            $viewAlbumLink = '';

            if (!empty($groupId)) {
                //CFactory::load( 'models' , 'groups' );
                $group = Table::getInstance('Group', 'CTable');
                $group->load($groupId);
                $albums = $model->getGroupAlbums($groupId, false, false, '', ( $group->isAdmin($my->id) || COwnerHelper::isCommunityAdmin()));
                $createAlbumLink = CRoute::_('index.php?option=com_community&view=photos&task=newalbum&groupid=' . $groupId);
                $photoUploaded = $model->getPhotosCount($groupId, PHOTOS_GROUP_TYPE);
                $photoUploadLimit = $config->get('groupphotouploadlimit');
                $viewAlbumLink = CRoute::_('index.php?option=com_community&view=photos&task=album&groupid=' . $groupId . '&albumid=' . $albumId);
            } else if (!empty($pageId)) {
                $page = Table::getInstance('Page', 'CTable');
                $page->load($groupId);
                $albums = $model->getPageAlbums($pageId, false, false, '', ( $page->isAdmin($my->id) || COwnerHelper::isCommunityAdmin()));
                $createAlbumLink = CRoute::_('index.php?option=com_community&view=photos&task=newalbum&pageid=' . $pageId);
                $photoUploaded = $model->getPhotosCount($pageId, PHOTOS_PAGE_TYPE);
                $photoUploadLimit = $config->get('pagephotouploadlimit');
                $viewAlbumLink = CRoute::_('index.php?option=com_community&view=photos&task=album&pageid=' . $pageId . '&albumid=' . $albumId);
            } else {
                $albums = $model->getAlbums($my->id);
                $createAlbumLink = CRoute::_('index.php?option=com_community&view=photos&task=newalbum&userid=' . $my->id);
                $photoUploaded = $model->getPhotosCount($my->id, PHOTOS_USER_TYPE);
                $photoUploadLimit = $config->get('photouploadlimit');
                $viewAlbumLink = CRoute::_('index.php?option=com_community&view=photos&task=album&userid=' . $my->id . '&albumid=' . $albumId);
            }

            $tmpl = new CTemplate();

            echo $tmpl->set('createAlbumLink', $createAlbumLink)
                ->set('albums', $albums)
                ->set('uploadURI', $uploadURI)
                ->set('albumId', $albumId)
                ->set('uploadLimit', $config->get('maxuploadsize'))
                ->set('photoUploaded', $photoUploaded)
                ->set('viewAlbumLink', $viewAlbumLink)
                ->set('photoUploadLimit', $photoUploadLimit)
                ->fetch('photos.flashuploader');
        }

        /**
         * Display the multi upload form
         * */
        public function _htmluploader() {
            $jinput = Factory::getApplication()->input;
            $groupId = $jinput->getInt('groupid', '');
            $pageId = $jinput->getInt('pageid', '');
            $model = CFactory::getModel('photos');
            $my = CFactory::getUser();
            $config = CFactory::getConfig();
            $albumId = $jinput->request->getInt('albumid', '');

            if (!empty($groupId)) {
                $group = Table::getInstance('Group', 'CTable');
                $group->load($groupId);
                $albums = $model->getGroupAlbums($groupId, false, false, '', ( $group->isAdmin($my->id) || COwnerHelper::isCommunityAdmin()));
                $createAlbumLink = CRoute::_('index.php?option=com_community&view=photos&task=newalbum&groupid=' . $groupId);
                $photoUploaded = $model->getPhotosCount($groupId, PHOTOS_GROUP_TYPE);
                $photoUploadLimit = $config->get('groupphotouploadlimit');
                $viewAlbumLink = CRoute::_('index.php?option=com_community&view=photos&task=album&groupid=' . $groupId . '&albumid=' . $albumId);
            } else if (!empty($pageId)) {
                $page = Table::getInstance('Group', 'CTable');
                $page->load($pageId);
                $albums = $model->getPageAlbums($pageId, false, false, '', ( $page->isAdmin($my->id) || COwnerHelper::isCommunityAdmin()));
                $createAlbumLink = CRoute::_('index.php?option=com_community&view=photos&task=newalbum&pageid=' . $pageId);
                $photoUploaded = $model->getPhotosCount($pageId, PHOTOS_PAGE_TYPE);
                $photoUploadLimit = $config->get('pagephotouploadlimit');
                $viewAlbumLink = CRoute::_('index.php?option=com_community&view=photos&task=album&pageid=' . $pageId . '&albumid=' . $albumId);
            } else {
                $albums = $model->getAlbums($my->id);
                if (empty($albumId) && !empty($albums) && !empty($albums[0]->id)) {
                    $albumId = $albums[0]->id;
                }
                $createAlbumLink = CRoute::_('index.php?option=com_community&view=photos&task=newalbum&userid=' . $my->id);
                $photoUploaded = $model->getPhotosCount($my->id, PHOTOS_USER_TYPE);
                $photoUploadLimit = $config->get('photouploadlimit');
                $viewAlbumLink = CRoute::_('index.php?option=com_community&view=photos&task=album&userid=' . $my->id . '&albumid=' . $albumId);
            }

            // Attach the photo upload css.
            // CTemplate::addStylesheet( 'photouploader' );

            $tmpl = new CTemplate();
            echo $tmpl->set('createAlbumLink', $createAlbumLink)
                ->set('albums', $albums)
                ->set('my', CFactory::getUser())
                ->set('albumId', $albumId)
                ->set('photoUploaded', $photoUploaded)
                ->set('viewAlbumLink', $viewAlbumLink)
                ->set('photoUploadLimit', $photoUploadLimit)
                ->set('uploadLimit', $config->get('maxuploadsize'))
                ->set('submenu', $this->showSubmenu(false))
                ->fetch('photos.htmluploader');
        }

        public function showSubmenu($display=true) {
            $this->_addSubmenu();
            return parent::showSubmenu($display);
        }
        
        public function page(){
            $this->display(null,'page');
        }

        public function group(){
            $this->display(null,'group');
        }

        public function event(){
            $this->display(null,'event');
        }


        /**
         * Default view method
         * Display all photos in the whole system
         * @param null $tpl
         * @param string $albumType either to show group,event or profile
         */
        public function display($tpl = null, $albumType = 'special') {
            $document = Factory::getDocument();
            $my = CFactory::getUser();

            $mainframe = Factory::getApplication();
            $jinput = $mainframe->input;

            // Set pathway for group photos
            // Community > Groups > Group Name > Photos
            $pageId = $jinput->get->get('pageid', '');
            $groupId = $jinput->get->get('groupid', '');
            $sortBy = $jinput->getString('sort', 'date');

            //event
            $eventId = $jinput->get->get('eventid', '');

            if (!empty($pageId)) {
                $page = Table::getInstance('Page', 'CTable');
                $page->load($pageId);

                // @rule: Test if the group is unpublished, don't display it at all.
                if (!$page->published) {
                    $this->_redirectUnpublishPage();
                    return;
                }

                $params = new CParameter($page->params);
                if ($params->get('photopermission', 0) <= 0) {
                    $mainframe->redirect(CRoute::_('index.php?option=com_community&view=pages&task=viewpagep&pageid='.$pageId, false));
                }
                
                $pathway = $mainframe->getPathway();
                $pathway->addItem(Text::_('COM_COMMUNITY_PAGES'), CRoute::_('index.php?option=com_community&view=pages'));
                $pathway->addItem($page->name, CRoute::_('index.php?option=com_community&view=pages&task=viewpage&pageid=' . $pageId));

                /**
                 * Opengraph
                 */
                CHeadHelper::setType('website', Text::sprintf('COM_COMMUNITY_PAGES_PHOTO_LISTING',$page->name));
            }  else if (!empty($groupId)) {
                $group = Table::getInstance('Group', 'CTable');
                $group->load($groupId);

                // @rule: Test if the group is unpublished, don't display it at all.
                if (!$group->published) {
                    $this->_redirectUnpublishGroup();
                    return;
                }

                $params = new CParameter($group->params);
                if ($params->get('photopermission', 0) <= 0) {
                    $mainframe->redirect(CRoute::_('index.php?option=com_community&view=groups&task=viewgroup&groupid='.$groupId, false));
                }
                
                $pathway = $mainframe->getPathway();
                $pathway->addItem(Text::_('COM_COMMUNITY_GROUPS'), CRoute::_('index.php?option=com_community&view=groups'));
                $pathway->addItem($group->name, CRoute::_('index.php?option=com_community&view=groups&task=viewgroup&groupid=' . $groupId));

                /**
                 * Opengraph
                 */
                CHeadHelper::setType('website', Text::sprintf('COM_COMMUNITY_GROUPS_PHOTO_LISTING',$group->name));
            } else if (!empty($eventId)) {
                $event = Table::getInstance('Event', 'CTable');
                $event->load($eventId);

                $params = new CParameter($event->params);
                if ($params->get('photopermission', 0) <= 0) {
                    $mainframe->redirect(CRoute::_('index.php?option=com_community&view=events&task=viewevent&eventid='.$eventId, false));
                }
            } else {
                /**
                 * Opengraph
                 */
                CHeadHelper::setType('website', Text::_('COM_COMMUNITY_PHOTOS_ALL_PHOTOS_TITLE'));
            }

            $this->addPathway(Text::_('COM_COMMUNITY_PHOTOS_ALL_PHOTOS_TITLE'));

            $model = CFactory::getModel('photos');
            $limitstart = $jinput->getInt('limitstart', 0);

            if($eventId || $albumType == PHOTOS_EVENT_TYPE){
                $type = PHOTOS_EVENT_TYPE;
            }elseif($groupId || $albumType == PHOTOS_GROUP_TYPE){
                $type = PHOTOS_GROUP_TYPE;
            }elseif($pageId || $albumType == PHOTOS_PAGE_TYPE){
                $type = PHOTOS_PAGE_TYPE;
            }else{
                $type = PHOTOS_USER_TYPE;
            }

            $handler = $this->_getHandler($type);
            $handler->setMiniHeader();

            $groupLink = !empty($groupId) ? '&groupid=' . $groupId : '';
            $feedLink = CRoute::_('index.php?option=com_community&view=photos' . $groupLink . '&format=feed');
            $feed = '<link rel="alternate" type="application/rss+xml" title="' . Text::_('COM_COMMUNITY_PHOTOS_ALL_PHOTOS_FEED') . '" href="' . $feedLink . '"/>';
            $document->addCustomTag($feed);

            $albumsData = $handler->getAllAlbumData($sortBy, $albumType);
            
            if ($albumsData === FALSE) {
                return;
            }

            $albumList = array();

            foreach ($albumsData['data'] as $album) {
                if($album->type == "page"){
                    $page = Table::getInstance('Page', 'CTable');
                    $page->load($album->pageid);

                    if($page->approvals == 1 ){
                        if($page->isMember($my->id) || CFactory::getUser()->authorise('community.pageedit', 'com_community') || CFactory::getUser()->authorise('community.pageeditstate', 'com_community') || CFactory::getUser()->authorise('community.pagedelete', 'com_community'))
                            $albumList[] = $album;
                    } else {
                        $albumList[] = $album;
                    }
                } else if($album->type == "group"){
                    $group = Table::getInstance('Group', 'CTable');
                    $group->load($album->groupid);

                    if($group->approvals == 1 ){
                        if($group->isMember($my->id) || CFactory::getUser()->authorise('community.groupedit', 'com_community') || CFactory::getUser()->authorise('community.groupeditstate', 'com_community') || CFactory::getUser()->authorise('community.groupdelete', 'com_community'))
                            $albumList[] = $album;
                    } else {
                        $albumList[] = $album;
                    }
                } else {
                    $albumList[] = $album;
                }
            }
           
            $albumHTML = $this->_getAllAlbumsHTML($albumList, $type, $albumsData['pagination']);

            $featuredList = array();
            
            if (empty($groupId)) {
                $featured = new CFeatured(FEATURED_ALBUMS);
                $featuredAlbums = $featured->getItemIds();
                foreach ($featuredAlbums as $album) {
                    $table = Table::getInstance('Album', 'CTable');
                    $table->load($album);

                    $table->thumbnail = $table->getCoverThumbPath();
                    $table->thumbnail = ($table->thumbnail) ? JURI::root(true) ."/". $table->thumbnail : JURI::root(true) . '/components/com_community/assets/album_thumb.jpg';
                    $featuredList[] = $table;
                }
            }

            $tmpl = new CTemplate();

            echo $tmpl->set('albumsHTML', $albumHTML)
                ->set('pageId', $pageId)
                ->set('groupId', $groupId)
                ->fetch('photos.index');
        }

        /*
         * @since 2.4
         */

        public function modFeaturedAlbum() {
            return $this->_getFeaturedAlbum();
        }

        /*
         * @since 2.4
         */

        private function _getFeaturedAlbum() {
            $featuredList = array();
            $config = CFactory::getConfig();

            $featured = new CFeatured(FEATURED_ALBUMS);
            $featuredAlbums = $featured->getItemIds();

            foreach ($featuredAlbums as $album) {
                $table = Table::getInstance('Album', 'CTable');
                $table->load($album);

                //exclude Albums that has Stricter permissions (non-public)
                if ($table->permissions > 0)
                    continue;

                if (empty($table->id))
                    continue;

                $table->thumbnail = $table->getCoverThumbPath();

                if ($table->location != '') {
                    $zoomableMap = CMapping::drawZoomableMap($table->location, 220, 150);
                } else {
                    $zoomableMap = "";
                }

                $table->zoomableMap = $zoomableMap;

                $featuredList[] = $table;
            }


            $tmpl = new CTemplate();
            $photoTag = CFactory::getModel('phototagging');

            //add photos info in featured list
            $photoModel = CFactory::getModel('photos');
            if (is_array($featuredList)) {
                foreach ($featuredList as &$fl) {
                    // bind photo links
                    $photos = $photoModel->getPhotos($fl->id, 5, 0);
                    $maxTime = '';

                    $tagRecords = array();
                    // Get all photos from album

                    if (count($photos)) {
                        for ($i = 0; $i < count($photos); $i++) {
                            $item = Table::getInstance('Photo', 'CTable');
                            $item->bind($photos[$i]);
                            $photos[$i] = $item;

                            $photo = $photos[$i];
                            $photo->link = CRoute::_('index.php?option=com_community&view=photos&task=photo&userid=' . $fl->creator . '&albumid=' . $photo->albumid) . '&photoid=' . $photo->id;

                            //Get last update
                            $maxTime = ($photo->created > $maxTime) ? $photo->created : $maxTime;
                        }
                    }

                    //bind album desc
                    if (!$maxTime) {
                        $maxTime = $fl->created;
                    }

                    $maxTime = new JDate($maxTime);
                    $fl->lastUpdated = CActivityStream::_createdLapse($maxTime, false);
                    $fl->photos = $photos;
                    $fl->commentCount = CWallLibrary::getWallCount('albums', $fl->id);
                }
            }
            //try to get the photos within this album
            // Get show photo location map by default
            $photoMapsDefault = $config->get('photosmapdefault');

            return $tmpl->set('isCommunityAdmin', COwnerHelper::isCommunityAdmin())
                ->set('showFeatured', $config->get('show_featured'))
                ->set('featuredList', $featuredList)
                ->set('photoModel', $photoModel)
                ->set('photoMapsDefault', $photoMapsDefault)
                ->fetch('photos.album.featured');
        }

        public function myphotos() {
            $my = CFactory::getUser();
            $document = Factory::getDocument();
            $jinput = Factory::getApplication()->input;

            $userid = $jinput->getInt('userid', $my->id);
            $sortBy = $jinput->getString('sort', 'date');

            if ($userid) {
                $user = CFactory::getUser($userid);
            } else {
                $user = CFactory::getUser();
            }

            // set bread crumbs
            if ($userid == $my->id) {
                $this->addPathway(Text::_('COM_COMMUNITY_PHOTOS'), CRoute::_('index.php?option=com_community&view=photos'));
                $this->addPathway(Text::_('COM_COMMUNITY_PHOTOS_MY_PHOTOS_TITLE'));
            } else {
                $this->addPathway(Text::_('COM_COMMUNITY_PHOTOS'), CRoute::_('index.php?option=com_community&view=photos'));
                $this->addPathway(Text::sprintf('COM_COMMUNITY_PHOTOS_USER_PHOTOS_TITLE', $user->getDisplayName()), CRoute::_('index.php?option=com_community&view=photos&task=myphotos&userid=' . $userid));
            }

            $blocked = $user->isBlocked();

            if ($blocked && !COwnerHelper::isCommunityAdmin()) {
                $tmpl = new CTemplate();
                echo $tmpl->fetch('profile.blocked');
                return;
            }

            if ($my->id == $user->id) {
                /**
                 * Opengraph
                 */
                CHeadHelper::setType('website', Text::_('COM_COMMUNITY_PHOTOS_MY_PHOTOS_TITLE'));
            } else {
                /**
                 * Opengraph
                 */
                CHeadHelper::setType('website', Text::sprintf('COM_COMMUNITY_PHOTOS_USER_PHOTOS_TITLE', $user->getDisplayName()));
            }

            $this->attachMiniHeaderUser($user->id);

            $feedLink = CRoute::_('index.php?option=com_community&view=photos&task=myphotos&userid=' . $user->id . '&format=feed');
            $feed = '<link rel="alternate" type="application/rss+xml" title="' . Text::_('COM_COMMUNITY_SUBSCRIBE_MY_PHOTOS_FEED') . '" href="' . $feedLink . '"/>';
            $document->addCustomTag($feed);

            $model = CFactory::getModel('photos');

            $albums = $model->getProfileAlbums($user->id, true, true, $sortBy, array('group','event'));

            $tmpl = new CTemplate();

            echo $tmpl->set('albumsHTML', $this->_getAllAlbumsHTML($albums, PHOTOS_USER_TYPE, $model->getPagination(),true))
                ->fetch('photos.myphotos');
        }

        public function _getAllAlbumsHTML($albums, $type = PHOTOS_USER_TYPE, $pagination = NULL, $isMyOwnPhoto = false) {
            $mainframe = Factory::getApplication();
            $jinput    = $mainframe->input;
            $task = $jinput->getCmd('task');
            $my = CFactory::getUser();
            $config = CFactory::getConfig();
            $pageId = $jinput->get('pageid',0,'int');
            $groupId = $jinput->get('groupid',0,'int');
            $eventId = $jinput->get('eventid',0,'int');
            $handler = $this->_getHandler();

            $tmpl = new CTemplate();

            // Use for redirect after editAlbum
            $displaygrp = ($groupId == 0) ? 'display' : 'displaygrp';

            $photoModel = CFactory::getModel('Photos');

            for ($i = 0; $i < count($albums); $i++) {
                $albums[$i]->count = count($photoModel->getPhotos($albums[$i]->id,100000,0));
                //change the album name according to the latest name of profile, event or groups avatars
                // act as trigger, have to move this somewhere later. //change album name
                switch($albums[$i]->type){
                    case 'page.avatar':
                        $table = Table::getInstance('Page', 'CTable');
                        $table->load($albums[$i]->pageid);
                        $tmpName = Text::sprintf('COM_COMMUNITY_PAGE_AVATAR_NAME', ucfirst($table->name));
                        if($albums[$i]->name != $tmpName){
                            $photoModel->updateAlbumName($albums[$i]->id, $tmpName);
                            $albums[$i]->name = $tmpName;
                        }
                        break;
                    case 'group.avatar':
                        $table = Table::getInstance('Group', 'CTable');
                        $table->load($albums[$i]->groupid);
                        $tmpName = Text::sprintf('COM_COMMUNITY_GROUP_AVATAR_NAME', ucfirst($table->name));
                        if($albums[$i]->name != $tmpName){
                            $photoModel->updateAlbumName($albums[$i]->id, $tmpName);
                            $albums[$i]->name = $tmpName;
                        }
                        break;
                    case 'event.avatar':
                        $table = Table::getInstance('Event', 'CTable');
                        $table->load($albums[$i]->eventid);
                        $tmpName = Text::sprintf('COM_COMMUNITY_EVENT_AVATAR_NAME', ucfirst($table->title));
                        if($albums[$i]->name != $tmpName){
                            $photoModel->updateAlbumName($albums[$i]->id, $tmpName);
                            $albums[$i]->name = $tmpName;
                        }
                        break;
                    case 'profile.avatar':
                        $creator = CFactory::getUser($albums[$i]->creator);
                        $tmpName = Text::sprintf('COM_COMMUNITY_PROFILE_AVATAR_NAME', ucfirst($creator->getDisplayName()));

                        if($albums[$i]->name != $tmpName){
                           $photoModel->updateAlbumName($albums[$i]->id, $tmpName);
                            $albums[$i]->name = $tmpName;
                        }
                        break;
                    case 'user' :
                        //default album only
                        if($albums[$i]->default == 1){
                            $creator = CFactory::getUser($albums[$i]->creator);
                            $tmpName = Text::sprintf('COM_COMMUNITY_PROFILE_DEFAULT_ALBUM_NAME', ucfirst($creator->getDisplayName()));

                            if($albums[$i]->name != $tmpName){
                                $photoModel->updateAlbumName($albums[$i]->id, $tmpName);
                                $albums[$i]->name = $tmpName;
                            }

                            // reset the default album to public, always.
                            if($albums[$i]->permission != COMMUNITY_STATUS_PRIVACY_PUBLIC){
                                $photoModel->updateAlbumPermission($albums[$i]->id); // reset to default
                            }
                        }
                        break;
                    case 'profile.Cover':
                        $creator = CFactory::getUser($albums[$i]->creator);
                        $tmpName = Text::sprintf('COM_COMMUNITY_PROFILE_COVER_NAME');

                        if($albums[$i]->name != $tmpName){
                            $photoModel->updateAlbumName($albums[$i]->id, $tmpName);
                            $albums[$i]->name = $tmpName;
                        }
                        break;
                    case 'event.Cover':
                        $table = Table::getInstance('Event', 'CTable');
                        $table->load($albums[$i]->eventid);
                        $tmpName = Text::sprintf('COM_COMMUNITY_EVENT_COVER_NAME', ucfirst($table->title));
                        if($albums[$i]->name != $tmpName){
                            $photoModel->updateAlbumName($albums[$i]->id, $tmpName);
                            $albums[$i]->name = $tmpName;
                        }
                        break;
                    case 'page.Cover':
                        $table = Table::getInstance('Page', 'CTable');
                        $table->load($albums[$i]->pageid);
                        $tmpName = Text::sprintf('COM_COMMUNITY_PAGE_COVER_NAME', ucfirst($table->name));
                        if($albums[$i]->name != $tmpName){
                            $photoModel->updateAlbumName($albums[$i]->id, $tmpName);
                            $albums[$i]->name = $tmpName;
                        }
                        break;
                    case 'group.Cover':
                        $table = Table::getInstance('Group', 'CTable');
                        $table->load($albums[$i]->groupid);
                        $tmpName = Text::sprintf('COM_COMMUNITY_GROUP_COVER_NAME', ucfirst($table->name));
                        if($albums[$i]->name != $tmpName){
                            $photoModel->updateAlbumName($albums[$i]->id, $tmpName);
                            $albums[$i]->name = $tmpName;
                        }
                        break;
                    case 'group':
                        //group default photo
                        if($albums[$i]->default == 1){
                            $table = Table::getInstance('Group', 'CTable');
                            $table->load($albums[$i]->groupid);
                            $tmpName = Text::sprintf('COM_COMMUNITY_GROUP_DEFAULT_ALBUM_NAME', ucfirst($table->name));

                            if($albums[$i]->name != $tmpName){
                                $photoModel->updateAlbumName($albums[$i]->id, $tmpName);
                                $albums[$i]->name = $tmpName;
                            }
                        }
                        break;
                    case 'page':
                        //page default photo
                        if($albums[$i]->default == 1){
                            $table = Table::getInstance('Page', 'CTable');
                            $table->load($albums[$i]->pageid);
                            $tmpName = Text::sprintf('COM_COMMUNITY_PAGE_DEFAULT_ALBUM_NAME', ucfirst($table->name));

                            if($albums[$i]->name != $tmpName){
                                $photoModel->updateAlbumName($albums[$i]->id, $tmpName);
                                $albums[$i]->name = $tmpName;
                            }
                        }
                        break;
                }


                $albums[$i]->user = CFactory::getUser($albums[$i]->creator);
                $albums[$i]->totalComments = CWallLibrary::getWallCount('albums', $albums[$i]->id);

                $albumLike = new CLike();
                $albums[$i]->likeCount = $albumLike->getLikeCount('album', $albums[$i]->id);

                //$albums[$i]->totalPhotos = $photosModel->getTotalPhotos($albums[$i]->id);
                if ($type == PHOTOS_PAGE_TYPE) {
                    $albums[$i]->link = CRoute::_("index.php?option=com_community&view=photos&task=album&albumid={$albums[$i]->id}&pageid={$albums[$i]->pageid}");
                    $albums[$i]->editLink = CRoute::_("index.php?option=com_community&view=photos&task=editAlbum&albumid={$albums[$i]->id}&pageid={$albums[$i]->pageid}&referrer={$displaygrp}");
                    $albums[$i]->uploadLink = "javascript:joms.notifications.showUploadPhoto({$albums[$i]->id},{$albums[$i]->pageid});"; 

                    $page = Table::getInstance('Page', 'CTable');
                    $page->load($pageId);

                    $albums[$i]->isOwner = $page->isAdmin($my->id);
                } else if ($type == PHOTOS_GROUP_TYPE) {
                    $albums[$i]->link = CRoute::_("index.php?option=com_community&view=photos&task=album&albumid={$albums[$i]->id}&groupid={$albums[$i]->groupid}");
                    $albums[$i]->editLink = CRoute::_("index.php?option=com_community&view=photos&task=editAlbum&albumid={$albums[$i]->id}&groupid={$albums[$i]->groupid}&referrer={$displaygrp}");
                    $albums[$i]->uploadLink = "javascript:joms.notifications.showUploadPhoto({$albums[$i]->id},{$albums[$i]->groupid});"; //CRoute::_("index.php?option=com_community&view=photos&task=uploader&albumid={$albums[$i]->id}&groupid={$albums[$i]->groupid}");

                    $group = Table::getInstance('Group', 'CTable');
                    $group->load($groupId);
                    
                    $albums[$i]->isOwner = $group->isAdmin($my->id);
                } else {
                    $albums[$i]->link = CRoute::_("index.php?option=com_community&view=photos&task=album&albumid={$albums[$i]->id}");
                    $albums[$i]->editLink = CRoute::_("index.php?option=com_community&view=photos&task=editAlbum&albumid={$albums[$i]->id}&userid={$albums[$i]->creator}&referrer=myphotos");
                    $albums[$i]->uploadLink = "javascript:joms.notifications.showUploadPhoto({$albums[$i]->id});"; //CRoute::_("index.php?option=com_community&view=photos&task=uploader&albumid={$albums[$i]->id}&userid={$albums[$i]->creator}");
                    $albums[$i]->isOwner = ($my->id == $albums[$i]->creator);
                }



                // If new albums that has just been created and
                // does not contain any images, the lastupdated will always be 0000-00-00 00:00:00:00
                // Try to use the albums creation date instead.
                if ($albums[$i]->lastupdated == '0000-00-00 00:00:00' || $albums[$i]->lastupdated == '') {
                    $albums[$i]->lastupdated = $albums[$i]->created;

                    if ($albums[$i]->lastupdated == '' || $albums[$i]->lastupdated == '0000-00-00 00:00:00') {
                        $albums[$i]->lastupdated = Text::_('COM_COMMUNITY_PHOTOS_NO_ACTIVITY');
                    } else {
                        $lastUpdated = new JDate($albums[$i]->lastupdated);
                        $albums[$i]->lastupdated = CActivityStream::_createdLapse($lastUpdated, false);
                    }
                } else {
                    $params = new CParameter($albums[$i]->params);
                    $lastUpdated = new Date($params->get('lastupdated'));
                    $albums[$i]->lastupdated = CActivityStream::_createdLapse($lastUpdated, false);
                }
            }

            $featured = new CFeatured(FEATURED_ALBUMS);
            $featuredList = $featured->getItemIds();

            $createLink = $handler->getAlbumCreateLink();
            
            if ($type == PHOTOS_PAGE_TYPE) {
                $isOwner = CPageHelper::allowManagePhoto($pageId);
                $baselink = "index.php?option=com_community&view=photos&pageid=".$pageId;

                $pageModel = CFactory::getModel('pages');
                $page = Table::getInstance('Page', 'CTable');
                $page->load($pageId);
                $params = $page->getParams();
                $photopermission = ($params->get('photopermission') == PAGE_PHOTO_PERMISSION_ADMINS || $params->get('photopermission') == PAGE_PHOTO_PERMISSION_ALL ) ? 1 : 0;
                $isMember = $pageModel->isMember($my->id, $page->id);
                $isAdmin = $pageModel->isAdmin($my->id, $page->id);

                $tmpl->set('photoPermission', $photopermission)
                    ->set('isMember', $isMember)
                    ->set('isAdmin', $isAdmin);
            } else if ($type == PHOTOS_GROUP_TYPE) {
                $isOwner = CGroupHelper::allowManagePhoto($groupId);
                $baselink = "index.php?option=com_community&view=photos&groupid=".$groupId;

                $groupModel    = CFactory::getModel('groups');
                $group = Table::getInstance('Group', 'CTable');
                $group->load($groupId);
                $params = $group->getParams();
                $photopermission = ($params->get('photopermission') == GROUP_PHOTO_PERMISSION_ADMINS || $params->get('photopermission') == GROUP_PHOTO_PERMISSION_ALL ) ? 1 : 0;
                $isMember = $groupModel->isMember($my->id, $group->id);
                $isAdmin = $groupModel->isAdmin($my->id, $group->id);

                $tmpl->set('photoPermission', $photopermission)
                    ->set('isMember', $isMember)
                    ->set('isAdmin', $isAdmin);
            } else {
                $userId = $jinput->get('userid', ($task == 'myphotos' && $my->id) ? $my->id : '', 'int');

                if($task){
                    $baselink = "index.php?option=com_community&view=photos&task=".$task;
                }else{
                    $baselink = "index.php?option=com_community&view=photos";
                }


                $isOwner = ($my->id == $userId && $userId) ? true : false;
            }
            $sortBy = $jinput->get('sort', 'date');

            $task = $jinput->get('task', '');
            return $tmpl->set('isMember', $my->id != 0)
                ->set('isMyOwnPhoto', $isMyOwnPhoto)
                ->set('sortBy', $sortBy)
                ->set('baseLink', $baselink)
                ->set('config', $config)
                ->set('isOwner', $isOwner)
                ->set('type', $type)
                ->set('createLink', $createLink)
                ->set('currentTask', $task)
                ->set('showFeatured', $config->get('show_featured'))
                ->set('featuredList', $featuredList)
                ->set('isCommunityAdmin', COwnerHelper::isCommunityAdmin())
                ->set('my', $my)
                ->set('albums', $albums)
                ->set('pagination', $pagination)
                ->set('isSuperAdmin', COwnerHelper::isCommunityAdmin())
                ->set('pageId', $pageId)
                ->set('groupId', $groupId)
                ->set('eventId', $eventId)
                ->set('submenu', $this->showSubmenu(false))
                ->fetch('album/list');
        }

        public function _getAlbumsHTML($albums, $type = PHOTOS_USER_TYPE, $pagination = NULL) {
            $mainframe = Factory::getApplication();
            $jinput = $mainframe->input;

            $my = CFactory::getUser();
            $groupId = $jinput->request->get('groupid', '', 'INT');
            $pageId = $jinput->request->get('groupid', '', 'INT');

            $tmpl = new CTemplate();

            $handler = $this->_getHandler();
            $photoTag = CFactory::getModel('phototagging');
            $photos = array();

            foreach ($albums as &$album) {
                $album->user = CFactory::getUser($album->creator);
                $album->link = CRoute::_("index.php?option=com_community&view=photos&task=album&albumid={$album->id}&userid={$album->creator}");
                $album->editLink = CRoute::_("index.php?option=com_community&view=photos&task=editAlbum&albumid={$album->id}&userid={$album->creator}&referrer=myphotos");
                $album->uploadLink = "javascript:joms.notifications.showUploadPhoto({$album->id});"; //CRoute::_("index.php?option=com_community&view=photos&task=uploader&albumid={$album->id}&userid={$album->creator}");
                $album->isOwner = ($my->id == $album->creator);

                // Get all photos from album
                $photos[$album->id] = $handler->getAlbumPhotos($album->id);
                $photoCount = count($photos[$album->id]);

                if ($type == PHOTOS_GROUP_TYPE) {
                    $album->link = CRoute::_("index.php?option=com_community&view=photos&task=album&albumid={$album->id}&groupid={$album->groupid}");
                    $album->editLink = CRoute::_("index.php?option=com_community&view=photos&task=editAlbum&albumid={$album->id}&groupid={$album->groupid}&referrer=myphotos");
                    $album->uploadLink = CRoute::_("index.php?option=com_community&view=photos&task=uploader&albumid={$album->id}&groupid={$album->groupid}");
                    $albums->isOwner = $my->authorise('community.view', 'photos.group.album.' . $groupId, $album);
                } else if ($type == PHOTOS_PAGE_TYPE) {
                    $album->link = CRoute::_("index.php?option=com_community&view=photos&task=album&albumid={$album->id}&pageid={$album->pageid}");
                    $album->editLink = CRoute::_("index.php?option=com_community&view=photos&task=editAlbum&albumid={$album->id}&pageid={$album->pageid}&referrer=myphotos");
                    $album->uploadLink = CRoute::_("index.php?option=com_community&view=photos&task=uploader&albumid={$album->id}&pageid={$album->pageid}");
                    $albums->isOwner = $my->authorise('community.view', 'photos.group.album.' . $pageId, $album);
                }

            }

            $createLink = CRoute::_('index.php?option=com_community&view=photos&task=newalbum&userid=' . $my->id);

            if ($type == PHOTOS_PAGE_TYPE) {
                $createLink = CRoute::_('index.php?option=com_community&view=photos&task=newalbum&pageid=' . $pageId);
                $baselink = "index.php?option=com_community&view=photos&pageid=".$pageId;
                $isOwner = CGroupHelper::allowManagePhoto($pageId);
            } else if ($type == PHOTOS_GROUP_TYPE) {
                $createLink = CRoute::_('index.php?option=com_community&view=photos&task=newalbum&groupid=' . $groupId);
                $baselink = "index.php?option=com_community&view=photos&groupid=".$groupId;
                $isOwner = CGroupHelper::allowManagePhoto($groupId);
            } else {
                $userId = $jinput->request->getInt('userid', '');
                $baselink = "index.php?option=com_community&view=photos&task=myphotos&userid=".$userId;
                $user = CFactory::getUser($userId);
                $isOwner = ($my->id == $user->id) ? true : false;
            }

            $featured = new CFeatured(FEATURED_ALBUMS);
            $featuredList = $featured->getItemIds();
            $config = CFactory::getConfig();

            $task = $jinput->get('task', '');
            return $tmpl->set('isMember', $my->id != 0)
                ->set('isOwner', $isOwner)
                ->set('type', $type)
                ->set('baseLink', $baselink)
                ->set('createLink', $createLink)
                ->set('currentTask', $task)
                ->set('isCommunityAdmin', COwnerHelper::isCommunityAdmin())
                ->set('my', $my)
                ->set('albums', $albums)
                ->set('pagination', $pagination)
                ->set('isSuperAdmin', COwnerHelper::isCommunityAdmin())
                ->set('featuredList', $featuredList)
                ->set('showFeatured', $config->get('show_featured'))
                ->set('pageId', $pageId)
                ->set('groupId', $groupId)
                ->set('config', $config)
                ->fetch('album/list');
        }

        /**
         * Displays edit album form
         * */
        public function editAlbum($bolSaveSuccess = true) {
            $document = Factory::getDocument();
            $config = CFactory::getConfig();

            $mainframe = Factory::getApplication();
            $jinput = $mainframe->input;

            // Load necessary libraries, models
            $album = Table::getInstance('Album', 'CTable');
            $albumId = $jinput->getInt('albumid', '');
            $referrer = $jinput->get->get('referrer', '', 'STRING');
            $album->load($albumId);
            
            if (strpos($album->type, 'page') !== false) {
                $type = PHOTOS_PAGE_TYPE;
            } else if (strpos($album->type, 'group') !== false) {
                $type = PHOTOS_GROUP_TYPE;
            } else {
                $type = PHOTOS_USER_TYPE;
            }

            $permissions = $album->permissions ? $album->permissions : $jinput->post->get('permissions', '', 'NONE');

            // Added to maintain user input value if there is save error
            if ($bolSaveSuccess === false) {
                $album->name = $jinput->post->get('name', '', 'STRING');
                $album->location = $jinput->post->get('location', '', 'STRING');
                $album->description = $jinput->post->get('description', '', 'STRING');
                $album->permissions = $jinput->post->get('permissions', '', 'NONE');
                $album->type = $jinput->post->get('type', '', 'NONE');
            }

            $this->addPathway(Text::sprintf('COM_COMMUNITY_PHOTOS_EDIT_ALBUM_TITLE', $album->name));

            if ($album->id == 0) {
                echo Text::_('COM_COMMUNITY_PHOTOS_INVALID_ALBUM');
                return;
            }

            /**
             * Opengraph
             */
            CHeadHelper::setType('website', Text::sprintf('COM_COMMUNITY_PHOTOS_EDIT_ALBUM_TITLE', $album->name));

            // $js = 'assets/validate-1.5.min.js';
            // CFactory::attach($js, 'js');

            $app = CAppPlugins::getInstance();
            $appFields = $app->triggerEvent('onFormDisplay', array('jsform-photos-newalbum'));
            $beforeFormDisplay = CFormElement::renderElements($appFields, 'before');
            $afterFormDisplay = CFormElement::renderElements($appFields, 'after');

            $tmpl = new CTemplate();
            echo $tmpl->set('album', $album)
                ->set('title', Text::sprintf('COM_COMMUNITY_PHOTOS_EDIT_ALBUM_TITLE', $album->name))
                ->set('type', $type)
                ->set('referrer', $referrer)
                ->set('permissions', $permissions)
                ->set('beforeFormDisplay', $beforeFormDisplay)
                ->set('afterFormDisplay', $afterFormDisplay)
                ->set('enableLocation', $config->get('enable_photos_location'))
                ->set('submenu', $this->showSubmenu(false))
                ->fetch('photos.editalbum');
        }

        /**
         * Display the new album form
         * */
        public function newalbum() {
            $config = CFactory::getConfig();
            $mainframe = Factory::getApplication();
            $jinput = $mainframe->input;
            /**
             * Opengraph
             */
            CHeadHelper::setType('website', Text::_('COM_COMMUNITY_PHOTOS_CREATE_NEW_ALBUM_TITLE'));

            $this->addPathway(Text::_('COM_COMMUNITY_PHOTOS'), CRoute::_('index.php?option=com_community&view=photos'));
            $this->addPathway(Text::_('COM_COMMUNITY_PHOTOS_CREATE_NEW_ALBUM_TITLE'));

            // $js = 'assets/validate-1.5.min.js';
            // CFactory::attach($js, 'js');

            $handler = $this->_getHandler();
            $type = $handler->getType();

            $user = CFactory::getRequestUser();
            $params = $user->getParams();

            $album = Table::getInstance('Album', 'CTable');
            $mainframe = Factory::getApplication();
            $jinput = $mainframe->input;

            // Added to maintain user input value if there is save error
            $album->name = $jinput->post->get('name', '', 'STRING');
            $album->location = $jinput->post->get('location', '', 'STRING');
            $album->description = $jinput->post->get('description', '', 'STRING');
            $album->permissions = $jinput->post->get('permissions', $params->get('privacyPhotoView'), 'NONE');
            $album->type = $jinput->post->get('type', '', 'NONE');
            $album->eventid = $jinput->get('eventid',0,'INT');
            $album->groupid = $jinput->get('groupid', '', 'NONE');

            $app = CAppPlugins::getInstance();
            $appFields = $app->triggerEvent('onFormDisplay', array('jsform-photos-newalbum'));
            $beforeFormDisplay = CFormElement::renderElements($appFields, 'before');
            $afterFormDisplay = CFormElement::renderElements($appFields, 'after');

            $tmpl = new CTemplate();
            echo $tmpl->set('beforeFormDisplay', $beforeFormDisplay)
                ->set('afterFormDisplay', $afterFormDisplay)
                ->set('permissions', $album->permissions)
                ->set('type', $type)
                ->set('album', $album)
                ->set('referrer', '')
                ->set('enableLocation', $config->get('enable_photos_location'))
                ->set('submenu', $this->showSubmenu(false))
                ->fetch('photos.editalbum');
        }

        /**
         * Display the photo thumbnails from an album
         * */
        public function album() {
            $document = Factory::getDocument();
            $mainframe = Factory::getApplication();
            $jinput = $mainframe->input;
            $config = CFactory::getConfig();

            $my = CFactory::getUser();
            //CFactory::load( 'libraries' , 'activities' );
            // Get show photo location map by default
            $photoMapsDefault = $config->get('photosmapdefault');

            $albumId = $jinput->get('albumid', 0, 'INT');
            $album = Table::getInstance('Album', 'CTable');
            $album->load($albumId);

            $defaultId = $jinput->get('photoid', 0, 'INT');
            $userId = $jinput->get('userid', $album->creator, 'INT');

            $jinput->set('userid',$userId);

            $limitstart = $jinput->get->get('limitstart', '0', 'INT');
            if (empty($limitstart)){
                $limitstart = $jinput->get->get('start', '0', 'INT');
            }

            $user = CFactory::getUser($album->creator);
            // Set pathway for group photos
            // Community > Groups > Group Name > Photos > Album Name
            $pathway = $mainframe->getPathway();

            // add this to the request just in case its missing
            $jinput->set('eventid',$album->eventid);
            $jinput->set('groupid',$album->groupid);
            $jinput->set('pageid',$album->pageid);
            
            $pageId = $jinput->get->get('pageid', '', 'INT');
            $groupId = $jinput->get->get('groupid', '', 'INT');
            $eventId = $jinput->get->get('eventid', '', 'INT');

            $handler = $this->_getHandler();

            //we must make sure this album exists and not deleted
            if (!$album->id) {
                $tmpl = new CTemplate();
                echo $tmpl->fetch('album/missingalbum');
                return;
            }

            if($album->type == 'page'){
                if(!$my->authorise('community.view', 'photos.page.album.'.$album->pageid, $album)){
                    $tmpl = new CTemplate();
                    echo $tmpl->fetch('album/missingalbum');
                    return;
                }
            } else if($album->type == 'group'){
                if(!$my->authorise('community.view', 'photos.group.album.'.$album->groupid, $album)){
                    $tmpl = new CTemplate();
                    echo $tmpl->fetch('album/missingalbum');
                    return;
                }
            }else{
                if(!$my->authorise('community.view', 'photos.user.album.'.$album->id)){
                    $tmpl = new CTemplate();
                    echo $tmpl->fetch('album/missingalbum');
                    return;
                }
            }

            $groupId = $album->groupid;
            $pageId = $album->pageid;

            if ($pageId > 0) {
                $page = Table::getInstance('Page', 'CTable');
                $page->load($pageId);

                $pathway->addItem(Text::_('COM_COMMUNITY_PAGES'), CRoute::_('index.php?option=com_community&view=pages'));
                $pathway->addItem($page->name, CRoute::_('index.php?option=com_community&view=pages&task=viewpage&pageid=' . $pageId));
                $pathway->addItem(Text::_('COM_COMMUNITY_PHOTOS'), CRoute::_('index.php?option=com_community&view=photos&pageid=' . $pageId));
            } elseif ($groupId > 0) {
                $group = Table::getInstance('Group', 'CTable');
                $group->load($groupId);

                $pathway->addItem(Text::_('COM_COMMUNITY_GROUPS'), CRoute::_('index.php?option=com_community&view=groups'));
                $pathway->addItem($group->name, CRoute::_('index.php?option=com_community&view=groups&task=viewgroup&groupid=' . $groupId));
                $pathway->addItem(Text::_('COM_COMMUNITY_PHOTOS'), CRoute::_('index.php?option=com_community&view=photos&groupid=' . $groupId));
            } elseif (!empty($eventId)) {
                $event = Table::getInstance('Event', 'CTable');
                $event->load($eventId);

                $pathway->addItem(Text::_('COM_COMMUNITY_EVENTS'), CRoute::_('index.php?option=com_community&view=events'));
                $pathway->addItem($event->title, CRoute::_('index.php?option=com_community&view=events&task=viewevent&eventid=' . $eventId));
                $pathway->addItem(Text::_('COM_COMMUNITY_PHOTOS'), CRoute::_('index.php?option=com_community&view=photos&eventid=' . $eventId));
            } else {
                $pathway->addItem(Text::_('COM_COMMUNITY_PHOTOS'), CRoute::_('index.php?option=com_community&view=photos'));
                $pathway->addItem(Text::sprintf('COM_COMMUNITY_PHOTOS_USER_PHOTOS_TITLE', $user->getDisplayName()), CRoute::_('index.php?option=com_community&view=photos&task=myphotos&userid=' . $userId));
            }

            $handler->setMiniHeader();

            if (is_null($album->id)) {
                echo Text::_('COM_COMMUNITY_ALBUM_DELETED');
                return;
            }

            if (!$handler->isAlbumBrowsable($albumId)) {
                return;
            }

            //$photos		= $handler->getAlbumPhotos( $album->id );
            $photoPaginationLimit = intval($config->get('pagination'));
            $photoThumbLimit = $photoPaginationLimit;
            $model = CFactory::getModel('photos');
            $photos = $model->getPhotos($album->id, $photoThumbLimit, $limitstart);

            $pagination = $model->getPagination();

            $photo = Table::getInstance('Photo', 'CTable');
            $photo->load($album->photoid);

            if ($album->photoid == '0') {
                $album->thumbnail = $photo->getThumbURI();
            } else {
                $album->thumbnail = $photo->getImageURI();
            }

            // Increment album's hit each time this page is loaded.
            $album->hit();

            if ($pageId > 0) {
                $otherAlbums = $model->getPageAlbums($pageId);
            } elseif ($groupId > 0) {
                $otherAlbums = $model->getGroupAlbums($groupId);
            } elseif($eventId){
                $otherAlbums = $model->getEventAlbums($eventId);
            }else {
                $otherAlbums = $model->getAlbums($user->id, true, true, '', array('profile.default','group','event','profile.Cover','profile.avatar','group.avatar','group.Cover','event.Cover','event.avatar'));
            }

            $totalAlbums = count($otherAlbums);
            $showOtherAlbum = 6;
            $randomAlbum = array();

            if (count($otherAlbums) > 0) {
                $randomId = ($totalAlbums < $showOtherAlbum) ? array_rand($otherAlbums, $totalAlbums) : array_rand($otherAlbums, $showOtherAlbum);

                $count = 0;
                for ($i = 0; $i < $totalAlbums; $i++) {
                    $num = (is_array($randomId)) ? $randomId[$i] : $randomId;
                    if ($otherAlbums[$num]->id != $album->id) {
                        $count++;
                        $randomAlbum[] = $otherAlbums[$num];
                    }
                    if (count($randomAlbum) == ($showOtherAlbum - 1)) {
                        break;
                    }
                }
            }

            /* set head meta */
            if (
                strtolower(trim(Text::sprintf('COM_COMMUNITY_PHOTOS_USER_PHOTOS_TITLE', $handler->getCreatorName()))) == strtolower(trim($album->name))) {
                /**
                 * Opengraph
                 */
                CHeadHelper::setType('website', Text::sprintf('COM_COMMUNITY_PHOTOS_USER_PHOTOS_TITLE', $handler->getCreatorName()), CStringHelper::escape($album->getDescription()));
            } else {
                /**
                 * Opengraph
                 */
                CHeadHelper::setType('website', Text::sprintf('COM_COMMUNITY_PHOTOS_USER_PHOTOS_TITLE', $album->name), CStringHelper::escape($album->getDescription()));
            }

            $handler->setAlbumPathway(CStringHelper::escape($album->name));
            $handler->setRSSHeader($albumId);

            // Set album thumbnail and description for social bookmarking sites linking
            $document->addHeadLink($album->getCoverThumbURI(), 'image_src', 'rel');
            //$document->setDescription( CStringHelper::escape($album->getDescription()) );
            //CFactory::load( 'libraries' , 'phototagging' );
            $getTaggingUsers = new CPhotoTagging();
            $people = array();

            // @TODO temporary fix for undefined link
            $list= array ();
            foreach ( $photos as $photo ) {
                $photo->link = $handler->getPhotoURI($photo->id, $photo->albumid);
                $storage = CStorage::getStorage($photo->storage);
                CHeadHelper::addOpengraph('og:image', $storage->getURI($photo->image), true);
                $list[] = $photo;
            }
            $photos = $list;
            $albumParam = new Cparameter($album->params);
            $tagged = $albumParam->get('tagged');

            if (!empty($tagged)) {
                $people = explode(',', $albumParam->get('tagged'));
            }

            //Update lastUpdated
            $lastUpdated = new JDate($album->lastupdated);
            $album->lastUpdated = CActivityStream::_createdLapse($lastUpdated, false);

            $people = array_unique($people);

            CFactory::loadUsers($people);

            foreach ($people as &$person) {
                $person = CFactory::getUser($person);
            }

            //CFactory::load( 'libraries' , 'bookmarks' );
            $bookmarks = new CBookmarks($handler->getAlbumExternalURI($album->id));

            // Get wall data.
            $wallCount = CWallLibrary::getWallCount('albums', $album->id);
            $viewAllLink = false;
            if ($jinput->request->get('task', '') != 'app') {
                $viewAllLink = CRoute::_('index.php?option=com_community&view=photos&task=app&albumid=' . $album->id . '&app=walls');
            }

            $wallContent = CWallLibrary::getWallContents(
                'albums',
                $album->id,
                ( COwnerHelper::isCommunityAdmin() || ($my->id == $album->creator && ($my->id != 0))),
                $config->get('stream_default_comments', 0),
                0,
                'wall/content',
                'photos,album'
            );

            $wallForm    = CWallLibrary::getWallInputForm($album->id, 'photos,ajaxAlbumSaveWall', 'photos,ajaxAlbumRemoveWall', $viewAllLink);

            $viewAllLink = CRoute::_('index.php?option=com_community&view=photos&task=app&albumid=' . $album->id . '&app=walls');

            $wallViewAll = '';
            if ( $wallCount > $config->get('stream_default_comments', 0) ) {
                $wallViewAll = CWallLibrary::getViewAllLinkHTML($viewAllLink, $wallCount);
            }

            $redirectUrl = CRoute::getURI(false);

            $tmpl = new CTemplate();
            if ($album->location != "") {

                $zoomableMap = CMapping::drawZoomableMap($album->location, 220, 150);
            } else {
                $zoomableMap = "";
            }
            // Get the likes / dislikes item
            //CFactory::load( 'libraries' , 'like' );
            $like = new CLike();
            $likeCount = $like->getLikeCount('album', $album->id);
            $likeLiked = $like->userLiked('album', $album->id, $my->id) === COMMUNITY_LIKE;

            $owner = CFactory::getUser($album->creator);
            $document->setTitle($album->name);

            //change the name of the title for this page if this is a default album
            switch(strtolower($album->type)){
                case 'profile.cover':
                    $album->name = Text::sprintf('COM_COMMUNITY_PHOTOS_ALBUM_DEFAULT_COVER_TITLE', CFactory::getUser($album->creator)->getDisplayName());
                    $document->setTitle(ucfirst($album->name));
                    break;
                case 'profile.avatar':
                    $album->name = Text::sprintf('COM_COMMUNITY_PHOTOS_ALBUM_DEFAULT_AVATAR_TITLE', CFactory::getUser($album->creator)->getDisplayName());
                    $document->setTitle(ucfirst($album->name));
                    break;
                case 'profile.gif':
                    $album->name = Text::sprintf('COM_COMMUNITY_PHOTOS_ALBUM_DEFAULT_ANIMATION_TITLE', CFactory::getUser($album->creator)->getDisplayName());
                    $document->setTitle(ucfirst($album->name));
                    break;
                case 'user':
                    if($album->default){
                        // this is a stream photos
                        $album->name = Text::sprintf('COM_COMMUNITY_PHOTOS_ALBUM_DEFAULT_STREAM_TITLE', CFactory::getUser($album->creator)->getDisplayName());
                        $document->setTitle(ucfirst($album->name));
                    }
                    break;
                case 'page.cover':
                    $pageTable = Table::getInstance('Page', 'CTable');
                    $pageTable->load($album->pageid);
                    $album->name = Text::sprintf('COM_COMMUNITY_PHOTOS_ALBUM_DEFAULT_COVER_TITLE', $pageTable->name);
                    $document->setTitle(ucfirst($album->name));
                    break;
                case 'page.avatar':
                    $pageTable = Table::getInstance('Page', 'CTable');
                    $pageTable->load($album->pageid);
                    $album->name = Text::sprintf('COM_COMMUNITY_PHOTOS_ALBUM_DEFAULT_AVATAR_TITLE', $pageTable->name);
                    $document->setTitle(ucfirst($album->name));
                    break;
                case 'page.gif':
                    $pageTable = Table::getInstance('Page', 'CTable');
                    $pageTable->load($album->pageid);
                    $album->name = Text::sprintf('COM_COMMUNITY_PHOTOS_ALBUM_DEFAULT_ANIMATION_TITLE', $pageTable->name);
                    $document->setTitle(ucfirst($album->name));
                    break;
                case 'page':
                    $pageTable = Table::getInstance('Page', 'CTable');
                    $pageTable->load($album->pageid);
                    if($album->default){
                        // this is a stream photos
                        $album->name = Text::sprintf('COM_COMMUNITY_PHOTOS_ALBUM_DEFAULT_STREAM_TITLE',$pageTable->name);
                        $document->setTitle(ucfirst($album->name));
                    }
                    break;
                case 'group.cover':
                    $groupTable = Table::getInstance('Group', 'CTable');
                    $groupTable->load($album->groupid);
                    $album->name = Text::sprintf('COM_COMMUNITY_PHOTOS_ALBUM_DEFAULT_COVER_TITLE', $groupTable->name);
                    $document->setTitle(ucfirst($album->name));
                    break;
                case 'group.avatar':
                    $groupTable = Table::getInstance('Group', 'CTable');
                    $groupTable->load($album->groupid);
                    $album->name = Text::sprintf('COM_COMMUNITY_PHOTOS_ALBUM_DEFAULT_AVATAR_TITLE', $groupTable->name);
                    $document->setTitle(ucfirst($album->name));
                    break;
                case 'group.gif':
                    $groupTable = Table::getInstance('Group', 'CTable');
                    $groupTable->load($album->groupid);
                    $album->name = Text::sprintf('COM_COMMUNITY_PHOTOS_ALBUM_DEFAULT_ANIMATION_TITLE', $groupTable->name);
                    $document->setTitle(ucfirst($album->name));
                    break;
                case 'group':
                    $groupTable = Table::getInstance('Group', 'CTable');
                    $groupTable->load($album->groupid);
                    if($album->default){
                        // this is a stream photos
                        $album->name = Text::sprintf('COM_COMMUNITY_PHOTOS_ALBUM_DEFAULT_STREAM_TITLE',$groupTable->name);
                        $document->setTitle(ucfirst($album->name));
                    }
                    break;
                case 'event.cover':
                    $eventTable = Table::getInstance('Event', 'CTable');
                    $eventTable->load($album->eventid);
                    $album->name = Text::sprintf('COM_COMMUNITY_PHOTOS_ALBUM_DEFAULT_COVER_TITLE', $eventTable->title);
                    $document->setTitle(ucfirst($album->name));
                    break;
                case 'event.gif':
                    $eventTable = Table::getInstance('Event', 'CTable');
                    $eventTable->load($album->eventid);
                    $album->name = Text::sprintf('COM_COMMUNITY_PHOTOS_ALBUM_DEFAULT_ANIMATION_TITLE', $eventTable->title);
                    $document->setTitle(ucfirst($album->name));
                    break;
                case 'event':
                    $eventTable = Table::getInstance('Event', 'CTable');
                    $eventTable->load($album->eventid);
                    if($album->default){
                        // this is a stream photos
                        $album->name = Text::sprintf('COM_COMMUNITY_PHOTOS_ALBUM_DEFAULT_STREAM_TITLE',$eventTable->title);
                        $document->setTitle(ucfirst($album->name));
                    }
                default:

            }

            echo $tmpl
                ->set('photosmapdefault', $photoMapsDefault)
                ->set('my', $my)
                ->set('bookmarksHTML', $bookmarks->getHTML())
                ->set('isOwner', $handler->isAlbumOwner($album->id))
                ->set('isAdmin', COwnerHelper::isCommunityAdmin())
                ->set('owner', $owner)
                ->set('photos', $photos)
                ->set('people', $people)
                ->set('album', $album)
                ->set('pageId', $pageId)
                ->set('groupId', $groupId)
                ->set('eventId', $eventId)
                ->set('otherAlbums', $randomAlbum)
                ->set('likeCount', $likeCount)
                ->set('likeLiked', $likeLiked)
                ->set('wallContent', $wallContent)
                ->set('wallForm', $wallForm)
                ->set('wallCount', $wallCount)
                ->set('wallViewAll', $wallViewAll)
                ->set('zoomableMap', $zoomableMap)
                ->set('pagination', $pagination)
                ->set('photoId',$defaultId)
                ->set('submenu', $this->showSubmenu(false))
                ->fetch('photos/list');
        }

        /**
         * Displays single photo view
         *
         * */
        public function photo() {
            $mainframe = Factory::getApplication();
            $jinput    = $mainframe->input;
            $document  = Factory::getDocument();

            $photoId   = $jinput->get('photoid', '', 'INT');
            $photo = Table::getInstance('Photo', 'CTable');
            $photo->load($photoId);

            $albumId   = $jinput->get('albumid', $photo->albumid, 'INT');
            $userId    = $jinput->get('userid', $photo->creator, 'int');
            $user      = CFactory::getUser($userId);
            $my        = CFactory::getUser();
            $jinput->set('userid',$userId);

            $album = Table::getInstance('Album', 'CTable');
            $album->load($photo->albumid);

            // add this to the request just in case its missing
            if($album->eventid){
                $jinput->set('eventid',$album->eventid);
            }elseif($album->groupid){
                $jinput->set('groupid',$album->groupid);
            }elseif($album->pageid){
                $jinput->set('pageid',$album->pageid);
            }

            $handler = $this->_getHandler();
            $handler->setMiniHeader();

            echo $this->showSubmenu();

            $document->setTitle($album->name);
            $document->setMetaData('title', $album->name);
            $document->setMetaData('description', $photo->caption);

            $storage = CStorage::getStorage($photo->storage);
            CHeadHelper::addOpengraph('og:image', $storage->getURI($photo->image), true);

            $tmpl = new CTemplate();
            echo $tmpl
                ->set('album', $album)
                ->set('photo', $photo)
                ->set('my', $my)
                ->fetch('photos/single');
        }

        /**
         * return the resized images
         */
        public function showimage() {

        }

        /**
         * Return photos handlers
         * @param string $type if type is supplied, always follow the type
         * @return CommunityViewPhotosEventHandler|CommunityViewPhotosGroupHandler|CommunityViewPhotosUserHandler|null
         * @throws Exception
         *
         */
        private function _getHandler($type = '') {
            $handler = null;

            $mainframe = Factory::getApplication();
            $jinput = $mainframe->input;
            $pageId = $jinput->get('pageid',0,'INT');
            $groupId = $jinput->get('groupid',0,'INT');
            $eventId = $jinput->get('eventid',0,'INT');
            
            if ($pageId || $type == 'page') {
                // page photo
                $handler = new CommunityViewPhotosPageHandler($this);
            } elseif ($groupId || $type == 'group') {
                // group photo
                $handler = new CommunityViewPhotosGroupHandler($this);
            } elseif($eventId || $type == 'event') {
                $handler = new CommunityViewPhotosEventHandler($this);
            } else {
                // user photo
                $handler = new CommunityViewPhotosUserHandler($this);
            }

            return $handler;
        }

        /**
         * Application full view
         * */
        public function appFullView() {

            /**
             * Opengraph
             */
            // CHeadHelper::setType('website', Text::_('COM_COMMUNITY_PHOTOS_WALL_TITLE'));

            $mainframe = Factory::getApplication();
            $jinput = $mainframe->input;
            $applicationName = CStringHelper::strtolower($jinput->get->get('app', '', 'STRING'));

            if (empty($applicationName)) {
                Factory::getApplication()->enqueueMessage(Text::_('COM_COMMUNITY_APP_ID_REQUIRED'), 'error');
            }

            $output = '<div class="joms-page">';
            $output .= '<h3 class="joms-page__title">' . Text::_('COM_COMMUNITY_PHOTOS_WALL_TITLE') . '</h3>';

            if ($applicationName == 'walls') {
                //CFactory::load( 'libraries' , 'wall' );
                $limit = $jinput->request->get('limit', 5, 'INT');
                $limitstart = $jinput->request->get('limitstart', 0, 'INT');
                $albumId = $jinput->getInt('albumid', '');
                $my = CFactory::getUser();

                $album = Table::getInstance('Album', 'CTable');
                $album->load($albumId);

                //CFactory::load( 'helpers' , 'owner' );
                //CFactory::load( 'helpers' , 'friends' );

                // Get the walls content
                $viewAllLink = false;
                $wallCount = false;
                if ($jinput->request->get('task', '') != 'app') {
                    $viewAllLink = CRoute::_('index.php?option=com_community&view=photos&task=app&albumid=' . $album->id . '&app=walls');
                    $wallCount = CWallLibrary::getWallCount('album', $album->id);
                }

                $output .= CWallLibrary::getWallContents('albums', $album->id, ( COwnerHelper::isCommunityAdmin() || COwnerHelper::isMine($my->id, $album->creator)), $limit, $limitstart);

                if (CFriendsHelper::isConnected($my->id, $album->creator) || COwnerHelper::isCommunityAdmin()) {
                    $output .= CWallLibrary::getWallInputForm($album->id, 'photos,ajaxAlbumSaveWall', 'photos,ajaxAlbumRemoveWall');
                }

                $output .= CWallLibrary::getViewAllLinkHTML($viewAllLink, $wallCount);

                jimport('joomla.html.pagination');
                $wallModel = CFactory::getModel('wall');
                $pagination = new JPagination($wallModel->getCount($album->id, 'albums'), $limitstart, $limit);

                $output .= '<div class="cPagination">' . $pagination->getPagesLinks() . '</div>';
            } else {
                $model = CFactory::getModel('apps');
                $applications = CAppPlugins::getInstance();
                $applicationId = $model->getUserApplicationId($applicationName);

                $application = $applications->get($applicationName, $applicationId);

                if (is_callable(array($application, 'onAppDisplay'), true)) {
                    // Get the parameters
                    $manifest = CPluginHelper::getPluginPath('community', $applicationName) . '/' . $applicationName . '/' . $applicationName . '.xml';

                    $params = new CParameter($model->getUserAppParams($applicationId), $manifest);

                    $application->params = $params;
                    $application->id = $applicationId;

                    $output = $application->onAppDisplay($params);
                } else {
                    Factory::getApplication()->enqueueMessage(Text::_('COM_COMMUNITY_APPS_NOT_FOUND'), 'error');
                }
            }

            $output .= '</div>';
            echo $output;
        }

    }

    abstract class CommunityViewPhotoHandler extends CommunityView {

        protected $type = '';
        protected $model = '';
        protected $view = '';
        protected $my = '';

        abstract public function getType();

        abstract public function getFlashUploadURI($token, $albumId);

        abstract public function getAllAlbumData();

        abstract public function getAlbumURI($albumId);

        abstract public function getAlbumExternalURI($albumId);

        abstract public function getPhotoURI($photoId, $albumId);

        abstract public function getPhotoExternalURI($photoId, $albumId);

        abstract public function getCreatorName();

        abstract public function getAlbumPhotos($albumId);

        abstract public function getTaggingUsers();

        abstract public function getAlbumCreateLink();

        abstract public function setAlbumPathway($albumName);

        abstract public function setMiniHeader();

        abstract public function setSubmenus();

        abstract public function setRSSHeader($albumId);

        abstract public function isExceedUploadLimit();

        abstract public function isPhotoBrowsable($photoId);

        abstract public function isAlbumBrowsable($albumId);

        abstract public function isAlbumOwner($albumId);

        abstract public function isTaggable();

        abstract public function isWallAllowed();

        public function __construct(CommunityViewPhotos $viewObj) {
            $this->view = $viewObj;
            $this->my = CFactory::getUser();
            $this->model = CFactory::getModel('photos');
        }

    }

    class CommunityViewPhotosUserHandler extends CommunityViewPhotoHandler {

        var $user = null;

        public function __construct($viewObj) {
            parent::__construct($viewObj);
            $jinput = Factory::getApplication()->input;

            $userid = $jinput->get('userid', null, 'INT');
            $this->user = CFactory::getUser($userid);
        }

        public function getAlbumCreateLink() {
            return CRoute::_('index.php?option=com_community&view=photos&task=newalbum&userid=' . $this->my->id);
        }

        public function getFlashUploadURI($token, $albumId) {
            $session = Factory::getSession();
            $url = 'index.php?option=com_community&view=photos&task=upload&no_html=1&albumid=' . $albumId . '&tmpl=component';
            $url .= '&' . $session->getName() . '=' . $session->getId() . '&token=' . $token->token . '&uploaderid=' . $this->my->id . '&userid=' . $this->my->id;
            $url = JURI::root(true) . '/' . $url;
            return $url;
        }

        public function isWallAllowed() {
            $config = CFactory::getConfig();

            // Check if user is really allowed to post walls on this photo.
            if (COwnerHelper::isMine($this->my->id, $this->user->id) || (!$config->get('lockphotoswalls')) || ( $config->get('lockphotoswalls') && CFriendsHelper::isConnected($this->my->id, $this->user->id) ) || COwnerHelper::isCommunityAdmin()) {
                return true;
            }
            return false;
        }

        public function isTaggable() {
            if (COwnerHelper::isMine($this->my->id, $this->user->id) || CFriendsHelper::isConnected($this->my->id, $this->user->id)) {
                return true;
            }
            return false;
        }

        public function getTaggingUsers() {
            $model = CFactory::getModel('friends');
//		$friends	= $model->getFriends( $this->my->id , '' , false );
            $friends = $model->getFriendRecords($this->my->id, '', false);
            array_unshift($friends, $this->my);

            return $friends;
        }

        public function setRSSHeader($albumId) {
            $document = Factory::getDocument();
            $album = Table::getInstance('Album', 'CTable');
            $album->load($albumId);
            $mainframe = FActory::getApplication();

            // Set feed url
            $link = CRoute::_('index.php?option=com_community&view=photos&task=album&albumid=' . $album->id . '&userid=' . $album->creator . '&format=feed');
            $feed = '<link rel="alternate" type="application/rss+xml" href="' . $link . '"/>';

            $document->addCustomTag($feed);
        }

        public function getAlbumPhotos($albumId) {
            $config = CFactory::getConfig();
            $model = CFactory::getModel('Photos');

            // @todo: make limit configurable?
            return $model->getAllPhotos($albumId, PHOTOS_USER_TYPE, null, null, $config->get('photosordering'));
        }

        public function setAlbumPathway($albumName) {
            $mainframe = Factory::getApplication();
            $pathway = $mainframe->getPathway();
            $pathway->addItem($albumName);
        }

        public function setSubmenus() {
            $my = CFactory::getUser();
            $config = CFactory::getConfig();

            $jinput = Factory::getApplication()->input;

            $task = $jinput->get('task', 0, 'WORD');
            $albumId = $jinput->get('albumid', 0, 'INT');

            $album = Table::getInstance('Album', 'CTable');
            $album->load($albumId);

            switch ($task) {
                case '':
                    if ($albumId) {
                        $this->view->addSubmenuItem('index.php?option=com_community&view=photos&userid=' . $this->user->id . '&task=album&albumid=' . $albumId,
                            Text::_('COM_COMMUNITY_PHOTOS_BACK_TO_ALBUM'));
                    }
                    
                    if($config->get('enablepages')){
                        $this->view->addSubmenuItem('index.php?option=com_community&view=photos&task=page', Text::_('COM_COMMUNITY_PHOTOS_ALL_PAGE_PHOTOS'), '' , false , '' , 'joms-right');
                    }

                    if($config->get('enablegroups')){
                        $this->view->addSubmenuItem('index.php?option=com_community&view=photos&task=group', Text::_('COM_COMMUNITY_PHOTOS_ALL_GROUP_PHOTOS'), '' , false , '' , 'joms-right');
                    }

                    if($config->get('enableevents')){
                        $this->view->addSubmenuItem('index.php?option=com_community&view=photos&task=event', Text::_('COM_COMMUNITY_PHOTOS_ALL_EVENT_PHOTOS'), '' , false , '' , 'joms-right');
                    }

                    $this->view->addSubmenuItem('index.php?option=com_community&view=photos', Text::_('COM_COMMUNITY_PHOTOS_ALL_PHOTOS'), '' , false , '' , 'joms-right');
                    if($task=='myphotos' && $my->id){
                        //$this->view->addSubmenuItem('index.php?option=com_community&view=photos&task=newalbum&userid=' . $my->id, Text::_('COM_COMMUNITY_PHOTOS_CREATE_PHOTO_ALBUM'), '', true);
                    }
                    break;
                case 'photo':
                    if ($albumId) {
                        $this->view->addSubmenuItem('index.php?option=com_community&view=photos&userid=' . $this->user->id . '&task=album&albumid=' . $albumId,
                            Text::_('COM_COMMUNITY_PHOTOS_BACK_TO_ALBUM'));
                    }

                    if (CFactory::getUser()->authorise('community.photodelete', 'com_community') || ($this->my->id == $album->creator && ($this->my->id != 0))) {
                        $this->view->addSubmenuItem('', Text::_('COM_COMMUNITY_DELETE'), "joms_delete_photo();", true);
                    }

                    if ($this->my->id == $album->creator && ($this->my->id != 0)) {
                        $this->view->addSubmenuItem('', Text::_('COM_COMMUNITY_PHOTOS_SET_AVATAR'),
                                "joms_set_as_profile_picture();", true);
                    }

                    if (CFactory::getUser()->authorise('community.photoedit', 'com_community') || ($this->my->id == $album->creator && ($this->my->id != 0))) {
                        $this->view->addSubmenuItem('', Text::_('COM_COMMUNITY_PHOTOS_SET_AS_ALBUM_COVER'),
                            "joms_set_as_album_cover();", true);
                    }

                    if (!$config->get('deleteoriginalphotos')) {
                        $this->view->addSubmenuItem('', Text::_('COM_COMMUNITY_DOWNLOAD_IMAGE'),
                            "joms_download_photo();", true);
                    }
                    //$this->view->addSubmenuItem('index.php?option=com_community&view=photos&task=group', Text::_('COM_COMMUNITY_PHOTOS_ALL_GROUP_PHOTOS'), '' , false , '' , 'joms-right');
                    //$this->view->addSubmenuItem('index.php?option=com_community&view=photos&task=event', Text::_('COM_COMMUNITY_PHOTOS_ALL_EVENT_PHOTOS'), '' , false , '' , 'joms-right');
                    //$this->view->addSubmenuItem('index.php?option=com_community&view=photos', Text::_('COM_COMMUNITY_PHOTOS_ALL_PHOTOS'), '' , false , '' , 'joms-right');
                    break;
                case 'singleupload':
                case 'uploader':
                    if ($albumId){
                        $this->view->addSubmenuItem('index.php?option=com_community&view=photos&userid=' . $this->user->id . '&task=album&albumid=' . $albumId, Text::_('COM_COMMUNITY_PHOTOS_BACK_TO_ALBUM'));
                    }
                    //$this->view->addSubmenuItem('index.php?option=com_community&view=photos&task=group', Text::_('COM_COMMUNITY_PHOTOS_ALL_GROUP_PHOTOS'), '' , false , '' , 'joms-right');
                    //$this->view->addSubmenuItem('index.php?option=com_community&view=photos&task=event', Text::_('COM_COMMUNITY_PHOTOS_ALL_EVENT_PHOTOS'), '' , false , '' , 'joms-right');
                    //$this->view->addSubmenuItem('index.php?option=com_community&view=photos', Text::_('COM_COMMUNITY_PHOTOS_ALL_PHOTOS'), '' , false , '' , 'joms-right');
                break;
                case 'myphotos':
                    //@since 4.2.1, no submenu is needed in my photos
                    //return;
                    if($config->get('enablepages')){
                        $this->view->addSubmenuItem('index.php?option=com_community&view=photos&task=page', Text::_('COM_COMMUNITY_PHOTOS_ALL_PAGE_PHOTOS'), '' , false , '' , 'joms-right');
                    }

                    if($config->get('enablegroups')){
                        $this->view->addSubmenuItem('index.php?option=com_community&view=photos&task=group', Text::_('COM_COMMUNITY_PHOTOS_ALL_GROUP_PHOTOS'), '' , false , '' , 'joms-right');
                    }

                    if($config->get('enableevents')){
                        $this->view->addSubmenuItem('index.php?option=com_community&view=photos&task=event', Text::_('COM_COMMUNITY_PHOTOS_ALL_EVENT_PHOTOS'), '' , false , '' , 'joms-right');
                    }

                    $this->view->addSubmenuItem('index.php?option=com_community&view=photos', Text::_('COM_COMMUNITY_PHOTOS_ALL_PHOTOS'), '' , false , '' , 'joms-right');

                    if ($this->my->id != 0 || COwnerHelper::isCommunityAdmin()) {
                        //$this->view->addSubmenuItem('index.php?option=com_community&view=photos&task=newalbum&userid=' . $my->id, Text::_('COM_COMMUNITY_PHOTOS_CREATE_PHOTO_ALBUM'), '', true);
                    }
                    break;
                case 'newalbum':
                    //$this->view->addSubmenuItem('index.php?option=com_community&view=photos&task=group', Text::_('COM_COMMUNITY_PHOTOS_ALL_GROUP_PHOTOS'), '' , false , '' , 'joms-right');
                    //$this->view->addSubmenuItem('index.php?option=com_community&view=photos&task=event', Text::_('COM_COMMUNITY_PHOTOS_ALL_EVENT_PHOTOS'), '' , false , '' , 'joms-right');
                    //$this->view->addSubmenuItem('index.php?option=com_community&view=photos', Text::_('COM_COMMUNITY_PHOTOS_ALL_PHOTOS'), '' , false , '' , 'joms-right');
                    break;
                default:

                    if(!$albumId){
                        // do not show this 3 links if we are viewing photo albums
                        if($config->get('enablepages')){
                            $this->view->addSubmenuItem('index.php?option=com_community&view=photos&task=page', Text::_('COM_COMMUNITY_PHOTOS_ALL_PAGE_PHOTOS'), '' , false , '' , 'joms-right');
                        }

                        if($config->get('enablegroups')){
                            $this->view->addSubmenuItem('index.php?option=com_community&view=photos&task=group', Text::_('COM_COMMUNITY_PHOTOS_ALL_GROUP_PHOTOS'), '' , false , '' , 'joms-right');
                        }

                        if($config->get('enableevents')){
                            $this->view->addSubmenuItem('index.php?option=com_community&view=photos&task=event', Text::_('COM_COMMUNITY_PHOTOS_ALL_EVENT_PHOTOS'), '' , false , '' , 'joms-right');
                        }

                        $this->view->addSubmenuItem('index.php?option=com_community&view=photos', Text::_('COM_COMMUNITY_PHOTOS_ALL_PHOTOS'), '' , false , '' , 'joms-right');
                    }

                    if (!$albumId && ($this->my->id != 0 || COwnerHelper::isCommunityAdmin())) {
                        $groupid = $jinput->get('groupid', 0, 'INT');
                        $exludeUploadTask = array('newalbum', 'editAlbum', 'display', 'page', 'group', 'event');
                        if (!in_array($task, $exludeUploadTask) && !CAlbumsHelper::isFixedAlbum($album)) {
                            $this->view->addSubmenuItem('javascript:void(0);', Text::_('COM_COMMUNITY_PHOTOS_UPLOAD_PHOTOS'), "joms.api.photoUpload('" . $albumId . "','" . $groupid . "'); return false;", true);
                        }
                    }elseif($albumId){
                        //add a back button
                        if($album->type == 'user' || $album->type == 'profile.gif' || $album->type == 'profile.avatar' || $album->type == 'profile.Cover'){
                            $link = "index.php?option=com_community&view=photos&task=myphotos&userid=".$album->creator;
                        }elseif($album->type == 'page'){
                            $link = "index.php?option=com_community&view=photos&pageid=".$album->pageid;
                        }elseif($album->type == 'group'){
                            $link = "index.php?option=com_community&view=photos&groupid=".$album->groupid;
                        }elseif($album->type == 'event'){
                            $link = "index.php?option=com_community&view=photos&eventid=".$album->eventid;
                        }else{
                            $link = "index.php?option=com_community&view=photos";
                        }
                        $this->view->addSubmenuItem($link, Text::_('COM_COMMUNITY_PHOTOS_BACK_TO_PHOTOS'), '' , false , '' , 'action');
                    }

                    if ($task == 'album' && ($my->id == $album->creator || CFactory::getUser()->authorise('community.photoedit', 'com_community')) && !CAlbumsHelper::isFixedAlbum($album)) {
                        $this->view->addSubmenuItem('index.php?option=com_community&view=photos&task=editAlbum&albumid=' . $albumId . '&userid=' . $my->id . '&referrer=album', Text::_('COM_COMMUNITY_EDIT_ALBUM'), '', true);
                    }

                    if ($task == 'album' && ($my->id == $album->creator || CFactory::getUser()->authorise('community.photodelete', 'com_community')) && !CAlbumsHelper::isFixedAlbum($album)) {
                        $this->view->addSubmenuItem('javascript:void(0);', Text::_('COM_COMMUNITY_PHOTOS_ALBUM_DELETE'), "joms.api.albumRemove('".$albumId."')", true);
                    }

                    if ($task == 'album' && COwnerHelper::isCommunityAdmin() && ($album->permissions == 10 || $album->permissions == 0) && !$album->groupid && !$album->eventid && ($album->type != 'profile.Cover' || $album->type != 'profile.avatar')) {

                        if ($config->get('show_featured')) {
                            $featured = new CFeatured(FEATURED_ALBUMS);
                            $featuredList = $featured->getItemIds();
                            $isFeatured = in_array($album->id, $featuredList);

                            if (!$isFeatured) {
                                $this->view->addSubmenuItem('',
                                    Text::_('COM_COMMUNITY_MAKE_FEATURED'),
                                    'joms.api.albumAddFeatured('.$album->id.')',
                                    true
                                );
                            } else {
                                $this->view->addSubmenuItem('',
                                    Text::_('COM_COMMUNITY_REMOVE_FEATURED'),
                                    'joms.api.albumRemoveFeatured('.$album->id.')',
                                    true
                                );
                            }
                        }
                    }

                    if (($this->my->id != 0 || COwnerHelper::isCommunityAdmin()) && $task=='myphotos') {
                        $this->view->addSubmenuItem('index.php?option=com_community&view=photos&task=newalbum&userid=' . $my->id, Text::_('COM_COMMUNITY_PHOTOS_CREATE_PHOTO_ALBUM'), '', true);
                    }
                    break;
            }

            //@since 4.1 we only display my photos in all photo page
            $allowMyPhotoTask = array('display','event','group','page','myphotos');
            if ($my->id != 0 && in_array($task,$allowMyPhotoTask)) {
                $this->view->addSubmenuItem('index.php?option=com_community&view=photos&task=myphotos&userid=' . $my->id, Text::_('COM_COMMUNITY_PHOTOS_MY_PHOTOS'), '' , false , '' , 'joms-right');
            }
        }

        public function getType() {
            return PHOTOS_USER_TYPE;
        }

        /**
         * Deprecated since 1.8.9
         * */
        public function isPhotoBrowsable($photoId) {
            return $this->isAlbumBrowsable($photoId);
        }

        public function isAlbumBrowsable($albumId) {

            $mainframe = Factory::getApplication();

            $album = Table::getInstance('Album', 'CTable');
            $album->load($albumId);

            $my = CFactory::getUser();
            /* Community Admin can access anywhere */
            // if (COwnerHelper::isCommunityAdmin($my->id)) {
            //     return true;
            // }

            // ACL
            if(CFactory::getUser()->authorise('community.photoedit', 'com_community') || CFactory::getUser()->authorise('community.photodelete', 'com_community')) {
                return true;
            }

            if ($this->user->block && !COwnerHelper::isCommunityAdmin($my->id)) {
                $mainframe->enqueueMessage(Text::_('COM_COMMUNITY_PHOTOS_USER_ACCOUNT_IS_BANNED'));
                $mainframe->redirect('index.php?option=com_community&view=photos');
                return false;
            }

            //owner can always access
            if($album->creator == $this->my->id){
                return true;
            }

            //if( !CPrivacy::isAccessAllowed($this->my->id, $this->user->id, 'user', 'privacyPhotoView') || $album->creator != $this->user->id )
            if (!CPrivacy::isAccessAllowed($this->my->id, $this->user->id, 'custom', $album->permissions)) {
                $this->noAccess();
                return false;
            }else{
                return true;
            }

            return false;
        }

        public function isAlbumOwner($albumId) {

            if ($this->my->id == 0)
                return false;

            $album = Table::getInstance('Album', 'CTable');
            $album->load($albumId);

            return COwnerHelper::isMine($this->my->id, $album->creator);
        }

        /**
         * Return the uri to the album view, given the album id
         */
        public function getAlbumURI($albumId) {
            return CRoute::_('index.php?option=com_community&view=photos&task=album&albumid=' . $albumId . '&userid=' . $this->user->id);
        }

        public function getAlbumExternalURI($albumId) {
            return CRoute::getExternalURL('index.php?option=com_community&view=photos&task=album&albumid=' . $albumId . '&userid=' . $this->user->id);
        }

        /**
         * Return the uri to the photo view, given the album id and photo id
         */
        public function getPhotoURI($photoId, $albumId) {
            return CRoute::_('index.php?option=com_community&view=photos&task=photo&userid=' . $this->user->id . '&albumid=' . $albumId . '&photoid=' . $photoId);
        }

        public function getPhotoExternalURI($photoId, $albumId) {
            return CRoute::getExternalURL('index.php?option=com_community&view=photos&task=album&albumid=' . $albumId . '&userid=' . $this->user->id . '&photoid=' . $photoId);
        }

        public function isExceedUploadLimit() {
            $my = CFactory::getUser();

            if (CLimitsHelper::exceededPhotoUpload($my->id, PHOTOS_USER_TYPE)) {
                $config = CFactory::getConfig();
                $photoLimit = $config->get('photouploadlimit');

                echo Text::sprintf('COM_COMMUNITY_PHOTOS_UPLOAD_LIMIT_REACHED', $photoLimit);
                return true;
            }
            return false;
        }

        /**
         * Return data for the 'all album' view
         * @param string $sortBy
         * @return mixed
         */
        public function getAllAlbumData($sortBy = 'date', $type = 'special') {
            $albumsData['data'] = $this->model->getAllAlbums($this->my->id, 0, $sortBy, $type);
            $albumsData['pagination'] = $this->model->getPagination();
            return $albumsData;
        }

        public function setMiniHeader() {
            //if ($this->my->id != $this->user->id) {
                $this->view->attachMiniHeaderUser($this->user->id);
            //}
        }

        public function getCreatorName() {
            return $this->user->getDisplayName();
        }

    }

    class CommunityViewPhotosGroupHandler extends CommunityViewPhotoHandler {

        private $groupid = null;

        /**
         * Constructor
         */
        public function __construct($viewObj) {
            parent::__construct($viewObj);

            $jinput = Factory::getApplication()->input;
            $this->groupid = $jinput->get('groupid', 0, 'INT');
        }

        public function getFlashUploadURI($token, $albumId) {
            $session = Factory::getSession();
            $url = 'index.php?option=com_community&view=photos&task=upload&no_html=1&albumid=' . $albumId . '&tmpl=component';
            $url .= '&' . $session->getName() . '=' . $session->getId() . '&token=' . $token->token . '&uploaderid=' . $this->my->id . '&groupid=' . $this->groupid;
            $url = JURI::root(true). '/' . $url;
            return $url;
        }

        public function getAlbumCreateLink() {
            return CRoute::_('index.php?option=com_community&view=photos&task=newalbum&groupid=' . $this->groupid);
        }

        public function isWallAllowed() {
            return $this->isTaggable();
        }

        public function isTaggable() {
            //CFactory::load( 'helpers' , 'owner' );
            //CFactory::load( 'models' , 'groups' );
            $group = Table::getInstance('Group', 'CTable');
            $group->load($this->groupid);

            //check if we can allow the current viewing user to tag the photos
            if ($group->isMember($this->my->id) || $group->isAdmin($this->my->id) || COwnerHelper::isCommunityAdmin()) {
                return true;
            }
            return false;
        }

        public function getTaggingUsers() {
            // for photo tagging. only allow to tag members
            $model = CFactory::getModel('groups');
            $ids = $model->getMembersId($this->groupid, true);
            $users = array();

            $group = Table::getInstance('Group', 'CTable');
            $group->load($this->groupid);

            foreach ($ids as $id) {
                if ($this->my->id != $id) {
                    $user = CFactory::getUser($id);
                    $users[] = $user;
                }
            }

            //CFactory::load( 'helpers' , 'owner' );

            if (COwnerHelper::isCommunityAdmin() || $group->isAdmin($this->my->id) || $group->isMember($this->my->id))
                array_unshift($users, $this->my);

            return $users;
        }

        public function setRSSHeader($albumId) {
            return;
        }

        public function getAlbumPhotos($albumId) {
            $config = CFactory::getConfig();
            $model = CFactory::getModel('Photos');

            // @todo: make limit configurable?
            return $model->getAllPhotos($albumId, PHOTOS_GROUP_TYPE, null, null, $config->get('photosordering'));
        }

        public function setSubmenus() {
            //CFactory::load( 'helpers' , 'group' );
            //CFactory::load( 'helpers' , 'owner' );
            $jinput = Factory::getApplication()->input;

            $task = $userid = $jinput->get('task', '', 'WORD');
            $albumId = $userid = $jinput->get('albumid', 0, 'INT');
            $photoId = $userid = $jinput->get('photoid', 0, 'INT');
            $groupId = $userid = $jinput->get('groupid', 0, 'INT');

            if (!empty($albumId)) {
                $album = Table::getInstance('Album', 'CTable');
                $album->load($albumId);
                $groupId = $album->groupid;
            }

            //CFactory::load( 'models' , 'groups' );
            $config = CFactory::getConfig();
            $group = Table::getInstance('Group', 'CTable');
            $group->load($groupId);

            $my = CFactory::getUser();
            $albumId = $albumId != 0 ? $albumId : '';

            // Check if the current user is banned from this group
            $isBanned = $group->isBanned($my->id);
            $allowManagePhotos = CGroupHelper::allowManagePhoto($this->groupid);

            if (($task == 'uploader' || $task == 'photo' || $task =='album') && !empty($albumId)) {
                $this->view->addSubmenuItem('index.php?option=com_community&view=photos&groupid=' . $this->groupid . '&task=' . ($photoId > 0 ? 'album' : 'display') . '&albumid=' . $albumId, Text::_('COM_COMMUNITY_PHOTOS_BACK_TO_ALBUM'));
            }

            if ($allowManagePhotos && $task != 'photo' && !$isBanned) {
                /* Group: Upload Photos */
                if ($task == 'album' && ( ($my->id == $album->creator && $allowManagePhotos ) || $group->isAdmin($my->id) || COwnerHelper::isCommunityAdmin() )) {

                    if(!CAlbumsHelper::isFixedAlbum($album)){
                        $this->view->addSubmenuItem('javascript:', Text::_('COM_COMMUNITY_PHOTOS_ALBUM_DELETE'), "joms.api.albumRemove('" . $album->id . "', '" . $task . "');", true);
                        $this->view->addSubmenuItem('index.php?option=com_community&view=photos&task=editAlbum&albumid=' . $album->id . '&groupid=' . $group->id . '&referrer=albumgrp', Text::_('COM_COMMUNITY_EDIT_ALBUM'), '', true);
                    }
                }

                //$this->view->addSubmenuItem('index.php?option=com_community&view=photos&task=newalbum&groupid=' . $this->groupid, Text::_('COM_COMMUNITY_PHOTOS_CREATE_PHOTO_ALBUM'), '', true, '', '');
            }

            if ($task == 'photo') {
                if ($album->hasAccess($my->id, 'deletephotos')) {
                    $this->view->addSubmenuItem('', Text::_('COM_COMMUNITY_PHOTOS_DELETE'), "joms_delete_photo();", true);
                }

                if ($my->id == $album->creator) {
                    $this->view->addSubmenuItem('', Text::_('COM_COMMUNITY_PHOTOS_SET_AVATAR'), "joms_set_as_profile_picture();", true);
                }

                if (($my->id == $album->creator && $allowManagePhotos ) || $group->isAdmin($my->id) || COwnerHelper::isCommunityAdmin()) {
                    $this->view->addSubmenuItem('', Text::_('COM_COMMUNITY_PHOTOS_SET_AS_ALBUM_COVER'), "joms_set_as_album_cover();", true);
                }

                if (!$config->get('deleteoriginalphotos')) {
                    $this->view->addSubmenuItem('', Text::_('COM_COMMUNITY_DOWNLOAD_IMAGE'), "joms_download_photo();", true);
                }

                if ($groupId != '' && $task=='myphotos') {
                    $this->view->addSubmenuItem('index.php?option=com_community&view=photos&task=newalbum&groupid=' . $groupId, Text::_('COM_COMMUNITY_PHOTOS_CREATE_PHOTO_ALBUM'), '', true);
                } elseif($task=='myphotos') {
                    $this->view->addSubmenuItem('index.php?option=com_community&view=photos&task=newalbum&userid=' . $my->id, Text::_('COM_COMMUNITY_PHOTOS_CREATE_PHOTO_ALBUM'), '', true);
              }
            }

            if($task == "display" && $task=='myphotos'){
                $this->view->addSubmenuItem('index.php?option=com_community&view=photos&task=newalbum&groupid=' . $groupId, Text::_('COM_COMMUNITY_PHOTOS_CREATE_PHOTO_ALBUM'), '', true);
            }


            //$this->view->addSubmenuItem('index.php?option=com_community&view=groups&task=viewgroup&groupid=' . $this->groupid, Text::_('COM_COMMUNITY_GROUPS_BACK_TO_GROUP'));
        }

        /**
         * Deprecated since 1.8.9
         * */
        public function isPhotoBrowsable($photoId) {
            return $this->isAlbumBrowsable($photoId);
        }

        public function isAlbumOwner($albumId) {

            if ($this->my->id == 0)
                return false;

            $group = Table::getInstance('Group', 'CTable');
            $group->load($this->groupid);

            $album = Table::getInstance('Album', 'CTable');
            $album->load($albumId);

            if ($album->creator == $this->my->id || COwnerHelper::isCommunityAdmin()) {
                return true;
            }

            return false;
        }

        public function isAlbumBrowsable($albumId) {
            $album = Table::getInstance('Album', 'CTable');
            $album->load($albumId);

            $group = Table::getInstance('Group', 'CTable');
            $group->load($album->groupid);

            $document = Factory::getDocument();
            $mainframe = Factory::getApplication();

            //@rule: Do not allow non members to view albums for private group
            if ($group->approvals == COMMUNITY_PRIVATE_GROUP && !$group->isMember($this->my->id) && !$group->isAdmin($this->my->id) && !COwnerHelper::isCommunityAdmin()) {
                /**
                 * Opengraph
                 */
                CHeadHelper::setType('website', Text::_('COM_COMMUNITY_RESTRICTED_ACCESS'));
                $mainframe->enqueueMessage(Text::_('COM_COMMUNITY_RESTRICTED_ACCESS', 'notice'));

                echo Text::_('COM_COMMUNITY_GROUPS_ALBUM_MEMBER_PERMISSION');
                return false;
            }

            return true;
        }

        public function getType() {
            return PHOTOS_GROUP_TYPE;
        }

        /**
         * Return the uri to the album view, given the album id
         */
        public function getAlbumURI($albumId) {
            return CRoute::_('index.php?option=com_community&view=photos&task=album&albumid=' . $albumId . '&groupid=' . $this->groupid);
        }

        public function getAlbumExternalURI($albumId) {
            return CRoute::getExternalURL('index.php?option=com_community&view=photos&task=album&albumid=' . $albumId . '&groupid=' . $this->groupid);
        }

        public function getPhotoURI($photoId, $albumId) {
            return CRoute::_('index.php?option=com_community&view=photos&task=photo&groupid=' . $this->groupid . '&albumid=' . $albumId . '&photoid=' . $photoId);
        }

        public function getPhotoExternalURI($photoId, $albumId) {
            return CRoute::getExternalURL('index.php?option=com_community&view=photos&task=photo&albumid=' . $albumId . '&groupid=' . $this->groupid . '&photoid=' . $photoId);
        }

        public function isExceedUploadLimit() {
            if (CLimitsHelper::exceededPhotoUpload($this->groupid, PHOTOS_GROUP_TYPE)) {
                $config = CFactory::getConfig();
                $photoLimit = $config->get('groupphotouploadlimit');

                echo Text::sprintf('COM_COMMUNITY_GROUPS_PHOTO_LIMIT', $photoLimit);
                return TRUE;
            }

            return FALSE;
        }

        /**
         * Return data for the 'all album' view
         */
        public function getAllAlbumData() {
            $my = CFactory::getUser();
            $group = Table::getInstance('Group', 'CTable');
            $group->load($this->groupid);

            $type = PHOTOS_GROUP_TYPE;

            if(!$this->groupid){
                // if there is no id supplied, this should be listing all the group album that is visible to the current user
                $excludeType = array(
                    'group.default',
                    'group.gif',
                    'group.stream',
                    'group.cover',
                    'group.avatar'
                );

                $groupModel = CFactory::getModel('groups');
                $groupsId = $groupModel->getUserViewablegroups(CFactory::getUser()->id);
                $albumsData['data'] = $this->model->getGroupAlbums($groupsId, $type, false, '', false, '', $excludeType);
                $albumsData['pagination'] = $this->model->getPagination();
                return $albumsData;
            }

            //@rule: Do not allow non members to view albums for private group
            if ($group->approvals == COMMUNITY_PRIVATE_GROUP && !$group->isMember($my->id) && !CFactory::getUser()->authorise('community.groupedit', 'com_community') && !CFactory::getUser()->authorise('community.groupeditstate', 'com_community') && !CFactory::getUser()->authorise('community.groupdelete', 'com_community')) {
                $this->noAccess();
                return FALSE;
            }

            $albumsData['data'] = $this->model->getGroupAlbums($this->groupid, $type);
            $albumsData['pagination'] = $this->model->getPagination();

            return $albumsData;
        }

        public function setMiniHeader() {
            // Do nothing because the mini header for groups are done on the view itself. Function is to satisfy the abstract.
        }

        public function setAlbumPathway($albumName) {
            $mainframe = Factory::getApplication();
            $pathway = $mainframe->getPathway();
            $pathway->addItem($albumName, '');
        }

        public function getCreatorName() {
            $group = Table::getInstance('Group', 'CTable');
            $group->load($this->groupid);

            return $group->name;
        }

    }

    class CommunityViewPhotosPageHandler extends CommunityViewPhotoHandler {

        private $pageid = null;

        /**
         * Constructor
         */
        public function __construct($viewObj) {
            parent::__construct($viewObj);

            $jinput = Factory::getApplication()->input;
            $this->pageid = $jinput->get('pageid', 0, 'INT');
        }

        public function getFlashUploadURI($token, $albumId) {
            $session = Factory::getSession();
            $url = 'index.php?option=com_community&view=photos&task=upload&no_html=1&albumid=' . $albumId . '&tmpl=component';
            $url .= '&' . $session->getName() . '=' . $session->getId() . '&token=' . $token->token . '&uploaderid=' . $this->my->id . '&pageid=' . $this->pageid;
            $url = JURI::root(true). '/' . $url;
            return $url;
        }

        public function getAlbumCreateLink() {
            return CRoute::_('index.php?option=com_community&view=photos&task=newalbum&pageid=' . $this->pageid);
        }

        public function isWallAllowed() {
            return $this->isTaggable();
        }

        public function isTaggable() {
            $page = Table::getInstance('Page', 'CTable');
            $page->load($this->pageid);

            //check if we can allow the current viewing user to tag the photos
            if ($page->isMember($this->my->id) || $page->isAdmin($this->my->id) || COwnerHelper::isCommunityAdmin()) {
                return true;
            }
            return false;
        }

        public function getTaggingUsers() {
            // for photo tagging. only allow to tag members
            $model = CFactory::getModel('pages');
            $ids = $model->getMembersId($this->pageid, true);
            $users = array();

            $page = Table::getInstance('Page', 'CTable');
            $page->load($this->pageid);

            foreach ($ids as $id) {
                if ($this->my->id != $id) {
                    $user = CFactory::getUser($id);
                    $users[] = $user;
                }
            }

            if (COwnerHelper::isCommunityAdmin() || $page->isAdmin($this->my->id) || $page->isMember($this->my->id))
                array_unshift($users, $this->my);

            return $users;
        }

        public function setRSSHeader($albumId) {
            return;
        }

        public function getAlbumPhotos($albumId) {
            $config = CFactory::getConfig();
            $model = CFactory::getModel('Photos');

            // @todo: make limit configurable?
            return $model->getAllPhotos($albumId, PHOTOS_PAGE_TYPE, null, null, $config->get('photosordering'));
        }

        public function setSubmenus() {
            $jinput = Factory::getApplication()->input;

            $task = $userid = $jinput->get('task', '', 'WORD');
            $albumId = $userid = $jinput->get('albumid', 0, 'INT');
            $photoId = $userid = $jinput->get('photoid', 0, 'INT');
            $pageId = $userid = $jinput->get('pageid', 0, 'INT');

            if (!empty($albumId)) {
                $album = Table::getInstance('Album', 'CTable');
                $album->load($albumId);
                $pageId = $album->pageid;
            }

            //CFactory::load( 'models' , 'pages' );
            $config = CFactory::getConfig();
            $page = Table::getInstance('Page', 'CTable');
            $page->load($pageId);

            $my = CFactory::getUser();
            $albumId = $albumId != 0 ? $albumId : '';

            // Check if the current user is banned from this page
            $isBanned = $page->isBanned($my->id);
            $allowManagePhotos = CPageHelper::allowManagePhoto($this->pageid);

            if (($task == 'uploader' || $task == 'photo' || $task =='album') && !empty($albumId)) {
                $this->view->addSubmenuItem('index.php?option=com_community&view=photos&pageid=' . $this->pageid . '&task=' . ($photoId > 0 ? 'album' : 'display') . '&albumid=' . $albumId, Text::_('COM_COMMUNITY_PHOTOS_BACK_TO_ALBUM'));
            }

            if ($allowManagePhotos && $task != 'photo' && !$isBanned) {
                /* Page: Upload Photos */
                if ($task == 'album' && ( ($my->id == $album->creator && $allowManagePhotos ) || $page->isAdmin($my->id) || COwnerHelper::isCommunityAdmin() )) {

                    if(!CAlbumsHelper::isFixedAlbum($album)){
                        $this->view->addSubmenuItem('javascript:', Text::_('COM_COMMUNITY_PHOTOS_ALBUM_DELETE'), "joms.api.albumRemove('" . $album->id . "', '" . $task . "');", true);
                        $this->view->addSubmenuItem('index.php?option=com_community&view=photos&task=editAlbum&albumid=' . $album->id . '&pageid=' . $page->id . '&referrer=albumpg', Text::_('COM_COMMUNITY_EDIT_ALBUM'), '', true);
                    }
                }
            }

            if ($task == 'photo') {
                if ($album->hasAccess($my->id, 'deletephotos')) {
                    $this->view->addSubmenuItem('', Text::_('COM_COMMUNITY_PHOTOS_DELETE'), "joms_delete_photo();", true);
                }

                if ($my->id == $album->creator) {
                    $this->view->addSubmenuItem('', Text::_('COM_COMMUNITY_PHOTOS_SET_AVATAR'), "joms_set_as_profile_picture();", true);
                }

                if (($my->id == $album->creator && $allowManagePhotos ) || $page->isAdmin($my->id) || COwnerHelper::isCommunityAdmin()) {
                    $this->view->addSubmenuItem('', Text::_('COM_COMMUNITY_PHOTOS_SET_AS_ALBUM_COVER'), "joms_set_as_album_cover();", true);
                }

                if (!$config->get('deleteoriginalphotos')) {
                    $this->view->addSubmenuItem('', Text::_('COM_COMMUNITY_DOWNLOAD_IMAGE'), "joms_download_photo();", true);
                }

                if ($pageId != '' && $task=='myphotos') {
                    $this->view->addSubmenuItem('index.php?option=com_community&view=photos&task=newalbum&pageid=' . $pageId, Text::_('COM_COMMUNITY_PHOTOS_CREATE_PHOTO_ALBUM'), '', true);
                } elseif($task=='myphotos') {
                    $this->view->addSubmenuItem('index.php?option=com_community&view=photos&task=newalbum&userid=' . $my->id, Text::_('COM_COMMUNITY_PHOTOS_CREATE_PHOTO_ALBUM'), '', true);
              }
            }

            if($task == "display" && $task=='myphotos'){
                $this->view->addSubmenuItem('index.php?option=com_community&view=photos&task=newalbum&pageid=' . $pageId, Text::_('COM_COMMUNITY_PHOTOS_CREATE_PHOTO_ALBUM'), '', true);
            }
        }

        /**
         * Deprecated since 1.8.9
         * */
        public function isPhotoBrowsable($photoId) {
            return $this->isAlbumBrowsable($photoId);
        }

        public function isAlbumOwner($albumId) {

            if ($this->my->id == 0)
                return false;

            $page = Table::getInstance('Page', 'CTable');
            $page->load($this->pageid);

            $album = Table::getInstance('Album', 'CTable');
            $album->load($albumId);

            if ($album->creator == $this->my->id || COwnerHelper::isCommunityAdmin()) {
                return true;
            }

            return false;
        }

        public function isAlbumBrowsable($albumId) {
            $album = Table::getInstance('Album', 'CTable');
            $album->load($albumId);

            $page = Table::getInstance('Page', 'CTable');
            $page->load($album->pageid);

            $document = Factory::getDocument();
            $mainframe = Factory::getApplication();

            //@rule: Do not allow non members to view albums for private page
            if ($page->approvals == COMMUNITY_PRIVATE_PAGE && !$page->isMember($this->my->id) && !$page->isAdmin($this->my->id) && !COwnerHelper::isCommunityAdmin()) {
                /**
                 * Opengraph
                 */
                CHeadHelper::setType('website', Text::_('COM_COMMUNITY_RESTRICTED_ACCESS'));
                $mainframe->enqueueMessage(Text::_('COM_COMMUNITY_RESTRICTED_ACCESS', 'notice'));

                echo Text::_('COM_COMMUNITY_PAGES_ALBUM_MEMBER_PERMISSION');
                return false;
            }

            return true;
        }

        public function getType() {
            return PHOTOS_PAGE_TYPE;
        }

        /**
         * Return the uri to the album view, given the album id
         */
        public function getAlbumURI($albumId) {
            return CRoute::_('index.php?option=com_community&view=photos&task=album&albumid=' . $albumId . '&pageid=' . $this->pageid);
        }

        public function getAlbumExternalURI($albumId) {
            return CRoute::getExternalURL('index.php?option=com_community&view=photos&task=album&albumid=' . $albumId . '&pageid=' . $this->pageid);
        }

        public function getPhotoURI($photoId, $albumId) {
            return CRoute::_('index.php?option=com_community&view=photos&task=photo&pageid=' . $this->pageid . '&albumid=' . $albumId . '&photoid=' . $photoId);
        }

        public function getPhotoExternalURI($photoId, $albumId) {
            return CRoute::getExternalURL('index.php?option=com_community&view=photos&task=photo&albumid=' . $albumId . '&pageid=' . $this->pageid . '&photoid=' . $photoId);
        }

        public function isExceedUploadLimit() {
            if (CLimitsHelper::exceededPhotoUpload($this->pageid, PHOTOS_PAGE_TYPE)) {
                $config = CFactory::getConfig();
                $photoLimit = $config->get('pagephotouploadlimit');

                echo Text::sprintf('COM_COMMUNITY_PAGES_PHOTO_LIMIT', $photoLimit);
                return TRUE;
            }

            return FALSE;
        }

        /**
         * Return data for the 'all album' view
         */
        public function getAllAlbumData() {
            $my = CFactory::getUser();
            $page = Table::getInstance('Page', 'CTable');
            $page->load($this->pageid);

            $type = PHOTOS_PAGE_TYPE;

            if(!$this->pageid){
                // if there is no id supplied, this should be listing all the page album that is visible to the current user
                $excludeType = array(
                    'page.default',
                    'page.gif',
                    'page.stream',
                    'page.cover',
                    'page.avatar'
                );

                $pageModel = CFactory::getModel('pages');
                $pagesId = $pageModel->getUserViewablepages(CFactory::getUser()->id);
                $albumsData['data'] = $this->model->getPageAlbums($pagesId, $type, false, '', false, '', $excludeType);
                $albumsData['pagination'] = $this->model->getPagination();
                return $albumsData;
            }

            //@rule: Do not allow non members to view albums for private page
            if ($page->approvals == COMMUNITY_PRIVATE_PAGE && !$page->isMember($my->id) && !CFactory::getUser()->authorise('community.pageedit', 'com_community') && !CFactory::getUser()->authorise('community.pageeditstate', 'com_community') && !CFactory::getUser()->authorise('community.pagedelete', 'com_community')) {
                $this->noAccess();
                return FALSE;
            }

            $albumsData['data'] = $this->model->getPageAlbums($this->pageid, $type);
            $albumsData['pagination'] = $this->model->getPagination();

            return $albumsData;
        }

        public function setMiniHeader() {
            // Do nothing because the mini header for pages are done on the view itself. Function is to satisfy the abstract.
        }

        public function setAlbumPathway($albumName) {
            $mainframe = Factory::getApplication();
            $pathway = $mainframe->getPathway();
            $pathway->addItem($albumName, '');
        }

        public function getCreatorName() {
            $page = Table::getInstance('Page', 'CTable');
            $page->load($this->pageid);

            return $page->name;
        }

    }

    class CommunityViewPhotosEventHandler extends CommunityViewPhotoHandler {

        private $eventid = null;

        /**
         * Constructor
         */
        public function __construct($viewObj) {
            parent::__construct($viewObj);

            $mainframe = Factory::getApplication();
            $jinput = $mainframe->input;
            $this->eventid = $jinput->get('eventid', '', 'INT');
        }

        public function getFlashUploadURI($token, $albumId) {
            $session = Factory::getSession();
            $url = 'index.php?option=com_community&view=photos&task=upload&no_html=1&albumid=' . $albumId . '&tmpl=component';
            $url .= '&' . $session->getName() . '=' . $session->getId() . '&token=' . $token->token . '&uploaderid=' . $this->my->id . '&eventid=' . $this->eventid;
            $url = JURI::root(true). '/' . $url;
            return $url;

//		$url = CRoute::_($url);
//		$uri = JURI::getInstance();
//		$uri = new JURI($uri->toString());
//		$uri->setPath($url);
//		$uri->setQuery('');
//		return $uri->toString();
        }

        public function getAlbumCreateLink() {
            return CRoute::_('index.php?option=com_community&view=photos&task=newalbum&eventid=' . $this->eventid);
        }

        public function isWallAllowed() {
            return $this->isTaggable();
        }

        public function isTaggable() {
            //CFactory::load( 'helpers' , 'owner' );
            //CFactory::load( 'models' , 'groups' );
            $event = Table::getInstance('Event', 'CTable');
            $event->load($this->eventid);

            //check if we can allow the current viewing user to tag the photos
            if ($event->isMember($this->my->id) || $event->isAdmin($this->my->id) || COwnerHelper::isCommunityAdmin()) {
                return true;
            }
            return false;
        }

        public function getTaggingUsers() {
            // for photo tagging. only allow to tag members
            $model = CFactory::getModel('events');
            $ids = $model->getMembersId($this->eventid, true);
            $users = array();

            $event = Table::getInstance('Event', 'CTable');
            $event->load($this->eventid);

            foreach ($ids as $id) {
                if ($this->my->id != $id) {
                    $user = CFactory::getUser($id);
                    $users[] = $user;
                }
            }

            //CFactory::load( 'helpers' , 'owner' );

            if (COwnerHelper::isCommunityAdmin() || $event->isAdmin($this->my->id) || $event->isMember($this->my->id))
                array_unshift($users, $this->my);

            return $users;
        }

        public function setRSSHeader($albumId) {
            return;
        }

        public function getAlbumPhotos($albumId) {
            $config = CFactory::getConfig();
            $model = CFactory::getModel('Photos');

            // @todo: make limit configurable?
            return $model->getAllPhotos($albumId, PHOTOS_EVENT_TYPE, null, null, $config->get('photosordering'));
        }

        public function setSubmenus() {
            //CFactory::load( 'helpers' , 'group' );
            //CFactory::load( 'helpers' , 'owner' );
            $jinput = Factory::getApplication()->input;

            $task = $userid = $jinput->get('task', '', 'WORD');
            $albumId = $userid = $jinput->get('albumid', 0, 'INT');
            $eventid = $userid = $jinput->get('eventid', 0, 'INT');

            if (!empty($albumId)) {
                $album = Table::getInstance('Album', 'CTable');
                $album->load($albumId);
                $eventid = $album->eventid;
            }

            $config = CFactory::getConfig();
            $event = Table::getInstance('Event', 'CTable');
            $event->load($eventid);

            $my = CFactory::getUser();
            $albumId = $albumId != 0 ? $albumId : '';

            // Check if the current user is banned from this event
            $isBanned = false;
            $allowManagePhotos = CEventHelper::allowManagePhoto($this->eventid);

            if (($task == 'uploader' || $task == 'photo' || $task == 'album') && !empty($albumId)) {
                $this->view->addSubmenuItem('index.php?option=com_community&view=photos&eventid=' . $this->eventid . '&albumid=' . $albumId, Text::_('COM_COMMUNITY_PHOTOS_BACK_TO_ALBUM'));
            }

            if ($allowManagePhotos && $task != 'photo' && !$isBanned) {
                /* Event: Upload Photos */
                if ($task != 'newalbum' && $task != 'editAlbum') {
                    //$this->view->addSubmenuItem('javascript:void(0);', Text::_('COM_COMMUNITY_PHOTOS_UPLOAD_PHOTOS'), 'joms.notifications.showUploadPhoto(\'' . $albumId . '\',' . $this->eventid . '); return false;', true, '', '');
                }
                
                if ($task == 'album' && ( ($my->id == $album->creator && $allowManagePhotos ) || $event->isAdmin($my->id) || COwnerHelper::isCommunityAdmin() || CFactory::getUser()->authorise('community.photodelete', 'com_community'))) {

                    if(!CAlbumsHelper::isFixedAlbum($album)){
                        $this->view->addSubmenuItem('javascript:', Text::_('COM_COMMUNITY_PHOTOS_ALBUM_DELETE'), "joms.api.albumRemove('" . $album->id . "', '" . $task . "');", true);
                    }
                }

                if ($task == 'album' && ( ($my->id == $album->creator && $allowManagePhotos ) || $event->isAdmin($my->id) || COwnerHelper::isCommunityAdmin() || CFactory::getUser()->authorise('community.photoedit', 'com_community'))) {

                    if(!CAlbumsHelper::isFixedAlbum($album)){
                        $this->view->addSubmenuItem('index.php?option=com_community&view=photos&task=editAlbum&albumid=' . $album->id . '&eventid=' . $event->id . '&referrer=albumgrp', Text::_('COM_COMMUNITY_EDIT_ALBUM'), '', true);
                    }
                }

                //$this->view->addSubmenuItem('index.php?option=com_community&view=photos&task=newalbum&eventid=' . $this->eventid, Text::_('COM_COMMUNITY_PHOTOS_CREATE_PHOTO_ALBUM'), '', true, '', '');
            }

            if ($task == 'photo') {
                if ($album->hasAccess($my->id, 'deletephotos')) {
                    $this->view->addSubmenuItem('', Text::_('COM_COMMUNITY_PHOTOS_DELETE'), "joms_delete_photo();", true);
                }

                if ($my->id == $album->creator) {
                    $this->view->addSubmenuItem('', Text::_('COM_COMMUNITY_PHOTOS_SET_AVATAR'), "joms_set_as_profile_picture();", true);
                }

                if (($my->id == $album->creator && $allowManagePhotos ) || $event->isAdmin($my->id) || COwnerHelper::isCommunityAdmin()) {
                    $this->view->addSubmenuItem('', Text::_('COM_COMMUNITY_PHOTOS_SET_AS_ALBUM_COVER'), "joms_set_as_album_cover();", true);
                }

                if (!$config->get('deleteoriginalphotos')) {
                    $this->view->addSubmenuItem('', Text::_('COM_COMMUNITY_DOWNLOAD_IMAGE'), "joms_download_photo();", true);
                }

                if ($eventid != '' && $task=='myphotos') {
                    $this->view->addSubmenuItem('index.php?option=com_community&view=photos&task=newalbum&eventid=' . $eventid, Text::_('COM_COMMUNITY_PHOTOS_CREATE_PHOTO_ALBUM'), '', true);
                } elseif($task=='myphotos') {
                    $this->view->addSubmenuItem('index.php?option=com_community&view=photos&task=newalbum&userid=' . $my->id, Text::_('COM_COMMUNITY_PHOTOS_CREATE_PHOTO_ALBUM'), '', true);
                }
            }

            if($task == "display" && $task=='myphotos'){
                $this->view->addSubmenuItem('index.php?option=com_community&view=photos&task=newalbum&eventid=' . $eventid, Text::_('COM_COMMUNITY_PHOTOS_CREATE_PHOTO_ALBUM'), '', true);
            }


            //$this->view->addSubmenuItem('index.php?option=com_community&view=groups&task=viewgroup&eventid=' . $this->eventid, Text::_('COM_COMMUNITY_EVENTS_BACK_TO_EVENT'));
        }

        /**
         * Deprecated since 1.8.9
         * */
        public function isPhotoBrowsable($photoId) {
            return $this->isAlbumBrowsable($photoId);
        }

        public function isAlbumOwner($albumId) {

            if ($this->my->id == 0)
                return false;

            $event = Table::getInstance('Event', 'CTable');
            $event->load($this->eventid);

            $album = Table::getInstance('Album', 'CTable');
            $album->load($albumId);

            if ($album->creator == $this->my->id || COwnerHelper::isCommunityAdmin()) {
                return true;
            }

            return false;
        }

        public function isAlbumBrowsable($albumId) {
            $album = Table::getInstance('Album', 'CTable');
            $album->load($albumId);

            $event = Table::getInstance('Event', 'CTable');
            $event->load($album->eventid);

            if($event->type == 'group' && $event->contentid){
                $group = Table::getInstance('Group', 'CTable');
                $group->load($event->contentid);
                $mainframe = Factory::getApplication();

                //@rule: Do not allow non members to view albums for private group
                if ($group->approvals == COMMUNITY_PRIVATE_GROUP && !$group->isMember($this->my->id) && !$group->isAdmin($this->my->id) && !COwnerHelper::isCommunityAdmin()) {
                    /**
                     * Opengraph
                     */
                    CHeadHelper::setType('website', Text::_('COM_COMMUNITY_RESTRICTED_ACCESS'));
                    $mainframe->enqueueMessage(Text::_('COM_COMMUNITY_RESTRICTED_ACCESS', 'notice'));

                    echo Text::_('COM_COMMUNITY_GROUPS_ALBUM_MEMBER_PERMISSION');
                    return false;
                }
            } else if($event->type == 'page' && $event->contentid){
                $page = Table::getInstance('Page', 'CTable');
                $page->load($event->contentid);
                $mainframe = Factory::getApplication();

                //@rule: Do not allow non members to view albums for private page
                if ($page->approvals == COMMUNITY_PRIVATE_PAGE && !$page->isMember($this->my->id) && !$page->isAdmin($this->my->id) && !COwnerHelper::isCommunityAdmin()) {
                    /**
                     * Opengraph
                     */
                    CHeadHelper::setType('website', Text::_('COM_COMMUNITY_RESTRICTED_ACCESS'));
                    $mainframe->enqueueMessage(Text::_('COM_COMMUNITY_RESTRICTED_ACCESS', 'notice'));

                    echo Text::_('COM_COMMUNITY_GROUPS_ALBUM_MEMBER_PERMISSION');
                    return false;
                }
            }

            return true;
        }

        public function getType() {
            return PHOTOS_GROUP_TYPE;
        }

        /**
         * Return the uri to the album view, given the album id
         */
        public function getAlbumURI($albumId) {
            return CRoute::_('index.php?option=com_community&view=photos&task=album&albumid=' . $albumId . '&eventid=' . $this->eventid);
        }

        public function getAlbumExternalURI($albumId) {
            return CRoute::getExternalURL('index.php?option=com_community&view=photos&task=album&albumid=' . $albumId . '&eventid=' . $this->eventid);
        }

        public function getPhotoURI($photoId, $albumId) {
            return CRoute::_('index.php?option=com_community&view=photos&task=photo&eventid=' . $this->eventid . '&albumid=' . $albumId . '&photoid=' . $photoId);
        }

        public function getPhotoExternalURI($photoId, $albumId) {
            return CRoute::getExternalURL('index.php?option=com_community&view=photos&task=photo&albumid=' . $albumId . '&eventid=' . $this->eventid . '&photoid=' . $photoId);
        }

        public function isExceedUploadLimit() {
            if (CLimitsHelper::exceededPhotoUpload($this->groupid, PHOTOS_EVENT_TYPE)) {
                $config = CFactory::getConfig();
                $photoLimit = $config->get('eventphotouploadlimit');

                echo Text::sprintf('COM_COMMUNITY_EVENTS_PHOTO_LIMIT', $photoLimit);
                return TRUE;
            }

            return FALSE;
        }

        /**
         * Return data for the 'all album' view
         */
        public function getAllAlbumData() {
            $my = CFactory::getUser();
            $event = Table::getInstance('Event', 'CTable');
            $event->load($this->eventid);
            $type = PHOTOS_EVENT_TYPE;

            if(!$this->eventid){
                // if there is no id supplied, this should be listing all the events album that is visible to the current user
                $excludeType = array(
                    'event.default',
                    'event.gif',
                    'event.stream',
                    'event.cover',
                    'event.avatar'
                );

                $eventModel = CFactory::getModel('events');
                $eventsId = $eventModel->getUserViewableEvents(CFactory::getUser()->id);
                $albumsData['data'] = $this->model->getEventAlbums($eventsId, $type, false, '', false, '', $excludeType);
                $albumsData['pagination'] = $this->model->getPagination();
                return $albumsData;
            }

            //check if this event belongs to a group
            if($event->type == 'group' && $event->contentid){
                $groupid = $event->contentid;
                $group = Table::getInstance('Group', 'CTable');
                $group->load($groupid);

                //@rule: Do not allow non members to view albums for private group
                if ($group->approvals == COMMUNITY_PRIVATE_GROUP && !$group->isMember($my->id) && !$group->isAdmin($my->id)) {
                    $this->noAccess();
                    return FALSE;
                }
            }

            //check if this event belongs to a page
            if($event->type == 'page' && $event->contentid){
                $pageid = $event->contentid;
                $page = Table::getInstance('Page', 'CTable');
                $page->load($pageid);

                //@rule: Do not allow non members to view albums for private page
                if ($page->approvals == COMMUNITY_PRIVATE_PAGE && !$page->isMember($my->id) && !$page->isAdmin($my->id)) {
                    $this->noAccess();
                    return FALSE;
                }
            }

            $allowShow = array(COMMUNITY_EVENT_STATUS_ATTEND,COMMUNITY_EVENT_STATUS_WONTATTEND,COMMUNITY_EVENT_STATUS_MAYBE);
            if(($event->permission == 1 || $event->unlisted == 1) && !in_array($event->getUserStatus($my->id),$allowShow)){
                //this is a invitation only group or unlisted event, so we only show covers album and exclude others
                $excludeType = array(
                    'event',
                    'event.gif',
                    'event.stream'
                );
                $albumsData['data'] = $this->model->getEventAlbums($this->eventid, false, false, '', false, '', $excludeType);
            }else{
                $albumsData['data'] = $this->model->getEventAlbums($this->eventid, $type);
            }


            $albumsData['pagination'] = $this->model->getPagination();

            return $albumsData;
        }

        public function setMiniHeader() {
            //echo CMiniHeader::showEventMiniHeader($this->eventid);
        }

        public function setAlbumPathway($albumName) {
            $mainframe = Factory::getApplication();
            $pathway = $mainframe->getPathway();
            $pathway->addItem($albumName, '');
        }

        public function getCreatorName() {
            $event = Table::getInstance('Event', 'CTable');
            $event->load($this->eventid);

            return $event->title;
        }

    }
}


