Example #1
0
    def items(self):
        """Return brains"""
        query = {
            'sort_limit': 3,
            'sort_on': 'end',
            'sort_order': 'descending',
        }
        if self.view.subject():
            query['Subject'] = self.view.subject()

        res = []
        languages = getToolByName(self.context, 'portal_languages')
        code = languages.getPreferredLanguage()
        for item in IAdapter(self.context).get_content_listing(IATEvent,
                                                               Language=code,
                                                               **query):
            res.append({
                'client': item.contactName,
                'client_url': item.eventUrl,
                'description': item.Description(),
                'location': item.location,
                'subjects': self._subjects(item),
                'title': item.Title(),
                'url': item.getURL(),
                'year': IEventAdapter(item).year(),
            })
        return res
Example #2
0
    def services(self):
        """Return list of dictionary

        :rtype: list
        """
        res = []
        languages = getToolByName(self.context, 'portal_languages')
        code = languages.getPreferredLanguage()
        if 'Subject' not in self.request.form:
            for item in IAdapter(self.context).get_content_listing(
                    IATDocument,
                    depth=1,
                    sort_order='getObjPositionInParent',
                    Language=code):
                Subjects = item.Subject()
                if Subjects:
                    Subject = Subjects[0]
                    res.append({
                        'title':
                        item.Title(),
                        'description':
                        item.Description(),
                        'id':
                        item.id,
                        'url':
                        '{}?Subject={}'.format(self.context.absolute_url(),
                                               Subject),
                    })
        return res
Example #3
0
    def events(self):
        """Return list of dictionary

        :rtype: list
        """
        res = []
        base = IAdapter(self.context)
        before_date = '{}/01/01'.format(self.year() + 1)
        for item in base.get_content_listing(IATEvent,
                                             sort_on='start',
                                             start={
                                                 'query': [
                                                     DateTime(before_date),
                                                 ],
                                                 'range': 'max'
                                             },
                                             end={
                                                 'query': [
                                                     DateTime(),
                                                 ],
                                                 'range': 'min'
                                             }):
            res.append({
                'datetime': base.event_datetime(item),
                'description': item.Description(),
                'title': item.Title(),
                'url': item.getURL(),
            })
        return res
Example #4
0
    def test__two_folders(self):
        from Products.ATContentTypes.interfaces.folder import IATFolder
        base = IAdapter(self.portal)

        folder1 = self.portal[self.portal.invokeFactory('Folder', 'folder1')]
        folder1.reindexObject()
        folder2 = folder1[folder1.invokeFactory('Folder', 'folder2')]
        folder2.reindexObject()

        query = {}

        self.assertEqual(len(base.get_brains(**query)), 2)
        self.assertEqual(len(base.get_objects(**query)), 2)
        self.assertEqual(len(base.get_content_listing(**query)), 2)

        self.assertEqual(len(base.get_brains(interfaces=IATFolder, **query)), 2)
        self.assertEqual(len(base.get_objects(interfaces=IATFolder, **query)), 2)
        self.assertEqual(len(base.get_content_listing(interfaces=IATFolder, **query)), 2)

        query['sort_limit'] = 1
        self.assertEqual(len(base.get_brains(**query)), 1)
        self.assertEqual(len(base.get_objects(**query)), 1)
        self.assertEqual(len(base.get_content_listing(**query)), 1)

        self.assertEqual(len(base.get_brains(interfaces=IATFolder, **query)), 1)
        self.assertEqual(len(base.get_objects(interfaces=IATFolder, **query)), 1)
        self.assertEqual(len(base.get_content_listing(interfaces=IATFolder, **query)), 1)
Example #5
0
    def doc(self):
        """Return instance of ATDocument"""
        languages = getToolByName(self.context, 'portal_languages')
        code = languages.getPreferredLanguage()

        if self.subject():
            return IAdapter(self.context).get_object(IATDocument, depth=1, Subject=self.subject(), sort_on="getObjPositionInParent", Language=code)
        return self.context.get(code)
Example #6
0
    def actions(self):
        """Returns content listing of actions

        :rtype: content listing
        """
        portal_state = self.context.restrictedTraverse('@@plone_portal_state')
        path = '{}/site-actions'.format(portal_state.navigation_root_path())
        return IAdapter(self.context).get_content_listing(IATFolder, path=path, depth=1, sort_on='getObjPositionInParent')
