Joomla.it Forum

Componenti per Joomla! => Gestione Form => : rushseeker 19 Apr 2011, 12:18:33

: [problema] Upload in edit con Chronoconnectivity
: rushseeker 19 Apr 2011, 12:18:33
Salve ( probabilmente ho già scritto qualcosa del genere... ma non riesco a trovare più il post )

Ho seguito la guida di "vales"

http://www.joomla.it/articoli-della-community/3796-chronofrms-e-chronoconnectivity-lunione-fa-la-forza.html

Il problema che ho notato quando si va in edit se non metto niente nel campo upload accade questo: il campo file viene messo a NOFILE (il file nel server rimane).

Ricordo il suggerimento di vales
prova a mettere su server side validation qualcosa:
Queste righe di codice fanno (finalmente) reagire in qualche modo chronoform:

Cosa ho provato a fare: visto che se mi azzardo a mettere un uploader di nome file_0 vuoto lo sovrascrive, lasciando il vecchio file sul server, ho cambiato il nome dell'uploader a file_1 e ho provato a mettere questo:

:
<?php  if ((is_uploaded_file($_FILES['file_1']['tmp_name']))){
$_FILES['file_0']['tmp_name'] = $_FILES['file_1']['tmp_name'];
$_FILES['file_0']['size'] =  $_FILES['file_1']['size'];
$_FILES['file_0']['type'] = $_FILES['file_1']['type'];
}
?>


mi arriva un messaggio di errore: non puoi fare l'upload di questo tipo di file.

I problemi da risolvere sono:
1)se non faccio upload non devo toccare il file immagine.
2) se faccio l'upload del nuovo file il vecchio va cancellato.
: Re:[problema] Upload in edit con Chronoconnectivity
: vales 19 Apr 2011, 15:19:46
Questo ti può aiutare ?

http://forum.joomla.it/index.php/topic,133061.msg588127.html#new
: Re:[problema] Upload in edit con Chronoconnectivity
: rushseeker 19 Apr 2011, 15:37:43
Questa soluzione si riferisce a se non inserisci un file allora si blocca.

Nel mio caso mi trovo in fase di EDIT grazie a Chronoconnectivity. Se non inserisco nessun file, allora il vecchio file caricato precedentemente, viene sostituito da NOFILE (anche se in realtà il file originale rimane sul server).

Quello che vorrei tentare di fare é : se non inserisco niente allora devo proseguire con l'aggiornamento ma mantenendo il vecchio file.

Spero di essere stato chiaro.
: Re:[problema] Upload in edit con Chronoconnectivity
: rushseeker 27 Apr 2011, 10:03:37
Ho pensato di scrivere questa porzione di codice per provare a capire come chronoform gestisce i campi in edit.
Ho notato che controllando $Myrows->file_0 posso gestire in qualche modo dei messaggi di avviso in fase di EDIT.

:

<?php 
echo "{file_0}";
echo " Myrow ".$Myrow->file_0;
if(($Myrows->file_0)=='')

echo 'Non sono stati inseriti file immagine o file zip';
}
else{ 

echo '<a href="'.Juri::base().'components/com_chronocontact/uploads/scheda_sopralluogo_ver2/'.$MyRow->file_0.'"/>'.$MyRow->file_0.'</a>';
}
?>



I risultati dopo una verifica non sono quelli sperati.
: Re:[problema] Upload in edit con Chronoconnectivity
: rushseeker 28 Apr 2011, 10:18:50
Credete sia possibile creare un pulsante che se viene cliccato elimina il file presente sul server?
: Re:[problema] Upload in edit con Chronoconnectivity
: vales 28 Apr 2011, 12:54:21
Credo dovresti fare uno script da inserire nel campo Server side validation del form che usi per le modifiche ed li fare le verifiche, se il nome del file inserito è vuoto mantieni il vecchio file altrimenti va il nuovo.

Dovresti anche diversificare il nome del campo di inserimento del file in fase modifica dal nome del file in fase di inserimento altrimenti si potrebbero creare dei problemi.
Successivamente sempre in Server side validation, quando necessario rendi il nome del campo della tabella uguale al nome del file modificato.
: Re:[problema] Upload in edit con Chronoconnectivity
: rushseeker 01 May 2011, 22:21:50
Allora:
sto provando ad adottare la seguente soluzione...

