def filter(self, components, manager=None):
     """ Returns a filtered list of components
     """
     order = []
     # temporary provide all interfaces of the registered components
     notprovided = []
     for name, comp in components:
         if not comp.interface.providedBy(self.context):
             notprovided.append(comp.interface)
             interface.alsoProvides(self.context, comp.interface)
     view = component.getMultiAdapter((self.context, self.request), name=u'view')
     if manager is not None:
         manager = component.getMultiAdapter((self.context, self.request, view), VIEWLET_MANAGER_MAP.get(manager, object()), name=manager)
         viewlets = component.getAdapters((self.context, self.request, view, manager), IViewlet)
         viewlets = manager.filter(viewlets)
         viewlets = manager.sort(viewlets)
         for name, viewlet in viewlets:
             order.append(name)
     else:
         for name, iface in ORDERED_VIEWLET_MANAGERS:
             manager = component.getMultiAdapter((self.context, self.request, view), iface, name=name)
             viewlets = component.getAdapters((self.context, self.request, view, manager), IViewlet)
             viewlets = manager.filter(viewlets)
             viewlets = manager.sort(viewlets)
             for name, viewlet in viewlets:
                 order.append(name)
     # no longer provide the interfaces previously set
     for iface in notprovided:
         interface.noLongerProvides(self.context, iface)
     components = [(name, comp) for name, comp in components if comp.viewlet in order]
     components.sort(lambda x, y: cmp(order.index(x[1].viewlet), order.index(y[1].viewlet)))
     return components
    def test_membership_adapter_registration(self):

        class Source(TestAdapter):

            def memberships(self, person=None):
                pass

        with self.custom_source(Source):

            folder = self.new_temporary_folder()

            adapters = [
                name for name, source in
                getAdapters((folder, ), IMembershipSource)
            ]

            self.assertEqual(
                adapters, ['zodb-membership-source', 'custom-source']
            )

        adapters = [
            name for name, source in
            getAdapters((folder, ), IMembershipSource)
        ]
        self.assertEqual(adapters, ['zodb-membership-source'])
Example #3
0
    def __init__(self, context):
        perms = []
        # first get object permissionsmap
        supp = IObjectPermissionsMaps(context, None)
        if supp is not None:
            perms.extend(supp.get())

        for name, permissions in getAdapters((context,), IPermissionsMap):
        # then get adapted permissionsmap
            perms.append(permissions)

        self.perms = perms

        # collect parents permissionsmaps
        parent_perms = []
        if hasattr(context, '__parent__'):
            parent_context = context.__parent__
        else:
            parent_context = None
        while ILocation.providedBy(parent_context) and parent_context is not None:
            for name, permissions in getAdapters((parent_context,), IPermissionsMap):
                if permissions not in parent_perms:
                    parent_perms.append(permissions)
            parent_context = parent_context.__parent__

        self.parent_perms = parent_perms #tuple(reversed(parent_perms)) # Permissions are propagated in 'child -> parent' direction
Example #4
0
def instanceSchemaFactory(context):
    """Default schema adapter factory.

    In BaseObject, the Schema() method will do 'schema = ISchema(self)'. This
    adapter factory is a replacement of the default one in
    Archetypes.Schema.factory. It allows you to register named adapter
    to extend the schema. The advantage is that now several packages can do
    additions to the schema without conflicts.
    """
    extenders = list(getAdapters((context, ), ISchemaExtender))
    modifiers = list(getAdapters((context, ), ISchemaModifier))
    if len(extenders) == 0 and len(modifiers) == 0:
        return context.schema

    # as long as the schema is only extended, we can reuse all fields
    # if it's modified later, then we need a full copy, see modifiers below
    # however, using the __add__ function will needlessly validate all fields
    # again (in `addField`).  instead we first create an empty schema of the
    # same class, which is then populated using (shallow) copies of the
    # internal data structures.  this shouldn't be too risky considering
    # that they've last changed about 6 years ago...
    schema = context.schema.__class__()
    schema._names = list(context.schema._names)
    schema._fields = context.schema._fields.copy()
    schema._props = context.schema._props.copy()
    schema._layers = context.schema._layers.copy()

    # loop through all schema extenders
    order = None
    for name, extender in extenders:
        if IBrowserLayerAwareExtender.providedBy(extender) and \
           (not has_plone_browserlayer or \
           extender.layer not in registered_layers()):
            continue
        for field in extender.getFields():
            schema.addField(field)
            if order is not None:
                if not field.schemata in order.keys():
                    order[field.schemata] = list()
                order[field.schemata].append(field.getName())
        if IOrderableSchemaExtender.providedBy(extender):
            if order is None:
                # we need to get the current order first
                order = get_schema_order(schema)
            order = extender.getOrder(order)
            if DevelopmentMode:
                validate_schema_order(schema, order)
    if order is not None:
        set_schema_order(schema, order)

    if len(modifiers) > 0:
        for name, modifier in modifiers:
            if IBrowserLayerAwareExtender.providedBy(modifier) and \
               (not has_plone_browserlayer or \
               modifier.layer not in registered_layers()):
                continue
            modifier.fiddle(schema)

    return schema
Example #5
0
    def extenders(self):

        extenders = [x for x in getAdapters((self.base_context, ), ISchemaExtender)]
        modifiers = [x for x in getAdapters((self.base_context, ), ISchemaModifier)]

        extenders.extend(modifiers)

        return extenders
def vocab(context):
    request = context.REQUEST
    view = getMultiAdapter((context, context.REQUEST), Interface, 'plone')
    values = []
    for manager_name, manager in getAdapters((context, request, view), IViewletManager):
        if manager_name not in MANAGER_BLACKLIST:
            for viewlet_name, viewlet in getAdapters((context, request, view, manager), IViewlet):
                if viewlet_name not in VIEWLET_BLACKLIST:
                    values.append(' '.join((manager_name, viewlet_name)))
    return SimpleVocabulary.fromValues(values)