Example #7
0
 def _brain(self):
     """Return brain"""
     languages = getToolByName(self.context, 'portal_languages')
     code = languages.getPreferredLanguage()
     return IAdapter(self.context).get_brain(IATNewsItem,
                                             path=self._path(),
                                             sort_on='effective',
                                             sort_order='descending',
                                             Language=code)
Example #8
0
    def obj(self):
        """Return ATDocument object

        :rtype: obj
        """
        adapter = IAdapter(self.context)
        if self.name:
            return adapter.get_object(IATDocument, depth=1, id=self.name)
        else:
            return adapter.get_object(IATDocument, depth=1)
Example #9
0
    def _brain(self):
        """Return dicrionary

        :rtype: dict
        """
        languages = getToolByName(self.context, 'portal_languages')
        code = languages.getPreferredLanguage()
        return IAdapter(self.context).get_brain(IATEvent,
                                                path=self._path(),
                                                sort_on='end',
                                                sort_order='descending',
                                                Language=code)
Example #10
0
    def clear_interfaces(self):
        context = aq_inner(self.context)
        adapter = IAdapter(context)
        items = {}
        omits = [
            IVersioned, IATImage, IImageContent, IATFile, IFileContent,
            IATBlobImage, IATBlobFile
        ]
        for obj in adapter.get_objects():
            if obj.id == 'carousel':
                parent = aq_parent(aq_inner(obj))
                parent.manage_delObjects(['carousel'])
                message = 'Remove carousel folder from {}.'.format('/'.join(
                    parent.getPhysicalPath()))
                logger.info(message)
                IStatusMessage(self.request).addStatusMessage(message,
                                                              type='info')
            else:
                ifaces = [
                    iface for iface in directlyProvidedBy(obj)
                    if iface not in omits
                ]
                if ifaces:
                    for iface in ifaces:
                        annotations = IAnnotations(obj)
                        if annotations.get('collective.pfg.payment'):
                            del annotations['collective.pfg.payment']
                            message = 'Remove annotations collective.pfg.payment from {}.'.format(
                                '/'.join(obj.getPhysicalPath()))
                            logger.info(message)
                            IStatusMessage(self.request).addStatusMessage(
                                message, type='info')
                        noLongerProvides(obj, iface)
                        identifier = iface.__identifier__
                        if identifier not in items:
                            items[identifier] = 1
                        else:
                            items[identifier] += 1
                    obj.reindexObject(idxs=['object_provides'])

        for key in items:
            message = '{} objects providing {} are cleared.'.format(
                items[key], key)
            logger.info(message)
            IStatusMessage(self.request).addStatusMessage(message, type='info')
        if not items:
            message = 'No objects need to be cleared.'
            logger.info(message)
            IStatusMessage(self.request).addStatusMessage(message, type='info')
        url = self.context.absolute_url()
        return self.request.response.redirect(url)
Example #11
0
    def title(self):
        """Return title from folder title

        :rtype: str
        """
        languages = getToolByName(self.context, 'portal_languages')
        code = languages.getPreferredLanguage()
        brain = IAdapter(self.context).get_brain(IATDocument, depth=1, id=code)
        if brain:
            title = brain.Title
        else:
            title = self.context.Title()
        return _(u'recent-something',
                 default=u"Recent ${something}",
                 mapping={'something': safe_unicode(title)})
Example #12
0
 def _tabs(self):
     context = aq_inner(self.context)
     portal_tabs_view = getMultiAdapter((context, self.request),
                                        name='portal_tabs_view')
     portal = self.context.restrictedTraverse(
         '@@plone_portal_state').portal()
     res = []
     languages = getToolByName(self.context, 'portal_languages')
     code = languages.getPreferredLanguage()
     for tab in portal_tabs_view.topLevelTabs():
         obj = portal.get(tab['id'])
         if obj and IAdapter(obj).get_brains(depth=1, Language=[code, '']):
             name = safe_unicode(tab['name'])
             tab['name'] = _(name)
             res.append(tab)
     return res
