Mercurial > p > roundup > code
changeset 1304:61ad556cfc8d
working toward 0.5.2 release
| author | Richard Jones <richard@users.sourceforge.net> |
|---|---|
| date | Wed, 06 Nov 2002 11:38:43 +0000 |
| parents | 71be6588904f |
| children | d8de80de9fc4 |
| files | CHANGES.txt cgi-bin/roundup.cgi doc/FAQ.txt doc/Makefile doc/announcement.txt doc/customizing.txt roundup/__init__.py roundup/backends/back_anydbm.py roundup/backends/rdbms_common.py roundup/templates/classic/html/issue.item roundup/templates/classic/html/user.item |
| diffstat | 11 files changed, 87 insertions(+), 59 deletions(-) [+] |
line wrap: on
line diff
--- a/CHANGES.txt Wed Nov 06 05:39:50 2002 +0000 +++ b/CHANGES.txt Wed Nov 06 11:38:43 2002 +0000 @@ -22,6 +22,9 @@ - added ID to the search page (sf bug 631601) - fixed filtering by id in anydbm - show issue ID in the headings (sf bug 631598) +- show entire messages by default in issues (sf bug 625995) +- fixed journalling to save old values instead of new (sorry it took so long GM) +- handle missing REQUEST_URI for cgi-bin users (sf bug 620163) 2002-10-16 0.5.1
--- a/cgi-bin/roundup.cgi Wed Nov 06 05:39:50 2002 +0000 +++ b/cgi-bin/roundup.cgi Wed Nov 06 11:38:43 2002 +0000 @@ -16,7 +16,7 @@ # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. # -# $Id: roundup.cgi,v 1.34 2002-10-08 03:31:09 richard Exp $ +# $Id: roundup.cgi,v 1.35 2002-11-06 11:38:42 richard Exp $ # python version check from roundup import version_check @@ -149,7 +149,7 @@ else: protocol = 'http' absolute_url = '%s://%s%s/'%(protocol, os.environ['HTTP_HOST'], - os.environ['REQUEST_URI']) + os.environ.get('REQUEST_URI', '')) request.send_header('Location', absolute_url) request.end_headers() out.write('Moved Permanently')
--- a/doc/FAQ.txt Wed Nov 06 05:39:50 2002 +0000 +++ b/doc/FAQ.txt Wed Nov 06 11:38:43 2002 +0000 @@ -2,16 +2,13 @@ Roundup FAQ =========== -:Version: $Revision: 1.10 $ +:Version: $Revision: 1.11 $ NOTE: This is just a grabbag, most of this should go into documentation. .. contents:: -Changing HTML layout --------------------- - Installation ------------ @@ -34,11 +31,6 @@ * roundup-mailgw called via .forward from MTA, or running a cron job fetching via pop. -see Troubleshooting_. - - -Troubleshooting ---------------- -----------------
--- a/doc/Makefile Wed Nov 06 05:39:50 2002 +0000 +++ b/doc/Makefile Wed Nov 06 11:38:43 2002 +0000 @@ -1,5 +1,5 @@ PYTHON = /usr/bin/python2 -STXTOHTML = -c "from docutils.core import publish;publish(writer_name='html')" +STXTOHTML = stx2html SOURCE = announcement.txt customizing.txt developers.txt FAQ.txt features.txt \ glossary.txt implementation.txt index.txt design.txt \ @@ -10,7 +10,7 @@ all: ${COMPILED} %.html: %.txt - ${PYTHON} ${STXTOHTML} --report=warning -d $< $@ + ${STXTOHTML} --report=warning -d $< $@ clean: rm -f ${COMPILED}
--- a/doc/announcement.txt Wed Nov 06 05:39:50 2002 +0000 +++ b/doc/announcement.txt Wed Nov 06 11:38:43 2002 +0000 @@ -13,6 +13,32 @@ We've had a good crack at bugs (thanks to all who contributed!): +- added quotes around python interpreter in windows bat (sf bug 623963) +- fixed link at end of installation doc (sf bug 623957) +- handle "classname" URL path errors cleaner (generate a 404) +- added CGI :remove:<propname> and :add:<propname> which specify item + ids to remove / add in <propname> multilink. +- bugfix in boolean templating +- remember the change note on bad submissions (sf bug 625989) +- highlight required form fields (sf bug 625989) +- force non-word boundary to match re: in subject (sf bug 626303) +- handle sqlite bug (<2.7.2) (sf bug 630828) +- handle missing props in anydbm stringFind +- updated email package address formatting (deprecation) +- copied email address quoting from email v2.4.3 so we're consistent + with 2.2 +- email summary extraction now takes the first whole sentence or line - + whichever is longer +- documented dependency on Active State (sf bug 623959) +- ensured there's no zero-length files in source (sf bug 633622) +- added ID to the search page (sf bug 631601) +- fixed filtering by id in anydbm +- show issue ID in the headings (sf bug 631598) +- show entire messages by default in issues (sf bug 625995) +- fixed journalling to save old values instead of new (sorry I took so + long, GM) +- handle missing REQUEST_URI for cgi-bin users (sf bug 620163) + Source and documentation is available at the website: http://roundup.sourceforge.net/
--- a/doc/customizing.txt Wed Nov 06 05:39:50 2002 +0000 +++ b/doc/customizing.txt Wed Nov 06 11:38:43 2002 +0000 @@ -2,7 +2,7 @@ Customising Roundup =================== -:Version: $Revision: 1.61 $ +:Version: $Revision: 1.62 $ .. This document borrows from the ZopeBook section on ZPT. The original is at: http://www.zope.org/Documentation/Books/ZopeBook/current/ZPT.stx @@ -2144,26 +2144,23 @@ which displays only the allowed status to transition to. -Displaying entire message contents in the issue display -------------------------------------------------------- +Displaying only message summaries in the issue display +------------------------------------------------------ Alter the issue.item template section for messages to:: <table class="messages" tal:condition="context/messages"> - <tr><th colspan=3 class="header">Messages</th></tr> - <tal:block tal:repeat="msg context/messages/reverse"> - <tr> - <th><a tal:attributes="href string:msg${msg/id}" - tal:content="string:msg${msg/id}"></a></th> - <th tal:content="string:Author: ${msg/author}">author</th> - <th tal:content="string:Date: ${msg/date}">date</th> - </tr> - <tr> - <td colspan="3" class="content"> - <pre tal:content="msg/content">content</pre> - </td> - </tr> - </tal:block> + <tr><th colspan=5 class="header">Messages</th></tr> + <tr tal:repeat="msg context/messages"> + <td><a tal:attributes="href string:msg${msg/id}" + tal:content="string:msg${msg/id}"></a></td> + <td tal:content="msg/author">author</td> + <td nowrap tal:content="msg/date/pretty">date</td> + <td tal:content="msg/summary">summary</td> + <td> + <a tal:attributes="href string:?:remove:messages=${msg/id}&:action=edit">remove</a> + </td> + </tr> </table> Restricting the list of users that are assignable to a task @@ -2718,7 +2715,7 @@ ------------------------------------------------------------------- This is pretty simple - all we need to do is copy the code from the example -`displaying entire message contents in the issue display`_ into our template +`displaying only message summaries in the issue display`_ into our template alongside the summary display, and then introduce a switch that shows either one or the other. We'll use a new form variable, ``:whole_messages`` to achieve this::
--- a/roundup/__init__.py Wed Nov 06 05:39:50 2002 +0000 +++ b/roundup/__init__.py Wed Nov 06 11:38:43 2002 +0000 @@ -15,7 +15,7 @@ # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. # -# $Id: __init__.py,v 1.15 2002-10-16 06:55:17 richard Exp $ +# $Id: __init__.py,v 1.16 2002-11-06 11:38:42 richard Exp $ ''' Roundup - issue tracking for knowledge workers. @@ -67,6 +67,6 @@ much prettier cake :) ''' -__version__ = '0.5.1' +__version__ = '0.5.2' # vim: set filetype=python ts=4 sw=4 et si
--- a/roundup/backends/back_anydbm.py Wed Nov 06 05:39:50 2002 +0000 +++ b/roundup/backends/back_anydbm.py Wed Nov 06 11:38:43 2002 +0000 @@ -15,7 +15,7 @@ # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. # -#$Id: back_anydbm.py,v 1.91 2002-11-06 05:39:49 richard Exp $ +#$Id: back_anydbm.py,v 1.92 2002-11-06 11:38:42 richard Exp $ ''' This module defines a backend that saves the hyperdatabase in a database chosen by anydbm. It is guaranteed to always be available in python @@ -888,7 +888,7 @@ # done self.db.addnode(self.classname, newid, propvalues) if self.do_journal: - self.db.addjournal(self.classname, newid, 'create', propvalues) + self.db.addjournal(self.classname, newid, 'create', {}) self.fireReactors('create', newid, None) @@ -970,7 +970,7 @@ creation = None if d.has_key('activity'): del d['activity'] - self.db.addjournal(self.classname, newid, 'create', d, creator, + self.db.addjournal(self.classname, newid, 'create', {}, creator, creation) return newid @@ -1145,9 +1145,11 @@ # if the value's the same as the existing value, no sense in # doing anything - if node.has_key(propname) and value == node[propname]: + current = node.get(propname, None) + if value == current: del propvalues[propname] continue + journalvalues[propname] = current # do stuff based on the prop type if isinstance(prop, Link): @@ -1283,8 +1285,7 @@ self.db.setnode(self.classname, nodeid, node) if self.do_journal: - propvalues.update(journalvalues) - self.db.addjournal(self.classname, nodeid, 'set', propvalues) + self.db.addjournal(self.classname, nodeid, 'set', journalvalues) self.fireReactors('set', nodeid, oldvalues) @@ -1612,7 +1613,6 @@ # now, find all the nodes that are active and pass filtering l = [] cldb = self.db.getclassdb(cn) - print filterspec try: # TODO: only full-scan once (use items()) for nodeid in self.db.getnodeids(cn, cldb):
--- a/roundup/backends/rdbms_common.py Wed Nov 06 05:39:50 2002 +0000 +++ b/roundup/backends/rdbms_common.py Wed Nov 06 11:38:43 2002 +0000 @@ -1,4 +1,4 @@ -# $Id: rdbms_common.py,v 1.23 2002-10-31 04:02:23 richard Exp $ +# $Id: rdbms_common.py,v 1.24 2002-11-06 11:38:42 richard Exp $ ''' Relational database (SQL) backend common code. Basics: @@ -1102,7 +1102,7 @@ # done self.db.addnode(self.classname, newid, propvalues) if self.do_journal: - self.db.addjournal(self.classname, newid, 'create', propvalues) + self.db.addjournal(self.classname, newid, 'create', {}) self.fireReactors('create', newid, None) @@ -1184,7 +1184,7 @@ creation = None if d.has_key('activity'): del d['activity'] - self.db.addjournal(self.classname, newid, 'create', d, creator, + self.db.addjournal(self.classname, newid, 'create', {}, creator, creation) return newid @@ -1323,9 +1323,11 @@ # if the value's the same as the existing value, no sense in # doing anything - if node.has_key(propname) and value == node[propname]: + current = node.get(propname, None) + if value == current: del propvalues[propname] continue + journalvalues[propname] = current # do stuff based on the prop type if isinstance(prop, Link): @@ -1460,8 +1462,7 @@ self.db.setnode(self.classname, nodeid, propvalues, multilink_changes) if self.do_journal: - propvalues.update(journalvalues) - self.db.addjournal(self.classname, nodeid, 'set', propvalues) + self.db.addjournal(self.classname, nodeid, 'set', journalvalues) self.fireReactors('set', nodeid, oldvalues)
--- a/roundup/templates/classic/html/issue.item Wed Nov 06 05:39:50 2002 +0000 +++ b/roundup/templates/classic/html/issue.item Wed Nov 06 11:38:43 2002 +0000 @@ -127,17 +127,23 @@ </p> <table class="messages" tal:condition="context/messages"> - <tr><th colspan=5 class="header">Messages</th></tr> - <tr tal:repeat="msg context/messages"> - <td><a tal:attributes="href string:msg${msg/id}" - tal:content="string:msg${msg/id}"></a></td> - <td tal:content="msg/author">author</td> - <td nowrap tal:content="msg/date/pretty">date</td> - <td tal:content="msg/summary">summary</td> - <td> - <a tal:attributes="href string:?:remove:messages=${msg/id}&:action=edit">remove</a> - </td> - </tr> + <tr><th colspan="4" class="header">Messages</th></tr> + <tal:block tal:repeat="msg context/messages"> + <tr> + <th><a tal:attributes="href string:msg${msg/id}" + tal:content="string:msg${msg/id}"></a></th> + <th tal:content="string:Author: ${msg/author}">author</th> + <th tal:content="string:Date: ${msg/date}">date</th> + <th> + <a tal:attributes="href string:?:remove:messages=${msg/id}&:action=edit">remove</a> + </th> + </tr> + <tr> + <td colspan="4" class="content"> + <pre tal:content="msg/content">content</pre> + </td> + </tr> + </tal:block> </table> <table class="files" tal:condition="context/files">
--- a/roundup/templates/classic/html/user.item Wed Nov 06 05:39:50 2002 +0000 +++ b/roundup/templates/classic/html/user.item Wed Nov 06 11:38:43 2002 +0000 @@ -64,14 +64,17 @@ </form> <table class="otherinfo" tal:condition="context/queries"> - <tr><th colspan="2" class="header">Queries</th></tr> - <tr><th>Name</th><th>Display</th></tr> + <tr><th colspan="3" class="header">Queries</th></tr> + <tr><th>Name</th><th colspan="2">Actions</th></tr> <tr tal:repeat="query context/queries"> <td><a tal:attributes="href string:query${query/id}" tal:content="query/name"></a></td> <td> <a tal:attributes="href python:'%s%s'%(query['klass'], query['url'])">display</a> </td> + <td> + <a tal:attributes="href string:?:remove:queries=${query/id}&:action=edit">remove</a> + </td> </tr> </table>
