Subversion Repositories eFlore/Applications.cel

Rev

Rev 1840 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1840 Rev 1914
1
<?php
1
<?php
2
 
2
 
3
global $champs;
3
global $champs;
4
$champs = Array(
4
$champs = Array(
5
	'nom_sel' => 'Espèce',
5
	'nom_sel' => 'Espèce',
6
	'nom_sel_nn' => 'Numéro nomenclatural',
6
	'nom_sel_nn' => 'Numéro nomenclatural',
7
	'nom_ret' => 'Nom retenu',
7
	'nom_ret' => 'Nom retenu',
8
	'nom_ret_nn' => 'Numéro nomenclatural nom retenu',
8
	'nom_ret_nn' => 'Numéro nomenclatural nom retenu',
9
	'nt' => 'Numéro taxonomique',
9
	'nt' => 'Numéro taxonomique',
10
	'famille' => 'Famille',
10
	'famille' => 'Famille',
11
	'nom_referentiel' => 'Referentiel taxonomique',
11
	'nom_referentiel' => 'Referentiel taxonomique',
12
	'zone_geo' => 'Commune',
12
	'zone_geo' => 'Commune',
13
	'ce_zone_geo' => 'Identifiant Commune',
13
	'ce_zone_geo' => 'Identifiant Commune',
14
	'date_observation' => 'Date',
14
	'date_observation' => 'Date',
15
	'lieudit' => 'Lieu-dit',
15
	'lieudit' => 'Lieu-dit',
16
	'station' => 'Station',
16
	'station' => 'Station',
17
	'milieu' => 'Milieu',
17
	'milieu' => 'Milieu',
18
	'commentaire' => 'Notes',
18
	'commentaire' => 'Notes',
19
	'latitude' => 'Latitude',
19
	'latitude' => 'Latitude',
20
	'longitude' => 'Longitude',
20
	'longitude' => 'Longitude',
21
	'altitude' => 'Altitude',
21
	'altitude' => 'Altitude',
22
	'geodatum' => 'Référentiel Géographique',
22
	'geodatum' => 'Référentiel Géographique',
23
 
23
 
24
	'ordre' => 'Ordre',
24
	'ordre' => 'Ordre',
25
	'id_observation' => 'Identifiant',
25
	'id_observation' => 'Identifiant',
26
 
26
 
27
	'mots_cles_texte' => 'Mots Clés',
27
	'mots_cles_texte' => 'Mots Clés',
28
 
28
 
29
	'date_creation' => 'Date Création',
29
	'date_creation' => 'Date Création',
30
	'date_modification' => 'Date Modification',
30
	'date_modification' => 'Date Modification',
31
 
31
 
32
	'transmission' => 'Transmis',
32
	'transmission' => 'Transmis',
33
	'date_transmission' => 'Date Transmission',
33
	'date_transmission' => 'Date Transmission',
34
	'abondance' => 'Abondance',
34
	'abondance' => 'Abondance',
35
	'certitude' => 'Certitude',
35
	'certitude' => 'Certitude',
36
	'phenologie' => 'Phénologie',
36
	'phenologie' => 'Phénologie',
37
	'images' => 'Image(s)',
37
	'images' => 'Image(s)',
38
	'nom_commun' => 'Nom Commun',
38
	'nom_commun' => 'Nom Commun',
-
 
39
 
-
 
40
	'observateur' => 'Observateur',
39
);
41
);
40
 
42
 
41
 
43
 
42
function cel_get_obs() {
44
function cel_get_obs() {
43
	$URL = DOMAIN . '/jrest/InventoryObservationList/' . USER;
45
	$URL = DOMAIN . '/jrest/InventoryObservationList/' . USER;
44
	return json_decode(file_get_contents($URL . '/?limite=100000&numero_page=0'));
46
	return json_decode(file_get_contents($URL . '/?limite=100000&numero_page=0'));
45
}
47
}
46
 
48
 
47
function cel_get_images() {
49
function cel_get_images() {
48
	$URL = DOMAIN . '/jrest/InventoryImageList/' . USER;
50
	$URL = DOMAIN . '/jrest/InventoryImageList/' . USER;
49
	return json_decode(file_get_contents($URL . '/?limite=100000&numero_page=0'));
51
	return json_decode(file_get_contents($URL . '/?limite=100000&numero_page=0'));
50
}
52
}
51
 
53
 
52
function cel_delete_obs($obs) {
54
function cel_delete_obs($obs) {
53
	$URL = DOMAIN . '/jrest/InventoryObservationList/' . USER;
55
	$URL = DOMAIN . '/jrest/InventoryObservationList/' . USER;
54
	$ch = curl_init();
56
	$ch = curl_init();
55
 
57
 
56
	//set the url, number of POST vars, POST data
58
	//set the url, number of POST vars, POST data
57
	curl_setopt($ch,CURLOPT_URL, $URL . '/' . implode(',', $obs));
59
	curl_setopt($ch,CURLOPT_URL, $URL . '/' . implode(',', $obs));
58
	curl_setopt($ch,CURLOPT_POSTFIELDS, array('action' => 'DELETE'));
60
	curl_setopt($ch,CURLOPT_POSTFIELDS, array('action' => 'DELETE'));
59
	curl_setopt($ch,CURLOPT_RETURNTRANSFER, TRUE);
61
	curl_setopt($ch,CURLOPT_RETURNTRANSFER, TRUE);
60
	//execute post
62
	//execute post
61
	$result = curl_exec($ch);
63
	$result = curl_exec($ch);
62
	curl_close($ch);
64
	curl_close($ch);
63
	return $result;
65
	return $result;
64
}
66
}
65
 
67
 
66
function cel_delete_image($img) {
68
function cel_delete_image($img) {
67
	$URL = DOMAIN . '/jrest/InventoryImageList/' . USER;
69
	$URL = DOMAIN . '/jrest/InventoryImageList/' . USER;
68
	$ch = curl_init();
70
	$ch = curl_init();
69
 
71
 
70
	//set the url, number of POST vars, POST data
72
	//set the url, number of POST vars, POST data
71
	curl_setopt($ch,CURLOPT_URL, $URL . '/' . implode(',', $img));
73
	curl_setopt($ch,CURLOPT_URL, $URL . '/' . implode(',', $img));
72
	curl_setopt($ch,CURLOPT_POSTFIELDS, array('action' => 'DELETE'));
74
	curl_setopt($ch,CURLOPT_POSTFIELDS, array('action' => 'DELETE'));
73
	curl_setopt($ch,CURLOPT_RETURNTRANSFER, TRUE);
75
	curl_setopt($ch,CURLOPT_RETURNTRANSFER, TRUE);
74
	//execute post
76
	//execute post
75
	$result = curl_exec($ch);
77
	$result = curl_exec($ch);
76
	curl_close($ch);
78
	curl_close($ch);
77
	return $result;
79
	return $result;
78
}
80
}
79
 
81
 
80
 
82
 
81
function cel_delete_all_obs() {
83
function cel_delete_all_obs() {
82
	$obs = cel_get_obs();
84
	$obs = cel_get_obs();
83
	$ordres = array_map(function($item) { return $item->ordre; }, $obs);
85
	$ordres = array_map(function($item) { return $item->ordre; }, $obs);
84
	cel_delete_obs($ordres);
86
	cel_delete_obs($ordres);
85
}
87
}
86
 
88
 
87
 
89
 
88
function cel_delete_all_images() {
90
function cel_delete_all_images() {
89
	$img = cel_get_images();
91
	$img = cel_get_images();
90
	$ids = array_map(function($item) { return $item->id_image; }, $img);
92
	$ids = array_map(function($item) { return $item->id_image; }, $img);
91
	cel_delete_image($ids);
93
	cel_delete_image($ids);
92
}
94
}
93
 
95
 