Example #13
0
    def test__get_brains__empty(self):
        from Products.ATContentTypes.interfaces.folder import IATFolder
        base = IAdapter(self.portal)

        query = {}

        self.assertEqual(len(base.get_brains(**query)), 0)
        self.assertEqual(len(base.get_objects(**query)), 0)
        self.assertEqual(len(base.get_content_listing(**query)), 0)
        self.assertIsNone(base.get_brain(**query))
        self.assertIsNone(base.get_object(**query))

        self.assertEqual(len(base.get_brains(interfaces=IATFolder, **query)), 0)
        self.assertEqual(len(base.get_objects(interfaces=IATFolder, **query)), 0)
        self.assertEqual(len(base.get_content_listing(interfaces=IATFolder, **query)), 0)
        self.assertIsNone(base.get_brain(interfaces=IATFolder, **query))
        self.assertIsNone(base.get_object(interfaces=IATFolder, **query))
Example #14
0
    def items(self):
        """Returns list of dictionary of footer infos

        :rtype: list
        """
        res = []
        adapter = IAdapter(self.context)
        path = '{}/footer-info'.format(adapter.portal_path())
        for item in adapter.get_content_listing(IATDocument, path=path, depth=1, sort_on='getObjPositionInParent'):
            res.append({
                'id': item.id,
                'title': item.Title(),
                'url': item.getURL(),
                'description': item.Description(),
                'text': item.getObject().CookedBody(),
            })
        return res
Example #15
0
    def _subjects(self, brain):
        """Return list of dictionary

        :rtype: list
        """
        res = []
        parent_brain = IAdapter(self.context).get_brain(IATFolder,
                                                        path=self._path(),
                                                        depth=0)
        parent_url = parent_brain.getURL()
        subjects = brain.Subject
        if hasattr(subjects, '__call__'):
            subjects = subjects()
        for subject in subjects:
            res.append({
                'title': subject,
                'url': '{}?Subject={}'.format(parent_url, subject),
            })
        return res
Example #16
0
 def works(self):
     """Returns list of dictionary of past works"""
     res = []
     languages = getToolByName(self.context, 'portal_languages')
     code = languages.getPreferredLanguage()
     for item in IAdapter(self.context).get_content_listing(
             IATEvent,
             depth=1,
             sort_on='end',
             sort_order='descending',
             Language=code):
         res.append({
             'client': item.contactName,
             'client_url': item.eventUrl,
             'description': item.Description(),
             'title': item.Title(),
             'url': item.getURL(),
             'year': IEventAdapter(item).year(),
             'end': item.endDate,
         })
     return res
Example #17
0
    def test_event_datetime(self):
        base = IAdapter(self.portal)

        from DateTime import DateTime
        self.create_event(id='event1', startDate=DateTime('2013/02/25'), endDate=DateTime('2013/02/25'))
        self.create_event(id='event2', startDate=DateTime('2013/02/26 20:00'), endDate=DateTime('2013/02/26 22:00'))
        self.create_event(id='event3', startDate=DateTime('2013/02/27'), endDate=DateTime('2013/02/28'))

        from Products.ATContentTypes.interfaces.event import IATEvent
        res = []
        for item in base.get_content_listing(IATEvent, sort_on='start'):
            res.append(base.event_datetime(item))
        try:
            self.assertEqual(res, [
                u'Feb 25, 2013 12:00 AM',
                u'Feb 26, 2013 08:00 PM - 10:00 PM',
                u'Feb 27, 2013 12:00 AM - Feb 28, 2013 12:00 AM'])
        except AssertionError:
            self.assertEqual(res, [
                u'2013-02-25 00:00',
                u'2013-02-26 20:00 - 22:00',
                u'2013-02-27 00:00 - 2013-02-28 00:00'])
