HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/SBogers10/deensekroon.komma-mediadesign.nl/wwwroot/App/Feeds/FeedRepository.php
<?php


namespace App\Feeds;


include_once $_SERVER['DOCUMENT_ROOT'] . '/php/discount/DiscountService.php';


use \DiscountService;


class FeedRepository
{
    private $mysqli;

    private $discountService;

    public function __construct()
    {
        global $mysqli;
        $this->mysqli = $mysqli;

        $this->discountService = new DiscountService();
    }


    /**
     * Check if any product is updated
     *
     * @param $updated_at
     * @return bool|int
     */
    public function checkForUpdatedProducts($updated_at)
    {
        $query = 'SELECT id
                  FROM product_products 
                  WHERE updated_at > "' . $updated_at . '"';

        // Check for result
        if( ! $result = $this->mysqli->query($query)) return false;

        return $result->num_rows;
    }

    /**
     * Get products from the database
     */
    public function products($required = [], $updated_at = null, $withUnpublished = false)
    {
        $query = 'SELECT

            products.id,
            products.titleNL,
            products.descriptionNL,
            products.specsNL,
            products.price,
            products.discountPrice,
            products.googleCategoryId as google_category_id,
            products.thumb,
            products.catId,
            products.color,
            products.published,

            variantions.id as variation_id,
            variantions.ean,
            variantions.size,
            variantions.inStock AS stock,

            brands.title AS brandTitle,

            routes.route_nl,
            routes.route_en

          FROM shop_stock AS variantions

          INNER JOIN product_products AS products
          ON products.id = variantions.productId

          INNER JOIN merken AS brands
          ON products.brandId = brands.id

          INNER JOIN content_status AS status
          ON products.id = status.itemId

          LEFT JOIN routes ON products.id = routes.routeable_id
          AND routes.routeable_type = "product"

          WHERE status.active = 1
          AND status.linkname = "product_products"';
          if( ! $withUnpublished) $query .= ' AND products.published = 1';
          $query .= ' AND variantions.ean IS NOT NULL
                     AND variantions.ean != ""';

          // Require only google products
          if(in_array('googleCategoryId',$required)) $query .= ' AND products.googleCategoryId IS NOT NULL';

          // Require only updated products
          if($updated_at != null) $query .= ' AND products.updated_at > "' . $updated_at . '"';

        // Check for result
        if( ! $result = $this->mysqli->query($query)) return $this->mysqli->error;

        // Build array
        $products = [];

        while($record = $result->fetch_assoc())
        {
            $product = [];

            $product['title'] = fromDatabase($record['titleNL']);
            $product['description'] = fromDatabase($record['descriptionNL']);
            $product['description'] .= fromDatabase($record['specsNL']);
            $product['link'] = fromDatabase($record['route_nl']);

            $product['id'] = $record['id'];

            $product['variation_id'] = $record['variation_id'];
            $product['brand'] = fromDatabase($record['brandTitle']);
            $product['item_group_id'] = $record['id'];
            $product['google_category_id'] = $record['google_category_id'];
            $product['shop_category_id'] = $record['catId'];
            $product['color'] = $record['color'];

            $product['ean'] = $record['ean'];
            $product['size'] = $record['size'];
            $record['published'] ?
                $product['stock'] = fromDatabase($record['stock']) :
                $product['stock'] = 0;

            //$product['thumb'] = fromDatabase($record['thumb']);

            $product['price'] = (float) $record['price']; // price as float

            // Check for sale price
            if( ! empty($record['discountPrice']))
            {
                // Hard sale price
                $product['sale_price'] = $record['discountPrice']; // price as float
            }
            else
            {
                // Calculated sale price
                $discountFactor = $this->discountService->getDiscountFactorOnProduct($record['id']);
                if($discountFactor > 0 && $discountFactor < 1)
                {

                    $product['sale_price'] = round($product['price'] * $discountFactor,2);
                }
            }
            $products[] = $product;
        }
        return $products;
    }


    /**
     * Get all images by product id
     *
     * @return array|string
     */
    public function productImages($productIds = null)
    {
        $query = 'SELECT
                    images.shortcode,
                    images.path,

                    instances.productId
                  FROM media_files AS images

                  INNER JOIN product_instances AS instances
                  ON images.shortcode = instances.shortcode';

        if($productIds != null) $query .= ' WHERE instances.productId IN (' . implode(',',$productIds) . ')';

         $query .= ' ORDER BY instances.instanceOrder DESC';

        // Check for result
        if( ! $result = $this->mysqli->query($query)) return $this->mysqli->error;

        $images = [];

        while($record = $result->fetch_object())
        {
            $images[$record->productId][$record->shortcode] = 'http://' . $_SERVER['HTTP_HOST'] . '/images/uploads/' . $record->path;
        }
        return $images;
    }

    /**
     * Get all categories
     * Key by id
     *
     * @return \stdClass
     */
    public function categories()
    {
        $query = 'SELECT
                    categories.id,
                    categories.category,
                    categories.gender,
                    parents.category AS parent_category,
                    grandparents.category AS grandparent_category
                  FROM product_categories as categories

                  /* Join parents */
                  LEFT JOIN product_categories AS parents
                  ON categories.parent_id = parents.id

                  /* Join grandparents */
                  LEFT JOIN product_categories AS grandparents
                  ON parents.parent_id = grandparents.id';

        // Check for result
        if( ! $result = $this->mysqli->query($query))
            return false;

        $rows = [];
        while($record = $result->fetch_object())
        {
            $rows[$record->id] = $record;
        }
        return $rows;
    }
}