94
function cel_upload_image($file) {
96
function cel_upload_image($file) {
95
	if(! file_exists($file)) return NULL;
97
	if(! file_exists($file)) return NULL;
96
	$URL = DOMAIN . '/jrest/InventoryImage';
98
	$URL = DOMAIN . '/jrest/InventoryImage';
97
 
99
 
98
	$ch = curl_init();
100
	$ch = curl_init();
99
 
101
 
100
	//set the url, number of POST vars, POST data
102
	//set the url, number of POST vars, POST data
101
	curl_setopt($ch,CURLOPT_URL, $URL);
103
	curl_setopt($ch,CURLOPT_URL, $URL);
102
	curl_setopt($ch,CURLOPT_POSTFIELDS, array(
104
	curl_setopt($ch,CURLOPT_POSTFIELDS, array(
103
		'file' => '@' . $file,
105
		'file' => '@' . $file,
104
		'ce_utilisateur' => USER
106
		'ce_utilisateur' => USER
105
	));
107
	));
106
 
108
 
107
	curl_setopt($ch,CURLOPT_RETURNTRANSFER, TRUE);
109
	//curl_setopt($ch,CURLOPT_RETURNTRANSFER, TRUE);
-
 
110
	//execute post
-
 
111
	if(DEBUG) @fwrite(STDERR, sprintf("curl -F file=@%s '%s'\n", $file, $URL));
108
	//execute post
112
 
109
	$result = curl_exec($ch);
113
	$result = curl_exec($ch);
110
	curl_close($ch);
114
	curl_close($ch);
111
	return $result;
115
	return $result;
112
}
116
}
113
 
117
 
114
function cel_link_images($user, $id_image, $id_obs) {
118
function cel_link_images($user, $id_image, $id_obs) {
115
	$URL = DOMAIN . '/jrest/inventoryImageLink/';
119
	$URL = DOMAIN . '/jrest/inventoryImageLink/';
116
	$ch = curl_init();
120
	$ch = curl_init();
117
 
121
 
118
	//set the url, number of POST vars, POST data
122
	//set the url, number of POST vars, POST data
119
	curl_setopt($ch,CURLOPT_URL, $URL);
123
	curl_setopt($ch,CURLOPT_URL, $URL);
120
	curl_setopt($ch,CURLOPT_POSTFIELDS, array(
124
	curl_setopt($ch,CURLOPT_POSTFIELDS, array(
121
		'id_image' => $id_obs,
125
		'id_image' => $id_obs,
122
		'id_observation' => $id_obs,
126
		'id_observation' => $id_obs,
123
		'ce_utilisateur' => $user
127
		'ce_utilisateur' => $user
124
	));
128
	));
125
 
129
 
126
	curl_setopt($ch,CURLOPT_RETURNTRANSFER, TRUE);
130
	curl_setopt($ch,CURLOPT_RETURNTRANSFER, TRUE);
127
	//execute post
131
	//execute post
128
	$result = curl_exec($ch);
132
	$result = curl_exec($ch);
129
	curl_close($ch);
133
	curl_close($ch);
130
	return $result;
134
	return $result;
131
}
135
}
132
 
136
 
133
 
137
 
134
function auth() {
138
function auth() {
135
	// TODO: CURLOPT_NETRC + Cel API support
139
	// TODO: CURLOPT_NETRC + Cel API support
136
	if(!defined('EMAIL') || !defined('PASS') || ! EMAIL || ! PASS) return FALSE;
140
	if(!defined('EMAIL') || !defined('PASS') || ! EMAIL || ! PASS) return FALSE;
137
	if(defined('COOKIE') && COOKIE) return TRUE;
141
	if(defined('COOKIE') && COOKIE) return TRUE;
138
	$URL = DOMAIN . '/jrest/User/' . EMAIL . '/' . PASS;
142
	$URL = DOMAIN . '/jrest/User/' . EMAIL . '/' . PASS;
139
 
143
 
140
	$ch = curl_init();
144
	$ch = curl_init();
141
 
145
 
142
	//set the url, number of POST vars, POST data
146
	//set the url, number of POST vars, POST data
143
	curl_setopt($ch,CURLOPT_URL, $URL);
147
	curl_setopt($ch,CURLOPT_URL, $URL);
144
	curl_setopt($ch,CURLOPT_HEADER, true);
148
	curl_setopt($ch,CURLOPT_HEADER, true);
145
	curl_setopt($ch,CURLOPT_RETURNTRANSFER, TRUE);
149
	curl_setopt($ch,CURLOPT_RETURNTRANSFER, TRUE);
146
 
150
 
147
	$result = curl_exec($ch);
151
	$result = curl_exec($ch);
148
	curl_close($ch);
152
	curl_close($ch);
149
	$sess = $id = array();
153
	$sess = $id = array();
150
	preg_match('/.*PHPSESSID=(\w+)/', $result, $sess);
154
	preg_match('/.*PHPSESSID=(\w+)/', $result, $sess);
151
	preg_match('/"id_utilisateur":"(\d+)"/', $result, $id);
155
	preg_match('/"id_utilisateur":"(\d+)"/', $result, $id);
152
 
156
 
153
	if(DEBUG) @fwrite(STDERR, "curl \"".$URL ."\" : {$sess[1]} / {$id[1]}\n");
157
	if(DEBUG) @fwrite(STDERR, "curl \"".$URL ."\" : {$sess[1]} / {$id[1]}\n");
154
	if(isset($sess[1])) {
158
	if(isset($sess[1])) {
155
		define('COOKIE', $sess[1]);
159
		define('COOKIE', $sess[1]);
156
		if(!defined('USER')) {
160
		if(!defined('USER')) {
157
			if(!isset($id[1])) return FALSE;
161
			if(!isset($id[1])) return FALSE;
158
			define('USER', $id[1]);
162
			define('USER', $id[1]);
159
		}
163
		}
160
		return TRUE;
164
		return TRUE;
161
	}
165
	}
162
	return FALSE;
166
	return FALSE;
163
}
167
}
164
 
