Ezio Melotti <ezio.melo...@gmail.com> added the comment:

I applied the update to Roundup 1.4.19 in r88872, to the python-dev instance in 
r88876/7, and updated the other instances to Roundup 1.4.8.  The attached patch 
contains the 1.4.19 updates for the other instances as well.  It might be 
necessary to apply the r88877 fix[0] to them as well.

FWIW I can't tests this instances on my machine.  Also I didn't include the 
python-dev-spambayes-integration instance in the update.  Is it used? Does it 
need to be updated?

The updated instances are: board, jobs, jython, meta, security, setuptools.

_______________________________________________________
PSF Meta Tracker <metatrac...@psf.upfronthosting.co.za>
<http://psf.upfronthosting.co.za/roundup/meta/issue411>
_______________________________________________________
Index: setuptools/html/style.css
===================================================================
--- setuptools/html/style.css   (revision 88877)
+++ setuptools/html/style.css   (working copy)
@@ -50,15 +50,7 @@
   padding: 5px;
   border-bottom: 1px solid #444;
 }
-#searchbox {
-    float: right;
-}
 
-div#body-title {
-  float: left;
-}
-
-
 div#searchbox {
   float: right;
   padding-top: 1em;
@@ -421,6 +413,7 @@
   font-weight: bold;
   text-align: left;
 }
+
 input[type="text"]:focus,
 input[type="checkbox"]:focus,
 input[type="radio"]:focus,
@@ -429,6 +422,18 @@
   background-color: #ffffc0;
 }
 
+.calendar_display {
+  text-align: center;
+}
+
+.calendar_display td {
+  padding: 1px 4px 1px 4px;
+}
+
+.calendar_display .today {
+  background-color: #afafaf;
+}
+
 /* vim: sts=2 sw=2 et
 */
 /* SHA: 7243da9b4e481a0b95a5367b45baaaa45fab8998 */
Index: setuptools/html/page.html
===================================================================
--- setuptools/html/page.html   (revision 88877)
+++ setuptools/html/page.html   (working copy)
@@ -28,9 +28,6 @@
 <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"
@@ -43,7 +40,10 @@
        <input type="submit" id="submit" name="submit" value="Search"
               i18n:attributes="value" />
      </form>
-  </div>
+   </div>
+   <div id="body-title">
+     <h2><span metal:define-slot="body_title">body title</span></h2>
+   </div>
  </td>
 </tr>
 
@@ -164,7 +164,7 @@
   </p>
   <p class="userblock">
    <b i18n:translate="">Help</b><br>
-   <a href="http://roundup.sourceforge.net/doc-1.0/";
+   <a href="http://www.roundup-tracker.org";
     i18n:translate="">Roundup docs</a>
   </p>
  </td>
@@ -231,7 +231,7 @@
   <input tal:attributes="value python:request.form.getvalue(name) or nothing;
                          name name;
                          id name">
-  <span tal:replace="structure python:db.issue.classhelp(columns,
+  <span tal:replace="structure python:db[db_klass].classhelp(columns,
                                       property=name)" />
 </td>
 
@@ -247,6 +247,22 @@
   </select>
 </td>
 
+<td metal:define-macro="search_select_keywords">
+  <div tal:attributes="id python:'''keywords_%s'''%name">
+    <select tal:attributes="name name; id name"
+            tal:define="value python:request.form.getvalue(name)">
+      <option value="" i18n:translate="">don't care</option>
+      <metal:slot define-slot="extra_options" />
+      <option value="" i18n:translate="" 
disabled="disabled">------------</option>
+      <option tal:repeat="s python:db[db_klass].list()"
+              tal:attributes="value s/id; selected python:value == s.id"
+              tal:content="python:s[db_content]"></option>
+    </select>
+    <a class="classhelp"
+          tal:attributes="href 
python:'''javascript:help_window('issue?@template=keywords_expr&property=%s&form=itemSynopsis',
 350, 200)'''%name">(expr)</a>
+  </div>
+</td>
+
 <!-- like search_select, but translates the further values.
 Could extend it (METAL 1.1 attribute "extend-macro")
 -->
Index: setuptools/html/_generic.index.html
===================================================================
--- setuptools/html/_generic.index.html (revision 88877)
+++ setuptools/html/_generic.index.html (working copy)
@@ -39,7 +39,8 @@
 
 <p class="form-help">
  Remove entries by deleting their line. Add new entries by appending
