Commits

Anonymous committed ad954ff

Applying changes made to the classic template while the roundup
prototype was created. This brings the instance up to date with the
code in roundup's CVS repo on sourceforge, the python-tracker module,
tagged export-to-svn-python-org.

Complete ChangeLog dug out from CVS:

2006-07-26 02:59 richard

* html/: page.html, style.css: some CSS bugfixes and cleaning up of
the sidebar

2006-07-19 23:22 forsberg

* html/user.forgotten.html: Added a note about the use of
sourceforge usernames.

2006-07-19 22:16 forsberg

* html/user.index.html: Batch index for user list, or we'll have to
wait for a looong time for all the 4500+ users to appear.

2006-07-19 21:56 forsberg

* html/: issue.index.html, issue.search.html, page.html, style.css:
Applied patch with stylistic changed from Stefan Seefeld and did
some additional work on it.

Tracker now looks much more python.org-ish.

2006-07-04 22:20 forsberg

* html/issue.search.html: not resolved -> not closed. Closes
http://efod.se/ptt/issue11 .

2006-07-04 18:14 forsberg

* html/page.html: Only show status=1,2 (Open, Pending) when
searching.

2006-07-04 18:05 forsberg

* html/home.html: Only show status with id 1, 2 (Open, Pending) on
default page.

2006-07-04 18:04 forsberg

* initial_data.py: Create status values to make the id's of the
different values predeterminable, and hence useful in search
filters..

2006-06-29 17:33 forsberg

* html/issue.search.html: Use search_input instead of search_select
to avoid listing all users, or the performance of the search page
will be very very bad..

2006-06-29 17:31 forsberg

* html/issue.item.html: Set title on href pointing to superseder,
enabling tooltip with title of bug in most browsers.

2006-06-21 22:47 forsberg

* html/issue.item.html: Show status and resolution on their own
line.

Show Group and Priority on another line.

2006-06-21 22:45 forsberg

* html/issue.item.html: Show the resolution field.

2006-06-20 22:28 forsberg

* schema.py: Added resolution to issue,
and setkey on resolution.

2006-06-20 21:55 forsberg

* schema.py, html/issue.item.html: Added a boolean,
imported_from_sf, to the schema. This is used to determine if a
link to the old sf tracker item should be displayed or not.

2006-06-20 20:03 forsberg

* html/issue.item.html: Display messages in the order they came in,
not reversed.

2006-06-20 19:55 forsberg

* html/issue.item.html: Added a link to the SF tracker item, to
make it easier to verify that the imported data is correct.

2006-06-20 19:49 forsberg

* html/issue.item.html: Replaced assignedto menu with assignedto
field for performance reasons.

2006-06-15 18:57 forsberg

* schema.py: Assign permissions to the 'group' class.

2006-06-14 22:06 forsberg

* initial_data.py: Don't add any priority nor any status values.
The importer fixes the former and might do the latter too in a
later stage.

2006-06-14 21:58 forsberg

* html/: _generic.calendar.html, _generic.collision.html,
_generic.help.html, _generic.index.html, _generic.item.html,
file.index.html, file.item.html, help_controls.js,
home.classlist.html, home.html, issue.index.html,
issue.item.html, issue.search.html, keyword.item.html,
msg.index.html, msg.item.html, page.html, query.edit.html,
query.item.html, style.css, user.forgotten.html, user.index.html,
user.item.html, user.register.html, user.rego_progress.html:
Templates from the 'classic' roundup template.

2006-06-13 05:33 richard

* .cvsignore, TEMPLATE-INFO.txt, initial_data.py, schema.py,
detectors/.cvsignore, detectors/messagesummary.py,
detectors/nosyreaction.py, detectors/statusauditor.py,
detectors/userauditor.py, extensions/.cvsignore,
extensions/README.txt: Initial import of python tracker

2006-06-13 05:33 richard

* .cvsignore, TEMPLATE-INFO.txt, initial_data.py, schema.py,
detectors/.cvsignore, detectors/messagesummary.py,
detectors/nosyreaction.py, detectors/statusauditor.py,
detectors/userauditor.py, extensions/.cvsignore,
extensions/README.txt: Initial revision

  • Participants
  • Parent commits ae1df84

Comments (0)

Files changed (11)

TEMPLATE-INFO.txt

-Name: classic
-Description: This is a generic issue tracker that may be used to track bugs,
-             feature requests, project issues or any number of other types
-             of issues. Most users of Roundup will find that this template
-             suits them, with perhaps a few customisations.
-Intended-For: All first-time Roundup users
+Name: python-tracker
+Description: This is customisation of the "classic" tracker for the Python
+             Language developers.
+Intended-For: http://dev.python.org/
 
 <span tal:replace="structure python:db.issue.renderWith('index',
     sort=('-', 'activity'), group=('+', 'priority'), filter=['status'],
     columns=['id','activity','title','creator','assignedto', 'status'],
-    filterspec={'status':['-1','1','2','3','4','5','6','7']})" />
+    filterspec={'status':['1','2']})" />
+<!-- SHA: 1fdaa3238149b4381d19a45a81deb6075de7d0e9 -->

html/issue.index.html

 <a tal:attributes="href python:request.indexargs_url('issue',
             {'@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">
    </td>
    <th i18n:translate="">Descending:</th>
    <td><input type="checkbox" name="@sortdir"
-              tal:attributes="checked python:request.sort[0] == '-'">
+              tal:attributes="checked python:request.sort[0] == '-'"/>
    </td>
   </tr>
   <tr>
    </td>
    <th i18n:translate="">Descending:</th>
    <td><input type="checkbox" name="@groupdir"
-              tal:attributes="checked python:request.group[0] == '-'">
+              tal:attributes="checked python:request.group[0] == '-'"/>
    </td>
   </tr>
   <tr><td colspan="4">
-              <input type="submit" value="Redisplay" i18n:attributes="value">
+              <input type="submit" value="Redisplay" i18n:attributes="value"/>
               <tal:block tal:replace="structure
                 python:request.indexargs_form(sort=0, group=0)" />
   </td></tr>
 
 </td>
 </tal:block>
+<!-- SHA: 8a7f0580114904917683796f76dde4da8cc80d3b -->

html/issue.item.html

 
 <td class="content" metal:fill-slot="content">
 
+<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>
+
+
 <p tal:condition="not:context/is_view_ok" i18n:translate="">You are not
     allowed to view this page.</p>
 
 </tr>
 
 <tr>
+ <th i18n:translate="">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="">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>
   <span tal:condition="context/is_edit_ok" tal:replace="structure python:db.issue.classhelp('id,title', property='superseder')" />
   <span tal:condition="context/superseder" tal:repeat="sup context/superseder">
    <br><span i18n:translate="">View: <a i18n:name="link" tal:content="sup/id"
-     tal:attributes="href string:issue${sup/id}"></a></span>
+     tal:attributes="href string:issue${sup/id};
+                     title sup/title;"></a></span>
   </span>
  </td>
  <th i18n:translate="">Nosy List</th>
 
 <tr>
  <th i18n:translate="">Assigned To</th>
- <td tal:content="structure context/assignedto/menu">assignedto menu</td>
+ <td tal:content="structure context/assignedto/field">assignedto field</td>
  <th i18n:translate="">Topics</th>
  <td>
   <span tal:replace="structure context/topic/field" />
 
 <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/reverse">
+ <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>
 </td>
 
 </tal:block>
+<!-- SHA: 52e1c51e8d17b8e8dd4ff54055b4f87ef0aa13bc -->

html/issue.search.html

  i18n:translate="">Issue searching</span>
 <td class="content" metal:fill-slot="content">
 
-<form method="GET" name="itemSynopsis"
+<form method="get" name="itemSynopsis"
       tal:attributes="action request/classname">
 
 <table class="form" tal:define="
                 db_content string:username;"
     tal:condition="db/user/is_view_ok">
   <th i18n:translate="">Creator:</th>
-  <td metal:use-macro="search_select">
+  <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>
                 db_content string:username;"
     tal:condition="db/user/is_view_ok">
   <th i18n:translate="">Actor:</th>
-  <td metal:use-macro="search_select">
+  <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>
   <th i18n:translate="">Status:</th>
   <td metal:use-macro="search_select">
     <tal:block metal:fill-slot="extra_options">
-      <option value="-1,1,2,3,4,5,6,7" i18n:translate=""
-              tal:attributes="selected python:value == '-1,1,2,3,4,5,6,7'">not resolved</option>
+      <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>
                 db_content string:username;"
     tal:condition="db/user/is_view_ok">
   <th i18n:translate="">Assigned to:</th>
-  <td metal:use-macro="search_select">
+  <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>
  <th i18n:translate="">No Sort or group:</th>
  <td>&nbsp;</td>
  <td>&nbsp;</td>
- <td><input type="radio" name="@sort" value=""></td>
- <td><input type="radio" name="@group" value=""></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>
+           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>
+           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 python:request.sort[0] == '-' or request.sort[0] is None">
+           tal:attributes="checked python:request.sort[0] == '-' or request.sort[0] is None"/>
 </td>
 </tr>
 
 <tr>
 <th i18n:translate="">Group Descending:</th>
 <td><input type="checkbox" name="@groupdir"
-           tal:attributes="checked python:request.group[0] == '-'">
+           tal:attributes="checked python:request.group[0] == '-'"/>
 </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">
+  <input name="@queryname" tal:attributes="value value"/>
+  <input type="hidden" name="@old-queryname" tal:attributes="value value"/>
  </td>
 </tr>
 
 <tr>
   <td>
    &nbsp;
-   <input type="hidden" name="@action" value="search">
+   <input type="hidden" name="@action" value="search"/>
   </td>
-  <td><input type="submit" value="Search" i18n:attributes="value"></td>
+  <td><input type="submit" value="Search" i18n:attributes="value"/></td>
 </tr>
 
 <tr><td>&nbsp;</td>
 </td>
 
 </tal:block>
+<!-- SHA: f0c86e97d4e43a1e3cc5f9e08ec4b918719ab6b8 -->
 <tal:block metal:define-macro="icing">
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
-                               "http://www.w3.org/TR/html4/strict.dtd">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html>
 <head>
 <title metal:define-slot="head_title">title goes here</title>
-<link rel="stylesheet" type="text/css" href="@@file/style.css">
+<link media="screen" href="http://python.org/styles/screen-switcher-default.css" type="text/css" id="screen-switcher-stylesheet" rel="stylesheet" />
+<link media="screen" href="http://python.org/styles/netscape4.css" type="text/css" rel="stylesheet" />
+<link media="print" href="http://python.org/styles/print.css" type="text/css" rel="stylesheet" />
+<link media="screen" href="http://python.org/styles/largestyles.css" type="text/css" rel="alternate stylesheet" title="large text" />
+<link media="screen" href="http://python.org/styles/defaultfonts.css" type="text/css" rel="alternate stylesheet" title="default fonts" />
+<link rel="stylesheet" type="text/css" href="@@file/style.css" />
 <meta http-equiv="Content-Type"
  tal:attributes="content string:text/html;; charset=${request/client/charset}" />
 <script tal:replace="structure request/base_javascript">
 </script>
 
 </head>
-<body class="body">
+<body>
+  <!--  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"/>
+   <input type="submit" id="submit" name="submit" value="Search" i18n:attributes="value"/>
+ </form>
+</div>
 
-<table class="body">
-
-<tr>
- <td class="page-header-left">&nbsp;</td>
- <td class="page-header-top">
-   <div id="body-title">
-     <h2><span metal:define-slot="body_title">body title</span></h2>
-   </div>
-   <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"/>
-       <input type="submit" id="submit" name="submit" value="Search" i18n:attributes="value"/>
-     </form>
-  </div>
- </td>
-</tr>
-
-<tr>
- <td rowspan="2" valign="top" class="sidebar">
-  <p class="classblock"
-     tal:condition="python:request.user.hasPermission('View', 'query')">
-   <span i18n:translate=""
-    ><b>Your Queries</b> (<a href="query?@template=edit">edit</a>)</span><br>
-   <tal:block tal:repeat="qs request/user/queries">
-    <a tal:attributes="href string:${qs/klass}?${qs/url}&@dispname=${qs/name}"
-       tal:content="qs/name">link</a><br>
-   </tal:block>
-  </p>
-
-  <form method="POST" tal:attributes="action request/base">
-   <p class="classblock"
-       tal:condition="python:request.user.hasPermission('View', 'issue')">
-    <b i18n:translate="">Issues</b><br>
-    <span tal:condition="python:request.user.hasPermission('Create', 'issue')">
-      <a href="issue?@template=item" i18n:translate="">Create New</a><br>
-    </span>
-    <a href="issue?@sort=-activity&@group=priority&@filter=status,assignedto&@columns=id,activity,title,creator,status&status=-1,1,2,3,4,5,6,7&assignedto=-1&@dispname=Show%20Unassigned"
-     i18n:translate="">Show Unassigned</a><br>
-    <a href="issue?@sort=-activity&@group=priority&@filter=status&@columns=id,activity,title,creator,assignedto,status&status=-1,1,2,3,4,5,6,7&@dispname=Show%20All"
-     i18n:translate="">Show All</a><br>
-    <a href="issue?@template=search" i18n:translate="">Search</a><br>
-    <input type="submit" class="form-small" value="Show issue:"
-     i18n:attributes="value"><input class="form-small" size="4"
-     type="text" name="@number">
-    <input type="hidden" name="@type" value="issue">
-    <input type="hidden" name="@action" value="show">
-   </p>
-  </form>
-
-  <p class="classblock"
-     tal:condition="python:request.user.hasPermission('Edit', 'keyword')
-        or request.user.hasPermission('Create', 'keyword')">
-   <b i18n:translate="">Keywords</b><br>
-   <span tal:condition="python:request.user.hasPermission('Create', 'keyword')">
-    <a href="keyword?@template=item" i18n:translate="">Create New</a><br>
-   </span>
-   <span tal:condition="python:db.keyword.list() and
-        request.user.hasPermission('Edit', 'keyword')">
-    <a href="keyword?@template=item" i18n:translate="">Edit Existing</a><br>
-   </span>
-  </p>
-
-  <p class="classblock"
-       tal:condition="python:request.user.hasPermission('View', 'user')">
-   <b i18n:translate="">Administration</b><br>
-   <span tal:condition="python:request.user.hasPermission('Edit', None)">
-    <a href="home?@template=classlist" i18n:translate="">Class List</a><br>
-   </span>
-   <span tal:condition="python:request.user.hasPermission('View', 'user')
+<div id="left-hand-navigation">
+  
+    <!--  Main Menu NEED LEVEL TWO HEADER AND FOOTER -->
+ <div id="menu">
+  <ul class="level-one">
+   <li class=""><a href="http://python.org/about" class="" title="About The Python Language">About</a></li>
+   <li class=""><a href="http://python.org/news" class="" title="">News</a></li>
+   <li class=""><a href="http://python.org/doc" class="" title="">Documentation</a></li>
+   <li class=""><a href="http://python.org/download" class="" title="">Download</a></li>
+   <li class=""><a href="http://python.org/community" class="" title="">Community</a></li>
+   <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>
+    <ul class="level-two">
+     <li tal:condition="python:request.user.hasPermission('View', 'issue')">
+      <b i18n:translate="">Issues</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>
+        <li>
+         <a href="issue?@sort=-activity&@group=priority&@filter=status,assignedto&@columns=id,activity,title,creator,status&status=1,2&assignedto=-1&@dispname=Show%20Unassigned"
+            i18n:translate="">Show Unassigned</a>
+        </li>
+        <li>
+         <a href="issue?@sort=-activity&@group=priority&@filter=status&@columns=id,activity,title,creator,assignedto,status&status=1,2&@dispname=Show%20All"
+            i18n:translate="">Show All</a>
+        </li>
+        <li>
+         <a href="issue?@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:"
+                 i18n:attributes="value"/>
+          <input class="form-small" size="4"
+                 type="text" name="@number"/>
+          <input type="hidden" name="@type" value="issue"/>
+          <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'">
+      <form method="post" tal:attributes="action request/base">
+       <b i18n:translate="">Login</b><br/>
+       <ul class="level-three">
+      <li>
+       <input size="10" name="__login_name"/><br/>
+       <input size="10" type="password" name="__login_password"/><br/>
+       <input type="hidden" name="@action" value="Login"/>
+       <input type="checkbox" name="remember" id="remember"/>
+       <label for="remember" i18n:translate="">Remember me?</label><br/>
+       <input class="form-small" type="submit" value="Login" i18n:attributes="value"/><br/>
+       <input type="hidden" name="__came_from" tal:attributes="value string:${request/base}${request/env/PATH_INFO}"/>
+       <span tal:replace="structure request/indexargs_form" />
+       </li>
+       <li>
+       <a href="user?@template=register"
+          tal:condition="python:request.user.hasPermission('Create', 'user')"
+          i18n:translate="">Register</a>
+	</li>
+       <li><a href="user?@template=forgotten" i18n:translate="">Lost&nbsp;your&nbsp;login?</a>
+       </li>
+       </ul>
+      </form>
+     </li>
+     <li class="" 
+         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 tal:attributes="href string:issue?@sort=-activity&@group=priority&@filter=status,assignedto&@columns=id,activity,title,creator,status&status=1,2&assignedto=${request/user/id}" i18n:translate="">Your Issues</a>
+    </li>
+    <li>
+       <a tal:attributes="href string:user${request/user/id}"
+          i18n:translate="">Your Details</a>
+    </li>
+    <li>
+       <a tal:attributes="href python:request.indexargs_url('',
+          {'@action':'logout'})" i18n:translate="">Logout</a>
+    </li>
+    </ul>
+    </li>
+     <li class=""
+         tal:condition="python:request.user.hasPermission('View', 'query')">
+   <span i18n:translate=""><b>Your Queries</b> (<a class="nomargin" href="query?@template=edit">edit</a>)</span><br/>
+   <ul class="level-three" tal:repeat="qs request/user/queries">
+    <li><a tal:attributes="href string:${qs/klass}?${qs/url}&@dispname=${qs/name}"
+       tal:content="qs/name">link</a></li>
+   </ul>
+     </li>
+     <li class=""
+         tal:condition="python:request.user.hasPermission('View', 'user')">
+   <b i18n:translate="">Administration</b>
+   <ul class="level-three">
+   <li tal:condition="python:request.user.hasPermission('Edit', None)">
+    <a href="home?@template=classlist" i18n:translate="">Class List</a>
+   </li>
+   <li tal:condition="python:request.user.hasPermission('View', 'user')
                             or request.user.hasPermission('Edit', 'user')">
