Newwebshop/classes/Shop.php

1018 lines
28 KiB
PHP

<?php
/**
* Copyright seit 2024 Webshop System
*
* Repräsentiert einen Webshop (Mandantenfähigkeit möglich)
* Vollständig PrestaShop-kompatibel mit erweiterten Funktionen
*
* @author Webshop System
* @license GPL v3
*/
class Shop extends ObjectModel
{
/** @var int ID of shop group */
public $id_shop_group;
/** @var int ID of shop category */
public $id_category;
/** @var string directory name of the selected theme */
public $theme_name;
/** @var string Shop name */
public $name;
/** @var string Shop color */
public $color;
public $active = true;
public $deleted;
/** @var ?string Physical uri of main url (read only) */
public $physical_uri;
/** @var ?string Virtual uri of main url (read only) */
public $virtual_uri;
/** @var ?string Domain of main url (read only) */
public $domain;
/** @var ?string Domain SSL of main url (read only) */
public $domain_ssl;
/** @var ShopGroup|null Shop group object */
protected $group;
/**
* @var Address|null
*/
public $address;
/**
* @see ObjectModel::$definition
*/
public static $definition = [
'table' => 'shop',
'primary' => 'id_shop',
'fields' => [
'active' => ['type' => self::TYPE_BOOL, 'validate' => 'isBool'],
'deleted' => ['type' => self::TYPE_BOOL, 'validate' => 'isBool'],
'name' => ['type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'required' => true, 'size' => 64],
'color' => ['type' => self::TYPE_STRING, 'validate' => 'isColor', 'size' => 50],
'id_category' => ['type' => self::TYPE_INT, 'required' => true],
'theme_name' => ['type' => self::TYPE_STRING, 'validate' => 'isThemeName', 'size' => 255],
'id_shop_group' => ['type' => self::TYPE_INT, 'required' => true],
],
];
/** @var array|null List of shops cached */
protected static $shops;
/** @var array|null List of shop group IDs cached */
protected static $shopGroupIds = null;
protected static $asso_tables = [];
protected static $id_shop_default_tables = [];
protected static $initialized = false;
protected $webserviceParameters = [
'fields' => [
'id_shop_group' => ['xlink_resource' => 'shop_groups'],
'id_category' => [],
],
];
/** @var int|null Store the current context of shop (CONTEXT_ALL, CONTEXT_GROUP, CONTEXT_SHOP) */
protected static $context;
/** @var int|null ID shop in the current context (will be empty if context is not CONTEXT_SHOP) */
protected static $context_id_shop;
/** @var int|null ID shop group in the current context (will be empty if context is CONTEXT_ALL) */
protected static $context_id_shop_group;
/** @var ShopGroup|null Context shop group kept as cache */
protected static $context_shop_group = null;
/** @var bool|null is multistore activated */
protected static $feature_active;
/** @var Theme|null */
public $theme;
/**
* There are 3 kinds of shop context : shop, group shop and general.
*/
public const CONTEXT_SHOP = 1;
public const CONTEXT_GROUP = 2;
public const CONTEXT_ALL = 3;
/**
* Some data can be shared between shops, like customers or orders.
*/
public const SHARE_CUSTOMER = 'share_customer';
public const SHARE_ORDER = 'share_order';
public const SHARE_STOCK = 'share_stock';
/**
* Konstruktor
*/
public function __construct($id = null, $id_lang = null, $id_shop = null)
{
parent::__construct($id, $id_lang, $id_shop);
if ($this->id) {
$this->setUrl();
if ($this->theme == null) {
$this->setTheme();
}
}
}
/**
* Initialize an array with all the multistore associations in the database.
*/
protected static function init()
{
Shop::$id_shop_default_tables = ['product', 'category'];
$asso_tables = [
'carrier' => ['type' => 'shop'],
'carrier_lang' => ['type' => 'fk_shop'],
'category' => ['type' => 'shop'],
'category_lang' => ['type' => 'fk_shop'],
'cms' => ['type' => 'shop'],
'cms_lang' => ['type' => 'fk_shop'],
'cms_category' => ['type' => 'shop'],
'cms_category_lang' => ['type' => 'fk_shop'],
'contact' => ['type' => 'shop'],
'country' => ['type' => 'shop'],
'currency' => ['type' => 'shop'],
'employee' => ['type' => 'shop'],
'hook_module' => ['type' => 'fk_shop'],
'hook_module_exceptions' => ['type' => 'fk_shop', 'primary' => 'id_hook_module_exceptions'],
'image' => ['type' => 'shop'],
'lang' => ['type' => 'shop'],
'meta_lang' => ['type' => 'fk_shop'],
'module' => ['type' => 'shop'],
'module_currency' => ['type' => 'fk_shop'],
'module_country' => ['type' => 'fk_shop'],
'module_group' => ['type' => 'fk_shop'],
'product' => ['type' => 'shop'],
'product_attribute' => ['type' => 'shop'],
'product_lang' => ['type' => 'fk_shop'],
'customization_field_lang' => ['type' => 'fk_shop'],
'store' => ['type' => 'shop'],
'webservice_account' => ['type' => 'shop'],
'warehouse' => ['type' => 'shop'],
'stock_available' => ['type' => 'fk_shop', 'primary' => 'id_stock_available'],
'carrier_tax_rules_group_shop' => ['type' => 'fk_shop'],
'attribute' => ['type' => 'shop'],
'feature' => ['type' => 'shop'],
'group' => ['type' => 'shop'],
'attribute_group' => ['type' => 'shop'],
'tax_rules_group' => ['type' => 'shop'],
'zone' => ['type' => 'shop'],
'manufacturer' => ['type' => 'shop'],
'supplier' => ['type' => 'shop'],
];
foreach ($asso_tables as $table_name => $table_details) {
Shop::addTableAssociation($table_name, $table_details);
}
Shop::$initialized = true;
}
/**
* Set URL
*/
public function setUrl()
{
$cache_id = 'Shop::setUrl_' . (int) $this->id;
if (!Cache::isStored($cache_id)) {
$row = Db::getInstance()->getRow('
SELECT su.physical_uri, su.virtual_uri, su.domain, su.domain_ssl
FROM ' . _DB_PREFIX_ . 'shop s
LEFT JOIN ' . _DB_PREFIX_ . 'shop_url su ON (s.id_shop = su.id_shop)
WHERE s.id_shop = ' . (int) $this->id . '
AND s.active = 1 AND s.deleted = 0 AND su.main = 1');
Cache::store($cache_id, $row);
} else {
$row = Cache::retrieve($cache_id);
}
if (!$row) {
return false;
}
$this->physical_uri = $row['physical_uri'];
$this->virtual_uri = $row['virtual_uri'];
$this->domain = $row['domain'];
$this->domain_ssl = $row['domain_ssl'];
return true;
}
/**
* Add a shop, and clear the cache.
*/
public function add($autodate = true, $null_values = false)
{
$res = parent::add($autodate, $null_values);
if ($res) {
Shop::cacheShops(true);
}
return $res;
}
/**
* Associate super admins
*/
public function associateSuperAdmins()
{
$employees = Employee::getEmployeesByProfile(_PS_ADMIN_PROFILE_);
foreach ($employees as $employee) {
$employee = new Employee($employee['id_employee']);
$employee->associateTo($this->id);
}
}
/**
* Delete shop
*/
public function delete()
{
if (!$this->hasDependency($this->id)) {
$res = parent::delete();
if ($res) {
Shop::cacheShops(true);
}
return $res;
}
return false;
}
/**
* Has dependency
*/
public static function hasDependency($id_shop)
{
$dependency = false;
$nbr_dependency = Shop::getTotalShops(1);
if ($nbr_dependency == 1) {
$dependency = true;
}
return $dependency;
}
/**
* Initialize
*/
public static function initialize()
{
if (Shop::$initialized) {
return;
}
Shop::init();
// Load shops
Shop::cacheShops();
// Set context
if (!Shop::getContext()) {
if (Shop::isFeatureActive()) {
Shop::setContext(Shop::CONTEXT_SHOP, 1);
} else {
Shop::setContext(Shop::CONTEXT_ALL);
}
}
}
/**
* Get address
*/
public function getAddress()
{
if (!isset($this->address)) {
$this->address = new Address(Configuration::get('PS_SHOP_ADDR1', null, null, $this->id));
}
return $this->address;
}
/**
* Set theme
*/
public function setTheme()
{
$this->theme = new Theme($this->theme_name);
}
/**
* Get base URI
*/
public function getBaseURI()
{
return $this->physical_uri;
}
/**
* Get base URL
*/
public function getBaseURL($auto_secure_mode = true, $add_base_uri = true)
{
$url = $this->domain;
if ($auto_secure_mode && Tools::usingSecureMode()) {
$url = $this->domain_ssl;
}
if ($add_base_uri) {
$url .= $this->getBaseURI();
}
return $url;
}
/**
* Get group
*/
public function getGroup()
{
if (!$this->group) {
$this->group = new ShopGroup($this->id_shop_group);
}
return $this->group;
}
/**
* Get category
*/
public function getCategory()
{
return new Category($this->id_category);
}
/**
* Get URLs
*/
public function getUrls()
{
$sql = 'SELECT *
FROM ' . _DB_PREFIX_ . 'shop_url
WHERE id_shop = ' . (int) $this->id;
return Db::getInstance()->executeS($sql);
}
/**
* Is default shop
*/
public function isDefaultShop()
{
return $this->id == 1;
}
/**
* Get asso table
*/
public static function getAssoTable($table)
{
if (!Shop::$initialized) {
Shop::init();
}
return isset(Shop::$asso_tables[$table]) ? Shop::$asso_tables[$table] : false;
}
/**
* Check ID shop default
*/
public static function checkIdShopDefault($table)
{
if (!Shop::$initialized) {
Shop::init();
}
return in_array($table, Shop::$id_shop_default_tables);
}
/**
* Get asso tables
*/
public static function getAssoTables()
{
if (!Shop::$initialized) {
Shop::init();
}
return Shop::$asso_tables;
}
/**
* Add table association
*/
public static function addTableAssociation($table_name, $table_details)
{
if (!Shop::$initialized) {
Shop::init();
}
Shop::$asso_tables[$table_name] = $table_details;
}
/**
* Is table associated
*/
public static function isTableAssociated($table)
{
if (!Shop::$initialized) {
Shop::init();
}
return isset(Shop::$asso_tables[$table]);
}
/**
* Cache shops
*/
public static function cacheShops($refresh = false)
{
if (!is_null(Shop::$shops) && !$refresh) {
return Shop::$shops;
}
Shop::$shops = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
SELECT s.*, su.domain, su.domain_ssl, su.physical_uri, su.virtual_uri
FROM ' . _DB_PREFIX_ . 'shop s
LEFT JOIN ' . _DB_PREFIX_ . 'shop_url su ON (s.id_shop = su.id_shop)
WHERE s.active = 1 AND s.deleted = 0 AND (su.main = 1 OR su.main IS NULL)
ORDER BY s.name ASC');
return Shop::$shops;
}
/**
* Get complete list of shops ID
*/
public static function getCompleteListOfShopsID()
{
$cache_id = 'Shop::getCompleteListOfShopsID';
if (!Cache::isStored($cache_id)) {
$sql = 'SELECT id_shop FROM ' . _DB_PREFIX_ . 'shop WHERE active = 1 AND deleted = 0';
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
$array = [];
foreach ($result as $row) {
$array[] = (int) $row['id_shop'];
}
Cache::store($cache_id, $array);
}
return Cache::retrieve($cache_id);
}
/**
* Get shops
*/
public static function getShops($active = true, $id_shop_group = null, $get_as_list_id = false)
{
$sql = 'SELECT s.*, su.domain, su.domain_ssl, su.physical_uri, su.virtual_uri
FROM ' . _DB_PREFIX_ . 'shop s
LEFT JOIN ' . _DB_PREFIX_ . 'shop_url su ON (s.id_shop = su.id_shop)
WHERE s.active = ' . (int) $active . ' AND s.deleted = 0 AND (su.main = 1 OR su.main IS NULL)';
if ($id_shop_group) {
$sql .= ' AND s.id_shop_group = ' . (int) $id_shop_group;
}
$sql .= ' ORDER BY s.name ASC';
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
if ($get_as_list_id) {
$array = [];
foreach ($result as $row) {
$array[$row['id_shop']] = $row['id_shop'];
}
return $array;
}
return $result;
}
/**
* Get URLs shared cart
*/
public function getUrlsSharedCart()
{
if (!$this->getGroup()->share_order) {
return false;
}
$sql = 'SELECT DISTINCT su.domain, su.domain_ssl, su.physical_uri, su.virtual_uri
FROM ' . _DB_PREFIX_ . 'shop s
LEFT JOIN ' . _DB_PREFIX_ . 'shop_url su ON (s.id_shop = su.id_shop)
WHERE s.id_shop_group = ' . (int) $this->id_shop_group . '
AND s.active = 1 AND s.deleted = 0 AND (su.main = 1 OR su.main IS NULL)';
return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
}
/**
* Get shops collection
*/
public static function getShopsCollection($active = true, $id_shop_group = null)
{
$shops = new PrestaShopCollection('Shop');
$shops->where('active', '=', $active);
$shops->where('deleted', '=', 0);
if ($id_shop_group) {
$shops->where('id_shop_group', '=', $id_shop_group);
}
return $shops;
}
/**
* Get shop
*/
public static function getShop($shop_id)
{
if (!Shop::$initialized) {
Shop::init();
}
foreach (Shop::$shops as $shop) {
if ($shop['id_shop'] == $shop_id) {
return $shop;
}
}
return false;
}
/**
* Get ID by name
*/
public static function getIdByName($name)
{
$sql = 'SELECT id_shop FROM ' . _DB_PREFIX_ . 'shop WHERE name = \'' . pSQL($name) . '\'';
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($sql);
return $result;
}
/**
* Get total shops
*/
public static function getTotalShops($active = true, $id_shop_group = null)
{
$sql = 'SELECT COUNT(*)
FROM ' . _DB_PREFIX_ . 'shop s
WHERE s.active = ' . (int) $active . ' AND s.deleted = 0';
if ($id_shop_group) {
$sql .= ' AND s.id_shop_group = ' . (int) $id_shop_group;
}
return Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($sql);
}
/**
* Get group from shop
*/
public static function getGroupFromShop($shop_id, $as_id = true)
{
$sql = 'SELECT id_shop_group FROM ' . _DB_PREFIX_ . 'shop WHERE id_shop = ' . (int) $shop_id;
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($sql);
if ($as_id) {
return $result;
} else {
return new ShopGroup($result);
}
}
/**
* Get group ID from shop ID
*/
public static function getGroupIdFromShopId(int $shopId): ?int
{
$sql = 'SELECT id_shop_group FROM ' . _DB_PREFIX_ . 'shop WHERE id_shop = ' . (int) $shopId;
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($sql);
return $result ? (int) $result : null;
}
/**
* Get shared shops
*/
public static function getSharedShops($shop_id, $type)
{
$sql = 'SELECT DISTINCT s.id_shop
FROM ' . _DB_PREFIX_ . 'shop s
LEFT JOIN ' . _DB_PREFIX_ . 'shop_group sg ON (s.id_shop_group = sg.id_shop_group)
WHERE sg.' . pSQL($type) . ' = 1 AND s.id_shop != ' . (int) $shop_id;
return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
}
/**
* Get context list shop ID
*/
public static function getContextListShopID($share = false)
{
if (Shop::getContext() == Shop::CONTEXT_SHOP) {
$list = (int) Shop::getContextShopID();
} elseif (Shop::getContext() == Shop::CONTEXT_GROUP) {
$list = Shop::getShops(true, Shop::getContextShopGroupID(), true);
} else {
$list = Shop::getCompleteListOfShopsID();
}
if ($share) {
$list = Shop::getSharedShops(Shop::getContextShopID(), $share);
}
return $list;
}
/**
* Get shop by ID
*/
public static function getShopById($id, $identifier, $table)
{
$key = 'Shop::getShopById_' . $table . '_' . $identifier . '_' . $id;
if (!Cache::isStored($key)) {
$sql = 'SELECT id_shop FROM ' . _DB_PREFIX_ . $table . '_shop WHERE ' . pSQL($identifier) . ' = ' . (int) $id;
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($sql);
Cache::store($key, $result);
}
return Cache::retrieve($key);
}
/**
* Set context
*/
public static function setContext($type, $id = null)
{
Shop::$context = $type;
Shop::$context_id_shop = null;
Shop::$context_id_shop_group = null;
switch ($type) {
case Shop::CONTEXT_SHOP:
Shop::$context_id_shop = (int) $id;
break;
case Shop::CONTEXT_GROUP:
Shop::$context_id_shop_group = (int) $id;
break;
default:
Shop::$context = Shop::CONTEXT_ALL;
}
}
/**
* Get context
*/
public static function getContext()
{
return Shop::$context;
}
/**
* Reset static cache
*/
public static function resetStaticCache()
{
Shop::$shops = null;
Shop::$shopGroupIds = null;
Shop::$context = null;
Shop::$context_id_shop = null;
Shop::$context_id_shop_group = null;
Shop::$context_shop_group = null;
Shop::$feature_active = null;
}
/**
* Reset context
*/
public static function resetContext()
{
Shop::$context = null;
Shop::$context_id_shop = null;
Shop::$context_id_shop_group = null;
Shop::$context_shop_group = null;
}
/**
* Get context type
*/
public function getContextType()
{
return Shop::getContext();
}
/**
* Get context shop ID
*/
public static function getContextShopID($null_value_without_multishop = false)
{
if ($null_value_without_multishop && !Shop::isFeatureActive()) {
return null;
}
return Shop::$context_id_shop;
}
/**
* Get contextual shop ID
*/
public function getContextualShopId()
{
if (Shop::getContext() == Shop::CONTEXT_SHOP) {
return (int) Shop::getContextShopID();
}
return (int) $this->id;
}
/**
* Get context shop group ID
*/
public static function getContextShopGroupID($null_value_without_multishop = false)
{
if ($null_value_without_multishop && !Shop::isFeatureActive()) {
return null;
}
return Shop::$context_id_shop_group;
}
/**
* Get context shop group
*/
public static function getContextShopGroup()
{
if (!Shop::$context_shop_group) {
Shop::$context_shop_group = new ShopGroup(Shop::getContextShopGroupID());
}
return Shop::$context_shop_group;
}
/**
* Add SQL restriction
*/
public static function addSqlRestriction($share = false, $alias = null)
{
if (!$alias) {
$alias = 's';
}
if (Shop::getContext() == Shop::CONTEXT_SHOP) {
$restriction = ' AND ' . $alias . '.id_shop = ' . (int) Shop::getContextShopID();
} elseif (Shop::getContext() == Shop::CONTEXT_GROUP) {
$restriction = ' AND ' . $alias . '.id_shop IN (' . implode(', ', Shop::getContextListShopID($share)) . ')';
} else {
$restriction = '';
}
return $restriction;
}
/**
* Add SQL association
*/
public static function addSqlAssociation($table, $alias, $inner_join = true, $on = null, $force_not_default = false)
{
$table_alias = $table . '_shop';
if (strpos($table, '.') !== false) {
$table_alias = $table;
}
$asso_table = Shop::getAssoTable($table);
if ($asso_table === false || $asso_table['type'] != 'shop') {
return;
}
$join = '';
if (Shop::getContext() == Shop::CONTEXT_SHOP) {
if ($inner_join) {
$join .= ' INNER JOIN';
} else {
$join .= ' LEFT JOIN';
}
$join .= ' `' . _DB_PREFIX_ . $table_alias . '` ' . $alias . ' ON (a.id_' . $table . ' = ' . $alias . '.id_' . $table . ' AND ' . $alias . '.id_shop = ' . (int) Shop::getContextShopID() . ')';
} elseif (Shop::getContext() == Shop::CONTEXT_GROUP) {
if ($inner_join) {
$join .= ' INNER JOIN';
} else {
$join .= ' LEFT JOIN';
}
$join .= ' `' . _DB_PREFIX_ . $table_alias . '` ' . $alias . ' ON (a.id_' . $table . ' = ' . $alias . '.id_' . $table . ' AND ' . $alias . '.id_shop IN (' . implode(', ', Shop::getContextListShopID()) . '))';
} else {
if ($inner_join) {
$join .= ' INNER JOIN';
} else {
$join .= ' LEFT JOIN';
}
$join .= ' `' . _DB_PREFIX_ . $table_alias . '` ' . $alias . ' ON (a.id_' . $table . ' = ' . $alias . '.id_' . $table . ')';
}
return $join;
}
/**
* Add SQL restriction on lang
*/
public static function addSqlRestrictionOnLang($alias = null, $id_shop = null)
{
if (!$alias) {
$alias = 'l';
}
if (Shop::getContext() == Shop::CONTEXT_SHOP) {
$restriction = ' AND ' . $alias . '.id_shop = ' . (int) Shop::getContextShopID();
} elseif (Shop::getContext() == Shop::CONTEXT_GROUP) {
$restriction = ' AND ' . $alias . '.id_shop IN (' . implode(', ', Shop::getContextListShopID()) . ')';
} else {
$restriction = '';
}
return $restriction;
}
/**
* Get tree
*/
public static function getTree()
{
$tree = [];
$sql = 'SELECT s.id_shop, s.name, sg.id_shop_group, sg.name as group_name
FROM ' . _DB_PREFIX_ . 'shop s
LEFT JOIN ' . _DB_PREFIX_ . 'shop_group sg ON (s.id_shop_group = sg.id_shop_group)
WHERE s.active = 1 AND s.deleted = 0
ORDER BY sg.name, s.name';
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
foreach ($result as $row) {
if (!isset($tree[$row['id_shop_group']])) {
$tree[$row['id_shop_group']] = [
'id' => $row['id_shop_group'],
'name' => $row['group_name'],
'shops' => [],
];
}
$tree[$row['id_shop_group']]['shops'][] = [
'id' => $row['id_shop'],
'name' => $row['name'],
];
}
return $tree;
}
/**
* Is feature active
*/
public static function isFeatureActive()
{
if (Shop::$feature_active === null) {
Shop::$feature_active = Configuration::get('PS_MULTISHOP_FEATURE_ACTIVE') && Shop::getTotalShops() > 1;
}
return Shop::$feature_active;
}
/**
* Copy shop data
*/
public function copyShopData($old_id, $tables_import = false, $deleted = false)
{
// Copy shop data
$sql = 'SELECT * FROM ' . _DB_PREFIX_ . 'shop WHERE id_shop = ' . (int) $old_id;
$old_shop = Db::getInstance()->getRow($sql);
if ($old_shop) {
$this->id_shop_group = $old_shop['id_shop_group'];
$this->id_category = $old_shop['id_category'];
$this->theme_name = $old_shop['theme_name'];
$this->name = $old_shop['name'] . ' (Copy)';
$this->color = $old_shop['color'];
$this->active = $old_shop['active'];
$this->deleted = $deleted ? 1 : 0;
}
return true;
}
/**
* Get categories
*/
public static function getCategories($id = 0, $only_id = true)
{
$sql = 'SELECT c.id_category, c.name
FROM ' . _DB_PREFIX_ . 'category c
LEFT JOIN ' . _DB_PREFIX_ . 'category_shop cs ON (c.id_category = cs.id_category)
WHERE cs.id_shop = ' . (int) $id . '
ORDER BY c.name ASC';
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
if ($only_id) {
$array = [];
foreach ($result as $row) {
$array[] = $row['id_category'];
}
return $array;
}
return $result;
}
/**
* Get entity IDs
*/
public static function getEntityIds($entity, $id_shop, $active = false, $delete = false)
{
$sql = 'SELECT e.id_' . pSQL($entity) . '
FROM ' . _DB_PREFIX_ . pSQL($entity) . ' e
LEFT JOIN ' . _DB_PREFIX_ . pSQL($entity) . '_shop es ON (e.id_' . pSQL($entity) . ' = es.id_' . pSQL($entity) . ')
WHERE es.id_shop = ' . (int) $id_shop;
if ($active) {
$sql .= ' AND e.active = 1';
}
if ($delete) {
$sql .= ' AND e.deleted = 1';
} else {
$sql .= ' AND e.deleted = 0';
}
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
$array = [];
foreach ($result as $row) {
$array[] = $row['id_' . $entity];
}
return $array;
}
/**
* Find shop by host
*/
private static function findShopByHost($host)
{
$sql = 'SELECT s.id_shop
FROM ' . _DB_PREFIX_ . 'shop s
LEFT JOIN ' . _DB_PREFIX_ . 'shop_url su ON (s.id_shop = su.id_shop)
WHERE su.domain = \'' . pSQL($host) . '\'
AND s.active = 1 AND s.deleted = 0';
return Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($sql);
}
/**
* Initialize (simple method)
*/
public static function initialize()
{
// TODO: Mandantenfähigkeit später
return new Shop(1);
}
/**
* Get base URI (simple method)
*/
public function getBaseURI()
{
return $this->physical_uri;
}
/**
* Get group (simple method)
*/
public function getGroup()
{
// Dummy-Objekt für Gruppenfunktionen
return (object)[
'id' => 1,
'share_order' => false
];
}
/**
* Get URLs shared cart (simple method)
*/
public function getUrlsSharedCart()
{
// Dummy für getUrlsSharedCart
return [$this->domain];
}
}