예제 #1
0
def create_testobject(parent, ptype, **kwargs):
    createContent(ptype)
    obj = createContent(ptype, **kwargs)
    notify(ObjectCreatedEvent(obj))
    obj = addContentToContainer(parent, obj, checkConstraints=False)
    notify(ObjectAddedEvent(obj))
    return obj
예제 #2
0
def create_task(parent, **kwargs):
    createContent('opengever.task.task')
    task = createContent('opengever.task.task', **kwargs)
    notify(ObjectCreatedEvent(task))
    task = addContentToContainer(parent, task, checkConstraints=False)
    notify(ObjectAddedEvent(task))
    return task
예제 #3
0
def create_testobject(parent, ptype, **kwargs):
    createContent(ptype)
    obj = createContent(ptype, **kwargs)
    notify(ObjectCreatedEvent(obj))
    obj = addContentToContainer(parent, obj, checkConstraints=False)
    notify(ObjectAddedEvent(obj))
    return obj
예제 #4
0
 def convertFromDict(self,data):
     ''' Our objects will be returned as dicts '''
     data['fields'] = dict([(l.keys()[0],l.values()[0]) for l in data['fields']])
     tmpReg = {}
     tmpAttendee = {}
     attendees = []
     tmpAttendees = []
     data['created'] = DateTime(data['fields']['creation_date'])
     data['modified'] = DateTime(data['fields']['modification_date'])
     tmpReg['id'] = data['fields']['id']
     tmpReg['registration_type'] = TIPO[data['fields']['tipo']]
     tmpReg['city'] = data['fields']['cidade']
     tmpReg['state'] = data['fields']['estado']
     tmpReg['country'] = PAIS.get(data['fields']['pais'],'br')
     tmpReg['email'] = data['fields']['email']
     tmpReg['post_code'] = data['fields']['cep']
     tmpReg['address'] = data['fields']['endereco']
     if data['fields']['paga']:
         tmpReg['paid'] = True
         tmpReg['service'] = 'pagseguro'
         tmpReg['amount'] = data['fields']['valor_pago'] or 0
         tmpReg['amount'] = data['fields']['valor_pago'] or 0
     if data['portal_type']== 'Inscricao':
        tmpAttendee['address'] = data['fields']['endereco']
        tmpAttendee['city'] = data['fields']['cidade']
        tmpAttendee['state'] = data['fields']['estado']
        tmpAttendee['post_code'] = data['fields']['cep']
        tmpAttendee['country'] = PAIS.get(data['fields']['pais'],'br')
        tmpAttendee['email'] = data['fields']['email']
        tmpAttendee['fullname'] = data['fields']['nome']
        tmpAttendee['t_shirt_size'] = CAMISETA.get(data['fields']['camiseta'],'L')
        tmpAttendee['gender'] = (data['fields']['sexo'] == 'Feminino') and 'f' or 'm'
        tmpAttendee['twitter'] = data['fields']['twitter']
        tmpAttendee['site'] = data['fields']['site']
        tmpAttendee['organization'] = data['fields']['instituicao']
        tmpAttendee['conference'] = data['fields']['optin_evento']
        tmpAttendee['partners'] = data['fields']['optin_parceiros']
        tmpAttendees.append(tmpAttendee)
     else: 
         for att in data['fields']['participantes']:
             tmpAttendee = {}
             tmpAttendee['city'] = data['fields']['cidade']
             tmpAttendee['state'] = data['fields']['estado']
             tmpAttendee['post_code'] = data['fields']['cep']
             tmpAttendee['country'] = PAIS.get(data['fields']['pais'],'br')
             tmpAttendee['email'] = att['email']
             tmpAttendee['fullname'] = att['nome']
             tmpAttendee['t_shirt_size'] = CAMISETA.get(att['camiseta'],'L')
             tmpAttendee['gender'] = (att['sexo'] == 'Feminino') and 'f' or 'm'
             tmpAttendee['organization'] = data['fields']['razao_social']
             tmpAttendee['conference'] = data['fields']['optin_evento']
             tmpAttendee['partners'] = data['fields']['optin_parceiros']
             tmpAttendees.append(tmpAttendee)
     reg = createContent('apyb.registration.registration', checkConstraints=True, **tmpReg)
     for att in tmpAttendees:
         attendees.append(createContent('apyb.registration.attendee', checkConstraints=True, **att))
     return [reg,attendees]
예제 #5
0
    def create(self, data):
        ''' Create objects '''
        reg_fields = ['discount_code']
        data['registration_type'] = self.registration_type

        reg_data = dict([(k, data[k]) for k in reg_fields])
        reg_data['email'] = data['email']
        reg_data['city'] = data['city']
        reg_data['state'] = data['state']
        reg_data['country'] = data['country']
        reg_data['registration_type'] = data['registration_type']
        registration = createContent('registration',
                                     checkConstraints=True, **reg_data)

        for k in reg_fields:
            del data[k]
        base_attendee = data.copy()
        del base_attendee['attendees']
        del base_attendee['email']
        attendees = []
        if not data['attendees']:
            form = self.request.form
            base_fname = 'form.widgets.attendees.%s.widgets.%s'
            ftype = 'AA'
            fname = base_fname % (ftype, 'fullname')
            if not fname in form:
                ftype = 'TT'
                fname = base_fname % (ftype, 'fullname')
                if not fname in form:
                    ftype = '00'
                    fname = base_fname % (ftype, 'fullname')
                    if not fname in form:
                        # Will raise an error in add..
                        return None
            line = {'fullname':
                    form[base_fname % (ftype, 'fullname')],
                    'gender':
                    form[base_fname % (ftype, 'gender')][0],
                    't_shirt_size':
                    form[base_fname % (ftype, 't_shirt_size')][0],
                    'email':
                    form[base_fname % (ftype, 'email')],
                    'caipirinha':
                    form[base_fname % (ftype, 'caipirinha')][0],
                    'wall':
                    form[base_fname % (ftype, 'wall')][0],
                    }
            data['attendees'].append(line)

        for line in data['attendees']:
            line.update(base_attendee)
            # Create attendee object
            attendee = createContent('attendee',
                                     checkConstraints=True, **line)
            attendees.append(attendee)
        return [registration, attendees]
