308 lines
8.2 KiB
PHP
308 lines
8.2 KiB
PHP
<?php
|
|
/**
|
|
* SOTESHOP/stSmartyPlugin
|
|
*
|
|
* Ten plik należy do aplikacji stInvoicePlugin opartej na licencji (Professional License SOTE).
|
|
* Nie zmieniaj tego pliku, jeśli chcesz korzystać z automatycznych aktualizacji oprogramowania.
|
|
* Jeśli chcesz wprowadzać swoje modyfikacje do programu, zapoznaj się z dokumentacją, jak zmieniać
|
|
* oprogramowanie bez zmiany kodu bazowego http://www.sote.pl/modifications
|
|
*
|
|
* @package stSmartyPlugin
|
|
* @subpackage actions
|
|
* @copyright SOTE (www.sote.pl)
|
|
* @license http://www.sote.pl/license/sote (Professional License SOTE)
|
|
* @version $Id: actions.class.php 665 2009-04-16 07:43:27Z michal $
|
|
* @author Bartosz Alejski <bartosz.alejski@sote.pl>
|
|
*/
|
|
|
|
/**
|
|
* Klasa ststSmartyFrontendActions.
|
|
*
|
|
* @package stSmartyPlugin
|
|
* @subpackage actions
|
|
*/
|
|
class stSmartyFrontendActions extends stActions
|
|
{
|
|
public function preExecute()
|
|
{
|
|
parent::preExecute();
|
|
|
|
$this->forward404Unless(SF_ENVIRONMENT == 'theme' && $this->getUser()->isAuthenticated() && $this->getUser()->hasCredential('stThemeBackend.modification'));
|
|
|
|
$culture = $this->getUser()->getAttribute('culture', stLanguage::getOptLanguage(), 'stThemePlugin');
|
|
|
|
$this->getContext()->getI18N()->setCulture($culture);
|
|
}
|
|
|
|
public function executeLogin()
|
|
{
|
|
return $this->redirect('@homepage');
|
|
}
|
|
|
|
public function validateLogin()
|
|
{
|
|
$request = $this->getRequest();
|
|
|
|
if ($request->getMethod() == sfRequest::POST)
|
|
{
|
|
$theme_login = $request->getParameter('theme_login');
|
|
|
|
$user = sfGuardUserPeer::retrieveByUsername($theme_login['login']);
|
|
|
|
if (null === $user || !$user->checkPassword($theme_login['password']))
|
|
{
|
|
$request->setError('theme_login', 'Proszę podać poprawny login i hasło');
|
|
}
|
|
elseif (!$user->hasModulePermission('stThemeBackend.modification') && !$user->getIsSuperAdmin())
|
|
{
|
|
$request->setError('theme_login', 'Nie posiadasz wystarczających uprawnień');
|
|
}
|
|
else
|
|
{
|
|
$this->getUser()->signIn($user);
|
|
}
|
|
}
|
|
|
|
return !$request->hasErrors();
|
|
}
|
|
|
|
public function handleErrorLogin()
|
|
{
|
|
return $this->forward('stFrontendMain', 'index');
|
|
}
|
|
|
|
public function executeRestoreSlots()
|
|
{
|
|
$theme = stTheme::getInstance($this->getContext())->getTheme();
|
|
|
|
foreach ($theme->getSmartySlots() as $slot)
|
|
{
|
|
$slot->delete();
|
|
}
|
|
|
|
stSmarty::clearCache($theme);
|
|
|
|
$this->setFlash('theme_notice', $this->getContext()->getI18N()->__('Domyślny układ został przywrócony', null, 'stThemeFrontend'));
|
|
|
|
return $this->redirect($this->getRequest()->getReferer());
|
|
}
|
|
|
|
public function executeUpdateSlots()
|
|
{
|
|
if ($this->getRequest()->getMethod() == sfRequest::POST)
|
|
{
|
|
$slots = $this->getRequestParameter('slots');
|
|
|
|
$theme = stTheme::getInstance($this->getContext())->getTheme();
|
|
|
|
foreach ($slots as $name => $components)
|
|
{
|
|
$slot = SmartySlotPeer::retrieveByNameAndTheme($name, $theme);
|
|
|
|
if (null === $slot)
|
|
{
|
|
$slot = new SmartySlot();
|
|
|
|
$slot->setName($name);
|
|
|
|
$slot->setThemeId($theme->getId());
|
|
|
|
$slot->save();
|
|
}
|
|
else
|
|
{
|
|
$c = new Criteria();
|
|
|
|
$c->add(SmartySlotContentPeer::SLOT_ID, $slot->getId());
|
|
|
|
SmartySlotContentPeer::doDelete($c);
|
|
}
|
|
|
|
if ($components)
|
|
{
|
|
foreach ($components as $id => $content)
|
|
{
|
|
$content = json_decode($content, true);
|
|
|
|
$slot_content = new SmartySlotContent();
|
|
|
|
$slot_content->setSlotId($slot->getId());
|
|
|
|
$slot_content->setId($id);
|
|
|
|
$slot_content->setContent($content);
|
|
|
|
$slot_content->save();
|
|
}
|
|
}
|
|
}
|
|
|
|
stSmarty::clearCache($theme);
|
|
}
|
|
|
|
return sfView::HEADER_ONLY;
|
|
}
|
|
|
|
public function executeContentBlockRestore()
|
|
{
|
|
$request = $this->getRequest();
|
|
|
|
if ($request->getMethod() == sfRequest::POST)
|
|
{
|
|
$data = json_decode($this->getRequestParameter('data'), true);
|
|
|
|
$block = SmartyContentBlockPeer::retrieveByName($data['name'], $this->getUser()->getCulture());
|
|
|
|
if ($block)
|
|
{
|
|
$block->delete();
|
|
}
|
|
|
|
if ($this->getUser()->getCulture() != stLanguage::getOptLanguage())
|
|
{
|
|
$block = SmartyContentBlockPeer::retrieveByName($data['name'], stLanguage::getOptLanguage());
|
|
|
|
if (null !== $block)
|
|
{
|
|
$data = array_merge($data, $block->getContent());
|
|
}
|
|
}
|
|
|
|
return $this->renderJson($data);
|
|
}
|
|
else
|
|
{
|
|
return sfView::HEADER_ONLY;
|
|
}
|
|
}
|
|
|
|
public function executeContentBlockEdit()
|
|
{
|
|
$data = json_decode($this->getRequestParameter('data'), true);
|
|
|
|
$this->block = $this->getContentBlockOrCreate($data);
|
|
|
|
$this->data = $data;
|
|
|
|
$request = $this->getRequest();
|
|
|
|
if ($request->getMethod() == sfRequest::POST && $request->hasParameter('save'))
|
|
{
|
|
$this->updateContentBlockFromRequest($data);
|
|
|
|
$json = $this->block->getContent();
|
|
|
|
$json['decorator'] = $data['decorator'];
|
|
|
|
$ret = $this->renderJson($json);
|
|
|
|
$this->getResponse()->setContentType('text/plain');
|
|
|
|
return $ret;
|
|
}
|
|
}
|
|
|
|
protected function getContentBlockOrCreate($data)
|
|
{
|
|
$culture = $this->getUser()->getCulture();
|
|
|
|
$block = SmartyContentBlockPeer::retrieveByName($data['name'], $culture);
|
|
|
|
if (null === $block && $culture != stLanguage::getOptLanguage())
|
|
{
|
|
$block = SmartyContentBlockPeer::retrieveByName($data['name'], stLanguage::getOptLanguage());
|
|
|
|
if (null !== $block)
|
|
{
|
|
$block = $block->copy();
|
|
|
|
$block->setName($data['name']);
|
|
|
|
$block->setOptCulture($culture);
|
|
}
|
|
}
|
|
|
|
if (null === $block)
|
|
{
|
|
$block = new SmartyContentBlock();
|
|
|
|
$block->setName($data['name']);
|
|
|
|
$block->setOptCulture($culture);
|
|
|
|
if ($data['decorator'] == 'box')
|
|
{
|
|
$block->setContent(array('title' => $data['title'], 'content' => $data['content']));
|
|
}
|
|
else
|
|
{
|
|
$block->setContent(array('content' => $data['content']));
|
|
}
|
|
}
|
|
|
|
return $block;
|
|
}
|
|
|
|
protected function updateContentBlockFromRequest($data)
|
|
{
|
|
$content_block = $this->getRequestParameter('content_block');
|
|
|
|
$content = $this->block->getContent();
|
|
|
|
if ($data['decorator'] == 'box')
|
|
{
|
|
$this->block->setContentByName('title', $content_block['title']);
|
|
}
|
|
|
|
if ($data['content_type'] == 'image')
|
|
{
|
|
$this->updateImageContent($this->block);
|
|
}
|
|
else
|
|
{
|
|
$this->block->setContentByName('content', $content_block['content']);
|
|
}
|
|
|
|
$this->block->save();
|
|
}
|
|
|
|
protected function updateImageContent(SmartyContentBlock $block)
|
|
{
|
|
$request = $this->getRequest();
|
|
|
|
$upload_dir = $block->getUploadDir();
|
|
|
|
$web_dir = sfConfig::get('sf_web_dir');
|
|
|
|
if (!is_dir($web_dir.'/'.$upload_dir))
|
|
{
|
|
mkdir($web_dir.'/'.$upload_dir, 0755, true);
|
|
}
|
|
|
|
$content = $block->getContentByName('content');
|
|
|
|
$images = $block->getImagesContent();
|
|
|
|
foreach ($request->getFileValues('content_block[image]') as $name => $value)
|
|
{
|
|
if ($value['error'] == 0 && $value['name'])
|
|
{
|
|
$ext = pathinfo($value['name'], PATHINFO_EXTENSION);
|
|
|
|
$image = $upload_dir.'/'.$name.'.'.$ext;
|
|
|
|
if ($request->moveFile('content_block[image]['.$name.']', $web_dir.'/'.$image))
|
|
{
|
|
$lm = filemtime($web_dir.'/'.$image);
|
|
|
|
$replacement = str_replace($images[$name]['path'], '/'.$image.'?v'.$lm, $images[$name]['html']);
|
|
|
|
$content = str_replace($images[$name]['html'], $replacement, $content);
|
|
}
|
|
}
|
|
}
|
|
|
|
$block->setContentByName('content', $content);
|
|
}
|
|
}
|