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
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)