Example #1
0
def sendPasswdResetMail(member, event):
    """
    """
    state = event.new_state.getId()
  
    if state == "enabled":
        registration = getToolByName(member, 'portal_registration')

        email = member.email

        request = member.REQUEST
        
        try:
            response = registration.registeredNotify(email)
            IStatusMessage(request).addStatusMessage(
                        _p(u'create_membrane_account_succesful',
                          default=u"Your account has been created,we "
                          "have sent instructions for setting a "
                          "password to this email address: ${address}",
                          mapping={u'address': email}),
                        type='info')
#            return obj            
 
        except ConflictError:
                # Let Zope handle this exception.
                raise            
        except Exception:
                portal = getSite()
                ctrlOverview = getMultiAdapter((portal, request),
                                               name='overview-controlpanel')
                mail_settings_correct = not ctrlOverview.mailhost_warning()
                if mail_settings_correct:
                    # The email settings are correct, so the most
                    # likely cause of an error is a wrong email
                    # address.  We remove the account:
                    # Remove the account:
                    self.context.acl_users.userFolderDelUsers(
                        [user_id], REQUEST=request)
                    IStatusMessage(request).addStatusMessage(
                        _p(u'status_fatal_password_mail',
                          default=u"Failed to create your account: we were "
                          "unable to send instructions for setting a password "
                          "to your email address: ${address}",
                          mapping={u'address': email}),
                        type='error')
                    return
                else:
                    # This should only happen when an admin registers
                    # a user.  The admin should have seen a warning
                    # already, but we warn again for clarity.
                    IStatusMessage(request).addStatusMessage(
                        _p(u'status_nonfatal_password_mail',
                          default=u"This account has been created, but we "
                          "were unable to send instructions for setting a "
                          "password to this email address: ${address}",
                          mapping={u'address': email}),
                        type='warning')
                    return    
    else:
        pass