168
 
165
function genCSV($d = Array()) {
169
function genCSV($d = Array()) {
166
	$out = fopen("php://temp", 'r+');
170
	$out = fopen("php://temp", 'r+');
167
	// don't filter-out unknown field (for testing)
171
	// don't filter-out unknown field (for testing)
168
	// $d = array_intersect_key($d, $GLOBALS['champs']);
172
	// $d = array_intersect_key($d, $GLOBALS['champs']);
169
	$head = array();
173
	$head = array();
170
	foreach($d as $k => $v) {
174
	foreach($d as $k => $v) {
171
		if(isset($GLOBALS['champs'][$k])) $head[$GLOBALS['champs'][$k]] = $v;
175
		if(isset($GLOBALS['champs'][$k])) $head[$GLOBALS['champs'][$k]] = $v;
172
		else $head[$k] = $v;
176
		else $head[$k] = $v;
173
	}
177
	}
174
	fputcsv($out, array_keys($head) , ',', '"');
178
	fputcsv($out, array_keys($head) , ',', '"');
175
	fputcsv($out, array_values($head) , ',', '"');
179
	fputcsv($out, array_values($head) , ',', '"');
176
	rewind($out);
180
	rewind($out);
177
	$csv = stream_get_contents($out);
181
	$csv = stream_get_contents($out);
178
	fclose($out);
182
	fclose($out);
179
	return $csv;
183
	return $csv;
180
}
184
}
181
 
185
 
182
function import($d) {
186
function import($d) {
183
	$URL = DOMAIN . '/jrest/ImportXLS';
187
	$URL = DOMAIN . '/jrest/ImportXLS';
184
	if(!is_file($d)) return FALSE;
188
	if(!is_file($d)) return FALSE;
185
	$ch = curl_init();
189
	$ch = curl_init();
186
 
190
 
187
	// curl does not support setting filename="X.csv";type=application/octet-stream'
191
	// curl does not support setting filename="X.csv";type=application/octet-stream'
188
	// with plain POST variables
192
	// with plain POST variables
189
 
193
 
190
	curl_setopt($ch,CURLOPT_URL, $URL);
194
	curl_setopt($ch,CURLOPT_URL, $URL);
191
	curl_setopt($ch,CURLOPT_POSTFIELDS, array(
195
	curl_setopt($ch,CURLOPT_POSTFIELDS, array(
192
		'upload' => '@' . $d . ';filename=test.csv',
196
		'upload' => '@' . $d . ';filename=test.csv',
193
		'utilisateur' => USER
197
		'utilisateur' => USER
194
	));
198
	));
195
 
199
 
196
	curl_setopt($ch,CURLOPT_RETURNTRANSFER, TRUE);
200
	curl_setopt($ch,CURLOPT_RETURNTRANSFER, TRUE);
197
 
201
 
198
	if(DEBUG) fwrite(STDERR, "curl -F \"upload=@$d;filename=test.csv\" -F utilisateur=" . USER . " \"$URL\"\n");
202
	if(DEBUG) fwrite(STDERR, "curl -F \"upload=@$d;filename=test.csv\" -F utilisateur=" . USER . " \"$URL\"\n");
199
 
203
 
200
	//execute post
204
	//execute post
201
	$result = curl_exec($ch);
205
	$result = curl_exec($ch);
202
	curl_close($ch);
206
	curl_close($ch);
203
	return $result;
207
	return $result;
204
}
208
}
205
 
