diff --git a/collective/quickupload/portlet/quickuploadportlet.py b/collective/quickupload/portlet/quickuploadportlet.py index 8d2ee75..5e22a55 100644 --- a/collective/quickupload/portlet/quickuploadportlet.py +++ b/collective/quickupload/portlet/quickuploadportlet.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -## Copyright (C)2010 Alter Way Solutions +# Copyright (C)2010 Alter Way Solutions from Acquisition import aq_base from Acquisition import aq_inner from Acquisition import aq_parent @@ -18,6 +18,7 @@ from plone.memoize.compress import xhtml_compress from plone.portlets.interfaces import IPortletDataProvider from zope import schema +from zope.component import getMultiAdapter from zope.formlib import form from zope.i18nmessageid import MessageFactory from zope.interface import implements @@ -161,9 +162,9 @@ def _clean_session(self): # since the portlet don't use it, but another app could if session: # session does not implement dict API. it's a TransientObject - if session.has_key('typeupload'): + if session.has_key('typeupload'): # noqa session.delete('typeupload') - if session.has_key('mediaupload'): + if session.has_key('mediaupload'): # noqa session.delete('mediaupload') def render(self): @@ -176,21 +177,25 @@ def available(self): or IFolderContentsView.providedBy(self.view)): return False + # Context could be a default page. We want the canonical object + # instead. context = aq_inner(self.context) - - if not IQuickUploadCapable.providedBy(context): + pcs = getMultiAdapter( + (context, self.request), name='plone_context_state') + canonical = pcs.canonical_object() + if not IQuickUploadCapable.providedBy(canonical): return False - elif IQuickUploadNotCapable.providedBy(context): + elif IQuickUploadNotCapable.providedBy(canonical): return False - elif not self.pm.checkPermission('Add portal content', context): + elif not self.pm.checkPermission('Add portal content', canonical): return False - elif isTemporary(context): + elif isTemporary(canonical): return False upload_portal_type = self.data.upload_portal_type if (upload_portal_type and upload_portal_type != 'auto' and upload_portal_type not in [ - t.id for t in self.context.getAllowedTypes() + t.id for t in canonical.getAllowedTypes() ]): return False else: diff --git a/collective/quickupload/testing.py b/collective/quickupload/testing.py index 8c1fe74..f1c7160 100644 --- a/collective/quickupload/testing.py +++ b/collective/quickupload/testing.py @@ -32,6 +32,9 @@ def setUpPloneSite(self, portal): setRoles(portal, TEST_USER_ID, ['Manager']) login(portal, TEST_USER_NAME) portal.invokeFactory('Folder', 'test-folder', title=u"Test Folder") + folder = portal['test-folder'] + folder.invokeFactory('Document', 'test-doc', title=u"Test Document") + folder.setDefaultPage('test-doc') setRoles(portal, TEST_USER_ID, ['Member']) diff --git a/collective/quickupload/tests/portlet.txt b/collective/quickupload/tests/portlet.txt index c29845d..79b43db 100644 --- a/collective/quickupload/tests/portlet.txt +++ b/collective/quickupload/tests/portlet.txt @@ -16,6 +16,7 @@ Plone Quick Upload Portlet >>> from collective.quickupload.portlet import quickuploadportlet >>> portal = layer['portal'] >>> folder = portal['test-folder'] + >>> doc = folder['test-doc'] >>> setRoles(portal, TEST_USER_ID, ['Manager']) >>> login(portal, TEST_USER_NAME) @@ -55,7 +56,7 @@ Test portlet Edit View ---------------------- >>> mapping = PortletAssignmentMapping() - >>> request = folder.REQUEST + >>> request = doc.REQUEST >>> mapping['foo'] = quickuploadportlet.Assignment(header=u"", upload_portal_type=u"Image", upload_media_type=u"image") >>> editview = getMultiAdapter((mapping['foo'], request), name='edit') >>> isinstance(editview, quickuploadportlet.EditForm) @@ -64,11 +65,11 @@ Test portlet Edit View Test portlet Rendering ---------------------- - >>> request = folder.REQUEST - >>> view = folder.restrictedTraverse('@@folder_contents') + >>> request = doc.REQUEST + >>> view = doc.restrictedTraverse('@@folder_contents') >>> manager = getUtility(IPortletManager, name='plone.rightcolumn', context=portal) >>> assignment = quickuploadportlet.Assignment(header=u"", upload_portal_type=u"Image", upload_media_type=u"image") - >>> renderer = getMultiAdapter((folder, request, view, manager, assignment), IPortletRenderer) + >>> renderer = getMultiAdapter((doc, request, view, manager, assignment), IPortletRenderer) >>> isinstance(renderer, quickuploadportlet.Renderer) True >>> renderer.available diff --git a/docs/HISTORY.rst b/docs/HISTORY.rst index 271b7cd..37ae420 100644 --- a/docs/HISTORY.rst +++ b/docs/HISTORY.rst @@ -4,6 +4,10 @@ Changelog 1.8.1 (unreleased) ------------------ +- Also render the portlet when viewing a default page. + Fixes #34. + [maurits] + - Updated Dutch translations. [maurits]