def vocab(context):
    request = context.REQUEST
    view = BrowserView(context, request)
    alsoProvides(view, IViewView)
    values = []
    for manager_name, manager in getAdapters((context, request, view), IViewletManager):
        if manager_name not in MANAGER_BLACKLIST:
            for viewlet_name, viewlet in getAdapters((context, request, view, manager), IViewlet):
                if viewlet_name not in VIEWLET_BLACKLIST:
                    values.append(' '.join((manager_name, viewlet_name)))
    return SimpleVocabulary.fromValues(values)
Example #8
0
def addRefreshViewletCommands(event):
    view = event.view
    context = view.context
    request = view.request
    annotations = IAnnotations(request)
    viewletByClass = annotations.get('viewletByClass', [])
    if viewletByClass:
        for name, manager in getAdapters(
                (context, request, view, ), IViewletManager):
            for name, viewlet in  getAdapters(
                (context, request, view, manager), IViewlet):
                maybeRenderViewlet(viewlet, viewletByClass)
def SetDefaults(object, event):
    """ Sets the default components defined by the registered adapters providing IDefaultComponents
    """
    for name, provider in component.getAdapters((object,),
                                                interfaces.IDefaultComponents):
        for comp in provider.getComponents():
            interface.alsoProvides(object, comp.interface)
    for name, provider in component.getAdapters((object,),
                                                interfaces.INamedDefaultComponent):
        comp = component.queryAdapter(object,
                                      interface=interfaces.IComponent,
                                      name=name)
        if comp is not None:
            interface.alsoProvides(object, comp.interface)
    object.reindexObject(idxs=['object_provides'])
Example #10
0
    def _get_sorted_post_upgrade_adapters(self):
        """Returns a list of post upgrade adapters, sorted by
        profile dependencies.
        Assumes that the names of the adapters are profile names
        (e.g. "ftw.upgrade:default").
        """

        profile_order = get_sorted_profile_ids(self.portal_setup)

        portal_url = getToolByName(self.portal_setup, 'portal_url')
        portal = portal_url.getPortalObject()
        adapters = list(getAdapters((portal, portal.REQUEST), IPostUpgrade))

        def _sorter(a, b):
            name_a = a[0]
            name_b = b[0]

            if name_a not in profile_order and name_b not in profile_order:
                return 0

            elif name_a not in profile_order:
                return -1

            elif name_b not in profile_order:
                return 1

            else:
                return cmp(profile_order.index(name_a),
                           profile_order.index(name_b))

        adapters.sort(_sorter)
        return [adapter for name, adapter in adapters]
Example #11
0
 def __call__(self, result=None, **kwargs):
     translate = self.context.translate
     path = '++resource++bika.lims.images'
     alerts = {}
     # We look for IResultOutOfRange adapters for this object
     for name, adapter in getAdapters((self.context, ), IResultOutOfRange):
         ret = adapter(result)
         if not ret:
             continue
         spec = ret["spec_values"]
         rngstr = "{0} {1}, {2} {3}".format(
             t(_("min")), str(spec.get('min','')),
             t(_("max")), str(spec.get('max','')))
         if ret["out_of_range"]:
             if ret["acceptable"]:
                 message = "{0} ({1})".format(
                     t(_('Result in shoulder range')),
                     rngstr
                 )
                 icon = path + '/warning.png'
             else:
                 message = "{0} ({1})".format(
                     t(_('Result out of range')),
                     rngstr
                 )
                 icon = path + '/exclamation.png'
             alerts[self.context.UID()] = [
                 {
                     'icon': icon,
                     'msg': message,
                     'field': 'Result',
                 },
             ]
             break
     return alerts
Example #12
0
 def additionalSchemata(self):
     schema_context = self.context.aq_parent
     adapters = getAdapters(
         (schema_context, self.field),
         IEasyFormActionsEditorExtender
     )
     return [v for k, v in adapters]
Example #13
0
    def update(self):
        """See zope.contentprovider.interfaces.IContentProvider"""
        
        OTHER_MANAGER_KEYS = ["form.buttons.scale_button", "form.buttons.slots_button",
                              "form.buttons.lead_button","form.buttons.text_button_questions",
                              "form.buttons.text_button_answers","form.buttons.quiz_pages"]
        for key in OTHER_MANAGER_KEYS:
            no_need_update = self.request.get(key, default=False)
            if no_need_update:
                self.viewlets = []
                return
            
        
        self.__updated = True
        # Find all content providers for the region
        viewlets = getAdapters(
            (self.context, self.request, self.__parent__, self),IViewlet)

        viewlets = self.filter(viewlets)
        viewlets = self.sort(viewlets)

        # Just use the viewlets from now on
        self.viewlets = [viewlet for name, viewlet in viewlets]
        self.names = [name for name,viewlet in viewlets]
        # Update all viewlets and Handle Delete action
        for viewlet in self.viewlets:
            viewlet.update()
            if self.context.__name__ is None:
                #handle case when the first lead viewlet must be updated
                if IQuestionsForConstructor.providedBy(self.__parent__):
                    if ILeadedLayer.providedBy(self.request):
                        self.__parent__.question_was_removed = True
                self.viewlets = []
                break
