* @copyright Since 2007 PrestaShop SA and Contributors * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 */ namespace PrestaShop\Module\PsxMarketingWithGoogle\Repository; use Context; use Db; use DbQuery; class AttributesRepository { /** * @var Context */ private $context; public function __construct(Context $context) { $this->context = $context; } /** * Get all custom attributes that are used as product features and combination of attributes. * Data used in Product feed configuration > Attribute mapping. * * @return array */ public function getAllAttributes(): array { $attributes = []; foreach ($this->getCustomAttributes() as $attr) { $attributes[] = [ // Not the best way in terms of permances, but avoid being responsible of a whole SQL query. 'name' => array_values(array_unique((array) (new \AttributeGroupCore($attr['id_attribute_group']))->name)), 'type' => 'custom', ]; } foreach ($this->getFeatures() as $feature) { $attributes[] = [ // Not the best way in terms of permances, but avoid being responsible of a whole SQL query. 'name' => array_values(array_unique((array) (new \FeatureCore($feature['id_feature']))->name)), 'type' => 'feature', ]; } return $attributes; } /** * Data used for Product filters */ public function getFeaturesWithLocalizedValues(): array { $query = new DbQuery(); $query->select('f.id_feature, fvl.id_lang, fl.name AS feature_name, fvl.id_feature_value, fvl.value') ->from('feature', 'f') ->innerJoin('feature_shop', 'fs', 'fs.id_feature = f.id_feature') ->innerJoin('feature_lang', 'fl', 'fl.id_feature = f.id_feature') ->innerJoin('feature_value', 'fv', 'fv.id_feature = f.id_feature') ->innerJoin('feature_value_lang', 'fvl', 'fvl.id_feature_value = fv.id_feature_value AND fvl.id_lang = fl.id_lang') ->where('fs.id_shop = ' . (int) $this->context->shop->id); return Db::getInstance()->executeS($query); } protected function getCustomAttributes(): array { return \AttributeGroupCore::getAttributesGroups($this->context->language->id); } protected function getFeatures(): array { return \FeatureCore::getFeatures($this->context->language->id); } }