diff --git a/product/ERP5Type/FormulatorPatch.py b/product/ERP5Type/FormulatorPatch.py deleted file mode 100755 index f60186ec60b158cd4ac193e9ef882e3da670949a..0000000000000000000000000000000000000000 --- a/product/ERP5Type/FormulatorPatch.py +++ /dev/null @@ -1,183 +0,0 @@ -############################################################################## -# -# Copyright (c) 2001 Zope Corporation and Contributors. All Rights Reserved. -# Copyright (c) 2003 Nexedi SARL and Contributors. All Rights Reserved. -# Sebastien Robin <seb@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This software is subject to the provisions of the Zope Public License, -# Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution. -# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED -# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS -# FOR A PARTICULAR PURPOSE -# -############################################################################## - -from Products.Formulator.Field import Field -from AccessControl import ClassSecurityInfo - -class PatchedField: - - security = ClassSecurityInfo() - - security.declareProtected('Access contents information', - 'generate_field_key') - def generate_field_key(self, validation=0, key=None): - """Generate the key Silva uses to render the field in the form. - """ - # Patched by JPS for ERP5 in order to - # dynamically change the name - if key is not None: - return 'field_%s' % key - if self.field_record is None: - return 'field_%s' % self.id - elif validation: - return self.id - elif isinstance(self.widget, MultiItemsWidget): - return "%s.%s:record:list" % (self.field_record, self.id) - else: - return '%s.%s:record' % (self.field_record, self.id) - - security.declareProtected('View', 'render') - def render(self, value=None, REQUEST=None, key=None): - """Render the field widget. - value -- the value the field should have (for instance - from validation). - REQUEST -- REQUEST can contain raw (unvalidated) field - information. If value is None, REQUEST is searched - for this value. - if value and REQUEST are both None, the 'default' property of - the field will be used for the value. - """ - return self._render_helper(self.generate_field_key(key=key), value, REQUEST) - -Field.generate_field_key = PatchedField.generate_field_key -Field.render = PatchedField.render - -from Products.Formulator.Validator import SelectionValidator -from Products.Formulator.Validator import StringBaseValidator - -def SelectionValidator_validate(self, field, key, REQUEST): - value = StringBaseValidator.validate(self, field, key, REQUEST) - - if value == "" and not field.get_value('required'): - return value - - # get the text and the value from the list of items - # Patch by JPS for Listbox cell - for item in field.get_value('items', cell=getattr(REQUEST,'cell',None)): - try: - item_text, item_value = item - except ValueError: - item_text = item - item_value = item - - # check if the value is equal to the string/unicode version of - # item_value; if that's the case, we can return the *original* - # value in the list (not the submitted value). This way, integers - # will remain integers. - # XXX it is impossible with the UI currently to fill in unicode - # items, but it's possible to do it with the TALES tab - if field.get_value('unicode') and type(item_value) == type(u''): - str_value = item_value.encode(field.get_form_encoding()) - else: - str_value = str(item_value) - - if str_value == value: - return item_value - - # if we didn't find the value, return error - self.raise_error('unknown_selection', field) - -SelectionValidator.validate = SelectionValidator_validate - -from Products.Formulator.Validator import MultiSelectionValidator - -def MultiSelectionValidator_validate(self, field, key, REQUEST): - values = REQUEST.get(key, []) - # NOTE: a hack to deal with single item selections - if type(values) is not type([]): - # put whatever we got in a list - values = [values] - # if we selected nothing and entry is required, give error, otherwise - # give entry list - if len(values) == 0: - if field.get_value('required'): - self.raise_error('required_not_found', field) - else: - return values - # convert everything to unicode if necessary - if field.get_value('unicode'): - values = [unicode(value, field.get_form_encoding()) - for value in values] - - # create a dictionary of possible values - value_dict = {} - for item in field.get_value('items', cell=getattr(REQUEST,'cell',None)): # Patch by JPS for Listbox - try: - item_text, item_value = item - except ValueError: - item_text = item - item_value = item - value_dict[item_value] = 0 - - # check whether all values are in dictionary - result = [] - for value in values: - # FIXME: hack to accept int values as well - try: - int_value = int(value) - except ValueError: - int_value = None - if int_value is not None and value_dict.has_key(int_value): - result.append(int_value) - continue - if value_dict.has_key(value): - result.append(value) - continue - self.raise_error('unknown_selection', field) - # everything checks out - return result - -MultiSelectionValidator.validate = MultiSelectionValidator_validate - -from Products.Formulator.Validator import BooleanValidator - -def BooleanValidator_validate(self, field, key, REQUEST): - result = not not REQUEST.get(key, 0) - if result==True: - return 1 - else: - return 0 - -BooleanValidator.validate = BooleanValidator_validate - -# Patch the render_view of a TextAreaWidget so that -# it is rendered as a nice box, it is using the tag -# readonly understood by most browsers for a text area - -from Products.Formulator.Widget import TextAreaWidget -from Products.Formulator.Widget import render_element -from DocumentTemplate.DT_Util import html_quote - -def TextAreaWidget_render_view(self, field, value): - width = field.get_value('width') - height = field.get_value('height') - - return render_element("textarea", - name='', - css_class=field.get_value('css_class'), - cols=width, - rows=height, - contents=html_quote(value), - extra='readonly') - -TextAreaWidget.render_view = TextAreaWidget_render_view -