From 85c1f807cb322cfd45d830f985ea829f5e620494 Mon Sep 17 00:00:00 2001
From: Julien Muchembled <jm@nexedi.com>
Date: Tue, 12 Jul 2011 16:24:50 +0200
Subject: [PATCH] migrateToEmbeddedFile: migrate directly to portal type class
 + option to simulate

---
 .../ExtensionTemplateItem/BaseMigration.py    | 28 +++++++++----------
 .../ERP5Site_migrateToEmbeddedFile.xml        |  7 +++--
 bt5/erp5_base/bt/revision                     |  2 +-
 3 files changed, 19 insertions(+), 18 deletions(-)

diff --git a/bt5/erp5_base/ExtensionTemplateItem/BaseMigration.py b/bt5/erp5_base/ExtensionTemplateItem/BaseMigration.py
index 0877ad181b..59eb572276 100644
--- a/bt5/erp5_base/ExtensionTemplateItem/BaseMigration.py
+++ b/bt5/erp5_base/ExtensionTemplateItem/BaseMigration.py
@@ -26,19 +26,19 @@
 #
 ##############################################################################
 
-def migrateToEmbeddedFile(self):
-  """ Migrate all embedded "File" and "Image" 
+import erp5
+from Products.ERP5.Extensions.CheckPortalTypes import changeObjectClass
+
+def migrateToEmbeddedFile(self, force=0):
+  """Migrate all embedded "File" and "Image"
      objects to an unified "Embedded File
   """
-  from Products.ERP5.Extensions.CheckPortalTypes import changeObjectClass
-  from Products.ERP5.Document.EmbeddedFile import EmbeddedFile
-  
-  if self.getPortalType() in ('File', 'Image',) and \
-    self.getValidationState()=='embedded':
-    changeObjectClass(self.getParentValue(), self.id, EmbeddedFile)
-    instance = getattr(self.getParentValue(), self.id)
-    instance.portal_type = EmbeddedFile.portal_type
-    instance.reindexObject()
-    self.log("Migrated %s" %self.getRelativeUrl())
-    return self.getRelativeUrl()
-  
\ No newline at end of file
+  portal_type = self.getPortalType()
+  if portal_type in ('File', 'Image') and self.getValidationState()=='embedded':
+    embedded_type = 'Embedded File'
+    container = self.getParentValue()
+    id = self.id
+    if force == 1:
+      changeObjectClass(container, id, getattr(erp5.portal_type, embedded_type))
+      container._getOb(id).portal_type = embedded_type
+    return '%s: %s -> %s' % (self.getRelativeUrl(), portal_type, embedded_type),
diff --git a/bt5/erp5_base/SkinTemplateItem/portal_skins/erp5_base/ERP5Site_migrateToEmbeddedFile.xml b/bt5/erp5_base/SkinTemplateItem/portal_skins/erp5_base/ERP5Site_migrateToEmbeddedFile.xml
index 9df6713ff1..10785ec6ec 100644
--- a/bt5/erp5_base/SkinTemplateItem/portal_skins/erp5_base/ERP5Site_migrateToEmbeddedFile.xml
+++ b/bt5/erp5_base/SkinTemplateItem/portal_skins/erp5_base/ERP5Site_migrateToEmbeddedFile.xml
@@ -55,9 +55,10 @@
   objects to an unified "Embedded File".\n
 """\n
 active_process = context.getPortalObject().portal_activities.newActiveProcess()\n
-context.ERP5Site_checkDataWithScript("Base_migrateToEmbeddedFile", \n
-                                      tag="migrate",\n
-                                      active_process=active_process.getPath())\n
+context.ERP5Site_checkDataWithScript("Base_migrateToEmbeddedFile",\n
+                                     tag="migrate",\n
+                                     active_process=active_process.getPath(),\n
+                                     method_kw=dict(force=1))\n
 \n
 print "Migration started with process id: %s" %active_process.getPath()\n
 return printed\n
diff --git a/bt5/erp5_base/bt/revision b/bt5/erp5_base/bt/revision
index 6f17eede7b..be9c5191bd 100644
--- a/bt5/erp5_base/bt/revision
+++ b/bt5/erp5_base/bt/revision
@@ -1 +1 @@
-985
\ No newline at end of file
+986
\ No newline at end of file
-- 
2.30.9