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
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 ])
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
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
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
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
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)