[ros-diffs] [dgoette] 37567: if stable entries of type 'page' or dynamic 'content' are deleted -> delete them also from hdd and not only in our Database

dgoette at svn.reactos.org dgoette at svn.reactos.org
Sat Nov 22 21:49:00 CET 2008


Author: dgoette
Date: Sat Nov 22 14:49:00 2008
New Revision: 37567

URL: http://svn.reactos.org/svn/reactos?rev=37567&view=rev
Log:
if stable entries of type 'page' or dynamic 'content' are deleted -> delete them also from hdd and not only in our Database

Modified:
    branches/danny-web/reactos.org/htdocs/roscms/lib/Data.class.php

Modified: branches/danny-web/reactos.org/htdocs/roscms/lib/Data.class.php
URL: http://svn.reactos.org/svn/reactos/branches/danny-web/reactos.org/htdocs/roscms/lib/Data.class.php?rev=37567&r1=37566&r2=37567&view=diff
==============================================================================
--- branches/danny-web/reactos.org/htdocs/roscms/lib/Data.class.php [iso-8859-1] (original)
+++ branches/danny-web/reactos.org/htdocs/roscms/lib/Data.class.php [iso-8859-1] Sat Nov 22 14:49:00 2008
@@ -229,6 +229,69 @@
       }
     }
   } // end of member function getCookieDomain
+
+
+  /**
+   * deletes files from generated entries
+   *
+   * @param int rev_id
+   * @access public
+   */
+  public static function deleteFile( $rev_id )
+  {
+    global $roscms_security_level;
+    // only for admins
+    if ($roscms_security_level < 3) {
+      return;
+    }
+
+    $stmt=DBConnection::getInstance()->prepare("SELECT d.data_id, d.data_name, d.data_type, r.rev_id, r.rev_language FROM data_ d JOIN data_revision r ON r.data_id=d.data_id WHERE r.rev_id = :rev_id LIMIT 1");
+    $stmt->bindParam('rev_id',$rev_id,PDO::PARAM_INT);
+    $stmt->execute();
+    $page = $stmt->fetchOnce(PDO::FETCH_ASSOC);
+
+    // only for entries of type page
+    if ($page === false) {
+      return;
+    }
+
+    //if data_type is page -> delete file in all languages
+    if ($page['data_type'] == 'page'){
+      $stmt=DBConnection::getInstance()->prepare("SELECT lang_id FROM languages");
+    }
+
+    //if data_type is content (only for dynamic) -> delete only selected one
+    elseif ($page['data_type'] == ''){
+      $dynamic_num = Tag::getValueByUser($page['data_id'],$page['rev_id'],'number',-1);
+      if ($dynamic_num > 0) {
+        $stmt=DBConnection::getInstance()->prepare("SELECT lang_id FROM languages WHERE lang_id = :lang_id LIMIT 1");
+        $stmt->bindParam('lang_id',$page['rev_language'],PDO::PARAM_STR);
+      }
+      // entry is not dynamic
+      else {
+        return;
+      }
+    }
+
+    // neither page or content -> nothing to do
+    else {
+      return;
+    }
+    
+    // get file name
+    $file_extension = Tag::getValueByUser($page['data_id'], $page['rev_id'], 'extension', -1);
+    $file_name = $page['data_name'].(isset($dynamic_num) ? '_'.$dynamic_num : '').'.'.$file_extension;
+
+    // delete entries for selected language packs
+    $stmt->execute();
+    while ($lang = $stmt->fetch(PDO::FETCH_ASSOC)) {
+
+      // delete file if it exists
+      if ( file_exists('../'.$lang['lang_id'].'/'.$file_name)) {
+        unlink('../'.$lang['lang_id'].'/'.$file_name);
+      }
+    }
+  }
 
 
   /**
@@ -846,6 +909,7 @@
               if ($roscms_security_level < 3) {
                 Data::copy($revision['data_id'], $revision['rev_id'], 0, $lang);
               }
+              Data::deleteFile($revision['rev_id']);
               Data::deleteRevision($revision['rev_id']);
             }
             else {
@@ -856,6 +920,7 @@
           // move to archiv
           case 'va':
             Data::copy($revision['data_id'], $revision['rev_id'], 0, $lang);
+            Data::deleteFile($revision['rev_id']);
             Data::deleteRevision($revision['rev_id']);
             break;
         } // switch



More information about the Ros-diffs mailing list