<?php declare(strict_types=1);
/**
* @package Memo\MemoPortfolioBundle
* @author Media Motion AG
* @license LGPL-3.0+
* @copyright Media Motion AG
*/
namespace Memo\PortfolioBundle\Module;
use Memo\FoundationBundle\Module\FoundationModule;
use Memo\PortfolioBundle\Model\PortfolioModel;
use Terminal42\ChangeLanguage\PageFinder;
class ModulePortfolioListing extends FoundationModule
{
/**
* Template
* @var string
*/
protected $strTemplate = 'mod_portfolio_listing';
protected function compile()
{
if (TL_MODE == 'FE')
{
// Get all selected Archives
$arrArchives = unserialize( $this->foundation_archives );
// Get override detail-page
if($this->jumpTo)
{
// Get translated Detailpage if not in main-language
$objPageFinder = new PageFinder();
$objDetailPage = $objPageFinder->findAssociatedForLanguage(\PageModel::findByPk($this->jumpTo), $GLOBALS['TL_LANGUAGE']);
}
else
{
$objDetailPage = null;
}
// Get category filters
$arrCategoryFilters = array();
if($this->categories_filter){
$arrCategoryFilters = unserialize( $this->categories_filter );
}
// Get the category filter type
$strCategoryFilterTyp = $this->categories_filter_type;
// Define default filters
$arrColumns = array();
$arrValues = array();
if(count($arrCategoryFilters) > 0 ) {
if($strCategoryFilterTyp == 'and'){
foreach($arrCategoryFilters as $intCategoryFilter){
$arrColumns[] = 'categories LIKE ?';
$arrValues[] = '%"' . $intCategoryFilter . '"%';
}
} else {
$strColumns = '(';
foreach($arrCategoryFilters as $intCategoryFilter){
$strColumns .= 'categories LIKE ? OR ';
$arrValues[] = '%"' . $intCategoryFilter . '"%';
}
$strColumns = substr($strColumns,0,-3);
$strColumns .= ')';
$arrColumns[] = $strColumns;
}
}
// Respect the sql_filter
if($this->sql_filter){
$arrColumns[] = $this->sql_filter;
}
// Define the findByOptions
$strTable = PortfolioModel::getTable();
$arrFindByOptions = $this->getFindByOptions($strTable);
// Retrieve Portfolio-Items
$colItems = PortfolioModel::findPublishedByPids($arrArchives, $arrFindByOptions, $arrColumns, $arrValues);
if( is_object($colItems) )
{
$arrCategories = (!is_null($this->categories)) ? unserialize($this->categories) : array();
$arrItems = $this->parseItems($colItems, $objDetailPage, true, $arrCategories);
$this->Template->items = $arrItems;
}
// Get custom Template
if( $this->customTpl )
{
$this->Template->strTemplate = $this->customTpl;
}
if( gettype($this->Template->cssID) === 'array' ) {
if(array_key_exists(0, $this->Template->cssID)){
$this->Template->cssID = $this->Template->cssID[0];
} else {
$this->Template->cssID = '';
}
}
// Parse Template
$this->Template->parse();
}
else
{
// Parse BackendTemplate
$this->parseBackendTemplate();
}
}
}