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))
#-*- coding: UTF-8 -*- from five import grok from zope.schema.vocabulary import SimpleVocabulary from zope.schema.vocabulary import SimpleTerm from zope.schema.interfaces import IVocabularyFactory #import unicodedata #from incf.countryutils import data as countrydata from emc.project import _ #任务类型属性:分析/设计/实验/仿真/培训 task_type = [ ('analysis', 'analysis', _(u'analysis')), ('design', 'design', _(u'design')), ('train', 'train', _(u'train')), ('simulation', 'simulation', _(u'simulation')), ('experiment', 'experiment', _(u'experiment')), ] task_type_terms = [ SimpleTerm(value, token, title) for value, token, title in task_type ] class taskType(object): def __call__(self, context): return SimpleVocabulary(task_type_terms) grok.global_utility(taskType, IVocabularyFactory, name="emc.project.vocabulary.tasktype")
class Ilocalroles(form.Schema): """ Description of the localroles source 字段不能有缺省值的 """ form.widget(emc_designer=AutocompleteMultiFieldWidget) emc_designer = schema.Tuple( title=_(u"EMC Designer"), value_type=schema.Choice(title=_(u"User id"), source=u"plone.principalsource.Users"), required=False, missing_value=(), # important! ) form.widget(designer=AutocompleteMultiFieldWidget) designer = schema.Tuple( title=_(u"Product Designer"), value_type=schema.Choice(title=_(u"User id"), source=u"plone.principalsource.Users"), required=False, missing_value=(), # important! ) form.widget(reader1=AutocompleteMultiFieldWidget) reader1 = schema.Tuple( title=_(u"Commander"), value_type=schema.Choice(title=_(u"User id"), source=u"plone.principalsource.Users"), required=False, missing_value=(), # important! ) form.widget(reader2=AutocompleteMultiFieldWidget) reader2 = schema.Tuple( title=_(u"Deputy Commander"), value_type=schema.Choice(title=_(u"User id"), source=u"plone.principalsource.Users"), required=False, missing_value=(), # important! ) form.widget(reader3=AutocompleteMultiFieldWidget) reader3 = schema.Tuple( title=_(u"Chief Designer"), value_type=schema.Choice(title=_(u"User id"), source=u"plone.principalsource.Users"), required=False, missing_value=(), # important! ) form.widget(reader4=AutocompleteMultiFieldWidget) reader4 = schema.Tuple( title=_(u"Deputy Chief Designer"), value_type=schema.Choice(title=_(u"User id"), source=u"plone.principalsource.Users"), required=False, missing_value=(), # important! ) form.widget(reader5=AutocompleteMultiFieldWidget) reader5 = schema.Tuple( title=_(u"Chief quality engineer"), value_type=schema.Choice(title=_(u"User id"), source=u"plone.principalsource.Users"), required=False, missing_value=(), # important! ) form.widget(reader6=AutocompleteMultiFieldWidget) reader6 = schema.Tuple( title=_(u"Deputy Chief quality engineer"), value_type=schema.Choice(title=_(u"User id"), source=u"plone.principalsource.Users"), required=False, missing_value=(), # important! ) form.widget(reader7=AutocompleteMultiFieldWidget) reader7 = schema.Tuple( title=_(u"Deputy Chief Process"), value_type=schema.Choice(title=_(u"User id"), source=u"plone.principalsource.Users"), required=False, missing_value=(), # important! ) form.widget(reader8=AutocompleteMultiFieldWidget) reader8 = schema.Tuple( title=_(u"process staff"), value_type=schema.Choice(title=_(u"User id"), source=u"plone.principalsource.Users"), required=False, missing_value=(), # important! ) form.widget(reader9=AutocompleteMultiFieldWidget) reader9 = schema.Tuple( title=_(u"quality manage staff"), value_type=schema.Choice(title=_(u"User id"), source=u"plone.principalsource.Users"), required=False, missing_value=(), # important! ) form.widget(reader10=AutocompleteMultiFieldWidget) reader10 = schema.Tuple( title=_(u"dispatch staff"), value_type=schema.Choice(title=_(u"User id"), source=u"plone.principalsource.Users"), required=False, missing_value=(), # important! ) form.widget(reader11=AutocompleteMultiFieldWidget) reader11 = schema.Tuple( title=_(u"EMC expert"), value_type=schema.Choice(title=_(u"User id"), source=u"plone.principalsource.Users"), required=False, missing_value=(), # important! ) form.fieldset( 'first', label=_(u'The first members'), fields=[ 'reader1', 'reader2', 'reader3', 'reader4', 'reader5', 'reader6', 'reader7' ], ) form.fieldset( 'second', label=_(u'The second members'), fields=['emc_designer', 'designer'], ) # the third members will be assigned EMCExpert role form.fieldset( 'third', label=_(u'The third members'), fields=['reader8', 'reader9', 'reader10', 'reader11'], )
class Ilocalroles(form.Schema): """ Description of the localroles source 字段不能有缺省值的 """ directives.write_permission(emc_designer='emc.project.manage_project') emc_designer = schema.Tuple( title=_(u"EMC Designer"), value_type=schema.TextLine(), required=False, missing_value=(), # important! ) directives.write_permission(designer='emc.project.manage_designer') designer = schema.Tuple( title=_(u"Product Designer"), value_type=schema.TextLine(), required=False, missing_value=(), # important! ) reader1 = schema.Tuple( title=_(u"Commander"), value_type=schema.TextLine(), required=False, missing_value=(), # important! ) reader2 = schema.Tuple( title=_(u"Deputy Commander"), value_type=schema.TextLine(), required=False, missing_value=(), # important! ) reader3 = schema.Tuple( title=_(u"Chief Designer"), value_type=schema.TextLine(), required=False, missing_value=(), # important! ) reader4 = schema.Tuple( title=_(u"Deputy Chief Designer"), value_type=schema.TextLine(), required=False, missing_value=(), # important! ) reader5 = schema.Tuple( title=_(u"Chief quality engineer"), value_type=schema.TextLine(), required=False, missing_value=(), # important! ) reader6 = schema.Tuple( title=_(u"Deputy Chief quality engineer"), value_type=schema.TextLine(), required=False, missing_value=(), # important! ) reader7 = schema.Tuple( title=_(u"Deputy Chief Process"), value_type=schema.TextLine(), required=False, missing_value=(), # important! ) reader8 = schema.Tuple( title=_(u"process staff"), value_type=schema.TextLine(), required=False, missing_value=(), # important! ) reader9 = schema.Tuple( title=_(u"quality manage staff"), value_type=schema.TextLine(), required=False, missing_value=(), # important! ) reader10 = schema.Tuple( title=_(u"dispatch staff"), value_type=schema.TextLine(), required=False, missing_value=(), # important! ) reader11 = schema.Tuple( title=_(u"EMC expert"), value_type=schema.TextLine(), required=False, missing_value=(), # important! ) directives.widget('emc_designer', AjaxSelectFieldWidget, vocabulary='plone.principalsource.Users') directives.widget('designer', AjaxSelectFieldWidget, vocabulary='plone.principalsource.Users') directives.widget('reader1', AjaxSelectFieldWidget, vocabulary='plone.principalsource.Users') directives.widget('reader2', AjaxSelectFieldWidget, vocabulary='plone.principalsource.Users') directives.widget('reader3', AjaxSelectFieldWidget, vocabulary='plone.principalsource.Users') directives.widget('reader4', AjaxSelectFieldWidget, vocabulary='plone.principalsource.Users') directives.widget('reader5', AjaxSelectFieldWidget, vocabulary='plone.principalsource.Users') directives.widget('reader6', AjaxSelectFieldWidget, vocabulary='plone.principalsource.Users') directives.widget('reader7', AjaxSelectFieldWidget, vocabulary='plone.principalsource.Users') directives.widget('reader8', AjaxSelectFieldWidget, vocabulary='plone.principalsource.Users') directives.widget('reader9', AjaxSelectFieldWidget, vocabulary='plone.principalsource.Users') directives.widget('reader10', AjaxSelectFieldWidget, vocabulary='plone.principalsource.Users') directives.widget('reader11', AjaxSelectFieldWidget, vocabulary='plone.principalsource.Users') form.fieldset( 'first', label=_(u'The first members'), fields=[ 'reader1', 'reader2', 'reader3', 'reader4', 'reader5', 'reader6', 'reader7' ], ) form.fieldset( 'second', label=_(u'The second members'), fields=['emc_designer', 'designer'], ) # the third members will be assigned EMCExpert role form.fieldset( 'third', label=_(u'The third members'), fields=['reader8', 'reader9', 'reader10', 'reader11'], )
#-*- coding: UTF-8 -*- from five import grok from zope.schema.vocabulary import SimpleVocabulary from zope.schema.vocabulary import SimpleTerm from zope.schema.interfaces import IVocabularyFactory #import unicodedata #from incf.countryutils import data as countrydata from emc.project import _ #任务类型属性:分析/设计/实验/仿真/培训 task_type=[ ('analysis','analysis',_(u'analysis')), ('design','design',_(u'design')), ('train','train',_(u'train')), ('simulation','simulation',_(u'simulation')), ('experiment','experiment',_(u'experiment')), ] task_type_terms = [SimpleTerm(value, token, title) for value, token, title in task_type ] class taskType(object): def __call__(self, context): return SimpleVocabulary(task_type_terms) grok.global_utility(taskType, IVocabularyFactory, name="emc.project.vocabulary.tasktype") #密级属性:公开/内部/机密 security_level=[ ('public','public',_(u'public')), ('inner','inner',_(u'inner')), ('secret','secret',_(u'secret')), ]
class ISecurityLevel(model.Schema): security_level = schema.Choice( title=_(u"security level"), vocabulary="emc.project.vocabulary.securitylevel", default="public")
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))