diff --git a/CMFPlone1.0.4.tar.gz b/CMFPlone1.0.4.tar.gz deleted file mode 100644 index ff30ee4..0000000 --- a/CMFPlone1.0.4.tar.gz +++ /dev/null Binary files differ diff --git a/cmfplone.spec b/cmfplone.spec index 8cd2972..4c1b0ff 100644 --- a/cmfplone.spec +++ b/cmfplone.spec @@ -1,9 +1,10 @@ Summary: A user friendly and powerful Content Management System Name: CMFPlone Version: 1.0.5 -Release: 1 +Release: 2 URL: http://plone.org Source0: http://prdownloads.sourceforge.net/plone/%{name}%{version}.tar.gz +Patch: homepage-bugfix.patch License: GPL version 2 Group: Development/Web Applications BuildRoot: %{_tmppath}/%{name}-root @@ -22,6 +23,7 @@ %prep %setup -q +%patch %build @@ -40,6 +42,9 @@ /usr/share/zope/lib/python/Products %changelog +* Sat Jan 10 2004 Alex Tucker 1.0.5-2 +- Fixed default homepage bug. + * Fri Sep 12 2003 Alex Tucker - Updated to version 1.0.5, with dependancy on CMF 1.3.2. diff --git a/homepage-bugfix.patch b/homepage-bugfix.patch new file mode 100644 index 0000000..d80a052 --- /dev/null +++ b/homepage-bugfix.patch @@ -0,0 +1,227 @@ +diff -uNr CMFPlone.orig/MembershipTool.py CMFPlone/MembershipTool.py +--- CMFPlone.orig/MembershipTool.py 2003-09-09 05:42:53.000000000 +0100 ++++ CMFPlone/MembershipTool.py 2004-01-10 16:16:10.000000000 +0000 +@@ -115,7 +115,7 @@ + # Create Member's home page. + # go get the home page text from the skin + try: +- member_content = self.homePageText() ++ member_content = self.homePageText() % member_id + except: + member_content = DEFAULT_MEMBER_CONTENT % member_id + +diff -uNr CMFPlone.orig/MembershipTool.py~ CMFPlone/MembershipTool.py~ +--- CMFPlone.orig/MembershipTool.py~ 1970-01-01 01:00:00.000000000 +0100 ++++ CMFPlone/MembershipTool.py~ 2003-09-09 05:42:53.000000000 +0100 +@@ -0,0 +1,211 @@ ++from Products.CMFCore.utils import getToolByName, _checkPermission ++from Products.CMFDefault.MembershipTool import MembershipTool as BaseTool ++from Products.CMFDefault.Document import addDocument ++from Products.CMFPlone.PloneFolder import addPloneFolder ++from Acquisition import aq_base ++ ++default_portrait = 'defaultUser.gif' ++ ++DEFAULT_MEMBER_CONTENT = """\ ++Default page for %s ++ ++ This is the default document created for you when ++ you joined this community. ++ ++ To change the content just click the 'edit' ++ tab above. ++""" ++ ++class MembershipTool( BaseTool ): ++ """ Plone customized Membership Tool """ ++ meta_type='Plone Membership Tool' ++ plone_tool = 1 ++ personal_id = '.personal' ++ portrait_id = 'MyPortrait' ++ default_portrait = 'defaultUser.gif' ++ ++ def getPersonalPortrait(self, member_id=None, verifyPermission=0): ++ """ ++ returns the Portait for a member_id ++ """ ++ portrait=None ++ personal=self.getPersonalFolder(member_id) ++ ++ if personal: ++ portrait=getattr( personal ++ , self.portrait_id ++ , None ) ++ if verifyPermission and not _checkPermission('View', portrait): ++ return None ++ if portrait is None: ++ portal = getToolByName(self, 'portal_url').getPortalObject() ++ portrait = getattr(portal, default_portrait) ++ ++ return portrait ++ ++ def getPersonalFolder(self, member_id=None): ++ """ ++ returns the Personal Item folder for a member ++ if no Personal Folder exists will return None ++ """ ++ home=self.getHomeFolder(member_id) ++ personal=None ++ if home: ++ personal=getattr( home ++ , self.personal_id ++ , None ) ++ return personal ++ ++ def changeMemberPortrait(self, portrait, member_id=None): ++ """ ++ given a portrait we will modify the users portrait ++ we put this method here because we do not want ++ .personal or portrait in the catalog ++ ++ portraits are $MemberHomeFolder/.personal/MyPortrait ++ """ ++ if portrait and portrait.filename: ++ catalog=getToolByName(self, 'portal_catalog') ++ personal=self.getPersonalFolder(member_id) ++ if not personal: ++ home=self.getHomeFolder(member_id) ++ home.invokeFactory(id=self.personal_id, type_name='Folder') ++ personal=getattr(home, self.personal_id) ++ catalog.unindexObject(personal) #remove persona folder from catalog ++ if hasattr(personal, self.portrait_id): ++ personal.manage_delObjects(self.portrait_id) ++ personal.invokeFactory(id=self.portrait_id, type_name='Image') ++ portrait_obj=getattr(personal, self.portrait_id, None) ++ portrait_obj.edit(file=portrait) ++ catalog.unindexObject(portrait_obj) #remove portrait image from catalog ++ ++ def createMemberarea(self, member_id): ++ """ ++ since we arent using PortalFolders and invokeFactory will not work ++ we must do all of this ourself. ;( ++ """ ++ parent = self.aq_inner.aq_parent ++ members = getattr(parent, 'Members', None) ++ ++ if members is None: ++ parent.manage_addPloneFolder(id='Members', title='Members') ++ members = getattr(parent, 'Members', None) ++ ++ if members is not None and not hasattr(members, member_id): ++ f_title = "%s's Home" % member_id ++ try: ++ addPloneFolder(members, id=member_id, title=f_title) ++ except: ++ members.manage_addPloneFolder(id=member_id, title=f_title) ++ f=getattr(members, member_id) ++ # Grant ownership to Member ++ acl_users = self.__getPUS() ++ user = acl_users.getUser(member_id) ++ if user is not None: ++ user= user.__of__(acl_users) ++ else: ++ from AccessControl import getSecurityManager ++ user= getSecurityManager().getUser() ++ # check that we do not do something wrong ++ if user.getUserName() != member_id: ++ raise NotImplementedError, \ ++ 'cannot get user for member area creation' ++ f.changeOwnership(user) ++ f.manage_setLocalRoles(member_id, ['Owner']) ++ # Create Member's home page. ++ # go get the home page text from the skin ++ try: ++ member_content = self.homePageText() ++ except: ++ member_content = DEFAULT_MEMBER_CONTENT % member_id ++ ++ addDocument( f ++ , 'index_html' ++ , member_id+"'s Home Page" ++ , member_id+"'s front page" ++ , "structured-text" ++ , member_content ++ ) ++ ++ f.index_html._setPortalTypeName( 'Document' ) ++ # Overcome an apparent catalog bug. ++ f.index_html.reindexObject() ++ wftool = getToolByName( f, 'portal_workflow' ) ++ wftool.notifyCreated( f.index_html ) ++ #XXX the above is copy/pasted from CMFDefault.MembershipTool only because ++ #its not using invokeFactory('Folder') -- FIX IT! ++ ++ #XXX Below is what really is Plone customizations ++ member_folder=self.getHomeFolder(member_id) ++ member_folder.description = 'Home page area that contains the items created and ' \ ++ + 'collected by %s' % member_id ++ ++ member_folder.manage_addPloneFolder('.personal', 'Personal Items') ++ personal=getattr(member_folder, '.personal') ++ personal.description = "contains personal workarea items for %s" % member_id ++ personal.changeOwnership(user) ++ personal.manage_setLocalRoles(member_id, ['Owner']) ++ ++ catalog = getToolByName(self, 'portal_catalog') ++ catalog.unindexObject(personal) #dont add .personal folders to catalog ++ ++ # Hook to allow doing other things after memberarea creation. ++ notify_script = getattr(member_folder, 'notifyMemberAreaCreated', None) ++ ++ if notify_script is not None: ++ notify_script() ++ ++ # this should probably be in MemberDataTool.py ++ #security.declarePublic( 'searchForMembers' ) ++ def searchForMembers( self, REQUEST=None, **kw ): ++ """ """ ++ if REQUEST: ++ dict = REQUEST ++ else: ++ dict = kw ++ ++ name = dict.get('name', None) ++ email = dict.get('email', None) ++ roles = dict.get('roles', None) ++ last_login_time = dict.get('last_login_time', None) ++ is_manager = self.checkPermission('Manage portal', self) ++ ++ if name: ++ name = name.strip().lower() ++ if not name: ++ name = None ++ if email: ++ email = email.strip().lower() ++ if not email: ++ email = None ++ ++ ++ md = self.portal_memberdata ++ ++ res = [] ++ portal = self.portal_url.getPortalObject() ++ for u in portal.acl_users.getUsers(): ++ user = md.wrapUser(u) ++ if not (user.listed or is_manager): ++ continue ++ if name: ++ if (u.getUserName().lower().find(name) == -1) and (user.fullname.lower().find(name) == -1): ++ continue ++ if email: ++ if user.email.lower().find(email) == -1: ++ continue ++ if roles: ++ user_roles = user.getRoles() ++ found = 0 ++ for r in roles: ++ if r in user_roles: ++ found = 1 ++ break ++ if not found: ++ continue ++ if last_login_time: ++ if user.last_login_time < last_login_time: ++ continue ++ res.append(user) ++ ++ return res