Changeset 2837

Show
Ignore:
Timestamp:
11/28/07 22:57:41 (1 year ago)
Author:
Blackhex
Message:
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • discussionplugin/0.11/tracdiscussion/admin.py

    r2618 r2837  
    44 
    55from trac.core import * 
    6 from trac.context import Context 
     6from trac.mimeview import Context 
    77from trac.web.chrome import add_stylesheet 
    88from trac.wiki import wiki_to_html, wiki_to_oneliner 
     
    3838 
    3939        # Create request context. 
    40         context = Context(self.env, req)('discussion-admin') 
     40        context = Context.from_request(req)('discussion-admin') 
    4141 
    4242        # Process request. 
  • discussionplugin/0.11/tracdiscussion/api.py

    r2619 r2837  
    1010  format_datetime, pretty_timedelta 
    1111from trac.util.html import html 
    12  
    13 from genshi import Markup 
     12from trac.util.text import to_unicode 
     13 
    1414from genshi.template import TemplateLoader 
    1515 
     
    2525 
    2626        # Get database access. 
    27         context.cursor = context.db.cursor() 
     27        db = self.env.get_db_cnx() 
     28        context.cursor = db.cursor() 
    2829 
    2930        # Get request items and modes. 
     
    4748 
    4849        # 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. 
    5379        self.data['authname'] = context.req.authname 
    5480        self.data['is_moderator'] = is_moderator 
     
    5985        self.data['mode'] = modes[-1] 
    6086        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 
    8388 
    8489        # Add CSS styles and scripts. 
     
    8691        add_stylesheet(context.req, 'discussion/css/discussion.css') 
    8792        add_stylesheet(context.req, 'discussion/css/admin.css') 
    88  
    8993        add_script(context.req, 'common/js/trac.js') 
    9094        add_script(context.req, 'common/js/search.js') 
     
    9296 
    9397        # 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) 
    96100        return modes[-1] + '.html', {'discussion' : self.data} 
    97101 
     
    127131        submit = context.req.args.has_key('submit'); 
    128132        self.log.debug('realm: %s, action: %s, preview: %s, submit: %s' % ( 
    129           context.realm, action, preview, submit)) 
     133          context.resource.realm, action, preview, submit)) 
    130134 
    131135        # Determine mode. 
    132136        if message: 
    133             if context.realm == 'discussion-admin': 
     137            if context.resource.realm == 'discussion-admin': 
    134138                pass 
    135             elif context.realm == 'discussion-wiki': 
     139            elif context.resource.realm == 'discussion-wiki': 
    136140                if action == 'add': 
    137141                    return ['message-add', 'wiki-message-list'] 
     
    180184                    return ['message-list'] 
    181185        if topic: 
    182             if context.realm == 'discussion-admin': 
     186            if context.resource.realm == 'discussion-admin': 
    183187                pass 
    184             elif context.realm == 'discussion-wiki': 
     188            elif context.resource.realm == 'discussion-wiki': 
    185189                if action == 'add': 
    186190                    return ['message-add', 'wiki-message-list'] 
     
    231235                    return ['message-list'] 
    232236        elif forum: 
    233             if context.realm == 'discussion-admin': 
     237            if context.resource.realm == 'discussion-admin': 
    234238                if action == 'post-edit': 
    235239                    return ['forum-post-edit', 'admin-forum-list'] 
    236240                else: 
    237241                    return ['admin-forum-list'] 
    238             elif context.realm == 'discussion-wiki': 
     242            elif context.resource.realm == 'discussion-wiki': 
    239243                return ['wiki-message-list'] 
    240244            else: 
     
    251255                    return ['topic-list'] 
    252256        elif group: 
    253             if context.realm == 'discussion-admin': 
     257            if context.resource.realm == 'discussion-admin': 
    254258                if action == 'post-add': 
    255259                    return ['forum-post-add', 'admin-forum-list'] 
     
    263267                    else: 
    264268                        return ['admin-forum-list'] 
    265             elif context.realm == 'discussion-wiki': 
     269            elif context.resource.realm == 'discussion-wiki': 
    266270                return ['wiki-message-list'] 
    267271            else: 
     
    271275                    return ['forum-list'] 
    272276        else: 
    273             if context.realm == 'discussion-admin': 
     277            if context.resource.realm == 'discussion-admin': 
    274278                if action == 'post-add': 
    275279                    return ['group-post-add', 'admin-group-list'] 
     
    278282                else: 
    279283                    return ['admin-group-list'] 
    280             elif context.realm == 'discussion-wiki': 
     284            elif context.resource.realm == 'discussion-wiki': 
    281285                return ['wiki-message-list'] 
    282286            else: 
     
    508512                # Display Add Topic form. 
    509513                if new_subject: 
    510                     self.data['subject'] = format_to_oneliner(context, 
     514                    self.data['subject'] = format_to_oneliner(self.env, context, 
    511515                      new_subject) 
    512516                if new_author: 
    513                     self.data['author'] = format_to_oneliner(context, 
     517                    self.data['author'] = format_to_oneliner(self.env, context, 
    514518                      new_author) 
    515519                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) 
    517522 
    518523            elif mode == 'topic-quote': 
     
    547552                to = self.get_topic_to_recipients(context, new_topic['id']) 
    548553                cc = self.get_topic_cc_recipients(context, new_topic['id']) 
    549                 notifier = DiscussionNotifyEmail(context.env) 
     554                notifier = DiscussionNotifyEmail(self.env) 
    550555                notifier.notify(context, mode, forum, new_topic, None, to, cc) 
    551556 
     
    659664                to = self.get_topic_to_recipients(context, topic['id']) 
    660665                cc = self.get_topic_cc_recipients(context, topic['id']) 
    661                 notifier = DiscussionNotifyEmail(context.env) 
     666                notifier = DiscussionNotifyEmail(self.env) 
    662667                notifier.notify(context, mode, forum, topic, new_message, to, cc) 
    663668 
    664669                # Redirect request to prevent re-submit. 
    665                 if context.realm != 'discussion-wiki': 
     670                if context.resource.realm != 'discussion-wiki': 
    666671                    context.req.redirect(context.req.href.discussion('redirect', 
    667672                      href = context.req.path_info)) 
     
    691696 
    692697                # Redirect request to prevent re-submit. 
    693                 if context.realm != 'discussion-wiki': 
     698                if context.resource.realm != 'discussion-wiki': 
    694699                    context.req.redirect(context.req.href.discussion('redirect', 
    695700                      href = context.req.path_info)) 
     
    704709 
    705710                # Redirect request to prevent re-submit. 
    706                 if context.realm != 'discussion-wiki': 
     711                if context.resource.realm != 'discussion-wiki': 
    707712                    context.req.redirect(context.req.href.discussion('redirect', 
    708713                      href = context.req.path_info)) 
     
    737742        self.log.debug( (new_body,)) 
    738743        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) 
    740745        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) 
    742747        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) 
    744749 
    745750        # Prepare display of messages. 
     
    762767        sql = "SELECT id, forum, topic, replyto, time, author, body FROM" \ 
    763768          " 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),)) 
    766771        for row in context.cursor: 
    767772            row = dict(zip(columns, row)) 
     
    773778        sql = "SELECT id, forum, topic, replyto, time, author, body FROM" \ 
    774779          " message WHERE time = %s" 
    775         context.env.log.debug(sql % (time,)) 
     780        self.env.log.debug(sql % (time,)) 
    776781        context.cursor.execute(sql, (time,)) 
    777782        for row in context.cursor: 
     
    784789        sql = "SELECT id, forum, subject, time, author, body FROM topic WHERE" \ 
    785790          " 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),)) 
    788793        for row in context.cursor: 
    789794            row = dict(zip(columns, row)) 
     
    795800        sql = "SELECT id, forum, subject, time, author, body FROM topic WHERE" \ 
    796801          " time = %s" 
    797         context.env.log.debug(sql % (time,)) 
     802        self.env.log.debug(sql % (time,)) 
    798803        context.cursor.execute(sql, (time,)) 
    799804        for row in context.cursor: 
     
    806811        sql = "SELECT id, forum, subject, time, author, body FROM topic WHERE" \ 
    807812          " subject = %s" 
    808         context.env.log.debug(sql % (subject,)) 
     813        self.env.log.debug(sql % (subject,)) 
    809814        context.cursor.execute(sql, (subject,)) 
    810815        for row in context.cursor: 
     
    816821        sql = "SELECT t.author FROM topic t WHERE t.id = %s UNION SELECT" \ 
    817822          " 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))) 
    820825        to_recipients = [] 
    821826        for row in context.cursor: 
     
    831836        sql = "SELECT id, forum_group, name, subject, time, moderators," \ 
    832837           " 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),)) 
    835840        for row in context.cursor: 
    836841            row = dict(zip(columns, row)) 
     
    842847        columns = ('id', 'name', 'description') 
    843848        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),)) 
    846851        for row in context.cursor: 
    847852            row = dict(zip(columns, row)) 
     
    854859        # Get count of forums without group. 
    855860        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) 
    857862        context.cursor.execute(sql) 
    858863        no_group_forums = 0 
     
    871876          " f.forum_group ORDER BY " + order_by + (" ASC", 
    872877          " DESC")[bool(desc)] 
    873         context.env.log.debug(sql) 
     878        self.env.log.debug(sql) 
    874879        context.cursor.execute(sql) 
    875880        for row in context.cursor: 
    876881            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']) 
    879885            groups.append(row) 
    880886        return groups 
     
    887893           sql = "SELECT COUNT(id) FROM topic t WHERE t.forum = %s AND t.time > %s" 
    888894 
    889            context.env.log.debug(sql % (forum_id, time)) 
     895           self.env.log.debug(sql % (forum_id, time)) 
    890896           context.cursor.execute(sql, (forum_id, time)) 
    891897           for row in context.cursor: 
     
    895901        def _get_new_replies_count(context, forum_id): 
    896902           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,)) 
    898904           context.cursor.execute(sql, (forum_id,)) 
    899905 
     
    909915                 (context.visited_topics[topic_id] or 0)) 
    910916               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)) 
    912918               context.cursor.execute(sql, (topic_id, time)) 
    913919               for row in context.cursor: 
     
    930936          "t.id = ma.topic GROUP BY forum) ta ON f.id = ta.forum ORDER BY " + \ 
    931937          order_by + (" ASC", " DESC")[bool(desc)] 
    932         context.env.log.debug(sql) 
     938        self.env.log.debug(sql) 
    933939        context.cursor.execute(sql) 
    934940 
     
    937943        for row in context.cursor: 
    938944            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']) 
    942951            row['lastreply'] = row['lastreply'] and pretty_timedelta( 
    943952              to_datetime(row['lastreply'], utc)) or 'No replies' 
     
    963972            sql = "SELECT COUNT(id) FROM message m WHERE m.topic = %s AND m.time > %s" 
    964973 
    965             context.env.log.debug(sql % (topic_id, time)) 
     974            self.env.log.debug(sql % (topic_id, time)) 
    966975            context.cursor.execute(sql, (topic_id, time)) 
    967976            for row in context.cursor: 
     
    978987          " topic) m ON t.id = m.topic WHERE t.forum = %s ORDER BY " \ 
    979988          + 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),)) 
    982991 
    983992        # Convert certain topic attributes. 
     
    985994        for row in context.cursor: 
    986995            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']) 
    990999            row['lastreply'] = row['lastreply'] and pretty_timedelta( 
    9911000              to_datetime(row['lastreply'], utc)) or 'No replies' 
     
    10051014        sql = "SELECT m.id, m.replyto, m.time, m.author, m.body FROM message m WHERE" \ 
    10061015          " 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),)) 
    10091018        messagemap = {} 
    10101019        messages = [] 
    10111020        for row in context.cursor: 
    10121021            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']) 
    10151024            if int(row['time']) > time: 
    10161025                row['new'] = True 
     
    10371046        sql = "SELECT m.id, m.replyto, m.time, m.author, m.body FROM message m" \ 
    10381047          " 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),)) 
    10411050        messages = [] 
    10421051        for row in context.cursor: 
    10431052            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']) 
    10461055            if int(row['time']) > time: 
    10471056                row['new'] = True 
     
    10521061    def get_users(self, context): 
    10531062        users = [] 
    1054         for user in context.env.get_known_users(): 
     1063        for user in self.env.get_known_users(): 
    10551064            users.append(user[0]) 
    10561065        return users 
     
    10601069    def add_group(self, context, name, description): 
    10611070        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)) 
    10631072        context.cursor.execute(sql, (name, description)) 
    10641073 
     
    10681077        sql = "INSERT INTO forum (name, author, time, moderators, subject," \ 
    10691078          " 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)), 
    10711080          moderators, subject, description, group)) 
    10721081        context.cursor.execute(sql, (name, author, to_timestamp(datetime.now(utc)), 
     
    10761085        sql = "INSERT INTO topic (forum, subject, time, author, body) VALUES" \ 
    10771086          " (%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)) 
    10791088        context.cursor.execute(sql, (forum, subject, time, author, body)) 
    10801089 
     
    10821091        sql = "INSERT INTO message (forum, topic, replyto, time, author," \ 
    10831092          " 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)) 
    10851094        context.cursor.execute(sql, (forum, topic, replyto, time, author, body)) 
    10861095 
     
    10891098    def delete_group(self, context, group): 
    10901099        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),)) 
    10931102        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),)) 
    10961105 
    10971106    def delete_forum(self, context, forum): 
    10981107        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),)) 
    11011110        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),)) 
    11041113        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),)) 
    11071116 
    11081117    def delete_topic(self, context, topic): 
    11091118        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),)) 
    11121121        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),)) 
    11151124 
    11161125    def delete_message(self, context, message): 
    11171126        # Get message replies. 
    11181127        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),)) 
    11211130        replies = [] 
    11221131 
     
    11311140        # Delete message itself. 
    11321141        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),)) 
    11351144 
    11361145    # Set item functions. 
     
    11401149            group = '0' 
    11411150        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)) 
    11431152        context.cursor.execute(sql, (group, forum)) 
    11441153 
    11451154    def set_forum(self, context, topic, forum): 
    11461155        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)) 
    11481157        context.cursor.execute(sql, (forum, topic)) 
    11491158        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)) 
    11511160        context.cursor.execute(sql, (forum, topic)) 
    11521161 
     
    11551164    def edit_group(self, context, group, name, description): 
    11561165        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)) 
    11581167        context.cursor.execute(sql, (name, description, group)) 
    11591168 
     
    11651174        sql = "UPDATE forum SET name = %s, subject = %s, description = %s," \ 
    11661175          " 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, 
    11681177          group, forum)) 
    11691178        context.cursor.execute(sql, (name, subject, description, moderators, 
     
    11731182        sql = "UPDATE topic SET forum = %s, subject = %s, body = %s WHERE id" \ 
    11741183          " = %s" 
    1175         context.env.log.debug(sql % (forum, subject, body, topic)) 
     1184        self.env.log.debug(sql % (forum, subject, body, topic)) 
    11761185        context.cursor.execute(sql, (forum, subject, body, topic)) 
    11771186 
     
    11791188        sql = "UPDATE message SET forum = %s, topic = %s, replyto = %s, body" \ 
    11801189          " = %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)) 
    11821191        context.cursor.execute(sql, (forum, topic, replyto, body, message)) 
  • discussionplugin/0.11/tracdiscussion/core.py

    r2617 r2837  
    44 
    55from trac.core import * 
    6 from trac.context import Context 
     6from trac.mimeview import Context 
    77from trac.config import Option 
    88from trac.util.html import html 
     
    1313 
    1414from tracdiscussion.api import * 
    15  
    1615 
    1716class DiscussionCore(Component): 
     
    7271    def process_request(self, req): 
    7372        # Create request context. 
    74         context = Context(self.env, req)('discussion-core') 
     73        context = Context.from_request(req)('discussion-core') 
    7574 
    7675        # Process request and return content. 
  • discussionplugin/0.11/tracdiscussion/notification.py

    r2656 r2837  
    55from trac.notification import NotifyEmail 
    66from trac.util import format_datetime 
     7from trac.util.text import to_unicode 
    78 
    89from trac.web.chrome import ITemplateProvider 
     
    7980 
    8081        # 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')) 
    8384        NotifyEmail.notify(self, id, subject) 
    8485 
     
    100101            header['Message-ID'] = self.get_message_id(self.forum['id'], 
    101102              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']) 
    103104            header['X-Trac-Discussion-URL'] = self.message['link'] 
    104105 
     
    116117            header['Message-ID'] = self.get_topic_id(self.forum['id'], 
    117118              self.topic['id']) 
    118             header['X-Trac-Topic-ID'] = unicode(self.topic['id']) 
     119            header['X-Trac-Topic-ID'] = to_unicode(self.topic['id']) 
    119120            header['X-Trac-Discussion-URL'] = self.topic['link'] 
    120121 
  • discussionplugin/0.11/tracdiscussion/search.py

    r2352 r2837  
    22 
    33from trac.core import * 
    4 from trac.context import Context 
     4from trac.mimeview import Context 
    55from trac.config import Option 
    66from trac.search import ISearchSource, shorten_result, search_to_sql 
     
    2727 
    2828        # 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() 
    3134 
    3235        # 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) 
    3537        columns = ('id', 'forum', 'time', 'subject', 'body', 'author') 
    3638        sql = "SELECT id, forum, time, subject, body, author FROM topic" \ 
     
    4648 
    4749        # 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', 
    4951          't.subject'],  terms) 
    5052        columns = ('id', 'forum', 'topic', 'time', 'author', 'body', 'subject') 
  • discussionplugin/0.11/tracdiscussion/templates/discussion-macros.html

    r2656 r2837  
    106106        <div class="field"> 
    107107          <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> 
    109109        </div> 
    110110 
  • discussionplugin/0.11/tracdiscussion/templates/forum-list.html

    r2617 r2837  
    1111      <thead> 
    1212        <tr py:if="group and group.id != 0"> 
    13           <th class="group" colspan="8"> 
     13          <th class="group" colspan="10"> 
    1414            <div class="name">${group.name}</div> 
    1515            <div class="description">${group.description}</div> 
  • discussionplugin/0.11/tracdiscussion/timeline.py

    <
    r2352 r2837  
    11# -*- coding: utf8 -*- 
    22 
     3from genshi.builder import tag 
     4 
    35from trac.core import * 
    4 from trac.context import Context 
     6from trac.mimeview import Context 
    57from trac.config import Option 
    6 from trac.timeline import ITimelineEventProvider, TimelineEvent 
     8from trac.timeline import ITimelineEventProvider 
    79from trac.wiki.formatter import format_to_html, format_to_oneliner 
    810from trac.util.datefmt import to_timestamp, to_datetime, utc 
     11from trac.util.text import to_unicode 
    912 
    1013class DiscussionTimeline(Component): 
     
    2831        if ('discussion' in filters) and 'DISCUSSION_VIEW' in req.perm: 
    2932            # Create context. 
    30             context = Context(self.env, req)('discussion') 
    31             context.cursor = context.db.cursor() 
     33            context = Context.from_request(req)('discussion') 
    3234 
    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(
    3638 
    3739            # Get forum events 
    3840            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  
    4841                # 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)) 
    5047 
    5148            # Get topic events 
    5249            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)) 
    6455 
    6556            # Get message events 
    6657            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)) 
    7764 
    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] 
    8068 
    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) 
    8376 
    8477    # Internal methods. 
     
    9285            row = dict(zip(columns, row)) 
    9386            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']) 
    9491            yield row 
    9592 
     
    105102            row = dict(zip(columns, row)) 
    106103            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']) 
    108106            yield row 
    109107 
     
    120118