예제 #6
0
    def testRelations(self):
        rel_fti = DexterityFTI(
            'RelationsType',
            schema=IRelationsType.__identifier__
        )
        self.portal.portal_types._setObject('RelationsType', rel_fti)

        # Setup IIntIds utility which is required for relations to work
        from five.intid import site
        from zope.app.intid.interfaces import IIntIds
        site.add_intids(self.portal)
        intids = getUtility(IIntIds)

        source = createContentInContainer(self.portal, 'RelationsType')
        target = createContentInContainer(self.portal, 'RelationsType')

        # Test modifier when no relations are set
        modifier = SkipRelations('modifier', 'Modifier')
        on_clone_modifiers = modifier.getOnCloneModifiers(source)
        pers_id, pers_load, empty1, empty2 = on_clone_modifiers
        self.assertTrue(pers_id(None) is None)
        self.assertTrue(pers_id(None) is None)
        self.assertTrue(pers_load(None) is None)
        self.assertTrue(pers_load(None) is None)
        self.assertTrue(empty1 == [])
        self.assertTrue(empty2 == [])

        repo_clone = createContent('RelationsType')
        modifier.afterRetrieveModifier(source, repo_clone)
        self.assertTrue(repo_clone.single is source.single)
        self.assertTrue(repo_clone.multiple is source.multiple)

        # Add some relations
        source.single = RelationValue(intids.getId(target))
        source.multiple = [RelationValue(intids.getId(target))]

        # Update relations
        from zope.lifecycleevent import ObjectModifiedEvent
        from zope.event import notify
        notify(ObjectModifiedEvent(source))

        modifier = SkipRelations('modifier', 'Modifier')
        on_clone_modifiers = modifier.getOnCloneModifiers(source)
        pers_id, pers_load, empty1, empty2 = on_clone_modifiers
        self.assertTrue(pers_id(source.single))
        self.assertTrue(pers_id(source.multiple))
        self.assertTrue(pers_load(source.single) is None)
        self.assertTrue(pers_load(source.multiple) is None)
        self.assertTrue(empty1 == [])
        self.assertTrue(empty2 == [])

        repo_clone = createContent('RelationsType')
        modifier.afterRetrieveModifier(source, repo_clone)
        self.assertTrue(repo_clone.single is source.single)
        self.assertTrue(repo_clone.multiple is source.multiple)
    def testRelations(self):
        rel_fti = DexterityFTI(
            'RelationsType',
            schema=
            'plone.app.versioningbehavior.tests.test_modifiers.IRelationsType')
        self.portal.portal_types._setObject('RelationsType', rel_fti)

        # Setup IIntIds utility which is required for relations to work
        from five.intid import site
        from zope.app.intid.interfaces import IIntIds
        site.add_intids(self.portal)
        intids = getUtility(IIntIds)

        source = createContentInContainer(self.portal, 'RelationsType')
        target = createContentInContainer(self.portal, 'RelationsType')

        # Test modifier when no relations are set
        modifier = SkipRelations('modifier', 'Modifier')
        pers_id, pers_load, empty1, empty2 = modifier.getOnCloneModifiers(
            source)
        self.assertTrue(pers_id(None) is None)
        self.assertTrue(pers_id(None) is None)
        self.assertTrue(pers_load(None) is None)
        self.assertTrue(pers_load(None) is None)
        self.assertTrue(empty1 == [])
        self.assertTrue(empty2 == [])

        repo_clone = createContent('RelationsType')
        modifier.afterRetrieveModifier(source, repo_clone)
        self.assertTrue(repo_clone.single is source.single)
        self.assertTrue(repo_clone.multiple is source.multiple)

        # Add some relations
        source.single = RelationValue(intids.getId(target))
        source.multiple = [RelationValue(intids.getId(target))]

        # Update relations
        from zope.lifecycleevent import ObjectModifiedEvent
        from zope.event import notify
        notify(ObjectModifiedEvent(source))

        modifier = SkipRelations('modifier', 'Modifier')
        pers_id, pers_load, empty1, empty2 = modifier.getOnCloneModifiers(
            source)
        self.assertTrue(pers_id(source.single))
        self.assertTrue(pers_id(source.multiple))
        self.assertTrue(pers_load(source.single) is None)
        self.assertTrue(pers_load(source.multiple) is None)
        self.assertTrue(empty1 == [])
        self.assertTrue(empty2 == [])

        repo_clone = createContent('RelationsType')
        modifier.afterRetrieveModifier(source, repo_clone)
        self.assertTrue(repo_clone.single is source.single)
        self.assertTrue(repo_clone.multiple is source.multiple)
예제 #8
0
    def setUp(self):
        """Custom shared utility setup for tests."""
        self.portal = self.layer['portal']

        pr = self.portal.portal_resources

        pr.manage_addFolder('ambidexterity')
        pr.ambidexterity.manage_addFolder('simple_test_type')
        pr.ambidexterity.simple_test_type.manage_addFolder('test_integer_field')
        pr.ambidexterity.simple_test_type.manage_addFolder('test_string_field')
        pr.ambidexterity.simple_test_type.manage_addFolder('test_choice_field')

        type_folder = pr.ambidexterity.simple_test_type
        type_folder.manage_addFile('view.pt')
        type_folder['view.pt'].update_data(
            'view.pt for <span tal:replace="context/id" />'
        )
        type_folder.manage_addFile('custom.js')
        type_folder['custom.js'].update_data(
            'custom.js for <span tal:replace="context/id" />'
        )

        field_folder = pr.ambidexterity.simple_test_type.test_string_field
        field_folder.manage_addFile('validate.py')
        field_folder['validate.py'].update_data(
            'if u"bad" in value.lower():\n  error_message = u"At %s, value is bad: %s" % (context.getId(), value)'
        )

        field_folder = pr.ambidexterity.simple_test_type.test_string_field
        field_folder.manage_addFile('default.py')
        field_folder['default.py'].update_data('default = u"default script %s" % context.title')

        field_folder = pr.ambidexterity.simple_test_type.test_integer_field
        field_folder.manage_addFile('default.py')
        integer_default_script = field_folder['default.py']
        integer_default_script.update_data('default = 42')

        field_folder = pr.ambidexterity.simple_test_type.test_choice_field
        field_folder.manage_addFile('vocabulary.py')
        choice_vocabulary_script = field_folder['vocabulary.py']
        choice_vocabulary_script.update_data("vocabulary = [(1, u'a'), (2, u'b'), (3, u'c')]")

        applyProfile(self.portal, 'collective.ambidexterity:testing')
        self.test_schema = self.portal.portal_types.simple_test_type.lookupSchema()

        test_item = createContent('simple_test_type', title=u'The Meaning of Life')
        test_item.id = 'test_item'
        self.portal['test_item'] = test_item

        test_item = createContent('Folder', title=u'A Folder')
        test_item.id = 'afolder'
        self.portal.afolder = test_item
예제 #9
0
    def testRelationsInBehaviors(self):
        self.register_RelationsType()
        intids = getUtility(IIntIds)

        source = createContentInContainer(self.portal, 'RelationsType')
        target = createContentInContainer(self.portal, 'RelationsType')

        # Test modifier when no relations are set
        modifier = SkipRelations('modifier', 'Modifier')
        on_clone_modifiers = modifier.getOnCloneModifiers(source)
        pers_id, pers_load, empty1, empty2 = on_clone_modifiers
        self.assertTrue(pers_id(None) is None)
        self.assertTrue(pers_id(None) is None)
        self.assertTrue(pers_load(None) is None)
        self.assertTrue(pers_load(None) is None)
        self.assertTrue(empty1 == [])
        self.assertTrue(empty2 == [])

        repo_clone = createContent('RelationsType')
        modifier.afterRetrieveModifier(source, repo_clone)
        self.assertTrue(repo_clone.single is None)
        self.assertTrue(repo_clone.multiple is None)

        # Add some relations
        IRelationsBehavior(source).single = RelationValue(intids.getId(target))
        IRelationsBehavior(source).multiple = [
            RelationValue(intids.getId(target))
        ]

        # Update relations
        from zope.lifecycleevent import ObjectModifiedEvent
        from zope.event import notify
        notify(ObjectModifiedEvent(source))

        modifier = SkipRelations('modifier', 'Modifier')
        on_clone_modifiers = modifier.getOnCloneModifiers(source)
        pers_id, pers_load, empty1, empty2 = on_clone_modifiers
        self.assertTrue(pers_id(IRelationsBehavior(source).single))
        self.assertTrue(pers_id(IRelationsBehavior(source).multiple))
        self.assertTrue(pers_load(IRelationsBehavior(source).single) is None)
        self.assertTrue(pers_load(IRelationsBehavior(source).multiple) is None)
        self.assertTrue(empty1 == [])
        self.assertTrue(empty2 == [])

        repo_clone = createContent('RelationsType')
        modifier.afterRetrieveModifier(source, repo_clone)
        self.assertTrue(
            IRelationsBehavior(repo_clone).single is IRelationsBehavior(
                source).single)
        self.assertTrue(
            IRelationsBehavior(repo_clone).multiple is IRelationsBehavior(
                source).multiple)
