From 122aaf078dbfcbbdfd405eb18953947922c968b9 Mon Sep 17 00:00:00 2001
From: Nicolas Delaby <nicolas@nexedi.com>
Date: Wed, 1 Dec 2010 15:14:07 +0000
Subject: [PATCH] Provide one instance of portal_url_registry Update
 TypeBAsedMethod script ot new API of DMS ingestion

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@40975 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 .../dms_ingestion.xml                         |   9 +-
 .../erp5_ingestion/Base_contribute.xml        |  13 +-
 .../erp5_ingestion/Base_registerUrl.xml       | 124 +++++++++
 .../Base_viewIngestionFieldLibrary.xml        |   6 +-
 .../my_list_mode_listbox.xml                  |  96 +++++++
 ...butionTool_getPropertyDictFromFileName.xml | 138 +---------
 ...butionTool_getPropertyDictFromFilename.xml | 247 ++++++++++++++++++
 ...convertToBaseFormatAndDiscoverMetadata.xml |  17 +-
 ...rredDocumentMetadataDiscoveryOrderList.xml |   9 +-
 .../Document_getPropertyDictFromContent.xml   |  30 +--
 .../Document_getPropertyDictFromInput.xml     | 135 ++++++++++
 .../UrlRegistryTool_clearUrlRegistryTool.xml  | 126 +++++++++
 .../UrlRegistryTool_rebuildUrlRegistry.xml    | 126 +++++++++
 ...UrlRegistryTool_viewRebuildUrlRegistry.xml | 144 ++++++++++
 ...egistryTool_viewUnregisterAllUrlDialog.xml | 144 ++++++++++
 ...RegistryTool_viewUrlRegistryPluginList.xml | 152 +++++++++++
 .../listbox.xml                               | 113 ++++++++
 .../erp5_web_content_layout_test.xml          | 187 +++++++++++++
 .../applicable_layout.xml                     |  90 +++++++
 .../section_content_list.xml                  |  90 +++++++
 .../subsection_list.xml                       |  90 +++++++
 .../erp5_web_layout_test.xml                  | 196 ++++++++++++++
 .../applicable_layout.xml                     | 131 ++++++++++
 .../language_selector.xml                     | 136 ++++++++++
 .../section_content_list.xml                  | 156 +++++++++++
 .../erp5_web_layout_test/subsection_list.xml  | 156 +++++++++++
 .../TestTemplateItem/testLiveIngestion.py     |  10 +-
 .../ToolTemplateItem/portal_url_registry.xml  |  26 ++
 bt5/erp5_ingestion/bt/revision                |   2 +-
 bt5/erp5_ingestion/bt/template_tool_id_list   |   3 +-
 30 files changed, 2708 insertions(+), 194 deletions(-)
 create mode 100644 bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/Base_registerUrl.xml
 create mode 100644 bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/Base_viewIngestionFieldLibrary/my_list_mode_listbox.xml
 create mode 100644 bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/ContributionTool_getPropertyDictFromFilename.xml
 create mode 100644 bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/Document_getPropertyDictFromInput.xml
 create mode 100644 bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/UrlRegistryTool_clearUrlRegistryTool.xml
 create mode 100644 bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/UrlRegistryTool_rebuildUrlRegistry.xml
 create mode 100644 bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/UrlRegistryTool_viewRebuildUrlRegistry.xml
 create mode 100644 bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/UrlRegistryTool_viewUnregisterAllUrlDialog.xml
 create mode 100644 bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/UrlRegistryTool_viewUrlRegistryPluginList.xml
 create mode 100644 bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/UrlRegistryTool_viewUrlRegistryPluginList/listbox.xml
 create mode 100644 bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion_test/erp5_web_content_layout_test.xml
 create mode 100644 bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion_test/erp5_web_content_layout_test/applicable_layout.xml
 create mode 100644 bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion_test/erp5_web_content_layout_test/section_content_list.xml
 create mode 100644 bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion_test/erp5_web_content_layout_test/subsection_list.xml
 create mode 100644 bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion_test/erp5_web_layout_test.xml
 create mode 100644 bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion_test/erp5_web_layout_test/applicable_layout.xml
 create mode 100644 bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion_test/erp5_web_layout_test/language_selector.xml
 create mode 100644 bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion_test/erp5_web_layout_test/section_content_list.xml
 create mode 100644 bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion_test/erp5_web_layout_test/subsection_list.xml
 create mode 100644 bt5/erp5_ingestion/ToolTemplateItem/portal_url_registry.xml

diff --git a/bt5/erp5_ingestion/PathTemplateItem/portal_contribution_registry/dms_ingestion.xml b/bt5/erp5_ingestion/PathTemplateItem/portal_contribution_registry/dms_ingestion.xml
index 79aab333c4..b4ff1b9811 100644
--- a/bt5/erp5_ingestion/PathTemplateItem/portal_contribution_registry/dms_ingestion.xml
+++ b/bt5/erp5_ingestion/PathTemplateItem/portal_contribution_registry/dms_ingestion.xml
@@ -2,10 +2,7 @@
 <ZopeData>
   <record id="1" aka="AAAAAAAAAAE=">
     <pickle>
-      <tuple>
-        <global name="ContributionPredicate" module="Products.ERP5Type.Document.ContributionPredicate"/>
-        <tuple/>
-      </tuple>
+      <global name="ContributionPredicate" module="Products.ERP5Type.Document.ContributionPredicate"/>
     </pickle>
     <pickle>
       <dictionary>
@@ -14,7 +11,7 @@
             <value>
               <dictionary>
                 <item>
-                    <key> <string>file_extension</string> </key>
+                    <key> <string>source_reference</string> </key>
                     <value>
                       <list>
                         <string>emx</string>
@@ -34,7 +31,7 @@
             <key> <string>criterion_property</string> </key>
             <value>
               <tuple>
-                <string>file_extension</string>
+                <string>source_reference</string>
               </tuple>
             </value>
         </item>
diff --git a/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/Base_contribute.xml b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/Base_contribute.xml
index f451b22d7c..b0fe8807d0 100644
--- a/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/Base_contribute.xml
+++ b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/Base_contribute.xml
@@ -95,12 +95,12 @@ if url is not None:\n
       redirect_url= \'%s?%s\' %(cancel_url, \n
                             make_query(dict(portal_status_message=translateString("Wrong or not accessible URL address."))))\n
       return context.REQUEST.RESPONSE.redirect(redirect_url)\n
-  file_name=document.getId()\n
+  filename=document.getId()\n
 else:\n
   # contribute file\n
