'advconstructor', 'primary' => 'id_advconstructor', 'multilang' => true, 'fields' => array( 'title' => array( 'type' => ObjectModel :: TYPE_STRING, 'lang' => true, 'validate' => 'isString', 'required' => TRUE ), 'subtitle' => array( 'type' => ObjectModel :: TYPE_STRING, 'lang' => true, 'validate' => 'isString' ), 'icon' => array( 'type' => ObjectModel :: TYPE_STRING, 'validate' => 'isString' ), 'content' => array( 'type' => ObjectModel :: TYPE_HTML, 'lang' => true, 'validate' => 'isString' ), 'link' => array( 'type' => ObjectModel :: TYPE_STRING, 'lang' => true, 'validate' => 'isString' ), 'external' => array( 'type' => ObjectModel :: TYPE_INT, 'validate' => 'isBool' ), 'skin' => array( 'type' => ObjectModel :: TYPE_STRING, 'validate' => 'isString' ), 'active' => array( 'type' => ObjectModel :: TYPE_INT, 'validate' => 'isBool' ), 'date_from' => array( 'type' => ObjectModel :: TYPE_DATE ), 'date_to' => array( 'type' => ObjectModel :: TYPE_DATE ), 'date_add' => array( 'type' => ObjectModel :: TYPE_DATE ), 'date_upd' => array( 'type' => ObjectModel :: TYPE_DATE ) ) ); public function getHooks() { if (!isset($this->hooks)) { $this->hooks = array(); foreach (Db::getInstance()->executeS(' SELECT `id_hook` FROM `' . _DB_PREFIX_ . 'advconstructor_hook` WHERE `id_advconstructor` = ' . $this->id . ' ') as $hook) { $this->hooks[] = $hook['id_hook']; } } return $this->hooks; } public function getCategory() { if (!isset($this->categories)) { $this->categories = array(); foreach (Db::getInstance()->executeS(' SELECT `id_category` FROM `' . _DB_PREFIX_ . 'advconstructor_category` WHERE `id_advconstructor` = ' . $this->id . ' ') as $category) { $this->categories[] = $category['id_category']; } } return $this->categories; } public function addHooksAssociation( $hooks ) { Db::getInstance()->execute(' DELETE FROM `'._DB_PREFIX_.'advconstructor_hook` WHERE `id_advconstructor` = '.(int) $this->id.' AND id_hook NOT IN ('.implode(',',$hooks).') '); foreach ( $hooks as $hook ) { if ( !AdvConstructorHook::associationHookExist( $this->id, $hook ) ) { $advconstructor_hook = new AdvConstructorHook(); $advconstructor_hook->id_advconstructor = (int) $this->id; $advconstructor_hook->id_hook = (int) $hook; $advconstructor_hook->add(); $advconstructor_hook->refreshPositions(); } } } public function addCategoryAssociation( $categories ) { Db::getInstance()->execute(' DELETE FROM `'._DB_PREFIX_.'advconstructor_category` WHERE `id_advconstructor` = '.(int) $this->id.' '); foreach ( $categories as $category ) { if ( !$this->associationCategoryExist( $category ) ) { Db::getInstance()->execute(' INSERT INTO `'._DB_PREFIX_.'advconstructor_category` (`id_advconstructor`,`id_category`) VALUES ('.(int) $this->id.','.$category.') '); } } } public static function getBlocksByHookID( $id_hook, $id_category ) { $now = date('Y-m-d H:i:s'); $sql = 'SELECT id_advconstructor, position FROM `' . _DB_PREFIX_ . 'advconstructor_hook` WHERE id_hook ='.(int)$id_hook; if ( $blocks_id = Db::getInstance()->executeS($sql) ) { $blocks = array(); foreach ($blocks_id as $block_id) { $blocks[] = $block_id['id_advconstructor']; } $collection = new Collection('AdvConstructorBlock', Context::getContext()->language->id); $collection->Sqlwhere('a0.date_from <= IF(a0.date_from = "0000-00-00 00:00:00","0000-00-00 00:00:00","' . $now . '")' ); $collection->Sqlwhere('a0.date_to >= IF(a0.date_to = "0000-00-00 00:00:00","0000-00-00 00:00:00","' . $now . '")' ); $collection->Sqlwhere('a0.id_advconstructor IN ('.implode(',',$blocks).')' ); if (Shop::isFeatureActive()) { $collection->Sqlwhere('a0.`id_advconstructor` IN ( SELECT sa.`id_advconstructor` FROM `' . _DB_PREFIX_ . 'advconstructor_shop` sa WHERE sa.id_shop IN (' . implode(', ', Shop::getContextListShopID()) . ') )'); } $res = $collection->getAll(); $temp = array(); foreach ( $res as $row ) { foreach ($blocks_id as $block_id) { if ( $block_id['id_advconstructor'] == $row->id ) { $show = false; if ( !self::existInOneCategory( $row->id ) ) { $show = true; } else { if ( $id_category && self::testCategoryAssociation( $row->id, $id_category ) ) { $show = true; } } if ( $show ){ $temp[$block_id['position']] = $row; } } } } ksort($temp); return $temp; } else { return false; } } public static function getBlocksByHookIDLite( $id_hook ) { $sql = 'SELECT id_advconstructor FROM `' . _DB_PREFIX_ . 'advconstructor_hook` WHERE id_hook ='.(int)$id_hook.' ORDER BY position ASC'; if ( $blocks_id = Db::getInstance()->executeS($sql) ) { $blocks = array(); foreach ($blocks_id as $block_id) { $blocks[] = $block_id['id_advconstructor']; } return $blocks; } else { return false; } } public function associationCategoryExist( $id_category ) { $sql = 'SELECT `id_advconstructor` FROM `'._DB_PREFIX_.'advconstructor_category` WHERE `id_category` = '.(int) $id_category.' AND `id_advconstructor` = '.(int) $this->id; if (!$id = Db::getInstance()->getRow($sql)) { return false; } else { return true; } } public static function existInOneCategory( $id_advconstructor ){ $sql = 'SELECT `id_advconstructor` FROM `'._DB_PREFIX_.'advconstructor_category` WHERE `id_advconstructor` = '.(int) $id_advconstructor; if (!$id = Db::getInstance()->getRow($sql)) { return false; } else { return true; } } public static function testCategoryAssociation( $id_advconstructor, $id_category ){ $sql = 'SELECT `id_advconstructor` FROM `'._DB_PREFIX_.'advconstructor_category` WHERE `id_category` = '.$id_category.' AND `id_advconstructor` = '.(int) $id_advconstructor; if (!$id = Db::getInstance()->getRow($sql)) { return false; } else { return true; } } }