Ejemplo n.º 1
0
 def filter_base_fields(self):
     """ Filters base fields against user negative permissions, so if
         the user has nperm on the field we delete it from base_fields.
     """
     if self.nperm_names:
         user = cherrypy.session.get('user', None)
         if user is None:
             self.base_fields = SortedDict({})
         else:
             object_name = self.get_object_name()
             formset_fields = [
                 self.base_fields['access'], self.base_fields['zones'],
                 self.base_fields['groups'],
                 self.base_fields['certifications']
             ]
             for field in formset_fields:
                 if not user.check_nperms([
                         '%s.%s.%s' %
                     (nperm_name, object_name, field.get_nperm())
                         for nperm_name in self.nperm_names
                 ], 'one'):
                     field.permitted = True
                 else:
                     field.permitted = False
             filtered_base_fields = SortedDict([
                 (name, field) for name, field in self.base_fields.items()
             ])
             self.base_fields = filtered_base_fields
Ejemplo n.º 2
0
 def filter_base_fields(self):
     """ Filters base fields against user negative permissions,
         so if user has nperm on field we delete it from base_fields.
     """
     user = cherrypy.session.get('user', None)
     if user is None:
         self.base_fields = SortedDict({})
     else:
         self.base_fields = SortedDict([
             (name, field) for name, field in self.base_fields.items()
             if not self.display_only or field.name in self.display_only
         ])
Ejemplo n.º 3
0
 def filter_base_fields(self):
     """ Filters base fields against user negative permissions, so if
         the user has nperm on the field we delete it from base_fields.
     """
     if self.nperm_names:
         user = cherrypy.session.get('user', None)
         if user is None:
             self.base_fields = SortedDict({})
         else:
             object_name = self.get_object_name()
             filtered_base_fields = SortedDict(
                 [(name, field) for name, field in self.base_fields.items()
                  if not user.check_nperms(['%s.%s.%s' % (nperm_name, object_name, field.get_nperm()) for nperm_name in self.nperm_names], 'one')
                 ]
             )
             self.base_fields = filtered_base_fields
Ejemplo n.º 4
0
    def build_fields(self):
        """ Creates self.fields from given data or set default field (if not 
           is_bound).
            Data for filter forms are in following format: list of dictionaries, 
            where between each dictionary is OR. In dictionary, key is name of 
            field and value is value of that field. If field is compound filter, 
            then value is dictionary again.
        """
        # self.fields are deepcopied from self.base_fields (in BaseForm)
        base_fields = self.base_fields
        self.fields = SortedDict()

        fields_for_sort = []
        if self.is_bound:
            if not self.data_cleaned:
                for name_str in self.data.keys():
                    name = name_str.split('|')
                    if len(name) >= 2 and name[0] == 'presention':
                        filter_name = name[1]
                        field = deepcopy(base_fields[filter_name])
                        if isinstance(field, CompoundFilterField):
                            field.parent_form = self
                        field.name = filter_name
                        field.value = field.value_from_datadict(self.data)

                        negation = (self.data.get(
                            '%s|%s' % ('negation', filter_name)) is not None)
                        field.negation = negation
                        fields_for_sort.append(field)
            else:
                # Data passed to t6he form in constructor are cleaned_data
                # (e.g. from itertable.get_filter).
                for field_name, [neg, value] in self.data.items():
                    debug('field %s, setting value %s' % (field_name, value))
                    if not base_fields.get(field_name):
                        debug('field %s is in npermission -> skiping')
                        break
                    # When field is in npermissions, it can still be here
                    # if user loads saved filter ->
                    field = deepcopy(base_fields[field_name])
                    if isinstance(field, CompoundFilterField):
                        field.parent_form = self
                    field.name = field_name
                    field.set_from_clean(value)
                    field.negation = neg
                    fields_for_sort.append(field)
        else:
            for field_name in self.default_fields_names:
                field = deepcopy(base_fields[field_name])
                field.name = field_name
                fields_for_sort.append(field)

        # adding fields in order according to field.order
        for pos, field in sorted([[field.order, field]
                                  for field in fields_for_sort]):
            self.fields[field.name] = field
            field.owner_form = self
Ejemplo n.º 5
0
 def build_fields(self):
     user = cherrypy.session.get('user', None)
     if user is None:
         self.fields = SortedDict({})
     else:
         self.fields = self.base_fields.deepcopy()
         object_name = self.get_object_name()
         for field in self.fields.values():
             field_nperm = field.get_nperm()
             if self.all_no_access or user.check_nperms(
                 ['%s.%s.%s' % (nperm_name, object_name, field_nperm) for \
                     nperm_name in self.nperm_names], 'one'):
                 field.access = False
             field.owner_detail = self
Ejemplo n.º 6
0
    def __new__(cls, name, bases, attrs):
        fields = [(field_name, attrs.pop(field_name)) for field_name, obj in attrs.items() if isinstance(obj, Field)]
        fields.sort(lambda x, y: cmp(x[1].creation_counter, y[1].creation_counter))

        # If this class is subclassing another Form, add that Form's fields.
        # Note that we loop over the bases in *reverse*. This is necessary in
        # order to preserve the correct order of fields.
        for base in bases[::-1]:
            if hasattr(base, 'base_fields'):
                fields = base.base_fields.items() + fields

        attrs['base_fields'] = SortedDict(fields)
        for i, (field_name, field) in enumerate(attrs['base_fields'].items()):
            field.name_orig = field.name = field_name
            field.order = i

        new_class = type.__new__(cls, name, bases, attrs)
        return new_class
Ejemplo n.º 7
0
    def get_javascript_gener_field(self):
        # --- function createRow and variable allFieldsDict---

        output = u'function createRow%s(fieldName, fieldLabel) {\n' % self.form.get_object_name(
        )
        output += u'var row = "";\n'

        output += u'switch (fieldName) {\n'
        base_fields = deepcopy(self.form.base_fields)
        output += u"default:\n"  # if not specified, first field is taken
        fields_js_dict = SortedDict()
        for field_num, (name, field) in enumerate(base_fields.items()):
            field.name = name
            output += u"case '%s':\n" % name
            rendered_field = unicode(
                self.build_field_row(field, for_javascript=True))
            rendered_field = escape_js_literal(rendered_field)
            output += u"    row += '%s';\n" % rendered_field
            if isinstance(field, CompoundFilterField):
                output += u"    row = row.replace(/%s/g, getEmpty%s());\n" % (
                    REPLACE_ME_WITH_EMPTY_FORM, field.form_class.__name__)
                fields_js_dict[name] = {
                    'label': field.label,
                    'fieldNum': field_num,
                    'formName': field.form_class.get_object_name()
                }
            else:
                fields_js_dict[name] = {
                    'label': field.label,
                    'fieldNum': field_num
                }
            output += u"    break;\n"
        output += u'}\n'  # end of switch
        output += u'row = row.replace(/%s/g, fieldLabel);\n' % REPLACE_ME_WITH_LABEL
        output += u'return row;\n'
        output += u'}\n'  # end of createRow function

        return (output, fields_js_dict)