<?php
/**
 * Class Exporter | src/Exporter.php
 *
 * PHP version 7
 *
 * @category Library
 * @package  ABGEO\NBG
 * @author   Temuri Takalandze < [email protected]>
 * @license  MIT https://github.com/ABGEO07/nbg-currency/blob/master/LICENSE
 * @link     https://github.com/ABGEO07/nbg-currency
 */
namespace ABGEO\NBG;
use ABGEO\NBG\Exception\InvalidCurrencyException;
use SoapFault;
/**
 * Class Exporter
 * @package ABGEO\NBG
 */
class Exporter
{
    const EXPORT_2_FILE   = 1;
    const EXPORT_2_STREAM = 2;
    /**
     * Export Currency to file.
     *
     * @param mixed       $currencies Single Currency Code or array.
     * @param int         $exportMode Export Mode (1: To file; 2: To stream).
     * @param string|null $file       Filename.
     *
     * @return void
     *
     * @throws InvalidCurrencyException
     * @throws SoapFault
     */
    public static function export(
        $currencies,
        int $exportMode = self::EXPORT_2_FILE,
        string $file = null
    ): void {
        // CSV Header.
        $dataToExport = [[
            'CurrencyCode',
            'Description',
            'Currency',
            'ChangeValue',
            'ChangeRate',
            'Date'
        ]];
        // Create CSV Body.
        if (is_array($currencies)) {
            // For many Currencies.
            foreach ($currencies as $currency) {
                $currencyObj = new Currency($currency);
                $singleRow = [
                    $currency,
                    $currencyObj->getDescription(),
                    $currencyObj->getCurrency(),
                    $currencyObj->getChange(),
                    $currencyObj->getRate(),
                    $currencyObj->getDate()->format('d/m/Y'),
                ];
                $dataToExport[] = $singleRow;
            }
        } else {
            // For single Currency.
            $currencyObj = new Currency($currencies);
            $dataToExport[] = [
                $currencies,
                $currencyObj->getDescription(),
                $currencyObj->getCurrency(),
                $currencyObj->getChange(),
                $currencyObj->getRate(),
                $currencyObj->getDate()->format('d/m/Y'),
            ];
        }
        // Prepare filename.
        $fileName = $file ?: 'currency-' . date('Y-m-d') . '.csv';
        $fileName = substr($fileName, -4) === '.csv'
            ? $fileName: $fileName . '.csv';
        // Export CSV.
        if (self::EXPORT_2_FILE === $exportMode) {
            // Export to file.
            $fs = fopen($fileName, "w");
            foreach ($dataToExport as $line) {
                fputcsv($fs, $line);
            }
            fclose($fs);
        } elseif (self::EXPORT_2_STREAM === $exportMode) {
            // Export to stream.
            $fs = fopen('php://output', 'w');
            ob_start();
            foreach ($dataToExport as $line) {
                fputcsv($fs, $line);
            }
            $string = ob_get_clean();
            fclose($fs);
            header('Pragma: public');
            header('Expires: 0');
            header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
            header('Cache-Control: private', false);
            header('Content-Type: application/octet-stream');
            header('Content-Disposition: attachment; filename="' . $fileName . '";');
            header('Content-Transfer-Encoding: binary');
            exit($string);
        }
    }
}
 
  |