Commit 811127a8 authored by Jean-Paul Smets's avatar Jean-Paul Smets

Numerous bug fixes and improvements.

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@13355 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent 06de7a8b
......@@ -42,7 +42,7 @@
</item>
<item>
<key> <string>id</string> </key>
<value> <string>generate_site</string> </value>
<value> <string>generate_section</string> </value>
</item>
<item>
<key> <string>permissions</string> </key>
......@@ -58,7 +58,7 @@
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Generate Web Site Structure from Categories</string> </value>
<value> <string>Generation Web Section Structure from Category</string> </value>
</item>
<item>
<key> <string>visible</string> </key>
......@@ -81,7 +81,7 @@
<dictionary>
<item>
<key> <string>text</string> </key>
<value> <string>string:${object_url}/WebSite_viewGenerateSectionFromCategoryListDialog</string> </value>
<value> <string>string:${object_url}/WebSection_viewGenerateSectionFromCategoryDialog</string> </value>
</item>
</dictionary>
</pickle>
......
......@@ -48,7 +48,7 @@
<key> <string>permissions</string> </key>
<value>
<tuple>
<string>View</string>
<string>Manage portal</string>
</tuple>
</value>
</item>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<tuple>
<tuple>
<string>Products.CMFCore.ActionInformation</string>
<string>ActionInformation</string>
</tuple>
<none/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>__ac_local_roles__</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>action</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>category</string> </key>
<value> <string>object_action</string> </value>
</item>
<item>
<key> <string>condition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>icon</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>generate_section</string> </value>
</item>
<item>
<key> <string>permissions</string> </key>
<value>
<tuple>
<string>Manage portal</string>
</tuple>
</value>
</item>
<item>
<key> <string>priority</string> </key>
<value> <float>10.0</float> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Generation Web Section Structure from Category</string> </value>
</item>
<item>
<key> <string>visible</string> </key>
<value> <int>1</int> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<tuple>
<tuple>
<string>Products.CMFCore.Expression</string>
<string>Expression</string>
</tuple>
<none/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>text</string> </key>
<value> <string>string:${object_url}/WebSection_viewGenerateSectionFromCategoryDialog</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
......@@ -88,9 +88,7 @@
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
<value> <string></string> </value>
</item>
<item>
<key> <string>fallback_base_category</string> </key>
......
......@@ -64,10 +64,6 @@
<name>Add CMF Caching Policy Managers</name>
<role>Manager</role>
</permission>
<permission type='tuple'>
<name>Add CMF Calendar Tools</name>
<role>Manager</role>
</permission>
<permission type='tuple'>
<name>Add CMF Core Tools</name>
<role>Manager</role>
......@@ -76,22 +72,17 @@
<name>Add CMF Default Tools</name>
<role>Manager</role>
</permission>
<permission type='tuple'>
<name>Add CMF Report Tools</name>
<role>Manager</role>
<permission type='list'>
<name>Add CMF Groups Tools</name>
</permission>
<permission type='tuple'>
<name>Add CMF Setup Tools</name>
<name>Add CMF Report Tools</name>
<role>Manager</role>
</permission>
<permission type='tuple'>
<name>Add CMF Sites</name>
<role>Manager</role>
</permission>
<permission type='tuple'>
<name>Add CMF Unique Id Tools</name>
<role>Manager</role>
</permission>
<permission type='tuple'>
<name>Add CMFActivity Tools</name>
<role>Manager</role>
......@@ -104,10 +95,6 @@
<name>Add CMFMailIn Tools</name>
<role>Manager</role>
</permission>
<permission type='tuple'>
<name>Add Configured CMF Sites</name>
<role>Manager</role>
</permission>
<permission type='tuple'>
<name>Add Content Type Registrys</name>
<role>Manager</role>
......@@ -208,6 +195,18 @@
<name>Add Formulator Forms</name>
<role>Manager</role>
</permission>
<permission type='list'>
<name>Add GroupUserFolder</name>
</permission>
<permission type='list'>
<name>Add GroupUserFolders</name>
</permission>
<permission type='list'>
<name>Add Groups</name>
</permission>
<permission type='list'>
<name>Add KZMailmans</name>
</permission>
<permission type='tuple'>
<name>Add LocalContents</name>
<role>Manager</role>
......@@ -224,10 +223,16 @@
<name>Add MailHost objects</name>
<role>Manager</role>
</permission>
<permission type='list'>
<name>Add Mailman List Member</name>
</permission>
<permission type='tuple'>
<name>Add MessageCatalogs</name>
<role>Manager</role>
</permission>
<permission type='list'>
<name>Add MimetypesRegistry Tools</name>
</permission>
<permission type='tuple'>
<name>Add Page Templates</name>
<role>Manager</role>
......@@ -248,6 +253,9 @@
<name>Add Plugin Registrys</name>
<role>Manager</role>
</permission>
<permission type='list'>
<name>Add PortalTransforms Tools</name>
</permission>
<permission type='tuple'>
<name>Add Python Scripts</name>
<role>Manager</role>
......@@ -300,9 +308,8 @@
<name>Add Z MySQL Database Connections</name>
<role>Manager</role>
</permission>
<permission type='tuple'>
<name>Add Z MySQL Database Deferred Connections</name>
<role>Manager</role>
<permission type='list'>
<name>Add Z MySQL Deferred Database Connections</name>
</permission>
<permission type='tuple'>
<name>Add ZCatalogs</name>
......@@ -330,10 +337,6 @@
<role>Author</role>
<role>Manager</role>
</permission>
<permission type='tuple'>
<name>Add portal events</name>
<role>Manager</role>
</permission>
<permission type='tuple'>
<name>Add portal folders</name>
<role>Assignor</role>
......@@ -348,6 +351,12 @@
<name>Add portal topics</name>
<role>Manager</role>
</permission>
<permission type='list'>
<name>Add secure MailHost objects</name>
</permission>
<permission type='list'>
<name>Admin KZMailman</name>
</permission>
<permission type='tuple'>
<name>Change Browser Id Manager</name>
<role>Manager</role>
......@@ -392,6 +401,9 @@
<name>Change Lock Information</name>
<role>Manager</role>
</permission>
<permission type='list'>
<name>Change Mailman List Options</name>
</permission>
<permission type='tuple'>
<name>Change Page Templates</name>
<role>Manager</role>
......@@ -445,10 +457,6 @@
<name>Change permissions</name>
<role>Manager</role>
</permission>
<permission type='tuple'>
<name>Change portal events</name>
<role>Manager</role>
</permission>
<permission type='tuple'>
<name>Change portal topics</name>
<role>Manager</role>
......@@ -459,6 +467,7 @@
</permission>
<permission type='tuple'>
<name>Copy or Move</name>
<role>Author</role>
<role>Manager</role>
</permission>
<permission type='tuple'>
......@@ -473,6 +482,9 @@
<name>Define permissions</name>
<role>Manager</role>
</permission>
<permission type='list'>
<name>Delete Groups</name>
</permission>
<permission type='tuple'>
<name>Delete objects</name>
<role>Assignor</role>
......@@ -498,6 +510,9 @@
<name>FTP access</name>
<role>Manager</role>
</permission>
<permission type='list'>
<name>Get Mailman List Members</name>
</permission>
<permission type='tuple'>
<name>Import/Export objects</name>
<role>Manager</role>
......@@ -571,6 +586,9 @@
<name>Manage ZCatalogIndex Entries</name>
<role>Manager</role>
</permission>
<permission type='list'>
<name>Manage extensions</name>
</permission>
<permission type='tuple'>
<name>Manage languages</name>
<role>Manager</role>
......@@ -616,6 +634,9 @@
<name>Query Vocabulary</name>
<role>Manager</role>
</permission>
<permission type='list'>
<name>Remove Mailman List Member</name>
</permission>
<permission type='tuple'>
<name>Reply to item</name>
<role>Manager</role>
......@@ -640,6 +661,9 @@
<name>Search for principals</name>
<role>Manager</role>
</permission>
<permission type='list'>
<name>Set Group Ownership</name>
</permission>
<permission type='tuple'>
<name>Set own password</name>
<role>Manager</role>
......@@ -672,6 +696,9 @@
<name>Use Factories</name>
<role>Manager</role>
</permission>
<permission type='list'>
<name>Use external editor</name>
</permission>
<permission type='tuple'>
<name>Use mailhost services</name>
<role>Manager</role>
......@@ -685,6 +712,9 @@
<role>Author</role>
<role>Manager</role>
</permission>
<permission type='list'>
<name>View Groups</name>
</permission>
<permission type='tuple'>
<name>View History</name>
<role>Assignee</role>
......@@ -694,6 +724,9 @@
<role>Author</role>
<role>Manager</role>
</permission>
<permission type='list'>
<name>View KZMailman</name>
</permission>
<permission type='tuple'>
<name>View ZMailMessage</name>
<role>Manager</role>
......
......@@ -150,6 +150,9 @@
<permission type='list'>
<name>Add Groups</name>
</permission>
<permission type='list'>
<name>Add KZMailmans</name>
</permission>
<permission type='list'>
<name>Add LocalContents</name>
</permission>
......@@ -162,9 +165,15 @@
<permission type='list'>
<name>Add MailHost objects</name>
</permission>
<permission type='list'>
<name>Add Mailman List Member</name>
</permission>
<permission type='list'>
<name>Add MessageCatalogs</name>
</permission>
<permission type='list'>
<name>Add MimetypesRegistry Tools</name>
</permission>
<permission type='list'>
<name>Add Page Templates</name>
</permission>
......@@ -180,6 +189,9 @@
<permission type='list'>
<name>Add Plugin Registrys</name>
</permission>
<permission type='list'>
<name>Add PortalTransforms Tools</name>
</permission>
<permission type='list'>
<name>Add Python Scripts</name>
</permission>
......@@ -220,7 +232,7 @@
<name>Add Z MySQL Database Connections</name>
</permission>
<permission type='list'>
<name>Add Z MySQL Database Deferred Connections</name>
<name>Add Z MySQL Deferred Database Connections</name>
</permission>
<permission type='list'>
<name>Add ZCatalogs</name>
......@@ -252,6 +264,9 @@
<permission type='list'>
<name>Add secure MailHost objects</name>
</permission>
<permission type='list'>
<name>Admin KZMailman</name>
</permission>
<permission type='list'>
<name>Change Browser Id Manager</name>
</permission>
......@@ -285,6 +300,9 @@
<permission type='list'>
<name>Change Lock Information</name>
</permission>
<permission type='list'>
<name>Change Mailman List Options</name>
</permission>
<permission type='list'>
<name>Change Page Templates</name>
</permission>
......@@ -363,6 +381,9 @@
<permission type='list'>
<name>FTP access</name>
</permission>
<permission type='list'>
<name>Get Mailman List Members</name>
</permission>
<permission type='list'>
<name>Import/Export objects</name>
</permission>
......@@ -450,6 +471,9 @@
<permission type='list'>
<name>Query Vocabulary</name>
</permission>
<permission type='list'>
<name>Remove Mailman List Member</name>
</permission>
<permission type='list'>
<name>Reply to item</name>
</permission>
......@@ -515,6 +539,9 @@
<permission type='list'>
<name>View History</name>
</permission>
<permission type='list'>
<name>View KZMailman</name>
</permission>
<permission type='list'>
<name>View ZMailMessage</name>
</permission>
......
......@@ -82,7 +82,10 @@
<key> <string>group_list</string> </key>
<value>
<tuple>
<string>document</string>
<string>web_document</string>
<string>recent_document</string>
<string>my_document</string>
</tuple>
</value>
</item>
......
......@@ -75,10 +75,7 @@
"""\n
# Retrieve the edit action\n
edit_method = getattr(context, form_action)\n
base_value = edit_method(form_id, **kw)\n
\n
redir="%s?editable_mode:int=1" % edit_document_url\n
context.REQUEST[\'RESPONSE\'].redirect(redir)\n
base_value = edit_method(form_id, editable_mode=editable_mode, ignore_layout=ignore_layout, **kw)\n
</string> </value>
</item>
<item>
......@@ -101,7 +98,7 @@ context.REQUEST[\'RESPONSE\'].redirect(redir)\n
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>form_id, form_action, edit_document_url, **kw</string> </value>
<value> <string>form_id, form_action, edit_document_url, editable_mode=1, ignore_layout=0, **kw</string> </value>
</item>
<item>
<key> <string>errors</string> </key>
......@@ -121,7 +118,7 @@ context.REQUEST[\'RESPONSE\'].redirect(redir)\n
<dictionary>
<item>
<key> <string>co_argcount</string> </key>
<value> <int>3</int> </value>
<value> <int>5</int> </value>
</item>
<item>
<key> <string>co_varnames</string> </key>
......@@ -130,15 +127,14 @@ context.REQUEST[\'RESPONSE\'].redirect(redir)\n
<string>form_id</string>
<string>form_action</string>
<string>edit_document_url</string>
<string>editable_mode</string>
<string>ignore_layout</string>
<string>kw</string>
<string>getattr</string>
<string>context</string>
<string>edit_method</string>
<string>_apply_</string>
<string>base_value</string>
<string>redir</string>
<string>_getattr_</string>
<string>_getitem_</string>
</tuple>
</value>
</item>
......@@ -150,7 +146,10 @@ context.REQUEST[\'RESPONSE\'].redirect(redir)\n
<item>
<key> <string>func_defaults</string> </key>
<value>
<none/>
<tuple>
<int>1</int>
<int>0</int>
</tuple>
</value>
</item>
<item>
......
......@@ -74,11 +74,9 @@
The view_document_url is used to define the URL to return to\n
after editing the document.\n
"""\n
# Retrieve the edit action\n
edit_method = getattr(context, form_action)\n
base_value = edit_method(form_id, **kw)\n
\n
redir="%s?editable_mode:int=0" % view_document_url\n
context.REQUEST[\'RESPONSE\'].redirect(redir)\n
base_value = edit_method(form_id, editable_mode=0, ignore_layout=ignore_layout, **kw)\n
</string> </value>
</item>
<item>
......@@ -101,7 +99,7 @@ context.REQUEST[\'RESPONSE\'].redirect(redir)\n
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>form_id, form_action, view_document_url, **kw</string> </value>
<value> <string>form_id, form_action, view_document_url, editable_mode=0, ignore_layout=0, **kw</string> </value>
</item>
<item>
<key> <string>errors</string> </key>
......@@ -121,7 +119,7 @@ context.REQUEST[\'RESPONSE\'].redirect(redir)\n
<dictionary>
<item>
<key> <string>co_argcount</string> </key>
<value> <int>3</int> </value>
<value> <int>5</int> </value>
</item>
<item>
<key> <string>co_varnames</string> </key>
......@@ -130,15 +128,14 @@ context.REQUEST[\'RESPONSE\'].redirect(redir)\n
<string>form_id</string>
<string>form_action</string>
<string>view_document_url</string>
<string>editable_mode</string>
<string>ignore_layout</string>
<string>kw</string>
<string>getattr</string>
<string>context</string>
<string>edit_method</string>
<string>_apply_</string>
<string>base_value</string>
<string>redir</string>
<string>_getattr_</string>
<string>_getitem_</string>
</tuple>
</value>
</item>
......@@ -150,7 +147,10 @@ context.REQUEST[\'RESPONSE\'].redirect(redir)\n
<item>
<key> <string>func_defaults</string> </key>
<value>
<none/>
<tuple>
<int>0</int>
<int>0</int>
</tuple>
</value>
</item>
<item>
......
......@@ -71,15 +71,16 @@
<value> <string encoding="cdata"><![CDATA[
"""\n
This script repeats publication section category items\n
This script repeats publication section items\n
in such way that it is possible to select multiple\n
publication section categories for the same document\n
publication sections for a single web page.\n
"""\n
# Initialise result\n
sub_field_list = []\n
\n
# Maximum size of the MultiListField\n
default_sub_field_property_dict.update({\n
\'title\': \'Publication\',\n
\'required\': 0,\n
\'field_type\': \'ListField\',\n
\'size\': 1,\n
......@@ -95,7 +96,11 @@ for i in range(1):\n
z += 1\n
sub_field_list.append(new_dict)\n
\n
section_list = context.getPublicationSectionList()\n
\n
# WARNING This code is very dangerous and ad hoc\n
# But it was the only way to make parallel list field\n
# work in this case \n
section_list = context.aq_parent.aq_parent.getPublicationSectionList()\n
section_list.reverse()\n
for value in section_list:\n
new_dict = default_sub_field_property_dict.copy()\n
......@@ -105,7 +110,7 @@ for value in section_list:\n
z += 1\n
sub_field_list.append(new_dict)\n
\n
new_dict[\'title\'] = default_sub_field_property_dict[\'title\']\n
new_dict[\'title\'] = \'Publication Section\'\n
sub_field_list.reverse()\n
return sub_field_list\n
......@@ -169,7 +174,6 @@ return sub_field_list\n
<string>context</string>
<string>section_list</string>
<string>value</string>
<string>_getitem_</string>
</tuple>
</value>
</item>
......
......@@ -63,7 +63,7 @@
<list>
<string>left (Page Properties)</string>
<string>right (Publication)</string>
<string>center (Description)</string>
<string>center</string>
<string>bottom (Content)</string>
</list>
</value>
......@@ -81,7 +81,7 @@
</value>
</item>
<item>
<key> <string>center (Description)</string> </key>
<key> <string>center</string> </key>
<value>
<list>
<string>my_description</string>
......
......@@ -69,16 +69,19 @@
<item>
<key> <string>_body</string> </key>
<value> <string>"""\n
This scripts browses recursively a selected list of base categories\n
to generate a mirror structure at the Web Site level in the for\n
of Web Sections.\n
This scripts browses recursively a to generate a mirror structure\n
within the current Web Section. It sets predicate parameters\n
on all categories excluding itself.\n
\n
category_list -- list of categories to use\n
category -- the category to use\n
"""\n
from ZODB.POSException import ConflictError\n
\n
translateString = context.Base_translateString\n
category_tool = context.portal_categories\n
global section_count\n
section_count = 0\n
failed_list = []\n
\n
valid_char = "abcdefghijklmnopqrstuvwxyz0123456789-_"\n
\n
......@@ -91,50 +94,90 @@ def getNiceID(s):\n
s = s.replace(\'_\', \'-\')\n
return s\n
\n
def createWebSectionFromCategoryValue(container, category):\n
def createWebSectionFromCategoryValue(container, category, section_id=None):\n
global section_count\n
# Create a nice URI\n
# If the ID is a number, use the title\n
if category.hasCodification():\n
section_id = getNiceID(category.getCodification())\\\n
or getNiceID(category.getTitle()) or getNiceID(category.getId())\n
else:\n
section_id = getNiceID(category.getTitle()) or getNiceID(category.getId())\n
if section_id is None:\n
try:\n
# Check if this category looks like an int\n
section_id = int(category.getId())\n
# Looks like an int, so it should be converted into\n
# something nicer based on the reference or on the title\n
if category.hasReference():\n
section_id = getNiceID(category.getReference())\\\n
or getNiceID(category.getTitle()) or getNiceID(category.getId())\n
if category.hasShortTitle():\n
section_id = getNiceID(category.getShortTitle())\\\n
or getNiceID(category.getTitle()) or getNiceID(category.getId())\n
else:\n
section_id = getNiceID(category.getTitle()) or getNiceID(category.getId())\n
except ValueError:\n
# It is not an int, so it can be used as is\n
section_id = category.getId()\n
# Create a new Web Section if necessary\n
new_section = None\n
if section_id not in container.contentIds():\n
section_count += 1\n
new_section = container.newContent( portal_type = \'Web Section\'\n
, id = section_id\n
, title = category.getTitle()\n
, description = category.getDescription()\n
, visible = True\n
, membership_criterion_base_category = (category.getBaseCategory().getId(),)\n
, membership_criterion_category = (category.getRelativeUrl(),)\n
)\n
try:\n
# If we are not browsing a standard Category tree, we\n
# must add a trailing base_category_id\n
if category.getPortalType() not in (\'Category\', \'Base Category\'):\n
category_url = \'%s/%s\' % (base_category_id, category.getRelativeUrl())\n
else:\n
category_url = category.getRelativeUrl()\n
new_section = container.newContent( portal_type = \'Web Section\'\n
, id = section_id\n
, title = category.getTitle()\n
, description = category.getDescription()\n
, visible = True\n
, membership_criterion_base_category = (base_category_id,)\n
, membership_criterion_category = (category_url,)\n
)\n
except ConflictError:\n
raise\n
except:\n
failed_list.append(category.getRelativeUrl())\n
else:\n
new_section = container[section_id]\n
# If we are not browsing a standard Category tree, we\n
# must add a trailing base_category_id\n
if category.getPortalType() not in (\'Category\', \'Base Category\'):\n
category_url = \'%s/%s\' % (base_category_id, category.getRelativeUrl())\n
else:\n
category.getRelativeUrl()\n
if update_existing:\n
new_section.edit(title = category.getTitle()\n
, description = category.getDescription()\n
, visible = True\n
, membership_criterion_base_category = (category.getBaseCategory().getId(),)\n
, membership_criterion_category = (category.getRelativeUrl(),)\n
, membership_criterion_base_category = (base_category_id,)\n
, membership_criterion_category = (category_url,)\n
)\n
# Call the function recursively\n
for sub_category in category.contentValues():\n
createWebSectionFromCategoryValue(new_section, sub_category)\n
if new_section is not None:\n
# It is possible to browse objects which are not categories\n
# ex. Projects\n
for sub_category in category.contentValues():\n
createWebSectionFromCategoryValue(new_section, sub_category)\n
# Remove sections which have no counterpart in categories\n
if remove_missing:\n
# XXX Not implemented yet\n
pass\n
\n
# Call the recursive section generator for each category\n
for my_category in category_list:\n
createWebSectionFromCategoryValue(context, category_tool[my_category])\n
my_category_value = category_tool.restrictedTraverse(category)\n
base_category_id = my_category_value.getBaseCategory().getId()\n
createWebSectionFromCategoryValue(context, my_category_value, section_id=section_id)\n
\n
# Warn about failures if any\n
if failed_list:\n
return context.Base_redirect(form_id,\n
keep_items = dict(portal_status_message = translateString("Generated ${section_count} sections for the Web Site. Failed with ${failed_text}",\n
mapping = dict(section_count = section_count,\n
failed_text = \', \'.join(failed_list)))))\n
\n
\n
return context.Base_redirect(form_id,\n
keep_items = dict(portal_status_message = translateString("Generated ${section_count} sections for the Web Site.",\n
mapping = dict(section_count = section_count))))\n
mapping = dict(section_count = section_count))))\n
</string> </value>
</item>
<item>
......@@ -157,7 +200,7 @@ return context.Base_redirect(form_id,\n
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>category_list, update_existing=0, remove_missing=0, form_id=\'view\', **kw</string> </value>
<value> <string>category, section_id, update_existing=0, remove_missing=0, form_id=\'view\', **kw</string> </value>
</item>
<item>
<key> <string>errors</string> </key>
......@@ -177,28 +220,32 @@ return context.Base_redirect(form_id,\n
<dictionary>
<item>
<key> <string>co_argcount</string> </key>
<value> <int>4</int> </value>
<value> <int>5</int> </value>
</item>
<item>
<key> <string>co_varnames</string> </key>
<value>
<tuple>
<string>category_list</string>
<string>category</string>
<string>section_id</string>
<string>update_existing</string>
<string>remove_missing</string>
<string>form_id</string>
<string>kw</string>
<string>ZODB.POSException</string>
<string>ConflictError</string>
<string>_getattr_</string>
<string>context</string>
<string>translateString</string>
<string>category_tool</string>
<string>section_count</string>
<string>failed_list</string>
<string>valid_char</string>
<string>getNiceID</string>
<string>None</string>
<string>base_category_id</string>
<string>createWebSectionFromCategoryValue</string>
<string>_getiter_</string>
<string>my_category</string>
<string>_getitem_</string>
<string>my_category_value</string>
<string>dict</string>
</tuple>
</value>
......@@ -220,7 +267,7 @@ return context.Base_redirect(form_id,\n
</item>
<item>
<key> <string>id</string> </key>
<value> <string>WebSite_generateSectionFromCategoryList</string> </value>
<value> <string>WebSection_generateSectionFromCategory</string> </value>
</item>
<item>
<key> <string>warnings</string> </key>
......
......@@ -105,7 +105,12 @@ current_section = context.getWebSectionValue()\n
reference_list = context.getAggregateReferenceList()\n
if not reference_list: return None # Quick return\n
\n
return context.getDocumentValue(name=reference_list)\n
# We should only display those documents which are shared\n
# to some extend. This list takes into account some common\n
# state IDs used in ERP5.\n
return context.getDocumentValue(name=reference_list,\n
validation_state=[\'released\', \'published\', \'shared\',\n
\'public\', \'validated\', ])\n
</string> </value>
</item>
<item>
......
......@@ -96,14 +96,19 @@ portal_catalog = portal.portal_catalog\n
valid_portal_type_list = [\'Web Page\', ]\n
\n
# Find the applicable language\n
language = portal.Localizer.get_selected_language()\n
if kw.has_key(\'language\'):\n
language = kw[\'language\']\n
del kw[\'language\']\n
else:\n
language = portal.Localizer.get_selected_language()\n
\n
# Search the catalog for all documents matching the reference\n
# this will only return documents which are accessible by the user\n
web_page_list = portal_catalog(reference=name, portal_type=valid_portal_type_list,\n
language=language,\n
order_by=[(\'version\', \'descending\')],\n
group_by=(\'reference\',))\n
group_by=(\'reference\',),\n
**kw)\n
\n
try:\n
# Try to get the first page on the list\n
......@@ -113,7 +118,8 @@ except IndexError:\n
# Search again without the language\n
web_page_list = portal_catalog(reference=name, portal_type=\'Web Page\', \n
order_by=[(\'version\', \'descending\')],\n
group_by=(\'reference\',))\n
group_by=(\'reference\',),\n
**kw)\n
try:\n
# Try to get the first page on the list\n
web_page = web_page_list[0]\n
......@@ -146,7 +152,7 @@ return web_page\n
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>name,portal=None</string> </value>
<value> <string>name, portal=None, **kw</string> </value>
</item>
<item>
<key> <string>errors</string> </key>
......@@ -174,14 +180,17 @@ return web_page\n
<tuple>
<string>name</string>
<string>portal</string>
<string>kw</string>
<string>None</string>
<string>_getattr_</string>
<string>context</string>
<string>portal_catalog</string>
<string>valid_portal_type_list</string>
<string>_getitem_</string>
<string>language</string>
<string>_write_</string>
<string>_apply_</string>
<string>web_page_list</string>
<string>_getitem_</string>
<string>web_page</string>
<string>IndexError</string>
</tuple>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<tuple>
<tuple>
<string>Products.ERP5Form.Form</string>
<string>ERP5Form</string>
</tuple>
<none/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>__ac_local_roles__</string> </key>
<value>
<none/>
</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/>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>_owner</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>action</string> </key>
<value> <string>WebSection_generateSectionFromCategory</string> </value>
</item>
<item>
<key> <string>encoding</string> </key>
<value> <string>UTF-8</string> </value>
</item>
<item>
<key> <string>enctype</string> </key>
<value> <string>multipart/form-data</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>
<string>your_category</string>
<string>your_section_id</string>
<string>your_update_existing</string>
<string>your_remove_missing</string>
</list>
</value>
</item>
<item>
<key> <string>right</string> </key>
<value>
<list/>
</value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>WebSection_viewGenerateSectionFromCategoryDialog</string> </value>
</item>
<item>
<key> <string>method</string> </key>
<value> <string>POST</string> </value>
</item>
<item>
<key> <string>name</string> </key>
<value> <string>WebSite_viewGenerateSectionFromCategoryList</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>Generate Web Section Structure from Category</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>
......@@ -5,16 +5,22 @@
<tuple>
<tuple>
<string>Products.Formulator.StandardFields</string>
<string>MultiCheckBoxField</string>
<string>StringField</string>
</tuple>
<none/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_owner</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>your_category_list</string> </value>
<value> <string>your_category</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
......@@ -29,8 +35,8 @@
<value> <string>Input is required but no input given.</string> </value>
</item>
<item>
<key> <string>unknown_selection</string> </key>
<value> <string>You selected an item that was not in the list.</string> </value>
<key> <string>too_long</string> </key>
<value> <string>Too much input was given.</string> </value>
</item>
</dictionary>
</value>
......@@ -55,6 +61,14 @@
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
......@@ -68,7 +82,7 @@
<value> <string></string> </value>
</item>
<item>
<key> <string>extra_item</string> </key>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
......@@ -76,19 +90,19 @@
<value> <string></string> </value>
</item>
<item>
<key> <string>items</string> </key>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>orientation</string> </key>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<key> <string>truncate</string> </key>
<value> <string></string> </value>
</item>
<item>
......@@ -96,7 +110,7 @@
<value> <string></string> </value>
</item>
<item>
<key> <string>view_separator</string> </key>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
......@@ -122,6 +136,14 @@
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
......@@ -135,7 +157,7 @@
<value> <string></string> </value>
</item>
<item>
<key> <string>extra_item</string> </key>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
......@@ -143,13 +165,7 @@
<value> <string></string> </value>
</item>
<item>
<key> <string>items</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>orientation</string> </key>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
......@@ -160,12 +176,16 @@
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>truncate</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>view_separator</string> </key>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
......@@ -185,13 +205,19 @@
</item>
<item>
<key> <string>default</string> </key>
<value>
<list/>
</value>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string>Select base categories to use for the structure of this Web Site</string> </value>
<value> <string>Enter here the root category from which we should create a section and subsections.</string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <int>40</int> </value>
</item>
<item>
<key> <string>editable</string> </key>
......@@ -206,7 +232,7 @@
<value> <string></string> </value>
</item>
<item>
<key> <string>extra_item</string> </key>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
......@@ -214,14 +240,8 @@
<value> <int>0</int> </value>
</item>
<item>
<key> <string>items</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>orientation</string> </key>
<value> <string>vertical</string> </value>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
......@@ -229,19 +249,19 @@
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Categories</string> </value>
<value> <string>Category</string> </value>
</item>
<item>
<key> <string>truncate</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>view_separator</string> </key>
<value> <string encoding="cdata"><![CDATA[
<br />
]]></string> </value>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
</dictionary>
</value>
......@@ -249,23 +269,4 @@
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<tuple>
<tuple>
<string>Products.Formulator.TALESField</string>
<string>TALESMethod</string>
</tuple>
<none/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>here/WebSite_getBaseCategoryItemList</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<tuple>
<tuple>
<string>Products.Formulator.StandardFields</string>
<string>StringField</string>
</tuple>
<none/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_owner</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>your_section_id</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>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value>
</item>
<item>
<key> <string>too_long</string> </key>
<value> <string>Too much input was given.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>truncate</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>truncate</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string>Enter here the ID of the root section (ex. group_section)</string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <int>20</int> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Section ID</string> </value>
</item>
<item>
<key> <string>truncate</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
......@@ -12,6 +12,10 @@
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Cacheable__manager_id</string> </key>
<value> <string>style_cache</string> </value>
</item>
<item>
<key> <string>__ac_local_roles__</string> </key>
<value>
......
......@@ -12,6 +12,10 @@
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Cacheable__manager_id</string> </key>
<value> <string>style_cache</string> </value>
</item>
<item>
<key> <string>__ac_local_roles__</string> </key>
<value>
......
......@@ -12,6 +12,10 @@
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Cacheable__manager_id</string> </key>
<value> <string>style_cache</string> </value>
</item>
<item>
<key> <string>__ac_local_roles__</string> </key>
<value>
......
......@@ -12,6 +12,10 @@
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Cacheable__manager_id</string> </key>
<value> <string>style_cache</string> </value>
</item>
<item>
<key> <string>__ac_local_roles__</string> </key>
<value>
......
......@@ -12,6 +12,10 @@
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Cacheable__manager_id</string> </key>
<value> <string>style_cache</string> </value>
</item>
<item>
<key> <string>__ac_local_roles__</string> </key>
<value>
......
......@@ -12,6 +12,10 @@
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Cacheable__manager_id</string> </key>
<value> <string>style_cache</string> </value>
</item>
<item>
<key> <string>__ac_local_roles__</string> </key>
<value>
......
......@@ -12,6 +12,10 @@
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Cacheable__manager_id</string> </key>
<value> <string>style_cache</string> </value>
</item>
<item>
<key> <string>__ac_local_roles__</string> </key>
<value>
......
......@@ -12,6 +12,10 @@
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Cacheable__manager_id</string> </key>
<value> <string>style_cache</string> </value>
</item>
<item>
<key> <string>__ac_local_roles__</string> </key>
<value>
......
......@@ -12,6 +12,10 @@
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Cacheable__manager_id</string> </key>
<value> <string>style_cache</string> </value>
</item>
<item>
<key> <string>__ac_local_roles__</string> </key>
<value>
......
......@@ -12,6 +12,10 @@
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Cacheable__manager_id</string> </key>
<value> <string>style_cache</string> </value>
</item>
<item>
<key> <string>__ac_local_roles__</string> </key>
<value>
......
......@@ -12,6 +12,10 @@
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Cacheable__manager_id</string> </key>
<value> <string>style_cache</string> </value>
</item>
<item>
<key> <string>__ac_local_roles__</string> </key>
<value>
......
......@@ -12,6 +12,10 @@
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Cacheable__manager_id</string> </key>
<value> <string>style_cache</string> </value>
</item>
<item>
<key> <string>__ac_local_roles__</string> </key>
<value>
......
......@@ -12,6 +12,10 @@
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Cacheable__manager_id</string> </key>
<value> <string>style_cache</string> </value>
</item>
<item>
<key> <string>__ac_local_roles__</string> </key>
<value>
......
......@@ -12,6 +12,10 @@
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Cacheable__manager_id</string> </key>
<value> <string>style_cache</string> </value>
</item>
<item>
<key> <string>__ac_local_roles__</string> </key>
<value>
......
......@@ -12,6 +12,10 @@
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Cacheable__manager_id</string> </key>
<value> <string>style_cache</string> </value>
</item>
<item>
<key> <string>__ac_local_roles__</string> </key>
<value>
......
......@@ -68,9 +68,7 @@
</item>
<item>
<key> <string>_body</string> </key>
<value> <string encoding="cdata"><![CDATA[
"""\n
<value> <string>"""\n
Create new Content by cloning an existing document\n
or by creating a new document.\n
\n
......@@ -125,7 +123,6 @@ if clone:\n
original_id = getattr(context, \'original_id\', None) or context.getId()\n
# This is required for objects acquired in Web Section\n
clipboard = directory.manage_copyObjects(ids=[original_id])\n
#context.log("Kev test clipboard >>>>>", repr(clipboard))\n
paste_result = directory.manage_pasteObjects(cb_copy_data=clipboard)\n
new_object = directory[paste_result[0][\'new_id\']]\n
message_kind = \'clone\'\n
......@@ -139,20 +136,20 @@ else:\n
form_id = \'view\'\n
message_kind = \'new\'\n
\n
# Clone properties to the new object\n
# Set properties to the new object\n
edit_kw = {}\n
property_id_list = new_object.propertyIds()\n
from Products.ERP5Type.Log import log\n
log(\'propertyIds\', property_id_list)\n
for (key, val) in form_data.items():\n
if key in ACCEPTABLE_FORM_ID_LIST and key in property_id_list:\n
edit_kw[key] = val\n
if key in ACCEPTABLE_FORM_ID_LIST and key[len(\'clone_\'):] in property_id_list:\n
edit_kw[key[len(\'clone_\'):]] = val\n
new_object.edit(**edit_kw)\n
\n
if not editable_mode: form_id = \'view\'\n
return new_object.Base_redirect(form_id, editable_mode=1,\n
keep_items={\'portal_status_message\': translateString("Created %s ${portal_type} with reference \'${reference}\' and version \'${version} [${language}]\'." % message_kind, mapping = kw)})\n
]]></string> </value>
</string> </value>
</item>
<item>
<key> <string>_code</string> </key>
......@@ -170,6 +167,14 @@ return new_object.Base_redirect(form_id, editable_mode=1,\n
<key> <string>_params</string> </key>
<value> <string>clone=1, form_id, editable_mode=0</string> </value>
</item>
<item>
<key> <string>_proxy_roles</string> </key>
<value>
<tuple>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>errors</string> </key>
<value>
......@@ -221,9 +226,12 @@ return new_object.Base_redirect(form_id, editable_mode=1,\n
<string>module</string>
<string>edit_kw</string>
<string>property_id_list</string>
<string>Products.ERP5Type.Log</string>
<string>log</string>
<string>_getiter_</string>
<string>key</string>
<string>val</string>
<string>len</string>
</tuple>
</value>
</item>
......
......@@ -87,7 +87,7 @@ portal_type = context.getPortalType()\n
request = context.REQUEST\n
current_web_section = request.current_web_section\n
current_web_section_pt = current_web_section.getPortalType()\n
action_dict = request.get(\'actions\', {}) # actions needs to be renamed to action_dict\n
action_dict = request.get(\'actions\', {}) # XXX actions needs to be renamed to action_dict\n
exchange_action_list = action_dict.get(\'object_exchange\', [])\n
button_action_list = action_dict.get(\'object_button\', [])\n
portal_url = context.portal_url()\n
......@@ -100,14 +100,20 @@ editable_absolute_url = getattr(context, \'editable_absolute_url\', absolute_url
\n
\n
# Append a button to edit the current document\n
if not request.form.get(\'editable_mode\', 0): result.append(dict(\n
if not request.form.get(\'editable_mode\', 0):\n
# The title is called Edit only if the document can be edited\n
if context.portal_membership.checkPermission(\'Modify portal content\', context):\n
edit_title = translateString("Edit ${portal_type}", mapping=dict(portal_type=portal_type))\n
else:\n
edit_title = translateString("Access ${portal_type} details", mapping=dict(portal_type=portal_type))\n
result.append(dict(\n
url = "%s/view?editable_mode:int=1&%s" % (editable_absolute_url, http_parameters),\n
icon = context.getIcon() or \'file_icon.gif\',\n
title = translateString("Edit ${portal_type}", mapping=dict(portal_type=portal_type)),\n
title = edit_title,\n
label = "%s Icon" % portal_type,\n
))\n
else: result.append(dict(\n
url = "%s/view?editable_mode=&%s" % (editable_absolute_url, http_parameters),\n
url = "%s/view?editable_mode:int=0&%s" % (absolute_url, http_parameters),\n
icon = context.getIcon() or \'file_icon.gif\',\n
title = translateString("View ${portal_type}", mapping=dict(portal_type=portal_type)),\n
label = "%s Icon" % portal_type,\n
......@@ -205,6 +211,7 @@ return result\n
<string>getattr</string>
<string>editable_absolute_url</string>
<string>dict</string>
<string>edit_title</string>
<string>_getiter_</string>
<string>action</string>
<string>_getitem_</string>
......
......@@ -49,7 +49,6 @@
<value> <string encoding="cdata"><![CDATA[
<div class="related_docs">\n
<div class="title">History:</div>\n
<table id="#workflow_history" tal:define="history here/Base_getWorkflowEventInfoList">\n
<tr tal:repeat="event history">\n
<td tal:content="python: here.Base_FormatDate(event[\'date\'])"/>\n
......
......@@ -73,7 +73,7 @@
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Document_viewWikiRelationListWidget</string> </value>
<value> <string>Document_viewImplicitRelationListWidget</string> </value>
</item>
</dictionary>
</pickle>
......
......@@ -59,12 +59,16 @@
<div class="tabbertab">\n
<h2>Contribute</h2>\n
<div class="fieldset">\n
<div tal:define="search_type_list here/ERP5Site_getSearchableDocumentTypeList">\n
<div>\n
<label for="doctype" i18n:translate="" i18n:domain="ui">Type</label>\n
<select size="1" name="doctype" id="doctype" onchange="toggleMakeTemplateButton(this);">\n
<option value="" i18n:translate="" i18n:domain="ui">-- Select Document Type --</option>\n
<option value="Memo" value="" i18n:translate="" i18n:domain="ui">Memo</option>\n
<option value="Report" value="" i18n:translate="" i18n:domain="ui">Report</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
</tal:block>\n
<option value="" i18n:translate="" i18n:domain="ui">-- Any other Documents Type --</option>\n
</select>\n
<input type="file" name="datafile" size="30" />\n
</div>\n
......@@ -112,102 +116,52 @@
</div>\n
\n
<div class="tabbertab"\n
tal:define="user here/ERP5Site_getCurrentUserValue"\n
>\n
tal:define="user here/ERP5Site_getCurrentUserValue">\n
<h2 value="" i18n:translate="" i18n:domain="ui">File</h2>\n
\n
<div class="filebox" id="administration">\n
<ul>\n
<li class="listheader" value="" i18n:translate="" i18n:domain="ui">Administration:</li>\n
<ul>\n
<li tal:condition="python:here.ERP5Site_isNewContentAllowed(\'Medical Claim\', user)">\n
<span tal:define="impl python:False; title string:Medical Claim;">\n
<span metal:use-macro="here/au_macros/macros/file_feature">\n
</span>\n
</span>\n
</li>\n
<li tal:condition="python:here.ERP5Site_isNewContentAllowed(\'Leave Request\', user)">\n
<span tal:define="impl python:False; title string:Leave Request;">\n
<span metal:use-macro="here/au_macros/macros/file_feature">\n
</span>\n
</span>\n
</li>\n
<li tal:condition="python:here.ERP5Site_isNewContentAllowed(\'Travel Request\', user)">\n
<span tal:define="impl python:False; title string:Travel Request;">\n
<span metal:use-macro="here/au_macros/macros/file_feature">\n
</span>\n
</span>\n
</li>\n
<li tal:condition="python:here.ERP5Site_isNewContentAllowed(\'Passport Request\', user)">\n
<span tal:define="impl python:False; title string:Passport Request;">\n
<span metal:use-macro="here/au_macros/macros/file_feature">\n
</span>\n
</span>\n
</li>\n
<li tal:condition="python:here.ERP5Site_isNewContentAllowed(\'External Library File\', user)">\n
<a href="ERP?portal_type=External Library File" value="" i18n:translate="" i18n:domain="ui">Library File</a>\n
</li>\n
</ul>\n
</ul>\n
</div>\n
\n
<div class="filebox" id="conference">\n
<ul>\n
<li class="listheader" value="" i18n:translate="" i18n:domain="ui">Conference:</li>\n
<ul>\n
<li tal:condition="python:here.ERP5Site_isNewContentAllowed(\'Conference\', user)">\n
<span tal:define="impl python:True; title string:Conference;">\n
<span metal:use-macro="here/au_macros/macros/file_feature">\n
</span>\n
</span>\n
</li>\n
<li tal:condition="python:here.ERP5Site_isNewContentAllowed(\'Event\', user)">\n
<span tal:define="impl python:False; title string:Event;">\n
<span metal:use-macro="here/au_macros/macros/file_feature">\n
</span>\n
</span>\n
</li>\n
<li tal:condition="python:here.ERP5Site_isNewContentAllowed(\'Participant\', user)">\n
<span tal:define="impl python:False; title string:Participant;">\n
<span metal:use-macro="here/au_macros/macros/file_feature">\n
</span>\n
</span>\n
</li>\n
</ul>\n
</ul>\n
</div>\n
\n
<div class="filebox" id="web">\n
<ul>\n
<li class="listheader" value="" i18n:translate="" i18n:domain="ui">Web:</li>\n
<ul>\n
<li tal:condition="python:here.ERP5Site_isNewContentAllowed(\'News\', user)">\n
<span tal:define="impl python:True; title string:News;">\n
<span metal:use-macro="here/au_macros/macros/file_feature">\n
</span>\n
</span>\n
</li>\n
<li tal:condition="python:here.ERP5Site_isNewContentAllowed(\'Web Page\', user)">\n
<a href="WebPage_createNewForGroup" value="" i18n:translate="" i18n:domain="ui">Web Page</a>\n
</li>\n
</ul>\n
</ul>\n
</div>\n
\n
<div class="filebox" id="contacs">\n
<ul>\n
<li class="listheader" value="" i18n:translate="" i18n:domain="ui">Contacts:</li>\n
\n
<tal:block tal:repeat="file_group python:[\n
dict(\n
portal_type_list = here.getPortalTicketTypeList(),\n
id = \'ticket\',\n
title = \'Forms and Requests:\',\n
),\n
dict(\n
portal_type_list = here.getPortalNodeTypeList(),\n
id = \'node\',\n
title = \'People and Projects:\',\n
),\n
dict(\n
portal_type_list = here.getPortalWebDocumentTypeList(),\n
id = \'web\',\n
title = \'Online Content:\',\n
),\n
dict(\n
portal_type_list = here.getPortalFileDocumentTypeList() + here.getPortalTemplateDocumentTypeList(),\n
id = \'content\',\n
title = \'Offline Content:\',\n
),\n
]">\n
\n
<div class="filebox" id="administration" tal:attributes="id file_group/id">\n
<ul>\n
<li tal:condition="python:here.ERP5Site_isNewContentAllowed(\'Organisation\', user)">\n
<a href="ERP5Site_newContent?portal_type=Organisation" value="" i18n:translate="" i18n:domain="ui">Organisation</a>\n
</li>\n
<li tal:condition="python:here.ERP5Site_isNewContentAllowed(\'Person\', user)">\n
<a href="ERP5Site_newContent?portal_type=Person" value="" i18n:translate="" i18n:domain="ui">Person</a>\n
</li>\n
<li class="listheader" value="" tal:content="file_group/title"\n
i18n:translate="" i18n:domain="ui">Forms and Requests:</li>\n
<ul tal:condition="not:file_group/portal_type_list">\n
<i i18n:translate="" i18n:domain="ui">Not available</i>\n
</ul>\n
<ul tal:condition="file_group/portal_type_list">\n
<tal:block tal:repeat="portal_type file_group/portal_type_list">\n
<li tal:condition="python:here.ERP5Site_isNewContentAllowed(portal_type, user)">\n
<a tal:content="portal_type"\n
tal:attributes="href string:ERP5Site_newContent?portal_type=${portal_type}">Toto</a>\n
</li>\n
</tal:block>\n
</ul>\n
</ul>\n
</ul>\n
</div>\n
\n
</div>\n
\n
</tal:block>\n
\n
<div class="clear"></div>\n
</div>\n
</div>\n
......
......@@ -55,7 +55,11 @@ Description:\n
-->\n
\n
<tal:block metal:define-macro="main">\n
<tal:block metal:use-macro="here/global_definitions_au/macros/main"/>\n
<tal:block tal:define="global web_site_url web_site_url | nothing"/>\n
<tal:block tal:condition="not:web_site_url">\n
<tal:block metal:use-macro="here/global_definitions/macros/header_definitions"/>\n
</tal:block>\n
\n
<div class="tabber" id="mytabber1">\n
\n
<div class="tabbertab">\n
......@@ -68,73 +72,86 @@ Description:\n
<tal:block metal:define-macro="search_type_option_list">\n
<option value="" selected value="" i18n:translate="" i18n:domain="ui">Everything</option>\n
<option value="all" selected value="" i18n:translate="" i18n:domain="ui">All Documents</option>\n
<tal:block tal:repeat="portal_item here/ERP5Site_getSearchableDocumentTypeItemList">\n
<option tal:attributes="value python:portal_item[1]"\n
tal:content="python:portal_item[0]">Standard Type</option>\n
<tal:block tal:repeat="ptype here/getPortalDocumentTypeList">\n
<option tal:attributes="value ptype" tal:content="python:ptype"\n
i18n:translate="" i18n:domain="ui">Standard Type</option>\n
</tal:block>\n
<option value="" i18n:translate="" i18n:domain="ui">-- Directory --</option>\n
<option value="Person" i18n:translate="" i18n:domain="ui">Person</option>\n
<option value="Organisation" i18n:translate="" i18n:domain="ui">Organisation</option>\n
<option value="" i18n:translate="" i18n:domain="ui">-- Quick Search --</option>\n
<tal:block tal:repeat="portal_item here/ERP5Site_getQuickSearchableTypeItemList">\n
<option tal:attributes="value python:portal_item[1]"\n
tal:content="python:portal_item[0]">Standard Type</option>\n
</tal:block>\n
<option tal:repeat="ptype here/ERP5Site_getQuickSearchableTypeList"\n
tal:attributes="value ptype" tal:content="python:ptype"\n
i18n:translate="" i18n:domain="ui">Standard Type</option>\n
</tal:block>\n
</select>\n
<input type="submit" name="searches/WebSite_viewQuickSearchResultList:method" value="Search"/>\n
<input type="submit" name="search_area/WebSite_viewQuickSearchResultList:method" value="Search"/>\n
</div>\n
<div class="searchOptions">\n
<a tal:attributes="href string: ${site_url}/searches/WebSite_viewAdvancedSearch" i18n:translate="" i18n:domain="ui">Advanced Search</a> | <a href="javascript:void 0" onclick="javascript:openTips();" value="" i18n:translate="" i18n:domain="ui">Search Tips</a>\n
<a tal:attributes="href string: ${web_site_url}/search_area/WebSite_viewAdvancedSearch" i18n:translate="" i18n:domain="ui">Advanced Search</a> | <a href="javascript:void 0" onclick="javascript:openTips();" value="" i18n:translate="" i18n:domain="ui">Search Tips</a>\n
</div>\n
</div>\n
<div class="clear"></div>\n
</div>\n
\n
<div class="tabbertab">\n
<div class="tabbertab"\n
tal:define="section_list python:here.contentValues(portal_type=\'Web Section\', sort_on=\'int_index\');\n
section_list python:filter(lambda x:x.isVisible(), section_list);\n
half_count python:len(section_list) / 2">\n
<h2 value="" i18n:translate="" i18n:domain="ui">Browse</h2>\n
\n
<div style="width:250px;float:left;" class="tabbertabcont">\n
<div style="width:50%;float:left;" class="tabbertabcont">\n
<tal:block tal:repeat="section python:section_list[0:half_count]">\n
<ul>\n
<li value="" i18n:translate="" i18n:domain="ui">Departments and Divisions:</li>\n
<li value="" i18n:translate=""\n
i18n:domain="ui" tal:content="section/getTitle">Departments and Divisions:</li>\n
<ul>\n
<li tal:repeat="root_section here/group_section/contentValues">\n
<span tal:content="root_section/getTitle" onclick="toggleSection(this)" toggle="yes" style="cursor:pointer;"/>\n
<div style="display:none;visibility:hidden">\n
<ul>\n
<li tal:repeat="section root_section/contentValues"><a href="#" tal:content="section/getTitle"\n
tal:attributes="href section/absolute_url">Theme</a></li>\n
</ul>\n
</div>\n
<li tal:repeat="root_section section/contentValues">\n
<a tal:content="root_section/getTitle"\n
tal:condition="python:not len(root_section.contentValues())"\n
tal:attributes="href root_section/absolute_url"/>\n
<span tal:content="root_section/getTitle"\n
tal:condition="python:len(root_section.contentValues())"\n
onclick="toggleSection(this)" toggle="yes" style="cursor:pointer;"/>\n
<div style="display:none;visibility:hidden">\n
<ul>\n
<li tal:repeat="section root_section/contentValues"><a href="#" tal:content="section/getTitle"\n
tal:attributes="href section/absolute_url">Theme</a></li>\n
</ul>\n
</div>\n
</li>\n
</ul>\n
</ul>\n
\n
<ul>\n
<li value="" i18n:translate="" i18n:domain="ui">Programmes:</li>\n
<ul>\n
<li tal:repeat="section here/source_project_section/contentValues"><a href="#" tal:content="section/getTitle"\n
tal:attributes="href section/absolute_url">Theme</a></li>\n
</ul>\n
</ul>\n
</div>\n
<div style="width:250px;float:right;" class="tabbertabcont">\n
</tal:block>\n
</div>\n
\n
<tal:block >\n
<div style="width:50%;float:right;" class="tabbertabcont">\n
<tal:block tal:repeat="section python:section_list[half_count:]">\n
<ul>\n
<li value="" i18n:translate="" i18n:domain="ui">Offices:</li>\n
<li value="" i18n:translate=""\n
i18n:domain="ui" tal:content="section/getTitle">Departments and Divisions:</li>\n
<ul>\n
<li tal:repeat="root_section here/site_section/contentValues">\n
<span tal:content="root_section/getTitle" onclick="toggleSection(this)" toggle="yes" style="cursor:pointer;"/>\n
<div style="display:none;visibility:hidden">\n
<ul>\n
<li tal:repeat="section root_section/contentValues"><a href="#" tal:content="section/getTitle"\n
tal:attributes="href section/absolute_url">Theme</a></li>\n
</ul>\n
</div>\n
<li tal:repeat="root_section section/contentValues">\n
<a tal:content="root_section/getTitle"\n
tal:condition="python:not len(root_section.contentValues())"\n
tal:attributes="href root_section/absolute_url"/>\n
<span tal:content="root_section/getTitle"\n
tal:condition="python:len(root_section.contentValues())"\n
onclick="toggleSection(this)" toggle="yes" style="cursor:pointer;"/>\n
<div style="display:none;visibility:hidden">\n
<ul>\n
<li tal:repeat="section root_section/contentValues"><a href="#" tal:content="section/getTitle"\n
tal:attributes="href section/absolute_url">Theme</a></li>\n
</ul>\n
</div>\n
</li>\n
</ul>\n
</ul>\n
</div>\n
\n
</tal:block>\n
</div>\n
</tal:block>\n
\n
<div class="clear"></div>\n
</div>\n
\n
......@@ -145,9 +162,9 @@ Description:\n
<tal:block i18n:translate="" i18n:domain="ui">in</tal:block>\n
<select size="1" class="input" name="query_portal_type">\n
<option value="all" selected value="" i18n:translate="" i18n:domain="ui">Any Documents</option>\n
<option tal:repeat="portal_type_item here/ERP5Site_getSearchableDocumentTypeItemList"\n
tal:content="python:portal_type_item[0]"\n
tal:attributes="value python:portal_type_item[1]"/>\n
<option tal:repeat="ptype here/getPortalDocumentTypeList"\n
tal:attributes="value ptype" tal:content="python:ptype"\n
i18n:translate="" i18n:domain="ui">Standard Type</option>\n
</select>\n
<input type="submit" name="WebSite_postQueryWithType:method" value="Send Query to Expert"/>\n
<div class="clear"></div>\n
......@@ -155,7 +172,6 @@ Description:\n
</div>\n
\n
</div>\n
\n
</tal:block>
]]></string> </value>
......
......@@ -12,6 +12,10 @@
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Cacheable__manager_id</string> </key>
<value> <string>style_cache</string> </value>
</item>
<item>
<key> <string>__ac_local_roles__</string> </key>
<value>
......
......@@ -12,6 +12,10 @@
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Cacheable__manager_id</string> </key>
<value> <string>style_cache</string> </value>
</item>
<item>
<key> <string>__ac_local_roles__</string> </key>
<value>
......
......@@ -12,6 +12,10 @@
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Cacheable__manager_id</string> </key>
<value> <string>style_cache</string> </value>
</item>
<item>
<key> <string>__ac_local_roles__</string> </key>
<value>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<tuple>
<tuple>
<string>OFS.Image</string>
<string>Image</string>
</tuple>
<none/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Cacheable__manager_id</string> </key>
<value> <string>style_cache</string> </value>
</item>
<item>
<key> <string>__ac_local_roles__</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>send_by_mail</string> </value>
</item>
<item>
<key> <string>_owner</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/png</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAABGdBTUEAALGPC/xhBQAAAAZiS0dE
AP8A/wD/oL2nkwAAAAlwSFlzAAALDwAACw8BkvkDpQAAAAd0SU1FB9ICBQ8sINc/uI0AAAMaSURB
VHicjZRPbBR1FMc/M/vb6WzdP9WlCy4pptZqTQMqlVKCVhNNQE01NKa9GE+9ePNQOBAucjCGA144
eSBojKFGOSgEmyilAbG2EbWuPSCKWLO4XZbtTnd2Z3bmNz8Pu4Wlocbv5Xt633zfe9/3tKOHDqrK
ShlPgZQe0pPYbhVNabS0hMndyFEuW5itrWjS5uPJCwnABiRNEKWSxeDuXhLJOB2dfZhxHRE2MQwD
PME3pz/jyZ1PIcwUb4+9CbAL+A6wmoV0GXj0PfM8pUKJ6spvxBMpWsMGIhRl/seLiFCCjR29zTVx
IMQa6IamE2ldYXDvCL8vLLLwwyyIKPOzl8n9cZ0XhnYAsHXsfc6W0mvr7wiF9HC9x4hD/95XuZHN
czVznvzSIv17XkaZHaRfO8i+d8cJPdpHcmD0U+C+ta70WuCivAj4HlETnntxD9d+zaL5JZJtMTa/
sp83joxzfuE6ycHttGzfTXJgdBFINYsJpdRdFu1yHgQMDo2QHj7M8Hv7OZv5C7eiU73lEdvWi0AA
ZAszE2lgCZC6XXHRqCIRSL/K99NTbOzsYcvwYWqlHCffGqfw0QQttYDIpvu5eeID7MvTACQHRrOr
zoRdsQEdAN9xKC4VSG24QvbUAQDcADpfP0LEEHT3pLgIFGYmxhpZqgFdgKVrKGRgEfLLIAQ7d3Vy
5ZeruE4R8KhUqgBoyicqbo/EbmRpCpgHHD0Rj6JUAoRECDDaHia3VOTC6S/Bd4iZ9Rkqt0bgB6tC
knogiw2WutJ0wsoikAH2cp65qUn2jTzLrbxFZnYay64HONAgZor1c6SjgADfd7g0+TVdj3QQb99C
+4PtLGT+5AHDAyBuGhRcf10hkfsnz0pZMnvmC7q3PU5Xz2PU3IAnnt7KzzNzfHXqDACZ48fWFQHQ
laoyd26STekNJFMxKss3kX4RgO7eh7CsZS69089Px4Z4KZFt3tjd13/t7zwffv4toVAYxw1wfRff
91FK4dR8pPQQn5yDsGBzW2J1Y/MNvg2N+jUPNFj7T/91WNzjjWjU0xht8P8Rkvdq7V9ThElbOQcK
RAAAAABJRU5ErkJggg==</string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <int>18</int> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>925</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <int>18</int> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
......@@ -36,7 +36,7 @@
<key> <string>actbox_url</string> </key>
<value> <string encoding="cdata"><![CDATA[
Base_viewSearchResultList?validation_state=draft&reset=1
Base_viewSearchResultList?validation_state=draft&portal_type=%(portal_type)s&reset=1
]]></string> </value>
</item>
......
541
\ No newline at end of file
538
\ No newline at end of file
......@@ -8,6 +8,7 @@ Web Page | send_email
Web Page | view
Web Page | view_editor
Web Page | web_view
Web Section | generate_section
Web Section | history
Web Section | list
Web Section | metadata
......@@ -20,7 +21,7 @@ Web Section | web_view
Web Site Module | list_ui
Web Site Module | sort_on
Web Site Module | view
Web Site | generate_site
Web Site | generate_section
Web Site | history
Web Site | metadata
Web Site | new_default_page
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment