From 6fa7ddba9a55f7b074a6a526fe0460a6c5331079 Mon Sep 17 00:00:00 2001
From: drigato <denise.rigato@sourcefabric.org>
Date: Mon, 28 Jul 2014 16:03:57 -0400
Subject: [PATCH] CC-5896: Store cloud files in separate table, inherited from
 cc_files

Added delete on cascade for cloud files
---
 .../application/models/airtime/map/CcFilesTableMap.php     | 2 +-
 .../application/models/airtime/map/CloudFileTableMap.php   | 4 ++--
 airtime_mvc/application/models/airtime/om/BaseCcFiles.php  | 7 +++----
 .../application/models/airtime/om/BaseCcFilesPeer.php      | 3 +++
 airtime_mvc/build/schema.xml                               | 2 +-
 airtime_mvc/build/sql/schema.sql                           | 3 ++-
 6 files changed, 12 insertions(+), 9 deletions(-)

diff --git a/airtime_mvc/application/models/airtime/map/CcFilesTableMap.php b/airtime_mvc/application/models/airtime/map/CcFilesTableMap.php
index 86a8ff2ab..fa50a21ef 100644
--- a/airtime_mvc/application/models/airtime/map/CcFilesTableMap.php
+++ b/airtime_mvc/application/models/airtime/map/CcFilesTableMap.php
@@ -120,7 +120,7 @@ class CcFilesTableMap extends TableMap
         $this->addRelation('FkOwner', 'CcSubjs', RelationMap::MANY_TO_ONE, array('owner_id' => 'id', ), null, null);
         $this->addRelation('CcSubjsRelatedByDbEditedby', 'CcSubjs', RelationMap::MANY_TO_ONE, array('editedby' => 'id', ), null, null);
         $this->addRelation('CcMusicDirs', 'CcMusicDirs', RelationMap::MANY_TO_ONE, array('directory' => 'id', ), null, null);
-        $this->addRelation('CloudFile', 'CloudFile', RelationMap::ONE_TO_MANY, array('id' => 'cc_file_id', ), null, null, 'CloudFiles');
+        $this->addRelation('CloudFile', 'CloudFile', RelationMap::ONE_TO_MANY, array('id' => 'cc_file_id', ), 'CASCADE', null, 'CloudFiles');
         $this->addRelation('CcShowInstances', 'CcShowInstances', RelationMap::ONE_TO_MANY, array('id' => 'file_id', ), 'CASCADE', null, 'CcShowInstancess');
         $this->addRelation('CcPlaylistcontents', 'CcPlaylistcontents', RelationMap::ONE_TO_MANY, array('id' => 'file_id', ), 'CASCADE', null, 'CcPlaylistcontentss');
         $this->addRelation('CcBlockcontents', 'CcBlockcontents', RelationMap::ONE_TO_MANY, array('id' => 'file_id', ), 'CASCADE', null, 'CcBlockcontentss');
diff --git a/airtime_mvc/application/models/airtime/map/CloudFileTableMap.php b/airtime_mvc/application/models/airtime/map/CloudFileTableMap.php
index 0c25ddfb3..898fc0b79 100644
--- a/airtime_mvc/application/models/airtime/map/CloudFileTableMap.php
+++ b/airtime_mvc/application/models/airtime/map/CloudFileTableMap.php
@@ -39,7 +39,7 @@ class CloudFileTableMap extends TableMap
         $this->setUseIdGenerator(true);
         $this->setPrimaryKeyMethodInfo('cloud_file_id_seq');
         // columns
-        $this->addPrimaryKey('id', 'Id', 'INTEGER', true, null, null);
+        $this->addPrimaryKey('id', 'DbId', 'INTEGER', true, null, null);
         $this->addColumn('resource_id', 'ResourceId', 'LONGVARCHAR', true, null, null);
         $this->addForeignKey('cc_file_id', 'CcFileId', 'INTEGER', 'cc_files', 'id', false, null, null);
         // validators
