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&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&id=$id&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"> </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?>