- them to the table - put an X in the id column.
+ them to the table - put an X in the id column. If you wish to restore a
+ removed item and you know its id then just put that id in the id column.
 </p>
 </tal:block>
 <form onSubmit="return submit_once()" method="POST"
Index: setuptools/html/issue.search.html
===================================================================
--- setuptools/html/issue.search.html   (revision 88877)
+++ setuptools/html/issue.search.html   (working copy)
@@ -12,10 +12,10 @@
    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';
+   sort_on python:(sort_on and sort_on[1]) or (not request.nodeid and 
'activity') or '';
    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';
+   group_on python:(group_on and group_on[1]) or (not request.nodeid and 
'priority') or '';
 
    search_input templates/page/macros/search_input;
    search_date templates/page/macros/search_date;
@@ -23,6 +23,7 @@
    sort_input templates/page/macros/sort_input;
    group_input templates/page/macros/group_input;
    search_select templates/page/macros/search_select;
+   search_select_keywords templates/page/macros/search_select_keywords;
    search_select_translated templates/page/macros/search_select_translated;
    search_multiselect templates/page/macros/search_multiselect;">
 
@@ -54,7 +55,7 @@
                 db_klass string:keyword;
                 db_content string:name;">
   <th i18n:translate="">Keyword:</th>
-  <td metal:use-macro="search_select">
+  <td metal:use-macro="search_select_keywords">
     <option metal:fill-slot="extra_options" value="-1" i18n:translate=""
             tal:attributes="selected python:value == '-1'">not 
selected</option>
   </td>
@@ -167,8 +168,8 @@
  <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="" tal:attributes="checked 
python:sort_on == ''"></td>
+ <td><input type="radio" name="@group" value="" tal:attributes="checked 
python:group_on == ''"></td>
 </tr>
 
 <tr>
Index: setuptools/html/_generic.item.html
===================================================================
--- setuptools/html/_generic.item.html  (revision 88877)
+++ setuptools/html/_generic.item.html  (working copy)
@@ -44,7 +44,12 @@
 
 </form>
 
-<tal:block tal:condition="context/id" tal:replace="structure context/history" 
/>
+<tal:block tal:condition="context/id"
+    tal:define="limit python:[10, 
None][request.form.has_key('show_all_history')]"
+    tal:replace="structure python:context.history(limit=limit)" />
+<p tal:condition="not:exists:request/form/show_all_history" 
i18n:translate="">Showing 10 items.
+<a tal:attributes="href 
string:${context/_classname}${context/id}?show_all_history=yes">Show all 
history</a>
+(warning: this could be VERY long)</p>
 
 </div>
 
Index: meta/html/style.css
===================================================================
--- meta/html/style.css (revision 88878)
+++ meta/html/style.css (working copy)
@@ -50,15 +50,7 @@
   padding: 5px;
   border-bottom: 1px solid #444;
 }
-#searchbox {
-    float: right;
-}
 
-div#body-title {
-  float: left;
-}
-
-
 div#searchbox {
   float: right;
   padding-top: 1em;
@@ -431,6 +423,7 @@
   font-weight: bold;
   text-align: left;
 }
+
 input[type="text"]:focus,
 input[type="checkbox"]:focus,
 input[type="radio"]:focus,
@@ -440,6 +433,18 @@
   background-color: #ffffc0;
 }
 
+.calendar_display {
+  text-align: center;
+}
+
+.calendar_display td {
+  padding: 1px 4px 1px 4px;
+}
+
+.calendar_display .today {
+  background-color: #afafaf;
+}
+
 /* vim: sts=2 sw=2 et
 */
 /* SHA: 7243da9b4e481a0b95a5367b45baaaa45fab8998 */
Index: meta/html/page.html
===================================================================
--- meta/html/page.html (revision 88878)
+++ meta/html/page.html (working copy)
@@ -28,9 +28,6 @@
 <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"
@@ -41,7 +38,10 @@
        <input id="search-text" name="@search_text" size="10"/>
        <input type="submit" id="submit" name="submit" value="Search" 
i18n:attributes="value" />
      </form>
-  </div>
+   </div>
+   <div id="body-title">
+     <h2><span metal:define-slot="body_title">body title</span></h2>
+   </div>
  </td>
 </tr>
 
@@ -162,7 +162,7 @@
   </p>
   <p class="userblock">
    <b i18n:translate="">Help</b><br>
-   <a href="http://roundup.sourceforge.net/doc-1.0/";
+   <a href="http://www.roundup-tracker.org";
     i18n:translate="">Roundup docs</a>
   </p>
  </td>
