Ejemplo n.º 1
0
    def __call__(self):
        # Make sure that the current user is allowed to reply:
        if not self.canReply():
            raise Unauthorized, \
                _(u"You do not have permission to respond to this message.")
        # Save the referring URL, either from the template form, or the
        # HTTP_REFERER, otherwise just use the message url.
        referring_url = (self.request.get('referring_url', None)
                         or self.request.get('HTTP_REFERER', None)
                         or self.context.absolute_url())
        self.referring_url = urllib.splitquery(referring_url)[0]
        submitted = self.request.get('submit', None)
        cancelled = self.request.get('cancel', None)
        if cancelled:
            portal_status_msg = _(u"Reply Cancelled")
            return self.request.response.redirect(self.referring_url +
                                                  '?portal_status_message=%s' %
                                                  (portal_status_msg))
        if submitted:
            self.errors = {}
            ml = self.getMailingList()
            body = decode(self.request.get('body', None), ml)
            subject = decode(self.request.get('subject', None), ml)
            if not body or body == self.reply_body(use_empty=True):
                self.errors['body'] = _(u'You must enter a message')
            if not subject:
                self.errors['subject'] = _(
                    u'You must enter a subject for your message.')
            if not self.member_address():
                self.errors['subject'] = _(u'The current user has no address.')
            if not self.errors:
                message = self.createReply()
                self.request.set('Mail', message)
                result = ml.processMail(self.request)
                if result == POST_ALLOWED:
                    portal_status_msg = _(u"Post Sent")
                    return self.request.response.redirect(
                        self.referring_url + '?portal_status_message=%s' %
                        (portal_status_msg))
                elif result == POST_DEFERRED:
                    portal_status_msg = _(u"Post Pending Moderation")
                    return self.request.response.redirect(
                        self.referring_url + '?portal_status_message=%s' %
                        (portal_status_msg))
                elif result == POST_DENIED:
                    portal_status_msg = _(
                        u"Post Rejected: You already have a post pending moderation."
                    )
                    return self.request.response.redirect(
                        self.referring_url + '?portal_status_message=%s' %
                        (portal_status_msg))
                else:
                    portal_status_msg = _(u"Post Error")
                    return self.request.response.redirect(
                        self.referring_url + '?portal_status_message=%s' %
                        (portal_status_msg))

        return self.index()
    def __call__(self):
        # Make sure that the current user is allowed to reply:
        if not self.canReply():
            raise Unauthorized, \
                "You do not have permission to respond to this message."
        # Save the referring URL, either from the template form, or the
        # HTTP_REFERER, otherwise just use the message url.
        referring_url = (self.request.get('referring_url', None) or
                              self.request.get('HTTP_REFERER', None) or
                              self.context.absolute_url())
        self.referring_url = urllib.splitquery(referring_url)[0]
        submitted = self.request.get('submit', None)
        cancelled = self.request.get('cancel', None)
        if cancelled:
            return self.request.response.redirect(self.referring_url+
                                    '?portal_status_message=Reply%20Cancelled')
        if submitted:
            self.errors = {}
            ml = self.getMailingList()
            body = decode(self.request.get('body', None), ml)
            subject = decode(self.request.get('subject', None), ml)
            if not body or body == self.reply_body(use_empty=True):
                self.errors['body'] = _(u'You must enter a message')
            if not subject:
                self.errors['subject'] = _(
                    u'You must enter a subject for your message.')
            if not self.member_address():
                self.errors['subject'] = _(u'The current user has no address.')
            if not self.errors:
                message = self.createReply()
                self.request.set('Mail', message)
                result = ml.processMail(self.request)
                if result == POST_ALLOWED:
                    return self.request.response.redirect(self.referring_url+
                                    '?portal_status_message=Post%20Sent')
                elif result == POST_DEFERRED:
                    return self.request.response.redirect(self.referring_url+
                                    '?portal_status_message=Post%20Pending%20Moderation')
                elif result == POST_DENIED:
                    return self.request.response.redirect(self.referring_url+
                                    '?portal_status_message=Post%20Rejected:%20You%20already%20have%20a%20post%20pending%20moderation.')
                else:
                    return self.request.response.redirect(self.referring_url+
                                    '?portal_status_message=Post%20Error')
                    


        return self.index()
 def _searchArchive(self, text=None):
     messages = []
     batch = self.request.get('batch', True)
     batch_size = int(self.request.get('b_size', 25))
     batch_start = int(self.request.get('b_start', 0))
     text = text or decode(self.request.get('search_text'), '')
     context = self.context
     subscription = IMembershipList(self.getMailingList())
     if text:
         text = text.strip()
         try:
             messages = self.search.search(text)
         except ParseTree.ParseError, inst:
             if "Token 'ATOM' required, 'EOF' found" in str(inst) or "Token 'EOF' required" in str(inst):
                 self.request.set('portal_status_message', _(u'Invalid Search: Search phrase cannot end with \'and\', \'or\', or \'not\''))
             elif "Token 'ATOM' required" in str(inst):
                 self.request.set('portal_status_message', _(u'Invalid Search: Search phrase cannot begin with \'and\', \'or\', or \'not\''))
             elif "a term must have at least one positive word" in str(inst):
                 self.request.set('portal_status_message', _(u'Invalid Search: Search phrase cannot begin with \'not\''))
             elif "Query contains only common words" in str(inst):
                 self.request.set('portal_status_message', _(u'Invalid Search: Search phrase must contain words other than \'and\', \'or\', and \'not\''))
         else:
             messages = catalogMessageIterator(messages, sub_mgr=subscription)
             if len(messages) == 0:
                 self.request.set('portal_status_message', _(u'There were no messages found'))
 def createMessage(self):
     """Generate a basic message, MailBoxer will take care of all the
        important headers, hopefully."""
     headers = {'Message-Id': self.new_message_id(),
                'Date': self.rfc_date(),}
     ml = self.getMailingList()
     encoding = getSiteEncoding(ml)
     body = decode(self.request.get('body'), ml)
     subject = decode(self.request.get('subject'), ml)
     message = construct_simple_encoded_message(from_addr=self.member_address(),
                                                to_addr=self.list_address(),
                                                subject=subject,
                                                body=body,
                                                other_headers=headers,
                                                encoding=encoding)
     return message.as_string()
 def createMessage(self):
     """Generate a basic message, MailBoxer will take care of all the
        important headers, hopefully."""
     headers = {
         'Message-Id': self.new_message_id(),
         'Date': self.rfc_date(),
     }
     ml = self.getMailingList()
     encoding = getSiteEncoding(ml)
     body = decode(self.request.get('body'), ml)
     subject = decode(self.request.get('subject'), ml)
     message = construct_simple_encoded_message(
         from_addr=self.member_address(),
         to_addr=self.list_address(),
         subject=subject,
         body=body,
         other_headers=headers,
         encoding=encoding)
     return message.as_string()
 def _searchArchive(self, text=None):
     messages = []
     batch = self.request.get('batch', True)
     batch_size = int(self.request.get('b_size', 25))
     batch_start = int(self.request.get('b_start', 0))
     text = text or decode(self.request.get('search_text'), '')
     context = self.context
     subscription = IMembershipList(self.getMailingList())
     if text:
         text = text.strip()
         try:
             messages = self.search.search(text)
         except ParseTree.ParseError, inst:
             if "Token 'ATOM' required, 'EOF' found" in str(
                     inst) or "Token 'EOF' required" in str(inst):
                 self.request.set(
                     'portal_status_message',
                     _(u'Invalid Search: Search phrase cannot end with \'and\', \'or\', or \'not\''
                       ))
             elif "Token 'ATOM' required" in str(inst):
                 self.request.set(
                     'portal_status_message',
                     _(u'Invalid Search: Search phrase cannot begin with \'and\', \'or\', or \'not\''
                       ))
             elif "a term must have at least one positive word" in str(
                     inst):
                 self.request.set(
                     'portal_status_message',
                     _(u'Invalid Search: Search phrase cannot begin with \'not\''
                       ))
             elif "Query contains only common words" in str(inst):
                 self.request.set(
                     'portal_status_message',
                     _(u'Invalid Search: Search phrase must contain words other than \'and\', \'or\', and \'not\''
                       ))
         else:
             messages = catalogMessageIterator(messages,
                                               sub_mgr=subscription)
             if len(messages) == 0:
                 self.request.set('portal_status_message',
                                  _(u'There were no messages found'))