Example #2
0
    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 = getToolByName(context, 'portal_workflow')
        membership = getToolByName(context, 'portal_membership')

        review_history = []

        try:
            # get total history
            #            import pdb
            #            pdb.set_trace()
            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 = _p(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 _p("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 handle_edit_action(self, action, data):
     CheckAuthenticator(self.request)
     if form.applyChanges(self.context, self.form_fields, data,
                          self.adapters):
         self.status = _p("Changes saved.")
         notify(ConfigurationChangedEvent(self, data))
         self._on_save(data)
     else:
         self.status = _p("No changes made.")
 def handle_edit_action(self, action, data):
     CheckAuthenticator(self.request)
     if form.applyChanges(self.context, self.form_fields, data,
                          self.adapters):
         self.status = _p("Changes saved.")
         notify(ConfigurationChangedEvent(self, data))
         self._on_save(data)
     else:
         self.status = _p("No changes made.")
Example #5
0
    def __call__(self):
        self.request.set('disable_border', True)
        self.errors = {}
        
        props = getToolByName(self.context, 'portal_properties').pcommerce_properties
        if self.request.form.has_key('pcommerce_save'):
            adapter = ITaxes(self.context)
            taxes = []
            raw = self.request.form.get('taxes', [])
            for tax in raw:
                if not tax.has_key('remove') or not tax['remove']:
                    try:
                        tax = {'id': tax['id'],
                               'tax': float(tax['tax']),
                               'zone': tax['zone'],
                               'taxname': tax['taxname']}
                        if tax['zone'] == '':
                            self.errors[tax['id']] = _(u'Please provide a zone name')
                        elif tax['taxname'] == '':
                            self.errors[tax['id']] = _(u'Please provide a tax name')
                        if not self.errors.has_key(tax['id']):
                            taxes.append(tax)
                    except:
                        self.errors[tax['id']] = _(u'Please enter a floating point number (e.g. 7.6)')
            for prop in self.properties:
                self.values[prop] = self.request.form.get(prop, '')
            
            
            taxincl = None
            tax = self.request.form.get('taxincl.tax', '')
            taxname = self.request.form.get('taxincl.taxname', '')
            
            try:                   
                if taxname == '' and tax != '':
                    self.errors['taxincl'] = _(u'Please provide a tax name')
                else:
                    if tax == '':
                      tax = 0.0
                    taxincl = (float(tax), taxname)
            except:
                self.errors['taxincl'] = _(u'Please enter a floating point number (e.g. 7.6)')
                
            if not self.errors:
                adapter.edit(taxes)
                adapter.taxincl = taxincl
                IStatusMessage(self.request).addStatusMessage(_p('Properties saved'), 'info')
                for prop in self.properties:
                    if prop == 'columns':
                        self.values[prop] = int(self.values[prop])
                    props._setPropValue(prop, self.values[prop])
            else:
                IStatusMessage(self.request).addStatusMessage(_p(u'Please correct the indicated errors'), 'error')

        for prop in self.properties:
            self.values[prop] = props.getProperty(prop, '')
        
        return self.template()
Example #6
0
 def validate(self, tag):
     errors = {}
     required = self.required
     data = self.request.get(tag, {})
     for field in required:
         if not data.get(field, None):
             errors[tag+'.'+field] = _p(u'This field is required, please provide some information.')
         
     if not email_re.match(data.get('email', '')):
             errors[tag+'.'+'email'] = _p(u'Please submit a valid email address.')
     return errors
 def handle_rename_action(self, action, data):
     context = aq_inner(self.context)
     oldid = context.getId()
     oldtranslatedids = self.handler.get_translated_ids(oldid)
     descriptions = applyData(context, self.form_fields, data, self.adapters)
     statusmessage = IStatusMessage(self.request)
     if descriptions:
         statusmessage.addStatusMessage(_p(u'Changes saved.'), u'success');
     else:
         statusmessage.addStatusMessage(_p(u'No changes made.'));
     self.request.RESPONSE.redirect(context.absolute_url())
 def send(self, action, message, recipients):
     """ send the notifications
     """
     mailhost = getToolByName(self.context, 'MailHost')
     portal = getToolByName(self.context, 'portal_url').getPortalObject()
     mfrom = '%s <%s>' % (portal.getProperty('email_from_name', ''), portal.getProperty('email_from_address', ''))
     #subject = translate(_('email_subject', default='New notification from ${site}', mapping={'site': portal.getProperty('title', '')}), context=self.context.request)
     subject = translate(_('email_subject', default='New notification from ${site}', mapping={'site': portal.getProperty('title', '')}), context=self.context.REQUEST)
     wftool = getToolByName(self.context, 'portal_workflow')
     utils = getToolByName(self.context, 'plone_utils')
     mship = getToolByName(self.context, 'portal_membership')
     wnutils = getMultiAdapter((self.context, self.context.REQUEST), name=u'workflownotification')
     workflow = wftool.getWorkflowById(wnutils.getWorkflowFor(self.context))
     tdef = workflow.transitions.get(action, None)
     if not tdef:
         return
     issuer = mship.getMemberInfo()
     if not issuer:
         issuer = {'username': '******'}
     replacement = dict(name='',
                        title=self.context.Title(),
                        url=self.context.absolute_url(),
                        #old_state=translate(_p(utils.getReviewStateTitleFor(self.context)), context=self.context.request),
                        #new_state=translate(_p(wftool.getTitleForStateOnType(tdef.new_state_id, self.context.portal_type)), context=self.context.request),
                        #transition=translate(_p(tdef.actbox_name), context=self.context.request),
                        old_state=translate(_p(utils.getReviewStateTitleFor(self.context)), context=self.context.REQUEST),
                        new_state=translate(_p(wftool.getTitleForStateOnType(tdef.new_state_id, self.context.portal_type)), context=self.context.REQUEST),
                        transition=translate(_p(tdef.actbox_name), context=self.context.REQUEST),
                        issuer=safe_unicode(issuer.get('fullname', issuer['username'])))
     try:
         anon_message = message % replacement
     except:
         # replacement failed
         anon_message = message
     sent = []
     receivers = []
     for r in recipients:
         replacement.update(dict(name=r.name))
         try:
             msg = message % replacement
         except:
             # replacement failed
             msg = message
         if not r.email in sent:
             mailhost.send(msg,
                           mto=r.email,
                           mfrom=mfrom,
                           subject=subject,
                           charset='utf-8')
             sent.append(r.email)
             receivers.append(r)
     return receivers, anon_message
Example #9
0
 def setProperties(self):
     context = aq_inner(self.context)
     new = self.request.form.get('new_definition', None)
     columns = self.request.form.get('new_definition_columns', [])
     error = 0
     if new and new['name']:
         try:
             self._definitions.addDefinition(new['name'], new['style'], self._formatColumns(columns))
         except:
             transaction.abort()
             error = _(u'Unable to parse the columns field of the definition to be added')
     modify = self.request.form.get('definitions', [])[:]
     for definition in modify:
         if definition.has_key('delete'):
             self._definitions.removeDefinition(definition['id'])
         if definition.has_key('delete'):
             continue
         try:
             columns = self.request.form.get('definition_columns_%s' % definition['origname'], [])
             self._definitions.addDefinition(definition['name'], definition['style'], self._formatColumns(columns), definition['id'])
         except:
             transaction.abort()
             error = _(u'Unable to parse the columns field of one of the definitions to be modified')
     statusmessage = IStatusMessage(self.request)
     if error:
         statusmessage.addStatusMessage(error, 'error')
     else:
         statusmessage.addStatusMessage(_p(u'Changes saved.'), 'info')
Example #10
0
    def submit(self, action):        
        data, errors = self.extractData() 

        if errors:
            self.status = _(u"Please correct errors")
            return         
        inc = str(int(getattr(self.context, 'registrant_increment', '0')) + 1)
        data['id'] = '%s' % inc
        self.context.registrant_increment = inc
        obj = _createObjectByType("dexterity.membrane.sponsormember", 
                self.context, data['id'])

#        del data['agree']        

        for k, v in data.items():
            setattr(obj, k, v)
        
        obj.reindexObject()

        email = data.get('email', '')
        IStatusMessage(self.request).addStatusMessage(
                        _p(u'create_membrane_account_succesful_pending_audit',
                          default=u"Your account:${address} has been created,Please wait for audit",
                          mapping={u'address': email}),
                        type='info')
        return
Example #11
0
    def set_portal_message(self, message, msg_type='info'):
        """ Adds or update the portal message.

        It hides both portal messages (the normal one and the KSS
        one and recreates a fresh one.
        """ 

        # We hide the existing ones.
        self('dl.portalMessage').hide()

        # We delete our portal message.
        self('#jq_portal_msg').remove() 

        # And create a fresh one.
        html = '<dl id="jq_portal_msg" class="portalMessage %s">' +\
               '<dt>%s</dt><dd>%s</dd></dl>'

        # We get the correct title (Info, Warning, Error)
        if not msg_type in ['info', 'warning', 'error']:
            msg_type='info'

        lang = self._get_default_language()
        msg_title = translate(_p(unicode(msg_type.capitalize())),
                              target_language=lang)

        # The message might not be translated.
        if type(message) == Message:
            message = translate(message, target_language=lang)
 
        self('#viewlet-above-content').before(html % (msg_type,
                                                      msg_title,
                                                      message))
Example #12
0
    def create(self, data):
        inc = str(int(getattr(self.context, 'registrant_increment', '999999')) + 1)
        data['id'] = '%s' % inc
        self.context.registrant_increment = inc
        obj = _createObjectByType("dexterity.membrane.member", 
                self.context, data['id'])

#        publishinfo = data['publishinfo']
        del data['privacy']
        del data['agree']        
        del data['captcha']     
#        del data['publishinfo']
        for k, v in data.items():
            setattr(obj, k, v)

        registration = getToolByName(self.context, 'portal_registration')            

#        portal_workflow = getToolByName(self.context, 'portal_workflow')
#        if publishinfo:
#            portal_workflow.doActionFor(obj, 'anon_publish')
#        else:
#            portal_workflow.doActionFor(obj, 'anon_hide')
        obj.reindexObject()
        email = data.get('email', '')
        IStatusMessage(self.request).addStatusMessage(
                        _p(u'create_membrane_account_succesful_pending_audit',
                          default=u"Your account:${address} has been created,Please wait for audit",
                          mapping={u'address': email}),
                        type='info')
        return obj
 def handle_cancel_action(self, action, data):
     IStatusMessage(self.request).addStatusMessage(_p("Changes canceled."),
                                                   type="info")
     url = getMultiAdapter((self.context, self.request),
                           name='absolute_url')()
     self.request.response.redirect(url + '/plone_control_panel')
     return ''
 def handle_cancel_action(self, action, data):
     IStatusMessage(self.request).addStatusMessage(_p("Changes canceled."),
                                                   type="info")
     url = getMultiAdapter((self.context, self.request),
                           name='absolute_url')()
     self.request.response.redirect(url + '/plone_control_panel')
     return ''
Example #15
0
    def submit(self, action):        
        data, errors = self.extractData() 

        if not(data['agree']):
            self.status = "must agree this private policy"
            return       
        inc = str(int(getattr(self.context, 'registrant_increment', '999999')) + 1)
        data['id'] = '%s' % inc
        self.context.registrant_increment = inc
        obj = _createObjectByType("dexterity.membrane.member", 
                self.context, data['id'])

        del data['agree']        

        for k, v in data.items():
            setattr(obj, k, v)
        
        urltool = getToolByName(self.context, 'portal_url')
        portal = urltool.getPortalObject()
        self.request.response.redirect(portal.absolute_url())
        email = data.get('email', '')
        IStatusMessage(self.request).addStatusMessage(
                        _p(u'create_membrane_account_succesful_pending_audit',
                          default=u"Your account:${address} has been created,Please wait for audit",
                          mapping={u'address': email}),
                        type='info')
        return
Example #16
0
    def _parse(self, menu):
        di = OrderedDict()
        for value in menu:
            id = value.get('id', value.get('title'))
            extra = value.get('extra', None)
            separator = False
            if extra:
                separator = extra.get('separator', None)

            title = value.get('title')
            if isinstance(title, str):
                translated_title = translate(_p(title), context=self.request)
            else:
                translated_title = translate(value.get('title'), domain=_p, context=self.request)
            su = OrderedDict(label=translated_title,
                       action=self._action(value.get('action', '')),
                       icon=value.get('icon', ''),
                       _class=value.get('class', ''),
                       separator_before=separator,
                       _disabled=(not value.get('action', False) and separator) and True or False,
                      )

            if value.get('submenu', None):
                su.update(OrderedDict(submenu=self._parse(value.get('submenu'))))
            di[id] = su
        return di
Example #17
0
 def update(self):
     super(FoundationDashboard, self).update()
     if self.empty() and self.can_edit():
         status = IStatusMessage(self.request)
         msg = _p(u"info_empty_dashboard")
         msg = translate(msg, domain='plone', context=self.request)
         status.add(msg, "info")
 def setProperties(self):
     context = aq_inner(self.context)
     utils = getToolByName(context, 'plone_utils')
     self.errors = {}
     for prop in self.properties:
         self.values[prop] = self.request.form.get(prop, None)
         if self.values[prop] == '':
             self.values[prop] = None
         if prop in self.required and self.values[prop] is None:
             self.errors[prop] = _p(u'This field is required')
     if len(self.errors) > 0:
         utils.addPortalMessage(_p(u'Please correct the indicated errors'))
     else:
         props = getToolByName(context, 'portal_properties').saferpay_properties
         for property in self.properties:
             props._setPropValue(property, self.values[property])
         utils.addPortalMessage(_p(u'Properties saved'))
Example #19
0
    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 = getToolByName(context, "portal_workflow")
        membership = getToolByName(context, "portal_membership")

        review_history = []

        try:
            # get total history
            #            import pdb
            #            pdb.set_trace()
            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 = _p(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 _p("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 setProperties(self):
     context = aq_inner(self.context)
     utils = getToolByName(context, 'plone_utils')
     self.errors = {}
     for prop in self.properties:
         self.values[prop] = self.request.form.get(prop, None)
         if self.values[prop] == '':
             self.values[prop] = None
         if prop in self.required and self.values[prop] is None:
             self.errors[prop] = _p(u'This field is required')
     if len(self.errors) > 0:
         utils.addPortalMessage(_p(u'Please correct the indicated errors'))
     else:
         props = getToolByName(context,
                               'portal_properties').paypal_properties
         for property in self.properties:
             props._setPropValue(property, self.values[property])
         utils.addPortalMessage(_p(u'Properties saved'))
Example #21
0
class ArticleSchema(form.Schema, IDocument):
    """An audio file.
    """

    image = NamedBlobImage(title=_(u"Image"), required=False)
    image_position = schema.Choice(title=_(u"Image position"),
                                   vocabulary=vocabularies.image_position,
                                   required=False)
    text = RichText(title=_p(u"Text"), required=False)
class FavoritingActionAddForm(AddForm):
    form_fields = form.FormFields(IFavoritingAction)
    label = _(u'Add favoriting action')
    description = _(u'An action which can add or remove an object '
                    u'to the user favorites')
    form_name = _p(u'Configure element')

    def create(self, data):
        a = FavoritingAction()
        form.applyChanges(a, self.form_fields, data)
        return a
Example #23
0
class WatchingActionAddForm(AddForm):
    form_fields = form.FormFields(IWatchingAction)
    label = _(u'Add watching action')
    description = _(u'An action which can add or remove a user '
                    u'from the watchers list')
    form_name = _p(u'Configure element')

    def create(self, data):
        a = WatchingAction()
        form.applyChanges(a, self.form_fields, data)
        return a
def testPasswordValidity(self, password, confirm=None):
    # We escape the test if it looks like a generated password (with default length of 56 chars)
    if password is not None and password.startswith('G-') and len(password) == len(self.origGeneratePassword()) + 2:
        return None
    err = self.pasValidation('password', password)
    if err:
        return err

    if confirm is not None and confirm != password:
        return _p(u'Your password and confirmation did not match. '
                  u'Please try again.')

    return None
Example #25
0
    def getMenuItems(self, context, request):
        """Return menu item entries in a TAL-friendly form."""
        results = BaseFactoriesMenu.getMenuItems(self, context, request)
        
        factories_view = getMultiAdapter((context, request), name='folder_factories')

        haveMore = False
        include = None

        addContext = factories_view.default_page_add_context()
        if not addContext:
            return results
        allowedTypes = _allowedTypes(request, addContext)

        constraints = IConstrainTypes(addContext, None)
        if constraints is not None:
            include = constraints.getImmediatelyAddableTypes()
            if len(include) < len(allowedTypes):
                haveMore = True

        results.append({'title'       : _p(u'folder_add_to_default_page', default=u'Add to default page'),
                        'description' : _p(u'Add content to the default page'),
                        'action'      : None,
                        'selected'    : False,
                        'icon'        : None,
                        'extra'       : {'id': 'add-to-default', 'separator': 'actionSeparator', 'class': ''},
                        'submenu'     : None,
                        })

        results += factories_view.default_page_addable_types(include=include)

        if haveMore:
            url = '%s/folder_factories' % (addContext.absolute_url(),)
            results.append({ 'title'       : _p(u'folder_add_more', default=u'More\u2026'),
                             'description' : _p(u'Show all available content types'),
                             'action'      : url,
                             'selected'    : False,
                             'icon'        : None,
                             'extra'       : {'id': 'more', 'separator': None, 'class': ''},
                             'submenu'     : None,
                            })

        constraints = ISelectableConstrainTypes(addContext, None)
        if constraints is not None:
            if constraints.canSetConstrainTypes() and constraints.getDefaultAddableTypes():
                url = '%s/folder_constraintypes_form' % (addContext.absolute_url(),)
                results.append({'title'       : _p(u'folder_add_settings', default=u'Restrictions\u2026'),
                                'description' : _p(u'title_configure_addable_content_types', default=u'Configure which content types can be added here'),
                                'action'      : url,
                                'selected'    : False,
                                'icon'        : None,
                                'extra'       : {'id': 'settings', 'separator': None, 'class': ''},
                                'submenu'     : None,
                                })

        return results
Example #26
0
def testPasswordValidity(self, password, confirm=None):
    # We escape the test if it looks like a generated password (with default length of 56 chars)
    if password is not None and password.startswith('G-') and len(password) == len(self.origGeneratePassword()) + 2:
        return None
    # We also skip the test if a skip_password_check session variable is set
    if password is not None and self.REQUEST['SESSION'].get('skip_password_check'):
        return None
    err = self.pasValidation('password', password)
    if err:
        return err

    if confirm is not None and confirm != password:
        return _p(u'Your password and confirmation did not match. '
                  u'Please try again.')

    return None
 def collections(self):
     plone = component.getMultiAdapter((self.context, self.request), name=u'plone')
     provider = ICollectionsProvider(self.context)
     manageable = interfaces.IManageable(self.context)
     items = manageable.getList(provider.getCollections(component=self.component), component=self.component)
     i = 0
     l = len(items)
     collections = []
     for item in items:
         more_link = item['obj'].Schema()['more'].get(item['obj'])
         item.update({'title': item['brain'].Title,
                      'class': self._class(item['brain'], i, l),
                      'description': item['brain'].Description,
                      'url': item['brain'].getURL(),
                      'results': [],
                      'more': False,
                      'more_link': more_link if more_link else _p(u'read_more', default=u'Read More&hellip;')})
         results = item['obj'].queryCatalog()
         limit = self.results
         if item['obj'].getLimitNumber():
             limit = item['obj'].getItemCount()
         rl = min(limit, len(results)) if limit > 0 else len(results)
         ri = 0
         for record in results:
             if limit > 0 and len(item['results']) == limit:
                 item['more'] = self.more
                 break
             result = {'title': record.Title,
                       'class': _css_class(ri, rl),
                       'description': record.Description,
                       'url': record.getURL(),
                       'brain': record, }
             if self.date:
                 date = getattr(record, self.date, None)
                 if date is not None:
                     try:
                         result['date'] = plone.toLocalizedTime(date)
                     except ValueError:
                         # not properly initialized fields might have values
                         # before 999 that can't be handled
                         pass
             item['results'].append(result)
             ri += 1
         if len(item['results']):
             collections.append(item)
             i += 1
     return collections
Example #28
0
    def render(self):
        """
            项目状态转换按钮 后台响应逻辑。

        input:{subject:'please approve';actionid:'chuyang'}
        output:{result,status,message}
        """
        data = self.request.form
        subject = data['subject']
        #workflow transition id
        actionid = data['actionid']
        actiontype = data['actiontype']
        if actiontype == 'submit':
            transition = "submit2%s" % actionid
        else:
            transition = "retract2%s" % actionid

        context = aq_inner(self.context)
        brains = self.getChildrens(context)
        #         import pdb
        #         pdb.set_trace()
        for bn in brains:
            try:
                obj = bn.getObject()
                self.wf().doActionFor(obj, transition, comment=subject)
            except:
                continue

        try:
            self.wf().doActionFor(context, transition, comment=subject)
            newstatus = self.context.translate(_p(actionid))
            ajaxtext = u"%(project)s项目已成功切换到:<strong>%(status)s</strong>状态。" % (
                {
                    "project": context.title,
                    "status": newstatus
                })
            callback = {
                "result": True,
                "status": newstatus,
                "message": ajaxtext
            }
        except:
            callback = {"result": False, "status": "", "message": ""}

        self.request.response.setHeader('Content-Type', 'application/json')
        return json.dumps(callback)
Example #29
0
 def __call__(self):
     self.errors = {}
     if 'header_table_submitted' in self.request:
         schema = self.context.Schema()
         fields = schema.fields()
         form = self.request.form
         for field in fields:
             fieldname = field.getName()
             if fieldname in form:
                 if fieldname + "_uid" in form:
                     # references (process_form would normally do *_uid trick)
                     field.getMutator(self.context)(form[fieldname + "_uid"])
                 else:
                     # other fields
                     field.getMutator(self.context)(form[fieldname])
         message = _p("Changes saved.")
         self.context.plone_utils.addPortalMessage(message, 'info')
     return self.template()
Example #30
0
 def __call__(self):
     self.errors = {}
     if 'header_table_submitted' in self.request:
         schema = self.context.Schema()
         fields = schema.fields()
         form = self.request.form
         for field in fields:
             fieldname = field.getName()
             if fieldname in form:
                 if fieldname + "_uid" in form:
                     # references (process_form would normally do *_uid trick)
                     field.getMutator(self.context)(form[fieldname + "_uid"])
                 else:
                     # other fields
                     field.getMutator(self.context)(form[fieldname])
         message = _p("Changes saved.")
         self.context.plone_utils.addPortalMessage(message, 'info')
     return self.template()
Example #31
0
    def render(self):
        """
            项目状态转换按钮 后台响应逻辑。

        input:{subject:'please approve';actionid:'chuyang'}
        output:{result,status,message}
        """
        data = self.request.form
        subject = data["subject"]
        # workflow transition id
        actionid = data["actionid"]
        actiontype = data["actiontype"]
        if actiontype == "submit":
            transition = "submit2%s" % actionid
        else:
            transition = "retract2%s" % actionid

        context = aq_inner(self.context)
        brains = self.getChildrens(context)
        #         import pdb
        #         pdb.set_trace()
        for bn in brains:
            try:
                obj = bn.getObject()
                self.wf().doActionFor(obj, transition, comment=subject)
            except:
                continue

        try:
            self.wf().doActionFor(context, transition, comment=subject)
            newstatus = self.context.translate(_p(actionid))
            ajaxtext = u"%(project)s项目已成功切换到:<strong>%(status)s</strong>状态。" % (
                {"project": context.title, "status": newstatus}
            )
            callback = {"result": True, "status": newstatus, "message": ajaxtext}
        except:
            callback = {"result": False, "status": "", "message": ""}

        self.request.response.setHeader("Content-Type", "application/json")
        return json.dumps(callback)
 def update(self):
     wftool = getToolByName(aq_inner(self.context), 'portal_workflow')
     transitions = [t['id'] for t in wftool.getTransitionsFor(aq_inner(self.context))]
     if not self.workflow_action in transitions:
         raise Unauthorized
     
     if self.standalone:
         self.template = self.template_standalone
         
     self.utils = getMultiAdapter((self.context, self.request), name=u'workflownotification')
     self.recipients = self.utils.getRecipientsFor(self.context, self.workflow_action)
     self.message_template = self.utils.getTemplateFor(self.context, self.workflow_action)
     
     actions = form.Actions()
     for name, a in self.actions.byname.items():
         if name == 'form.actions.label_send':
             a.label = _p(wftool.getTitleForTransitionOnType(self.workflow_action, self.context.portal_type))
         actions.append(a)
     self.actions = actions
     
     self.form_fields.get('message').field.default = self.message_template
     
     super(NotificationForm, self).update()
Example #33
0
 def __call__(self):
     self.errors = {}
     if 'header_table_submitted' in self.request:
         schema = self.context.Schema()
         fields = schema.fields()
         form = self.request.form
         for field in fields:
             fieldname = field.getName()
             if fieldname in form:
                 # Handle (multiValued) reference fields
                 # https://github.com/bikalims/bika.lims/issues/2270
                 uid_fieldname = "{}_uid".format(fieldname)
                 if uid_fieldname in form:
                     value = form[uid_fieldname]
                     if field.multiValued:
                         value = value.split(",")
                     field.getMutator(self.context)(value)
                 else:
                     # other fields
                     field.getMutator(self.context)(form[fieldname])
         message = _p("Changes saved.")
         self.context.plone_utils.addPortalMessage(message, 'info')
     return self.template()
Example #34
0
    def output(self,braindata):
        "根据参数total,braindata,返回jason 输出"
        outhtml = ""      
        k = 0
        for i in braindata:

            status =  self.context.translate(_p(i.review_state))         
            out = """<tr class="text-left">
                                <td class="col-md-1 text-center">%(num)s</td>
                                <td class="col-md-3 text-left"><a href="%(objurl)s">%(title)s</a></td>
                                <td class="col-md-6 text-left">%(description)s</td>
                                <td class="col-md-1 text-center">%(status)s</td>
                                <td class="col-md-1 text-center">%(date)s</td>                                
                            </tr> """% dict(objurl="%s/@@view" % i.getURL(),
                                            num=str(k + 1),
                                            title=i.Title,
                                            description= i.Description,
                                            status = status.encode('utf-8'),
                                            date = i.created.strftime('%Y-%m-%d'))           
            outhtml = "%s%s" %(outhtml ,out)
            k = k + 1           
       
        return outhtml         
Example #35
0
 def __call__(self):
     self.errors = {}
     if 'header_table_submitted' in self.request:
         schema = self.context.Schema()
         fields = schema.fields()
         form = self.request.form
         for field in fields:
             fieldname = field.getName()
             if fieldname in form:
                 # Handle (multiValued) reference fields
                 # https://github.com/bikalims/bika.lims/issues/2270
                 uid_fieldname = "{}_uid".format(fieldname)
                 if uid_fieldname in form:
                     value = form[uid_fieldname]
                     if field.multiValued:
                         value = value.split(",")
                     field.getMutator(self.context)(value)
                 else:
                     # other fields
                     field.getMutator(self.context)(form[fieldname])
         message = _p("Changes saved.")
         self.context.plone_utils.addPortalMessage(message, 'info')
     return self.template()
Example #36
0
    def output(self, braindata):
        "根据参数total,braindata,返回jason 输出"
        outhtml = ""
        k = 0
        for i in braindata:

            status = self.context.translate(_p(i.review_state))
            out = """<tr class="text-left">
                                <td class="col-md-1 text-center">%(num)s</td>
                                <td class="col-md-3 text-left"><a href="%(objurl)s">%(title)s</a></td>
                                <td class="col-md-6 text-left">%(description)s</td>
                                <td class="col-md-1 text-center">%(status)s</td>
                                <td class="col-md-1 text-center">%(date)s</td>                                
                            </tr> """ % dict(
                objurl="%s/@@view" % i.getURL(),
                num=str(k + 1),
                title=i.Title,
                description=i.Description,
                status=status.encode('utf-8'),
                date=i.created.strftime('%Y-%m-%d'))
            outhtml = "%s%s" % (outhtml, out)
            k = k + 1

        return outhtml
Example #37
0
    def build(self):
        menu = getMenu('plone_contentmenu', self.context, self.request)
        menu = self.separateMenu(menu)
        results = self._parse(menu)

        context_state = getMultiAdapter((self.context, self.request), name=u'plone_context_state')
        actions = context_state.actions
        action_list = []
        if context_state.is_structural_folder():
            action_list = actions('folder')
        action_list.extend(self.filterActionlist(actions('object')))

        contentaction = OrderedDict()

        for action in action_list:
            di = OrderedDict(label=translate(_p(action.get('title')), context=self.request),
                       action=self._action(action.get('url')),
                       icon=action.get('id'),
                      )
            contentaction[action.get('id')] = di

        results['contentaction'] = OrderedDict(label=translate(_('Content actions'), context=self.request), submenu=contentaction)

        return results
Example #38
0
class WatchingActionEditForm(EditForm):
    form_fields = form.FormFields(IWatchingAction)
    label = _(u'Edit watching action')
    description = _(u'An action which can add or remove a user '
                    u'from the watchers list')
    form_name = _p(u'Configure element')
Example #39
0
    def __call__(self):
        self.request.set('disable_border', True)
        self.errors = {}

        props = getToolByName(self.context,
                              'portal_properties').pcommerce_properties
        if self.request.form.has_key('pcommerce_save'):
            adapter = ITaxes(self.context)
            taxes = []
            raw = self.request.form.get('taxes', [])
            for tax in raw:
                if not tax.has_key('remove') or not tax['remove']:
                    try:
                        tax = {
                            'id': tax['id'],
                            'tax': float(tax['tax']),
                            'zone': tax['zone'],
                            'taxname': tax['taxname']
                        }
                        if tax['zone'] == '':
                            self.errors[tax['id']] = _(
                                u'Please provide a zone name')
                        elif tax['taxname'] == '':
                            self.errors[tax['id']] = _(
                                u'Please provide a tax name')
                        if not self.errors.has_key(tax['id']):
                            taxes.append(tax)
                    except:
                        self.errors[tax['id']] = _(
                            u'Please enter a floating point number (e.g. 7.6)')
            for prop in self.properties:
                self.values[prop] = self.request.form.get(prop, '')

            taxincl = None
            tax = self.request.form.get('taxincl.tax', '')
            taxname = self.request.form.get('taxincl.taxname', '')

            try:
                if taxname == '' and tax != '':
                    self.errors['taxincl'] = _(u'Please provide a tax name')
                else:
                    if tax == '':
                        tax = 0.0
                    taxincl = (float(tax), taxname)
            except:
                self.errors['taxincl'] = _(
                    u'Please enter a floating point number (e.g. 7.6)')

            if not self.errors:
                adapter.edit(taxes)
                adapter.taxincl = taxincl
                IStatusMessage(self.request).addStatusMessage(
                    _p('Properties saved'), 'info')
                for prop in self.properties:
                    if prop == 'columns':
                        self.values[prop] = int(self.values[prop])
                    props._setPropValue(prop, self.values[prop])
            else:
                IStatusMessage(self.request).addStatusMessage(
                    _p(u'Please correct the indicated errors'), 'error')

        for prop in self.properties:
            self.values[prop] = props.getProperty(prop, '')

        return self.template()
Example #40
0
        max_size='no',
        sizes={
            'large': (768, 768),
            'preview': (400, 400),
            'mini': (200, 200),
            'thumb': (128, 128),
            'tile': (64, 64),
            'icon': (32, 32),
            'listing': (16, 16),
        },
        validators=(
            ('isNonEmptyFile', V_REQUIRED),
            ('checkImageMaxSize', V_REQUIRED),
        ),
        widget=ImageWidget(
            label=_p(u'label_news_image', default=u'Image'),
            show_content_type=False,
        ),
    ),
    StringField(name='imageCaption',
                required=False,
                searchable=True,
                widget=StringWidget(description='',
                                    label=_p(u'label_image_caption',
                                             default=u'Image Caption'),
                                    size=40)),
))

for field in (
        'creators',
        'contributors',
Example #41
0
# -*- coding: utf-8 -*-

message = """<html>
<body>
<p>%(from)s</p>

%(message)s

<hr/>
<p><a href="%(url)s">%(url_text)s</a></p>
</body>
</html>
"""
# dummy i18n helper for workflow states
#from zope.i18nmessageid import MessageFactory
from Products.CMFPlone import PloneMessageFactory as _p
#workflow status
dummy = _p("fangan")


 def __call__(self, context):
     sm = getGlobalSiteManager()
     registrations = [a for a in sm.registeredAdapters() if a.provided == ICompoundCriterionFilter]
     terms = [SimpleTerm(adapter.name, adapter.name, _p(adapter.name)) for adapter in registrations]
     return SimpleVocabulary(terms)
class FavoritingActionEditForm(EditForm):
    form_fields = form.FormFields(IFavoritingAction)
    label = _(u'Edit favoriting action')
    description = _(u'An action which can add or remove an object '
                    u'to the user favorites')
    form_name = _p(u'Configure element')
class LeadImagePrefsForm(ControlPanelForm):
    """ The view class for the lead image preferences form. """

    implements(ILeadImagePrefsForm)
    form_fields = form.FormFields(ILeadImagePrefsForm)

    label = _(u'Content Lead Image Settings Form')
    description = _(u'Select properties for Content Lead Image')
    form_name = _(u'Content Lead Image Settings')

    # handle_edit_action and handle_cancel_action are copied from
    # ControlPanelForm because they are overriden by my handle_scales_action
    @form.action(_p(u'label_save', default=u'Save'), name=u'save')
    def handle_edit_action(self, action, data):
        CheckAuthenticator(self.request)
        if form.applyChanges(self.context, self.form_fields, data,
                             self.adapters):
            self.status = _p("Changes saved.")
            notify(ConfigurationChangedEvent(self, data))
            self._on_save(data)
        else:
            self.status = _p("No changes made.")

    @form.action(_p(u'label_cancel', default=u'Cancel'),
                 validator=null_validator,
                 name=u'cancel')
    def handle_cancel_action(self, action, data):
        IStatusMessage(self.request).addStatusMessage(_p("Changes canceled."),
                                                      type="info")
        url = getMultiAdapter((self.context, self.request),
                              name='absolute_url')()
        self.request.response.redirect(url + '/plone_control_panel')
        return ''

    @form.action(_(u'label_recreate_scales', default=u'Recreate scales'),
                 name=u'scales',
                 validator=null_validator)
    def handle_scales_action(self, action, data):
        CheckAuthenticator(self.request)
        number = 0
        ctool = getToolByName(self.context, 'portal_catalog')
        items = ctool(hasContentLeadImage=True)
        for i in items:
            obj = i.getObject()
            if obj is None:
                continue
            if not ILeadImageable.providedBy(obj):
                continue

            try:
                state = obj._p_changed
            except (ConflictError, KeyboardInterrupt):
                raise
            except:
                state = 0

            field = obj.getField(config.IMAGE_FIELD_NAME)
            if field is not None:
                field.removeScales(obj)
                field.createScales(obj)
                number = number + 1

            if state is None:
                obj._p_deactivate()

        self.status = _(u"text_scales_recreated",
                        default=u"${number} scales recreated.",
                        mapping={'number': number})
Example #45
0
    def getMenuItems(self, context, request):
        """Return menu item entries in a TAL-friendly form."""
        results = BaseFactoriesMenu.getMenuItems(self, context, request)

        factories_view = getMultiAdapter((context, request),
                                         name='folder_factories')

        haveMore = False
        include = None

        addContext = factories_view.default_page_add_context()
        if not addContext:
            return results
        allowedTypes = _allowedTypes(request, addContext)

        constraints = IConstrainTypes(addContext, None)
        if constraints is not None:
            include = constraints.getImmediatelyAddableTypes()
            if len(include) < len(allowedTypes):
                haveMore = True

        results.append({
            'title':
            _p(u'folder_add_to_default_page', default=u'Add to default page'),
            'description':
            _p(u'Add content to the default page'),
            'action':
            None,
            'selected':
            False,
            'icon':
            None,
            'extra': {
                'id': 'add-to-default',
                'separator': 'actionSeparator',
                'class': ''
            },
            'submenu':
            None,
        })

        results += factories_view.default_page_addable_types(include=include)

        if haveMore:
            url = '%s/folder_factories' % (addContext.absolute_url(), )
            results.append({
                'title':
                _p(u'folder_add_more', default=u'More\u2026'),
                'description':
                _p(u'Show all available content types'),
                'action':
                url,
                'selected':
                False,
                'icon':
                None,
                'extra': {
                    'id': 'more',
                    'separator': None,
                    'class': ''
                },
                'submenu':
                None,
            })

        constraints = ISelectableConstrainTypes(addContext, None)
        if constraints is not None:
            if constraints.canSetConstrainTypes(
            ) and constraints.getDefaultAddableTypes():
                url = '%s/folder_constraintypes_form' % (
                    addContext.absolute_url(), )
                results.append({
                    'title':
                    _p(u'folder_add_settings', default=u'Restrictions\u2026'),
                    'description':
                    _p(u'title_configure_addable_content_types',
                       default=
                       u'Configure which content types can be added here'),
                    'action':
                    url,
                    'selected':
                    False,
                    'icon':
                    None,
                    'extra': {
                        'id': 'settings',
                        'separator': None,
                        'class': ''
                    },
                    'submenu':
                    None,
                })

        return results
Example #46
0
class RegistrationForm(form.SchemaForm):
    grok.name('write_message')
    grok.context(IOutputbox)
    grok.require("emc.memberArea.send_message")
    grok.layer(IThemeSpecific)
    schema = IMessage
    ignoreContext = True
    label = _(u"send message to member")

    def update(self):
        self.request.set('disable_border', True)
        return super(RegistrationForm, self).update()

    def updateWidgets(self):
        super(RegistrationForm, self).updateWidgets()
        #        self.widgets['privacy'].label = u''
        #        self.widgets['privacy'].mode = 'display'
        #        self.widgets['privacy'].autoresize = True
        self.widgets['title'].addClass("form-control")
        self.widgets['text'].addClass("form-control")
        self.widgets['sendto'].addClass("form-control")

    def updateActions(self):

        super(RegistrationForm, self).updateActions()
        self.actions['submit'].addClass("btn-primary btn-block btn-lg")
        self.actions['cancel'].addClass("btn-default btn-block btn-lg")

    @button.buttonAndHandler(_p(u"submit"))
    def submit(self, action):
        from plone import api
        current = api.user.get_current()
        data, errors = self.extractData()

        if errors:
            self.status = _(u"Please correct errors")
            return
        # a simple rule for composing object id
        inc = str(int(getattr(self.context, 'registrant_increment', '0')) + 1)

        data['id'] = '%s_%s' % (current.id, inc)
        self.context.registrant_increment = inc
        obj = _createObjectByType("emc.memberArea.message", self.context,
                                  data['id'])

        del data['id']
        title = data['title']
        for k, v in data.items():
            setattr(obj, k, v)

        obj.reindexObject()
        # notify object created event,
        #the subscriber of the event will be put message into incoming box of the receivers.

        notify(MessageCreatedEvent(obj))

        #        urltool = getToolByName(self.context, 'portal_url')
        #        portal = urltool.getPortalObject()
        #        self.request.response.redirect(portal.absolute_url() + "/login_form")
        self.request.response.redirect(self.context.absolute_url())
        IStatusMessage(self.request).addStatusMessage(_(
            u'create_message_succesful',
            default=u"Your message:${title} has been sent.",
            mapping={u'title': title}),
                                                      type='info')
        return

    @button.buttonAndHandler(_p(u"Cancel"))
    def cancel(self, action):

        self.request.response.redirect(self.context.absolute_url())
        return
Example #47
0
from Products.CMFPlone import PloneMessageFactory as _p
#_p = MessageFactory('plone')
dummy = _p("FangAn")
dummy = _p("ChuYang")
dummy = _p("ChuYang1")
dummy = _p("ChuYang2")
dummy = _p("ShiYang")
dummy = _p("ShiYang1")
dummy = _p("ShiYang2")
dummy = _p("ZhengYang")
dummy = _p("ZhengYang1")
dummy = _p("ZhengYang2")
dummy = _p("DingXing")
Example #48
0
                                         )
                  ),
    
    ReferenceField('referenceField',
            relationship = 'relatesTo',
            multiValued = False,
            isMetadata = True,
            languageIndependent = False,
            index = 'KeywordIndex',
            write_permission = ModifyPortalContent,
            widget = ReferenceBrowserWidget(
                     allow_search = True,
                     allow_browse = True,
                     show_indexes = False,
                     force_close_on_insert = True,
                     label = _p(u'label_related_items', default=u'Related Items'),
                     description = '',
                     visible = {'edit' : 'visible', 'view' : 'invisible' }
                )
            ),
))
for field in ('creators', 'contributors', 'rights', 'subject', 'language', 'location', 'allowDiscussion'):
    if ShowcaseImageSchema.has_key(field):
        ShowcaseImageSchema[field].widget.visible = 0