-    <a href="user"  i18n:translate="">User List</a><br>
-   </span>
-   <a tal:condition="python:request.user.hasPermission('Create', 'user')"
-      href="user?@template=item" i18n:translate="">Add User</a>
-  </p>
-
-  <form method="POST" tal:condition="python:request.user.username=='anonymous'"
-        tal:attributes="action request/base">
-   <p class="userblock">
-    <b i18n:translate="">Login</b><br>
-    <input size="10" name="__login_name"><br>
-    <input size="10" type="password" name="__login_password"><br>
-    <input type="hidden" name="@action" value="Login">
-    <input type="checkbox" name="remember" id="remember">
-    <label for="remember" i18n:translate="">Remember me?</label><br>
-    <input type="submit" value="Login" i18n:attributes="value"><br>
-    <input type="hidden" name="__came_from" tal:attributes="value string:${request/base}${request/env/PATH_INFO}">
-    <span tal:replace="structure request/indexargs_form" />
-    <a href="user?@template=register"
-       tal:condition="python:request.user.hasPermission('Create', 'user')"
-     i18n:translate="">Register</a><br>
-    <a href="user?@template=forgotten" i18n:translate="">Lost&nbsp;your&nbsp;login?</a><br>
-   </p>
-  </form>
-
-  <p class="userblock" tal:condition="python:request.user.username != 'anonymous'">
-   <b i18n:translate="">Hello, <span i18n:name="user"
-    tal:replace="request/user/username">username</span></b><br>
-   <a tal:attributes="href string:issue?@sort=-activity&@group=priority&@filter=status,assignedto&@columns=id,activity,title,creator,status&status=-1,1,2,3,4,5,6,7&assignedto=${request/user/id}" i18n:translate="">Your Issues</a><br>
-   <a tal:attributes="href string:user${request/user/id}"
-    i18n:translate="">Your Details</a><br>
-   <a tal:attributes="href python:request.indexargs_url('',
-       {'@action':'logout'})" i18n:translate="">Logout</a>
-  </p>
-  <p class="userblock">
-   <b i18n:translate="">Help</b><br>
+    <a href="user"  i18n:translate="">User List</a>
+   </li>
+   <li tal:condition="python:request.user.hasPermission('Create', 'user')"><a href="user?@template=item" i18n:translate="">Add User</a>
+   </li>
+   </ul>
+     </li>
+     <li class="">
+   <b i18n:translate="">Help</b><br/>
    <a href="http://roundup.sourceforge.net/doc-1.0/"
     i18n:translate="">Roundup docs</a>
