summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 6fb57a4)
raw | patch | inline | side by side (parent: 6fb57a4)
author | richard <richard@57a73879-2fb5-44c3-a270-3262357dd7e2> | |
Tue, 10 Sep 2002 00:08:21 +0000 (00:08 +0000) | ||
committer | richard <richard@57a73879-2fb5-44c3-a270-3262357dd7e2> | |
Tue, 10 Sep 2002 00:08:21 +0000 (00:08 +0000) |
git-svn-id: http://svn.roundup-tracker.org/svnroot/roundup/trunk@1107 57a73879-2fb5-44c3-a270-3262357dd7e2
24 files changed:
diff --git a/roundup/templates/extended/.cvsignore b/roundup/templates/extended/.cvsignore
+++ /dev/null
@@ -1,4 +0,0 @@
-*.pyc
-*.pyo
-htmlbase.py
-*.cover
diff --git a/roundup/templates/extended/__init__.py b/roundup/templates/extended/__init__.py
+++ /dev/null
@@ -1,52 +0,0 @@
-#
-# Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/)
-# This module is free software, and you may redistribute it and/or modify
-# under the same terms as Python, so long as this copyright message and
-# disclaimer are retained in their original form.
-#
-# IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR
-# DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING
-# OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-#
-# BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
-# BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-# FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS"
-# BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
-# SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
-#
-# $Id: __init__.py,v 1.7 2001-08-07 00:24:43 richard Exp $
-
-from instance_config import *
-try:
- from dbinit import *
-except ImportError:
- pass # in installdir (probably :)
-
-from interfaces import *
-
-#
-# $Log: not supported by cvs2svn $
-# Revision 1.6 2001/08/07 00:15:51 richard
-# Added the copyright/license notice to (nearly) all files at request of
-# Bizar Software.
-#
-# Revision 1.5 2001/07/29 07:01:39 richard
-# Added vim command to all source so that we don't get no steenkin' tabs :)
-#
-# Revision 1.4 2001/07/24 10:46:22 anthonybaxter
-# Added templatebuilder module. two functions - one to pack up the html base,
-# one to unpack it. Packed up the two standard templates into htmlbases.
-# Modified __init__ to install them.
-#
-# __init__.py magic was needed for the rather high levels of wierd import magic.
-# Reducing level of import magic == (good, future)
-#
-# Revision 1.3 2001/07/23 23:16:01 richard
-# Split off the interfaces (CGI, mailgw) into a separate file from the DB stuff.
-#
-# Revision 1.2 2001/07/23 04:33:21 anthonybaxter
-# split __init__.py into 2. dbinit and instance_config.
-#
-#
-# vim: set filetype=python ts=4 sw=4 et si
diff --git a/roundup/templates/extended/dbinit.py b/roundup/templates/extended/dbinit.py
+++ /dev/null
@@ -1,383 +0,0 @@
-#
-# Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/)
-# This module is free software, and you may redistribute it and/or modify
-# under the same terms as Python, so long as this copyright message and
-# disclaimer are retained in their original form.
-#
-# IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR
-# DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING
-# OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-#
-# BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
-# BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-# FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS"
-# BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
-# SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
-#
-# $Id: dbinit.py,v 1.25 2002-08-01 00:56:22 richard Exp $
-
-import os
-
-import instance_config
-from select_db import Database, Class, FileClass, IssueClass
-
-def open(name=None):
- ''' as from the roundupdb method openDB
- '''
- from roundup.hyperdb import String, Password, Date, Link, Multilink
-
- # open the database
- db = Database(instance_config, name)
-
- #
- # Now initialise the schema. Must do this each time the database is
- # opened.
- #
-
- # Class automatically gets these properties:
- # creation = Date()
- # activity = Date()
- # creator = Link('user')
- pri = Class(db, "priority",
- name=String(), order=String())
- pri.setkey("name")
-
- stat = Class(db, "status",
- name=String(), order=String())
- stat.setkey("name")
-
- keywords = Class(db, "keyword",
- name=String())
- keywords.setkey("name")
-
- user = Class(db, "user",
- username=String(), password=Password(),
- address=String(), realname=String(),
- phone=String(), organisation=String(),
- alternate_addresses=String(),
- queries=Multilink('query'), roles=String())
- user.setkey("username")
-
- # FileClass automatically gets these properties:
- # content = String() [saved to disk in <instance home>/db/files/]
- # (it also gets the Class properties creation, activity and creator)
- msg = FileClass(db, "msg",
- author=Link("user"), recipients=Multilink("user"),
- date=Date(), summary=String(),
- files=Multilink("file"),
- messageid=String(), inreplyto=String())
-
- file = FileClass(db, "file",
- name=String(), type=String())
-
- # bugs and support calls etc
- rate = Class(db, "rate",
- name=String(), order=String())
- rate.setkey("name")
-
- source = Class(db, "source",
- name=String(), order=String())
- source.setkey("name")
-
- platform = Class(db, "platform",
- name=String(), order=String())
- platform.setkey("name")
-
- product = Class(db, "product",
- name=String(), order=String())
- product.setkey("name")
-
- timelog = Class(db, "timelog",
- date=Date(), time=String(),
- performedby=Link("user"), description=String())
-
- # IssueClass automatically gets these properties:
- # title = String()
- # messages = Multilink("msg")
- # files = Multilink("file")
- # nosy = Multilink("user")
- # superseder = Multilink("issue")
- # (it also gets the Class properties creation, activity and creator)
- support = IssueClass(db, "support",
- assignedto=Link("user"), status=Link("status"),
- rate=Link("rate"), source=Link("source"),
- product=Link("product"), platform=Multilink("platform"),
- version=String(), timelog=Multilink("timelog"),
- customername=String())
-
- issue = IssueClass(db, "issue",
- assignedto=Link("user"), priority=Link("priority"),
- status=Link("status"), product=Link("product"),
- platform=Multilink("platform"), version=String(),
- targetversion=String(), supportcall=Multilink("support"))
-
- #
- # SECURITY SETTINGS
- #
- # new permissions for this schema
- for cl in 'issue', 'support', 'file', 'msg':
- db.security.addPermission(name="Edit", klass=cl,
- description="User is allowed to edit "+cl)
- db.security.addPermission(name="View", klass=cl,
- description="User is allowed to access "+cl)
-
- # Assign the access and edit permissions for issue, file and message
- # to regular users now
- for cl in 'issue', 'support', 'file', 'msg':
- p = db.security.getPermission('View', cl)
- db.security.addPermissionToRole('User', p)
- p = db.security.getPermission('Edit', cl)
- db.security.addPermissionToRole('User', p)
- # and give the regular users access to the web and email interface
- p = db.security.getPermission('Web Access')
- db.security.addPermissionToRole('User', p)
- p = db.security.getPermission('Email Access')
- db.security.addPermissionToRole('User', p)
-
- # Assign the appropriate permissions to the anonymous user's Anonymous
- # Role. Choices here are:
- # - Allow anonymous users to register through the web
- p = db.security.getPermission('Web Registration')
- db.security.addPermissionToRole('Anonymous', p)
- # - Allow anonymous (new) users to register through the email gateway
- p = db.security.getPermission('Email Registration')
- db.security.addPermissionToRole('Anonymous', p)
- # - Allow anonymous users access to the "issue" class of data
- # Note: this also grants access to related information like files,
- # messages, statuses etc that are linked to issues
- #p = db.security.getPermission('View', 'issue')
- #db.security.addPermissionToRole('Anonymous', p)
- # - Allow anonymous users access to edit the "issue" class of data
- # Note: this also grants access to create related information like
- # files and messages etc that are linked to issues
- #p = db.security.getPermission('Edit', 'issue')
- #db.security.addPermissionToRole('Anonymous', p)
-
- # oh, g'wan, let anonymous access the web interface too
- p = db.security.getPermission('Web Access')
- db.security.addPermissionToRole('Anonymous', p)
-
- import detectors
- detectors.init(db)
-
- # schema is set up - run any post-initialisation
- db.post_init()
- return db
-
-def init(adminpw):
- ''' as from the roundupdb method initDB
-
- Open the new database, and add new nodes - used for initialisation. You
- can edit this before running the "roundup-admin initialise" command to
- change the initial database entries.
- '''
- dbdir = os.path.join(instance_config.DATABASE, 'files')
- if not os.path.isdir(dbdir):
- os.makedirs(dbdir)
-
- db = open("admin")
- db.clear()
-
- pri = db.getclass('priority')
- pri.create(name="fatal-bug", order="1")
- pri.create(name="bug", order="2")
- pri.create(name="usability", order="3")
- pri.create(name="feature", order="4")
-
- stat = db.getclass('status')
- stat.create(name="unread", order="1")
- stat.create(name="deferred", order="2")
- stat.create(name="chatting", order="3")
- stat.create(name="need-eg", order="4")
- stat.create(name="in-progress", order="5")
- stat.create(name="testing", order="6")
- stat.create(name="done-cbb", order="7")
- stat.create(name="resolved", order="8")
-
- rate = db.getclass("rate")
- rate.create(name='basic', order="1")
- rate.create(name='premium', order="2")
- rate.create(name='internal', order="3")
-
- source = db.getclass("source")
- source.create(name='phone', order="1")
- source.create(name='e-mail', order="2")
- source.create(name='internal', order="3")
- source.create(name='internal-qa', order="4")
-
- platform = db.getclass("platform")
- platform.create(name='linux', order="1")
- platform.create(name='windows', order="2")
- platform.create(name='mac', order="3")
-
- product = db.getclass("product")
- product.create(name='Bizar Shop', order="1")
- product.create(name='Bizar Shop Developer', order="2")
- product.create(name='Bizar Shop Manual', order="3")
- product.create(name='Bizar Shop Developer Manual', order="4")
-
- user = db.getclass('user')
- user.create(username="admin", password=adminpw,
- address=instance_config.ADMIN_EMAIL, roles="Admin")
- user.create(username="anonymous", roles='Anonymous')
-
- db.commit()
-
-#
-# $Log: not supported by cvs2svn $
-# Revision 1.24 2002/07/26 08:27:00 richard
-# Very close now. The cgi and mailgw now use the new security API. The two
-# templates have been migrated to that setup. Lots of unit tests. Still some
-# issue in the web form for editing Roles assigned to users.
-#
-# Revision 1.23 2002/07/14 02:05:54 richard
-# . all storage-specific code (ie. backend) is now implemented by the backends
-#
-# Revision 1.22 2002/07/09 03:02:53 richard
-# More indexer work:
-# - all String properties may now be indexed too. Currently there's a bit of
-# "issue" specific code in the actual searching which needs to be
-# addressed. In a nutshell:
-# + pass 'indexme="yes"' as a String() property initialisation arg, eg:
-# file = FileClass(db, "file", name=String(), type=String(),
-# comment=String(indexme="yes"))
-# + the comment will then be indexed and be searchable, with the results
-# related back to the issue that the file is linked to
-# - as a result of this work, the FileClass has a default MIME type that may
-# be overridden in a subclass, or by the use of a "type" property as is
-# done in the default templates.
-# - the regeneration of the indexes (if necessary) is done once the schema is
-# set up in the dbinit.
-#
-# Revision 1.21 2002/05/24 04:03:23 richard
-# Added commentage to the dbinit files to help people with their
-# customisation.
-#
-# Revision 1.20 2002/02/15 07:08:44 richard
-# . Alternate email addresses are now available for users. See the MIGRATION
-# file for info on how to activate the feature.
-#
-# Revision 1.19 2002/01/14 02:20:15 richard
-# . changed all config accesses so they access either the instance or the
-# config attriubute on the db. This means that all config is obtained from
-# instance_config instead of the mish-mash of classes. This will make
-# switching to a ConfigParser setup easier too, I hope.
-#
-# At a minimum, this makes migration a _little_ easier (a lot easier in the
-# 0.5.0 switch, I hope!)
-#
-# Revision 1.18 2002/01/02 02:31:38 richard
-# Sorry for the huge checkin message - I was only intending to implement #496356
-# but I found a number of places where things had been broken by transactions:
-# . modified ROUNDUPDBSENDMAILDEBUG to be SENDMAILDEBUG and hold a filename
-# for _all_ roundup-generated smtp messages to be sent to.
-# . the transaction cache had broken the roundupdb.Class set() reactors
-# . newly-created author users in the mailgw weren't being committed to the db
-#
-# Stuff that made it into CHANGES.txt (ie. the stuff I was actually working
-# on when I found that stuff :):
-# . #496356 ] Use threading in messages
-# . detectors were being registered multiple times
-# . added tests for mailgw
-# . much better attaching of erroneous messages in the mail gateway
-#
-# Revision 1.17 2001/12/02 05:06:16 richard
-# . We now use weakrefs in the Classes to keep the database reference, so
-# the close() method on the database is no longer needed.
-# I bumped the minimum python requirement up to 2.1 accordingly.
-# . #487480 ] roundup-server
-# . #487476 ] INSTALL.txt
-#
-# I also cleaned up the change message / post-edit stuff in the cgi client.
-# There's now a clearly marked "TODO: append the change note" where I believe
-# the change note should be added there. The "changes" list will obviously
-# have to be modified to be a dict of the changes, or somesuch.
-#
-# More testing needed.
-#
-# Revision 1.16 2001/12/01 07:17:50 richard
-# . We now have basic transaction support! Information is only written to
-# the database when the commit() method is called. Only the anydbm
-# backend is modified in this way - neither of the bsddb backends have been.
-# The mail, admin and cgi interfaces all use commit (except the admin tool
-# doesn't have a commit command, so interactive users can't commit...)
-# . Fixed login/registration forwarding the user to the right page (or not,
-# on a failure)
-#
-# Revision 1.15 2001/11/26 22:55:56 richard
-# Feature:
-# . Added INSTANCE_NAME to configuration - used in web and email to identify
-# the instance.
-# . Added EMAIL_SIGNATURE_POSITION to indicate where to place the roundup
-# signature info in e-mails.
-# . Some more flexibility in the mail gateway and more error handling.
-# . Login now takes you to the page you back to the were denied access to.
-#
-# Fixed:
-# . Lots of bugs, thanks Roché and others on the devel mailing list!
-#
-# Revision 1.14 2001/11/21 02:34:18 richard
-# Added a target version field to the extended issue schema
-#
-# Revision 1.13 2001/10/30 00:54:45 richard
-# Features:
-# . #467129 ] Lossage when username=e-mail-address
-# . #473123 ] Change message generation for author
-# . MailGW now moves 'resolved' to 'chatting' on receiving e-mail for an issue.
-#
-# Revision 1.12 2001/10/09 07:25:59 richard
-# Added the Password property type. See "pydoc roundup.password" for
-# implementation details. Have updated some of the documentation too.
-#
-# Revision 1.11 2001/08/07 00:24:43 richard
-# stupid typo
-#
-# Revision 1.10 2001/08/07 00:15:51 richard
-# Added the copyright/license notice to (nearly) all files at request of
-# Bizar Software.
-#
-# Revision 1.9 2001/08/02 06:38:17 richard
-# Roundupdb now appends "mailing list" information to its messages which
-# include the e-mail address and web interface address. Templates may
-# override this in their db classes to include specific information (support
-# instructions, etc).
-#
-# Revision 1.8 2001/07/30 01:26:59 richard
-# Big changes:
-# . split off the support priority into its own class
-# . added "new support, new user" to the page head
-# . fixed the display options for the heading links
-#
-# Revision 1.7 2001/07/29 07:01:39 richard
-# Added vim command to all source so that we don't get no steenkin' tabs :)
-#
-# Revision 1.6 2001/07/25 01:23:07 richard
-# Added the Roundup spec to the new documentation directory.
-#
-# Revision 1.5 2001/07/23 23:20:35 richard
-# forgot to remove the interfaces from the dbinit module ;)
-#
-# Revision 1.4 2001/07/23 08:45:28 richard
-# ok, so now "./roundup-admin init" will ask questions in an attempt to get a
-# workable instance_home set up :)
-# _and_ anydbm has had its first test :)
-#
-# Revision 1.3 2001/07/23 07:14:41 richard
-# Moved the database backends off into backends.
-#
-# Revision 1.2 2001/07/23 06:25:50 richard
-# relfected the move to roundup/backends
-#
-# Revision 1.1 2001/07/23 04:33:21 anthonybaxter
-# split __init__.py into 2. dbinit and instance_config.
-#
-# Revision 1.1 2001/07/23 03:50:46 anthonybaxter
-# moved templates to proper location
-#
-# Revision 1.2 2001/07/22 12:09:32 richard
-# Final commit of Grande Splite
-#
-#
-# vim: set filetype=python ts=4 sw=4 et si
-
diff --git a/roundup/templates/extended/detectors/.cvsignore b/roundup/templates/extended/detectors/.cvsignore
+++ /dev/null
@@ -1,3 +0,0 @@
-*.pyc
-*.pyo
-*.cover
diff --git a/roundup/templates/extended/detectors/__init__.py b/roundup/templates/extended/detectors/__init__.py
+++ /dev/null
@@ -1,54 +0,0 @@
-#
-# Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/)
-# This module is free software, and you may redistribute it and/or modify
-# under the same terms as Python, so long as this copyright message and
-# disclaimer are retained in their original form.
-#
-# IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR
-# DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING
-# OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-#
-# BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
-# BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-# FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS"
-# BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
-# SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
-#
-#$Id: __init__.py,v 1.4 2002-05-29 01:16:17 richard Exp $
-
-def init(db):
- ''' execute the init functions of all the modules in this directory
- '''
- import os, sys
- this_dir = os.path.split(__file__)[0]
- try:
- sys.path.insert(0, this_dir)
- for file in os.listdir(this_dir):
- file, ext = os.path.splitext(file)
- if file == '__init__': continue
- if ext in ('.py', '.pyc'):
- module = __import__(file)
- module.init(db)
- finally:
- del sys.path[0]
-
-#
-#$Log: not supported by cvs2svn $
-#Revision 1.3 2001/08/07 00:24:43 richard
-#stupid typo
-#
-#Revision 1.2 2001/08/07 00:15:51 richard
-#Added the copyright/license notice to (nearly) all files at request of
-#Bizar Software.
-#
-#Revision 1.1 2001/07/23 23:29:10 richard
-#Adding the classic template
-#
-#Revision 1.1 2001/07/23 03:50:47 anthonybaxter
-#moved templates to proper location
-#
-#Revision 1.1 2001/07/22 12:09:32 richard
-#Final commit of Grande Splite
-#
-#
diff --git a/roundup/templates/extended/detectors/nosyreaction.py b/roundup/templates/extended/detectors/nosyreaction.py
+++ /dev/null
@@ -1,218 +0,0 @@
-#
-# Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/)
-# This module is free software, and you may redistribute it and/or modify
-# under the same terms as Python, so long as this copyright message and
-# disclaimer are retained in their original form.
-#
-# IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR
-# DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING
-# OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-#
-# BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
-# BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-# FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS"
-# BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
-# SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
-#
-#$Id: nosyreaction.py,v 1.13 2002-07-31 23:57:37 richard Exp $
-
-from roundup import roundupdb, hyperdb
-
-def nosyreaction(db, cl, nodeid, oldvalues):
- ''' A standard detector is provided that watches for additions to the
- "messages" property.
-
- When a new message is added, the detector sends it to all the users on
- the "nosy" list for the issue that are not already on the "recipients"
- list of the message.
-
- Those users are then appended to the "recipients" property on the
- message, so multiple copies of a message are never sent to the same
- user.
-
- The journal recorded by the hyperdatabase on the "recipients" property
- then provides a log of when the message was sent to whom.
- '''
- # send a copy of all new messages to the nosy list
- for msgid in determineNewMessages(cl, nodeid, oldvalues):
- try:
- cl.nosymessage(nodeid, msgid, oldvalues)
- except roundupdb.MessageSendError, message:
- raise roundupdb.DetectorError, message
-
-def determineNewMessages(cl, nodeid, oldvalues):
- ''' Figure a list of the messages that are being added to the given
- node in this transaction.
- '''
- messages = []
- if oldvalues is None:
- # the action was a create, so use all the messages in the create
- messages = cl.get(nodeid, 'messages')
- elif oldvalues.has_key('messages'):
- # the action was a set (so adding new messages to an existing issue)
- m = {}
- for msgid in oldvalues['messages']:
- m[msgid] = 1
- messages = []
- # figure which of the messages now on the issue weren't there before
- for msgid in cl.get(nodeid, 'messages'):
- if not m.has_key(msgid):
- messages.append(msgid)
- return messages
-
-def updatenosy(db, cl, nodeid, newvalues):
- '''Update the nosy list for changes to the assignedto
- '''
- # nodeid will be None if this is a new node
- current = {}
- if nodeid is None:
- ok = ('new', 'yes')
- else:
- ok = ('yes',)
- # old node, get the current values from the node if they haven't
- # changed
- if not newvalues.has_key('nosy'):
- nosy = cl.get(nodeid, 'nosy')
- for value in nosy:
- if not current.has_key(value):
- current[value] = 1
-
- # if the nosy list changed in this transaction, init from the new value
- if newvalues.has_key('nosy'):
- nosy = newvalues.get('nosy', [])
- for value in nosy:
- if not db.hasnode('user', value):
- continue
- if not current.has_key(value):
- current[value] = 1
-
- # add assignedto(s) to the nosy list
- if newvalues.has_key('assignedto') and newvalues['assignedto'] is not None:
- propdef = cl.getprops()
- if isinstance(propdef['assignedto'], hyperdb.Link):
- assignedto_ids = [newvalues['assignedto']]
- elif isinstance(propdef['assignedto'], hyperdb.Multilink):
- assignedto_ids = newvalues['assignedto']
- for assignedto_id in assignedto_ids:
- if not current.has_key(assignedto_id):
- current[assignedto_id] = 1
-
- # see if there's any new messages - if so, possibly add the author and
- # recipient to the nosy
- if newvalues.has_key('messages'):
- if nodeid is None:
- ok = ('new', 'yes')
- messages = newvalues['messages']
- else:
- ok = ('yes',)
- # figure which of the messages now on the issue weren't
- # there before - make sure we don't get a cached version!
- oldmessages = cl.get(nodeid, 'messages', cache=0)
- messages = []
- for msgid in newvalues['messages']:
- if msgid not in oldmessages:
- messages.append(msgid)
-
- # configs for nosy modifications
- add_author = getattr(db.config, 'ADD_AUTHOR_TO_NOSY', 'new')
- add_recips = getattr(db.config, 'ADD_RECIPIENTS_TO_NOSY', 'new')
-
- # now for each new message:
- msg = db.msg
- for msgid in messages:
- if add_author in ok:
- authid = msg.get(msgid, 'author')
- current[authid] = 1
-
- # add on the recipients of the message
- if add_recips in ok:
- for recipient in msg.get(msgid, 'recipients'):
- current[recipient] = 1
-
- # that's it, save off the new nosy list
- newvalues['nosy'] = current.keys()
-
-def init(db):
- db.issue.react('create', nosyreaction)
- db.issue.react('set', nosyreaction)
- db.issue.audit('create', updatenosy)
- db.issue.audit('set', updatenosy)
-
-#
-#$Log: not supported by cvs2svn $
-#Revision 1.12 2002/05/29 01:16:17 richard
-#Sorry about this huge checkin! It's fixing a lot of related stuff in one go
-#though.
-#
-#. #541941 ] changing multilink properties by mail
-#. #526730 ] search for messages capability
-#. #505180 ] split MailGW.handle_Message
-# - also changed cgi client since it was duplicating the functionality
-#. build htmlbase if tests are run using CVS checkout (removed note from
-# installation.txt)
-#. don't create an empty message on email issue creation if the email is empty
-#
-#Revision 1.11 2002/01/14 22:21:38 richard
-##503353 ] setting properties in initial email
-#
-#Revision 1.10 2002/01/11 23:22:29 richard
-# . #502437 ] rogue reactor and unittest
-# in short, the nosy reactor was modifying the nosy list. That code had
-# been there for a long time, and I suspsect it was there because we
-# weren't generating the nosy list correctly in other places of the code.
-# We're now doing that, so the nosy-modifying code can go away from the
-# nosy reactor.
-#
-#Revision 1.9 2001/12/15 19:24:39 rochecompaan
-# . Modified cgi interface to change properties only once all changes are
-# collected, files created and messages generated.
-# . Moved generation of change note to nosyreactors.
-# . We now check for changes to "assignedto" to ensure it's added to the
-# nosy list.
-#
-#Revision 1.8 2001/12/05 14:26:44 rochecompaan
-#Removed generation of change note from "sendmessage" in roundupdb.py.
-#The change note is now generated when the message is created.
-#
-#Revision 1.7 2001/11/30 11:29:04 rochecompaan
-#Property changes are now listed in emails generated by Roundup
-#
-#Revision 1.6 2001/11/26 22:55:56 richard
-#Feature:
-# . Added INSTANCE_NAME to configuration - used in web and email to identify
-# the instance.
-# . Added EMAIL_SIGNATURE_POSITION to indicate where to place the roundup
-# signature info in e-mails.
-# . Some more flexibility in the mail gateway and more error handling.
-# . Login now takes you to the page you back to the were denied access to.
-#
-#Fixed:
-# . Lots of bugs, thanks Roché and others on the devel mailing list!
-#
-#Revision 1.5 2001/11/12 22:01:07 richard
-#Fixed issues with nosy reaction and author copies.
-#
-#Revision 1.4 2001/10/30 00:54:45 richard
-#Features:
-# . #467129 ] Lossage when username=e-mail-address
-# . #473123 ] Change message generation for author
-# . MailGW now moves 'resolved' to 'chatting' on receiving e-mail for an issue.
-#
-#Revision 1.3 2001/08/07 00:24:43 richard
-#stupid typo
-#
-#Revision 1.2 2001/08/07 00:15:51 richard
-#Added the copyright/license notice to (nearly) all files at request of
-#Bizar Software.
-#
-#Revision 1.1 2001/07/23 23:29:10 richard
-#Adding the classic template
-#
-#Revision 1.1 2001/07/23 03:50:47 anthonybaxter
-#moved templates to proper location
-#
-#Revision 1.1 2001/07/22 12:09:32 richard
-#Final commit of Grande Splite
-#
-#
diff --git a/roundup/templates/extended/detectors/statusauditor.py b/roundup/templates/extended/detectors/statusauditor.py
+++ /dev/null
@@ -1,68 +0,0 @@
-# Copyright (c) 2002 ekit.com Inc (http://www.ekit-inc.com/)
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-# SOFTWARE.
-#
-#$Id: statusauditor.py,v 1.1 2002-05-29 01:16:17 richard Exp $
-
-def chatty(db, cl, nodeid, newvalues):
- ''' If the issue is currently 'unread' or 'resolved', then set
- it to 'chatting'
- '''
- # don't fire if there's no new message (ie. chat)
- if not newvalues.has_key('messages'):
- return
- if newvalues['messages'] == cl.get(nodeid, 'messages', cache=0):
- return
-
- # determine the id of 'unread', 'resolved' and 'chatting'
- unread_id = db.status.lookup('unread')
- resolved_id = db.status.lookup('resolved')
- chatting_id = db.status.lookup('chatting')
-
- # get the current value
- current_status = cl.get(nodeid, 'status')
-
- # see if there's an explicit change in this transaction
- if newvalues.has_key('status') and newvalues['status'] != current_status:
- # yep, skip
- return
-
- # ok, there's no explicit change, so do it manually
- if current_status in (unread_id, resolved_id):
- newvalues['status'] = chatting_id
-
-
-def presetunread(db, cl, nodeid, newvalues):
- ''' Make sure the status is set on new issues
- '''
- if newvalues.has_key('status'):
- return
-
- # ok, do it
- newvalues['status'] = db.status.lookup('unread')
-
-
-def init(db):
- # fire before changes are made
- db.issue.audit('set', chatty)
- db.issue.audit('create', presetunread)
-
-#
-#$Log: not supported by cvs2svn $
-#
diff --git a/roundup/templates/extended/html/file.index b/roundup/templates/extended/html/file.index
+++ /dev/null
@@ -1,15 +0,0 @@
-<!-- $Id: file.index,v 1.3 2002-01-23 05:10:28 richard Exp $-->
-<tr>
- <property name="name">
- <td><display call="download('name')"></td>
- </property>
- <property name="type">
- <td><display call="plain('type')"></td>
- </property>
- <property name="creator">
- <td><display call="plain('creator')"></td>
- </property>
- <property name="creation">
- <td><display call="plain('creation')"></td>
- </property>
-</tr>
diff --git a/roundup/templates/extended/html/file.newitem b/roundup/templates/extended/html/file.newitem
+++ /dev/null
@@ -1,18 +0,0 @@
-<!-- $Id: file.newitem,v 1.1 2001-07-30 08:04:26 richard Exp $-->
-<table border=0 cellspacing=0 cellpadding=2>
-
-<tr class="strong-header">
- <td colspan=2>File upload details</td>
-</td>
-
-<tr bgcolor="ffffea">
- <td width=1% nowrap align=right><span class="form-label">File:</span></td>
- <td class="form-text"><input type="file" name="content" size="40"></td>
-</tr>
-
-<tr bgcolor="ffffea">
- <td> </td>
- <td class="form-text"><display call="submit()"></td>
-</tr>
-
-</table>
diff --git a/roundup/templates/extended/html/issue.filter b/roundup/templates/extended/html/issue.filter
+++ /dev/null
@@ -1,29 +0,0 @@
-<!-- $Id: issue.filter,v 1.3 2002-02-16 08:39:43 richard Exp $-->
-<property name="title">
- <tr><th width="1%" align="right" class="location-bar">Title</th>
- <td><display call="field('title')"></td></tr>
-</property>
-<property name="status">
- <tr><th width="1%" align="right" class="location-bar">Status</th>
- <td><display call="checklist('status')"></td></tr>
-</property>
-<property name="priority">
- <tr><th width="1%" align="right" class="location-bar">Priority</th>
- <td><display call="checklist('priority')"></td></tr>
-</property>
-<property name="platform">
- <tr><th width="1%" align="right" class="location-bar">Platform</th>
- <td><display call="checklist('platform')"></td></tr>
-</property>
-<property name="product">
- <tr><th width="1%" align="right" class="location-bar">Product</th>
- <td><display call="checklist('product')"></td></tr>
-</property>
-<property name="version">
- <tr><th width="1%" align="right" class="location-bar">Version</th>
- <td><display call="field('version')"></td></tr>
-</property>
-<property name="assignedto">
- <tr><th width="1%" align="right" class="location-bar">Assigned to</th>
- <td><display call="menu('assignedto')"></td></tr>
-</property>
diff --git a/roundup/templates/extended/html/issue.index b/roundup/templates/extended/html/issue.index
+++ /dev/null
@@ -1,30 +0,0 @@
-<!-- $Id: issue.index,v 1.3 2001-08-01 05:15:09 richard Exp $-->
-<tr>
- <property name="id">
- <td valign="top"><display call="plain('id')"></td>
- </property>
- <property name="activity">
- <td valign="top"><display call="reldate('activity', pretty=1)"></td>
- </property>
- <property name="priority">
- <td valign="top"><display call="plain('priority')"></td>
- </property>
- <property name="status">
- <td valign="top"><display call="plain('status')"></td>
- </property>
- <property name="title">
- <td valign="top"><display call="link('title')"></td>
- </property>
- <property name="platform">
- <td valign="top"><display call="plain('platform')"></td>
- </property>
- <property name="product">
- <td valign="top"><display call="plain('product')"></td>
- </property>
- <property name="version">
- <td valign="top"><display call="plain('version')"></td>
- </property>
- <property name="assignedto">
- <td valign="top"><display call="plain('assignedto')"></td>
- </property>
-</tr>
diff --git a/roundup/templates/extended/html/issue.item b/roundup/templates/extended/html/issue.item
+++ /dev/null
@@ -1,117 +0,0 @@
-<!-- $Id: issue.item,v 1.11 2002-04-02 01:40:59 richard Exp $-->
-<table border=0 cellspacing=0 cellpadding=2>
-
-<tr class="strong-header">
- <td colspan=4>Item Information</td>
-</td>
-
-<tr bgcolor="ffffea">
- <td width=1% nowrap align=right><span class="form-label">Title</span></td>
- <td colspan=3 class="form-text"><display call="field('title', size=80)"></td>
-</tr>
-
-<tr bgcolor="ffffea">
- <td width=1% nowrap align=right><span class="form-label">Product</span></td>
- <td class="form-text" valign=middle><display call="menu('product')">
- <span class="form-label">version:</span><display call="field('version', 5)"></td>
- <td rowspan=2 width=1% nowrap align=right><span class="form-label">Platform</span></td>
- <td rowspan=2 class="form-text" valign=middle><display call="checklist('platform')"></td>
-</tr>
-
-<tr bgcolor="ffffea">
- <td width=1% nowrap align=right> </td>
- <td align=left><span class="form-label">Target Version</span>
- <display call="field('targetversion', 5)">
- </td>
-</tr>
-
-
-<tr bgcolor="ffffea">
- <td width=1% nowrap align=right><span class="form-label">Created</span></td>
- <td class="form-text"><display call="reldate('creation', pretty=1)">
- (<display call="plain('creator')">)</td>
- <td width=1% nowrap align=right><span class="form-label">Last activity</span></td>
- <td class="form-text"><display call="reldate('activity', pretty=1)"></td>
-</tr>
-
-<tr bgcolor="ffffea">
- <td width=1% nowrap align=right><span class="form-label">Priority</span></td>
- <td class="form-text"><display call="menu('priority')"></td>
- <td width=1% nowrap align=right><span class="form-label">Status</span></td>
- <td class="form-text"><display call="menu('status')"></td>
-</tr>
-
-<tr bgcolor="ffffea">
- <td width=1% nowrap align=right><span class="form-label">Assigned to</span></td>
- <td class="form-text"><display call="menu('assignedto')"></td>
- <td width=1% nowrap align=right><span class="form-label">Nosy List</span></td>
- <td class="form-text"><display call="field('nosy')">
- <display call="classhelp('user', 'username,realname,address,phone', label='list', width=500)"></td>
-</tr>
-
-<tr bgcolor="ffffea">
- <td width=1% nowrap align=right><span class="form-label">Superseder</span></td>
- <td class="form-text">
- <display call="field('superseder', size=40, showid=1)">
- <display call="classhelp('issue', 'id,title', label='list', width=500)">
- <property name="superseder">
- <br>View: <display call="link('superseder', showid=1)">
- </property>
- </td>
- <td width=1% nowrap align=right><span class="form-label">Support call</span></td>
- <td class="form-text">
- <display call="field('supportcall', size=40, showid=1)">
- <display call="classhelp('support', 'id,title', label='list', width=500)">
- <property name="supportcall">
- <br>View: <display call="link('supportcall', showid=1)">
- </property>
- </td>
-</tr>
-
-<tr bgcolor="ffffea">
- <td width=1% nowrap align=right><span class="form-label">Change Note</span></td>
- <td colspan=3 class="form-text"><display call="note()"></td>
-</tr>
-
-<tr bgcolor="ffffea">
- <td width=1% nowrap align=right><span class="form-label">File</span></td>
- <td colspan=3 class="form-text"><input type="file" name="__file" size="80"></td>
-</tr>
-
-<tr bgcolor="ffffea">
- <td> </td>
- <td colspan=3 class="form-text"><display call="submit()"></td>
-</tr>
-
-<tr class="strong-header">
- <td colspan=4><b>Messages</b></td>
-</tr>
-<property name="messages">
-<tr>
- <td colspan=4><display call="list('messages')"></td>
-</tr>
-</property>
-
-<tr class="strong-header">
- <td colspan=4><b>Files</b></td>
-</tr>
-<tr class="form-help">
- <td colspan=4>
- <a href="newfile?:multilink=issue<display call="plain('id')">:files">Attach a file to this issue</a>
- </td>
-</tr>
-<property name="files">
- <tr>
- <td colspan=4><display call="list('files')"></td>
- </tr>
-</property>
-
-<tr class="strong-header">
- <td colspan=4><b>History</b></td>
-</tr>
-<tr>
- <td colspan=4><display call="history()"></td>
-</tr>
-
-</table>
-
diff --git a/roundup/templates/extended/html/msg.index b/roundup/templates/extended/html/msg.index
+++ /dev/null
@@ -1,8 +0,0 @@
-<!-- $Id: msg.index,v 1.4 2002-05-22 00:32:34 richard Exp $-->
-<tr class="row-hilite">
- <td><display call="link('date')"></td>
- <td><display call="plain('author')"></td>
-</tr>
-<tr class="msg-content">
- <td colspan=2><pre><display call="plain('content', escape=1)"></pre></td>
-</tr>
diff --git a/roundup/templates/extended/html/msg.item b/roundup/templates/extended/html/msg.item
+++ /dev/null
@@ -1,37 +0,0 @@
-<!-- $Id: msg.item,v 1.2 2002-05-22 00:32:34 richard Exp $-->
-<table border=0 cellspacing=0 cellpadding=2>
-
-<tr class="strong-header">
- <td colspan=2>Message Information</td>
-</td>
-
-<tr bgcolor="ffffea">
- <td width=1% nowrap align=right><span class="form-label">Author</span></td>
- <td class="form-text"><display call="plain('author')"></td>
-</tr>
-
-<tr bgcolor="ffffea">
- <td width=1% nowrap align=right><span class="form-label">Recipients</span></td>
- <td class="form-text"><display call="plain('recipients')"></td>
-</tr>
-
-<tr bgcolor="ffffea">
- <td width=1% nowrap align=right><span class="form-label">Date</span></td>
- <td class="form-text"><display call="plain('date')"></td>
-</tr>
-
-<tr bgcolor="ffeaff">
- <td colspan=2 class="form-text">
- <pre><display call="plain('content', escape=1)"></pre>
- </td>
-</tr>
-
-<property name="files">
-<tr class="strong-header"><td colspan=2><b>Files</b></td></tr>
-<tr><td colspan=2><display call="list('files')"></td></tr>
-</property>
-
-<tr class="strong-header"><td colspan=2><b>History</b></td><tr>
-<tr><td colspan=2><display call="history()"></td></tr>
-
-</table>
diff --git a/roundup/templates/extended/html/style.css b/roundup/templates/extended/html/style.css
+++ /dev/null
@@ -1,112 +0,0 @@
-a:hover {
- text-decoration: underline;
- color: #333333;
-}
-
-a:link {
- text-decoration: none;
- color: #000099;
-}
-
-a {
- text-decoration: none;
- color: #000099;
-}
-
-p {
- color: #333333;
-}
-
-th {
- font-weight: bold;
- color: #333333;
-}
-
-.form-help {
- color: #333333;
-}
-
-.location-bar {
- background-color: #efefef;
- border: none;
-}
-
-.strong-header {
- font-weight: bold;
- background-color: #000000;
- color: #ffffff;
-}
-
-.list-header {
- background-color: #aaccff;
- color: #000000;
- border: none;
-}
-
-.section-bar {
- background-color: #707070;
- color: #ffffff;
- border: 1px solid #404040;
-}
-
-.row-normal {
- background-color: #ffffff;
- border: none;
-}
-
-.row-hilite {
- background-color: #efefef;
- border: none;
-}
-
-.msg-header {
- font-family: Verdana, Helvetica, sans-serif;
- font-weight: bold;
- background-color: #EE71AC;
- color: #ffffff;
-}
-
-.msg-content {
- font-family: monospace;
- background-color: #ffeaff;
- color: #000000;
-}
-
-.system-msg {
- background-color: #ffffff;
- border: 1px solid #000000;
- margin-bottom: 6px;
- margin-top: 6px;
- padding: 4px;
- width: 100%;
- color: #660033;
-}
-
-.form-title {
- font-weight: bold;
- color: #333333;
-}
-
-.form-label {
- font-weight: bold;
- color: #333333;
-}
-
-.form-optional {
- font-weight: bold;
- font-style: italic;
- color: #333333;
-}
-
-.form-element {
- color: #000000;
-}
-
-.form-text {
- color: #333333;
-}
-
-.form-mono {
- font-family: monospace;
-}
-
diff --git a/roundup/templates/extended/html/support.filter b/roundup/templates/extended/html/support.filter
+++ /dev/null
@@ -1,33 +0,0 @@
-<!-- $Id: support.filter,v 1.1 2001-07-30 01:27:28 richard Exp $-->
-<property name="title">
- <tr><th width="1%" align="right" class="location-bar">Title</th>
- <td><display call="field('title')"></td></tr>
-</property>
-<property name="status">
- <tr><th width="1%" align="right" class="location-bar">Status</th>
- <td><display call="checklist('status')"></td></tr>
-</property>
-<property name="platform">
- <tr><th width="1%" align="right" class="location-bar">Platform</th>
- <td><display call="checklist('platform')"></td></tr>
-</property>
-<property name="product">
- <tr><th width="1%" align="right" class="location-bar">Product</th>
- <td><display call="checklist('product')"></td></tr>
-</property>
-<property name="version">
- <tr><th width="1%" align="right" class="location-bar">Version</th>
- <td><display call="field('version')"></td></tr>
-</property>
-<property name="source">
- <tr><th width="1%" align="right" class="location-bar">Source</th>
- <td><display call="checklist('source')"></td></tr>
-</property>
-<property name="assignedto">
- <tr><th width="1%" align="right" class="location-bar">Assigned to</th>
- <td><display call="checklist('assignedto')"></td></tr>
-</property>
-<property name="customername">
- <tr><th width="1%" align="right" class="location-bar">Customer name</th>
- <td><display call="field('customername')"></td></tr>
-</property>
diff --git a/roundup/templates/extended/html/support.index b/roundup/templates/extended/html/support.index
+++ /dev/null
@@ -1,33 +0,0 @@
-<!-- $Id: support.index,v 1.2 2001-08-01 05:15:09 richard Exp $-->
-<tr>
- <property name="id">
- <td valign="top"><display call="plain('id')"></td>
- </property>
- <property name="activity">
- <td valign="top"><display call="reldate('activity', pretty=1)"></td>
- </property>
- <property name="status">
- <td valign="top"><display call="plain('status')"></td>
- </property>
- <property name="title">
- <td valign="top"><display call="link('title')"></td>
- </property>
- <property name="platform">
- <td valign="top"><display call="plain('platform')"></td>
- </property>
- <property name="product">
- <td valign="top"><display call="plain('product')"></td>
- </property>
- <property name="version">
- <td valign="top"><display call="plain('version')"></td>
- </property>
- <property name="source">
- <td valign="top"><display call="plain('source')"></td>
- </property>
- <property name="assignedto">
- <td valign="top"><display call="plain('assignedto')"></td>
- </property>
- <property name="customername">
- <td valign="top"><display call="plain('customername')"></td>
- </property>
-</tr>
diff --git a/roundup/templates/extended/html/support.item b/roundup/templates/extended/html/support.item
+++ /dev/null
@@ -1,116 +0,0 @@
-<!-- $Id: support.item,v 1.5 2002-04-02 01:40:59 richard Exp $-->
-<table border=0 cellspacing=0 cellpadding=2>
-
-<tr class="strong-header">
- <td colspan=4>Item Information</td>
-</td>
-
-<tr bgcolor="ffffea">
- <td width=1% nowrap align=right><span class="form-label">Title</span></td>
- <td colspan=3 class="form-text"><display call="field('title', size=80)"></td>
-</tr>
-
-<tr bgcolor="ffffea">
- <td width=1% nowrap align=right><span class="form-label">Product</span></td>
- <td class="form-text" valign=middle><display call="menu('product')">
- version:<display call="field('version', 5)"></td>
- <td width=1% nowrap align=right><span class="form-label">Platform</span></td>
- <td class="form-text" valign=middle><display call="checklist('platform')"></td>
-</tr>
-
-<tr bgcolor="ffffea">
- <td width=1% nowrap align=right><span class="form-label">Created</span></td>
- <td class="form-text"><display call="reldate('creation', pretty=1)">
- (<display call="plain('creator')">)</td>
- <td width=1% nowrap align=right><span class="form-label">Last activity</span></td>
- <td class="form-text"><display call="reldate('activity', pretty=1)"></td>
-</tr>
-
-<tr bgcolor="ffffea">
- <td width=1% nowrap align=right><span class="form-label">Empty</span></td>
- <td class="form-text">XXXX</td>
- <td width=1% nowrap align=right><span class="form-label">Source</span></td>
- <td class="form-text"><display call="menu('source')"></td>
-</tr>
-
-<tr bgcolor="ffffea">
- <td width=1% nowrap align=right><span class="form-label">Status</span></td>
- <td class="form-text"><display call="menu('status')"></td>
- <td width=1% nowrap align=right><span class="form-label">Rate</span></td>
- <td class="form-text"><display call="menu('rate')"></td>
-</tr>
-
-<tr bgcolor="ffffea">
- <td width=1% nowrap align=right><span class="form-label">Assigned To</span></td>
- <td class="form-text"><display call="menu('assignedto')"></td>
- <td width=1% nowrap align=right><span class="form-label">Customer Name</span></td>
- <td class="form-text"><display call="field('customername')"></td>
-</tr>
-
-<tr bgcolor="ffffea">
- <td width=1% nowrap align=right><span class="form-label">Superseder</span></td>
- <td class="form-text">
- <display call="field('superseder', size=40, showid=1)">
- <display call="classhelp('issue', 'id,title', label='list', width=500)">
- <property name="superseder">
- <br>View: <display call="link('superseder', showid=1)">
- </property>
- </td>
- <td width=1% nowrap align=right><span class="form-label">Nosy List</span></td>
- <td class="form-text"><display call="field('nosy')"></td>
-</tr>
-
-<tr bgcolor="ffffea">
- <td width=1% nowrap align=right><span class="form-label">Change Note</span></td>
- <td colspan=3 class="form-text"><display call="note()"></td>
-</tr>
-
-<tr bgcolor="ffffea">
- <td width=1% nowrap align=right><span class="form-label">File</span></td>
- <td colspan=3 class="form-text"><input type="file" name="__file" size="80"></td>
-</tr>
-
-<tr bgcolor="ffffea">
- <td> </td>
- <td colspan=3 class="form-text"><display call="submit()"></td>
-</tr>
-
-<tr class="strong-header">
- <td colspan=4><b>Messages</b></td>
-</tr>
-<property name="messages">
-<tr>
- <td colspan=4><display call="list('messages')"></td>
-</tr>
-</property>
-
-<tr class="strong-header">
- <td colspan=4><b>Timelog</b></td>
-</tr>
-<tr class="form-help">
- <td colspan=4>
- <a href="newtimelog?:multilink=support<display call="plain('id')">:timelog">Log time against this support call</a>
- </td>
-</tr>
-<property name="timelog">
- <tr>
- <td colspan=4><display call="list('timelog')"></td>
- </tr>
-</property>
-
-<tr class="strong-header">
- <td colspan=4><b>Files</b></td>
-</tr>
-<tr class="form-help">
- <td colspan=4>
- <a href="newfile?:multilink=support<display call="plain('id')">:files">Attach a file to support call</a>
- </td>
-</tr>
-<property name="files">
- <tr>
- <td colspan=4><display call="list('files')"></td>
- </tr>
-</property>
-
-</table>
-
diff --git a/roundup/templates/extended/html/timelog.index b/roundup/templates/extended/html/timelog.index
+++ /dev/null
@@ -1,15 +0,0 @@
-<!-- $Id: timelog.index,v 1.1 2001-07-30 08:04:26 richard Exp $-->
-<tr>
- <property name="date">
- <td><display call="link('date')"></td>
- </property>
- <property name="performedby">
- <td><display call="plain('performedby')"></td>
- </property>
- <property name="time">
- <td><display call="plain('time')"></td>
- </property>
- <property name="description">
- <td><display call="plain('description')"></td>
- </property>
-</tr>
diff --git a/roundup/templates/extended/html/timelog.item b/roundup/templates/extended/html/timelog.item
+++ /dev/null
@@ -1,38 +0,0 @@
-<!-- $Id: timelog.item,v 1.2 2002-01-22 00:21:32 richard Exp $-->
-<table border=0 cellspacing=0 cellpadding=2>
-
-<tr class="strong-header">
- <td colspan=2>Time log details</td>
-</td>
-
-<tr bgcolor="ffffea">
- <td width=1% nowrap align=right><span class="form-label">Time spent</span></td>
- <td class="form-text"><display call="field('time', size=40)"></td>
-</tr>
-<tr bgcolor="ffffea">
- <td width=1% nowrap align=right><span class="form-label">Description</span></td>
- <td class="form-text"><display call="field('description', size=40)"></td>
-</tr>
-<tr bgcolor="ffffea">
- <td width=1% nowrap align=right><span class="form-label">Date</span></td>
- <td class="form-text"><display call="field('date', size=40)"></td>
-</tr>
-<tr bgcolor="ffffea">
- <td width=1% nowrap align=right><span class="form-label">Performed by</span></td>
- <td class="form-text"><display call="menu('performedby', size=40)"></td>
-</tr>
-
-<tr bgcolor="ffffea">
- <td> </td>
- <td class="form-text"><display call="submit()"></td>
-</tr>
-
-<tr class="strong-header">
- <td colspan=2><b>History</b></td>
-</tr>
-<tr>
- <td colspan=2><display call="history()"></td>
-</tr>
-
-</table>
-
diff --git a/roundup/templates/extended/html/user.index b/roundup/templates/extended/html/user.index
+++ /dev/null
@@ -1,18 +0,0 @@
-<!-- $Id: user.index,v 1.2 2002-07-09 05:29:51 richard Exp $-->
-<tr>
- <property name="username">
- <td><display call="link('username')"></td>
- </property>
- <property name="realname">
- <td><display call="plain('realname')"></td>
- </property>
- <property name="organisation">
- <td><display call="plain('organisation')"></td>
- </property>
- <property name="address">
- <td><display call="email('address')"></td>
- </property>
- <property name="phone">
- <td><display call="plain('phone')"></td>
- </property>
-</tr>
diff --git a/roundup/templates/extended/html/user.item b/roundup/templates/extended/html/user.item
+++ /dev/null
@@ -1,56 +0,0 @@
-<!-- $Id: user.item,v 1.4 2002-07-30 05:27:02 richard Exp $-->
-<table border=0 cellspacing=0 cellpadding=2>
-
-<tr class="strong-header">
- <td colspan=2>Your Details</td>
-</td>
-
-<tr bgcolor="ffffea">
- <td width=1% nowrap align=right><span class="form-label">Name</span></td>
- <td class="form-text"><display call="field('realname', size=40)"></td>
-</tr>
-<tr bgcolor="ffffea">
- <td width=1% nowrap align=right><span class="form-label">Login Name</span></td>
- <td class="form-text"><display call="field('username', size=40)"></td>
-</tr>
-<tr bgcolor="ffffea">
- <td width=1% nowrap align=right><span class="form-label">Login Password</span></td>
- <td class="form-text"><display call="field('password', size=10)"></td>
-</tr>
-<require permission="Web Roles">
- <tr bgcolor="ffffea">
- <td width=1% nowrap align=right><span class="form-label">Roles</span></td>
- <td class="form-text"><display call="field('roles', size=40)"></td>
- </tr>
-</require>
-<tr bgcolor="ffffea">
- <td width=1% nowrap align=right><span class="form-label">Phone</span></td>
- <td class="form-text"><display call="field('phone', size=40)"></td>
-</tr>
-<tr bgcolor="ffffea">
- <td width=1% nowrap align=right><span class="form-label">Organisation</span></td>
- <td class="form-text"><display call="field('organisation', size=40)"></td>
-</tr>
-<tr bgcolor="ffffea">
- <td width=1% nowrap align=right><span class="form-label">E-mail address</span></td>
- <td class="form-text"><display call="field('address', size=40)"></td>
-</tr>
-<tr bgcolor="ffffea">
- <td width=1% nowrap align=right><span class="form-label">Alternate E-mail addresses</span></td>
- <td class="form-text"><display call="multiline('alternate_addresses')"></td>
-</tr>
-
-<tr bgcolor="ffffea">
- <td> </td>
- <td class="form-text"><display call="submit()"></td>
-</tr>
-
-<tr class="strong-header">
- <td colspan=2><b>History</b></td>
-</tr>
-<tr>
- <td colspan=2><display call="history()"></td>
-</tr>
-
-</table>
-
diff --git a/roundup/templates/extended/instance_config.py b/roundup/templates/extended/instance_config.py
+++ /dev/null
@@ -1,319 +0,0 @@
-#
-# Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/)
-# This module is free software, and you may redistribute it and/or modify
-# under the same terms as Python, so long as this copyright message and
-# disclaimer are retained in their original form.
-#
-# IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR
-# DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING
-# OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-#
-# BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
-# BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-# FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS"
-# BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
-# SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
-#
-# $Id: instance_config.py,v 1.19 2002-07-26 08:27:00 richard Exp $
-
-MAIL_DOMAIN=MAILHOST=HTTP_HOST=None
-HTTP_PORT=0
-
-try:
- from localconfig import *
-except ImportError:
- localconfig = None
-
-import os
-
-# roundup home is this package's directory
-INSTANCE_HOME=os.path.split(__file__)[0]
-
-# The SMTP mail host that roundup will use to send mail
-if not MAILHOST:
- MAILHOST = 'localhost'
-
-# The domain name used for email addresses.
-if not MAIL_DOMAIN:
- MAIL_DOMAIN = 'your.tracker.email.domain.example'
-
-# the next two are only used for the standalone HTTP server.
-if not HTTP_HOST:
- HTTP_HOST = ''
-if not HTTP_PORT:
- HTTP_PORT = 9080
-
-# This is the directory that the database is going to be stored in
-DATABASE = os.path.join(INSTANCE_HOME, 'db')
-
-# This is the directory that the HTML templates reside in
-TEMPLATES = os.path.join(INSTANCE_HOME, 'html')
-
-# A descriptive name for your roundup instance
-INSTANCE_NAME = 'Roundup issue tracker'
-
-# The email address that mail to roundup should go to
-ISSUE_TRACKER_EMAIL = 'issue_tracker@%s'%MAIL_DOMAIN
-
-# The web address that the instance is viewable at
-ISSUE_TRACKER_WEB = 'http://your.tracker.url.example/'
-
-# The email address that roundup will complain to if it runs into trouble
-ADMIN_EMAIL = 'roundup-admin@%s'%MAIL_DOMAIN
-
-# Somewhere for roundup to log stuff internally sent to stdout or stderr
-LOG = os.path.join(INSTANCE_HOME, 'roundup.log')
-
-# Where to place the web filtering HTML on the index page
-FILTER_POSITION = 'bottom' # one of 'top', 'bottom', 'top and bottom'
-
-#
-# SECURITY DEFINITIONS
-#
-# define the Roles that a user gets when they register with the tracker
-# these are a comma-separated string of role names (e.g. 'Admin,User')
-NEW_WEB_USER_ROLES = 'User'
-NEW_EMAIL_USER_ROLES = 'User'
-
-# Send nosy messages to the author of the message
-MESSAGES_TO_AUTHOR = 'no' # either 'yes' or 'no'
-
-# Does the author of a message get placed on the nosy list automatically?
-# If 'new' is used, then the author will only be added when a message
-# creates a new issue. If 'yes', then the author will be added on followups
-# too. If 'no', they're never added to the nosy.
-ADD_AUTHOR_TO_NOSY = 'new' # one of 'yes', 'no', 'new'
-
-# Do the recipients (To:, Cc:) of a message get placed on the nosy list?
-# If 'new' is used, then the recipients will only be added when a message
-# creates a new issue. If 'yes', then the recipients will be added on followups
-# too. If 'no', they're never added to the nosy.
-ADD_RECIPIENTS_TO_NOSY = 'new' # either 'yes', 'no', 'new'
-
-# Where to place the email signature
-EMAIL_SIGNATURE_POSITION = 'bottom' # one of 'top', 'bottom', 'none'
-
-# Keep email citations
-EMAIL_KEEP_QUOTED_TEXT = 'no' # either 'yes' or 'no'
-
-# Preserve the email body as is
-EMAIL_LEAVE_BODY_UNCHANGED = 'no' # either 'yes' or 'no'
-
-# Default class to use in the mailgw if one isn't supplied in email
-# subjects. To disable, comment out the variable below or leave it blank.
-# Examples:
-MAIL_DEFAULT_CLASS = 'issue' # use "issue" class by default
-#MAIL_DEFAULT_CLASS = '' # disable (or just comment the var out)
-
-# Define what index links are available in the header, and what their
-# labels are. Each key is used to look up one of the index specifications
-# below - so 'DEFAULT' will use 'DEFAULT_INDEX'.
-# Where the FILTERSPEC has 'assignedto' with a value of None, it will be
-# replaced by the id of the logged-in user.
-HEADER_INDEX_LINKS = ['DEFAULT', 'ALL_SUPPORT', 'UNASSIGNED_ISSUE',
- 'UNASSIGNED_SUPPORT', 'MY_ISSUE', 'MY_SUPPORT']
-
-# list the classes that users are able to add nodes to
-HEADER_ADD_LINKS = ['issue', 'support']
-
-# list the classes that users can search
-HEADER_SEARCH_LINKS = ['issue', 'support']
-
-SEARCH_FILTERS = ['ISSUE_FILTER', 'SUPPORT_FILTER']
-
-# Now the DEFAULT display specifications. TODO: describe format
-DEFAULT_INDEX = {
- 'LABEL': 'All Issues',
- 'CLASS': 'issue',
- 'SORT': ['-activity'],
- 'GROUP': ['priority'],
- 'FILTER': ['status'],
- 'COLUMNS': ['id','activity','title','creator','assignedto'],
- 'FILTERSPEC': {
- 'status': ['-1', '1', '2', '3', '4', '5', '6', '7'],
- },
-}
-
-ALL_SUPPORT_INDEX = {
- 'LABEL': 'All Support',
- 'CLASS': 'support',
- 'SORT': ['-activity'],
- 'GROUP': ['customername'],
- 'FILTER': ['status'],
- 'COLUMNS': ['id','activity','title','creator','assignedto'],
- 'FILTERSPEC': {
- 'status': ['-1', '1', '2', '3', '4', '5', '6', '7'],
- },
-}
-
-# The "unsassigned issues" indexes
-UNASSIGNED_ISSUE_INDEX = {
- 'LABEL': 'Unassigned Issues',
- 'CLASS': 'issue',
- 'SORT': ['-activity'],
- 'GROUP': ['priority'],
- 'FILTER': ['status', 'assignedto'],
- 'COLUMNS': ['id','activity','title','creator','status'],
- 'FILTERSPEC': {
- 'status': ['-1', '1', '2', '3', '4', '5', '6', '7'],
- 'assignedto': ['-1'],
- },
-}
-UNASSIGNED_SUPPORT_INDEX = {
- 'LABEL': 'Unassigned Support',
- 'CLASS': 'support',
- 'SORT': ['-activity'],
- 'GROUP': ['customername'],
- 'FILTER': ['status', 'assignedto'],
- 'COLUMNS': ['id','activity','title','creator','status'],
- 'FILTERSPEC': {
- 'status': ['-1', '1', '2', '3', '4', '5', '6', '7'],
- 'assignedto': ['-1'],
- },
-}
-
-# The "my issues" index -- note that the user's id will replace the
-# 'CURRENT USER' value of the "assignedto" filterspec
-MY_ISSUE_INDEX = {
- 'LABEL': 'My Issues',
- 'CLASS': 'issue',
- 'SORT': ['-activity'],
- 'GROUP': ['priority'],
- 'FILTER': ['status', 'assignedto'],
- 'COLUMNS': ['id','activity','title','creator','status'],
- 'FILTERSPEC': {
- 'status': ['-1', '1', '2', '3', '4', '5', '6', '7'],
- 'assignedto': 'CURRENT USER',
- },
-}
-
-MY_SUPPORT_INDEX = {
- 'LABEL': 'My Support',
- 'CLASS': 'support',
- 'SORT': ['-activity'],
- 'GROUP': ['customername'],
- 'FILTER': ['status', 'assignedto'],
- 'COLUMNS': ['id','activity','title','creator','status'],
- 'FILTERSPEC': {
- 'status': ['-1', '1', '2', '3', '4', '5', '6', '7'],
- 'assignedto': 'CURRENT USER',
- },
-}
-
-ISSUE_FILTER = {
- 'CLASS': 'issue',
- 'FILTER': ['status', 'priority', 'assignedto', 'creator']
-}
-
-SUPPORT_FILTER = {
- 'CLASS': 'issue',
- 'FILTER': ['status', 'priority', 'assignedto', 'creator']
-}
-
-#
-# $Log: not supported by cvs2svn $
-# Revision 1.18 2002/05/25 07:16:25 rochecompaan
-# Merged search_indexing-branch with HEAD
-#
-# Revision 1.17 2002/05/22 00:32:34 richard
-# . changed the default message list in issues to display the message body
-# . made backends.__init__ be more specific about which ImportErrors it really
-# wants to ignore
-# . fixed the example addresses in the templates to use correct example domains
-# . cleaned out the template stylesheets, removing a bunch of junk that really
-# wasn't necessary (font specs, styles never used) and added a style for
-# message content
-#
-# Revision 1.16 2002/05/21 06:05:54 richard
-# . #551483 ] assignedto in Client.make_index_link
-#
-# Revision 1.15 2002/05/02 07:56:34 richard
-# . added option to automatically add the authors and recipients of messages
-# to the nosy lists with the options ADD_AUTHOR_TO_NOSY (default 'new') and
-# ADD_RECIPIENTS_TO_NOSY (default 'new'). These settings emulate the current
-# behaviour. Setting them to 'yes' will add the author/recipients to the nosy
-# on messages that create issues and followup messages.
-# . added missing documentation for a few of the config option values
-#
-# Revision 1.14 2002/04/23 15:46:49 rochecompaan
-# . stripping of the email message body can now be controlled through
-# the config variables EMAIL_KEEP_QUOTED_TEST and
-# EMAIL_LEAVE_BODY_UNCHANGED.
-#
-# Revision 1.13.2.2 2002/05/02 11:49:19 rochecompaan
-# Allow customization of the search filters that should be displayed
-# on the search page.
-#
-# Revision 1.13.2.1 2002/04/20 13:23:34 rochecompaan
-# We now have a separate search page for nodes. Search links for
-# different classes can be customized in instance_config similar to
-# index links.
-#
-# Revision 1.13 2002/03/14 23:59:24 richard
-# . #517734 ] web header customisation is obscure
-#
-# Revision 1.12 2002/02/15 00:13:38 richard
-# . #503204 ] mailgw needs a default class
-# - partially done - the setting of additional properties can wait for a
-# better configuration system.
-#
-# Revision 1.11 2002/02/14 23:46:02 richard
-# . #516883 ] mail interface + ANONYMOUS_REGISTER
-#
-# Revision 1.10 2001/11/26 22:55:56 richard
-# Feature:
-# . Added INSTANCE_NAME to configuration - used in web and email to identify
-# the instance.
-# . Added EMAIL_SIGNATURE_POSITION to indicate where to place the roundup
-# signature info in e-mails.
-# . Some more flexibility in the mail gateway and more error handling.
-# . Login now takes you to the page you back to the were denied access to.
-#
-# Fixed:
-# . Lots of bugs, thanks Roché and others on the devel mailing list!
-#
-# Revision 1.9 2001/10/30 00:54:45 richard
-# Features:
-# . #467129 ] Lossage when username=e-mail-address
-# . #473123 ] Change message generation for author
-# . MailGW now moves 'resolved' to 'chatting' on receiving e-mail for an issue.
-#
-# Revision 1.8 2001/10/23 01:00:18 richard
-# Re-enabled login and registration access after lopping them off via
-# disabling access for anonymous users.
-# Major re-org of the htmltemplate code, cleaning it up significantly. Fixed
-# a couple of bugs while I was there. Probably introduced a couple, but
-# things seem to work OK at the moment.
-#
-# Revision 1.7 2001/10/22 03:25:01 richard
-# Added configuration for:
-# . anonymous user access and registration (deny/allow)
-# . filter "widget" location on index page (top, bottom, both)
-# Updated some documentation.
-#
-# Revision 1.6 2001/10/01 06:10:42 richard
-# stop people setting up roundup with our addresses as default - need to
-# handle this better in the init
-#
-# Revision 1.5 2001/08/07 00:24:43 richard
-# stupid typo
-#
-# Revision 1.4 2001/08/07 00:15:51 richard
-# Added the copyright/license notice to (nearly) all files at request of
-# Bizar Software.
-#
-# Revision 1.3 2001/08/02 06:38:17 richard
-# Roundupdb now appends "mailing list" information to its messages which
-# include the e-mail address and web interface address. Templates may
-# override this in their db classes to include specific information (support
-# instructions, etc).
-#
-# Revision 1.2 2001/07/29 07:01:39 richard
-# Added vim command to all source so that we don't get no steenkin' tabs :)
-#
-# Revision 1.1 2001/07/23 04:33:21 anthonybaxter
-# split __init__.py into 2. dbinit and instance_config.
-#
-#
-# vim: set filetype=python ts=4 sw=4 et si
diff --git a/roundup/templates/extended/interfaces.py b/roundup/templates/extended/interfaces.py
+++ /dev/null
@@ -1,114 +0,0 @@
-#
-# Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/)
-# This module is free software, and you may redistribute it and/or modify
-# under the same terms as Python, so long as this copyright message and
-# disclaimer are retained in their original form.
-#
-# IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR
-# DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING
-# OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-#
-# BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
-# BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-# FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS"
-# BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
-# SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
-#
-# $Id: interfaces.py,v 1.16 2002-01-14 02:20:15 richard Exp $
-
-import instance_config
-from roundup import cgi_client, mailgw
-
-class Client(cgi_client.ExtendedClient):
- ''' derives basic CGI implementation from the standard module,
- with any specific extensions
- '''
- pass
-
-class MailGW(mailgw.MailGW):
- ''' derives basic mail gateway implementation from the standard module,
- with any specific extensions
- '''
- pass
-
-#
-# $Log: not supported by cvs2svn $
-# Revision 1.15 2002/01/02 02:32:38 richard
-# ANONYMOUS_ACCESS -> ANONYMOUS_REGISTER
-#
-# Revision 1.14 2001/12/20 15:43:01 rochecompaan
-# Features added:
-# . Multilink properties are now displayed as comma separated values in
-# a textbox
-# . The add user link is now only visible to the admin user
-# . Modified the mail gateway to reject submissions from unknown
-# addresses if ANONYMOUS_ACCESS is denied
-#
-# Revision 1.13 2001/11/26 23:00:53 richard
-# This config stuff is getting to be a real mess...
-#
-# Revision 1.12 2001/10/22 03:25:01 richard
-# Added configuration for:
-# . anonymous user access and registration (deny/allow)
-# . filter "widget" location on index page (top, bottom, both)
-# Updated some documentation.
-#
-# Revision 1.11 2001/10/09 07:38:58 richard
-# Pushed the base code for the extended schema CGI interface back into the
-# code cgi_client module so that future updates will be less painful.
-# Also removed a debugging print statement from cgi_client.
-#
-# Revision 1.10 2001/10/05 02:23:24 richard
-# . roundup-admin create now prompts for property info if none is supplied
-# on the command-line.
-# . hyperdb Class getprops() method may now return only the mutable
-# properties.
-# . Login now uses cookies, which makes it a whole lot more flexible. We can
-# now support anonymous user access (read-only, unless there's an
-# "anonymous" user, in which case write access is permitted). Login
-# handling has been moved into cgi_client.Client.main()
-# . The "extended" schema is now the default in roundup init.
-# . The schemas have had their page headings modified to cope with the new
-# login handling. Existing installations should copy the interfaces.py
-# file from the roundup lib directory to their instance home.
-# . Incorrectly had a Bizar Software copyright on the cgitb.py module from
-# Ping - has been removed.
-# . Fixed a whole bunch of places in the CGI interface where we should have
-# been returning Not Found instead of throwing an exception.
-# . Fixed a deviation from the spec: trying to modify the 'id' property of
-# an item now throws an exception.
-#
-# Revision 1.9 2001/08/07 00:24:43 richard
-# stupid typo
-#
-# Revision 1.8 2001/08/07 00:15:51 richard
-# Added the copyright/license notice to (nearly) all files at request of
-# Bizar Software.
-#
-# Revision 1.7 2001/08/02 00:43:06 richard
-# Even better (more useful) headings
-#
-# Revision 1.6 2001/08/02 00:36:42 richard
-# Made all the user-specific link names the same (My Foo)
-#
-# Revision 1.5 2001/08/01 05:15:09 richard
-# Added "My Issues" and "My Support" to extended template.
-#
-# Revision 1.4 2001/07/30 08:12:17 richard
-# Added time logging and file uploading to the templates.
-#
-# Revision 1.3 2001/07/30 01:26:59 richard
-# Big changes:
-# . split off the support priority into its own class
-# . added "new support, new user" to the page head
-# . fixed the display options for the heading links
-#
-# Revision 1.2 2001/07/29 07:01:39 richard
-# Added vim command to all source so that we don't get no steenkin' tabs :)
-#
-# Revision 1.1 2001/07/23 23:16:01 richard
-# Split off the interfaces (CGI, mailgw) into a separate file from the DB stuff.
-#
-#
-# vim: set filetype=python ts=4 sw=4 et si