PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 2.1.4
Visualizer – Tables & Charts Manager with Built-in AI Generator v2.1.4
4.0.7 4.0.6 4.0.5 4.0.4 4.0.3 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.1.0 3.1.1 3.1.2 3.1.3 3.10.0 3.10.1 3.10.10 3.10.11 3.10.12 3.10.13 3.10.14 3.10.15 3.10.2 3.10.3 3.10.4 All 148 releases
visualizer / classes / Visualizer / Source / Csv.php

Csv.php in Visualizer – Tables & Charts Manager with Built-in AI Generator 2.1.4, at classes/Visualizer/Source/Csv.php

164 lines 4.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 // +----------------------------------------------------------------------+
4 // | Copyright 2013 Madpixels (email : visualizer@madpixels.net) |
5 // +----------------------------------------------------------------------+
6 // | This program is free software; you can redistribute it and/or modify |
7 // | it under the terms of the GNU General Public License, version 2, as |
8 // | published by the Free Software Foundation. |
9 // | |
10 // | This program is distributed in the hope that it will be useful, |
11 // | but WITHOUT ANY WARRANTY; without even the implied warranty of |
12 // | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
13 // | GNU General Public License for more details. |
14 // | |
15 // | You should have received a copy of the GNU General Public License |
16 // | along with this program; if not, write to the Free Software |
17 // | Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, |
18 // | MA 02110-1301 USA |
19 // +----------------------------------------------------------------------+
20 // | Author: Eugene Manuilov <eugene@manuilov.org> |
21 // +----------------------------------------------------------------------+
22 /**
23 * Source manager for local CSV files.
24 *
25 * @category Visualizer
26 * @package Source
27 *
28 * @since 1.0.0
29 */
30 class Visualizer_Source_Csv extends Visualizer_Source {
31
32 /**
33 * The path to the file with data.
34 *
35 * @since 1.0.0
36 *
37 * @access protected
38 * @var string
39 */
40 protected $_filename;
41
42 /**
43 * Constructor.
44 *
45 * @since 1.0.0
46 *
47 * @access public
48 * @param string $filename The path to the file.
49 */
50 public function __construct( $filename = null ) {
51 $this->_filename = trim( $filename );
52 }
53
54 /**
55 * Fetches series information.
56 *
57 * @since 1.0.0
58 *
59 * @access private
60 * @param resource $handle The file handle resource.
61 */
62 private function _fetchSeries( &$handle ) {
63 // read column titles
64 $labels = fgetcsv( $handle, 0, VISUALIZER_CSV_DELIMITER, VISUALIZER_CSV_ENCLOSURE );
65 $labels = array_map( 'utf8_encode', $labels );
66 // read series types
67 $types = fgetcsv( $handle, 0, VISUALIZER_CSV_DELIMITER, VISUALIZER_CSV_ENCLOSURE );
68
69 if ( ! $labels || ! $types ) {
70 return false;
71 }
72
73 // if no types were setup, re read labels and empty types array
74 $types = array_map( 'trim', $types );
75 if ( ! self::_validateTypes( $types ) ) {
76 // re open the file
77 fclose( $handle );
78 $handle = $this->_get_file_handle();
79
80 // re read the labels and empty types array
81 $labels = fgetcsv( $handle, 0, VISUALIZER_CSV_DELIMITER, VISUALIZER_CSV_ENCLOSURE );
82 $labels = array_map( 'utf8_encode', $labels );
83 $types = array();
84 }
85
86 for ( $i = 0, $len = count( $labels ); $i < $len; $i++ ) {
87 $default_type = $i == 0 ? 'string' : 'number';
88 $this->_series[] = array(
89 'label' => $labels[ $i ],
90 'type' => isset( $types[ $i ] ) ? $types[ $i ] : $default_type,
91 );
92 }
93
94 return true;
95 }
96
97 /**
98 * Returns file handle to fetch data from.
99 *
100 * @since 1.4.2
101 *
102 * @access protected
103 * @param string $filename Optional file name to get handle. If omitted, $_filename is used.
104 * @return resource File handle resource on success, otherwise FALSE.
105 */
106 protected function _get_file_handle( $filename = false ) {
107 // set line endings auto detect mode
108 ini_set( 'auto_detect_line_endings', true );
109 // open file and return handle
110 $fc = iconv( 'ISO-8859-1', 'utf-8', file_get_contents( $filename ? $filename : $this->_filename ) );
111 $tmp = tempnam( sys_get_temp_dir(), rand() );
112 file_put_contents( $tmp, $fc );
113 return fopen( $tmp, 'rb' );
114 }
115
116 /**
117 * Fetches information from source, parses it and builds series and data arrays.
118 *
119 * @since 1.0.0
120 *
121 * @access public
122 * @return boolean TRUE on success, otherwise FALSE.
123 */
124 public function fetch() {
125 // if filename is empty return false
126 if ( empty( $this->_filename ) ) {
127 return false;
128 }
129
130 // read file and fill arrays
131 $handle = $this->_get_file_handle();
132 if ( $handle ) {
133 // fetch series
134 if ( ! $this->_fetchSeries( $handle ) ) {
135 return false;
136 }
137
138 // fetch data
139 while ( ( $data = fgetcsv( $handle, 0, VISUALIZER_CSV_DELIMITER, VISUALIZER_CSV_ENCLOSURE ) ) !== false ) {
140
141 $this->_data[] = $this->_normalizeData( $data );
142 }
143
144 // close file handle
145 fclose( $handle );
146 }
147
148 return true;
149 }
150
151 /**
152 * Returns source name.
153 *
154 * @since 1.0.0
155 *
156 * @access public
157 * @return string The name of source.
158 */
159 public function getSourceName() {
160 return __CLASS__;
161 }
162
163 }
164