-  </p>
- </td>
- <td>
-  <p tal:condition="options/error_message | nothing" class="error-message"
-     tal:repeat="m options/error_message" tal:content="structure m" />
-  <p tal:condition="options/ok_message | nothing" class="ok-message">
-    <span tal:repeat="m options/ok_message"
-       tal:content="structure string:$m <br/ > " />
-     <a class="form-small" tal:attributes="href request/current_url"
-        i18n:translate="">clear this message</a>
-  </p>
- </td>
-</tr>
-<tr>
- <td class="content" metal:define-slot="content">Page content goes here</td>
-</tr>
+     </li>
+    </ul>
+   </li>
+  </ul>
+ </div> <!-- menu -->
+</div> <!-- left-hand-navigation -->
 
-</table>
+<div id="content-body">
+<div id="body-main">
+<div id="content">
+<div id="breadcrumb"><span metal:define-slot="body_title">body title</span></div>
+ <p tal:condition="options/error_message | nothing" class="error-message"
+    tal:repeat="m options/error_message" tal:content="structure m" />
+ <p tal:condition="options/ok_message | nothing" class="ok-message">
+  <span tal:repeat="m options/ok_message"
+        tal:content="structure string:$m <br/ > " />
+  <a class="form-small" tal:attributes="href request/current_url"
+     i18n:translate="">clear this message</a>
+ </p>
+ <tal:block metal:define-slot="content">Page content goes here</tal:block>
+</div> <!-- content-body -->
+</div> <!-- body-main -->
+</div> <!-- content -->
 
 <pre tal:condition="request/form/debug | nothing" tal:content="request">
 </pre>
 -->
 <td metal:define-macro="search_input">
   <input tal:attributes="value python:request.form.getvalue(name) or nothing;