@@ -229,7 +229,7 @@
   <input tal:attributes="value python:request.form.getvalue(name) or nothing;
                          name name;
                          id name">
-  <span tal:replace="structure python:db.issue.classhelp(columns,
+  <span tal:replace="structure python:db[db_klass].classhelp(columns,
                                       property=name)" />
 </td>
 
@@ -245,6 +245,22 @@
   </select>
 </td>
 
+<td metal:define-macro="search_select_keywords">
+  <div tal:attributes="id python:'''keywords_%s'''%name">
+    <select tal:attributes="name name; id name"
+            tal:define="value python:request.form.getvalue(name)">
+      <option value="" i18n:translate="">don't care</option>
+      <metal:slot define-slot="extra_options" />
+      <option value="" i18n:translate="" 
disabled="disabled">------------</option>
+      <option tal:repeat="s python:db[db_klass].list()"
+              tal:attributes="value s/id; selected python:value == s.id"
+              tal:content="python:s[db_content]"></option>
+    </select>
+    <a class="classhelp"
+          tal:attributes="href 
python:'''javascript:help_window('issue?@template=keywords_expr&property=%s&form=itemSynopsis',
 350, 200)'''%name">(expr)</a>
+  </div>
+</td>
+
 <!-- like search_select, but translates the further values.
 Could extend it (METAL 1.1 attribute "extend-macro")
 -->
Index: meta/html/_generic.index.html
===================================================================
--- meta/html/_generic.index.html       (revision 88878)
+++ meta/html/_generic.index.html       (working copy)
@@ -39,7 +39,8 @@
 
 <p class="form-help">
  Remove entries by deleting their line. Add new entries by appending
- them to the table - put an X in the id column.
+ them to the table - put an X in the id column. If you wish to restore a
+ removed item and you know its id then just put that id in the id column.
 </p>
 </tal:block>
 <form onSubmit="return submit_once()" method="POST"
Index: meta/html/issue.search.html
===================================================================
--- meta/html/issue.search.html (revision 88878)
+++ meta/html/issue.search.html (working copy)
@@ -7,15 +7,15 @@
 
 <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';
+   sort_on python:(sort_on and sort_on[1]) or (not request.nodeid and 
'activity') or '';
    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';
+   group_on python:(group_on and group_on[1]) or (not request.nodeid and 
'priority') or '';
 
    search_input templates/page/macros/search_input;
    search_date templates/page/macros/search_date;
@@ -164,8 +164,8 @@
  <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="" tal:attributes="checked 
python:sort_on == ''"></td>
+ <td><input type="radio" name="@group" value="" tal:attributes="checked 
python:group_on == ''"></td>
 </tr>
 
 <tr>
Index: meta/html/_generic.item.html
===================================================================
--- meta/html/_generic.item.html        (revision 88878)
+++ meta/html/_generic.item.html        (working copy)
@@ -44,7 +44,12 @@
 
 </form>
 
-<tal:block tal:condition="context/id" tal:replace="structure context/history" 
/>
+<tal:block tal:condition="context/id"
+    tal:define="limit python:[10, 
None][request.form.has_key('show_all_history')]"
+    tal:replace="structure python:context.history(limit=limit)" />
+<p tal:condition="not:exists:request/form/show_all_history" 
i18n:translate="">Showing 10 items.
+<a tal:attributes="href 
string:${context/_classname}${context/id}?show_all_history=yes">Show all 
history</a>
+(warning: this could be VERY long)</p>
 
 </div>
 
Index: board/html/style.css
===================================================================
--- board/html/style.css        (revision 88877)
+++ board/html/style.css        (working copy)
@@ -33,13 +33,6 @@
     #searchbox { display: none;}
 }
 
-#searchbox { float: right;}
-
-div#body-title {
-  float: left;
-}
-
-
 div#searchbox 
 {
   float: right;
@@ -456,7 +449,18 @@
   background-color: #ffffc0;
 }
 
+.calendar_display {
+  text-align: center;
+}
 
+.calendar_display td {
+  padding: 1px 4px 1px 4px;
+}
+
+.calendar_display .today {
+  background-color: #afafaf;
+}
+
 #demowarning {
    position: absolute;
    top: 10px;
Index: board/html/page.html
===================================================================
--- board/html/page.html        (revision 88877)
+++ board/html/page.html        (working copy)
@@ -130,7 +130,7 @@
        </li>
        <li>
        <a href="user?@template=register"