-  file_name = getattr(file, \'filename\', None)\n
+  filename = getattr(file, \'filename\', None)\n
   document_kw.update({\'file\': file,\n
-                      \'file_name\': file_name,})\n
+                      \'filename\': filename,})\n
   document = portal_contributions.newContent(**document_kw)\n
 \n
 is_existing_document_updated = False\n
@@ -110,8 +110,9 @@ if synchronous_metadata_discovery:\n
   if document.isSupportBaseDataConversion():\n
     document.processFile()\n
   merged_document = document.Document_convertToBaseFormatAndDiscoverMetadata(\n
-                               file_name=file_name,\n
-                               user_login=user_login)\n
+                               filename=filename,\n
+                               user_login=user_login,\n
+                               input_parameter_dict=document_kw)\n
   is_existing_document_updated = (merged_document!=document)\n
   document = merged_document\n
 # introspect document and find editable properties\n
@@ -228,7 +229,7 @@ return document\n
                             <string>_apply_</string>
                             <string>document</string>
                             <string>dict</string>
-                            <string>file_name</string>
+                            <string>filename</string>
                             <string>getattr</string>
                             <string>is_existing_document_updated</string>
                             <string>merged_document</string>
diff --git a/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/Base_registerUrl.xml b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/Base_registerUrl.xml
new file mode 100644
index 0000000000..7030ab48dc
--- /dev/null
+++ b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/Base_registerUrl.xml
@@ -0,0 +1,124 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>Script_magic</string> </key>
+            <value> <int>3</int> </value>
+        </item>
+        <item>
+            <key> <string>_bind_names</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>_asgns</string> </key>
+                        <value>
+                          <dictionary>
+                            <item>
+                                <key> <string>name_container</string> </key>
+                                <value> <string>container</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_context</string> </key>
+                                <value> <string>context</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_m_self</string> </key>
+                                <value> <string>script</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_subpath</string> </key>
+                                <value> <string>traverse_subpath</string> </value>
+                            </item>
+                          </dictionary>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>_body</string> </key>
+            <value> <string>if context.hasUrlString():\n
+  portal = context.getPortalObject()\n
+  portal_url_registry = portal.portal_url_registry\n
+  portal_url_registry.registerURL(context.asNormalisedURL(), context.getReference(), context=context)\n
+</string> </value>
+        </item>
+        <item>
+            <key> <string>_code</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_params</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>errors</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>func_code</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="FuncCode" module="Shared.DC.Scripts.Signature"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>co_argcount</string> </key>
+                        <value> <int>0</int> </value>
+                    </item>
+                    <item>
+                        <key> <string>co_varnames</string> </key>
+                        <value>
+                          <tuple>
+                            <string>_getattr_</string>
+                            <string>context</string>
+                            <string>portal</string>
+                            <string>portal_url_registry</string>
+                          </tuple>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>func_defaults</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>Base_registerUrl</string> </value>
+        </item>
+        <item>
+            <key> <string>warnings</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/Base_viewIngestionFieldLibrary.xml b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/Base_viewIngestionFieldLibrary.xml
index c693493632..142a241e7a 100644
--- a/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/Base_viewIngestionFieldLibrary.xml
+++ b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/Base_viewIngestionFieldLibrary.xml
@@ -2,10 +2,7 @@
 <ZopeData>
   <record id="1" aka="AAAAAAAAAAE=">
     <pickle>
-      <tuple>
-        <global name="ERP5Form" module="Products.ERP5Form.Form"/>
-        <tuple/>
-      </tuple>
+      <global name="ERP5Form" module="Products.ERP5Form.Form"/>
     </pickle>
     <pickle>
       <dictionary>
@@ -92,6 +89,7 @@
                         <string>my_list_field</string>
                         <string>my_string_field</string>
                         <string>my_file_field</string>
+                        <string>my_list_mode_listbox</string>
                       </list>
                     </value>
                 </item>
diff --git a/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/Base_viewIngestionFieldLibrary/my_list_mode_listbox.xml b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/Base_viewIngestionFieldLibrary/my_list_mode_listbox.xml
new file mode 100644
index 0000000000..6d9bda2333
--- /dev/null
+++ b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/Base_viewIngestionFieldLibrary/my_list_mode_listbox.xml
@@ -0,0 +1,96 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>delegated_list</string> </key>
+            <value>
+              <list>
+                <string>title</string>
+              </list>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>my_list_mode_listbox</string> </value>
+        </item>
+        <item>
+            <key> <string>message_values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>external_validator_failed</string> </key>
+                    <value> <string>The input failed the external validator.</string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>overrides</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>tales</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string>my_list_mode_listbox</string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string>Base_viewFieldLibrary</string> </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string>Click to edit the target</string> </value>
+                </item>
+                <item>
+                    <key> <string>title</string> </key>
+                    <value> <string>Listbox List</string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/ContributionTool_getPropertyDictFromFileName.xml b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/ContributionTool_getPropertyDictFromFileName.xml
index 61dcb0297c..227de2d0b4 100644
--- a/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/ContributionTool_getPropertyDictFromFileName.xml
+++ b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/ContributionTool_getPropertyDictFromFileName.xml
@@ -2,10 +2,7 @@
 <ZopeData>
   <record id="1" aka="AAAAAAAAAAE=">
     <pickle>
-      <tuple>
-        <global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
-        <tuple/>
-      </tuple>
+      <global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
     </pickle>
     <pickle>
       <dictionary>
@@ -53,112 +50,9 @@
         </item>
         <item>
             <key> <string>_body</string> </key>
-            <value> <string>"""\n
-  Called by portal_contributions.getPropertyDictFromFilename\n
-\n
-  Receives file name and a dict of properties found in file name by\n
-  using regular expression defined in preferences. \n
-\n
-  Uses provided arguments to generate document\'s reference, language, \n
-  title, follow_up and/or source_conference.\n
-\n
-  If necessary can do additional things (like mapping\n
-  portal type id to portal type name).\n
-\n
-  Type-based.\n
-"""\n
-\n
-# convert language to lowercase\n
-if property_dict.has_key(\'language\'):\n
-  property_dict[\'language\'] = property_dict[\'language\'].lower()\n
-\n
-language = property_dict.get(\'language\', \'en\')\n
-version = property_dict.get(\'version\', \'001\')\n
-local_reference = property_dict.get(\'local_reference\', \'undefined\')\n
-local_id = property_dict.get(\'local_id\', \'undefined\')\n
-reference = property_dict.get(\'reference\', None)\n
-node_reference = property_dict.get(\'node_reference\', None)\n
-group_reference_path = property_dict.get(\'group_reference_path\', None)\n
-source_conference_reference = property_dict.get(\'source_conference_reference\', None)\n
-follow_up_reference = property_dict.get(\'follow_up_reference\', None)\n
-\n
-new_dict = dict(language = language, \n
-                version = version)\n
-\n
-if reference:\n
-  # we get directly extracted reference in property_dict (from re pattern)\n
-  # this method has highest priority\n
-  pass\n
-elif node_reference:\n
-  # generate document\'s reference using project reference\n
-  reference = \'%s-%s\' % (node_reference, local_reference)\n
-  node = context.portal_catalog.getResultValue(reference=node_reference)\n
-\n
-  if node is not None:\n
-    node_portal_type = node.getPortalType()\n
-    if node_portal_type in context.getPortalTicketTypeList()+context.getPortalProjectTypeList():\n
-      # For a project or a ticket, associate it explicitely to the document\n
-      new_dict[\'follow_up\'] = node.getRelativeUrl()\n
-    elif node_portal_type == \'Category\':\n
-      # Check if it\'s a group\n
-      # FIXME XXX Maybe we want to make it usable for all categories ?\n
-      # new_dict[node.getBaseCategory().getId()] = node.getCategoryRelativeUrl()\n
-      if node.getBaseCategory().getId() == \'group\':\n
-        new_dict[\'group\'] = node.getCategoryRelativeUrl()\n
-      elif node.getBaseCategory().getId() == \'publication_section\':\n
-        new_dict[\'publication_section\'] = node.getCategoryRelativeUrl()\n
-    else:\n
-      # It seems to be a business document reference\n
-      # Should be detected automatically, and no explicit relation is required\n
-      pass\n
-\n
-# XXX Is those hardcoded part required ?\n
-# For now, keep it for compatibility\n
-elif follow_up_reference:\n
-  # generate document\'s reference using project reference\n
-  reference = \'P-%s-%s\' %(follow_up_reference, local_id)\n
-  project = context.portal_catalog.getResultValue(reference = follow_up_reference,\n
-                                                  portal_type = \'Project\')\n
-  if project:\n
-    new_dict[\'follow_up\'] = project.getRelativeUrl()\n
-elif source_conference_reference:\n
-  # generate document\'s reference using conference reference\n
-  reference = \'C-%s-%s\' % (source_conference_reference, local_id)\n
-  conference = context.portal_catalog.getResultValue(reference = follow_up_reference,\n
-                                                     portal_type = \'Conference\')\n
-  if conference:\n
-    new_dict[\'source_conference\'] = conference.getRelativeUrl()\n
-elif group_reference_path:\n
-  # generate document\'s reference using conference reference\n
-  reference = \'%s-%s\' % (group_reference_path, local_id)\n
-  group_reference_list = group_reference_path.split(\'-\')\n
-  if group_reference_list:\n
-    group_id = group_reference_list[0]\n
-    category = context.portal_catalog.getResultValue(reference = group_id, \n
-                                                     portal_type = \'Category\')\n
-    if category is not None and category.getBaseCategory().getId()==\'group\':\n
-      for group_id in group_reference_list[1:]:\n
-        category = context.portal_catalog.getResultValue(reference = group_id, \n
-                                                         parent_uid = category.getUid(),\n
-                                                         portal_type = \'Category\')\n
-        if category is None: \n
-          break\n
-  if category is not None:\n
-     new_dict[\'group\'] = \'/\'.join(category.getRelativeUrl().split(\'/\')[1:])\n
-\n
-\n
-else:\n
-  # no reference could be found\n
-  # XXX: This can break DMS/KM functionality especially revision support!\n
-  reference = None\n
-\n
-if reference:\n
-  new_dict[\'reference\'] = reference\n
-\n
-# Set title to file_name by default\n
-new_dict[\'title\'] = property_dict.get(\'title\', file_name.rsplit(\'.\', 1)[0])\n
-\n
-return new_dict\n
+            <value> <string>from Products.ERP5Type.Log import log\n
+log(\'DepracationWarning: Please use ContributionTool_getPropertyDictFromFilename\')\n
+return context.ContributionTool_getPropertyDictFromFilename(file_name, property_dict)\n
 </string> </value>
         </item>
         <item>
@@ -197,30 +91,10 @@ return new_dict\n
                           <tuple>
                             <string>file_name</string>
                             <string>property_dict</string>
+                            <string>Products.ERP5Type.Log</string>
+                            <string>log</string>
                             <string>_getattr_</string>
-                            <string>_getitem_</string>
-                            <string>_write_</string>
-                            <string>language</string>
-                            <string>version</string>
-                            <string>local_reference</string>
-                            <string>local_id</string>
-                            <string>None</string>
-                            <string>reference</string>
-                            <string>node_reference</string>
-                            <string>group_reference_path</string>
-                            <string>source_conference_reference</string>
-                            <string>follow_up_reference</string>
-                            <string>dict</string>
-                            <string>new_dict</string>
                             <string>context</string>
-                            <string>node</string>
-                            <string>node_portal_type</string>
-                            <string>project</string>
-                            <string>conference</string>
-                            <string>group_reference_list</string>
-                            <string>group_id</string>
-                            <string>category</string>
-                            <string>_getiter_</string>
                           </tuple>
                         </value>
                     </item>
diff --git a/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/ContributionTool_getPropertyDictFromFilename.xml b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/ContributionTool_getPropertyDictFromFilename.xml
new file mode 100644
index 0000000000..88fd1fb076
--- /dev/null
+++ b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/ContributionTool_getPropertyDictFromFilename.xml
@@ -0,0 +1,247 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>Script_magic</string> </key>
+            <value> <int>3</int> </value>
+        </item>
+        <item>
+            <key> <string>_bind_names</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>_asgns</string> </key>
+                        <value>
+                          <dictionary>
+                            <item>
+                                <key> <string>name_container</string> </key>
+                                <value> <string>container</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_context</string> </key>
+                                <value> <string>context</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_m_self</string> </key>
+                                <value> <string>script</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_subpath</string> </key>
+                                <value> <string>traverse_subpath</string> </value>
+                            </item>
+                          </dictionary>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>_body</string> </key>
+            <value> <string>"""\n
+  Called by portal_contributions.getPropertyDictFromFilename\n
+\n
+  Receives file name and a dict of properties found in file name by\n
+  using regular expression defined in preferences. \n
+\n
+  Uses provided arguments to generate document\'s reference, language, \n
+  title, follow_up and/or source_conference.\n
+\n
+  If necessary can do additional things (like mapping\n
+  portal type id to portal type name).\n
+\n
+  Type-based.\n
+"""\n
+# convert language to lowercase\n
+if property_dict.has_key(\'language\'):\n
+  property_dict[\'language\'] = property_dict[\'language\'].lower()\n
+\n
+language = property_dict.get(\'language\', \'en\')\n
+version = property_dict.get(\'version\', \'001\')\n
+local_reference = property_dict.get(\'local_reference\', \'undefined\')\n
+local_id = property_dict.get(\'local_id\', \'undefined\')\n
+reference = property_dict.get(\'reference\', None)\n
+node_reference = property_dict.get(\'node_reference\', None)\n
+group_reference_path = property_dict.get(\'group_reference_path\', None)\n
+source_conference_reference = property_dict.get(\'source_conference_reference\', None)\n
+follow_up_reference = property_dict.get(\'follow_up_reference\', None)\n
+\n
+new_dict = dict(language = language, \n
+                version = version)\n
+\n
+if reference:\n
+  # we get directly extracted reference in property_dict (from re pattern)\n
+  # this method has highest priority\n
+  pass\n
+elif node_reference:\n
+  # generate document\'s reference using project reference\n
+  reference = \'%s-%s\' % (node_reference, local_reference)\n
+  node = context.portal_catalog.getResultValue(reference=node_reference)\n
+\n
+  if node is not None:\n
+    node_portal_type = node.getPortalType()\n
+    if node_portal_type in context.getPortalTicketTypeList()+context.getPortalProjectTypeList():\n
+      # For a project or a ticket, associate it explicitely to the document\n
+      new_dict[\'follow_up\'] = node.getRelativeUrl()\n
+    elif node_portal_type == \'Category\':\n
+      # Check if it\'s a group\n
+      # FIXME XXX Maybe we want to make it usable for all categories ?\n
+      # new_dict[node.getBaseCategory().getId()] = node.getCategoryRelativeUrl()\n
+      if node.getBaseCategory().getId() == \'group\':\n
+        new_dict[\'group\'] = node.getCategoryRelativeUrl()\n
+      elif node.getBaseCategory().getId() == \'publication_section\':\n
+        new_dict[\'publication_section\'] = node.getCategoryRelativeUrl()\n
+    else:\n
+      # It seems to be a business document reference\n
+      # Should be detected automatically, and no explicit relation is required\n
+      pass\n
+\n
+# XXX Is those hardcoded part required ?\n
+# For now, keep it for compatibility\n
+elif follow_up_reference:\n
+  # generate document\'s reference using project reference\n
+  reference = \'P-%s-%s\' %(follow_up_reference, local_id)\n
+  project = context.portal_catalog.getResultValue(reference = follow_up_reference,\n
+                                                  portal_type = \'Project\')\n
+  if project:\n
+    new_dict[\'follow_up\'] = project.getRelativeUrl()\n
+elif source_conference_reference:\n
+  # generate document\'s reference using conference reference\n
+  reference = \'C-%s-%s\' % (source_conference_reference, local_id)\n
+  conference = context.portal_catalog.getResultValue(reference = follow_up_reference,\n
+                                                     portal_type = \'Conference\')\n
+  if conference:\n
+    new_dict[\'source_conference\'] = conference.getRelativeUrl()\n
+elif group_reference_path:\n
+  # generate document\'s reference using conference reference\n
+  reference = \'%s-%s\' % (group_reference_path, local_id)\n
+  group_reference_list = group_reference_path.split(\'-\')\n
+  if group_reference_list:\n
+    group_id = group_reference_list[0]\n
+    category = context.portal_catalog.getResultValue(reference = group_id, \n
+                                                     portal_type = \'Category\')\n
+    if category is not None and category.getBaseCategory().getId()==\'group\':\n
+      for group_id in group_reference_list[1:]:\n
+        category = context.portal_catalog.getResultValue(reference = group_id, \n
+                                                         parent_uid = category.getUid(),\n
+                                                         portal_type = \'Category\')\n
+        if category is None: \n
+          break\n
+  if category is not None:\n
+     new_dict[\'group\'] = \'/\'.join(category.getRelativeUrl().split(\'/\')[1:])\n
+\n
+\n
+else:\n
+  # no reference could be found\n
+  # XXX: This can break DMS/KM functionality especially revision support!\n
+  reference = None\n
+\n
+if reference:\n
+  new_dict[\'reference\'] = reference\n
+\n
+# Set title to file_name by default\n
+new_dict[\'title\'] = property_dict.get(\'title\', file_name.rsplit(\'.\', 1)[0])\n
+\n
+return new_dict\n
+</string> </value>
+        </item>
+        <item>
+            <key> <string>_code</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_params</string> </key>
+            <value> <string>file_name, property_dict</string> </value>
+        </item>
+        <item>
+            <key> <string>errors</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>func_code</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="FuncCode" module="Shared.DC.Scripts.Signature"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>co_argcount</string> </key>
+                        <value> <int>2</int> </value>
+                    </item>
+                    <item>
+                        <key> <string>co_varnames</string> </key>
+                        <value>
+                          <tuple>
+                            <string>file_name</string>
+                            <string>property_dict</string>
+                            <string>_getattr_</string>
+                            <string>_getitem_</string>
+                            <string>_write_</string>
+                            <string>language</string>
+                            <string>version</string>
+                            <string>local_reference</string>
+                            <string>local_id</string>
+                            <string>None</string>
+                            <string>reference</string>
+                            <string>node_reference</string>
+                            <string>group_reference_path</string>
+                            <string>source_conference_reference</string>
+                            <string>follow_up_reference</string>
+                            <string>dict</string>
+                            <string>new_dict</string>
+                            <string>context</string>
+                            <string>node</string>
+                            <string>node_portal_type</string>
+                            <string>project</string>
+                            <string>conference</string>
+                            <string>group_reference_list</string>
+                            <string>group_id</string>
+                            <string>category</string>
+                            <string>_getiter_</string>
+                          </tuple>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>func_defaults</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>ContributionTool_getPropertyDictFromFilename</string> </value>
+        </item>
+        <item>
+            <key> <string>warnings</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/Document_convertToBaseFormatAndDiscoverMetadata.xml b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/Document_convertToBaseFormatAndDiscoverMetadata.xml
index c81df5fa45..a72820b4a8 100644
--- a/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/Document_convertToBaseFormatAndDiscoverMetadata.xml
+++ b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/Document_convertToBaseFormatAndDiscoverMetadata.xml
@@ -2,10 +2,7 @@
 <ZopeData>
   <record id="1" aka="AAAAAAAAAAE=">
     <pickle>
-      <tuple>
-        <global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
-        <tuple/>
-      </tuple>
+      <global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
     </pickle>
     <pickle>
       <dictionary>
@@ -62,7 +59,9 @@
 if context.isSupportBaseDataConversion():\n
   context.convertToBaseFormat()\n
 \n
-return context.discoverMetadata(file_name, user_login)\n
+return context.discoverMetadata(filename=filename,\n
+                                user_login=user_login,\n
+                                input_parameter_dict=input_parameter_dict)\n
 </string> </value>
         </item>
         <item>
@@ -73,7 +72,7 @@ return context.discoverMetadata(file_name, user_login)\n
         </item>
         <item>
             <key> <string>_params</string> </key>
-            <value> <string>file_name=None, user_login=None</string> </value>
+            <value> <string>filename=None, user_login=None, input_parameter_dict=None</string> </value>
         </item>
         <item>
             <key> <string>errors</string> </key>
@@ -93,14 +92,15 @@ return context.discoverMetadata(file_name, user_login)\n
                   <dictionary>
                     <item>
                         <key> <string>co_argcount</string> </key>
-                        <value> <int>2</int> </value>
+                        <value> <int>3</int> </value>
                     </item>
                     <item>
                         <key> <string>co_varnames</string> </key>
                         <value>
                           <tuple>
-                            <string>file_name</string>
+                            <string>filename</string>
                             <string>user_login</string>
+                            <string>input_parameter_dict</string>
                             <string>_getattr_</string>
                             <string>context</string>
                           </tuple>
@@ -117,6 +117,7 @@ return context.discoverMetadata(file_name, user_login)\n
               <tuple>
                 <none/>
                 <none/>
+                <none/>
               </tuple>
             </value>
         </item>
diff --git a/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/Document_getPreferredDocumentMetadataDiscoveryOrderList.xml b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/Document_getPreferredDocumentMetadataDiscoveryOrderList.xml
index 1aacc197bb..bd19da8191 100644
--- a/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/Document_getPreferredDocumentMetadataDiscoveryOrderList.xml
+++ b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/Document_getPreferredDocumentMetadataDiscoveryOrderList.xml
@@ -2,10 +2,7 @@
 <ZopeData>
   <record id="1" aka="AAAAAAAAAAE=">
     <pickle>
-      <tuple>
-        <global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
-        <tuple/>
-      </tuple>
+      <global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
     </pickle>
     <pickle>
       <dictionary>
@@ -68,12 +65,12 @@ from the contribute form.\n
 \n
  * \'content\' - metadata available in document content itself\n
 \n
- * \'file_name\' - file name of the ingested document\n
+ * \'filename\' - filename of the ingested document\n
 \n
  * \'user_login\' - user login of the logged in user\n
 \n
 """\n
-order = [\'input\', \'content\', \'file_name\', \'user_login\']\n
+order = [\'input\', \'content\', \'filename\', \'user_login\']\n
 return order\n
 </string> </value>
         </item>
diff --git a/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/Document_getPropertyDictFromContent.xml b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/Document_getPropertyDictFromContent.xml
index 4b286c5389..7f7044bb24 100644
--- a/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/Document_getPropertyDictFromContent.xml
+++ b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/Document_getPropertyDictFromContent.xml
@@ -2,10 +2,7 @@
 <ZopeData>
   <record id="1" aka="AAAAAAAAAAE=">
     <pickle>
-      <tuple>
-        <global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
-        <tuple/>
-      </tuple>
+      <global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
     </pickle>
     <pickle>
       <dictionary>
@@ -54,7 +51,7 @@
         <item>
             <key> <string>_body</string> </key>
             <value> <string>"""\n
-This script analyzes the document content (text_content) to find properties that might\n
+This script analyzes the document content to find properties that might\n
 be somehow encoded in the text. It is called by Document.getPropertyDictFromContent\n
 method.\n
 \n
@@ -62,7 +59,6 @@ To use, write your own method (probably External Method, since it is most likely
 to use re) that would analyze text content of the doc\n
 and return a dictionary of properties.\n
 """\n
-\n
 information = context.getContentInformation()\n
 \n
 result = {}\n
@@ -83,15 +79,6 @@ for k, v in information.items():  \n
     elif key == \'keywords\':\n
       result[\'subject_list\'] = v.split()\n
 \n
-object = object or context\n
-\n
-#try:\n
-#  content = content or context.asText()\n
-#except AttributeError:\n
-#  return result\n
-\n
-ptype = ptype or context.getPortalType()\n
-\n
 # Erase titles which are meaningless\n
 title = result.get(\'title\', None)\n
 if title:\n
@@ -113,7 +100,7 @@ return result\n
         </item>
         <item>
             <key> <string>_params</string> </key>
-            <value> <string>object=None, content=None, ptype=None</string> </value>
+            <value> <string></string> </value>
         </item>
         <item>
             <key> <string>errors</string> </key>
@@ -133,15 +120,12 @@ return result\n
                   <dictionary>
                     <item>
                         <key> <string>co_argcount</string> </key>
-                        <value> <int>3</int> </value>
+                        <value> <int>0</int> </value>
                     </item>
                     <item>
                         <key> <string>co_varnames</string> </key>
                         <value>
                           <tuple>
-                            <string>object</string>
-                            <string>content</string>
-                            <string>ptype</string>
                             <string>_getattr_</string>
                             <string>context</string>
                             <string>information</string>
@@ -168,11 +152,7 @@ return result\n
         <item>
             <key> <string>func_defaults</string> </key>
             <value>
-              <tuple>
-                <none/>
-                <none/>
-                <none/>
-              </tuple>
+              <none/>
             </value>
         </item>
         <item>
diff --git a/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/Document_getPropertyDictFromInput.xml b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/Document_getPropertyDictFromInput.xml
new file mode 100644
index 0000000000..375084ac31
--- /dev/null
+++ b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/Document_getPropertyDictFromInput.xml
@@ -0,0 +1,135 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>Script_magic</string> </key>
+            <value> <int>3</int> </value>
+        </item>
+        <item>
+            <key> <string>_bind_names</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>_asgns</string> </key>
+                        <value>
+                          <dictionary>
+                            <item>
+                                <key> <string>name_container</string> </key>
+                                <value> <string>container</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_context</string> </key>
+                                <value> <string>context</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_m_self</string> </key>
+                                <value> <string>script</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_subpath</string> </key>
+                                <value> <string>traverse_subpath</string> </value>
+                            </item>
+                          </dictionary>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>_body</string> </key>
+            <value> <string>return_dict = {}\n
+\n
+# All properties that portal_contributions.newContent expose\n
+# in its signature that shouldn\'t be stored on document itself\n
+technical_argument_list = (\'url\', \'container\', \'container_path\', \'discover_metadata\', \'user_login\',)\n
+for key, value in argument_dict.items():\n
+  if key not in technical_argument_list and value not in (None, \'\'):\n
+    return_dict[key] = value\n
+\n
+return return_dict\n
+</string> </value>
+        </item>
+        <item>
+            <key> <string>_code</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_params</string> </key>
+            <value> <string>argument_dict</string> </value>
+        </item>
+        <item>
+            <key> <string>errors</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>func_code</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="FuncCode" module="Shared.DC.Scripts.Signature"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>co_argcount</string> </key>
+                        <value> <int>1</int> </value>
+                    </item>
+                    <item>
+                        <key> <string>co_varnames</string> </key>
+                        <value>
+                          <tuple>
+                            <string>argument_dict</string>
+                            <string>return_dict</string>
+                            <string>technical_argument_list</string>
+                            <string>_getiter_</string>
+                            <string>_getattr_</string>
+                            <string>key</string>
+                            <string>value</string>
+                            <string>None</string>
+                            <string>_write_</string>
+                          </tuple>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>func_defaults</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>Document_getPropertyDictFromInput</string> </value>
+        </item>
+        <item>
+            <key> <string>warnings</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/UrlRegistryTool_clearUrlRegistryTool.xml b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/UrlRegistryTool_clearUrlRegistryTool.xml
new file mode 100644
index 0000000000..53c9d9045b
--- /dev/null
+++ b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/UrlRegistryTool_clearUrlRegistryTool.xml
@@ -0,0 +1,126 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>Script_magic</string> </key>
+            <value> <int>3</int> </value>
+        </item>
+        <item>
+            <key> <string>_bind_names</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>_asgns</string> </key>
+                        <value>
+                          <dictionary>
+                            <item>
+                                <key> <string>name_container</string> </key>
+                                <value> <string>container</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_context</string> </key>
+                                <value> <string>context</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_m_self</string> </key>
+                                <value> <string>script</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_subpath</string> </key>
+                                <value> <string>traverse_subpath</string> </value>
+                            </item>
+                          </dictionary>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>_body</string> </key>
+            <value> <string>context.clearUrlRegistryTool()\n
+message = context.Base_translateString(\'Url Registry Tool cleared.\')\n
+context.Base_redirect(form_id, keep_items={\'portal_status_message\': message})\n
+</string> </value>
+        </item>
+        <item>
+            <key> <string>_code</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_params</string> </key>
+            <value> <string>form_id=None, **kw</string> </value>
+        </item>
+        <item>
+            <key> <string>errors</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>func_code</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="FuncCode" module="Shared.DC.Scripts.Signature"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>co_argcount</string> </key>
+                        <value> <int>1</int> </value>
+                    </item>
+                    <item>
+                        <key> <string>co_varnames</string> </key>
+                        <value>
+                          <tuple>
+                            <string>form_id</string>
+                            <string>kw</string>
+                            <string>_getattr_</string>
+                            <string>context</string>
+                            <string>message</string>
+                          </tuple>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>func_defaults</string> </key>
+            <value>
+              <tuple>
+                <none/>
+              </tuple>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>UrlRegistryTool_clearUrlRegistryTool</string> </value>
+        </item>
+        <item>
+            <key> <string>warnings</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/UrlRegistryTool_rebuildUrlRegistry.xml b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/UrlRegistryTool_rebuildUrlRegistry.xml
new file mode 100644
index 0000000000..62506750be
--- /dev/null
+++ b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/UrlRegistryTool_rebuildUrlRegistry.xml
@@ -0,0 +1,126 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>Script_magic</string> </key>
+            <value> <int>3</int> </value>
+        </item>
+        <item>
+            <key> <string>_bind_names</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>_asgns</string> </key>
+                        <value>
+                          <dictionary>
+                            <item>
+                                <key> <string>name_container</string> </key>
+                                <value> <string>container</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_context</string> </key>
+                                <value> <string>context</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_m_self</string> </key>
+                                <value> <string>script</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_subpath</string> </key>
+                                <value> <string>traverse_subpath</string> </value>
+                            </item>
+                          </dictionary>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>_body</string> </key>
+            <value> <string>context.updateUrlRegistryTool()\n
+message = context.Base_translateString(\'Url Registry Tool is currently rebuilding.\')\n
+context.Base_redirect(form_id, keep_items={\'portal_status_message\': message})\n
+</string> </value>
+        </item>
+        <item>
+            <key> <string>_code</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_params</string> </key>
+            <value> <string>form_id=None, **kw</string> </value>
+        </item>
+        <item>
+            <key> <string>errors</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>func_code</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="FuncCode" module="Shared.DC.Scripts.Signature"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>co_argcount</string> </key>
+                        <value> <int>1</int> </value>
+                    </item>
+                    <item>
+                        <key> <string>co_varnames</string> </key>
+                        <value>
+                          <tuple>
+                            <string>form_id</string>
+                            <string>kw</string>
+                            <string>_getattr_</string>
+                            <string>context</string>
+                            <string>message</string>
+                          </tuple>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>func_defaults</string> </key>
+            <value>
+              <tuple>
+                <none/>
+              </tuple>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>UrlRegistryTool_rebuildUrlRegistry</string> </value>
+        </item>
+        <item>
+            <key> <string>warnings</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/UrlRegistryTool_viewRebuildUrlRegistry.xml b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/UrlRegistryTool_viewRebuildUrlRegistry.xml
new file mode 100644
index 0000000000..cf83d82a42
--- /dev/null
+++ b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/UrlRegistryTool_viewRebuildUrlRegistry.xml
@@ -0,0 +1,144 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="ERP5Form" module="Products.ERP5Form.Form"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_bind_names</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>_asgns</string> </key>
+                        <value>
+                          <dictionary/>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>action</string> </key>
+            <value> <string>UrlRegistryTool_rebuildUrlRegistry</string> </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>edit_order</string> </key>
+            <value>
+              <list/>
+            </value>
+        </item>
+        <item>
+            <key> <string>encoding</string> </key>
+            <value> <string>UTF-8</string> </value>
+        </item>
+        <item>
+            <key> <string>enctype</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>group_list</string> </key>
+            <value>
+              <list>
+                <string>left</string>
+                <string>right</string>
+                <string>center</string>
+                <string>bottom</string>
+                <string>hidden</string>
+              </list>
+            </value>
+        </item>
+        <item>
+            <key> <string>groups</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>bottom</string> </key>
+                    <value>
+                      <list/>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>center</string> </key>
+                    <value>
+                      <list/>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>hidden</string> </key>
+                    <value>
+                      <list/>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>left</string> </key>
+                    <value>
+                      <list/>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>right</string> </key>
+                    <value>
+                      <list/>
+                    </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>UrlRegistryTool_viewRebuildUrlRegistry</string> </value>
+        </item>
+        <item>
+            <key> <string>method</string> </key>
+            <value> <string>POST</string> </value>
+        </item>
+        <item>
+            <key> <string>name</string> </key>
+            <value> <string>UrlRegistryTool_viewRebuildUrlRegistry</string> </value>
+        </item>
+        <item>
+            <key> <string>pt</string> </key>
+            <value> <string>form_dialog</string> </value>
+        </item>
+        <item>
+            <key> <string>row_length</string> </key>
+            <value> <int>4</int> </value>
+        </item>
+        <item>
+            <key> <string>stored_encoding</string> </key>
+            <value> <string>UTF-8</string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string>Rebuild URL Registry</string> </value>
+        </item>
+        <item>
+            <key> <string>unicode_mode</string> </key>
+            <value> <int>0</int> </value>
+        </item>
+        <item>
+            <key> <string>update_action</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>update_action_title</string> </key>
+            <value> <string></string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/UrlRegistryTool_viewUnregisterAllUrlDialog.xml b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/UrlRegistryTool_viewUnregisterAllUrlDialog.xml
new file mode 100644
index 0000000000..018f59fcf4
--- /dev/null
+++ b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/UrlRegistryTool_viewUnregisterAllUrlDialog.xml
@@ -0,0 +1,144 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="ERP5Form" module="Products.ERP5Form.Form"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_bind_names</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>_asgns</string> </key>
+                        <value>
+                          <dictionary/>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>action</string> </key>
+            <value> <string>UrlRegistryTool_clearUrlRegistryTool</string> </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>edit_order</string> </key>
+            <value>
+              <list/>
+            </value>
+        </item>
+        <item>
+            <key> <string>encoding</string> </key>
+            <value> <string>UTF-8</string> </value>
+        </item>
+        <item>
+            <key> <string>enctype</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>group_list</string> </key>
+            <value>
+              <list>
+                <string>left</string>
+                <string>right</string>
+                <string>center</string>
+                <string>bottom</string>
+                <string>hidden</string>
+              </list>
+            </value>
+        </item>
+        <item>
+            <key> <string>groups</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>bottom</string> </key>
+                    <value>
+                      <list/>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>center</string> </key>
+                    <value>
+                      <list/>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>hidden</string> </key>
+                    <value>
+                      <list/>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>left</string> </key>
+                    <value>
+                      <list/>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>right</string> </key>
+                    <value>
+                      <list/>
+                    </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>UrlRegistryTool_viewUnregisterAllUrlDialog</string> </value>
+        </item>
+        <item>
+            <key> <string>method</string> </key>
+            <value> <string>POST</string> </value>
+        </item>
+        <item>
+            <key> <string>name</string> </key>
+            <value> <string>UrlRegistryTool_viewUnregisterAllUrlDialog</string> </value>
+        </item>
+        <item>
+            <key> <string>pt</string> </key>
+            <value> <string>form_dialog</string> </value>
+        </item>
+        <item>
+            <key> <string>row_length</string> </key>
+            <value> <int>4</int> </value>
+        </item>
+        <item>
+            <key> <string>stored_encoding</string> </key>
+            <value> <string>UTF-8</string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string>Unregister Urls</string> </value>
+        </item>
+        <item>
+            <key> <string>unicode_mode</string> </key>
+            <value> <int>0</int> </value>
+        </item>
+        <item>
+            <key> <string>update_action</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>update_action_title</string> </key>
+            <value> <string></string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/UrlRegistryTool_viewUrlRegistryPluginList.xml b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/UrlRegistryTool_viewUrlRegistryPluginList.xml
new file mode 100644
index 0000000000..75a1c9b881
--- /dev/null
+++ b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/UrlRegistryTool_viewUrlRegistryPluginList.xml
@@ -0,0 +1,152 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="ERP5Form" module="Products.ERP5Form.Form"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_bind_names</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>_asgns</string> </key>
+                        <value>
+                          <dictionary/>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>_objects</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>action</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>edit_order</string> </key>
+            <value>
+              <list/>
+            </value>
+        </item>
+        <item>
+            <key> <string>encoding</string> </key>
+            <value> <string>UTF-8</string> </value>
+        </item>
+        <item>
+            <key> <string>enctype</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>group_list</string> </key>
+            <value>
+              <list>
+                <string>left</string>
+                <string>right</string>
+                <string>center</string>
+                <string>bottom</string>
+                <string>hidden</string>
+              </list>
+            </value>
+        </item>
+        <item>
+            <key> <string>groups</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>bottom</string> </key>
+                    <value>
+                      <list>
+                        <string>listbox</string>
+                      </list>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>center</string> </key>
+                    <value>
+                      <list/>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>hidden</string> </key>
+                    <value>
+                      <list/>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>left</string> </key>
+                    <value>
+                      <list/>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>right</string> </key>
+                    <value>
+                      <list/>
+                    </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>UrlRegistryTool_viewUrlRegistryPluginList</string> </value>
+        </item>
+        <item>
+            <key> <string>method</string> </key>
+            <value> <string>POST</string> </value>
+        </item>
+        <item>
+            <key> <string>name</string> </key>
+            <value> <string>UrlRegistryTool_viewUrlList</string> </value>
+        </item>
+        <item>
+            <key> <string>pt</string> </key>
+            <value> <string>form_list</string> </value>
+        </item>
+        <item>
+            <key> <string>row_length</string> </key>
+            <value> <int>4</int> </value>
+        </item>
+        <item>
+            <key> <string>stored_encoding</string> </key>
+            <value> <string>UTF-8</string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>unicode_mode</string> </key>
+            <value> <int>0</int> </value>
+        </item>
+        <item>
+            <key> <string>update_action</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>update_action_title</string> </key>
+            <value> <string></string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/UrlRegistryTool_viewUrlRegistryPluginList/listbox.xml b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/UrlRegistryTool_viewUrlRegistryPluginList/listbox.xml
new file mode 100644
index 0000000000..7c309d9f1f
--- /dev/null
+++ b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion/UrlRegistryTool_viewUrlRegistryPluginList/listbox.xml
@@ -0,0 +1,113 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>delegated_list</string> </key>
+            <value>
+              <list>
+                <string>portal_types</string>
+                <string>selection_name</string>
+                <string>title</string>
+              </list>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>listbox</string> </value>
+        </item>
+        <item>
+            <key> <string>message_values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>external_validator_failed</string> </key>
+                    <value> <string>The input failed the external validator.</string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>overrides</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>tales</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string>my_list_mode_listbox</string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string>Base_viewIngestionFieldLibrary</string> </value>
+                </item>
+                <item>
+                    <key> <string>portal_types</string> </key>
+                    <value>
+                      <list>
+                        <tuple>
+                          <string>Url Registry Plugin</string>
+                          <string>Url Registry Plugin</string>
+                        </tuple>
+                      </list>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>selection_name</string> </key>
+                    <value> <string>portal_url_registry_selection</string> </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string>Click to edit the target</string> </value>
+                </item>
+                <item>
+                    <key> <string>title</string> </key>
+                    <value> <string>Url Registry Plugins</string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion_test/erp5_web_content_layout_test.xml b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion_test/erp5_web_content_layout_test.xml
new file mode 100644
index 0000000000..577b67579a
--- /dev/null
+++ b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion_test/erp5_web_content_layout_test.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="ERP5Form" module="Products.ERP5Form.Form"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_bind_names</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>_asgns</string> </key>
+                        <value>
+                          <dictionary/>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>_objects</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>action</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>edit_order</string> </key>
+            <value>
+              <list/>
+            </value>
+        </item>
+        <item>
+            <key> <string>encoding</string> </key>
+            <value> <string>UTF-8</string> </value>
+        </item>
+        <item>
+            <key> <string>enctype</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>group_list</string> </key>
+            <value>
+              <list>
+                <string>left column transparent (Logo)</string>
+                <string>left column (Navigation)</string>
+                <string>left column (Sections)</string>
+                <string>left column (Contents)</string>
+                <string>left column (Search)</string>
+                <string>left column (Debug)</string>
+                <string>right column (News)</string>
+                <string>right column (Toolbox)</string>
+                <string>right column (Highlight)</string>
+                <string>footer</string>
+              </list>
+            </value>
+        </item>
+        <item>
+            <key> <string>groups</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>footer</string> </key>
+                    <value>
+                      <list/>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>left column (Contents)</string> </key>
+                    <value>
+                      <list>
+                        <string>section_content_list</string>
+                      </list>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>left column (Debug)</string> </key>
+                    <value>
+                      <list>
+                        <string>applicable_layout</string>
+                      </list>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>left column (Navigation)</string> </key>
+                    <value>
+                      <list/>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>left column (Search)</string> </key>
+                    <value>
+                      <list/>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>left column (Sections)</string> </key>
+                    <value>
+                      <list>
+                        <string>subsection_list</string>
+                      </list>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>left column transparent (Logo)</string> </key>
+                    <value>
+                      <list/>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>right column (Highlight)</string> </key>
+                    <value>
+                      <list/>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>right column (News)</string> </key>
+                    <value>
+                      <list/>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>right column (Toolbox)</string> </key>
+                    <value>
+                      <list/>
+                    </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>erp5_web_content_layout_test</string> </value>
+        </item>
+        <item>
+            <key> <string>method</string> </key>
+            <value> <string>POST</string> </value>
+        </item>
+        <item>
+            <key> <string>name</string> </key>
+            <value> <string>erp5_web_default_layout</string> </value>
+        </item>
+        <item>
+            <key> <string>pt</string> </key>
+            <value> <string>template_erp5_web</string> </value>
+        </item>
+        <item>
+            <key> <string>row_length</string> </key>
+            <value> <int>5</int> </value>
+        </item>
+        <item>
+            <key> <string>stored_encoding</string> </key>
+            <value> <string>UTF-8</string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string>Default Section Layout</string> </value>
+        </item>
+        <item>
+            <key> <string>unicode_mode</string> </key>
+            <value> <int>0</int> </value>
+        </item>
+        <item>
+            <key> <string>update_action</string> </key>
+            <value> <string></string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion_test/erp5_web_content_layout_test/applicable_layout.xml b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion_test/erp5_web_content_layout_test/applicable_layout.xml
new file mode 100644
index 0000000000..84bba3f6cd
--- /dev/null
+++ b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion_test/erp5_web_content_layout_test/applicable_layout.xml
@@ -0,0 +1,90 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>delegated_list</string> </key>
+            <value>
+              <list/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>applicable_layout</string> </value>
+        </item>
+        <item>
+            <key> <string>message_values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>external_validator_failed</string> </key>
+                    <value> <string>The input failed the external validator.</string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>overrides</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>tales</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string>applicable_layout</string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string>erp5_web_layout</string> </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string>Click to edit the target</string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion_test/erp5_web_content_layout_test/section_content_list.xml b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion_test/erp5_web_content_layout_test/section_content_list.xml
new file mode 100644
index 0000000000..8d8db0a091
--- /dev/null
+++ b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion_test/erp5_web_content_layout_test/section_content_list.xml
@@ -0,0 +1,90 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>delegated_list</string> </key>
+            <value>
+              <list/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>section_content_list</string> </value>
+        </item>
+        <item>
+            <key> <string>message_values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>external_validator_failed</string> </key>
+                    <value> <string>The input failed the external validator.</string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>overrides</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>tales</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string>section_content_list</string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string>erp5_web_layout</string> </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string>Click to edit the target</string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion_test/erp5_web_content_layout_test/subsection_list.xml b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion_test/erp5_web_content_layout_test/subsection_list.xml
new file mode 100644
index 0000000000..82ee80e411
--- /dev/null
+++ b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion_test/erp5_web_content_layout_test/subsection_list.xml
@@ -0,0 +1,90 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>delegated_list</string> </key>
+            <value>
+              <list/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>subsection_list</string> </value>
+        </item>
+        <item>
+            <key> <string>message_values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>external_validator_failed</string> </key>
+                    <value> <string>The input failed the external validator.</string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>overrides</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>tales</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string>subsection_list</string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string>erp5_web_layout</string> </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string>Click to edit the target</string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion_test/erp5_web_layout_test.xml b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion_test/erp5_web_layout_test.xml
new file mode 100644
index 0000000000..1860287c5f
--- /dev/null
+++ b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion_test/erp5_web_layout_test.xml
@@ -0,0 +1,196 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="ERP5Form" module="Products.ERP5Form.Form"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_bind_names</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>_asgns</string> </key>
+                        <value>
+                          <dictionary/>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>_objects</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>action</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>edit_order</string> </key>
+            <value>
+              <list/>
+            </value>
+        </item>
+        <item>
+            <key> <string>encoding</string> </key>
+            <value> <string>UTF-8</string> </value>
+        </item>
+        <item>
+            <key> <string>enctype</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>group_list</string> </key>
+            <value>
+              <list>
+                <string>left column transparent (Logo)</string>
+                <string>left column (Navigation)</string>
+                <string>left column (Sections)</string>
+                <string>left column (Contents)</string>
+                <string>left column (Search)</string>
+                <string>left column (Debug)</string>
+                <string>right column (News)</string>
+                <string>right column (Toolbox)</string>
+                <string>right column (Highlight)</string>
+                <string>right column (Action)</string>
+                <string>footer</string>
+              </list>
+            </value>
+        </item>
+        <item>
+            <key> <string>groups</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>footer</string> </key>
+                    <value>
+                      <list/>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>left column (Contents)</string> </key>
+                    <value>
+                      <list>
+                        <string>section_content_list</string>
+                      </list>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>left column (Debug)</string> </key>
+                    <value>
+                      <list>
+                        <string>applicable_layout</string>
+                      </list>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>left column (Navigation)</string> </key>
+                    <value>
+                      <list>
+                        <string>language_selector</string>
+                      </list>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>left column (Search)</string> </key>
+                    <value>
+                      <list/>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>left column (Sections)</string> </key>
+                    <value>
+                      <list>
+                        <string>subsection_list</string>
+                      </list>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>left column transparent (Logo)</string> </key>
+                    <value>
+                      <list/>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>right column (Action)</string> </key>
+                    <value>
+                      <list/>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>right column (Highlight)</string> </key>
+                    <value>
+                      <list/>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>right column (News)</string> </key>
+                    <value>
+                      <list/>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>right column (Toolbox)</string> </key>
+                    <value>
+                      <list/>
+                    </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>erp5_web_layout_test</string> </value>
+        </item>
+        <item>
+            <key> <string>method</string> </key>
+            <value> <string>POST</string> </value>
+        </item>
+        <item>
+            <key> <string>name</string> </key>
+            <value> <string>erp5_web_default_layout</string> </value>
+        </item>
+        <item>
+            <key> <string>pt</string> </key>
+            <value> <string>template_erp5_web</string> </value>
+        </item>
+        <item>
+            <key> <string>row_length</string> </key>
+            <value> <int>5</int> </value>
+        </item>
+        <item>
+            <key> <string>stored_encoding</string> </key>
+            <value> <string>UTF-8</string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string>Default Web Layout</string> </value>
+        </item>
+        <item>
+            <key> <string>unicode_mode</string> </key>
+            <value> <int>0</int> </value>
+        </item>
+        <item>
+            <key> <string>update_action</string> </key>
+            <value> <string></string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion_test/erp5_web_layout_test/applicable_layout.xml b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion_test/erp5_web_layout_test/applicable_layout.xml
new file mode 100644
index 0000000000..ecbbc562f8
--- /dev/null
+++ b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion_test/erp5_web_layout_test/applicable_layout.xml
@@ -0,0 +1,131 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>delegated_list</string> </key>
+            <value>
+              <list>
+                <string>description</string>
+                <string>title</string>
+                <string>enabled</string>
+                <string>display_width</string>
+                <string>default</string>
+              </list>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>applicable_layout</string> </value>
+        </item>
+        <item>
+            <key> <string>message_values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>external_validator_failed</string> </key>
+                    <value> <string>The input failed the external validator.</string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>overrides</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>tales</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>default</string> </key>
+                    <value>
+                      <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>description</string> </key>
+                    <value> <string>A demo widget to show how to debug layout properties.</string> </value>
+                </item>
+                <item>
+                    <key> <string>display_width</string> </key>
+                    <value> <int>20</int> </value>
+                </item>
+                <item>
+                    <key> <string>enabled</string> </key>
+                    <value> <int>0</int> </value>
+                </item>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string>my_string_field</string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string>Base_viewFieldLibrary</string> </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string>Click to edit the target</string> </value>
+                </item>
+                <item>
+                    <key> <string>title</string> </key>
+                    <value> <string>Layout</string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+  <record id="2" aka="AAAAAAAAAAI=">
+    <pickle>
+      <global name="TALESMethod" module="Products.Formulator.TALESField"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_text</string> </key>
+            <value> <string>here/getApplicableLayout</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion_test/erp5_web_layout_test/language_selector.xml b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion_test/erp5_web_layout_test/language_selector.xml
new file mode 100644
index 0000000000..002cb87d97
--- /dev/null
+++ b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion_test/erp5_web_layout_test/language_selector.xml
@@ -0,0 +1,136 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>delegated_list</string> </key>
+            <value>
+              <list>
+                <string>title</string>
+                <string>css_class</string>
+                <string>height</string>
+                <string>width</string>
+                <string>whitespace_preserve</string>
+                <string>default</string>
+              </list>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>language_selector</string> </value>
+        </item>
+        <item>
+            <key> <string>message_values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>external_validator_failed</string> </key>
+                    <value> <string>The input failed the external validator.</string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>overrides</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>tales</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>default</string> </key>
+                    <value>
+                      <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>css_class</string> </key>
+                    <value> <string>hiddenLabel languageSelector</string> </value>
+                </item>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string>my_text_content</string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string>Base_viewFieldLibrary</string> </value>
+                </item>
+                <item>
+                    <key> <string>height</string> </key>
+                    <value> <int>5</int> </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string>Click to edit the target</string> </value>
+                </item>
+                <item>
+                    <key> <string>title</string> </key>
+                    <value> <string>Language</string> </value>
+                </item>
+                <item>
+                    <key> <string>whitespace_preserve</string> </key>
+                    <value> <int>0</int> </value>
+                </item>
+                <item>
+                    <key> <string>width</string> </key>
+                    <value> <int>40</int> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+  <record id="2" aka="AAAAAAAAAAI=">
+    <pickle>
+      <global name="TALESMethod" module="Products.Formulator.TALESField"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_text</string> </key>
+            <value> <string>here/language_selector</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion_test/erp5_web_layout_test/section_content_list.xml b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion_test/erp5_web_layout_test/section_content_list.xml
new file mode 100644
index 0000000000..ab4d9a9835
--- /dev/null
+++ b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion_test/erp5_web_layout_test/section_content_list.xml
@@ -0,0 +1,156 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>delegated_list</string> </key>
+            <value>
+              <list>
+                <string>title</string>
+                <string>css_class</string>
+                <string>height</string>
+                <string>width</string>
+                <string>whitespace_preserve</string>
+                <string>default</string>
+                <string>enabled</string>
+              </list>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>section_content_list</string> </value>
+        </item>
+        <item>
+            <key> <string>message_values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>external_validator_failed</string> </key>
+                    <value> <string>The input failed the external validator.</string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>overrides</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>tales</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>default</string> </key>
+                    <value>
+                      <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>enabled</string> </key>
+                    <value>
+                      <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>css_class</string> </key>
+                    <value> <string>hidden_label</string> </value>
+                </item>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string>my_text_content</string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string>Base_viewFieldLibrary</string> </value>
+                </item>
+                <item>
+                    <key> <string>height</string> </key>
+                    <value> <int>5</int> </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string>Click to edit the target</string> </value>
+                </item>
+                <item>
+                    <key> <string>title</string> </key>
+                    <value> <string>Documents</string> </value>
+                </item>
+                <item>
+                    <key> <string>whitespace_preserve</string> </key>
+                    <value> <int>0</int> </value>
+                </item>
+                <item>
+                    <key> <string>width</string> </key>
+                    <value> <int>40</int> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+  <record id="2" aka="AAAAAAAAAAI=">
+    <pickle>
+      <global name="TALESMethod" module="Products.Formulator.TALESField"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_text</string> </key>
+            <value> <string>request/current_web_section/section_content_render</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+  <record id="3" aka="AAAAAAAAAAM=">
+    <pickle>
+      <global name="TALESMethod" module="Products.Formulator.TALESField"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_text</string> </key>
+            <value> <string>python:here.getLayoutProperty(\'layout_display_content_widget\') == \'display\' and len(here.getDocumentValueList())</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion_test/erp5_web_layout_test/subsection_list.xml b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion_test/erp5_web_layout_test/subsection_list.xml
new file mode 100644
index 0000000000..89ae06c00c
--- /dev/null
+++ b/bt5/erp5_ingestion/SkinTemplateItem/portal_skins/erp5_ingestion_test/erp5_web_layout_test/subsection_list.xml
@@ -0,0 +1,156 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>delegated_list</string> </key>
+            <value>
+              <list>
+                <string>title</string>
+                <string>css_class</string>
+                <string>height</string>
+                <string>width</string>
+                <string>whitespace_preserve</string>
+                <string>default</string>
+                <string>enabled</string>
+              </list>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>subsection_list</string> </value>
+        </item>
+        <item>
+            <key> <string>message_values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>external_validator_failed</string> </key>
+                    <value> <string>The input failed the external validator.</string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>overrides</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>tales</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>default</string> </key>
+                    <value>
+                      <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>enabled</string> </key>
+                    <value>
+                      <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>css_class</string> </key>
+                    <value> <string>hidden_label</string> </value>
+                </item>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string>my_text_content</string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string>Base_viewFieldLibrary</string> </value>
+                </item>
+                <item>
+                    <key> <string>height</string> </key>
+                    <value> <int>5</int> </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string>Click to edit the target</string> </value>
+                </item>
+                <item>
+                    <key> <string>title</string> </key>
+                    <value> <string>Subsections</string> </value>
+                </item>
+                <item>
+                    <key> <string>whitespace_preserve</string> </key>
+                    <value> <int>0</int> </value>
+                </item>
+                <item>
+                    <key> <string>width</string> </key>
+                    <value> <int>40</int> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+  <record id="2" aka="AAAAAAAAAAI=">
+    <pickle>
+      <global name="TALESMethod" module="Products.Formulator.TALESField"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_text</string> </key>
+            <value> <string>request/current_web_section/subsection_render</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+  <record id="3" aka="AAAAAAAAAAM=">
+    <pickle>
+      <global name="TALESMethod" module="Products.Formulator.TALESField"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_text</string> </key>
+            <value> <string>python:len(request.get(\'current_web_section\', here).contentValues(portal_type=\'Web Section\'))</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ingestion/TestTemplateItem/testLiveIngestion.py b/bt5/erp5_ingestion/TestTemplateItem/testLiveIngestion.py
index 50d7a40812..e0f9718e3a 100644
--- a/bt5/erp5_ingestion/TestTemplateItem/testLiveIngestion.py
+++ b/bt5/erp5_ingestion/TestTemplateItem/testLiveIngestion.py
@@ -124,7 +124,7 @@ class TestIngestion(ERP5TypeLiveTestCase):
     transaction.commit()
     self.tic()
     self.assertEquals(document.getPortalType(), 'Text')
-    self.assertEquals(document.getSourceReference(), filename)
+    self.assertEquals(document.getFilename(), filename)
     self.assertEquals(document.getContentType(), 'text/plain')
     self.assertTrue(document.hasData())
 
@@ -138,7 +138,7 @@ class TestIngestion(ERP5TypeLiveTestCase):
     transaction.commit()
     self.tic()
     self.assertEquals(document.getPortalType(), 'Text')
-    self.assertEquals(document.getSourceReference(), script_id)
+    self.assertEquals(document.getFilename(), script_id)
     self.assertEquals(document.getContentType(), 'text/plain')
     self.assertTrue(document.hasData())
 
@@ -151,7 +151,7 @@ class TestIngestion(ERP5TypeLiveTestCase):
     transaction.commit()
     self.tic()
     self.assertEquals(document.getPortalType(), 'Text')
-    self.assertEquals(document.getSourceReference(), script_id)
+    self.assertEquals(document.getFilename(), script_id)
     self.assertEquals(document.getContentType(), 'text/plain')
     self.assertTrue(document.hasData())
 
@@ -165,7 +165,7 @@ class TestIngestion(ERP5TypeLiveTestCase):
     transaction.commit()
     self.tic()
     self.assertEquals(document.getPortalType(), 'Text')
-    self.assertEquals(document.getSourceReference(), filename)
+    self.assertEquals(document.getFilename(), filename)
     self.assertEquals(document.getContentType(), 'text/plain')
     self.assertTrue(document.hasData())
 
@@ -179,7 +179,7 @@ class TestIngestion(ERP5TypeLiveTestCase):
     transaction.commit()
     self.tic()
     self.assertEquals(document.getPortalType(), 'Web Page')
-    self.assertEquals(document.getSourceReference(), script_id)
+    self.assertEquals(document.getFilename(), script_id)
     self.assertEquals(document.getContentType(), 'text/html')
     self.assertTrue(document.hasData())
 
diff --git a/bt5/erp5_ingestion/ToolTemplateItem/portal_url_registry.xml b/bt5/erp5_ingestion/ToolTemplateItem/portal_url_registry.xml
new file mode 100644
index 0000000000..e3035b3553
--- /dev/null
+++ b/bt5/erp5_ingestion/ToolTemplateItem/portal_url_registry.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="UrlRegistryTool" module="Products.ERP5.Tool.UrlRegistryTool"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_global_mapping_storage</string> </key>
+            <value>
+              <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+  <record id="2" aka="AAAAAAAAAAI=">
+    <pickle>
+      <global name="OOBTree" module="BTrees.OOBTree"/>
+    </pickle>
+    <pickle>
+      <none/>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ingestion/bt/revision b/bt5/erp5_ingestion/bt/revision
index 1bda760653..8d9f781b52 100644
--- a/bt5/erp5_ingestion/bt/revision
+++ b/bt5/erp5_ingestion/bt/revision
@@ -1 +1 @@
-117
\ No newline at end of file
+118
\ No newline at end of file
diff --git a/bt5/erp5_ingestion/bt/template_tool_id_list b/bt5/erp5_ingestion/bt/template_tool_id_list
index 128a281d63..ea81565e18 100644
--- a/bt5/erp5_ingestion/bt/template_tool_id_list
+++ b/bt5/erp5_ingestion/bt/template_tool_id_list
@@ -1 +1,2 @@
-portal_contributions
\ No newline at end of file
+portal_contributions
+portal_url_registry
\ No newline at end of file
-- 
2.30.9