si, eziste basta che scarichi questo file scompatti e poi sostutisci nella cartella remota
root_del_sito/components/com_contact/
dentro il fil ZIP due pagine PHP banta che sostituisci
http://151.1.162.9/outshop.net/file_com_contact.zipOppure sei un esperto potresti modificare i seguenti file, seguendo la guida che adesso scrivo.
Consiglio a chiunque volesse apportare queste modifiche di farsi una copia di backup dei file originali che si modificano in modo da poterli ripristinarli nell'eventualità che le modifiche non funzionassero o rendessero instabile o vulnerabile il sito. Ci tengo a specificare che il sottoscritto non ha alcuna responsabilità per utilizzo che si fa di questa informazione/soluzione.
I file da modificare sono:
root_del_sito/components/com_contact/contact.html.php
root_del_sito/components/com_contact/contact.php
Nel primo file c'è da aggiungere nella riga numero 659 la dicitura:
enctype="multipart/form-data"
quindi la riga 659 da così:
<form action="<?php echo sefRelToAbs( 'index.php?option=com_contact&Itemid='. $Itemid ); ?>" method="post" name="emailForm" target="_top" id="emailForm">
diventa così:
<form action="<?php echo sefRelToAbs( 'index.php?option=com_contact&Itemid='. $Itemid ); ?>" enctype="multipart/form-data" method="post" name="emailForm" target="_top" id="emailForm">
Questo accorgimento è necessario per la corretta gestione, tramite protocollo HTTP, del file allegato.
Sempre nel primo file nella riga numero 678 prima dei
c'è da aggiungere il codice di seguito riportato:
<?/*************************************** INIZIO MODIFICA ***************************************/?>
<? //Codice Modificato per permettere l'invio di Allegati al componente di default di Joomla// ?>
<label for="contact_allegato">Allegato</label>
<INPUT TYPE="file" name="contact_allegato" id="contact_allegato" size="30" class="inputbox" value="">
<?/*************************************** INIZIO MODIFICA ***************************************/?>
Il tag label aggiunge un etichetta, mentre tamite il tag INPUT TYPE="file" si aggiunge un campo che permette di ricavare il path del file da allegare dal proprio computer.
Nel secondo file (contact.php) c'è da aggiungere nella riga numero 434 il codice di seguito riportato:
/*************************************** INIZIO MODIFICA ***************************************/
//Codice Modificato per permettere l'invio di Allegati al componente di default di Joomla
$allegato = $_FILES['contact_allegato']['tmp_name'];
$allegato_type = $_FILES['contact_allegato']['type'];
$allegato_name = $_FILES['contact_allegato']['name'];
$allegato_error = $_FILES['contact_allegato']['error'];
if ($allegato_error == 0 || $allegato_error == 4){rename($allegato, $allegato_name);}
else{
$link = sefRelToAbs( 'index.php?option=com_contact&task=view&contact_id='. $contact[0]->id .'&Itemid='. $Itemid );
mosRedirect( $link, "Si è verificato un errore nel caricamento del file allegato, la mail non è stata inviata" );
}
$success = mosMail( $email, $name , $contact[0]->email_to, $mosConfig_fromname .': '. $subject, $text, 0, NULL, NULL, $allegato_name, NULL, NULL);
//Stringa originale che non Allega niente
//$success = mosMail( $email, $name , $contact[0]->email_to, $mosConfig_fromname .': '. $subject, $text );
/**************************************** FINE MODIFICA ****************************************/
Questo pezzo di codice non fa altro che caricare il file sul server creando un file temporaneo nella cartella di default usata dal server per svolgere queste operazioni. Memorizzo il nome del file temporaneo nella variabile $allegato e il nome originario nella variabile $allegato_name. In $allegato_type memorizzo il tipo di file caricato e in $allegato_error memorizzo lo stato del file. Da questa variabile ricavo diverse informazioni in quanto è in grado di dirmi se il file è stato caricato correttamente, se non c'era nessun file da caricare o se si è verificato qualche errore nel caricamento. Se si è verificato qualche errore nel caricamento, la mail non viene inviata e visualizzo un messaggio di avviso, mentre, se il file è stato caricato correttamente rinomino il file temporaneo con il nome che aveva sul computer, per una corretta ricezione, e procedo con l'invio. Come si può vedere dall' "if" se $allegato_error assume valore 4 (vuol dire chè non c'era nessun file da caricare) gli faccio fare lo stesso la rinomina del file, solo che non essendocci nessun file e come se rename($allegato, $allegato_name) non ci fosse neanche scritto e procede nell'invio della mail normalmente senza allegato.
Per l'invio della mail utilizzo la funzione mosMail, già presente in Joomla, per passargli tutte le informazioni di cui ha bisogno per inviare la mail.
Alla fine del codice ho lasciato commentata la riga originale che usava il componente.
All'interno di questo codice non ho inserito nessun controllo ne sul peso ne sul tipo di file caricato. Questo volutamente in quanto, per il tipo, voglio che sia possibile allegare qualunque tipo di file, mentre per la grandezza ne affido il controllo a php che tramite post_max_size e upload_max_filesize specificati sul server mi bloccano il caricamento del file quando supera il peso massimo specificato.
Per aggiungere un controllo sul peso del file potevo usare filesize, questo però non mi risolveva il problema dell'evitare traffico sul server in quanto prima di determinarne il peso doveva avare tutto il file già caricato sul server.