Example #18
0
    def test__folder_and_document(self):
        from Products.ATContentTypes.interfaces.document import IATDocument
        from Products.ATContentTypes.interfaces.folder import IATFolder
        base = IAdapter(self.portal)

        folder1 = self.portal[self.portal.invokeFactory('Folder', 'folder1')]
        folder1.reindexObject()
        doc1 = self.portal[self.portal.invokeFactory('Document', 'doc1')]
        doc1.reindexObject()

        self.assertEqual(len(base.get_brains(IATDocument)), 1)
        self.assertEqual(len(base.get_objects(IATDocument)), 1)
        self.assertEqual(len(base.get_content_listing(IATDocument)), 1)
        self.assertEqual(base.get_brain(IATDocument).id, 'doc1')
        self.assertEqual(base.get_object(IATDocument).id, 'doc1')

        self.assertEqual(len(base.get_brains([IATDocument, IATFolder])), 2)
        self.assertEqual(len(base.get_objects([IATDocument, IATFolder])), 2)
        self.assertEqual(len(base.get_content_listing([IATDocument, IATFolder])), 2)

        self.assertEqual(len(base.get_brains([IATDocument], object_provides=IATFolder.__identifier__)), 2)
        self.assertEqual(len(base.get_objects([IATDocument], object_provides=IATFolder.__identifier__)), 2)
        self.assertEqual(len(base.get_content_listing([IATDocument], object_provides=IATFolder.__identifier__)), 2)
Example #19
0
    def news(self):
        """Return list of dictionary

        :rtype: list
        """
        query = {
            'depth': 1,
            'sort_order': 'effective',
            'review_state': 'published'
        }
        if self.view.subject():
            query['Subject'] = self.view.subject()
        res = []
        toLocalizedTime = self.context.restrictedTraverse(
            '@@plone').toLocalizedTime
        languages = getToolByName(self.context, 'portal_languages')
        code = languages.getPreferredLanguage()
        for item in IAdapter(self.context).get_content_listing(IATNewsItem,
                                                               Language=code,
                                                               **query):
            res.append({
                'title':
                item.Title(),
                'description':
                item.Description(),
                'id':
                item.id,
                'url':
                item.getURL(),
                'date':
                toLocalizedTime(item.EffectiveDate()),
                'datetime':
                item.effective.asdatetime().date().isoformat(),
                'subjects':
                self._subjects(item),
            })
        return res
Example #20
0
 def test_getSessionData(self, getToolByName):
     from collective.base.interfaces import IAdapter
     IAdapter(self.portal).getSessionData()
     getToolByName().getSessionData.assert_called_with(create=True)
Example #21
0
    def test__one_folder(self):
        """Add folder under portal."""
        from Products.ATContentTypes.interfaces.folder import IATFolder
        base = IAdapter(self.portal)

        folder1 = self.portal[self.portal.invokeFactory('Folder', 'folder1')]
        folder1.reindexObject()

        query = {}

        self.assertEqual(len(base.get_brains(**query)), 1)
        self.assertEqual(len(base.get_objects(**query)), 1)
        self.assertEqual(len(base.get_content_listing(**query)), 1)
        self.assertEqual(base.get_brain(**query).id, 'folder1')
        self.assertEqual(base.get_object(**query).id, 'folder1')

        self.assertEqual(len(base.get_brains(interfaces=IATFolder, **query)), 1)
        self.assertEqual(len(base.get_objects(interfaces=IATFolder, **query)), 1)
        self.assertEqual(len(base.get_content_listing(interfaces=IATFolder, **query)), 1)
        self.assertEqual(base.get_brain(interfaces=IATFolder, **query).id, 'folder1')
        self.assertEqual(base.get_object(interfaces=IATFolder, **query).id, 'folder1')

        query = {'path': '/'.join(folder1.getPhysicalPath())}

        self.assertEqual(len(base.get_brains(**query)), 1)
        self.assertEqual(len(base.get_objects(**query)), 1)
        self.assertEqual(len(base.get_content_listing(**query)), 1)
        self.assertEqual(base.get_brain(**query).id, 'folder1')
        self.assertEqual(base.get_object(**query).id, 'folder1')

        self.assertEqual(len(base.get_brains(interfaces=IATFolder, **query)), 1)
        self.assertEqual(len(base.get_objects(interfaces=IATFolder, **query)), 1)
        self.assertEqual(len(base.get_content_listing(interfaces=IATFolder, **query)), 1)
        self.assertEqual(base.get_brain(interfaces=IATFolder, **query).id, 'folder1')
        self.assertEqual(base.get_object(interfaces=IATFolder, **query).id, 'folder1')

        query['depth'] = 0
        self.assertEqual(len(base.get_brains(**query)), 1)
        self.assertEqual(len(base.get_objects(**query)), 1)
        self.assertEqual(len(base.get_content_listing(**query)), 1)
        self.assertEqual(base.get_brain(**query).id, 'folder1')
        self.assertEqual(base.get_object(**query).id, 'folder1')

        self.assertEqual(len(base.get_brains(interfaces=IATFolder, **query)), 1)
        self.assertEqual(len(base.get_objects(interfaces=IATFolder, **query)), 1)
        self.assertEqual(len(base.get_content_listing(interfaces=IATFolder, **query)), 1)
        self.assertEqual(base.get_brain(interfaces=IATFolder, **query).id, 'folder1')
        self.assertEqual(base.get_object(interfaces=IATFolder, **query).id, 'folder1')

        query['depth'] = 1
        self.assertEqual(len(base.get_brains(**query)), 0)
        self.assertEqual(len(base.get_objects(**query)), 0)
        self.assertEqual(len(base.get_content_listing(**query)), 0)
        self.assertIsNone(base.get_brain(**query))
        self.assertIsNone(base.get_object(**query))

        self.assertEqual(len(base.get_brains(interfaces=IATFolder, **query)), 0)
        self.assertEqual(len(base.get_objects(interfaces=IATFolder, **query)), 0)
        self.assertEqual(len(base.get_content_listing(interfaces=IATFolder, **query)), 0)
        self.assertIsNone(base.get_brain(interfaces=IATFolder, **query))
        self.assertIsNone(base.get_object(interfaces=IATFolder, **query))

        query['depth'] = 0
        self.assertEqual(len(base.get_brains(**query)), 1)
        self.assertEqual(len(base.get_objects(**query)), 1)
        self.assertEqual(len(base.get_content_listing(**query)), 1)
        self.assertEqual(base.get_brain(**query).id, 'folder1')
        self.assertEqual(base.get_object(**query).id, 'folder1')

        setRoles(self.portal, TEST_USER_ID, ['Member'])

        from plone.app.testing.helpers import logout
        logout()

        base = IAdapter(self.portal)
        self.assertEqual(len(base.get_brains(**query)), 0)

        query['unrestricted'] = True
        self.assertEqual(len(base.get_brains(**query)), 1)
