Changeset 1253

Show
Ignore:
Timestamp:
09/05/06 14:13:31 (2 years ago)
Author:
Blackhex
Message:

DiscussionPlugin:

Some changes from 0.10 branch ported to 0.9

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • discussionplugin/0.9/tracdiscussion/admin.py

    r1066 r1253  
    3232        req.args['component'] = 'admin' 
    3333 
     34        # Get database access 
     35        db = self.env.get_db_cnx() 
     36        cursor = db.cursor() 
     37 
    3438        # Retrun page content 
    3539        api = DiscussionApi(self, req) 
    36         return api.render_discussion() 
     40        content = api.render_discussion(req, cursor) 
     41        db.commit() 
     42        return content 
  • discussionplugin/0.9/tracdiscussion/api.py

    r1088 r1253  
    1111        self.env = component.env 
    1212        self.log = component.log 
    13         self.req = req 
    14         self.db = self.env.get_db_cnx() 
    15         self.cursor = self.db.cursor() 
    1613 
    1714    # Main request processing function 
    1815 
    19     def render_discussion(self): 
     16    def render_discussion(self, req, cursor): 
    2017        # 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) 
    2320        self.log.debug('modes: %s' % modes) 
    2421 
    2522        # Determine moderator rights. 
    2623        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') 
    2926        else: 
    30             is_moderator = self.req.perm.has_permission('DISCUSSION_ADMIN') 
     27            is_moderator = req.perm.has_permission('DISCUSSION_ADMIN') 
    3128 
    3229        # 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) 
    3432 
    3533        # 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') 
    3937 
    4038        # Fill up HDF structure and return template 
    41         self.req.hdf['discussion.authname'] = self.req.authname 
    42         self.req.hdf['discussion.is_moderator'] = is_moderator 
     39        req.hdf['discussion.authname'] = req.authname 
     40        req.hdf['discussion.is_moderator'] = is_moderator 
    4341        if group: 
    4442            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 
    4746        if forum: 
    4847            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) 
    5050            forum['subject'] = wiki_to_oneliner(forum['subject'], self.env) 
    5151            forum['time'] = format_datetime(forum['time']) 
    52             self.req.hdf['discussion.forum'] = forum 
     52            req.hdf['discussion.forum'] = forum 
    5353        if topic: 
    5454            topic['subject'] = wiki_to_oneliner(topic['subject'], self.env) 
    5555            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) 
    5757            topic['time'] = format_datetime(topic['time']) 
    58             self.req.hdf['discussion.topic'] = topic 
     58            req.hdf['discussion.topic'] = topic 
    5959        if message: 
    6060            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) 
    6262            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()) 
    6766        return modes[-1] + '.cs', None 
    6867 
    69     def _get_items(self): 
     68    def _get_items(self, req, cursor): 
    7069        group, forum, topic, message = None, None, None, None 
    7170 
    7271        # 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) 
    7675 
    7776        # 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) 
    8180 
    8281        # 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) 
    8685 
    8786        # 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) 
    9190 
    9291        self.log.debug('message: %s' % message) 
     
    9695        return group, forum, topic, message 
    9796 
    98     def _get_modes(self, group, forum, topic, message): 
     97    def _get_modes(self, req, group, forum, topic, message): 
    9998        # 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'); 
    104103        self.log.debug('component: %s' % component) 
    105104        self.log.debug('action: %s' % action) 
    106105 
    107106        if component == 'admin': 
    108             self.req.hdf['discussion.href'] = self.env.href.admin('discussion') 
     107            req.hdf['discussion.href'] = self.env.href.admin('discussion') 
    109108        elif component == 'wiki': 
    110             self.req.hdf['discussion.href'] = self.env.href(self.req.path_info) 
     109            req.hdf['discussion.href'] = self.env.href(req.path_info) 
    111110        else: 
    112             self.req.hdf['discussion.href'] = self.env.href.discussion() 
    113         self.req.hdf['discussion.component'] = component 
     111            req.hdf['discussion.href'] = self.env.href.discussion() 
     112        req.hdf['discussion.component'] = component 
    114113 
    115114        # Determine mode 
     
    184183                        return ['topic-post-edit', 'message-list'] 
    185184                elif action == 'delete': 
    186                     self.req.hdf['discussion.no_display'] = True 
     185                    req.hdf['discussion.no_display'] = True 
    187186                    return ['topic-delete', 'message-list'] 
    188187                elif action == 'set-display': 
     
    275274                    return ['forum-list'] 
    276275 
    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): 
    278278        for mode in modes: 
    279279            self.log.debug('doing %s mode action' % (mode,)) 
    280280            if mode == 'group-list': 
    281                 self.req.perm.assert_permission('DISCUSSION_VIEW') 
     281                req.perm.assert_permission('DISCUSSION_VIEW') 
    282282 
    283283                # Display groups. 
    284                 self.req.hdf['discussion.groups'] = self.get_groups(
     284                req.hdf['discussion.groups'] = self.get_groups(req, cursor
    285285 
    286286            elif mode == 'admin-group-list': 
    287                 self.req.perm.assert_permission('DISCUSSION_ADMIN') 
     287                req.perm.assert_permission('DISCUSSION_ADMIN') 
    288288 
    289289                # 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') 
    292292 
    293293                # Prepare ORDER BY statement 
     
    299299 
    300300                # Display groups. 
    301                 self.req.hdf['discussion.order'] = order 
    302                 self.req.hdf['discussion.desc'] = desc 
     301                req.hdf['discussion.order'] = order 
     302                req.hdf['discussion.desc'] = desc 
    303303                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) 
    307308 
    308309            elif mode == 'group-add': 
    309                 self.req.perm.assert_permission('DISCUSSION_ADMIN') 
     310                req.perm.assert_permission('DISCUSSION_ADMIN') 
    310311 
    311312            elif mode == 'group-post-add': 
    312                 self.req.perm.assert_permission('DISCUSSION_ADMIN') 
     313                req.perm.assert_permission('DISCUSSION_ADMIN') 
    313314 
    314315                # 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')) 
    317318 
    318319                # Add new group. 
    319                 self.add_group(new_name, new_description) 
     320                self.add_group(cursor, new_name, new_description) 
    320321 
    321322            elif mode == 'group-post-edit': 
    322                 self.req.perm.assert_permission('DISCUSSION_ADMIN') 
     323                req.perm.assert_permission('DISCUSSION_ADMIN') 
    323324 
    324325                # 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')) 
    328329 
    329330                # Edit group. 
    330                 self.edit_group(new_group, new_name, new_description) 
     331                self.edit_group(cursor, new_group, new_name, new_description) 
    331332 
    332333            elif mode == 'group-delete': 
    333                 self.req.perm.assert_permission('DISCUSSION_ADMIN') 
     334                req.perm.assert_permission('DISCUSSION_ADMIN') 
    334335 
    335336            elif mode == 'groups-delete': 
    336                 self.req.perm.assert_permission('DISCUSSION_ADMIN') 
     337                req.perm.assert_permission('DISCUSSION_ADMIN') 
    337338 
    338339                # Get selected groups. 
    339                 selection = self.req.args.get('selection') 
     340                selection = req.args.get('selection') 
    340341                if isinstance(selection, (str, unicode)): 
    341342                    selection = [selection] 
     
    344345                if selection: 
    345346                    for group_id in selection: 
    346                         self.delete_group(group_id) 
     347                        self.delete_group(cursor, group_id) 
    347348 
    348349            elif mode == 'forum-list': 
    349                 self.req.perm.assert_permission('DISCUSSION_VIEW') 
     350                req.perm.assert_permission('DISCUSSION_VIEW') 
    350351 
    351352                # 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') 
    354355 
    355356                # Prepare ORDER BY statement 
     
    361362 
    362363                # 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) 
    367369 
    368370            elif mode == 'admin-forum-list': 
    369                 self.req.perm.assert_permission('DISCUSSION_ADMIN') 
     371                req.perm.assert_permission('DISCUSSION_ADMIN') 
    370372 
    371373                # 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') 
    374376 
    375377                # Prepare ORDER BY statement 
     
    381383 
    382384                # Display forums. 
    383                 self.req.hdf['discussion.order'] = order 
    384                 self.req.hdf['discussion.desc'] = desc 
     385                req.hdf['discussion.order'] = order 
     386                req.hdf['discussion.desc'] = desc 
    385387                self.log.debug(forum) 
    386388                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) 
    395398 
    396399            elif mode == 'forum-add': 
    397                 self.req.perm.assert_permission('DISCUSSION_ADMIN') 
     400                req.perm.assert_permission('DISCUSSION_ADMIN') 
    398401 
    399402                # 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
    402405 
    403406            elif mode == 'forum-post-add': 
    404                 self.req.perm.assert_permission('DISCUSSION_ADMIN') 
     407                req.perm.assert_permission('DISCUSSION_ADMIN') 
    405408 
    406409                # Get form values 
    407                 new_name = Markup(self.req.args.get('name')) 
    408                 new_author = self.req.authname 
    409                 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') 
    413416                if not new_moderators: 
    414417                    new_moderators = [] 
     
    417420 
    418421                # 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, 
    420423                   new_description, new_moderators, new_group) 
    421424 
    422425            elif mode == 'forum-post-edit': 
    423                 self.req.perm.assert_permission('DISCUSSION_ADMIN') 
     426                req.perm.assert_permission('DISCUSSION_ADMIN') 
    424427 
    425428                # 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') 
    432435                if not new_moderators: 
    433436                    new_moderators = [] 
     
    436439 
    437440                # Perform forum edit. 
    438                 self.edit_forum(new_forum, new_name, new_subject, 
     441                self.edit_forum(cursor, new_forum, new_name, new_subject, 
    439442                  new_description, new_moderators, new_group) 
    440443 
    441444            elif mode == 'forum-delete': 
    442                 self.req.perm.assert_permission('DISCUSSION_ADMIN') 
     445                req.perm.assert_permission('DISCUSSION_ADMIN') 
    443446 
    444447                # Delete forum 
    445                 self.delete_forum(forum['id']) 
     448                self.delete_forum(cursor, forum['id']) 
    446449 
    447450            elif mode == 'forums-delete': 
    448                 self.req.perm.assert_permission('DISCUSSION_ADMIN') 
     451                req.perm.assert_permission('DISCUSSION_ADMIN') 
    449452 
    450453                # Get selected forums. 
    451                 selection = self.req.args.get('selection') 
     454                selection = req.args.get('selection') 
    452455                if isinstance(selection, (str, unicode)): 
    453456                    selection = [selection] 
     
    456459                if selection: 
    457460                    for forum_id in selection: 
    458                         self.delete_forum(forum_id) 
     461                        self.delete_forum(cursor, forum_id) 
    459462 
    460463            elif mode == 'topic-list': 
    461                 self.req.perm.assert_permission('DISCUSSION_VIEW') 
     464                req.perm.assert_permission('DISCUSSION_VIEW') 
    462465 
    463466                # 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') 
    466469 
    467470                # Prepare ORDER BY statement 
     
    473476 
    474477                # Display topics. 
    475                 self.req.hdf['discussion.order'] = order 
    476                 self.req.hdf['discussion.desc'] = desc 
    477                 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) 
    479482 
    480483            elif mode == 'topic-add': 
    481                 self.req.perm.assert_permission('DISCUSSION_APPEND') 
     484                req.perm.assert_permission('DISCUSSION_APPEND') 
    482485 
    483486                # 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')) 
    487490 
    488491                # Display Add Topic form. 
    489492                if new_subject: 
    490                     self.req.hdf['discussion.subject'] = wiki_to_oneliner( 
     493                    req.hdf['discussion.subject'] = wiki_to_oneliner( 
    491494                      new_subject, self.env) 
    492495                if new_author: 
    493                     self.req.hdf['discussion.author'] = wiki_to_oneliner( 
     496                    req.hdf['discussion.author'] = wiki_to_oneliner( 
    494497                     new_author, self.env) 
    495498                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) 
    498501 
    499502            elif mode == 'topic-quote': 
    500                 self.req.perm.assert_permission('DISCUSSION_APPEND') 
     503                req.perm.assert_permission('DISCUSSION_APPEND') 
    501504 
    502505                # Prepare old content. 
     
    504507                for I in xrange(len(lines)): 
    505508                    lines[I] = '> %s' % (lines[I]) 
    506                 self.req.hdf['args.body'] = '\n'.join(lines) 
     509                req.hdf['args.body'] = '\n'.join(lines) 
    507510 
    508511            elif mode == 'topic-post-add': 
    509                 self.req.perm.assert_permission('DISCUSSION_APPEND') 
     512                req.perm.assert_permission('DISCUSSION_APPEND') 
    510513 
    511514                # 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')) 
    515518 
    516519                # 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) 
    518522 
    519523            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): 
    522526                    raise PermissionError('Topic edit') 
    523527 
    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 
    527532            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): 
    530535                    raise PermissionError('Topic edit') 
    531536 
    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_subject 
    538                 topic['body'] = new_body 
    539                 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) 
    541546 
    542547            elif mode == 'topic-move': 
    543                 self.req.perm.assert_permission('DISCUSSION_MODERATE') 
     548                req.perm.assert_permission('DISCUSSION_MODERATE') 
    544549                if not is_moderator: 
    545550                    raise PermissionError('Forum moderate') 
    546551 
    547552                # Display Move Topic form 
    548                 self.req.hdf['discussion.forums'] = self.get_forums(
     553                req.hdf['discussion.forums'] = self.get_forums(req, cursor
    549554 
    550555            elif mode == 'topic-post-move': 
    551                 self.req.perm.assert_permission('DISCUSSION_MODERATE') 
     556                req.perm.assert_permission('DISCUSSION_MODERATE') 
    552557                if not is_moderator: 
    553558                    raise PermissionError('Forum moderate') 
    554559 
    555560                # Get form values 
    556                 new_forum = self.req.args.get('new_forum') 
     561                new_forum = req.args.get('new_forum') 
    557562 
    558563                # Move topic. 
    559                 self.set_forum(topic['id'], new_forum) 
     564                self.set_forum(cursor, topic['id'], new_forum) 
    560565 
    561566            elif mode == 'topic-delete': 
    562                 self.req.perm.assert_permission('DISCUSSION_MODERATE') 
     567                req.perm.assert_permission('DISCUSSION_MODERATE') 
    563568                if not is_moderator: 
    564569                    raise PermissionError('Forum moderate') 
    565570 
    566571                # Delete topic. 
    567                 self.delete_topic(topic['id']) 
     572                self.delete_topic(cursor, topic['id']) 
    568573 
    569574            elif mode == 'message-list': 
    570                 self.req.perm.assert_permission('DISCUSSION_VIEW') 
     575                req.perm.assert_permission('DISCUSSION_VIEW') 
    571576 
    572577                # 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')) 
    576581 
    577582                # 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 '{}') 
    580584                if visited.has_key(topic['id']): 
    581585                    visit_time = int(visited[topic['id']]) 
     
    585589                # Update this topic visit time and save to session. 
    586590                visited[topic['id']] = int(time.time()) 
    587                 self.req.session['visited-topics'] = str(visited) 
     591                req.session['visited-topics'] = str(visited) 
    588592 
    589593                # Mark new topic. 
     
    593597                # Prepare display of topic 
    594598                if new_author: 
    595                     self.req.hdf['discussion.author'] = wiki_to_oneliner( 
     599                    req.hdf['discussion.author'] = wiki_to_oneliner( 
    596600                      new_author, self.env) 
    597601                if new_subject: 
    598                     self.req.hdf['discussion.subject'] = wiki_to_oneliner( 
     602                    req.hdf['discussion.subject'] = wiki_to_oneliner( 
    599603                      new_subject, self.env) 
    600604                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) 
    603607 
    604608                # Prepare display of messages 
    605                 display = self.req.session.get('message-list-display') 
    606                 self.req.hdf['discussion.display'] = display 
     609                display = req.session.get('message-list-display') 
     610                req.hdf['discussion.display'] = display 
    607611                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) 
    610614                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) 
    616620 
    617621            elif mode == 'message-quote': 
    618                 self.req.perm.assert_permission('DISCUSSION_APPEND') 
     622                req.perm.assert_permission('DISCUSSION_APPEND') 
    619623 
    620624                # Prepare old content. 
     
    622626                for I in xrange(len(lines)): 
    623627                    lines[I] = '> %s' % (lines[I]) 
    624                 self.req.hdf['args.body'] = '\n'.join(lines) 
     628                req.hdf['args.body'] = '\n'.join(lines) 
    625629 
    626630            elif mode == 'message-post-add': 
    627                 self.req.perm.assert_permission('DISCUSSION_APPEND') 
     631                req.perm.assert_permission('DISCUSSION_APPEND') 
    628632 
    629633                # 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')) 
    632636 
    633637                # Add message. 
    634638                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', 
    636643                      new_author, new_body) 
    637                 else: 
    638                     self.add_message(forum['id'], topic['id'], '-1', new_author, 
    639                       new_body) 
    640644 
    641645            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): 
    644648                    raise PermissionError('Message edit') 
    645649 
    646650                # Prepare form values. 
    647                 self.req.hdf['args.body'] = message['body'] 
     651                req.hdf['args.body'] = message['body'] 
    648652 
    649653            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): 
    652656                    raise PermissionError('Message edit') 
    653657 
    654658                # Get form values. 
    655                 new_body = Markup(self.req.args.get('body')) 
     659                new_body = Markup(req.args.get('body')) 
    656660 
    657661                # Edit message. 
    658662                message['body'] = new_body 
    659                 self.edit_message(message['id'], message['forum'], 
     663                self.edit_message(cursor, message['id'], message['forum'], 
    660664                  message['topic'], message['replyto'], new_body) 
    661665 
    662666            elif mode == 'message-delete': 
    663                 self.req.perm.assert_permission('DISCUSSION_MODERATE') 
     667                req.perm.assert_permission('DISCUSSION_MODERATE') 
    664668                if not is_moderator: 
    665669                    raise PermissionError('Forum moderate') 
    666670 
    667671                # Delete message. 
    668                 self.delete_message(message['id']) 
     672                self.delete_message(cursor, message['id']) 
    669673 
    670674            elif mode == 'message-set-display': 
    671                 self.req.perm.assert_permission('DISCUSSION_VIEW') 
     675                req.perm.assert_permission('DISCUSSION_VIEW') 
    672676 
    673677                # Get form values 
    674                 display = self.req.args.get('display') 
     678                display = req.args.get('display') 
    675679 
    676680                # Set message list display mode to session 
    677                 self.req.session['message-list-display'] = display 
     681                req.session['message-list-display'] = display 
    678682 
    679683    # Get one item functions 
    680684 
    681     def get_message(self, id): 
     685    def get_message(self, cursor, id): 
    682686        columns = ('id', 'forum', 'topic', 'replyto', 'time', 'author', 'body') 
    683687        sql = "SELECT id, forum, topic, replyto, time, author, body FROM" \ 
    684688          " message WHERE id = %s" 
    685689        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: 
    688692            row = dict(zip(columns, row)) 
    689693            return row 
    690694        return None 
    691695 
    692     def get_topic(self, id): 
     696    def get_topic(self, cursor, id): 
    693697        columns = ('id', 'forum', 'time', 'subject', 'body', 'author') 
    694698        sql = "SELECT id, forum, time, subject, body, author FROM topic WHERE" \ 
    695699          " id = %s" 
    696700        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: 
    699703            row = dict(zip(columns, row)) 
    700704            return row 
    701705        return None 
    702706 
    703     def get_topic_by_subject(self, subject): 
     707    def get_topic_by_subject(self, cursor, subject): 
    704708        columns = ('id', 'forum', 'time', 'subject', 'body', 'author') 
    705709        sql = "SELECT id, forum, time, subject, body, author FROM topic WHERE" \ 
    706710          " subject = '%s'" % (subject) 
    707711        self.log.debug(sql) 
    708         self.cursor.execute(sql) 
    709         for row in self.cursor: 
     712        cursor.execute(sql) 
     713        for row in cursor: 
    710714            row = dict(zip(columns, row)) 
    711715            return row 
    712716        return None 
    713717 
    714     def get_forum(self, id): 
     718    def get_forum(self, cursor, id): 
    715719        columns = ('name', 'moderators', 'id', 'time', 'subject', 
    716720          'description', 'group') 
     
    718722          " forum_group FROM forum WHERE id = %s" 
    719723        self.log.debug(sql % (id,)) 
    720         self.cursor.execute(sql, (id,))