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

343 lines
9.5 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: LanguagePeer.php 10732 2011-02-01 12:15:55Z michal $
* @author Michal Prochowski <michal.prochowski@sote.pl>
*/
use LanguagePeer as GlobalLanguagePeer;
/**
* Klasa LanguagePeer
*
* @package stLanguagePlugin
* @subpackage libs
*/
class LanguagePeer extends BaseLanguagePeer
{
/**
* Dostępne języki w sklepie
*
* @var Language[]|null
*/
protected static $languages = null;
/**
* Domyślny język panelu administracyjnego
*
* @var Language|null
*/
protected static $defaultBackendLanguage = null;
/**
* Zwraca lub tworzy nową instancję wersji językowej
*
* @param string $lang Wersja językowa
* @param string $name Nazwa dla polskiej wersji językowej
* @param string $name Nazwa dla angielskiej wersji językowej
* @return Language
*/
public static function retrieveOrCreate(string $lang, string $nameForPL, string $nameForEN): Language
{
$c = new Criteria();
$c->add(self::LANGUAGE, $lang);
$language = self::doSelectOne($c);
if (null === $language)
{
$language = new Language();
$language->setActive(false);
$language->setSystem(true);
$language->setIsTranslate(true);
$language->setActiveImage($lang.'_active.png');
$language->setInactiveImage($lang.'_inactive.png');
$language->setLanguage($lang);
$language->setShortcut($lang);
$language->setCulture('pl_PL');
$language->setName($nameForPL);
$language->setCulture('en_US');
$language->setName($nameForEN);
}
return $language;
}
/**
* Aktualizuje podstawową pamięć podręczną sklepu
*
* @param stSimpleShopDataCache|null $sc
* @return stSimpleShopDataCache
* @throws sfCacheException
*/
public static function doSimpleStoreUpdate(stSimpleShopDataCache $sc = null)
{
$languages = array();
$default = null;
foreach (self::doSelectActive() as $language)
{
$languages[$language->getShortcut()] = stSimpleLanguageHelper::cultureToShortcut($language->getOriginalLanguage());
if ($language->getIsDefault())
{
$default = stSimpleLanguageHelper::cultureToShortcut($language->getOriginalLanguage());
}
}
if (null === $sc)
{
$sc = stSimpleShopDataCache::getInstance();
}
$sc
->set('base_language', stSimpleLanguageHelper::cultureToShortcut(stLanguage::getOptLanguage()))
->set('default_language', $default)
->set('languages', $languages);
return $sc;
}
/**
* Zwraca list dostępnych języków w sklepie
*
* @param Criteria|null $criteria
* @param [type] $con
* @return Language[]
*/
public static function doSelectLanguages()
{
$culture = sfContext::getInstance()->getUser()->getCulture();
if (!isset(self::$languages[$culture]))
{
$cache = stFunctionCache::getInstance('stLanguagePlugin');
self::$languages[$culture] = $cache->cacheCall(['LanguagePeer', 'doSelect'], [new Criteria()], [
'id' => 'languages_' . $culture
]);
}
return self::$languages[$culture];
}
/**
*
* @param Criteria|null $criteria
* @param Connection|null $con
* @return Language[]
* @throws sfCacheException
*/
public static function doSelectActive(Criteria $criteria = null, $con = null)
{
$returnLanguages = array();
$languages = LanguagePeer::doSelectLanguages($criteria, $con);
foreach ($languages as $language)
{
if ($language->getActive())
{
$returnLanguages[] = $language;
}
}
return $returnLanguages;
}
public static function doSelectDefault(Criteria $criteria = null, $con = null)
{
$languages = LanguagePeer::doSelectActive($criteria, $con);
foreach ($languages as $language)
{
if ($language->getIsDefault()) return $language;
}
if(isset($languages[0]))
{
return $languages[0];
}
return null;
}
/**
* Zwraca instajncję wersje językowej
*
* @param string $culture Język
* @param Connection $con
* @return Language|null
*/
public static function retrieveByCulture($culture, $con = null)
{
$languages = LanguagePeer::doSelectActive(null, $con);
foreach ($languages as $language)
{
if ($language->getOriginalLanguage() == $culture) return $language;
}
return null;
}
/**
* Zwraca język po skrócie
*
* @param string $culture Język
* @param Connection $con
* @return Language|null
*/
public static function retrieveByShortcut($shortcut, $con = null)
{
$languages = LanguagePeer::doSelectActive(null, $con);
foreach ($languages as $language)
{
if ($language->getShortcut() == $shortcut) return $language;
}
return null;
}
/**
* Zwraca wersje językową po domenie
*
* @param string $domainParam
* @param Connection $con
* @return Language|null
*/
public static function doSelectByDomain($domainParam, $con = null)
{
$domains = LanguageHasDomainPeer::doSelectAll($con);
$languages = LanguagePeer::doSelectLanguages(null, $con);
$languageId = null;
foreach($domains as $domain)
{
if ($domain->getDomain() == $domainParam)
{
$languageId = $domain->getLanguageId();
break;
}
}
if ($languageId == null) return null;
foreach($languages as $language)
{
if ($language->getId() == $languageId)
{
return $language;
}
}
}
public static function retrieveDefaultBackendLanguage(): Language
{
if (null === self::$defaultBackendLanguage)
{
$languages = LanguagePeer::doSelectLanguages();
foreach ($languages as $language)
{
if ($language->getIsDefaultPanel())
{
self::$defaultBackendLanguage = $language;
break;
}
}
}
return self::$defaultBackendLanguage;
}
public static function doSelectWithI18n(Criteria $c, $culture = null, $con = null)
{
if ($culture === null)
{
$culture = stLanguage::getHydrateCulture();
}
if ($c->getDbName() == Propel::getDefaultDB())
{
$c->setDbName(self::DATABASE_NAME);
}
LanguagePeer::addSelectColumns($c);
$startcol = (LanguagePeer::NUM_COLUMNS - LanguagePeer::NUM_LAZY_LOAD_COLUMNS) + 1;
LanguageI18nPeer::addSelectColumns($c);
$c->addJoin(LanguagePeer::ID, sprintf("%s AND %s = '%s'", LanguageI18nPeer::ID, LanguageI18nPeer::CULTURE, $culture), Criteria::LEFT_JOIN);
$rs = BasePeer::doSelect($c, $con);
$results = array();
while($rs->next())
{
$omClass = LanguagePeer::getOMClass();
$cls = Propel::import($omClass);
$obj1 = new $cls();
$obj1->hydrate($rs);
$obj1->setCulture($culture);
$omClass = LanguageI18nPeer::getOMClass($rs, $startcol);
$cls = Propel::import($omClass);
$obj2 = new $cls();
$obj2->hydrate($rs, $startcol);
$obj1->setLanguageI18nForCulture($obj2, $culture);
$obj2->setLanguage($obj1);
$results[] = $obj1;
}
return $results;
}
public static function doClearDefaultBackendLanguage(?int $ignoreId = null)
{
$selectCriteria = new Criteria();
$updateCriteria = new Criteria();
if (null !== $ignoreId)
{
$selectCriteria->add(self::ID, $ignoreId, Criteria::NOT_EQUAL);
}
$updateCriteria->add(self::IS_DEFAULT_PANEL, false);
return BasePeer::doUpdate($selectCriteria, $updateCriteria, Propel::getConnection());
}
public static function doCountWithI18n(Criteria $c, $con = null)
{
$c->addJoin(LanguageI18nPeer::ID, LanguagePeer::ID);
$c->add(LanguageI18nPeer::CULTURE, stLanguage::getHydrateCulture());
return self::doCount($c, $con);
}
public static function getLanguagesAsArray() {
$languages = self::doSelectLanguages();
$list = array();
foreach ($languages as $language)
$list[$language->getLanguage()] = $language->getName();
return $list;
}
}