-                         name name">
+                         name name"/>
 </td>
 
 <td metal:define-macro="search_popup">
     string (eg. "id,title" or "id,name,description") as well as name
   -->
   <input tal:attributes="value python:request.form.getvalue(name) or nothing;
-                         name name">
+                         name name"/>
   <span tal:replace="structure python:db.issue.classhelp(columns,
                                       property=name)" />
 </td>
 
 <td metal:define-macro="search_multiselect">
   <input tal:attributes="value python:request.form.getvalue(name) or nothing;
-                         name name">
+                         name name"/>
   <span tal:replace="structure python:db[db_klass].classhelp(db_content,
                                         property=name, width='600')" />
 </td>
 <td metal:define-macro="column_input">
   <input type="checkbox" name="@columns"
          tal:attributes="value name;
-                         checked python:name in cols">
+                         checked python:name in cols"/>
 </td>
 
 <td metal:define-macro="sort_input">
   <input type="radio" name="@sort"
          tal:attributes="value name;
-                         checked python:name == sort_on">
+                         checked python:name == sort_on"/>
 </td>
 
 <td metal:define-macro="group_input">
   <input type="radio" name="@group"
          tal:attributes="value name;
-                         checked python:name == group_on">
+                         checked python:name == group_on"/>
 </td>
