includes/pageutils.php
changeset 1114 4f4d63a281cd
parent 1081 745200a9cc2a
child 1121 bf5adc446018
--- a/includes/pageutils.php	Sat Sep 12 09:56:39 2009 -0400
+++ b/includes/pageutils.php	Tue Sep 15 14:37:03 2009 -0400
@@ -998,21 +998,50 @@
     {
       return $lang->get('etc_access_denied_need_reauth');
     }
-    $e = $db->sql_query('DELETE FROM ' . table_prefix.'logs WHERE page_id=\'' . $db->escape($page_id) . '\' AND namespace=\'' . $db->escape($namespace) . '\';');
-    if(!$e) $db->_die('The log entries could not be deleted.');
+    
+    $page_id_db = $db->escape($page_id);
+    $namespace_db = $db->escape($namespace);
+    
+    // If we're flushing a file, also clear all revisions before the current
+    if ( $namespace == 'File' )
+    {
+      $q = $db->sql_query('SELECT file_id FROM ' . table_prefix . "files WHERE page_id='$page_id_db' ORDER BY time_id DESC;");
+      if ( !$q )
+        $db->_die();
+      // discard first row (current revision)
+      $db->fetchrow();
+      $id_list = array();
+      while ( $row = $db->fetchrow() )
+        $id_list[] = $row['file_id'];
+      
+      require_once(ENANO_ROOT . '/includes/namespaces/file.php');
+      
+      // clear out each file
+      foreach ( $id_list as $id )
+        Namespace_File::delete_file($id);
+    }
+    
+    $q = $db->sql_query('DELETE FROM ' . table_prefix . "logs WHERE page_id='$page_id_db' AND namespace='$namespace';");
+    if ( !$q )
+      $db->_die('The log entries could not be deleted.');
     
     // If the page exists, make a backup of it in case it gets spammed/vandalized
     // If not, the admin's probably deleting a trash page
     if ( isPage($paths->get_pathskey($page_id, $namespace)) )
     {
-      $e = $db->sql_query('SELECT page_text,char_tag FROM ' . table_prefix.'page_text WHERE page_id=\'' . $page_id . '\' AND namespace=\'' . $namespace . '\';');
-      if(!$e) $db->_die('The current page text could not be selected; as a result, creating the backup of the page failed. Please make a backup copy of the page by clicking Edit this page and then clicking Save Changes.');
+      $q = $db->sql_query('SELECT page_text,char_tag FROM ' . table_prefix . "page_text WHERE page_id='$page_id_db' AND namespace='$namespace_db';");
+      if ( !$q )
+        $db->_die('The current page text could not be selected; as a result, creating the backup of the page failed. Please make a backup copy of the page by clicking Edit this page and then clicking Save Changes.');
       $row = $db->fetchrow();
       $db->free_result();
       $minor_edit = ( ENANO_DBLAYER == 'MYSQL' ) ? 'false' : '0';
-      $q='INSERT INTO ' . table_prefix.'logs(log_type,action,time_id,date_string,page_id,namespace,page_text,char_tag,author,edit_summary,minor_edit) VALUES(\'page\', \'edit\', '.time().', \''.enano_date(ED_DATE | ED_TIME).'\', \'' . $page_id . '\', \'' . $namespace . '\', \'' . $db->escape($row['page_text']) . '\', \'' . $row['char_tag'] . '\', \'' . $session->username . '\', \''."Automatic backup created when logs were purged".'\', '.$minor_edit.');';
-      if(!$db->sql_query($q)) $db->_die('The history (log) entry could not be inserted into the logs table.');
+      $username = $db->escape($session->username);
+      $q = 'INSERT INTO ' . table_prefix . "logs ( log_type, action, time_id, date_string, page_id, namespace, page_text, char_tag, author, edit_summary, minor_edit ) VALUES\n"
+         . "  ('page', 'edit', " . time() . ", 'DEPRECATED', '$page_id', '$namespace', '" . $db->escape($row['page_text']) . "', '', '{$username}', '" . $lang->get('page_flushlogs_backup_summary') . "', $minor_edit);";
+      if ( !$db->sql_query($q) )
+        $db->_die('The history (log) entry could not be inserted into the logs table.');
     }
+    
     return $lang->get('ajax_clearlogs_success');
   }