Changeset 2014

Show
Ignore:
Timestamp:
02/20/07 14:50:29 (2 years ago)
Author:
Blackhex
Message:

DiscussionPlugin:

  • Fixed typo bug in topic cration e-mail notification.
  • Fixed display of message of ViewTopic macro bug when topic was not created.
  • Authenticated users now can't change author fields.
  • Bug #1227 fix.
  • Templates and code refactored a little.
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • discussionplugin/0.10/tracdiscussion/api.py

    r2009 r2014  
    120120            elif component == 'wiki': 
    121121                if action == 'add': 
    122                     return ['message-list'] 
     122                    return ['wiki-message-list'] 
    123123                elif action == 'quote': 
    124                     return ['message-quote', 'message-list'] 
     124                    return ['message-quote', 'wiki-message-list'] 
    125125                elif action == 'post-add': 
    126126                    if preview: 
    127                         return ['message-list'] 
     127                        return ['wiki-message-list'] 
    128128                    else: 
    129                         return ['message-post-add', 'message-list'] 
     129                        return ['message-post-add', 'wiki-message-list'] 
    130130                elif action == 'edit': 
    131                     return ['message-edit', 'message-list'] 
     131                    return ['message-edit', 'wiki-message-list'] 
    132132                elif action == 'post-edit': 
    133133                    if preview: 
    134                         return ['message-list'] 
     134                        return ['wiki-message-list'] 
    135135                    else: 
    136                         return ['message-post-edit', 'message-list'] 
     136                        return ['message-post-edit', 'wiki-message-list'] 
    137137                elif action == 'delete': 
    138                     return ['message-delete', 'message-list'] 
     138                    return ['message-delete', 'wiki-message-list'] 
    139139                elif action == 'set-display': 
    140                     return ['message-set-display', 'message-list'] 
    141                 else: 
    142                     return ['message-list'] 
     140                    return ['message-set-display', 'wiki-message-list'] 
     141                else: 
     142                    return ['wiki-message-list'] 
    143143            else: 
    144144                if action == 'add': 
     
    169169            elif component == 'wiki': 
    170170                if action == 'add': 
    171                     return ['message-list'] 
     171                    return ['wiki-message-list'] 
    172172                elif action == 'quote': 
    173                     return ['topic-quote', 'message-list'] 
     173                    return ['topic-quote','wiki-message-list'] 
    174174                elif action == 'post-add': 
    175175                    if preview: 
    176                         return ['message-list'] 
     176                        return ['wiki-message-list'] 
    177177                    else: 
    178                         return ['message-post-add', 'message-list'] 
     178                        return ['message-post-add', 'wiki-message-list'] 
    179179                elif action == 'edit': 
    180                     return ['topic-edit', 'message-list'] 
     180                    return ['topic-edit', 'wiki-message-list'] 
    181181                elif action == 'post-edit': 
    182182                    if preview: 
    183                         return ['message-list'] 
     183                        return ['wiki-message-list'] 
    184184                    else: 
    185                         return ['topic-post-edit', 'message-list'] 
    186                 elif action == 'delete': 
    187                     req.hdf['discussion.no_display'] = True 
    188                     return ['topic-delete', 'message-list'] 
     185                        return ['topic-post-edit', 'wiki-message-list'] 
    189186                elif action == 'set-display': 
    190                     return ['message-set-display', 'message-list'] 
    191                 else: 
    192                     return ['message-list'] 
     187                    return ['message-set-display', 'wiki-message-list'] 
     188                else: 
     189                    return ['wiki-message-list'] 
    193190            else: 
    194191                if action == 'add': 
     
    225222                    return ['admin-forum-list'] 
    226223            elif component == 'wiki': 
    227                 pass 
     224                return ['wiki-message-list'] 
    228225            else: 
    229226                if action == 'add': 
     
    252249                        return ['admin-forum-list'] 
    253250            elif component == 'wiki': 
    254                 pass 
     251                return ['wiki-message-list'] 
    255252            else: 
    256253                if action == 'post-add': 
     
    267264                    return ['admin-group-list'] 
    268265            elif component == 'wiki': 
    269                 pass 
     266                return ['wiki-message-list'] 
    270267            else: 
    271268                if action == 'add': 
     
    500497                # Get new popic and notify about creation. 
    501498                new_topic = self.get_topic_by_time(cursor, new_time) 
    502                 to = self.get_topic_to_recipients(cursor, topic['id']) 
    503                 cc = self.get_topic_cc_recipients(cursor, topic['id']) 
     499                to = self.get_topic_to_recipients(cursor, new_topic['id']) 
     500                cc = self.get_topic_cc_recipients(cursor, new_topic['id']) 
    504501                notifier = DiscussionNotifyEmail(self.env) 
    505502                notifier.notify(req, cursor, mode, forum, new_topic, None, to, 
     
    512509 
    513510                # Prepare form values. 
     511                req.args['subject'] = topic['subject'] 
     512                req.args['body'] = topic['body'] 
     513                req.hdf['args.subject'] = topic['subject'] 
    514514                req.hdf['args.body'] = topic['body'] 
    515                 req.hdf['args.subject'] = topic['subject'] 
    516515 
    517516            elif mode == 'topic-post-edit': 
     
    559558            elif mode == 'message-list': 
    560559                req.perm.assert_permission('DISCUSSION_VIEW') 
    561  
    562                 # Get form values. 
    563                 new_author = req.args.get('author') 
    564                 new_subject = req.args.get('subject') 
    565                 new_body = req.args.get('body') 
    566  
    567                 # Get time when topic was visited from session. 
    568                 visited = eval(req.session.get('visited-topics') or '{}') 
    569                 if visited.has_key(topic['id']): 
    570                     visit_time = int(visited[topic['id']]) 
    571                 else: 
    572                     visit_time = 0 
    573  
    574                 # Update this topic visit time and save to session. 
    575                 visited[topic['id']] = int(time.time()) 
    576                 req.session['visited-topics'] = unicode(visited) 
    577  
    578                 # Mark new topic. 
    579                 if int(topic['time']) > visit_time: 
    580                     topic['new'] = True 
    581  
    582                 # Prepare display of topic 
    583                 if new_author: 
    584                     req.hdf['discussion.author'] = wiki_to_oneliner( 
    585                       new_author, self.env) 
    586                 if new_subject: 
    587                     req.hdf['discussion.subject'] = wiki_to_oneliner( 
    588                       new_subject, self.env) 
    589                 if new_body: 
    590                     req.hdf['discussion.body'] = wiki_to_html(new_body, 
    591                       self.env, req) 
    592  
    593                 # Prepare display of messages 
    594                 display = req.session.get('message-list-display') 
    595                 req.hdf['discussion.display'] = display 
    596                 if display == 'flat-asc': 
    597                     req.hdf['discussion.messages'] = self.get_flat_messages( 
    598                       req, cursor, topic['id'], visit_time) 
    599                 elif display == 'flat-desc': 
    600                     req.hdf['discussion.messages'] = self.get_flat_messages( 
    601                       req, cursor, topic['id'], visit_time, 'ORDER BY time DESC') 
    602                 else: 
    603                     req.hdf['discussion.messages'] = self.get_messages(req, 
    604                       cursor, topic['id'], visit_time) 
     560                self._prepare_message_list(req, cursor, topic) 
     561 
     562            elif mode == 'wiki-message-list': 
     563                if topic: 
     564                    self._prepare_message_list(req, cursor, topic) 
    605565 
    606566            elif mode == 'message-quote': 
     
    643603 
    644604                # Prepare form values. 
     605                req.args['body'] = message['body'] 
    645606                req.hdf['args.body'] = message['body'] 
    646607 
     
    674635                # Set message list display mode to session 
    675636                req.session['message-list-display'] = display 
     637 
     638    def _prepare_message_list(self, req, cursor, topic): 
     639        # Get form values. 
     640        new_author = req.args.get('author') 
     641        new_subject = req.args.get('subject') 
     642        new_body = req.args.get('body') 
     643 
     644        # Get time when topic was visited from session. 
     645        visited = eval(req.session.get('visited-topics') or '{}') 
     646        if visited.has_key(topic['id']): 
     647            visit_time = int(visited[topic['id']]) 
     648        else: 
     649            visit_time = 0 
     650 
     651        # Update this topic visit time and save to session. 
     652        visited[topic['id']] = int(time.time()) 
     653        req.session['visited-topics'] = unicode(visited) 
     654 
     655        # Mark new topic. 
     656        if int(topic['time']) > visit_time: 
     657            topic['new'] = True 
     658 
     659        # Prepare display of topic 
     660        if new_author: 
     661            req.hdf['discussion.author'] = wiki_to_oneliner(new_author, 
     662              self.env) 
     663        if new_subject: 
     664            req.hdf['discussion.subject'] = wiki_to_oneliner(new_subject, 
     665              self.env) 
     666        if new_body: 
     667            req.hdf['discussion.body'] = wiki_to_html(new_body, self.env, req) 
     668 
     669        # Prepare display of messages 
     670        display = req.session.get('message-list-display') 
     671        req.hdf['discussion.display'] = display 
     672        if display == 'flat-asc': 
     673            req.hdf['discussion.messages'] = self.get_flat_messages(req, cursor, 
     674              topic['id'], visit_time) 
     675        elif display == 'flat-desc': 
     676            req.hdf['discussion.messages'] = self.get_flat_messages(req, cursor, 
     677              topic['id'], visit_time, 'ORDER BY time DESC') 
     678        else: 
     679            req.hdf['discussion.messages'] = self.get_messages(req, cursor, 
     680             topic['id'], visit_time) 
    676681 
    677682    # Get one item functions 
  • discussionplugin/0.10/tracdiscussion/templates/admin-forum-list.cs

    r1131 r2014  
    1 <?cs include "my_macros.cs" ?> 
     1<?cs include "discussion-macros.cs" ?> 
    22 
    33<h2>Forums</h2> 
     
    123123        <tr> 
    124124          <th class="sel">&nbsp;</th> 
    125           <?cs call:my_sortable_th(discussion.order, discussion.desc, 'id', 'ID', discussion.href + '/forum' + '?') ?> 
    126           <?cs call:my_sortable_th(discussion.order, discussion.desc, 'name', 'Name', discussion.href + '/forum' + '?') ?> 
    127           <?cs call:my_sortable_th(discussion.order, discussion.desc, 'subject', 'Subject', discussion.href + '/forum' + '?') ?> 
    128           <?cs call:my_sortable_th(discussion.order, discussion.desc, 'description', 'Description', discussion.href + '/forum' + '?') ?> 
    129           <?cs call:my_sortable_th(discussion.order, discussion.desc, 'moderators', 'Moderators', discussion.href + '/forum' + '?') ?> 
     125          <?cs call:discussion_sortable_th(discussion.order, discussion.desc, 'id', 'ID', discussion.href + '/forum' + '?') ?> 
     126          <?cs call:discussion_sortable_th(discussion.order, discussion.desc, 'name', 'Name', discussion.href + '/forum' + '?') ?> 
     127          <?cs call:discussion_sortable_th(discussion.order, discussion.desc, 'subject', 'Subject', discussion.href + '/forum' + '?') ?> 
     128          <?cs call:discussion_sortable_th(discussion.order, discussion.desc, 'description', 'Description', discussion.href + '/forum' + '?') ?> 
     129          <?cs call:discussion_sortable_th(discussion.order, discussion.desc, 'moderators', 'Moderators', discussion.href + '/forum' + '?') ?> 
    130130          <?cs if:discussion.groups.1.id ?> 
    131             <?cs call:my_sortable_th(discussion.order, discussion.desc, 'forum_group', 'Group', discussion.href + '/forum' + '?') ?> 
     131            <?cs call:discussion_sortable_th(discussion.order, discussion.desc, 'forum_group', 'Group', discussion.href + '/forum' + '?') ?> 
    132132          <?cs /if ?> 
    133133        </tr> 
  • discussionplugin/0.10/tracdiscussion/templates/admin-group-list.cs

    r1538 r2014  
    1 <?cs include "my_macros.cs" ?> 
     1<?cs include "discussion-macros.cs" ?> 
    22 
    33<h2>Forum Groups</h2> 
     
    5353        <tr> 
    5454          <th class="sel">&nbsp;</th> 
    55           <?cs call:my_sortable_th(discussion.order, discussion.desc, 'id', 'ID', discussion.href + '/group' + '?') ?> 
    56           <?cs call:my_sortable_th(discussion.order, discussion.desc, 'name', 'Name', discussion.href + '/group' + '?') ?> 
    57           <?cs call:my_sortable_th(discussion.order, discussion.desc, 'description', 'Description', discussion.href + '/group' + '?') ?> 
     55          <?cs call:discussion_sortable_th(discussion.order, discussion.desc, 'id', 'ID', discussion.href + '/group' + '?') ?> 
     56          <?cs call:discussion_sortable_th(discussion.order, discussion.desc, 'name', 'Name', discussion.href + '/group' + '?') ?> 
     57          <?cs call:discussion_sortable_th(discussion.order, discussion.desc, 'description', 'Description', discussion.href + '/group' + '?') ?> 
    5858        </tr> 
    5959      </thead> 
  • discussionplugin/0.10/tracdiscussion/templates/discussion-macros.cs

    r1131 r2014  
    1 <?cs def:my_sortable_th(order, desc, class, title, href) ?> 
     1<?cs def:discussion_sortable_th(order, desc, class, title, href) ?> 
    22  <th class="<?cs var:class ?><?cs if:order == class ?> <?cs if:desc ?>desc<?cs else ?>asc<?cs /if ?><?cs /if ?>"> 
    33    <a title="Sort by <?cs var:class ?><?cs if:order == class && !desc ?> (descending)<?cs /if ?>" href="<?cs var:href ?>&amp;order=<?cs var:class ?><?cs if:order == class && !desc ?>&amp;desc=1<?cs /if ?>"> 
     
    66  </th> 
    77<?cs /def ?> 
     8 
     9<?cs def:display_preview() ?> 
     10  <li class="preview"> 
     11    <a name="preview"></a> 
     12    <div class="id"> 
     13        Message #?? 
     14    </div> 
     15    <div class="body"> 
     16      <?cs var:discussion.body ?> 
     17    </div> 
     18    <div class="footer"> 
     19      <div class="author"> 
     20        <?cs var:discussion.author ?> 
     21      </div> 
     22      <div class="time"> 
     23        <?cs var:discussion.time ?> 
     24      </div> 
     25    </div> 
     26  </li> 
     27<?cs /def ?> 
     28 
     29<?cs def:display_reply_form() ?> 
     30  <li class="reply"> 
     31    <fieldset> 
     32      <a name="reply"></a> 
     33      <legend> 
     34         Reply: 
     35      </legend> 
     36      <form method="post" action="<?cs var:discussion.href ?>#preview"> 
     37        <div class="field"> 
     38          <label for="author">Author:</label><br/> 
     39          <?cs if:discussion.authname == 'anonymous' ?> 
     40            <input type="text" id="author" name="author" value="<?cs alt:args.author ?>anonymous<?cs /alt ?>"/><br/> 
     41          <?cs else ?> 
     42            <input type="text" id="author" name="author" value="<?cs var:discussion.authname ?>" readonly="true"/><br/> 
     43          <?cs /if ?> 
     44        </div> 
     45        <div class="field"> 
     46          <label for="body">Body:</label><br/> 
     47          <textarea id="body" name="body" class="wikitext" rows="10" cols="78"><?cs alt:args.body ?>Enter your message here...<?cs /alt ?></textarea> 
     48        </div> 
     49        <div class="buttons"> 
     50          <input type="submit" name="preview" value="Preview"/> 
     51          <input type="submit" name="submit" value="Reply"/> 
     52          <input type="button" name="cancel" value="Cancel" onclick="location.replace('<?cs var:discussion.href ?>')"/> 
     53        </div> 
     54        <?cs if:args.message ?> 
     55          <input type="hidden" name="message" value="<?cs var:args.message ?>"/> 
     56        <?cs /if ?> 
     57        <input type="hidden" name="discussion_action" value="post-add"/> 
     58      </form> 
     59    </fieldset> 
     60  </li> 
     61<?cs /def ?> 
     62 
     63<?cs def:display_edit_form() ?> 
     64  <fieldset> 
     65    <a name="reply"></a> 
     66    <legend> 
     67      Edit: 
     68    </legend> 
     69    <form method="post" action="<?cs var:discussion.href ?>#preview"> 
     70      <?cs if:!args.message ?> 
     71        <div class="field"> 
     72          <label for="subject">Subject:</label><br/> 
     73          <input type="text" id="subject" name="subject" value="<?cs var:args.subject ?>"/><br/> 
     74        </div> 
     75      <?cs /if ?> 
     76      <div class="field"> 
     77        <label for="body">Body:</label><br/> 
     78        <textarea id="body" name="body" class="wikitext" rows="10" cols="78"><?cs var:args.body ?></textarea> 
     79      </div> 
     80      <div class="buttons"> 
     81        <input type="submit" name="preview" value="Preview"/> 
     82        <input type="submit" name="submit" value="Submit changes"/> 
     83        <input type="button" name="cancel" value="Cancel" onclick="location.replace('<?cs var:discussion.href ?>')"/> 
     84      </div> 
     85      <?cs if:args.message ?> 
     86        <input type="hidden" name="message" value="<?cs var:args.message ?>"/> 
     87      <?cs /if ?> 
     88      <input type="hidden" name="discussion_action" value="post-edit"/> 
     89    </form> 
     90  </fieldset> 
     91<?cs /def ?> 
     92 
     93<?cs def:display_set_display() ?> 
     94  <div class="set-display"> 
     95    <a href="<?cs var:discussion.href ?>?discussion_action=set-display;display=tree">Tree View</a> 
     96    <a href="<?cs var:discussion.href ?>?discussion_action=set-display;display=flat-desc">Flat View (newer first)</a> 
     97    <a href="<?cs var:discussion.href ?>?discussion_action=set-display;display=flat-asc">Flat View (older first)</a> 
     98  </div> 
     99<?cs /def ?> 
     100 
     101<?cs def:display_replies(messages) ?> 
     102  <?cs each:message = messages ?> 
     103    <li <?cs if:message.new ?>class="new"<?cs /if ?>> 
     104      <a name="<?cs var:message.id ?>"></a> 
     105      <div class="id"> 
     106        Message #<?cs var:message.id ?> 
     107      </div> 
     108      <div class="body"> 
     109        <?cs if:(args.message == message.id) && args.preview ?> 
     110          <?cs var:discussion.body ?> 
     111        <?cs else?> 
     112          <?cs var:message.body ?> 
     113        <?cs /if ?> 
     114      </div> 
     115      <div class="controls"> 
     116        <?cs if:trac.acl.DISCUSSION_APPEND ?> 
     117          <a href="<?cs var:discussion.href ?>?discussion_action=add;message=<?cs var:message.id ?>#reply">Reply</a> 
     118          <a href="<?cs var:discussion.href ?>?discussion_action=quote;message=<?cs var:message.id ?>#reply">Quote</a> 
     119          <?cs if:discussion.is_moderator || ((message.author == discussion.authname) && (discussion.authname != 'anonymous')) ?> 
     120            <a href="<?cs var:discussion.href ?>?discussion_action=edit;message=<?cs var:message.id ?>#reply">Edit</a> 
     121          <?cs /if ?> 
     122        <?cs /if ?> 
     123        <?cs if:trac.acl.DISCUSSION_MODERATE && discussion.is_moderator ?> 
     124          <a href="<?cs var:discussion.href ?>?discussion_action=delete;message=<?cs var:message.id ?>" onclick="return confirm('Do you realy want to delete this reply and all its descendants?')">Delete</a> 
     125        <?cs /if ?> 
     126      </div> 
     127      <div class="footer"> 
     128        <div class="author"> 
     129          <?cs var:message.author ?> 
     130        </div> 
     131        <div class="time"> 
     132          <?cs var:message.time ?> 
     133        </div> 
     134      </div> 
     135      <?cs if:(args.message == message.id) && !args.submit && ((args.discussion_action == 'edit') || (args.discussion_action == 'post-edit')) ?> 
     136        <?cs call:display_edit_form() ?> 
     137      <?cs /if ?> 
     138    </li> 
     139    <?cs if:message.replies.0.id || args.discussion_action && ((args.discussion_action == 'add') || (args.discussion_action == 'quote') || (args.discussion_action == 'post-add')) ?> 
     140      <ul class="reply"> 
     141        <?cs if:message.replies.0.id ?> 
     142          <?cs call:display_replies(message.replies) ?> 
     143        <?cs /if ?> 
     144        <?cs if:(args.message == message.id) && !args.submit && (args.discussion_action && (args.discussion_action == 'add') || (args.discussion_action == 'quote') || (args.discussion_action == 'post-add')) ?> 
     145          <?cs if:args.preview ?> 
     146            <?cs call:display_preview() ?> 
     147          <?cs /if ?> 
     148          <?cs call:display_reply_form() ?> 
     149        <?cs /if ?> 
     150      </ul> 
     151    <?cs /if ?> 
     152  <?cs /each ?> 
     153<?cs /def ?> 
     154 
     155<?cs def:display_discussion(discussion) ?> 
     156  <a name="-1"></a> 
     157  <div class="topic <?cs if:discussion.topic.new ?>new<?cs /if ?>"> 
     158    <div class="header"> 
     159      <?cs if:!discussion.message.id && (args.discussion_action == 'edit' || args.discussion_action == 'post-edit') ?> 
     160        <div class="subject"> 
     161          <?cs var:discussion.subject ?> 
     162        </div> 
     163        <div class="body"> 
     164          <?cs var:discussion.body ?> 
     165        </div> 
     166      <?cs else ?> 
     167        <div class="subject"> 
     168          <?cs var:discussion.topic.subject ?> 
     169        </div> 
     170        <div class="body"> 
     171          <?cs var:discussion.topic.body ?> 
     172        </div> 
     173      <?cs /if ?> 
     174    </div> 
     175    <div class="controls"> 
     176      <?cs if:trac.acl.DISCUSSION_APPEND ?> 
     177        <a href="<?cs var:discussion.href ?>?discussion_action=add;#reply">Reply</a> 
     178        <a href="<?cs var:discussion.href ?>?discussion_action=quote;#reply">Quote</a> 
     179        <?cs if:discussion.is_moderator || ((discussion.topic.author == discussion.authname) && (discussion.authname != 'anonymous'))?> 
     180          <a href="<?cs var:discussion.href ?>?discussion_action=edit;#reply">Edit</a> 
     181        <?cs /if ?> 
     182      <?cs /if ?> 
     183    </div> 
     184    <div class="footer"> 
     185      <div class="author"> 
     186        <?cs var:discussion.topic.author ?> 
     187      </div> 
     188      <div class="time"> 
     189        <?cs var:discussion.topic.time ?> 
     190      </div> 
     191    </div> 
     192    <?cs if:!args.message && !args.submit && ((args.discussion_action == 'edit') || (args.discussion_action == 'post-edit')) ?> 
     193      <?cs call:display_edit_form() ?> 
     194    <?cs /if ?> 
     195  </div> 
     196  <?cs if:discussion.messages.0.id || args.discussion_action && ((args.discussion_action == 'add') || (args.discussion_action == 'quote') || (args.discussion_action == 'post-add')) ?> 
     197    <div class="replies <?cs if:discussion.topic.new ?>new<?cs /if ?>"> 
     198      <?cs call:display_set_display() ?> 
     199      <ul class="reply"> 
     200        <?cs if:discussion.messages.0.id ?> 
     201          <?cs call:display_replies(discussion.messages) ?> 
     202        <?cs /if ?> 
     203        <?cs if:!args.message && !args.submit && args.discussion_action && ((args.discussion_action == 'add') || (args.discussion_action == 'quote') || (args.discussion_action == 'post-add')) ?> 
     204          <?cs if:args.preview ?> 
     205            <?cs call:display_preview() ?> 
     206          <?cs /if ?> 
     207          <?cs call:display_reply_form() ?> 
     208        <?cs /if ?> 
     209      </ul> 
     210      <?cs call:display_set_display() ?> 
     211    </div> 
     212  <?cs /if ?> 
     213<?cs /def ?> 
  • discussionplugin/0.10/tracdiscussion/templates/forum-list.cs

    r1131 r2014  
    11<?cs include "macros.cs" ?> 
    2 <?cs include "my_macros.cs" ?> 
     2<?cs include "discussion-macros.cs" ?> 
    33 
    44<?cs def:display_group(group, forums) ?> 
     
    1414      <?cs /if ?> 
    1515      <tr> 
    16         <?cs call:my_sortable_th(discussion.order, discussion.desc, 'id', 'ID', discussion.href + '?') ?> 
    17         <?cs call:my_sortable_th(discussion.order, discussion.desc, 'subject', 'Forum', discussion.href + '?') ?> 
    18         <?cs call:my_sortable_th(discussion.order, discussion.desc, 'moderators', 'Moderators', discussion.href + '?') ?> 
    19         <?cs call:my_sortable_th(discussion.order, discussion.desc, 'lasttopic', 'Last Topic', discussion.href + '?') ?> 
    20         <?cs call:my_sortable_th(discussion.order, discussion.desc, 'lastreply', 'Last Reply', discussion.href + '?') ?> 
    21         <?cs call:my_sortable_th(discussion.order, discussion.desc, 'time', 'Founded', discussion.href + '?') ?> 
    22         <?cs call:my_sortable_th(discussion.order, discussion.desc, 'topics', 'Topics', discussion.href + '?') ?> 
    23         <?cs call:my_sortable_th(discussion.order, discussion.desc, 'replies', 'Replies', discussion.href + '?') ?> 
     16        <?cs call:discussion_sortable_th(discussion.order, discussion.desc, 'id', 'ID', discussion.href + '?') ?> 
     17        <?cs call:discussion_sortable_th(discussion.order, discussion.desc, 'subject', 'Forum', discussion.href + '?') ?> 
     18        <?cs call:discussion_sortable_th(discussion.order, discussion.desc, 'moderators', 'Moderators', discussion.href + '?') ?> 
     19        <?cs call:discussion_sortable_th(discussion.order, discussion.desc, 'lasttopic', 'Last Topic', discussion.href + '?') ?> 
     20        <?cs call:discussion_sortable_th(discussion.order, discussion.desc, 'lastreply', 'Last Reply', discussion.href + '?') ?> 
     21        <?cs call:discussion_sortable_th(discussion.order, discussion.desc, 'time', 'Founded', discussion.href + '?') ?> 
     22        <?cs call:discussion_sortable_th(discussion.order, discussion.desc, 'topics', 'Topics', discussion.href + '?') ?> 
     23        <?cs call:discussion_sortable_th(discussion.order, discussion.desc, 'replies', 'Replies', discussion.href + '?') ?> 
    2424      </tr> 
    2525    </thead> 
  • discussionplugin/0.10/tracdiscussion/templates/message-list.cs

    r1537 r2014  
    1 <?cs def:display_preview() ?> 
    2   <li class="preview"> 
    3     <a name="preview"></a> 
    4     <div class="id"> 
    5         Message #?? 
    6     </div> 
    7     <div class="body"> 
    8       <?cs var:discussion.body ?> 
    9     </div> 
    10     <div class="footer"> 
    11       <div class="author"> 
    12         <?cs var:discussion.author ?> 
    13       </div> 
    14       <div class="time"> 
    15         <?cs var:discussion.time ?> 
    16       </div> 
    17     </div> 
    18   </li> 
    19 <?cs /def ?> 
     1<?cs include:"discussion-macros.cs"?> 
    202 
    21 <?cs def:display_reply_form() ?> 
    22   <li class="reply"> 
    23     <fieldset> 
    24       <a name="reply"></a> 
    25       <legend> 
    26          Reply: 
    27       </legend> 
    28       <form method="post" action="<?cs var:discussion.href ?>#preview"> 
    29         <div class="field"> 
    30           <label for="author">Author:</label><br/> 
    31           <?cs if:args.author ?> 
    32             <input type="text" id="author" name="author" value="<?cs var:args.author ?>"/><br/> 
    33           <?cs else ?> 
    34             <input type="text" id="author" name="author" value="<?cs var:discussion.authname ?>"/><br/> 
    35           <?cs /if ?> 
    36         </div> 
    37         <div class="field"> 
    38           <label for="body">Body:</label><br/> 
    39           <textarea id="body" name="body" class="wikitext" rows="10" cols="78"><?cs alt:args.body ?>Enter your message here...<?cs /alt ?></textarea> 
    40         </div> 
    41         <div class="buttons"> 
    42           <input type="submit" name="preview" value="Preview"/> 
    43           <input type="submit" name="submit" value="Reply"/> 
    44           <input type="button" name="cancel" value="Cancel" onclick="location.href = '<?cs var:discussion.href ?>#<?cs var:args.message ?>'"/> 
    45         </div> 
    46         <?cs if:args.message ?> 
    47           <input type="hidden" name="message" value="<?cs var:args.message ?>"/> 
    48         <?cs /if ?> 
    49         <input type="hidden" name="redirect" value="1"/> 
    50         <input type="hidden" name="discussion_action" value="post-add"/> 
    51       </form> 
    52     </fieldset> 
    53   </li> 
    54 <?cs /def ?> 
     3<?cs linclude "discussion-header.cs" ?> 
    554 
    56 <?cs def:display_edit_form() ?> 
    57   <fieldset> 
    58     <a name="reply"></a> 
    59     <legend> 
    60       Edit: 
    61     </legend> 
    62     <form method="post" action="<?cs var:discussion.href ?>#preview"> 
    63       <?cs if:!args.message ?> 
    64         <div class="field"> 
    65           <label for="subject">Subject:</label><br/> 
    66           <input type="text" id="subject" name="subject" value="<?cs var:args.subject ?>"/><br/> 
    67         </div> 
    68       <?cs /if ?> 
    69       <div class="field"> 
    70         <label for="body">Body:</label><br/> 
    71         <textarea id="body" name="body" class="wikitext" rows="10" cols="78"><?cs var:args.body ?></textarea> 
    72       </div> 
    73       <div class="buttons"> 
    74         <input type="submit" name="preview" value="Preview"/> 
    75         <input type="submit" name="submit" value="Submit changes"/> 
    76         <input type="button" name="cancel" value="Cancel" onclick="location.href = '<?cs var:discussion.href ?>#<?cs var:args.message ?>'"/> 
    77       </div> 
    78       <?cs if:args.message ?> 
    79         <input type="hidden" name="message" value="<?cs var:args.message ?>"/> 
    80       <?cs /if ?> 
    81       <input type="hidden" name="redirect" value="1"/> 
    82       <input type="hidden" name="discussion_action" value="post-edit"/> 
    83     </form> 
    84   </fieldset> 
    85 <?cs /def ?> 
    86  
    87 <?cs def:display_set_display() ?> 
    88   <div class="set-display"> 
    89     <a href="<?cs var:discussion.href ?>?discussion_action=set-display;display=tree">Tree View</a> 
    90     <a href="<?cs var:discussion.href ?>?discussion_action=set-display;display=flat-desc">Flat View (newer first)</a> 
    91     <a href="<?cs var:discussion.href ?>?discussion_action=set-display;display=flat-asc">Flat View (older first)</a> 
    92   </div> 
    93 <?cs /def ?> 
    94  
    95 <?cs def:display_topic(messages) ?> 
    96   <?cs each:message = messages ?> 
    97     <li <?cs if:message.new ?>class="new"<?cs /if ?>> 
    98       <a name="<?cs var:message.id ?>"></a> 
    99       <div class="id"> 
    100         Message #<?cs var:message.id ?> 
    101       </div> 
    102       <div class="body"> 
    103         <?cs if:(args.message == message.id) && args.preview ?> 
    104           <?cs var:discussion.body ?> 
    105         <?cs else?> 
    106           <?cs var:message.body ?> 
    107         <?cs /if ?> 
    108       </div> 
    109       <div class="controls"> 
    110         <?cs if:trac.acl.DISCUSSION_APPEND ?> 
    111           <a href="<?cs var:discussion.href ?>?discussion_action=add;message=<?cs var:message.id ?>#reply">Reply</a> 
    112           <a href="<?cs var:discussion.href ?>?discussion_action=quote;message=<?cs var:message.id ?>#reply">Quote</a> 
    113           <?cs if:discussion.is_moderator || ((message.author == discussion.authname) && (discussion.authname != 'anonymous')) ?> 
    114             <a href="<?cs var:discussion.href ?>?discussion_action=edit;message=<?cs var:message.id ?>#reply">Edit</a> 
    115           <?cs /if ?> 
    116         <?cs /if ?> 
    117         <?cs if:trac.acl.DISCUSSION_MODERATE && discussion.is_moderator ?> 
    118           <a href="<?cs var:discussion.href ?>?discussion_action=delete;message=<?cs var:message.id ?>" onclick="return confirm('Do you realy want to delete this reply and all its descendants?')"/>Delete</a> 
    119         <?cs /if ?> 
    120       </div> 
    121       <div class="footer"> 
    122         <div class="author"> 
    123           <?cs var:message.author ?> 
    124         </div> 
    125         <div class="time"> 
    126           <?cs var:message.time ?> 
    127         </div> 
    128       </div> 
    129       <?cs if:(args.message == message.id) && !args.submit && ((args.discussion_action == 'edit') || (args.discussion_action == 'post-edit')) ?> 
    130         <?cs call:display_edit_form() ?> 
    131       <?cs /if ?> 
    132     </li> 
    133     <?cs if:message.replies.0.id || args.discussion_action && ((args.discussion_action == 'add') || (args.discussion_action == 'quote') || (args.discussion_action == 'post-add')) ?> 
    134       <ul class="reply"> 
    135         <?cs if:message.replies.0.id ?> 
    136           <?cs call:display_topic(message.replies) ?> 
    137         <?cs /if ?> 
    138         <?cs if:(args.message == message.id) && !args.submit && (args.discussion_action && (args.discussion_action == 'add') || (args.discussion_action == 'quote') || (args.discussion_action == 'post-add')) ?> 
    139           <?cs if:args.preview ?> 
    140             <?cs call:display_preview() ?> 
    141           <?cs /if ?> 
    142           <?cs call:display_reply_form() ?> 
    143         <?cs /if ?> 
    144       </ul> 
    145     <?cs /if ?> 
    146   <?cs /each ?> 
    147 <?cs /def ?> 
    148  
    149 <?cs if:discussion.no_navigation ?> 
    150   <div id="message-list" class="message-list"> 
    151   <h2>Discussion</h2> 
    152 <?cs else ?> 
    153   <?cs linclude "discussion-header.cs" ?> 
    154   <h1>Forum #<?cs var:discussion.forum.id ?> - Topic #<?cs var:discussion.topic.id ?> - Message List</h1> 
    155 <?cs /if?> 
    156  
    157 <?cs if:discussion.component != 'wiki' ?> 
    158   <?cs set:discussion.href = discussion.href + '/' + discussion.forum.id + '/' + discussion.topic.id ?> 
    159 <?cs /if ?> 
    160  
    161 <?cs if:trac.acl.DISCUSSION_VIEW ?> 
    162   <?cs if:!discussion.no_display && discussion.topic.id ?> 
    163     <a name="-1"></a> 
    164     <div class="topic <?cs if:discussion.topic.new ?>new<?cs /if ?>"> 
    165       <div class="header"> 
    166         <div class="subject"> 
    167           <?cs if:!args.message && args.preview ?> 
    168             <?cs var:discussion.subject ?> 
    169           <?cs else?> 
    170             <?cs var:discussion.topic.subject ?> 
    171           <?cs /if ?> 
    172         </div> 
    173       </div> 
    174       <div class="body"> 
    175         <?cs if:!args.message && args.preview ?> 
    176           <?cs var:discussion.body ?> 
    177         <?cs else?> 
    178           <?cs var:discussion.topic.body ?> 
    179         <?cs /if ?> 
    180       </div> 
    181       <div class="controls"> 
    182         <?cs if:trac.acl.DISCUSSION_APPEND ?> 
    183           <a href="<?cs var:discussion.href ?>?discussion_action=add;#reply">Reply</a> 
    184           <a href="<?cs var:discussion.href ?>?discussion_action=quote;#reply">Quote</a> 
    185           <?cs if:discussion.is_moderator || ((discussion.topic.author == discussion.authname) && (discussion.authname != 'anonymous'))?> 
    186             <a href="<?cs var:discussion.href ?>?discussion_action=edit;#reply">Edit</a> 
    187           <?cs /if ?> 
    188         <?cs /if ?> 
    189       </div> 
    190       <div class="footer"> 
    191         <div class="author"> 
    192           <?cs var:discussion.topic.author ?> 
    193         </div> 
    194         <div class="time"> 
    195           <?cs var:discussion.topic.time ?> 
    196         </div> 
    197       </div> 
    198       <?cs if:!args.message && !args.submit && ((args.discussion_action == 'edit') || (args.discussion_action == 'post-edit')) ?> 
    199         <?cs call:display_edit_form() ?> 
    200       <?cs /if ?> 
    201     </div> 
    202     <?cs if:discussion.messages.0.id || args.discussion_action && ((args.discussion_action == 'add') || (args.discussion_action == 'quote') || (args.discussion_action == 'post-add')) ?> 
    203       <div class="replies <?cs if:discussion.topic.new ?>new<?cs /if ?>"> 
    204         <?cs call:display_set_display() ?> 
    205         <ul class="reply"> 
    206           <?cs if:discussion.messages.0.id ?> 
    207             <?cs call:display_topic(discussion.messages) ?> 
    208           <?cs /if ?> 
    209           <?cs if:!args.message && !args.submit && args.discussion_action && ((args.discussion_action == 'add') || (args.discussion_action == 'quote') || (args.discussion_action == 'post-add')) ?> 
    210             <?cs if:args.preview ?> 
    211               <?cs call:display_preview() ?> 
    212             <?cs /if ?> 
    213             <?cs call:display_reply_form() ?> 
    214           <?cs /if ?> 
    215         </ul> 
    216         <?cs call:display_set_display() ?> 
    217       </div> 
    218     <?cs /if ?> 
    219   <?cs else?> 
    220     <span>No discussion for this page created.</span> 
    221   <?cs /if ?> 
    222 <?cs else ?> 
    223   <span>You have no rights to see this discussion.</span> 
    224 <?cs /if ?> 
    225  
     5<h1>Forum #<?cs var:discussion.forum.id ?> - Topic #<?cs var:discussion.topic.id ?> - Message List</h1> 
     6<?cs set:discussion.href = discussion.href + '/' + discussion.forum.id + '/' + discussion.topic.id ?> 
     7<?cs call:display_discussion(discussion) ?> 
    2268<?cs if:trac.acl.DISCUSSION_MODERATE && discussion.is_moderator ?> 
    2279  <div class="buttons"> 
    22810    <form method="post" action="<?cs var:discussion.href ?>"> 
    229       <input type="submit" name="deletetopic" value="Delete Topic" onclick="return confirm('Do you realy want to delete this topic?')"/> 
    230       <input type="hidden" name="discussion_action" value="delete"/> 
     11      <div> 
     12        <input type="submit" name="deletetopic" value="Delete Topic" onclick="return confirm('Do you realy want to delete this topic?')"/> 
     13        <input type="hidden" name="discussion_action" value="delete"/> 
     14      </div> 
    23115    </form> 
    232     <?cs if:!discussion.no_navigation ?
    233       <form method="post" action="<?cs var:discussion.href ?>"
     16    <form method="post" action="<?cs var:discussion.href ?>"
     17      <div
    23418        <input type="submit" name="movetopic" value="Move Topic"/> 
    23519        <input type="hidden" name="discussion_action" value="move"/> 
    236       </form
    237     <?cs /if ?
     20      </div
     21    </form
    23822  </div> 
    23923<?cs /if ?> 
    24024 
    241 <?cs if:discussion.no_navigation ?> 
    242   </div> 
    243 <?cs else ?> 
    244   <?cs linclude "discussion-footer.cs" ?> 
    245 <?cs /if?> 
    246  
    247  
     25<?cs linclude "discussion-footer.cs" ?> 
  • discussionplugin/0.10/tracdiscussion/templates/topic-add.cs

    r1072 r2014  
    3333    <div class="field"> 
    3434      <label for="author">Author:</label><br/> 
    35       <?cs if:args.author ?> 
    36         <input type="text" name="author" value="<?cs var:args.author ?>"/><br/> 
     35      <?cs if:discussion.authname == 'anonymous' ?> 
     36        <input type="text" name="author" value="<?cs alt:args.author ?>anonymous<?cs /alt ?>"/><br/> 
    3737      <?cs else ?> 
    38         <input type="text" name="author" value="<?cs var:discussion.authname ?>"/><br/> 
     38        <input type="text" name="author" value="<?cs var:discussion.authname ?>" readonly="true"/><br/> 
    3939      <?cs /if ?> 
    4040    </div> 
  • discussionplugin/0.10/tracdiscussion/templates/topic-list.cs

    r1131 r2014  
    11<?cs include "macros.cs" ?> 
    2 <?cs include "my_macros.cs" ?> 
     2<?cs include "discussion-macros.cs" ?> 
    33 
    44<?cs include "discussion-header.cs" ?> 
     
    1515    <thead> 
    1616      <tr> 
    17         <?cs call:my_sortable_th(discussion.order, discussion.desc, 'id', 'ID', discussion.href + '/' + discussion.forum.id + '?') ?> 
    18         <?cs call:my_sortable_th(discussion.order, discussion.desc, 'subject', 'Subject', discussion.href + '/' + discussion.forum.id + '?') ?> 
    19         <?cs call:my_sortable_th(discussion.order, discussion.desc, 'author', 'Author', discussion.href + '/' + discussion.forum.id + '?') ?> 
    20         <?cs call:my_sortable_th(discussion.order, discussion.desc, 'lastreply', 'Last Repl