Ho creato un nuovo campo di testo, al cui interno, in javascript, ho il percorso completo del file che inserisco in UPLOAD.


Nel form che si occupa dell'editing ho inserito quindi 2 campi PathFile_0 e PathFile_new: uno che contiene il percorso del vecchio file, l'altro che contiene il percorso del nuovo file se mai viene inserito.  In allegato una immagine della zona interessata.

Quindi...  in Validate ho inserito il seguente codice.
:

<?php  
if ((is_uploaded_file($_FILES['file_0']['tmp_name']))){
 
unlink ($_POST['PathFile_0']);
$_POST['PathFile_0'] = $_POST['PathFile_new'];
?>


purtroppo non funziona come dovrebbe.
Cosa ne pensi vales?
: Re:[problema] Upload in edit con Chronoconnectivity
: rushseeker 02 May 2011, 11:23:58
Penso di aver trovato il problema: il fatto è che non riesco a dare lo stesso nome di file ai campi pathfile_0 e il nome effettivo che avrà il file alla fine dell'upload.

ho notato che su FILEUPLOAD
c'è questa stringa

:
$filename = date('YmdHis').'_'.$chronofile['name'];
Questa stringa mi dice che metterò una data prima del nome del file al file di upload.

Ora... come faccio a fare in modo che pathfile_0 e file_0 possano avere lo stesso valore?

: Re:[problema] Upload in edit con Chronoconnectivity
: rushseeker 03 May 2011, 11:04:40
Ho notato un'altro bug:
Se eseguo un delete in chronoconnectivity, i file di upload rimangono sul server! ( sempre peggio! )
: Re:[problema] Upload in edit con Chronoconnectivity
: vales 03 May 2011, 11:41:59
Non è un bug, è un limite del componente.

Che comunque può essere gestito con opportuni script che possono rimuovere gli allegati in tali circostanze.
: Re:[problema] Upload in edit con Chronoconnectivity
: rushseeker 17 May 2011, 09:18:10
mi hanno proposto questa soluzione:

http://www.chronoengine.com/forums/viewtopic.php?f=12&t=21682&p=69353#p69353

Ma... perché non deve funzionare!?... non capisco!
: Re:[problema] Upload in edit con Chronoconnectivity
: vales 17 May 2011, 19:28:10
Quando si inserisce un allegato abbiamo due entità da gestire il nome del file che viene eventualmente registrato in un campo della tabella associata al form ed il file stesso che assume per nome quello predisposto in Field name in File upload del form e che sarà uguale al nome del campo detto sopra.

L'esempio di quella guida citata era molto rudimentale e non affrontava il problema che tu hai posto.

Io come, detto sopra, sfrutterei le potenzialità del campo Server side Validation.

Preliminarmente nel form acquisirei in un campo nascosto il nome del file già presente.

Ora hai due possibilità

1) inserisci un nuovo file e quindi avrai un nuovo nome dell'allegato

2) non inserisci un nuovo file e quindi il campo nome allegato  è vuoto.

In relazione a queste due possibilità in Server side validation puoi rigirare le cose come vuoi

1) se il file è nuovo  il nome_allegato è diverso da vuoto  e cancelli in vecchio file nella directory configurata.
2) se il file è vuoto assegni al campo_allegato in nome del vecchio file perche altrimenti ti rimane vuoto.

Questo può essere un base di codice tirato giù al volo e non controllato.

:
//attiva le funzioni di gestione file di joomla
jimport('joomla.filesystem.file');
// legge la directory degli allegati impostata nel form;
$MioForm =& CFChronoForm::getInstance("nome_tuo_form");
$uploadpath = $MioForm->formparams("uploadpath");

$vecchio=Jrequest::getVar('campo_nascosto','','post');
$nuovo=Jrequest::getVar('nome_allegato','','post');

if ($nuovo<>"") {
Jfile::delete($uploadpath.$vecchio);
} else {
Jrequest::setVar('nome_allegato',$vecchio,'post');
// oppure
unset($_POST['nome_allegato']);
//vedi qui quale funziona meglio.
}