예제 #10
0
    def testRelationsInBehaviors(self):
        self.register_RelationsType()
        intids = getUtility(IIntIds)

        source = createContentInContainer(self.portal, 'RelationsType')
        target = createContentInContainer(self.portal, 'RelationsType')

        # Test modifier when no relations are set
        modifier = SkipRelations('modifier', 'Modifier')
        on_clone_modifiers = modifier.getOnCloneModifiers(source)
        pers_id, pers_load, empty1, empty2 = on_clone_modifiers
        self.assertTrue(pers_id(None) is None)
        self.assertTrue(pers_id(None) is None)
        self.assertTrue(pers_load(None) is None)
        self.assertTrue(pers_load(None) is None)
        self.assertTrue(empty1 == [])
        self.assertTrue(empty2 == [])

        repo_clone = createContent('RelationsType')
        modifier.afterRetrieveModifier(source, repo_clone)
        self.assertTrue(repo_clone.single is None)
        self.assertTrue(repo_clone.multiple is None)

        # Add some relations
        IRelationsBehavior(source).single = RelationValue(
            intids.getId(target)
        )
        IRelationsBehavior(source).multiple = [
            RelationValue(intids.getId(target))
        ]

        # Update relations
        from zope.lifecycleevent import ObjectModifiedEvent
        from zope.event import notify
        notify(ObjectModifiedEvent(source))

        modifier = SkipRelations('modifier', 'Modifier')
        on_clone_modifiers = modifier.getOnCloneModifiers(source)
        pers_id, pers_load, empty1, empty2 = on_clone_modifiers
        self.assertTrue(pers_id(IRelationsBehavior(source).single))
        self.assertTrue(pers_id(IRelationsBehavior(source).multiple))
        self.assertTrue(pers_load(IRelationsBehavior(source).single) is None)
        self.assertTrue(pers_load(IRelationsBehavior(source).multiple) is None)
        self.assertTrue(empty1 == [])
        self.assertTrue(empty2 == [])

        repo_clone = createContent('RelationsType')
        modifier.afterRetrieveModifier(source, repo_clone)
        self.assertTrue(IRelationsBehavior(repo_clone).single
                        is IRelationsBehavior(source).single)
        self.assertTrue(IRelationsBehavior(repo_clone).multiple
                        is IRelationsBehavior(source).multiple)
예제 #11
0
    def testRelations(self):
        rel_fti = DexterityFTI('RelationsType',
                               schema=IRelationsType.__identifier__)
        self.portal.portal_types._setObject('RelationsType', rel_fti)

        intids = getUtility(IIntIds)

        source = createContentInContainer(self.portal, 'RelationsType')
        target = createContentInContainer(self.portal, 'RelationsType')

        # Test modifier when no relations are set
        modifier = SkipRelations('modifier', 'Modifier')
        on_clone_modifiers = modifier.getOnCloneModifiers(source)
        pers_id, pers_load, empty1, empty2 = on_clone_modifiers
        self.assertTrue(pers_id(None) is None)
        self.assertTrue(pers_id(None) is None)
        self.assertTrue(pers_load(None) is None)
        self.assertTrue(pers_load(None) is None)
        self.assertTrue(empty1 == [])
        self.assertTrue(empty2 == [])

        repo_clone = createContent('RelationsType')
        modifier.afterRetrieveModifier(source, repo_clone)
        self.assertTrue(repo_clone.single is source.single)
        self.assertTrue(repo_clone.multiple is source.multiple)

        # Add some relations
        source.single = RelationValue(intids.getId(target))
        source.multiple = [RelationValue(intids.getId(target))]

        # Update relations
        from zope.lifecycleevent import ObjectModifiedEvent
        from zope.event import notify
        notify(ObjectModifiedEvent(source))

        modifier = SkipRelations('modifier', 'Modifier')
        on_clone_modifiers = modifier.getOnCloneModifiers(source)
        pers_id, pers_load, empty1, empty2 = on_clone_modifiers
        self.assertTrue(pers_id(source.single))
        self.assertTrue(pers_id(source.multiple))
        self.assertTrue(pers_load(source.single) is None)
        self.assertTrue(pers_load(source.multiple) is None)
        self.assertTrue(empty1 == [])
        self.assertTrue(empty2 == [])

        repo_clone = createContent('RelationsType')
        modifier.afterRetrieveModifier(source, repo_clone)
        self.assertTrue(repo_clone.single is source.single)
        self.assertTrue(repo_clone.multiple is source.multiple)
예제 #12
0
    def create_main_task(self, templatefolder, selected_templates):
        highest_deadline = max(
            [template.deadline for template in selected_templates])

        data = dict(
            title=templatefolder.title,
            issuer=self.replace_interactive_user('current_user'),
            responsible=self.replace_interactive_user('current_user'),
            responsible_client=get_current_org_unit().id(),
            task_type='direct-execution',
            deadline=date.today() +
            timedelta(highest_deadline + MAIN_TASK_DEADLINE_DELTA),
        )

        main_task = createContent('opengever.task.task', **data)
        notify(ObjectCreatedEvent(main_task))
        main_task = addContentToContainer(
            self.context, main_task, checkConstraints=True)

        self.mark_as_generated_from_tasktemplate(main_task)

        # set the main_task in to the in progress state
        api.content.transition(obj=main_task,
                               transition='task-transition-open-in-progress')

        return main_task
예제 #13
0
def configure_members_folder(portal, target_language):
    members_id = 'Members'

    if members_id not in portal.keys():
        title = _translate(u'members-title', target_language, u'Users')
        description = _translate(u'members-description', target_language,
                                 u"Site Users")
        container = createContent('Folder', id=members_id,
                                  title=title,
                                  description=description)
        container = addContentToContainer(portal, container)
        container.setOrdering('unordered')
        container.reindexObject()
        _publish(container)

        # set member search as default layout to Members Area
        container.setLayout('@@member-search')

        # Block all right column portlets by default
        manager = queryUtility(IPortletManager, name='plone.rightcolumn')
        if manager is not None:
            assignable = getMultiAdapter(
                (container, manager),
                ILocalPortletAssignmentManager
            )
            assignable.setBlacklistStatus('context', True)
            assignable.setBlacklistStatus('group', True)
            assignable.setBlacklistStatus('content_type', True)
