Eliminazione di una scheda contenuto con gallery senza eliminare immagini

6 contenuti / 0 new
Ultimo contenuto
Eliminazione di una scheda contenuto con gallery senza eliminare immagini

Salve, io avrei questo quesito da porre.
Io ho una scheda di informazione con una gallery allegata.
La scheda madre è in italiano è clonata per l'inglese.
La questione è che ho bisogno che la scheda quando viene eliminata dall'inglese essendo che usa le stesse immagini della gallery italiana, non elimini le immagini.
Perchè succede che se elimino una scheda le immagini che si trovano nell'altra lingua spariscono insieme al thumb, e poi devo ricaricarle nel'ftp per poterle vedere almeno nella lingua italiana.
C'è un modo per fare un controllo sulle foto al momento dell'eliminazione?
Sono nel pallone con questa cosa perchè l'ho risolta in una maniera, ma il cliente vuole per forza questa modifica.
Alcuni file gli avevo individuati, ma non sono sicuro però.
Fatemi sapere vi prego anche se devo allegare dei file individuati per metterci le mani.
Grazie

Mi da l'impressione - se stiamo parlando di allegati - che il codice Drupal non controlla se ci sono altri riferimenti al file (modules/upload/upload.module:422):

function upload_delete($node) {
  $files = array();
  $result = db_query('SELECT DISTINCT f.* FROM {upload} u INNER JOIN {files} f ON u.fid = f.fid WHERE u.nid = %d', $node->nid);
  while ($file = db_fetch_object($result)) {
    $files[$file->fid] = $file;
  }
  foreach ($files as $fid => $file) {
    // Delete all files associated with the node
    db_query('DELETE FROM {files} WHERE fid = %d', $fid);
    file_delete($file->filepath);
  }
  // Delete all file revision information associated with the node
  db_query('DELETE FROM {upload} WHERE nid = %d', $node->nid);
}

Sfortunatamente sembra che CCK filefield fa la stessa cosa! (sites/all/modules/filefield/filefield_field.inc:208). Quest'argomento è stato discusso:
http://drupal.org/node/119539
http://stackoverflow.com/questions/2101754/drupal-filefield-remove-file-...
http://stackoverflow.com/questions/1796948/how-can-i-associate-many-exis...
http://drupal.org/project/filefield_sources

Comunque, sembra un bel 'fallo' di Drupal - che non ha un bellisimo rapporto con files.

Al rischio di infrangere la prima regola (don't hack core) una rapida soluzione sarebbe di togliere le chiamate a file_delete rendere inocuo questo funzione. Riempirà il disco e la tabella files, ma almeno non perdi niente...

[Edit]
La soluzione migliore sarebbe un Document Management System. Anche forse troppo. Comunque, mi sembra che un DMS di Drupal non esiste, ma che ci sono soluzioni di integrazione con altri DMS:
http://groups.drupal.org/document-management
http://drupal.org/node/57400
http://groups.drupal.org/node/134
http://drupal.org/node/90330
http://cafuego.net/2009/05/31/simple-drupal-document-management-system
http://acquia.com/node/1389
http://buytaert.net/drupal-and-alfresco
http://groups.drupal.org/node/4708
http://groups.drupal.org/node/3459
(Non ho letto tutti questi articoli, solo le prime 2-3 paragrafi)
[/Edit]

Più imparo, più dubito.

Ti ringrazio innanzitutto, ma filefield_field.inc non c'è l'ho nella directory, c'è il file filefield.module, ma quello mi manca.
Poi ho fatto delle prove su upload.module commentanto file_delete($file->filepath); .Dopo anche le funzioni, le select che eliminavano la tabella file, sempre passi alla volta, però....niente.
Come si può fare secondo lei?

P.s. Una soluzione momentanea ci sarebbe disconnettendo la traduzione renderla non pubblica, e quindi ricreare un'altra traduzione, ma il cliente è un pò complicato e quindi.....devo continuare con questo problema.

giggimix wrote:
Ti ringrazio innanzitutto, ma filefield_field.inc non c'è l'ho nella directory, c'è il file filefield.module, ma quello mi manca.

Credo proprio che ci dev'essere:
http://drupalcode.org/viewvc/drupal/contributions/modules/filefield/
http://drupalcode.org/viewvc/drupal/contributions/modules/filefield/file...
Prova aggiornare ;-)
giggimix wrote:
Poi ho fatto delle prove su upload.module commentanto file_delete($file->filepath); .Dopo anche le funzioni, le select che eliminavano la tabella file, sempre passi alla volta, però....niente.

Questo era il mio errore di sbaglio. Meglio che elimini sia la cancellazione del file, sia i record del db:
<?php
function upload_delete($node) {
 
/* Non cancelliamo niente...
  $files = array();
  $result = db_query('SELECT DISTINCT f.* FROM {upload} u INNER JOIN {files} f ON u.fid = f.fid WHERE u.nid = %d', $node->nid);
  while ($file = db_fetch_object($result)) {
    $files[$file->fid] = $file;
  }
  foreach ($files as $fid => $file) {
    // Delete all files associated with the node
    db_query('DELETE FROM {files} WHERE fid = %d', $fid);
    file_delete($file->filepath);
  }
  ... niente cancellazioni */
  // Delete all file revision information associated with the node
 
db_query('DELETE FROM {upload} WHERE nid = %d', $node->nid); // credo che questo non farà danni...
}
?>

giggimix wrote:

Come si può fare secondo lei?

Se mi dai del 'lei' per via del colore dei capelli... ;-)

giggimix wrote:
P.s. Una soluzione momentanea ci sarebbe disconnettendo la traduzione renderla non pubblica, e quindi ricreare un'altra traduzione, ma il cliente è un pò complicato e quindi.....devo continuare con questo problema.

Anche a me sembra complicato. Non ho indagato su come viene creato un nodo 'parallelo' in un altro linguaggio...

Questa soluzione (se oso chiamarlo così - è un vero hack, praticamente una lobotomia) - se funziona - funzionerà solo per attachments, bisogna fare un'altra lobotomia per filefield (se stavi usando quello)...

Non sto faccendo un controllo di questi modifiche nel mio sandbox, non ho tempo ora - quindi bisogna sperimentare da solo. Se così non funziona, togli anche l'unica riga rimasta nella funziona...

Bon chance

Più imparo, più dubito.

Ho apena visto questo video tutorial (di solito gli evito) http://geeksandgod.com/tutorials/computers/cms/drupal/creating-drupal-ph... dove gli immagini sono nodi separati dalle gallerie. Credo che così non vengono eliminati se elimini la galleria. Da testare però...

Più imparo, più dubito.

Ma con Drupal 6.15 questo problema che ho riscontrato all'inizio si risolve o bisogna mettere qualche modulo?