; YCc@s]dklZdklZdklZdklZdkl Z dk l Z dk l Z dklZdklZd klZd klZd klZd klZd klZydklZWndklZnXdklZdkl Z deeefdYZ!ee!de!efdYZ"ee"e"i#Z$dddfZ%dS((s Referenceable(sCatalogMultiplex(sExtensibleMetadata(s BaseObject(s IBaseFolder(sIReferenceable(sIExtensibleMetadata(sshasattr(sClassSecurityInfo(s Unauthorized(saq_base(sInitializeClass(sCMFCorePermissions(s PortalContent(sPortalFolderBase(s PortalFolder(s getToolByName(s _getViewForsBaseFolderMixincBstZdZeeeieifZeZ ei Z dZ dZ dZ e ieiddZeZdZddZe id d Ze id d Ze id dZe ieidgedZe ieideeddZe ieideeddZe ieiddZ e iei!ddZ"dZ#e iei$ddeedZ%eedZ&e ideedZ'RS( sFA not-so-basic Folder implementation, with no Dublin Core Metadatasfolder_icon.gificCs|i}t|do |o|idd|}nt}|ot||}n t |}tt |ddo|||i Sn|SdS(s"Invokes the default view. s queryMethodIDs (Default)scontexts isDocTempiN( sselfs getTypeInfostisshasattrs queryMethodIDs method_idsNonesgetattrsmethods _getViewForsaq_basesREQUEST(sselfs method_idstismethod((sD/mnt/gmirror/ports/www/zope-archetypes/work/Archetypes/BaseFolder.pys__call__(s   sviewcCs |SdS(s!View method for CMF 1.4. N(sself(sself((sD/mnt/gmirror/ports/www/zope-archetypes/work/Archetypes/BaseFolder.pysview<scKs0ti|||iti|||dS(N(s PortalFolders__init__sselfsoidsTitles BaseObjectskwargs(sselfsoidskwargs((sD/mnt/gmirror/ports/www/zope-archetypes/work/Archetypes/BaseFolder.pys__init__DsicCs|ti||d|ti||d||djo?x<|iD]*}ti |o|i||qFqFWndS(s\In the case of a move (op=1) we need to make sure references are mainained for all referencable objects within the one being moved. manage_renameObject calls _notifyOfCopyTo so that the object being renamed doesn't lose its references. But manage_renameObject calls _delObject which calls manage_beforeDelete on all the children of the object being renamed which deletes all references for children of the object being renamed. Here is a patch that does recursive calls for _notifyOfCopyTo to address that problem. sopiN( s BaseObjects_notifyOfCopyTosselfs containersops PortalFolders contentValuesschildsIReferenceablesisImplementedBy(sselfs containersopschild((sD/mnt/gmirror/ports/www/zope-archetypes/work/Archetypes/BaseFolder.pys_notifyOfCopyToJs   smanage_afterAddcCs*ti|||ti|||dS(N(s BaseObjectsmanage_afterAddsselfsitems containersCatalogMultiplex(sselfsitems container((sD/mnt/gmirror/ports/www/zope-archetypes/work/Archetypes/BaseFolder.pysmanage_afterAddcssmanage_afterClonecCs$ti||ti||dS(N(s BaseObjectsmanage_afterClonesselfsitemsCatalogMultiplex(sselfsitem((sD/mnt/gmirror/ports/www/zope-archetypes/work/Archetypes/BaseFolder.pysmanage_afterClonekssmanage_beforeDeletecCs3ti|||ti|||t|_dS(N(s BaseObjectsmanage_beforeDeletesselfsitems containersCatalogMultiplexsNones _v_cp_refs(sselfsitems container((sD/mnt/gmirror/ports/www/zope-archetypes/work/Archetypes/BaseFolder.pysmanage_beforeDeletesssmanage_delObjectscCst|d}t|tjo |g}nxA|D]9}|i|}|i t i | o t dq6q6Wt i||d|SdS(sWe need to enforce security.sportal_memberships-Do not have permissions to remove this objectsREQUESTN(s getToolByNamesselfsmtstypesidssstrsids_getObsitemscheckPermissionsCMFCorePermissionss DeleteObjectss Unauthorizeds PortalFoldersmanage_delObjectssREQUEST(sselfsidssREQUESTsitemsmtsid((sD/mnt/gmirror/ports/www/zope-archetypes/work/Archetypes/BaseFolder.pysmanage_delObjectss slistFolderContentscCspti|d|d|}|oFgi}|D]+}|i d djo||q0q0~}n|SdS(s\Optionally you can suppress "hidden" files, or files that begin with a dot. sspecs contentFilteris.N( s PortalFolderslistFolderContentssselfsspecs contentFilterscontentsssuppressHiddenFilessappends_[1]sobjsgetId(sselfsspecs contentFilterssuppressHiddenFilessobjs_[1]scontents((sD/mnt/gmirror/ports/www/zope-archetypes/work/Archetypes/BaseFolder.pyslistFolderContentss  FsfolderlistingFolderContentscCs|i|||SdS(sCalls listFolderContents in protected only by ACI so that folder_listing can work without the List folder contents permission, as in CMFDefault. N(sselfslistFolderContentssspecs contentFilterssuppressHiddenFiles(sselfsspecs contentFilterssuppressHiddenFiles((sD/mnt/gmirror/ports/www/zope-archetypes/work/Archetypes/BaseFolder.pysfolderlistingFolderContentsssTitlecKs|idi||SdS(scWe have to override Title here to handle arbitrary arguments since PortalFolder defines it.stitleN(sselfsgetFieldsgetskwargs(sselfskwargs((sD/mnt/gmirror/ports/www/zope-archetypes/work/Archetypes/BaseFolder.pysTitlesssetTitlecKs |idi|||dS(sfWe have to override setTitle here to handle arbitrary arguments since PortalFolder defines it.stitleN(sselfsgetFieldssetsvalueskwargs(sselfsvalueskwargs((sD/mnt/gmirror/ports/www/zope-archetypes/work/Archetypes/BaseFolder.pyssetTitlescCs>yti||SWn#tj oti||SnXdS(sOverwrite __getitem__. At first it's using the BaseObject version. If the element can't be retrieved from the schema it's using PortalFolder as fallback which should be the ObjectManager's version. N(s BaseObjects __getitem__sselfskeysKeyErrors PortalFolder(sselfskey((sD/mnt/gmirror/ports/www/zope-archetypes/work/Archetypes/BaseFolder.pys __getitem__s smanage_addFolderscCs/|i}y!|o |idpt}Wntj o t}nX|tj ot||d|nb|tjot|dt}n|tjo|o |i pd}n|i |d||i |}y|i|Wntj onXy|iWntj onXdS(sAdd a new folder-like object with id *id*. IF present, use the parent object's 'mkdir' alias; otherwise, just add a PortalFolder. smkdirsids_at_type_subfoldersFolderN(sselfs getTypeInfostis getMethodURLsNonesmethodsAttributeErrorsgetattrsids type_namesgetIds invokeFactorys_getObsobssetTitlestitles reindexObject(sselfsidstitlesREQUESTs type_namesobsmethodsti((sD/mnt/gmirror/ports/www/zope-archetypes/work/Archetypes/BaseFolder.pysmanage_addFolders,  !    cCs6ti||||}|i|||||SdS(sYHook into the MKCOL (make collection) process to call manage_afterMKCOL. N(s PortalFolders MKCOL_handlersselfsidsREQUESTsRESPONSEsresultsmanage_afterMKCOL(sselfsidsREQUESTsRESPONSEsresult((sD/mnt/gmirror/ports/www/zope-archetypes/work/Archetypes/BaseFolder.pys MKCOL_handlerssmanage_afterMKCOLcCsdS(sAfter MKCOL handler. N((sselfsidsresultsREQUESTsRESPONSE((sD/mnt/gmirror/ports/www/zope-archetypes/work/Archetypes/BaseFolder.pysmanage_afterMKCOLs((s__name__s __module__s__doc__s IBaseFoldersIReferenceables BaseObjects__implements__s PortalFoldersClassSecurityInfossecuritysmanage_optionss content_iconsuse_folder_tabss__call__sdeclareProtectedsCMFCorePermissionssViewsviewsNones index_htmls__init__s_notifyOfCopyTosdeclarePrivatesmanage_afterAddsmanage_afterClonesmanage_beforeDeletes DeleteObjectssmanage_delObjectssListFolderContentsslistFolderContentssAccessContentsInformationsfolderlistingFolderContentssTitlesModifyPortalContentssetTitles __getitem__sAddPortalFolderssmanage_addFolders MKCOL_handlersmanage_afterMKCOL(((sD/mnt/gmirror/ports/www/zope-archetypes/work/Archetypes/BaseFolder.pysBaseFolderMixinsN                    & s BaseFoldercBswtZdZeiefZeieiZeZ dZ e i e i ddZe i e iddZRS(sLA not-so-basic Folder implementation, with Dublin Core Metadata includedcKs$ti|||ti|dS(N(sBaseFolderMixins__init__sselfsoidskwargssExtensibleMetadata(sselfsoidskwargs((sD/mnt/gmirror/ports/www/zope-archetypes/work/Archetypes/BaseFolder.pys__init__ss DescriptioncKs|idi||SdS(siWe have to override Description here to handle arbitrary arguments since PortalFolder defines it.s descriptionN(sselfsgetFieldsgetskwargs(sselfskwargs((sD/mnt/gmirror/ports/www/zope-archetypes/work/Archetypes/BaseFolder.pys Description sssetDescriptioncKs |idi|||dS(slWe have to override setDescription here to handle arbitrary arguments since PortalFolder defines it.s descriptionN(sselfsgetFieldssetsvalueskwargs(sselfsvalueskwargs((sD/mnt/gmirror/ports/www/zope-archetypes/work/Archetypes/BaseFolder.pyssetDescriptions(s__name__s __module__s__doc__sBaseFolderMixins__implements__sIExtensibleMetadatasschemasExtensibleMetadatasClassSecurityInfossecuritys__init__sdeclareProtectedsCMFCorePermissionssViews DescriptionsModifyPortalContentssetDescription(((sD/mnt/gmirror/ports/www/zope-archetypes/work/Archetypes/BaseFolder.pys BaseFolders      sBaseFolderSchemaN(&s!Products.Archetypes.Referenceables Referenceables$Products.Archetypes.CatalogMultiplexsCatalogMultiplexs&Products.Archetypes.ExtensibleMetadatasExtensibleMetadatasProducts.Archetypes.BaseObjects BaseObjects#Products.Archetypes.interfaces.bases IBaseFolders,Products.Archetypes.interfaces.referenceablesIReferenceables'Products.Archetypes.interfaces.metadatasIExtensibleMetadatasProducts.Archetypes.utilssshasattrs AccessControlsClassSecurityInfos Unauthorizeds Acquisitionsaq_basesGlobalssInitializeClasssProducts.CMFCoresCMFCorePermissionssProducts.CMFCore.PortalContents PortalContentsProducts.CMFCore.PortalFoldersPortalFolderBases PortalFoldersProducts.CMFCore.utilss getToolByNames _getViewForsBaseFolderMixins BaseFoldersschemasBaseFolderSchemas__all__(s PortalContents BaseObjects UnauthorizedsIReferenceablesBaseFolderMixins IBaseFoldersExtensibleMetadatasClassSecurityInfosBaseFolderSchemasInitializeClasssCMFCorePermissionssshasattrs ReferenceablesCatalogMultiplexs__all__s _getViewFors getToolByNames BaseFoldersIExtensibleMetadatas PortalFoldersaq_base((sD/mnt/gmirror/ports/www/zope-archetypes/work/Archetypes/BaseFolder.pys?s2