コード例 #1
0
ファイル: writeentry.py プロジェクト: sebasgo/sbo-dresden.de
 def send_notification_mail(self, entry):
     context = aq_inner(self.context)
     urltool = getToolByName(context, 'portal_url')
     plone_utils = getToolByName(context, 'plone_utils')
     portal = urltool.getPortalObject()
     send_to_address = portal.getProperty('email_from_address')
     subject = _(u"New guestbook entry")
     encoding = portal.getProperty('email_charset')
     message_tpl = _(u"Name: {name}\nEmail: {mail}\nHomepage: {homepage}\nModeration state: {moderation_state}\nIP: {ip}\n\n{text}")
     message = MIMEText(message_tpl.format(
         name=entry.author,
         mail=entry.email_address,
         homepage=entry.homepage_address,
         moderation_state=moderation_states.getTerm(entry.moderation_state).title,
         ip=entry.ip,
         text=entry.message
     ), "text", encoding)
     message['To'] = send_to_address
     message['From'] = send_to_address
     message['Subject'] = subject
     try:
         host = getToolByName(self, 'MailHost')
         result = host.send(str(message))
     except ConflictError:
         raise
     except: # TODO Too many things could possibly go wrong. So we catch all.
         exception = plone_utils.exceptionString()
         message = _(u'Unable to send mail: ${exception}',
                         mapping={u'exception' : exception})
         plone_utils.addPortalMessage(message, 'error')
コード例 #2
0
ファイル: guestbook.py プロジェクト: sebasgo/sbo-dresden.de
    def __call__(self):
        context = aq_inner(self.context)
        postback = True
        form = self.request.form
        message_ids = form.get('messages', [])

        if form.get('form.button.Delete', False):
            context.manage_delObjects(ids=message_ids)
            confirm = _(u"The marked entries have been deleted.")
            IStatusMessage(self.request).addStatusMessage(confirm, type='info')
            postback = False

        if form.get('form.button.Publish', False):
            for id in message_ids:
                if context.hasObject(id):
                    message = context[id]
                    message.moderation_state = 'published'
                    message.reindexObject(idxs=["moderation_state"])
            postback = False

        if form.get('form.button.Spam', False):
            for id in message_ids:
                if context.hasObject(id):
                    message = context[id]
                    message.moderation_state = 'spam'
                    message.reindexObject(idxs=["moderation_state"])
            postback = False

        if postback:
            return self.template()
        else:
            self.request.response.redirect(self.context.absolute_url())
            return ''
コード例 #3
0
ファイル: writeentry.py プロジェクト: sebasgo/sbo-dresden.de
    def action_send(self, action):
        context = aq_inner(self.context)
        data, errors = self.extractData()

        if len(errors) > 0:
            return ''

        entry = createContentInContainer(context, 'sbo.inkstain.guestbookentry',
            entry_date=datetime.datetime.today(),
            author=data['name'],
            email_address=data['email_address'],
            homepage_address=data['homepage_address'],
            message=data['message'],
            moderation_state='pending',
            ip=get_ip(self.request)
        )
        self.send_notification_mail(entry)
        confirm = _(u"Thank you for your guestbook entry! It will be published after moderation.")
        IStatusMessage(self.request).addStatusMessage(confirm, type='info')
        self.request.response.redirect(context.absolute_url())
        return ''
コード例 #4
0
ファイル: guestbook.py プロジェクト: sebasgo/sbo-dresden.de
class NotAnHomepageUrl(schema.ValidationError):
    __doc__ = _(u"Invalid homepage address")


check_homepage_url = re.compile(r"https?\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(/\S*)?").match


def validate_homepage_url(value):
    if not check_homepage_url(value):
        raise NotAnHomepageUrl(value)
    return True


moderation_states = SimpleVocabulary(
    [
        SimpleTerm(value=u"pending", title=_(u"Pending review")),
        SimpleTerm(value=u"published", title=_(u"Published")),
        SimpleTerm(value=u"spam", title=_(u"Spam")),
    ]
)


class IGuestbookEntry(Interface):
    entry_date = schema.Datetime(title=_(u"Date of the entry"), required=True, readonly=True)

    author = schema.TextLine(title=_(u"Your name"), required=True)

    email_address = schema.ASCIILine(
        title=_(u"Your email address"), description=_(u"Won't be published."), required=True, constraint=validate_email
    )