From 29c75d77989ffd4232fe47036be64403c1cb4d88 Mon Sep 17 00:00:00 2001 From: bMancone Date: Wed, 30 Nov 2011 17:49:51 +0000 Subject: [PATCH] // Added CSV class. Allows to export supply order details as CSV, for instance git-svn-id: http://dev.prestashop.com/svn/v1/branches/1.5.x@10820 b9a71923-0436-4b27-9f14-aed3839534dd --- admin-dev/csv.php | 85 ++++++++++++++++++++++++++++++ classes/csv/CSV.php | 111 +++++++++++++++++++++++++++++++++++++++ override/classes/CSV.php | 7 +++ 3 files changed, 203 insertions(+) create mode 100644 admin-dev/csv.php create mode 100644 classes/csv/CSV.php create mode 100755 override/classes/CSV.php diff --git a/admin-dev/csv.php b/admin-dev/csv.php new file mode 100644 index 000000000..ccbfb75ac --- /dev/null +++ b/admin-dev/csv.php @@ -0,0 +1,85 @@ + +* @copyright 2007-2011 PrestaShop SA +* @version Release: $Revision$ +* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) +* International Registered Trademark & Property of PrestaShop SA +*/ + +/** + * @since 1.5.0 + */ + +define('_PS_ADMIN_DIR_', getcwd()); +include(_PS_ADMIN_DIR_.'/../config/config.inc.php'); + +if (!Context::getContext()->employee->id) + Tools::redirectAdmin('index.php?controller=AdminLogin'); + +/* + * Functions allowed + */ +$functions = array( + 'id_supply_order' => 'exportSupplyOrder', +); + +/* + * Depending on $_GET, call the corresponding function + */ +foreach ($functions as $var => $function) +{ + if (isset($_GET[$var])) + { + call_user_func($function); + die; + } +} + +/** + * Function used for SupplyOrder + */ +function exportSupplyOrder() +{ + //@TODO Checks if employee has enough access to export + if (!isset($_GET['id_supply_order'])) + die (Tools::displayError('Missing supply order ID')); + + $id_supply_order = (int)$_GET['id_supply_order']; + $supply_order = new SupplyOrder($id_supply_order); + + if (!Validate::isLoadedObject($supply_order)) + die(Tools::displayError('Cannot find this supply order in the database')); + + $details = $supply_order->getEntriesCollection($supply_order->id_lang); + exportCSV($details, 'supply_order_'.$supply_order->reference.'_details'); +} + +/** + * Main function to export CSV + * @param object|Array $object + * @param string $template + */ +function exportCSV(&$object, $filename) +{ + $csv = new CSV($object, $filename); + $csv->export(); +} diff --git a/classes/csv/CSV.php b/classes/csv/CSV.php new file mode 100644 index 000000000..ec2e14c1c --- /dev/null +++ b/classes/csv/CSV.php @@ -0,0 +1,111 @@ + +* @copyright 2007-2011 PrestaShop SA +* @version Release: $Revision$ +* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) +* International Registered Trademark & Property of PrestaShop SA +*/ + +/** + * Simple class to output CSV data + * @since 1.5 + */ +class CSVCore +{ + public $filename; + public $objects; + public $delimiter; + + /** + * Loads objects, filename and optionnaly a delimiter. + * @param Array|object $objects : Assumed to be an Array of objects or an object + * @param string $filename : used later to save the file + * @param string $delimiter Optional : delimiter used + */ + public function __construct(&$objects, $filename, $delimiter = ';') + { + $this->filename = $filename; + $this->delimiter = $delimiter; + + $this->objects = $objects; + if (!is_array($objects)) + $this->objects = array($objects); + } + + /** + * Main function + * Adds headers + * Outputs + */ + public function export() + { + $this->headers(); + + $current_object_name = ''; + foreach ($this->objects as $object) + { + $vars = get_object_vars($object); + + // ouputs keys if needed + if (get_class($object) != $current_object_name) + { + $this->output(array_keys($vars)); + $current_object_name = get_class($object); + } + + // outputs values + $this->output($vars); + unset($vars); + } + } + + /** + * Wraps data and echoes + * Uses defined delimiter + */ + public function output($data) + { + $wraped_data = array_map(array('CSVCore', 'wrap'), $data); + echo sprintf("%s\n", implode($this->delimiter, $wraped_data)); + } + + /** + * Escapes data + * @param string $data + * @return string $data + */ + public function wrap($data) + { + $data = preg_replace('/"(.+)"/', '""$1""', $data); + return sprintf('"%s"', $data); + } + + /** + * Adds headers + */ + public function headers() + { + header('Content-Type: application/csv'); + header("Content-disposition: attachment; filename={$this->filename}.csv"); + } +} + diff --git a/override/classes/CSV.php b/override/classes/CSV.php new file mode 100755 index 000000000..9ec279c0d --- /dev/null +++ b/override/classes/CSV.php @@ -0,0 +1,7 @@ +