Files
2025-03-12 17:06:23 +01:00

633 lines
18 KiB
PHP

<?php
class stAssetImageConfigurationActions extends stAdminGeneratorActions
{
public function executeImageCropper()
{
$asset_id = $this->getRequestParameter('asset_id');
if (is_numeric($asset_id))
{
$this->asset = sfAssetPeer::retrieveByPK($asset_id);
}
else
{
$this->asset = new sfAsset();
$folder = new sfAssetFolder();
$folder->setRelativePath(dirname($asset_id));
$this->asset->setsfAssetFolder($folder);
$this->asset->setRawFilename(basename($asset_id));
$this->asset->setType('image');
}
$this->namespace = $this->getRequestParameter('namespace');
$this->for = $this->getRequestParameter('for');
$this->config = stConfig::getInstance('stAsset');
if ($this->getRequest()->getMethod() == sfRequest::POST)
{
$this->updateImageCropperFromRequest();
if (!$this->asset->isNew())
{
$this->asset->save();
$this->asset->destroy($this->for, false);
}
else
{
$this->asset->updateCropFile();
$this->asset->destroy($this->for, false);
SlideBannerPeer::clearCache();
}
return sfView::HEADER_ONLY;
}
$crop = $this->asset->getCrop();
$image_params = $this->config->get($this->for);
if (isset($crop['_crop']))
{
foreach ($crop['_crop'] as $type => $params)
{
if (isset($image_params[$type]) && !sfAssetsLibraryTools::isValidCrop($params, $image_params[$type]['width'], $image_params[$type]['height']))
{
unset($crop[$type]);
}
}
$this->asset->setCrop($crop);
}
$this->image_types = sfAssetsLibraryTools::getCropImageTypes($this->for);
if (stSoteshop::checkInstallVersion('6.6.4') && $this->for == 'product')
{
unset($this->image_types['icon']);
unset($this->image_types['thumb']);
}
$this->image_labels = $this->getLabels($this->for);
$this->image_info = $this->asset->getImageInfo();
}
public function executeWatermark()
{
$i18n = $this->getContext()->getI18N();
$config = stConfig::getInstance(null, 'stAsset');
$this->menu_items = $this->getMenuItems();
if ($this->getRequest()->getMethod() == sfRequest::POST)
{
$config->set('watermark', $this->getRequestParameter('watermark'));
$this->setFlash('notice', $i18n->__('Twoje zmiany zostały zapisane', null, 'stAdminGeneratorPlugin'));
$config->save(true);
$this->saveThemeConfig($config);
return $this->redirect($this->getRequest()->getReferer());
}
$this->config = $config->get('watermark', array());
$this->getBreadcrumbs()->add($i18n->__('Znak wodny'));
}
public function executeGeneral()
{
$i18n = $this->getContext()->getI18N();
$config = stConfig::getInstance('stAsset');
$this->menu_items = $this->getMenuItems();
if ($this->getRequest()->getMethod() == sfRequest::POST)
{
$general = $this->getRequestParameter('general');
foreach (array('high_quality_images', 'respect_exif_orientation', 'enable_webp_format') as $checkbox)
{
$general[$checkbox] = isset($general[$checkbox]);
}
$config->set('general', $general);
$this->setFlash('notice', $i18n->__('Twoje zmiany zostały zapisane', null, 'stAdminGeneratorPlugin'));
$config->save(true);
// $this->saveThemeConfig($config);
stFastCacheManager::clearCache();
return $this->redirect($this->getRequest()->getReferer());
}
$this->config = $config->get('general', array());
if (!isset($this->config['adapter']))
{
$this->config['adapter'] = sfThumbnail::getDefaultAdapter();
}
$this->getBreadcrumbs()->add($i18n->__('Konfiguracja'));
}
public function executeGallery()
{
$i18n = $this->getContext()->getI18N();
$config = stConfig::getInstance(null, 'stAsset');
$this->menu_items = $this->getMenuItems();
if ($this->getRequest()->getMethod() == sfRequest::POST)
{
$config->set('gallery', $this->getRequestParameter('gallery'));
$this->setFlash('notice', $i18n->__('Twoje zmiany zostały zapisane', null, 'stAdminGeneratorPlugin'));
$config->save(true);
$this->saveThemeConfig($config);
return $this->redirect($this->getRequest()->getReferer());
}
$this->config = $config->get('gallery', array());
}
public function executeProduct()
{
$i18n = $this->getContext()->getI18N();
$config = stConfig::getInstance(null, 'stAsset');
$this->menu_items = $this->getMenuItems();
if ($this->getRequest()->getMethod() == sfRequest::POST)
{
$this->updateConfigFromRequest($config, 'product');
$this->setFlash('notice', $i18n->__('Twoje zmiany zostały zapisane', null, 'stAdminGeneratorPlugin'));
$config->save(true);
$this->saveThemeConfig($config);
return $this->redirect($this->getRequest()->getReferer());
}
$this->config = $config->get('product', array());
$this->getBreadcrumbs()->add($i18n->__('Produkty'));
}
public function executeCategory()
{
$i18n = $this->getContext()->getI18N();
$config = stConfig::getInstance(null, 'stAsset');
$this->menu_items = $this->getMenuItems();
if ($this->getRequest()->getMethod() == sfRequest::POST)
{
$this->updateConfigFromRequest($config, 'category');
$this->setFlash('notice', $i18n->__('Twoje zmiany zostały zapisane', null, 'stAdminGeneratorPlugin'));
$config->save(true);
$this->saveThemeConfig($config);
return $this->redirect($this->getRequest()->getReferer());
}
$this->config = $config->get('category', array());
$this->getBreadcrumbs()->add($i18n->__('Kategorie'));
}
public function executeSlide()
{
$i18n = $this->getContext()->getI18N();
$config = stConfig::getInstance(null, 'stAsset');
$this->menu_items = $this->getMenuItems();
if ($this->getRequest()->getMethod() == sfRequest::POST)
{
$this->updateConfigFromRequest($config, 'slide');
$this->updateConfigFromRequest($config, 'slide_mobile');
$this->setFlash('notice', $i18n->__('Twoje zmiany zostały zapisane', null, 'stAdminGeneratorPlugin'));
$config->save(true);
$this->saveThemeConfig($config);
SlideBannerPeer::clearCache();
return $this->redirect($this->getRequest()->getReferer());
}
$this->config = $config->get('slide', array());
$this->config_mobile = $config->get('slide_mobile', array());
$this->getBreadcrumbs()->add($i18n->__('Banery'));
}
public function executeBlog()
{
$i18n = $this->getContext()->getI18N();
$config = stConfig::getInstance(null, 'stAsset');
$this->menu_items = $this->getMenuItems();
if ($this->getRequest()->getMethod() == sfRequest::POST)
{
$this->updateConfigFromRequest($config, 'blog');
$this->setFlash('notice', $i18n->__('Twoje zmiany zostały zapisane', null, 'stAdminGeneratorPlugin'));
$config->save(true);
$this->saveThemeConfig($config);
SlideBannerPeer::clearCache();
return $this->redirect($this->getRequest()->getReferer());
}
$this->config = $config->get('blog', array());
$this->getBreadcrumbs()->add($i18n->__('Blog'));
}
public function executeProducer()
{
$i18n = $this->getContext()->getI18N();
$config = stConfig::getInstance(null, 'stAsset');
$this->menu_items = $this->getMenuItems();
if ($this->getRequest()->getMethod() == sfRequest::POST)
{
$this->updateConfigFromRequest($config, 'producer');
$this->setFlash('notice', $i18n->__('Twoje zmiany zostały zapisane', null, 'stAdminGeneratorPlugin'));
$config->save(true);
$this->saveThemeConfig($config);
return $this->redirect($this->getRequest()->getReferer());
}
$this->config = $config->get('producer', array());
$this->getBreadcrumbs()->add($i18n->__('Producenci'));
}
public function validateWatermark()
{
if ($this->getRequest()->getMethod() == sfRequest::POST)
{
$this->checkCredentials();
}
return true;
}
public function validateGallery()
{
if ($this->getRequest()->getMethod() == sfRequest::POST)
{
$this->checkCredentials();
}
return true;
}
public function validateCategory()
{
if ($this->getRequest()->getMethod() == sfRequest::POST)
{
$this->checkCredentials();
$validator1 = $this->getThumbnailValidator('szerokość');
$validator2 = $this->getThumbnailValidator('wysokość');
foreach ($this->getRequestParameter('category') as $thumbnail => $values)
{
if (!$validator1->execute($values['width'], $error))
{
$this->getRequest()->setError('category{' . $thumbnail . '}{width}', $error);
}
if (!$validator2->execute($values['height'], $error))
{
$this->getRequest()->setError('category{' . $thumbnail . '}{height}', $error);
}
}
}
return !$this->getRequest()->hasErrors();
}
public function handleErrorCategory()
{
$i18n = $this->getContext()->getI18N();
$config = stConfig::getInstance(null, 'stAsset');
$this->menu_items = $this->getMenuItems();
$this->updateConfigFromRequest($config, 'category');
$this->config = $config->get('category', array());
$this->getBreadcrumbs()->add($i18n->__('Kategorie'));
return sfView::SUCCESS;
}
public function validateProduct()
{
if ($this->getRequest()->getMethod() == sfRequest::POST)
{
$this->checkCredentials();
$validator1 = $this->getThumbnailValidator('szerokość');
$validator2 = $this->getThumbnailValidator('wysokość');
foreach ($this->getRequestParameter('product') as $thumbnail => $values)
{
if (!$validator1->execute($values['width'], $error))
{
$this->getRequest()->setError('product{' . $thumbnail . '}{width}', $error);
}
if (!$validator2->execute($values['height'], $error))
{
$this->getRequest()->setError('product{' . $thumbnail . '}{height}', $error);
}
}
}
return !$this->getRequest()->hasErrors();
}
public function handleErrorProduct()
{
$i18n = $this->getContext()->getI18N();
$config = stConfig::getInstance(null, 'stAsset');
$this->menu_items = $this->getMenuItems();
$this->updateConfigFromRequest($config, 'product');
$this->config = $config->get('product', array());
$this->getBreadcrumbs()->add($i18n->__('Produkty'));
return sfView::SUCCESS;
}
public function validateProducer()
{
if ($this->getRequest()->getMethod() == sfRequest::POST)
{
$this->checkCredentials();
$validator1 = $this->getThumbnailValidator('szerokość');
$validator2 = $this->getThumbnailValidator('wysokość');
foreach ($this->getRequestParameter('producer') as $thumbnail => $values)
{
if (!$validator1->execute($values['width'], $error))
{
$this->getRequest()->setError('producer{' . $thumbnail . '}{width}', $error);
}
if (!$validator2->execute($values['height'], $error))
{
$this->getRequest()->setError('producer{' . $thumbnail . '}{height}', $error);
}
}
}
return !$this->getRequest()->hasErrors();
}
public function handleErrorProducer()
{
$i18n = $this->getContext()->getI18N();
$config = stConfig::getInstance(null, 'stAsset');
$this->menu_items = $this->getMenuItems();
$this->updateConfigFromRequest($config, 'producer');
$this->config = $config->get('producer', array());
$this->getBreadcrumbs()->add($i18n->__('Producenci'));
return sfView::SUCCESS;
}
public function handleErrorWatermark()
{
$i18n = $this->getContext()->getI18N();
$config = stConfig::getInstance(null, 'stAsset');
$this->menu_items = $this->getMenuItems();
$config->set('watermark', $this->getRequestParameter('watermark'));
$this->config = $config->get('watermark', array());
$this->getBreadcrumbs()->add($i18n->__('Znak wodny'));
return sfView::SUCCESS;
}
protected function updateConfigFromRequest($config, $for)
{
$thumbnails = $config->get($for, array());
foreach ($this->getRequestParameter($for) as $thumbnail => $values)
{
$thumbnails[$thumbnail] = $values;
$thumbnails[$thumbnail]['watermark'] = isset($values['watermark']);
$thumbnails[$thumbnail]['auto_crop'] = isset($values['auto_crop']);
}
$config->set($for, $thumbnails);
}
public function executeRestoreDefaults()
{
$for = explode(",", $this->getRequestParameter('for'));
$theme = ThemePeer::doSelectActive();
foreach ($for as $current)
{
ThemePeer::updateThemeImageConfiguration($theme, $current);
}
$i18n = $this->getContext()->getI18N();
$this->setFlash('notice', $i18n->__('Domyślna konfiguracja została przywrócona', null, 'stAssetImageConfiguration'));
return $this->redirect($this->getRequest()->getReferer());
}
protected function getMenuItems()
{
$i18n = $this->getContext()->getI18N();
$menu_array = array(
'@stAssetImageConfiguration?action=watermark' => $i18n->__('Znak wodny'),
'@stAssetImageConfiguration?action=product' => $i18n->__('Produkty'),
'@stAssetImageConfiguration?action=category' => $i18n->__('Kategorie'),
'@stAssetImageConfiguration?action=producer' => $i18n->__('Producent'),
'@stAssetImageConfiguration?action=gallery' => $i18n->__('Galeria'),
'@stAssetImageConfiguration?action=slide' => $i18n->__('Banery'),
'@stAssetImageConfiguration?action=blog' => $i18n->__('Blog'),
'@stAssetImageConfiguration?action=general' => $i18n->__('Konfiguracja ogólna'),
);
if (stTheme::hideOldConfiguration())
{
unset($menu_array['@stAssetImageConfiguration?action=gallery']);
}
return $menu_array;
}
protected function getThumbnailValidator($label)
{
$validator = new sfNumberValidator();
$i18n = $this->getContext()->getI18N();
$validator->initialize($this->getContext(), array(
'min' => 16,
'min_error' => $i18n->__('Minimalna') . ' ' . $i18n->__($label) . ' ' . $i18n->__('to') . ' 16 px',
'type' => 'integer',
'type_error' => $i18n->__(ucfirst($label)) . ' ' . $i18n->__('musi być liczbą całkowitą'),
'nan_error' => $i18n->__(ucfirst($label)) . ' ' . $i18n->__('musi być liczbą całkowitą'),
));
return $validator;
}
protected function checkCredentials()
{
stAuthUsersListener::checkModificationCredentials($this, $this->getRequest(), $this->getModuleName());
}
protected function updateImageCropperFromRequest()
{
$data = $this->getRequestParameter($this->namespace);
$crop = $this->asset->getCrop() ? $this->asset->getCrop() : array();
$crop['_crop'] = array();
$params = $this->config->get($this->for);
foreach ($data['select'] as $type => $select)
{
$crop[$type] = json_decode($select);
$crop['_crop'][$type] = array(
'width' => $params[$type]['width'],
'height' => $params[$type]['height']
);
}
$this->asset->setCrop($crop);
}
protected function getLabels($for)
{
$labels = array(
'product' => array(
'small' => 'Lista pełna',
'icon' => 'Lista skrócona',
'thumb' => 'Lista alternatywna',
'gallery' => 'Galeria',
'large' => 'Karta',
'big' => 'Powiększone',
'allegro' => 'Allegro'
),
'category' => array(
'thumb' => 'Strona główna',
'small' => 'Strona kategorii'
),
'producer' => array(
'large' => 'Strona producenta',
'thumb' => 'Logo'
),
'slide' => array(
'thumb' => '',
),
'slide_mobile' => array(
'thumb' => '',
),
'blog' => array(
'thumb' => '',
),
);
return $labels[$for];
}
protected function saveThemeConfig(stConfig $config)
{
$theme = ThemePeer::doSelectActive();
$thumbs = array();
foreach ($config->getArray() as $name => $values)
{
if ($name != 'general')
{
$thumbs[$name] = $values;
}
}
$theme->getThemeConfig()->setConfigParameter('thumbs', $thumbs);
$theme->save();
}
/**
*
* {@inheritDoc}
*/
protected function getBreadcrumbs()
{
if (null === $this->breadcrumbs)
{
$i18n = $this->getContext()->getI18N();
$this->breadcrumbs = parent::getBreadcrumbs();
$this->breadcrumbs->add($i18n->__('Konfiguracja zdjęć'), '@stAssetImageConfiguration');
}
return $this->breadcrumbs;
}
}