| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277 |
- <?php
- use \KarmaFW\App;
- use \PhpOffice\PhpSpreadsheet\IOFactory as PhpSpreadsheetIOFactory;
- if (! function_exists('arrayReduceToOneColumn')) {
- function arrayReduceToOneColumn($array, $column_key) {
- return array_map(function($row) use ($column_key) {
- if (is_callable($column_key)) {
- return $column_key($row);
- } else {
- return $row[$column_key];
- }
- }, $array);
- }
- }
- if (! function_exists('arrayAddKeyFromColumn')) {
- function arrayAddKeyFromColumn($array, $column_key) {
- $results = array();
- foreach ($array as $row) {
- if (is_callable($column_key)) {
- $key = $column_key($row);
- } else if (is_array($column_key)) {
- $key_parts = [];
- foreach ($column_key as $column_key_item) {
- $key_parts[] = $row[$column_key_item];
- }
- $key = implode('-', $key_parts);
- }else{
- $key = $row[$column_key];
- }
- $results[$key] = $row;
- }
- if (empty($results)) {
- //return new stdClass();
- }
- return $results;
- }
- }
- if (! function_exists('arrayGroupByColumn')) {
- function arrayGroupByColumn($array, $column_key, $preserve_keys=true) {
- $results = array();
- foreach ($array as $k => $v) {
- if (is_callable($column_key)) {
- $key_value = $column_key($v);
- } else {
- $key_value = $v[$column_key];
-
- }
- if (! isset($results[$key_value])) {
- $results[$key_value] = array();
- }
- if ($preserve_keys) {
- $results[$key_value][$k] = $v;
-
- } else {
- $results[$key_value][] = $v;
- }
- }
- return $results;
- }
- }
- if (! function_exists('arrayToList')) {
- function arrayToList($array) {
- $results = array();
- $db = App::getDb();
- foreach ($array as $k => $v) {
- $results[] = $db->escape($v);
- }
- return implode(', ', $results);
- }
- }
- if (! function_exists('import_xls')) {
- function import_xls($filepath, $fields=[], $encode_utf8=false) {
- $spreadsheet = PhpSpreadsheetIOFactory::load($filepath);
-
- $sheetData = $spreadsheet->getActiveSheet()->toArray();
- //pre($sheetData, 1);
- $headers = [];
- if (! empty($fields)) {
- $headers = $fields;
- }
- $rows = [];
- $line_idx = 0;
- foreach ($sheetData as $input_row) {
- $line_idx++;
- if ($line_idx <= 1) {
- // ligne d'entete
- if (empty($headers)) {
- foreach ($input_row as $key => $value) {
- if ($encode_utf8) {
- $headers[$key] = utf8_encode($value);
- } else {
- $headers[$key] = $value;
- }
- }
- }
- continue;
- }else{
- // lignes de data
- $row = [];
- $row_ok = true;
- $col_idx = 0;
- foreach ($input_row as $key => $value) {
- $col_idx++;
- if ($col_idx > count($headers)) {
- continue;
- }
- if (! isset($headers[$key])) {
- $row_ok = false;
- //pre($input_row);
- break;
- }
- $header_key = $headers[$key];
- if ($encode_utf8) {
- $row[$header_key] = utf8_encode($value);
-
- } else {
- $row[$header_key] = $value;
- }
- }
- if ($row_ok) {
- $rows[] = $row;
- }
- }
- }
- return $rows;
- }
- }
- if (! function_exists('import_csv')) {
- function import_csv($filepath, $separator=";", $fields=[], $encode_utf8=true) {
- $rows = [];
- $handle = fopen($filepath, "r");
- $headers = [];
- if (! empty($fields)) {
- $headers = $fields;
- }
- $line_idx = 0;
- while (($input_row = fgetcsv($handle, 4096, $separator)) !== false) {
- $line_idx++;
- if ($line_idx <= 1) {
- // ligne d'entete
- if (empty($headers)) {
- foreach ($input_row as $key => $value) {
- if ($encode_utf8) {
- $headers[$key] = utf8_encode($value);
- } else {
- $headers[$key] = $value;
- }
- }
- }
- continue;
- }else{
- // lignes de data
- $row = [];
- foreach ($input_row as $key => $value) {
- $header_key = $headers[$key];
- if ($encode_utf8) {
- $row[$header_key] = utf8_encode($value);
-
- } else {
- $row[$header_key] = $value;
- }
- }
- $rows[] = $row;
- }
- }
- fclose($handle);
- return $rows;
- }
- }
- if (! function_exists('get_csv')) {
- function get_csv($arr, $fields=array(), $sep=";") {
- $str = '';
- if (! empty($arr)) {
- if (empty($fields)) {
- $fields = array_keys($arr[0]);
- }
- $line = array();
- foreach ($fields as $k => $v) {
- if (! is_numeric($k)) {
- $line[] = $k;
- } else {
- $line[] = $v;
- }
- }
- $str .= implode($sep, $line) . PHP_EOL;
- foreach ($arr as $row) {
- $line = array();
- foreach ($fields as $field) {
- $val = $row[$field];
- if (is_numeric($val) && substr($val."", 0, 1) === "0" && strlen($val."") > 1) {
- // pour exporter correctement dans Excel les numeros de telephone commencant par 0
- $val = '="' . $val . '"';
- }
- $line[] = $val;
- }
- //$str .= implode($sep, $line) . PHP_EOL;
- //$str .= '"' . implode('"' . $sep . '"', str_replace('"', '\\"', $line)) . '"' . PHP_EOL;
- $str .= '"' . implode('"' . $sep . '"', str_replace('"', '""', $line)) . '"' . PHP_EOL;
- }
- }
- return $str;
- }
- }
- if (! function_exists('exportToCsvFile')) {
- function exportToCsvFile($rows, $export_filename=null, $fields=null) {
- $csv_content = get_csv($rows, $fields);
-
- if (! empty($export_filename)) {
- // download file
- header('Content-Type: text/csv');
- header('Content-Disposition: attachment;filename=' . basename($export_filename));
- header("Pragma: no-cache");
- header("Expires: 0");
- } else {
- // show in browser
- header('Content-Type: text/plain');
- }
- echo $csv_content;
- exit;
- }
- }
- if (! function_exists('array_map_with_keys')) {
- function array_map_with_keys($func, $array) {
- $ret = [];
- foreach ($array as $k => $v) {
- $ret[$k] = $func($v, $k);
- }
- return $ret;
- }
- }
|