*/ /** * Klasa CountriesPeer * * @package stCountriesPlugin * @subpackage libs */ class CountriesPeer extends BaseCountriesPeer { protected static $countriesCached = array(); /** * Zwraca listę kodów krajów należących do UE * * @return array */ public static function getEUCountryCodes() { return array('AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL' , 'PT', 'RO', 'SK', 'SI', 'ES', 'SE', 'MC', 'XI'); } public static function isEuCountryCode($isoA2Code) { return in_array($isoA2Code, self::getEUCountryCodes()); } /** * Zwraca tablicę krajów EU * * @return Countries[] */ public static function doSelectEuCountries() { $c = new Criteria(); $c->add(self::ISO_A2, self::getEUCountryCodes(), Criteria::IN); return self::doSelectWithIsoIndex($c); } /** * * Zwraca listę aktywnych krajów * * @param Criteria $c Kryteria * @param CreoleConnection $con Połączenie propel * @return Countries[] */ public static function doSelectActive(Criteria $c, $con = null) { $criteria = clone $c; $culture = sfContext::getInstance()->getUser()->getCulture(); $criteria->addAscendingOrderByColumn(sprintf('IFNULL(%s, %s)', CountriesI18nPeer::NAME, CountriesPeer::OPT_NAME)); $criteria->add(CountriesPeer::IS_ACTIVE, true); return self::doSelectWithI18n($criteria, $culture, $con); } public static function doSelectActiveCached($type = 'objects') { $culture = sfContext::getInstance()->getUser()->getCulture(); if (!isset(self::$countriesCached[$culture])) { $fc = stFunctionCache::getInstance('stCountriesPlugin'); self::$countriesCached[$culture] = $fc->cacheCall(array('CountriesPeer', 'doSelectActiveHelper'), array($culture)); } return $type ? self::$countriesCached[$culture][$type] : self::$countriesCached[$culture]; } /** * Zwraca kraj po kodzie ISO A2 * * @param string $iso * @return Countries * @throws sfCacheException */ public static function retrieveByIsoA2($iso) { $cache = self::doSelectActiveCached(null); return isset($cache['iso_a2'][$iso]) ? $cache['objects'][$cache['iso_a2'][$iso]] : null; } public static function retrieveByOptName($name) { $c = new Criteria(); $c->add(self::OPT_NAME, $name); return self::doSelectOne($c); } /** * Zwraca kraj po kodzie ISO A3 * * @param string $iso * @return Countries * @throws sfCacheException */ public static function retrieveByIsoA3($iso) { $cache = self::doSelectActiveCached(null); return isset($cache['iso_a3'][$iso]) ? $cache['objects'][$cache['iso_a3'][$iso]] : null; } /** * Zwraca domyślny kraj * * @return Countries */ public static function retrieveDefault() { $cache = self::doSelectActiveCached(null); return self::retrieveById($cache['default']); } /** * Zwraca kraj po ID * * @param int $id ID Kraju * @return Countries */ public static function retrieveById($id) { $cache = self::doSelectActiveCached(null); return isset($cache['id'][$id]) ? $cache['objects'][$cache['id'][$id]] : null; } public static function doSelectActiveHelper() { $result = array('objects' => array(), 'iso_a2' => array(), 'id' => array()); foreach (self::doSelectActive(new Criteria()) as $index => $country) { $result['objects'][$index] = $country; $result['iso_a2'][$country->getIsoA2()] = $index; $result['iso_a3'][$country->getIsoA3()] = $index; $result['id'][$country->getId()] = $index; if ($country->getIsDefault()) { $result['default'] = $country->getId(); } } return $result; } public static function doSelectDefault(Criteria $c, $con = null) { $criteria = clone $c; $criteria->add(self::IS_DEFAULT, true); return self::doSelectOne($criteria, $con); } /** * * Zwraca listę aktywnych krajów * * @param Criteria $c Kryteria * @param CreoleConnection $con Połączenie propel * @return Countries[] */ public static function doSelectActiveBackend(Criteria $c, $con = null) { $criteria = clone $c; $criteria->add(CountriesPeer::IS_ACTIVE, true); $criteria->addAscendingOrderByColumn(self::OPT_NAME . ' COLLATE utf8_unicode_ci'); return self::doSelect($criteria, $con); } public static function doCountActive(Criteria $c, $con = null) { $criteria = clone $c; $criteria->add(CountriesPeer::IS_ACTIVE, true); return self::doCount($criteria, false, $con); } /** * Przeciążenie metody pobierającej kraje w odpowiedniej wersji jezykowej * * @param Criteria $c Kryteria * @param mixed $culture Wersja językowa * @param CreoleConnection $con Połączenie z bazą danych * @return array Produkty */ 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(CountriesI18nPeer::ID, CountriesPeer::ID); $c->add(CountriesI18nPeer::CULTURE, stLanguage::getHydrateCulture()); return self::doCount($c, $con); } /** * Zwraca tablice krajów z indeksem kodu ISO * * @param Criteria $c Kryteria * @return Countries[] */ public static function doSelectWithIsoIndex(Criteria $c) { $c = clone $c; $c->addAscendingOrderByColumn(CountriesI18nPeer::NAME); self::setHydrateMethod(function(ResultSet $rs) { $results = array(); while($rs->next()) { $country = new Countries(); $country->hydrate($rs); $results[$country->getIsoA2()] = $country; } }); $results = self::doSelectWithI18n($c); self::setHydrateMethod(null); return $results; } }