| | 303 | # ITimelineEventProvider methods |
|---|
| | 304 | |
|---|
| | 305 | def get_timeline_filters(self, req): |
|---|
| | 306 | if 'BLOG_VIEW' in req.perm: |
|---|
| | 307 | yield ('blog', _('Blog posts')) |
|---|
| | 308 | yield ('blog-details', _('Blog details')) |
|---|
| | 309 | |
|---|
| | 310 | def get_timeline_events(self, req, start, stop, filters): |
|---|
| | 311 | if 'blog' in filters or 'blog-details' in filters: |
|---|
| | 312 | add_stylesheet(req, 'tracfullblog/css/fullblog.css') |
|---|
| | 313 | blog_realm = Resource('blog') |
|---|
| | 314 | blog_posts = get_blog_posts(self.env, from_dt=start, to_dt=stop, |
|---|
| | 315 | all_versions=True) |
|---|
| | 316 | if 'blog' in filters: |
|---|
| | 317 | # Blog posts |
|---|
| | 318 | for name, version, time, author, title, body, category_list \ |
|---|
| | 319 | in blog_posts: |
|---|
| | 320 | bp_resource = blog_realm(id=name, version=version) |
|---|
| | 321 | if 'BLOG_VIEW' not in req.perm(bp_resource): |
|---|
| | 322 | continue |
|---|
| | 323 | if version != 1: |
|---|
| | 324 | continue # Only interested in first version here |
|---|
| | 325 | bp = BlogPost(self.env, name, version=version) |
|---|
| | 326 | yield ('blog', bp.version_time, bp.version_author, |
|---|
| | 327 | (bp_resource, bp, None)) |
|---|
| | 328 | if 'blog-details' in filters: |
|---|
| | 329 | # Blog posts |
|---|
| | 330 | for name, version, time, author, title, body, category_list \ |
|---|
| | 331 | in blog_posts: |
|---|
| | 332 | bp_resource = blog_realm(id=name, version=version) |
|---|
| | 333 | if 'BLOG_VIEW' not in req.perm(bp_resource): |
|---|
| | 334 | continue |
|---|
| | 335 | if version == 1 and 'blog' in filters: |
|---|
| | 336 | continue # First version handled above |
|---|
| | 337 | bp = BlogPost(self.env, name, version=version) |
|---|
| | 338 | yield ('blog', bp.version_time, bp.version_author, |
|---|
| | 339 | (bp_resource, bp, None)) |
|---|
| | 340 | # Attachments (will be rendered by attachment module) |
|---|
| | 341 | for event in AttachmentModule(self.env).get_timeline_events( |
|---|
| | 342 | req, blog_realm, start, stop): |
|---|
| | 343 | yield event |
|---|
| | 344 | # Blog comments |
|---|
| | 345 | blog_comments = get_blog_comments(self.env, from_dt=start, to_dt=stop) |
|---|
| | 346 | blog_comments = sorted(blog_comments, key=itemgetter(4), reverse=True) |
|---|
| | 347 | for post_name, number, comment, author, time in blog_comments: |
|---|
| | 348 | bp_resource = blog_realm(id=post_name) |
|---|
| | 349 | if 'BLOG_VIEW' not in req.perm(bp): |
|---|
| | 350 | continue |
|---|
| | 351 | bp = BlogPost(self.env, post_name) |
|---|
| | 352 | bc = BlogComment(self.env, post_name, number=number) |
|---|
| | 353 | yield ('blog', time, author, (bp_resource, bp, bc)) |
|---|
| | 354 | |
|---|
| | 355 | |
|---|
| | 356 | def render_timeline_event(self, context, field, event): |
|---|
| | 357 | bp_resource, bp, bc = event[3] |
|---|
| | 358 | format = context.req.args.get('format', '').lower() |
|---|
| | 359 | if bc: # A blog comment |
|---|
| | 360 | if field == 'url': |
|---|
| | 361 | return context.href.blog(bp.name) + '#comment-%d' % bc.number |
|---|
| | 362 | elif field == 'title': |
|---|
| | 363 | return tag(tag.em('Blog: '+bp.title), ' comment added') |
|---|
| | 364 | elif field == 'description': |
|---|
| | 365 | return format_to_oneliner(self.env, |
|---|
| | 366 | context(resource=bp_resource), bc.comment) |
|---|
| | 367 | else: # A blog post |
|---|
| | 368 | if field == 'url': |
|---|
| | 369 | return context.href.blog(bp.name) |
|---|
| | 370 | elif field == 'title': |
|---|
| | 371 | if format == 'rss' and bp.version == 1: |
|---|
| | 372 | return tag(tag.em(bp.title)) |
|---|
| | 373 | else: |
|---|
| | 374 | return tag(tag.em('Blog: '+bp.title), |
|---|
| | 375 | bp.version > 1 and ' edited' or ' created') |
|---|
| | 376 | elif field == 'description': |
|---|
| | 377 | if format.lower() == 'rss': |
|---|
| | 378 | if bp.version == 1: |
|---|
| | 379 | # In RSS, render first version in full view |
|---|
| | 380 | return format_to_html(self.env, |
|---|
| | 381 | context.from_request(context.req, |
|---|
| | 382 | resource=bp_resource, absurls=True), |
|---|
| | 383 | bp.body) |
|---|
| | 384 | else: |
|---|
| | 385 | return format_to_html(self.env, |
|---|
| | 386 | context.from_request(context.req, |
|---|
| | 387 | resource=bp_resource, absurls=True), |
|---|
| | 388 | bp.version_comment) |
|---|
| | 389 | else: |
|---|
| | 390 | # Any other regular display format |
|---|
| | 391 | return format_to_oneliner(self.env, |
|---|
| | 392 | context(resource=bp_resource), |
|---|
| | 393 | bp.version==1 and bp.body or bp.version_comment) |
|---|
| | 394 | |
|---|