Example #14
0
def getPathsToPurge(context, request):
    """Given the current request and an object, look up paths to purge for
    the object and yield them one by one. An IPurgePathRewriter adapter may
    be used to rewrite the paths.
    """

    rewriter = IPurgePathRewriter(request, None)

    for name, pathProvider in getAdapters((context,), IPurgePaths):
        # add relative paths, which are rewritten
        relativePaths = pathProvider.getRelativePaths()
        if relativePaths:
            for relativePath in relativePaths:
                if rewriter is None:
                    yield relativePath
                else:
                    rewrittenPaths = rewriter(relativePath) or [] # None -> []
                    for rewrittenPath in rewrittenPaths:
                        yield rewrittenPath

        # add absoute paths, which are not
        absolutePaths = pathProvider.getAbsolutePaths()
        if absolutePaths:
            for absolutePath in absolutePaths:
                yield absolutePath
Example #15
0
    def update(self):
        """Return the first component find that is valid for this context.
        If none are found use a dummy ressource"""

        if self.resource is None:
            url = self.url
            #to optimize performance those are hardcoded
            if check_facebook(url):
                self.resource = FacebookLink(self.context)
            elif check_picasaweb(url):
                self.resource = PicasawebLink(self.context)
            elif check_flickr(url):
                self.resource = FlickrLink(self.context)

        if self.resource is None:
            resources = component.getAdapters((self.context,),
                                              interfaces.IGallery)
            for name, r in resources:
                #every adapters should have a validate method
                if r.validate():
                    self.resource = r
                    break

        if self.resource:
            self.resource.width = self.width
            self.resource.height = self.height
        else:
            msg = i18n.message_no_backend_for_link
            self.addmessage(msg, type=u"error")
Example #16
0
def syncDraft(draft, target):
    """Look up all (named) IDraftSyncer adapters from (draft, target) and
    call each one in turn.
    """

    for name, syncer in getAdapters((draft, target), IDraftSyncer):
        syncer()
 def _process_devices(self):
     stats = {'Device Count': 0,
              'Decommissioned Devices': 0,
              'CPU Cores':0}
     LINKED_DEVICES = "Linked Devices"
     if LINKED_DEVICES not in stats:
         stats[LINKED_DEVICES] = 0
     for device in self._dmd.Devices.getSubDevicesGen_recursive():
         stats['Device Count'] += 1
         if device.productionState < 0:
             stats["Decommissioned Devices"] += 1
         cpuCount = IDeviceCpuCount(device).cpuCount()
         log.debug("Devices %s has %s cpu cores", device, cpuCount)
         stats['CPU Cores'] += cpuCount
         for adapter in subscribers([device], IDeviceResource):
             adapter.processDevice(stats)
         found_linked = False
         for name, adapter in getAdapters((device,), IDeviceLink):
             if adapter.linkedDevice():
                 key = "%s - %s" % (LINKED_DEVICES, name)
                 if key not in stats:
                     stats[key] = 0
                 stats[key] += 1
                 if not found_linked:
                     stats[LINKED_DEVICES] += 1
                     found_linked = True
                 
             
     return stats
Example #18
0
    def __call__(self, *args, **kw):
        workspaces = []
        space = self.context
        default = space.defaultWorkspace

        factory = queryAdapter(space, IWorkspaceFactory, default)
        if factory is not None:
            if space.isEnabled(factory):
                if IOverviewWorkspaceFactory.providedBy(factory):
                    return getMultiAdapter(
                        (space, self.request), name='overview')()

                self.request.response.redirect('./%s/'%default)
                return

        for name, factory in getAdapters((space,), IWorkspaceFactory):
            if space.isEnabled(factory) and \
                    checkPermission('zope.View', factory.get()):
                workspaces.append((factory.weight, factory.title, name))

        if workspaces:
            workspaces.sort()
            self.request.response.redirect('./%s/'%workspaces[0][2])
        else:
            self.request.response.redirect('./listing.html')
Example #19
0
    def testUpgradeTinyMCE(self):
        # skip test in new Plones that don't install tinymce to begin with
        if 'portal_tinymce' not in self.portal:
            return

        alphas.upgradeTinyMCE(self.portal.portal_setup)
        jstool = getToolByName(self.portal, 'portal_javascripts')
        jsresourceids = jstool.getResourceIds()

        self.assertTrue('jquery.tinymce.js' in jsresourceids)
        for ne in ['tiny_mce.js', 'tiny_mce_init.js']:
            self.assertFalse(ne in jsresourceids)

        ksstool = getToolByName(self.portal, 'portal_kss', None)
        if ksstool is not None:
            kssresourceids = ksstool.getResourceIds()
            self.assertFalse(
                '++resource++tinymce.kss/tinymce.kss' in kssresourceids)

        request = self.app.REQUEST
        plone_view = queryMultiAdapter((self.portal, request), name="plone")
        manager = queryMultiAdapter(
            (self.portal, request, plone_view), IContentProvider, 'plone.htmlhead')
        viewlets = getAdapters(
            (manager.context, manager.request, manager.__parent__, manager), IViewlet)
        self.assertFalse(u'tinymce.configuration' in dict(viewlets))
Example #20
0
        def _subscribes():
            log.msg('bit.bot.http.request: Subscribes.load._subscribes: ',
                    sessionid)
            if len(args.strip().split(' ')) > 1:
                subscribe_name = args.strip().split(' ')[1]
                subscribe = queryAdapter(
                    self.request, ISubscribe, subscribe_name)
                if subscribe:
                    self.request.speak("%s:" % subscribe_name)
                    self.request.speak(
                        subscribe.__doc__ or '...is currently undocumented')
                else:
                    self.request.speak(
                        'unrecognized subscribe: %s' % subscribe_name)
                    self.request.speak(
                        'type ~ or ~help for a list of subscribes')
                return

            _subscribes = ['list of subscribes:']
            subscribes = getAdapters((self.request, ), ISubscribe)
            for subscribe, adapter in subscribes:
                if not subscribe:
                    continue
                _subscribes.append(subscribe)
            self.request.speak('\n'.join(_subscribes))