-
+
+
 /* main page styles */
 body.body {
   font-family: sans-serif, Arial, Helvetica;
   text-decoration: none;
 }
 
-table.body {
-  border: 0;
-  padding: 0;
-  border-spacing: 0;
-  border-collapse: separate;
+#menu ul.level-two a.nomargin { /* Very, very, specific! :-) */
+  display: inline;
+  margin: 0px;
 }
 
-td.page-header-left {
-  padding: 5px;
-  border-bottom: 1px solid #444;
-}
-td.sidebar {
-  padding: 1px 0 0 1px;
-  white-space: nowrap;
+#menu ul.level-three li {
+    margin-left: 0px;
+    border: thin solid red;
 }
 
-/* don't display the sidebar when printing */
-@media print {
-    td.page-header-left {
-        display: none;
-    }
-    td.sidebar {
-        display: none;
-    }
-    .index-controls {
-        display: none;
-    }
-    #searchbox {
-        display: none;
-    }
+
+@media print 
+{
+  .index-controls { display: none;}
+    #searchbox { display: none;}
 }
 
-td.page-header-top {
-  padding: 5px;
-  border-bottom: 1px solid #444;
-}
-#searchbox {
-    float: right;
-}
+#searchbox { float: right;}
 
 div#body-title {
   float: left;
 }
 
 