Example #22
0
    def handleAdd(self, action):
        data, errors = self.extractData()
        if errors:
            self.status = self.formErrorsMessage
            return

        # 1. Find or create folder where selected items will be archived.
        folder_id = "c"
        folder_title = "{} Converted".format(self.context.Title())
        folder = self.context.get(folder_id)
        if folder is None:
            folder = self.context[self.context.invokeFactory(
                'Folder', folder_id, title=folder_title)]

        # 2. Find original objects.
        adapter = IAdapter(self.context)
        paths = self.paths.split(
            '\r\n') if '\r\n' in self.paths else self.paths.split('\n')
        objs = self.context.getObjectsFromPathList(paths)
        form = self.request.form

        # Data from form
        title = form.get('form.widgets.IBasic.title')
        description = form.get('form.widgets.IBasic.description')
        fpaivays = None
        if form.get('form.widgets.paivays-year') and form.get(
                'form.widgets.paivays-day'):
            fpaivays = datetime(int(form.get('form.widgets.paivays-year')),
                                int(form.get('form.widgets.paivays-month')),
                                int(form.get('form.widgets.paivays-day')))
        text = form.get('form.widgets.text')

        omits = [
            'form.widgets.IBasic.title', 'form.widgets.IBasic.description',
            'form.widgets.paivays-year', 'form.widgets.paivays-month',
            'form.widgets.paivays-day', 'form.widgets.text',
            'form.widgets.text.mimeType', 'form.buttons.convert',
            'form.widgets.paivays-empty-marker',
            'form.widgets.paivays-calendar',
            'form.widgets.IVersionable.changeNote', 'form.widgets.paths'
        ]

        # file
        file_field = self.file_field()
        fname = 'form.widgets.{}'.format(file_field.getName())
        cfile = form.get(fname)
        omits.append(fname)
        if cfile:
            cfile.seek(0)
            file_data = cfile.read()
            file_name = cfile.filename
            cfile.close()

        # image
        image_field = self.image_field()
        iname = 'form.widgets.{}'.format(image_field.getName())
        cimage = form.get(iname)
        omits.append(iname)
        if cimage:
            cimage.seek(0)
            image_data = cimage.read()
            image_name = cimage.filename
            cimage.close()

        keys = [
            key for key in form.keys()
            if key not in omits and key.startswith('form.widgets.')
            and not key.endswith('empty-marker')
        ]
        data = {}
        for key in keys:
            val = form.get(key)
            if val:
                if isinstance(val, list):
                    val = [va.decode('unicode_escape') for va in val]
                data[key.split('.')[2]] = val

        object_ids = []
        # 3. Select values and create archive.
        for obj in objs:
            data = data.copy()
            data['title'] = safe_unicode(obj.Title()) or title
            data['description'] = safe_unicode(
                obj.Description()) or description
            uuid = obj.UID()
            brain = adapter.get_brain(UID=uuid)
            paivays = fpaivays
            if brain.review_state == 'published':
                paivays = brain.effective
            if paivays is None:
                paivays = brain.created
            if not isinstance(paivays, datetime):
                paivays = paivays.asdatetime().replace(tzinfo=None)
            data['paivays'] = paivays
            if obj.getField('text') is not None:
                text = self._strip_dev(
                    rewrite_links(safe_unicode(obj.getField('text').get(obj)),
                                  link_repl_func)) or text
            if text:
                data['text'] = text

            content = createContentInContainer(folder,
                                               'archive',
                                               checkConstraints=False,
                                               **data)

            # file
            filedata = None
            contentType = ''
            ofile = obj.getField('file', obj)
            if ofile:
                file_obj = ofile.get(obj)
                if file_obj and file_obj.get_size():
                    filedata = file_obj.data
                    filename = file_obj.filename or data['title']
                    contentType = file_obj.getContentType()

            if filedata is None and cfile:
                filedata = file_data
                filename = file_name

            if filedata is not None:
                setattr(
                    content, file_field.getName(),
                    NamedBlobFile(data=filedata,
                                  filename=safe_unicode(filename),
                                  contentType=contentType))

            # image
            imagedata = None
            contentType = ''
            oimage = obj.getField('image', obj)
            if oimage:
                image_obj = oimage.get(obj)
                if image_obj and image_obj.get_size():
                    imagedata = image_obj.data if not isinstance(
                        image_obj.data, Pdata) else image_obj.data.data
                    imagename = safe_unicode(
                        image_obj.filename) or data['title']
                    contentType = image_obj.getContentType()

            if imagedata is None and cimage:
                imagedata = image_data
                imagename = image_name

            if imagedata is not None:
                setattr(
                    content, image_field.getName(),
                    NamedBlobImage(data=imagedata,
                                   filename=safe_unicode(imagename),
                                   contentType=contentType))

            alsoProvides(content, IArchive)
            modified(content)

            object_ids.append(obj.id)
        # Remove the original object
        self.context.manage_delObjects(object_ids)

        message = _(
            u"add_converted_archives_success",
            default=
            u"${number} converted archive(s) are added to folder: ${title}",
            mapping={
                'number': len(objs),
                'title': safe_unicode(folder_title)
            })
        IStatusMessage(self.request).addStatusMessage(message, type='info')

        url = '{}/folder_contents'.format(self.context.absolute_url())
        return self.request.response.redirect(url)
Example #23
0
 def test_context_path(self):
     base = IAdapter(self.portal)
     self.assertEqual(base.context_path(), '/plone')
Example #24
0
    def test_catalog(self):

        base = IAdapter(self.portal)
        self.assertEqual(base.catalog(), getToolByName(self.portal, 'portal_catalog'))
Example #25
0
 def test_membership(self):
     from Products.PlonePAS.tools.membership import MembershipTool
     adapter = IAdapter(self.portal)
     self.assertIsInstance(adapter.membership(), MembershipTool)
Example #26
0
 def test_portal_path(self):
     self.assertEqual(IAdapter(self.portal).portal_path(), '/plone')
Example #27
0
 def test_portal(self):
     self.assertEqual(IAdapter(self.portal).portal(), self.portal)
Example #28
0
 def test_verifyObject(self):
     from zope.interface.verify import verifyObject
     self.assertTrue(verifyObject(IAdapter, IAdapter(self.portal)))
Example #29
0
 def test_instance(self):
     from collective.base.adapter import Adapter
     self.assertIsInstance(IAdapter(self.portal), Adapter)