Files
2025-03-12 17:06:23 +01:00

259 lines
6.4 KiB
PHP

<?php
/**
* SOTESHOP/stCountriesPlugin
*
* Ten plik należy do aplikacji stCountriesPlugin opartej na licencji (Professional License 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 stCountriesPlugin
* @subpackage libs
* @copyright SOTE (www.sote.pl)
* @license http://www.sote.pl/license/sote (Professional License SOTE)
* @version $Id: CountriesPeer.php 10420 2011-01-21 13:20:27Z michal $
* @author Marcin Olejniczak <marcin.olejniczak@sote.pl>
*/
/**
* 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;
}
}