Changeset 909
- Timestamp:
- 06/18/06 10:43:50 (3 years ago)
- Files:
-
- discussionplugin/0.9/setup.py (modified) (1 diff)
- discussionplugin/0.9/tracdiscussion/admin.py (modified) (1 diff)
- discussionplugin/0.9/tracdiscussion/api.py (added)
- discussionplugin/0.9/tracdiscussion/core.py (modified) (17 diffs)
- discussionplugin/0.9/tracdiscussion/templates/forum-add.cs (modified) (2 diffs)
- discussionplugin/0.9/tracdiscussion/templates/forum-admin.cs (modified) (3 diffs)
- discussionplugin/0.9/tracdiscussion/templates/forum-list.cs (modified) (3 diffs)
- discussionplugin/0.9/tracdiscussion/templates/group-admin.cs (modified) (2 diffs)
- discussionplugin/0.9/tracdiscussion/templates/message-list.cs (modified) (9 diffs)
- discussionplugin/0.9/tracdiscussion/templates/topic-add.cs (modified) (3 diffs)
- discussionplugin/0.9/tracdiscussion/templates/topic-list.cs (modified) (2 diffs)
- discussionplugin/0.9/tracdiscussion/wiki.py (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
discussionplugin/0.9/setup.py
r836 r909 6 6 setup( 7 7 name = 'TracDiscussion', 8 version = '0. 2',8 version = '0.3', 9 9 packages = ['tracdiscussion', 'tracdiscussion.db'], 10 10 package_data = {'tracdiscussion' : ['templates/*.cs', 'htdocs/css/*.css']}, discussionplugin/0.9/tracdiscussion/admin.py
r854 r909 31 31 add_stylesheet(req, 'discussion/css/admin.css') 32 32 33 action = None34 35 33 # 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') 40 35 41 36 # Determine mode discussionplugin/0.9/tracdiscussion/core.py
r846 r909 1 from tracdiscussion.api import * 1 2 from trac.core import * 2 3 from trac.web.chrome import INavigationContributor, ITemplateProvider, add_stylesheet 3 4 from trac.web.main import IRequestHandler 4 from trac.wiki import wiki_to_html, wiki_to_oneliner5 5 from trac.perm import IPermissionRequestor, PermissionError 6 from trac.util import Markup, format_datetime , pretty_timedelta6 from trac.util import Markup, format_datetime 7 7 import re, os, time 8 8 … … 33 33 34 34 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'))) 40 39 41 40 # IRequestHandler methods … … 63 62 add_stylesheet(req, 'common/css/wiki.css') 64 63 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 69 66 70 67 # 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') 75 70 preview = req.args.has_key('preview'); 76 71 submit = req.args.has_key('submit'); … … 79 74 # Populate active forum 80 75 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')) 82 78 if not forum: 83 79 raise TracError('No such forum %s' % req.args.get('forum')) … … 89 85 # Populate active topic 90 86 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')) 92 89 if not topic: 93 90 raise TracError('No such topic %s' % req.args.get('topic')) … … 95 92 # Populate active topic 96 93 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')) 98 96 if not message: 99 97 raise TracError('No such message %s' % req.args.get('message')) … … 150 148 if mode == 'forum-list': 151 149 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) 153 155 elif mode == 'forum-add': 154 156 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) 156 161 elif mode == 'forum-post-add': 157 162 req.perm.assert_permission('DISCUSSION_MODIFY') … … 170 175 171 176 # Add new forum 172 self.add_forum(cursor, name, author, subject, description,177 add_forum(cursor, self.log, name, author, subject, description, 173 178 moderators, group) 174 179 175 180 # 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) 177 186 mode = 'forum-list' 178 187 elif mode == 'forum-delete': … … 180 189 181 190 # Delete current forum 182 self.delete_forum(cursor, forum['id'])191 delete_forum(cursor, self.log, forum['id']) 183 192 184 193 # 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) 186 199 mode = 'forum-list' 187 200 … … 189 202 elif mode == 'topic-list': 190 203 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']) 193 207 elif mode == 'topic-add': 194 208 req.perm.assert_permission('DISCUSSION_VIEW') … … 201 215 body = req.args.get('body') 202 216 217 req.hdf['discussion.href'] = self.env.href.discussion(forum['id']) 203 218 if author: 204 219 req.hdf['discussion.author'] = wiki_to_oneliner(author, self.env) 205 220 if body: 206 221 req.hdf['discussion.body'] = wiki_to_html(body, self.env, req) 222 req.hdf['discussion.time'] = format_datetime(time.time()) 207 223 elif mode == 'topic-post-add': 208 224 req.perm.assert_permission('DISCUSSION_VIEW') … … 214 230 215 231 # 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']) 219 236 mode = 'topic-list' 220 237 elif mode == 'topic-delete': … … 225 242 raise PermissionError('Forum moderate') 226 243 227 # Delete message228 self.delete_topic(cursor, forum['id'], topic['id'])244 # Delete topic 245 delete_topic(cursor, self.log, topic['id']) 229 246 230 247 # 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']) 233 251 mode = 'topic-list' 234 252 … … 245 263 246 264 # Display messages 265 req.hdf['discussion.href'] = self.env.href.discussion(forum['id'], 266 topic['id']) 247 267 if author: 248 268 req.hdf['discussion.author'] = wiki_to_oneliner(author, self.env) 249 269 if body: 250 270 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']) 253 274 elif mode == 'message-post-add': 254 275 req.perm.assert_permission('DISCUSSION_VIEW') … … 259 280 260 281 # 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) 263 284 264 285 # Display messages 286 req.hdf['discussion.href'] = self.env.href.discussion(forum['id'], 287 topic['id']) 265 288 if author: 266 289 req.hdf['discussion.author'] = wiki_to_oneliner(author, self.env) 267 290 if body: 268 291 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']) 271 294 mode = 'message-list' 272 295 elif mode == 'message-delete': … … 278 301 279 302 # Delete message 280 self.delete_message(cursor, forum['id'], topic['id'], reply)303 delete_message(cursor, self.log, reply) 281 304 282 305 # Display or messages 283 req.hdf['discussion. messages'] = self.get_messages(cursor, req,306 req.hdf['discussion.href'] = self.env.href.discussion(forum['id'], 284 307 topic['id']) 308 req.hdf['discussion.messages'] = get_messages(cursor, self.env, req, 309 self.log, topic['id']) 285 310 mode = 'message-list' 286 311 287 req.hdf[' discussion.groups'] = self.get_groups(cursor, req);312 req.hdf['trac.href.discussion'] = self.env.href.discussion() 288 313 req.hdf['discussion.forum'] = forum 289 314 req.hdf['discussion.topic'] = topic … … 293 318 db.commit() 294 319 return mode + '.cs', None 295 296 # Non-extension methods297 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 row308 return None309 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 row322 return None323 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 row335 return None336 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 groups349 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 forums378 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 topics400 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']] = row417 # Add top-level messages to the main list, in order of time418 if row['replyto'] == -1:419 messages.append(row)420 421 # Second pass, add replies422 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 users436 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 replies485 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 replies493 for reply in replies:494 self.delete_message(cursor, forum, topic, reply)495 496 # Delete message itself497 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 2 2 3 3 <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 ?>"> 5 5 <fieldset> 6 6 <legend> … … 47 47 <input type="submit" name="submit" value="Submit"/> 48 48 <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"/> 50 50 </div> 51 51 </fieldset> discussionplugin/0.9/tracdiscussion/templates/forum-admin.cs
r836 r909 4 4 var forum_list_form = document.getElementById('forum-list-form'); 5 5 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'; 7 7 forum_list_form.group.value = group_select.value; 8 8 forum_list_form.forum.value = forum; … … 44 44 <div class="buttons"> 45 45 <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"/> 47 47 </div> 48 48 </fieldset> … … 104 104 <div class="buttons"> 105 105 <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"/> 107 107 <input type="hidden" name="group" value=""/> 108 108 <input type="hidden" name="forum" value=""/> discussionplugin/0.9/tracdiscussion/templates/forum-list.cs
r846 r909 27 27 <tr class="<?cs if:name(forum) % #2 ?>even<?cs else ?>odd<?cs /if ?>"> 28 28 <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 ?>"> 30 30 <div class="subject"><?cs var:forum.subject ?></div> 31 31 <div class="description"><?cs var:forum.description ?></div> … … 33 33 </td> 34 34 <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 ?>"> 36 36 <div class="moderators"><?cs var:forum.moderators ?></div> 37 37 </a> 38 38 </td> 39 39 <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 ?>"> 41 41 <div class="lasttopic"><?cs var:forum.lasttopic ?></div> 42 42 </a> 43 43 </td> 44 44 <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 ?>"> 46 46 <div class="lastreply"><?cs var:forum.lastreply ?></div> 47 47 </a> 48 48 </td> 49 49 <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 ?>"> 51 51 <div class="founded"><?cs var:forum.time ?></div> 52 52 </a> 53 53 </td> 54 54 <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 ?>"> 56 56 <div class="topics"><?cs var:forum.topics ?></div> 57 57 </a> 58 58 </td> 59 59 <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 ?>"> 61 61 <div class="replies"><?cs var:forum.replies ?></div> 62 62 </a> … … 78 78 <?cs if:trac.acl.DISCUSSION_MODIFY ?> 79 79 <div class="buttons"> 80 <form method="post" action="<?cs var: trac.href.discussion?>">80 <form method="post" action="<?cs var:discussion.href ?>"> 81 81 <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"/> 83 83 </form> 84 84 </div> discussionplugin/0.9/tracdiscussion/templates/group-admin.cs
r836 r909 16 16 <div class="buttons"> 17 17 <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"/> 19 19 </div> 20 20 </fieldset> … … 49 49 <div class="buttons"> 50 50 <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"/> 52 52 </div> 53 53 </form> discussionplugin/0.9/tracdiscussion/templates/message-list.cs
r846 r909 1 <?cs include "discussion-header.cs" ?>2 3 1 <?cs def:display_preview() ?> 4 2 <li class="preview"> … … 7 5 <?cs var:discussion.body ?> 8 6 </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> 11 14 </div> 12 15 </li> … … 20 23 Reply: 21 24 </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"> 23 26 <div class="field"> 24 27 <label for="author">Author:</label><br/> … … 36 39 <input type="submit" name="preview" value="Preview"/> 37 40 <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 ?>'"/> 39 42 </div> 40 43 <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"/> 42 45 </form> 43 46 </fieldset> … … 53 56 </div> 54 57 <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> 56 59 <?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> 58 61 <?cs /if ?> 59 62 </div> … … 67 70 </div> 68 71 </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") ?> 70 73 <ul> 71 74 <?cs call:display_topic(message.replies) ?> … … 81 84 <?cs /def ?> 82 85 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 ?> 99 101 </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> 102 115 </div> 103 116 </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> 117 132 <?cs /if ?> 118 133 </div> … … 120 135 <?cs if:trac.acl.DISCUSSION_MODERATE && discussion.is_moderator ?> 121 136 <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 ?>"> 123 138 <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"/> 125 140 <input type="hidden" name="reply" value="-1"> 126 141 </form> … … 128 143 <?cs /if ?> 129 144 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 13 13 <?cs var:discussion.body ?> 14 14 </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> 17 22 </div> 18 23 </div> … … 21 26 <?cs /if ?> 22 27 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 ?>"> 24 29 <fieldset> 25 30 <legend> … … 46 51 <input type="submit" name="submit" value="Submit"/> 47 52 <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"/> 49 54 </div> 50 55 </fieldset> discussionplugin/0.9/tracdiscussion/templates/topic-list.cs
r804 r909 17 17 <tr class="<?cs if:name(topic) % #2 ?>even<?cs else ?>odd<?cs /if ?>"> 18 18 <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 ?>"> 20 20 <div class="subject"><?cs var:topic.subject ?></div> 21 21 </a> 22 22 </td> 23 23 <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 ?>"> 25 25 <div class="author" ><?cs var:topic.author ?></div> 26 26 </a> 27 27 </td> 28 28 <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 ?>"> 30 30 <div class="lastreply"><?cs var:topic.lastreply ?></div> 31 31 </a> 32 32 </td> 33 33 <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 ?>"> 35 35 <div class="founded" ><?cs var:topic.time ?></div> 36 36 </a> 37 37 </td> 38 38 <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 ?>"> 40 40 <div class="replies" ><?cs var:topic.replies ?></div> 41 41 </a> … … 47 47 48 48 <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 ?>"> 50 50 <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"/> 52 52 </form> 53 53 <?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 ?>"> 55 55 <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"> 57 57 </form> 58 58 <?cs /if ?> discussionplugin/0.9/tracdiscussion/wiki.py
r836 r909 1 from tracdiscussion.api import * 1 2 from trac.core import * 2 from trac.wiki import IWikiSyntaxProvider 3 from trac.wiki import IWikiSyntaxProvider, IWikiMacroProvider 4 from trac.web.chrome import add_stylesheet 5 from trac.util import format_datetime 6 import time 7 8 view_topic_doc = """Displays content of discussion topic. If no argument passed 9 tries to find topic with same name as name of current wiki page. If topic name 10 passed displays that topic. """ 3 11 <