209
 
206
function importXLS($d) {
210
function importXLS($d) {
207
	$URL = DOMAIN . '/jrest/ImportXLS';
211
	$URL = DOMAIN . '/jrest/ImportXLS';
208
	if(!is_file($d)) return FALSE;
212
	if(!is_file($d)) return FALSE;
209
	exec("csvtool -o /tmp/a.csv col 1- $d");
213
	exec("csvtool -o /tmp/a.csv col 1- $d");
210
	exec(__DIR__ . "/bin/csv2xls -v 0 -f -o /tmp/a /tmp/a.csv &>/dev/null");
214
	exec(__DIR__ . "/bin/csv2xls -v 0 -f -o /tmp/a /tmp/a.csv &>/dev/null");
211
	if(DEBUG) fwrite(STDERR,
215
	if(DEBUG) fwrite(STDERR,
212
					 "csvtool -o /tmp/a.csv col 1- $d;\n" . 
216
					 "csvtool -o /tmp/a.csv col 1- $d;\n" . 
213
					 __DIR__ . "/bin/csv2xls -v 0 -f -o /tmp/a /tmp/a.csv\n");
217
					 __DIR__ . "/bin/csv2xls -v 0 -f -o /tmp/a /tmp/a.csv\n");
214
	$d = "/tmp/a.xls";
218
	$d = "/tmp/a.xls";
215
	if(!is_file($d)) { die('error: ' . __FILE__ . ':' . __LINE__); }
219
	if(!is_file($d)) { die('error: ' . __FILE__ . ':' . __LINE__); }
216
 
220
 
217
	$ch = curl_init();
221
	$ch = curl_init();
218
 
222
 
219
	// curl does not support setting filename="X.csv";type=application/octet-stream'
223
	// curl does not support setting filename="X.csv";type=application/octet-stream'
220
	// with plain POST variables
224
	// with plain POST variables
221
 
225
 
222
	curl_setopt($ch,CURLOPT_URL, $URL);
226
	curl_setopt($ch,CURLOPT_URL, $URL);
223
	curl_setopt($ch,CURLOPT_POSTFIELDS, array(
227
	curl_setopt($ch,CURLOPT_POSTFIELDS, array(
224
		'upload' => '@' . $d . ';filename=test.xls',
228
		'upload' => '@' . $d . ';filename=test.xls',
225
		'utilisateur' => USER
229
		'utilisateur' => USER
226
	));
230
	));
227
 
231
 
228
	curl_setopt($ch,CURLOPT_RETURNTRANSFER, TRUE);
232
	curl_setopt($ch,CURLOPT_RETURNTRANSFER, TRUE);
229
 
233
 
230
	if(DEBUG) fwrite(STDERR, "curl -F \"upload=@$d;filename=test.xls\" -F utilisateur=" . USER . " \"$URL\"\n");
234
	if(DEBUG) fwrite(STDERR, "curl -F \"upload=@$d;filename=test.xls\" -F utilisateur=" . USER . " \"$URL\"\n");
231
 
235
 
232
	//execute post
236
	//execute post
233
	$result = curl_exec($ch);
237
	$result = curl_exec($ch);
234
	curl_close($ch);
238
	curl_close($ch);
235
	return $result;
239
	return $result;
236
}
240
}
237
 
241
 