Example #21
0
    def resources(self, request):
        resources = []
        for name, resource in getAdapters((request, self), IPackageResource):
            resources.append((resource.order, resource))

        resources.sort()
        return [r for o, r in resources]
Example #22
0
 def addition_init_code(self):
     code = u""
     providers = component.getAdapters(self, IFacebookInitCodeProvider)
     for provider in providers:
         if provider.available():
             code += provider.get_code()
     return code
Example #23
0
def renameAfterCreation(obj):
    """Rename the content after it was created/added
    """
    # Check if the _bika_id was already set
    bika_id = getattr(obj, "_bika_id", None)
    if bika_id is not None:
        return bika_id
    # Can't rename without a subtransaction commit when using portal_factory
    transaction.savepoint(optimistic=True)
    # The id returned should be normalized already
    new_id = None
    # Checking if an adapter exists for this content type. If yes, we will
    # get new_id from adapter.
    for name, adapter in getAdapters((obj, ), IIdServer):
        if new_id:
            logger.warn(('More than one ID Generator Adapter found for'
                         'content type -> %s') % obj.portal_type)
        new_id = adapter.generate_id(obj.portal_type)
    if not new_id:
        new_id = generateUniqueId(obj)

    # TODO: This is a naive check just in current folder
    # -> this should check globally for duplicate objects with same prefix
    # N.B. a check like `search_by_prefix` each time would probably slow things
    # down too much!
    # -> A solution could be to store all IDs with a certain prefix in a storage
    parent = api.get_parent(obj)
    if new_id in parent.objectIds():
        # XXX We could do the check in a `while` loop and generate a new one.
        raise KeyError("The ID {} is already taken in the path {}".format(
            new_id, api.get_path(parent)))
    # rename the object to the new id
    parent.manage_renameObject(obj.id, new_id)

    return new_id
 def default(self):
     adapters = getAdapters((self.context,), IShipping)
     for name, shipping in adapters:
         if shipping.default:
             return name
     if adapters:
         return adapters[0][0]
Example #25
0
    def test_criteria_adapter(self):
        setRoles(self.portal, TEST_USER_ID, ('Manager',))

        self.portal.invokeFactory('LibrarySearch', 'library', title=u"Library")
        library_obj = self.portal['library']

        provideAdapter(get_extra_criteria,
            adapts=[IExtendedLibrarySearch],
            provides=library.ISearchCriteriaProvider,
            name="more-criteria")

        alsoProvides(library_obj, IExtendedLibrarySearch)

        adapters = getAdapters((library_obj, ),
            provided=library.ISearchCriteriaProvider)

        criteria = {}
        for name, value in adapters:
            criteria.update(value)

        expected = {}
        expected.update(library.get_basic_criteria(library_obj))
        expected.update(get_extra_criteria(library_obj))

        self.maxDiff = None
        self.assertEqual(criteria, expected)
Example #26
0
    def testUpgradeTinyMCE(self):
        alphas.upgradeTinyMCE(self.portal.portal_setup)
        jstool = getToolByName(self.portal, 'portal_javascripts')
        jsresourceids = jstool.getResourceIds()

        self.assertIn('jquery.tinymce.js', jsresourceids)
        for ne in ['tiny_mce.js', 'tiny_mce_init.js']:
            self.assertNotIn(ne, jsresourceids, ne)

        ksstool = getToolByName(self.portal, 'portal_kss', None)
        if ksstool is not None:
            kssresourceids = ksstool.getResourceIds()
            self.assertNotIn('++resource++tinymce.kss/tinymce.kss',
                             kssresourceids)

        request = self.app.REQUEST
        plone_view = queryMultiAdapter((self.portal, request), name="plone")
        manager = queryMultiAdapter(
                    (self.portal, request, plone_view), IContentProvider, 'plone.htmlhead')
        viewlets = getAdapters(
                (manager.context, manager.request, manager.__parent__, manager), IViewlet)
        self.assertIn(u'tinymce.configuration', dict(viewlets))
        storage = getUtility(IViewletSettingsStorage)
        skinname = self.portal.getCurrentSkinName()
        order_by_name = storage.getOrder('plone.htmlhead', skinname)
        self.assertEqual(order_by_name[-1], u'tinymce.configuration')
    def update(self):
        """See zope.contentprovider.interfaces.IContentProvider"""
        self.__updated = True

        # Find all content providers for the region
        viewlets = component.getAdapters(
            (self.context, self.request, self.__parent__, self),
            IViewlet)

        #  update the setting viewlet first, as that determines
        #  which viewlets we end up filtering
        viewlets = list( viewlets )

        setting_viewlet = [v for n,v in viewlets if n == 'settings'][0]
        setting_viewlet.update()


        viewlets = self.filter(viewlets)
        viewlets = self.sort(viewlets)

        # Just use the viewlets from now on
        self.viewlets = [viewlet for name, viewlet in viewlets]

        # Update all viewlets
        for viewlet in self.viewlets:
            if viewlet == setting_viewlet:
                continue
            viewlet.update()
 def __init__(self, context):
     terms = []
     site = component.getSiteManager()
     books = list(component.getAdapters((site,), IAddressBook))
     for name, book in books:
         terms.append(SimpleTerm(name, name, unicode(name)))
     super(AddressBooks, self).__init__(terms)
Example #29
0
 def containers(self):
     """Get a list of potential containers
     """
     context = aq_inner(self.context)
     for name, locator in getAdapters((context,), IWCContainerLocator):
         if locator.available:
             yield dict(name=name, locator=locator)
