absalomedia/wasabi

View on GitHub
src/Product.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace ABM\Wasabi;

use Analog\Analog;

class Product extends Prestashop
{
    /**
     * @param string $data
     */
    public function getProductData($data)
    {
        $category = (int) substr($data, 0, strpos($data, ','));
        if ($category != 0) {
            $products = $this->getProducts($category);
        } else {
            $product = substr($data, strpos($data, ',') + 1);
            $products = $this->getProducts($product);
        }
        Analog::log("Product variables: $data");

        return $products;
    }

    /**
     * @param string $category
     */
    private function getProducts($category)
    {
        $product_ids = $this->getProductIDs($category);
        $products = $this->getProduct($product_ids);

        return $products;
    }

    /**
     * @param string $category
     */
    private function getProductIDs($category)
    {
        $sql = 'SELECT DISTINCT p.id_product
                from '._DB_PREFIX_.'product as p
                LEFT JOIN '._DB_PREFIX_.'image AS i ON i.id_product = p.id_product 
                LEFT JOIN '._DB_PREFIX_.'product_lang as pl ON pl.id_product = p.id_product
                WHERE p.active = 1
                AND p.id_category_default = '.(int) $category.'
                GROUP BY p.id_product';
        $pcats = $this->dbConn->fetchRowMany($sql);
        $ids = '';
        if (is_array($pcats) && (!empty($pcats))) {
            foreach ($pcats as $row) {
                $ids .= $row['id_product'].',';
            }
        }

        $ids = rtrim($ids, ',');

        return $ids;
    }

    /**
     * @param string $ids
     */
    private function getProduct($ids)
    {
        $sql = 'SELECT p.id_product, p.id_supplier, p.ean13, p.upc, p.price, p.wholesale_price, p.on_sale, p.quantity, p.id_category_default,
                    p.show_price, p.available_for_order, p.minimal_quantity, p.customizable,
                    p.out_of_stock, pl.link_rewrite, pl.name, i.id_image, il.legend
                    FROM '._DB_PREFIX_.'product as p                 
                    LEFT JOIN '._DB_PREFIX_.'image AS i ON i.id_product = p.id_product 
                    LEFT JOIN '._DB_PREFIX_.'image_lang as il ON i.id_image = il.id_image
                    WHERE p.id_product IN ('.$ids.')
                    AND i.cover = 1
                    AND p.active = 1
                    GROUP BY p.id_product
                    ORDER BY p.price ASC';

        $result = $this->dbConn->fetchRowMany($sql);

        if (is_array($result)) {
            foreach ($result as $key => $value) {
                $result['cat_id'] = $value['id_category_default'];
                $result['orderprice'] = $this->getOrderPrice($value['id_product']);
                $result['category_default'] = $this->getProductCat($value['id_category_default']);
            }

            return $result;
        }
    }

    private function getOrderPrice($product)
    {
        $sql = 'SELECT ps.price from '._DB_PREFIX_.'product_shop as ps WHERE ps.id_product = '.(int) $product;
        $result = $this->dbConn->fetchColumn($sql);

        return $result;
    }

    private function getProductCat($category)
    {
        $sql = 'SELECT cl.name from '._DB_PREFIX_.'category_lang as cl WHERE cl.id_category = '.(int) $category;
        $result = $this->dbConn->fetchColumn($sql);

        return $result;
    }
}