from AccessControl.SecurityManagement import newSecurityManager, noSecurityManager ... user = self.context.getWrappedOwner() newSecurityManager(self.request, user) self.doProtectedMethod() noSecurityManager()
21/05/2009
newSecurityManager
createPortalObject()
def createPortalObject(self,folder,type_name,title): """ Helper per a portal object of specific type in the given folder """ objId = None try: id = self.context.plone_utils.normalizeString(title, relaxed=True) objId = folder.invokeFactory(id=id,type_name=type_name) except Exception, e: self.log(str(e)) id = folder.generateUniqueId(type_name) objId = folder.invokeFactory(id=id,type_name=type_name) self.log( 'createPortalObject(): objId = \"%s\"' % (objId) ) obj = getattr(folder,objId,None) obj.setTitle(title) obj.reindexObject() return obj
Portal Catalog samples
from Products.CMFCore.utils import getToolByName catalog = getToolByName(context, 'portal_catalog') # available indexes: print catalog.indexes() # available metadata columns: print catalog.schema() (1) basePath = '/'.join(self.getPhysicalPath()) query = filter query['sort_on'] = 'getObjPositionInParent' query['sort_order'] = 'reverse' query['path'] = {'query' : basePath, 'depth' : levels} query['portal_type'] = types brains = catalog.searchResults(query) (2) purchaseBrains = context.portal_catalog.searchResults(portal_type='Purchase',getId=id) (3) query = {} query['portal_type'] = 'Purchase' query['purchaseId'] = purchaseId purchaseBrains = context.portal_catalog.searchResults(query) (4) purchaseBrains = context.portal_catalog.searchResults( portal_type='Purchase', purchaseId = purchaseId ) (5) t = (DateTime.now() - 1).Date() folder = getattr(portal,'downloads') folderPath = urltool.getPortalPath() + '/' + urltool.getRelativeContentURL(folder) query = {} query['created'] = {'query': t, 'range': 'max'} query['path'] = {'query' : folderPath, 'depth' : 1} query['portal_type'] = ('Folder',) brains = catalog.searchResults(query)
Move items between two folders
from Products.CMFCore.utils import getToolByName catalog = getToolByName(context, 'portal_catalog') urltool = getToolByName(context, "portal_url") portal = urltool.getPortalObject() sourceFolder = getattr(portal,'italia') sourceFolderPath = urltool.getPortalPath() + '/' + urltool.getRelativeContentURL(sourceFolder) targetFolder = getattr(portal,'italia2') targetFolderPath = urltool.getPortalPath() + '/' + urltool.getRelativeContentURL(targetFolder) print str(sourceFolder) + ' ' + sourceFolderPath print str(targetFolder) + ' ' + targetFolderPath query = {} query['path'] = {'query' : sourceFolderPath, 'depth' : 2} query['portal_type'] = ('SalesArea',) brains = catalog.searchResults(query,sort_on='getId') # for reverse sorting: sort_order='reverse' for brain in brains: print brain.getId folder = brain.getObject().aq_parent print folder.getId cb = folder.manage_cutObjects(ids=[brain.getId]) targetFolder.manage_pasteObjects(cb) return printed
Retrieve and delete old items
import DateTime from Products.CMFCore.utils import getToolByName catalog = getToolByName(context, 'portal_catalog') urltool = getToolByName(context, "portal_url") portal = urltool.getPortalObject() t = (DateTime.now() - 2).Date() folder = getattr(portal,'downloads') folderPath = urltool.getPortalPath() + '/' + urltool.getRelativeContentURL(folder) print 'Deleting documents in "%s" created before %s ...' % (folderPath,t) query = {} query['path'] = {'query' : folderPath, 'depth' : 1} query['created'] = {'query': t, 'range': 'max'} query['portal_type'] = ('Folder',) brains = catalog.searchResults(query) ids=[] for brain in brains: ids.append(brain.id) print ids folder.manage_delObjects(ids=ids) return printed
Check Member Role in Context
# verifies if the member has expected roles in context def _checkMemberRole(self): authorized = False membership_tool = getToolByName(self.context, 'portal_membership') member = membership_tool.getAuthenticatedMember() if member is not None: roles = member.getRolesInContext(self.context) if 'Manager' in roles or 'UT' in roles: authorized = True return authorized