示例#1
0
    def _get_zmails(self, since=None, till=None, uid=None):
        """Returns list of recent zimbra emails."""
        purl = self.purl()

        # get zimbra settings
        mtool = getToolByName(self.context, 'portal_membership')
        member = mtool.getAuthenticatedMember()
        username = member.getProperty('zimbra_username', '')
        password = member.getProperty('zimbra_password', '')
        if not (username and password):
            return []

        # make zimbra soap query to get list of recent emails
        try:
            zimbra = getUtility(IZimbraUtil).get_client(username=username,
                password=password)
            mails = zimbra.get_emails(folder='inbox', limit=DEFAULT_ITEMS_NUM,
                types='message')
        except Exception:
            logException(_(u"Error during fetching zimbra mails"),
                context=self.context, logger=logger)
            return []

        zurl = getZimbraUrl(self.context)
        result = []
        for mail in mails:
            # TODO: handle till argument
            datetime = DateTime(int(mail['date']) / 1000).toZone('GMT')
            if since and since >= datetime:
                # we've got too old entry, break from the loop
                break

            result.append({
                'uid': mail['id'],
                'type': 'zm',
                'image': {
                    'url': '%s/add_content_area/metabox_icon_email.png' %
                    purl, 'alt': _(u"MAIL")},
                'url': '%s/zimbra/h/search?st=conversation&id=%s' \
                    '&action=view&cid=%s' % (zurl, mail['id'],
                    mail['cid']),
                'title': _(u"MAIL"),
                'date': datetime.strftime('%b %d, %Y'),
                'time': datetime.strftime('%I:%M'),
                'datetime': datetime,
                'replies_num': 0,
                'can_reply': True,
                'body': mail['subject']
            })

        return result
示例#2
0
    def handleCreate(self, action):
        """Create zimbra task using SOAP API."""
        data, errors = self.extractData()
        if errors:
            self.status = self.formErrorsMessage
            return

        url = util.getZimbraUrl(self.context)
        username, password = util.getZimbraCredentials(self.context)
        if not username or not password or not url:
            if not username or not password:
                msg = _(u"Please, set correct zimbra username and password in "
                "your profile form in order to create a zimbra task.")
            else:
                msg = _(u"Please, set Zimbra URL in Control "
                    " Panel (Configuration Registry).")
            # issue form level error
            self.status = msg
            error = getMultiAdapter((Invalid(u''), self.request, None,
                None, self, self.context), IErrorViewSnippet)
            error.update()
            self.widgets.errors += (error,)
            return

        created = False
        try:
            zimbraUtil = getUtility(IZimbraUtil)
            client = zimbraUtil.get_client(url, username, password)
            email = util.getZimbraEmail(self.context)
            url = self.context.absolute_url()
            description = self.context.Description()
            content = u'%s\n\n%s' % (url, description)

            data['author'] = email
            data['subject'] = data['subject_']
            data['priority'] = data['priority_']
            data['content'] = content
            task = client.create_task(data)
            util.addZimbraAnnotatedTasks(self.context, task)
            created = True

        except Exception:
            plone_utils = getToolByName(self.context, 'plone_utils')
            exception = plone_utils.exceptionString()
            self.status = _(u"Unable create issue: ${exception}",
                mapping={u'exception': exception})
            error = getMultiAdapter((Invalid(u''), self.request, None,
                None, self, self.context), IErrorViewSnippet)
            error.update()
            self.widgets.errors += (error,)
            return

        else:
            if not created:
                self.status = _(u"Task wasn't created, please, check your "
                    "settings or contact site administrator if you are sure "
                    "your settings are set properly.")
                error = getMultiAdapter((Invalid(u''), self.request, None,
                    None, self, self.context), IErrorViewSnippet)
                error.update()
                self.widgets.errors += (error,)
                return

        self.status = self.successMessage
        IStatusMessage(self.request).addStatusMessage(self.successMessage,
            type='info')
        came_from = self.request.get('HTTP_REFERER') or self.context.absolute_url()
        return self.request.response.redirect(came_from)