Changeset 2352
- Timestamp:
- 06/29/07 16:47:01 (1 year ago)
- Files:
-
- discussionplugin/0.11/setup.py (modified) (2 diffs)
- discussionplugin/0.11/tracdiscussion/admin.py (modified) (3 diffs)
- discussionplugin/0.11/tracdiscussion/api.py (modified) (25 diffs)
- discussionplugin/0.11/tracdiscussion/core.py (modified) (2 diffs)
- discussionplugin/0.11/tracdiscussion/notification.py (modified) (8 diffs)
- discussionplugin/0.11/tracdiscussion/search.py (modified) (2 diffs)
- discussionplugin/0.11/tracdiscussion/timeline.py (modified) (2 diffs)
- discussionplugin/0.11/tracdiscussion/wiki.py (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
discussionplugin/0.11/setup.py
r1987 r2352 6 6 setup( 7 7 name = 'TracDiscussion', 8 version = '0. 5',8 version = '0.6', 9 9 packages = ['tracdiscussion', 'tracdiscussion.db'], 10 package_data = {'tracdiscussion' : ['templates/*. cs', 'htdocs/css/*.css']},10 package_data = {'tracdiscussion' : ['templates/*.html', 'templates/*.txt', 'htdocs/css/*.css']}, 11 11 entry_points = {'trac.plugins': ['TracDiscussion.core = tracdiscussion.core', 12 12 'TracDiscussion.init = tracdiscussion.init', … … 16 16 'TracDiscussion.search = tracdiscussion.search', 17 17 'TracDiscussion.notification = tracdiscussion.notification']}, 18 install_requires = [' TracWebAdmin'],18 install_requires = [''], 19 19 keywords = 'trac discussion', 20 author = ' Alec Thomas, Radek BartoÅ',21 author_email = ' trac-hacks@swapoff.org',20 author = 'Radek BartoÅ, Alec Thomas', 21 author_email = 'blackhex@post.cz', 22 22 url = 'http://trac-hacks.swapoff.org/wiki/DiscussionPlugin', 23 23 description = 'Discussion forum plugin for Trac', discussionplugin/0.11/tracdiscussion/admin.py
r1482 r2352 1 1 # -*- coding: utf8 -*- 2 2 3 from tracdiscussion.api import * 3 import time 4 4 5 from trac.core import * 5 from trac. perm import IPermissionRequestor6 from trac.context import Context 6 7 from trac.web.chrome import add_stylesheet 7 8 from trac.wiki import wiki_to_html, wiki_to_oneliner 8 from webadmin.web_ui import IAdminPageProvider 9 import time 9 10 from trac.perm import IPermissionRequestor 11 from trac.admin import IAdminPanelProvider 12 13 from tracdiscussion.api import * 10 14 11 15 class DiscussionWebAdmin(Component): … … 14 18 via WebAdminPlugin. 15 19 """ 16 implements(IAdminPa geProvider)20 implements(IAdminPanelProvider) 17 21 18 22 # IAdminPageProvider 19 def get_admin_pa ges(self, req):23 def get_admin_panels(self, req): 20 24 if req.perm.has_permission('DISCUSSION_ADMIN'): 21 25 yield ('discussion', 'Discussion System', 'group', 'Forum Groups') 22 26 yield ('discussion', 'Discussion System', 'forum', 'Forums') 23 27 24 def process_admin_request(self, req, category, page, path_info):28 def render_admin_panel(self, req, category, page, path_info): 25 29 # Prepare request object 26 30 if page == 'forum': … … 32 36 if path_info: 33 37 req.args['group'] = path_info 34 req.args['component'] = 'admin'35 38 36 # Get database access 37 db = self.env.get_db_cnx() 38 cursor = db.cursor() 39 # Create request context. 40 context = Context(self.env, req)('discussion-admin') 41 context.cursor = context.db.cursor() 42 43 # Process request. 44 api = DiscussionApi() 45 content = api.process_discussion(context) 46 context.db.commit() 39 47 40 48 # Retrun page content 41 api = DiscussionApi(self, req)42 content = api.render_discussion(req, cursor)43 db.commit()44 49 return content discussionplugin/0.11/tracdiscussion/api.py
r2273 r2352 1 1 # -*- coding: utf8 -*- 2 2 3 import time, datetime 4 5 from trac.core import * 6 from trac.web.chrome import add_stylesheet, add_script 7 from trac.wiki.formatter import format_to_html, format_to_oneliner 8 from trac.perm import PermissionError 9 from trac.util.datefmt import format_datetime, pretty_timedelta, FixedOffset 10 11 from genshi.template import TemplateLoader 12 3 13 from tracdiscussion.notification import * 4 from trac.core import * 5 from trac.web.chrome import add_stylesheet 6 from trac.wiki import wiki_to_html, wiki_to_oneliner 7 from trac.perm import PermissionError 8 from trac.util import format_datetime, pretty_timedelta 9 import time 14 15 utc = FixedOffset(0, 'UTC') 10 16 11 17 class DiscussionApi(object): 12 def __init__(self, component, req): 13 self.env = component.env14 self. log = component.log18 19 def __init__(self): 20 self.data = {} 15 21 16 22 # Main request processing function 17 23 18 def render_discussion(self, req, cursor): 19 # Get request mode 20 group, forum, topic, message = self._get_items(req, cursor) 21 modes = self._get_modes(req, group, forum, topic, message) 22 self.log.debug('modes: %s' % modes) 24 def process_discussion(self, context): 25 # Get request items and modes. 26 group, forum, topic, message = self._get_items(context) 27 modes = self._get_modes(context, group, forum, topic, message) 28 29 # Debug 30 context.env.log.debug(group) 31 context.env.log.debug(forum) 32 context.env.log.debug(topic) 33 context.env.log.debug(message) 34 context.env.log.debug(modes) 23 35 24 36 # Determine moderator rights. 37 is_moderator = forum and (context.req.authname in forum['moderators']) \ 38 or context.req.perm.has_permission('DISCUSSION_ADMIN') 39 40 # Add CSS styles 41 add_stylesheet(context.req, 'common/css/wiki.css') 42 add_stylesheet(context.req, 'discussion/css/discussion.css') 43 add_stylesheet(context.req, 'discussion/css/admin.css') 44 45 add_script(context.req, 'common/js/trac.js') 46 add_script(context.req, 'common/js/search.js') 47 add_script(context.req, 'common/js/wikitoolbar.js') 48 49 # Perform mode actions 50 self._do_action(context, modes, group, forum, topic, message, 51 is_moderator) 52 53 # Fill up template data struture. 54 self.data['authname'] = context.req.authname 55 self.data['is_moderator'] = is_moderator 56 self.data['group'] = group 57 self.data['forum'] = forum 58 self.data['topic'] = topic 59 self.data['message'] = message 60 self.data['mode'] = modes[-1] 61 self.data['time'] = format_datetime(datetime.datetime.now(utc)) 62 self.data['realm'] = context.realm 63 64 # Convert group, forum topic and message values for pressentation. 65 if group: 66 group['name'] = format_to_oneliner(context, group['name']) 67 group['description'] = format_to_oneliner(context, 68 group['description']) 25 69 if forum: 26 is_moderator = (req.authname in forum['moderators']) or \ 27 req.perm.has_permission('DISCUSSION_ADMIN') 28 else: 29 is_moderator = req.perm.has_permission('DISCUSSION_ADMIN') 30 31 # Perform mode actions 32 self._do_action(req, cursor, modes, group, forum, topic, message, 33 is_moderator) 34 35 # Add CSS styles 36 add_stylesheet(req, 'common/css/wiki.css') 37 add_stylesheet(req, 'discussion/css/discussion.css') 38 add_stylesheet(req, 'discussion/css/admin.css') 39 40 # Fill up HDF structure and return template 41 req.hdf['discussion.authname'] = req.authname 42 req.hdf['discussion.is_moderator'] = is_moderator 43 if group: 44 group['name'] = wiki_to_oneliner(group['name'], self.env) 45 group['description'] = wiki_to_oneliner(group['description'], 46 self.env) 47 req.hdf['discussion.group'] = group 48 if forum: 49 forum['name'] = wiki_to_oneliner(forum['name'], self.env) 50 forum['description'] = wiki_to_oneliner(forum['description'], 51 self.env) 52 forum['subject'] = wiki_to_oneliner(forum['subject'], self.env) 70 forum['name'] = format_to_oneliner(context, forum['name']) 71 forum['subject'] = format_to_oneliner(context, forum['subject']) 72 forum['description'] = format_to_oneliner(context, 73 forum['description']) 53 74 forum['time'] = format_datetime(forum['time']) 54 req.hdf['discussion.forum'] = forum55 75 if topic: 56 topic['subject'] = wiki_to_oneliner(topic['subject'], self.env)57 topic['author'] = wiki_to_oneliner(topic['author'], self.env)58 topic['body'] = wiki_to_html(topic['body'], self.env, req)76 topic['subject'] = format_to_oneliner(context, topic['subject']) 77 topic['author'] = format_to_oneliner(context, topic['author']) 78 topic['body'] = format_to_html(context, topic['body']) 59 79 topic['time'] = format_datetime(topic['time']) 60 req.hdf['discussion.topic'] = topic61 80 if message: 62 message['author'] = wiki_to_oneliner(message['author'], self.env)63 message['body'] = wiki_to_html(message['body'], self.env, req)81 message['author'] = format_to_oneliner(context, message['author']) 82 message['body'] = format_to_html(context, message['body']) 64 83 message['time'] = format_datetime(message['time']) 65 req.hdf['discussion.message'] = message 66 req.hdf['discussion.mode'] = modes[-1] 67 req.hdf['discussion.time'] = format_datetime(time.time()) 68 return modes[-1] + '.cs', None 69 70 def _get_items(self, req, cursor): 84 85 # Return template and data. 86 return modes[-1] + '.html', {'discussion' : self.data} 87 88 def _get_items(self, context): 71 89 group, forum, topic, message = None, None, None, None 72 90 73 91 # Populate active group 74 if req.args.has_key('group'):75 group_id = int( req.args.get('group') or 0)76 group = self.get_group(c ursor, group_id)92 if context.req.args.has_key('group'): 93 group_id = int(context.req.args.get('group') or 0) 94 group = self.get_group(context, group_id) 77 95 78 96 # Populate active forum 79 if req.args.has_key('forum'):80 forum_id = int( req.args.get('forum') or 0)81 forum = self.get_forum(c ursor, forum_id)97 if context.req.args.has_key('forum'): 98 forum_id = int(context.req.args.get('forum') or 0) 99 forum = self.get_forum(context, forum_id) 82 100 83 101 # Populate active topic 84 if req.args.has_key('topic'):85 topic_id = int( req.args.get('topic') or 0)86 topic = self.get_topic(c ursor, topic_id)102 if context.req.args.has_key('topic'): 103 topic_id = int(context.req.args.get('topic') or 0) 104 topic = self.get_topic(context, topic_id) 87 105 88 106 # Populate active topic 89 if req.args.has_key('message'): 90 message_id = int(req.args.get('message') or 0) 91 message = self.get_message(cursor, message_id) 92 93 self.log.debug('group: %s' % group) 94 self.log.debug('forum: %s' % forum) 95 self.log.debug('topic: %s' % topic) 96 self.log.debug('message: %s' % message) 107 if context.req.args.has_key('message'): 108 message_id = int(context.req.args.get('message') or 0) 109 message = self.get_message(context, message_id) 110 97 111 return group, forum, topic, message 98 112 99 def _get_modes(self, req, group, forum, topic, message):113 def _get_modes(self, context, group, forum, topic, message): 100 114 # Get action 101 component = req.args.get('component') 102 action = req.args.get('discussion_action') 103 preview = req.args.has_key('preview'); 104 submit = req.args.has_key('submit'); 105 self.log.debug('component: %s' % component) 106 self.log.debug('action: %s' % action) 107 108 if component == 'admin': 109 req.hdf['discussion.href'] = req.href.admin('discussion') 110 elif component == 'wiki': 111 req.hdf['discussion.href'] = req.href(req.path_info) 112 else: 113 req.hdf['discussion.href'] = req.href.discussion() 114 req.hdf['discussion.component'] = component 115 action = context.req.args.get('discussion_action') 116 preview = context.req.args.has_key('preview'); 117 submit = context.req.args.has_key('submit'); 115 118 116 119 # Determine mode 117 120 if message: 118 if co mponent == 'admin':121 if context.realm == 'discussion-admin': 119 122 pass 120 elif co mponent == 'wiki':123 elif context.realm == 'discussion-wiki': 121 124 if action == 'add': 122 return [' wiki-message-list']125 return ['message-add', 'wiki-message-list'] 123 126 elif action == 'quote': 124 127 return ['message-quote', 'wiki-message-list'] … … 143 146 else: 144 147 if action == 'add': 145 return ['message- list']148 return ['message-add', 'message-list'] 146 149 elif action == 'quote': 147 150 return ['message-quote', 'message-list'] … … 165 168 return ['message-list'] 166 169 if topic: 167 if co mponent == 'admin':170 if context.realm == 'discussion-admin': 168 171 pass 169 elif co mponent == 'wiki':172 elif context.realm == 'discussion-wiki': 170 173 if action == 'add': 171 return [' wiki-message-list']174 return ['message-add', 'wiki-message-list'] 172 175 elif action == 'quote': 173 176 return ['topic-quote','wiki-message-list'] … … 190 193 else: 191 194 if action == 'add': 192 return ['message- list']195 return ['message-add', 'message-list'] 193 196 elif action == 'quote': 194 197 return ['topic-quote', 'message-list'] … … 216 219 return ['message-list'] 217 220 elif forum: 218 if co mponent == 'admin':221 if context.realm == 'discussion-admin': 219 222 if action == 'post-edit': 220 223 return ['forum-post-edit', 'admin-forum-list'] 221 224 else: 222 225 return ['admin-forum-list'] 223 elif co mponent == 'wiki':226 elif context.realm == 'discussion-wiki': 224 227 return ['wiki-message-list'] 225 228 else: … … 236 239 return ['topic-list'] 237 240 elif group: 238 if co mponent == 'admin':241 if context.realm == 'discussion-admin': 239 242 if action == 'post-add': 240 243 return ['forum-post-add', 'admin-forum-list'] … … 248 251 else: 249 252 return ['admin-forum-list'] 250 elif co mponent == 'wiki':253 elif context.realm == 'discussion-wiki': 251 254 return ['wiki-message-list'] 252 255 else: … … 256 259 return ['forum-list'] 257 260 else: 258 if co mponent == 'admin':261 if context.realm == 'discussion-admin': 259 262 if action == 'post-add': 260 263 return ['group-post-add', 'admin-group-list'] … … 263 266 else: 264 267 return ['admin-group-list'] 265 elif co mponent == 'wiki':268 elif context.realm == 'discussion-wiki': 266 269 return ['wiki-message-list'] 267 270 else: … … 273 276 return ['forum-list'] 274 277 275 def _do_action(self, req, cursor, modes, group, forum, topic, message,278 def _do_action(self, context, modes, group, forum, topic, message, 276 279 is_moderator): 277 280 for mode in modes: 278 self.log.debug('doing %s mode action' % (mode,))279 281 if mode == 'group-list': 280 req.perm.assert_permission('DISCUSSION_VIEW')282 context.req.perm.assert_permission('DISCUSSION_VIEW') 281 283 282 284 # Display groups. 283 req.hdf['discussion.groups'] = self.get_groups(req, cursor)285 self.data['groups'] = self.get_groups(context) 284 286 285 287 elif mode == 'admin-group-list': 286 req.perm.assert_permission('DISCUSSION_ADMIN')288 context.req.perm.assert_permission('DISCUSSION_ADMIN') 287 289 288 290 # Get form values 289 order = req.args.get('order') or 'id' 290 desc = req.args.get('desc') 291 order = context.req.args.get('order') or 'id' 292 desc = context.req.args.get('desc') 293 294 # Prepare values for edit form. 295 if group: 296 self.data['name'] = group['name'] 297 self.data['description'] = group['description'] 291 298 292 299 # Display groups. 293 req.hdf['discussion.order'] = order 294 req.hdf['discussion.desc'] = desc 295 if group: 296 req.hdf['discussion.name'] = group['name'] 297 req.hdf['discussion.description'] = \ 298 group['description'] 299 req.hdf['discussion.groups'] = self.get_groups(req, cursor, order, desc) 300 self.data['order'] = order 301 self.data['desc'] = desc 302 self.data['groups'] = self.get_groups(context, order, desc) 300 303 301 304 elif mode == 'group-add': 302 req.perm.assert_permission('DISCUSSION_ADMIN')305 context.req.perm.assert_permission('DISCUSSION_ADMIN') 303 306 304 307 elif mode == 'group-post-add': 305 req.perm.assert_permission('DISCUSSION_ADMIN')308 context.req.perm.assert_permission('DISCUSSION_ADMIN') 306 309 307 310 # Get form values. 308 new_name = req.args.get('name')309 new_description = req.args.get('description')311 new_name = context.req.args.get('name') 312 new_description = context.req.args.get('description') 310 313 311 314 # Add new group. 312 self.add_group(c ursor, new_name, new_description)315 self.add_group(context, new_name, new_description) 313 316 314 317 elif mode == 'group-post-edit': 315 req.perm.assert_permission('DISCUSSION_ADMIN')318 context.req.perm.assert_permission('DISCUSSION_ADMIN') 316 319 317 320 # Get form values. 318 new_group = int( req.args.get('group') or 0)319 new_name = req.args.get('name')320 new_description = req.args.get('description')321 new_group = int(context.req.args.get('group') or 0) 322 new_name = context.req.args.get('name') 323 new_description = context.req.args.get('description') 321 324 322 325 # Edit group. 323 self.edit_group(c ursor, new_group, new_name, new_description)326 self.edit_group(context, new_group, new_name, new_description) 324 327 325 328 elif mode == 'group-delete': 326 req.perm.assert_permission('DISCUSSION_ADMIN')329 context.req.perm.assert_permission('DISCUSSION_ADMIN') 327 330 328 331 elif mode == 'groups-delete': 329 req.perm.assert_permission('DISCUSSION_ADMIN')332 context.req.perm.assert_permission('DISCUSSION_ADMIN') 330 333 331 334 # Get selected groups. 332 selection = req.args.get('selection')335 selection = context.req.args.get('selection') 333 336 if isinstance(selection, (str, unicode)): 334 337 selection = [selection] … … 337 340 if selection: 338 341 for group_id in selection: 339 self.delete_group(c ursor, int(group_id))342 self.delete_group(context, int(group_id)) 340 343 341 344 elif mode == 'forum-list': 342 req.perm.assert_permission('DISCUSSION_VIEW')345 context.req.perm.assert_permission('DISCUSSION_VIEW') 343 346 344 347 # Get form values 345 order = req.args.get('order') or 'id'346 desc = req.args.get('desc')348 order = context.req.args.get('order') or 'id' 349 desc = context.req.args.get('desc') 347 350 348 351 # Display forums. 349 req.hdf['discussion.order'] = order350 req.hdf['discussion.desc'] = desc351 req.hdf['discussion.groups'] = self.get_groups(req, cursor)352 req.hdf['discussion.forums'] = self.get_forums(req, cursor,353 order, desc)352 self.data['order'] = order 353 self.data['desc'] = desc 354 self.data['groups'] = self.get_groups(context) 355 self.data['forums'] = self.get_forums(context, order, desc) 356 self.data['forum'] = None 354 357 355 358 elif mode == 'admin-forum-list': 356 req.perm.assert_permission('DISCUSSION_ADMIN') 359 context.req.perm.assert_permission('DISCUSSION_ADMIN') 360 361 # Get ordering arguments values 362 order = context.req.args.get('order') or 'id' 363 desc = context.req.args.get('desc') 364 365 # Prepare values for edit form. 366 if forum: 367 self.data['name'] = forum['name'] 368 self.data['subject'] = forum['subject'] 369 self.data['description'] = forum['description'] 370 self.data['moderators'] = forum['moderators'] 371 self.data['group'] = forum['group'] 372 373 # Display forums. 374 self.data['order'] = order 375 self.data['desc'] = desc 376 self.data['users'] = self.get_users(context) 377 self.data['groups'] = self.get_groups(context) 378 self.data['forums'] = self.get_forums(context, order, desc) 379 380 elif mode == 'forum-add': 381 context.req.perm.assert_permission('DISCUSSION_ADMIN') 382 383 # Display Add Forum form. 384 self.data['users'] = self.get_users(context) 385 self.data['groups'] = self.get_groups(context) 386 387 elif mode == 'forum-post-add': 388 context.req.perm.assert_permission('DISCUSSION_ADMIN') 357 389 358 390 # Get form values 359 order = req.args.get('order') or 'id' 360 desc = req.args.get('desc') 361 362 # Display forums. 363 req.hdf['discussion.order'] = order 364 req.hdf['discussion.desc'] = desc 365 self.log.debug(forum) 366 if forum: 367 req.hdf['discussion.name'] = forum['name'] 368 req.hdf['discussion.subject'] = forum['subject'] 369 req.hdf['discussion.description'] = \ 370 forum['description'] 371 req.hdf['discussion.moderators'] = forum['moderators'] 372 req.hdf['discussion.group'] = forum['group'] 373 req.hdf['discussion.users'] = self.get_users() 374 req.hdf['discussion.groups'] = self.get_groups(req, cursor) 375 req.hdf['discussion.forums'] = self.get_forums(req, cursor, 376 order, desc) 377 378 elif mode == 'forum-add': 379 req.perm.assert_permission('DISCUSSION_ADMIN') 380 381 # Display Add Forum form. 382 req.hdf['discussion.users'] = self.get_users() 383 req.hdf['discussion.groups'] = self.get_groups(req, cursor) 384 385 elif mode == 'forum-post-add': 386 req.perm.assert_permission('DISCUSSION_ADMIN') 387 388 # Get form values 389 new_name = req.args.get('name') 390 new_author = req.authname 391 new_subject = req.args.get('subject') 392 new_description = req.args.get('description') 393 new_moderators = req.args.get('moderators') 394 new_group = int(req.args.get('group') or 0) 391 new_name = context.req.args.get('name') 392 new_author = context.req.authname 393 new_subject = context.req.args.get('subject') 394 new_description = context.req.args.get('description') 395 new_moderators = context.req.args.get('moderators') 396 new_group = int(context.req.args.get('group') or 0) 395 397 if not new_moderators: 396 398 new_moderators = [] … … 399 401 400 402 # Perform new forum add. 401 self.add_forum(c ursor, new_name, new_author, new_subject,403 self.add_forum(context, new_name, new_author, new_subject, 402 404 new_description, new_moderators, new_group) 403 405 404 406 elif mode == 'forum-post-edit': 405 req.perm.assert_permission('DISCUSSION_ADMIN')407 context.req.perm.assert_permission('DISCUSSION_ADMIN') 406 408 407 409 # Get form values. 408 new_forum = int( req.args.get('forum') or 0)409 new_name = req.args.get('name')410 new_subject = req.args.get('subject')411 new_description = req.args.get('description')412 new_moderators = req.args.get('moderators')413 new_group = int( req.args.get('group') or 0)410 new_forum = int(context.req.args.get('forum') or 0) 411 new_name = context.req.args.get('name') 412 new_subject = context.req.args.get('subject') 413 new_description = context.req.args.get('description') 414 new_moderators = context.req.args.get('moderators') 415 new_group = int(context.req.args.get('group') or 0) 414 416 if not new_moderators: 415 417 new_moderators = [] … … 418 420 419 421 # Perform forum edit. 420 self.edit_forum(c ursor, new_forum, new_name, new_subject,422 self.edit_forum(context, new_forum, new_name, new_subject, 421 423 new_description, new_moderators, new_group) 422 424 423 425 elif mode == 'forum-delete': 424 req.perm.assert_permission('DISCUSSION_ADMIN')426 context.req.perm.assert_permission('DISCUSSION_ADMIN') 425 427 426 428 # Delete forum 427 self.delete_forum(c ursor, forum['id'])429 self.delete_forum(context, forum['id']) 428 430 429 431 elif mode == 'forums-delete': 430 req.perm.assert_permission('DISCUSSION_ADMIN')432 context.req.perm.assert_permission('DISCUSSION_ADMIN') 431 433 432 434 # Get selected forums. 433 selection = req.args.get('selection')435 selection = context.req.args.get('selection') 434 436 if isinstance(selection, (str, unicode)): 435 437 selection = [selection] … … 438 440 if selection: 439 441 for forum_id in selection: 440 self.delete_forum(c ursor, int(forum_id))442 self.delete_forum(context, int(forum_id)) 441 443 442 444 elif mode == 'topic-list': 443 req.perm.assert_permission('DISCUSSION_VIEW')445 context.req.perm.assert_permission('DISCUSSION_VIEW') 444 446 445 447 # Get form values 446 order = req.args.get('order') or 'id'447 desc = req.args.get('desc')448 order = context.req.args.get('order') or 'id' 449 desc = context.req.args.get('desc') 448 450 449 451 # Display topics. 450 req.hdf['discussion.order'] = order451 req.hdf['discussion.desc'] = desc452 req.hdf['discussion.topics'] = self.get_topics(req, cursor,453 forum['id'],order, desc)452 self.data['order'] = order 453 self.data['desc'] = desc 454 self.data['topics'] = self.get_topics(context, forum['id'], 455 order, desc) 454 456 455 457 elif mode == 'topic-add': 456 req.perm.assert_permission('DISCUSSION_APPEND')458 context.req.perm.assert_permission('DISCUSSION_APPEND') 457 459 458 460 # Get form values. 459 new_subject = req.args.get('subject')460 new_author = req.args.get('author')461 new_body = req.args.get('body')461 new_subject = context.req.args.get('subject') 462 new_author = context.req.args.get('author') 463 new_body = context.req.args.get('body') 462 464 463 465 # Display Add Topic form. 464 466 if new_subject: 465 req.hdf['discussion.subject'] = wiki_to_oneliner(466 new_subject , self.env)467 self.data['subject'] = format_to_oneliner(context, 468 new_subject) 467 469 if new_author: 468 req.hdf['discussion.author'] = wiki_to_oneliner(469 new_author, self.env)470 self.data['author'] = format_to_oneliner(context, 471 new_author) 470 472 if new_body: 471 req.hdf['discussion.body'] = wiki_to_html(new_body, 472 self.env, req) 473 self.data['body'] = format_to_html(context, new_body) 473 474 474 475 elif mode == 'topic-quote': 475 req.perm.assert_permission('DISCUSSION_APPEND')476 context.req.perm.assert_permission('DISCUSSION_APPEND') 476 477 477 478 # Prepare old content. … … 479 480 for I in xrange(len(lines)): 480 481 lines[I] = '> %s' % (lines[I]) 481 req.hdf['args.body'] = '\n'.join(lines) 482 context.req.args['body'] = '\n'.join(lines) 483 484 # Signalise that message is being added. 485 context.req.args['message'] = message and message['id'] or '-1' 482 486 483 487 elif mode == 'topic-post-add': 484 req.perm.assert_permission('DISCUSSION_APPEND')488 context.req.perm.assert_permission('DISCUSSION_APPEND') 485 489 486 490 # Get form values. 487 new_subject = req.args.get('subject')488 new_author = req.args.get('author')489 new_body = req.args.get('body')491 new_subject = context.req.args.get('subject') 492 new_author = context.req.args.get('author') 493 new_body = context.req.args.get('body') 490 494 new_time = int(time.time()) 491 495 492 496 # Add topic. 493 self.log.debug(new_body) 494 self.add_topic(cursor, forum['id'], new_subject, new_time, 497 self.add_topic(context, forum['id'], new_subject, new_time, 495 498 new_author, new_body) 496 499 497 500 # Get new popic and notify about creation. 498 new_topic = self.get_topic_by_time(cursor, new_time) 499 self.log.debug(new_topic) 500 to = self.get_topic_to_recipients(cursor, new_topic['id']) 501 cc = self.get_topic_cc_recipients(cursor, new_topic['id']) 502 notifier = DiscussionNotifyEmail(self.env) 503 notifier.notify(req, cursor, mode, forum, new_topic, None, to, 504 cc) 501 new_topic = self.get_topic_by_time(context, new_time) 502 to = self.get_topic_to_recipients(context, new_topic['id']) 503 cc = self.get_topic_cc_recipients(context, new_topic['id']) 504 notifier = DiscussionNotifyEmail(context.env) 505 notifier.notify(context, mode, forum, new_topic, None, to, cc) 505 506 506 507 elif mode == 'topic-edit': 507 req.perm.assert_permission('DISCUSSION_APPEND') 508 if not is_moderator and (topic['author'] != req.authname): 508 context.req.perm.assert_permission('DISCUSSION_APPEND') 509 if not is_moderator and (topic['author'] != 510 context.req.authname): 509 511 raise PermissionError('Topic edit') 510 512 511 513 # Prepare form values. 512 req.args['subject'] = topic['subject'] 513 req.args['body'] = topic['body'] 514 req.hdf['args.subject'] = topic['subject'] 515 req.hdf['args.body'] = topic['body'] 514 context.req.args['subject'] = topic['subject'] 515 context.req.args['body'] = topic['body'] 516 516 517 517 elif mode == 'topic-post-edit': 518 req.perm.assert_permission('DISCUSSION_APPEND') 519 if not is_moderator and (topic['author'] != req.authname): 518 context.req.perm.assert_permission('DISCUSSION_APPEND') 519 if not is_moderator and (topic['author'] != 520 context.req.authname): 520 521 raise PermissionError('Topic edit') 521 522 522 523 # Get form values. 523 new_subject = req.args.get('subject')524 new_body = req.args.get('body')524 new_subject = context.req.args.get('subject') 525 new_body = context.req.args.get('body') 525 526 526 527 # Edit topic. 527 528 topic['subject'] = new_subject 528 529 topic['body'] = new_body 529 self.edit_topic(c ursor, topic['id'], topic['forum'],530 new_subject, new_body)530 self.edit_topic(context, topic['id'], topic['forum'], 531 topic['subject'], topic['body']) 531 532 532 533 elif mode == 'topic-move': 533 req.perm.assert_permission('DISCUSSION_MODERATE')534 context.req.perm.assert_permission('DISCUSSION_MODERATE') 534 535 if not is_moderator: 535 536 raise PermissionError('Forum moderate') 536 537 537 538 # Display Move Topic form 538 req.hdf['discussion.forums'] = self.get_forums(req, cursor)539 self.data['forums'] = self.get_forums(context) 539 540 540 541 elif mode == 'topic-post-move': 541 req.perm.assert_permission('DISCUSSION_MODERATE')542 context.req.perm.assert_permission('DISCUSSION_MODERATE') 542 543 if not is_moderator: 543 544 raise PermissionError('Forum moderate') 544 545 545 546 # Get form values 546 new_forum = int( req.args.get('new_forum') or 0)547 new_forum = int(context.req.args.get('new_forum') or 0) 547 548 548 549 # Move topic. 549 self.set_forum(c ursor, topic['id'], new_forum)550 self.set_forum(context, topic['id'], new_forum) 550 551 551 552 elif mode == 'topic-delete': 552 req.perm.assert_permission('DISCUSSION_MODERATE')553 context.req.perm.assert_permission('DISCUSSION_MODERATE') 553 554 if not is_moderator: 554 555 raise PermissionError('Forum moderate') 555 556 556 557 # Delete topic. 557 self.delete_topic(c ursor, topic['id'])558 self.delete_topic(context, topic['id']) 558 559 559 560 elif mode == 'message-list': 560 req.perm.assert_permission('DISCUSSION_VIEW')561 self._prepare_message_list( req, cursor, topic)561 context.req.perm.assert_permission('DISCUSSION_VIEW') 562 self._prepare_message_list(context, topic) 562 563 563 564 elif mode == 'wiki-message-list': 564 565 if topic: 565 self._prepare_message_list(req, cursor, topic) 566 self._prepare_message_list(context, topic) 567 568 elif mode == 'message-add': 569 context.req.perm.assert_permission('DISCUSSION_APPEND') 570 571 # Signalise that message is being added. 572 context.req.args['message'] = message and message['id'] or '-1' 566 573 567 574 elif mode == 'message-quote': 568 req.perm.assert_permission('DISCUSSION_APPEND')575 context.req.perm.assert_permission('DISCUSSION_APPEND') 569 576 570 577 # Prepare old content. … … 572 579 for I in xrange(len(lines)): 573 580 lines[I] = '> %s' % (lines[I]) 574 req.hdf['args.body'] = '\n'.join(lines)581 context.req.args['body'] = '\n'.join(lines) 575 582 576 583 elif mode == 'message-post-add': 577 req.perm.assert_permission('DISCUSSION_APPEND')&n