Example #30
0
    def __call__(self):
        portal_state = getMultiAdapter(
            (self.context, self.request),
            name=u'plone_portal_state'
        )
        context_state = getMultiAdapter(
            (self.context, self.request),
            name='plone_context_state'
        )
        # do not use getSite because it's possible it could be different
        # than the actual portal url
        portal_url = portal_state.portal_url()
        result = {
            'data-base-url': self.context.absolute_url(),
            'data-view-url': context_state.view_url(),
            'data-portal-url': portal_url,
            'data-i18ncatalogurl': portal_url + '/plonejsi18n'
        }

        # first, check for any adapters that need pattern data defined
        adapters = getAdapters(
            (self.context, self.request, None),
            IPatternsSettings
        )
        [result.update(x[1]()) for x in adapters]

        # Resources Registered UI patterns can override adapters
        registry = getUtility(IRegistry)
        pattern_options = registry.get('plone.patternoptions', {})
        for key, value in pattern_options.items():
            result['data-pat-' + key] = value

        return result
Example #31
0
    def __call__(self):
        self.icon = self.portal_url + "/++resource++bika.lims.images/chevron_big.png"
        bika_setup = getToolByName(self.context, "bika_setup")
        login_url = '{}/{}'.format(self.portal_url, 'login')
        landingpage = bika_setup.getLandingPage()

        # Anonymous Users get either redirected to the std. bika-frontpage or
        # to the custom landing page, which is set in bika_setup. If no landing
        # page setup, then redirect to login page.
        if self.is_anonymous_user():
            # Redirect to the selected Landing Page
            if landingpage:
                return self.request.response.redirect(landingpage.absolute_url())
            # Redirect to login page
            return self.request.response.redirect(login_url)

        # Authenticated Users get either the Dashboard, the std. login page
        # or the custom landing page. Furthermore, they can switch between the
        # Dashboard and the landing page.
        # Add-ons can have an adapter for front-page-url as well.
        for name, adapter in getAdapters((self.context,), IFrontPageAdapter):
            redirect_to = adapter.get_front_page_url()
            if redirect_to:
                return self.request.response.redirect(self.portal_url + redirect_to)

        # First precedence: Request parameter `redirect_to`
        redirect_to = self.request.form.get("redirect_to", None)
        if redirect_to == "dashboard":
            return self.request.response.redirect(self.portal_url + "/bika-dashboard")
        if redirect_to == "frontpage":
            if landingpage:
                return self.request.response.redirect(landingpage.absolute_url())
            return self.template()

        # Second precedence: Dashboard enabled
        if self.is_dashboard_enabled():
            roles = self.get_user_roles()
            allowed = ['Manager', 'LabManager', 'LabClerk']
            if set(roles).intersection(allowed):
                return self.request.response.redirect(
                    self.portal_url + "/bika-dashboard")
            if 'Sampler' in roles or 'SampleCoordinator' in roles:
                return self.request.response.redirect(self.portal_url + "/samples?samples_review_state=to_be_sampled")

        # Third precedence: Custom Landing Page
        if landingpage:
            return self.request.response.redirect(landingpage.absolute_url())

        # Last precedence: Front Page
        return self.template()
 def __call__(self, context):
     container = aq_parent(context)
     if context.isTemporary() and isinstance(container, TempFolder):
         container = aq_parent(aq_parent(container))
     if not interfaces.IArticle.providedBy(container):
         return []
     components = [(name, comp) for name, comp in component.getAdapters((context,), interfaces.IComponentSelection)]
     view = component.getMultiAdapter((container, context.REQUEST), name=u'components')
     sorter = component.getMultiAdapter((container, context.REQUEST, view), interfaces.IComponentFilter)
     components = sorter.filter(components)
     items = []
     for name, comp in components:
         items.append(SimpleTerm(name, None, comp.title))
     return items
 def transform(self, result, encoding):
     context = getContext(self.published)
     manager = queryMultiAdapter((context, self.request, self.published),
                                 IViewletManager,
                                 name='plone.httpheaders')
     if manager is not None:
         headers = map(str.lower, self.request.response.headers)
         for name, viewlet in getAdapters(
             (context, self.request, self.published, manager), IViewlet):
             viewlet.update()
             for key, value in viewlet.getHeaders():
                 if key.lower() not in headers:
                     self.request.response.setHeader(key, value)
     return None
Example #34
0
    def __call__(self):
        self.selection_macros = SelectionMacrosView(self.context, self.request)
        self.icon = self.portal_url + "/++resource++bika.lims.images/report_big.png"
        self.getAnalysts = getUsers(self.context,
                                    ['Manager', 'LabManager', 'Analyst'])

        self.additional_reports = []
        adapters = getAdapters((self.context, ), IProductivityReport)
        for name, adapter in adapters:
            report_dict = adapter(self.context, self.request)
            report_dict['id'] = name
            self.additional_reports.append(report_dict)

        return self.template()
Example #35
0
    def get_digest_adapter(self, group):
        '''Get the digest adaptor for a group

:param object group: The group to get a digest-adaptor for.
:returns: The "best" digest adaptor for the group, or ``None``.
:rtype: :class:`.interfaces.ITopicsDigestNotifier`'''
        adapters = [
            a[1]
            for a in getAdapters((group, self.request), ITopicsDigestNotifier)
            if a[1].canSend
        ]
        adapters.sort(key=lambda a: a.weight)
        retval = adapters[0] if adapters else None
        return retval
    def getArg(self, controller_state):
        url = _getArg(self, controller_state)

        if controller_state.id not in ['atct_edit', 'update_version_on_edit']:
            return url

        context = controller_state.getContext()

        adapters = getAdapters((context, ), IRedirector)
        for name, adapter in adapters:
            if adapter.can_handle():
                return adapter.get_url()

        return url
Example #37
0
    def extract(self):
        data = {}
        data[BASEDATA_KEY] = {
            'id': self.obj.getId(),
            'title': self.obj.Title(),
            'portal_type': self.obj.portal_type
        }

        # collect data
        collectors = getAdapters((self.obj, ), IDataCollector)
        for name, collector in collectors:
            data[name] = collector.extract()

        return decode_for_json(data)