예제 #14
0
def configure_members_folder(portal, target_language):
    members_id = 'Members'

    if members_id not in portal.keys():
        title = _translate(u'members-title', target_language, u'Users')
        description = _translate(u'members-description', target_language,
                                 u'Site Users')
        container = createContent('Folder',
                                  id=members_id,
                                  title=title,
                                  description=description,
                                  language=target_language.replace(
                                      '_', '-').lower())
        container = addContentToContainer(portal, container)
        container.setOrdering('unordered')
        container.reindexObject()

        # set member search as default layout to Members Area
        container.setLayout('@@member-search')

        # Block all right column portlets by default
        manager = queryUtility(IPortletManager, name='plone.rightcolumn')
        if manager is not None:
            assignable = getMultiAdapter((container, manager),
                                         ILocalPortletAssignmentManager)
            assignable.setBlacklistStatus('context', True)
            assignable.setBlacklistStatus('group', True)
            assignable.setBlacklistStatus('content_type', True)
예제 #15
0
    def setUpPloneSite(self, portal):
        # XXX: do not install (yet) PFG in Plone 5
        if HAS_PFG and PLONE_VERSION < '5.0':
            self.applyProfile(portal, 'Products.PloneFormGen:default')

        # Install into Plone site using portal_setup
        self.applyProfile(portal, 'collective.cover:default')
        self.applyProfile(portal, 'collective.cover:testfixture')
        portal['my-image'].setImage(generate_jpeg(50, 50))
        portal['my-image1'].setImage(generate_jpeg(50, 50))
        portal['my-image2'].setImage(generate_jpeg(50, 50))
        portal['my-file'].setFile(loadFile('lorem_ipsum.txt'))
        portal['my-file'].reindexObject()

        portal['my-news-item'].setImage(generate_jpeg(50, 50))

        # Setup one a dexterity item
        from plone.dexterity.utils import createContent, addContentToContainer
        from plone.namedfile.file import NamedBlobImage as NamedImageFile
        context = createContent('testcontent',
                                id='my-dexterity-item',
                                title=u'My dexterity item')

        context.image = NamedImageFile(generate_jpeg(128, 128))
        addContentToContainer(portal, context, checkConstraints=False)

        portal_workflow = portal.portal_workflow
        portal_workflow.setChainForPortalTypes(['Collection'],
                                               ['plone_workflow'],)

        # Prevent kss validation errors in Plone 4.2
        portal_kss = getattr(portal, 'portal_kss', None)
        if portal_kss:
            portal_kss.getResource('++resource++plone.app.z3cform').setEnabled(False)
예제 #16
0
def configure_members_folder(portal, target_language):
    members_id = 'Members'

    if members_id not in portal.keys():
        title = _translate(u'members-title', target_language, u'Users')
        description = _translate(u'members-description', target_language,
                                 u"Site Users")
        container = createContent('Folder', id=members_id,
                                  title=title,
                                  description=description)
        container = addContentToContainer(portal, container)
        container.setOrdering('unordered')
        container.reindexObject()
        _publish(container)

        # add index_html to Members area
        if 'index_html' not in container:
            container._setObject('index_html', PythonScript('index_html'))
            index_html = getattr(container, 'index_html')
            index_html.write(member_indexhtml)
            index_html.ZPythonScript_setTitle('User Search')

        # Block all right column portlets by default
        manager = queryUtility(IPortletManager, name='plone.rightcolumn')
        if manager is not None:
            assignable = getMultiAdapter(
                (container, manager),
                ILocalPortletAssignmentManager
            )
            assignable.setBlacklistStatus('context', True)
            assignable.setBlacklistStatus('group', True)
            assignable.setBlacklistStatus('content_type', True)
예제 #17
0
def create_subtask(task, data):
    subtask = createContent('opengever.task.task',
                            id=data['title'],
                            **data)
    notify(ObjectCreatedEvent(subtask))
    subtask = addContentToContainer(task, subtask,
                                    checkConstraints=True)

    for schemata in iterSchemata(subtask):
        super_repr = schemata(task)
        repr = schemata(subtask)

        for name, field in schema.getFieldsInOrder(schemata):
            if name in data:
                value = data[name]

            else:
                value = getattr(super_repr, name, None)

            setattr(repr, name, value)

    activity = TaskAddedActivity(subtask, task.REQUEST, task)
    activity.record()

    notify(ObjectModifiedEvent(subtask))
    return subtask
예제 #18
0
    def __init__(self, form, request, context):
        fti = queryUtility(IDexterityFTI, name=form.portal_type)
        if IDraftable.__identifier__ in fti.behaviors:
            draft = getCurrentDraft(request, create=False)
            target = getattr(draft, '_draftAddFormTarget',
                             createContent(form.portal_type))

            if draft is None:
                IMutableUUID(target).set('++add++%s' % form.portal_type)
                beginDrafting(target.__of__(context), None)
                draft = getCurrentDraft(request, create=True)
                draft._draftAddFormTarget = target

                # Disable Plone 5 implicit CSRF when no form action
                if HAS_PLONE_PROTECT:
                    if not ([key for key in request.form
                             if key.startswith('form.buttons.')]):
                        alsoProvides(request, IDisableCSRFProtection)
            else:
                current = ICurrentDraftManagement(request)
                current.mark()

            context = DraftProxy(draft, target.__of__(context))
            alsoProvides(request, IAddFormDrafting)

        super(DefaultAddFormFieldWidgets, self).__init__(form, request, context)  # noqa
예제 #19
0
    def createNewDay(self, new_date, content):
        id = new_date.strftime('%a-%b.-%d-%Y')
        id = queryUtility(IURLNormalizer).normalize(id)
        #Need to copy in all of the conects of the original day

        nday = createContent(
            'collective.dexterity.appointments.appointmentday',
            appointment_date=new_date)
        new_day = addContentToContainer(self.parent, nday)

        new_day.manage_pasteObjects(content)

        #Yes I know this is gross, but under time restrictions.
        for time_slot in new_day.contentItems():
            time_slot[1].start = time_slot[1].start + (
                new_day.appointment_date - time_slot[1].start.date())
            time_slot[1].end = time_slot[1].end + (new_day.appointment_date -
                                                   time_slot[1].end.date())

        new_day.reindexObject()

        import pdb
        pdb.set_trace()

        return new_day
    def test_object_access(self):
        # Make sure that our ability to get at a private object is dependent
        # on login.

        portal = self.portal

        from plone.dexterity.utils import createContent
        test_item = createContent('simple_test_type', title=u'The Meaning of Life')
        test_item.id = 'test_item'
        self.portal['test_item'] = test_item

        ap = AmbidexterityProgram("myid = context.getId()")
        ap.execute(dict(context=portal))
        ap = AmbidexterityProgram("myitem = context.test_item")
        ap.execute(dict(context=portal))
        ap = AmbidexterityProgram("myitem = context.test_item.getId()")
        ap.execute(dict(context=portal))

        # rock our world
        pat.logout()

        # we should still be able to get at the portal object
        ap = AmbidexterityProgram("myid = context.getId()")
        ap.execute(dict(context=portal))

        # But not our test item
        ap = AmbidexterityProgram("myitem = context.test_item")
        with self.assertRaises(Unauthorized):
            ap.execute(dict(context=portal))
        ap = AmbidexterityProgram("myitem = context.test_item.getId()")
        with self.assertRaises(Unauthorized):
            ap.execute(dict(context=portal))
