Вход Регистрация
Файл: contao-3.5.8/system/modules/calendar/modules/ModuleEventlist.php
Строк: 295
<?php

/**
 * Contao Open Source CMS
 *
 * Copyright (c) 2005-2016 Leo Feyer
 *
 * @license LGPL-3.0+
 */

namespace Contao;


/**
 * Front end module "event list".
 *
 * @author Leo Feyer <https://github.com/leofeyer>
 */
class ModuleEventlist extends Events
{

    
/**
     * Current date object
     * @var Date
     */
    
protected $Date;

    
/**
     * Template
     * @var string
     */
    
protected $strTemplate = 'mod_eventlist';


    
/**
     * Display a wildcard in the back end
     *
     * @return string
     */
    
public function generate()
    {
        if (
TL_MODE == 'BE')
        {
            
/** @var BackendTemplate|object $objTemplate */
            
$objTemplate = new BackendTemplate('be_wildcard');

            
$objTemplate->wildcard = '### ' . utf8_strtoupper($GLOBALS['TL_LANG']['FMD']['eventlist'][0]) . ' ###';
            
$objTemplate->title = $this->headline;
            
$objTemplate->id = $this->id;
            
$objTemplate->link = $this->name;
            
$objTemplate->href = 'contao/main.php?do=themes&amp;table=tl_module&amp;act=edit&amp;id=' . $this->id;

            return 
$objTemplate->parse();
        }

        
$this->cal_calendar = $this->sortOutProtected(deserialize($this->cal_calendar, true));

        
// Return if there are no calendars
        
if (!is_array($this->cal_calendar) || empty($this->cal_calendar))
        {
            return 
'';
        }

        
// Show the event reader if an item has been selected
        
if ($this->cal_readerModule > 0  && (isset($_GET['events']) || (Config::get('useAutoItem') && isset($_GET['auto_item']))))
        {
            return 
$this->getFrontendModule($this->cal_readerModule, $this->strColumn);
        }

        return 
parent::generate();
    }


    
/**
     * Generate the module
     */
    
protected function compile()
    {
        
/** @var PageModel $objPage */
        
global $objPage;

        
$blnClearInput = false;

        
$intYear = Input::get('year');
        
$intMonth = Input::get('month');
        
$intDay = Input::get('day');

        
// Jump to the current period
        
if (!isset($_GET['year']) && !isset($_GET['month']) && !isset($_GET['day']))
        {
            switch (
$this->cal_format)
            {
                case 
'cal_year':
                    
$intYear = date('Y');
                    break;

                case 
'cal_month':
                    
$intMonth = date('Ym');
                    break;

                case 
'cal_day':
                    
$intDay = date('Ymd');
                    break;
            }

            
$blnClearInput = true;
        }

        
$blnDynamicFormat = (!$this->cal_ignoreDynamic && in_array($this->cal_format, array('cal_day', 'cal_month', 'cal_year')));

        
// Create the date object
        
try
        {
            if (
$blnDynamicFormat && $intYear)
            {
                
$this->Date = new Date($intYear, 'Y');
                
$this->cal_format = 'cal_year';
                
$this->headline .= ' ' . date('Y', $this->Date->tstamp);
            }
            elseif (
$blnDynamicFormat && $intMonth)
            {
                
$this->Date = new Date($intMonth, 'Ym');
                
$this->cal_format = 'cal_month';
                
$this->headline .= ' ' . Date::parse('F Y', $this->Date->tstamp);
            }
            elseif (
$blnDynamicFormat && $intDay)
            {
                
$this->Date = new Date($intDay, 'Ymd');
                
$this->cal_format = 'cal_day';
                
$this->headline .= ' ' . Date::parse($objPage->dateFormat, $this->Date->tstamp);
            }
            else
            {
                
$this->Date = new Date();
            }
        }
        catch (
OutOfBoundsException $e)
        {
            
/** @var PageError404 $objHandler */
            
$objHandler = new $GLOBALS['TL_PTY']['error_404']();
            
$objHandler->generate($objPage->id);
        }

        list(
$strBegin, $strEnd, $strEmpty) = $this->getDatesFromFormat($this->Date, $this->cal_format);

        
// Get all events
        
$arrAllEvents = $this->getAllEvents($this->cal_calendar, $strBegin, $strEnd);
        
$sort = ($this->cal_order == 'descending') ? 'krsort' : 'ksort';

        
// Sort the days
        
$sort($arrAllEvents);

        
// Sort the events
        
foreach (array_keys($arrAllEvents) as $key)
        {
            
$sort($arrAllEvents[$key]);
        }

        
$arrEvents = array();
        
$dateBegin = date('Ymd', $strBegin);
        
$dateEnd = date('Ymd', $strEnd);

        
// Remove events outside the scope
        
foreach ($arrAllEvents as $key=>$days)
        {
            if (
$key < $dateBegin || $key > $dateEnd)
            {
                continue;
            }

            foreach (
$days as $day=>$events)
            {
                foreach (
$events as $event)
                {
                    
$event['firstDay'] = $GLOBALS['TL_LANG']['DAYS'][date('w', $day)];
                    
$event['firstDate'] = Date::parse($objPage->dateFormat, $day);

                    
$arrEvents[] = $event;
                }
            }
        }

        unset(
$arrAllEvents);
        
$total = count($arrEvents);
        
$limit = $total;
        
$offset = 0;

        
// Overall limit
        
if ($this->cal_limit > 0)
        {
            
$total = min($this->cal_limit, $total);
            
$limit = $total;
        }

        
// Pagination
        
if ($this->perPage > 0)
        {
            
$id = 'page_e' . $this->id;
            
$page = (Input::get($id) !== null) ? Input::get($id) : 1;

            
// Do not index or cache the page if the page number is outside the range
            
if ($page < 1 || $page > max(ceil($total/$this->perPage), 1))
            {
                
/** @var PageError404 $objHandler */
                
$objHandler = new $GLOBALS['TL_PTY']['error_404']();
                
$objHandler->generate($objPage->id);
            }

            
$offset = ($page - 1) * $this->perPage;
            
$limit = min($this->perPage + $offset, $total);

            
$objPagination = new Pagination($total, $this->perPage, Config::get('maxPaginationLinks'), $id);
            
$this->Template->pagination = $objPagination->generate("n  ");
        }

        
$strMonth = '';
        
$strDate = '';
        
$strEvents = '';
        
$dayCount = 0;
        
$eventCount = 0;
        
$headerCount = 0;
        
$imgSize = false;

        
// Override the default image size
        
if ($this->imgSize != '')
        {
            
$size = deserialize($this->imgSize);

            if (
$size[0] > 0 || $size[1] > 0 || is_numeric($size[2]))
            {
                
$imgSize = $this->imgSize;
            }
        }

        
// Parse events
        
for ($i=$offset; $i<$limit; $i++)
        {
            
$event = $arrEvents[$i];
            
$blnIsLastEvent = false;

            
// Last event on the current day
            
if (($i+1) == $limit || !isset($arrEvents[($i+1)]['firstDate']) || $event['firstDate'] != $arrEvents[($i+1)]['firstDate'])
            {
                
$blnIsLastEvent = true;
            }

            
/** @var FrontendTemplate|object $objTemplate */
            
$objTemplate = new FrontendTemplate($this->cal_template);
            
$objTemplate->setData($event);

            
// Month header
            
if ($strMonth != $event['month'])
            {
                
$objTemplate->newMonth = true;
                
$strMonth = $event['month'];
            }

            
// Day header
            
if ($strDate != $event['firstDate'])
            {
                
$headerCount = 0;
                
$objTemplate->header = true;
                
$objTemplate->classHeader = ((($dayCount % 2) == 0) ? ' even' : ' odd') . (($dayCount == 0) ? ' first' : '') . (($event['firstDate'] == $arrEvents[($limit-1)]['firstDate']) ? ' last' : '');
                
$strDate = $event['firstDate'];

                ++
$dayCount;
            }

            
// Show the teaser text of redirect events (see #6315)
            
if (is_bool($event['details']))
            {
                
$objTemplate->hasDetails = false;
            }

            
// Add the template variables
            
$objTemplate->classList = $event['class'] . ((($headerCount % 2) == 0) ? ' even' : ' odd') . (($headerCount == 0) ? ' first' : '') . ($blnIsLastEvent ? ' last' : '') . ' cal_' . $event['parent'];
            
$objTemplate->classUpcoming = $event['class'] . ((($eventCount % 2) == 0) ? ' even' : ' odd') . (($eventCount == 0) ? ' first' : '') . ((($offset + $eventCount + 1) >= $limit) ? ' last' : '') . ' cal_' . $event['parent'];
            
$objTemplate->readMore = specialchars(sprintf($GLOBALS['TL_LANG']['MSC']['readMore'], $event['title']));
            
$objTemplate->more = $GLOBALS['TL_LANG']['MSC']['more'];
            
$objTemplate->locationLabel = $GLOBALS['TL_LANG']['MSC']['location'];

            
// Short view
            
if ($this->cal_noSpan)
            {
                
$objTemplate->day = $event['day'];
                
$objTemplate->date = $event['date'];
            }
            else
            {
                
$objTemplate->day = $event['firstDay'];
                
$objTemplate->date = $event['firstDate'];
            }

            
$objTemplate->addImage = false;

            
// Add an image
            
if ($event['addImage'] && $event['singleSRC'] != '')
            {
                
$objModel = FilesModel::findByUuid($event['singleSRC']);

                if (
$objModel === null)
                {
                    if (!
Validator::isUuid($event['singleSRC']))
                    {
                        
$objTemplate->text = '<p class="error">'.$GLOBALS['TL_LANG']['ERR']['version2format'].'</p>';
                    }
                }
                elseif (
is_file(TL_ROOT . '/' . $objModel->path))
                {
                    if (
$imgSize)
                    {
                        
$event['size'] = $imgSize;
                    }

                    
$event['singleSRC'] = $objModel->path;
                    
$this->addImageToTemplate($objTemplate, $event);
                }
            }

            
$objTemplate->enclosure = array();

            
// Add enclosure
            
if ($event['addEnclosure'])
            {
                
$this->addEnclosuresToTemplate($objTemplate, $event);
            }

            
$strEvents .= $objTemplate->parse();

            ++
$eventCount;
            ++
$headerCount;
        }

        
// No events found
        
if ($strEvents == '')
        {
            
$strEvents = "n" . '<div class="empty">' . $strEmpty . '</div>' . "n";
        }

        
// See #3672
        
$this->Template->headline = $this->headline;
        
$this->Template->events = $strEvents;

        
// Clear the $_GET array (see #2445)
        
if ($blnClearInput)
        {
            
Input::setGet('year', null);
            
Input::setGet('month', null);
            
Input::setGet('day', null);
        }
    }
}
Онлайн: 2
Реклама