Changeset 1987
- Timestamp:
- 02/16/07 14:37:17 (2 years ago)
- Files:
-
- discussionplugin/0.10/setup.py (modified) (1 diff)
- discussionplugin/0.10/tracdiscussion/api.py (modified) (22 diffs)
- discussionplugin/0.10/tracdiscussion/notification.py (added)
- discussionplugin/0.10/tracdiscussion/search.py (modified) (2 diffs)
- discussionplugin/0.10/tracdiscussion/templates/discussion-notify-body.cs (added)
- discussionplugin/0.10/tracdiscussion/templates/discussion-notify-subject.cs (added)
- discussionplugin/0.10/tracdiscussion/timeline.py (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
discussionplugin/0.10/setup.py
r1252 r1987 14 14 'TracDiscussion.timeline = tracdiscussion.timeline', 15 15 'TracDiscussion.admin = tracdiscussion.admin', 16 'TracDiscussion.search = tracdiscussion.search']}, 16 'TracDiscussion.search = tracdiscussion.search', 17 'TracDiscussion.notification = tracdiscussion.notification']}, 17 18 install_requires = ['TracWebAdmin'], 18 19 keywords = 'trac discussion', discussionplugin/0.10/tracdiscussion/api.py
r1941 r1987 1 1 # -*- coding: utf8 -*- 2 2 3 from tracdiscussion.notification import * 3 4 from trac.core import * 4 5 from trac.web.chrome import add_stylesheet 5 6 from trac.wiki import wiki_to_html, wiki_to_oneliner 6 7 from trac.perm import PermissionError 7 from trac.util import format_datetime, pretty_timedelta , Markup8 from trac.util import format_datetime, pretty_timedelta 8 9 import time 9 10 … … 90 91 message = self.get_message(cursor, message_id) 91 92 93 self.log.debug('group: %s' % group) 94 self.log.debug('forum: %s' % forum) 95 self.log.debug('topic: %s' % topic) 92 96 self.log.debug('message: %s' % message) 93 self.log.debug('topic: %s' % topic)94 self.log.debug('forum: %s' % forum)95 self.log.debug('group: %s' % group)96 97 return group, forum, topic, message 97 98 … … 308 309 309 310 # Get form values. 310 new_name = Markup(req.args.get('name'))311 new_description = Markup(req.args.get('description'))311 new_name = req.args.get('name') 312 new_description = req.args.get('description') 312 313 313 314 # Add new group. … … 318 319 319 320 # Get form values. 320 new_group = req.args.get('group')321 new_name = Markup(req.args.get('name'))322 new_description = Markup(req.args.get('description'))321 new_group = int(req.args.get('group') or 0) 322 new_name = req.args.get('name') 323 new_description = req.args.get('description') 323 324 324 325 # Edit group. … … 339 340 if selection: 340 341 for group_id in selection: 341 self.delete_group(cursor, group_id)342 self.delete_group(cursor, int(group_id)) 342 343 343 344 elif mode == 'forum-list': … … 389 390 390 391 # Get form values 391 new_name = Markup(req.args.get('name'))392 new_name = req.args.get('name') 392 393 new_author = req.authname 393 new_subject = Markup(req.args.get('subject'))394 new_description = Markup(req.args.get('description'))394 new_subject = req.args.get('subject') 395 new_description = req.args.get('description') 395 396 new_moderators = req.args.get('moderators') 396 new_group = req.args.get('group')397 new_group = int(req.args.get('group') or 0) 397 398 if not new_moderators: 398 399 new_moderators = [] … … 408 409 409 410 # Get form values. 410 new_forum = req.args.get('forum')411 new_name = Markup(req.args.get('name'))412 new_subject = Markup(req.args.get('subject'))413 new_description = Markup(req.args.get('description'))411 new_forum = int(req.args.get('forum') or 0) 412 new_name = req.args.get('name') 413 new_subject = req.args.get('subject') 414 new_description = req.args.get('description') 414 415 new_moderators = req.args.get('moderators') 415 new_group = req.args.get('group')416 new_group = int(req.args.get('group') or 0) 416 417 if not new_moderators: 417 418 new_moderators = [] … … 440 441 if selection: 441 442 for forum_id in selection: 442 self.delete_forum(cursor, forum_id)443 self.delete_forum(cursor, int(forum_id)) 443 444 444 445 elif mode == 'topic-list': … … 459 460 460 461 # Get form values. 461 new_subject = Markup(req.args.get('subject'))462 new_author = Markup(req.args.get('author'))463 new_body = Markup(req.args.get('body'))462 new_subject = req.args.get('subject') 463 new_author = req.args.get('author') 464 new_body = req.args.get('body') 464 465 465 466 # Display Add Topic form. … … 487 488 488 489 # Get form values. 489 new_subject = Markup(req.args.get('subject')) 490 new_author = Markup(req.args.get('author')) 491 new_body = Markup(req.args.get('body')) 492 493 #Add topic. 494 self.add_topic(cursor, forum['id'], new_subject, new_author, 495 new_body) 490 new_subject = req.args.get('subject') 491 new_author = req.args.get('author') 492 new_body = req.args.get('body') 493 new_time = int(time.time()) 494 495 # Add topic. 496 self.log.debug(new_body) 497 self.add_topic(cursor, forum['id'], new_subject, new_time, 498 new_author, new_body) 499 500 # Get new popic and notify about creation. 501 new_topic = self.get_topic_by_time(cursor, new_time) 502 new_topic['moderators'] = ' '.join(forum['moderators']) 503 notifier = DiscussionNotifyEmail(self.env) 504 notifier.notify(req, cursor, mode, new_topic) 496 505 497 506 elif mode == 'topic-edit': … … 510 519 511 520 # Get form values. 512 new_subject = Markup(req.args.get('subject'))513 new_body = Markup(req.args.get('body'))521 new_subject = req.args.get('subject') 522 new_body = req.args.get('body') 514 523 515 524 # Edit topic. … … 533 542 534 543 # Get form values 535 new_forum = req.args.get('new_forum')544 new_forum = int(req.args.get('new_forum') or 0) 536 545 537 546 # Move topic. … … 550 559 551 560 # Get form values. 552 new_author = Markup(req.args.get('author'))553 new_subject = Markup(req.args.get('subject'))554 new_body = Markup(req.args.get('body'))561 new_author = req.args.get('author') 562 new_subject = req.args.get('subject') 563 new_body = req.args.get('body') 555 564 556 565 # Get time when topic was visited from session. … … 606 615 607 616 # Get form values. 608 new_author = Markup(req.args.get('author')) 609 new_body = Markup(req.args.get('body')) 610 611 #Add message. 617 new_author = req.args.get('author') 618 new_body = req.args.get('body') 619 new_time = int(time.time()) 620 621 # Add message. 612 622 if message: 613 623 self.add_message(cursor, forum['id'], topic['id'], 614 message['id'], new_ author, new_body)624 message['id'], new_time, new_author, new_body) 615 625 else: 616 626 self.add_message(cursor, forum['id'], topic['id'], '-1', 617 new_author, new_body) 627 new_time, new_author, new_body) 628 629 # Get inserted message and notify about its creation. 630 new_message = self.get_message_by_time(cursor, new_time) 631 new_message['subject'] = topic['subject'] 632 new_message['moderators'] = ' '.join(forum['moderators']) 633 notifier = DiscussionNotifyEmail(self.env) 634 notifier.notify(req, cursor, mode, new_message) 618 635 619 636 elif mode == 'message-edit': … … 631 648 632 649 # Get form values. 633 new_body = Markup(req.args.get('body'))650 new_body = req.args.get('body') 634 651 635 652 # Edit message. … … 668 685 return None 669 686 687 def get_message_by_time(self, cursor, time): 688 columns = ('id', 'forum', 'topic', 'replyto', 'time', 'author', 'body') 689 sql = "SELECT id, forum, topic, replyto, time, author, body FROM" \ 690 " message WHERE time = %s" 691 self.log.debug(sql % (time,)) 692 cursor.execute(sql, (time,)) 693 for row in cursor: 694 row = dict(zip(columns, row)) 695 return row 696 return None 697 670 698 def get_topic(self, cursor, id): 671 columns = ('id', 'forum', ' time', 'subject', 'body', 'author')672 sql = "SELECT id, forum, time, subject, body, authorFROM topic WHERE" \699 columns = ('id', 'forum', 'subject', 'time', 'author', 'body') 700 sql = "SELECT id, forum, subject, time, author, body FROM topic WHERE" \ 673 701 " id = %s" 674 702 self.log.debug(sql % (id,)) … … 679 707 return None 680 708 709 def get_topic_by_time(self, cursor, time): 710 columns = ('id', 'forum', 'subject', 'time', 'author', 'body') 711 sql = "SELECT id, forum, subject, time, author, body FROM topic WHERE" \ 712 " time = %s" 713 self.log.debug(sql % (time,)) 714 cursor.execute(sql, (time,)) 715 for row in cursor: 716 row = dict(zip(columns, row)) 717 return row 718 return None 719 681 720 def get_topic_by_subject(self, cursor, subject): 682 columns = ('id', 'forum', ' time', 'subject', 'body', 'author')683 sql = "SELECT id, forum, time, subject, body, authorFROM topic WHERE" \721 columns = ('id', 'forum', 'subject', 'time', 'author', 'body') 722 sql = "SELECT id, forum, subject, time, author, body FROM topic WHERE" \ 684 723 " subject = '%s'" % (subject) 685 724 self.log.debug(sql) … … 691 730 692 731 def get_forum(self, cursor, id): 693 columns = (' name', 'moderators', 'id', 'time', 'subject',694 'description' , 'group')695 sql = "SELECT name, moderators, id, time, subject, description," \696 " forum_groupFROM forum WHERE id = %s"732 columns = ('id', 'group', 'name', 'subject', 'time', 'moderators', 733 'description') 734 sql = "SELECT id, forum_group, name, subject, time, moderators," \ 735 " description FROM forum WHERE id = %s" 697 736 self.log.debug(sql % (id,)) 698 737 cursor.execute(sql, (id,)) … … 827 866 if not row['replies']: 828 867 row['replies'] = 0 868 else: 869 # SUM on PosgreSQL returns float number. 870 row['replies'] = int(row['replies']) 829 871 row['time'] = format_datetime(row['time']) 830 872 forums.append(row) … … 924 966 group): 925 967 moderators = ' '.join(moderators) 926 if not group:927 group = '0'928 968 sql = "INSERT INTO forum (name, author, time, moderators, subject," \ 929 969 " description, forum_group) VALUES (%s, %s, %s, %s, %s, %s, %s)" … … 933 973 subject, description, group)) 934 974 935 def add_topic(self, cursor, forum, subject, author, body):936 sql = "INSERT INTO topic (forum, time, author, subject, body) VALUES" \975 def add_topic(self, cursor, forum, subject, time, author, body): 976 sql = "INSERT INTO topic (forum, subject, time, author, body) VALUES" \ 937 977 " (%s, %s, %s, %s, %s)" 938 self.log.debug(sql % (forum, int(time.time()), author, subject, body))939 cursor.execute(sql, (forum, int(time.time()), author, subject, body))940 941 def add_message(self, cursor, forum, topic, replyto, author, body):978 self.log.debug(sql % (forum, subject, time, author, body)) 979 cursor.execute(sql, (forum, subject, time, author, body)) 980 981 def add_message(self, cursor, forum, topic, replyto, time, author, body): 942 982 sql = "INSERT INTO message (forum, topic, replyto, time, author," \ 943 983 " body) VALUES (%s, %s, %s, %s, %s, %s)" 944 self.log.debug(sql % (forum, topic, replyto, int(time.time()), 945 author, body)) 946 cursor.execute(sql, (forum, topic, replyto, int(time.time()), 947 author, body)) 984 self.log.debug(sql % (forum, topic, replyto, time, author, body)) 985 cursor.execute(sql, (forum, topic, replyto, time, author, body)) 948 986 949 987 # Delete items functions … … 982 1020 cursor.execute(sql, (message,)) 983 1021 replies = [] 1022 1023 # Get all replies first. 984 1024 for row in cursor: 985 1025 replies.append(row[0]) discussionplugin/0.10/tracdiscussion/search.py
r1497 r1987 37 37 for row in cursor: 38 38 row = dict(zip(columns, row)) 39 yield ( self.env.href.discussion(row['forum'], row['id']) + '#-1',39 yield (req.href.discussion(row['forum'], row['id']) + '#-1', 40 40 "topic: %d: %s" % (row['id'], util.shorten_line(row['subject'])), 41 41 row['time'], row['author'], shorten_result(row['body'], … … 52 52 for row in cursor: 53 53 row = dict(zip(columns, row)) 54 yield ( self.env.href.discussion(row['forum'], row['topic'],55 row['id']) + '#%s' % (row['id']), "message: %d: %s" %56 (row['id'], util.shorten_line(row['subject'])), row['time'],57 row['author'],shorten_result(row['body'], [query]))54 yield (req.href.discussion(row['forum'], row['topic'], row['id']) 55 + '#%s' % (row['id']), "message: %d: %s" % (row['id'], 56 util.shorten_line(row['subject'])), row['time'], row['author'], 57 shorten_result(row['body'], [query])) discussionplugin/0.10/tracdiscussion/timeline.py
r1497 r1987 35 35 author = forum['author'] 36 36 if format == 'rss': 37 href = self.env.abs_href.discussion(forum['id'])37 href = req.abs_href.discussion(forum['id']) 38 38 message = wiki_to_html('%s - %s' % (forum['subject'], 39 39 forum['description']), self.env, req, db) 40 40 else: 41 href = self.env.href.discussion(forum['id'])41 href = req.href.discussion(forum['id']) 42 42 message = wiki_to_oneliner('%s - %s' % (forum['subject'], 43 43 forum['description']), self.env, db) … … 53 53 author = topic['author'] 54 54 if format == 'rss': 55 href = self.env.abs_href.discussion(topic['forum'],55 href = req.abs_href.discussion(topic['forum'], 56 56 topic['id']) 57 57 message = wiki_to_html(topic['subject'], self.env, req, db) 58 58 else: 59 href = self.env.href.discussion(topic['forum'], topic['id'])59 href = req.href.discussion(topic['forum'], topic['id']) 60 60 message = wiki_to_oneliner(topic['subject'], self.env, db) 61 61 yield kind, href, title, time, author, message … … 70 70 author = message['author'] 71 71 if format == 'rss': 72 href = self.env.abs_href.discussion(message['forum'],72 href = req.abs_href.discussion(message['forum'], 73 73 message['topic'], message['id']) + '#%s' % (message['id']) 74 74 message = wiki_to_html(message['topic_subject'], self.env, 75 75 req, db) 76 76 else: 77 href = self.env.href.discussion(message['forum'],77 href = req.href.discussion(message['forum'], 78 78 message['topic'], message['id']) + '#%s' % (message['id']) 79 79 message = wiki_to_oneliner(message['topic_subject'], … … 98 98 columns = ('id', 'subject', 'author', 'time', 'forum', 'forum_name') 99 99 sql = "SELECT t.id, t.subject, t.author, t.time, t.forum, f.name" \ 100 " FROM topic t LEFT JOIN (SELECT name, id FROM forum GROUP BY id)" \ 101 " f ON t.forum = f.id WHERE time BETWEEN %s AND %s" 100 " FROM topic t LEFT JOIN (SELECT id, name FROM forum)" \ 101 " f ON t.forum = f.id WHERE t.time BETWEEN %s AND %s" 102 102 103 self.log.debug(sql % (start, stop)) 103 104 cursor.execute(sql, (start, stop)) … … 110 111 'topic_subject') 111 112 sql = "SELECT m.id, m.author, m.time, m.forum, m.topic, f.name," \ 112 " t.subject FROM message m, (SELECT name, id FROM forum GROUP BY" \ 113 " id) f, (SELECT subject, id FROM topic GROUP BY id) t WHERE" \ 114 " t.id = m.topic AND f.id = m.forum AND time BETWEEN %s AND %s" 113 " t.subject FROM message m, (SELECT id, name FROM forum) f, (SELECT" \ 114 " id, subject FROM topic) t WHERE t.id = m.topic AND f.id = m.forum" \ 115 " AND time BETWEEN %s AND %s" 116 115 117 self.log.debug(sql % (start, stop)) 116 118 cursor.execute(sql, (start, stop))
