Changeset 319 in products for SimpleBlog/branches/plone-2.1-Blogging-APIs/SimpleBlogTool.py
- Timestamp:
- Apr 12, 2006 3:24:08 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
SimpleBlog/branches/plone-2.1-Blogging-APIs/SimpleBlogTool.py
- Property svn:eol-style deleted
r28 r319 18 18 meta_type= 'SimpleBlog manager' 19 19 plone_tool = 1 20 20 21 21 manage_options=PropertyManager.manage_options 22 22 23 23 security = ClassSecurityInfo() 24 24 calendar_types=['BlogEntry'] 25 25 use_session="" 26 26 27 27 def __init__(self): 28 28 self.manage_addProperty('publishedState', 'published', 'string') 29 29 self.manage_addProperty('maxItemsInPortlet', 5, 'int') 30 30 self.manage_addProperty('globalCategories', '', 'lines') 31 self.manage_addProperty('showStandardButtons', 1,'boolean') 31 32 self.manage_addProperty('createPortletOnBlogCreation', 1,'boolean') 33 self.manage_addProperty('showIcons', 1,'boolean') 32 34 33 35 security.declarePublic('getByUID') … … 47 49 return RPCAuth 48 50 parent = parent.aq_parent 49 return None 50 51 51 return None 52 52 53 security.declarePublic('idFromTitle') 53 54 def idFromTitle(self, title): 54 55 id = re.sub('[^A-Za-z0-9_]', '', re.sub(' ', '_', title)).lower() 55 return id 56 return id 56 57 57 58 def _getState(self): … … 76 77 except: 77 78 return [] 78 79 80 def _getShowStandardButtons(self): 81 try: 82 return self.showStandardButtons 83 except: 84 return 1 85 86 def _getShowIcons(self): 87 if not self.hasProperty('showIcons'): 88 self.manage_addProperty('showIcons', 1,'boolean') 89 try: 90 return self.showIcons 91 except: 92 return 1 93 79 94 def _getCreatePortletOnBlogCreation(self): 80 95 try: … … 84 99 85 100 security.declareProtected(CMFCorePermissions.ManagePortal,'setProperties') 86 def setProperties(self, publishedState='published', createPortletOnBlogCreation=None, maxItemsInPortlet=5, globalCategories='' ):101 def setProperties(self, publishedState='published', createPortletOnBlogCreation=None, maxItemsInPortlet=5, globalCategories='', showStandardButtons=1, showIcons=None): 87 102 self.publishedState = publishedState 88 103 if createPortletOnBlogCreation==1 or createPortletOnBlogCreation=='on': … … 91 106 self.createPortletOnBlogCreation=0 92 107 108 if showIcons==1 or showIcons=='on': 109 self.showIcons = 1 110 else: 111 self.showIcons = 0 112 93 113 self.maxItemsInPortlet=int(maxItemsInPortlet) 94 114 … … 100 120 101 121 self.globalCategories=value 102 122 self.showStandardButtons=int(showStandardButtons) 123 103 124 security.declarePublic('getPublishedState') 104 125 def getPublishedState(self): 105 126 return self._getState() 106 127 107 128 security.declarePublic('getMaxItemsInPortlet') 108 129 def getMaxItemsInPortlet(self): 109 130 return self._getMaxItemsInPortlet() 110 131 111 132 security.declarePublic('getFrontPage') 112 133 def getFrontPage(self, context): … … 126 147 break 127 148 parent=parent.aq_parent 128 149 129 150 if found==1: 130 151 return parent … … 133 154 else: 134 155 return context 135 security.declarePublic('getStartpointForSearch') 136 def getStartpointForSearch(self, context): 137 """ 138 When in the context of a blog, return the blog 139 Outside the context of a blog, return context or if context isn't 140 folderish, it's parent container 141 """ 142 plone_utils = getToolByName(context, 'plone_utils') 143 144 startpoint = self.getFrontPage(context) 145 if not startpoint: 146 # we weren't in the context of a blog 147 if plone_utils.isStructuralFolder(context): 148 return context 149 else: 150 return context.aq_parent 151 else: 152 return startpoint 153 156 154 157 security.declarePublic('getAvailableCategories') 155 def getAvailableCategories(self, context , startpoint=None):158 def getAvailableCategories(self, context): 156 159 """ 157 160 returns a dict of all the available categories with the number of posts inside … … 161 164 # if we are higher in the tree than any Blog then we will end up in the portalobject itself 162 165 # in that case we just search for categories starting in context. 163 if not startpoint: 164 startpoint = self.getStartpoint(context, fromHere=0) 165 categories = context.portal_catalog.uniqueValuesFor('EntryCategory') 166 path = self.getObjectPath(startpoint) 167 166 167 startpoint = self.getStartpoint(context, fromHere=0) 168 169 # now we have the starting point for our search 170 171 result = startpoint.portal_catalog.searchResults(meta_type=['BlogFolder', 'Blog'], path={'query':self.getObjectPath(startpoint),'level':0}) 172 173 # now fetch all the available categories 174 categories=[] 175 for o in result: 176 obj=o.getObject() 177 cats = obj.getCategories() 178 for c in cats: 179 if not c in categories: 180 categories.append(c) 181 182 # add the global categories 183 for c in self.getGlobalCategories(): 184 if not c in categories: 185 categories.append(c) 186 168 187 # now we have a list of unique categories available from startpoint and deeper in tree 169 188 # next step is to count the number of entries for each category 170 189 rescats={} 171 [rescats.update({c:0}) for c in categories] 172 result = startpoint.portal_catalog.searchResults(review_state=self._getState(), meta_type='BlogEntry', path={'query':path,'level':0}) 173 174 for r in result: 175 for c in r.EntryCategory: rescats[c] = rescats[c]+1 176 for c,n in rescats.items(): 177 if n==0: del rescats[c] 178 return rescats 179 190 for c in categories: 191 result = startpoint.portal_catalog.searchResults(review_state=self._getState(), meta_type='BlogEntry', EntryCategory=c, path={'query':self.getObjectPath(startpoint),'level':0}) 192 rescats[c]=len(result) 193 return rescats 194 180 195 security.declarePublic('getSortedKeys') 181 196 def getSortedKeys(self, dict): … … 183 198 keys.sort() 184 199 return keys 185 200 186 201 security.declarePublic('getGlobalCategories') 187 202 def getGlobalCategories(self): 188 203 return self._getGlobalCategories() 189 190 security.declarePublic(' getStartpoint')204 205 security.declarePublic('searchForEntries') 191 206 def getStartpoint(self, context, fromHere=0): 192 207 if context.portal_type!='Blog' and fromHere==0: … … 202 217 break 203 218 parent=parent.aq_parent 204 219 205 220 if found==1: 206 221 startpoint=parent … … 214 229 215 230 return startpoint 216 231 217 232 security.declarePublic('searchForEntries') 218 def searchForEntries(self, context, category=None, maxResults=None, fromHere=0 , filterState=1, **kwargs):233 def searchForEntries(self, context, category=None, maxResults=None, fromHere=0): 219 234 # set maxResults=0 for all the results, 220 235 # leave it to None to get the max from the properties 221 236 # set fromHere=1 to search from the current location. Is used for BlogFolders 222 237 223 238 # first, get the context right 224 239 # when inside a Blog: search for the frontpage 225 240 # when outside a Blog: use context (or its container) 226 227 #filterState controls whether you want to return only published entries 228 241 229 242 startpoint = self.getStartpoint(context, fromHere) 230 query=kwargs 231 publishedState = self._getState() 243 # now we have the starting point for our search 244 245 query={} 246 232 247 if category!=None: 233 248 query['EntryCategory']=category 234 235 if filterState: 236 query['review_state']=publishedState 237 238 results = startpoint.portal_catalog.searchResults(query, meta_type='BlogEntry', 239 path={'query':self.getObjectPath(startpoint),'level':0}, sort_order='reverse', 240 sort_on='effective', sort_limit=maxResults and maxResults or None) 241 242 if maxResults==0: 249 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') 252 253 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') 255 256 results = resultsTop + resultsNoTop 257 258 259 if maxResults==0: 243 260 return results 244 261 elif maxResults==None: … … 246 263 else: 247 264 return results[:maxResults] 248 249 265 250 266 security.declarePublic('searchForDay') … … 252 268 startpoint = self.getStartpoint(context, fromHere=0) 253 269 # now we have the starting point for our search 254 255 query={'start': DateTime(date).earliestTime(), 'start_usage': 'range:min', 270 271 query={'start': DateTime(date).earliestTime(), 'start_usage': 'range:min', 256 272 'end': DateTime(date).latestTime(), 'end_usage':'range:max'} 257 273 query['getAlwaysOnTop']=1 258 resultsTop = startpoint.portal_catalog.searchResults(query, 259 review_state=self._getState(), 260 meta_type='BlogEntry', 261 path={'query':self.getObjectPath(startpoint),'level':0}, 274 resultsTop = startpoint.portal_catalog.searchResults(query, 275 review_state=self._getState(), 276 meta_type='BlogEntry', 277 path={'query':self.getObjectPath(startpoint),'level':0}, 262 278 sort_order='reverse', sort_on='effective') 279 280 263 281 query['getAlwaysOnTop']=0 264 resultsNoTop = startpoint.portal_catalog.searchResults(query, 265 review_state=self._getState(), 266 meta_type='BlogEntry', 267 path={'query':self.getObjectPath(startpoint),'level':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}, 268 286 sort_order='reverse', sort_on='effective') 287 269 288 results = resultsTop + resultsNoTop 270 289 return results 271 272 security.declarePublic('getUnpublishedEntries') 273 def getUnpublishedEntries(self, blog): 274 states = self. getEntryWorkflowStates(blog) 275 pubstate = self.getPublishedState() 276 states = [s for s in states if s!=pubstate] 277 query={'review_state':states} 278 entries = self.searchForEntries(blog, filterState=0, maxResults=0, fromHere=1, **query) 279 return entries 280 290 281 291 security.declarePublic('blogHasEntries') 282 292 def blogHasEntries(self, context, fromHere=0): … … 287 297 """ 288 298 startpoint = self.getStartpoint(context, fromHere=0) 289 299 290 300 # get all entries, doesn't matter what state they're in 291 301 results = startpoint.portal_catalog.searchResults(meta_type='BlogEntry', path={'query':self.getObjectPath(startpoint),'level':0}) 292 302 293 303 if results: 294 304 return True … … 303 313 return context.EffectiveDate() 304 314 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 305 323 security.declarePublic('getCreatePortletOnBlogCreation') 306 324 def getCreatePortletOnBlogCreation(self): … … 316 334 lst.append(states[s].id) 317 335 return lst 318 336 319 337 security.declareProtected(CMFCorePermissions.ManagePortal,'getEntryWorkflowStates') 320 338 def getEntryWorkflowStates(self, context): … … 326 344 if not states[s].id in lst: 327 345 lst.append(states[s].id) 328 346 329 347 return lst 330 348 … … 332 350 def getObjectPath(self, object): 333 351 return os.path.join(*object.getPhysicalPath()).replace('\\', '/') 334 352 335 353 # ====================================================== 336 354 # calendar stuff, copied from CMFCalender … … 351 369 """ Returns a list of days with the correct start day first """ 352 370 return calendar.weekheader(2).split() 353 371 354 372 security.declarePublic('getWeeksList') 355 373 def getWeeksList(self, month='1', year='2002'): … … 364 382 # [28, 29, 30, 31, 0, 0, 0]] 365 383 daysByWeek=calendar.monthcalendar(year, month) 366 384 367 385 return daysByWeek 368 386 … … 382 400 daysByWeek=calendar.monthcalendar(year, month) 383 401 weeks=[] 384 402 385 403 events=self.catalog_getevents(context, year, month) 386 404 387 405 for week in daysByWeek: 388 406 days=[] … … 392 410 else: 393 411 days.append({'day': day, 'event': 0, 'eventslist':[]}) 394 412 395 413 weeks.append(days) 396 414 397 415 return weeks 398 416 399 417 security.declarePublic('catalog_getevents') 400 418 def catalog_getevents(self, context, year, month): … … 406 424 ## last_date=DateTime(str(month)+'/'+str(last_day)+'/'+str(year)) 407 425 last_date=first_date + last_day 408 426 409 427 # get the starting point for our search. This is where we depart from the standard catalog_tool: 410 428 startpoint = self.getStartpoint(context, fromHere=0) 411 429 412 430 query=self.portal_catalog(portal_type=self.calendar_types, 413 431 review_state=self._getState(), … … 418 436 path={'query':self.getObjectPath(startpoint),'level':0}, 419 437 sort_on='start') 420 438 421 439 # compile a list of the days that have events 422 440 eventDays={} … … 468 486 # end calendar stuff 469 487 # ================== 470 488 489 490 471 491 InitializeClass(SimpleBlogManager)
Note: See TracChangeset
for help on using the changeset viewer.