- fputcsv: documentation ( source)
- array_merge: documentation ( source)
- addslashes: documentation ( source)
- array_keys: documentation ( source)
- array_unique: documentation ( source)
<?php
/**
* Class FyndiqCSVFeedWriter generates CSV export feed
*/
class FyndiqCSVFeedWriter
{
/**
* @var array export column names
*/
private $header = array();
/**
* @var array products for export
*/
private $products = array();
/**
* @var array fields upon which `addslashes` will be applied
*/
private $slashFields = array(
'article-name',
'product-brand',
'product-title',
'product-description',
);
/**
* Apply field transformations
*
* @param array $product
* @return array mixed
*/
private function processProduct($product) {
foreach($this->slashFields as $field) {
if (!empty($product[$field])) {
$product[$field] = addslashes($product[$field]);
}
}
return $product;
}
/**
* Add product to the feed
*
* @param $product
* @return bool
*/
public function addProduct($product) {
if ($this->isValidProduct($product)) {
$this->header = array_unique(array_merge($this->header, array_keys($product)));
$this->products[] = $this->processProduct($product);
return true;
}
return false;
}
/**
* Flush the feed data to the stream
*
* @return bool
*/
public function write() {
// Write header
if (fputcsv($this->stream, $this->header) === false) {
return false;
}
// Write data
foreach ($this->products as $product) {
$finalProduct = array();
foreach ($this->header as $column) {
$finalProduct[] = isset($product[$column]) ? $product[$column] : '';
}
if (fputcsv($this->stream, $finalProduct) === false) {
return false;
}
}
unset($this->header);
unset($this->products);
return true;
}
}