238
function export($cols = "standard,avance") {
242
function export($cols = "standard,avance") {
239
	if(!defined('COOKIE')) return FALSE;
243
	if(!defined('COOKIE')) return FALSE;
240
 
244
 
241
	$URL = DOMAIN . '/jrest/CelWidgetExport/export?';
245
	$URL = DOMAIN . '/jrest/CelWidgetExport/export?';
242
	$URL .= http_build_query(array('colonnes' => $cols,
246
	$URL .= http_build_query(array('colonnes' => $cols,
243
								   'id_utilisateur' => USER,
247
								   'id_utilisateur' => USER,
244
								   'format' => 'csv'));
248
								   'format' => 'csv'));
245
	$ch = curl_init();
249
	$ch = curl_init();
246
 
250
 
247
	curl_setopt($ch,CURLOPT_URL, $URL);
251
	curl_setopt($ch,CURLOPT_URL, $URL);
248
	curl_setopt($ch,CURLOPT_COOKIE, 'PHPSESSID=' . COOKIE);
252
	curl_setopt($ch,CURLOPT_COOKIE, 'PHPSESSID=' . COOKIE);
249
 
253
 
250
	curl_setopt($ch,CURLOPT_RETURNTRANSFER, TRUE);
254
	curl_setopt($ch,CURLOPT_RETURNTRANSFER, TRUE);
251
 
255
 
252
	if(DEBUG) fwrite(STDERR, "curl -b PHPSESSID=" . COOKIE . ' "' . $URL ."\"\n");
256
	if(DEBUG) fwrite(STDERR, "curl -b PHPSESSID=" . COOKIE . ' "' . $URL ."\"\n");
253
	//execute post
257
	//execute post
254
	$result = curl_exec($ch);
258
	$result = curl_exec($ch);
255
	curl_close($ch);
259
	curl_close($ch);
256
	return $result;
260
	return $result;
257
}
261
}
258
 
262
 
259
function exportXLS($cols = "standard,avance") {
263
function exportXLS($cols = "standard,avance") {
260
	if(!defined('COOKIE')) return FALSE;
264
	if(!defined('COOKIE')) return FALSE;
261
 
265
 
262
	$file = "/tmp/b.xls";
266
	$file = "/tmp/b.xls";
263
 
267
 
264
	$URL = DOMAIN . '/jrest/CelWidgetExport/export?';
268
	$URL = DOMAIN . '/jrest/CelWidgetExport/export?';
265
	$URL .= http_build_query(array('colonnes' => $cols,
269
	$URL .= http_build_query(array('colonnes' => $cols,
266
								   'id_utilisateur' => USER,
270
								   'id_utilisateur' => USER,
267
								   'format' => 'xls'));
271
								   'format' => 'xls'));
268
	$ch = curl_init();
272
	$ch = curl_init();
269
 
273
 
270
	curl_setopt($ch,CURLOPT_URL, $URL);
274
	curl_setopt($ch,CURLOPT_URL, $URL);
271
	curl_setopt($ch,CURLOPT_COOKIE, 'PHPSESSID=' . COOKIE);
275
	curl_setopt($ch,CURLOPT_COOKIE, 'PHPSESSID=' . COOKIE);
272
 
276
 
273
	$fh = fopen($file, 'w'); 
277
	$fh = fopen($file, 'w'); 
274
	curl_setopt($ch,CURLOPT_FILE, $fh);
278
	curl_setopt($ch,CURLOPT_FILE, $fh);
275
 
279
 
276
	if(DEBUG) fwrite(STDERR, "curl -o $file -b PHPSESSID=" . COOKIE . ' "' . $URL ."\"\n");
280
	if(DEBUG) fwrite(STDERR, "curl -o $file -b PHPSESSID=" . COOKIE . ' "' . $URL ."\"\n");
277
	//execute post
281
	//execute post
278
	curl_exec($ch);
282
	curl_exec($ch);
279
 
283
 
280
	fflush($fh); 
284
	fflush($fh); 
281
	fclose($fh);
285
	fclose($fh);
282
	curl_close($ch);
286
	curl_close($ch);
283
 
287
 
284
	// if(DEBUG) fwrite(STDERR, "xls2csv $file\n");
288
	// if(DEBUG) fwrite(STDERR, "xls2csv $file\n");
285
	// exec("xls2csv $file", $result, $ret);
289
	// exec("xls2csv $file", $result, $ret);
286
	// return implode("\n", $result);
290
	// return implode("\n", $result);
287
	if(DEBUG) fwrite(STDERR, __DIR__ . "/bin/xls2csv-separate-sheets.pl -i $file\n");
291
	if(DEBUG) fwrite(STDERR, __DIR__ . "/bin/xls2csv-separate-sheets.pl -i $file\n");
288
	exec(__DIR__ . "/bin/xls2csv-separate-sheets.pl -i $file &>/dev/null", $result, $ret);
292
	exec(__DIR__ . "/bin/xls2csv-separate-sheets.pl -i $file &>/dev/null", $result, $ret);
289
	$newfile = substr($file, 0, -4) . '-Liste' . '.csv';
293
	$newfile = substr($file, 0, -4) . '-Liste' . '.csv';
290
 
294
 
291
	// because xls2csv-separate-sheets.pl does latin9
295
	// because xls2csv-separate-sheets.pl does latin9
292
	if(DEBUG) fwrite(STDERR, "iconv -f latin9 -t utf8 $newfile >| /tmp/.x; mv -f /tmp/.x $newfile\n");
296
	if(DEBUG) fwrite(STDERR, "iconv -f latin9 -t utf8 $newfile >| /tmp/.x; mv -f /tmp/.x $newfile\n");
293
	exec("iconv -f latin9 -t utf8 -o /tmp/.x $newfile; mv -f /tmp/.x $newfile");
297
	exec("iconv -f latin9 -t utf8 -o /tmp/.x $newfile; mv -f /tmp/.x $newfile");
294
	if($ret) die('error: ' . __FILE__ . ':' . __LINE__);
298
	if($ret) die('error: ' . __FILE__ . ':' . __LINE__);
295
 
299
 
296
	return file_get_contents($newfile);
300
	return file_get_contents($newfile);
297
}
301
}
298
 
