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;
}
}