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)
Example #4
0
 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)
Example #5
0
 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)
Example #6
0
                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
Example #7
0
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))
Example #11
0
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 ]