Esempio n. 1
0
 def test_user_related_modification(self):
     voc_inst = AssignedUsersWithDeactivatedVocabulary()
     voc_list = [(t.value, t.title) for t in voc_inst(self.imail)]
     self.assertListEqual(voc_list,
                          [('__empty_string__', u'Empty value'),
                           ('agent', u'Fred Agent'),
                           ('encodeur', u'Jean Encodeur'),
                           ('lecteur', u'Jef Lecteur'),
                           ('dirg', u'Maxime DG'), ('chef', u'Michel Chef'),
                           ('scanner', u'Scanner'),
                           ('agent1', u'Stef Agent'),
                           ('test-user', u'test-user (Désactivé)')])
     # we change a user property
     member = api.user.get(userid='chef')
     member.setMemberProperties({'fullname': 'Michel Chef 2'})
     # we simulate the user form change event
     zope.event.notify(
         ConfigurationChangedEvent(
             UserDataConfiglet(self.portal, self.portal.REQUEST), {}))
     voc_list = [(t.value, t.title) for t in voc_inst(self.imail)]
     self.assertListEqual(voc_list,
                          [('__empty_string__', u'Empty value'),
                           ('agent', u'Fred Agent'),
                           ('encodeur', u'Jean Encodeur'),
                           ('lecteur', u'Jef Lecteur'),
                           ('dirg', u'Maxime DG'),
                           ('chef', u'Michel Chef 2'),
                           ('scanner', u'Scanner'),
                           ('agent1', u'Stef Agent'),
                           ('test-user', u'test-user (Désactivé)')])
     # we change the activated services
     set_registry_organizations(
         get_registry_organizations()[0:1])  # only keep Direction générale
     api.group.remove_user(
         groupname='createurs_dossier',
         username='******')  # remove agent from global group
     voc_list = [(t.value, t.title) for t in voc_inst(self.imail)]
     self.assertListEqual(voc_list,
                          [('__empty_string__', u'Empty value'),
                           ('encodeur', u'Jean Encodeur'),
                           ('dirg', u'Maxime DG'),
                           ('chef', u'Michel Chef 2'),
                           ('scanner', u'Scanner'),
                           ('agent', u'Fred Agent (Désactivé)'),
                           ('lecteur', u'Jef Lecteur (Désactivé)'),
                           ('agent1', u'Stef Agent (Désactivé)'),
                           ('test-user', u'test-user (Désactivé)')])
     # wrong configuration change
     zope.event.notify(ConfigurationChangedEvent(self.portal, {}))
Esempio n. 2
0
class SpreedlySettings(ControlPanelForm):
    zope.interface.implements(ISpreedlyLoginSettings)

    id = u"SpreedlyLoginSettingsForm"
    form_name = u"Spreedly Credentials Configuration"
    description = u""""""
    form_fields = zope.formlib.form.FormFields(ISpreedlyLoginSettings)

    @zope.formlib.form.action(u'Save', name=u'save')
    def handle_edit_action(self, action, data):
        """ When save button pressed, check for errors, attempt to connect to
            API, and throw error if key wrong, otherwise, continue.
        """
        plone.protect.CheckAuthenticator(self.request)
        self.context.manage_changeProperties(**data)

        try:
            connect = spreedlycore.APIConnection(data['spreedly_login'],
                                                 data['spreedly_secret'])
            gateway = connect.gateways()
        except urllib2.HTTPError, e:
            IStatusMessage(self.request).addStatusMessage(
                _(u"The credentials that were provided are incorrect. "
                  "SpreedlyCore.com returned " + unicode(e)), "error")
            self.context.REQUEST.RESPONSE.redirect("@@spreedly_settings")
            return

        zope.formlib.form.applyChanges(self.context, self.form_fields, data,
                                       self.adapters)

        zope.event.notify(ConfigurationChangedEvent(self, data))
        self.status = "Changes saved."
        self.context.REQUEST.RESPONSE.redirect("@@spreedly_settings")
Esempio n. 3
0
 def handle_edit_action(self, action, data):
     CheckAuthenticator(self.request)
     if form.applyChanges(self.context, self.form_fields, data,
                          self.adapters):
         self.status = __("Changes saved.")
         notify(ConfigurationChangedEvent(self, data))
         self._on_save(data)
     else:
         self.status = __("No changes made.")
Esempio n. 4
0
 def test_pm_GetMemberInfo(self):
     """Test portal_membership.getMemberInfo as is it monkeypatched to add caching."""
     pm = self.portal.portal_membership
     self.changeUser("pmManager")
     self.assertEqual(
         pm.getMemberInfo("pmManager")["fullname"], 'M. PMManager')
     self.member.setMemberProperties({"fullname": "M. PMManager New"})
     # still not changed as cache was not invalidated
     self.assertEqual(
         pm.getMemberInfo("pmManager")["fullname"], 'M. PMManager')
     notify(ConfigurationChangedEvent(self.portal, self.request))
     self.assertEqual(
         pm.getMemberInfo("pmManager")["fullname"], 'M. PMManager New')
