From ecbfe8e10f5adb5ebab8674fa77b84d5da920be3 Mon Sep 17 00:00:00 2001
From: Arnaud Fontaine <arnaud.fontaine@nexedi.com>
Date: Thu, 23 Feb 2012 15:53:12 +0900
Subject: [PATCH] Add Webdav/FTP GET and PUT support for editing Components.

---
 product/ERP5Type/mixin/component.py | 32 +++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/product/ERP5Type/mixin/component.py b/product/ERP5Type/mixin/component.py
index fd1ca0bfff..03d24e2f3c 100644
--- a/product/ERP5Type/mixin/component.py
+++ b/product/ERP5Type/mixin/component.py
@@ -264,6 +264,38 @@ class ComponentMixin(PropertyRecordableMixin, Base):
   def _getDynamicModuleNamespace():
     raise NotImplementedError
 
+  security.declareProtected(Permissions.ModifyPortalContent, 'PUT')
+  def PUT(self, REQUEST, RESPONSE):
+    """
+    Handle HTTP PUT requests for FTP/Webdav upload, which is object
+    dependent. For now only set the text content...
+    """
+    self.dav__init(REQUEST, RESPONSE)
+    self.dav__simpleifhandler(REQUEST, RESPONSE, refresh=1)
+
+    text_content = REQUEST.get('BODY', None)
+    if text_content is None:
+      RESPONSE.setStatus(304)
+    else:
+      self.setTextContent(text_content)
+      RESPONSE.setStatus(204)
+
+    return RESPONSE
+
+  security.declareProtected(Permissions.ModifyPortalContent, 'manage_FTPput')
+  manage_FTPput = PUT
+
+  security.declareProtected(Permissions.AccessContentsInformation,
+                            'manage_FTPget')
+  def manage_FTPget(self):
+    """
+    Get source for FTP/Webdav. The default implementation of GET for Webdav,
+    available in webdav.Resource, calls manage_FTPget
+
+    XXX-arnau: encoding?
+    """
+    return self.getTextContent()
+
   security.declareProtected(Permissions.ModifyPortalContent,
                             'importFromFilesystem')
   @classmethod
-- 
2.30.9