-          tal:condition="python:request.user.hasPermission('Create', 'user')"
+          tal:condition="python:request.user.hasPermission('Register', 'user')"
           i18n:translate="">Register</a>
        </li>
        <li><a href="user?@template=forgotten" 
i18n:translate="">Lost&nbsp;your&nbsp;login?</a>
@@ -283,7 +283,7 @@
   <input tal:attributes="value python:request.form.getvalue(name) or nothing;
                          name name;
                          id name"/>
-  <span tal:replace="structure python:db.issue.classhelp(columns,
+  <span tal:replace="structure python:db[db_klass].classhelp(columns,
                                       property=name)" />
 </td>
 
@@ -299,6 +299,22 @@
   </select>
 </td>
 
+<td metal:define-macro="search_select_keywords">
+  <div tal:attributes="id python:'''keywords_%s'''%name">
+    <select tal:attributes="name name; id name"
+            tal:define="value python:request.form.getvalue(name)">
+      <option value="" i18n:translate="">don't care</option>
+      <metal:slot define-slot="extra_options" />
+      <option value="" i18n:translate="" 
disabled="disabled">------------</option>
+      <option tal:repeat="s python:db[db_klass].list()"
+              tal:attributes="value s/id; selected python:value == s.id"
+              tal:content="python:s[db_content]"></option>
+    </select>
+    <a class="classhelp"
+          tal:attributes="href 
python:'''javascript:help_window('issue?@template=keywords_expr&property=%s&form=itemSynopsis',
 350, 200)'''%name">(expr)</a>
+  </div>
+</td>
+
 <!-- like search_select, but translates the further values.
 Could extend it (METAL 1.1 attribute "extend-macro")
 -->
Index: board/html/_generic.index.html
===================================================================
--- board/html/_generic.index.html      (revision 88877)
+++ board/html/_generic.index.html      (working copy)
@@ -37,7 +37,8 @@
 
 <p class="form-help">
  Remove entries by deleting their line. Add new entries by appending
- them to the table - put an X in the id column.
+ them to the table - put an X in the id column. If you wish to restore a
+ removed item and you know its id then just put that id in the id column.
 </p>
 </tal:block>
 <form onSubmit="return submit_once()" method="POST"
Index: board/html/issue.search.html
===================================================================
--- board/html/issue.search.html        (revision 88877)
+++ board/html/issue.search.html        (working copy)
@@ -12,10 +12,10 @@
    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';
+   sort_on python:(sort_on and sort_on[1]) or (not request.nodeid and 
'activity') or '';
    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';
+   group_on python:(group_on and group_on[1]) or (not request.nodeid and 
'priority') or '';
 
    search_input templates/page/macros/search_input;
    search_date templates/page/macros/search_date;
@@ -23,6 +23,7 @@
    sort_input templates/page/macros/sort_input;
    group_input templates/page/macros/group_input;
    search_select templates/page/macros/search_select;
+   search_select_keywords templates/page/macros/search_select_keywords;
    search_select_translated templates/page/macros/search_select_translated;
    search_multiselect templates/page/macros/search_multiselect;">
 
@@ -191,7 +192,7 @@
                 db_klass string:keyword;
                 db_content string:name;">
   <th i18n:translate="">Keyword:</th>
-  <td metal:use-macro="search_select_translated">
+  <td metal:use-macro="search_select_keywords">
     <option metal:fill-slot="extra_options" value="-1" i18n:translate=""
             tal:attributes="selected python:value == '-1'">not set</option>
   </td>
@@ -244,8 +245,8 @@
  <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="" tal:attributes="checked 
python:sort_on == ''" /></td>
+ <td><input type="radio" name="@group" value="" tal:attributes="checked 
python:group_on == ''" /></td>
 </tr>
 
 <tr>
Index: board/html/_generic.item.html
===================================================================
--- board/html/_generic.item.html       (revision 88877)
+++ board/html/_generic.item.html       (working copy)
@@ -44,7 +44,12 @@
 
 </form>
 
-<tal:block tal:condition="context/id" tal:replace="structure context/history" 
/>
+<tal:block tal:condition="context/id"
+    tal:define="limit python:[10, 
None][request.form.has_key('show_all_history')]"
+    tal:replace="structure python:context.history(limit=limit)" />
+<p tal:condition="not:exists:request/form/show_all_history" 
i18n:translate="">Showing 10 items.
+<a tal:attributes="href 
string:${context/_classname}${context/id}?show_all_history=yes">Show all 
history</a>
+(warning: this could be VERY long)</p>
 
 </div>
 