Example #38
0
def extended_testPasswordValidity(self, password, confirm=None, data=None):
    """
    Patching the standard Plone's testPasswordValidity method to
    enable registering a custom password validator.
    """
    original = original_testPasswordValidity(self, password, confirm)
    if original:
        return original
    else:
        validators = getAdapters((self,), ICustomPasswordValidator)
        for name, validator in validators:
            result = validator.validate(password, data)
            if result:
                return result
    return None
Example #39
0
    def getAbsolutePaths(self):
        root = self._getRoot()
        if root is None:
            return

        request = getRequest()
        if request is None:
            return

        for name, pathProvider in getAdapters((root, ), IPurgePaths):
            # add absoute paths, which are not
            absolutePaths = pathProvider.getAbsolutePaths()
            if absolutePaths:
                for absolutePath in absolutePaths:
                    yield absolutePath
Example #40
0
 def _create_object(self, container, data):
     """ Creates the object with the data
     """
     portal_type = data[BASEDATA_KEY]['portal_type']
     # base data
     creator = self._get_object_creator(portal_type)
     obj = creator.create(container, data[BASEDATA_KEY])
     # insert data from collectors
     collectors = getAdapters((obj, ), IDataCollector)
     for name, collector in collectors:
         collector.insert(data[name])
     # let the object reindex by creating a modified event, which also
     # runs stuff like globalindex, if needed.
     notify(ObjectModifiedEvent(obj))
     return obj
Example #41
0
    def getMenuItemByAction(self, obj, request, action):
        # Normalize actions; strip view prefix
        if action.startswith('@@'):
            action = action[2:]
        if action.startswith('++view++'):
            action = action[8:]

        for name, item in getAdapters((obj, request), self.getMenuItemType()):
            item_action = item.action
            # Normalize menu item action; never uses ++view++
            if item_action.startswith('@@'):
                item_action = item_action[2:]

            if item_action == action:
                return item
def RendererVocabulary(context):
    """
        Vocabulary which list out all renderers
    """
    adapters = getAdapters((None, ), ICollectionMultiViewRenderer)
    terms = []
    for name, adapted in adapters:
        if hasattr(adapted, 'title'):
            title = adapted.title
        elif hasattr(adapted, '__name__'):  # backward compatibility with 1.x
            title = adapted.__name__
        else:
            title = name
        terms.append(SimpleVocabulary.createTerm(name, name, title))
    return SimpleVocabulary(terms)
Example #43
0
    def test_annotation_saved_on_checkin(self):
        # First we get and save a custom annotation to the existing object
        obj_annotations = IAnnotations(self.s1)
        self.assertEqual(obj_annotations, {})

        obj_annotations['key1'] = u'value1'
        obj_annotations = IAnnotations(self.s1)
        self.assertEqual(obj_annotations, {'key1': u'value1'})

        # Now, let's get a working copy for it.
        locators = getAdapters((self.s1,), IWCContainerLocator)
        location = u'plone.app.iterate.parent'
        locator = [c[1] for c in locators if c[0] == location][0]

        policy = ICheckinCheckoutPolicy(self.s1)

        wc = policy.checkout(locator())

        # Annotations should be the same
        new_annotations = IAnnotations(wc)
        self.assertEqual(new_annotations['key1'], u'value1')

        # Now, let's modify the existing one, and create a new one
        new_annotations['key1'] = u'value2'
        new_annotations['key2'] = u'value1'

        # Check that annotations were stored correctly and original ones were
        # not overriten
        new_annotations = IAnnotations(wc)
        self.assertEqual(new_annotations['key1'], u'value2')
        self.assertEqual(new_annotations['key2'], u'value1')

        obj_annotations = IAnnotations(self.s1)
        self.assertEqual(obj_annotations['key1'],  u'value1')
        self.assertFalse('key2' in obj_annotations)

        # Now, we do a checkin
        policy = ICheckinCheckoutPolicy(wc)
        policy.checkin(u'Commit message')

        # And finally check that the old object has the same annotations as
        # its working copy

        obj_annotations = IAnnotations(self.s1)
        self.assertTrue('key1' in obj_annotations)
        self.assertTrue('key2' in obj_annotations)
        self.assertEqual(obj_annotations['key1'], u'value2')
        self.assertEqual(obj_annotations['key2'], u'value1')
Example #44
0
    def getMenuItems(self, object, request):
        """Return menu item entries in a TAL-friendly form."""

        result = []
        for _name, item in getAdapters((object, request),
                                       self.getMenuItemType()):
            if item.available():
                result.append(item)

        # Now order the result. This is not as easy as it seems.
        #
        # (1) Look at the interfaces and put the more specific menu entries
        #     to the front.
        # (2) Sort unambigious entries by order and then by title.
        ifaces = list(providedBy(removeSecurityProxy(object)).__iro__)
        max_key = len(ifaces)

        def iface_index(item):
            iface = item._for or Interface
            if IInterface.providedBy(iface):
                return ifaces.index(iface)
            if isinstance(removeSecurityProxy(object), item._for):
                # directly specified for class, this goes first.
                return -1
            # no idea. This goes last.
            return max_key  # pragma: no cover

        result = [(iface_index(item), item.order, item.title, item)
                  for item in result]
        result.sort()

        result = [{
            'title':
            title,
            'description':
            item.description,
            'action':
            item.action,
            'selected': (item.selected() and u'selected') or u'',
            'icon':
            item.icon,
            'extra':
            item.extra,
            'submenu': (IBrowserSubMenuItem.providedBy(item)
                        and getMenu(item.submenuId, object, request)) or None
        } for index, order, title, item in result]

        return result