ShowcaseImageSchema.changeSchemataForField('x', 'settings')
ShowcaseImageSchema.changeSchemataForField('y', 'settings')
ShowcaseImageSchema.changeSchemataForField('clipWidth', 'settings')
ShowcaseImageSchema.changeSchemataForField('clipHeight', 'settings')
ShowcaseImageSchema.changeSchemataForField('clipLeft', 'settings')
ShowcaseImageSchema.changeSchemataForField('clipTop', 'settings')
Example #49
0
# -*- coding: utf-8 -*-

message = """<html>
<body>
<p>%(from)s</p>

%(message)s

<hr/>
<p><a href="%(url)s">%(url_text)s</a></p>
</body>
</html>
"""
# dummy i18n helper for workflow states
#from zope.i18nmessageid import MessageFactory
from Products.CMFPlone import PloneMessageFactory as _p
#_p = MessageFactory('plone')
dummy = _p("published")


Example #50
0
    ImageField(
        name='image',
        languageIndependent=True,
        swallowResizeExceptions=True,
        max_size='no',
        sizes={'large'   : (768, 768),
               'preview' : (400, 400),
               'mini'    : (200, 200),
               'thumb'   : (128, 128),
               'tile'    :  (64, 64),
               'icon'    :  (32, 32),
               'listing' :  (16, 16),
               },
        validators=(('isNonEmptyFile', V_REQUIRED),
                    ('checkImageMaxSize', V_REQUIRED),),
        widget=ImageWidget(label= _p(u'label_news_image', default=u'Image'),
                           show_content_type = False,),
    ),

    StringField(
        name='imageCaption',
        required = False,
        searchable = True,
        widget = StringWidget(description = '',
                              label = _p(u'label_image_caption', default=u'Image Caption'),
                              size = 40)
    ),
        
))

for field in ('creators','contributors','location','subject','language','rights','presentation', 'tableContents',):