<?php /** * Pageimage for Contao * * Copyright (c) 2015 Benjamin Roth * * @license LGPL-3.0+ */ namespace eSM_pageimage; class Pageimage extends \Frontend { public function sbReplaceInsertTags($strTag) { $flags = explode('|', $strTag); $elements = explode('::', array_shift($flags)); if (!in_array($elements[0],array('sb_images','sb_image','sb_image_url','sb_image_css'))) { return false; } global $objPage; $objPage->sb_imageUrl = deserialize($objPage->sb_imageUrl); $objPage->sb_imageOrder = deserialize($objPage->sb_imageOrder); if ((!count($objPage->sb_imageUrl) || (count($objPage->sb_imageUrl) == 1 && !$objPage->sb_imageUrl[0])) && !$objPage->sb_imageIgnore) { $this->import('Database'); $pid = $objPage->id; // Inherit settings do { $objParentPage = $this->Database->prepare("SELECT * FROM tl_page WHERE id=?") ->limit(1) ->execute($pid); if ($objParentPage->numRows < 1) { break; } $pid = $objParentPage->pid; $type = $objParentPage->type; $arrParentImageUrl = deserialize($objParentPage->sb_imageUrl); if ((!is_array($objPage->sb_imageUrl) || !count($objPage->sb_imageUrl) || !$objPage->sb_imageUrl[0]) && (is_array($arrParentImageUrl) && count($arrParentImageUrl) && $arrParentImageUrl[0])) { $objPage->sb_imageUrl = deserialize($objParentPage->sb_imageUrl); $objPage->sb_imageSize = $objParentPage->sb_imageSize; $objPage->sb_imageOrder = deserialize($objParentPage->sb_imageOrder); break; } } while ($pid > 0 && $type != 'root'); } if (!is_array($objPage->sb_imageUrl) || !count($objPage->sb_imageUrl) || !$objPage->sb_imageUrl[0]) { return; } if ($objPage->sb_imageOrder != '') { $tmp = $objPage->sb_imageOrder; if (!empty($tmp) && is_array($tmp)) { // Remove all values $arrOrder = array_map(function(){}, array_flip($tmp)); // Move the matching elements to their position in $arrOrder foreach ($objPage->sb_imageUrl as $k=>$v) { if (array_key_exists($v, $arrOrder)) { $arrOrder[$v] = $v; unset($objPage->sb_imageUrl[$k]); } } // Append the left-over images at the end if (!empty($objPage->sb_imageUrl)) { $arrOrder = array_merge($arrOrder, array_values($objPage->sb_imageUrl)); } // Remove empty (unreplaced) entries $objPage->sb_imageUrl = array_values(array_filter($arrOrder)); unset($arrOrder); } } $images = array(); $multiSRC = array_values($objPage->sb_imageUrl); $objFiles = \FilesModel::findMultipleByIds($multiSRC); // Get all images while ($objFiles->next()) { // Continue if the files has been processed or does not exist if (isset($images[$objFiles->path]) || !file_exists(TL_ROOT . '/' . $objFiles->path)) { continue; } // Single files $objFile = new \File($objFiles->path, true); if (!$objFile->isImage) { continue; } $arrMeta = $this->getMetaData($objFiles->meta, $objPage->language); if (empty($arrMeta)) { if ($this->metaIgnore) { continue; } elseif ($objPage->rootFallbackLanguage !== null) { $arrMeta = $this->getMetaData($objFiles->meta, $objPage->rootFallbackLanguage); } } // Use the file name as title if none is given if ($arrMeta['title'] == '') { $arrMeta['title'] = specialchars($objFile->basename); } // Add the image $images[$objFiles->path] = array ( 'id' => $objFiles->id, 'uuid' => $objFiles->uuid, 'name' => $objFile->basename, 'singleSRC' => $objFiles->path, 'alt' => $arrMeta['title'], 'imageUrl' => $arrMeta['link'], 'caption' => $arrMeta['caption'], 'size' => $objPage->sb_imageSize ); } $images = array_values($images); unset($objFiles); unset($multiSRC); if (!isset($elements[1]) || !$elements[1]) { $elements[1] = 0; } else if (count($images)-1 < --$elements[1]) { $elements[1] = count($images)-1; } if ($elements[0] == 'sb_image_url' || $elements[0] == 'sb_image_css') { if (count($images)) { $image = $images[$elements[1]]; if (is_array($image['size'] = deserialize($image['size']))) { $width = intval($image['size'][0]) > 0 ? $image['size'][0] : null; $height = intval($image['size'][1]) > 0 ? $image['size'][1] : null; $mode = strlen($image['size'][2]) ? $image['size'][2] : null; } $strBuffer = \Image::get($image['singleSRC'], $width, $height, $mode); if ($elements[0] == 'sb_image_css') { return 'background-image: url(\'' . $this->Environment->path . '/' . $strBuffer . '\');'; } return $strBuffer; } } if ($elements[0] == 'sb_images' && count($images) > 0) { $arrImageTplObjects = array(); foreach($images as $image) { $objImage = new \stdClass(); $this->addImageToTemplate($objImage, $image); $arrImageTplObjects[] = $objImage; } $objTemplate = new \FrontendTemplate('eSM_pageimage_container'); $objTemplate->pictures = $arrImageTplObjects; return $objTemplate->parse(); } else if ($elements[0] == 'sb_image') { $arrImageTplObjects = array(); $objImage = new \stdClass(); $this->addImageToTemplate($objImage, $images[$elements[1]]); $arrImageTplObjects[] = $objImage; $objTemplate = new \FrontendTemplate('eSM_pageimage_container'); $objTemplate->pictures = $arrImageTplObjects; return $objTemplate->parse(); } return false; } public static function getPageImage($strType='images') { $pageimage = new Pageimage(); return $pageimage->sbReplaceInsertTags('sb_'.$strType); } } ?>