*/ /** * Klasa CurrencyPeer * * @package stCurrencyPlugin * @subpackage libs */ class CurrencyPeer extends BaseCurrencyPeer { protected static $currencies = []; protected static $activeCurrencies = []; protected static $main = null; protected static $byIso = []; public static function retrieveMain() { if (null === self::$main) { foreach (self::doSelectActive() as $currency) { if ($currency->getMain()) { self::$main = $currency; break; } } } return self::$main; } /** * Zwraca walutę o podanym id * * @param int $id Id waluty * @return Currency|null */ public static function retrieveByPKCached($id, ?bool $active = null) { $currencies = self::doSelectCached(); return isset($currencies[$id]) && (null === $active || $currencies[$id]->getActive() == $active) ? $currencies[$id] : null; } /** * Zwraca listę wszystkich walut * * @return Currency[] */ public static function doSelectCached() { $culture = sfContext::getInstance()->getUser()->getCulture(); if (!isset(self::$currencies[$culture])) { $fc = stFunctionCache::getInstance('stCurrency'); $currencies = $fc->cacheCall(['CurrencyPeer', 'doSelectWithI18n'], [new Criteria(), $culture], [ 'id' => 'currencies_' . $culture ]); $results = []; foreach ($currencies as $currency) { $results[$currency->getId()] = $currency; } self::$currencies[$culture] = $results; } return self::$currencies[$culture]; } public static function doSelectActive() { $culture = sfContext::getInstance()->getUser()->getCulture(); if (!isset(self::$activeCurrencies[$culture])) { $currencies = array(); foreach (self::doSelectCached() as $currency) { if ($currency->getActive()) { $currencies[] = $currency; } } self::$activeCurrencies[$culture] = $currencies; } return self::$activeCurrencies[$culture]; } /** * Wybór aktywnej waluty * * @param Criteria $c * @param $con * @return object */ public static function doSelectActiveOne(Criteria $c, $con = null) { $c = clone $c; $c->add(CurrencyPeer::ACTIVE, true); $c->setLimit(1); $currencies = self::doSelect($c, $con); return $currencies ? $currencies[0] : null; } public static function doSelectSystemDefault(Criteria $c, $con = null) { $c = clone $c; $config = stConfig::getInstance(null, 'stCurrencyPlugin'); $c->add(self::SHORTCUT, $config->get('default_currency')); return self::doSelectOne($c); } /** * Zwraca walutę po jej kodzie ISO * * @param string $shortcut * @return Currency|null */ public static function retrieveByIso($iso) { if (!isset(self::$byIso[$iso]) && !array_key_exists($iso, self::$byIso)) { $currencies = self::doSelectCached(); self::$byIso[$iso] = null; foreach ($currencies as $currency) { if ($currency->getShortcut() == $iso) { self::$byIso[$iso] = $currency; break; } } } return self::$byIso[$iso]; } public static function doSelectWithI18n(Criteria $c, $culture = null, $con = null) { if ($culture === null) { $culture = stLanguage::getHydrateCulture(); } return parent::doSelectWithI18n($c, $culture, $con); } public static function doCountWithI18n(Criteria $c, $con = null) { $c->addJoin(CurrencyI18nPeer::ID, CurrencyPeer::ID); $c->add(CurrencyI18nPeer::CULTURE, stLanguage::getHydrateCulture()); return self::doCount($c, $con); } }