Files
grzanieplus.pl/plugins/stLanguagePlugin/lib/stLanguage.class.php
2025-03-12 17:06:23 +01:00

347 lines
9.7 KiB
PHP

<?php
/**
* SOTESHOP/stLanguagePlugin
*
* Ten plik należy do aplikacji stLanguagePlugin opartej na licencji (Open License SOTE) Otwarta Licencja 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 stLanguagePlugin
* @subpackage configs
* @copyright SOTE (www.sote.pl)
* @license http://www.sote.pl/license/open (Open License SOTE) Otwarta Licencja SOTE
* @version $Id: stLanguage.class.php 16206 2011-11-23 14:17:22Z michal $
* @author Michal Prochowski <michal.prochowski@sote.pl>
*/
/**
* Klasa stLanguage
*
* @package stLanguagePlugin
* @subpackage libs
*/
class stLanguage
{
/**
* namespace stLanguage
* @var string
*/
const SESSION_NAMESPACE = 'soteshop/language';
/**
* Instanacja obiektu stLanguage
* @var stLanguage
*/
protected static $instance = null;
/**
* Obiekt sfContext
* @var Context
*/
private $context;
/**
* Pełny adres z parametrami
* @var
*/
private $path = '';
/**
* Flaga zmiany języka
* @var bool
*/
private $languageChangedFlag = false;
protected static $disablePath = false;
protected static $optLanguage = null;
protected static $forceCurrentCultureHydration = false;
/**
* Incjalizacja klasy stLanguage
*
* @param string $context
*/
public function initialize($context)
{
$this->context = $context;
$this->path = $context->getUser()->getAttribute('path', array(), self::SESSION_NAMESPACE);
$this->languageChangedFlag = $context->getUser()->getAttribute('languageChangedFlag', false, self::SESSION_NAMESPACE);
}
/**
* Zwraca instancje obiektu
*
* @param string $context
* @return stLanguage
*/
public static function getInstance($context)
{
if (!isset(self::$instance))
{
$class = __CLASS__;
self::$instance = new $class();
self::$instance->initialize($context);
}
return self::$instance;
}
public static function disablePath()
{
self::$disablePath = true;
}
/**
* Ustawianie pełnego adresu z parametrami.
*
* @param $path string adres
*/
public function setPath($path)
{
if (self::$disablePath)
{
return false;
}
if (strpos($path, 'basket/addReferer') !== false)
{
$path = 'basket/index';
}
elseif (strpos($path, 'basket/remove') !== false)
{
$path = 'basket/index';
}
elseif (strpos($path, 'basket/index') !== false)
{
$path = 'basket/index';
}
elseif (strpos($path, 'sfCaptchaGD/GetImage') !== false)
{
return false;
}
elseif (strpos($path, 'stProduct/showImage') !== false)
{
return false;
}
elseif (strpos($path, 'stProduct/downloadAttachment') !== false)
{
return false;
}
elseif (strpos($path, 'stProduct/downloadAttachment') !== false)
{
return false;
}
$this->path = empty($path) ? '@homepage' : $path;
$this->context->getUser()->setAttribute('path', $this->path, self::SESSION_NAMESPACE);
}
/**
* Pobieranie pełnego adresu z parametrami.
*
* @return string
*/
public function getPath($shortcut = null)
{
$pathArray = $this->context->getController()->convertUrlStringToParameters($this->path);
$pathArray = $pathArray[1];
if (isset($pathArray['lang']))
unset($pathArray['lang']);
if ($shortcut !== null)
$pathArray['lang'] = $shortcut;
return $pathArray;
}
/**
* Czyszczenie pełnego adresu z parametrami
*
* @return string
*/
public function clearPath()
{
$this->path = '';
$this->context->getUser()->setAttribute('path', $this->path, self::SESSION_NAMESPACE);
}
public static function clearI18nCache($catalogue = '*')
{
sfToolkit::clearGlob(sfConfig::get('sf_root_cache_dir') . '/frontend/' . SF_ENVIRONMENT . '/i18n/' . $catalogue . '/*.cache');
stFunctionCache::clearAll();
stPartialCache::clearAll();
stFastCacheManager::clearCache();
}
/**
* Pobiera domyślne wartości językowe
*
* @author Marcin Butlak <marcin.butlak@sote.pl>
* @param object $obj Obiekt modelu
* @param string $method Nazwa metody (__METHOD__)
* @return string Wartośc domyślna
*
* @deprecated 8.2.0.3 use stLanguageModelI18nHelper::setI18nField
*/
public static function getDefaultValue($obj, $method)
{
return stLanguageModelI18nHelper::getI18nField($obj, $method);
}
/**
* Ustawia domyślne wartości językowe
*
* @author Marcin Butlak <marcin.butlak@sote.pl>
* @param object $obj Model
* @param string $method Nazwa metody (__METHOD__)
* @param string $value Wartość
*
* @deprecated 8.2.0.3 use stLanguageModelI18nHelper::setI18nField
*/
public static function setDefaultValue($obj, $method, $value)
{
stLanguageModelI18nHelper::setI18nField($obj, $method, $value);
}
/**
* Pobieranie Culture
*
* @return string
*/
public static function getHydrateCulture()
{
if (preg_match("/symfony/", $_SERVER["SCRIPT_NAME"])) return 'pl_PL';
return (SF_APP == 'backend') ? self::getOptLanguage() : sfContext::getInstance()->getUser()->getCulture();
}
public static function getShortcut()
{
return stSimpleLanguageHelper::cultureToShortcut(sfContext::getInstance()->getUser()->getCulture());
}
/**
* Sprawdzanie czy wersja językowa jest aktywane przy ustawianiu domyślnej wersji językowej
*
* @param $is_default mixed wartość pola is_default
* @return bool
*/
public static function checkDefaultLanguage($is_default)
{
$active = sfContext::getInstance()->getRequest()->getParameter('language[active]');
if ($active == true && $is_default == true)
return true;
return false;
}
/**
* Zmiana języka w sklepie
*
* @param $shortcut string skrót języka
* @return bool true - w przypadku powodzenia / false - w przypadku niepowodzenia
*/
public static function changeLanguageByShortcut($shortcut)
{
$context = sfContext::getInstance();
$defaultLanguage = LanguagePeer::doSelectDefault();
$languages = LanguagePeer::doSelectActive();
foreach ($languages as $language)
{
if ($language->getShortcut() == $shortcut)
{
$context->getUser()->setCulture($language->getOriginalLanguage());
stLanguage::getInstance($context)->setLanguageChangedFlag(true);
$_SESSION['fastcache_lang'] = $language->getOriginalLanguage();
return true;
}
}
return false;
}
/**
* Ustawianie flagi zmiany języka
*
* @param bool $flag
*/
public function setLanguageChangedFlag($flag)
{
$this->languageChangedFlag = $flag;
$this->context->getUser()->setAttribute('languageChangedFlag', $this->languageChangedFlag, self::SESSION_NAMESPACE);
}
/**
* Pobieranie flagi zmiany języka
*
* @return bool
*/
public function getLanguageChangedFlag()
{
return $this->languageChangedFlag;
}
public function hasLangParameterInUrl($culture, $returnDomain = false)
{
$shortcut = stSimpleLanguageHelper::cultureToShortcut($culture);
$languagesHasDomain = LanguageHasDomainPeer::doSelectByLanguageShortcut($shortcut);
if ($returnDomain)
{
if ($languagesHasDomain)
{
foreach ($languagesHasDomain as $languageHasDomain)
{
if ($languageHasDomain->getIsDefault())
{
return $languageHasDomain->getDomain();
}
}
return $languagesHasDomain[0]->getDomain();
}
else
{
return null;
}
}
return empty($languagesHasDomain);
}
public function hasDomain()
{
$culture = $this->context->getUser()->getCulture();
return !$this->hasLangParameterInUrl($culture);
}
public function getDomain()
{
$culture = $this->context->getUser()->getCulture();
return $this->hasLangParameterInUrl($culture, true);
}
public static function getOptLanguage()
{
if (self::$optLanguage !== null) return self::$optLanguage;
$config = stConfig::getInstance(sfContext::getInstance(), 'stLanguagePlugin');
self::$optLanguage = $config->get('default_opt_language');
if (empty(self::$optLanguage)) self::$optLanguage = 'pl_PL';
return self::$optLanguage;
}
public static function addModuleToRemoveLangParameter($module, $action = null) {
$modules = sfConfig::get('st_language_modules_to_remove_lang_parameter');
$modules[] = array('module' => $module, 'action' => $action);
sfConfig::set('st_language_modules_to_remove_lang_parameter', $modules);
return true;
}
public static function getModulesToRemoveLangParameter() {
return sfConfig::get('st_language_modules_to_remove_lang_parameter');
}
}