Changeset 1252
- Timestamp:
- 09/05/06 13:48:44 (2 years ago)
- Files:
-
- discussionplugin/0.10/setup.py (modified) (1 diff)
- discussionplugin/0.10/tracdiscussion/admin.py (modified) (1 diff)
- discussionplugin/0.10/tracdiscussion/api.py (modified) (29 diffs)
- discussionplugin/0.10/tracdiscussion/core.py (modified) (4 diffs)
- discussionplugin/0.10/tracdiscussion/db/db1.py (modified) (1 diff)
- discussionplugin/0.10/tracdiscussion/db/db2.py (modified) (1 diff)
- discussionplugin/0.10/tracdiscussion/init.py (modified) (1 diff)
- discussionplugin/0.10/tracdiscussion/search.py (modified) (2 diffs)
- discussionplugin/0.10/tracdiscussion/timeline.py (modified) (5 diffs)
- discussionplugin/0.10/tracdiscussion/wiki.py (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
discussionplugin/0.10/setup.py
r1066 r1252 15 15 'TracDiscussion.admin = tracdiscussion.admin', 16 16 'TracDiscussion.search = tracdiscussion.search']}, 17 install_requires = ['TracWebAdmin'], 17 18 keywords = 'trac discussion', 18 19 author = 'Alec Thomas, Radek BartoÅ', discussionplugin/0.10/tracdiscussion/admin.py
r1066 r1252 32 32 req.args['component'] = 'admin' 33 33 34 # Get database access 35 db = self.env.get_db_cnx() 36 cursor = db.cursor() 37 34 38 # Retrun page content 35 39 api = DiscussionApi(self, req) 36 return api.render_discussion() 40 content = api.render_discussion(req, cursor) 41 db.commit() 42 return content discussionplugin/0.10/tracdiscussion/api.py
r1088 r1252 11 11 self.env = component.env 12 12 self.log = component.log 13 self.req = req14 self.db = self.env.get_db_cnx()15 self.cursor = self.db.cursor()16 13 17 14 # Main request processing function 18 15 19 def render_discussion(self ):16 def render_discussion(self, req, cursor): 20 17 # Get request mode 21 group, forum, topic, message = self._get_items( )22 modes = self._get_modes( group, forum, topic, message)18 group, forum, topic, message = self._get_items(req, cursor) 19 modes = self._get_modes(req, group, forum, topic, message) 23 20 self.log.debug('modes: %s' % modes) 24 21 25 22 # Determine moderator rights. 26 23 if forum: 27 is_moderator = ( self.req.authname in forum['moderators']) or \28 self.req.perm.has_permission('DISCUSSION_ADMIN')24 is_moderator = (req.authname in forum['moderators']) or \ 25 req.perm.has_permission('DISCUSSION_ADMIN') 29 26 else: 30 is_moderator = self.req.perm.has_permission('DISCUSSION_ADMIN')27 is_moderator = req.perm.has_permission('DISCUSSION_ADMIN') 31 28 32 29 # Perform mode actions 33 self._do_action(modes, group, forum, topic, message, is_moderator) 30 self._do_action(req, cursor, modes, group, forum, topic, message, 31 is_moderator) 34 32 35 33 # Add CSS styles 36 add_stylesheet( self.req, 'common/css/wiki.css')37 add_stylesheet( self.req, 'discussion/css/discussion.css')38 add_stylesheet( self.req, 'discussion/css/admin.css')34 add_stylesheet(req, 'common/css/wiki.css') 35 add_stylesheet(req, 'discussion/css/discussion.css') 36 add_stylesheet(req, 'discussion/css/admin.css') 39 37 40 38 # Fill up HDF structure and return template 41 self.req.hdf['discussion.authname'] = self.req.authname42 self.req.hdf['discussion.is_moderator'] = is_moderator39 req.hdf['discussion.authname'] = req.authname 40 req.hdf['discussion.is_moderator'] = is_moderator 43 41 if group: 44 42 group['name'] = wiki_to_oneliner(group['name'], self.env) 45 group['description'] = wiki_to_oneliner(group['description'], self.env) 46 self.req.hdf['discussion.group'] = group 43 group['description'] = wiki_to_oneliner(group['description'], 44 self.env) 45 req.hdf['discussion.group'] = group 47 46 if forum: 48 47 forum['name'] = wiki_to_oneliner(forum['name'], self.env) 49 forum['description'] = wiki_to_oneliner(forum['description'], self.env) 48 forum['description'] = wiki_to_oneliner(forum['description'], 49 self.env) 50 50 forum['subject'] = wiki_to_oneliner(forum['subject'], self.env) 51 51 forum['time'] = format_datetime(forum['time']) 52 self.req.hdf['discussion.forum'] = forum52 req.hdf['discussion.forum'] = forum 53 53 if topic: 54 54 topic['subject'] = wiki_to_oneliner(topic['subject'], self.env) 55 55 topic['author'] = wiki_to_oneliner(topic['author'], self.env) 56 topic['body'] = wiki_to_html(topic['body'], self.env, self.req)56 topic['body'] = wiki_to_html(topic['body'], self.env, req) 57 57 topic['time'] = format_datetime(topic['time']) 58 self.req.hdf['discussion.topic'] = topic58 req.hdf['discussion.topic'] = topic 59 59 if message: 60 60 message['author'] = wiki_to_oneliner(message['author'], self.env) 61 message['body'] = wiki_to_html(message['body'], self.env, self.req)61 message['body'] = wiki_to_html(message['body'], self.env, req) 62 62 message['time'] = format_datetime(message['time']) 63 self.req.hdf['discussion.message'] = message 64 self.req.hdf['discussion.mode'] = modes[-1] 65 self.req.hdf['discussion.time'] = format_datetime(time.time()) 66 self.db.commit() 63 req.hdf['discussion.message'] = message 64 req.hdf['discussion.mode'] = modes[-1] 65 req.hdf['discussion.time'] = format_datetime(time.time()) 67 66 return modes[-1] + '.cs', None 68 67 69 def _get_items(self ):68 def _get_items(self, req, cursor): 70 69 group, forum, topic, message = None, None, None, None 71 70 72 71 # Populate active group 73 if self.req.args.has_key('group'):74 group_id = self.req.args.get('group')75 group = self.get_group( group_id)72 if req.args.has_key('group'): 73 group_id = req.args.get('group') 74 group = self.get_group(cursor, group_id) 76 75 77 76 # Populate active forum 78 if self.req.args.has_key('forum'):79 forum_id = self.req.args.get('forum')80 forum = self.get_forum( forum_id)77 if req.args.has_key('forum'): 78 forum_id = req.args.get('forum') 79 forum = self.get_forum(cursor, forum_id) 81 80 82 81 # Populate active topic 83 if self.req.args.has_key('topic'):84 topic_id = self.req.args.get('topic')85 topic = self.get_topic( topic_id)82 if req.args.has_key('topic'): 83 topic_id = req.args.get('topic') 84 topic = self.get_topic(cursor, topic_id) 86 85 87 86 # Populate active topic 88 if self.req.args.has_key('message'):89 message_id = self.req.args.get('message')90 message = self.get_message( message_id)87 if req.args.has_key('message'): 88 message_id = req.args.get('message') 89 message = self.get_message(cursor, message_id) 91 90 92 91 self.log.debug('message: %s' % message) … … 96 95 return group, forum, topic, message 97 96 98 def _get_modes(self, group, forum, topic, message):97 def _get_modes(self, req, group, forum, topic, message): 99 98 # Get action 100 component = self.req.args.get('component')101 action = self.req.args.get('discussion_action')102 preview = self.req.args.has_key('preview');103 submit = self.req.args.has_key('submit');99 component = req.args.get('component') 100 action = req.args.get('discussion_action') 101 preview = req.args.has_key('preview'); 102 submit = req.args.has_key('submit'); 104 103 self.log.debug('component: %s' % component) 105 104 self.log.debug('action: %s' % action) 106 105 107 106 if component == 'admin': 108 self.req.hdf['discussion.href'] = self.env.href.admin('discussion')107 req.hdf['discussion.href'] = req.href.admin('discussion') 109 108 elif component == 'wiki': 110 self.req.hdf['discussion.href'] = self.env.href(self.req.path_info)109 req.hdf['discussion.href'] = req.href(req.path_info) 111 110 else: 112 self.req.hdf['discussion.href'] = self.env.href.discussion()113 self.req.hdf['discussion.component'] = component111 req.hdf['discussion.href'] = req.href.discussion() 112 req.hdf['discussion.component'] = component 114 113 115 114 # Determine mode … … 184 183 return ['topic-post-edit', 'message-list'] 185 184 elif action == 'delete': 186 self.req.hdf['discussion.no_display'] = True185 req.hdf['discussion.no_display'] = True 187 186 return ['topic-delete', 'message-list'] 188 187 elif action == 'set-display': … … 275 274 return ['forum-list'] 276 275 277 def _do_action(self, modes, group, forum, topic, message, is_moderator): 276 def _do_action(self, req, cursor, modes, group, forum, topic, message, 277 is_moderator): 278 278 for mode in modes: 279 279 self.log.debug('doing %s mode action' % (mode,)) 280 280 if mode == 'group-list': 281 self.req.perm.assert_permission('DISCUSSION_VIEW')281 req.perm.assert_permission('DISCUSSION_VIEW') 282 282 283 283 # Display groups. 284 self.req.hdf['discussion.groups'] = self.get_groups()284 req.hdf['discussion.groups'] = self.get_groups(req, cursor) 285 285 286 286 elif mode == 'admin-group-list': 287 self.req.perm.assert_permission('DISCUSSION_ADMIN')287 req.perm.assert_permission('DISCUSSION_ADMIN') 288 288 289 289 # Get form values 290 order = self.req.args.get('order') or 'id'291 desc = self.req.args.get('desc')290 order = req.args.get('order') or 'id' 291 desc = req.args.get('desc') 292 292 293 293 # Prepare ORDER BY statement … … 299 299 300 300 # Display groups. 301 self.req.hdf['discussion.order'] = order302 self.req.hdf['discussion.desc'] = desc301 req.hdf['discussion.order'] = order 302 req.hdf['discussion.desc'] = desc 303 303 if group: 304 self.req.hdf['discussion.name'] = group['name'] 305 self.req.hdf['discussion.description'] = group['description'] 306 self.req.hdf['discussion.groups'] = self.get_groups(order_by) 304 req.hdf['discussion.name'] = group['name'] 305 req.hdf['discussion.description'] = \ 306 group['description'] 307 req.hdf['discussion.groups'] = self.get_groups(req, cursor, order_by) 307 308 308 309 elif mode == 'group-add': 309 self.req.perm.assert_permission('DISCUSSION_ADMIN')310 req.perm.assert_permission('DISCUSSION_ADMIN') 310 311 311 312 elif mode == 'group-post-add': 312 self.req.perm.assert_permission('DISCUSSION_ADMIN')313 req.perm.assert_permission('DISCUSSION_ADMIN') 313 314 314 315 # Get form values. 315 new_name = Markup( self.req.args.get('name'))316 new_description = Markup( self.req.args.get('description'))316 new_name = Markup(req.args.get('name')) 317 new_description = Markup(req.args.get('description')) 317 318 318 319 # Add new group. 319 self.add_group( new_name, new_description)320 self.add_group(cursor, new_name, new_description) 320 321 321 322 elif mode == 'group-post-edit': 322 self.req.perm.assert_permission('DISCUSSION_ADMIN')323 req.perm.assert_permission('DISCUSSION_ADMIN') 323 324 324 325 # Get form values. 325 new_group = self.req.args.get('group')326 new_name = Markup( self.req.args.get('name'))327 new_description = Markup( self.req.args.get('description'))326 new_group = req.args.get('group') 327 new_name = Markup(req.args.get('name')) 328 new_description = Markup(req.args.get('description')) 328 329 329 330 # Edit group. 330 self.edit_group( new_group, new_name, new_description)331 self.edit_group(cursor, new_group, new_name, new_description) 331 332 332 333 elif mode == 'group-delete': 333 self.req.perm.assert_permission('DISCUSSION_ADMIN')334 req.perm.assert_permission('DISCUSSION_ADMIN') 334 335 335 336 elif mode == 'groups-delete': 336 self.req.perm.assert_permission('DISCUSSION_ADMIN')337 req.perm.assert_permission('DISCUSSION_ADMIN') 337 338 338 339 # Get selected groups. 339 selection = self.req.args.get('selection')340 selection = req.args.get('selection') 340 341 if isinstance(selection, (str, unicode)): 341 342 selection = [selection] … … 344 345 if selection: 345 346 for group_id in selection: 346 self.delete_group( group_id)347 self.delete_group(cursor, group_id) 347 348 348 349 elif mode == 'forum-list': 349 self.req.perm.assert_permission('DISCUSSION_VIEW')350 req.perm.assert_permission('DISCUSSION_VIEW') 350 351 351 352 # Get form values 352 order = self.req.args.get('order') or 'id'353 desc = self.req.args.get('desc')353 order = req.args.get('order') or 'id' 354 desc = req.args.get('desc') 354 355 355 356 # Prepare ORDER BY statement … … 361 362 362 363 # Display forums. 363 self.req.hdf['discussion.order'] = order 364 self.req.hdf['discussion.desc'] = desc 365 self.req.hdf['discussion.groups'] = self.get_groups() 366 self.req.hdf['discussion.forums'] = self.get_forums(order_by) 364 req.hdf['discussion.order'] = order 365 req.hdf['discussion.desc'] = desc 366 req.hdf['discussion.groups'] = self.get_groups(req, cursor) 367 req.hdf['discussion.forums'] = self.get_forums(req, cursor, 368 order_by) 367 369 368 370 elif mode == 'admin-forum-list': 369 self.req.perm.assert_permission('DISCUSSION_ADMIN')371 req.perm.assert_permission('DISCUSSION_ADMIN') 370 372 371 373 # Get form values 372 order = self.req.args.get('order') or 'id'373 desc = self.req.args.get('desc')374 order = req.args.get('order') or 'id' 375 desc = req.args.get('desc') 374 376 375 377 # Prepare ORDER BY statement … … 381 383 382 384 # Display forums. 383 self.req.hdf['discussion.order'] = order384 self.req.hdf['discussion.desc'] = desc385 req.hdf['discussion.order'] = order 386 req.hdf['discussion.desc'] = desc 385 387 self.log.debug(forum) 386 388 if forum: 387 self.req.hdf['discussion.name'] = forum['name'] 388 self.req.hdf['discussion.subject'] = forum['subject'] 389 self.req.hdf['discussion.description'] = forum['description'] 390 self.req.hdf['discussion.moderators'] = forum['moderators'] 391 self.req.hdf['discussion.group'] = forum['group'] 392 self.req.hdf['discussion.users'] = self.get_users() 393 self.req.hdf['discussion.groups'] = self.get_groups() 394 self.req.hdf['discussion.forums'] = self.get_forums(order_by) 389 req.hdf['discussion.name'] = forum['name'] 390 req.hdf['discussion.subject'] = forum['subject'] 391 req.hdf['discussion.description'] = \ 392 forum['description'] 393 req.hdf['discussion.moderators'] = forum['moderators'] 394 req.hdf['discussion.group'] = forum['group'] 395 req.hdf['discussion.users'] = self.get_users() 396 req.hdf['discussion.groups'] = self.get_groups(req, cursor) 397 req.hdf['discussion.forums'] = self.get_forums(req, cursor, order_by) 395 398 396 399 elif mode == 'forum-add': 397 self.req.perm.assert_permission('DISCUSSION_ADMIN')400 req.perm.assert_permission('DISCUSSION_ADMIN') 398 401 399 402 # Display Add Forum form. 400 self.req.hdf['discussion.users'] = self.get_users()401 self.req.hdf['discussion.groups'] = self.get_groups()403 req.hdf['discussion.users'] = self.get_users() 404 req.hdf['discussion.groups'] = self.get_groups(req, cursor) 402 405 403 406 elif mode == 'forum-post-add': 404 self.req.perm.assert_permission('DISCUSSION_ADMIN')407 req.perm.assert_permission('DISCUSSION_ADMIN') 405 408 406 409 # Get form values 407 new_name = Markup( self.req.args.get('name'))408 new_author = self.req.authname409 new_subject = Markup( self.req.args.get('subject'))410 new_description = Markup( self.req.args.get('description'))411 new_moderators = self.req.args.get('moderators')412 new_group = self.req.args.get('group')410 new_name = Markup(req.args.get('name')) 411 new_author = req.authname 412 new_subject = Markup(req.args.get('subject')) 413 new_description = Markup(req.args.get('description')) 414 new_moderators = req.args.get('moderators') 415 new_group = req.args.get('group') 413 416 if not new_moderators: 414 417 new_moderators = [] … … 417 420 418 421 # Perform new forum add. 419 self.add_forum( new_name, new_author, new_subject,422 self.add_forum(cursor, new_name, new_author, new_subject, 420 423 new_description, new_moderators, new_group) 421 424 422 425 elif mode == 'forum-post-edit': 423 self.req.perm.assert_permission('DISCUSSION_ADMIN')426 req.perm.assert_permission('DISCUSSION_ADMIN') 424 427 425 428 # Get form values. 426 new_forum = self.req.args.get('forum')427 new_name = Markup( self.req.args.get('name'))428 new_subject = Markup( self.req.args.get('subject'))429 new_description = Markup( self.req.args.get('description'))430 new_moderators = self.req.args.get('moderators')431 new_group = self.req.args.get('group')429 new_forum = req.args.get('forum') 430 new_name = Markup(req.args.get('name')) 431 new_subject = Markup(req.args.get('subject')) 432 new_description = Markup(req.args.get('description')) 433 new_moderators = req.args.get('moderators') 434 new_group = req.args.get('group') 432 435 if not new_moderators: 433 436 new_moderators = [] … … 436 439 437 440 # Perform forum edit. 438 self.edit_forum( new_forum, new_name, new_subject,441 self.edit_forum(cursor, new_forum, new_name, new_subject, 439 442 new_description, new_moderators, new_group) 440 443 441 444 elif mode == 'forum-delete': 442 self.req.perm.assert_permission('DISCUSSION_ADMIN')445 req.perm.assert_permission('DISCUSSION_ADMIN') 443 446 444 447 # Delete forum 445 self.delete_forum( forum['id'])448 self.delete_forum(cursor, forum['id']) 446 449 447 450 elif mode == 'forums-delete': 448 self.req.perm.assert_permission('DISCUSSION_ADMIN')451 req.perm.assert_permission('DISCUSSION_ADMIN') 449 452 450 453 # Get selected forums. 451 selection = self.req.args.get('selection')454 selection = req.args.get('selection') 452 455 if isinstance(selection, (str, unicode)): 453 456 selection = [selection] … … 456 459 if selection: 457 460 for forum_id in selection: 458 self.delete_forum( forum_id)461 self.delete_forum(cursor, forum_id) 459 462 460 463 elif mode == 'topic-list': 461 self.req.perm.assert_permission('DISCUSSION_VIEW')464 req.perm.assert_permission('DISCUSSION_VIEW') 462 465 463 466 # Get form values 464 order = self.req.args.get('order') or 'id'465 desc = self.req.args.get('desc')467 order = req.args.get('order') or 'id' 468 desc = req.args.get('desc') 466 469 467 470 # Prepare ORDER BY statement … … 473 476 474 477 # Display topics. 475 self.req.hdf['discussion.order'] = order476 self.req.hdf['discussion.desc'] = desc477 self.req.hdf['discussion.topics'] = self.get_topics(forum['id'],478 order_by)478 req.hdf['discussion.order'] = order 479 req.hdf['discussion.desc'] = desc 480 req.hdf['discussion.topics'] = self.get_topics(req, cursor, 481 forum['id'], order_by) 479 482 480 483 elif mode == 'topic-add': 481 self.req.perm.assert_permission('DISCUSSION_APPEND')484 req.perm.assert_permission('DISCUSSION_APPEND') 482 485 483 486 # Get form values. 484 new_subject = Markup( self.req.args.get('subject'))485 new_author = Markup( self.req.args.get('author'))486 new_body = Markup( self.req.args.get('body'))487 new_subject = Markup(req.args.get('subject')) 488 new_author = Markup(req.args.get('author')) 489 new_body = Markup(req.args.get('body')) 487 490 488 491 # Display Add Topic form. 489 492 if new_subject: 490 self.req.hdf['discussion.subject'] = wiki_to_oneliner(493 req.hdf['discussion.subject'] = wiki_to_oneliner( 491 494 new_subject, self.env) 492 495 if new_author: 493 self.req.hdf['discussion.author'] = wiki_to_oneliner(496 req.hdf['discussion.author'] = wiki_to_oneliner( 494 497 new_author, self.env) 495 498 if new_body: 496 self.req.hdf['discussion.body'] = wiki_to_html(new_body,497 self.env, self.req)499 req.hdf['discussion.body'] = wiki_to_html(new_body, 500 self.env, req) 498 501 499 502 elif mode == 'topic-quote': 500 self.req.perm.assert_permission('DISCUSSION_APPEND')503 req.perm.assert_permission('DISCUSSION_APPEND') 501 504 502 505 # Prepare old content. … … 504 507 for I in xrange(len(lines)): 505 508 lines[I] = '> %s' % (lines[I]) 506 self.req.hdf['args.body'] = '\n'.join(lines)509 req.hdf['args.body'] = '\n'.join(lines) 507 510 508 511 elif mode == 'topic-post-add': 509 self.req.perm.assert_permission('DISCUSSION_APPEND')512 req.perm.assert_permission('DISCUSSION_APPEND') 510 513 511 514 # Get form values. 512 new_subject = Markup( self.req.args.get('subject'))513 new_author = Markup( self.req.args.get('author'))514 new_body = Markup( self.req.args.get('body'))515 new_subject = Markup(req.args.get('subject')) 516 new_author = Markup(req.args.get('author')) 517 new_body = Markup(req.args.get('body')) 515 518 516 519 # Add topic. 517 self.add_topic(forum['id'], new_subject, new_author, new_body) 520 self.add_topic(cursor, forum['id'], new_subject, new_author, 521 new_body) 518 522 519 523 elif mode == 'topic-edit': 520 self.req.perm.assert_permission('DISCUSSION_APPEND')521 if not is_moderator and (topic['author'] != self.req.authname):524 req.perm.assert_permission('DISCUSSION_APPEND') 525 if not is_moderator and (topic['author'] != req.authname): 522 526 raise PermissionError('Topic edit') 523 527 524 # Prepare form values. 525 self.req.hdf['args.body'] = topic['body'] 526 self.req.hdf['args.subject'] = topic['subject'] 528 # Prepare form values. 529 req.hdf['args.body'] = topic['body'] 530 req.hdf['args.subject'] = topic['subject'] 531 527 532 elif mode == 'topic-post-edit': 528 self.req.perm.assert_permission('DISCUSSION_APPEND')529 if not is_moderator and (topic['author'] != self.req.authname):533 req.perm.assert_permission('DISCUSSION_APPEND') 534 if not is_moderator and (topic['author'] != req.authname): 530 535 raise PermissionError('Topic edit') 531 536 532 # Get form values.533 new_subject = Markup(self.req.args.get('subject'))534 new_body = Markup(self.req.args.get('body'))535 536 # Edit topic.537 topic['subject'] = new_subject538 topic['body'] = new_body539 self.edit_topic(topic['id'], topic['forum'], new_subject,540 new_body)537 # Get form values. 538 new_subject = Markup(req.args.get('subject')) 539 new_body = Markup(req.args.get('body')) 540 541 # Edit topic. 542 topic['subject'] = new_subject 543 topic['body'] = new_body 544 self.edit_topic(cursor, topic['id'], topic['forum'], 545 new_subject, new_body) 541 546 542 547 elif mode == 'topic-move': 543 self.req.perm.assert_permission('DISCUSSION_MODERATE')548 req.perm.assert_permission('DISCUSSION_MODERATE') 544 549 if not is_moderator: 545 550 raise PermissionError('Forum moderate') 546 551 547 552 # Display Move Topic form 548 self.req.hdf['discussion.forums'] = self.get_forums()553 req.hdf['discussion.forums'] = self.get_forums(req, cursor) 549 554 550 555 elif mode == 'topic-post-move': 551 self.req.perm.assert_permission('DISCUSSION_MODERATE')556 req.perm.assert_permission('DISCUSSION_MODERATE') 552 557 if not is_moderator: 553 558 raise PermissionError('Forum moderate') 554 559 555 560 # Get form values 556 new_forum = self.req.args.get('new_forum')561 new_forum = req.args.get('new_forum') 557 562 558 563 # Move topic. 559 self.set_forum( topic['id'], new_forum)564 self.set_forum(cursor, topic['id'], new_forum) 560 565 561 566 elif mode == 'topic-delete': 562 self.req.perm.assert_permission('DISCUSSION_MODERATE')567 req.perm.assert_permission('DISCUSSION_MODERATE') 563 568 if not is_moderator: 564 569 raise PermissionError('Forum moderate') 565 570 566 571 # Delete topic. 567 self.delete_topic( topic['id'])572 self.delete_topic(cursor, topic['id']) 568 573 569 574 elif mode == 'message-list': 570 self.req.perm.assert_permission('DISCUSSION_VIEW')575 req.perm.assert_permission('DISCUSSION_VIEW') 571 576 572 577 # Get form values. 573 new_author = Markup( self.req.args.get('author'))574 new_subject = Markup( self.req.args.get('subject'))575 new_body = Markup( self.req.args.get('body'))578 new_author = Markup(req.args.get('author')) 579 new_subject = Markup(req.args.get('subject')) 580 new_body = Markup(req.args.get('body')) 576 581 577 582 # Get time when topic was visited from session. 578 visited = eval(self.req.session.get('visited-topics') or '{}') 579 self.log.debug(visited) 583 visited = eval(req.session.get('visited-topics') or '{}') 580 584 if visited.has_key(topic['id']): 581 585 visit_time = int(visited[topic['id']]) … … 585 589 # Update this topic visit time and save to session. 586 590 visited[topic['id']] = int(time.time()) 587 self.req.session['visited-topics'] = str(visited)591 req.session['visited-topics'] = str(visited) 588 592 589 593 # Mark new topic. … … 593 597 # Prepare display of topic 594 598 if new_author: 595 self.req.hdf['discussion.author'] = wiki_to_oneliner(599 req.hdf['discussion.author'] = wiki_to_oneliner( 596 600 new_author, self.env) 597 601 if new_subject: 598 self.req.hdf['discussion.subject'] = wiki_to_oneliner(602 req.hdf['discussion.subject'] = wiki_to_oneliner( 599 603 new_subject, self.env) 600 604 if new_body: 601 self.req.hdf['discussion.body'] = wiki_to_html(new_body,602 self.env, self.req)605 req.hdf['discussion.body'] = wiki_to_html(new_body, 606 self.env, req) 603 607 604 608 # Prepare display of messages 605 display = self.req.session.get('message-list-display')606 self.req.hdf['discussion.display'] = display609 display = req.session.get('message-list-display') 610 req.hdf['discussion.display'] = display 607 611 if display == 'flat-asc': 608 self.req.hdf['discussion.messages'] = self.get_flat_messages(609 topic['id'], visit_time)612 req.hdf['discussion.messages'] = self.get_flat_messages( 613 req, cursor, topic['id'], visit_time) 610 614 elif display == 'flat-desc': 611 self.req.hdf['discussion.messages'] = self.get_flat_messages(612 topic['id'], visit_time, 'ORDER BY time DESC')613 else: 614 self.req.hdf['discussion.messages'] = self.get_messages(615 topic['id'], visit_time)615 req.hdf['discussion.messages'] = self.get_flat_messages( 616 req, cursor, topic['id'], visit_time, 'ORDER BY time DESC') 617 else: 618 req.hdf['discussion.messages'] = self.get_messages(req, 619 cursor, topic['id'], visit_time) 616 620 617 621 elif mode == 'message-quote': 618 self.req.perm.assert_permission('DISCUSSION_APPEND')622 req.perm.assert_permission('DISCUSSION_APPEND') 619 623 620 624 # Prepare old content. … … 622 626 for I in xrange(len(lines)): 623 627 lines[I] = '> %s' % (lines[I]) 624 self.req.hdf['args.body'] = '\n'.join(lines)628 req.hdf['args.body'] = '\n'.join(lines) 625 629 626 630 elif mode == 'message-post-add': 627 self.req.perm.assert_permission('DISCUSSION_APPEND')631 req.perm.assert_permission('DISCUSSION_APPEND') 628 632 629 633 # Get form values. 630 new_author = Markup( self.req.args.get('author'))631 new_body = Markup( self.req.args.get('body'))634 new_author = Markup(req.args.get('author')) 635 new_body = Markup(req.args.get('body')) 632 636 633 637 # Add message. 634 638 if message: 635 self.add_message(forum['id'], topic['id'], message['id'], 639 self.add_message(cursor, forum['id'], topic['id'], 640 message['id'], new_author, new_body) 641 else: 642 self.add_message(cursor, forum['id'], topic['id'], '-1', 636 643 new_author, new_body) 637 else:638 self.add_message(forum['id'], topic['id'], '-1', new_author,639 new_body)640 644 641 645 elif mode == 'message-edit': 642 self.req.perm.assert_permission('DISCUSSION_APPEND')643 if not is_moderator and (message['author'] != self.req.authname):646 req.perm.assert_permission('DISCUSSION_APPEND') 647 if not is_moderator and (message['author'] != req.authname): 644 648 raise PermissionError('Message edit') 645 649 646 650 # Prepare form values. 647 self.req.hdf['args.body'] = message['body']651 req.hdf['args.body'] = message['body'] 648 652 649 653 elif mode == 'message-post-edit': 650 self.req.perm.assert_permission('DISCUSSION_APPEND')651 if not is_moderator and (message['author'] != self.req.authname):654 req.perm.assert_permission('DISCUSSION_APPEND') 655 if not is_moderator and (message['author'] != req.authname): 652 656 raise PermissionError('Message edit') 653 657 654 658 # Get form values. 655 new_body = Markup( self.req.args.get('body'))659 new_body = Markup(req.args.get('body')) 656 660 657 661 # Edit message. 658 662 message['body'] = new_body 659 self.edit_message( message['id'], message['forum'],663 self.edit_message(cursor, message['id'], message['forum'], 660 664 message['topic'], message['replyto'], new_body) 661 665 662 666 elif mode == 'message-delete': 663 self.req.perm.assert_permission('DISCUSSION_MODERATE')667 req.perm.assert_permission('DISCUSSION_MODERATE') 664 668 if not is_moderator: 665 669 raise PermissionError('Forum moderate') 666 670 667 671 # Delete message. 668 self.delete_message( message['id'])672 self.delete_message(cursor, message['id']) 669 673 670 674 elif mode == 'message-set-display': 671 self.req.perm.assert_permission('DISCUSSION_VIEW')675 req.perm.assert_permission('DISCUSSION_VIEW') 672 676 673 677 # Get form values 674 display = self.req.args.get('display')678 display = req.args.get('display') 675 679 676 680 # Set message list display mode to session 677 self.req.session['message-list-display'] = display681 req.session['message-list-display'] = display 678 682 679 683 # Get one item functions 680 684 681 def get_message(self, id):685 def get_message(self, cursor, id): 682 686 columns = ('id', 'forum', 'topic', 'replyto', 'time', 'author', 'body') 683 687 sql = "SELECT id, forum, topic, replyto, time, author, body FROM" \ 684 688 " message WHERE id = %s" 685 689 self.log.debug(sql % (id,)) 686 self.cursor.execute(sql, (id,))687 for row in self.cursor:690 cursor.execute(sql, (id,)) 691 for row in cursor: 688 692 row = dict(zip(columns, row)) 689 693 return row 690 694 return None 691 695 692 def get_topic(self, id):696 def get_topic(self, cursor, id): 693 697 columns = ('id', 'forum', 'time', 'subject', 'body', 'author') 694 698 sql = "SELECT id, forum, time, subject, body, author FROM topic WHERE" \ 695 699 " id = %s" 696 700 self.log.debug(sql % (id,)) 697 self.cursor.execute(sql, (id,))698 for row in self.cursor:701 cursor.execute(sql, (id,)) 702 for row in cursor: 699 703 row = dict(zip(columns, row)) 700 704 return row 701 705 return None 702 706 703 def get_topic_by_subject(self, subject):707 def get_topic_by_subject(self, cursor, subject): 704 708 columns = ('id', 'forum', 'time', 'subject', 'body', 'author') 705 709 sql = "SELECT id, forum, time, subject, body, author FROM topic WHERE" \ 706 710 " subject = '%s'" % (subject) 707 711 self.log.debug(sql) 708 self.cursor.execute(sql)709 for row in self.cursor:712 cursor.execute(sql) 713 for row in <