-div#searchbox {
+div#searchbox 
+{
   float: right;
   padding-top: 1em;
 }
 
-div#searchbox input#search-text {
+div#searchbox input#search-text 
+{
   width: 10em;
 }
 
+#menu ul.level-two li
+{
+  background-image: none;
+  background-color: transparent;
+  display: block;
+  border: 0;
+  border-top: 1px solid #DDD;
+  padding: 0.1em;
+  margin: 0 3em 0px 1.5em;
+  color: #3C4B7B;
+  background: none;
+  width: 11em !important;
+  width /**/: 3.2em;  
+  font-family: Arial, Verdana, Geneva, "Bitstream Vera Sans", Helvetica, sans-serif;
+  text-transform: none;
+}
+
+#menu ul.level-three li
+{
+    margin: 0px;
+    padding: 0px;
+}
+
 form {
-  margin: 0;
+  margin: 0px;
 }
 
 textarea {
-    font-family: monospace;
-}
-
-td.sidebar p.classblock {
-  padding: 2px 5px 2px 5px;
-  margin: 1px;
-  border: 1px solid #444;
-  background-color: #eee;
-}
-
-td.sidebar p.userblock {
-  padding: 2px 5px 2px 5px;
-  margin: 1px 1px 1px 1px;
-  border: 1px solid #444;
-  background-color: #eef;
+  font-family: monospace;
 }
 
 .form-small {
-  padding: 0;
+  padding: 0px;
   font-size: 75%;
 }
 
 
-td.content {
-  padding: 1px 5px 1px 5px;
-  vertical-align: top;
-  width: 100%;
-}
-
 td.date, th.date { 
   white-space: nowrap;
 }
 