: Re:[problema] Upload in edit con Chronoconnectivity
: rushseeker 20 Jun 2011, 11:26:11
:
<?php
jimport
('joomla.filesystem.file');
$MioForm =& CFChronoForm::getInstance("scheda_sopralluogo_edit");
$uploadpath $MioForm->formparams->uploadPath();


$vecchio=Jrequest::getVar('PathFile_0','','post');
$nuovo=Jrequest::getVar('PathFile_new','','post');


if (
$nuovo<>"") {
Jfile::delete($uploadpath.$vecchio);
Jrequest::setVar('PathFile_0',str_replace(" ""_"$nuovo));
$_FILES['file_0']['name'] = str_replace(" ","_"$nuovo));
} else {


}
?>



Grazie Vales per la tua risposta:




mi da questo errore:

 Fatal error:  Call to undefined method JParameter::uploadPath() in ***************/home/components/com_chronocontact/libraries/chronoform.php(258) : eval()'d code on line 4

E' chiaro che non trova uploadPath()....

Edit: ho sostituito alla variabile uploadPath() con il percorso di upload adesso non esegue più l'errore. Unica cosa che devo ancora verificare è il funzionamento della cancellazione del file dal server.
: Re:[problema] Upload in edit con Chronoconnectivity
: rushseeker 22 Jun 2011, 10:11:16
Oggi i test confermano i miei sospetti:


unica cosa che non fà è cancellare il vecchio file presente sul server.
: Re:[problema] Upload in edit con Chronoconnectivity
: rushseeker 23 Jun 2011, 10:42:20
Ecco il codice Funzionante:


:

<?php
jimport
('joomla.filesystem.file');
$MioForm =& CFChronoForm::getInstance("scheda_sopralluogo_edit");
$uploadpath "/components/com_chronocontact/uploads/scheda_sopralluogo_ver2/";


$vecchio=Jrequest::getVar('PathFile_0','','post');
$nuovo=Jrequest::getVar('PathFile_new','','post');


if (
$nuovo<>"") {
if (file_exists ("components/com_chronocontact/uploads/scheda_sopralluogo_ver2/".$vecchio)){
Jfile::delete("components/com_chronocontact/uploads/scheda_sopralluogo_ver2/".$vecchio);
}
Jrequest::setVar('PathFile_0',str_replace(" ""_"$nuovo));
$_FILES['file_0']['name'] = "Tecnico".JRequest::getString('nome_tecnico''''post').'_'."Soggetto".JRequest::getString('cognome_sogg''''post').'_'.JRequest::getString('nome_sogg''''post').'_'.date('YmdHis').'_'.str_replace(" ","_",$nuovo);

$_POST['PathFile_0'] = $_FILES['file_0']['name'];

else {}
?>


NOn riesco a modificare il titolo del post per sostituire "problema" con "risolto"... cosa è un metodo di protezione del forum?
: Re:[problema] Upload in edit con Chronoconnectivity
: vales 23 Jun 2011, 15:41:40
Ottimo.

Mi sembra di capire che usi un form con gli allegati nella cartella di un altro form, è per questo che non funzionava.

Per la modifica del titolo devi premere Modifica sul primo post.
: Re:[problema] Upload in edit con Chronoconnectivity
: rushseeker 28 Jun 2011, 08:57:07
Ottimo.

Mi sembra di capire che usi un form con gli allegati nella cartella di un altro form, è per questo che non funzionava.

Si... hai perfettamente ragione. La directory su cui fare i "lavori" è quella del form che si occupa di fare gli inserimenti.

Per la modifica del titolo devi premere Modifica sul primo post.
Non appare più il pulsante sul primo post.
: Re:[problema] Upload in edit con Chronoconnectivity
: vales 28 Jun 2011, 22:46:11
....
Non appare più il pulsante sul primo post.

Forse non entri nel forum loggato?
: Re:[problema] Upload in edit con Chronoconnectivity
: rushseeker 04 Jul 2011, 12:40:22
Ho provato a sloggare e riloggare... non posso editare