150 lines
4.5 KiB
PHP
150 lines
4.5 KiB
PHP
<?php
|
|
|
|
use Lewp\FileHierarchy;
|
|
use Lewp\Resolve;
|
|
use Lewp\RwdPicture;
|
|
|
|
return new class extends Lewp\Module
|
|
{
|
|
|
|
const KEY_START_LANDSCAPE_ID = "start_landscape_id";
|
|
const KEY_START_PORTRAIT_ID = "start_portrait_id";
|
|
const KEY_START_MODULE_ID = "start_module_id";
|
|
const KEY_GALLERY_LANDSCAPE_FOLDER_ID = "gallery_landscape_folder_id";
|
|
const KEY_GALLERY_PORTRAIT_FOLDER_ID = "gallery_portrait_folder_id";
|
|
const KEY_GALLERY_IMAGE_EXTENSION = "image_extension";
|
|
const KEY_ORIENTATION_PRIORITY = "orientation_priority";
|
|
|
|
private function createBigImageContainer()
|
|
{
|
|
return $this->createAndSetupElement(
|
|
'div',
|
|
'',
|
|
[
|
|
'class' => 'big-image'
|
|
]
|
|
);
|
|
}
|
|
|
|
private function createBigImage(
|
|
string $landscape_id,
|
|
string $portrait_id,
|
|
string $module_id
|
|
) {
|
|
$rwd = new RwdPicture($landscape_id, $portrait_id, $module_id);
|
|
return $this->importNode($rwd->getPictureTag(), true);
|
|
}
|
|
|
|
private function bigImageAvailable(array $options) : bool
|
|
{
|
|
$retval = true;
|
|
if (!isset($options[self::KEY_START_LANDSCAPE_ID])) {
|
|
$retval = false;
|
|
}
|
|
if (!isset($options[self::KEY_START_PORTRAIT_ID])) {
|
|
$retval = false;
|
|
}
|
|
if (!isset($options[self::KEY_START_MODULE_ID])) {
|
|
$retval = false;
|
|
}
|
|
return $retval;
|
|
}
|
|
|
|
private function galleryAvailable(array $options) : bool
|
|
{
|
|
$retval = true;
|
|
if (!isset($options[self::KEY_GALLERY_LANDSCAPE_FOLDER_ID])) {
|
|
$retval = false;
|
|
}
|
|
if (!isset($options[self::KEY_GALLERY_PORTRAIT_FOLDER_ID])) {
|
|
$retval = false;
|
|
}
|
|
return $retval;
|
|
}
|
|
|
|
private function generateGalleryPath(string $base_path, string $folder_id) : string
|
|
{
|
|
return Resolve::toFilepath([
|
|
$base_path,
|
|
Resolve::idToFilepathRel($folder_id)
|
|
]);
|
|
}
|
|
|
|
private function createGallery(array $options)
|
|
{
|
|
$div = $this->createAndSetupElement(
|
|
'div',
|
|
'',
|
|
[
|
|
'class' => 'gallery-images'
|
|
]
|
|
);
|
|
|
|
// get all filenames
|
|
$fileids_first = $this->collectResourceFileIds(
|
|
'res-images',
|
|
$options[self::KEY_GALLERY_LANDSCAPE_FOLDER_ID],
|
|
'*.'.$options[self::KEY_GALLERY_IMAGE_EXTENSION]
|
|
);
|
|
$tmp = $this->collectResourceFileIds(
|
|
'res-images',
|
|
$options[self::KEY_GALLERY_PORTRAIT_FOLDER_ID],
|
|
'*.'.$options[self::KEY_GALLERY_IMAGE_EXTENSION]
|
|
);
|
|
if ($options[self::KEY_ORIENTATION_PRIORITY] === 'portrait') {
|
|
$fileids_second = $fileids_first;
|
|
$fileids_first = $tmp;
|
|
} else {
|
|
$fileids_second = $tmp;
|
|
}
|
|
|
|
foreach ($fileids_first as $image) {
|
|
$landscape = Resolve::arrayToId([
|
|
$options[self::KEY_GALLERY_LANDSCAPE_FOLDER_ID],
|
|
$image
|
|
]);
|
|
$portrait = $landscape;
|
|
// check if the portrait file is available
|
|
if (in_array($image, $fileids_second)) {
|
|
$portrait = Resolve::arrayToId([
|
|
$options[self::KEY_GALLERY_PORTRAIT_FOLDER_ID],
|
|
$image
|
|
]);;
|
|
}
|
|
$rwd = new RwdPicture(
|
|
$landscape,
|
|
$portrait,
|
|
$this->getModuleId()
|
|
);
|
|
$div->appendChild(
|
|
$this->importNode($rwd->getPictureTag(), true)
|
|
);
|
|
}
|
|
return $div;
|
|
}
|
|
|
|
public function run(array $options = []) : bool
|
|
{
|
|
// add default options
|
|
$options += [
|
|
self::KEY_ORIENTATION_PRIORITY => 'landscape',
|
|
self::KEY_GALLERY_IMAGE_EXTENSION => 'jpg'
|
|
];
|
|
|
|
$big_image_container = $this->createBigImageContainer();
|
|
if ($this->bigImageAvailable($options)) {
|
|
$big_image = $this->createBigImage(
|
|
$options[self::KEY_START_LANDSCAPE_ID],
|
|
$options[self::KEY_START_PORTRAIT_ID],
|
|
$options[self::KEY_START_MODULE_ID]
|
|
);
|
|
$big_image_container->appendChild($big_image);
|
|
}
|
|
$this->appendChild($big_image_container);
|
|
if ($this->galleryAvailable($options)) {
|
|
$gallery = $this->createGallery($options);
|
|
$this->appendChild($gallery);
|
|
}
|
|
return true;
|
|
}
|
|
};
|