*/ 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; } }