Changeset 836
- Timestamp:
- 06/08/06 11:03:04 (2 years ago)
- Files:
-
- discussionplugin/0.9/setup.py (modified) (2 diffs)
- discussionplugin/0.9/tracdiscussion/core.py (modified) (10 diffs)
- discussionplugin/0.9/tracdiscussion/db (added)
- discussionplugin/0.9/tracdiscussion/db/db1.py (added)
- discussionplugin/0.9/tracdiscussion/db/db2.py (added)
- discussionplugin/0.9/tracdiscussion/db/__init__.py (added)
- discussionplugin/0.9/tracdiscussion/db.py (deleted)
- discussionplugin/0.9/tracdiscussion/htdocs/css/admin.css (added)
- discussionplugin/0.9/tracdiscussion/init.py (modified) (2 diffs)
- discussionplugin/0.9/tracdiscussion/templates/forum-add.cs (modified) (1 diff)
- discussionplugin/0.9/tracdiscussion/templates/forum-admin.cs (added)
- discussionplugin/0.9/tracdiscussion/templates/group-admin.cs (added)
- discussionplugin/0.9/tracdiscussion/templates/message-list.cs (modified) (2 diffs)
- discussionplugin/0.9/tracdiscussion/timeline.py (modified) (3 diffs)
- discussionplugin/0.9/tracdiscussion/wiki.py (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
discussionplugin/0.9/setup.py
r804 r836 7 7 name = 'TracDiscussion', 8 8 version = '0.2', 9 packages = ['tracdiscussion' ],9 packages = ['tracdiscussion', 'tracdiscussion.db'], 10 10 package_data = {'tracdiscussion' : ['templates/*.cs', 'htdocs/css/*.css']}, 11 11 entry_points = {'trac.plugins': ['TracDiscussion.core = tracdiscussion.core', 12 12 'TracDiscussion.init = tracdiscussion.init', 13 13 'TracDiscussion.wiki = tracdiscussion.wiki', 14 'TracDiscussion.timeline = tracdiscussion.timeline']}, 14 'TracDiscussion.timeline = tracdiscussion.timeline', 15 'TracDiscussion.admin = tracdiscussion.admin']}, 15 16 keywords = 'trac discussion', 16 17 author = 'Alec Thomas, Radek BartoÅ', … … 22 23 All rights reserved. 23 24 24 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 25 Redistribution and use in source and binary forms, with or without modification, 26 are permitted provided that the following conditions are met: 25 27 26 28 * Redistributions of source code must retain the above copyright notice, discussionplugin/0.9/tracdiscussion/core.py
r804 r836 56 56 57 57 def process_request(self, req): 58 # Get access to database 58 59 db = self.env.get_db_cnx() 59 60 cursor = db.cursor() 60 61 62 # CSS styles 61 63 add_stylesheet(req, 'common/css/wiki.css') 62 64 add_stylesheet(req, 'discussion/css/discussion.css') … … 157 159 # Get form values 158 160 name = req.args.get('name') 161 author = req.authname 159 162 subject = req.args.get('subject') 160 163 description = req.args.get('description') 161 moderators = req.args.get('moderators').split(' ') 164 moderators = req.args.get('moderators') 165 if moderators: 166 moderators = moderators.split(' ') 167 else: 168 moderators = '' 162 169 163 170 # Add new forum 164 self.add_forum(cursor, name, subject, description, moderators) 171 self.add_forum(cursor, name, author, subject, description, 172 moderators) 165 173 166 174 # Display forum list … … 287 295 def get_message(self, cursor, id, req): 288 296 columns = ('id', 'forum', 'topic', 'replyto', 'time', 'author', 'body') 289 cursor.execute('SELECT id, forum, topic, replyto, time, author, body ' 290 'FROM message WHERE id = %s' % (id)) 297 sql = 'SELECT id, forum, topic, replyto, time, author, body FROM' \ 298 ' message WHERE id = %s' % (id) 299 self.log.debug(sql) 300 cursor.execute(sql) 291 301 for row in cursor: 292 302 row = dict(zip(columns, row)) … … 298 308 def get_topic(self, cursor, id, req): 299 309 columns = ('id', 'forum', 'time', 'subject', 'body', 'author') 300 cursor.execute('SELECT id, forum, time, subject, body, author FROM' 301 ' topic WHERE id = %s' % (id)) 310 sql = 'SELECT id, forum, time, subject, body, author FROM topic WHERE' \ 311 ' id = %s' % (id) 312 self.log.debug(sql) 313 cursor.execute(sql) 302 314 for row in cursor: 303 315 row = dict(zip(columns, row)) … … 309 321 def get_forum(self, cursor, id, req): 310 322 columns = ('name', 'moderators', 'id', 'time', 'subject', 'description') 311 cursor.execute('SELECT name, moderators, id, time, subject, description' 312 ' FROM forum WHERE id = %s' % (id)) 323 sql = 'SELECT name, moderators, id, time, subject, description FROM' \ 324 ' forum WHERE id = %s' % (id) 325 self.log.debug(sql) 326 cursor.execute(sql) 313 327 for row in cursor: 314 328 row = dict(zip(columns, row)) … … 319 333 320 334 def get_forums(self, cursor, req): 321 columns = ('moderators', 'id', 'time', 'subject', 'name', 322 'description', 'topics', 'replies', 'lastreply', 'lasttopic') 323 cursor.execute('SELECT moderators, id, time, subject, name,' 324 ' description, (SELECT COUNT(id) FROM topic t WHERE' 325 ' t.forum = forum.id), (SELECT COUNT(id) FROM message m WHERE m.forum' 326 ' = forum.id), (SELECT MAX(time) FROM message m WHERE m.forum =' 327 ' forum.id), (SELECT MAX(time) FROM topic t WHERE t.forum = forum.id)' 328 ' FROM forum ORDER BY subject') 335 columns = ('id', 'name', 'author', 'time', 'moderators', 'group', 336 'subject', 'description', 'topics', 'replies', 'lastreply', 337 'lasttopic') 338 sql = 'SELECT id, name, author, time, moderators, forum_group,' \ 339 ' subject, description, (SELECT COUNT(id) FROM topic t WHERE' \ 340 ' t.forum = forum.id), (SELECT COUNT(id) FROM message m WHERE' \ 341 ' m.forum = forum.id), (SELECT MAX(time) FROM message m WHERE' \ 342 ' m.forum = forum.id), (SELECT MAX(time) FROM topic t WHERE' \ 343 ' t.forum = forum.id) FROM forum ORDER BY subject' 344 self.log.debug(sql) 345 cursor.execute(sql) 329 346 forums = [] 330 347 for row in cursor: … … 347 364 columns = ('id', 'forum', 'time', 'subject', 'body', 'author', 348 365 'replies', 'lastreply') 349 cursor.execute('SELECT id, forum, time, subject, body, author, (SELECT' 350 ' COUNT(id) FROM message m WHERE m.topic = topic.id), (SELECT' 351 ' MAX(time) FROM message m WHERE m.topic = topic.id) FROM topic' 352 ' WHERE forum = %s ORDER BY time' % (forum)) 366 sql = 'SELECT id, forum, time, subject, body, author, (SELECT' \ 367 ' COUNT(id) FROM message m WHERE m.topic = topic.id), (SELECT' \ 368 ' MAX(time) FROM message m WHERE m.topic = topic.id) FROM topic' \ 369 ' WHERE forum = %s ORDER BY time' % (forum) 370 self.log.debug(sql) 371 cursor.execute(sql) 353 372 topics = [] 354 373 for row in cursor: … … 366 385 def get_messages(self, cursor, topic, req): 367 386 columns = ('id', 'replyto', 'time', 'author', 'body') 368 cursor.execute('SELECT id, replyto, time, author, body FROM message' 369 ' WHERE topic = "%s" ORDER BY time' % (topic)) 387 sql = 'SELECT id, replyto, time, author, body FROM message WHERE' \ 388 ' topic = %s ORDER BY time' % (topic) 389 self.log.debug(sql) 390 cursor.execute(sql) 370 391 371 392 messagemap = {} … … 394 415 users = [] 395 416 for user in self.env.get_known_users(): 396 users.append(user )417 users.append(user[0]) 397 418 return users 398 419 399 def add_forum(self, cursor, name, subject, description, moderators):420 def add_forum(self, cursor, name, author, subject, description, moderators): 400 421 moderators = ' '.join(moderators) 401 cursor.execute('INSERT INTO forum (name, time, moderators, subject,' 402 ' description) VALUES ("%s", "%s", "%s", "%s", "%s")' % (name, 403 str(int(time.time())), moderators, subject, description)) 422 sql = 'INSERT INTO forum (name, author, time, moderators, subject,' \ 423 ' description) VALUES ("%s", "%s", %s, "%s", "%s", "%s")' % (name, 424 author, str(int(time.time())), moderators, subject, description) 425 self.log.debug(sql) 426 cursor.execute(sql) 404 427 405 428 def add_topic(self, cursor, forum, subject, author, body): 406 cursor.execute('INSERT INTO topic (forum, time, author, subject,' 407 ' body) VALUES ("%s", "%s", "%s", "%s", "%s")' % (forum, 408 str(int(time.time())), author, subject, body)) 429 sql = 'INSERT INTO topic (forum, time, author, subject, body) VALUES' \ 430 ' (%s, %s, "%s", "%s", "%s")' % (forum, str(int(time.time())), author, 431 subject, body) 432 self.log.debug(sql) 433 cursor.execute(sql) 409 434 410 435 def add_message(self, cursor, forum, topic, replyto, author, body): 411 cursor.execute('INSERT INTO message (forum, topic, replyto, time,' 412 ' author, body) VALUES ("%s", "%s", "%s", "%s", "%s", "%s")' % 413 (forum, topic, replyto, str(int(time.time())), author, body)) 436 sql = 'INSERT INTO message (forum, topic, replyto, time, author, body)' \ 437 ' VALUES (%s, %s, %s, %s, "%s", "%s")' % (forum, topic, replyto, 438 str(int(time.time())), author, body) 439 self.log.debug(sql) 440 cursor.execute(sql) 414 441 415 442 def delete_forum(self, cursor, forum): 416 cursor.execute('DELETE FROM message WHERE forum = "%s"' % (forum)) 417 cursor.execute('DELETE FROM topic WHERE forum = "%s"' % (forum)) 418 cursor.execute('DELETE FROM forum WHERE id = "%s"' % (forum)) 443 sql = 'DELETE FROM message WHERE forum = %s' % (forum) 444 self.log.debug(sql) 445 cursor.execute(sql) 446 sql = 'DELETE FROM topic WHERE forum = %s' % (forum) 447 self.log.debug(sql) 448 cursor.execute(sql) 449 sql = 'DELETE FROM forum WHERE id = %s' % (forum) 450 self.log.debug(sql) 451 cursor.execute(sql) 419 452 420 453 def delete_topic(self, cursor, forum, topic): 421 cursor.execute('DELETE FROM message WHERE forum = "%s" AND topic = "%s"' 422 % (forum, topic)) 423 cursor.execute('DELETE FROM topic WHERE id = "%s"' % (topic)) 454 sql = 'DELETE FROM message WHERE forum = %s AND topic = %s' % (forum, 455 topic) 456 self.log.debug(sql) 457 cursor.execute(sql) 458 sql = 'DELETE FROM topic WHERE id = %s' % (topic) 459 self.log.debug(sql) 460 cursor.execute(sql) 424 461 425 462 def delete_message(self, cursor, forum, topic, message): 426 463 # Get message replies 427 cursor.execute('SELECT id FROM message WHERE replyto = "%s"' 428 % (message)) 464 sql = 'SELECT id FROM message WHERE replyto = %s' % (message) 465 self.log.debug(sql) 466 cursor.execute(sql) 429 467 replies = [] 430 468 for row in cursor: … … 436 474 437 475 # Delete message itself 438 cursor.execute('DELETE FROM message WHERE id = "%s"' % (message)) 476 sql = 'DELETE FROM message WHERE id = %s' % (message) 477 self.log.debug(sql) 478 cursor.execute(sql) discussionplugin/0.9/tracdiscussion/init.py
r775 r836 2 2 from trac.db import * 3 3 from trac.env import IEnvironmentSetupParticipant 4 from tracdiscussion.db import version as discussion_version, schema 4 5 # Last discussion database shcema version 6 last_db_version = 2 5 7 6 8 class DiscussionInit(Component): … … 14 16 def environment_needs_upgrade(self, db): 15 17 cursor = db.cursor() 16 # Database is up to date? 17 try: 18 cursor.execute("SELECT value FROM system WHERE name='discussion_version'") 19 for row in cursor: 20 return int(row[0]) != discussion_version 21 return True 22 except: 23 return True 24 return False 18 19 # Is database up to date? 20 return self._get_db_version(cursor) != last_db_version 25 21 26 22 def upgrade_environment(self, db): 27 23 cursor = db.cursor() 28 # Initial table creation 29 #try: 30 for table in schema: 31 queries = db.to_sql(table) 32 for query in queries: 33 cursor.execute(query) 34 cursor.execute("INSERT INTO system VALUES ('discussion_version', %s)", 35 [discussion_version]) 36 #except: 37 #cursor.execute("UPDATE system SET value = %i WHERE name = 'discussion_version'", discussion_version) 24 25 # Get current database schema version 26 db_version = self._get_db_version(cursor) 27 28 # Perform incremental upgrades 29 for I in range(db_version + 1, last_db_version + 1): 30 script_name = 'db%i' % (I) 31 try: 32 module = __import__('tracdiscussion.db.%s' % (script_name), 33 globals(), locals(), ['do_upgrade']) 34 module.do_upgrade(cursor) 35 except: 36 raise TracError('Error upgrading database to version %i' % I) 37 38 def _get_db_version(self, cursor): 39 try: 40 sql = "SELECT value FROM system WHERE name='discussion_version'" 41 self.log.debug(sql) 42 cursor.execute(sql) 43 for row in cursor: 44 return int(row[0]) 45 return 0 46 except: 47 return 0 discussionplugin/0.9/tracdiscussion/templates/forum-add.cs
r790 r836 21 21 <div class="field"> 22 22 <label for="moderators">Moderators:</label><br/> 23 <?cs if:discussion.users ?>23 <?cs if:discussion.users.0 ?> 24 24 <select name="moderators" multiple="on"> 25 25 <?cs each:user = discussion.users ?> discussionplugin/0.9/tracdiscussion/templates/message-list.cs
r804 r836 53 53 </div> 54 54 <div class="controls"> 55 <a href="<?cs var:trac.href.discussion ?>/<?cs var:discussion.forum.id ?>/<?cs var:discussion.topic.id ?> #reply?action=add;reply=<?cs var:message.id ?>">Reply</a>56 <?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 ?>" >Delete</a>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> 56 <?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> 58 58 <?cs /if ?> 59 59 </div> … … 87 87 </div> 88 88 <div class="controls"> 89 <a href="<?cs var:trac.href.discussion ?>/<?cs var:discussion.forum.id ?>/<?cs var:discussion.topic.id ?> #reply?action=add;reply=-1">Reply</a>89 <a href="<?cs var:trac.href.discussion ?>/<?cs var:discussion.forum.id ?>/<?cs var:discussion.topic.id ?>?action=add;reply=-1#reply">Reply</a> 90 90 </div> 91 91 <div class="author"> discussionplugin/0.9/tracdiscussion/timeline.py
r804 r836 12 12 implements(ITimelineEventProvider) 13 13 14 # ITimelineEventProvider methods14 # ITimelineEventProvider 15 15 def get_timeline_events(self, req, start, stop, filters): 16 16 if 'discussion' in filters: … … 77 77 78 78 def _get_changed_forums(self, cursor, start, stop): 79 columns = ('id', 'name', 'subject', 'description', 'time') 80 cursor.execute('SELECT id, name, subject, description, time' 81 ' FROM forum WHERE time BETWEEN %s AND %s' % (start, stop)) 79 columns = ('id', 'name', 'author', 'subject', 'description', 'time') 80 sql = 'SELECT id, name, author, subject, description, time FROM forum' \ 81 ' WHERE time BETWEEN %s AND %s' % (start, stop) 82 self.log.debug(sql) 83 cursor.execute(sql) 82 84 for row in cursor: 83 85 row = dict(zip(columns, row)) 84 row['author'] = 'nobody'85 86 yield row 86 87 87 88 def _get_changed_topics(self, cursor, start, stop): 88 89 columns = ('id', 'subject', 'author', 'time', 'forum', 'forum_name') 89 cursor.execute('SELECT id, subject, author, time, forum, (SELECT name' 90 ' FROM forum f WHERE f.id = topic.forum) FROM topic WHERE time' 91 ' BETWEEN %s AND %s' % (start, stop)) 90 sql = 'SELECT id, subject, author, time, forum, (SELECT name FROM forum' \ 91 ' f WHERE f.id = topic.forum) FROM topic WHERE time BETWEEN %s AND %s' \ 92 % (start, stop) 93 self.log.debug(sql) 94 cursor.execute(sql) 92 95 for row in cursor: 93 96 row = dict(zip(columns, row)) … … 97 100 columns = ('id', 'author', 'time', 'forum', 'topic', 'forum_name', 98 101 'topic_subject') 99 cursor.execute('SELECT id, author, time, forum, topic, (SELECT name' 100 ' FROM forum f WHERE f.id = message.forum), (SELECT subject FROM' 101 ' topic t WHERE t.id = message.topic) FROM message WHERE time' 102 ' BETWEEN %s AND %s' % (start, stop)) 102 sql = 'SELECT id, author, time, forum, topic, (SELECT name FROM forum f' \ 103 ' WHERE f.id = message.forum), (SELECT subject FROM topic t WHERE' \ 104 ' t.id = message.topic) FROM message WHERE time BETWEEN %s AND %s' \ 105 % (start, stop) 106 self.log.debug(sql) 107 cursor.execute(sql) 103 108 for row in cursor: 104 109 row = dict(zip(columns, row)) discussionplugin/0.9/tracdiscussion/wiki.py
r804 r836 26 26 if ns == 'forum': 27 27 columns = ('subject',) 28 cursor.execute('SELECT subject FROM forum WHERE id = %s', id) 28 sql = 'SELECT subject FROM forum WHERE id = %s' % (id) 29 self.log.debug(sql) 30 cursor.execute(sql) 29 31 for row in cursor: 30 32 row = dict(zip(columns, row)) … … 35 37 elif ns == 'topic': 36 38 columns = ('forum', 'forum_subject', 'subject') 37 cursor.execute('SELECT forum, (SELECT subject FROM forum WHERE id =' 38 ' topic.forum), subject FROM topic WHERE id = %s', id) 39 sql = 'SELECT forum, (SELECT subject FROM forum WHERE id =' \ 40 ' topic.forum), subject FROM topic WHERE id = %s' % (id) 41 self.log.debug(sql) 42 cursor.execute(sql) 39 43 for row in cursor: 40 44 row = dict(zip(columns, row)) … … 47 51 elif ns == 'message': 48 52 columns = ('forum', 'topic', 'forum_subject', 'subject') 49 cursor.execute('SELECT forum, topic, (SELECT subject FROM forum' 50 ' WHERE id = message.forum), (SELECT subject FROM topic WHERE' 51 ' id = message.topic) FROM message WHERE id = %s' % (id)) 53 sql = 'SELECT forum, topic, (SELECT subject FROM forum WHERE id =' \ 54 ' message.forum), (SELECT subject FROM topic WHERE id =' \ 55 ' message.topic) FROM message WHERE id = %s' % (id) 56 self.log.debug(sql) 57 cursor.execute(sql) 52 58 for row in cursor: 53 59 row = dict(zip(columns, row))
