From a8051a3357c7eacdcd27cdefb532d9b37606f319 Mon Sep 17 00:00:00 2001
From: Ivan Tyagov <ivan@nexedi.com>
Date: Mon, 22 Feb 2010 09:06:03 +0000
Subject: [PATCH] Use generic contribute script.

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@32910 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 .../WebSite_contributeContent.xml             | 255 ------------------
 .../WebSite_linkContent.xml                   | 175 ------------
 .../WebSite_viewContributeRenderer.xml        | 145 ++++++----
 bt5/erp5_web/bt/revision                      |   2 +-
 4 files changed, 99 insertions(+), 478 deletions(-)
 delete mode 100644 bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web_widget_library/WebSite_contributeContent.xml
 delete mode 100644 bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web_widget_library/WebSite_linkContent.xml

diff --git a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web_widget_library/WebSite_contributeContent.xml b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web_widget_library/WebSite_contributeContent.xml
deleted file mode 100644
index a91488c32d..0000000000
--- a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web_widget_library/WebSite_contributeContent.xml
+++ /dev/null
@@ -1,255 +0,0 @@
-<?xml version="1.0"?>
-<ZopeData>
-  <record id="1" aka="AAAAAAAAAAE=">
-    <pickle>
-      <tuple>
-        <global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
-        <tuple/>
-      </tuple>
-    </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
-  A method invoked with parameters provided by the \n
-  contribute widget.\n
-\n
-  **kw -- remaining params passed to the constructor\n
-"""\n
-from Products.ERP5.Document.Document import ConversionError\n
-from xmlrpclib import Fault\n
-from socket import error as SocketError\n
-\n
-Base_translateString = context.Base_translateString\n
-\n
-# return if no file was uploaded\n
-if contribute_file is None or contribute_file.filename in (\'\', None,):\n
-  return context.Base_redirect(\'view\',\n
-           keep_items = dict(\n
-             portal_status_message = Base_translateString(\'No file was selected for contribution.\'), \n
-             editable_mode = context.REQUEST.get(\'editable_mode\', 0)))\n
-\n
-# Do some processing of parameters cause we do not use ERP5 Form here\n
-if contribute_classification:\n
-  kw[\'classification\'] = contribute_classification\n
-\n
-if contribute_source_project:\n
-  kw[\'follow_up\'] = contribute_source_project\n
-\n
-if contribute_portal_type:\n
-  kw[\'portal_type\'] = contribute_portal_type\n
-\n
-if contribute_file is not None:\n
-  kw[\'file\'] = contribute_file\n
-\n
-# We want to discover metadata synchronously\n
-kw[\'discover_metadata\'] = 0\n
-\n
-editable_mode = 1\n
-file_name = getattr(contribute_file, \'filename\', None)\n
-# try to ingest file\n
-failure = 0\n
-new_content = None\n
-merged_content = None\n
-\n
-try:\n
-  new_content = context.portal_contributions.newContent(**kw)\n
-  new_content.processFile()\n
-  merged_content = new_content.Document_convertToBaseFormatAndDiscoverMetadata(file_name=file_name)\n
-\n
-except ConversionError, Fault:\n
-  # there are errors during ingestion content\n
-  failure = 1\n
-  msg = \'Sorry, there was a problem during conversion of your document.\'\n
-except SocketError:\n
-  # conversion server is down\n
-  failure = 1\n
-  msg = \'Sorry, the conversion server is down. Please try again later.\'\n
-except (TypeError, KeyError, AttributeError):\n
-  # there\'s an unknow  error occured\n
-  failure = 1\n
-  msg = \'Sorry, unknow error occured.\'\n
-\n
-target = None\n
-if merged_content is not None:\n
-  target = merged_content\n
-elif new_content is not None:\n
-  target = new_content\n
-else:\n
-  target = context\n
-\n
-if failure:\n
-  msg = Base_translateString(msg)\n
-  return target.Base_redirect(\'view\',\n
-                              keep_items=dict(portal_status_message=msg,\n
-                                              editable_mode=0))\n
-# successful ingestion, show appropriate message\n
-if merged_content is not None and merged_content is not new_content:\n
-  msg = Base_translateString(\'Document successfully updated.\')\n
-  target = merged_content\n
-else:\n
-  msg = Base_translateString(\'Document successfully created.\')\n
-  target = new_content\n
-\n
-# Change acquisition context of document, in order to get web section layout\n
-target = context.restrictedTraverse(target.getRelativeUrl())\n
-target_request = target.REQUEST\n
-target_request.set(\'editable_mode\', editable_mode)\n
-target_request.set(\'portal_status_message\', msg)\n
-# clean up REQUEST as it is possible that this script is called\n
-# on an another Document in an edit view (then fields will be passed in REQUEST \n
-# overriding next form HTML generation in \'target.view()\' )\n
-for key in target_request.form.keys():\n
-  if key.startswith(\'field_my_\'):\n
-    del target_request.form[key]\n
-return target.view()\n
-\n
-# XXX Do not use redirect, as it leeds to conflict error with convertion process\n
-# return target.Base_redirect(\'view\',\n
-#                             keep_items=dict(portal_status_message=msg, \n
-#                                             editable_mode=editable_mode))\n
-</string> </value>
-        </item>
-        <item>
-            <key> <string>_code</string> </key>
-            <value>
-              <none/>
-            </value>
-        </item>
-        <item>
-            <key> <string>_params</string> </key>
-            <value> <string>contribute_file=None, contribute_classification=None, contribute_source_project=None, contribute_portal_type=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>4</int> </value>
-                    </item>
-                    <item>
-                        <key> <string>co_varnames</string> </key>
-                        <value>
-                          <tuple>
-                            <string>contribute_file</string>
-                            <string>contribute_classification</string>
-                            <string>contribute_source_project</string>
-                            <string>contribute_portal_type</string>
-                            <string>kw</string>
-                            <string>Products.ERP5.Document.Document</string>
-                            <string>ConversionError</string>
-                            <string>xmlrpclib</string>
-                            <string>Fault</string>
-                            <string>socket</string>
-                            <string>error</string>
-                            <string>SocketError</string>
-                            <string>_getattr_</string>
-                            <string>context</string>
-                            <string>Base_translateString</string>
-                            <string>None</string>
-                            <string>dict</string>
-                            <string>_write_</string>
-                            <string>editable_mode</string>
-                            <string>getattr</string>
-                            <string>file_name</string>
-                            <string>failure</string>
-                            <string>new_content</string>
-                            <string>merged_content</string>
-                            <string>_apply_</string>
-                            <string>msg</string>
-                            <string>TypeError</string>
-                            <string>KeyError</string>
-                            <string>AttributeError</string>
-                            <string>target</string>
-                            <string>target_request</string>
-                            <string>_getiter_</string>
-                            <string>key</string>
-                          </tuple>
-                        </value>
-                    </item>
-                  </dictionary>
-                </state>
-              </object>
-            </value>
-        </item>
-        <item>
-            <key> <string>func_defaults</string> </key>
-            <value>
-              <tuple>
-                <none/>
-                <none/>
-                <none/>
-                <none/>
-              </tuple>
-            </value>
-        </item>
-        <item>
-            <key> <string>id</string> </key>
-            <value> <string>WebSite_contributeContent</string> </value>
-        </item>
-        <item>
-            <key> <string>warnings</string> </key>
-            <value>
-              <tuple/>
-            </value>
-        </item>
-      </dictionary>
-    </pickle>
-  </record>
-</ZopeData>
diff --git a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web_widget_library/WebSite_linkContent.xml b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web_widget_library/WebSite_linkContent.xml
deleted file mode 100644
index d1883d8c30..0000000000
--- a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web_widget_library/WebSite_linkContent.xml
+++ /dev/null
@@ -1,175 +0,0 @@
-<?xml version="1.0"?>
-<ZopeData>
-  <record id="1" aka="AAAAAAAAAAE=">
-    <pickle>
-      <tuple>
-        <global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
-        <tuple/>
-      </tuple>
-    </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># Do some processing of parameters cause we do not use ERP5 Form here\n
-if link_classification:\n
-  kw[\'classification\'] = link_classification\n
-\n
-if link_source_project:\n
-  kw[\'source_project\'] = link_source_project\n
-\n
-if link_portal_type:\n
-  kw[\'portal_type\'] = link_portal_type\n
-\n
-if link_description:\n
-  kw[\'description\'] = link_description\n
-\n
-if link_url:\n
-  kw[\'url\'] = link_url\n
-\n
-kw[\'discover_metadata\'] = 0 # We want to discover metadata synchronously\n
-\n
-#try:\n
-if 1:\n
-  new_content = context.portal_contributions.newContent(**kw)\n
-  new_content.discoverMetadata() # Consider putting an exception handler\n
-  msg = context.Base_translateString(\'Document successfully created.\')\n
-  target = new_content\n
-  editable_mode = 1\n
-else:\n
-#except Exception, e:\n
-  msg = \'There was a problem: ${exception}\'\n
-  msg = context.Base_translateString(msg, mapping=dict(exception=str(e)))\n
-  target = context\n
-  editable_mode = 0\n
-\n
-return target.Base_redirect(\'view\', keep_items=dict(portal_status_message=msg, editable_mode=editable_mode))\n
-</string> </value>
-        </item>
-        <item>
-            <key> <string>_code</string> </key>
-            <value>
-              <none/>
-            </value>
-        </item>
-        <item>
-            <key> <string>_params</string> </key>
-            <value> <string>link_url=None, link_description=None, link_classification=None, link_source_project=None, link_portal_type=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>5</int> </value>
-                    </item>
-                    <item>
-                        <key> <string>co_varnames</string> </key>
-                        <value>
-                          <tuple>
-                            <string>link_url</string>
-                            <string>link_description</string>
-                            <string>link_classification</string>
-                            <string>link_source_project</string>
-                            <string>link_portal_type</string>
-                            <string>kw</string>
-                            <string>_write_</string>
-                            <string>_apply_</string>
-                            <string>_getattr_</string>
-                            <string>context</string>
-                            <string>new_content</string>
-                            <string>msg</string>
-                            <string>target</string>
-                            <string>editable_mode</string>
-                            <string>dict</string>
-                            <string>str</string>
-                            <string>e</string>
-                          </tuple>
-                        </value>
-                    </item>
-                  </dictionary>
-                </state>
-              </object>
-            </value>
-        </item>
-        <item>
-            <key> <string>func_defaults</string> </key>
-            <value>
-              <tuple>
-                <none/>
-                <none/>
-                <none/>
-                <none/>
-                <none/>
-              </tuple>
-            </value>
-        </item>
-        <item>
-            <key> <string>id</string> </key>
-            <value> <string>WebSite_linkContent</string> </value>
-        </item>
-        <item>
-            <key> <string>warnings</string> </key>
-            <value>
-              <tuple/>
-            </value>
-        </item>
-      </dictionary>
-    </pickle>
-  </record>
-</ZopeData>
diff --git a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web_widget_library/WebSite_viewContributeRenderer.xml b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web_widget_library/WebSite_viewContributeRenderer.xml
index 00fbea5295..8277b87b74 100644
--- a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web_widget_library/WebSite_viewContributeRenderer.xml
+++ b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web_widget_library/WebSite_viewContributeRenderer.xml
@@ -50,75 +50,126 @@
   <tal:block metal:use-macro="here/global_definitions/macros/header_definitions"/>\n
 </tal:block>\n
 \n
+<!-- Contribute file tab -->\n
+\n
 <div class="tabber" id="mytabber2">\n
+<form action="Base_contribute" \n
+      enctype="multipart/form-data" \n
+      method="post"\n
+      name="contribute_file_form">\n
   <div class="tabbertab">\n
-    <h2 i18n:translate="" i18n:domain="ui">Contribute</h2>\n
+    <h2 i18n:translate="" \n
+       i18n:domain="ui">Contribute</h2>\n
     <div class="fieldset">\n
       <div>\n
-        <label for="contribute_portal_type" i18n:translate="" i18n:domain="ui">Type</label>\n
-        <select size="1" name="contribute_portal_type" id="portal_type" onchange="toggleMakeTemplateButton(this);">\n
-          <option value="" i18n:translate="" i18n:domain="ui">-- Select Document Type --</option>\n
+        <label for="portal_type" \n
+               i18n:translate="" \n
+               i18n:domain="ui">Type</label>\n
+        <select size="1" \n
+                name="portal_type" \n
+                id="portal_type" \n
+                onchange="toggleMakeTemplateButton(this);">\n
+          <option value="" \n
+                  i18n:translate="" \n
+                  i18n:domain="ui">-- Select Document Type --</option>\n
           <tal:block tal:repeat="ptype here/getPortalTemplateDocumentTypeList">\n
-            <option \n
-                  tal:content="ptype" tal:attributes="value ptype"\n
-                  value="" i18n:translate="" i18n:domain="ui">Report</option>\n
+            <option tal:content="ptype" \n
+                    tal:attributes="value ptype"\n
+                    value="" \n
+                    i18n:translate="" \n
+                    i18n:domain="ui"/>\n
           </tal:block>\n
-          <option value="" i18n:translate="" i18n:domain="ui">-- Any Other Document Type --</option>\n
+          <option value="" \n
+                  i18n:translate="" \n
+                  i18n:domain="ui">-- Any Other Document Type --</option>\n
         </select>\n
-        <input type="file" name="contribute_file" size="30" />\n
+        <input type="hidden" \n
+               name="synchronous_metadata_discovery" \n
+               value="1"/>\n
+        <input type="hidden" \n
+               name="redirect_to_document" \n
+               value="1"/>\n
+        <input type="file" \n
+               name="file" size="30" />\n
       </div>\n
-      <!--<a onclick="setMailString();" id="mail_contribute_button" href="mailto:dms@dms.nexedi.com?subject=Contribution&body=">\n
-        <img src="au_icons/kmail.png" align="right" alt="contribute by mail" title="contribute by mail"/>\n
-      </a>-->\n
+\n
       <div style="float:left"\n
-           tal:define="contribute_prefix string:contribute_">\n
-        <div metal:use-macro="here/WebSite_viewContributePropertyRenderer/macros/contribute_properties">\n
-          Theme\n
-        </div>\n
+           tal:define="contribute_prefix string:">\n
+        <div metal:use-macro="here/WebSite_viewContributePropertyRenderer/macros/contribute_properties"/>\n
       </div>\n
       \n
       <div style="float:right; margin-top:10px;">\n
-      <a onclick="setMailString();"  id="mail_contribute_button"\n
-         href="mailto:dms@dms.nexedi.com?subject=Contribution&body="\n
+      <a onclick="setMailString();"  \n
+         id="mail_contribute_button"\n
          tal:define="ingestion_address here/portal_preferences/getPreferredDocumentEmailIngestionAddress|nothing"\n
          tal:condition="ingestion_address"\n
          tal:attributes="href string:${ingestion_address}?subject=Contribution&body=">\n
         <img src="send_by_mail" border="0"/>\n
-        <tal:block  i18n:translate="" i18n:domain="ui">Click here to contribute by email.</tal:block></a>\n
-      &nbsp;\n
-      <input i18n:domain="ui" i18n:attributes="value" type="submit" name="Memo_makeOOoTemplate:method" value="Make Template" id="maketemplatebutton" disabled="disabled"\n
-             style="width:100px;background-image:none;"/>\n
-      &nbsp;\n
-      <input i18n:domain="ui" i18n:attributes="value" type="submit" name="WebSite_contributeContent:method" value="Contribute"/>\n
+        <tal:block  \n
+          i18n:translate="" \n
+          i18n:domain="ui">Click here to contribute by email.</tal:block></a>\n
+\n
+      <input i18n:domain="ui" \n
+             i18n:attributes="value" \n
+             type="submit" \n
+             name="Base_contribute:method" \n
+             value="Contribute"/>\n
     </div>\n
-      \n
-      \n
     </div>\n
     \n
     <div class="clear"></div>\n
-  </div>\n
+</div>\n
+</form>\n
   \n
-  <div class="tabbertab">\n
-    <h2 i18n:translate="" i18n:domain="ui">Link</h2>\n
-    <div class="fieldset tabbertabcont">\n
-      <div>\n
-        <label for="url" value="" i18n:translate="" i18n:domain="ui">URL</label>\n
-        <input type="text" name="link_url" id="url" size="80" value="http://" />\n
-        <a href="" target="_blank" onclick="return setLink(this)" value="" i18n:translate="" i18n:domain="ui">Preview</a>\n
-      </div>\n
-      <tal:block tal:define="contribute_prefix string:link_">\n
-        <div metal:use-macro="here/WebSite_viewContributePropertyRenderer/macros/contribute_properties">\n
-          Theme\n
-        </div>\n
-      </tal:block>\n
-      <div>\n
-        <label for="link_description" value="" i18n:translate="" i18n:domain="ui">Description</label>\n
-        <textarea cols="80" rows="2" name="link_description"></textarea>\n
-      </div>\n
+<!-- Contribute link tab -->\n
+<div class="tabbertab">\n
+<form action="Base_contribute" \n
+      enctype="multipart/form-data" \n
+      method="post"\n
+      name="contribute_url_form">\n
+  <h2 i18n:translate="" i18n:domain="ui">Link</h2>\n
+  <div class="fieldset tabbertabcont">\n
+    <div>\n
+      <label for="url" \n
+             i18n:translate="" \n
+             i18n:domain="ui">URL</label>\n
+      <input type="text" \n
+             name="url" \n
+             id="url" \n
+             size="80" \n
+             value="http://" />\n
+      <a href="" \n
+         target="_blank" \n
+         onclick="return setLink(this)" \n
+         value="" \n
+         i18n:translate="" \n
+         i18n:domain="ui">Preview</a>\n
     </div>\n
-    <input i18n:domain="ui" i18n:attributes="value" style="float:right" type="submit" name="WebSite_linkContent:method" value="Contribute"/>\n
-    <div class="clear"></div>\n
-  </div>\n
+    <tal:block tal:define="contribute_prefix string:">\n
+      <div metal:use-macro="here/WebSite_viewContributePropertyRenderer/macros/contribute_properties"/>\n
+    </tal:block>\n
+    <div>\n
+      <label for="description" \n
+             i18n:translate="" \n
+             i18n:domain="ui">Description</label>\n
+      <textarea cols="80" \n
+                rows="2" \n
+                name="description"></textarea>\n
+     </div>\n
+   </div>\n
+\n
+        <input type="hidden" \n
+               name="redirect_url" \n
+               tal:attributes="value python: here.getWebSiteValue().absolute_url()"/>   \n
+   <input i18n:domain="ui" \n
+          i18n:attributes="value" \n
+          style="float:right" \n
+          type="submit" \n
+          name="Base_contribute:method" \n
+          value="Contribute"/>\n
+   <div class="clear"></div>\n
+  </form>\n
+ </div>\n
   \n
   <div class="tabbertab"\n
     tal:define="user here/portal_membership/getAuthenticatedMember">\n
diff --git a/bt5/erp5_web/bt/revision b/bt5/erp5_web/bt/revision
index 17a2ddadb4..d17ea3a7d5 100644
--- a/bt5/erp5_web/bt/revision
+++ b/bt5/erp5_web/bt/revision
@@ -1 +1 @@
-907
\ No newline at end of file
+908
\ No newline at end of file
-- 
2.30.9