@@ -50,7 +50,7 @@ class CloudFileTableMap extends TableMap
      */
     public function buildRelations()
     {
-        $this->addRelation('CcFiles', 'CcFiles', RelationMap::MANY_TO_ONE, array('cc_file_id' => 'id', ), null, null);
+        $this->addRelation('CcFiles', 'CcFiles', RelationMap::MANY_TO_ONE, array('cc_file_id' => 'id', ), 'CASCADE', null);
     } // buildRelations()
 
     /**
diff --git a/airtime_mvc/application/models/airtime/om/BaseCcFiles.php b/airtime_mvc/application/models/airtime/om/BaseCcFiles.php
index 591bfa07e..e10a0946f 100644
--- a/airtime_mvc/application/models/airtime/om/BaseCcFiles.php
+++ b/airtime_mvc/application/models/airtime/om/BaseCcFiles.php
@@ -3405,10 +3405,9 @@ abstract class BaseCcFiles extends BaseObject implements Persistent
 
             if ($this->cloudFilesScheduledForDeletion !== null) {
                 if (!$this->cloudFilesScheduledForDeletion->isEmpty()) {
-                    foreach ($this->cloudFilesScheduledForDeletion as $cloudFile) {
-                        // need to save related object because we set the relation to null
-                        $cloudFile->save($con);
-                    }
+                    CloudFileQuery::create()
+                        ->filterByPrimaryKeys($this->cloudFilesScheduledForDeletion->getPrimaryKeys(false))
+                        ->delete($con);
                     $this->cloudFilesScheduledForDeletion = null;
                 }
             }
diff --git a/airtime_mvc/application/models/airtime/om/BaseCcFilesPeer.php b/airtime_mvc/application/models/airtime/om/BaseCcFilesPeer.php
index 5466f9541..c27d654c6 100644
--- a/airtime_mvc/application/models/airtime/om/BaseCcFilesPeer.php
+++ b/airtime_mvc/application/models/airtime/om/BaseCcFilesPeer.php
@@ -700,6 +700,9 @@ abstract class BaseCcFilesPeer
      */
     public static function clearRelatedInstancePool()
     {
+        // Invalidate objects in CloudFilePeer instance pool,
+        // since one or more of them may be deleted by ON DELETE CASCADE/SETNULL rule.
+        CloudFilePeer::clearInstancePool();
         // Invalidate objects in CcShowInstancesPeer instance pool,
         // since one or more of them may be deleted by ON DELETE CASCADE/SETNULL rule.
         CcShowInstancesPeer::clearInstancePool();
diff --git a/airtime_mvc/build/schema.xml b/airtime_mvc/build/schema.xml
index eb5b0ac14..8ba1c24d9 100644
--- a/airtime_mvc/build/schema.xml
+++ b/airtime_mvc/build/schema.xml
@@ -103,7 +103,7 @@
     <column name="id" phpName="DbId" required="true" primaryKey="true" autoIncrement="true" type="INTEGER"/>
     <column name="resource_id" phpName="ResourceId" type="LONGVARCHAR" required="true"/>
     <column name="cc_file_id" type="INTEGER"/>
-    <foreign-key foreignTable="cc_files">
+    <foreign-key foreignTable="cc_files" onDelete="CASCADE">
       <reference local="cc_file_id" foreign="id"/>
     </foreign-key>
     <behavior name="delegate">
diff --git a/airtime_mvc/build/sql/schema.sql b/airtime_mvc/build/sql/schema.sql
index 6925c928a..3c34da910 100644
--- a/airtime_mvc/build/sql/schema.sql
+++ b/airtime_mvc/build/sql/schema.sql
@@ -694,7 +694,8 @@ ALTER TABLE "cc_files" ADD CONSTRAINT "cc_music_dirs_folder_fkey"
 
 ALTER TABLE "cloud_file" ADD CONSTRAINT "cloud_file_FK_1"
     FOREIGN KEY ("cc_file_id")
-    REFERENCES "cc_files" ("id");
+    REFERENCES "cc_files" ("id")
+    ON DELETE CASCADE;
 
 ALTER TABLE "cc_perms" ADD CONSTRAINT "cc_perms_subj_fkey"
     FOREIGN KEY ("subj")