302
 
299
function getCSV_line($csv, $line) {
303
function getCSV_line($csv, $line) {
300
	$line = max(0, intval($line - 1)); // -1 à cause du header
304
	$line = max(0, intval($line - 1)); // -1 à cause du header
301
 
305
 
302
	$out = fopen("php://temp", 'rw');
306
	$out = fopen("php://temp", 'rw');
303
	fwrite($out, $csv);
307
	fwrite($out, $csv);
304
	rewind($out);
308
	rewind($out);
305
 
309
 
306
	$head = champsLongToShort(fgetcsv($out));
310
	$head = champsLongToShort(fgetcsv($out));
307
	while ($line--) fgetcsv($out);
311
	while ($line--) fgetcsv($out);
308
	$l = fgetcsv($out);
312
	$l = fgetcsv($out);
309
	fclose($out);
313
	fclose($out);
310
	if(!$l) return FALSE;
314
	if(!$l) return FALSE;
311
	// xls2csv-separate-sheets.pl supprime les trailing champs vides
315
	// xls2csv-separate-sheets.pl supprime les trailing champs vides
312
	if(count($l) != count($head)) {
316
	if(count($l) != count($head)) {
313
		$l += array_fill(count($l), count($head) - count($l), "");
317
		$l += array_fill(count($l), count($head) - count($l), "");
314
	}
318
	}
315
	return array_combine($head, $l);
319
	return array_combine($head, $l);
316
}
320
}
317
 
321
 
318
 
322
 
319
function champsLongToShort($a) {
323
function champsLongToShort($a) {
320
	$r = array();
324
	$r = array();
321
	$x = array_flip($GLOBALS['champs']);
325
	$x = array_flip($GLOBALS['champs']);
322
	foreach($a as $k => $v) {
326
	foreach($a as $k => $v) {
323
		if(isset($x[$v])) $r[$k] = $x[$v];
327
		if(isset($x[$v])) $r[$k] = $x[$v];
324
		else $r[$k] = -1;
328
		else $r[$k] = -1;
325
	}
329
	}
326
	return $r;
330
	return $r;
327
}
331
}
328
 
332
 
329
function champsLongToShort2($a) {
333
function champsLongToShort2($a) {
330
	$r = array();
334
	$r = array();
331
	$x = array_flip($GLOBALS['champs']);
335
	$x = array_flip($GLOBALS['champs']);
332
	foreach($a as $k => $v) {
336
	foreach($a as $k => $v) {
333
		if(isset($x[$k])) $r[$x[$k]] = $v;
337
		if(isset($x[$k])) $r[$x[$k]] = $v;
334
		else $r[$k] = $v;
338
		else $r[$k] = $v;
335
	}
339
	}
336
	return $r;
340
	return $r;
337
}
341
}