def handle_forgot(self, action): data, errors = self.parent.extractData() if errors: self.parent.status = form.EditForm.formErrorsMessage return comp_data = {} for key, value in data.items(): name = key.split('.')[-1] if key.startswith('composer.'): comp_data[name] = value secret = self.parent._secret(comp_data, self.request) subs = self.context.subscriptions subscriptions = subs.query(secret=secret) if len(subscriptions) == 0: self.status = _(u"Your subscription isn't known to us.") else: subscription = tuple(subscriptions)[0] composer = self.context.composers[self.parent.format()] msg = composer.render_forgot_secret(subscription) status, status_msg = message.dispatch(msg) if status != u'sent': raise RuntimeError( "There was an error with sending your e-mail. Please try " "again later.") else: self.parent.status = _(u"Thanks. We sent you a message.")
def finish(self, data): comp_data = {} coll_data = {} for key, value in data.items(): name = key.split('.')[-1] if key.startswith('composer.collector.'): coll_data[name] = value elif key.startswith('composer.'): comp_data[name] = value # Create the data necessary to create a subscription: secret = self._secret(comp_data, self.request) metadata = dict(format=self.format(), date=datetime.datetime.now(), pending=True) # We assume here that the language of the request is the # desired language of the subscription: pl = component.queryAdapter( self.request, zope.i18n.interfaces.IUserPreferredLanguages) if pl is not None: metadata['languages'] = pl.getPreferredLanguages() try: subscription = self.context.subscriptions.add_subscription( self.context, secret, comp_data, coll_data, metadata) except ValueError: self.status = self.already_subscribed_message self.finished = False self.current_step.updateActions() return # Ask the composer to render a confirmation message composer = self.context.composers[self.format()] msg = composer.render_confirmation(subscription) status, status_msg = message.dispatch(msg) if status != u'sent': raise RuntimeError( "There was an error with sending your e-mail. Please try " "again later.")
def handle_send(self, action): data, errors = self.extractData() if errors: self.status = form.EditForm.formErrorsMessage return address = data['address'].lower() for channel in channel_lookup(): subscriptions = channel.subscriptions.query(key=address) if len(subscriptions): subscription = tuple(subscriptions)[0] composer = channel.composers[subscription.metadata['format']] msg = composer.render_forgot_secret(subscription) status, status_msg = message.dispatch(msg) if status != u'sent': raise RuntimeError( "There was an error with sending your e-mail. Please " "try again later.") self.status = self.successMessage break else: self.status = self.notKnownMessage