Files
kalsport.pl/modules/dpdpoland/classes/Country.php
2024-11-05 12:22:50 +01:00

193 lines
6.1 KiB
PHP

<?php
/**
* 2019 DPD Polska Sp. z o.o.
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* prestashop@dpd.com.pl so we can send you a copy immediately.
*
* @author DPD Polska Sp. z o.o.
* @copyright 2019 DPD Polska Sp. z o.o.
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of DPD Polska Sp. z o.o.
*/
if (!defined('_PS_VERSION_'))
exit;
/**
* Class DpdPolandCountry Responsible for available countries management
*/
class DpdPolandCountry extends DpdPolandObjectModel
{
/**
* @var int Available country ID
*/
public $id_dpdpoland_country;
/**
* @var int PrestaShop country ID
*/
public $id_country;
/**
* @var int Shop ID
*/
public $id_shop;
/**
* @var datetime Date when available country was added
*/
public $date_add;
/**
* @var datetime Last date when available country was updated
*/
public $date_upd;
/**
* @var Country status
*/
public $enabled;
/**
* @var array ISO codes list of countries which are enabled by default
*/
public static $default_enabled_countries = array(
'AT', 'BE', 'BA', 'BG', 'HR', 'CZ', 'DK', 'EE', 'FI', 'FR', 'GR', 'ES', 'IE', 'LT', 'LU',
'LV', 'DE', 'NO', 'PT', 'RO', 'RS', 'SK', 'SI', 'SZ', 'SE', 'HU', 'GB', 'IT', 'NL'
);
/**
* DpdPolandCountry class constructor
* @param null|int $id_dpdpoland_country Available country ID
*/
public function __construct($id_dpdpoland_country = null)
{
parent::__construct($id_dpdpoland_country);
$this->id_shop = (int)Context::getContext()->shop->id;
}
/**
* @var array Class variables and their validation types
*/
public static $definition = array(
'table' => _DPDPOLAND_COUNTRY_DB_,
'primary' => 'id_dpdpoland_country',
'multilang_shop' => true,
'multishop' => true,
'fields' => array(
'id_country' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'),
'id_shop' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'),
'enabled' => array('type' => self::TYPE_INT, 'validate' => 'isInt'),
'date_add' => array('type' => self::TYPE_DATE, 'validate' => 'isDate'),
'date_upd' => array('type' => self::TYPE_DATE, 'validate' => 'isDate')
)
);
/**
* Collects list data and prepares it to be displayed
*
* @param string $order_by List order by criteria
* @param string $order_way List sorting way (ascending, descending)
* @param string $filter Criteria by which list is filtered
* @param int $start From which element list will be displayed
* @param int $pagination How many elements will be displayed in list
* @return array|false|mysqli_result|null|PDOStatement|resource Collected list data
*/
public function getList($order_by, $order_way, $filter, $start, $pagination)
{
$order_way = Validate::isOrderWay($order_way) ? $order_way : 'ASC';
$id_shop = (int)Context::getContext()->shop->id;
$id_lang = (int)Context::getContext()->language->id;
if (version_compare(_PS_VERSION_, '1.5', '<'))
$countries = DB::getInstance()->executeS('
SELECT
c.`id_country` AS `id_country`,
cl.`name` AS `name`,
c.`iso_code` AS `iso_code`,
IF(dpdc.`enabled` IS NULL, 1, dpdc.`enabled`) AS `enabled`
FROM `'._DB_PREFIX_.'country` c
LEFT JOIN `'._DB_PREFIX_._DPDPOLAND_COUNTRY_DB_.'` dpdc ON (dpdc.`id_country` = c.`id_country` AND dpdc.`id_shop` = "'.(int)$id_shop.'")
LEFT JOIN `'._DB_PREFIX_.'country_lang` cl ON (cl.`id_country` = c.`id_country` AND cl.`id_lang` = "'.(int)$id_lang.'")'
.$filter
.($order_by && $order_way ? ' ORDER BY `'.bqSQL($order_by).'` '.pSQL($order_way) : '')
.($start !== null && $pagination !== null ? ' LIMIT '.(int)$start.', '.(int)$pagination : '')
);
else
$countries = DB::getInstance()->executeS('
SELECT
c.`id_country` AS `id_country`,
cl.`name` AS `name`,
c.`iso_code` AS `iso_code`,
IF(dpdc.`enabled` IS NULL, 1, dpdc.`enabled`) AS `enabled`
FROM `'._DB_PREFIX_.'country` c
LEFT JOIN `'._DB_PREFIX_._DPDPOLAND_COUNTRY_DB_.'` dpdc ON (dpdc.`id_country` = c.`id_country` AND dpdc.`id_shop` = "'.(int)$id_shop.'")
LEFT JOIN `'._DB_PREFIX_.'country_shop` cs ON (cs.`id_country` = c.`id_country`)
LEFT JOIN `'._DB_PREFIX_.'country_lang` cl ON (cl.`id_country` = c.`id_country` AND cl.`id_lang` = "'.(int)$id_lang.'")
WHERE cs.`id_shop` = "'.(int)$id_shop.'" '
.$filter
.($order_by && $order_way ? ' ORDER BY `'.bqSQL($order_by).'` '.pSQL($order_way) : '')
.($start !== null && $pagination !== null ? ' LIMIT '.(int)$start.', '.(int)$pagination : '')
);
if (!$countries)
$countries = array();
return $countries;
}
/**
* Returns DPD country ID according to PrestaShop country
*
* @param int $id_country PrestaShop country ID
* @return false|null|string DPD country ID
*/
public static function getIdByCountry($id_country)
{
$id_shop = (int)Context::getContext()->shop->id;
return DB::getInstance()->getValue('
SELECT `id_dpdpoland_country`
FROM `'._DB_PREFIX_._DPDPOLAND_COUNTRY_DB_.'`
WHERE `id_shop` = "'.(int)$id_shop.'"
AND `id_country` = "'.(int)$id_country.'"
');
}
/**
* Collects data about disabled countries
*
* @return array Disabled countries IDs
*/
public static function getDisabledCountriesIDs()
{
$id_shop = (int)Context::getContext()->shop->id;
$countries = DB::getInstance()->executeS('
SELECT `id_country`
FROM `'._DB_PREFIX_._DPDPOLAND_COUNTRY_DB_.'`
WHERE `id_shop` = "'.(int)$id_shop.'"
AND `enabled` = "0"
');
if (!$countries)
$countries = array();
$countries_array = array();
foreach ($countries as $country)
$countries_array[] = $country['id_country'];
return $countries_array;
}
}