Index: board/schema.py
===================================================================
--- board/schema.py     (revision 88877)
+++ board/schema.py     (working copy)
@@ -80,6 +80,8 @@
              roles=String(),     # comma-separated string of Role names
              timezone=String())
 user.setkey("username")
+db.security.addPermission(name='Register', klass='user',
+                          description='User is allowed to register new user')
 
 # FileClass automatically gets this property in addition to the Class ones:
 #   content = String()    [saved to disk in <tracker home>/db/files/]
@@ -287,6 +289,9 @@
     description="User is allowed to view their own and public queries")
 for r in 'User', 'Board', 'Coordinator':
     db.security.addPermissionToRole(r, p)
+p = db.security.addPermission(name='Search', klass='query')
+for r in 'User', 'Board', '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")
 for r in 'User', 'Board', 'Coordinator':
@@ -315,7 +320,7 @@
 # Assign the appropriate permissions to the anonymous user's Anonymous
 # Role. Choices here are:
 # - Allow anonymous users to register
-#db.security.addPermissionToRole('Anonymous', 'Create', 'user')
+#db.security.addPermissionToRole('Anonymous', 'Register', 'user')
 
 # Allow anonymous users access to view issues (and the related, linked
 # information).
Index: security/html/style.css
===================================================================
--- security/html/style.css     (revision 88877)
+++ security/html/style.css     (working copy)
@@ -33,13 +33,6 @@
     #searchbox { display: none;}
 }
 
-#searchbox { float: right;}
-
-div#body-title {
-  float: left;
-}
-
-
 div#searchbox 
 {
   float: right;
@@ -456,7 +449,18 @@
   background-color: #ffffc0;
 }
 
+.calendar_display {
+  text-align: center;
+}
 
+.calendar_display td {
+  padding: 1px 4px 1px 4px;
+}
+
+.calendar_display .today {
+  background-color: #afafaf;
+}
+
 #demowarning {
    position: absolute;
    top: 10px;
Index: security/html/page.html
===================================================================
--- security/html/page.html     (revision 88877)
+++ security/html/page.html     (working copy)
@@ -130,7 +130,7 @@
        </li>
        <li>
        <a href="user?@template=register"
-          tal:condition="python:request.user.hasPermission('Create', 'user')"
+          tal:condition="python:request.user.hasPermission('Register', 'user')"
           i18n:translate="">Register</a>
        </li>
        <li><a href="user?@template=forgotten" 
i18n:translate="">Lost&nbsp;your&nbsp;login?</a>
@@ -283,7 +283,7 @@
   <input tal:attributes="value python:request.form.getvalue(name) or nothing;
                          name name;
                          id name"/>
-  <span tal:replace="structure python:db.issue.classhelp(columns,
+  <span tal:replace="structure python:db[db_klass].classhelp(columns,
                                       property=name)" />
 </td>
 
@@ -299,6 +299,22 @@
   </select>
 </td>
 
+<td metal:define-macro="search_select_keywords">
+  <div tal:attributes="id python:'''keywords_%s'''%name">
+    <select tal:attributes="name name; id name"
+            tal:define="value python:request.form.getvalue(name)">
+      <option value="" i18n:translate="">don't care</option>
+      <metal:slot define-slot="extra_options" />
+      <option value="" i18n:translate="" 
disabled="disabled">------------</option>
+      <option tal:repeat="s python:db[db_klass].list()"
+              tal:attributes="value s/id; selected python:value == s.id"
+              tal:content="python:s[db_content]"></option>
+    </select>
+    <a class="classhelp"
+          tal:attributes="href 
python:'''javascript:help_window('issue?@template=keywords_expr&property=%s&form=itemSynopsis',
 350, 200)'''%name">(expr)</a>
+  </div>
+</td>
+
 <!-- like search_select, but translates the further values.
 Could extend it (METAL 1.1 attribute "extend-macro")
 -->
Index: security/html/_generic.index.html
===================================================================
--- security/html/_generic.index.html   (revision 88877)
+++ security/html/_generic.index.html   (working copy)
@@ -37,7 +37,8 @@
 
 <p class="form-help">
  Remove entries by deleting their line. Add new entries by appending
- them to the table - put an X in the id column.
+ them to the table - put an X in the id column. If you wish to restore a
+ removed item and you know its id then just put that id in the id column.
 </p>
 </tal:block>
 <form onSubmit="return submit_once()" method="POST"
