/** * Helper function which loads a full product struct and converts the product struct * to the shopware 3 array structure. * * @param Product $product * @param int $categoryId * @param array $selection * @return array */ private function getLegacyProduct(Product $product, $categoryId, array $selection) { $data = $this->legacyStructConverter->convertProductStruct($product); $relatedArticles = array(); foreach ($data['sRelatedArticles'] as $related) { $related = $this->legacyEventManager->firePromotionByIdEvents($related, null, $this); if ($related) { $relatedArticles[] = $related; } } $data['sRelatedArticles'] = $relatedArticles; $similarArticles = array(); foreach ($data['sSimilarArticles'] as $similar) { $similar = $this->legacyEventManager->firePromotionByIdEvents($similar, null, $this); if ($similar) { $similarArticles[] = $similar; } } $data['sSimilarArticles'] = $similarArticles; $data['categoryID'] = $categoryId; if ($product->hasConfigurator()) { $configurator = $this->configuratorService->getProductConfigurator($product, $this->contextService->getProductContext(), $selection); $convertedConfigurator = $this->legacyStructConverter->convertConfiguratorStruct($product, $configurator); $data = array_merge($data, $convertedConfigurator); $convertedConfiguratorPrice = $this->legacyStructConverter->convertConfiguratorPrice($product, $configurator); $data = array_merge($data, $convertedConfiguratorPrice); } $data = array_merge($data, $this->getLinksOfProduct($product, $categoryId)); $data["articleName"] = $this->sOptimizeText($data["articleName"]); $data["description_long"] = htmlspecialchars_decode($data["description_long"]); $data['mainVariantNumber'] = $this->db->fetchOne("SELECT variant.ordernumber\n FROM s_articles_details variant\n INNER JOIN s_articles product\n ON product.main_detail_id = variant.id\n AND product.id = ?", array($product->getId())); $data["sDescriptionKeywords"] = $this->getDescriptionKeywords($data["description_long"]); $data = $this->legacyEventManager->fireArticleByIdEvents($data, $this); return $data; }
/** * Get article data for sAddArticle * * @param int $id Article ordernumber * @return array|false Article data, or false if none found */ private function getArticleForAddArticle($id) { $sql = "\n SELECT s_articles.id AS articleID, s_articles.main_detail_id, name AS articleName, taxID,\n additionaltext, s_articles_details.shippingfree, laststock, instock,\n s_articles_details.id as articledetailsID, ordernumber,\n s_articles.configurator_set_id\n FROM s_articles, s_articles_details\n WHERE s_articles_details.ordernumber = ?\n AND s_articles_details.articleID = s_articles.id\n AND s_articles.active = 1\n AND (\n SELECT articleID\n FROM s_articles_avoid_customergroups\n WHERE articleID = s_articles.id AND customergroupID = ?\n ) IS NULL\n "; $article = $this->db->fetchRow($sql, array($id, $this->sSYSTEM->sUSERGROUPDATA["id"])); $article = $this->eventManager->filter('Shopware_Modules_Basket_getArticleForAddArticle_FilterArticle', $article, array("id" => $id, 'subject' => $this, "partner" => $this->sSYSTEM->_SESSION["sPartner"])); if (!$article) { return false; } $article = $this->moduleManager->Articles()->sGetTranslation($article, $article['articleID'], "article"); $article = $this->moduleManager->Articles()->sGetTranslation($article, $article['articledetailsID'], "variant"); if ($article['configurator_set_id'] > 0) { $context = $this->contextService->getProductContext(); $product = Shopware()->Container()->get('shopware_storefront.list_product_service')->get($article['ordernumber'], $context); $product = $this->additionalTextService->buildAdditionalText($product, $context); $article['additionaltext'] = $product->getAdditional(); } return $article; }