Changeset 694
- Timestamp:
- 12/15/06 08:10:49
- Files:
-
- SimpleBlog/trunk/Blog.py (deleted)
- SimpleBlog/trunk/BlogEntry.py (deleted)
- SimpleBlog/trunk/BlogFolder.py (deleted)
- SimpleBlog/trunk/DEPENDS.txt (deleted)
- SimpleBlog/trunk/Extensions/Install.py (modified) (7 diffs, 1 prop)
- SimpleBlog/trunk/Extensions/__init__.py (copied) (copied from SimpleBlog/branches/plone-2.5/Extensions/__init__.py)
- SimpleBlog/trunk/Extensions/utils.py (modified) (1 diff, 1 prop)
- SimpleBlog/trunk/HISTORY.txt (deleted)
- SimpleBlog/trunk/Permissions.py (modified) (1 diff, 1 prop)
- SimpleBlog/trunk/SimpleBlogTool.py (modified) (15 diffs, 1 prop)
- SimpleBlog/trunk/SimpleBlogWorkflow.py (modified) (1 diff, 1 prop)
- SimpleBlog/trunk/Todo.txt (modified) (1 diff, 1 prop)
- SimpleBlog/trunk/TrackBack.py (deleted)
- SimpleBlog/trunk/TrackbackWorkflow.py (modified) (1 prop)
- SimpleBlog/trunk/__init__.py (modified) (3 diffs, 1 prop)
- SimpleBlog/trunk/config.py (modified) (2 diffs, 1 prop)
- SimpleBlog/trunk/content (copied) (copied from SimpleBlog/branches/plone-2.5/content)
- SimpleBlog/trunk/content/__init__.py (copied) (copied from SimpleBlog/branches/plone-2.5/content/__init__.py)
- SimpleBlog/trunk/content/blog.py (copied) (copied from SimpleBlog/branches/plone-2.5/content/blog.py)
- SimpleBlog/trunk/content/blogentry.py (copied) (copied from SimpleBlog/branches/plone-2.5/content/blogentry.py)
- SimpleBlog/trunk/content/blogfolder.py (copied) (copied from SimpleBlog/branches/plone-2.5/content/blogfolder.py)
- SimpleBlog/trunk/content/trackback.py (copied) (copied from SimpleBlog/branches/plone-2.5/content/trackback.py)
- SimpleBlog/trunk/docs (copied) (copied from SimpleBlog/branches/plone-2.5/docs)
- SimpleBlog/trunk/docs/history.txt (copied) (copied from SimpleBlog/branches/plone-2.5/docs/history.txt)
- SimpleBlog/trunk/docs/install.txt (copied) (copied from SimpleBlog/branches/plone-2.5/docs/install.txt)
- SimpleBlog/trunk/docs/readme.txt (copied) (copied from SimpleBlog/branches/plone-2.5/docs/readme.txt)
- SimpleBlog/trunk/i18n/SimpleBlog-da.po (modified) (previous)
- SimpleBlog/trunk/i18n/SimpleBlog-en.po (copied) (copied from SimpleBlog/branches/plone-2.5/i18n/SimpleBlog-en.po)
- SimpleBlog/trunk/i18n/SimpleBlog-nl.po (modified) (3 diffs)
- SimpleBlog/trunk/i18n/SimpleBlog-plone-da.po (modified) (previous)
- SimpleBlog/trunk/i18n/SimpleBlog-plone-en.po (copied) (copied from SimpleBlog/branches/plone-2.5/i18n/SimpleBlog-plone-en.po)
- SimpleBlog/trunk/i18n/SimpleBlog-plone-nl.po (modified) (1 diff)
- SimpleBlog/trunk/i18n/SimpleBlog-plone-zh.po (modified) (previous)
- SimpleBlog/trunk/i18n/SimpleBlog-plone.pot (modified) (previous)
- SimpleBlog/trunk/i18n/SimpleBlog-zh.po (modified) (previous)
- SimpleBlog/trunk/i18n/SimpleBlog.pot (modified) (4 diffs)
- SimpleBlog/trunk/install.txt (deleted)
- SimpleBlog/trunk/readme.txt (deleted)
- SimpleBlog/trunk/refresh.txt (modified) (1 prop)
- SimpleBlog/trunk/releasenotes.txt (modified) (1 diff, 1 prop)
- SimpleBlog/trunk/skins/SimpleBlog/.cvsignore (copied) (copied from SimpleBlog/branches/plone-2.5/skins/SimpleBlog/.cvsignore)
- SimpleBlog/trunk/skins/SimpleBlog/SimpleBlogCSS.css.dtml (modified) (2 diffs, 1 prop)
- SimpleBlog/trunk/skins/SimpleBlog/SimpleBlogCatSearch.pt (modified) (2 diffs, 1 prop)
- SimpleBlog/trunk/skins/SimpleBlog/SimpleBlogDaySearch.pt (modified) (2 diffs, 1 prop)
- SimpleBlog/trunk/skins/SimpleBlog/SimpleBlogFullSearch.pt (modified) (2 diffs, 1 prop)
- SimpleBlog/trunk/skins/SimpleBlog/SimpleBlog_macros.pt (modified) (1 diff, 1 prop)
- SimpleBlog/trunk/skins/SimpleBlog/blogentry_edit.cpt (deleted)
- SimpleBlog/trunk/skins/SimpleBlog/blogentry_view.pt (modified) (1 diff, 1 prop)
- SimpleBlog/trunk/skins/SimpleBlog/blogfolder_icon_alias.gif (copied) (copied from SimpleBlog/branches/plone-2.5/skins/SimpleBlog/blogfolder_icon_alias.gif)
- SimpleBlog/trunk/skins/SimpleBlog/blogfolder_view.pt (modified) (1 diff, 1 prop)
- SimpleBlog/trunk/skins/SimpleBlog/cross-post.gif (copied) (copied from SimpleBlog/branches/plone-2.5/skins/SimpleBlog/cross-post.gif)
- SimpleBlog/trunk/skins/SimpleBlog/entry_pin_alias.gif (copied) (copied from SimpleBlog/branches/plone-2.5/skins/SimpleBlog/entry_pin_alias.gif)
- SimpleBlog/trunk/skins/SimpleBlog/getBeginAndEndTimes.py (deleted)
- SimpleBlog/trunk/skins/SimpleBlog/notifyTBtemplate.pt (modified) (1 prop)
- SimpleBlog/trunk/skins/SimpleBlog/portlet_simpleblog.pt (modified) (1 diff, 1 prop)
- SimpleBlog/trunk/skins/SimpleBlog/portlet_simpleblog_recent.pt (copied) (copied from SimpleBlog/branches/plone-2.5/skins/SimpleBlog/portlet_simpleblog_recent.pt)
- SimpleBlog/trunk/skins/SimpleBlog/portlet_simpleblogcalendar.pt (modified) (1 prop)
- SimpleBlog/trunk/skins/SimpleBlog/prefs_simpleblog_edit.cpy (modified) (1 diff, 1 prop)
- SimpleBlog/trunk/skins/SimpleBlog/prefs_simpleblog_edit.cpy.metadata (modified) (1 prop)
- SimpleBlog/trunk/skins/SimpleBlog/prefs_simpleblog_form.cpt (modified) (2 diffs, 1 prop)
- SimpleBlog/trunk/skins/SimpleBlog/prefs_simpleblog_form.cpt.metadata (modified) (1 prop)
- SimpleBlog/trunk/skins/SimpleBlog/render_body.pt (deleted)
- SimpleBlog/trunk/skins/SimpleBlog/sbtrackback.py (modified) (1 prop)
- SimpleBlog/trunk/skins/SimpleBlog/sbtrackback.py.metadata (modified) (1 prop)
- SimpleBlog/trunk/skins/SimpleBlog/sbtrackbackResponse.py (modified) (1 prop)
- SimpleBlog/trunk/skins/SimpleBlog/simpleblog_byline.pt (copied) (copied from SimpleBlog/branches/plone-2.5/skins/SimpleBlog/simpleblog_byline.pt)
- SimpleBlog/trunk/skins/SimpleBlog/simpleblog_icon_alias.gif (copied) (copied from SimpleBlog/branches/plone-2.5/skins/SimpleBlog/simpleblog_icon_alias.gif)
- SimpleBlog/trunk/skins/SimpleBlog/simpleblog_portlet_macros.pt (copied) (copied from SimpleBlog/branches/plone-2.5/skins/SimpleBlog/simpleblog_portlet_macros.pt)
- SimpleBlog/trunk/skins/SimpleBlog/simpleblog_standalone.pt (modified) (3 diffs, 1 prop)
- SimpleBlog/trunk/skins/SimpleBlog/simpleblog_validate_configlet.vpy (modified) (1 prop)
- SimpleBlog/trunk/skins/SimpleBlog/simpleblog_view.pt (modified) (2 diffs, 1 prop)
- SimpleBlog/trunk/skins/SimpleBlog/simpleblog_view_title.pt (copied) (copied from SimpleBlog/branches/plone-2.5/skins/SimpleBlog/simpleblog_view_title.pt)
- SimpleBlog/trunk/skins/SimpleBlog/simpleblog_view_title.pt.metadata (copied) (copied from SimpleBlog/branches/plone-2.5/skins/SimpleBlog/simpleblog_view_title.pt.metadata)
- SimpleBlog/trunk/skins/SimpleBlog/simpleblog_view_title_description.pt (copied) (copied from SimpleBlog/branches/plone-2.5/skins/SimpleBlog/simpleblog_view_title_description.pt)
- SimpleBlog/trunk/skins/SimpleBlog/simpleblog_view_title_description.pt.metadata (copied) (copied from SimpleBlog/branches/plone-2.5/skins/SimpleBlog/simpleblog_view_title_description.pt.metadata)
- SimpleBlog/trunk/skins/SimpleBlog/simpleblog_view_title_description_body.pt (copied) (copied from SimpleBlog/branches/plone-2.5/skins/SimpleBlog/simpleblog_view_title_description_body.pt)
- SimpleBlog/trunk/skins/SimpleBlog/simpleblog_view_title_description_body.pt.metadata (copied) (copied from SimpleBlog/branches/plone-2.5/skins/SimpleBlog/simpleblog_view_title_description_body.pt.metadata)
- SimpleBlog/trunk/skins/SimpleBlog/tbresult.dtml (deleted)
- SimpleBlog/trunk/temp.txt (deleted)
- SimpleBlog/trunk/tests (copied) (copied from SimpleBlog/branches/plone-2.5/tests)
- SimpleBlog/trunk/tests/SimpleBlogTC.py (copied) (copied from SimpleBlog/branches/plone-2.5/tests/SimpleBlogTC.py)
- SimpleBlog/trunk/tests/__init__.py (copied) (copied from SimpleBlog/branches/plone-2.5/tests/__init__.py)
- SimpleBlog/trunk/tests/framework.py (copied) (copied from SimpleBlog/branches/plone-2.5/tests/framework.py)
- SimpleBlog/trunk/tests/runalltests.py (copied) (copied from SimpleBlog/branches/plone-2.5/tests/runalltests.py)
- SimpleBlog/trunk/tests/testContentCreation.py (copied) (copied from SimpleBlog/branches/plone-2.5/tests/testContentCreation.py)
- SimpleBlog/trunk/tests/testSetup.py (copied) (copied from SimpleBlog/branches/plone-2.5/tests/testSetup.py)
- SimpleBlog/trunk/util.py (modified) (1 prop)
- SimpleBlog/trunk/version.txt (modified) (1 diff, 1 prop)
- SimpleBlog/trunk/xmlrpcMonkeyPatch.py (deleted)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
SimpleBlog/trunk/Extensions/Install.py
- Property svn:eol-style set to native
r693 r694 4 4 from StringIO import StringIO 5 5 from Products.CMFCore.CMFCorePermissions import setDefaultRoles 6 6 from Products.CMFDynamicViewFTI.migrate import migrateFTIs 7 7 from Products.SimpleBlog.config import * 8 9 from Products.SimpleBlog import MetaWeblogAPI10 from Products.SimpleBlog import BloggerAPI11 from Products.SimpleBlog import MovableTypeAPI12 8 13 9 portlets=['here/portlet_simpleblog/macros/portletBlogFull_local', … … 16 12 'here/portlet_simpleblog/macros/portletBlogRecent_global'] 17 13 18 19 20 21 14 def install(self): 22 15 … … 29 22 install_subskin(self, out, GLOBALS) 30 23 24 # Migrate FTI, to make sure we get the necessary infrastructure for the 25 # 'display' menu to work. 26 migrated = migrateFTIs(self, product=PROJECTNAME) 27 print >>out, "Switched to DynamicViewFTI: %s" % ', '.join(migrated) 28 29 # Enable portal_factory 30 factory = getToolByName(self, 'portal_factory') 31 types = factory.getFactoryTypes().keys() 32 if 'TrackBack' not in types: 33 types.append('TrackBack') 34 factory.manage_setPortalFactoryTypes(listOfTypeIds = types) 35 if 'BlogEntry' not in types: 36 types.append('BlogEntry') 37 factory.manage_setPortalFactoryTypes(listOfTypeIds = types) 38 if 'BlogFolder' not in types: 39 types.append('BlogFolder') 40 factory.manage_setPortalFactoryTypes(listOfTypeIds = types) 41 if 'Blog' not in types: 42 types.append('Blog') 43 factory.manage_setPortalFactoryTypes(listOfTypeIds = types) 44 31 45 portal = getToolByName(self,'portal_url').getPortalObject() 32 46 … … 35 49 addTool(type='SimpleBlog manager') 36 50 51 # register the css 52 # Install stylesheet 53 # Make it work for the entire portal because the portlets can 54 # be used everywhere 55 portal_css = getToolByName(self, 'portal_css') 56 portal_css.manage_addStylesheet(id = 'SimpleBlogCSS.css', 57 expression = '', 58 media = 'all', 59 title = 'SimpleBlog styles', 60 enabled = True) 61 37 62 #register the folderish items in portal_properties/site_properties for folder-contents views etc 38 63 site_props = getToolByName(self, 'portal_properties').site_properties 64 39 65 use_folder_tabs = site_props.getProperty('use_folder_tabs') 40 66 if not 'Blog' in use_folder_tabs: 41 site_props._updateProperty('use_folder_tabs', tuple(use_folder_tabs) + ('Blog','BlogFolder','BlogEntry')) 42 67 site_props._updateProperty('use_folder_tabs', tuple(use_folder_tabs) + ('Blog','BlogFolder')) 68 69 use_folder_contents = site_props.getProperty('use_folder_contents') 70 if not 'Blog' in use_folder_contents: 71 site_props._updateProperty('use_folder_contents', tuple(use_folder_contents) + ('Blog','BlogFolder')) 72 73 if ENTRY_IS_FOLDERISH: 74 if not 'BlogEntry' in use_folder_tabs: 75 site_props._updateProperty('use_folder_tabs', tuple(use_folder_tabs) + ('BlogEntry',)) 76 if not 'BlogEntry' in use_folder_contents: 77 site_props._updateProperty('use_folder_contents', tuple(use_folder_contents) + ('BlogEntry',)) 78 79 80 #Make sure blog entries aren't shown in the navtree by default 81 nav_props = getToolByName(self, 'portal_properties').navtree_properties 82 metaTypesNotToList = nav_props.getProperty('metaTypesNotToList') 83 if not 'BlogEntry' in metaTypesNotToList: 84 nav_props._updateProperty('metaTypesNotToList', tuple(metaTypesNotToList) + ('BlogEntry',)) 85 86 # Add to default_page_types 87 # Allow people to have a Blog as the default page 88 propsTool = getToolByName(self, 'portal_properties') 89 siteProperties = getattr(propsTool, 'site_properties') 90 defaultPageTypes = list(siteProperties.getProperty('default_page_types')) 91 if 'Blog' not in defaultPageTypes: 92 defaultPageTypes.append('Blog') 93 siteProperties.manage_changeProperties(default_page_types = defaultPageTypes) 94 43 95 if not portal.hasProperty('trackback_notification_email'): 44 96 portal.manage_addProperty('trackback_notification_email', '', 'string') 45 46 # check for property use_folder_contents. This property seems not to be always there: 47 if not site_props.hasProperty('use_folder_contents'): 48 site_props.manage_addProperty('use_folder_contents', '', 'lines') 49 50 use_folder_contents = site_props.getProperty('use_folder_contents') 51 if not 'Blog' in use_folder_contents: 52 site_props._updateProperty('use_folder_contents', tuple(use_folder_contents) + ('Blog','BlogFolder', 'BlogEntry')) 53 97 54 98 # discussion enabled by default for BlogEntries 55 99 getToolByName(self, 'portal_types').BlogEntry.allow_discussion=1 … … 64 108 category='Products', 65 109 appId='SimpleBlog', 66 imageUrl=' SimpleBlog/simpleblog_icon.gif',110 imageUrl='simpleblog_icon.gif', 67 111 description='Configure SimpleBlog global settings') 68 112 except: 69 113 pass 70 114 71 from Products.SimpleBlog import SimpleBlogWorkflow 115 # install the workflow 116 from Products.SimpleBlog import SimpleBlogWorkflow, TrackbackWorkflow 72 117 reload(SimpleBlogWorkflow) 118 reload(TrackbackWorkflow) 119 73 120 74 121 # Remove workflows for BlogEntry and BlogFolder … … 77 124 78 125 add_workflow(self, 'simpleblog_workflow', 'simpleblog_workflow (Workflow for Blog Entries)', ('BlogEntry',), out) 79 wf_tool.setChainForPortalTypes(('Blog','BlogFolder'), 'folder_workflow')80 81 from Products.SimpleBlog import TrackbackWorkflow82 reload(TrackbackWorkflow)83 84 126 add_workflow(self, 'trackback_workflow', 'trackback_workflow (TrackBack Workflow)', ('TrackBack',), out) 85 wf_tool.setChainForPortalTypes( ('TrackBack'), 'trackback_workflow') 86 87 # Create an RPCAuth if there is not one already 88 installRPCAuth(self) 89 RPCAuth = self.simpleblog_tool.findRPCAuth(self) 90 91 # add the blogger object to the portal's root 92 # Setup the MetaWeblog API 93 portal.metaWeblog = MetaWeblogAPI.MetaWeblogAPI().__of__(self) 94 portal.metaWeblog.setupRPCAuth(RPCAuth) 95 96 # Setup the Blogger API 97 portal.blogger = BloggerAPI.BloggerAPI().__of__(self) 98 portal.blogger.setupRPCAuth(RPCAuth) 99 100 # Setup the MovableTypeAPI API 101 portal.mt = MovableTypeAPI.MovableTypeAPI().__of__(self) 102 portal.mt.setupRPCAuth(RPCAuth) 103 127 128 wf_tool.setChainForPortalTypes(('Blog','BlogFolder'), 'folder_workflow') 129 104 130 print >> out, "Successfully installed %s." % PROJECTNAME 105 131 return out.getvalue() … … 118 144 out.write('Added workflow "%s"\n'%wf_id) 119 145 120 def installRPCAuth(self):121 if not hasattr(self, 'RPCAuth'):122 try:123 self.manage_addProduct['RPCAuth'].manage_addRPCAuth('RPCAuth')124 except:125 raise "An RPCAuth instance could not be created. Please make sure RPCAuth is installed correctly."126 127 146 128 147 def uninstall(self): SimpleBlog/trunk/Extensions/utils.py
- Property svn:eol-style set to native
r693 r694 30 30 31 31 32 from Products.SimpleBlog import MetaWeblogAPI33 from Products.SimpleBlog import BloggerAPI34 from Products.SimpleBlog import MovableTypeAPI35 32 36 def migrateToAPIs(self): 37 """ migrate existing SimpleBlog instance to support BloggingAPIs """ 38 RPCAuth = self.simpleblog_tool.findRPCAuth(self) 39 # Setup the MetaWeblog API 40 self.metaWeblog = MetaWeblogAPI.MetaWeblogAPI().__of__(self) 41 self.metaWeblog.setupRPCAuth(RPCAuth) 42 # Setup the Blogger API 43 self.blogger = BloggerAPI.BloggerAPI().__of__(self) 44 self.blogger.setupRPCAuth(RPCAuth) 45 # Setup the MovableTypeAPI API 46 self.mt = MovableTypeAPI.MovableTypeAPI().__of__(self) 47 self.mt.setupRPCAuth(RPCAuth) 33 #from Products.SimpleBlog import MetaWeblogAPI 34 #from Products.SimpleBlog import BloggerAPI 35 #from Products.SimpleBlog import MovableTypeAPI 36 37 #def migrateToAPIs(self): 38 #""" migrate existing SimpleBlog instance to support BloggingAPIs """ 39 #RPCAuth = self.simpleblog_tool.findRPCAuth(self) 40 ## Setup the MetaWeblog API 41 #self.metaWeblog = MetaWeblogAPI.MetaWeblogAPI().__of__(self) 42 #self.metaWeblog.setupRPCAuth(RPCAuth) 43 ## Setup the Blogger API 44 #self.blogger = BloggerAPI.BloggerAPI().__of__(self) 45 #self.blogger.setupRPCAuth(RPCAuth) 46 ## Setup the MovableTypeAPI API 47 #self.mt = MovableTypeAPI.MovableTypeAPI().__of__(self) 48 #self.mt.setupRPCAuth(RPCAuth) SimpleBlog/trunk/Permissions.py
- Property svn:eol-style set to native
r693 r694 1 1 from Products.CMFCore.CMFCorePermissions import setDefaultRoles 2 from Products.Archetypes.public import listTypes 3 from Products.SimpleBlog.config import PROJECTNAME 2 4 3 5 # Add Entry 4 ADD_BLOGENTRY_PERMISSION = 'SimpleBlog: Add BlogEntry' 5 ADD_SIMPLEBLOG_PERMISSION='SimpleBlog: Add Blog' 6 CROSS_POST_PERMISSION='SimpleBlog: Cross-post' 6 7 7 setDefaultRoles( ADD_BLOGENTRY_PERMISSION, ( 'Manager', 'Owner' ) )8 setDefaultRoles(CROSS_POST_PERMISSION, ( 'Manager', 'Owner' ) ) 8 9 10 TYPE_ROLES = ('Manager', 'Owner') 11 12 permissions = {} 13 def wireAddPermissions(): 14 """Creates a list of add permissions for all types in this project 15 16 Must be called **after** all types are registered! 17 """ 18 global permissions 19 blog_types = listTypes(PROJECTNAME) 20 for btype in blog_types: 21 permission = "%s: Add %s" % (PROJECTNAME, btype['portal_type']) 22 setDefaultRoles(permission, TYPE_ROLES) 23 24 permissions[btype['portal_type']] = permission 25 return permissions SimpleBlog/trunk/SimpleBlogTool.py
- Property svn:eol-style set to native
r693 r694 29 29 self.manage_addProperty('maxItemsInPortlet', 5, 'int') 30 30 self.manage_addProperty('globalCategories', '', 'lines') 31 self.manage_addProperty('showStandardButtons', 1,'boolean')32 31 self.manage_addProperty('createPortletOnBlogCreation', 1,'boolean') 33 self.manage_addProperty('showIcons', 1,'boolean')34 32 35 33 security.declarePublic('getByUID') … … 49 47 return RPCAuth 50 48 parent = parent.aq_parent 51 return None 52 49 return None 50 51 53 52 security.declarePublic('idFromTitle') 54 53 def idFromTitle(self, title): 55 54 id = re.sub('[^A-Za-z0-9_]', '', re.sub(' ', '_', title)).lower() 56 return id 55 return id 57 56 58 57 def _getState(self): … … 77 76 except: 78 77 return [] 79 80 def _getShowStandardButtons(self):81 try:82 return self.showStandardButtons83 except:84 return 185 86 def _getShowIcons(self):87 if not self.hasProperty('showIcons'):88 self.manage_addProperty('showIcons', 1,'boolean')89 try:90 return self.showIcons91 except:92 return 193 78 94 79 def _getCreatePortletOnBlogCreation(self): … … 99 84 100 85 security.declareProtected(CMFCorePermissions.ManagePortal,'setProperties') 101 def setProperties(self, publishedState='published', createPortletOnBlogCreation=None, maxItemsInPortlet=5, globalCategories='' , showStandardButtons=1, showIcons=None):86 def setProperties(self, publishedState='published', createPortletOnBlogCreation=None, maxItemsInPortlet=5, globalCategories=''): 102 87 self.publishedState = publishedState 103 88 if createPortletOnBlogCreation==1 or createPortletOnBlogCreation=='on': … … 106 91 self.createPortletOnBlogCreation=0 107 92 108 if showIcons==1 or showIcons=='on':109 self.showIcons = 1110 else:111 self.showIcons = 0112 113 93 self.maxItemsInPortlet=int(maxItemsInPortlet) 114 94 … … 120 100 121 101 self.globalCategories=value 122 self.showStandardButtons=int(showStandardButtons)123 102 124 103 security.declarePublic('getPublishedState') 125 104 def getPublishedState(self): 126 105 return self._getState() 106 127 107 128 108 security.declarePublic('getMaxItemsInPortlet') … … 154 134 else: 155 135 return context 136 security.declarePublic('getStartpointForSearch') 137 def getStartpointForSearch(self, context): 138 """ 139 When in the context of a blog, return the blog 140 Outside the context of a blog, return context or if context isn't 141 folderish, it's parent container 142 """ 143 plone_utils = getToolByName(context, 'plone_utils') 144 145 startpoint = self.getFrontPage(context) 146 if not startpoint: 147 # we weren't in the context of a blog 148 if plone_utils.isStructuralFolder(context): 149 return context 150 else: 151 return context.aq_parent 152 else: 153 return startpoint 156 154 157 155 security.declarePublic('getAvailableCategories') 158 def getAvailableCategories(self, context ):156 def getAvailableCategories(self, context, startpoint=None): 159 157 """ 160 158 returns a dict of all the available categories with the number of posts inside … … 165 163 # in that case we just search for categories starting in context. 166 164 167 startpoint = self.getStartpoint(context, fromHere=0) 165 if not startpoint: 166 startpoint = self.getStartpoint(context, fromHere=0) 168 167 169 168 # now we have the starting point for our search … … 191 190 result = startpoint.portal_catalog.searchResults(review_state=self._getState(), meta_type='BlogEntry', EntryCategory=c, path={'query':self.getObjectPath(startpoint),'level':0}) 192 191 rescats[c]=len(result) 193 return rescats 192 return rescats 194 193 195 194 security.declarePublic('getSortedKeys') … … 203 202 return self._getGlobalCategories() 204 203 205 security.declarePublic(' searchForEntries')204 security.declarePublic('getStartpoint') 206 205 def getStartpoint(self, context, fromHere=0): 207 206 if context.portal_type!='Blog' and fromHere==0: … … 231 230 232 231 security.declarePublic('searchForEntries') 233 def searchForEntries(self, context, category=None, maxResults=None, fromHere=0 ):232 def searchForEntries(self, context, category=None, maxResults=None, fromHere=0, filterState=1, **kwargs): 234 233 # set maxResults=0 for all the results, 235 234 # leave it to None to get the max from the properties … … 239 238 # when inside a Blog: search for the frontpage 240 239 # when outside a Blog: use context (or its container) 240 241 #filterState controls whether you want to return only published entries 241 242 242 243 startpoint = self.getStartpoint(context, fromHere) 243 244 # now we have the starting point for our search 244 245 245 query={} 246 query=kwargs 247 248 publishedState = self._getState() 246 249 247 250 if category!=None: 248 251 query['EntryCategory']=category 252 253 query['getAlwaysOnTop']=1 254 255 if filterState: 256 query['review_state']=publishedState 257 249 258 250 query['getAlwaysOnTop']=1 251 resultsTop = startpoint.portal_catalog.searchResults(query, review_state=self._getState(), meta_type='BlogEntry', path={'query':self.getObjectPath(startpoint),'level':0}, sort_order='reverse', sort_on='effective') 259 resultsTop = startpoint.portal_catalog.searchResults(query, meta_type='BlogEntry', path={'query':self.getObjectPath(startpoint),'level':0}, sort_order='reverse', sort_on='effective') 252 260 253 261 query['getAlwaysOnTop']=0 254 resultsNoTop = startpoint.portal_catalog.searchResults(query, review_state=self._getState(),meta_type='BlogEntry', path={'query':self.getObjectPath(startpoint),'level':0}, sort_order='reverse', sort_on='effective')262 resultsNoTop = startpoint.portal_catalog.searchResults(query, meta_type='BlogEntry', path={'query':self.getObjectPath(startpoint),'level':0}, sort_order='reverse', sort_on='effective') 255 263 256 264 results = resultsTop + resultsNoTop 257 265 258 259 266 if maxResults==0: 260 267 return results … … 264 271 return results[:maxResults] 265 272 273 274 security.declarePublic('searchForEntries') 275 def collectEntries(self, context, category=None, maxResults=None, filterState=1, allBlogs=0, **kwargs): 276 # first get all the blogs 277 if allBlogs: 278 query = {'meta_type':'Blog', 279 'path':{'query':self.getObjectPath(context),'level':0} 280 } # used meta_type because for some reason, syndication objects also show up. 281 blogs = [b.getObject() for b in self.portal_catalog.searchResults(query)] 282 onTop=[] 283 atBottom=[] 284 # now collect all the entries 285 for blog in blogs: 286 tmpTop, tmpBottom = blog.getEntries(category=category, maxResults=maxResults, filterState = filterState, sort=0, **kwargs) 287 onTop = onTop+tmpTop 288 atBottom = atBottom+tmpBottom 289 #sort 290 onTop.sort((lambda x,y:cmp(y.effective(), x.effective()))) 291 atBottom.sort((lambda x,y:cmp(y.effective(), x.effective()))) 292 293 results = onTop+atBottom 294 else: 295 results = context.getEntries(category=category, maxResults=maxResults, filterState = filterState, sort=0, join=1, skipOnTop=1, **kwargs) 296 297 298 if maxResults==0: 299 return results 300 elif maxResults==None: 301 return results[:self._getMaxItemsInPortlet()] 302 else: 303 return results[:maxResults] 304 266 305 security.declarePublic('searchForDay') 267 306 def searchForDay(self, context, date): 268 307 startpoint = self.getStartpoint(context, fromHere=0) 269 308 # now we have the starting point for our search 270 271 query={'start': DateTime(date).earliestTime(), 'start_usage': 'range:min', 309 310 query={'start': DateTime(date).earliestTime(), 'start_usage': 'range:min', 272 311 'end': DateTime(date).latestTime(), 'end_usage':'range:max'} 273 312 query['getAlwaysOnTop']=1 274 resultsTop = startpoint.portal_catalog.searchResults(query, 275 review_state=self._getState(), 276 meta_type='BlogEntry', 277 path={'query':self.getObjectPath(startpoint),'level':0}, 313 resultsTop = startpoint.portal_catalog.searchResults(query, 314 review_state=self._getState(), 315 meta_type='BlogEntry', 316 path={'query':self.getObjectPath(startpoint),'level':0}, 278 317 sort_order='reverse', sort_on='effective') 279 280 281 318 query['getAlwaysOnTop']=0 282 resultsNoTop = startpoint.portal_catalog.searchResults(query, 283 review_state=self._getState(), 284 meta_type='BlogEntry', 285 path={'query':self.getObjectPath(startpoint),'level':0}, 319 resultsNoTop = startpoint.portal_catalog.searchResults(query, 320 review_state=self._getState(), 321 meta_type='BlogEntry', 322 path={'query':self.getObjectPath(startpoint),'level':0}, 286 323 sort_order='reverse', sort_on='effective') 287 288 324 results = resultsTop + resultsNoTop 289 325 return results 290 326 327 security.declarePublic('getUnpublishedEntries') 328 def getUnpublishedEntries(self, blog): 329 states = self. getEntryWorkflowStates(blog) 330 pubstate = self.getPublishedState() 331 states = [s for s in states if s!=pubstate] 332 query={'review_state':states} 333 entries = self.searchForEntries(blog, filterState=0, maxResults=0, fromHere=1, **query) 334 return entries 335 291 336 security.declarePublic('blogHasEntries') 292 337 def blogHasEntries(self, context, fromHere=0): … … 297 342 """ 298 343 startpoint = self.getStartpoint(context, fromHere=0) 299 344 300 345 # get all entries, doesn't matter what state they're in 301 346 results = startpoint.portal_catalog.searchResults(meta_type='BlogEntry', path={'query':self.getObjectPath(startpoint),'level':0}) 302 347 303 348 if results: 304 349 return True … … 313 358 return context.EffectiveDate() 314 359 315 security.declarePublic('getShowStandardButtons')316 def getShowStandardButtons(self):317 return self._getShowStandardButtons()318 319 security.declarePublic('getShowIcons')320 def getShowIcons(self):321 return self._getShowIcons()322 323 360 security.declarePublic('getCreatePortletOnBlogCreation') 324 361 def getCreatePortletOnBlogCreation(self): SimpleBlog/trunk/SimpleBlogWorkflow.py
- Property svn:eol-style set to native
r693 r694 28 28 """ 29 29 30 __version__ = "$Revision: 1 .3$"[11:-2]30 __version__ = "$Revision: 12627 $"[11:-2] 31 31 32 32 from Products.CMFCore.WorkflowTool import addWorkflowFactory SimpleBlog/trunk/Todo.txt
- Property svn:eol-style set to native
r693 r694 1 Todo: 2 ==== 3 Atom, blogger-api support. 1 Check translations 4 2 5 3 6 SimpleBlog/trunk/TrackbackWorkflow.py
- Property svn:eol-style set to native
SimpleBlog/trunk/__init__.py
- Property svn:eol-style set to native
r693 r694 3 3 from Products.CMFCore import utils 4 4 from Products.CMFCore.DirectoryView import registerDirectory 5 import os, os.path 5 import os, os.path, sys, content 6 7 from Products.CMFCore.utils import ContentInit 8 from Products.CMFCore.utils import ToolInit 6 9 7 10 from config import SKINS_DIR, GLOBALS, PROJECTNAME 8 from config import ADD_BLOGENTRY_PERMISSION,ADD_SIMPLEBLOG_PERMISSION9 11 10 12 from Globals import InitializeClass 11 13 12 import xmlrpcMonkeyPatch 14 registerDirectory(SKINS_DIR, GLOBALS) 13 15 14 registerDirectory(SKINS_DIR, GLOBALS) 16 from Products.SimpleBlog.Permissions import wireAddPermissions 17 18 # Module aliases - we don't always get it right on the first try, but and we 19 # can't move modules around because things are stored in the ZODB with the 20 # full module path. However, we can create aliases for backwards compatability. 21 22 sys.modules['Products.SimpleBlog.Blog'] = content.blog 23 sys.modules['Products.SimpleBlog.BlogEntry'] = content.blogentry 24 sys.modules['Products.SimpleBlog.BlogFolder'] = content.blogfolder 25 sys.modules['Products.SimpleBlog.TrackBack'] = content.trackback 15 26 16 27 def initialize(context): … … 21 32 ModuleSecurityInfo('Products.SimpleBlog.util').declarePublic('encodeURLData') 22 33 23 #allow_module('Products.SimpleBlog.Extensions.utils') 34 from content import BlogEntry 35 from content import Blog 36 from content import BlogFolder 37 from content import TrackBack 24 38 25 39 26 ##Import Types here to register them 27 import BlogEntry 28 import Blog 29 import BlogFolder 30 import TrackBack 40 listOfTypes = listTypes(PROJECTNAME) 41 42 content_types, constructors, ftis = process_types( 43 listOfTypes, 44 PROJECTNAME) 45 46 from Products.SimpleBlog.Permissions import permissions 31 47 32 content_types, constructors, ftis = process_types( 33 listTypes(PROJECTNAME), 34 PROJECTNAME) 35 36 37 blogIndex = getTypeIndex(content_types, 'Blog') 38 entryIndex=getTypeIndex(content_types, 'BlogEntry') 39 folderIndex = getTypeIndex(content_types, 'BlogFolder') 40 trackbackIndex = getTypeIndex(content_types, 'TrackBack') 48 allTypes = zip(content_types, constructors) 49 wireAddPermissions() 50 for atype, constructor in allTypes: 51 kind = "%s: %s" % (PROJECTNAME, atype.archetype_name) 52 ContentInit( 53 kind, 54 content_types = (atype,), 55 permission = permissions[atype.portal_type], 56 extra_constructors = (constructor,), 57 fti = ftis, 58 ).initialize(context) 41 59 42 blog_contstructor = []43 blog_contstructor.append(constructors[blogIndex])44 entry_contstructor = []45 entry_contstructor.append(constructors[entryIndex])46 entry_contstructor.append(constructors[folderIndex])47 entry_contstructor.append(constructors[trackbackIndex])48 49 blog_type = []50 blog_type.append(content_types[blogIndex])51 entry_type = []52 entry_type.append(content_types[entryIndex])53 entry_type.append(content_types[folderIndex])54 entry_type.append(content_types[trackbackIndex])55 56 57 utils.ContentInit(58 PROJECTNAME + ' Content',59 content_types = tuple(blog_type),60 permission = ADD_SIMPLEBLOG_PERMISSION,61 extra_constructors = tuple(blog_contstructor),62 fti = ftis,63 ).initialize(context)64 65 utils.ContentInit(66 PROJECTNAME + ' Content',67 content_types = tuple(entry_type),68 permission = ADD_BLOGENTRY_PERMISSION,69 extra_constructors = tuple(entry_contstructor),70 fti = ftis,71 ).initialize(context)72 73 60 74 61 from SimpleBlogTool import SimpleBlogManager … … 79 66 icon='tool.gif', ).initialize(context) 80 67 81 def getTypeIndex(content_types, meta_type): 82 for i in range(len(content_types)): 83 if content_types[i].meta_type==meta_type: 84 return i 85 68 86 69 87 88 89 90 SimpleBlog/trunk/config.py
- Property svn:eol-style set to native
r693 r694 1 from Permissions import *2 1 from Products.Archetypes.public import DisplayList 3 2 … … 6 5 7 6 GLOBALS = globals() 7 ENABLE_ADSENSE = 1 8 8 9 # deprecated, just here for compatability 9 10 DISPLAY_MODE = DisplayList(( 10 ('full', 'Full', 'display_full'), 11 ('descriptionOnly', 'Description only', 'display_description_only'), 12
