Deleting a picture from IMCE doesn't remove it from the gallery

sdsheridan - January 27, 2008 - 03:31
Project:IMCE_Gallery
Version:5.x-1.x-dev
Component:Code
Category:bug report
Priority:normal
Assigned:Unassigned
Status:active
Description

When a user deletes a file using IMCE that was associated with a gallery, the corresponding gallery entry row in the IMCE_gallery_items table is not deleted. This leads to the galleries showing little red 'x's where the pics used to be.

#1

ernst - July 10, 2008 - 09:10

I have also this problem !!!!!!1

Some one out there that got a solution??

#2

sdsheridan - July 11, 2008 - 18:45

I had to get this fixed in a hurry, so wound up hacking the imce.module code:

<?php
function imce_delete_file($set, $filename) {
  if (
file_delete($set->dir.'/'.$filename)) {
   
// Added the following to remove row from imce_gallery_items as well
   
if (db_table_exists("{imce_gallery_items}")) { // if table exists, then imce_gallery is installed, need to clean up this table

     
$del_imce_gall_item_row = "DELETE FROM {imce_gallery_items} WHERE uid = %d AND g_file_name = '%s'";

     
$res_del = db_query( $del_imce_gall_item_row, $set->uid, $filename );

      if (
$res_del ) {
        if (
db_affected_rows() > 0 ) {
         
drupal_set_message(t('File and gallery reference deleted successfully.'));
        }
        else {
         
drupal_set_message(t('File deleted successfully.'));
        }
       
$returnValue = TRUE;
      }
      else {
       
drupal_set_message(t('Error deleting file. File gone but gallery listing remains.'), 'error');
       
watchdog('imce', t( 'imce_delete_file failed to delete imce_gallery entry. uid:' . $set->uid . ', file:' . $filename . ', db_query result:' . $res_del . ', db_error:' . db_error() . ', affected rows:' . db_affected_rows()), WATCHDOG_ERROR);
       
$returnValue = FALSE;
      }

    }

   
// adjusted the following code to make more structured

   
else {
     
drupal_set_message(t('File deleted successfully.'));
     
$returnValue = TRUE;
    }
  }
  else {
   
drupal_set_message(t('Error deleting file.'), 'error');
   
$returnValue = FALSE;
  }

  return
$returnValue;
}
?>

I'm not that happy with this solution as now I've introduced a dependency between the two modules I didn't really want. But I've not had time to figure out how to do it otherwise, although I'm sure there's a way. If anyone else has any suggestions, by all means, please do let me know.

shawn

 
 

Drupal is a registered trademark of Dries Buytaert.