def handleChange(self, action): data, errors = self.extractData() if errors: self.status = self.formErrorsMessage return flash = IStatusMessage(self.request).addStatusMessage pas = getToolByName(self.context, "acl_users") ppr = getToolByName(self.context, "portal_password_reset") user = pas.getUser(data["login"]) if user is None: flash( _( "user_name_wrong", u"The login name you have provided does not match the username from the password-reset email. Please check your spelling." # noqa: E501 ), "error" ) return try: ppr.resetPassword( user.getId(), self.randomstring, data["password"] ) except InvalidRequestError: flash( _( "user_name_wrong", u"The login name you have provided does not match the username from the password-reset email. Please check your spelling." # noqa: E501 ), "error" ) return flash(_("password_reset", u"Your password has been reset."), "success") portal_url = aq_inner(self.context).absolute_url() self.request.response.redirect("%s/@@login" % portal_url)
def handleSend(self, action): data, errors = self.extractData() if errors: self.status = self.formErrorsMessage return appconfig = queryUtility(IAppConfig) or {} siteconfig = appconfig.get("site", {}) subject=_("contact_mail_subject", default="Contact request: ${subject}", mapping=data) subject=translate(subject, context=self.request) email=createEmailTo(data["name"], data["email"], siteconfig.get("contact.name", self.context.email_from_name), siteconfig.get("contact.email", self.context.email_from_address), subject, data["message"]) mh=getToolByName(self.context, "MailHost") flash=IStatusMessage(self.request).addStatusMessage try: mh.send(email) except MailHostError as e: log.error("MailHost error sending contact form for %s: %s", data["email"], e) flash(_("error_contactmail", "An error occured while processing your contact request. Please try again later."), "error") return except socket.error as e: log.error("Socket error sending contact form for %s: %s", data["email"], e[1]) flash(_("error_contactmail", "An error occured while processing your contact request. Please try again later."), "error") return flash(_("Message sent"), "success") self.request.response.redirect(aq_inner(self.context).absolute_url())
def handleSend(self, action): data, errors = self.extractData() if errors: self.status = self.formErrorsMessage return appconfig = queryUtility(IAppConfig) or {} siteconfig = appconfig.get("site", {}) subject=_(u"contact_mail_subject", default=u"Contact request: ${subject}", mapping=data) subject=translate(subject, context=self.request) email=createEmailTo(data["name"], data["email"], siteconfig.get("contact.name", self.context.email_from_name), siteconfig.get("contact.email", self.context.email_from_address), subject, data["message"]) mh=getToolByName(self.context, "MailHost") flash=IStatusMessage(self.request).addStatusMessage try: mh.send(email) except MailHostError, e: log.error("MailHost error sending contact form for %s: %s", data["email"], e) flash(_(u"error_contactmail", u"An error occured while processing your contact request. Please try again later."), "error") return
def organise(self): """Helper method to generate the menu items for organising content (copy/paste/etc.). If no organising actions are available None is returned. """ context = aq_inner(self.context) context_url = context.absolute_url() is_root = ISiteRoot.providedBy(context) pa = getToolByName(context, "portal_actions") actions = pa.listActions(object=context, categories=("folder_buttons",), ignore_categories=None) ec = pa._getExprContext(context) actions = [ActionInfo(action, ec) for action in actions] menu = {"title": _("menu_organise", default=u"Organise")} children = menu["children"] = [] for a in actions: if a["visible"] and a["allowed"] and a["available"] and not is_root: if a["id"] == "copy" and context.cb_isCopyable(): children.append({"title": _("menu_copy", default=u"Copy"), "url": "%s/@@copy" % context_url}) elif a["id"] == "cut" and context.cb_isMoveable(): children.append({"title": _("menu_cut", default=u"Cut"), "url": "%s/@@cut" % context_url}) elif a["id"] == "paste" and ICopyContainer.providedBy(context): children.append({"title": _("menu_paste", default=u"Paste"), "url": "%s/@@paste" % context_url}) elif a["id"] == "delete": children.append({"title": _("menu_delete", default=u"Delete"), "url": "%s/@@delete" % context_url}) if children: return menu
def handleChange(self, action): data, errors = self.extractData() if errors: self.status = self.formErrorsMessage return flash = IStatusMessage(self.request).addStatusMessage pas = getToolByName(self.context, "acl_users") ppr = getToolByName(self.context, "portal_password_reset") user = pas.getUser(data["login"]) if user is None: flash( _( "user_name_wrong", "The login name you have provided does not match the username from the password-reset email. Please check your spelling.", # noqa: E501 ), "error", ) return try: ppr.resetPassword(user.getId(), self.randomstring, data["password"]) except InvalidRequestError: flash( _( "user_name_wrong", "The login name you have provided does not match the username from the password-reset email. Please check your spelling.", # noqa: E501 ), "error", ) return flash(_("password_reset", "Your password has been reset."), "success") portal_url = aq_inner(self.context).absolute_url() self.request.response.redirect("%s/@@login" % portal_url)
class ExternalLinkSchema(model.Schema): URL = schema.URI(title=_("label_url", default="URL"), required=True) title = schema.TextLine(title=_("label_title", default="Title"), required=False) new_window = schema.Bool( title=_("label_new_window", default="Open link in new window"), default=True )
class IPasswordReset(form.Schema): login = schema.TextLine( title=_("label_login", default="Login"), required=True) password = schema.Password( title = _("label_password", default="Password"), required = True)
def render(self): flash=IStatusMessage(self.request).addStatusMessage if not isAnonymous(): mt=getToolByName(self.context, "portal_membership") mt.logoutUser(self.request) flash(_(u"message_logged_out", default=u"You have been logged out."), "success") else: flash(_(u"message_already_logged_out", default=u"You were already logged out."), "notice") return self.request.response.redirect(aq_inner(self.context).absolute_url())
class ISettings(model.Schema): fullname = schema.TextLine(title=_("label_fullname", default="Full name"), required=True) email = schema.ASCIILine(title=_("label_email", default="Email address"), required=True) password = schema.Password(title=_("label_password", default="Password"), required=True)
def formatDatetime(request, timestamp, length="long"): """Wrapper aound the zope.i18n datetime formatter which does not abort on pre-1900 dates. """ if timestamp.year<1900: return _("date_to_early", default=u"<pre-1900-date>") if length=="long": return _("format_datetime", default="${date} at ${time}", mapping=dict(date=formatDate(request, timestamp, "long"), time=formatTime(request, timestamp, "short"))) return request.locale.dates.getFormatter("dateTime", length).format(timestamp)
def render(self): context=aq_inner(self.context) container=aq_parent(context) flash=IStatusMessage(self.request).addStatusMessage try: container.manage_cutObjects(context.getId(), self.request) flash(_("message_cut_success", default=u"Cut."), "notice") except CopyError: flash(_("message_cut_invalid", default=u"It is not possible to move this object."), "error") self.request.response.redirect(context.absolute_url())
def render(self): context=aq_inner(self.context) container=aq_parent(context) flash=IStatusMessage(self.request).addStatusMessage try: container.manage_cutObjects(context.getId(), self.request) flash(_("message_cut_success", default="Cut."), "notice") except CopyError: flash(_("message_cut_invalid", default="It is not possible to move this object."), "error") self.request.response.redirect(context.absolute_url())
class PasswordReset(form.SchemaForm): grok.context(ISiteRoot) grok.name("reset-password") grok.require("zope2.Public") randomstring = None ignoreContext = True schema = IPasswordReset label = _("header_password_reset", default="Reset password") description = _("intro_password_reset", default="Please fill out the form below to set your password.") default_fieldset_label = None def publishTraverse(self, request, name): if self.randomstring is not None: raise KeyError(name) ppr=getToolByName(self.context, "portal_password_reset") try: ppr.verifyKey(name) except (InvalidRequestError, ExpiredRequestError): raise KeyError(name) self.randomstring=name return self @buttonAndHandler(_("button_change", default="Change"), name="change") def handleChange(self, action): data, errors=self.extractData() if errors: self.status=self.formErrorsMessage return flash=IStatusMessage(self.request).addStatusMessage pas=getToolByName(self.context, "acl_users") ppr=getToolByName(self.context, "portal_password_reset") user=pas.getUser(data["login"]) if user is None: flash(_("user_name_wrong", "The login name you have provided does not match the username from the password-reset email. Please check your spelling."), "error") return try: ppr.resetPassword(user.getId(), self.randomstring, data["password"]) except InvalidRequestError: flash(_("user_name_wrong", "The login name you have provided does not match the username from the password-reset email. Please check your spelling."), "error") return flash(_("password_reset", "Your password has been reset."), "success") portal_url=aq_inner(self.context).absolute_url() self.request.response.redirect("%s/@@login" % portal_url)
def formatDatetime(request, timestamp, length="long"): """Wrapper aound the zope.i18n datetime formatter which does not abort on pre-1900 dates. """ if timestamp.year < 1900: return _("date_to_early", default="<pre-1900-date>") if length == "long": return _("format_datetime", default="${date} at ${time}", mapping=dict(date=formatDate(request, timestamp, "long"), time=formatTime(request, timestamp, "short"))) return request.locale.dates.getFormatter("dateTime", length).format(timestamp)
def set(self, value): if value is None: return IStatusMessage(getRequest()).add( _("Password not updated, none was specified."), type="error") try: mt = getToolByName(self.user, "portal_membership") except AttributeError: return IStatusMessage(getRequest()).add( _("Cannot change password for Zope users, only Plone"), type="error") else: mt.setPassword(value)
def render(self): flash = IStatusMessage(self.request).addStatusMessage if not isAnonymous(): mt = getToolByName(self.context, "portal_membership") mt.logoutUser(self.request) flash(_("message_logged_out", default="You have been logged out."), "success") else: flash( _("message_already_logged_out", default="You were already logged out."), "notice") return self.request.response.redirect( aq_inner(self.context).absolute_url())
def set(self, value): if value is None: return IStatusMessage(getRequest()).add( _('Password not updated, none was specified.'), type='error') try: mt = getToolByName(self.user, "portal_membership") except AttributeError: return IStatusMessage(getRequest()).add( _('Cannot change password for Zope users, only Plone'), type='error') else: mt.setPassword(value)
def formatDate(request, date, length="long"): """Wrapper aound the zope.i18n date formatter which does not abort on pre-1900 dates. """ if date.year<1900: return _("date_to_early", default=u"<pre-1900-date>") return request.locale.dates.getFormatter("date", length).format(date)
def update(self): user=getSecurityManager().getUser() if "came_from" in self.request: self.came_from=self.request.came_from else: self.came_from=self.request.environ.get("HTTP_REFERER") if self.came_from: if ":" not in self.came_from: # Mostly for mechanize/testbrowser which starts with a bogus 'localhost' as referer. self.came_from=None else: put=getToolByName(self.context, "portal_url") if not put.isURLInPortal(self.came_from): self.came_from=None self.anonymous=isAnonymous(user) self.action="%s/@@login" % aq_inner(self.context).absolute_url() if not self.anonymous and "login_attempt" in self.request: flash=IStatusMessage(self.request).addStatusMessage flash(_(u"message_logged_in", default=u"You have been logged in."), "success") mt=getToolByName(self.context, "portal_membership") mt.loginUser(self.request) next=self.came_from or self.homeUrl(user) self.request.response.redirect(next) self.failed=self.anonymous and "login_attempt" in self.request
def site_title(self): config = self.appConfig title = config.get("site", {}).get("title") if title: return title else: return _("default_site_title", default="Plone")
def site_title(self): config=self.appConfig title=config.get("site", {}).get("title") if title: return title else: return _("default_site_title", default=u"Plone")
def formatDate(request, date, length="long"): """Wrapper aound the zope.i18n date formatter which does not abort on pre-1900 dates. """ if date.year < 1900: return _("date_to_early", default="<pre-1900-date>") return request.locale.dates.getFormatter("date", length).format(date)
def update(self): user = getSecurityManager().getUser() self.came_from = self.request.get('came_from') if not self.came_from: self.came_from = self.request.environ.get("HTTP_REFERER") elif '@@reset-password' in self.came_from: self.came_from = None if self.came_from: if ":" not in self.came_from: # Mostly for mechanize/testbrowser which starts with a bogus 'localhost' as referer. self.came_from = None else: put = getToolByName(self.context, "portal_url") if not put.isURLInPortal(self.came_from): self.came_from = None self.anonymous = isAnonymous(user) self.action = "%s/@@login" % aq_inner(self.context).absolute_url() if not self.anonymous and "login_attempt" in self.request: flash = IStatusMessage(self.request).addStatusMessage flash(_("message_logged_in", default="You have been logged in."), "success") mt = getToolByName(self.context, "portal_membership") mt.loginUser(self.request) next = self.came_from or self.homeUrl(user) self.request.response.redirect(next) self.failed = self.anonymous and "login_attempt" in self.request
def post(self): action=self.request.form.get("action", "cancel") context=aq_inner(self.context) flash=IStatusMessage(self.request).addStatusMessage if action=="cancel": flash(_("message_delete_cancel", default="Deletion cancelled"), "notice") self.request.response.redirect(context.absolute_url()) elif action=="delete": authenticator=getMultiAdapter((self.context, self.request), name="authenticator") if not authenticator.verify(): raise zExceptions.Unauthorized container=aq_parent(context) container.manage_delObjects([context.getId()]) flash(_("message_delete_success", default="Object removed"), "success") self.request.response.redirect(container.absolute_url())
def render(self): flash = IStatusMessage(self.request).addStatusMessage if setLanguage(self.request, self.context): flash(_('message_switch_language', default=u'Language updated'), 'success') else: flash(_('message_switch_language_error', default=u'Failed to switch language'), 'error') next_url = self.request.get('came_from') if not next_url: next_url = self.request.environ.get('HTTP_REFERER') if not next_url or not \ next_url.startswith(getPortal(self.context).absolute_url()): next_url = aq_inner(self.context).absolute_url() self.request.response.redirect(next_url)
def render(self): flash = IStatusMessage(self.request).addStatusMessage if setLanguage(self.request, self.context): flash(_('message_switch_language', default='Language updated'), 'success') else: flash(_('message_switch_language_error', default='Failed to switch language'), 'error') next_url = self.request.get('came_from') if not next_url: next_url = self.request.environ.get('HTTP_REFERER') if not next_url or not \ next_url.startswith(getPortal(self.context).absolute_url()): next_url = aq_inner(self.context).absolute_url() self.request.response.redirect(next_url)
def organise(self): """Helper method to generate the menu items for organising content (copy/paste/etc.). If no organising actions are available None is returned. """ context = aq_inner(self.context) context_url = context.absolute_url() is_root = ISiteRoot.providedBy(context) pa = getToolByName(context, 'portal_actions') actions = pa.listActions(object=context, categories=('folder_buttons', ), ignore_categories=None) ec = pa._getExprContext(context) actions = [ActionInfo(action, ec) for action in actions] menu = {"title": _("menu_organise", default="Organise")} children = menu["children"] = [] for a in actions: if a['visible'] and a['allowed'] \ and a['available'] and not is_root: if a['id'] == 'copy' and context.cb_isCopyable(): children.append({ "title": _("menu_copy", default="Copy"), "url": "%s/@@copy" % context_url }) elif a['id'] == 'cut' and context.cb_isMoveable(): children.append({ "title": _("menu_cut", default="Cut"), "url": "%s/@@cut" % context_url }) elif a['id'] == 'paste' and ICopyContainer.providedBy(context): children.append({ "title": _("menu_paste", default="Paste"), "url": "%s/@@paste" % context_url }) elif a['id'] == 'delete': children.append({ "title": _("menu_delete", default="Delete"), "url": "%s/@@delete" % context_url }) if children: return menu
def post(self): action=self.request.form.get("action", "cancel") context=aq_inner(self.context) flash=IStatusMessage(self.request).addStatusMessage if action=="cancel": flash(_("message_delete_cancel", default=u"Deletion cancelled"), "notice") self.request.response.redirect(context.absolute_url()) elif action=="delete": authenticator=getMultiAdapter((self.context, self.request), name=u"authenticator") if not authenticator.verify(): raise zExceptions.Unauthorized container=aq_parent(context) container.manage_delObjects([context.getId()]) flash(_("message_delete_success", default=u"Object removed"), "success") self.request.response.redirect(container.absolute_url())
class IContact(model.Schema): name = schema.TextLine(title=_("label_your_name", default="Your name"), required=True) directives.widget(name="plonetheme.nuplone.browser.contact.TextSpan7") email = schema.ASCIILine(title=_("label_email", default="Email address"), required=True) directives.widget(email="plonetheme.nuplone.browser.contact.TextSpan7") subject = schema.TextLine(title=_("label_subject", default="Subject"), required=True) directives.widget(subject="plonetheme.nuplone.browser.contact.TextSpan7") message = schema.Text(title=_("label_contact_text", default="Your message"), required=True) directives.widget( message="plonetheme.nuplone.browser.contact.TextLines4Rows")
def render(self): context=aq_inner(self.context) container=aq_parent(context) if not context.cb_isCopyable(): raise zExceptions.Unauthorized container.manage_copyObjects(context.getId(), self.request) flash=IStatusMessage(self.request).addStatusMessage flash(_(u"message_copy_sucess", default=u"Copied"), "notice") self.request.response.redirect(context.absolute_url())
def handleSend(self, action): flash=IStatusMessage(self.request).addStatusMessage data, errors=self.extractData() if errors: self.status=self.formErrorsMessage return pas=getToolByName(self.context, "acl_users") mt=getToolByName(self.context, "portal_membership") user=pas.getUser(data["login"]) if user is None: log.info("Password reset request for unknown user %s" % data["login"]) flash(_("error_pwreset_unknown_user", default=u"Unknown username."), "error") return member=mt.getMemberById(user.getId()) email_address=member.getProperty("email") if not email_address: flash(_("error_pwreset_no_email", default=u"No known email address for this user."), "error") return ppr=getToolByName(self.context, "portal_password_reset") reset=ppr.requestReset(user.getId()) portal_url=aq_inner(self.context).absolute_url() reset_url="%s/@@reset-password/%s" % (portal_url, reset["randomstring"]) data["site"]=self.context.title subject=_(u"password_reset_subject", default=u"Password reset for ${site}", mapping=data) subject=translate(subject, context=self.request) body=self.email_template(reset_url=reset_url, login=data["login"], site=self.context.title) email=createEmailTo(self.context.email_from_name, self.context.email_from_address, None, email_address, subject, body) mh=getToolByName(self.context, "MailHost") try: mh.send(email) except MailHostError, e: log.error("MailHost error sending password reset form to %s: %s", email_address, e) flash(_(u"error_contactmail", u"An error occured while processing your contact request. Please try again later."), "error") return
def render(self): context=aq_inner(self.context) flash=IStatusMessage(self.request).addStatusMessage if not context.cb_dataValid(): raise zExceptions.Unauthorized try: context.manage_pasteObjects(REQUEST=self.request) flash(_("message_paste_succes", default=u"Pasted"), "success") except ConflictError: raise except ValueError: flash(_("message_paste_valueerror", default=u"You can not paste the copied data here."), "error") except zExceptions.Unauthorized: flash(_("message_paste_unauthorized", default=u"You are not allowed to paste here."), "error") except CopyError, e: if "Insufficient Privileges" in e.message: raise zExceptions.Unauthorized flash(_("message_paste_generic", default=u"No valid data found in the clipboard."), "error")
class ContactForm(form.SchemaForm): grok.context(ISiteRoot) grok.name("contact") grok.require("zope2.Public") ignoreContext = True schema = IContact label = _("header_contact", default="Contact") default_fieldset_label = None @buttonAndHandler(_("button_send", default="Send"), name="send") def handleSend(self, action): data, errors = self.extractData() if errors: self.status = self.formErrorsMessage return appconfig = queryUtility(IAppConfig) or {} siteconfig = appconfig.get("site", {}) subject=_("contact_mail_subject", default="Contact request: ${subject}", mapping=data) subject=translate(subject, context=self.request) email=createEmailTo(data["name"], data["email"], siteconfig.get("contact.name", self.context.email_from_name), siteconfig.get("contact.email", self.context.email_from_address), subject, data["message"]) mh=getToolByName(self.context, "MailHost") flash=IStatusMessage(self.request).addStatusMessage try: mh.send(email) except MailHostError as e: log.error("MailHost error sending contact form for %s: %s", data["email"], e) flash(_("error_contactmail", "An error occured while processing your contact request. Please try again later."), "error") return except socket.error as e: log.error("Socket error sending contact form for %s: %s", data["email"], e[1]) flash(_("error_contactmail", "An error occured while processing your contact request. Please try again later."), "error") return flash(_("Message sent"), "success") self.request.response.redirect(aq_inner(self.context).absolute_url())
def __call__(self): context = aq_inner(self.context) container = aq_parent(context) if not context.cb_isCopyable(): raise zExceptions.Unauthorized container.manage_copyObjects(context.getId(), self.request) flash = IStatusMessage(self.request).addStatusMessage flash(_("message_copy_sucess", default="Copied"), "notice") self.request.response.redirect(context.absolute_url())
def render(self): context=aq_inner(self.context) flash=IStatusMessage(self.request).addStatusMessage if not context.cb_dataValid(): raise zExceptions.Unauthorized try: context.manage_pasteObjects(REQUEST=self.request) flash(_("message_paste_succes", default="Pasted"), "success") except ConflictError: raise except ValueError: flash(_("message_paste_valueerror", default="You can not paste the copied data here."), "error") except zExceptions.Unauthorized: flash(_("message_paste_unauthorized", default="You are not allowed to paste here."), "error") except CopyError as e: if "Insufficient Privileges" in e.message: raise zExceptions.Unauthorized flash(_("message_paste_generic", default="No valid data found in the clipboard."), "error") self.request.response.redirect(context.absolute_url())
def __call__(self): flash = IStatusMessage(self.request).addStatusMessage if setLanguage(self.request, self.context): flash(_("message_switch_language", default="Language updated"), "success") else: flash( _( "message_switch_language_error", default="Failed to switch language", ), "error", ) next_url = self.request.get("came_from") if not next_url: next_url = self.request.environ.get("HTTP_REFERER") put = getToolByName(self.context, "portal_url") if not next_url or not put.isURLInPortal(next_url): next_url = aq_inner(self.context).absolute_url() self.request.response.redirect(next_url)
def factories(self): """Helper method to generate the menu items for creating new content. If no content can be created None is returned. """ menu = {"title": _("menu_add_new", default=u"Add new")} children = menu["children"] = [] actions = getFactoriesInContext(self.context) actions.sort(key=lambda x: x.title) for action in actions: children.append({"title": action.title, "description": action.description, "url": action.url}) if children: return menu else: return None
def actions(self): """Helper method to generate the contents for the actions menu.""" menu = {"title": _("menu_actions", default="Actions")} children = menu["children"] = [] submenu = self.factories() if submenu: children.append(submenu) submenu = self.organise() if submenu: children.append(submenu) if children: return menu else: return None
def handleChange(self, action): data, errors=self.extractData() if errors: self.status=self.formErrorsMessage return flash=IStatusMessage(self.request).addStatusMessage pas=getToolByName(self.context, "acl_users") ppr=getToolByName(self.context, "portal_password_reset") user=pas.getUser(data["login"]) ppr.resetPassword(user.getId(), self.randomstring, data["password"]) flash(_("password_reset", u"Your password has been reset."), "success") portal_url=aq_inner(self.context).absolute_url() self.request.response.redirect("%s/@@login" % portal_url)
def actions(self): """Helper method to generate the contents for the actions menu. """ menu = {"title": _("menu_actions", default=u"Actions")} children = menu["children"] = [] submenu = self.factories() if submenu: children.append(submenu) submenu = self.organise() if submenu: children.append(submenu) if children: return menu else: return None
def handleSend(self, action): flash=IStatusMessage(self.request).addStatusMessage data, errors=self.extractData() if errors: self.status=self.formErrorsMessage return pas=getToolByName(self.context, "acl_users") mt=getToolByName(self.context, "portal_membership") user=pas.getUser(data["login"]) if user is None: log.info("Password reset request for unknown user %s" % data["login"]) flash(_("error_pwreset_unknown_user", default="Unknown username."), "error") return member=mt.getMemberById(user.getId()) email_address=member.getProperty("email") if not email_address: flash(_("error_pwreset_no_email", default="No known email address for this user."), "error") return ppr=getToolByName(self.context, "portal_password_reset") reset=ppr.requestReset(user.getId()) portal_url=aq_inner(self.context).absolute_url() reset_url="%s/@@reset-password/%s" % (portal_url, reset["randomstring"]) data["site"]=self.context.title subject=_("password_reset_subject", default="Password reset for ${site}", mapping=data) subject=translate(subject, context=self.request) body=self.email_template(reset_url=reset_url, login=data["login"], site=self.context.title) email=createEmailTo(self.context.email_from_name, self.context.email_from_address, None, email_address, subject, body) mh=getToolByName(self.context, "MailHost") try: mh.send(email) except MailHostError as e: log.error("MailHost error sending password reset form to %s: %s", email_address, e) flash(_("error_contactmail", "An error occured while processing your contact request. Please try again later."), "error") return except socket.error as e: log.error("Socket error sending password reset form to: %s", email_address, e[1]) flash(_("error_contactmail", "An error occured while processing your contact request. Please try again later."), "error") return flash(_("info_pwrest_mail_sent", default="An email with instructions for resetting your password has been sent."), "success") self.request.response.redirect(portal_url)
def factories(self): """Helper method to generate the menu items for creating new content. If no content can be created None is returned. """ menu = {"title": _("menu_add_new", default="Add new")} children = menu["children"] = [] actions = getFactoriesInContext(self.context) actions.sort(key=lambda x: x.title) for action in actions: children.append({ "title": action.title, "description": action.description, "url": action.url, }) if children: return menu else: return None
self.status = self.formErrorsMessage return appconfig = queryUtility(IAppConfig) or {} siteconfig = appconfig.get("site", {}) subject=_(u"contact_mail_subject", default=u"Contact request: ${subject}", mapping=data) subject=translate(subject, context=self.request) email=createEmailTo(data["name"], data["email"], siteconfig.get("contact.name", self.context.email_from_name), siteconfig.get("contact.email", self.context.email_from_address), subject, data["message"]) mh=getToolByName(self.context, "MailHost") flash=IStatusMessage(self.request).addStatusMessage try: mh.send(email) except MailHostError, e: log.error("MailHost error sending contact form for %s: %s", data["email"], e) flash(_(u"error_contactmail", u"An error occured while processing your contact request. Please try again later."), "error") return except socket.error, e: log.error("Socket error sending contact form for %s: %s", data["email"], e[1]) flash(_(u"error_contactmail", u"An error occured while processing your contact request. Please try again later."), "error") return flash(_(u"Message sent"), "success") self.request.response.redirect(aq_inner(self.context).absolute_url())
class IRequestPasswordReset(form.Schema): login = schema.TextLine( title=_("label_login", default="Login"), required=True)
None, email_address, subject, body) mh=getToolByName(self.context, "MailHost") try: mh.send(email) except MailHostError, e: log.error("MailHost error sending password reset form to %s: %s", email_address, e) flash(_(u"error_contactmail", u"An error occured while processing your contact request. Please try again later."), "error") return except socket.error, e: log.error("Socket error sending password reset form to: %s", email_address, e[1]) flash(_(u"error_contactmail", u"An error occured while processing your contact request. Please try again later."), "error") return flash(_("info_pwrest_mail_sent", default=u"An email with instructions for resetting your password has been sent."), "success") self.request.response.redirect(portal_url) class PasswordReset(form.SchemaForm): grok.context(ISiteRoot) grok.name("reset-password") grok.require("zope2.Public") randomstring = None ignoreContext = True schema = IPasswordReset label = _(u"header_password_reset", default=u"Reset password")
class RequestPasswordForm(form.SchemaForm): grok.context(ISiteRoot) grok.name("request-password-reset") grok.require("zope2.Public") email_template = ViewPageTemplateFile("templates/pwreset-email.pt") ignoreContext = True schema = IRequestPasswordReset label = _("header_password_reset_request", default="Reset password") default_fieldset_label = None description = _("intro_password_reset_request", default="For security reasons, we store your password encrypted, " "and cannot mail it to you. If you would like to reset " "your password, fill out the form below and we will send " "you an email at the address you gave when you registered " "to start the process of resetting your password.") @buttonAndHandler(_("button_send", default="Send"), name="send") def handleSend(self, action): flash=IStatusMessage(self.request).addStatusMessage data, errors=self.extractData() if errors: self.status=self.formErrorsMessage return pas=getToolByName(self.context, "acl_users") mt=getToolByName(self.context, "portal_membership") user=pas.getUser(data["login"]) if user is None: log.info("Password reset request for unknown user %s" % data["login"]) flash(_("error_pwreset_unknown_user", default="Unknown username."), "error") return member=mt.getMemberById(user.getId()) email_address=member.getProperty("email") if not email_address: flash(_("error_pwreset_no_email", default="No known email address for this user."), "error") return ppr=getToolByName(self.context, "portal_password_reset") reset=ppr.requestReset(user.getId()) portal_url=aq_inner(self.context).absolute_url() reset_url="%s/@@reset-password/%s" % (portal_url, reset["randomstring"]) data["site"]=self.context.title subject=_("password_reset_subject", default="Password reset for ${site}", mapping=data) subject=translate(subject, context=self.request) body=self.email_template(reset_url=reset_url, login=data["login"], site=self.context.title) email=createEmailTo(self.context.email_from_name, self.context.email_from_address, None, email_address, subject, body) mh=getToolByName(self.context, "MailHost") try: mh.send(email) except MailHostError as e: log.error("MailHost error sending password reset form to %s: %s", email_address, e) flash(_("error_contactmail", "An error occured while processing your contact request. Please try again later."), "error") return except socket.error as e: log.error("Socket error sending password reset form to: %s", email_address, e[1]) flash(_("error_contactmail", "An error occured while processing your contact request. Please try again later."), "error") return flash(_("info_pwrest_mail_sent", default="An email with instructions for resetting your password has been sent."), "success") self.request.response.redirect(portal_url)
class ContactForm(AutoExtensibleForm, form.Form): ignoreContext = True schema = IContact label = _("header_contact", default="Contact") default_fieldset_label = None @property def email_from_name(self): return api.portal.get_registry_record("plone.email_from_name") @property def email_from_address(self): return api.portal.get_registry_record("plone.email_from_address") @buttonAndHandler(_("button_send", default="Send"), name="send") def handleSend(self, action): data, errors = self.extractData() if errors: self.status = self.formErrorsMessage return subject = _( "contact_mail_subject", default="Contact request: ${subject}", mapping=data, ) subject = translate(subject, context=self.request) email = createEmailTo( data["name"], data["email"], self.email_from_name, self.email_from_address, subject, data["message"], ) mh = getToolByName(self.context, "MailHost") flash = IStatusMessage(self.request).addStatusMessage try: mh.send(email) except MailHostError as e: log.error("MailHost error sending contact form for %s: %s", data["email"], e) flash( _( "error_contactmail", "An error occured while processing your contact request. Please try again later.", # noqa: E501 ), "error", ) return except socket.error as e: log.error("Socket error sending contact form for %s: %s", data["email"], e[1]) flash( _( "error_contactmail", "An error occured while processing your contact request. Please try again later.", # noqa: E501 ), "error", ) return flash(_("Message sent"), "success") self.request.response.redirect(aq_inner(self.context).absolute_url())