/** * Retourne une liste de produits * * @param myshop_shelf_parameters $parameters Les paramètres de filtrage * @return array Tableau prêt à être utilisé dans les templates */ public function getProducts(myshop_shelf_parameters $parameters) { global $vatArray; $parametersValues = $parameters->getParameters(); $productType = $parametersValues['productsType']; $start = $parametersValues['start']; $limit = $parametersValues['limit']; $category = $parametersValues['category']; $sort = $parametersValues['sort']; $order = $parametersValues['order']; $excluded = $parametersValues['excluded']; $withXoopsUser = $parametersValues['withXoopsUser']; $withRelatedProducts = $parametersValues['withRelatedProducts']; $withQuantity = $parametersValues['withQuantity']; $thisMonthOnly = $parametersValues['thisMonthOnly']; $ret = $xoopsUsersIDs = $users = $relatedProducts = $productsManufacturers = $manufacturersPerProduct = $products = $productsIds = $categoriesIds = $storesIds = $manufacturersIds = $manufacturers = $categories = $stores = array(); // On commence par récupérer la liste des produits switch (strtolower($productType)) { case 'recent': $products = $this->handlers->h_myshop_products->getRecentProducts($start, $limit, $category, $sort, $order, $excluded, $thisMonthOnly); break; case 'mostsold': $tempProductsIds = $this->handlers->h_myshop_caddy->getMostSoldProducts($start, $limit, $category, $withQuantity); $products = $this->handlers->h_myshop_products->getProductsFromIDs(array_keys($tempProductsIds)); break; case 'mostviewed': $products = $this->handlers->h_myshop_products->getMostViewedProducts($start, $limit, $category, $sort, $order); break; case 'bestrated': $products = $this->handlers->h_myshop_products->getBestRatedProducts($start, $limit, $category, $sort, $order); break; case 'recommended': $products = $this->handlers->h_myshop_products->getRecentRecommended($start, $limit, $category, $sort, $order); break; case 'promotional': $products = $this->handlers->h_myshop_products->getPromotionalProducts($start, $limit, $category, $sort, $order); break; case 'random': $products = $this->handlers->h_myshop_products->getRandomProducts($start, $limit, $category, $sort, $order, $thisMonthOnly); } if (count($products) > 0) { $productsIds = array_keys($products); } else { return $ret; } // Recherche des Id des catégories et des vendeurs foreach ($products as $product) { $categoriesIds[] = $product->getVar('product_cid'); $storesIds[] = $product->getVar('product_store_id'); if ($withXoopsUser) { $xoopsUsersIDs[] = $product->getVar('product_submitter'); } } $productsManufacturers = $this->handlers->h_myshop_productsmanu->getFromProductsIds($productsIds); // Regroupement des fabricants par produit foreach ($productsManufacturers as $item) { $manufacturersIds[] = $item->getVar('pm_manu_id'); $manufacturersPerProduct[$item->getVar('pm_product_id')][] = $item; } // On récupère la liste des personnes qui ont soumis les produits if ($withXoopsUser) { $users = myshop_utils::getUsersFromIds($xoopsUsersIDs); } // Il faut récupérer la liste des produits relatifs if ($withRelatedProducts) { $relatedProducts = $this->getRelatedProductsFromProductsIds($productsIds); } $categoriesIds = array_unique($categoriesIds); sort($categoriesIds); $storesIds = array_unique($storesIds); sort($storesIds); $manufacturersIds = array_unique($manufacturersIds); sort($manufacturersIds); // Récupération des fabricants, des vendeurs et des catégories if (count($manufacturersIds) > 0) { $manufacturers = $this->handlers->h_myshop_manufacturer->getManufacturersFromIds($manufacturersIds); } if (count($categoriesIds) > 0) { $categories = $this->handlers->h_myshop_cat->getCategoriesFromIds($categoriesIds); } if (count($storesIds) > 0) { $stores = $this->handlers->h_myshop_stores->getStoresFromIds($storesIds); } $count = 1; $lastTitle = ''; foreach ($products as $product) { $tmp = array(); $tmp = $product->toArray(); $lastTitle = $product->getVar('product_title'); // Store if (isset($stores[$product->getVar('product_store_id')])) { $tmp['product_store'] = $stores[$product->getVar('product_store_id')]->toArray(); } // Category if (isset($categories[$product->getVar('product_cid')])) { $tmp['product_category'] = $categories[$product->getVar('product_cid')]->toArray(); } // Related products if ($withRelatedProducts) { if (isset($relatedProducts[$product->getVar('product_id')])) { $productsRelatedToThisOne = $relatedProducts[$product->getVar('product_id')]; foreach ($productsRelatedToThisOne as $oneRelatedProdut) { $tmp['product_related_products'][] = $oneRelatedProdut->toArray(); } } } // Les fabricants du produit if (isset($manufacturersPerProduct[$product->getVar('product_cid')])) { $productManufacturers = $manufacturersPerProduct[$product->getVar('product_cid')]; $tmpManufacturersList = array(); foreach ($productManufacturers as $productManufacturer) { if (isset($manufacturers[$productManufacturer->getVar('pm_manu_id')])) { $manufacturer = $manufacturers[$productManufacturer->getVar('pm_manu_id')]; $tmp['product_manufacturers'][] = $manufacturer->toArray(); $tmpManufacturersList[] = $manufacturer->getVar('manu_commercialname') . ' ' . $manufacturer->getVar('manu_name'); } } if (count($tmpManufacturersList) > 0) { $tmp['product_joined_manufacturers'] = implode(MYSHOP_STRING_TO_JOIN_MANUFACTURERS, $tmpManufacturersList); } } // L'utilisateur Xoops (éventuellement) if ($withXoopsUser && isset($users[$product->getVar('product_submitter')])) { $thisUser = $users[$product->getVar('product_submitter')]; if (xoops_trim($thisUser->getVar('name')) != '') { $name = $thisUser->getVar('name'); } else { $name = $thisUser->getVar('uname'); } $tmp['product_submiter_name'] = $name; $userLink = '<a href="' . XOOPS_URL . '/userinfo.php?uid=' . $thisUser->getVar('uid') . '">' . $name . '</a>'; $tmp['product_submiter_link'] = $userLink; } $tmp['product_count'] = $count; // Compteur pour les templates (pour gérer les colonnes) $ret[] = $tmp; $count++; } $ret['lastTitle'] = $lastTitle; return $ret; }