예제 #21
0
def create_frontpage(portal, target_language):
    frontpage_id = 'front-page'

    if frontpage_id not in portal.keys():
        title = _translate(u'front-title', target_language,
                           u"Welcome to Plone")
        description = _translate(
            u'front-description', target_language,
            u"Congratulations! You have successfully installed Plone.")
        content = createContent('Document',
                                id=frontpage_id,
                                title=title,
                                description=description,
                                language=target_language)
        content = addContentToContainer(portal, content)
        front_text = None
        if target_language != 'en':
            util = queryUtility(ITranslationDomain, 'plonefrontpage')
            if util is not None:
                translated_text = util.translate(
                    u'front-text', target_language=target_language)
                if translated_text != u'front-text':
                    front_text = translated_text
        request = getattr(portal, 'REQUEST', None)
        if front_text is None and request is not None:
            view = queryMultiAdapter((portal, request),
                                     name='plone-frontpage-setup')
            if view is not None:
                front_text = bodyfinder(view.index()).strip()
        content.text = RichTextValue(front_text, 'text/html',
                                     'text/x-html-safe')

        portal.setDefaultPage('front-page')
        _publish(content)
        content.reindexObject()
예제 #22
0
def add_invitation_to_context(context, invitation):
    ''' adds an invitation to a invitation folder in the provided context
        if no invitation folder is found, it tries to creates one default
    '''
    import pdb
    pdb.set_trace()
    portal = getSite()
    catalog = getToolByName(portal, "portal_catalog")
    query = {}
    query['object_provides'] = IInvitationFolder.__identifier__
    query['path'] = dict(query='/'.join(context.getPhysicalPath()))
    invitationfolders = catalog(query)

    if not invitationfolders:
        invitationfolder = createContent(
            portal_type='hejasverige.invitationfolder',
            title='invitations',
            description='folder for invitations')

        try:
            folder = addContentToContainer(container=context,
                                           object=invitationfolder,
                                           checkConstraints=True)
            folder.reindexObject()
        except Exception, ex:
            err = 'Unable to create invitaiton folder in', str(
                folder), 'due to', str(ex)
            logger.exception(err)
            return None
예제 #23
0
def create_subtask(task, data):
    subtask = createContent('opengever.task.task',
                            id=data['title'],
                            **data)
    notify(ObjectCreatedEvent(subtask))
    subtask = addContentToContainer(task, subtask,
                                    checkConstraints=True)

    for schemata in iterSchemata(subtask):
        super_repr = schemata(task)
        repr = schemata(subtask)

        for name, field in schema.getFieldsInOrder(schemata):
            if name in data:
                value = data[name]

            else:
                value = getattr(super_repr, name, None)

            setattr(repr, name, value)

    activity = TaskAddedActivity(subtask, task.REQUEST, task)
    activity.record()

    notify(ObjectModifiedEvent(subtask))
    return subtask
예제 #24
0
    def create_main_task(self, templatefolder, selected_templates):
        highest_deadline = max(
            [template.deadline for template in selected_templates])

        deadline_timedelta = api.portal.get_registry_record(
            'deadline_timedelta', interface=ITaskSettings)

        data = dict(
            title=templatefolder.title,
            issuer=self.replace_interactive_user('current_user'),
            responsible=self.replace_interactive_user('current_user'),
            responsible_client=get_current_org_unit().id(),
            task_type='direct-execution',
            deadline=date.today() +
            timedelta(highest_deadline + deadline_timedelta),
        )

        main_task = createContent('opengever.task.task', **data)
        notify(ObjectCreatedEvent(main_task))
        main_task = addContentToContainer(self.context,
                                          main_task,
                                          checkConstraints=True)

        self.mark_as_generated_from_tasktemplate(main_task)

        # set the main_task in to the in progress state
        api.content.transition(obj=main_task,
                               transition='task-transition-open-in-progress')

        return main_task
예제 #25
0
 def create(self, data):
     ''' Create objects '''
     talkfields = ['speakers','title','text','talk_type','track','language','level','references','iul',]
     talkinfo = dict([(k,data.get(k,'')) for k in talkfields])
     if self.inside_track:
         talkinfo['track'] = self.context.UID()
     talk = createContent('apyb.papers.talk',checkConstraints=True, **talkinfo)
     return talk
예제 #26
0
def create_sub_folder(container, id_, title):
    content = createContent('FlowSubFolder', title=title)
    IOwned(content).changeOwnership(IOwned(container).getOwner())
    content.id = id_
    content.schema = container.schema
    content.schema_digest = container.schema_digest
    addContentToContainer(container, content, checkConstraints=False)
    return container[id_]
예제 #27
0
def getTopicWithLabel(topicObj, label):
    for obj in topicObj.objectValues():
        if obj.Title() == label:
            return obj
    newtopic = createContent('collective.topictree.topic', title=label)
    addContentToContainer(topicObj, newtopic)
    topicObj = topicObj[newtopic.id]
    return topicObj
 def test_chooseName(self):
     namechooser = INameChooser(self.activities)
     obj = createContentInContainer(self.activities,
         'upfront.assessmentitem.content.assessmentitem')        
     self.assertEqual(namechooser.chooseName(None, obj), 'q001')
     obj = createContent(
         'upfront.assessmentitem.content.assessmentitem')
     self.assertEqual(namechooser.chooseName(None, obj), 'q002')
     self.assertEqual(namechooser.chooseName('custom', obj), 'custom')
예제 #29
0
파일: filefolder.py 프로젝트: garbas/unep
    def __call__(self):
        if self.request.REQUEST_METHOD != 'POST':
            return

        filedata = self.request.form.get("file", None)
        if not filedata:
            return

        filename = safe_unicode(filedata.filename.decode("utf8"))
        content_type = guess_type(filename)[0] or ""
        language = splitext(filename)[0][-2:]
        obj_id = hashlib.md5(splitext(filename)[0][:-3]).hexdigest()

        # otherwise I get ZPublisher.Conflict ConflictErrors
        # when uploading multiple files
        upload_lock.acquire()

        try:
            transaction.begin()

            file_ = NamedBlobFile(
                data=filedata,
                filename=filename,
                contentType=content_type,
            )

            if obj_id in self.context.objectIds():
                obj = self.context[obj_id]
                setattr(obj, language + '_file', file_)
            else:
                obj = createContent(
                    'unep.file',
                    **({language + '_file': file_})
                )
                obj.id = obj_id
                obj = addContentToContainer(self.context, obj)

            obj.reindexObject()
            transaction.commit()

        finally:
            upload_lock.release()

        if language == 'en':
            language = 'English'
        elif language == 'es':
            language = 'Spanish'
        elif language == 'fr':
            language = 'French'

        self.request.RESPONSE.setHeader('content-type', 'application/json')
        return json.dumps({
            'uid': obj.UID(),
            'title': obj.title,
            'language': language,
            'url': obj.absolute_url(),
        })
