1<?php
2/**
3* Finestra per la gestione degli allegati dalla scheda
4* Viene aperta in popup dal file {@link scheda.php}
5*
6* @package VFront
7* @author Mario Marcello Verona <marcelloverona@gmail.com>
8* @copyright 2007-2010 M.Marcello Verona
9* @version 0.96 $Id: add.attach.php 880 2010-12-14 12:43:47Z marciuz $
10* @license http://www.gnu.org/licenses/gpl.html GNU Public License
11*/
12
13
14
15
16// Imposto l'esecuzione massima in 10 minuti
17ini_set('max_execution_time',600);
18
19
20include("./inc/conn.php");
21include("./inc/layouts.php");
22include("./inc/func.comuni.php");
23include("./inc/func.frontend.php");
24
25proteggi(1);
26
27
28/**
29 * Permette di modificare il nome di un file eliminando i caratteri accentati latin1 e
30 * sostituendo ciò che non sono lettere, numeri o trattini con il carattere underscore
31 *
32 * @param string $nomefile
33 * @return string Nome del file senza caratteri accenti o spazi
34 */
35function rinomina_file($nomefile){
36
37	$nomefile=str_replace(array('à','è','é','ò','ì','ù'),
38						  array('a','e','e','o','i','u'),
39						  $nomefile);
40
41	$nomefile=preg_replace("'[^\w-.]+'","_",trim($nomefile));
42
43	return $nomefile;
44
45}
46
47
48/**
49 * Controlla la tipologia dei file mediante la lettura delle estensioni
50 * ed il confronto con le estensioni permesse nella variabile "formati_attach"
51 *
52 * @param string $nomefile
53 * @param string $header_file
54 * @todo Impostare un controllo mediante la lettura del MIME del file
55 * @return bool
56 */
57function verifica_tipo_file($nomefile,$header_file){
58
59	$estensioni_accettate=explode(",",$_SESSION['VF_VARS']['formati_attach']);
60
61	foreach($estensioni_accettate as $k=>$v) $estensioni_accettate[$k]=trim($v);
62
63	$infofile=pathinfo($nomefile);
64
65//	var_dump($estensioni_accettate);
66
67	return (in_array($infofile['extension'],$estensioni_accettate)) ?  true:false;
68
69}
70
71
72
73
74
75/**
76 * Funzione per la determinazione del tipo di file immagine mediante il nome e l'estensione
77 * Restituisce una icona con il tipo (se presente nei casi descritti)
78 *
79 * @param string $nomefile
80 * @return string
81 */
82function img_filetype($nomefile){
83
84	switch (substr($nomefile,-4,4)){
85
86		case '.pdf': $mime='pdf.gif'; $alt='pdf'; break;
87		case '.doc': $mime='doc.gif'; $alt='documento Word'; break;
88		case '.xls': $mime='xls.gif'; $alt='foglio di calcolo Excel'; break;
89		case '.zip': $mime='zip.gif'; $alt='file compresso zip'; break;
90		default   : $mime='generic.gif'; $alt='file'; break;
91
92
93	}
94
95
96	return "<img src=\"img/mime/$mime\" alt=\"$alt\" />";
97
98}
99
100
101
102
103######################################################################
104#
105#	CASO ELIMINA ALLEGATO
106#
107
108
109if(isset($_GET['del'])){
110
111	$id_da_eliminare=str_replace(_BASE64_PASSFRASE,'',base64_decode($_GET['del']));
112
113	$id_da_eliminare=intval($id_da_eliminare);
114
115	// elimino dal DB
116	$q_del=$vmsql->query("DELETE FROM "._TABELLA_ALLEGATO." WHERE codiceallegato=$id_da_eliminare");
117
118	$test_del_db= ($vmsql->affected_rows($q_del)==1) ? true:false;
119
120
121	// elimino dal filesystem
122	$test_del_fs=@unlink(_PATH_ATTACHMENT."/$id_da_eliminare.dat");
123
124	if($test_del_db && $test_del_fs){
125		header("Location: ".$_SERVER['PHP_SELF']."?t=".$_GET['t']."&id=".$_GET['id']."&az=del&feed=ok");
126
127	}
128	else{
129		header("Location: ".$_SERVER['PHP_SELF']."?t=".$_GET['t']."&id=".$_GET['id']."&az=del&feed=ko");
130	}
131
132	exit;
133}
134
135
136#
137#
138######################################################################
139
140
141
142
143
144#######################################################################
145#
146#	CASO UPLOAD ESEGUITO
147#
148
149if(count($_FILES)>0){
150
151
152	// variabile per il test finale
153	$success=0;
154	$tipo_errori_up= array();
155
156	// CICLO SUI FILES
157	for($i=0;$i<count($_FILES['gfile']['tmp_name']);$i++){
158
159		// test sulla correttezza dell'upload
160		if(is_file($_FILES['gfile']['tmp_name'][$i]) && $_FILES['gfile']['error'][$i]==0){
161
162			$nome_pulito = rinomina_file($_FILES['gfile']['name'][$i]);
163		}
164		else{
165			$tipo_errori_up[$i]='generico di upload';
166			continue;
167		}
168
169
170		// Test sul tipo di file
171		if(!verifica_tipo_file($nome_pulito,$_FILES['gfile']['type'][$i])){
172			$tipo_errori_up[$i]=_('file type not allowed (the available extensions are: ').str_replace(",",", ",$_SESSION['VF_VARS']['formati_attach']).')';
173			continue;
174		}
175
176
177		// INSERISCE IN DATABASE
178
179		$sql_ins=sprintf("INSERT INTO "._TABELLA_ALLEGATO."
180				 (tipoentita,codiceentita,nomefileall,descroggall,autoreall,lastdata)
181				 VALUES ('%s','%s','%s','%s','%s','%s')",
182				 $_POST['t'],
183				 $_POST['id'],
184				 $nome_pulito,
185				 '',
186				 ucfirst($_SESSION['user']['nome'])." ".ucfirst($_SESSION['user']['cognome']),
187				 date('Y-m-d H:i:s')
188				 );
189
190
191		$q_ins=$vmsql->query($sql_ins);
192
193		$id_ultimo=$vmsql->insert_id(_TABELLA_ALLEGATO,'codiceallegato');
194
195		$test_move=move_uploaded_file($_FILES['gfile']['tmp_name'][$i],_PATH_ATTACHMENT."/$id_ultimo.dat");
196
197		if($test_move){
198
199			$success++;
200		}
201		else{
202			$tipo_errori_up[$i]=_('it is not possible to upload the file in the folder');
203			continue;
204		}
205
206
207
208	}
209
210	if($success==count($_FILES['gfile']['tmp_name'])){
211
212		header("Location: ".$_SERVER['PHP_SELF']."?t=".$_POST['t']."&id=".$_POST['id']."&feed=ok");
213	}
214	else{
215		header("Location: ".$_SERVER['PHP_SELF']."?t=".$_POST['t']."&id=".$_POST['id']."&feed=ko&msg=".implode("|",$tipo_errori_up));
216	}
217
218	exit;
219}
220########################################################################
221
222
223
224
225
226
227
228
229
230
231
232
233
234########################################################################
235#
236#	VISTA PAGINA - QUERY DI RICERCA ALLEGATI
237#
238
239
240
241
242
243# CASO SPECIALE NEW:
244// L'utente ha cliccato su allegato quando ancora il record non era salvato..
245if($_GET['id']=='new'){
246
247	$msg=_("To attach a file, save the new record first, and then upload the attached files.");
248	openErrorGenerico(_('You cannot attach a file until you have first saved the new record'),false,$msg,'popup');
249	exit;
250}
251
252if($_GET['id']=='ric'){
253
254	$msg=_("You are in the middle of a search. Complete or cancel the search before trying to insert attachments.");
255	openErrorGenerico(_('You cannot attach files while performing a search'),false,$msg,'popup');
256	exit;
257}
258
259
260$tabella = preg_replace("'[\W]+'","",trim($_GET['t']));
261$id = preg_replace("'[\W]+'","",trim($_GET['id']));
262
263
264
265// PRENDI IMPOSTAZIONI ALLEGATI PER TABELLA/REGISTO
266$info_tab=prendi_info_tabella($tabella, "permetti_allegati_ins, permetti_allegati_del");
267
268$allegati_ins=$info_tab['permetti_allegati_ins'];
269$allegati_del=$info_tab['permetti_allegati_del'];
270
271
272
273if(!is_tabella($tabella) || $id==''){
274
275	openErrorGenerico(_('Request error'),false);
276	exit;
277}
278
279
280
281
282// CERCA ALLEGATI PER QUESTA TABELLA
283$qa=$vmsql->query("SELECT * FROM "._TABELLA_ALLEGATO."
284				WHERE tipoentita='$tabella'
285				AND codiceentita='$id'
286				ORDER BY nomefileall, lastdata");
287
288$num_allegati=$vmsql->num_rows($qa);
289
290$matrice_info_allegati=$vmsql->fetch_assoc_all($qa);
291
292
293
294
295
296
297
298
299
300$files = array('sty/linguette.css','js/uploadprogress/BytesUploaded.js','js/uploadprogress/LoadVars.js','js/clona_attach.js','sty/attach.css');
301
302$INIZIO_LAYOUT= openLayout1("Allegati",$files,'popup');
303
304echo str_replace("<body>","<body onload=\"window.focus();\">",$INIZIO_LAYOUT);
305
306
307
308echo "<img src=\"./img/flussi.gif\" style=\"float: left;\" alt=\""._('Manage attachments ')."\" />\n";
309
310echo "<h1 style=\"font-size:1.6em;\">"._('Attachments for record')." <span style=\"color:#666;\">".$_GET['id']."</span> "._('of table')." <span class=\"var\">".$_GET['t']."</span></h1>";
311
312echo "<br style=\"clear:left;\" />";
313
314
315$JS_aggiorna= (isset($_GET['feed']) && $_GET['feed']=='ok') ?  'window.opener.richiediAL();' : "";
316
317
318	echo "
319	<script type=\"text/javascript\">
320
321		$JS_aggiorna
322
323		var nuoviAllegati=0;
324
325		var bUploaded = new BytesUploaded('whileuploading.php',500);
326
327		var divs = new Array('allegati','nuoviallegati');
328
329
330		function eti(ido){
331
332			for (var i in divs){
333				document.getElementById('cont-eti-'+divs[i]).style.display='none';
334				document.getElementById('li-'+divs[i]).className='disattiva';
335			}
336
337			// attiva il selezionato
338			document.getElementById('cont-eti-'+ido).style.display='';
339			document.getElementById('li-'+ido).className='attiva';
340
341		}
342
343
344	</script>
345	";
346
347
348	if(isset($_GET['feed']) && $_GET['feed']=='ko'){
349
350
351		$messaggi=str_replace("|","<br />",$_GET['msg']);
352
353		echo "<p><strong>"._('Warning!')."</strong><br />\n$messaggi</p>\n";
354	}
355
356
357	echo "
358<div id=\"contenitore-variabili\">
359	<div id=\"box-etichette\">
360
361		<ul class=\"eti-var-gr\">
362
363
364			<li onclick=\"eti('allegati');\" id=\"li-allegati\" class=\"attiva\">"._('Attachments')."</li>
365			", ($allegati_ins) ? "<li onclick=\"eti('nuoviallegati');\" id=\"li-nuoviallegati\" class=\"disattiva\">"._('Add attachment')."</li>" : "","
366
367		</ul>
368
369	</div>";
370
371
372	// opzione scarica tutti
373	if($num_allegati>=2){
374
375		$link_scarica_tutti=" - <a href=\"download.php?type=all&amp;idr=".base64_encode($matrice_info_allegati[0]['codiceallegato']._BASE64_PASSFRASE)."\">Scarica tutti gli allegati</a>";
376	}
377	else{
378		$link_scarica_tutti='';
379	}
380
381	// LINGUETTA NUOVO FLUSSO
382	echo "
383	<div class=\"cont-eti\" id=\"cont-eti-allegati\" >
384
385		<p>"._('Attachments for this record').": <strong>$num_allegati</strong> $link_scarica_tutti</p>
386
387		<hr class=\"light2\" />
388		";
389
390		// MOSTRA GLI ALLEGATI
391		for($i=0;$i<count($matrice_info_allegati);$i++){
392
393			$dimensione =	allegato_filesize($matrice_info_allegati[$i]['codiceallegato']);
394
395			$scarica=(preg_match('|Dimensione|i',$dimensione)) ? "": " - <a href=\"download.php?f=".base64_encode($matrice_info_allegati[$i]['codiceallegato']._BASE64_PASSFRASE)."\">Scarica</a>";
396			$elimina=($allegati_del) ? " - <span class=\"fakelink-rosso\" onclick=\"if(confirm('"._('Are you sure you want to delete this attachment?')."')){ window.location='".$_SERVER['PHP_SELF']."?t=$tabella&amp;id=$id&amp;del=".base64_encode($matrice_info_allegati[$i]['codiceallegato']._BASE64_PASSFRASE)."';}\" >"._('Delete')."</span>" : "";
397
398			$estensione=substr($matrice_info_allegati[$i]['nomefileall'],-3,3);
399
400			if($estensione=='gif' || $estensione=='jpg' || $estensione=='png' ||
401			$estensione=='GIF' || $estensione=='JPG' || $estensione=='PNG'){
402
403				$immagine='<img src="thumb.php?id='.$matrice_info_allegati[$i]['codiceallegato'].'" alt="'.$matrice_info_allegati[$i]['nomefileall'].'" class="thumb" /><div style="clear:both">&nbsp;</div>';
404			}
405			else{
406
407				$immagine = img_filetype($matrice_info_allegati[$i]['nomefileall']);
408			}
409
410			echo "
411			<div class=\"allegato\">
412				<div class=\"allegato-img\">".$immagine."</div>
413				<div class=\"allegato-info\">
414					<strong>".$matrice_info_allegati[$i]['nomefileall']."</strong><br />
415					$dimensione $scarica $elimina
416
417				</div>
418			</div>\n";
419		}
420
421
422
423
424	echo "
425	</div>
426	";
427
428
429	// LINGUETTA AMMINISTRAZIONE FLUSSI
430	if($allegati_ins){
431	echo "
432	<div class=\"cont-eti\" id=\"cont-eti-nuoviallegati\" style=\"display:none;\">
433		<br />
434		";
435	?>
436	<form enctype="multipart/form-data" method="post" action="<?php echo $_SERVER['PHP_SELF'];?>" onsubmit="bUploaded.start('fileprogress');">
437			<div>
438				<div id="contenitore-file"><div><input type="file" name="gfile[]" size="60" /> <span onclick="rimuovi_attach(this);" class="fakelink" style="font-size:0.7em;">rimuovi</span><br /></div></div>
439
440				<span onclick="clona_attach();" class="fakelink"><?php echo _('Add another file');?></span><br /><br /><br />
441
442
443				<input type="hidden" name="t" value="<?php echo $tabella;?>" />
444				<input type="hidden" name="id" value="<?php echo $id;?>" />
445
446				<input type="submit" name="aggiungi" value="  <?php echo _('Send');?>  " onclick="submit();this.value='<?php echo _('Please wait...');?>';this.disabled=true;" />
447
448			</div>
449		</form>
450		<div id="fileprogress" style="font-weight: bold;"> </div>
451
452<?php
453
454	echo "</div>\n";
455	} // -- fine clausola nuovi inserimenti
456
457echo "</div><!-- fine contenitore -->\n\n";
458
459
460
461
462echo closeLayout1();
463?>