Index: security/html/issue.search.html
===================================================================
--- security/html/issue.search.html     (revision 88877)
+++ security/html/issue.search.html     (working copy)
@@ -12,10 +12,10 @@
    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';
+   sort_on python:(sort_on and sort_on[1]) or (not request.nodeid and 
'activity') or '';
    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';
+   group_on python:(group_on and group_on[1]) or (not request.nodeid and 
'priority') or '';
 
    search_input templates/page/macros/search_input;
    search_date templates/page/macros/search_date;
@@ -23,6 +23,7 @@
    sort_input templates/page/macros/sort_input;
    group_input templates/page/macros/group_input;
    search_select templates/page/macros/search_select;
+   search_select_keywords templates/page/macros/search_select_keywords;
    search_select_translated templates/page/macros/search_select_translated;
    search_multiselect templates/page/macros/search_multiselect;">
 
@@ -191,7 +192,7 @@
                 db_klass string:keyword;
                 db_content string:name;">
   <th i18n:translate="">Keyword:</th>
-  <td metal:use-macro="search_select_translated">
+  <td metal:use-macro="search_select_keywords">
     <option metal:fill-slot="extra_options" value="-1" i18n:translate=""
             tal:attributes="selected python:value == '-1'">not set</option>
   </td>
@@ -244,8 +245,8 @@
  <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="" tal:attributes="checked 
python:sort_on == ''" /></td>
+ <td><input type="radio" name="@group" value="" tal:attributes="checked 
python:group_on == ''" /></td>
 </tr>
 
 <tr>
Index: security/html/_generic.item.html
===================================================================
--- security/html/_generic.item.html    (revision 88877)
+++ security/html/_generic.item.html    (working copy)
@@ -44,7 +44,12 @@
 
 </form>
 
-<tal:block tal:condition="context/id" tal:replace="structure context/history" 
/>
+<tal:block tal:condition="context/id"
+    tal:define="limit python:[10, 
None][request.form.has_key('show_all_history')]"
+    tal:replace="structure python:context.history(limit=limit)" />
+<p tal:condition="not:exists:request/form/show_all_history" 
i18n:translate="">Showing 10 items.
+<a tal:attributes="href 
string:${context/_classname}${context/id}?show_all_history=yes">Show all 
history</a>
+(warning: this could be VERY long)</p>
 
 </div>
 
Index: security/schema.py
===================================================================
--- security/schema.py  (revision 88877)
+++ security/schema.py  (working copy)
@@ -87,6 +87,8 @@
              roles=String(),     # comma-separated string of Role names
              timezone=String())
 user.setkey("username")
+db.security.addPermission(name='Register', klass='user',
+                          description='User is allowed to register new user')
 
 # FileClass automatically gets this property in addition to the Class ones:
 #   content = String()    [saved to disk in <tracker home>/db/files/]
@@ -299,6 +301,9 @@
     description="User is allowed to view their own and public queries")
 for r in 'User', 'Developer', 'Coordinator':
     db.security.addPermissionToRole(r, p)
+p = db.security.addPermission(name='Search', klass='query')
+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")
 for r in 'User', 'Developer', 'Coordinator':
@@ -327,7 +332,7 @@
 # Assign the appropriate permissions to the anonymous user's Anonymous
 # Role. Choices here are:
 # - Allow anonymous users to register
-#db.security.addPermissionToRole('Anonymous', 'Create', 'user')
+#db.security.addPermissionToRole('Anonymous', 'Register', 'user')
 
 # Allow anonymous users access to view issues (and the related, linked
 # information).
Index: jython/html/style.css
===================================================================
--- jython/html/style.css       (revision 88877)
+++ jython/html/style.css       (working copy)
@@ -33,13 +33,6 @@
     #searchbox { display: none;}
 }
 
-#searchbox { float: right;}
-
-div#body-title {
-  float: left;
-}
-
-
 div#searchbox 
 {
   float: right;
@@ -453,7 +446,18 @@
   background-color: #ffffc0;
 }
 
+.calendar_display {
+  text-align: center;
+}
 
+.calendar_display td {
+  padding: 1px 4px 1px 4px;
+}
+
+.calendar_display .today {
+  background-color: #afafaf;
+}
+
 #demowarning {
    position: absolute;
    top: 10px;
Index: jython/html/page.html
===================================================================
--- jython/html/page.html       (revision 88877)
+++ jython/html/page.html       (working copy)
@@ -349,7 +349,7 @@
     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; id name" />