예제 #30
0
    def test_add_to_portal_root_save(self):
        browser = Browser(self.layer['app'])
        browser.handleErrors = False

        # Login
        browser.open(self.portal.absolute_url() + '/login')
        browser.getControl(name='__ac_name').value = TEST_USER_NAME
        browser.getControl(name='__ac_password').value = TEST_USER_PASSWORD
        browser.getControl('Log in').click()

        # Enter the add screen for a temporary portal_factory-managed object
        browser.open(self.portal.absolute_url() + '/++add++MyDocument')

        # We should now have cookies with the drafts information
        cookies = browser.cookies.forURL(browser.url)
        self.assertEqual('"/plone"', cookies['plone.app.drafts.path'])
        self.assertEqual(  # noqa
            '"%2B%2Badd%2B%2BMyDocument"',
            cookies['plone.app.drafts.targetKey'],
        )
        self.assertNotIn(
            'plone.app.drafts.draftName',
            browser.cookies.forURL(browser.url),
        )

        # Simulate save action for creating a draft
        storage = queryUtility(IDraftStorage)
        draft = storage.createDraft(TEST_USER_ID, '++add++MyDocument')
        target = createContent('MyDocument')
        draft._draftAddFormTarget = target
        transaction.commit()

        browser.cookies.create(
            DRAFT_NAME_KEY,
            u'draft',
            path='/plone',
        )

        # We can now fill in the required fields and save. The cookies should
        # expire.

        browser.getControl(
            name='form.widgets.IDublinCore.title').value = u'New Document'
        browser.getControl(name='form.buttons.save').click()
        self.assertNotIn(
            'plone.app.drafts.targetKey',
            browser.cookies.forURL(browser.url),
        )
        self.assertNotIn(
            'plone.app.drafts.path',
            browser.cookies.forURL(browser.url),
        )
        self.assertNotIn(
            'plone.app.drafts.draftName',
            browser.cookies.forURL(browser.url),
        )
예제 #31
0
    def test_add_to_portal_root_save(self):
        browser = Browser(self.layer['app'])
        browser.handleErrors = False

        # Login
        browser.open(self.portal.absolute_url() + '/login')
        browser.getControl(name='__ac_name').value = TEST_USER_NAME
        browser.getControl(name='__ac_password').value = TEST_USER_PASSWORD
        browser.getControl('Log in').click()

        # Enter the add screen for a temporary portal_factory-managed object
        browser.open(self.portal.absolute_url() + '/++add++MyDocument')

        # We should now have cookies with the drafts information
        cookies = browser.cookies.forURL(browser.url)
        self.assertEqual('"/plone"', cookies['plone.app.drafts.path'])
        self.assertEqual(  # noqa
            '"%2B%2Badd%2B%2BMyDocument"',
            cookies['plone.app.drafts.targetKey'],
        )
        self.assertNotIn(
            'plone.app.drafts.draftName',
            browser.cookies.forURL(browser.url),
        )

        # Simulate save action for creating a draft
        storage = queryUtility(IDraftStorage)
        draft = storage.createDraft(TEST_USER_ID, '++add++MyDocument')
        target = createContent('MyDocument')
        draft._draftAddFormTarget = target
        transaction.commit()

        browser.cookies.create(
            DRAFT_NAME_KEY,
            u'draft',
            path='/plone',
        )

        # We can now fill in the required fields and save. The cookies should
        # expire.

        browser.getControl(
            name='form.widgets.IDublinCore.title').value = u'New Document'
        browser.getControl(name='form.buttons.save').click()
        self.assertNotIn(
            'plone.app.drafts.targetKey',
            browser.cookies.forURL(browser.url),
        )
        self.assertNotIn(
            'plone.app.drafts.path',
            browser.cookies.forURL(browser.url),
        )
        self.assertNotIn(
            'plone.app.drafts.draftName',
            browser.cookies.forURL(browser.url),
        )
예제 #32
0
    def __call__(self):
        if self.request.REQUEST_METHOD != 'POST':
            return

        filedata = self.request.form.get("file", None)
        if not filedata:
            return

        filename = safe_unicode(filedata.filename.decode("utf8"))
        content_type = guess_type(filename)[0] or ""
        language = splitext(filename)[0][-2:]
        obj_id = hashlib.md5(splitext(filename)[0][:-3]).hexdigest()

        # otherwise I get ZPublisher.Conflict ConflictErrors
        # when uploading multiple files
        upload_lock.acquire()

        try:
            transaction.begin()

            file_ = NamedBlobFile(
                data=filedata,
                filename=filename,
                contentType=content_type,
            )

            if obj_id in self.context.objectIds():
                obj = self.context[obj_id]
                setattr(obj, language + '_file', file_)
            else:
                obj = createContent('unep.file', **({
                    language + '_file': file_
                }))
                obj.id = obj_id
                obj = addContentToContainer(self.context, obj)

            obj.reindexObject()
            transaction.commit()

        finally:
            upload_lock.release()

        if language == 'en':
            language = 'English'
        elif language == 'es':
            language = 'Spanish'
        elif language == 'fr':
            language = 'French'

        self.request.RESPONSE.setHeader('content-type', 'application/json')
        return json.dumps({
            'uid': obj.UID(),
            'title': obj.title,
            'language': language,
            'url': obj.absolute_url(),
        })
예제 #33
0
    def create(self, container, data):

        title = data['title']
        if not isinstance(title, unicode):
            title = title.decode('utf-8')

        obj = createContent(data['portal_type'], id=title, title=title)
        notify(ObjectCreatedEvent(obj))
        obj = addContentToContainer(container, obj, checkConstraints=True)
        return obj
 def test_checkName(self):
     namechooser = INameChooser(self.activities)
     normalizer = getUtility(IURLNormalizer)
     obj = createContent(
         'upfront.assessmentitem.content.assessmentitem')
     test_name = normalizer.normalize('Q001')
     self.assertEqual(namechooser.checkName(test_name, obj), True)
     obj = createContentInContainer(self.activities,
         'upfront.assessmentitem.content.assessmentitem')
     self.assertEqual(namechooser.checkName(test_name, obj), False)
예제 #35
0
 def create(self, data):
     ''' Create objects '''
     trainingfields = ['speakers', 'title', 'text', 'track', 'language',
                       'level', 'iul']
     traininginfo = dict([(k, data.get(k, '')) for k in trainingfields])
     if self.inside_track:
         traininginfo['track'] = IUUID(self.context)
     training = createContent('training',
                              checkConstraints=True, **traininginfo)
     return training
예제 #36
0
    def setUp(self):
        """Custom shared utility setup for tests."""
        self.portal = self.layer['portal']
        self.pr = self.portal.portal_resources

        applyProfile(self.portal, 'collective.ambidexterity:testing')

        test_item = createContent('simple_test_type',
                                  title=u'The Meaning of Life')
        test_item.id = 'test_item'
        self.portal['test_item'] = test_item
예제 #37
0
    def create_in(self, container):
        obj = createContent(self.portal_type, title=self.title)
        notify(ObjectCreatedEvent(obj))

        # insert data from collectors
        collectors = getAdapters((obj.__of__(container),), IDataCollector)
        for name, collector in collectors:
            collector.insert(self.data[name])

        obj = addContentToContainer(container, obj, checkConstraints=True)
        return obj
