Changeset 2837
- Timestamp:
- 11/28/07 22:57:41 (1 year ago)
- Files:
-
- discussionplugin/0.11/tracdiscussion/admin.py (modified) (2 diffs)
- discussionplugin/0.11/tracdiscussion/api.py (modified) (51 diffs)
- discussionplugin/0.11/tracdiscussion/core.py (modified) (3 diffs)
- discussionplugin/0.11/tracdiscussion/notification.py (modified) (4 diffs)
- discussionplugin/0.11/tracdiscussion/search.py (modified) (3 diffs)
- discussionplugin/0.11/tracdiscussion/templates/discussion-macros.html (modified) (1 diff)
- discussionplugin/0.11/tracdiscussion/templates/forum-list.html (modified) (1 diff)
- discussionplugin/0.11/tracdiscussion/timeline.py (modified) (5 diffs)
- discussionplugin/0.11/tracdiscussion/wiki.py (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
discussionplugin/0.11/tracdiscussion/admin.py
r2618 r2837 4 4 5 5 from trac.core import * 6 from trac. contextimport Context6 from trac.mimeview import Context 7 7 from trac.web.chrome import add_stylesheet 8 8 from trac.wiki import wiki_to_html, wiki_to_oneliner … … 38 38 39 39 # Create request context. 40 context = Context (self.env,req)('discussion-admin')40 context = Context.from_request(req)('discussion-admin') 41 41 42 42 # Process request. discussionplugin/0.11/tracdiscussion/api.py
r2619 r2837 10 10 format_datetime, pretty_timedelta 11 11 from trac.util.html import html 12 13 from genshi import Markup 12 from trac.util.text import to_unicode 13 14 14 from genshi.template import TemplateLoader 15 15 … … 25 25 26 26 # Get database access. 27 context.cursor = context.db.cursor() 27 db = self.env.get_db_cnx() 28 context.cursor = db.cursor() 28 29 29 30 # Get request items and modes. … … 47 48 48 49 # Update session data. 49 context.req.session['visited-topics'] = unicode(context.visited_topics) 50 context.req.session['visited-forums'] = unicode(context.visited_forums) 51 52 # Fill up template data struture. 50 context.req.session['visited-topics'] = to_unicode(context.visited_topics) 51 context.req.session['visited-forums'] = to_unicode(context.visited_forums) 52 53 # Convert group, forum topic and message values for pressentation. 54 if group: 55 group['name'] = format_to_oneliner(self.env, context, group['name']) 56 group['description'] = format_to_oneliner(self.env, context, 57 group['description']) 58 if forum: 59 forum['name'] = format_to_oneliner(self.env, context, forum['name']) 60 forum['subject'] = format_to_oneliner(self.env,context, 61 forum['subject']) 62 forum['description'] = format_to_oneliner(self.env, context, 63 forum['description']) 64 forum['time'] = format_datetime(forum['time']) 65 if topic: 66 topic['subject'] = format_to_oneliner(self.env, context, 67 topic['subject']) 68 topic['body'] = format_to_html(self.env, context, topic['body']) 69 topic['author'] = format_to_oneliner(self.env, context, 70 topic['author']) 71 topic['time'] = format_datetime(topic['time']) 72 if message: 73 message['author'] = format_to_oneliner(self.env, context, 74 message['author']) 75 message['body'] = format_to_html(self.env, context, message['body']) 76 message['time'] = format_datetime(message['time']) 77 78 # Fill up template data structure. 53 79 self.data['authname'] = context.req.authname 54 80 self.data['is_moderator'] = is_moderator … … 59 85 self.data['mode'] = modes[-1] 60 86 self.data['time'] = format_datetime(datetime.now(utc)) 61 self.data['realm'] = context.realm 62 63 # Convert group, forum topic and message values for pressentation. 64 if group: 65 group['name'] = format_to_oneliner(context, group['name']) 66 group['description'] = format_to_oneliner(context, 67 group['description']) 68 if forum: 69 forum['name'] = format_to_oneliner(context, forum['name']) 70 forum['subject'] = format_to_oneliner(context, forum['subject']) 71 forum['description'] = format_to_oneliner(context, 72 forum['description']) 73 forum['time'] = format_datetime(forum['time']) 74 if topic: 75 topic['subject'] = format_to_oneliner(context, topic['subject']) 76 topic['body'] = format_to_html(context, topic['body']) 77 topic['author'] = format_to_oneliner(context, topic['author']) 78 topic['time'] = format_datetime(topic['time']) 79 if message: 80 message['author'] = format_to_oneliner(context, message['author']) 81 message['body'] = format_to_html(context, message['body']) 82 message['time'] = format_datetime(message['time']) 87 self.data['realm'] = context.resource.realm 83 88 84 89 # Add CSS styles and scripts. … … 86 91 add_stylesheet(context.req, 'discussion/css/discussion.css') 87 92 add_stylesheet(context.req, 'discussion/css/admin.css') 88 89 93 add_script(context.req, 'common/js/trac.js') 90 94 add_script(context.req, 'common/js/search.js') … … 92 96 93 97 # Commit database changes and return template and data. 94 context.db.commit()95 context.env.log.debug(self.data)98 db.commit() 99 self.env.log.debug(self.data) 96 100 return modes[-1] + '.html', {'discussion' : self.data} 97 101 … … 127 131 submit = context.req.args.has_key('submit'); 128 132 self.log.debug('realm: %s, action: %s, preview: %s, submit: %s' % ( 129 context.re alm, action, preview, submit))133 context.resource.realm, action, preview, submit)) 130 134 131 135 # Determine mode. 132 136 if message: 133 if context.re alm == 'discussion-admin':137 if context.resource.realm == 'discussion-admin': 134 138 pass 135 elif context.re alm == 'discussion-wiki':139 elif context.resource.realm == 'discussion-wiki': 136 140 if action == 'add': 137 141 return ['message-add', 'wiki-message-list'] … … 180 184 return ['message-list'] 181 185 if topic: 182 if context.re alm == 'discussion-admin':186 if context.resource.realm == 'discussion-admin': 183 187 pass 184 elif context.re alm == 'discussion-wiki':188 elif context.resource.realm == 'discussion-wiki': 185 189 if action == 'add': 186 190 return ['message-add', 'wiki-message-list'] … … 231 235 return ['message-list'] 232 236 elif forum: 233 if context.re alm == 'discussion-admin':237 if context.resource.realm == 'discussion-admin': 234 238 if action == 'post-edit': 235 239 return ['forum-post-edit', 'admin-forum-list'] 236 240 else: 237 241 return ['admin-forum-list'] 238 elif context.re alm == 'discussion-wiki':242 elif context.resource.realm == 'discussion-wiki': 239 243 return ['wiki-message-list'] 240 244 else: … … 251 255 return ['topic-list'] 252 256 elif group: 253 if context.re alm == 'discussion-admin':257 if context.resource.realm == 'discussion-admin': 254 258 if action == 'post-add': 255 259 return ['forum-post-add', 'admin-forum-list'] … … 263 267 else: 264 268 return ['admin-forum-list'] 265 elif context.re alm == 'discussion-wiki':269 elif context.resource.realm == 'discussion-wiki': 266 270 return ['wiki-message-list'] 267 271 else: … … 271 275 return ['forum-list'] 272 276 else: 273 if context.re alm == 'discussion-admin':277 if context.resource.realm == 'discussion-admin': 274 278 if action == 'post-add': 275 279 return ['group-post-add', 'admin-group-list'] … … 278 282 else: 279 283 return ['admin-group-list'] 280 elif context.re alm == 'discussion-wiki':284 elif context.resource.realm == 'discussion-wiki': 281 285 return ['wiki-message-list'] 282 286 else: … … 508 512 # Display Add Topic form. 509 513 if new_subject: 510 self.data['subject'] = format_to_oneliner( context,514 self.data['subject'] = format_to_oneliner(self.env, context, 511 515 new_subject) 512 516 if new_author: 513 self.data['author'] = format_to_oneliner( context,517 self.data['author'] = format_to_oneliner(self.env, context, 514 518 new_author) 515 519 if new_body: 516 self.data['body'] = format_to_html(context, new_body) 520 self.data['body'] = format_to_html(self.env, context, 521 new_body) 517 522 518 523 elif mode == 'topic-quote': … … 547 552 to = self.get_topic_to_recipients(context, new_topic['id']) 548 553 cc = self.get_topic_cc_recipients(context, new_topic['id']) 549 notifier = DiscussionNotifyEmail( context.env)554 notifier = DiscussionNotifyEmail(self.env) 550 555 notifier.notify(context, mode, forum, new_topic, None, to, cc) 551 556 … … 659 664 to = self.get_topic_to_recipients(context, topic['id']) 660 665 cc = self.get_topic_cc_recipients(context, topic['id']) 661 notifier = DiscussionNotifyEmail( context.env)666 notifier = DiscussionNotifyEmail(self.env) 662 667 notifier.notify(context, mode, forum, topic, new_message, to, cc) 663 668 664 669 # Redirect request to prevent re-submit. 665 if context.re alm != 'discussion-wiki':670 if context.resource.realm != 'discussion-wiki': 666 671 context.req.redirect(context.req.href.discussion('redirect', 667 672 href = context.req.path_info)) … … 691 696 692 697 # Redirect request to prevent re-submit. 693 if context.re alm != 'discussion-wiki':698 if context.resource.realm != 'discussion-wiki': 694 699 context.req.redirect(context.req.href.discussion('redirect', 695 700 href = context.req.path_info)) … … 704 709 705 710 # Redirect request to prevent re-submit. 706 if context.re alm != 'discussion-wiki':711 if context.resource.realm != 'discussion-wiki': 707 712 context.req.redirect(context.req.href.discussion('redirect', 708 713 href = context.req.path_info)) … … 737 742 self.log.debug( (new_body,)) 738 743 if new_author != None: 739 self.data['author'] = format_to_oneliner( context, new_author)744 self.data['author'] = format_to_oneliner(self.env, context, new_author) 740 745 if new_subject != None: 741 self.data['subject'] = format_to_oneliner( context, new_subject)746 self.data['subject'] = format_to_oneliner(self.env, context, new_subject) 742 747 if new_body != None: 743 self.data['body'] = format_to_html( context, new_body)748 self.data['body'] = format_to_html(self.env, context, new_body) 744 749 745 750 # Prepare display of messages. … … 762 767 sql = "SELECT id, forum, topic, replyto, time, author, body FROM" \ 763 768 " message WHERE id = %s" 764 context.env.log.debug(sql % (unicode(id),))765 context.cursor.execute(sql, ( unicode(id),))769 self.env.log.debug(sql % (to_unicode(id),)) 770 context.cursor.execute(sql, (to_unicode(id),)) 766 771 for row in context.cursor: 767 772 row = dict(zip(columns, row)) … … 773 778 sql = "SELECT id, forum, topic, replyto, time, author, body FROM" \ 774 779 " message WHERE time = %s" 775 context.env.log.debug(sql % (time,))780 self.env.log.debug(sql % (time,)) 776 781 context.cursor.execute(sql, (time,)) 777 782 for row in context.cursor: … … 784 789 sql = "SELECT id, forum, subject, time, author, body FROM topic WHERE" \ 785 790 " id = %s" 786 context.env.log.debug(sql % (unicode(id),))787 context.cursor.execute(sql, ( unicode(id),))791 self.env.log.debug(sql % (to_unicode(id),)) 792 context.cursor.execute(sql, (to_unicode(id),)) 788 793 for row in context.cursor: 789 794 row = dict(zip(columns, row)) … … 795 800 sql = "SELECT id, forum, subject, time, author, body FROM topic WHERE" \ 796 801 " time = %s" 797 context.env.log.debug(sql % (time,))802 self.env.log.debug(sql % (time,)) 798 803 context.cursor.execute(sql, (time,)) 799 804 for row in context.cursor: … … 806 811 sql = "SELECT id, forum, subject, time, author, body FROM topic WHERE" \ 807 812 " subject = %s" 808 context.env.log.debug(sql % (subject,))813 self.env.log.debug(sql % (subject,)) 809 814 context.cursor.execute(sql, (subject,)) 810 815 for row in context.cursor: … … 816 821 sql = "SELECT t.author FROM topic t WHERE t.id = %s UNION SELECT" \ 817 822 " m.author FROM message m WHERE m.topic = %s" 818 context.env.log.debug(sql % (unicode(id),unicode(id)))819 context.cursor.execute(sql, ( unicode(id),unicode(id)))823 self.env.log.debug(sql % (to_unicode(id), to_unicode(id))) 824 context.cursor.execute(sql, (to_unicode(id), to_unicode(id))) 820 825 to_recipients = [] 821 826 for row in context.cursor: … … 831 836 sql = "SELECT id, forum_group, name, subject, time, moderators," \ 832 837 " description FROM forum WHERE id = %s" 833 context.env.log.debug(sql % (unicode(id),))834 context.cursor.execute(sql, ( unicode(id),))838 self.env.log.debug(sql % (to_unicode(id),)) 839 context.cursor.execute(sql, (to_unicode(id),)) 835 840 for row in context.cursor: 836 841 row = dict(zip(columns, row)) … … 842 847 columns = ('id', 'name', 'description') 843 848 sql = "SELECT id, name, description FROM forum_group WHERE id = %s" 844 context.env.log.debug(sql % (unicode(id),))845 context.cursor.execute(sql, ( unicode(id),))849 self.env.log.debug(sql % (to_unicode(id),)) 850 context.cursor.execute(sql, (to_unicode(id),)) 846 851 for row in context.cursor: 847 852 row = dict(zip(columns, row)) … … 854 859 # Get count of forums without group. 855 860 sql = "SELECT COUNT(f.id) FROM forum f WHERE f.forum_group = 0" 856 context.env.log.debug(sql)861 self.env.log.debug(sql) 857 862 context.cursor.execute(sql) 858 863 no_group_forums = 0 … … 871 876 " f.forum_group ORDER BY " + order_by + (" ASC", 872 877 " DESC")[bool(desc)] 873 context.env.log.debug(sql)878 self.env.log.debug(sql) 874 879 context.cursor.execute(sql) 875 880 for row in context.cursor: 876 881 row = dict(zip(columns, row)) 877 row['name'] = format_to_oneliner(context, row['name']) 878 row['description'] = format_to_oneliner(context, row['description']) 882 row['name'] = format_to_oneliner(self.env, context, row['name']) 883 row['description'] = format_to_oneliner(self.env, context, 884 row['description']) 879 885 groups.append(row) 880 886 return groups … … 887 893 sql = "SELECT COUNT(id) FROM topic t WHERE t.forum = %s AND t.time > %s" 888 894 889 context.env.log.debug(sql % (forum_id, time))895 self.env.log.debug(sql % (forum_id, time)) 890 896 context.cursor.execute(sql, (forum_id, time)) 891 897 for row in context.cursor: … … 895 901 def _get_new_replies_count(context, forum_id): 896 902 sql = "SELECT id FROM topic t WHERE t.forum = %s" 897 context.env.log.debug(sql % (forum_id,))903 self.env.log.debug(sql % (forum_id,)) 898 904 context.cursor.execute(sql, (forum_id,)) 899 905 … … 909 915 (context.visited_topics[topic_id] or 0)) 910 916 sql = "SELECT COUNT(id) FROM message m WHERE m.topic = %s AND m.time > %s" 911 context.env.log.debug(sql % (topic_id, time))917 self.env.log.debug(sql % (topic_id, time)) 912 918 context.cursor.execute(sql, (topic_id, time)) 913 919 for row in context.cursor: … … 930 936 "t.id = ma.topic GROUP BY forum) ta ON f.id = ta.forum ORDER BY " + \ 931 937 order_by + (" ASC", " DESC")[bool(desc)] 932 context.env.log.debug(sql)938 self.env.log.debug(sql) 933 939 context.cursor.execute(sql) 934 940 … … 937 943 for row in context.cursor: 938 944 row = dict(zip(columns, row)) 939 row['moderators'] = format_to_oneliner(context, row['moderators']) 940 row['subject'] = format_to_oneliner(context, row['subject']) 941 row['description'] = format_to_oneliner(context, row['description']) 945 row['moderators'] = format_to_oneliner(self.env, context, 946 row['moderators']) 947 row['subject'] = format_to_oneliner(self.env, context, 948 row['subject']) 949 row['description'] = format_to_oneliner(self.env, context, 950 row['description']) 942 951 row['lastreply'] = row['lastreply'] and pretty_timedelta( 943 952 to_datetime(row['lastreply'], utc)) or 'No replies' … … 963 972 sql = "SELECT COUNT(id) FROM message m WHERE m.topic = %s AND m.time > %s" 964 973 965 context.env.log.debug(sql % (topic_id, time))974 self.env.log.debug(sql % (topic_id, time)) 966 975 context.cursor.execute(sql, (topic_id, time)) 967 976 for row in context.cursor: … … 978 987 " topic) m ON t.id = m.topic WHERE t.forum = %s ORDER BY " \ 979 988 + order_by + (" ASC", " DESC")[bool(desc)] 980 context.env.log.debug(sql % (unicode(forum_id),))981 context.cursor.execute(sql, ( unicode(forum_id),))989 self.env.log.debug(sql % (to_unicode(forum_id),)) 990 context.cursor.execute(sql, (to_unicode(forum_id),)) 982 991 983 992 # Convert certain topic attributes. … … 985 994 for row in context.cursor: 986 995 row = dict(zip(columns, row)) 987 row['author'] = format_to_oneliner( context, row['author'])988 row['subject'] = format_to_oneliner( context, row['subject'])989 row['body'] = format_to_html( context, row['body'])996 row['author'] = format_to_oneliner(self.env, context, row['author']) 997 row['subject'] = format_to_oneliner(self.env, context, row['subject']) 998 row['body'] = format_to_html(self.env, context, row['body']) 990 999 row['lastreply'] = row['lastreply'] and pretty_timedelta( 991 1000 to_datetime(row['lastreply'], utc)) or 'No replies' … … 1005 1014 sql = "SELECT m.id, m.replyto, m.time, m.author, m.body FROM message m WHERE" \ 1006 1015 " m.topic = %s ORDER BY " + order_by + (" ASC", " DESC")[bool(desc)] 1007 context.env.log.debug(sql % (unicode(topic_id),))1008 context.cursor.execute(sql, ( unicode(topic_id),))1016 self.env.log.debug(sql % (to_unicode(topic_id),)) 1017 context.cursor.execute(sql, (to_unicode(topic_id),)) 1009 1018 messagemap = {} 1010 1019 messages = [] 1011 1020 for row in context.cursor: 1012 1021 row = dict(zip(columns, row)) 1013 row['author'] = format_to_oneliner( context, row['author'])1014 row['body'] = format_to_html( context, row['body'])1022 row['author'] = format_to_oneliner(self.env, context, row['author']) 1023 row['body'] = format_to_html(self.env, context, row['body']) 1015 1024 if int(row['time']) > time: 1016 1025 row['new'] = True … … 1037 1046 sql = "SELECT m.id, m.replyto, m.time, m.author, m.body FROM message m" \ 1038 1047 " WHERE m.topic = %s " + order_by 1039 context.env.log.debug(sql % (unicode(topic_id),))1040 context.cursor.execute(sql, ( unicode(topic_id),))1048 self.env.log.debug(sql % (to_unicode(topic_id),)) 1049 context.cursor.execute(sql, (to_unicode(topic_id),)) 1041 1050 messages = [] 1042 1051 for row in context.cursor: 1043 1052 row = dict(zip(columns, row)) 1044 row['author'] = format_to_oneliner( context, row['author'])1045 row['body'] = format_to_html( context, row['body'])1053 row['author'] = format_to_oneliner(self.env, context, row['author']) 1054 row['body'] = format_to_html(self.env, context, row['body']) 1046 1055 if int(row['time']) > time: 1047 1056 row['new'] = True … … 1052 1061 def get_users(self, context): 1053 1062 users = [] 1054 for user in context.env.get_known_users():1063 for user in self.env.get_known_users(): 1055 1064 users.append(user[0]) 1056 1065 return users … … 1060 1069 def add_group(self, context, name, description): 1061 1070 sql = "INSERT INTO forum_group (name, description) VALUES (%s, %s)" 1062 context.env.log.debug(sql % (name, description))1071 self.env.log.debug(sql % (name, description)) 1063 1072 context.cursor.execute(sql, (name, description)) 1064 1073 … … 1068 1077 sql = "INSERT INTO forum (name, author, time, moderators, subject," \ 1069 1078 " description, forum_group) VALUES (%s, %s, %s, %s, %s, %s, %s)" 1070 context.env.log.debug(sql % (name, author, to_timestamp(datetime.now(utc)),1079 self.env.log.debug(sql % (name, author, to_timestamp(datetime.now(utc)), 1071 1080 moderators, subject, description, group)) 1072 1081 context.cursor.execute(sql, (name, author, to_timestamp(datetime.now(utc)), … … 1076 1085 sql = "INSERT INTO topic (forum, subject, time, author, body) VALUES" \ 1077 1086 " (%s, %s, %s, %s, %s)" 1078 context.env.log.debug(sql % (forum, subject, time, author, body))1087 self.env.log.debug(sql % (forum, subject, time, author, body)) 1079 1088 context.cursor.execute(sql, (forum, subject, time, author, body)) 1080 1089 … … 1082 1091 sql = "INSERT INTO message (forum, topic, replyto, time, author," \ 1083 1092 " body) VALUES (%s, %s, %s, %s, %s, %s)" 1084 context.env.log.debug(sql % (forum, topic, replyto, time, author, body))1093 self.env.log.debug(sql % (forum, topic, replyto, time, author, body)) 1085 1094 context.cursor.execute(sql, (forum, topic, replyto, time, author, body)) 1086 1095 … … 1089 1098 def delete_group(self, context, group): 1090 1099 sql = "DELETE FROM forum_group WHERE id = %s" 1091 context.env.log.debug(sql % (unicode(group),))1092 context.cursor.execute(sql, ( unicode(group),))1100 self.env.log.debug(sql % (to_unicode(group),)) 1101 context.cursor.execute(sql, (to_unicode(group),)) 1093 1102 sql = "UPDATE forum SET forum_group = 0 WHERE forum_group = %s" 1094 context.env.log.debug(sql % (unicode(group),))1095 context.cursor.execute(sql, ( unicode(group),))1103 self.env.log.debug(sql % (to_unicode(group),)) 1104 context.cursor.execute(sql, (to_unicode(group),)) 1096 1105 1097 1106 def delete_forum(self, context, forum): 1098 1107 sql = "DELETE FROM message WHERE forum = %s" 1099 context.env.log.debug(sql % (unicode(forum),))1100 context.cursor.execute(sql, ( unicode(forum),))1108 self.env.log.debug(sql % (to_unicode(forum),)) 1109 context.cursor.execute(sql, (to_unicode(forum),)) 1101 1110 sql = "DELETE FROM topic WHERE forum = %s" 1102 context.env.log.debug(sql % (unicode(forum),))1103 context.cursor.execute(sql, ( unicode(forum),))1111 self.env.log.debug(sql % (to_unicode(forum),)) 1112 context.cursor.execute(sql, (to_unicode(forum),)) 1104 1113 sql = "DELETE FROM forum WHERE id = %s" 1105 context.env.log.debug(sql % (unicode(forum),))1106 context.cursor.execute(sql, ( unicode(forum),))1114 self.env.log.debug(sql % (to_unicode(forum),)) 1115 context.cursor.execute(sql, (to_unicode(forum),)) 1107 1116 1108 1117 def delete_topic(self, context, topic): 1109 1118 sql = "DELETE FROM message WHERE topic = %s" 1110 context.env.log.debug(sql % (unicode(topic),))1111 context.cursor.execute(sql, ( unicode(topic),))1119 self.env.log.debug(sql % (to_unicode(topic),)) 1120 context.cursor.execute(sql, (to_unicode(topic),)) 1112 1121 sql = "DELETE FROM topic WHERE id = %s" 1113 context.env.log.debug(sql % (unicode(topic),))1114 context.cursor.execute(sql, ( unicode(topic),))1122 self.env.log.debug(sql % (to_unicode(topic),)) 1123 context.cursor.execute(sql, (to_unicode(topic),)) 1115 1124 1116 1125 def delete_message(self, context, message): 1117 1126 # Get message replies. 1118 1127 sql = "SELECT m.id FROM message m WHERE m.replyto = %s" 1119 context.env.log.debug(sql % (unicode(message),))1120 context.cursor.execute(sql, ( unicode(message),))1128 self.env.log.debug(sql % (to_unicode(message),)) 1129 context.cursor.execute(sql, (to_unicode(message),)) 1121 1130 replies = [] 1122 1131 … … 1131 1140 # Delete message itself. 1132 1141 sql = "DELETE FROM message WHERE id = %s" 1133 context.env.log.debug(sql % (unicode(message),))1134 context.cursor.execute(sql, ( unicode(message),))1142 self.env.log.debug(sql % (to_unicode(message),)) 1143 context.cursor.execute(sql, (to_unicode(message),)) 1135 1144 1136 1145 # Set item functions. … … 1140 1149 group = '0' 1141 1150 sql = "UPDATE forum SET forum_group = %s WHERE id = %s" 1142 context.env.log.debug(sql % (group, forum))1151 self.env.log.debug(sql % (group, forum)) 1143 1152 context.cursor.execute(sql, (group, forum)) 1144 1153 1145 1154 def set_forum(self, context, topic, forum): 1146 1155 sql = "UPDATE topic SET forum = %s WHERE id = %s" 1147 context.env.log.debug(sql % (forum, topic))1156 self.env.log.debug(sql % (forum, topic)) 1148 1157 context.cursor.execute(sql, (forum, topic)) 1149 1158 sql = "UPDATE message SET forum = %s WHERE topic = %s" 1150 context.env.log.debug(sql % (forum, topic))1159 self.env.log.debug(sql % (forum, topic)) 1151 1160 context.cursor.execute(sql, (forum, topic)) 1152 1161 … … 1155 1164 def edit_group(self, context, group, name, description): 1156 1165 sql = "UPDATE forum_group SET name = %s, description = %s WHERE id = %s" 1157 context.env.log.debug(sql % (name, description, group))1166 self.env.log.debug(sql % (name, description, group)) 1158 1167 context.cursor.execute(sql, (name, description, group)) 1159 1168 … … 1165 1174 sql = "UPDATE forum SET name = %s, subject = %s, description = %s," \ 1166 1175 " moderators = %s, forum_group = %s WHERE id = %s" 1167 context.env.log.debug(sql % (name, subject, description, moderators,1176 self.env.log.debug(sql % (name, subject, description, moderators, 1168 1177 group, forum)) 1169 1178 context.cursor.execute(sql, (name, subject, description, moderators, … … 1173 1182 sql = "UPDATE topic SET forum = %s, subject = %s, body = %s WHERE id" \ 1174 1183 " = %s" 1175 context.env.log.debug(sql % (forum, subject, body, topic))1184 self.env.log.debug(sql % (forum, subject, body, topic)) 1176 1185 context.cursor.execute(sql, (forum, subject, body, topic)) 1177 1186 … … 1179 1188 sql = "UPDATE message SET forum = %s, topic = %s, replyto = %s, body" \ 1180 1189 " = %s WHERE id = %s" 1181 context.env.log.debug(sql % (forum, topic, replyto, body, message))1190 self.env.log.debug(sql % (forum, topic, replyto, body, message)) 1182 1191 context.cursor.execute(sql, (forum, topic, replyto, body, message)) discussionplugin/0.11/tracdiscussion/core.py
r2617 r2837 4 4 5 5 from trac.core import * 6 from trac. contextimport Context6 from trac.mimeview import Context 7 7 from trac.config import Option 8 8 from trac.util.html import html … … 13 13 14 14 from tracdiscussion.api import * 15 16 15 17 16 class DiscussionCore(Component): … … 72 71 def process_request(self, req): 73 72 # Create request context. 74 context = Context (self.env,req)('discussion-core')73 context = Context.from_request(req)('discussion-core') 75 74 76 75 # Process request and return content. discussionplugin/0.11/tracdiscussion/notification.py
r2656 r2837 5 5 from trac.notification import NotifyEmail 6 6 from trac.util import format_datetime 7 from trac.util.text import to_unicode 7 8 8 9 from trac.web.chrome import ITemplateProvider … … 79 80 80 81 # Render subject template and send notification. 81 subject = Chrome(self.env).render_template(context.req,82 'discussion-notify-subject.txt', self.data, 'text/plain') 82 subject = to_unicode(Chrome(self.env).render_template(context.req, 83 'discussion-notify-subject.txt', self.data, 'text/plain')) 83 84 NotifyEmail.notify(self, id, subject) 84 85 … … 100 101 header['Message-ID'] = self.get_message_id(self.forum['id'], 101 102 self.topic['id'], self.message['id']) 102 header['X-Trac-Message-ID'] = unicode(self.message['id'])103 header['X-Trac-Message-ID'] = to_unicode(self.message['id']) 103 104 header['X-Trac-Discussion-URL'] = self.message['link'] 104 105 … … 116 117 header['Message-ID'] = self.get_topic_id(self.forum['id'], 117 118 self.topic['id']) 118 header['X-Trac-Topic-ID'] = unicode(self.topic['id'])119 header['X-Trac-Topic-ID'] = to_unicode(self.topic['id']) 119 120 header['X-Trac-Discussion-URL'] = self.topic['link'] 120 121 discussionplugin/0.11/tracdiscussion/search.py
r2352 r2837 2 2 3 3 from trac.core import * 4 from trac. contextimport Context4 from trac.mimeview import Context 5 5 from trac.config import Option 6 6 from trac.search import ISearchSource, shorten_result, search_to_sql … … 27 27 28 28 # Create context. 29 context = Context(self.env, req)('discussion') 30 cursor = context.db.cursor() 29 context = Context.from_request(req)('discussion') 30 31 # Get database access. 32 db = self.env.get_db_cnx() 33 cursor = db.cursor() 31 34 32 35 # Search in topics. 33 query, args = search_to_sql(context.db, ['author', 'subject', 'body'], 34 terms) 36 query, args = search_to_sql(db, ['author', 'subject', 'body'], terms) 35 37 columns = ('id', 'forum', 'time', 'subject', 'body', 'author') 36 38 sql = "SELECT id, forum, time, subject, body, author FROM topic" \ … … 46 48 47 49 # Search in messages 48 query, args = search_to_sql( context.db, ['m.author', 'm.body',50 query, args = search_to_sql(db, ['m.author', 'm.body', 49 51 't.subject'], terms) 50 52 columns = ('id', 'forum', 'topic', 'time', 'author', 'body', 'subject') discussionplugin/0.11/tracdiscussion/templates/discussion-macros.html
r2656 r2837 106 106 <div class="field"> 107 107 <label for="body">Body:</label><br/> 108 <textarea id="body" class="wikitext" name="body" cols="80" rows="20">${req.args.body or ' '}</textarea>108 <textarea id="body" class="wikitext" name="body" cols="80" rows="20">${req.args.body or 'Enter your message here...'}</textarea> 109 109 </div> 110 110 discussionplugin/0.11/tracdiscussion/templates/forum-list.html
r2617 r2837 11 11 <thead> 12 12 <tr py:if="group and group.id != 0"> 13 <th class="group" colspan=" 8">13 <th class="group" colspan="10"> 14 14 <div class="name">${group.name}</div> 15 15 <div class="description">${group.description}</div> discussionplugin/0.11/tracdiscussion/timeline.py
r2352 r2837 1 1 # -*- coding: utf8 -*- 2 2 3 from genshi.builder import tag 4 3 5 from trac.core import * 4 from trac. contextimport Context6 from trac.mimeview import Context 5 7 from trac.config import Option 6 from trac.timeline import ITimelineEventProvider , TimelineEvent8 from trac.timeline import ITimelineEventProvider 7 9 from trac.wiki.formatter import format_to_html, format_to_oneliner 8 10 from trac.util.datefmt import to_timestamp, to_datetime, utc 11 from trac.util.text import to_unicode 9 12 10 13 class DiscussionTimeline(Component): … … 28 31 if ('discussion' in filters) and 'DISCUSSION_VIEW' in req.perm: 29 32 # Create context. 30 context = Context(self.env, req)('discussion') 31 context.cursor = context.db.cursor() 33 context = Context.from_request(req)('discussion') 32 34 33 # Determine timeline format.34 format = req.args.get('format')35 self.log.debug("format: %s" % (format))35 # Get database access. 36 db = self.env.get_db_cnx() 37 context.cursor = db.cursor() 36 38 37 39 # Get forum events 38 40 for forum in self._get_changed_forums(context, start, stop): 39 #Â Prepare event object attributes.40 event = TimelineEvent(self, 'changeset')41 event.set_changeinfo(forum['time'], forum['author'],42 forum['author'] != 'anonymous')43 event.add_markup(title = 'New forum %s' % (forum['name']),44 header = forum['subject'] + ' - ')45 event.add_wiki(context, body = forum['description'])46 event.href_fragment = unicode(forum['id'])47 48 41 # Return event. 49 yield event 42 title = 'New forum %s created' % (forum['name'],) 43 description = tag(forum['subject'], ' - ', forum['description']) 44 href = context.req.href.discussion(forum['id']) 45 yield ('changeset', forum['time'], forum['author'], (title, 46 description, href)) 50 47 51 48 # Get topic events 52 49 for topic in self._get_changed_topics(context, start, stop): 53 #Â Prepare event object attributes. 54 event = TimelineEvent(self, 'newticket') 55 event.set_changeinfo(topic['time'], topic['author'], 56 topic['author'] != 'anonymous') 57 event.add_markup(title = 'New topic on %s' % 58 (topic['forum_name']), header = topic['subject'] + ' - ') 59 event.add_wiki(context, body = topic['body']) 60 event.href_fragment = '%s/%s' % (topic['forum'], topic['id']) 61 62 # Return event. 63 yield event 50 title = 'New topic on %s created' % (topic['forum_name']) 51 description = topic['subject'] 52 href = context.req.href.discussion(topic['forum'], topic['id']) 53 yield ('newticket', topic['time'], topic['author'], (title, 54 description, href)) 64 55 65 56 # Get message events 66 57 for message in self._get_changed_messages(context, start, stop): 67 #Â Prepare event object attributes. 68 event = TimelineEvent(self, 'editedticket') 69 event.set_changeinfo(message['time'], message['author'], 70 message['author'] != 'anonymous') 71 event.add_markup(title = 'New reply on %s' % 72 (message['forum_name']), header = message['topic_subject'] + 73 ' - ') 74 event.add_wiki(context, body = message['body']) 75 event.href_fragment = '%s/%s/%s#%s' % (message['forum'], 76 message['topic'], message['id'], message['id']) 58 title = 'New repy on %s created' % (message['forum_name']) 59 description = message['topic_subject'] 60 href = context.req.href.discussion(message['forum'], 61 message['topic'], message['id']) + '#%s' % (message['id'],) 62 yield ('newticket', message['time'], message['author'], (title, 63 description, href)) 77 64 78 # Return event. 79 yield event 65 def render_timeline_event(self, context, field, event): 66 # Decompose event data. 67 title, description, href = event[3] 80 68 81 def event_formatter(self, event, wikitext_key): 82 return None 69 # Return apropriate content. 70 if field == 'url': 71 return href 72 elif field == 'title': 73 return tag(title) 74 elif field == 'description': 75 return tag(description) 83 76 84 77 # Internal methods. … … 92 85 row = dict(zip(columns, row)) 93 86 row['time'] = to_datetime(row['time'], utc) 87 row['subject'] = format_to_oneliner(self.env, context, 88 row['subject']) 89 row['description'] = format_to_oneliner(self.env, context, 90 row['description']) 94 91 yield row 95 92 … … 105 102 row = dict(zip(columns, row)) 106 103 row['time'] = to_datetime(row['time'], utc) 107 row['subject'] = format_to_oneliner(context, row['subject']) 104 row['subject'] = format_to_oneliner(self.env, context, 105 row['subject']) 108 106 yield row 109 107 … … 120 118 <