Example #45
0
    def getAvailableViews(self, excepts=[]):
        generic_views = {}
        views = {}

        adapters = component.getAdapters(
            (self.context, self.request),
            interface.Interface)

        for k, v in adapters:
            if k not in excepts and IGrokView.providedBy(v):
                adapts = grok.context.bind().get(v)
                if adapts is interface.Interface:
                    generic_views[k] = v
                else:
                    views[k] = v
        return generic_views, views
    def test_all_data_collectors_extract_json_compatible_data(self):
        self.login(self.regular_user)

        self.task.set_reminder(ReminderOnDate({'date': date(2019, 12, 30)}))
        objects_to_test = [self.task]

        for obj in objects_to_test:
            adapters = getAdapters((self.task,), IDataCollector)
            for name, adapter in adapters:
                data = adapter.extract()
                try:
                    json.dumps(data)
                except TypeError:
                    self.fail("Extracted data from IDataCollector adapter "
                              "%r (%r) is not JSON serializable: "
                              "%r" % (name, adapter, data))
Example #47
0
    def switch_subscription(self, subscriber, folder, storage_key):
        catalog = queryUtility(ISubscriptionCatalog)
        if IPloneSiteRoot.providedBy(folder):
            uid = 'plonesite'
        else:
            uid = IUIDStrategy(folder)()

        site = getToolByName(folder, 'portal_url').getPortalObject()
        storages = getAdapters((site,), IDigestStorage)
        for name, storage in storages:
            key = "%s-digest" % name
            if key == storage_key:
                catalog.index(subscriber, uid, key)
            else:
                storage.purge_user(subscriber)
                catalog.unindex(subscriber, uid, key)
Example #48
0
    def get_all_portlets(self):
        output = []
        names = set()
        for portlet_id in self.getPortletsIds():
            output.append(self.getPortletById(portlet_id))
            names.add(portlet_id)

        site = self.getSite()
        for portlet_id, portlet in component.getAdapters((site, ), INyPortlet):
            if portlet_id not in names:
                output.append(LegacyPortletWrapper(portlet, portlet_id))
                names.add(portlet_id)

        output.sort(key=lambda portlet: force_to_unicode(portlet.title_or_id().
                                                         lower()))
        return output
    def groupby(self):

        if self._groupby is not None:
            # The groupby criteria are used at each IBeforeTraverseEvent - so
            # on each request. This has to be fast, so exit early.
            return self._groupby
        self._groupby = {}

        cat = plone.api.portal.get_tool('portal_catalog')
        # get catalog metadata schema, but filter out items which cannot be
        # used for grouping
        metadata = [it for it in cat.schema() if it not in GROUPBY_BLACKLIST]

        for it in metadata:
            index_modifier = None
            display_modifier = translate_value  # Allow to translate in this package domain per default.  # noqa
            idx = cat._catalog.indexes.get(it)
            if six.PY2 and getattr(idx, 'meta_type', None) == 'KeywordIndex':
                # in Py2 KeywordIndex accepts only utf-8 encoded values.
                index_modifier = safe_encode

            if getattr(idx, 'meta_type', None) == 'BooleanIndex':
                index_modifier = make_bool
                display_modifier = get_yes_no_title

            # for portal_type or Type we have some special sauce as we need to translate via fti.i18n_domain.  # noqa
            if it == 'portal_type':
                display_modifier = translate_portal_type
            elif it == 'Type':
                display_modifier = translate_messagefactory

            self._groupby[it] = {
                'index': it,
                'metadata': it,
                'display_modifier': display_modifier,
                'css_modifier': None,
                'index_modifier': index_modifier,
                'value_blacklist': None,
                'sort_key_function': lambda it: it['title'].lower(
                ),  # sort key function. defaults to a lower-cased title.  # noqa
            }

        modifiers = getAdapters((self, ), IGroupByModifier)
        for name, modifier in sorted(modifiers, key=lambda it: it[0]):
            modifier()

        return self._groupby
Example #50
0
    def update(self):
        if self.request.method != 'POST':
            self.defaults = {
                'sendaspdf-recipients':'',
                'sendaspdf-subject': '',
                'sendaspdf-message': ''
            } 
            return
          
        recipients = self.request.get('sendaspdf-recipients', '').strip()
        subject = self.request.get('sendaspdf-subject', '').strip()
        message = self.request.get('sendaspdf-message', '').strip()
        self.defaults = {
            'sendaspdf-recipients': recipients,
            'sendaspdf-subject': subject,
            'sendaspdf-message': message
        }
        statusmessages = IStatusMessage(self.request)
        if not subject:
            statusmessages.add('Subject is required', type='error')
        if not recipients:
            statusmessages.add('Recipients is required', type='error')
        if not message:
            statusmessages.add('Message is required', type='error')
        if not (subject and recipients and message):
            return

        expanded_recipients = []
        adapters = getAdapters((self.context,), IPDFEmailSource)
        for recipient in recipients.splitlines():
            expanded = False
            for name, adapter in adapters:
                if adapter.can_expand(recipient):
                    expanded_recipients += adapter.expand_value(recipient)
                    expanded = True
                    break
            if not expanded:
                expanded_recipients.append(recipient)

        self.send_email(
            recipients=list(set(expanded_recipients)),
            subject=subject,
            message=message
        )

        statusmessages.add('Emails sent')
        self.request.response.redirect(self.context.absolute_url())
Example #51
0
    def render_content_core(self):
        try:
            layout = getLayout(self.context)
        except TypeError:
            return super(LayoutAwareItem, self).render_content_core()
        req = getRequest()
        filters = [f for _, f in getAdapters((self.context, req), IFilter)]
        layout = apply_filters(filters, layout)
        dom = getHTMLSerializer(layout)
        tiles.renderTiles(req, dom.tree,
                          self.context.absolute_url() + '/layout_view')
        gridsystem.merge(req, dom.tree)

        content = contentpanel_xpath(dom.tree)
        if len(content) > 0:
            return tostring(content[0])
        return ''