예제 #38
0
def pasteAsAlias(context, cb_copy_data=None, request=None):
    """Paste the clipboard contents as an alias. Either pass the data, or a
    valid request with the __cp key.
    """

    cp = None

    if cb_copy_data is not None:
        cp = cb_copy_data
    elif request and request.has_key('__cp'):
        cp = request['__cp']
    else:
        cp = None

    if cp is None:
        raise ValueError("No clipboard data")

    try:
        cp = _cb_decode(cp)
    except:
        raise ValueError("Can't decode clipboard: %r" % cp)

    oblist = []
    app = context.getPhysicalRoot()

    failed = []
    success = []

    for mdata in cp[1]:
        m = OFS.Moniker.loadMoniker(mdata)
        try:
            ob = m.bind(app)
        except:
            raise ValueError("Objects not found in %s" % app)
        oblist.append(ob)

    intids = getUtility(IIntIds)

    for ob in oblist:
        relation = RelationValue(intids.getId(ob))
        alias = createContent('collective.alias', _aliasTarget=relation)

        notify(ObjectCreatedEvent(alias))

        name = INameChooser(context).chooseName(ob.getId(), alias)
        alias.id = name

        new_name = context._setObject(name, alias)

        # XXX: When we move to CMF 2.2, an event handler will take care of this
        new_object = context._getOb(new_name)
        new_object.notifyWorkflowCreated()

    return ' '.join(success) + ' '.join(failed)
예제 #39
0
    def create(self, data):
        ''' Create objects '''
        reg_fields = ['discount_code']
        data['registration_type'] = self.registration_type

        reg_data = dict([(k, data[k]) for k in reg_fields])
        reg_data['email'] = data['email']
        reg_data['city'] = data['city']
        reg_data['state'] = data['state']
        reg_data['country'] = data['country']
        reg_data['registration_type'] = data['registration_type']
        registration = createContent('registration',
                                     checkConstraints=True, **reg_data)

        for k in reg_fields:
            del data[k]
        # Create attendee object
        attendee = createContent('attendee',
                                 checkConstraints=True, **data)
        return [registration, attendee]
예제 #40
0
    def create_in(self, container):
        obj = createContent(self.portal_type, title=self.title)
        notify(ObjectCreatedEvent(obj))

        # insert data from collectors
        collectors = getAdapters((obj.__of__(container), ), IDataCollector)
        for name, collector in collectors:
            collector.insert(self.data[name])

        obj = addContentToContainer(container, obj, checkConstraints=True)
        return obj
def pasteAsAlias(context, cb_copy_data=None, request=None):
    """Paste the clipboard contents as an alias. Either pass the data, or a
    valid request with the __cp key.
    """

    cp = None

    if cb_copy_data is not None:
        cp = cb_copy_data
    elif request and request.has_key("__cp"):
        cp = request["__cp"]
    else:
        cp = None

    if cp is None:
        raise ValueError("No clipboard data")

    try:
        cp = _cb_decode(cp)
    except:
        raise ValueError("Can't decode clipboard: %r" % cp)

    oblist = []
    app = context.getPhysicalRoot()

    failed = []
    success = []

    for mdata in cp[1]:
        m = OFS.Moniker.loadMoniker(mdata)
        try:
            ob = m.bind(app)
        except:
            raise ValueError("Objects not found in %s" % app)
        oblist.append(ob)

    intids = getUtility(IIntIds)

    for ob in oblist:
        relation = RelationValue(intids.getId(ob))
        alias = createContent("collective.alias", _aliasTarget=relation)

        notify(ObjectCreatedEvent(alias))

        name = INameChooser(context).chooseName(ob.getId(), alias)
        alias.id = name

        new_name = context._setObject(name, alias)

        # XXX: When we move to CMF 2.2, an event handler will take care of this
        new_object = context._getOb(new_name)
        new_object.notifyWorkflowCreated()

    return " ".join(success) + " ".join(failed)
예제 #42
0
def create_events_topic(portal, target_language):
    events_id = 'events'

    if events_id not in portal.keys():
        title = _translate(u'events-title', target_language, u'Events')
        description = _translate(u'events-description', target_language,
                                 u'Site Events')
        container = createContent('Folder',
                                  id=events_id,
                                  title=title,
                                  description=description,
                                  language=target_language)
        container = addContentToContainer(portal, container)
        _createObjectByType('Collection',
                            container,
                            id='aggregator',
                            title=title,
                            description=description)
        aggregator = container['aggregator']

        # Constain types
        allowed_types = [
            'Event',
        ]

        _setup_constrains(container, allowed_types)

        container.setOrdering('unordered')
        container.setDefaultPage('aggregator')
        _publish(container)

        # Set the Collection criteria.
        #: Sort on the Event start date
        aggregator.sort_on = u'start'
        aggregator.sort_reversed = True
        #: Query by Type, Review State and Event start date after today
        aggregator.query = [
            {
                'i': 'portal_type',
                'o': 'plone.app.querystring.operation.selection.is',
                'v': ['Event']
            },
            {
                'i': 'start',
                'o': 'plone.app.querystring.operation.date.afterToday',
                'v': ''
            },
            {
                'i': 'review_state',
                'o': 'plone.app.querystring.operation.selection.is',
                'v': ['published']
            },
        ]
        _publish(aggregator)
예제 #43
0
    def add_relation(self, id, member_type='supporter'):
        relobj = createContent(portal_type='hejasverige.relation',
                                 foreign_id=id,
                                )

        try:
            item = addContentToContainer(container=self.__parent__, object=relobj, checkConstraints=False)
        except Exception, ex:
            err = 'Unable to add relation with id', id, 'to', str(self.__parent__), 'due to', str(ex)
            print err
            #log(err)
            return None
    def load(self, klass):
        registry = component.queryUtility(interfaces.IPeerRegistry)
        if klass in registry:
            raise KeyError("Duplicate %r"%klass)

        instance = createContent(klass)
        alsoProvides(instance, interfaces.IMirrored)

        transformer = self.transform(instance)
        peer_class = self.peer(instance, transformer)

        registry[klass] = peer_class
예제 #45
0
    def create_mail_object(self, message):
        # lookup the type of the 'message' field and create an instance
        fti = getUtility(IDexterityFTI, name=self.portal_type)
        schema = fti.lookupSchema()
        field_type = getFields(schema)['message']._type
        message_value = field_type(
            data=message,
            contentType='message/rfc822', filename=u'message.eml')

        # create content object
        content = createContent(self.portal_type, message=message_value)
        return content
예제 #46
0
    def add_person(self, container, person):
        personobject = createContent(portal_type='hejasverige.person',
                                 first_name=person.get('first_name', None), last_name=person.get('last_name', None), personal_id=person.get('personal_id', None)
                                )

        #import pdb; pdb.set_trace()

        try:
            item = addContentToContainer(container=container, object=personobject, checkConstraints=False)
        except Exception, ex:
            err = 'Unable to add person with id', id, 'to', str(container), 'due to', str(ex)
            logger.exception(err)
            return None
