|
1
2
3
4
|
|
Editor: page
Time: 2007/09/11 16:34:08 GMT-7
|
Note:
|
changed:
-
<dtml-call "RESPONSE.setHeader('Content-Type','text/html; charset=utf-8')">
<dtml-let
scrollto="'' #'#tracker'"
issueCount=issueCount
sort_order="REQUEST.get('sort_order','')"
sort_on="REQUEST.get('sort_on','lastEditTime')"
searchexpr="REQUEST.get('textortitle','')"
category="REQUEST.get('category',[])"
status="REQUEST.get('status',[])"
severity="REQUEST.get('severity',[])"
num="_.int(REQUEST.get('num',99999))"
recentnum="30"
recentlisting="'?sort_on=lastEditTime&sort_order=reverse&num=%s'%recentnum"
>
<!-- issue search form ------------------------- -->
<a name="tracker"></a>
<form action="&dtml-URL;" method="GET">
<table border="0" cellspacing="1" cellpadding="0" width="100%">
<tr>
<td valign="top">
<!-- CUSTOM TEXT -->
<dtml-translate domain=zwiki><h2>Bug reports and other issues.</h2>
<p>Please identify yourself and provide an email address using
<a href="http://page.axiom-developer.org/zope/mathaction/UserOptions">preferences</a>
before editing or adding a new issue.</dtml-translate></p>
<!-- END OF CUSTOM TEXT -->
<dtml-translate domain=zwiki>Enter a search term, or click the numbers to the right, or</dtml-translate>
<a href="&dtml-filterUrl;"><dtml-translate domain=zwiki>filter issues</dtml-translate></a>.
<br />
<b>
<input type="text" name="textortitle" size="20" maxlength="100"
value="&dtml-searchexpr;"
class="formfield" style="font-weight:bold" accesskey="s"
title="search issue pages"
/><input type="submit" value="<dtml-translate domain=zwiki>search issues</dtml-translate>"
style="font-weight:bold" title="search issue pages" />
</b><br /><br />
<a href="#addissue"><b><dtml-translate domain=zwiki>Add a new issue</dtml-translate></b></a>
</td>
<td valign="top" class="">
<span style="font-size:100%;">
<table border="0" cellspacing="2" cellpadding="0">
<dtml-let bold="num==recentnum or not QUERY_STRING">
<tr>
<td align="right">
<dtml-var "bold and '<b>' or ''">
<a href="&dtml-URL;&dtml-recentlisting;&dtml-scrollto;"
>&dtml-recentnum;</a>
<dtml-var "bold and '</b>' or ''">
</td>
<td align="left" nowrap>
<dtml-var "bold and '<b>' or ''">
<dtml-translate domain=zwiki>recent</dtml-translate>
<dtml-var "bold and '</b>' or ''">
</td>
</tr>
</dtml-let>
<dtml-let bold="QUERY_STRING and not (status or severity or category or searchexpr or (num==recentnum))">
<tr>
<td align="right">
<dtml-var "bold and '<b>' or ''">
<a href="&dtml-URL;?sort_on=id&dtml-scrollto;"
>&dtml-issueCount;</a>
<dtml-var "bold and '</b>' or ''">
</td>
<td align="left" nowrap>
<dtml-var "bold and '<b>' or ''">
<dtml-translate domain=zwiki>all</dtml-translate>
<dtml-var "bold and '</b>' or ''">
</td>
</tr>
</dtml-let>
</table>
</span>
</td>
<td valign="top" class="">
<span style="font-size:100%;">
<table border="0" cellspacing="2" cellpadding="0">
<dtml-in issue_statuses prefix=x>
<dtml-let bold="x_sequence_item in REQUEST.get('status',[])">
<tr>
<td align="right">
<dtml-var "bold and '<b>' or ''">
<a href="&dtml-URL;?status:list=&dtml-x_sequence_item;&sort_on=severity_index&dtml-scrollto;"
><dtml-var "_.len(pages(isIssue=1,status=x_sequence_item))"
></a>
<dtml-var "bold and '</b>' or ''">
</td>
<td align="left" nowrap>
<dtml-var "bold and '<b>' or ''">
&dtml-x_sequence_item;
<dtml-var "bold and '</b>' or ''">
</td>
</tr>
</dtml-let>
</dtml-in>
</table>
</span>
</td>
<td valign="top" class="">
<span style="font-size:100%;">
<table border="0" cellspacing="2" cellpadding="0">
<dtml-in issue_severities prefix=x>
<dtml-let bold="x_sequence_item in REQUEST.get('severity',[])">
<tr>
<td align="right">
<dtml-var "bold and '<b>' or ''">
<a href="&dtml-URL;?severity:list=&dtml-x_sequence_item;&sort_on=status_index&dtml-scrollto;"
><dtml-var "_.len(pages(isIssue=1,severity=x_sequence_item))"
></a>
<dtml-var "bold and '</b>' or ''">
</td>
<td align="left" nowrap>
<dtml-var "bold and '<b>' or ''">
&dtml-x_sequence_item;
<dtml-var "bold and '</b>' or ''">
</td>
</tr>
</dtml-let>
</dtml-in>
</table>
</span>
</td>
<td valign="top" class="">
<span style="font-size:100%;">
<table border="0" cellspacing="2" cellpadding="0">
<dtml-in issue_categories prefix=x>
<dtml-let bold="x_sequence_item in REQUEST.get('category',[])">
<tr>
<td align="right">
<dtml-var "bold and '<b>' or ''">
<a href="&dtml-URL;?category:list=&dtml.url_quote-sequence-item;&sort_on=status_index&dtml-scrollto;"
><dtml-var "_.len(pages(isIssue=1,category=_['sequence-item']))#,status=['open','pending']))"
></a>
<dtml-var "bold and '</b>' or ''">
</td>
<td align="left" nowrap>
<dtml-var "bold and '<b>' or ''">
&dtml-sequence-item;
<dtml-var "bold and '</b>' or ''">
</td>
</tr>
</dtml-let>
</dtml-in>
</table>
</span>
</td>
</tr>
</table>
</form>
<p>
<!-- issue search results ------------------------- -->
<a name="issues"></a>
<dtml-comment>dtml madness</dtml-comment>
<dtml-comment>
Three cases:
- if we have a search term, search for it in title, text and category
(a dumb way, concatenate three searches)
- or, if we have a query string, search and sort according to those
parameters
- otherwise, show a default search (open issues by severity)
</dtml-comment>
<dtml-comment>
Catalog() won't sort on title for some reason; dtml-in will but seems
unreliable. Need to use dtml-in sort when combining multiple catalog
results. Try both at once I guess.
XXX try again ?
</dtml-comment>
<dtml-let
sortonstart="_.string.find(QUERY_STRING,'sort_on')"
sortonend="_.string.find(QUERY_STRING,'&',sortonstart)"
sortonend="(sortonend != -1) and (sortonend+1) or _.len(QUERY_STRING)"
query="(sortonstart == -1) and QUERY_STRING or (QUERY_STRING[:sortonstart]+QUERY_STRING[sortonend:])"
query="query and ('&'+query) or ''"
order="REQUEST.get('sort_order','') and '&sort_order=' or '&sort_order=reverse' #not used"
issues="
(searchexpr and
(pages(isIssue=1, sort_on=sort_on, sort_limit=num, Title=searchexpr) +
pages(isIssue=1, sort_on=sort_on, sort_limit=num, category=searchexpr) +
pages(isIssue=1, sort_on=sort_on, sort_limit=num, text=searchexpr))[:num])
or
(not searchexpr and QUERY_STRING and
pages(isIssue= 1,
sort_on= sort_on,
sort_order=REQUEST.get('sort_order','ascending'),
sort_limit=num,
text= REQUEST.get('textsearch',''),
Title= REQUEST.get('titlesearch',''),
category= REQUEST.get('category',''),
severity= REQUEST.get('severity',''),
status= REQUEST.get('status',''))[:num])
or
(not searchexpr and not QUERY_STRING and
pages(isIssue=1, sort_on='lastEditTime', sort_order='reverse', sort_limit=num)[:recentnum])
"
>
<table border=0 width="100%">
<tr>
<td align=left valign=top>
<dtml-let bold="sort_on=='id'">
<dtml-var "bold and '<b>' or ''">
<a href="&dtml-URL;?sort_on=id&dtml-query;&dtml-scrollto;"><dtml-translate domain=zwiki>name</dtml-translate></a>
<dtml-var "bold and '</b>' or ''">
</dtml-let>
</td>
<td align=left valign=top width="1%">
<dtml-let bold="sort_on=='category_index'">
<dtml-var "bold and '<b>' or ''">
<a href="&dtml-URL;?sort_on=category_index&dtml-query;&dtml-scrollto;"><dtml-translate domain=zwiki>category</dtml-translate></a>
<dtml-var "bold and '</b>' or ''">
</dtml-let>
</td>
<td align=left valign=top width="1%">
<dtml-let bold="sort_on=='severity_index'">
<dtml-var "bold and '<b>' or ''">
<a href="&dtml-URL;?sort_on=severity_index&dtml-query;&dtml-scrollto;"><dtml-translate domain=zwiki>severity</dtml-translate></a>
<dtml-var "bold and '</b>' or ''">
</dtml-let>
</td>
<td align=left valign=top width="1%">
<dtml-let bold="sort_on=='status_index'">
<dtml-var "bold and '<b>' or ''">
<a href="&dtml-URL;?sort_on=status_index&dtml-query;&dtml-scrollto;"><dtml-translate domain=zwiki>status</dtml-translate></a>
<dtml-var "bold and '</b>' or ''">
</dtml-let>
</td>
<td align=left valign=top width="1%">
<dtml-let bold="sort_on=='creation_time'">
<dtml-var "bold and '<b>' or ''">
<a href="&dtml-URL;?sort_on=creation_time&dtml-query;&dtml-scrollto;"><dtml-translate domain=zwiki>age</dtml-translate></a>
<dtml-var "bold and '</b>' or ''">
</dtml-let>
</td>
<td align=left valign=top width="1%">
<dtml-let bold="sort_on=='lastEditTime'">
<dtml-var "bold and '<b>' or ''">
<a href="&dtml-URL;?sort_on=lastEditTime&dtml-query;&sort_order=reverse&dtml-scrollto;"><dtml-translate domain=zwiki>modified</dtml-translate></a>
<dtml-var "bold and '</b>' or ''">
</dtml-let>
</td>
</tr>
<dtml-in issues>
<dtml-try>
<dtml-let
linktitle="'' #getObject().linkTitle()"
bold="0#(status in ('open','pending') and
#severity not in ('wishlist',) and
#page.ageInDays() > 60)"
>
<tr bgcolor="&dtml-issueColour;">
<td align=left valign=top>
<dtml-comment>
<dtml-var "wikilink('['+Title+']')">
</dtml-comment>
<dtml-var "bold and '<b>' or ''"
><a href="&dtml-wiki_url;/&dtml-id;"
title="<dtml-var "'' #page.linkTitle()">">&dtml-Title;</a>
<dtml-var "bold and '</b>' or ''">
</td>
<td align=left valign=top nowrap><dtml-var category></td>
<td align=left valign=top nowrap><dtml-var severity></td>
<td align=left valign=top nowrap>
<dtml-var "bold and '<b>' or ''">
<dtml-var status>
<dtml-var "bold and '</b>' or ''">
</td>
<td align=left valign=top nowrap>
<dtml-var "bold and '<b>' or ''">
<dtml-let
creation_time="_.getattr(_['sequence-item'],'creation_time','')"
creation="_.DateTime(_.getattr(_['sequence-item'],'creation_time','') or 1007105000)"
current="_.DateTime(ZopeTime().strftime('%Y/%m/%d %H:%M:%S'))"
elapsed="current-creation"
hourfactor="0.041666666666666664"
minutefactor="0.00069444444444444447"
secondsfactor="1.1574074074074073e-05"
days="_.int(_.math.floor(elapsed))"
weeks="days / 7"
months="days / 30"
years="days / 365"
hours="_.int(_.math.floor((elapsed-days)/hourfactor))"
minutes="_.int(_.math.floor((elapsed-days-hourfactor*hours)/minutefactor))"
seconds="_.int(_.round((elapsed-days-hourfactor*hours-minutefactor*minutes)/secondsfactor))"
>
<dtml-unless creation_time>></dtml-unless>
<dtml-if years>
<dtml-var years> year<dtml-var "years > 1 and 's' or ''">
<dtml-elif months>
<dtml-var months> month<dtml-var "months > 1 and 's' or ''">
<dtml-elif weeks>
<dtml-var weeks> week<dtml-var "weeks > 1 and 's' or ''">
<dtml-elif days>
<dtml-var days> day<dtml-var "days > 1 and 's' or ''">
<dtml-elif hours>
<dtml-var hours> hour<dtml-var "hours > 1 and 's' or ''">
<dtml-elif minutes>
<dtml-var minutes> minute<dtml-var "minutes > 1 and 's' or ''">
<dtml-else>
<dtml-var seconds> second<dtml-var "seconds > 1 and 's' or ''">
</dtml-if>
</dtml-let>
<dtml-var "bold and '</b>' or ''">
</td>
<td align=left valign=top nowrap>
<dtml-comment>
could call lastEditInterval but would have to wake up objects
</dtml-comment>
<dtml-let
elapsed="ZopeTime() - lastEditTime"
hourfactor="0.041666666666666664"
minutefactor="0.00069444444444444447"
secondsfactor="1.1574074074074073e-05"
days="_.int(_.math.floor(elapsed))"
weeks="days / 7"
months="days / 30"
years="days / 365"
hours="_.int(_.math.floor((elapsed-days)/hourfactor))"
minutes="_.int(_.math.floor((elapsed-days-hourfactor*hours)/minutefactor))"
seconds="_.int(_.round((elapsed-days-hourfactor*hours-minutefactor*minutes)/secondsfactor))"
>
<dtml-if years>
<dtml-var years> year<dtml-var "years > 1 and 's' or ''">
<dtml-elif months>
<dtml-var months> month<dtml-var "months > 1 and 's' or ''">
<dtml-elif weeks>
<dtml-var weeks> week<dtml-var "weeks > 1 and 's' or ''">
<dtml-elif days>
<dtml-var days> day<dtml-var "days > 1 and 's' or ''">
<dtml-elif hours>
<dtml-var hours> hour<dtml-var "hours > 1 and 's' or ''">
<dtml-elif minutes>
<dtml-var minutes> minute<dtml-var "minutes > 1 and 's' or ''">
<dtml-else>
<dtml-var seconds> second<dtml-var "seconds > 1 and 's' or ''">
</dtml-if>
</dtml-let>
</td>
</tr>
</dtml-let>
<dtml-except>
<tr>
<td colspan=6>
&dtml-Title; gave an error, bad catalog entry ?
</td>
</tr>
</dtml-try>
<dtml-else>
<tr>
<td colspan=6> </td>
</tr>
</dtml-in>
</table>
</dtml-let>
<p>
<!-- add issue form ------------------------- -->
<a name="addissue"></a>
<form action="&dtml-URL;" method="POST">
<br /><hr />
<table border="0" cellspacing="1" cellpadding="0" width="90%">
<tr valign="middle">
<td align="right">
<dtml-translate domain=zwiki>Title:</dtml-translate>
</td>
<td>
<b>
<input
type="text" name="newtitle"
value="<dtml-var newtitle missing html_quote>" class="formfield"
size="40" maxlength="200" style="font-weight:bold;width:100%;" />
</b>
</td>
<tr valign="middle">
<td align="right">
<dtml-translate domain=zwiki>Category:</dtml-translate>
</td>
<td nowrap>
<select name="newcategory" class="formfield">
<dtml-in issue_categories>
<option <dtml-var "_['sequence-item'] == 'zwiki: general' and 'SELECTED' or ''">>
&dtml-sequence-item;
</option>
</dtml-in>
</select>
<dtml-translate domain=zwiki>Severity:</dtml-translate><select
name="newseverity" class="formfield">
<dtml-in issue_severities>
<option <dtml-var "_['sequence-item'] == 'normal' and 'SELECTED' or ''">>
&dtml-sequence-item;
</option>
</dtml-in>
</select>
<dtml-translate domain=zwiki>Status:</dtml-translate><select
name="newstatus" class="formfield">
<dtml-in issue_statuses>
<option <dtml-var "_['sequence-item'] == 'open' and 'SELECTED' or ''">>
&dtml-sequence-item;
</option>
</dtml-in>
</select>
</td>
</tr>
<tr valign="top">
<td align="right">
<dtml-translate domain=zwiki>Details:</dtml-translate>
</td>
<td>
<textarea name="newtext" wrap="virtual" rows="10"
class="formfield" style="width:100%"></textarea>
</td>
</tr>
<tr>
<td>
</td>
<td><b><input
name="submit" type="submit"
value="<dtml-translate domain=zwiki>add issue</dtml-translate>"
style="font-weight:bold"></b>
</td>
</tr>
</table>
<input type="hidden" name="submitted" value="1" />
</form>
<!-- add issue form handler ------------------------- -->
<dtml-if "REQUEST.get('submitted',0) and REQUEST.get('newtitle',0)">
<dtml-let
newtitle="_.getattr(REQUEST,'newtitle','')"
newtext="_.getattr(REQUEST,'newtext','')"
newcategory="_.getattr(REQUEST,'newcategory','zwiki: general')"
newseverity="_.getattr(REQUEST,'newseverity','normal')"
newstatus="_.getattr(REQUEST,'newstatus','open')"
>
<dtml-call "createNextIssue(
newtitle,newtext,newcategory,newseverity,newstatus,REQUEST=REQUEST)">
<dtml-call "RESPONSE.redirect(URL+recentlisting+scrollto)">
</dtml-let>
</dtml-if>
</dtml-let>