-  <span tal:replace="structure python:db.issue.classhelp(columns, 
property=name)" />
+  <span tal:replace="structure python:db[db_klass].classhelp(columns, 
property=name)" />
 </td>
 <td metal:define-macro="search_select">
   <select tal:attributes="name name; id name"
@@ -363,6 +363,21 @@
     tal:content="python:s[db_content]"></option>
   </select>
 </td>
+<td metal:define-macro="search_select_keywords">
+  <div tal:attributes="id python:'''keywords_%s'''%name">
+    <select tal:attributes="name name; id name"
+            tal:define="value python:request.form.getvalue(name)">
+      <option value="" i18n:translate="">don't care</option>
+      <metal:slot define-slot="extra_options" />
+      <option value="" i18n:translate="" 
disabled="disabled">------------</option>
+      <option tal:repeat="s python:db[db_klass].list()"
+              tal:attributes="value s/id; selected python:value == s.id"
+              tal:content="python:s[db_content]"></option>
+    </select>
+    <a class="classhelp"
+      tal:attributes="href 
python:'''javascript:help_window('issue?@template=keywords_expr&property=%s&form=itemSynopsis',
 350, 200)'''%name">(expr)</a>
+  </div>
+</td>
 <!-- like search_select, but translates the further values.
 Could extend it (METAL 1.1 attribute "extend-macro")
 -->
Index: jython/html/_generic.index.html
===================================================================
--- jython/html/_generic.index.html     (revision 88877)
+++ jython/html/_generic.index.html     (working copy)
@@ -37,7 +37,8 @@
 
 <p class="form-help">
  Remove entries by deleting their line. Add new entries by appending
- them to the table - put an X in the id column.
+ them to the table - put an X in the id column. If you wish to restore a
+ removed item and you know its id then just put that id in the id column.
 </p>
 </tal:block>
 <form onSubmit="return submit_once()" method="POST"
Index: jython/html/issue.search.html
===================================================================
--- jython/html/issue.search.html       (revision 88877)
+++ jython/html/issue.search.html       (working copy)
@@ -12,10 +12,10 @@
    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';
+   sort_on python:(sort_on and sort_on[1]) or (not request.nodeid and 
'activity') or '';
    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';
+   group_on python:(group_on and group_on[1]) or (not request.nodeid and 
'priority') or '';
 
    search_input templates/page/macros/search_input;
    search_date templates/page/macros/search_date;
@@ -23,6 +23,7 @@
    sort_input templates/page/macros/sort_input;
    group_input templates/page/macros/group_input;
    search_select templates/page/macros/search_select;
+   search_select_keywords templates/page/macros/search_select_keywords;
    search_select_translated templates/page/macros/search_select_translated;
    search_multiselect templates/page/macros/search_multiselect;">
 
@@ -191,9 +192,9 @@
                 db_klass string:keyword;
                 db_content string:name;">
   <th i18n:translate="">Keyword:</th>
-  <td metal:use-macro="search_select_translated">
+  <td metal:use-macro="search_select_keywords">
     <option metal:fill-slot="extra_options" value="-1" i18n:translate=""
-            tal:attributes="selected python:value == '-1'">not set</option>
+            tal:attributes="selected python:value == '-1'">not 
selected</option>
   </td>
   <td metal:use-macro="column_input"></td>
   <td metal:use-macro="sort_input"></td>
@@ -244,8 +245,8 @@
  <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="" tal:attributes="checked 
python:sort_on == ''" /></td>
+ <td><input type="radio" name="@group" value="" tal:attributes="checked 
python:group_on == ''" /></td>
 </tr>
 
 <tr>
Index: jython/html/_generic.item.html
===================================================================
--- jython/html/_generic.item.html      (revision 88877)
+++ jython/html/_generic.item.html      (working copy)
@@ -44,7 +44,12 @@
 
 </form>
 
-<tal:block tal:condition="context/id" tal:replace="structure context/history" 
/>
+<tal:block tal:condition="context/id"
+    tal:define="limit python:[10, 
None][request.form.has_key('show_all_history')]"
+    tal:replace="structure python:context.history(limit=limit)" />
+<p tal:condition="not:exists:request/form/show_all_history" 
i18n:translate="">Showing 10 items.
+<a tal:attributes="href 
string:${context/_classname}${context/id}?show_all_history=yes">Show all 
history</a>
+(warning: this could be VERY long)</p>
 
 </div>
 
