[Python-checkins] r52825 - in tracker/instances/python-dev: detectors/nosyreaction.py detectors/statusauditor.py html/_generic.index.html html/bug.index.html html/bug.item.html html/bug.search.html html/file.index.html html/home.html html/issue.index.html html/issue.item.html html/issue.search.html html/keyword.item.html html/msg.index.html html/msg.item.html html/page.html html/query.edit.html html/style.css html/user.forgotten.html html/user.help-search.html html/user.index.html html/user.item.html html/user.register.html html/user.rego_progress.html initial_data.py schema.py
stefan.seefeld
python-checkins at python.org
Thu Nov 23 02:25:04 CET 2006
Author: stefan.seefeld
Date: Thu Nov 23 02:25:02 2006
New Revision: 52825
Added:
tracker/instances/python-dev/html/bug.index.html
- copied, changed from r52742, tracker/instances/python-dev/html/issue.index.html
tracker/instances/python-dev/html/bug.item.html
- copied, changed from r52779, tracker/instances/python-dev/html/issue.item.html
tracker/instances/python-dev/html/bug.search.html
- copied, changed from r52742, tracker/instances/python-dev/html/issue.search.html
Removed:
tracker/instances/python-dev/html/issue.index.html
tracker/instances/python-dev/html/issue.item.html
tracker/instances/python-dev/html/issue.search.html
Modified:
tracker/instances/python-dev/detectors/nosyreaction.py
tracker/instances/python-dev/detectors/statusauditor.py
tracker/instances/python-dev/html/_generic.index.html
tracker/instances/python-dev/html/file.index.html
tracker/instances/python-dev/html/home.html
tracker/instances/python-dev/html/keyword.item.html
tracker/instances/python-dev/html/msg.index.html
tracker/instances/python-dev/html/msg.item.html
tracker/instances/python-dev/html/page.html
tracker/instances/python-dev/html/query.edit.html
tracker/instances/python-dev/html/style.css
tracker/instances/python-dev/html/user.forgotten.html
tracker/instances/python-dev/html/user.help-search.html
tracker/instances/python-dev/html/user.index.html
tracker/instances/python-dev/html/user.item.html
tracker/instances/python-dev/html/user.register.html
tracker/instances/python-dev/html/user.rego_progress.html
tracker/instances/python-dev/initial_data.py
tracker/instances/python-dev/schema.py
Log:
Redesign schema and adjust html templates.
Modified: tracker/instances/python-dev/detectors/nosyreaction.py
==============================================================================
--- tracker/instances/python-dev/detectors/nosyreaction.py (original)
+++ tracker/instances/python-dev/detectors/nosyreaction.py Thu Nov 23 02:25:02 2006
@@ -1,24 +1,4 @@
-#
-# 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.4 2005/04/04 08:47:14 richard Exp $
-
import sets
-
from roundup import roundupdb, hyperdb
def nosyreaction(db, cl, nodeid, oldvalues):
@@ -26,7 +6,7 @@
"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"
+ the "nosy" list for the bug that are not already on the "recipients"
list of the message.
Those users are then appended to the "recipients" property on the
@@ -52,12 +32,12 @@
# 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)
+ # the action was a set (so adding new messages to an existing bug)
m = {}
for msgid in oldvalues['messages']:
m[msgid] = 1
messages = []
- # figure which of the messages now on the issue weren't there before
+ # figure which of the messages now on the bug weren't there before
for msgid in cl.get(nodeid, 'messages'):
if not m.has_key(msgid):
messages.append(msgid)
@@ -107,7 +87,7 @@
messages = newvalues['messages']
else:
ok = ('yes',)
- # figure which of the messages now on the issue weren't
+ # figure which of the messages now on the bug weren't
oldmessages = cl.get(nodeid, 'messages')
messages = []
for msgid in newvalues['messages']:
@@ -135,9 +115,7 @@
newvalues['nosy'] = list(new_nosy)
def init(db):
- db.issue.react('create', nosyreaction)
- db.issue.react('set', nosyreaction)
- db.issue.audit('create', updatenosy)
- db.issue.audit('set', updatenosy)
-
-# vim: set filetype=python ts=4 sw=4 et si
+ db.bug.react('create', nosyreaction)
+ db.bug.react('set', nosyreaction)
+ db.bug.audit('create', updatenosy)
+ db.bug.audit('set', updatenosy)
Modified: tracker/instances/python-dev/detectors/statusauditor.py
==============================================================================
--- tracker/instances/python-dev/detectors/statusauditor.py (original)
+++ tracker/instances/python-dev/detectors/statusauditor.py Thu Nov 23 02:25:02 2006
@@ -1,85 +1,95 @@
-# 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.5 2004/03/27 00:01:48 richard Exp $
-
-def chatty(db, cl, nodeid, newvalues):
- ''' If the issue is currently 'unread', 'resolved', 'done-cbb' or None,
- 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'):
- return
+def init_status(db, cl, nodeid, newvalues):
+ """ Make sure the status is set on new bugs"""
- # get the chatting state ID
- try:
- chatting_id = db.status.lookup('chatting')
- except KeyError:
- # no chatting state, ignore all this stuff
+ if newvalues.has_key('status') and newvalues['status']:
return
- # get the current value
- current_status = cl.get(nodeid, 'status')
+ new_id = db.status.lookup('new')
+ newvalues['status'] = new_id
+
+
+def block_resolution(db, cl, nodeid, newvalues):
+ """ If the issue has blockers, don't allow it to be resolved."""
- # see if there's an explicit change in this transaction
- if newvalues.has_key('status'):
- # yep, skip
+ if nodeid is None:
+ dependencies = []
+ else:
+ dependencies = cl.get(nodeid, 'dependencies')
+ dependencies = newvalues.get('dependencies', dependencies)
+
+ # don't do anything if there's no blockers or the status hasn't
+ # changed
+ if not dependencies or not newvalues.has_key('status'):
return
- # determine the id of 'unread', 'resolved' and 'chatting'
- fromstates = []
- for state in 'unread resolved done-cbb'.split():
- try:
- fromstates.append(db.status.lookup(state))
- except KeyError:
- pass
-
- # ok, there's no explicit change, so check if we are in a state that
- # should be changed
- if current_status in fromstates + [None]:
- # yep, we're now chatting
- newvalues['status'] = chatting_id
-
-
-def presetunread(db, cl, nodeid, newvalues):
- ''' Make sure the status is set on new issues
- '''
- if newvalues.has_key('status') and newvalues['status']:
+ # format the info
+ u = db.config.TRACKER_WEB
+ s = ', '.join(['<a href="%sbug%s">%s</a>'%(u,id,id) for id in dependencies])
+ if len(dependencies) == 1:
+ s = 'bug %s is'%s
+ else:
+ s = 'bugs %s are'%s
+
+ # ok, see if we're trying to resolve
+ if newvalues.get('status') and newvalues['status'] == db.status.lookup('closed'):
+ raise ValueError, "This bug can't be closed until %s closed."%s
+
+
+def resolve(db, cl, nodeid, newvalues):
+ """Make sure status, resolution, and superseder values match."""
+
+ status_change = newvalues.get('status')
+ status_close = status_change and newvalues['status'] == db.status.lookup('closed')
+
+ # Make sure resolution and superseder get only set when status->close
+ if not status_change or not status_close:
+ if newvalues.get('resolution') or newvalues.get('superseder'):
+ raise ValueError, "resolution and superseder must only be set when a bug is closed"
+
+ # Make sure resolution is set when status->close
+ if status_close:
+ if not newvalues.get('resolution'):
+ raise ValueError, "resolution must be set when a bug is closed"
+
+ # Make sure superseder is set when resolution->duplicate
+ if newvalues['resolution'] == db.resolution.lookup('duplicate'):
+ if not newvalues.get('superseder'):
+ raise ValueError, "please provide a superseder when closing a bug as 'duplicate'"
+
+
+
+def resolve_dependencies(db, cl, nodeid, oldvalues):
+ """ When we resolve an issue that's a blocker, remove it from the
+ blockers list of the issue(s) it blocks."""
+
+ newstatus = cl.get(nodeid,'status')
+
+ # no change?
+ if oldvalues.get('status', None) == newstatus:
return
- # get the unread state ID
- try:
- unread_id = db.status.lookup('unread')
- except KeyError:
- # no unread state, ignore all this stuff
+ closed_id = db.status.lookup('closed')
+
+ # interesting?
+ if newstatus != closed_id:
return
- # ok, do it
- newvalues['status'] = unread_id
+ # yes - find all the dependend issues, if any, and remove me from
+ # their dependency list
+ bugs = cl.find(dependencies=nodeid)
+ for bugid in bugs:
+ dependencies = cl.get(bugid, 'dependencies')
+ if nodeid in dependencies:
+ dependencies.remove(nodeid)
+ cl.set(bugid, dependencies=dependencies)
def init(db):
# fire before changes are made
- db.issue.audit('set', chatty)
- db.issue.audit('create', presetunread)
+ db.bug.audit('create', init_status)
+ db.bug.audit('create', block_resolution)
+ db.bug.audit('set', block_resolution)
+ db.bug.audit('set', resolve)
-# vim: set filetype=python ts=4 sw=4 et si
+ # adjust after changes are committed
+ db.bug.react('set', resolve_dependencies)
Modified: tracker/instances/python-dev/html/_generic.index.html
==============================================================================
--- tracker/instances/python-dev/html/_generic.index.html (original)
+++ tracker/instances/python-dev/html/_generic.index.html Thu Nov 23 02:25:02 2006
@@ -1,5 +1,3 @@
-<!-- dollarId: issue.index,v 1.2 2001/07/29 04:07:37 richard Exp dollar-->
-
<tal:block metal:use-macro="templates/page/macros/icing">
<title metal:fill-slot="head_title" i18n:translate=""
><span tal:replace="python:context._classname.capitalize()"
Copied: tracker/instances/python-dev/html/bug.index.html (from r52742, tracker/instances/python-dev/html/issue.index.html)
==============================================================================
--- tracker/instances/python-dev/html/issue.index.html (original)
+++ tracker/instances/python-dev/html/bug.index.html Thu Nov 23 02:25:02 2006
@@ -1,17 +1,16 @@
-<!-- $Id: issue.index.html,v 1.27 2006/11/09 01:26:28 richard Exp $ -->
<tal:block metal:use-macro="templates/page/macros/icing">
<title metal:fill-slot="head_title" >
- <span tal:omit-tag="true" i18n:translate="" >List of issues</span>
+ <span tal:omit-tag="true" i18n:translate="" >List of bugs</span>
<span tal:condition="request/dispname"
tal:replace="python:' - %s '%request.dispname"
/> - <span tal:replace="config/TRACKER_NAME" />
</title>
<span metal:fill-slot="body_title" tal:omit-tag="true">
- <span tal:omit-tag="true" i18n:translate="" >List of issues</span>
+ <span tal:omit-tag="true" i18n:translate="" >List of bugs</span>
<span tal:condition="request/dispname"
tal:replace="python:' - %s' % request.dispname" />
</span>
-<td class="content" metal:fill-slot="content">
+<tal:block metal:fill-slot="content">
<p tal:condition="python:not (context.is_view_ok()
or request.user.hasRole('Anonymous'))" i18n:translate="">
@@ -24,16 +23,15 @@
<tal:block tal:define="batch request/batch" tal:condition="context/is_view_ok">
<table class="list">
<tr>
- <th tal:condition="request/show/priority" i18n:translate="">Priority</th>
+ <th tal:condition="request/show/severity" i18n:translate="">Severity</th>
<th tal:condition="request/show/id" i18n:translate="">ID</th>
<th tal:condition="request/show/creation" i18n:translate="">Creation</th>
<th tal:condition="request/show/activity" i18n:translate="">Activity</th>
<th tal:condition="request/show/actor" i18n:translate="">Actor</th>
- <th tal:condition="request/show/topic" i18n:translate="">Topic</th>
<th tal:condition="request/show/title" i18n:translate="">Title</th>
<th tal:condition="request/show/status" i18n:translate="">Status</th>
<th tal:condition="request/show/creator" i18n:translate="">Creator</th>
- <th tal:condition="request/show/assignedto" i18n:translate="">Assigned To</th>
+ <th tal:condition="request/show/assignee" i18n:translate="">Assigned To</th>
</tr>
<tal:block tal:repeat="i batch" condition=true>
<tr tal:define="group python:[r[1] for r in request.group]"
@@ -46,8 +44,8 @@
</tr>
<tr>
- <td tal:condition="request/show/priority"
- tal:content="python:i.priority.plain() or default"> </td>
+ <td tal:condition="request/show/severity"
+ tal:content="python:i.severity.plain() or default"> </td>
<td tal:condition="request/show/id" tal:content="i/id"> </td>
<td class="date" tal:condition="request/show/creation"
tal:content="i/creation/reldate"> </td>
@@ -55,18 +53,16 @@
tal:content="i/activity/reldate"> </td>
<td class="date" tal:condition="request/show/actor"
tal:content="python:i.actor.plain() or default"> </td>
- <td tal:condition="request/show/topic"
- tal:content="python:i.topic.plain() or default"> </td>
<td tal:condition="request/show/title">
- <a tal:attributes="href string:issue${i/id}"
+ <a tal:attributes="href string:bug${i/id}"
tal:content="python:str(i.title.plain(hyperlink=0)) or '[no title]'">title</a>
</td>
<td tal:condition="request/show/status"
tal:content="python:i.status.plain() or default"> </td>
<td tal:condition="request/show/creator"
tal:content="python:i.creator.plain() or default"> </td>
- <td tal:condition="request/show/assignedto"
- tal:content="python:i.assignedto.plain() or default"> </td>
+ <td tal:condition="request/show/assignee"
+ tal:content="python:i.assignee.plain() or default"> </td>
</tr>
</tal:block>
@@ -101,10 +97,10 @@
</metal:index>
</table>
-<a tal:attributes="href python:request.indexargs_url('issue',
+<a tal:attributes="href python:request.indexargs_url('bug',
{'@action':'export_csv'})" i18n:translate="">Download as CSV</a>
-<form method="GET" class="index-controls"
+<form method="get" class="index-controls"
tal:attributes="action request/classname">
<table class="form" tal:define="n_sort python:2">
@@ -125,7 +121,7 @@
</td>
<th i18n:translate="">Descending:</th>
<td><input type="checkbox" tal:attributes="name python:'@sortdir%d'%n;
- checked python:key and key[0] == '-'">
+ checked python:key and key[0] == '-'"/>
</td>
</tr>
</tal:block>
@@ -146,7 +142,7 @@
</td>
<th i18n:translate="">Descending:</th>
<td><input type="checkbox" tal:attributes="name python:'@groupdir%d'%n;
- checked python:key and key[0] == '-'">
+ checked python:key and key[0] == '-'"/>
</td>
</tr>
</tal:block>
@@ -159,6 +155,5 @@
</form>
</tal:block>
-
-</td>
+</tal:block>
</tal:block>
Copied: tracker/instances/python-dev/html/bug.item.html (from r52779, tracker/instances/python-dev/html/issue.item.html)
==============================================================================
--- tracker/instances/python-dev/html/issue.item.html (original)
+++ tracker/instances/python-dev/html/bug.item.html Thu Nov 23 02:25:02 2006
@@ -1,25 +1,24 @@
-<!-- dollarId: issue.item,v 1.4 2001/08/03 01:19:43 richard Exp dollar-->
<tal:block metal:use-macro="templates/page/macros/icing">
<title metal:fill-slot="head_title">
<tal:block condition="context/id" i18n:translate=""
- >Issue <span tal:replace="context/id" i18n:name="id"
+ >Bug <span tal:replace="context/id" i18n:name="id"
/>: <span tal:replace="context/title" i18n:name="title"
/> - <span tal:replace="config/TRACKER_NAME" i18n:name="tracker"
/></tal:block>
<tal:block condition="not:context/id" i18n:translate=""
- >New Issue - <span tal:replace="config/TRACKER_NAME" i18n:name="tracker"
+ >New Bug - <span tal:replace="config/TRACKER_NAME" i18n:name="tracker"
/></tal:block>
</title>
<tal:block metal:fill-slot="body_title">
<span tal:condition="python: not (context.id or context.is_edit_ok())"
- tal:omit-tag="python:1" i18n:translate="">New Issue</span>
+ tal:omit-tag="python:1" i18n:translate="">New Bug</span>
<span tal:condition="python: not context.id and context.is_edit_ok()"
- tal:omit-tag="python:1" i18n:translate="">New Issue Editing</span>
+ tal:omit-tag="python:1" i18n:translate="">New Bug Editing</span>
<span tal:condition="python: context.id and not context.is_edit_ok()"
- tal:omit-tag="python:1" i18n:translate="">Issue<tal:x
+ tal:omit-tag="python:1" i18n:translate="">Bug<tal:x
replace="context/id" i18n:name="id" /></span>
<span tal:condition="python: context.id and context.is_edit_ok()"
- tal:omit-tag="python:1" i18n:translate="">Issue<tal:x
+ tal:omit-tag="python:1" i18n:translate="">Bug<tal:x
replace="context/id" i18n:name="id" /> Editing</span>
</tal:block>
@@ -35,89 +34,133 @@
<div tal:condition="context/is_view_ok">
-<p tal:condition="python: context.id and context.imported_from_sf">
- <a tal:attributes="href
- python:'http://sourceforge.net/support/tracker.php?aid='+context.id;">
- Sourceforge tracker item</a> (for comparison)
-</p>
-
<form method="POST" name="itemSynopsis"
onSubmit="return submit_once()" enctype="multipart/form-data"
tal:attributes="action context/designator">
+<fieldset><legend>classification</legend>
<table class="form">
<tr>
- <th class="required" i18n:translate="">Title</th>
- <td colspan=3 tal:content="structure python:context.title.field(size=60)">title</td>
+ <th class="required" i18n:translate="">Title:</th>
+ <td colspan="5" tal:condition="context/title/is_edit_ok"
+ tal:content="structure python:context.title.field(size=60)">title</td>
+ <td colspan="5" tal:condition="not:context/title/is_edit_ok">
+ <span tal:content="structure context/title/plain"/>
+<!-- <input type="hidden" name="title" tal:attributes="value context/title">-->
+ </td>
</tr>
<tr>
+ <th class="required" i18n:translate="">
+ <span tal:replace="structure python:db.bug_type.classhelp('id,name,description',label='Type')" />:
+ </th>
+ <td tal:content="structure context/type/menu">type</td>
<th i18n:translate="">
- <span tal:replace="structure python:db.group.classhelp('id,name,description',label='Group')" />
+ <span tal:replace="structure python:db.severity.classhelp('id,name,description',label='Severity')" />:
</th>
- <td tal:content="structure context/group/menu">group</td>
- <th class="required" i18n:translate="">Priority</th>
- <td tal:content="structure context/priority/menu">priority</td>
+ <td tal:content="structure context/severity/menu">severity</td>
+ <th></th><td></td>
</tr>
<tr>
<th i18n:translate="">
- <span tal:replace="structure python:db.status.classhelp('id,name,description',label='Status')" />
+ <span tal:replace="structure python:db.component.classhelp('id,name,description',label='Components')" />:
+ </th>
+ <td tal:content="structure context/components/menu">components</td>
+ <th i18n:translate="">
+ <span tal:replace="structure python:db.version.classhelp('id,name,description',label='Versions')" />:
+ </th>
+ <td tal:content="structure context/versions/menu">versions</td>
+ <th i18n:translate="">
+ <span tal:replace="structure python:db.platform.classhelp('id,name,description',label='Platforms')" />:
+ </th>
+ <td tal:content="structure context/platforms/menu">platform</td>
+</tr>
+</table>
+</fieldset>
+
+<fieldset><legend>process</legend>
+<table class="form">
+<tr tal:condition="context/id">
+ <th i18n:translate="">
+ <span tal:replace="structure python:db.status.classhelp('id,name,description',label='Status')" />:
</th>
<td tal:content="structure context/status/menu">status</td>
- <th i18n:translate="">Resolution</th>
+ <th i18n:translate="">Resolution:</th>
<td tal:content="structure context/resolution/menu">resolution</td>
</tr>
-<tr>
- <th i18n:translate="">Superseder</th>
+<tr tal:condition="context/id">
+ <th>
+ <tal:block i18n:translate="">Dependencies</tal:block>:
+ <span tal:condition="context/dependencies/is_edit_ok"
+ tal:replace="structure python:db.bug.classhelp('id,title', filter='status=0,1', property='dependencies')" />
+ </th>
+ <td>
+ <span tal:replace="structure python:context.dependencies.field(showid=1,size=20)" />
+ <span tal:condition="context/dependencies" tal:repeat="d context/dependencies">
+ <br/>View: <a tal:attributes="href string:bug${d/id}" tal:content="d/id"></a>
+ </span>
+ </td>
+ <th i18n:translate="">
+ <tal:block i18n:translate="">Superseder</tal:block>:
+ <span tal:condition="context/superseder/is_edit_ok"
+ tal:replace="structure python:db.bug.classhelp('id,title', filter='status=0,1', property='superseder')" />
+ </th>
<td>
<span tal:replace="structure python:context.superseder.field(showid=1, size=20)" />
- <span tal:condition="context/is_edit_ok" tal:replace="structure python:db.issue.classhelp('id,title', property='superseder')" />
<span tal:condition="context/superseder">
- <br><span i18n:translate="">View:</span>
+ <br><span i18n:translate="">View</span>:
<a tal:repeat="sup context/superseder"
tal:content="python:sup['id'] + ', '*(not repeat['sup'].end)"
- tal:attributes="href string:issue${sup/id};
- title sup/title;"></a>
+ tal:attributes="href string:bug${sup/id}; title sup/title;"></a>
</span>
</td>
- <th i18n:translate="">Nosy List</th>
+ </tr>
+ <tr>
+ <th><tal:block i18n:translate="">Assigned To</tal:block>:</th>
+ <td tal:condition="context/status/is_edit_ok">
+ <select name="assignee">
+ <option value="-1">nobody</option>
+ <tal:block tal:repeat="user db/user/list">
+ <option tal:condition="python:user.hasPermission('Debugger', context._classname)"
+ tal:attributes="value user/id; selected python:user.id == context.assignee"
+ tal:content="user/username"></option>
+ </tal:block>
+ </select>
+ </td>
+ <td tal:condition="not:context/assignee/is_edit_ok">
+ <span tal:replace="structure context/assignee/plain" />
+ </td>
+ <th><tal:block i18n:translate="">Nosy List</tal:block>:
+ <span tal:condition="context/nosy/is_edit_ok"
+ tal:replace="structure python:db.user.classhelp('username,realname,address', property='nosy')" />
+ </th>
<td>
<span tal:replace="structure context/nosy/field" />
- <span tal:condition="context/is_edit_ok" tal:replace="structure
-python:db.user.classhelp('username,realname,address', property='nosy', width='600')" /><br>
- </td>
-</tr>
-
-<tr>
- <th i18n:translate="">Assigned To</th>
- <td tal:content="structure context/assignedto/menu">assignedto field</td>
- <th i18n:translate="">Topics</th>
- <td>
- <span tal:replace="structure context/topic/field" />
- <span tal:condition="context/is_edit_ok" tal:replace="structure python:db.keyword.classhelp(property='topic')" />
</td>
</tr>
<tr tal:condition="context/is_edit_ok">
- <th i18n:translate="">Change Note</th>
- <td colspan=3>
+ <th><tal:block i18n:translate="">Change Note</tal:block>:</th>
+ <td colspan="3">
<textarea tal:content="request/form/@note/value | default"
name="@note" wrap="hard" rows="5" cols="72"></textarea>
</td>
</tr>
<tr tal:condition="context/is_edit_ok">
- <th i18n:translate="">File</th>
+ <th><tal:block i18n:translate="">File</tal:block>:</th>
<td colspan=3><input type="file" name="@file" size="40"></td>
</tr>
-
+</table>
+</fieldset>
+<table class="form">
<tr tal:condition="context/is_edit_ok">
<td>
<input type="hidden" name="@template" value="item">
- <input type="hidden" name="@required" value="title,priority">
+ <input type="hidden" name="@required" value="title">
</td>
<td colspan=3>
<span tal:replace="structure context/submit">submit button</span>
@@ -125,20 +168,9 @@
i18n:translate="">Make a copy</a>
</td>
</tr>
-
</table>
</form>
-<tal:block tal:condition="not:context/id" i18n:translate="">
-<table class="form">
-<tr>
- <td>Note: </td>
- <th class="required">highlighted</th>
- <td> fields are required.</td>
-</tr>
-</table>
-</tal:block>
-
<p tal:condition="context/id" i18n:translate="">
Created on <b><tal:x replace="context/creation" i18n:name="creation" /></b>
by <b><tal:x replace="context/creator" i18n:name="creator" /></b>,
@@ -170,7 +202,7 @@
</td>
<td>
<form style="padding:0" tal:condition="context/is_edit_ok"
- tal:attributes="action string:issue${context/id}">
+ tal:attributes="action string:bug${context/id}">
<input type="hidden" name="@remove at files" tal:attributes="value file/id">
<input type="hidden" name="@action" value="edit">
<input type="submit" value="remove" i18n:attributes="value">
@@ -191,7 +223,7 @@
i18n:name="date" /></th>
<th>
<form style="padding:0" tal:condition="context/is_edit_ok"
- tal:attributes="action string:issue${context/id}">
+ tal:attributes="action string:bug${context/id}">
<input type="hidden" name="@remove at messages" tal:attributes="value msg/id">
<input type="hidden" name="@action" value="edit">
<input type="submit" value="remove" i18n:attributes="value">
@@ -213,4 +245,3 @@
</td>
</tal:block>
-<!-- SHA: 52e1c51e8d17b8e8dd4ff54055b4f87ef0aa13bc -->
Copied: tracker/instances/python-dev/html/bug.search.html (from r52742, tracker/instances/python-dev/html/issue.search.html)
==============================================================================
--- tracker/instances/python-dev/html/issue.search.html (original)
+++ tracker/instances/python-dev/html/bug.search.html Thu Nov 23 02:25:02 2006
@@ -50,16 +50,6 @@
<td> </td>
</tr>
-<tr tal:define="name string:topic;
- db_klass string:keyword;
- db_content string:name;">
- <th i18n:translate="">Topic:</th>
- <td metal:use-macro="search_select"></td>
- <td metal:use-macro="column_input"></td>
- <td metal:use-macro="sort_input"></td>
- <td metal:use-macro="group_input"></td>
-</tr>
-
<tr tal:define="name string:id">
<th i18n:translate="">ID:</th>
<td metal:use-macro="search_input"></td>
@@ -112,10 +102,10 @@
<td> </td>
</tr>
-<tr tal:define="name string:priority;
- db_klass string:priority;
+<tr tal:define="name string:type;
+ db_klass string:bug_type;
db_content string:name;">
- <th i18n:translate="">Priority:</th>
+ <th i18n:translate="">Type:</th>
<td metal:use-macro="search_select_translated">
<option metal:fill-slot="extra_options" value="-1" i18n:translate=""
tal:attributes="selected python:value == '-1'">not selected</option>
@@ -125,24 +115,72 @@
<td metal:use-macro="group_input"></td>
</tr>
-<tr tal:define="name string:status;
- db_klass string:status;
+<tr tal:define="name string:component;
+ db_klass string:component;
db_content string:name;">
- <th i18n:translate="">Status:</th>
+ <th i18n:translate="">Components:</th>
<td metal:use-macro="search_select_translated">
- <tal:block metal:fill-slot="extra_options">
- <option value="-1,1,2" i18n:translate=""
- tal:attributes="selected python:value == '-1,1,2'">not closed</option>
- <option value="-1" i18n:translate=""
- tal:attributes="selected python:value == '-1'">not selected</option>
- </tal:block>
+ <option metal:fill-slot="extra_options" value="-1" i18n:translate=""
+ tal:attributes="selected python:value == '-1'">not selected</option>
+ </td>
+ <td metal:use-macro="column_input"></td>
+ <td metal:use-macro="sort_input"></td>
+ <td metal:use-macro="group_input"></td>
+</tr>
+
+<tr tal:define="name string:platform;
+ db_klass string:platform;
+ db_content string:name;">
+ <th i18n:translate="">Platforms:</th>
+ <td metal:use-macro="search_select_translated">
+ <option metal:fill-slot="extra_options" value="-1" i18n:translate=""
+ tal:attributes="selected python:value == '-1'">not selected</option>
+ </td>
+ <td metal:use-macro="column_input"></td>
+ <td metal:use-macro="sort_input"></td>
+ <td metal:use-macro="group_input"></td>
+</tr>
+
+<tr tal:define="name string:version;
+ db_klass string:version;
+ db_content string:name;">
+ <th i18n:translate="">Versions:</th>
+ <td metal:use-macro="search_select_translated">
+ <option metal:fill-slot="extra_options" value="-1" i18n:translate=""
+ tal:attributes="selected python:value == '-1'">not selected</option>
</td>
<td metal:use-macro="column_input"></td>
<td metal:use-macro="sort_input"></td>
<td metal:use-macro="group_input"></td>
</tr>
-<tr tal:define="name string:assignedto;
+<tr tal:define="name string:severity;
+ db_klass string:severity;
+ db_content string:name;">
+ <th i18n:translate="">Severity:</th>
+ <td metal:use-macro="search_select_translated">
+ <option metal:fill-slot="extra_options" value="-1" i18n:translate=""
+ tal:attributes="selected python:value == '-1'">not selected</option>
+ </td>
+ <td metal:use-macro="column_input"></td>
+ <td metal:use-macro="sort_input"></td>
+ <td metal:use-macro="group_input"></td>
+</tr>
+
+<tr tal:define="name string:dependencies;
+ db_klass string:bug;
+ db_content string:id;">
+ <th i18n:translate="">Depends on:</th>
+ <td metal:use-macro="search_select_translated">
+ <option metal:fill-slot="extra_options" value="-1" i18n:translate=""
+ tal:attributes="selected python:value == '-1'">not selected</option>
+ </td>
+ <td metal:use-macro="column_input"></td>
+ <td metal:use-macro="sort_input"></td>
+ <td metal:use-macro="group_input"></td>
+</tr>
+
+<tr tal:define="name string:assignee;
db_klass string:user;
db_content string:username;"
tal:condition="db/user/is_view_ok">
@@ -160,6 +198,23 @@
<td metal:use-macro="group_input"></td>
</tr>
+<tr tal:define="name string:status;
+ db_klass string:status;
+ db_content string:name;">
+ <th i18n:translate="">Status:</th>
+ <td metal:use-macro="search_select_translated">
+ <tal:block metal:fill-slot="extra_options">
+ <option value="-1,1,2" i18n:translate=""
+ tal:attributes="selected python:value == '-1,1,2'">not closed</option>
+ <option value="-1" i18n:translate=""
+ tal:attributes="selected python:value == '-1'">not selected</option>
+ </tal:block>
+ </td>
+ <td metal:use-macro="column_input"></td>
+ <td metal:use-macro="sort_input"></td>
+ <td metal:use-macro="group_input"></td>
+</tr>
+
<tr>
<th i18n:translate="">No Sort or group:</th>
<td> </td>
@@ -183,14 +238,14 @@
<tr>
<th i18n:translate="">Sort Descending:</th>
<td><input type="checkbox" name="@sortdir"
- tal:attributes="checked sort_desc">
+ tal:attributes="checked sort_desc"/>
</td>
</tr>
<tr>
<th i18n:translate="">Group Descending:</th>
<td><input type="checkbox" name="@groupdir"
- tal:attributes="checked group_desc">
+ tal:attributes="checked group_desc"/>
</td>
</tr>
@@ -213,7 +268,7 @@
<tr><td> </td>
<td colspan="4" class="help">
<span i18n:translate="" tal:omit-tag="true">
- *: The "all text" field will look in message bodies and issue titles
+ *: The "all text" field will look in message bodies and bug titles
</span><br>
<span tal:condition="python:request.user.hasPermission('Edit', 'query')"
i18n:translate="" tal:omit-tag="true"
@@ -229,4 +284,3 @@
</td>
</tal:block>
-<!-- SHA: f0c86e97d4e43a1e3cc5f9e08ec4b918719ab6b8 -->
Modified: tracker/instances/python-dev/html/file.index.html
==============================================================================
--- tracker/instances/python-dev/html/file.index.html (original)
+++ tracker/instances/python-dev/html/file.index.html Thu Nov 23 02:25:02 2006
@@ -1,4 +1,3 @@
-<!-- dollarId: file.index,v 1.4 2002/01/23 05:10:27 richard Exp dollar-->
<tal:block metal:use-macro="templates/page/macros/icing">
<title metal:fill-slot="head_title" i18n:translate=""
>List of files - <span tal:replace="config/TRACKER_NAME" i18n:name="tracker" /></title>
@@ -22,7 +21,7 @@
<td tal:content="file/creation">creation date</td>
</tr>
- <metal:block use-macro="templates/issue.index/macros/batch-footer" />
+ <metal:block use-macro="templates/bug.index/macros/batch-footer" />
</table>
Modified: tracker/instances/python-dev/html/home.html
==============================================================================
--- tracker/instances/python-dev/html/home.html (original)
+++ tracker/instances/python-dev/html/home.html Thu Nov 23 02:25:02 2006
@@ -1,11 +1,10 @@
<!--
This is the default body that is displayed when people visit the
- tracker. The tag below lists the currently open issues. You may
+ tracker. The tag below lists the currently open bugs. You may
replace it with a greeting message, or a different list of issues or
whatever. It's a good idea to have the issues on the front page though
-->
-<span tal:replace="structure python:db.issue.renderWith('index',
- sort=[('-', 'activity')], group=[('+', 'priority')], filter=['status'],
- columns=['id','activity','title','creator','assignedto', 'status'],
+<span tal:replace="structure python:db.bug.renderWith('index',
+ sort=[('-', 'activity')], group=[('+', 'severity')], filter=['status'],
+ columns=['id','activity','title','creator','assignee', 'status'],
filterspec={'status':['1','2']})" />
-<!-- SHA: 1fdaa3238149b4381d19a45a81deb6075de7d0e9 -->
Deleted: /tracker/instances/python-dev/html/issue.index.html
==============================================================================
--- /tracker/instances/python-dev/html/issue.index.html Thu Nov 23 02:25:02 2006
+++ (empty file)
@@ -1,164 +0,0 @@
-<!-- $Id: issue.index.html,v 1.27 2006/11/09 01:26:28 richard Exp $ -->
-<tal:block metal:use-macro="templates/page/macros/icing">
-<title metal:fill-slot="head_title" >
- <span tal:omit-tag="true" i18n:translate="" >List of issues</span>
- <span tal:condition="request/dispname"
- tal:replace="python:' - %s '%request.dispname"
- /> - <span tal:replace="config/TRACKER_NAME" />
-</title>
-<span metal:fill-slot="body_title" tal:omit-tag="true">
- <span tal:omit-tag="true" i18n:translate="" >List of issues</span>
- <span tal:condition="request/dispname"
- tal:replace="python:' - %s' % request.dispname" />
-</span>
-<td class="content" metal:fill-slot="content">
-
-<p tal:condition="python:not (context.is_view_ok()
- or request.user.hasRole('Anonymous'))" i18n:translate="">
- You are not allowed to view this page.</p>
-
-<p tal:condition="python:not context.is_view_ok()
- and request.user.hasRole('Anonymous')" i18n:translate="">
- Please login with your username and password.</p>
-
-<tal:block tal:define="batch request/batch" tal:condition="context/is_view_ok">
- <table class="list">
- <tr>
- <th tal:condition="request/show/priority" i18n:translate="">Priority</th>
- <th tal:condition="request/show/id" i18n:translate="">ID</th>
- <th tal:condition="request/show/creation" i18n:translate="">Creation</th>
- <th tal:condition="request/show/activity" i18n:translate="">Activity</th>
- <th tal:condition="request/show/actor" i18n:translate="">Actor</th>
- <th tal:condition="request/show/topic" i18n:translate="">Topic</th>
- <th tal:condition="request/show/title" i18n:translate="">Title</th>
- <th tal:condition="request/show/status" i18n:translate="">Status</th>
- <th tal:condition="request/show/creator" i18n:translate="">Creator</th>
- <th tal:condition="request/show/assignedto" i18n:translate="">Assigned To</th>
- </tr>
- <tal:block tal:repeat="i batch" condition=true>
- <tr tal:define="group python:[r[1] for r in request.group]"
- tal:condition="python:group and batch.propchanged(*group)">
- <th tal:attributes="colspan python:len(request.columns)" class="group">
- <tal:block tal:repeat="g group">
- <tal:block tal:content="python:str(i[g]) or '(no %s set)'%g"/>
- </tal:block>
- </th>
- </tr>
-
- <tr>
- <td tal:condition="request/show/priority"
- tal:content="python:i.priority.plain() or default"> </td>
- <td tal:condition="request/show/id" tal:content="i/id"> </td>
- <td class="date" tal:condition="request/show/creation"
- tal:content="i/creation/reldate"> </td>
- <td class="date" tal:condition="request/show/activity"
- tal:content="i/activity/reldate"> </td>
- <td class="date" tal:condition="request/show/actor"
- tal:content="python:i.actor.plain() or default"> </td>
- <td tal:condition="request/show/topic"
- tal:content="python:i.topic.plain() or default"> </td>
- <td tal:condition="request/show/title">
- <a tal:attributes="href string:issue${i/id}"
- tal:content="python:str(i.title.plain(hyperlink=0)) or '[no title]'">title</a>
- </td>
- <td tal:condition="request/show/status"
- tal:content="python:i.status.plain() or default"> </td>
- <td tal:condition="request/show/creator"
- tal:content="python:i.creator.plain() or default"> </td>
- <td tal:condition="request/show/assignedto"
- tal:content="python:i.assignedto.plain() or default"> </td>
- </tr>
-
- </tal:block>
-
- <metal:index define-macro="batch-footer">
- <tr tal:condition="batch">
- <th tal:attributes="colspan python:len(request.columns)">
- <table width="100%">
- <tr class="navigation">
- <th>
- <a tal:define="prev batch/previous" tal:condition="prev"
- tal:attributes="href python:request.indexargs_url(request.classname,
- {'@startwith':prev.first, '@pagesize':prev.size})"
- i18n:translate=""><< previous</a>
-
- </th>
- <th i18n:translate=""><span tal:replace="batch/start" i18n:name="start"
- />..<span tal:replace="python: batch.start + batch.length -1" i18n:name="end"
- /> out of <span tal:replace="batch/sequence_length" i18n:name="total"
- /></th>
- <th>
- <a tal:define="next batch/next" tal:condition="next"
- tal:attributes="href python:request.indexargs_url(request.classname,
- {'@startwith':next.first, '@pagesize':next.size})"
- i18n:translate="">next >></a>
-
- </th>
- </tr>
- </table>
- </th>
- </tr>
- </metal:index>
-</table>
-
-<a tal:attributes="href python:request.indexargs_url('issue',
- {'@action':'export_csv'})" i18n:translate="">Download as CSV</a>
-
-<form method="GET" class="index-controls"
- tal:attributes="action request/classname">
-
- <table class="form" tal:define="n_sort python:2">
- <tal:block tal:repeat="n python:range(n_sort)" tal:condition="batch">
- <tr tal:define="key python:len(request.sort)>n and request.sort[n]">
- <th>
- <tal:block tal:condition="not:n" i18n:translate="">Sort on:</tal:block>
- </th>
- <td>
- <select tal:attributes="name python:'@sort%d'%n">
- <option value="" i18n:translate="">- nothing -</option>
- <option tal:repeat="col context/properties"
- tal:attributes="value col/_name;
- selected python:key and col._name == key[1]"
- tal:content="col/_name"
- i18n:translate="">column</option>
- </select>
- </td>
- <th i18n:translate="">Descending:</th>
- <td><input type="checkbox" tal:attributes="name python:'@sortdir%d'%n;
- checked python:key and key[0] == '-'">
- </td>
- </tr>
- </tal:block>
- <tal:block tal:repeat="n python:range(n_sort)" tal:condition="batch">
- <tr tal:define="key python:len(request.group)>n and request.group[n]">
- <th>
- <tal:block tal:condition="not:n" i18n:translate="">Group on:</tal:block>
- </th>
- <td>
- <select tal:attributes="name python:'@group%d'%n">
- <option value="" i18n:translate="">- nothing -</option>
- <option tal:repeat="col context/properties"
- tal:attributes="value col/_name;
- selected python:key and col._name == key[1]"
- tal:content="col/_name"
- i18n:translate="">column</option>
- </select>
- </td>
- <th i18n:translate="">Descending:</th>
- <td><input type="checkbox" tal:attributes="name python:'@groupdir%d'%n;
- checked python:key and key[0] == '-'">
- </td>
- </tr>
- </tal:block>
- <tr><td colspan="4">
- <input type="submit" value="Redisplay" i18n:attributes="value"/>
- <tal:block tal:replace="structure
- python:request.indexargs_form(sort=0, group=0)" />
- </td></tr>
- </table>
-</form>
-
-</tal:block>
-
-</td>
-</tal:block>
Deleted: /tracker/instances/python-dev/html/issue.item.html
==============================================================================
--- /tracker/instances/python-dev/html/issue.item.html Thu Nov 23 02:25:02 2006
+++ (empty file)
@@ -1,216 +0,0 @@
-<!-- dollarId: issue.item,v 1.4 2001/08/03 01:19:43 richard Exp dollar-->
-<tal:block metal:use-macro="templates/page/macros/icing">
-<title metal:fill-slot="head_title">
-<tal:block condition="context/id" i18n:translate=""
- >Issue <span tal:replace="context/id" i18n:name="id"
- />: <span tal:replace="context/title" i18n:name="title"
- /> - <span tal:replace="config/TRACKER_NAME" i18n:name="tracker"
-/></tal:block>
-<tal:block condition="not:context/id" i18n:translate=""
- >New Issue - <span tal:replace="config/TRACKER_NAME" i18n:name="tracker"
-/></tal:block>
-</title>
-<tal:block metal:fill-slot="body_title">
- <span tal:condition="python: not (context.id or context.is_edit_ok())"
- tal:omit-tag="python:1" i18n:translate="">New Issue</span>
- <span tal:condition="python: not context.id and context.is_edit_ok()"
- tal:omit-tag="python:1" i18n:translate="">New Issue Editing</span>
- <span tal:condition="python: context.id and not context.is_edit_ok()"
- tal:omit-tag="python:1" i18n:translate="">Issue<tal:x
- replace="context/id" i18n:name="id" /></span>
- <span tal:condition="python: context.id and context.is_edit_ok()"
- tal:omit-tag="python:1" i18n:translate="">Issue<tal:x
- replace="context/id" i18n:name="id" /> Editing</span>
-</tal:block>
-
-<td class="content" metal:fill-slot="content">
-
-<p tal:condition="python:not (context.is_view_ok()
- or request.user.hasRole('Anonymous'))" i18n:translate="">
- You are not allowed to view this page.</p>
-
-<p tal:condition="python:not context.is_view_ok()
- and request.user.hasRole('Anonymous')" i18n:translate="">
- Please login with your username and password.</p>
-
-<div tal:condition="context/is_view_ok">
-
-<p tal:condition="python: context.id and context.imported_from_sf">
- <a tal:attributes="href
- python:'http://sourceforge.net/support/tracker.php?aid='+context.id;">
- Sourceforge tracker item</a> (for comparison)
-</p>
-
-<form method="POST" name="itemSynopsis"
- onSubmit="return submit_once()" enctype="multipart/form-data"
- tal:attributes="action context/designator">
-
-<table class="form">
-<tr>
- <th class="required" i18n:translate="">Title</th>
- <td colspan=3 tal:content="structure python:context.title.field(size=60)">title</td>
-</tr>
-
-<tr>
- <th i18n:translate="">
- <span tal:replace="structure python:db.group.classhelp('id,name,description',label='Group')" />
- </th>
- <td tal:content="structure context/group/menu">group</td>
- <th class="required" i18n:translate="">Priority</th>
- <td tal:content="structure context/priority/menu">priority</td>
-</tr>
-
-<tr>
- <th i18n:translate="">
- <span tal:replace="structure python:db.status.classhelp('id,name,description',label='Status')" />
- </th>
- <td tal:content="structure context/status/menu">status</td>
- <th i18n:translate="">Resolution</th>
- <td tal:content="structure context/resolution/menu">resolution</td>
-</tr>
-
-<tr>
- <th i18n:translate="">Superseder</th>
- <td>
- <span tal:replace="structure python:context.superseder.field(showid=1, size=20)" />
- <span tal:condition="context/is_edit_ok" tal:replace="structure python:db.issue.classhelp('id,title', property='superseder')" />
- <span tal:condition="context/superseder">
- <br><span i18n:translate="">View:</span>
- <a tal:repeat="sup context/superseder"
- tal:content="python:sup['id'] + ', '*(not repeat['sup'].end)"
- tal:attributes="href string:issue${sup/id};
- title sup/title;"></a>
- </span>
- </td>
- <th i18n:translate="">Nosy List</th>
- <td>
- <span tal:replace="structure context/nosy/field" />
- <span tal:condition="context/is_edit_ok" tal:replace="structure
-python:db.user.classhelp('username,realname,address', property='nosy', width='600')" /><br>
- </td>
-</tr>
-
-<tr>
- <th i18n:translate="">Assigned To</th>
- <td tal:content="structure context/assignedto/menu">assignedto field</td>
- <th i18n:translate="">Topics</th>
- <td>
- <span tal:replace="structure context/topic/field" />
- <span tal:condition="context/is_edit_ok" tal:replace="structure python:db.keyword.classhelp(property='topic')" />
- </td>
-</tr>
-
-<tr tal:condition="context/is_edit_ok">
- <th i18n:translate="">Change Note</th>
- <td colspan=3>
- <textarea tal:content="request/form/@note/value | default"
- name="@note" wrap="hard" rows="5" cols="72"></textarea>
- </td>
-</tr>
-
-<tr tal:condition="context/is_edit_ok">
- <th i18n:translate="">File</th>
- <td colspan=3><input type="file" name="@file" size="40"></td>
-</tr>
-
-<tr tal:condition="context/is_edit_ok">
- <td>
-
- <input type="hidden" name="@template" value="item">
- <input type="hidden" name="@required" value="title,priority">
- </td>
- <td colspan=3>
- <span tal:replace="structure context/submit">submit button</span>
- <a tal:condition="context/id" tal:attributes="href context/copy_url"
- i18n:translate="">Make a copy</a>
- </td>
-</tr>
-
-</table>
-</form>
-
-<tal:block tal:condition="not:context/id" i18n:translate="">
-<table class="form">
-<tr>
- <td>Note: </td>
- <th class="required">highlighted</th>
- <td> fields are required.</td>
-</tr>
-</table>
-</tal:block>
-
-<p tal:condition="context/id" i18n:translate="">
- Created on <b><tal:x replace="context/creation" i18n:name="creation" /></b>
- by <b><tal:x replace="context/creator" i18n:name="creator" /></b>,
- last changed <b><tal:x replace="context/activity" i18n:name="activity" /></b>
- by <b><tal:x replace="context/actor" i18n:name="actor" /></b>.
-</p>
-
-<table class="files" tal:condition="context/files">
- <tr><th colspan="5" class="header" i18n:translate="">Files</th></tr>
- <tr>
- <th i18n:translate="">File name</th>
- <th i18n:translate="">Uploaded</th>
- <th i18n:translate="">Type</th>
- <th i18n:translate="">Edit</th>
- <th i18n:translate="">Remove</th>
- </tr>
- <tr tal:repeat="file context/files">
- <td>
- <a tal:attributes="href file/download_url"
- tal:content="file/name">dld link</a>
- </td>
- <td>
- <span tal:content="file/creator">creator's name</span>,
- <span tal:content="file/creation">creation date</span>
- </td>
- <td tal:content="file/type" />
- <td><a tal:condition="file/is_edit_ok"
- tal:attributes="href string:file${file/id}">edit</a>
- </td>
- <td>
- <form style="padding:0" tal:condition="context/is_edit_ok"
- tal:attributes="action string:issue${context/id}">
- <input type="hidden" name="@remove at files" tal:attributes="value file/id">
- <input type="hidden" name="@action" value="edit">
- <input type="submit" value="remove" i18n:attributes="value">
- </form>
- </td>
- </tr>
-</table>
-
-<table class="messages" tal:condition="context/messages">
- <tr><th colspan="4" class="header" i18n:translate="">Messages</th></tr>
- <tal:block tal:repeat="msg context/messages">
- <tr>
- <th><a tal:attributes="href string:msg${msg/id}"
- i18n:translate="">msg<tal:x replace="msg/id" i18n:name="id" /> (view)</a></th>
- <th i18n:translate="">Author: <tal:x replace="msg/author"
- i18n:name="author" /></th>
- <th i18n:translate="">Date: <tal:x replace="msg/date"
- i18n:name="date" /></th>
- <th>
- <form style="padding:0" tal:condition="context/is_edit_ok"
- tal:attributes="action string:issue${context/id}">
- <input type="hidden" name="@remove at messages" tal:attributes="value msg/id">
- <input type="hidden" name="@action" value="edit">
- <input type="submit" value="remove" i18n:attributes="value">
- </form>
- </th>
- </tr>
- <tr>
- <td colspan="4" class="content">
- <pre tal:content="structure msg/content/hyperlinked">content</pre>
- </td>
- </tr>
- </tal:block>
-</table>
-
-<tal:block tal:condition="context/id" tal:replace="structure context/history" />
-
-</div>
-
-</td>
-
-</tal:block>
-<!-- SHA: 52e1c51e8d17b8e8dd4ff54055b4f87ef0aa13bc -->
Deleted: /tracker/instances/python-dev/html/issue.search.html
==============================================================================
--- /tracker/instances/python-dev/html/issue.search.html Thu Nov 23 02:25:02 2006
+++ (empty file)
@@ -1,232 +0,0 @@
-<tal:block metal:use-macro="templates/page/macros/icing">
-<title metal:fill-slot="head_title" i18n:translate="">Issue searching - <span
- i18n:name="tracker" tal:replace="config/TRACKER_NAME" /></title>
-<span metal:fill-slot="body_title" tal:omit-tag="python:1"
- i18n:translate="">Issue searching</span>
-<td class="content" metal:fill-slot="content">
-
-<form method="get" name="itemSynopsis"
- tal:attributes="action request/classname">
-
-<table class="form" tal:define="
- cols python:request.columns or 'id activity title status assignedto'.split();
- sort_on python:request.sort and request.sort[0] or nothing;
- sort_desc python:sort_on and sort_on[0] == '-';
- sort_on python:(sort_on and sort_on[1]) or 'activity';
- group_on python:request.group and request.group[0] or nothing;
- group_desc python:group_on and group_on[0] == '-';
- group_on python:(group_on and group_on[1]) or 'priority';
-
- search_input templates/page/macros/search_input;
- search_date templates/page/macros/search_date;
- column_input templates/page/macros/column_input;
- sort_input templates/page/macros/sort_input;
- group_input templates/page/macros/group_input;
- search_select templates/page/macros/search_select;
- search_select_translated templates/page/macros/search_select_translated;
- search_multiselect templates/page/macros/search_multiselect;">
-
-<tr>
- <th class="header"> </th>
- <th class="header" i18n:translate="">Filter on</th>
- <th class="header" i18n:translate="">Display</th>
- <th class="header" i18n:translate="">Sort on</th>
- <th class="header" i18n:translate="">Group on</th>
-</tr>
-
-<tr tal:define="name string:@search_text">
- <th i18n:translate="">All text*:</th>
- <td metal:use-macro="search_input"></td>
- <td> </td>
- <td> </td>
- <td> </td>
-</tr>
-
-<tr tal:define="name string:title">
- <th i18n:translate="">Title:</th>
- <td metal:use-macro="search_input"></td>
- <td metal:use-macro="column_input"></td>
- <td metal:use-macro="sort_input"></td>
- <td> </td>
-</tr>
-
-<tr tal:define="name string:topic;
- db_klass string:keyword;
- db_content string:name;">
- <th i18n:translate="">Topic:</th>
- <td metal:use-macro="search_select"></td>
- <td metal:use-macro="column_input"></td>
- <td metal:use-macro="sort_input"></td>
- <td metal:use-macro="group_input"></td>
-</tr>
-
-<tr tal:define="name string:id">
- <th i18n:translate="">ID:</th>
- <td metal:use-macro="search_input"></td>
- <td metal:use-macro="column_input"></td>
- <td metal:use-macro="sort_input"></td>
- <td> </td>
-</tr>
-
-<tr tal:define="name string:creation">
- <th i18n:translate="">Creation Date:</th>
- <td metal:use-macro="search_date"></td>
- <td metal:use-macro="column_input"></td>
- <td metal:use-macro="sort_input"></td>
- <td metal:use-macro="group_input"></td>
-</tr>
-
-<tr tal:define="name string:creator;
- db_klass string:user;
- db_content string:username;"
- tal:condition="db/user/is_view_ok">
- <th i18n:translate="">Creator:</th>
- <td metal:use-macro="search_input">
- <option metal:fill-slot="extra_options" i18n:translate=""
- tal:attributes="value request/user/id">created by me</option>
- </td>
- <td metal:use-macro="column_input"></td>
- <td metal:use-macro="sort_input"></td>
- <td metal:use-macro="group_input"></td>
-</tr>
-
-<tr tal:define="name string:activity">
- <th i18n:translate="">Activity:</th>
- <td metal:use-macro="search_date"></td>
- <td metal:use-macro="column_input"></td>
- <td metal:use-macro="sort_input"></td>
- <td> </td>
-</tr>
-
-<tr tal:define="name string:actor;
- db_klass string:user;
- db_content string:username;"
- tal:condition="db/user/is_view_ok">
- <th i18n:translate="">Actor:</th>
- <td metal:use-macro="search_input">
- <option metal:fill-slot="extra_options" i18n:translate=""
- tal:attributes="value request/user/id">done by me</option>
- </td>
- <td metal:use-macro="column_input"></td>
- <td metal:use-macro="sort_input"></td>
- <td> </td>
-</tr>
-
-<tr tal:define="name string:priority;
- db_klass string:priority;
- db_content string:name;">
- <th i18n:translate="">Priority:</th>
- <td metal:use-macro="search_select_translated">
- <option metal:fill-slot="extra_options" value="-1" i18n:translate=""
- tal:attributes="selected python:value == '-1'">not selected</option>
- </td>
- <td metal:use-macro="column_input"></td>
- <td metal:use-macro="sort_input"></td>
- <td metal:use-macro="group_input"></td>
-</tr>
-
-<tr tal:define="name string:status;
- db_klass string:status;
- db_content string:name;">
- <th i18n:translate="">Status:</th>
- <td metal:use-macro="search_select_translated">
- <tal:block metal:fill-slot="extra_options">
- <option value="-1,1,2" i18n:translate=""
- tal:attributes="selected python:value == '-1,1,2'">not closed</option>
- <option value="-1" i18n:translate=""
- tal:attributes="selected python:value == '-1'">not selected</option>
- </tal:block>
- </td>
- <td metal:use-macro="column_input"></td>
- <td metal:use-macro="sort_input"></td>
- <td metal:use-macro="group_input"></td>
-</tr>
-
-<tr tal:define="name string:assignedto;
- db_klass string:user;
- db_content string:username;"
- tal:condition="db/user/is_view_ok">
- <th i18n:translate="">Assigned to:</th>
- <td metal:use-macro="search_input">
- <tal:block metal:fill-slot="extra_options">
- <option tal:attributes="value request/user/id"
- i18n:translate="">assigned to me</option>
- <option value="-1" tal:attributes="selected python:value == '-1'"
- i18n:translate="">unassigned</option>
- </tal:block>
- </td>
- <td metal:use-macro="column_input"></td>
- <td metal:use-macro="sort_input"></td>
- <td metal:use-macro="group_input"></td>
-</tr>
-
-<tr>
- <th i18n:translate="">No Sort or group:</th>
- <td> </td>
- <td> </td>
- <td><input type="radio" name="@sort" value=""/></td>
- <td><input type="radio" name="@group" value=""/></td>
-</tr>
-
-<tr>
-<th i18n:translate="">Pagesize:</th>
-<td><input name="@pagesize" size="3" value="50"
- tal:attributes="value request/form/@pagesize/value | default"/></td>
-</tr>
-
-<tr>
-<th i18n:translate="">Start With:</th>
-<td><input name="@startwith" size="3" value="0"
- tal:attributes="value request/form/@startwith/value | default"/></td>
-</tr>
-
-<tr>
-<th i18n:translate="">Sort Descending:</th>
-<td><input type="checkbox" name="@sortdir"
- tal:attributes="checked sort_desc">
-</td>
-</tr>
-
-<tr>
-<th i18n:translate="">Group Descending:</th>
-<td><input type="checkbox" name="@groupdir"
- tal:attributes="checked group_desc">
-</td>
-</tr>
-
-<tr tal:condition="python:request.user.hasPermission('Edit', 'query')">
- <th i18n:translate="">Query name**:</th>
- <td tal:define="value request/form/@queryname/value | nothing">
- <input name="@queryname" tal:attributes="value value"/>
- <input type="hidden" name="@old-queryname" tal:attributes="value value"/>
- </td>
-</tr>
-
-<tr>
- <td>
-
- <input type="hidden" name="@action" value="search"/>
- </td>
- <td><input type="submit" value="Search" i18n:attributes="value"/></td>
-</tr>
-
-<tr><td> </td>
- <td colspan="4" class="help">
- <span i18n:translate="" tal:omit-tag="true">
- *: The "all text" field will look in message bodies and issue titles
- </span><br>
- <span tal:condition="python:request.user.hasPermission('Edit', 'query')"
- i18n:translate="" tal:omit-tag="true"
- >
- **: If you supply a name, the query will be saved off and available as a
- link in the sidebar
- </span>
- </td>
-</tr>
-</table>
-
-</form>
-</td>
-
-</tal:block>
-<!-- SHA: f0c86e97d4e43a1e3cc5f9e08ec4b918719ab6b8 -->
Modified: tracker/instances/python-dev/html/keyword.item.html
==============================================================================
--- tracker/instances/python-dev/html/keyword.item.html (original)
+++ tracker/instances/python-dev/html/keyword.item.html Thu Nov 23 02:25:02 2006
@@ -1,4 +1,3 @@
-<!-- dollarId: keyword.item,v 1.3 2002/05/22 00:32:34 richard Exp dollar-->
<tal:block metal:use-macro="templates/page/macros/icing">
<title metal:fill-slot="head_title" i18n:translate="">Keyword editing - <span
i18n:name="tracker" tal:replace="config/TRACKER_NAME" /></title>
Modified: tracker/instances/python-dev/html/msg.index.html
==============================================================================
--- tracker/instances/python-dev/html/msg.index.html (original)
+++ tracker/instances/python-dev/html/msg.index.html Thu Nov 23 02:25:02 2006
@@ -17,7 +17,7 @@
</tr>
</tal:block>
- <metal:block use-macro="templates/issue.index/macros/batch-footer" />
+ <metal:block use-macro="templates/bug.index/macros/batch-footer" />
</table>
</td>
Modified: tracker/instances/python-dev/html/msg.item.html
==============================================================================
--- tracker/instances/python-dev/html/msg.item.html (original)
+++ tracker/instances/python-dev/html/msg.item.html Thu Nov 23 02:25:02 2006
@@ -1,4 +1,3 @@
-<!-- dollarId: msg.item,v 1.3 2002/05/22 00:32:34 richard Exp dollar-->
<tal:block metal:use-macro="templates/page/macros/icing">
<title metal:fill-slot="head_title">
<tal:block condition="context/id" i18n:translate=""
Modified: tracker/instances/python-dev/html/page.html
==============================================================================
--- tracker/instances/python-dev/html/page.html (original)
+++ tracker/instances/python-dev/html/page.html Thu Nov 23 02:25:02 2006
@@ -28,18 +28,6 @@
<!-- Logo -->
<h1 id="logoheader">
<a accesskey="1" href="." id="logolink"><img src="http://python.org/images/python-logo.gif" alt="homepage" border="0" id="logo" /></a></h1>
-<div id="searchbox">
- <form method="get" action="issue">
- <input type="hidden" name="@columns"
- value="id,activity,title,creator,assignedto,status"/>
- <input type="hidden" name="@sort" value="activity"/>
- <input type="hidden" name="@group" value="priority"/>
- <input id="search-text" name="@search_text" size="10"
- tal:attributes="value request/search_text"/>
- <input type="submit" id="submit" name="submit" value="Search" i18n:attributes="value"/>
- </form>
-</div>
-
<div id="left-hand-navigation">
<!-- Main Menu NEED LEVEL TWO HEADER AND FOOTER -->
@@ -53,19 +41,19 @@
<li class=""><a href="http://python.org/psf" class="" title="Python Software Foundation">PSF</a></li>
<li class=""><a href="http://python.org/links" class="" title="">Links</a></li>
<li class=""><a href="http://python.org/dev" class="" title="Python Core Language Development">Core Development</a></li>
- <li class="selected"><a href="." class="selected" title="Python Issue Tracker">Issue Tracker</a>
+ <li class="selected"><a href="." class="selected" title="Python Bug Tracker">Bug Tracker</a>
<ul class="level-two">
- <li tal:condition="python:request.user.hasPermission('View', 'issue')">
- <b i18n:translate="">Issues</b>
+ <li tal:condition="python:request.user.hasPermission('View', 'bug')">
+ <b i18n:translate="">Bugs</b>
<ul class="level-three">
- <li tal:condition="python:request.user.hasPermission('Create', 'issue')">
- <a href="issue?@template=item" i18n:translate="">Create New</a>
+ <li tal:condition="python:request.user.hasPermission('Create', 'bug')">
+ <a href="bug?@template=item" i18n:translate="">Create New</a>
</li>
<li>
<li><a href="#"
- tal:attributes="href python:request.indexargs_url('issue', {
+ tal:attributes="href python:request.indexargs_url('bug', {
'@sort': '-activity',
- '@group': 'priority',
+ '@group': 'severity',
'@filter': 'status,assignedto',
'@columns': columns,
'@search_text': '',
@@ -75,9 +63,9 @@
})"
i18n:translate="">Show Unassigned</a></li>
<li><a href="#"
- tal:attributes="href python:request.indexargs_url('issue', {
+ tal:attributes="href python:request.indexargs_url('bug', {
'@sort': '-activity',
- '@group': 'priority',
+ '@group': 'severity',
'@filter': 'status',
'@columns': columns_showall,
'@search_text': '',
@@ -86,38 +74,26 @@
})"
i18n:translate="">Show All</a></li>
<li>
- <a href="issue?@template=search" i18n:translate="">Search</a>
+ <a href="bug?@template=search" i18n:translate="">Search</a>
</li>
<li>
<form method="post" tal:attributes="action request/base">
- <input type="submit" class="form-small" value="Show issue:"
+ <input type="submit" class="form-small" value="Show bug:"
i18n:attributes="value"/>
<input class="form-small" size="4"
type="text" name="@number"/>
- <input type="hidden" name="@type" value="issue"/>
+ <input type="hidden" name="@type" value="bug"/>
<input type="hidden" name="@action" value="show"/>
</form>
</li>
</ul>
</li>
- <li tal:condition="python:request.user.hasPermission('Edit', 'keyword')
- or request.user.hasPermission('Create', 'keyword')">
- <tal:block i18n:translate="">Keywords</tal:block>
- <ul class="level-three">
- <li tal:condition="python:request.user.hasPermission('Create', 'keyword')">
- <a href="keyword?@template=item" i18n:translate="">Create New</a>
- </li>
- <li tal:condition="python:db.keyword.list() and
- request.user.hasPermission('Edit', 'keyword')">
- <a href="keyword?@template=item" i18n:translate="">Edit Existing</a>
- </li>
- </ul>
- </li>
<li tal:condition="python:request.user.username=='anonymous'">
+ <b i18n:translate="">User</b>
<form method="post" tal:attributes="action request/base">
- <b i18n:translate="">Login</b><br/>
<ul class="level-three">
<li>
+ <tal:span i18n:translate="">Login</tal:span><br/>
<input size="10" name="__login_name"/><br/>
<input size="10" type="password" name="__login_password"/><br/>
<input type="hidden" name="@action" value="Login"/>
@@ -137,24 +113,23 @@
</ul>
</form>
</li>
- <li class=""
- tal:condition="python:request.user.username != 'anonymous'">
+ <li tal:condition="python:request.user.username != 'anonymous'">
<b i18n:translate="">Hello, <span i18n:name="user"
tal:replace="request/user/username">username</span></b><br/>
<ul class="level-three">
<li>
<a href="#"
- tal:attributes="href python:request.indexargs_url('issue', {
+ tal:attributes="href python:request.indexargs_url('bug', {
'@sort': '-activity',
- '@group': 'priority',
+ '@group': 'severity',
'@filter': 'status,assignedto',
'@columns': 'id,activity,title,creator,status',
'@search_text': '',
'status': status_notresolved,
'assignedto': request.user.id,
- '@dispname': i18n.gettext('Your Issues'),
+ '@dispname': i18n.gettext('Your Bugs'),
})"
- i18n:translate="">Your Issues</a>
+ i18n:translate="">Your Bugs</a>
</li>
<li>
<a tal:attributes="href string:user${request/user/id}"
@@ -230,7 +205,7 @@
The invoking context must define a "name" variable which names the
property being searched.
-See issue.search.html in the classic template for examples.
+See bug.search.html in the classic template for examples.
-->
<!-- creates a th and a label: -->
@@ -244,15 +219,15 @@
<td metal:define-macro="search_input">
<input tal:attributes="value python:request.form.getvalue(name) or nothing;
name name;
- id name">
+ id name"/>
</td>
<td metal:define-macro="search_date">
<input tal:attributes="value python:request.form.getvalue(name) or nothing;
name name;
- id name">
+ id name"/>
<a class="classhelp"
- tal:attributes="href python:'''javascript:help_window('issue?@template=calendar&property=%s&form=itemSynopsis', 300, 200)'''%name">(cal)</a>
+ tal:attributes="href python:'''javascript:help_window('bug?@template=calendar&property=%s&form=itemSynopsis', 300, 200)'''%name">(cal)</a>
</td>
<td metal:define-macro="search_popup">
@@ -262,8 +237,8 @@
-->
<input tal:attributes="value python:request.form.getvalue(name) or nothing;
name name;
- id name">
- <span tal:replace="structure python:db.issue.classhelp(columns,
+ id name"/>
+ <span tal:replace="structure python:db.bug.classhelp(columns,
property=name)" />
</td>
@@ -310,7 +285,7 @@
<td metal:define-macro="search_multiselect">
<input tal:attributes="value python:request.form.getvalue(name) or nothing;
name name;
- id name">
+ id name"/>
<span tal:replace="structure python:db[db_klass].classhelp(db_content,
property=name, width='600')" />
</td>
@@ -366,14 +341,14 @@
<input metal:define-macro="user_src_input"
type="text" tal:attributes="onblur python:edit_ok and 'split_name(this)';
id name; name name; value value; readonly not:edit_ok"
- value="heinz.kunz">
+ value="heinz.kunz"/>
<!-- normal: no re-using -->
<input metal:define-macro="user_normal_input" type="text"
tal:attributes="id name; name name; value value; readonly not:edit_ok"
- value="heinz">
+ value="heinz"/>
<!-- password: type; no initial value -->
<input metal:define-macro="user_pw_input" type="password"
- tal:attributes="id name; name name; readonly not:edit_ok" value="">
+ tal:attributes="id name; name name; readonly not:edit_ok" value=""/>
<input metal:define-macro="user_confirm_input" type="password"
- tal:attributes="id name; name string:@confirm@$name; readonly not:edit_ok" value="">
+ tal:attributes="id name; name string:@confirm@$name; readonly not:edit_ok" value=""/>
Modified: tracker/instances/python-dev/html/query.edit.html
==============================================================================
--- tracker/instances/python-dev/html/query.edit.html (original)
+++ tracker/instances/python-dev/html/query.edit.html Thu Nov 23 02:25:02 2006
@@ -1,4 +1,3 @@
-<!-- dollarId: user.item,v 1.7 2002/08/16 04:29:04 richard Exp dollar-->
<tal:block metal:use-macro="templates/page/macros/icing">
<title metal:fill-slot="head_title" i18n:translate=""
>"Your Queries" Editing - <span tal:replace="config/TRACKER_NAME"
Modified: tracker/instances/python-dev/html/style.css
==============================================================================
--- tracker/instances/python-dev/html/style.css (original)
+++ tracker/instances/python-dev/html/style.css Thu Nov 23 02:25:02 2006
@@ -68,6 +68,21 @@
text-transform: none;
}
+#menu ul.level-three form
+{
+ display: block;
+ border: 0;
+ padding: 0.1em;
+ margin: 0 3em 0px 1.8em;
+ padding-left:1em;
+ color: #5E72A5;
+ background-image: none;
+ width: 10em !important;
+ width /**/: 11.4em;
+ font-family: Arial, Verdana, Geneva, "Bitstream Vera Sans", Helvetica, sans-serif;
+ font-size: 95%;
+}
+
#menu ul.level-three li
{
margin: 0px;
@@ -127,15 +142,18 @@
/* style for forms */
table.form {
- border: #ddd solid 1px;
+/* border: #ddd solid 1px;*/
padding: 2px;
- border-spacing: 0;
+ border-spacing: 5px;
border-collapse: collapse;
- background-color: #f5f5f5;
+/* background-color: #f5f5f5; */
+ margin: 5px;
}
table.form th {
- border: #ddd solid 1px;
+ border-left: #ddd solid 1px;
+ border-top: #ddd solid 1px;
+ border-bottom: #ddd solid 1px;
color: #338;
text-align: right;
vertical-align: top;
@@ -153,9 +171,13 @@
}
table.form td {
+ border-right: #ddd solid 1px;
+ border-top: #ddd solid 1px;
+ border-bottom: #ddd solid 1px;
color: #333;
empty-cells: show;
vertical-align: top;
+ padding: 5px;
}
table.form td.optional {
Modified: tracker/instances/python-dev/html/user.forgotten.html
==============================================================================
--- tracker/instances/python-dev/html/user.forgotten.html (original)
+++ tracker/instances/python-dev/html/user.forgotten.html Thu Nov 23 02:25:02 2006
@@ -1,4 +1,3 @@
-<!-- dollarId: user.item,v 1.7 2002/08/16 04:29:04 richard Exp dollar-->
<tal:block metal:use-macro="templates/page/macros/icing">
<title metal:fill-slot="head_title" i18n:translate="">Password reset request - <span
i18n:name="tracker" tal:replace="config/TRACKER_NAME" /></title>
@@ -50,4 +49,3 @@
</td>
</tal:block>
-<!-- SHA: 6fdb58c55fd854904ae98906d5935549a221fabf -->
Modified: tracker/instances/python-dev/html/user.help-search.html
==============================================================================
--- tracker/instances/python-dev/html/user.help-search.html (original)
+++ tracker/instances/python-dev/html/user.help-search.html Thu Nov 23 02:25:02 2006
@@ -20,7 +20,7 @@
qs python:'&'.join([a for a in qs.split('&') if not a.startswith('@template=')])"
>
<pre tal:content="request/env/QUERY_STRING" tal:condition=false />
- <form method="GET" name="itemSynopsis"
+ <form method="get" name="itemSynopsis"
target="list"
tal:attributes="action request/classname"
tal:define="
Modified: tracker/instances/python-dev/html/user.index.html
==============================================================================
--- tracker/instances/python-dev/html/user.index.html (original)
+++ tracker/instances/python-dev/html/user.index.html Thu Nov 23 02:25:02 2006
@@ -1,4 +1,3 @@
-<!-- dollarId: user.index,v 1.3 2002/07/09 05:29:51 richard Exp dollar-->
<tal:block metal:use-macro="templates/page/macros/icing">
<title metal:fill-slot="head_title" i18n:translate="">User listing - <span
i18n:name="tracker" tal:replace="config/TRACKER_NAME" /></title>
@@ -73,4 +72,3 @@
</tal:block>
-<!-- SHA: 3082bd8529e95365779a65d32993bc5f39abe1ca -->
Modified: tracker/instances/python-dev/html/user.item.html
==============================================================================
--- tracker/instances/python-dev/html/user.item.html (original)
+++ tracker/instances/python-dev/html/user.item.html Thu Nov 23 02:25:02 2006
@@ -1,4 +1,3 @@
-<!-- dollarId: user.item,v 1.7 2002/08/16 04:29:04 richard Exp dollar-->
<tal:doc metal:use-macro="templates/page/macros/icing"
define="edit_ok context/is_edit_ok"
>
Modified: tracker/instances/python-dev/html/user.register.html
==============================================================================
--- tracker/instances/python-dev/html/user.register.html (original)
+++ tracker/instances/python-dev/html/user.register.html Thu Nov 23 02:25:02 2006
@@ -1,4 +1,3 @@
-<!-- dollarId: user.item,v 1.7 2002/08/16 04:29:04 richard Exp dollar-->
<tal:block metal:use-macro="templates/page/macros/icing">
<title metal:fill-slot="head_title"
i18n:translate="">Registering with <span i18n:name="tracker"
Modified: tracker/instances/python-dev/html/user.rego_progress.html
==============================================================================
--- tracker/instances/python-dev/html/user.rego_progress.html (original)
+++ tracker/instances/python-dev/html/user.rego_progress.html Thu Nov 23 02:25:02 2006
@@ -1,4 +1,3 @@
-<!-- dollarId: issue.index,v 1.2 2001/07/29 04:07:37 richard Exp dollar-->
<tal:block metal:use-macro="templates/page/macros/icing">
<title metal:fill-slot="head_title"
i18n:translate="">Registration in progress - <span i18n:name="tracker"
Modified: tracker/instances/python-dev/initial_data.py
==============================================================================
--- tracker/instances/python-dev/initial_data.py (original)
+++ tracker/instances/python-dev/initial_data.py Thu Nov 23 02:25:02 2006
@@ -4,42 +4,51 @@
# TRACKER INITIAL PRIORITY AND STATUS VALUES
#
-pri = db.getclass('priority')
-pri.create(name='9', order='1')
-pri.create(name='8', order='2')
-pri.create(name='7', order='3')
-pri.create(name='6', order='4')
-pri.create(name='5', order='5')
-pri.create(name='4', order='6')
-pri.create(name='3', order='7')
-pri.create(name='2', order='8')
-pri.create(name='1', order='9')
-
-stat = db.getclass('status')
-stat.create(name='Open', order='1')
-stat.create(name='Pending', order='2')
-stat.create(name='Closed', order='3')
-stat.create(name='Deleted', order='4')
-
-group = db.getclass('group')
-group.create(name='third_party', order='1')
-group.create(name='AST', order='2')
-group.create(name='feature_request', order='3')
-group.create(name='irreproducible', order='4')
-group.create(name='python3k', description='This bug relates to python 3000', order='5')
-
-
+bug_type = db.getclass('bug_type')
+bug_type.create(name='crash', order='1')
+bug_type.create(name='compile error', order='2')
+bug_type.create(name='resource usage', order='3')
+bug_type.create(name='security', order='4')
+bug_type.create(name='behavior', order='5')
+bug_type.create(name='rfe', order='6')
+
+component = db.getclass('component')
+component.create(name='core', order='1')
+component.create(name='distutils', order='2')
+component.create(name='stdlib', order='3')
+
+platform = db.getclass('platform')
+platform.create(name='GNU/Linux', order='1')
+platform.create(name='Solaris', order='2')
+platform.create(name='WinXP', order='3')
+
+version = db.getclass('version')
+version.create(name='2.5', order='1')
+version.create(name='3k', order='2')
+
+severity = db.getclass('severity')
+severity.create(name='critical', order='1')
+severity.create(name='urgent', order='2')
+severity.create(name='major', order='2')
+severity.create(name='normal', order='2')
+severity.create(name='minor', order='2')
+
+status = db.getclass('status')
+status.create(name='new', order='1')
+status.create(name='open', order='2')
+status.create(name='pending', description='user feedback required', order='3')
+status.create(name='closed', order='4')
+
+resolution = db.getclass('resolution')
+resolution.create(name='fixed', order='1')
+resolution.create(name='invalid', order='2')
+resolution.create(name='duplicate', order='3')
#
# create the two default users
user = db.getclass('user')
-user.create(username="admin", password=adminpw,
- address=admin_email, roles='Admin')
+user.create(username="admin", password=adminpw, address=admin_email, roles='Admin')
user.create(username="anonymous", roles='Anonymous')
-
-# add any additional database creation steps here - but only if you
-# haven't initialised the database with the admin "initialise" command
-
user.create(username="user", password=Password("user"), roles="User")
-
-# vim: set filetype=python sts=4 sw=4 et si
+user.create(username="devel", password=Password("devel"), roles="Developer")
+user.create(username="coord", password=Password("coord"), roles="Coordinator")
Modified: tracker/instances/python-dev/schema.py
==============================================================================
--- tracker/instances/python-dev/schema.py (original)
+++ tracker/instances/python-dev/schema.py Thu Nov 23 02:25:02 2006
@@ -9,19 +9,47 @@
# creator = Link('user')
# actor = Link('user')
-# Priorities
-pri = Class(db, "priority",
- name=String(),
- description=String(),
- order=Number())
-pri.setkey("name")
-
-# Statuses
-stat = Class(db, "status",
- name=String(),
- description=String(),
- order=Number())
-stat.setkey("name")
+# Bug Type
+bug_type = Class(db, 'bug_type',
+ name=String(),
+ description=String(),
+ order=Number())
+bug_type.setkey('name')
+
+# Component
+component = Class(db, 'component',
+ name=String(),
+ description=String(),
+ order=Number())
+component.setkey('name')
+
+# Platform
+platform = Class(db, 'platform',
+ name=String(),
+ description=String(),
+ order=Number())
+platform.setkey('name')
+
+# Version
+version = Class(db, 'version',
+ name=String(),
+ description=String(),
+ order=Number())
+version.setkey('name')
+
+# Severity
+severity = Class(db, 'severity',
+ name=String(),
+ description=String(),
+ order=Number())
+severity.setkey('name')
+
+# Status
+status = Class(db, "status",
+ name=String(),
+ description=String(),
+ order=Number())
+status.setkey("name")
# Resolution
resolution = Class(db, "resolution",
@@ -30,40 +58,26 @@
order=Number())
resolution.setkey('name')
-# Groups
-group = Class(db, "group",
- name=String(),
- description=String(),
- order=Number())
-group.setkey("name")
-
-
-
-# Keywords
-keyword = Class(db, "keyword",
- name=String())
-keyword.setkey("name")
-
# User-defined saved searches
query = Class(db, "query",
- klass=String(),
- name=String(),
- url=String(),
- private_for=Link('user'))
+ klass=String(),
+ name=String(),
+ url=String(),
+ private_for=Link('user'))
# add any additional database schema configuration here
user = Class(db, "user",
- username=String(),
- password=Password(),
- address=String(),
- realname=String(),
- phone=String(),
- organisation=String(),
- alternate_addresses=String(),
- queries=Multilink('query'),
- roles=String(), # comma-separated string of Role names
- timezone=String())
+ username=String(),
+ password=Password(),
+ address=String(),
+ realname=String(),
+ phone=String(),
+ organisation=String(),
+ alternate_addresses=String(),
+ queries=Multilink('query'),
+ roles=String(), # comma-separated string of Role names
+ timezone=String())
user.setkey("username")
# FileClass automatically gets this property in addition to the Class ones:
@@ -86,15 +100,18 @@
# messages = Multilink("msg")
# files = Multilink("file")
# nosy = Multilink("user")
-# superseder = Multilink("issue")
-issue = IssueClass(db, "issue",
- assignedto=Link("user"),
- topic=Multilink("keyword"),
- priority=Link("priority"),
- group=Link("group"),
- status=Link("status"),
- resolution=Link("resolution"),
- imported_from_sf=Boolean())
+# superseder = Multilink("bug")
+bug = IssueClass(db, "bug",
+ type=Link('bug_type'),
+ components=Multilink('component'),
+ platforms=Multilink('platform'),
+ versions=Multilink('version'),
+ severity=Link('severity'),
+ dependencies=Multilink('bug'),
+ assignee=Link('user'),
+ status=Link('status'),
+ resolution=Link('resolution'),
+ superseder=Link('bug'))
#
# TRACKER SECURITY SETTINGS
@@ -102,25 +119,75 @@
# See the configuration and customisation document for information
# about security setup.
+db.security.addRole(name='Developer', description='A developer')
+db.security.addRole(name='Coordinator', description='A coordinator')
+
#
# REGULAR USERS
#
# Give the regular users access to the web and email interface
-db.security.addPermissionToRole('User', 'Web Access')
-db.security.addPermissionToRole('User', 'Email Access')
-
-# Assign the access and edit Permissions for issue, file and message
-# to regular users now
-for cl in 'issue', 'file', 'msg', 'keyword':
+for r in 'User', 'Developer', 'Coordinator':
+ db.security.addPermissionToRole(r, 'Web Access')
+ db.security.addPermissionToRole(r, 'Email Access')
+
+##########################
+# User permissions
+##########################
+for cl in ('bug_type', 'severity', 'component', 'platform',
+ 'version', 'status', 'resolution', 'bug', 'file', 'msg'):
db.security.addPermissionToRole('User', 'View', cl)
- db.security.addPermissionToRole('User', 'Edit', cl)
+
+for cl in 'file', 'msg':
db.security.addPermissionToRole('User', 'Create', cl)
-for cl in 'priority', 'status', 'resolution', 'group':
- db.security.addPermissionToRole('User', 'View', cl)
+
+p = db.security.addPermission(name='Create', klass='bug',
+ properties=('title', 'type',
+ 'components', 'platforms', 'versions',
+ 'severity',
+ 'messages', 'files', 'nosy'),
+ description='User can report and discuss bugs')
+db.security.addPermissionToRole('User', p)
+
+p = db.security.addPermission(name='Edit', klass='bug',
+ properties=('type',
+ 'components', 'platforms', 'versions',
+ 'severity',
+ 'messages', 'files', 'nosy'),
+ description='User can report and discuss bugs')
+db.security.addPermissionToRole('User', p)
+
+
+##########################
+# Developer permissions
+##########################
+for cl in ('bug_type', 'severity', 'component', 'platform',
+ 'version', 'status', 'resolution', 'bug', 'file', 'msg'):
+ db.security.addPermissionToRole('Developer', 'View', cl)
+
+for cl in ('bug', 'file', 'msg'):
+ db.security.addPermissionToRole('Developer', 'Edit', cl)
+ db.security.addPermissionToRole('Developer', 'Create', cl)
+
+p = db.security.addPermission(name='Debugger', klass='bug',
+ description='User can be assigned bugs')
+db.security.addPermissionToRole('Developer', p)
+
+
+##########################
+# Coordinator permissions
+##########################
+for cl in ('bug_type', 'severity', 'component', 'platform',
+ 'version', 'status', 'resolution', 'bug', 'file', 'msg'):
+ db.security.addPermissionToRole('Coordinator', 'View', cl)
+ db.security.addPermissionToRole('Coordinator', 'Edit', cl)
+ db.security.addPermissionToRole('Coordinator', 'Create', cl)
+
# May users view other user information? Comment these lines out
# if you don't want them to
db.security.addPermissionToRole('User', 'View', 'user')
+db.security.addPermissionToRole('Developer', 'View', 'user')
+db.security.addPermissionToRole('Coordinator', 'View', 'user')
# Users should be able to edit their own details -- this permission is
# limited to only the situation where the Viewed or Edited item is their own.
@@ -129,10 +196,12 @@
return userid == itemid
p = db.security.addPermission(name='View', klass='user', check=own_record,
description="User is allowed to view their own user details")
-db.security.addPermissionToRole('User', p)
+for r in 'User', 'Developer', 'Coordinator':
+ db.security.addPermissionToRole(r, p)
p = db.security.addPermission(name='Edit', klass='user', check=own_record,
description="User is allowed to edit their own user details")
-db.security.addPermissionToRole('User', p)
+for r in 'User', 'Developer', 'Coordinator':
+ db.security.addPermissionToRole(r, p)
# Users should be able to edit and view their own queries. They should also
# be able to view any marked as not private. They should not be able to
@@ -145,13 +214,16 @@
return userid == db.query.get(itemid, 'creator')
p = db.security.addPermission(name='View', klass='query', check=view_query,
description="User is allowed to view their own and public queries")
-db.security.addPermissionToRole('User', p)
+for r in 'User', 'Developer', 'Coordinator':
+ db.security.addPermissionToRole(r, p)
p = db.security.addPermission(name='Edit', klass='query', check=edit_query,
description="User is allowed to edit their queries")
-db.security.addPermissionToRole('User', p)
+for r in 'User', 'Developer', 'Coordinator':
+ db.security.addPermissionToRole(r, p)
p = db.security.addPermission(name='Create', klass='query',
description="User is allowed to create queries")
-db.security.addPermissionToRole('User', p)
+for r in 'User', 'Developer', 'Coordinator':
+ db.security.addPermissionToRole(r, p)
#
@@ -174,15 +246,15 @@
# - Allow anonymous users to register
db.security.addPermissionToRole('Anonymous', 'Create', 'user')
-# Allow anonymous users access to view issues (and the related, linked
+# Allow anonymous users access to view bugs (and the related, linked
# information)
-for cl in 'issue', 'file', 'msg', 'keyword', 'priority', 'status', 'resolution', 'group':
+for cl in 'bug', 'file', 'msg', 'severity', 'status', 'resolution':
db.security.addPermissionToRole('Anonymous', 'View', cl)
# [OPTIONAL]
-# Allow anonymous users access to create or edit "issue" items (and the
+# Allow anonymous users access to create or edit "bug" items (and the
# related file and message items)
-#for cl in 'issue', 'file', 'msg':
+#for cl in 'bug', 'file', 'msg':
# db.security.addPermissionToRole('Anonymous', 'Create', cl)
# db.security.addPermissionToRole('Anonymous', 'Edit', cl)
More information about the Python-checkins
mailing list