[Erp5-report] r18469 - /erp5/trunk/products/ERP5/Tool/ContributionTool.py

nobody at svn.erp5.org nobody at svn.erp5.org
Fri Dec 21 11:59:40 CET 2007


Author: yusei
Date: Fri Dec 21 11:59:39 2007
New Revision: 18469

URL: http://svn.erp5.org?rev=18469&view=rev
Log:
if uploaded document matchs for existing document, don't create a new document
and update existing document.

Modified:
    erp5/trunk/products/ERP5/Tool/ContributionTool.py

Modified: erp5/trunk/products/ERP5/Tool/ContributionTool.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Tool/ContributionTool.py?rev=18469&r1=18468&r2=18469&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Tool/ContributionTool.py (original)
+++ erp5/trunk/products/ERP5/Tool/ContributionTool.py Fri Dec 21 11:59:39 2007
@@ -35,6 +35,7 @@
 
 from AccessControl import ClassSecurityInfo, getSecurityManager
 from Globals import InitializeClass, DTMLFile
+from Products.CMFCore.utils import getToolByName, _checkPermission
 from Products.ERP5Type.Tool.BaseTool import BaseTool
 from Products.ERP5Type import Permissions
 from Products.ERP5 import _dtmldir
@@ -232,6 +233,8 @@
     if temp_object:
       # For temp_object creation, use the standard method
       return BaseTool.newContent(self, id=id, portal_type=portal_type, temp_object=1, **kw)
+
+    document = None
 
     # Try to find the file_name
     file_name = None
@@ -301,6 +304,33 @@
     # parameter
     # LOG('new content', 0, "%s -- %s" % (file_name, mime_type))
 
+
+    #
+    # Check if same file is already exists. if it exists, then update it.
+    # 
+    if portal_type is None:
+      content_type_registry = getToolByName(self, 'content_type_registry')
+      portal_type = content_type_registry.findTypeName(file_name, None, None)
+      property_dict = self.getMatchedFileNamePatternDict(file_name)
+      reference = property_dict.get('reference', None)
+      version  = property_dict.get('version', None)
+      language  = property_dict.get('language', None)
+      if portal_type and reference and version and language:
+        portal_catalog = getToolByName(self, 'portal_catalog')
+        document = portal_catalog.getResultValue(portal_type=portal_type,
+                                                 reference=reference,
+                                                 version=version,
+                                                 language=language)
+        if document is not None:
+          # document is already uploaded. So overrides file.
+          if not _checkPermission(Permissions.ModifyPortalContent, document):
+            raise Unauthorized, "[DMS] You are not allowed to update the existing document which has the same coordinates (id %s)" % document.getId()
+          document.edit(file=kw['file'])
+          return document
+
+    #
+    # Strong possibility of a new file.
+    #
     try:
       self._checkId(file_name)
     except BadRequest:
@@ -357,6 +387,29 @@
     """
     pass
 
+  security.declareProtected(Permissions.ModifyPortalContent,'getMatchedFileNamePatternDict')
+  def getMatchedFileNamePatternDict(self, file_name):
+    """
+      Get matched group dict of file name parsing regular expression.
+    """
+    property_dict = {}
+
+    if file_name is None:
+      return property_dict
+
+    regex_text = self.portal_preferences.getPreferredDocumentFileNameRegularExpression()
+    if regex_text in ('', None):
+      # we must have file name regular expression defined in preferences
+      raise ValueError, '[DMS] No file name regular expression defined in preferences.'
+    if regex_text:
+      pattern = re.compile(regex_text)
+      if pattern is not None:
+        try:
+          property_dict = pattern.match(file_name).groupdict()
+        except AttributeError: # no match
+          pass
+    return property_dict
+
   security.declareProtected(Permissions.ModifyPortalContent,'getPropertyDictFromFileName')
   def getPropertyDictFromFileName(self, file_name):
     """
@@ -365,19 +418,8 @@
     """
     if file_name is None:
       return {}
-    property_dict = {}
-    rx_src = self.portal_preferences.getPreferredDocumentFileNameRegularExpression()
-    if rx_src in ('', None):
-      # we must have file name regular expression defined in preferences
-      raise ValueError, '[DMS] No file name regular expression defined in preferences.'
-    if rx_src:
-      rx_parse = re.compile(rx_src)
-      if rx_parse is not None:
-        try:
-          property_dict = rx_parse.match(file_name).groupdict()
-        except AttributeError: # no match
-          pass
-    method = self._getTypeBasedMethod('getPropertyDictFromFileName', 
+    property_dict = self.getMatchedFileNamePatternDict(file_name)
+    method = self._getTypeBasedMethod('getPropertyDictFromFileName',
         fallback_script_id = 'ContributionTool_getPropertyDictFromFileName')
     property_dict = method(file_name, property_dict)
     if property_dict.get('portal_type', None) is not None:




More information about the Erp5-report mailing list