def workflowHistory(self, complete=True): """Return workflow history of this context. Taken from plone_scripts/getWorkflowHistory.py """ context = aq_inner(self.context) # check if the current user has the proper permissions # if not (_checkPermission('Request review', context) or # _checkPermission('Review portal content', context)): # return [] workflow = self.wf() membership = self.pm() review_history = [] try: # get total history review_history = workflow.getInfoFor(context, 'review_history') if not complete: # filter out automatic transitions. review_history = [r for r in review_history if r['action']] else: review_history = list(review_history) portal_type = context.portal_type anon = _(u'label_anonymous_user', default=u'Anonymous User') for r in review_history: r['type'] = 'workflow' r['transition_title'] = workflow.getTitleForTransitionOnType( r['action'], portal_type) or _("Create") r['state_title'] = workflow.getTitleForStateOnType( r['review_state'], portal_type) actorid = r['actor'] r['actorid'] = actorid if actorid is None: # action performed by an anonymous user r['actor'] = {'username': anon, 'fullname': anon} r['actor_home'] = '' else: r['actor'] = membership.getMemberInfo(actorid) if r['actor'] is not None: r['actor_home'] = self.navigation_root_url + '/author/' + actorid else: # member info is not available # the user was probably deleted r['actor_home'] = '' review_history.reverse() except WorkflowException: log('plone.app.layout.viewlets.content: ' '%s has no associated workflow' % context.absolute_url(), severity=logging.DEBUG) return review_history
def importData(self): """Import Data from CSV file. In case of error, return a CSV file filled with the lines where errors occured. """ file_upload = self.request.form.get('csv_upload', None) if file_upload is None or not file_upload.filename: return reader = csv.reader(file_upload) header = reader.next() if header != data_VALUES: msg = _('Wrong specification of the CSV file. Please correct it and retry.') type = 'error' IStatusMessage(self.request).addStatusMessage(msg, type=type) return validLines = [] invalidLines = [] for line in reader: # datas = dict(zip(header, line)) validLines.append(line) usersNumber = 0 for line in validLines: # datas = dict(zip(header, line)) datas = dict(zip(data_PROPERTIES, line)) try: # groups = [g.strip() for g in datas.pop('groups').split(',') if g] name = datas['title'] if not isinstance(name, unicode): filename = unicode(name, 'utf-8') id = IUserPreferredFileNameNormalizer(self.request).normalize(filename) # id = datas['id'] if self.IdIsExist(id):continue title = filename description = datas.pop('description') address = datas.pop('address') legal_person = datas['legal_person'] supervisor = datas.pop('supervisor') register_code = datas.pop('register_code') belondto_area = datas.pop('belondto_area') organization_type = datas['organization_type'] announcement_type = datas.pop('announcement_type') passDate = datas.pop('passDate') # send a add organization event try: event.notify(CreateOrgEvent( id,title,description, address,legal_person,supervisor,register_code, belondto_area,organization_type,announcement_type,passDate)) except (AttributeError, ValueError), err: logging.exception(err) IStatusMessage(self.request).addStatusMessage(err, type="error") return usersNumber += 1 except:
def __call__(self,context): registry = queryUtility(IRegistry) terms = [] vdict = registry.get(self.key,{}) vkeys = sorted(vdict.keys()) if registry is not None: for index in vkeys: value = vdict.get(index) terms.append(SimpleVocabulary.createTerm(index,value,_(value))) return SimpleVocabulary(terms)
def __call__(self,context): from eisoo.operation.areamanaged import Iareamanaged terms = [] catalog = getToolByName(context,"portal_catalog") tharea = catalog(id=getattr(context,"name","0")) if tharea: newlevel = tharea[0].getObject().level else: newlevel = "1" parea = catalog(object_provides=Iareamanaged.__identifier__) for s in parea: areamanaged = catalog(id=s.getObject().name) if areamanaged and areamanaged[0].getObject().level in (newlevel,str(int(newlevel)-1)): name = areamanaged[0].getObject().name terms.append(SimpleVocabulary.createTerm(s.id,s.id,_(name))) return SimpleVocabulary(terms)
def __call__(self,context): from eisoo.operation.area import Iarea terms = [] catalog = getToolByName(context,"portal_catalog") all = [] if hasattr(context,'name') and context.name: areaid = context.name area = catalog(object_provides=Iarea.__identifier__,id=areaid) if area: level = (area[0].getObject().level,"%s"%(int(area[0].getObject().level)+1)) all = catalog(object_provides=Iarea.__identifier__,level=level,areastate=1) else: level = "1" all = catalog(object_provides=Iarea.__identifier__,level=level,areastate=1) for s in all: terms.append(SimpleVocabulary.createTerm(s.id,s.id,_(s.getObject().name))) return SimpleVocabulary(terms)
except (AttributeError, ValueError), err: logging.exception(err) IStatusMessage(self.request).addStatusMessage(err, type="error") return usersNumber += 1 except: invalidLines.append(line) print "Invalid line: %s" % line if invalidLines: datafile = self._createCSV(invalidLines) self.request['csverrors'] = True self.request.form['orgs_sheet_errors'] = datafile.getvalue() msg = _('Some errors occured. Please check your CSV syntax and retry.') type = 'error' else: msg, type = _('Data successfully imported.'), 'info' IStatusMessage(self.request).addStatusMessage(msg, type=type) self.request['users_results'] = usersNumber self.request['groups_results'] = 0 return self.index() def getCSVWithErrors(self): """Return a CSV file that contains lines witch failed.""" users_sheet_errors = self.request.form.get('orgs_sheet_errors', None) if users_sheet_errors is None: return # XXX
from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm from five import grok from zope.schema.interfaces import IVocabularyFactory #import unicodedata #from incf.countryutils import data as countrydata from my315ok.socialorgnization import _ announcement_type=[ ('chengli','chengli',_(u'chengli')), ('biangeng','biangeng',_(u'biangeng')), ('zhuxiao','zhuxiao',_(u'zhuxiao')), ] announcement_type_terms = [SimpleTerm(value, token, title) for value, token, title in announcement_type ] class AnnouncementType(object): def __call__(self, context): return SimpleVocabulary(announcement_type_terms) grok.global_utility(AnnouncementType, IVocabularyFactory, name="my315ok.socialorgnization.vocabulary.announcementtype") organization_type=[ ('shetuan','shetuan',_(u'shetuan')), ('minfei','minfei',_(u'minfei')), ('jijinhui','jijinhui',_(u'jijinhui')), ] organization_type_terms = [SimpleTerm(value, token, title) for value, token, title in organization_type ] class OrganizationType(object): def __call__(self, context):
def getValue(self,num): registry = queryUtility(IRegistry) if registry is not None: return _(registry.get(self.key,{}).get(num))
def getDict(self): registry = queryUtility(IRegistry) d = registry.get(self.key,{}) for k in d: d[k] = _(d[k]) return d
def sendMail(self,subject,mailbody,send_to,send_to_bcc=[],sender=None,debug_mode=False): notify_encode = 'utf-8' object = aq_inner(self.context) portal = getToolByName(object,"portal_url").getPortalObject() portal_transforms = getToolByName(object, "portal_transforms") if sender ==None: send_from = portal.getProperty('email_from_address') else: send_from = sender if send_from and type(send_from)==tuple: send_from = send_from[0] translation_service = getToolByName(object,'translation_service') html_body = mailbody here_url = object.absolute_url() url_text = u"%s-%s年度-年检报告" % (object.title,object.year) text = html_template.message % ({'from': send_from , 'message': html_body, 'url': here_url, 'url_text': url_text, }) if notify_encode: text = text.encode(notify_encode) try: data_to_plaintext = portal_transforms.convert("html_to_web_intelligent_plain_text", text) except: # Probably Plone 2.5.x data_to_plaintext = portal_transforms.convert("html_to_text", text) plain_text = data_to_plaintext.getData() msg = MIMEMultipart('alternative') # Record the MIME types of both parts - text/plain and text/html. part1 = MIMEText(plain_text, 'plain', _charset=notify_encode) part2 = MIMEText(text, 'html', _charset=notify_encode) # Attach parts into message container. # According to RFC 2046, the last part of a multipart message, in this case # the HTML message, is best and preferred. msg.attach(part1) msg.attach(part2) mail_host = getToolByName(object, 'MailHost') try: if debug_mode: print "Message subject: %s" % subject print "Message text:\n%s" % text print "Message sent to %s (and to %s in bcc)" % (", ".join(send_to) or 'no-one', ", ".join(send_to_bcc) or 'no-one') else: try: mail_host.secureSend(msg, mto=send_to, mfrom=send_from, subject=subject, charset=notify_encode, mbcc=send_to_bcc) except TypeError: # BBB: Plone 2.5 has problem sending MIMEMultipart... fallback to normal plain text email mail_host.secureSend(plain_text, mto=send_to, mfrom=send_from, subject=subject, charset=notify_encode, mbcc=send_to_bcc) except Exception, inst: putils = getToolByName(object,'plone_utils') putils.addPortalMessage(_(u'Not able to send notifications')) object.plone_log("Error sending notification: %s" % str(inst))
from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm from five import grok from zope.schema.interfaces import IVocabularyFactory #import unicodedata #from incf.countryutils import data as countrydata from my315ok.socialorgnization import _ announcement_type=[ ('chengli','chengli',_(u'chengli')), ('biangeng','biangeng',_(u'biangeng')), ('zhuxiao','zhuxiao',_(u'zhuxiao')), ] announcement_type_terms = [SimpleTerm(value, token, title) for value, token, title in announcement_type ] class AnnouncementType(object): def __call__(self, context): return SimpleVocabulary(announcement_type_terms) grok.global_utility(AnnouncementType, IVocabularyFactory, name="my315ok.socialorgnization.vocabulary.announcementtype") belondto_area=[ ('yuhuqu','yuhuqu',_(u'yuhuqu')), ('yuetangqu','yuetangqu',_(u'yuetangqu')), ('xiangxiangshi','xiangxiangshi',_(u'xiangxiangshi')), ('shaoshanshi','shaoshanshi',_(u'shaoshanshi')), ('xiangtanshi','xiangtanshi',_(u'xiangtanshi')), ('xiangtanxian','xiangtanxian',_(u'xiangtanxian')), ] belondto_area_terms = [SimpleTerm(value, token, title) for value, token, title in belondto_area ]