Example #52
0
    def getHistory(self, checkMayViewEvent=True, checkMayViewComment=True):
        """Get the history for current object.
           Merge workflow history with content history and sort by time."""
        history = []
        history_adapters = getAdapters((self.context,), IImioHistory)
        for adapter_name, adapter in history_adapters:
            # for now, specifically limit display to u'revision' and u'workflow'
            if adapter_name in self.histories_to_handle:
                history.extend(adapter.getHistory(
                    checkMayViewEvent=checkMayViewEvent,
                    checkMayViewComment=checkMayViewComment))

        if not history:
            return []

        history.sort(key=lambda x: x["time"], reverse=True)
        return history
Example #53
0
def EnabledPaymentProcessors(context):
    """Returns a vocabulary of the PaymentProcessors that have been enabled
    in the shop configuration.
    """
    # context is the portal config options, whose context is the portal
    registry = getUtility(IRegistry)
    shop_config = registry.forInterface(IShopConfiguration)
    request = getSite().REQUEST
    payment_processors = getAdapters((context, request, context),
                                     IPaymentProcessor)
    terms = create_terms_from_adapters(payment_processors)
    for term in terms:
        if term.value not in shop_config.enabled_payment_processors:
            terms.remove(term)

    directlyProvides(EnabledPaymentProcessors, IVocabularyFactory)
    return vocabulary.SimpleVocabulary(terms)
    def _setHeaders(self):
        if self.published is None or \
                not self.request.get('plone.app.blocks.enabled', False):
            return None

        context = aq_parent(aq_base(self.published)) or api.portal.get()
        manager = queryMultiAdapter((context, self.request, self.published),
                                    IViewletManager,
                                    name='plone.httpheaders')
        if manager is not None:
            headers = map(str.lower, self.request.response.headers)
            for name, viewlet in getAdapters(
                (context, self.request, self.published, manager), IViewlet):
                viewlet.update()
                for key, value in viewlet.getHeaders():
                    if key.lower() not in headers:
                        self.request.response.setHeader(key, value)
Example #55
0
 def update(self):
     context = self.context
     self.iscalendarlayout = context.unrestrictedTraverse(
         'iscalendarlayout')()
     if self.iscalendarlayout:
         self.sources = [
             source
             for name, source in getAdapters((self.context,
                                              self.request), IEventSource)
         ]
     else:
         catalog = getToolByName(context, 'portal_catalog')
         if 'object_provides' in catalog.indexes():
             query = {'object_provides': IEvent.__identifier__}
         else:
             query = {'portal_type': 'Event'}
         self.events = context.queryCatalog(**query)
Example #56
0
    def _folder_item_fieldicons(self, analysis_brain):
        """Resolves if field-specific icons must be displayed for the object
        passed in.

        :param analysis_brain: Brain that represents an analysis
        """
        full_obj = self.get_object(analysis_brain)
        uid = api.get_uid(full_obj)
        for name, adapter in getAdapters((full_obj, ), IFieldIcons):
            alerts = adapter()
            if not alerts or uid not in alerts:
                continue
            alerts = alerts[uid]
            if uid not in self.field_icons:
                self.field_icons[uid] = alerts
                continue
            self.field_icons[uid].extend(alerts)
Example #57
0
    def update(self):
        """See zope.contentprovider.interfaces.IContentProvider"""
        self.__updated = True

        # Find all content providers for the region
        viewlets = component.getAdapters(
            (self.context, self.request, self.__parent__, self), IViewlet)

        viewlets = self.filter(viewlets)
        viewlets = self.sort(viewlets)
        self.viewlets_map = dict(viewlets)

        # Just use the viewlets from now on
        self.viewlets = [viewlet for name, viewlet in viewlets]

        # Update all viewlets
        [viewlet.update() for viewlet in self.viewlets]
Example #58
0
def transform_html(html, request):
    portal = api.portal.get()
    charset = portal.portal_properties.site_properties.getProperty(
        'default_charset', 'utf-8')
    new_html = None
    published = request.get('PUBLISHED', None)
    handlers = [v[1] for v in getAdapters((published, request,), ITransform)]
    handlers.sort(sort_key)
    if handlers:
        # The first handler is the diazo transform, the others are caching
        theme_handler = handlers[0]
        new_html = theme_handler.transformIterable([html], charset)
    # If the theme is not enabled, transform returns None
    if new_html is not None:
        new_html = etree.tostring(new_html.tree)
    else:
        new_html = html
    return new_html
    def getResources(self):
        """Get all the registered resource data, uncooked.

        For management screens.
        """
        result = []

        for name, provider in getAdapters((self, ), IResourceProvider):
            for item in provider.getResources():
                if isinstance(item, dict):
                    # BBB we used dicts before
                    item = item.copy()
                    item_id = item['id']
                    del item['id']
                    obj = self.resource_class(item_id, **item)
                    result.append(obj)
                else:
                    result.append(item)
        return tuple(result)
Example #60
0
 def __call__(self, result=None, **kwargs):
     workflow = getToolByName(self.context, 'portal_workflow')
     items = self.context.getAnalyses()
     field_icons = {}
     for obj in items:
         obj = obj.getObject() if hasattr(obj, 'getObject') else obj
         uid = obj.UID()
         astate = workflow.getInfoFor(obj, 'review_state')
         if astate == 'retracted':
             continue
         adapters = getAdapters((obj, ), IFieldIcons)
         for name, adapter in adapters:
             alerts = adapter(obj)
             if alerts:
                 if uid in field_icons:
                     field_icons[uid].extend(alerts[uid])
                 else:
                     field_icons[uid] = alerts[uid]
     return field_icons