Index: jobs/html/style.css
===================================================================
--- jobs/html/style.css (revision 88877)
+++ jobs/html/style.css (working copy)
@@ -33,13 +33,6 @@
     #searchbox { display: none;}
 }
 
-#searchbox { float: right;}
-
-div#body-title {
-  float: left;
-}
-
-
 div#searchbox 
 {
   float: right;
@@ -452,7 +445,18 @@
   background-color: #ffffc0;
 }
 
+.calendar_display {
+  text-align: center;
+}
 
+.calendar_display td {
+  padding: 1px 4px 1px 4px;
+}
+
+.calendar_display .today {
+  background-color: #afafaf;
+}
+
 #demowarning {
    position: absolute;
    top: 10px;
Index: jobs/html/page.html
===================================================================
--- jobs/html/page.html (revision 88877)
+++ jobs/html/page.html (working copy)
@@ -272,7 +272,7 @@
   <input tal:attributes="value python:request.form.getvalue(name) or nothing;
                          name name;
                          id name"/>
-  <span tal:replace="structure python:db.offer.classhelp(columns,
+  <span tal:replace="structure python:db[db_klass].classhelp(columns,
                                       property=name)" />
 </td>
 
@@ -288,6 +288,22 @@
   </select>
 </td>
 
+<td metal:define-macro="search_select_keywords">
+  <div tal:attributes="id python:'''keywords_%s'''%name">
+    <select tal:attributes="name name; id name"
+            tal:define="value python:request.form.getvalue(name)">
+      <option value="" i18n:translate="">don't care</option>
+      <metal:slot define-slot="extra_options" />
+      <option value="" i18n:translate="" 
disabled="disabled">------------</option>
+      <option tal:repeat="s python:db[db_klass].list()"
+              tal:attributes="value s/id; selected python:value == s.id"
+              tal:content="python:s[db_content]"></option>
+    </select>
+    <a class="classhelp"
+          tal:attributes="href 
python:'''javascript:help_window('issue?@template=keywords_expr&property=%s&form=itemSynopsis',
 350, 200)'''%name">(expr)</a>
+  </div>
+</td>
+
 <!-- like search_select, but translates the further values.
 Could extend it (METAL 1.1 attribute "extend-macro")
 -->
Index: jobs/html/_generic.index.html
===================================================================
--- jobs/html/_generic.index.html       (revision 88877)
+++ jobs/html/_generic.index.html       (working copy)
@@ -37,7 +37,8 @@
 
 <p class="form-help">
  Remove entries by deleting their line. Add new entries by appending
- them to the table - put an X in the id column.
+ them to the table - put an X in the id column. If you wish to restore a
+ removed item and you know its id then just put that id in the id column.
 </p>
 </tal:block>
 <form onSubmit="return submit_once()" method="POST"
Index: jobs/html/offer.search.html
===================================================================
--- jobs/html/offer.search.html (revision 88877)
+++ jobs/html/offer.search.html (working copy)
@@ -12,10 +12,10 @@
    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';
+   sort_on python:(sort_on and sort_on[1]) or (not request.nodeid and 
'activity') or '';
    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 'status';
+   group_on python:(group_on and group_on[1]) or (not request.nodeid and 
'priority') or '';
 
    search_input templates/page/macros/search_input;
    search_date templates/page/macros/search_date;
@@ -156,8 +156,8 @@
  <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="" tal:attributes="checked 
python:sort_on == ''" /></td>
+ <td><input type="radio" name="@group" value="" tal:attributes="checked 
python:group_on == ''" /></td>
 </tr>
 
 <tr>
Index: jobs/html/_generic.item.html
===================================================================
--- jobs/html/_generic.item.html        (revision 88877)
+++ jobs/html/_generic.item.html        (working copy)
@@ -44,7 +44,12 @@
 
 </form>
 
-<tal:block tal:condition="context/id" tal:replace="structure context/history" 
/>
+<tal:block tal:condition="context/id"
+    tal:define="limit python:[10, 
None][request.form.has_key('show_all_history')]"
+    tal:replace="structure python:context.history(limit=limit)" />
+<p tal:condition="not:exists:request/form/show_all_history" 
i18n:translate="">Showing 10 items.
+<a tal:attributes="href 
string:${context/_classname}${context/id}?show_all_history=yes">Show all 
history</a>
+(warning: this could be VERY long)</p>
 
 </div>
 
_______________________________________________
Tracker-discuss mailing list
Tracker-discuss@python.org
http://mail.python.org/mailman/listinfo/tracker-discuss

Reply via email to