Changeset 1006

Show
Ignore:
Timestamp:
07/06/06 15:11:08 (3 years ago)
Author:
Blackhex
Message:

DiscussionPlugin:

  • Search implementation based on #491 (Thanks to jon@licq.org).
  • Possibly bug #478 fix.
  • Bug #486 fix.
  • Bug #485 fix.
  • Display of empty groups bug fix.
  • Some code reorganization.
Files:

Legend:

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

    r909 r1006  
    1313    'TracDiscussion.wiki = tracdiscussion.wiki', 
    1414    'TracDiscussion.timeline = tracdiscussion.timeline', 
    15     'TracDiscussion.admin = tracdiscussion.admin']}, 
     15    'TracDiscussion.admin = tracdiscussion.admin', 
     16    'TracDiscussion.search = tracdiscussion.search']}, 
    1617  keywords = 'trac discussion', 
    1718  author = 'Alec Thomas, Radek Bartoň', 
  • discussionplugin/0.9/tracdiscussion/admin.py

    r981 r1006  
     1from tracdiscussion.api import * 
    12from trac.core import * 
    23from trac.perm import IPermissionRequestor 
     
    5556        if mode == 'group-admin': 
    5657            # Display group list 
    57             req.hdf['discussion.groups'] = self._get_groups(cursor) 
     58            req.hdf['discussion.groups'] = get_groups(cursor, self.env, req, 
     59              self.log) 
    5860        elif mode == 'group-post-add': 
    5961            # Get form values 
     
    6264 
    6365            # Add new group 
    64             self._add_group(cursor, name, description) 
     66            add_group(cursor, self.log, name, description) 
    6567 
    6668            # Display group list 
    67             req.hdf['discussion.groups'] = self._get_groups(cursor) 
     69            req.hdf['discussion.groups'] = get_groups(cursor, self.env, req, 
     70              self.log) 
    6871            mode = 'group-admin' 
    6972        elif mode == 'group-delete': 
     
    7477 
    7578            # Delete selected groups 
    76             self._delete_groups(cursor, selection) 
     79            if selection: 
     80                for group in selection: 
     81                    delete_group(cursor, self.log, group) 
    7782 
    7883            # Display group list 
    79             req.hdf['discussion.groups'] = self._get_groups(cursor) 
     84            req.hdf['discussion.groups'] = get_groups(cursor, self.env, req, 
     85              self.log) 
    8086            mode = 'group-admin' 
    8187        elif mode == 'forum-admin': 
    8288            # Display forum list 
    83             req.hdf['discussion.forums'] = self._get_forums(cursor) 
    84             req.hdf['discussion.groups'] = self._get_groups(cursor) 
     89            req.hdf['discussion.forums'] = get_forums(cursor, self.env, req, 
     90              self.log) 
     91            req.hdf['discussion.groups'] = get_groups(cursor, self.env, req, 
     92              self.log) 
    8593        elif mode == 'forum-post-add': 
    8694            # Get form values 
     
    9098            description = req.args.get('description') 
    9199            moderators = req.args.get('moderators') 
    92             if moderators: 
    93                 moderators = moderators.split(' ') 
    94             else: 
    95                 moderators = '' 
     100            group = req.args.get('group') 
     101 
     102            if not moderators: 
     103                moderators = [] 
     104            if not isinstance(moderators, list): 
     105                moderators = [moderators] 
    96106 
    97107            # Add new forum 
    98             self._add_forum(cursor, name, author, subject, description, moderators) 
     108            add_forum(cursor, self.log, name, author, subject, description, 
     109              moderators, group) 
    99110 
    100111            # Display forum list 
    101             req.hdf['discussion.forums'] = self._get_forums(cursor) 
    102             req.hdf['discussion.groups'] = self._get_groups(cursor) 
     112            req.hdf['discussion.forums'] = get_forums(cursor, self.env, req, 
     113              self.log) 
     114            req.hdf['discussion.groups'] = get_groups(cursor, self.env, req, 
     115              self.log) 
    103116            mode = 'forum-admin' 
    104117        elif mode == 'forum-delete': 
     
    109122 
    110123            # Delete selected forums 
    111             self._delete_forums(cursor, selection) 
     124            if selection: 
     125                for forum in selection: 
     126                    delete_forum(cursor, self.log, forum) 
    112127 
    113128            # Display forum list 
    114             req.hdf['discussion.forums'] = self._get_forums(cursor) 
    115             req.hdf['discussion.groups'] = self._get_groups(cursor) 
     129            req.hdf['discussion.forums'] = get_forums(cursor, self.env, req, 
     130              self.log) 
     131            req.hdf['discussion.groups'] = get_groups(cursor, self.env, req, 
     132              self.log) 
    116133            mode = 'forum-admin' 
    117134        elif mode == 'forum-change-group': 
     
    121138 
    122139            # Set new group 
    123             self._set_group(cursor, forum, group) 
     140            set_group(cursor, self.env, self.log, forum, group) 
    124141 
    125142            # Display forum list 
    126             req.hdf['discussion.forums'] = self._get_forums(cursor) 
    127             req.hdf['discussion.groups'] = self._get_groups(cursor) 
     143            req.hdf['discussion.forums'] = get_forums(cursor, self.env, req, 
     144              self.log) 
     145            req.hdf['discussion.groups'] = get_groups(cursor, self.env, req, 
     146              self.log) 
    128147            mode = 'forum-admin' 
    129148 
    130149        # Fill template values and return mode template 
    131150        req.hdf['discussion.href'] = self.env.href.admin(category, page) 
    132         req.hdf['discussion.users'] = self._get_users(
     151        req.hdf['discussion.users'] = get_users(self.env, self.log
    133152        db.commit() 
    134153        return mode + '.cs', None 
    135  
    136     def _get_groups(self, cursor): 
    137         columns = ('id', 'name', 'description') 
    138         sql = "SELECT id, name, description FROM forum_group" 
    139         self.log.debug(sql) 
    140         cursor.execute(sql) 
    141         groups = [] 
    142         for row in cursor: 
    143             row = dict(zip(columns, row)) 
    144             row['name'] = wiki_to_oneliner(row['name'], self.env) 
    145             row['description'] = wiki_to_oneliner(row['description'], self.env) 
    146             groups.append(row) 
    147         return groups 
    148  
    149     def _get_forums(self, cursor): 
    150         columns = ('id', 'name', 'author', 'moderators', 'group', 'subject', 
    151           'description') 
    152         sql = "SELECT id, name, author, moderators, forum_group, subject," \ 
    153           " description FROM forum" 
    154         self.log.debug(sql) 
    155         cursor.execute(sql) 
    156         forums = [] 
    157         for row in cursor: 
    158             row = dict(zip(columns, row)) 
    159             row['name'] = wiki_to_oneliner(row['name'], self.env) 
    160             row['subject'] = wiki_to_oneliner(row['subject'], self.env) 
    161             row['description'] = wiki_to_oneliner(row['description'], self.env) 
    162             row['moderators'] = wiki_to_oneliner(row['moderators'], self.env) 
    163             forums.append(row) 
    164         return forums 
    165  
    166     def _get_users(self): 
    167         users = [] 
    168         for user in self.env.get_known_users(): 
    169             users.append(user[0]) 
    170         return users 
    171  
    172     def _add_group(self, cursor, name, description): 
    173         sql = "INSERT INTO forum_group (name, description) VALUES ('%s', '%s')" \ 
    174           % (name, description) 
    175         self.log.debug(sql) 
    176         cursor.execute(sql) 
    177  
    178     def _add_forum(self, cursor, name, author, subject, description, moderators): 
    179         moderators = ' '.join(moderators) 
    180         sql = "INSERT INTO forum (name, author, time, moderators, subject," \ 
    181           " description) VALUES ('%s', '%s', %s, '%s', '%s', '%s')" % (name, 
    182           author, str(int(time.time())), moderators, subject, description) 
    183         self.log.debug(sql) 
    184         cursor.execute(sql) 
    185  
    186     def _delete_groups(self, cursor, groups): 
    187         if groups: 
    188             groups = ', '.join(groups) 
    189             sql = "DELETE FROM forum_group WHERE id IN (%s)" % (groups) 
    190             self.log.debug(sql) 
    191             cursor.execute(sql) 
    192             sql = "UPDATE forum SET forum_group = NULL WHERE forum_group IN" \ 
    193               " (%s)" % (groups) 
    194             cursor.execute(sql) 
    195  
    196     def _delete_forums(self, cursor, forums): 
    197         if forums: 
    198             forums = ', '.join(forums) 
    199             sql = "DELETE FROM message WHERE forum IN (%s)" % (forums) 
    200             self.log.debug(sql) 
    201             cursor.execute(sql) 
    202             sql = "DELETE FROM topic WHERE forum IN (%s)" % (forums) 
    203             self.log.debug(sql) 
    204             cursor.execute(sql) 
    205             sql = "DELETE FROM forum WHERE id IN (%s)" % (forums) 
    206             self.log.debug(sql) 
    207             cursor.execute(sql) 
    208  
    209     def _set_group(self, cursor, forum, group): 
    210         if not group: 
    211             group = 'NULL' 
    212         sql = "UPDATE forum SET forum_group = %s WHERE id = %s" % (group, forum) 
    213         self.log.debug(sql) 
    214         cursor.execute(sql) 
  • discussionplugin/0.9/tracdiscussion/api.py

    r981 r1006  
    11from trac.core import * 
    22from trac.wiki import wiki_to_html, wiki_to_oneliner 
    3 from trac.util import format_datetime, pretty_timedelta 
     3from trac.util import format_datetime, pretty_timedelta, escape, unescape 
    44import time 
    55 
     
    99    columns = ('id', 'forum', 'topic', 'replyto', 'time', 'author', 'body') 
    1010    sql = "SELECT id, forum, topic, replyto, time, author, body FROM message" \ 
    11       " WHERE id = %s" % (id) 
    12     log.debug(sql) 
    13     cursor.execute(sql
     11      " WHERE id = %s" 
     12    log.debug(sql) 
     13    cursor.execute(sql, (id,)
    1414    for row in cursor: 
    1515        row = dict(zip(columns, row)) 
     
    2222    columns = ('id', 'forum', 'time', 'subject', 'body', 'author') 
    2323    sql = "SELECT id, forum, time, subject, body, author FROM topic WHERE id =" \ 
    24       " %s" % (id) 
    25     log.debug(sql) 
    26     cursor.execute(sql
     24      " %s" 
     25    log.debug(sql) 
     26    cursor.execute(sql, (id,)
    2727    for row in cursor: 
    2828        row = dict(zip(columns, row)) 
     
    3636    columns = ('id', 'forum', 'time', 'subject', 'body', 'author') 
    3737    sql = "SELECT id, forum, time, subject, body, author FROM topic WHERE subject =" \ 
    38       " '%s'" % (subject) 
    39     log.debug(sql) 
    40     cursor.execute(sql
     38      " %s" 
     39    log.debug(sql) 
     40    cursor.execute(sql, (subject,)
    4141    for row in cursor: 
    4242        row = dict(zip(columns, row)) 
     
    5050    columns = ('name', 'moderators', 'id', 'time', 'subject', 'description') 
    5151    sql = "SELECT name, moderators, id, time, subject, description FROM" \ 
    52       " forum WHERE id = %s" % (id) 
    53     log.debug(sql) 
    54     cursor.execute(sql
     52      " forum WHERE id = %s" 
     53    log.debug(sql) 
     54    cursor.execute(sql, (id,)
    5555    for row in cursor: 
    5656        row = dict(zip(columns, row)) 
     
    6060    return None 
    6161 
     62# Set item functions 
     63 
     64def set_group(cursor, env, log, forum, group): 
     65    if not group: 
     66        group = '0' 
     67    sql = "UPDATE forum SET forum_group = %s WHERE id = %s" 
     68    log.debug(sql) 
     69    cursor.execute(sql, (group, forum)) 
     70 
    6271# Get list of items functions 
     72 
    6373def get_groups(cursor, env, req, log): 
    64     columns = ('id', 'name', 'description') 
    65     sql = "SELECT id, name, description FROM forum_group
     74    # Get count of forums without group 
     75    sql = "SELECT COUNT(id) FROM forum WHERE forum_group = 0
    6676    log.debug(sql) 
    6777    cursor.execute(sql) 
    68     groups = [] 
     78    no_group_forums = 0 
     79    for row in cursor: 
     80       no_group_forums = row[0] 
     81    groups = [{'id' : 0, 'name' : 'None', 'description' : 'No Group', 
     82      'forums' : no_group_forums}] 
     83 
     84    # Get forum groups 
     85    columns = ('id', 'name', 'description', 'forums') 
     86    sql = "SELECT id, name, description, (SELECT COUNT(id) FROM forum f WHERE" \ 
     87      " f.forum_group = forum_group.id) FROM forum_group" 
     88    log.debug(sql) 
     89    cursor.execute(sql) 
    6990    for row in cursor: 
    7091        row = dict(zip(columns, row)) 
     
    7293        row['description'] = wiki_to_oneliner(row['description'], env) 
    7394        groups.append(row) 
     95    log.debug(groups) 
    7496    return groups 
    7597 
     
    87109    for row in cursor: 
    88110        row = dict(zip(columns, row)) 
     111        #row['name'] = wiki_to_oneliner(row['name'], env) 
     112        #row['subject'] = wiki_to_oneliner(row['subject'], env) 
    89113        row['moderators'] = wiki_to_oneliner(row['moderators'], env) 
    90114        row['description'] = wiki_to_oneliner(row['description'], env) 
     
    107131      " FROM message m WHERE m.topic = topic.id), (SELECT MAX(time) FROM" \ 
    108132      " message m WHERE m.topic = topic.id) FROM topic WHERE forum = %s ORDER" \ 
    109       " BY time" % (forum) 
    110     log.debug(sql) 
    111     cursor.execute(sql
     133      " BY time" 
     134    log.debug(sql) 
     135    cursor.execute(sql, (forum,)
    112136    topics = [] 
    113137    for row in cursor: 
     
    126150    columns = ('id', 'replyto', 'time', 'author', 'body') 
    127151    sql = "SELECT id, replyto, time, author, body FROM message WHERE topic =" \ 
    128       " %s ORDER BY time" % (topic) 
    129     log.debug(sql) 
    130     cursor.execute(sql
     152      " %s ORDER BY time" 
     153    log.debug(sql) 
     154    cursor.execute(sql, (topic,)
    131155 
    132156    messagemap = {} 
     
    154178    return messages; 
    155179 
    156 def get_users(env): 
     180def get_users(env, log): 
    157181    users = [] 
    158182    for user in env.get_known_users(): 
     183        log.debug(user) 
    159184        users.append(user[0]) 
    160185    return users 
    161186 
    162187# Add items functions 
     188 
     189def add_group(cursor, log, name, description): 
     190    sql = "INSERT INTO forum_group (name, description) VALUES (%s, %s)" 
     191    log.debug(sql) 
     192    cursor.execute(sql, (name, description)) 
     193 
    163194 
    164195def add_forum(cursor, log, name, author, subject, description, moderators, 
     
    166197    moderators = ' '.join(moderators) 
    167198    if not group: 
    168         group = 'NULL
     199        group = '0
    169200    sql = "INSERT INTO forum (name, author, time, moderators, subject," \ 
    170       " description, forum_group) VALUES ('%s', '%s', %s, '%s', '%s', '%s'," \ 
    171       " %s)" % (name, author, str(int(time.time())), moderators, subject, 
    172       description, group) 
    173     log.debug(sql) 
    174     cursor.execute(sql) 
     201      " description, forum_group) VALUES (%s, %s, %s, %s, %s, %s, %s)" 
     202    log.debug(sql) 
     203    cursor.execute(sql, (name, author, str(int(time.time())), moderators, 
     204      subject, description, group)) 
    175205 
    176206def add_topic(cursor, log, forum, subject, author, body): 
    177207    sql = "INSERT INTO topic (forum, time, author, subject, body) VALUES" \ 
    178       " (%s, %s, '%s', '%s', '%s')" % (forum, str(int(time.time())), author, 
    179       subject, body) 
    180     log.debug(sql) 
    181     cursor.execute(sql) 
     208      " (%s, %s, %s, %s, %s)" 
     209    log.debug(sql) 
     210    cursor.execute(sql, (forum, str(int(time.time())), author, subject, body)) 
    182211 
    183212def add_message(cursor, log, forum, topic, replyto, author, body): 
    184213    sql = "INSERT INTO message (forum, topic, replyto, time, author, body)" \ 
    185       " VALUES (%s, %s, %s, %s, '%s', '%s')" % (forum, topic, replyto, 
    186       str(int(time.time())), author, body
    187     log.debug(sql) 
    188     cursor.execute(sql
     214      " VALUES (%s, %s, %s, %s, %s, %s)" 
     215    log.debug(sql
     216    cursor.execute(sql, (forum, topic, replyto, str(int(time.time())), 
     217      escape(author), escape(body))
    189218 
    190219# Delete items functions 
    191220 
     221def delete_group(cursor, log, group): 
     222    sql = "DELETE FROM forum_group WHERE id = %s" 
     223    log.debug(sql) 
     224    cursor.execute(sql, (group,)) 
     225    sql = "UPDATE forum SET forum_group = 0 WHERE forum_group = %s" 
     226    log.debug(sql) 
     227    cursor.execute(sql, (group,)) 
     228 
    192229def delete_forum(cursor, log, forum): 
    193     sql = "DELETE FROM message WHERE forum = %s" % (forum) 
    194     log.debug(sql) 
    195     cursor.execute(sql
    196     sql = "DELETE FROM topic WHERE forum = %s" % (forum) 
    197     log.debug(sql) 
    198     cursor.execute(sql
    199     sql = "DELETE FROM forum WHERE id = %s" % (forum) 
    200     log.debug(sql) 
    201     cursor.execute(sql
     230    sql = "DELETE FROM message WHERE forum = %s" 
     231    log.debug(sql) 
     232    cursor.execute(sql, (forum,)
     233    sql = "DELETE FROM topic WHERE forum = %s" 
     234    log.debug(sql) 
     235    cursor.execute(sql, (forum,)
     236    sql = "DELETE FROM forum WHERE id = %s" 
     237    log.debug(sql) 
     238    cursor.execute(sql, (forum,)
    202239 
    203240def delete_topic(cursor, log, topic): 
    204     sql = "DELETE FROM message WHERE topic = %s" % (topic) 
    205     log.debug(sql) 
    206     cursor.execute(sql
    207     sql = "DELETE FROM topic WHERE id = %s" % (topic) 
    208     log.debug(sql) 
    209     cursor.execute(sql
     241    sql = "DELETE FROM message WHERE topic = %s" 
     242    log.debug(sql) 
     243    cursor.execute(sql, (topic,)
     244    sql = "DELETE FROM topic WHERE id = %s" 
     245    log.debug(sql) 
     246    cursor.execute(sql, (topic,)
    210247 
    211248def delete_message(cursor, log, message): 
    212249    # Get message replies 
    213     sql = "SELECT id FROM message WHERE replyto = %s" % (message) 
    214     log.debug(sql) 
    215     cursor.execute(sql
     250    sql = "SELECT id FROM message WHERE replyto = %s" 
     251    log.debug(sql) 
     252    cursor.execute(sql, (message,)
    216253    replies = [] 
    217254    for row in cursor: 
     
    223260 
    224261    # Delete message itself 
    225     sql = "DELETE FROM message WHERE id = %s" % (message) 
    226     log.debug(sql) 
    227     cursor.execute(sql
     262    sql = "DELETE FROM message WHERE id = %s" 
     263    log.debug(sql) 
     264    cursor.execute(sql, (message,)
  • discussionplugin/0.9/tracdiscussion/core.py

    r909 r1006  
    153153            req.hdf['discussion.forums'] = get_forums(cursor, self.env, req, 
    154154              self.log) 
     155            self.log.debug(req.hdf.get('discussion.forums')) 
    155156        elif mode == 'forum-add': 
    156157            req.perm.assert_permission('DISCUSSION_MODIFY') 
     
    158159            req.hdf['discussion.groups'] = get_groups(cursor, self.env, req, 
    159160              self.log) 
    160             req.hdf['discussion.users'] = get_users(self.env
     161            req.hdf['discussion.users'] = get_users(self.env, self.log
    161162        elif mode == 'forum-post-add': 
    162163            req.perm.assert_permission('DISCUSSION_MODIFY') 
     
    169170            moderators = req.args.get('moderators') 
    170171            group = req.args.get('group') 
    171             if moderators: 
    172                 moderators = moderators.split(' ') 
    173             else
    174                 moderators = '' 
     172            if not moderators: 
     173                moderators = [] 
     174            if not isinstance(moderators, list)
     175                moderators = [moderators] 
    175176 
    176177            # Add new forum 
  • discussionplugin/0.9/tracdiscussion/db/db1.py

    r981 r1006  
     1# Commont SQL statements 
    12sql = ["""CREATE TABLE forum ( 
    23  id integer PRIMARY KEY, 
     
    2627"""INSERT INTO system (name, value) VALUES ('discussion_version', 1);""" ] 
    2728 
    28 def do_upgrade(cursor): 
    29     for statement in sql: 
    30         cursor.execute(statement) 
     29# PostgreSQL statements 
     30postrge_sql = ["""CREATE TABLE forum ( 
     31  id serial PRIMARY KEY, 
     32  name text, 
     33  time integer, 
     34  moderators text, 
     35  subject text, 
     36  description text 
     37);""", 
     38"""CREATE TABLE topic ( 
     39  id serial PRIMARY KEY, 
     40  forum integer, 
     41  time integer, 
     42  author text, 
     43  subject text, 
     44  body text 
     45);""", 
     46"""CREATE TABLE message ( 
     47  id serial PRIMARY KEY, 
     48  forum integer, 
     49  topic integer, 
     50  replyto integer, 
     51  time integer, 
     52  author text, 
     53  body text 
     54);""", 
     55"""INSERT INTO system (name, value) VALUES ('discussion_version', 1);""" ] 
     56 
     57 
     58def do_upgrade(env, cursor): 
     59    if env.config.get('trac', 'database').startswith('postgres'): 
     60        for statement in postgre_sql: 
     61            cursor.execute(statement) 
     62    else: 
     63        for statement in sql: 
     64            cursor.execute(statement) 
     65 
  • discussionplugin/0.9/tracdiscussion/db/db2.py

    r981 r1006  
     1# Common statements 
    12sql = ["""CREATE TABLE forum_group ( 
    23  id integer PRIMARY KEY, 
     
    89"""UPDATE system SET value = 2 WHERE name='discussion_version';"""] 
    910 
    10 def do_upgrade(cursor): 
    11     for statement in sql: 
    12         cursor.execute(statement) 
     11# PostgreSQL statements 
     12postgre_sql = ["""CREATE TABLE forum_group ( 
     13  id serial PRIMARY KEY, 
     14  name text, 
     15  description text 
     16);""", 
     17"""ALTER TABLE forum ADD COLUMN forum_group integer;""", 
     18"""ALTER TABLE forum ADD COLUMN author text;""", 
     19"""UPDATE system SET value = 2 WHERE name='discussion_version';"""] 
     20 
     21def do_upgrade(env, cursor): 
     22    if env.config.get('trac', 'database').startswith('postgres'): 
     23        for statement in postgre_sql: 
     24            cursor.execute(statement) 
     25    else: 
     26        for statement in sql: 
     27            cursor.execute(statement) 
  • discussionplugin/0.9/tracdiscussion/init.py

    r844 r1006  
    3232            module = __import__('tracdiscussion.db.%s' % (script_name), 
    3333            globals(), locals(), ['do_upgrade']) 
    34             module.do_upgrade(cursor) 
     34            module.do_upgrade(self.env, cursor) 
    3535            #except: 
    3636            #    raise TracError('Error upgrading database to version %i' % I) 
  • discussionplugin/0.9/tracdiscussion/templates/forum-add.cs

    r909 r1006  
    3131      <?cs /if ?> 
    3232    </div> 
    33     <?cs if:discussion.groups.0.id ?> 
     33    <?cs if:discussion.groups.1.id ?> 
    3434      <div class="group"> 
    3535        <label for="group">Forum Group:</label><br/> 
    3636        <select name="group"> 
    37           <option value="">None</option> 
    3837          <?cs each:group = discussion.groups ?> 
    3938            <option value="<?cs var:group.id ?>"><?cs var:group.name ?></option> 
  • discussionplugin/0.9/tracdiscussion/templates/forum-admin.cs

    r909 r1006  
    4242      <?cs /if ?> 
    4343    </div> 
     44    <?cs if:discussion.groups.1.id ?> 
     45      <div class="group"> 
     46        <label for="group">Forum Group:</label><br/> 
     47        <select name="group"> 
     48          <?cs each:group = discussion.groups ?> 
     49            <option value="<?cs var:group.id ?>"><?cs var:group.name ?></option> 
     50          <?cs /each ?> 
     51        </select><br/> 
     52      </div> 
     53    <?cs else ?> 
     54      <input type="hidden" name="group" value=""/> 
     55    <?cs /if ?> 
    4456    <div class="buttons"> 
    4557      <input type="submit" name="submit" value="Add"/> 
     
    5971          <th class="description">Description</th> 
    6072          <th class="moderators">Moderators</th> 
    61           <?cs if:discussion.groups.0.id ?> 
     73          <?cs if:discussion.groups.1.id ?> 
    6274            <th class="group">Group</th> 
    6375          <?cs /if ?> 
     
    8294              <div class="moderators"><?cs var:forum.moderators ?></div> 
    8395            </td> 
    84             <?cs if:discussion.groups.0.id ?> 
     96            <?cs if:discussion.groups.1.id ?> 
    8597              <td class="group"> 
    8698                <div class="group"> 
    8799                  <select id="group-select-<?cs var:forum.id ?>" name="group-<?cs var:forum.id ?>" onChange="submit_group_change(<?cs var:forum.id ?>)"> 
    88                     <option value="">None</option> 
    89100                    <?cs each:group = discussion.groups ?> 
    90101                      <?cs if:group.id == forum.group ?> 
  • discussionplugin/0.9/tracdiscussion/templates/forum-list.cs

    r909 r1006  
    7171<h1>Forum List</h1> 
    7272 
    73 <?cs call:display_group(nogroup, discussion.forums) ?> 
    7473<?cs each:group = discussion.groups ?> 
    75   <?cs call:display_group(group, discussion.forums) ?> 
     74  <?cs if:group.forums ?> 
     75    <?cs call:display_group(group, discussion.forums) ?> 
     76  <?cs /if ?> 
    7677<?cs /each ?> 
    7778 
  • discussionplugin/0.9/tracdiscussion/templates/group-admin.cs

    r909 r1006  
    2121</form> 
    2222 
    23 <?cs if:discussion.groups.0.name ?> 
     23<?cs if:discussion.groups.1.id ?> 
    2424  <form class="forum-list" method="post"> 
    2525    <table class="listing"> 
     
    3333      </tbody> 
    3434        <?cs each:group = discussion.groups ?> 
    35           <tr class="<?cs if:name(group) % #2 ?>even<?cs else ?>odd<?cs /if ?>"> 
    36             <td class="selection"> 
    37               <input type="checkbox" name="selection" value="<?cs var:group.id ?>"/> 
    38             </td> 
    39             <td class="name"> 
    40               <div class="name"><?cs var:group.name ?></div> 
    41             </td> 
    42             <td class="description"> 
    43               <div class="description" ><?cs var:group.description ?></div> 
    44             </td> 
    45           </tr> 
     35          <?cs if:group.id ?> 
     36            <tr class="<?cs if:name(group) % #2 ?>even<?cs else ?>odd<?cs /if ?>"> 
     37              <td class="selection"> 
     38                <input type="checkbox" name="selection" value="<?cs var:group.id ?>"/> 
     39              </td> 
     40              <td class="name"> 
     41                <div class="name"><?cs var:group.name ?></div> 
     42              </td> 
     43              <td class="description"> 
     44                <div class="description" ><?cs var:group.description ?></div> 
     45              </td> 
     46            </tr> 
     47          <?cs /if ?> 
    4648        <?cs /each ?> 
    4749      </tbody> 
  • discussionplugin/0.9/tracdiscussion/timeline.py

    r981 r1006  
    7979        columns = ('id', 'name', 'author', 'subject', 'description', 'time') 
    8080        sql = "SELECT id, name, author, subject, description, time FROM forum" \ 
    81           " WHERE time BETWEEN %s AND %s" % (start, stop) 
     81          " WHERE time BETWEEN %s AND %s" 
    8282        self.log.debug(sql) 
    83         cursor.execute(sql
     83        cursor.execute(sql, (start, stop)
    8484        for row in cursor: 
    8585            row = dict(zip(columns, row)) 
     
    8989        columns = ('id', 'subject', 'author', 'time', 'forum', 'forum_name') 
    9090        sql = "SELECT id, subject, author, time, forum, (SELECT name FROM forum" \ 
    91           " f WHERE f.id = topic.forum) FROM topic WHERE time BETWEEN %s AND %s" \ 
    92           % (start, stop) 
     91          " f WHERE f.id = topic.forum) FROM topic WHERE time BETWEEN %s AND %s" 
    9392        self.log.debug(sql) 
    94         cursor.execute(sql
     93        cursor.execute(sql, (start, stop)
    9594        for row in cursor: 
    9695            row = dict(zip(columns, row)) 
     
    102101        sql = "SELECT id, author, time, forum, topic, (SELECT name FROM forum f" \ 
    103102          " WHERE f.id = message.forum), (SELECT subject FROM topic t WHERE" \ 
    104           " t.id = message.topic) FROM message WHERE time BETWEEN %s AND %s" \ 
    105           % (start, stop) 
     103          " t.id = message.topic) FROM message WHERE time BETWEEN %s AND %s" 
    106104        self.log.debug(sql) 
    107         cursor.execute(sql
     105        cursor.execute(sql, (start, stop)
    108106        for row in cursor: 
    109107            row = dict(zip(columns, row)) 
  • discussionplugin/0.9/tracdiscussion/wiki.py

    r981 r1006  
    146146        if ns == 'forum': 
    147147            columns = ('subject',) 
    148             sql = "SELECT subject FROM forum WHERE id = %s" % (id) 
     148            sql = "SELECT subject FROM forum WHERE id = %s" 
    149149            self.log.debug(sql) 
    150             cursor.execute(sql
     150            cursor.execute(sql, (id,)
    151151            for row in cursor: 
    152152                row = dict(zip(columns, row)) 
     
    158158            columns = ('forum', 'forum_subject', 'subject') 
    159159            sql = "SELECT forum, (SELECT subject FROM forum WHERE id =" \ 
    160               " topic.forum), subject FROM topic WHERE id = %s" % (id) 
     160              " topic.forum), subject FROM topic WHERE id = %s" 
    161161            self.log.debug(sql) 
    162             cursor.execute(sql
     162            cursor.execute(sql, (id,)
    163163            for row in cursor: 
    164164                row = dict(zip(columns, row)) 
     
    173173            sql = "SELECT forum, topic, (SELECT subject FROM forum WHERE id =" \ 
    174174              " message.forum), (SELECT subject FROM topic WHERE id =" \ 
    175               " message.topic) FROM message WHERE id = %s" % (id) 
     175              " message.topic) FROM message WHERE id = %s" 
    176176            self.log.debug(sql) 
    177             cursor.execute(sql
     177            cursor.execute(sql, (id,)
    178178            for row in cursor: 
    179179                row = dict(zip(columns, row))