Changeset 909

Show
Ignore:
Timestamp:
06/18/06 10:43:50 (3 years ago)
Author:
Blackhex
Message:

DiscussionPlugin:

  • ViewTopic? macro implementaton.
  • Missing time in topic and message preview fix.
  • Some code reorganization.
Files:

Legend:

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

    r836 r909  
    66setup( 
    77  name = 'TracDiscussion', 
    8   version = '0.2', 
     8  version = '0.3', 
    99  packages = ['tracdiscussion', 'tracdiscussion.db'], 
    1010  package_data = {'tracdiscussion' : ['templates/*.cs', 'htdocs/css/*.css']}, 
  • discussionplugin/0.9/tracdiscussion/admin.py

    r854 r909  
    3131        add_stylesheet(req, 'discussion/css/admin.css') 
    3232 
    33         action = None 
    34  
    3533        # Get action 
    36         if req.args.has_key('action'): 
    37             action = req.args.get('action') 
    38             if 'delete' in action: 
    39                 action = 'delete' 
     34        action = req.args.get('discussion_action') 
    4035 
    4136        # Determine mode 
  • discussionplugin/0.9/tracdiscussion/core.py

    r846 r909  
     1from tracdiscussion.api import * 
    12from trac.core import * 
    23from trac.web.chrome import INavigationContributor, ITemplateProvider, add_stylesheet 
    34from trac.web.main import IRequestHandler 
    4 from trac.wiki import wiki_to_html, wiki_to_oneliner 
    55from trac.perm import IPermissionRequestor, PermissionError 
    6 from trac.util import Markup, format_datetime, pretty_timedelta 
     6from trac.util import Markup, format_datetime 
    77import re, os, time 
    88 
     
    3333 
    3434    def get_navigation_items(self, req): 
    35         if not req.perm.has_permission('DISCUSSION_VIEW'): 
    36             return 
    37         yield 'mainnav', 'discussion', Markup('<a href="%s">%s</a>' % \ 
    38           (self.env.href.discussion(), self.env.config.get('discussion', 
    39           'title', 'Discussion'))) 
     35        if req.perm.has_permission('DISCUSSION_VIEW'): 
     36            yield 'mainnav', 'discussion', Markup('<a href="%s">%s</a>' % \ 
     37              (self.env.href.discussion(), self.env.config.get('discussion', 
     38              'title', 'Discussion'))) 
    4039 
    4140    # IRequestHandler methods 
     
    6362        add_stylesheet(req, 'common/css/wiki.css') 
    6463        add_stylesheet(req, 'discussion/css/discussion.css') 
    65         req.hdf['trac.href.discussion'] = self.env.href.discussion() 
    66  
    67         forum, topic, message, mode, action, reply, is_moderator = None, None, \ 
    68           None, None, None, None, False 
     64 
     65        forum, topic, message, mode, is_moderator = None, None, None, None, False 
    6966 
    7067        # Get action 
    71         if req.args.has_key('action'): 
    72             action = req.args.get('action') 
    73         if req.args.has_key('reply'): 
    74             reply = req.args.get('reply') 
     68        action = req.args.get('discussion_action') 
     69        reply = req.args.get('reply') 
    7570        preview = req.args.has_key('preview'); 
    7671        submit = req.args.has_key('submit'); 
     
    7974        # Populate active forum 
    8075        if req.args.has_key('forum'): 
    81             forum = self.get_forum(cursor, req, req.args.get('forum')) 
     76            forum = get_forum(cursor, self.env, req, self.log, 
     77              req.args.get('forum')) 
    8278            if not forum: 
    8379                raise TracError('No such forum %s' % req.args.get('forum')) 
     
    8985        # Populate active topic 
    9086        if req.args.has_key('topic'): 
    91             topic = self.get_topic(cursor, req, req.args.get('topic')) 
     87            topic = get_topic(cursor, self.env, req, self.log, 
     88              req.args.get('topic')) 
    9289            if not topic: 
    9390                raise TracError('No such topic %s' % req.args.get('topic')) 
     
    9592        # Populate active topic 
    9693        if req.args.has_key('message'): 
    97             message = self.get_message(cursor, req, req.args.get('message')) 
     94            message = get_message(cursor, self.env, req, self.log, 
     95              req.args.get('message')) 
    9896            if not message: 
    9997                raise TracError('No such message %s' % req.args.get('message')) 
     
    150148        if mode == 'forum-list': 
    151149            req.perm.assert_permission('DISCUSSION_VIEW') 
    152             req.hdf['discussion.forums'] = self.get_forums(cursor, req) 
     150            req.hdf['discussion.href'] = self.env.href.discussion() 
     151            req.hdf['discussion.groups'] = get_groups(cursor, self.env, req, 
     152              self.log) 
     153            req.hdf['discussion.forums'] = get_forums(cursor, self.env, req, 
     154              self.log) 
    153155        elif mode == 'forum-add': 
    154156            req.perm.assert_permission('DISCUSSION_MODIFY') 
    155             req.hdf['discussion.users'] = self.get_users() 
     157            req.hdf['discussion.href'] = self.env.href.discussion() 
     158            req.hdf['discussion.groups'] = get_groups(cursor, self.env, req, 
     159              self.log) 
     160            req.hdf['discussion.users'] = get_users(self.env) 
    156161        elif mode == 'forum-post-add': 
    157162            req.perm.assert_permission('DISCUSSION_MODIFY') 
     
    170175 
    171176            # Add new forum 
    172             self.add_forum(cursor, name, author, subject, description, 
     177            add_forum(cursor, self.log, name, author, subject, description, 
    173178              moderators, group) 
    174179 
    175180            # Display forum list 
    176             req.hdf['discussion.forums'] = self.get_forums(cursor, req) 
     181            req.hdf['discussion.href'] = self.env.href.discussion() 
     182            req.hdf['discussion.groups'] = get_groups(cursor, self.env, req, 
     183              self.log) 
     184            req.hdf['discussion.forums'] = get_forums(cursor, self.env, req, 
     185              self.log) 
    177186            mode = 'forum-list' 
    178187        elif mode == 'forum-delete': 
     
    180189 
    181190            # Delete current forum 
    182             self.delete_forum(cursor, forum['id']) 
     191            delete_forum(cursor, self.log, forum['id']) 
    183192 
    184193            # Display forum list 
    185             req.hdf['discussion.forums'] = self.get_forums(cursor, req) 
     194            req.hdf['discussion.href'] = self.env.href.discussion() 
     195            req.hdf['discussion.groups'] = get_groups(cursor, self.env, req, 
     196              self.log) 
     197            req.hdf['discussion.forums'] = get_forums(cursor, self.env, req, 
     198              self.log) 
    186199            mode = 'forum-list' 
    187200 
     
    189202        elif mode == 'topic-list': 
    190203            req.perm.assert_permission('DISCUSSION_VIEW') 
    191             req.hdf['discussion.topics'] = self.get_topics(cursor, req, 
    192               forum['id']) 
     204            req.hdf['discussion.href'] = self.env.href.discussion(forum['id']) 
     205            req.hdf['discussion.topics'] = get_topics(cursor, self.env, req, 
     206              self.log, forum['id']) 
    193207        elif mode == 'topic-add': 
    194208            req.perm.assert_permission('DISCUSSION_VIEW') 
     
    201215            body = req.args.get('body') 
    202216 
     217            req.hdf['discussion.href'] = self.env.href.discussion(forum['id']) 
    203218            if author: 
    204219                req.hdf['discussion.author'] = wiki_to_oneliner(author, self.env) 
    205220            if body: 
    206221                req.hdf['discussion.body'] = wiki_to_html(body, self.env, req) 
     222            req.hdf['discussion.time'] = format_datetime(time.time()) 
    207223        elif mode == 'topic-post-add': 
    208224            req.perm.assert_permission('DISCUSSION_VIEW') 
     
    214230 
    215231            # Add new topic and display topic list 
    216             self.add_topic(cursor, forum['id'], subject, author, body) 
    217             req.hdf['discussion.topics'] = self.get_topics(cursor, req, 
    218               forum['id']) 
     232            add_topic(cursor, self.log, forum['id'], subject, author, body) 
     233            req.hdf['discussion.href'] = self.env.href.discussion(forum['id']) 
     234            req.hdf['discussion.topics'] = get_topics(cursor, self.env, req, 
     235              self.log, forum['id']) 
    219236            mode = 'topic-list' 
    220237        elif mode == 'topic-delete': 
     
    225242                raise PermissionError('Forum moderate') 
    226243 
    227             # Delete message 
    228             self.delete_topic(cursor, forum['id'], topic['id']) 
     244            # Delete topic 
     245            delete_topic(cursor, self.log, topic['id']) 
    229246 
    230247            # Display topics 
    231             req.hdf['discussion.topics'] = self.get_topics(cursor, req, 
    232               forum['id']) 
     248            req.hdf['discussion.href'] = self.env.href.discussion(forum['id']) 
     249            req.hdf['discussion.topics'] = get_topics(cursor, self.env, req, 
     250              self.log, forum['id']) 
    233251            mode = 'topic-list' 
    234252 
     
    245263 
    246264            # Display messages 
     265            req.hdf['discussion.href'] = self.env.href.discussion(forum['id'], 
     266              topic['id']) 
    247267            if author: 
    248268                req.hdf['discussion.author'] = wiki_to_oneliner(author, self.env) 
    249269            if body: 
    250270                req.hdf['discussion.body'] = wiki_to_html(body, self.env, req) 
    251             req.hdf['discussion.messages'] = self.get_messages(cursor, req, 
    252               topic['id']) 
     271            req.hdf['discussion.time'] = format_datetime(time.time()) 
     272            req.hdf['discussion.messages'] = get_messages(cursor, self.env, req, 
     273              self.log, topic['id']) 
    253274        elif mode == 'message-post-add': 
    254275            req.perm.assert_permission('DISCUSSION_VIEW') 
     
    259280 
    260281            # Add new message 
    261             self.add_message(cursor, forum['id'], topic['id'], reply, author
    262               body) 
     282            add_message(cursor, self.log, forum['id'], topic['id'], reply
     283              author, body) 
    263284 
    264285            # Display messages 
     286            req.hdf['discussion.href'] = self.env.href.discussion(forum['id'], 
     287              topic['id']) 
    265288            if author: 
    266289                req.hdf['discussion.author'] = wiki_to_oneliner(author, self.env) 
    267290            if body: 
    268291                req.hdf['discussion.body'] = wiki_to_html(body, self.env, req) 
    269             req.hdf['discussion.messages'] = self.get_messages(cursor, req, 
    270               topic['id']) 
     292            req.hdf['discussion.messages'] = get_messages(cursor, self.env, req, 
     293              self.log, topic['id']) 
    271294            mode = 'message-list' 
    272295        elif mode == 'message-delete': 
     
    278301 
    279302            # Delete message 
    280             self.delete_message(cursor, forum['id'], topic['id'], reply) 
     303            delete_message(cursor, self.log, reply) 
    281304 
    282305            # Display or messages 
    283             req.hdf['discussion.messages'] = self.get_messages(cursor, req
     306            req.hdf['discussion.href'] = self.env.href.discussion(forum['id']
    284307              topic['id']) 
     308            req.hdf['discussion.messages'] = get_messages(cursor, self.env, req, 
     309              self.log, topic['id']) 
    285310            mode = 'message-list' 
    286311 
    287         req.hdf['discussion.groups'] = self.get_groups(cursor, req); 
     312        req.hdf['trac.href.discussion'] = self.env.href.discussion() 
    288313        req.hdf['discussion.forum'] = forum 
    289314        req.hdf['discussion.topic'] = topic 
     
    293318        db.commit() 
    294319        return mode + '.cs', None 
    295  
    296     # Non-extension methods 
    297     def get_message(self, cursor, req, id): 
    298         columns = ('id', 'forum', 'topic', 'replyto', 'time', 'author', 'body') 
    299         sql = 'SELECT id, forum, topic, replyto, time, author, body FROM' \ 
    300           ' message WHERE id = %s' % (id) 
    301         self.log.debug(sql) 
    302         cursor.execute(sql) 
    303         for row in cursor: 
    304             row = dict(zip(columns, row)) 
    305             row['author'] = wiki_to_oneliner(row['author'], self.env) 
    306             row['body'] = wiki_to_html(row['body'], self.env, req) 
    307             return row 
    308         return None 
    309  
    310     def get_topic(self, cursor, req, id): 
    311         columns = ('id', 'forum', 'time', 'subject', 'body', 'author') 
    312         sql = 'SELECT id, forum, time, subject, body, author FROM topic WHERE' \ 
    313           ' id = %s' % (id) 
    314         self.log.debug(sql) 
    315         cursor.execute(sql) 
    316         for row in cursor: 
    317             row = dict(zip(columns, row)) 
    318             row['author'] = wiki_to_oneliner(row['author'], self.env) 
    319             row['body'] = wiki_to_html(row['body'], self.env, req) 
    320             row['time'] = format_datetime(row['time']) 
    321             return row 
    322         return None 
    323  
    324     def get_forum(self, cursor, req, id): 
    325         columns = ('name', 'moderators', 'id', 'time', 'subject', 'description') 
    326         sql = 'SELECT name, moderators, id, time, subject, description FROM' \ 
    327           ' forum WHERE id = %s' % (id) 
    328         self.log.debug(sql) 
    329         cursor.execute(sql) 
    330         for row in cursor: 
    331             row = dict(zip(columns, row)) 
    332             row['moderators'] = row['moderators'].split(' ') 
    333             row['description'] = wiki_to_oneliner(row['description'], self.env) 
    334             return row 
    335         return None 
    336  
    337     def get_groups(self, cursor, req): 
    338         columns = ('id', 'name', 'description') 
    339         sql = 'SELECT id, name, description FROM forum_group' 
    340         self.log.debug(sql) 
    341         cursor.execute(sql) 
    342         groups = [] 
    343         for row in cursor: 
    344             row = dict(zip(columns, row)) 
    345             row['name'] = wiki_to_oneliner(row['name'], self.env) 
    346             row['description'] = wiki_to_oneliner(row['description'], self.env) 
    347             groups.append(row) 
    348         return groups 
    349  
    350     def get_forums(self, cursor, req): 
    351         columns = ('id', 'name', 'author', 'time', 'moderators', 'group', 
    352           'subject', 'description', 'topics', 'replies', 'lastreply', 
    353           'lasttopic') 
    354         sql = 'SELECT id, name, author, time, moderators, forum_group,' \ 
    355           ' subject, description, (SELECT COUNT(id) FROM topic t WHERE' \ 
    356           ' t.forum = forum.id), (SELECT COUNT(id) FROM message m WHERE' \ 
    357           ' m.forum = forum.id), (SELECT MAX(time) FROM message m WHERE' \ 
    358           ' m.forum = forum.id), (SELECT MAX(time) FROM topic t WHERE' \ 
    359           ' t.forum = forum.id) FROM forum ORDER BY subject' 
    360         self.log.debug(sql) 
    361         cursor.execute(sql) 
    362         forums = [] 
    363         for row in cursor: 
    364             row = dict(zip(columns, row)) 
    365             row['moderators'] = wiki_to_oneliner(row['moderators'], self.env) 
    366             row['description'] = wiki_to_oneliner(row['description'], self.env) 
    367             if row['lastreply']: 
    368                 row['lastreply'] = pretty_timedelta(row['lastreply']) 
    369             else: 
    370                 row['lastreply'] = 'No replies' 
    371             if row['lasttopic']: 
    372                 row['lasttopic'] = pretty_timedelta(row['lasttopic']) 
    373             else: 
    374                 row['lasttopic'] = 'No topics' 
    375             row['time'] = format_datetime(row['time']) 
    376             forums.append(row) 
    377         return forums 
    378  
    379     def get_topics(self, cursor, req, forum): 
    380         columns = ('id', 'forum', 'time', 'subject', 'body', 'author', 
    381           'replies', 'lastreply') 
    382         sql = 'SELECT id, forum, time, subject, body, author, (SELECT' \ 
    383           ' COUNT(id) FROM message m WHERE m.topic = topic.id), (SELECT' \ 
    384           ' MAX(time) FROM message m WHERE m.topic = topic.id) FROM topic' \ 
    385           ' WHERE forum = %s ORDER BY time' % (forum) 
    386         self.log.debug(sql) 
    387         cursor.execute(sql) 
    388         topics = [] 
    389         for row in cursor: 
    390             row = dict(zip(columns, row)) 
    391             row['author'] = wiki_to_oneliner(row['author'], self.env) 
    392             row['body'] = wiki_to_html(row['body'], self.env, req) 
    393             if row['lastreply']: 
    394                 row['lastreply'] = pretty_timedelta(row['lastreply']) 
    395             else: 
    396                 row['lastreply'] = 'No replies' 
    397             row['time'] = format_datetime(row['time']) 
    398             topics.append(row) 
    399         return topics 
    400  
    401     def get_messages(self, cursor, req, topic): 
    402         columns = ('id', 'replyto', 'time', 'author', 'body') 
    403         sql = 'SELECT id, replyto, time, author, body FROM message WHERE' \ 
    404           ' topic = %s ORDER BY time' % (topic) 
    405         self.log.debug(sql) 
    406         cursor.execute(sql) 
    407  
    408         messagemap = {} 
    409         messages = [] 
    410  
    411         for row in cursor: 
    412             row = dict(zip(columns, row)) 
    413             row['author'] = wiki_to_oneliner(row['author'], self.env) 
    414             row['body'] = wiki_to_html(row['body'], self.env, req) 
    415             row['time'] = format_datetime(row['time']) 
    416             messagemap[row['id']] = row 
    417             # Add top-level messages to the main list, in order of time 
    418             if row['replyto'] == -1: 
    419                 messages.append(row) 
    420  
    421         # Second pass, add replies 
    422         for message in messagemap.values(): 
    423             if message['replyto'] != -1: 
    424                 parent = messagemap[message['replyto']] 
    425                 if 'replies' in parent: 
    426                     parent['replies'].append(message) 
    427                 else: 
    428                     parent['replies'] = [message] 
    429         return messages; 
    430  
    431     def get_users(self): 
    432         users = [] 
    433         for user in self.env.get_known_users(): 
    434             users.append(user[0]) 
    435         return users 
    436  
    437     def add_forum(self, cursor, name, author, subject, description, moderators, 
    438       group): 
    439         moderators = ' '.join(moderators) 
    440         if not group: 
    441             group = 'NULL' 
    442         sql = 'INSERT INTO forum (name, author, time, moderators, subject,' \ 
    443           ' description, forum_group) VALUES ("%s", "%s", %s, "%s", "%s",' \ 
    444           ' "%s", %s)' % (name, author, str(int(time.time())), moderators, 
    445           subject, description, group) 
    446         self.log.debug(sql) 
    447         cursor.execute(sql) 
    448  
    449     def add_topic(self, cursor, forum, subject, author, body): 
    450         sql = 'INSERT INTO topic (forum, time, author, subject, body) VALUES' \ 
    451           ' (%s, %s, "%s", "%s", "%s")' % (forum, str(int(time.time())), author, 
    452           subject, body) 
    453         self.log.debug(sql) 
    454         cursor.execute(sql) 
    455  
    456     def add_message(self, cursor, forum, topic, replyto, author, body): 
    457         sql = 'INSERT INTO message (forum, topic, replyto, time, author, body)' \ 
    458           ' VALUES (%s, %s, %s, %s, "%s", "%s")' % (forum, topic, replyto, 
    459           str(int(time.time())), author, body) 
    460         self.log.debug(sql) 
    461         cursor.execute(sql) 
    462  
    463     def delete_forum(self, cursor, forum): 
    464         sql = 'DELETE FROM message WHERE forum = %s' % (forum) 
    465         self.log.debug(sql) 
    466         cursor.execute(sql) 
    467         sql = 'DELETE FROM topic WHERE forum = %s' % (forum) 
    468         self.log.debug(sql) 
    469         cursor.execute(sql) 
    470         sql = 'DELETE FROM forum WHERE id = %s' % (forum) 
    471         self.log.debug(sql) 
    472         cursor.execute(sql) 
    473  
    474     def delete_topic(self, cursor, forum, topic): 
    475         sql = 'DELETE FROM message WHERE forum = %s AND topic = %s' % (forum, 
    476           topic) 
    477         self.log.debug(sql) 
    478         cursor.execute(sql) 
    479         sql = 'DELETE FROM topic WHERE id = %s' % (topic) 
    480         self.log.debug(sql) 
    481         cursor.execute(sql) 
    482  
    483     def delete_message(self, cursor, forum, topic, message): 
    484         # Get message replies 
    485         sql = 'SELECT id FROM message WHERE replyto = %s' % (message) 
    486         self.log.debug(sql) 
    487         cursor.execute(sql) 
    488         replies = [] 
    489         for row in cursor: 
    490             replies.append(row[0]) 
    491  
    492         # Delete all replies 
    493         for reply in replies: 
    494             self.delete_message(cursor, forum, topic, reply) 
    495  
    496         # Delete message itself 
    497         sql = 'DELETE FROM message WHERE id = %s' % (message) 
    498         self.log.debug(sql) 
    499         cursor.execute(sql) 
  • discussionplugin/0.9/tracdiscussion/templates/forum-add.cs

    r845 r909  
    22 
    33<h1>Add Forum</h1> 
    4 <form class="add_form" method="post" action="<?cs var:trac.href.discussion ?>"> 
     4<form class="add_form" method="post" action="<?cs var:discussion.href ?>"> 
    55  <fieldset> 
    66    <legend> 
     
    4747      <input type="submit" name="submit" value="Submit"/> 
    4848      <input type="submit" name="cancel" value="Cancel"/> 
    49       <input type="hidden" name="action" value="post-add"/> 
     49      <input type="hidden" name="discussion_action" value="post-add"/> 
    5050    </div> 
    5151  </fieldset> 
  • discussionplugin/0.9/tracdiscussion/templates/forum-admin.cs

    r836 r909  
    44    var forum_list_form = document.getElementById('forum-list-form'); 
    55    var group_select = document.getElementById('group-select-' + forum); 
    6     forum_list_form.action.value = 'change-group'; 
     6    forum_list_form.discussion_action.value = 'change-group'; 
    77    forum_list_form.group.value = group_select.value; 
    88    forum_list_form.forum.value = forum; 
     
    4444    <div class="buttons"> 
    4545      <input type="submit" name="submit" value="Add"/> 
    46       <input type="hidden" name="action" value="post-add"/> 
     46      <input type="hidden" name="discussion_action" value="post-add"/> 
    4747    </div> 
    4848  </fieldset> 
     
    104104    <div class="buttons"> 
    105105      <input type="submit" name="remove" value="Remove selected items" /> 
    106       <input type="hidden" name="action" value="delete"/> 
     106      <input type="hidden" name="discussion_action" value="delete"/> 
    107107      <input type="hidden" name="group" value=""/> 
    108108      <input type="hidden" name="forum" value=""/> 
  • discussionplugin/0.9/tracdiscussion/templates/forum-list.cs

    r846 r909  
    2727         <tr class="<?cs if:name(forum) % #2 ?>even<?cs else ?>odd<?cs /if ?>"> 
    2828            <td class="title"> 
    29               <a href="<?cs var:trac.href.discussion ?>/<?cs var:forum.id ?>"> 
     29              <a href="<?cs var:discussion.href ?>/<?cs var:forum.id ?>"> 
    3030                <div class="subject"><?cs var:forum.subject ?></div> 
    3131                <div class="description"><?cs var:forum.description ?></div> 
     
    3333            </td> 
    3434            <td class="moderators"> 
    35               <a href="<?cs var:trac.href.discussion ?>/<?cs var:forum.id ?>"> 
     35              <a href="<?cs var:discussion.href ?>/<?cs var:forum.id ?>"> 
    3636                <div class="moderators"><?cs var:forum.moderators ?></div> 
    3737              </a> 
    3838            </td> 
    3939            <td class="lasttopic"> 
    40               <a href="<?cs var:trac.href.discussion ?>/<?cs var:forum.id ?>"> 
     40              <a href="<?cs var:discussion.href ?>/<?cs var:forum.id ?>"> 
    4141                <div class="lasttopic"><?cs var:forum.lasttopic ?></div> 
    4242              </a> 
    4343            </td> 
    4444            <td class="lastreply"> 
    45               <a href="<?cs var:trac.href.discussion ?>/<?cs var:forum.id ?>"> 
     45              <a href="<?cs var:discussion.href ?>/<?cs var:forum.id ?>"> 
    4646                <div class="lastreply"><?cs var:forum.lastreply ?></div> 
    4747              </a> 
    4848            </td> 
    4949            <td class="founded"> 
    50               <a href="<?cs var:trac.href.discussion ?>/<?cs var:forum.id ?>"> 
     50              <a href="<?cs var:discussion.href ?>/<?cs var:forum.id ?>"> 
    5151               <div class="founded"><?cs var:forum.time ?></div> 
    5252              </a> 
    5353            </td> 
    5454            <td class="topics"> 
    55               <a href="<?cs var:trac.href.discussion ?>/<?cs var:forum.id ?>"> 
     55              <a href="<?cs var:discussion.href ?>/<?cs var:forum.id ?>"> 
    5656                <div class="topics"><?cs var:forum.topics ?></div> 
    5757              </a> 
    5858            </td> 
    5959            <td class="replies"> 
    60               <a href="<?cs var:trac.href.discussion ?>/<?cs var:forum.id ?>"> 
     60              <a href="<?cs var:discussion.href ?>/<?cs var:forum.id ?>"> 
    6161                <div class="replies"><?cs var:forum.replies ?></div> 
    6262              </a> 
     
    7878<?cs if:trac.acl.DISCUSSION_MODIFY ?> 
    7979  <div class="buttons"> 
    80     <form method="post" action="<?cs var:trac.href.discussion ?>"> 
     80    <form method="post" action="<?cs var:discussion.href ?>"> 
    8181      <input type="submit" name="newforum" value="New Forum"/> 
    82       <input type="hidden" name="action" value="add"/> 
     82      <input type="hidden" name="discussion_action" value="add"/> 
    8383    </form> 
    8484  </div> 
  • discussionplugin/0.9/tracdiscussion/templates/group-admin.cs

    r836 r909  
    1616    <div class="buttons"> 
    1717      <input type="submit" name="submit" value="Add"/> 
    18       <input type="hidden" name="action" value="post-add"/> 
     18      <input type="hidden" name="discussion_action" value="post-add"/> 
    1919    </div> 
    2020  </fieldset> 
     
    4949    <div class="buttons"> 
    5050      <input type="submit" name="remove" value="Remove selected items" /> 
    51       <input type="hidden" name="action" value="delete"/> 
     51      <input type="hidden" name="discussion_action" value="delete"/> 
    5252    </div> 
    5353  </form> 
  • discussionplugin/0.9/tracdiscussion/templates/message-list.cs

    r846 r909  
    1 <?cs include "discussion-header.cs" ?> 
    2  
    31<?cs def:display_preview() ?> 
    42  <li class="preview"> 
     
    75      <?cs var:discussion.body ?> 
    86    </div> 
    9     <div class="author"> 
    10       <?cs var:discussion.author ?> 
     7    <div class="footer"> 
     8      <div class="author"> 
     9        <?cs var:discussion.author ?> 
     10      </div> 
     11      <div class="time"> 
     12        <?cs var:discussion.time ?> 
     13      </div> 
    1114    </div> 
    1215  </li> 
     
    2023         Reply: 
    2124      </legend> 
    22       <form method="post" action="<?cs var:trac.href.discussion ?>/<?cs var:discussion.forum.id ?>/<?cs var:discussion.topic.id ?>#preview"> 
     25      <form method="get" action="<?cs var:discussion.href ?>#preview"> 
    2326        <div class="field"> 
    2427          <label for="author">Author:</label><br/> 
     
    3639          <input type="submit" name="preview" value="Preview"/> 
    3740          <input type="submit" name="submit" value="Reply"/> 
    38           <input type="button" name="cancel" value="Cancel" onClick="location.href = '<?cs var:trac.href.discussion ?>/<?cs var:discussion.forum.id ?>/<?cs var:discussion.topic.id ?>'"/> 
     41          <input type="button" name="cancel" value="Cancel" onClick="location.href = '<?cs var:discussion.href ?>'"/> 
    3942        </div> 
    4043        <input type="hidden" name="reply" value="<?cs var:args.reply ?>"/> 
    41         <input type="hidden" name="action" value="post-add"/> 
     44        <input type="hidden" name="discussion_action" value="post-add"/> 
    4245      </form> 
    4346    </fieldset> 
     
    5356      </div> 
    5457      <div class="controls"> 
    55         <a href="<?cs var:trac.href.discussion ?>/<?cs var:discussion.forum.id ?>/<?cs var:discussion.topic.id ?>?action=add;reply=<?cs var:message.id ?>#reply">Reply</a> 
     58        <a href="<?cs var:discussion.href ?>?discussion_action=add;reply=<?cs var:message.id ?>#reply">Reply</a> 
    5659        <?cs if:trac.acl.DISCUSSION_MODERATE && discussion.is_moderator ?> 
    57           <a href="<?cs var:trac.href.discussion ?>/<?cs var:discussion.forum.id ?>/<?cs var:discussion.topic.id ?>?action=delete;reply=<?cs var:message.id ?>" onClick="return confirm('Do you realy want to delete this reply and all its descendants?')"/>Delete</a> 
     60          <a href="<?cs var:discussion.href ?>?discussion_action=delete;reply=<?cs var:message.id ?>" onClick="return confirm('Do you realy want to delete this reply and all its descendants?')"/>Delete</a> 
    5861        <?cs /if ?> 
    5962      </div> 
     
    6770      </div> 
    6871    </li> 
    69     <?cs if:discussion.messages.0.body || (args.action == "add") || (args.action == "post-add") ?> 
     72    <?cs if:discussion.messages.0.id || (args.discussion_action == "add") || (args.discussion_action == "post-add") ?> 
    7073      <ul> 
    7174        <?cs call:display_topic(message.replies) ?> 
     
    8184<?cs /def ?> 
    8285 
    83 <h1 class="forum-subject"><?cs var:discussion.forum.subject ?> - Message List</h1> 
    84 <a name="-1"></a> 
    85 <div class="topic"> 
    86   <div class="header"> 
    87     <div class="subject"> 
    88       <?cs var:discussion.topic.subject ?> 
    89     </div> 
    90     <div class="body"> 
    91       <?cs var:discussion.topic.body ?> 
    92     </div> 
    93     <div class="controls"> 
    94       <a href="<?cs var:trac.href.discussion ?>/<?cs var:discussion.forum.id ?>/<?cs var:discussion.topic.id ?>?action=add;reply=-1#reply">Reply</a> 
    95     </div> 
    96     <div class="footer"> 
    97       <div class="author"> 
    98         <?cs var:discussion.topic.author ?> 
     86 
     87<?cs if:discussion.no_navigation ?> 
     88  <div id="message-list" class="message-list"> 
     89  <h2>Discussion</h2> 
     90<?cs else ?> 
     91  <?cs include "discussion-header.cs" ?> 
     92  <h1 class="forum-subject"><?cs var:discussion.forum.subject ?> - Message List</h1> 
     93<?cs /if?> 
     94 
     95<?cs if:trac.acl.DISCUSSION_VIEW ?> 
     96  <a name="-1"></a> 
     97  <div class="topic"> 
     98    <div class="header"> 
     99      <div class="subject"> 
     100        <?cs var:discussion.topic.subject ?> 
    99101      </div> 
    100       <div class="time"> 
    101         <?cs var:discussion.topic.time ?> 
     102      <div class="body"> 
     103        <?cs var:discussion.topic.body ?> 
     104      </div> 
     105      <div class="controls"> 
     106        <a href="<?cs var:discussion.href ?>?discussion_action=add;reply=-1#reply">Reply</a> 
     107      </div> 
     108      <div class="footer"> 
     109        <div class="author"> 
     110          <?cs var:discussion.topic.author ?> 
     111        </div> 
     112        <div class="time"> 
     113          <?cs var:discussion.topic.time ?> 
     114        </div> 
    102115      </div> 
    103116    </div> 
    104   </div> 
    105   <?cs if:discussion.messages.0.body || (args.action == "add") || (args.action == "post-add") ?> 
    106     <div class="replies"> 
    107       <ul> 
    108         <?cs call:display_topic(discussion.messages) ?> 
    109         <?cs if:args.preview && args.reply == -1 ?> 
    110            <?cs call:display_preview() ?> 
    111         <?cs /if ?> 
    112         <?cs if:!args.submit && args.reply == -1 ?> 
    113           <?cs call:display_form() ?> 
    114         <?cs /if ?> 
    115       </ul> 
    116     </div> 
     117    <?cs if:discussion.messages.0.id || (args.discussion_action == "add") || (args.discussion_action == "post-add") ?> 
     118      <div class="replies"> 
     119        <ul> 
     120          <?cs call:display_topic(discussion.messages) ?> 
     121          <?cs if:args.preview && args.reply == -1 ?> 
     122            <?cs call:display_preview() ?> 
     123          <?cs /if ?> 
     124          <?cs if:!args.submit && args.reply == -1 ?> 
     125            <?cs call:display_form() ?> 
     126          <?cs /if ?> 
     127        </ul> 
     128      </div> 
     129    <?cs /if ?> 
     130  <?cs else ?> 
     131    <span>You have no rights to see this discussion.</span> 
    117132  <?cs /if ?> 
    118133</div> 
     
    120135<?cs if:trac.acl.DISCUSSION_MODERATE && discussion.is_moderator ?> 
    121136  <div class="buttons"> 
    122     <form method="post" action="<?cs var:trac.href.discussion ?>/<?cs var:discussion.forum.id ?>/<?cs var:discussion.topic.id ?>"> 
     137    <form method="get" action="<?cs var:discussion.href ?>"> 
    123138      <input type="submit" name="deletetopic" value="Delete Topic" onClick="return confirm('Do you realy want to delete this topic?')"/> 
    124       <input type="hidden" name="action" value="delete"/> 
     139      <input type="hidden" name="discussion_action" value="delete"/> 
    125140      <input type="hidden" name="reply" value="-1"> 
    126141    </form> 
     
    128143<?cs /if ?> 
    129144 
    130 <?cs include "discussion-footer.cs" ?> 
     145<?cs if:discussion.no_navigation ?> 
     146  </div> 
     147<?cs else ?> 
     148  <?cs include "discussion-footer.cs" ?> 
     149<?cs /if?> 
     150 
     151 
  • discussionplugin/0.9/tracdiscussion/templates/topic-add.cs

    r804 r909  
    1313          <?cs var:discussion.body ?> 
    1414        </div> 
    15         <div class="author"> 
    16           <?cs var:discussion.author ?> 
     15        <div class="footer"> 
     16          <div class="author"> 
     17            <?cs var:discussion.author ?> 
     18          </div> 
     19          <div class="time"> 
     20            <?cs var:discussion.time ?> 
     21          </div> 
    1722        </div> 
    1823      </div> 
     
    2126<?cs /if ?> 
    2227 
    23 <form class="add_form" method="post" action="<?cs var:trac.href.discussion ?>/<?cs var:discussion.forum.id ?>"> 
     28<form class="add_form" method="post" action="<?cs var:discussion.href ?>"> 
    2429  <fieldset> 
    2530    <legend> 
     
    4651      <input type="submit" name="submit" value="Submit"/> 
    4752      <input type="submit" name="cancel" value="Cancel"/> 
    48       <input type="hidden" name="action" value="post-add"/> 
     53      <input type="hidden" name="discussion_action" value="post-add"/> 
    4954    </div> 
    5055  </fieldset> 
  • discussionplugin/0.9/tracdiscussion/templates/topic-list.cs

    r804 r909  
    1717        <tr class="<?cs if:name(topic) % #2 ?>even<?cs else ?>odd<?cs /if ?>"> 
    1818          <td class="subject"> 
    19             <a href="<?cs var:trac.href.discussion ?>/<?cs var:discussion.forum.id ?>/<?cs var:topic.id ?>"> 
     19            <a href="<?cs var:discussion.href ?>/<?cs var:topic.id ?>"> 
    2020              <div class="subject"><?cs var:topic.subject ?></div> 
    2121            </a> 
    2222          </td> 
    2323          <td class="author"> 
    24             <a href="<?cs var:trac.href.discussion ?>/<?cs var:discussion.forum.id ?>/<?cs var:topic.id ?>"> 
     24            <a href="<?cs var:discussion.href ?>/<?cs var:topic.id ?>"> 
    2525              <div class="author" ><?cs var:topic.author ?></div> 
    2626            </a> 
    2727          </td> 
    2828          <td class="lastreply"> 
    29             <a href="<?cs var:trac.href.discussion ?>/<?cs var:discussion.forum.id ?>/<?cs var:topic.id ?>"> 
     29            <a href="<?cs var:discussion.href ?>/<?cs var:topic.id ?>"> 
    3030              <div class="lastreply"><?cs var:topic.lastreply ?></div> 
    3131            </a> 
    3232          </td> 
    3333          <td class="founded"> 
    34             <a href="<?cs var:trac.href.discussion ?>/<?cs var:discussion.forum.id ?>/<?cs var:topic.id ?>"> 
     34            <a href="<?cs var:discussion.href ?>/<?cs var:topic.id ?>"> 
    3535              <div class="founded" ><?cs var:topic.time ?></div> 
    3636            </a> 
    3737          </td> 
    3838          <td class="replies"> 
    39             <a href="<?cs var:trac.href.discussion ?>/<?cs var:discussion.forum.id ?>/<?cs var:topic.id ?>"> 
     39            <a href="<?cs var:discussion.href ?>/<?cs var:topic.id ?>"> 
    4040              <div class="replies" ><?cs var:topic.replies ?></div> 
    4141            </a> 
     
    4747 
    4848  <div class="buttons"> 
    49     <form method="post" action="<?cs var:trac.href.discussion ?>/<?cs var:discussion.forum.id ?>"> 
     49    <form method="post" action="<?cs var:discussion.href ?>"> 
    5050      <input type="submit" name="newtopic" value="New Topic"/> 
    51       <input type="hidden" name="action" value="add"/> 
     51      <input type="hidden" name="discussion_action" value="add"/> 
    5252    </form> 
    5353    <?cs if:trac.acl.DISCUSSION_MODIFY ?> 
    54       <form method="post" action="<?cs var:trac.href.discussion ?>/<?cs var:discussion.forum.id ?>"> 
     54      <form method="post" action="<?cs var:discussion.href ?>"> 
    5555        <input type="submit" name="deleteforum" value="Delete Forum" onClick="return confirm('Do you realy want to delete this forum?')"/> 
    56         <input type="hidden" name="action" value="delete"> 
     56        <input type="hidden" name="discussion_action" value="delete"> 
    5757      </form> 
    5858    <?cs /if ?> 
  • discussionplugin/0.9/tracdiscussion/wiki.py

    <
    r836 r909  
     1from tracdiscussion.api import * 
    12from trac.core import * 
    2 from trac.wiki import IWikiSyntaxProvider 
     3from trac.wiki import IWikiSyntaxProvider, IWikiMacroProvider 
     4from trac.web.chrome import add_stylesheet 
     5from trac.util import format_datetime 
     6import time 
     7 
     8view_topic_doc = """Displays content of discussion topic. If no argument passed 
     9tries to find topic with same name as name of current wiki page. If topic name 
     10passed displays that topic. """ 
    311