mς ,αΈEc@s:dklZdfd„ƒYZdefd„ƒYZdS((sFoldertProductRegistryMixincBsbtZddd„Zd„Zdd„Zdd„Zfd d„Zd„Zd „Z d „Z RS( NcCs¬g}|i}xƒ|iƒD]u}|idƒo_|d|jo%|djp||djoqn||djoqn|i |ƒqqW|i t |ƒƒdS(Ntproducttname( trRtidtpidtselft_getProductRegistryMetaTypestmtthas_keyt meta_typetNonetappendt_setProductRegistryMetaTypesttuple(RRRR RRR((t2/data/zmath/zope/lib/python/App/ProductRegistry.pyt _manage_remove_product_meta_type s  /cCsd|S(Nsmanage_addProduct/%s/(R(RR((Rt_constructor_prefix_string.stcCs|i}|iƒ}x™|D]‘}|d|joz|idƒp||d%s is already defined.s%s%stactiont permission( RRRRRt meta_typesRR R t ValueErrorRRR (RRRR RRRR((Rt_manage_add_product_meta_type1s"   4cCsπg}g}|i}x¨|idƒD]—}|idƒo|d|jo%|djp||djoq%n||djoq%n|i |ƒ|i |d|d|dfƒq%q%W|i dt |ƒƒ|i dt |ƒƒdS(Nt permissionsRRtmethodstdefaulttac_permissions(Rtr2RRRRt_getProductRegistryDatatdR RR R t_setProductRegistryDataR(RRRRRRR((Rt!_manage_remove_product_permissionLs / *tManagercCsΘ|idƒ}x0|D](}|d|jotd|‚qqWhd|<d|<d|<d|<d|i <}|i d||fƒ|i d|idƒ|d|d|dffƒdS( NRRs.The permission %s is already defined.RRRRR( RRRRRRRRRRR(RRRRRRR((Rt_manage_add_product_permission\s6 cCs.t||ƒot||ƒSn|i|ƒS(N(thasattrRRtgetattrt aq_acquire(RR((Rtaq_maybevscKsnt||d„t|idƒ|ƒƒƒ}||d<||d<|i |ƒ|idƒ|t |ƒƒdS(NcCs |d|jo|d|j S(NRR(RRR(RRR((Rt}sRRRR( tfilterRRtlistRR&ttypetvaluestdataR R(RR*RRR,R+((Rt_manage_add_product_data{s    cCsGt||d„|idƒ|ƒƒ}|idƒ|t|ƒƒdS(NcCs&|d|dfjo|d|j S(NRRR(RRR(RRR((RR'ŠsRR(R(RRRR&R*R+R(RR*RRR+((Rt_manage_remove_product_dataˆs(R!( t__name__t __module__R RRRR R"R&R-R.(((RRs     tProductRegistrycBsMtZd„ZfZfZfZfZd„Zd„Zd„Z d„Z RS(NcCs |iiS(N(Rt Control_PaneltProducts(R((Rt _getProductsscCs|iS(N(Rt_product_meta_types(R((RR¦scCs ||_dS(N(tvRR5(RR6((RR §scCst|d|ƒS(Ns _product_%s(R$RR(RR((RR©scCs;d|}t||ƒot|||ƒSn t|‚dS(Ns _product_%s(RR#RtsetattrR6tAttributeError(RRR6((RR¬s ( R/R0R4R5t_product_permissionst_product_ac_permissionst_product_zclassesRR RR(((RR1–s    N(t OFS.FoldertFolderRR1(R=R1R((Rt?s |