Esempio n. 5
0
    def handleSave(self, action):
        CheckAuthenticator(self.request)
        data, errors = self.extractData()

        # extra validation for email
        self.validate_email(action, data)

        if action.form.widgets.errors:
            self.status = self.formErrorsMessage
            return

        if self.applyChanges(data):
            IStatusMessage(self.request).addStatusMessage(self.successMessage,
                                                          type='info')
            notify(ConfigurationChangedEvent(self, data))
            self._on_save(data)
        else:
            IStatusMessage(self.request).addStatusMessage(
                self.noChangesMessage, type='info')
        self.request.response.redirect(self.action())
Esempio n. 6
0
    def __call__(self):
        """Perform the update and redirect if necessary, or render the page
        """
        postback = True
        context = aq_inner(self.context)

        form = self.request.form
        submitted = form.get('form.submitted', False)
        save_button = form.get('form.button.Save', None) is not None
        cancel_button = form.get('form.button.Cancel', None) is not None
        type_id = form.get('old_type_id', None)

        if submitted and not cancel_button:
            if type_id:
                portal_types = getToolByName(self.context, 'portal_types')
                portal_repository = getToolByName(self.context,
                                                  'portal_repository')
                portal_properties = getToolByName(self.context,
                                                  'portal_properties')
                site_properties = getattr(portal_properties, 'site_properties')

                fti = getattr(portal_types, type_id)

                # Set FTI properties

                addable = form.get('addable', False)
                allow_discussion = form.get('allow_discussion', False)

                fti.manage_changeProperties(
                    global_allow=bool(addable),
                    allow_discussion=bool(allow_discussion))

                version_policy = form.get('versionpolicy', "off")
                if version_policy != self.current_versioning_policy():
                    newpolicy = [
                        p for p in VERSION_POLICIES
                        if p["id"] == version_policy
                    ][0]

                    versionable_types = list(
                        portal_repository.getVersionableContentTypes())
                    if not newpolicy["policy"]:
                        if type_id in versionable_types:
                            versionable_types.remove(type_id)
                    else:
                        if type_id not in versionable_types:
                            versionable_types.append(type_id)

                    for policy in portal_repository.listPolicies():
                        policy_id = policy.getId()
                        if policy_id in newpolicy["policy"]:
                            portal_repository.addPolicyForContentType(
                                type_id, policy_id)
                        else:
                            portal_repository.removePolicyFromContentType(
                                type_id, policy_id)

                    portal_repository.setVersionableContentTypes(
                        versionable_types)

                searchable = form.get('searchable', False)
                blacklisted = list(
                    site_properties.getProperty('types_not_searched'))
                if searchable and type_id in blacklisted:
                    blacklisted.remove(type_id)
                elif not searchable and type_id not in blacklisted:
                    blacklisted.append(type_id)
                site_properties.manage_changeProperties(types_not_searched = \
                                                        blacklisted)

                if type_id == 'Link':
                    redirect_links = form.get('redirect_links', False)
                    site_properties.manage_changeProperties(redirect_links = \
                                                            redirect_links)

            # Update workflow
            if self.have_new_workflow() and \
               form.get('form.workflow.submitted', False) and \
               save_button:
                if self.new_workflow_is_different():
                    new_wf = self.new_workflow()
                    if new_wf == '[none]':
                        chain = ()
                    elif new_wf == '(Default)':
                        chain = new_wf
                    else:
                        chain = (new_wf, )
                    state_map = dict([(s['old_state'], s['new_state']) for s in \
                                      form.get('new_wfstates', [])])
                    if state_map.has_key('[none]'):
                        state_map[None] = state_map['[none]']
                        del state_map['[none]']
                    if type_id:
                        type_ids = (type_id, )
                    else:
                        wt = getToolByName(self.context, 'portal_workflow')
                        tt = getToolByName(self.context, 'portal_types')
                        nondefault = [
                            info[0] for info in wt.listChainOverrides()
                        ]
                        type_ids = [
                            type for type in tt.listContentTypes()
                            if type not in nondefault
                        ]
                        wt.setChainForPortalTypes(type_ids,
                                                  wt.getDefaultChain())
                        wt.setDefaultChain(','.join(chain))
                        chain = '(Default)'

                    remap_workflow(context,
                                   type_ids=type_ids,
                                   chain=chain,
                                   state_map=state_map)

                    data = {'workflow': new_wf}
                    notify(ConfigurationChangedEvent(self, data))

                else:
                    portal_workflow = getToolByName(context, 'portal_workflow')
                    if self.new_workflow() == '(Default)':
                        # The WorkflowTool API can not handle this sanely
                        cbt = portal_workflow._chains_by_type
                        if cbt.has_key(type_id):
                            del cbt[type_id]
                    else:
                        portal_workflow.setChainForPortalTypes(
                            (type_id, ), self.new_workflow())

                self.request.response.redirect('%s/@@types-controlpanel?\
type_id=%s' % (context.absolute_url(), type_id))
                postback = False

        elif cancel_button:
            self.request.response.redirect(self.context.absolute_url() + \
                                           '/plone_control_panel')
            postback = False

        if postback:
            return self.template()
Esempio n. 7
0
 def handle_edit_action(self, action, data):
     CheckAuthenticator(self.request)
     if applyChanges(self.context, self.form_fields, data, self.adapters):
         notify(ConfigurationChangedEvent(self, data))
         return self._on_save(data)