예제 #47
0
def create_news_topic(portal, target_language):
    news_id = 'news'

    if news_id not in portal.keys():
        title = _translate(u'news-title', target_language, u'News')
        description = _translate(u'news-description', target_language,
                                 u'Site News')
        container = createContent('Folder',
                                  id=news_id,
                                  title=title,
                                  description=description,
                                  language=target_language.replace(
                                      '_', '-').lower())
        container = addContentToContainer(portal, container)
        _createObjectByType('Collection',
                            container,
                            id='aggregator',
                            title=title,
                            description=description)
        aggregator = container['aggregator']

        # Constrain types
        allowed_types = [
            'News Item',
        ]
        _setup_constrains(container, allowed_types)

        container.setOrdering('unordered')
        container.setDefaultPage('aggregator')
        _publish(container)

        # Set the Collection criteria.
        #: Sort on the Effective date
        aggregator.sort_on = u'effective'
        aggregator.sort_reversed = True
        #: Query by Type and Review State
        aggregator.query = [
            {
                'i': u'portal_type',
                'o': u'plone.app.querystring.operation.selection.any',
                'v': [u'News Item'],
            },
            {
                'i': u'review_state',
                'o': u'plone.app.querystring.operation.selection.any',
                'v': [u'published'],
            },
        ]
        aggregator.setLayout('summary_view')

        _publish(aggregator)
예제 #48
0
    def create(self, container, data):

        title = data['title']
        if not isinstance(title, unicode):
            title = title.decode('utf-8')

        obj = createContent(data['portal_type'],
                            id=title,
                            title=title)
        notify(ObjectCreatedEvent(obj))
        obj = addContentToContainer(container,
                                    obj,
                                    checkConstraints=True)
        return obj
예제 #49
0
 def add_content(self, typename, name, parent, **kwargs):
     kwargs['title'] = kwargs.get('title', name)
     tool = getToolByName(self.portal, 'portal_types')
     fti = tool.getTypeInfo(typename)
     if IDexterityFTI.providedBy(fti):
         o = createContent(typename, **kwargs)
         o.id = name
         parent._setObject(name, o)
     else:
         parent.invokeFactory(typename, name)
     o = parent[name]
     o.setTitle(kwargs.get('title'))
     o.reindexObject()
     return o
예제 #50
0
    def setUpPloneSite(self, portal):
        # install into the Plone site
        applyProfile(portal, 'plone.app.deco:default')

        # add a manager user
        portal['acl_users'].userFolderAddUser('admin',
                                              'secret',
                                              ['Manager'],
                                              [])

        # add a plone.page type, where we can test with
        page = createContent("page")
        page.id = 'page'
        portal._setObject('page', page)
예제 #51
0
    def create(self, data):
        data['timezone'] = default_timezone()

        self.prepare_coordinates(data)
        self.prepare_submission(data)

        content = createContent('seantis.dir.events.item', **data)

        if IAcquirer.providedBy(content):
            content = content.__of__(aq_inner(self.context))

        # must be done before adding to the container
        self.apply_submission(content)

        return aq_base(content)
예제 #52
0
    def create(self, data):
        data['timezone'] = default_timezone()

        self.prepare_coordinates(data)
        self.prepare_submission(data)

        content = createContent('seantis.dir.events.item', **data)

        if IAcquirer.providedBy(content):
            content = content.__of__(aq_inner(self.context))

        # must be done before adding to the container
        self.apply_submission(content)

        return aq_base(content)
예제 #53
0
def createDXSubcontainer(container, type, id, title, title_msgid, target_language):
    existing_content = container.keys()
    if id not in existing_content:
        title = _translate(title_msgid, target_language, title)
        #description = _translate(u'about-description', target_language,
        #                         u"About us.")
        
        subcontainer = createContent(type, id=id,
                                     title=title,
                                     #description=description
                                     )
        subcontainer = addContentToContainer(container, subcontainer)
        
        subcontainer.setOrdering('unordered')
        subcontainer.reindexObject()
        _publish(subcontainer)
예제 #54
0
    def add_person(self, container, person):
        personobject = createContent(portal_type='hejasverige.person',
                                     first_name=person.get('first_name', None),
                                     last_name=person.get('last_name', None),
                                     personal_id=person.get(
                                         'personal_id', None))

        #import pdb; pdb.set_trace()

        try:
            item = addContentToContainer(container=container,
                                         object=personobject,
                                         checkConstraints=False)
        except Exception, ex:
            err = 'Unable to add person with id', id, 'to', str(
                container), 'due to', str(ex)
            logger.exception(err)
            return None
예제 #55
0
    def after_creation_processor(self, event):
        self.manage_setLocalRoles(RV_MANAGERS_GID, ['Editor'])

        id_iter = 1
        for i in range(19):
            spot_id = 'spot_%s' % id_iter
            if spot_id in self.objectIds():
                api.portal.show_message(message="Spot Id: %s already exists." %
                                        spot_id,
                                        request=self.REQUEST,
                                        type='info')
            else:
                spot_obj = createContent('docent.hoa.rvspot',
                                         id=spot_id.encode('ascii', 'ignore'),
                                         title=u"Spot %s" % id_iter)
                self._setObject(spot_id.encode('ascii', 'ignore'), spot_obj)
                setattr(spot_obj, 'spot_id', id_iter)

            id_iter += 1
예제 #56
0
 def add_invitation(self, container, invitation):
     invitationobject = createContent(
         portal_type='hejasverige.invitation',
         sender_id=invitation.get('sender_id', None),
         first_name=invitation.get('first_name', None),
         last_name=invitation.get('last_name', None),
         personal_id=invitation.get('personal_id', None),
         recipient_email=invitation.get('recipient_email', None),
         invitation_expires=invitation.get('invitation_expires', None))
     try:
         item = addContentToContainer(container=container,
                                      object=invitationobject,
                                      checkConstraints=False)
         item.reindexObject()
     except Exception, ex:
         err = 'Unable to add invitation with id', id, 'to', str(
             container), 'due to', str(ex)
         logger.exception(err)
         return None
예제 #57
0
    def do_POST(self):
        if not self.has_permission('Euphorie: Manage country'):
            raise Unauthorized()

        sector = createContent('euphorie.sector')
        # Assign a temporary id. Without this security caching logic breaks due to use of
        # getPhysicalPath() as cache id. This calls getId() to get the id,
        # which uses __name__ if no id is set, but __name__ is a computer attribute which
        # calls getId. BOOM!
        sector.id = str(id(sector))
        try:
            self.update_object(self.attributes, ISector,
                               sector.__of__(self.context))
        except ValueError as e:
            return {'type': 'error', 'message': str(e)}
        del sector.id
        sector = addContentToContainer(self.context.country, sector, False)
        view = SectorView(sector, self.request)
        return view.do_GET()
예제 #58
0
    def create_or_update_proxy(self):
        if self.group_status != "moderated":
            return
        if self.proxy is None:
            self.proxy = createContent(
                "collective.rcse.proxygroup",
                checkConstraints=False,
                title=self.title(),
                description=self.description()
            )
            self.proxy.id = self.proxy_id
            self.container._setObject(self.proxy_id, self.proxy)
        else:
            #just update the proxy
            if self.proxy.Title() != self.title():
                self.proxy.setTitle(self.title())
            if self.proxy.Description() != self.description():
                self.proxy.setDescription(self.description())

        self.proxy.reindexObject()