<?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);
	}
}

?>