first commit
This commit is contained in:
411
plugins/stThemePlugin/lib/model/Theme.php
Normal file
411
plugins/stThemePlugin/lib/model/Theme.php
Normal file
@@ -0,0 +1,411 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Subclass for representing a row from the 'st_theme' table.
|
||||
*
|
||||
* @package stThemePlugin
|
||||
* @subpackage libs
|
||||
*/
|
||||
class Theme extends BaseTheme
|
||||
{
|
||||
const SYSTEM_DEFAULT_THEMES = array(
|
||||
'default2',
|
||||
'responsive',
|
||||
'argentorwd',
|
||||
'homeelectronics',
|
||||
'giallo',
|
||||
'moderno',
|
||||
'sportivo',
|
||||
'quattro',
|
||||
'coffeestore',
|
||||
'segno',
|
||||
'longboard',
|
||||
'bagging',
|
||||
'games',
|
||||
'surfing',
|
||||
'brassiere',
|
||||
'yewelry',
|
||||
'gifts',
|
||||
'fragrance',
|
||||
'furniture',
|
||||
'argento',
|
||||
'meble'
|
||||
);
|
||||
|
||||
protected $themeConfig = null;
|
||||
|
||||
protected $themeConfigCached = null;
|
||||
|
||||
protected $editorImages = null;
|
||||
|
||||
protected $baseThemes = null;
|
||||
|
||||
protected $themeContents = array();
|
||||
|
||||
public function getBackendCulture()
|
||||
{
|
||||
return sfContext::getInstance()->getUser()->getCulture();
|
||||
}
|
||||
|
||||
public function __toString()
|
||||
{
|
||||
return $this->theme;
|
||||
}
|
||||
|
||||
public function getColorScheme()
|
||||
{
|
||||
return $this->getOptColorScheme();
|
||||
}
|
||||
|
||||
public function isSystemDefault()
|
||||
{
|
||||
return parent::getIsSystemDefault();
|
||||
}
|
||||
|
||||
public function getIsSystemDefault($check_active = true)
|
||||
{
|
||||
return parent::getIsSystemDefault() || $this->getTheme() == 'default' || $this->getTheme() == 'homeelectronics' || $check_active && $this->getActive();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* alias for Theme::setBaseThemeId
|
||||
*
|
||||
* @param int $v
|
||||
*/
|
||||
public function setBaseThemeList($v)
|
||||
{
|
||||
$this->setBaseThemeId($v ? $v : null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Przeciążenie zapisu
|
||||
*/
|
||||
public function delete($con = null)
|
||||
{
|
||||
$ret = parent::delete($con);
|
||||
|
||||
stTheme::clearCache();
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
public function setName($v)
|
||||
{
|
||||
$this->setTheme($v);
|
||||
}
|
||||
|
||||
public function getName()
|
||||
{
|
||||
return $this->getTheme();
|
||||
}
|
||||
|
||||
public function hasBaseTheme()
|
||||
{
|
||||
return null !== $this->getBaseTheme();
|
||||
}
|
||||
|
||||
public function getBaseTheme()
|
||||
{
|
||||
return ThemePeer::retrieveByPKCached($this->base_theme_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Zwraca pełna ścieżke tematu
|
||||
*
|
||||
* @param boolean $onlyStringNames
|
||||
* @return Theme[]|string[]
|
||||
*/
|
||||
public function getBaseThemePath($onlyStringNames = false)
|
||||
{
|
||||
$baseThemes = $this->getBaseThemes();
|
||||
$baseThemes[] = $this;
|
||||
|
||||
if ($onlyStringNames)
|
||||
{
|
||||
return array_map(function(Theme $theme) {
|
||||
return $theme->getTheme();
|
||||
}, $baseThemes);
|
||||
}
|
||||
|
||||
return $baseThemes;
|
||||
}
|
||||
|
||||
public function getBaseThemes($current = null, array &$baseThemes = array())
|
||||
{
|
||||
if (null === $this->baseThemes)
|
||||
{
|
||||
if (null === $current)
|
||||
{
|
||||
$current = $this->getBaseTheme();
|
||||
|
||||
if (null === $current)
|
||||
{
|
||||
return array();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$current = $current->getBaseTheme();
|
||||
}
|
||||
|
||||
if (null !== $current)
|
||||
{
|
||||
$baseThemes[] = $current;
|
||||
}
|
||||
elseif ($baseThemes)
|
||||
{
|
||||
$this->baseThemes = array_reverse($baseThemes);
|
||||
}
|
||||
|
||||
$this->getBaseThemes($current, $baseThemes);
|
||||
}
|
||||
|
||||
return $this->baseThemes;
|
||||
}
|
||||
|
||||
public function hasThemeContent($content_id)
|
||||
{
|
||||
$content = $this->getThemeContent($content_id);
|
||||
return null !== $content && !empty($content);
|
||||
}
|
||||
|
||||
public function getThemeContent($content_id, $default = null, $culture = null)
|
||||
{
|
||||
if (null === $culture)
|
||||
{
|
||||
$culture = sfContext::getInstance()->getUser()->getCulture();
|
||||
}
|
||||
|
||||
if (!isset($this->themeContents[$culture]))
|
||||
{
|
||||
$fc = stFunctionCache::getInstance('stThemePlugin');
|
||||
$this->themeContents[$culture] = $fc->cacheCall(array($this, 'loadThemeContents'), array($culture, $this->getId()));
|
||||
}
|
||||
|
||||
return isset($this->themeContents[$culture][$content_id]) ? $this->themeContents[$culture][$content_id] : $default;
|
||||
}
|
||||
|
||||
/**
|
||||
* Przeciążenie zapisu
|
||||
*/
|
||||
public function save($con = null)
|
||||
{
|
||||
$updateDefaultTheme = $this->isColumnModified(ThemePeer::ACTIVE) && $this->getActive();
|
||||
|
||||
if (in_array($this->theme, self::SYSTEM_DEFAULT_THEMES))
|
||||
{
|
||||
$this->setIsSystemDefault(true);
|
||||
}
|
||||
|
||||
$result = parent::save($con);
|
||||
|
||||
if ($updateDefaultTheme)
|
||||
{
|
||||
$this->updateActiveThemes();
|
||||
}
|
||||
|
||||
if ($updateDefaultTheme || $this->isColumnModified('is_responsive'))
|
||||
{
|
||||
$this->getConfig()->save();
|
||||
ThemePeer::doSimpleStoreUpdate(null, $this)->save();
|
||||
}
|
||||
|
||||
stTheme::clearCache();
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getConfigurationPath($system = false)
|
||||
{
|
||||
return $system ? sfConfig::get('sf_root_dir').'/config/theme/'.$this->theme.'.yml' : 'config/theme/'.$this->theme.'.yml';
|
||||
}
|
||||
|
||||
public function getCssDir($system_path = false)
|
||||
{
|
||||
if ($system_path)
|
||||
{
|
||||
$root_dir = realpath(sfConfig::get('sf_web_dir'));
|
||||
|
||||
if ($root_dir == '/')
|
||||
{
|
||||
$root_dir = '';
|
||||
}
|
||||
|
||||
return $root_dir.'/css/frontend/theme/'.$this->theme;
|
||||
}
|
||||
|
||||
return '/css/frontend/theme/'.$this->theme;
|
||||
}
|
||||
|
||||
public function getImageDir($system_path = false)
|
||||
{
|
||||
if ($system_path)
|
||||
{
|
||||
$root_dir = realpath(sfConfig::get('sf_web_dir'));
|
||||
|
||||
if ($root_dir == '/')
|
||||
{
|
||||
$root_dir = '';
|
||||
}
|
||||
|
||||
return $root_dir.'/images/frontend/theme/'.$this->theme;
|
||||
}
|
||||
|
||||
return '/images/frontend/theme/'.$this->theme;
|
||||
}
|
||||
|
||||
public function getEditorCssPath($css, $system_path = false)
|
||||
{
|
||||
return $this->getCssDir($system_path).'/_editor/'.$css;
|
||||
}
|
||||
|
||||
public function getEditorImageDir($system_path = false)
|
||||
{
|
||||
return $this->getImageDir($system_path).'/_editor';
|
||||
}
|
||||
|
||||
public function getThemeConfigCached()
|
||||
{
|
||||
if (null === $this->themeConfigCached)
|
||||
{
|
||||
$fc = new stFunctionCache('stThemePlugin');
|
||||
|
||||
$this->themeConfigCached = $fc->cacheCall(array($this, 'getThemeConfig'));
|
||||
}
|
||||
|
||||
return $this->themeConfigCached;
|
||||
}
|
||||
|
||||
public function getThemeConfig()
|
||||
{
|
||||
if (null === $this->themeConfig)
|
||||
{
|
||||
$c = new Criteria();
|
||||
|
||||
$c->setLimit(1);
|
||||
|
||||
$configs = $this->getThemeConfigs($c);
|
||||
|
||||
$this->themeConfig = $configs ? $configs[0] : null;
|
||||
|
||||
if (null === $this->themeConfig)
|
||||
{
|
||||
$this->themeConfig = new ThemeConfig();
|
||||
$this->addThemeConfig($this->themeConfig);
|
||||
}
|
||||
}
|
||||
|
||||
return $this->themeConfig;
|
||||
}
|
||||
|
||||
public function getThemeDir()
|
||||
{
|
||||
return 'frontend/theme/' . $this->theme;
|
||||
}
|
||||
|
||||
public function getThemeColorSchemeDir()
|
||||
{
|
||||
return $this->getThemeDir() . '/' . $this->getColorScheme();
|
||||
}
|
||||
|
||||
public function getDefaultThemeDir()
|
||||
{
|
||||
return $this->getBaseTheme() ? 'frontend/theme/' . $this->getBaseTheme()->getName() : null;
|
||||
}
|
||||
|
||||
public function getTemplateDir($module = null)
|
||||
{
|
||||
return $module ? sfLoader::getTemplateDir($module, null) . '/theme/' . $this->theme : sfConfig::get('sf_root_dir') . '/apps/frontend/templates/theme/'. $this->theme;
|
||||
}
|
||||
|
||||
public function getEditorImagePath($image, $system_path = false)
|
||||
{
|
||||
return $this->getImageDir($system_path).'/'.$image;
|
||||
}
|
||||
|
||||
public function findEditorImagePath($image, Theme $theme = null)
|
||||
{
|
||||
if (null === $theme)
|
||||
{
|
||||
$theme = $this;
|
||||
}
|
||||
|
||||
if (is_readable($theme->getEditorImagePath($image, true)))
|
||||
{
|
||||
return $theme->getEditorImagePath($image);
|
||||
}
|
||||
elseif ($theme->hasBaseTheme())
|
||||
{
|
||||
return $this->findEditorImagePath($image, $theme->getBaseTheme());
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public function getImagePath($image, $system_path = false, $default = false)
|
||||
{
|
||||
return $this->getImageDir($system_path).'/'.($default ? $image : $this->getImage($image));
|
||||
}
|
||||
|
||||
public function getImage($image)
|
||||
{
|
||||
return $this->hasImage($image) ? $this->editorImages[$image] : $image;
|
||||
}
|
||||
|
||||
public function hasImage($image)
|
||||
{
|
||||
if (null === $this->editorImages)
|
||||
{
|
||||
$this->editorImages = stThemeConfigGenerator::loadImageConfig($this, SF_ENVIRONMENT == 'theme');
|
||||
}
|
||||
|
||||
return isset($this->editorImages[$image]);
|
||||
}
|
||||
|
||||
public function getIsResponsive()
|
||||
{
|
||||
return $this->getConfig()->get('responsive') === $this->id;
|
||||
}
|
||||
|
||||
public function setIsResponsive($value)
|
||||
{
|
||||
if (!$value && $this->getConfig()->get('responsive') == $this->id)
|
||||
{
|
||||
$this->getConfig()->set('responsive', null);
|
||||
$this->modifiedColumns['is_responsive'] = true;
|
||||
}
|
||||
elseif ($value && $this->getConfig()->get('responsive') != $this->id)
|
||||
{
|
||||
$this->getConfig()->set('responsive', $this->id);
|
||||
$this->modifiedColumns['is_responsive'] = true;
|
||||
}
|
||||
}
|
||||
|
||||
public function loadThemeContents()
|
||||
{
|
||||
$themeContents = array();
|
||||
|
||||
foreach ($this->getThemeContents() as $content)
|
||||
{
|
||||
$themeContents[$content->getContentId()] = $content->getContent();
|
||||
}
|
||||
|
||||
return $themeContents;
|
||||
}
|
||||
|
||||
protected function updateActiveThemes()
|
||||
{
|
||||
$s = new Criteria();
|
||||
$s->add(ThemePeer::ID, $this->getId(), Criteria::NOT_EQUAL);
|
||||
$u = new Criteria();
|
||||
$u->add(ThemePeer::ACTIVE, false);
|
||||
|
||||
BasePeer::doUpdate($s, $u, Propel::getConnection());
|
||||
}
|
||||
|
||||
protected function getConfig(): stConfig
|
||||
{
|
||||
return stConfig::getInstance('stThemeBackend');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user