def contents(self): z2.switch_on(self, request_layer=self.request_layer) # XXX really messed up hack to support plone.z3cform < 0.5.8 # We call the form to make the widgets property available on it, # otherwise view/widgets fails self.form_instance() return self.form_instance.render()
def __call__(self): """Confirm the code or render the form.""" # make sure we have the form marker interface when testing z2.switch_on(self) if self.confirm_code: # confirm/delete nonce nonce_store = getUtility(INonceManager) try: email = nonce_store.retrieve(self.confirm_code) except KeyError: self.status = _(u'Sorry, your confirmation code is invalid or has expired.') else: # set up session session = ISession(self.request) session['collective.confirm_email.confirmed'] = True session['collective.confirm_email.email'] = email session.save() # redirect back to target (by removing last 2 parts of path) raise Redirect(self.request['URL2']) # render form return super(EmailConfirmationForm, self).__call__()
def update(self): z2.switch_on(self, request_layer=IFormLayer) self.form = QuickSearchForm(aq_inner(self.context), self.request, self.data) if HAS_WRAPPED_FORM: alsoProvides(self.form, IWrappedForm) self.form.update()
def _update(self): if self.w is not None: return z2.switch_on(self) self.updateFieldsFromSchemata() self.updateWidgets() # shortcut 'widget' dictionary for all fieldsets self.w = {} for k, v in self.widgets.items(): self.w[k] = v groups = [] self.fieldsets = {} for idx, groupFactory in enumerate(self.groups): group = groupFactory(self.context, self.request, self) group.update() for k, v in group.widgets.items(): self.w[k] = v groups.append(group) group_name = getattr(group, '__name__', str(idx)) self.fieldsets[group_name] = group self.groups = tuple(groups)
def update(self): super(CommentViewlet, self).update() z2.switch_on(self, request_layer=IFormLayer) self.form = CommentForm(aq_inner(self.context), self.request) if HAS_WRAPPED_FORM: alsoProvides(self.form, IWrappedForm) self.form.update()
def __call__(self): z2.switch_on(self) if self.isVisible: self.update() return self._wrap_widget(self.widgets[self.field].render()) else: return self._wrap_widget(u'')
def update(self): super(Viewlet, self).update() self.form = u'' if checkPermission('cmf.ModifyPortalContent', self.context): z2.switch_on(self, request_layer=IFormLayer) self.form = KeywordsForm(aq_inner(self.context), self.request) self.form.update()
def update(self): super(TwitterSearchViewlet, self).update() z2.switch_on(self, request_layer=IFormLayer) self.form = SearchForm(aq_inner(self.context), self.request) # necessary to avoid maximum recursion error alsoProvides(self.form, IWrappedForm) self.form.update()
def update(self): super(Renderer, self).update() z2.switch_on(self, request_layer=IFormLayer) self.form = PortletSubscribeForm(aq_inner(self.context), self.request, self.data) alsoProvides(self.form, IWrappedForm) self.form.update()
def update(self): super(Renderer, self).update() z2.switch_on(self, request_layer=IFormLayer) self.form = self.form(aq_inner(self.context), self.request) self.form.portlet = self.data alsoProvides(self.form, IWrappedForm) self.form.update()
def contents(self): z2.switch_on(self, request_layer=self.request_layer) # XXX really messed up hack to support plone.z3cform < 0.5.8 # We call every form to make the widgets property available on it, # otherwise view/widgets fails # XXX: FIXME!!! [fi() for fi in self.form_instances] return ''.join([fi.render() for fi in self.form_instances])
def update(self): super(CommentsViewlet, self).update() if self.is_discussion_allowed() and \ (self.is_anonymous() and self.anonymous_discussion_allowed() \ or self.can_reply()): z2.switch_on(self, request_layer=IFormLayer) self.form = self.form(aq_inner(self.context), self.request) alsoProvides(self.form, IWrappedForm) self.form.update()
def __init__(self, values, context=None, request=None): self.values = values self.form = AssignEditorForm(aq_inner(context), request) z2.switch_on(self.form, request_layer=IFormLayer) alsoProvides(self.form, IWrappedForm) self.form.update() self.values["form"] = self.form.render()
def switch_on(view, request_layer=z3c.form.interfaces.IFormLayer): # Fix the request. If we find a form layer from plone.app.z3cform take # it away. It uses a base template using context/main_template but our # views don't have an implicit Acquisition context. The base template # from plone.z3cform uses /@@standard-macros which does work, so we fall # back on that one z2.switch_on(view, request_layer=request_layer) request = view.request if IPloneFormLayer.providedBy(request): noLongerProvides(request, IPloneFormLayer)
def render(self): if switch_on is not None: switch_on(self) if not self.getContent().feeds: del self.widgets['urls'] else: self.widgets['urls'].update() return super(ControlPanelEditForm, self).render()
def validate_input(self, formname, fieldname, fieldset=None, value=None, warning_only=True): """Given a form (view) name, a field name and the submitted value, validate the given field. """ # Abort if there was no value changed. Note that the actual value # comes along the submitted form, since a widget may require more than # a single form field to validate properly. if value is None: return context = aq_inner(self.context) request = aq_inner(self.request) alsoProvides(request, IFormLayer) # Find the form, the field and the widget form = request.traverseName(context, formname) if IFormWrapper.providedBy(form): formWrapper = form form = form.form_instance if not z2.IFixedUpRequest.providedBy(request): z2.switch_on(form, request_layer=formWrapper.request_layer) if not IForm.providedBy(form): return form.update() if getattr(form, "extractData", None): data, errors = form.extractData() else: return #if we validate a field in a group we operate on the group if fieldset is not None: fieldset = int(fieldset) form = form.groups[fieldset] index = len(form.prefix) + len(form.widgets.prefix) raw_fieldname = fieldname[index:] validationError = None for error in errors: if error.widget == form.widgets.get(raw_fieldname, None): validationError = error.message break if isinstance(validationError, Message): validationError = translate(validationError, context=self.request) # Attempt to convert the value - this will trigger validation ksscore = self.getCommandSet('core') kssplone = self.getCommandSet('plone') validate_and_issue_message(ksscore, validationError, fieldname, fieldset, kssplone, warning_only)
def render(self): if switch_on is not None: switch_on(self) urls = self.widgets['urls'] urls.update() if not urls.value: del self.widgets['urls'] return super(ControlPanelEditForm, self).render()
def afterSetUp(self): from plone.app.z3cform.interfaces import IPloneFormLayer from plone.z3cform.z2 import switch_on self.form = self.folder[self.folder.invokeFactory('FormFolder', 'form')] self.request = makerequest(self.app).REQUEST self.request.SESSION = Session() self.wizard = DummyWizard(self.form, self.request) switch_on(self.wizard, request_layer=IPloneFormLayer) self.session = self.request.SESSION[self.wizard.sessionKey] = {} self.step = SignersStep(self.form, self.request, self.wizard)
def update(self): if not ISubForm.providedBy(self.form_instance): interface.alsoProvides(self.form_instance, IWrappedForm) # If a form action redirected, don't render the wrapped form if self.request.response.getStatus() in (302, 303): self.contents = "" return z2.switch_on(self, request_layer=self.request_layer) self.form_instance.update()
def update(self): super(FiltersFormView, self).update() z2.switch_on(self, request_layer=IFormLayer) context = aq_inner(self.context) self.form_filter = FiltersForm(context, self.request) interface.alsoProvides(self.form_filter, IWrappedForm) self.form_filter.update() self.form_addbutton = AddForm(context, self.request) interface.alsoProvides(self.form_addbutton, IWrappedForm) self.form_addbutton.update()
def date_input_widget(self, name): z2.switch_on(self) widget = DateWidget(self.request) widget.name = name widget.id = name context = self.context date = getattr(context, name) if date: widget.value = (date.year(), date.month(), date.day()) widget.show_today_link = True widget.ignoreContext = False widget.update() return widget.render()
def __call__(self): form = self.request.form self.request = self.context.REQUEST self.request.URL = self.context.absolute_url() self.form = CommentForm(aq_inner(self.context), self.request) alsoProvides(self.form, IWrappedForm) # wrap the form inside the page z2.switch_on(self.form, request_layer=IFormLayer) self.form.update() if form: self.form.extractData() return self.index()
def update(self): base.Renderer.update(self) z2.switch_on(self, request_layer=IFormLayer) self.form = GDPRPortletSubscribeForm(self.data, self.request) portal_url = api.portal.get_navigation_root(self.context).absolute_url() gpdr_url = '/'.join([portal_url, 'gdpr-view']) msgid = _( u'see_legal_conditions', default=u'See <a href="${legal_conditions_url}">legal terms and conditions</a>.', # NOQA mapping={u'legal_conditions_url': gpdr_url}, ) legal_description = self.context.translate(msgid) gdpr_field = self.form.fields.get('legal_conditions') gdpr_field.field.description = legal_description alsoProvides(self.form, IWrappedForm) self.form.update()
def update(self): if not ISubForm.providedBy(self.form_instance): interface.alsoProvides(self.form_instance, IWrappedForm) # If a form action redirected, don't render the wrapped form if self.request.response.getStatus() in (302, 303): self.contents = "" return z2.switch_on(self, request_layer=self.request_layer) self.form_instance.update() # A z3c.form.form.AddForm does a redirect in its render method. # So we have to render the form to see if we have a redirection. # In the case of redirection, we don't render the layout at all. self.contents = self.form_instance.render()
def setup_forms(self): """Initialize the section forms.""" z2.switch_on(self, request_layer=IFormLayer) if not self.config.get('section_1_hide_section', False) and \ self.config.get('section_1_search_target', None): self.section_1 = SectionForm( aq_inner(self.context), self.request, config=self.map_config('section_1'), prefix='section_1', ) if HAS_WRAPPED_FORM: alsoProvides(self.section_1, IWrappedForm) self.section_1.update() if not self.config.get('section_2_hide_section', False) and \ self.config.get('section_2_search_target', None): self.section_2 = SectionForm( aq_inner(self.context), self.request, config=self.map_config('section_2'), prefix='section_2', ) if HAS_WRAPPED_FORM: alsoProvides(self.section_2, IWrappedForm) self.section_2.update() if not self.config.get('section_3_hide_section', False) and \ self.config.get('section_3_search_target', None): self.section_3 = SectionForm( aq_inner(self.context), self.request, config=self.map_config('section_3'), prefix='section_3', ) if HAS_WRAPPED_FORM: alsoProvides(self.section_3, IWrappedForm) self.section_3.update() if not self.config.get('section_4_hide_section', False) and \ self.config.get('section_4_search_target', None): self.section_4 = SectionForm( aq_inner(self.context), self.request, config=self.map_config('section_4'), prefix='section_4', ) if HAS_WRAPPED_FORM: alsoProvides(self.section_4, IWrappedForm) self.section_4.update()
def render_form(self): provided = IPloneFormLayer.providedBy(self.request) noLongerProvides(self.request, IPloneFormLayer) alsoProvides(self.request, IFormLayer) try: form = self.create_form() if IWrappedForm is None: switch_on(self) alsoProvides(self.request, ICMFDefaultSkin) else: alsoProvides(form, IWrappedForm) form.update() return form.render() finally: noLongerProvides(self.request, IFormLayer) if provided: alsoProvides(self.request, IPloneFormLayer)
def update(self): if self.view.info is None: return listing_info = { 'listing_id': self.view.info.get('id').get('value'), 'listing_title': self.view.info.get('title').get('value'), 'agent': self.view.contact.get('agent'), 'original_agent': self.view.contact.get('original_agent'), 'overridden': self.view.contact.get('overridden', False), } z2.switch_on(self, request_layer=IFormLayer) portlet_hash = self.__portlet_metadata__.get('hash') self.form = EmailForm(aq_inner(self.context), self.request, portlet_hash, listing_info, self.data) if HAS_WRAPPED_FORM: alsoProvides(self.form, IWrappedForm) self.form.update()
def update(self): base.Renderer.update(self) z2.switch_on(self, request_layer=IFormLayer) self.form = GDPRPortletSubscribeForm(aq_inner(self.context), self.request, self.data) portal_url = api.portal.get_navigation_root( self.context).absolute_url() gpdr_url = '/'.join([portal_url, 'gdpr-view']) msgid = _( u'see_legal_conditions', default= u'See <a href="${legal_conditions_url}">legal terms and conditions</a>.', # NOQA mapping={u'legal_conditions_url': gpdr_url}, ) legal_description = self.context.translate(msgid) gdpr_field = self.form.fields.get('legal_conditions') gdpr_field.field.description = legal_description alsoProvides(self.form, IWrappedForm) self.form.update()
def contact_form(self): """Get the contact form, if enabled.""" if not self.config.get('show_contact_form', False): return if self._contact_form is not None: return self._contact_form item_info = self._get_contact_info().get('agent') z2.switch_on(self, request_layer=IFormLayer) self._contact_form = ContactForm( aq_inner(self.context), self.request, info=item_info, development=self.item, ) if HAS_WRAPPED_FORM: alsoProvides(self._contact_form, IWrappedForm) return self._contact_form
def update(self): """Prepare view related data.""" super(ListingSearchViewlet, self).update() self.context_state = queryMultiAdapter((self.context, self.request), name="plone_context_state") self.limit = self.config.get("limit", 25) z2.switch_on(self, request_layer=IFormLayer) self.form = ListingSearchForm(aq_inner(self.context), self.request) if HAS_WRAPPED_FORM: alsoProvides(self.form, IWrappedForm) self.form.update() self.search_performed = bool(self.request.form) if self.available and len(self.request.form) > 0: data, errors = self.form.extractData() if not errors: self._get_listings(prepare_search_params(data)) self.request.form = encode_dict(self.request.form)
def update(self): """On update, we switch on the zope3 request, needed to work with our z3c form. We update here the wrapped form. Override this method if you have more than one form. """ if not z3c.form.interfaces.ISubForm.providedBy(self.form_instance): zope.interface.alsoProvides(self.form_instance, interfaces.IWrappedForm) z2.switch_on(self, request_layer=self.request_layer) self.form_instance.update() # If a form action redirected, don't render the wrapped form if self.request.response.getStatus() in (302, 303): self.contents = "" return # A z3c.form.form.AddForm does a redirect in its render method. # So we have to render the form to see if we have a redirection. # In the case of redirection, we don't render the layout at all. self.contents = self.form_instance.render()
def add_story_form(self): z2.switch_on(self, request_layer=IFormLayer) addform = AddStoryQuickForm(aq_inner(self.context), self.request) addform.update() return addform.render()
def dynamic_searchable_text_indexer(obj): """Dynamic searchable text indexer. """ # if the object does not provide a request, get one. # This happens when running scripts (bin/instance run script.py) try: request = obj.REQUEST except AttributeError: request = getRequest() # We need to make sure that we have z2 mode switched on for z3c form. # Since we do not really have any view to do this on, we just use # a fake view. For switching z2 mode on, it's only necessary that # there is a view.request. view = FakeView(obj, request) z2.switch_on(view, request_layer=IFormLayer) indexed = [] for _storage, fields in get_searchable_contexts_and_fields(obj): for field in fields: # we need the form-field, not the schema-field we # already have.. form_field = Field(field, interface=field.interface, prefix='') # get the widget try: widget = get_field_widget(obj, form_field, request) except TypeError: # Some times the field value is wrong, then the converter # failes. We should not fail, so we catch this error. continue # get the converter for this field / widget converter = getMultiAdapter( (obj, field, widget), interfaces.IDexterityTextIndexFieldConverter) # convert the field value value = converter.convert() # if no value was returned, we don't need to index # anything. if not value: continue # be sure that it is utf-8 encoded if six.PY2 and isinstance(value, six.text_type): value = value.encode('utf-8') # only accept strings assert isinstance(value, str), 'expected converted ' + \ 'value of IDexterityTextIndexFieldConverter to be a str' indexed.append(value) # after converting all fields, run additional # IDynamicTextIndexExtender adapters. for _name, adapter in getAdapters((obj, ), interfaces.IDynamicTextIndexExtender): extended_value = adapter() # if no value was returned, we don't need to index anything. if not extended_value: continue # be sure that it is utf-8 encoded if isinstance(extended_value, six.text_type): extended_value = extended_value.encode('utf-8') # only accept strings assert isinstance(extended_value, str), 'expected converted ' + \ 'value of IDynamicTextIndexExtender to be a str' indexed.append(extended_value) return ' '.join(indexed)
def update(self): z2.switch_on(self) self.updateFieldsFromSchemata() self.updateWidgets()
def _update(self): if self.available: z2.switch_on(self, request_layer=IFormLayer) self.form = self.form(aq_inner(self.context), self.request) alsoProvides(self.form, IWrappedForm) self.form.update()
def form_contents(self): z2.switch_on(self, request_layer=IFormLayer) addform = BookingForm(aq_inner(self.context), self.request) addform.update() return addform.render()
def _prepareForm(self): form = self.context.form_instance z2.switch_on(self.context, request_layer=self.context.request_layer) return form
def dynamic_searchable_text_indexer(obj): """Dynamic searchable text indexer. """ # if the object does not provide a request, get one. # This happens when running scripts (bin/instance run script.py) try: request = obj.REQUEST except AttributeError: request = getRequest() # We need to make sure that we have z2 mode switched on for z3c form. # Since we do not really have any view to do this on, we just use # a fake view. For switching z2 mode on, it's only necessary that # there is a view.request. view = FakeView(obj, request) z2.switch_on(view, request_layer=IFormLayer) indexed = [] for _storage, fields in get_searchable_contexts_and_fields(obj): for field in fields: # we need the form-field, not the schema-field we # already have.. form_field = Field(field, interface=field.interface, prefix='') # get the widget try: widget = get_field_widget(obj, form_field, request) except TypeError: # Some times the field value is wrong, then the converter # failes. We should not fail, so we catch this error. continue # get the converter for this field / widget converter = getMultiAdapter( (obj, field, widget), interfaces.IDexterityTextIndexFieldConverter) # convert the field value value = converter.convert() # if no value was returned, we don't need to index # anything. if not value: continue # be sure that it is utf-8 encoded if six.PY2 and isinstance(value, six.text_type): value = value.encode('utf-8') # only accept strings assert isinstance(value, str), 'expected converted ' + \ 'value of IDexterityTextIndexFieldConverter to be a str' indexed.append(value) # after converting all fields, run additional # IDynamicTextIndexExtender adapters. for _name, adapter in getAdapters( (obj,), interfaces.IDynamicTextIndexExtender ): extended_value = adapter() # if no value was returned, we don't need to index anything. if not extended_value: continue # be sure that it is utf-8 encoded if isinstance(extended_value, six.text_type): extended_value = extended_value.encode('utf-8') # only accept strings assert isinstance(extended_value, str), 'expected converted ' + \ 'value of IDynamicTextIndexExtender to be a str' indexed.append(extended_value) return ' '.join(indexed)
def renderForm(self): z2.switch_on(self) form = EditRealmForm(self.context, self.request) return form()
def render_add_form(self): z2.switch_on(self) form = AddPathForm(self.context, self.request) return form()
def contents(self): # use LocalManageChannelsForm to show local channels only # A call to 'switch_on' is required before we can render z3c.forms. z2.switch_on(self) return LocalManageChannelsForm(self.context.channels, self.request)()