Changeset 1987

Show
Ignore:
Timestamp:
02/16/07 14:37:17 (2 years ago)
Author:
Blackhex
Message:

DiscussionPlugin:

  • Bug #794 fix.
  • Bug #1210 fix.
  • Bug #1057 fix.
  • Bug Float value returned for replies count on PosgreSQL fix.
  • Basic e-mail notification.
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • discussionplugin/0.10/setup.py

    r1252 r1987  
    1414    'TracDiscussion.timeline = tracdiscussion.timeline', 
    1515    'TracDiscussion.admin = tracdiscussion.admin', 
    16     'TracDiscussion.search = tracdiscussion.search']}, 
     16    'TracDiscussion.search = tracdiscussion.search', 
     17    'TracDiscussion.notification = tracdiscussion.notification']}, 
    1718  install_requires = ['TracWebAdmin'], 
    1819  keywords = 'trac discussion', 
  • discussionplugin/0.10/tracdiscussion/api.py

    r1941 r1987  
    11# -*- coding: utf8 -*- 
    22 
     3from tracdiscussion.notification import * 
    34from trac.core import * 
    45from trac.web.chrome import add_stylesheet 
    56from trac.wiki import wiki_to_html, wiki_to_oneliner 
    67from trac.perm import PermissionError 
    7 from trac.util import format_datetime, pretty_timedelta, Markup 
     8from trac.util import format_datetime, pretty_timedelta 
    89import time 
    910 
     
    9091            message = self.get_message(cursor, message_id) 
    9192 
     93        self.log.debug('group: %s' % group) 
     94        self.log.debug('forum: %s' % forum) 
     95        self.log.debug('topic: %s' % topic) 
    9296        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) 
    9697        return group, forum, topic, message 
    9798 
     
    308309 
    309310                # 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'
    312313 
    313314                # Add new group. 
     
    318319 
    319320                # 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'
    323324 
    324325                # Edit group. 
     
    339340                if selection: 
    340341                    for group_id in selection: 
    341                         self.delete_group(cursor, group_id
     342                        self.delete_group(cursor, int(group_id)
    342343 
    343344            elif mode == 'forum-list': 
     
    389390 
    390391                # Get form values 
    391                 new_name = Markup(req.args.get('name')
     392                new_name = req.args.get('name'
    392393                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'
    395396                new_moderators = req.args.get('moderators') 
    396                 new_group = req.args.get('group'
     397                new_group = int(req.args.get('group') or 0
    397398                if not new_moderators: 
    398399                    new_moderators = [] 
     
    408409 
    409410                # 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'
    414415                new_moderators = req.args.get('moderators') 
    415                 new_group = req.args.get('group'
     416                new_group = int(req.args.get('group') or 0
    416417                if not new_moderators: 
    417418                    new_moderators = [] 
     
    440441                if selection: 
    441442                    for forum_id in selection: 
    442                         self.delete_forum(cursor, forum_id
     443                        self.delete_forum(cursor, int(forum_id)
    443444 
    444445            elif mode == 'topic-list': 
     
    459460 
    460461                # 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'
    464465 
    465466                # Display Add Topic form. 
     
    487488 
    488489                # 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) 
    496505 
    497506            elif mode == 'topic-edit': 
     
    510519 
    511520                # 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'
    514523 
    515524                # Edit topic. 
     
    533542 
    534543                # Get form values 
    535                 new_forum = req.args.get('new_forum'
     544                new_forum = int(req.args.get('new_forum') or 0
    536545 
    537546                # Move topic. 
     
    550559 
    551560                # 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'
    555564 
    556565                # Get time when topic was visited from session. 
     
    606615 
    607616                # 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. 
    612622                if message: 
    613623                    self.add_message(cursor, forum['id'], topic['id'], 
    614                       message['id'], new_author, new_body) 
     624                      message['id'], new_time, new_author, new_body) 
    615625                else: 
    616626                    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) 
    618635 
    619636            elif mode == 'message-edit': 
     
    631648 
    632649                # Get form values. 
    633                 new_body = Markup(req.args.get('body')
     650                new_body = req.args.get('body'
    634651 
    635652                # Edit message. 
     
    668685        return None 
    669686 
     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 
    670698    def get_topic(self, cursor, id): 
    671         columns = ('id', 'forum', 'time', 'subject', 'body', 'author') 
    672         sql = "SELECT id, forum, time, subject, body, author FROM topic WHERE" \ 
     699        columns = ('id', 'forum', 'subject', 'time', 'author', 'body') 
     700        sql = "SELECT id, forum, subject, time, author, body FROM topic WHERE" \ 
    673701          " id = %s" 
    674702        self.log.debug(sql % (id,)) 
     
    679707        return None 
    680708 
     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 
    681720    def get_topic_by_subject(self, cursor, subject): 
    682         columns = ('id', 'forum', 'time', 'subject', 'body', 'author') 
    683         sql = "SELECT id, forum, time, subject, body, author FROM topic WHERE" \ 
     721        columns = ('id', 'forum', 'subject', 'time', 'author', 'body') 
     722        sql = "SELECT id, forum, subject, time, author, body FROM topic WHERE" \ 
    684723          " subject = '%s'" % (subject) 
    685724        self.log.debug(sql) 
     
    691730 
    692731    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_group FROM 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" 
    697736        self.log.debug(sql % (id,)) 
    698737        cursor.execute(sql, (id,)) 
     
    827866            if not row['replies']: 
    828867                row['replies'] = 0 
     868            else: 
     869                # SUM on PosgreSQL returns float number. 
     870                row['replies'] = int(row['replies']) 
    829871            row['time'] = format_datetime(row['time']) 
    830872            forums.append(row) 
     
    924966      group): 
    925967        moderators = ' '.join(moderators) 
    926         if not group: 
    927             group = '0' 
    928968        sql = "INSERT INTO forum (name, author, time, moderators, subject," \ 
    929969          " description, forum_group) VALUES (%s, %s, %s, %s, %s, %s, %s)" 
     
    933973          subject, description, group)) 
    934974 
    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" \ 
    937977          " (%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): 
    942982        sql = "INSERT INTO message (forum, topic, replyto, time, author," \ 
    943983          " 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)) 
    948986 
    949987    # Delete items functions 
     
    9821020        cursor.execute(sql, (message,)) 
    9831021        replies = [] 
     1022 
     1023        # Get all replies first. 
    9841024        for row in cursor: 
    9851025            replies.append(row[0]) 
  • discussionplugin/0.10/tracdiscussion/search.py

    r1497 r1987  
    3737        for row in cursor: 
    3838            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', 
    4040              "topic: %d: %s" % (row['id'], util.shorten_line(row['subject'])), 
    4141              row['time'], row['author'], shorten_result(row['body'], 
     
    5252        for row in cursor: 
    5353            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  
    3535                author = forum['author'] 
    3636                if format == 'rss': 
    37                     href = self.env.abs_href.discussion(forum['id']) 
     37                    href = req.abs_href.discussion(forum['id']) 
    3838                    message = wiki_to_html('%s - %s' % (forum['subject'], 
    3939                      forum['description']), self.env, req, db) 
    4040                else: 
    41                     href = self.env.href.discussion(forum['id']) 
     41                    href = req.href.discussion(forum['id']) 
    4242                    message = wiki_to_oneliner('%s - %s' % (forum['subject'], 
    4343                      forum['description']), self.env, db)   
     
    5353                author = topic['author'] 
    5454                if format == 'rss': 
    55                     href = self.env.abs_href.discussion(topic['forum'], 
     55                    href = req.abs_href.discussion(topic['forum'], 
    5656                      topic['id']) 
    5757                    message = wiki_to_html(topic['subject'], self.env, req, db) 
    5858                else: 
    59                     href = self.env.href.discussion(topic['forum'], topic['id']) 
     59                    href = req.href.discussion(topic['forum'], topic['id']) 
    6060                    message = wiki_to_oneliner(topic['subject'], self.env, db) 
    6161                yield kind, href, title, time, author, message 
     
    7070                author = message['author'] 
    7171                if format == 'rss': 
    72                     href = self.env.abs_href.discussion(message['forum'], 
     72                    href = req.abs_href.discussion(message['forum'], 
    7373                      message['topic'], message['id']) + '#%s' % (message['id']) 
    7474                    message = wiki_to_html(message['topic_subject'], self.env, 
    7575                      req, db) 
    7676                else: 
    77                     href = self.env.href.discussion(message['forum'], 
     77                    href = req.href.discussion(message['forum'], 
    7878                      message['topic'], message['id']) + '#%s' % (message['id']) 
    7979                    message = wiki_to_oneliner(message['topic_subject'], 
     
    9898        columns = ('id', 'subject', 'author', 'time', 'forum', 'forum_name') 
    9999        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 
    102103        self.log.debug(sql % (start, stop)) 
    103104        cursor.execute(sql, (start, stop)) 
     
    110111          'topic_subject') 
    111112        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 
    115117        self.log.debug(sql % (start, stop)) 
    116118        cursor.execute(sql, (start, stop))