-p.ok-message {
+p.ok-message 
+{
   background-color: #22bb22;
   padding: 5px;
   color: white;
   font-weight: bold;
 }
-p.error-message {
+p.error-message 
+{
   background-color: #bb2222;
   padding: 5px;
   color: white;
   font-weight: bold;
 }
-p.error-message a[href] {
+p.error-message a[href] 
+{
   color: white;
   text-decoration: underline;
 }
 
 /* style for forms */
 table.form {
+  border: #ddd solid 1px;
   padding: 2px;
   border-spacing: 0;
-  border-collapse: separate;
+  border-collapse: collapse;
+  background-color: #f5f5f5;
 }
 
 table.form th {
+  border: #ddd solid 1px;
   color: #338;
   text-align: right;
   vertical-align: top;
 
 table.form th.header {
   font-weight: bold;
-  background-color: #eef;
   text-align: left;
 }
 
 
 table.list th {
   padding: 0 4px 0 4px;
-  color: #404070;
-  background-color: #eef;
+  color: #234764;
+  background-color: #f5f5f5;
   border: 1px solid white;
   vertical-align: top;
   empty-cells: show;
 table.list th a[href]:hover { color: #404070 }
 table.list th a[href]:link { color: #404070 }
 table.list th a[href] { color: #404070 }
-table.list th.group {
-  background-color: #f4f4ff;
+table.list th.group 
+{
+  background-color: #f5f5f5;
   text-align: center;
 }
 
 table.list td {
   padding: 0 4px 0 4px;
   border: 1px solid white;
-  color: #404070;
-  background-color: #efefef;
+  color: #234764;
+/*  background-color: #efefef;*/
   vertical-align: top;
   empty-cells: show;
 }
   font-weight: bold;
   text-align: left;
 }
+/* SHA: a055019fd4171164d8b3651575c38a33ef90511a */

html/user.forgotten.html

 <p i18n:translate="">You have two options if you have forgotten your password.
 If you know the email address you registered with, enter it below.</p>
 
+<p i18n:translate="">If your  user was  automatically  created during
+import  from  the old  sourceforge  tracker,  your  e-mail address  is
+&lt;Sourceforge  username&gt;@users.sourceforge.net. The  mail address
+associated with your account can be changed after login.</p>
+
 <form method="POST" onSubmit="return submit_once()"
       tal:attributes="action context/designator">
     <table class="form">
 
 <p i18n:translate="">Or, if you know your username, then enter it below.</p>
 
+<p i18n:translate="">If you have previously created or modified bug
+reports in the sourceforge bug tracker, you have an account here with
+the same username as your sourceforge username.</p>
+
 <table class="form">
  <tr><th i18n:translate="">Username:</th> <td><input name="username"></td> </tr>
  <tr><td></td><td><input type="submit" value="Request password reset"
 </td>
 
 </tal:block>
+<!-- SHA: 6fdb58c55fd854904ae98906d5935549a221fabf -->

html/user.index.html

 <span tal:condition="not:context/is_view_ok"
  i18n:translate="">You are not allowed to view this page.</span>
 
-<table width="100%" tal:condition="context/is_view_ok" class="list">
+<table width="100%" tal:define="batch request/batch" tal:condition="context/is_view_ok" class="list">
 <tr>
  <th i18n:translate="">Username</th>
  <th i18n:translate="">Real name</th>
  <th i18n:translate="">Phone number</th>
  <th tal:condition="context/is_edit_ok" i18n:translate="">Retire</th>
 </tr>
-<tal:block repeat="user context/list">
+<tal:block repeat="user batch">
 <tr tal:attributes="class python:['normal', 'alt'][repeat['user'].index%6/3]">
  <td>
   <a tal:attributes="href string:user${user/id}"
  </td>
 </tr>
 </tal:block>
+ <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="">&lt;&lt; previous</a>
+      &nbsp;
+     </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 &gt;&gt;</a>
+      &nbsp;
+     </th>
+    </tr>
+   </table>
+  </th>
+ </tr>
+
 </table>
 </td>
 
+
+
 </tal:block>
+<!-- SHA: 3082bd8529e95365779a65d32993bc5f39abe1ca -->
 #
 # TRACKER INITIAL PRIORITY AND STATUS VALUES
 #
+
 pri = db.getclass('priority')
-pri.create(name="critical", order="1")
-pri.create(name="urgent", order="2")
-pri.create(name="bug", order="3")
-pri.create(name="feature", order="4")
-pri.create(name="wish", order="5")
+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="unread", order="1")
-stat.create(name="deferred", order="2")
-stat.create(name="chatting", order="3")
-stat.create(name="need-eg", order="4")
-stat.create(name="in-progress", order="5")
-stat.create(name="testing", order="6")
-stat.create(name="done-cbb", order="7")
-stat.create(name="resolved", order="8")
-
+stat.create(name='Open', order='1')
+stat.create(name='Pending', order='2')
+stat.create(name='Closed', order='3')
+stat.create(name='Deleted', order='4')
+#
 # create the two default users
 user = db.getclass('user')
 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
 
                 order=Number())
 stat.setkey("name")
 
+# Resolution
+resolution = Class(db, "resolution",
+                   name=String(),
+                   order=Number())
+resolution.setkey('name')
+
+# Groups
+group = Class(db, "group",
+              name=String(),
+              order=Number())
+group.setkey("name")
+            
+              
+
 # Keywords
 keyword = Class(db, "keyword",
                 name=String())
                 assignedto=Link("user"),
                 topic=Multilink("keyword"),
                 priority=Link("priority"),
-                status=Link("status"))
+                group=Link("group"),
+                status=Link("status"),
+                resolution=Link("resolution"),
+                imported_from_sf=Boolean())
 
 #
 # TRACKER SECURITY SETTINGS
     db.security.addPermissionToRole('User', 'View', cl)
     db.security.addPermissionToRole('User', 'Edit', cl)
     db.security.addPermissionToRole('User', 'Create', cl)
-for cl in 'priority', 'status':
+for cl in 'priority', 'status', 'resolution', 'group':
     db.security.addPermissionToRole('User', 'View', cl)
 
 # May users view other user information? Comment these lines out
 
 # Allow anonymous users access to view issues (and the related, linked
 # information)
-for cl in 'issue', 'file', 'msg', 'keyword', 'priority', 'status':
+for cl in 'issue', 'file', 'msg', 'keyword', 'priority', 'status', 'resolution', 'group':
     db.security.addPermissionToRole('Anonymous', 'View', cl)
 
 # [OPTIONAL]
 
 
 # vim: set filetype=python sts=4 sw=4 et si :
+