[zopeorg-checkins] CVS: Products/TrackerBase/forms - ActivityReports.dtml:1.1 HelpComposite.html:1.1 HelpConfiguration.dtml:1.1 HelpIssues.dtml:1.1 HelpItems.dtml:1.1 HelpSupporter.dtml:1.1 HelpTrackerOverview.dtml:1.1 addTrackerForm.dtml:1.1 allIssuesView.dtml:1.1 attachmentsFormRow.dtml:1.1 catalog.dtml:1.1 configActivities.dtml:1.1 configAssignmentsForm.dtml:1.1 configBasicForm.dtml:1.1 configMemberSettings.dtml:1.1 configTraitValuesForm.dtml:1.1 configUpdatesMaint.dtml:1.1 currentStateView.dtml:1.1 date_widget.dtml:1.1 doSetConfig.dtml:1.1 editIssueStatus.dtml:1.1 editStateYikes.dtml:1.1 elementSummaryRows.dtml:1.1 index_html.dtml:1.1 issue-attachments.dtml:1.1 issue-index_html.dtml:1.1 issueAllIssues.dtml:1.1 issueBanner.dtml:1.1 issueCurrentIssues.dtml:1.1 issueHistory.dtml:1.1 issueStatusRows.dtml:1.1 issueSummaryRows.dtml:1.1 item-attachments.dtml:1.1 item-index_html.dtml:1.1 itemBanner.dtml:1.1 itemForm.dtml:1.1 itemIssueView:1.1 itemIssuesIndexView.dtml:1.1 itemSubmitNewIssu!
e.dtml:1.1 itemSummaryRows.dtml:1.1 login.dtml:1.1 relogin.dtml:1.1 searchFormComplex.dtml:1.1 searchFormSimple.dtml:1.1 setIssueState.dtml:1.1 standard_tracker_footer.dtml:1.1 standard_tracker_header.dtml:1.1 submitIssueForm.dtml:1.1
Sidnei da Silva
sidnei at x3ng.com.br
Fri May 30 11:17:58 EDT 2003
Update of /cvs-zopeorg/Products/TrackerBase/forms
In directory cvs.zope.org:/tmp/cvs-serv19195/TrackerBase/forms
Added Files:
ActivityReports.dtml HelpComposite.html HelpConfiguration.dtml
HelpIssues.dtml HelpItems.dtml HelpSupporter.dtml
HelpTrackerOverview.dtml addTrackerForm.dtml
allIssuesView.dtml attachmentsFormRow.dtml catalog.dtml
configActivities.dtml configAssignmentsForm.dtml
configBasicForm.dtml configMemberSettings.dtml
configTraitValuesForm.dtml configUpdatesMaint.dtml
currentStateView.dtml date_widget.dtml doSetConfig.dtml
editIssueStatus.dtml editStateYikes.dtml
elementSummaryRows.dtml index_html.dtml issue-attachments.dtml
issue-index_html.dtml issueAllIssues.dtml issueBanner.dtml
issueCurrentIssues.dtml issueHistory.dtml issueStatusRows.dtml
issueSummaryRows.dtml item-attachments.dtml
item-index_html.dtml itemBanner.dtml itemForm.dtml
itemIssueView itemIssuesIndexView.dtml itemSubmitNewIssue.dtml
itemSummaryRows.dtml login.dtml relogin.dtml
searchFormComplex.dtml searchFormSimple.dtml
setIssueState.dtml standard_tracker_footer.dtml
standard_tracker_header.dtml submitIssueForm.dtml
Log Message:
Adding products needed for migration of NZO
=== Added File Products/TrackerBase/forms/ActivityReports.dtml ===
<dtml-var standard_tracker_header>
<dtml-comment>
A prototype tracker activity report presentation.
</dtml-comment>
<dtml-let set_peers="REQUEST.get('set_peers', this().peers)"
now="ZopeTime()"
peers_data="tracker_peers(this(), peers=set_peers, REQUEST=REQUEST)"
composite_peers="peers_data[1]"
trackers="[this()] + peers_data[0]"
this_relative_url="absolute_url(1)">
<table border=0 cellspacing=0 cellpadding=2>
<tr>
<td align="right">
<dtml-if icon>
<img src="<!--#var SCRIPT_NAME-->/<!--#var icon-->"
alt="<!--#var meta_type-->" border="0">
<dtml-else>
</dtml-if>
</td>
<th align="left" bgcolor="#ccffcc">
<font size=+1>
<dtml-var id> Tracker Activity Reports
</font>
</th>
<th align="right" bgcolor="#ccffcc" NOWRAP>
<dtml-var "'%s, %s %s, %s'
% (now.aDay(), now.aMonth(), now.day(), now.year())">
</th>
</tr>
<tr>
<th align="right"> Site: </th>
<td> <dtml-var BASE0> </td>
<tr>
<th align="right"> For: </th>
<td colspan=2 align="left">
<dtml-var this_relative_url>
- <em><dtml-if title><dtml-var title><dtml-else><dtml-var id></dtml-if>
</em>
</td>
</tr>
<tr>
<th align="right" valign="top"> ... plus: </th>
<td colspan=2>
<a name="peers">
Identify trackers to be included in the report, <em>relative</em> to
<strong><dtml-var BASE0>/</strong>
(e.g. <em><dtml-var this_relative_url></em>)
<form name="doit" action="<!--#var URL-->" method="get">
<textarea name="set_peers:lines" rows=7 cols=60><dtml-in
composite_peers><dtml-var sequence-key> -- <dtml-let
got="_['sequence-item']"
istracker="got[1:] == ()"><dtml-if istracker><dtml-var
"got[0].id"><dtml-if
"got[0].title">: <dtml-var "got[0].title"></dtml-if
><dtml-else><<dtml-var got>></dtml-if>
</dtml-let>
</dtml-in></textarea> </a>
<br> <input type="submit" value="Submit peer changes...">
<input type="reset" value="Reset...">
</form>
</td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td> <hr> </td>
<th align="left" bgcolor="#ccffcc">
<a name="ticketquotas"></a>
Per-Tracker Ticket Quotas </th>
<td align="right" bgcolor="#ccffcc" NOWRAP>
<dtml-var "ZopeTime().aCommon()">
</td>
</tr>
<tr>
<td> </td>
<td colspan=2>
This presents the current status of issues opened within the service
period of the respective trackers.
(See <a href="HelpTrackerOverview#accessmode">here</a> for info
about the different kids of service periods.)
</td>
</tr>
<tr>
<td> </td>
<td align="center" colspan=2>
<table>
<tr><td align="left" NOWRAP>
<dtml-in "[(this_relative_url, 0)] + composite_peers">
<dtml-var BASE0>/<font color="green"><strong><dtml-var
"_['sequence-key']"></strong></font>
<dtml-unless sequence-end>+ <br></dtml-unless>
</dtml-in>
</td></tr>
</table>
<table border=1>
<tr bgcolor="#ffffffcc">
<th align="left"> <em>Tracker</em> </th>
<th> Plan </th>
<th> Active </th>
<th> Resolved </th>
<th> Other<br>Closed </th>
<th> Balance </th>
<th> Allotted </th>
<th> Period </th>
</tr>
<dtml-in "[(id, (this(),))] + composite_peers">
<dtml-let got="_['sequence-item']"
istracker="got[1:] == ()"
tracker="got[0]"
isopen="istracker and (tracker.access_mode == 'open')">
<dtml-if istracker>
<dtml-let dates="quota_stats(tracker, 'period')"
pending="quota_stats(tracker, 'pending')"
accepted="quota_stats(tracker, 'accepted')"
active="pending + accepted"
resolved="quota_stats(tracker, 'resolved')"
rejected="quota_stats(tracker, 'diverted')"
deferred="quota_stats(tracker, 'deferred')"
other="rejected + deferred"
total="(isopen and '-') or
quota_stats(tracker, 'allotted')"
balance="((isopen or (tracker.tickets_max < 0)) and '-')
or (tracker.tickets_max - (resolved + active))">
<tr>
<td align="left"> <dtml-var "tracker.id"> </td>
<td>
<dtml-if "tracker.access_mode == 'dedicated'">
<dtml-var "tracker.support_level" capitalize>
<dtml-else> <em> open </em>
</dtml-if>
</td>
<td align="center"> <dtml-var active> </td>
<td align="center"> <dtml-var resolved> </td>
<td align="center"> <dtml-var other> </td>
<td align="center"> <dtml-var balance> </td>
<td align="center"> <dtml-var total> </td>
<td align="center" NOWRAP>
<dtml-var "dates[0].Date()">
<br> => <dtml-var "dates[1].Date()">
</td>
</tr>
</dtml-let>
</dtml-if>
</dtml-let>
</dtml-in>
<tr>
<td colspan=8>
<font size=-1>
<dl COMPACT>
<dt> <strong>Plan</strong> </dt>
<dd> Support-level plan, one of Bronze, Silver, Gold, or
Platinum for Dedicated trackers, or <em>Open</em> for
Open trackers. </dd>
<dt> <strong>Active</strong> </dt>
<dd> Number of requests currently in Pending or Accepted <a
href="HelpTrackerOverview#stages">stage</a> </dd>
<dt> <strong>Resolved</strong> </dt>
<dd> Number of closed issues that count against a dedicated
tracker's allotment of request tickets - those issue
completed by the <em>resolve</em> supporter action. </dd>
<dt> <strong>Other Closed</strong> </dt>
<dd> Number of other closed issue, which wouldn't count against
a request ticket allotment, ie those closed with the
<em>reject</em>, <em>defer</em>, or <em>divert</em>
actions. </dd>
<dt> <strong>Balance</strong> </dt>
<dd> Number of new tickets available within the allotment,
deducting the number of active and resolved tickets. Not
applicable to open trackers or dedicated trackers with
unlimited ticket allotment. </dd>
<dt> <strong>Period</strong> </dt>
<dd> The specified dates of service for a dedicated tracker, or
the period from a year ago to today for an open one. </dd>
</dl> </font>
</td>
</tr>
</table border=1>
</td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td> <hr> </td>
<th align="left" bgcolor="#ccffcc">
Per-Supporter Ticket Assignments </th>
<td bgcolor="#ccffcc" align="right" NOWRAP>
<dtml-var "ZopeTime().aCommon()">
</td>
</tr>
<tr>
<td> </td>
<td align="center" colspan=2>
<table>
<tr><td align="left" NOWRAP>
<dtml-in "[(this_relative_url, 0)] + composite_peers">
<dtml-var BASE0>/<font color="green"><strong><dtml-var
"_['sequence-key']"></strong></font>
<dtml-unless sequence-end>+ <br></dtml-unless>
</dtml-in>
</td></tr>
</table>
<table border=1>
<tr bgcolor="#ffffcc">
<th> <em>Supporter</em> </th>
<th> Platinum </th>
<th> Gold </th>
<th> Silver </th>
<th> Bronze </th>
<th> <em>None</em> </th>
<th bgcolor="#eeeeee"> Total </th>
</tr>
<dtml-in "supporter_activity_stats(trackers)">
<tr <dtml-if sequence-end> bgcolor="#eeeeee"</dtml-if>>
<td>
<dtml-var sequence-key>
</td>
<dtml-let suprec="_['sequence-item']">
<dtml-in "['platinum', 'gold', 'silver',
'bronze', 'open', 'total']">
<dtml-let rec="suprec[_['sequence-item']]">
<td align="center"
<dtml-if sequence-end> bgcolor="#eeeeee"</dtml-if>>
<dtml-if "rec[0] or rec[1] or rec[2]">
<dtml-var "rec[0] or ''">
, <dtml-var "rec[1] or ''">
, <dtml-var "rec[2] or ''">
<dtml-else> -
</dtml-if>
</td>
</dtml-let>
</dtml-in>
</dtml-let>
</tr>
</dtml-in>
<tr>
<td colspan=7>
<font size=-1>
Each entry indicates the number of <em>Accepted</em> ,
<em>Resolved</em> , and <em>(Other - rejected deferred or
diverted)</em> requests the supporter
has chalked up across the subject trackers and within their
respective periods of service. (See the <a
href="#ticketquotas">Ticket Quotas table</a> for the service
periods).
</font size=-1>
</td>
</tr>
</table border=1>
</td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td> <hr> </td>
<th align="left" bgcolor="#ccffcc">
Active Issues Maturity </th>
<td align="right" bgcolor="#ccffcc" NOWRAP>
<dtml-var "ZopeTime().aCommon()">
</td>
</tr>
<tr>
<td> </td>
<td colspan=2>
This presents the current ages of all incomplete issues
across the collection subject trackers, and then within each tracker
individually.
</td>
</tr>
<dtml-if "_.len(trackers) > 1">
<dtml-in "[trackers] + trackers">
<tr>
<td> </td>
</tr>
<tr>
<td> </td>
<td colspan=2>
<table border=1>
<tr>
<td colspan=10 align="left">
<dtml-if sequence-start>
<dtml-in "[(this_relative_url, 0)] + composite_peers">
<dtml-var BASE0>/<font color="green"><strong><dtml-var
"_['sequence-key']"></strong></font>
<dtml-unless sequence-end> +<br></dtml-unless>
</dtml-in>
<dtml-else>
<dtml-var BASE0>/<font color="green"><strong><dtml-var
"_.getitem('sequence-item').absolute_url(1)">
</font></strong>
</dtml-if>
</td>
</tr>
<dtml-in "issue_maturity_stats(_.getitem('sequence-item'),
['pending', 'accepted', 'deferred'])">
<dtml-if sequence-start>
<tr bgcolor="#ffffcc">
<dtml-elif sequence-end>
<tr bgcolor="#eeeeee">
<dtml-else>
<tr>
</dtml-if>
<dtml-let element="(_['sequence-start'] and 'th')
or 'td'">
<dtml-in sequence-item>
<dtml-if sequence-start>
<th align="left"><dtml-var sequence-item></th>
<dtml-else> <<dtml-var element> align="center">
<dtml-if sequence-item> <dtml-var sequence-item>
<dtml-else sequence-item> - </dtml-if>
</<dtml-var element>>
</dtml-if>
</dtml-in>
</dtml-let>
</tr>
</dtml-in>
</table>
</td>
</tr>
</dtml-in>
</dtml-if>
<tr>
<td> <hr> </td>
</tr>
</table>
</dtml-let>
<dtml-var standard_tracker_footer>
=== Added File Products/TrackerBase/forms/HelpComposite.html === (968/1068 lines abridged)
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<title>Tracker Users Guide</title>
</head>
<body>
<dtml-call "REQUEST.set('future', 1)">
<h2> Tracker Overview </h2>
<p> The Zope Tracker conducts web-based support and development dialogues,
organizing the flow and artifacts of the correspondence. This page presents a
user-oriented overview. </p>
<ul>
<li> <a href="#intro">Introduction</a>
<li> <a href="#issueprocess">The process of tracker issues</a>.
<li> <a href="#elements">Tracker Elements</a>, including
<li> <a href="#interacting">Interacting</a> with a Tracker
<li> <a href="#supporteractions">Tracker Supporter Activities</a>
<li> <a href="#trackerconfig">Tracker Configuration and
Administration</a>
</ul>
<a name="intro">
<h3> Introduction to the Tracker </h3>
</a>
<p> Any number of distinct trackers can be created within a single Zope site.
Each Tracker has its own administrator, with overriding configuration
privileges including, among other things, the ability to designate specific
<em>supporters</em> - tracker staff responsible for satisfying requests - and
the mode by which site users are allowed to submit (<em>request</em>) and
browse existing issues.
<a name="accessmode">
In <em>Open</em> operating mode, trackers admit all Zope site users. In
<em>Dedicated</em> mode, the tracker only admits browsing and requests from
designated users.</a> </p>
<a name="issueprocess">
<h4> The process of tracker issues. </h4>
</a>
<p> Individual tracker dialogues are known as <em>issues</em>. An issue is
basically a container for messages, known as <em>items</em>, between the issue
requester and suporters. When submitting an issue, the requester selects <a
name="traits"><em>traits</em></a> which characterize it. The ranges of traits
are configured by the tracker administrator, tailored for the tracker's
[-=- -=- -=- 968 lines omitted -=- -=- -=-]
<p>
Traits that have many values have a special first entry -
<Invert>. Selecting <Invert> means that the supporter is
disqualified by the selected values, rather than qualified by
them. This makes it easy to disqualify a supporter for just a few
values of some extensive trait.
</p>
</dd>
</p>
<p>
<dt> <a name="members_info"> </a>
<b>Member Info Settings</b>
(<a href="./TrackerPrototype/configMemberSettings">See the
form...</a>)
</dt>
<dd>
<p>
The tracker needs an email address for all issue participants, for
correspondence about the issues. On sites with membership, that
information is already available. Elsewhere, you may need to fill
in this data yourself. The Member Settings form enables the tracker
administrator to specify the email addresses when they assign new
supporters or clients. It is automatically visited on
submission of the <a
href="#values_configuration">Values Configuration</a> form
<em>if</em> there are supporters lacking an email address. Also,
there is a link to this form from that page, which you can use at
any time.
</p>
<p>
On the form, supporter IDs are highlighted with either a green or a
red font - red to alert you to the lack of an email address for
the supporter. The email-lacking supporter entries are also
distinguished with a pair of <code>**</code> asterisks, to make it
easy to search for such entries amid a large collection of users.
</p>
</dd>
</p>
</dl>
<hr>
<address><a href="mailto:klm at digicool.com">Ken Manheimer</a></address>
<!-- Created: Sat Mar 18 15:21:52 Eastern Standard Time 2000 -->
<!-- hhmts start -->
Last modified: Sun Mar 26 13:52:37 EST 2000
<!-- hhmts end -->
</body>
</html>
=== Added File Products/TrackerBase/forms/HelpConfiguration.dtml ===
<dtml-var standard_tracker_header>
<h2> Tracker Configuration Instructions </h2>
<h3> Overview </h3>
<p>
The user creating a tracker get the TrackerOwner, with configuration and
other special privileges. (You can use the Zope management Security
tab/local roles to transfer or share those privileges after the tracker
is created, if necessary.)
</p>
<p>
Tracker configuration is a three-step process. The tracker owner is
brought to it upon creating the tracker, and can reenter it at any time
via the configuration tab (which only the tracker owner sees) at the top
of the main tracker page.
</p>
<a name="details"></a>
<h3> Stage Details </h3>
<ul>
<li> <a href="#basic_configuration">Basic Configuration</a> </li>
<li> <a href="#values_configuration">Values
Configuration</a> </li>
<li> <a href="#assignments_configuration">Assignments Configuration</a>
</li>
<li> Bonus - <a href="#members_info">Members Info</a>
</li>
</ul>
<dl>
<dt> <a name="basic_configuration"> </a>
<b>Basic Configuration</b>
(<a href="./configBasicForm">See the form...</a>)
</dt>
<dd>
<p>
Here is where you set the fundamental tracker operation settings,
and you name the trait categories by which requesters qualify their
issues.
</p>
<ul>
<li> <b>Id</b> - the object management id for the tracker - you can
change it from the management interface of the folder containing
the tracker, not from inside the tracker itself.</li>
<li> <b>Title</b> - A terse descriptive title for the tracker.</li>
<li> <b>Abbreviation</b> - An extremely terse distinctive
abbreviation for the tracker. Email notifications will use this
at the beginning of the message subject lines to identify the
tracker, so as brief as possible while providing some cue is in
order here.</li>
<li> <b>Description</b> - Brief presentation of the tracker's
purpose - this will be displayed at the top of the <a
href="HelpTrackerOverview#issueoverview">issues overview
page</a>.</li>
<li> <b>Admin Address</b> - Where to send email for tracker
administrative business, including notifications gone awry, public
contact, etc. </li>
<li> <b>SMTP Host / Port</b> - The host and inet socket port where
SMTP email for this tracker is dispatched. </li>
<li> <a name="open_vs_dedicated"> <b>Mode</b> </a> -
Trackers operate in <em>open</em> or <em>dedicated</em> access
mode. The access mode determines whether the tracker is open to
all comers or only to designated clients.
<ul>
<li> In an open tracker anyone with site membership can submit
issues, and anyone at all can review existing ones. Open
trackers are convenient for fielding requests in a diverse
community, particularly with community-staffed trackers. </li>
<li> A dedicated tracker is intended to serve specific clients,
so that only they (and tracker staff) can review existing
issues and submit new ones. Dedicated trackers provide
dedicated support to the clients. </li>
</ul> </li>
<li> <a name="trait_fields"><b>Trait Fields</b></a>
- The categories of attributes by requesters qualify their
issues. The ranges of values within each category you designate
are set in the <a href="#values_configuration">Values
Configuration stage</a>. Note that if there's a trait named
"priority", "urgency", "importance", or "need", with values the
same as the trackers priority_range property (as shipped:
"normal", "high", "low", and "critical"), then the value of that
trait will be used to set the issue's initial priority state.
This state is separate from the trait - it has a reserved report
column, showing settings when different than 'normal', and it
will be useful for sorting, once that's implemented.
</ul>
</p>
<p>
<dt> <a name="values_configuration"> </a>
<b>Values Configuration</b>
(<a href="./configTraitValuesForm">See the form...</a>)
</dt>
<dd>
<p>
This is where you enumerate a variety of tracker settings. This
includes special member roles - identifying supporters, and, if the
tracker is running in dedicated mode, clients - and issue trait
values. (From here you can get to a form to specify user account's
email and name settings, as well.)
</p>
<ul>
<li> <b>Supporters</b>
- Identify the users responsible for (and privileged to) handle
issues. If you designate any supporters that do not have an email
address registered for them, you will wind up at the <a
href="#members_info">Member Info Settings form</a>
before proceeding to the next stage, to fill in the addresses.
</li>
<li> <b>Clients and Request Quota</b>
(<a href="#open_vs_dedicated">Dedicated tracker</a> only) -
Designate:
<ul>
<li> Members with privileges to access a dedicated tracker.</li>
<li> Support level - Support policy level. </li>
<li> Allotted number - Total number of requests available to the
customer within the service period. Specify a negative
number for no limit. </li>
<li> Service Start/End - The dates within which the customer's
quota of requests is available. </li>
</ul>
</li>
<li> <b>Traits Elaboration</b> - Here you enumerate the trait values
associated with the traits identifed on the <a
href="#basic_configuration">basic config form</a>. You also set
checkboxes to identify those fields to be used for routing new
issue notifications to supporters - the actual routing choices are
made on the next form. </li>
</ul>
</dd>
</p>
<p>
<dt> <a name="assignments_configuration"> </a>
<b>Supporter Assignments</b>
(<a href="./configAssignmentsForm">See the form...</a>)
</dt>
<dd>
<p>
This is where you associate specific supporters with specific issue
trait values, for new issue notifications. (There is nothing to do
here if you did not check any of the Traits Elaboration text-boxes
in the <a href="#values_configuration">Values Configuration
form</a>.)
</p>
<p>
By assigning specific request trait values to a supporter, that
supporter receives notifications about new issues having those
settings. If no supporters are identified as relevant for a
particular request, the notices for that request are directed to the
tracker administrator.
</p>
<p>
Selecting traits is a way of narrowing the range of issues for which
supporter receives new-request email notices. Not selecting any of
a supporter's values for a particular trait means that trait is
ignored when figuring routing for the supporter. (Thus, its
equivalent to selecting all the values for that trait, and less
work...)
</p>
<p>
Traits that have many values have a special first entry -
<Invert>. Selecting <Invert> means that the supporter is
disqualified by the selected values, rather than qualified by
them. This makes it easy to disqualify a supporter for just a few
values of some extensive trait.
</p>
</dd>
</p>
<p>
<dt> <a name="members_info"> </a>
<b>Member Info Settings</b>
(<a href="./configMemberSettings">See the form...</a>)
</dt>
<dd>
<p>
The tracker needs an email address for all issue participants, for
correspondence about the issues. On sites with membership, that
information is already available. Elsewhere, you may need to fill
in this data yourself. The Member Settings form enables the tracker
administrator to specify the email addresses when they assign new
supporters or clients. It is automatically visited on
submission of the <a
href="#values_configuration">Values Configuration</a> form
<em>if</em> there are supporters lacking an email address. Also,
there is a link to this form from that page, which you can use at
any time.
</p>
<p>
On the form, supporter IDs are highlighted with either a green or a
red font - red to alert you to the lack of an email address for
the supporter. The email-lacking supporter entries are also
distinguished with a pair of <code>**</code> asterisks, to make it
easy to search for such entries amid a large collection of users.
</p>
</dd>
</p>
</dl>
<dtml-var standard_tracker_footer>
=== Added File Products/TrackerBase/forms/HelpIssues.dtml ===
<!--#call "RESPONSE.redirect(URL2 + '/HelpTrackerOverview#trackerissues')"-->
=== Added File Products/TrackerBase/forms/HelpItems.dtml ===
<!--#call "RESPONSE.redirect(URL3 + '/HelpTrackerOverview#issueitems')"-->
=== Added File Products/TrackerBase/forms/HelpSupporter.dtml ===
<dtml-var standard_tracker_header>
<h3> Supporter Actions </h3>
<p> Most supporter actions are done through posting followups to an issue.
The supporter chooses the particular action from among the "Action" radio
buttons on the message submit form. The available choices are tailored to
the visitor's role in the issue - see the table, <a
href="#actiontable">below</a>.
</p>
<p> Among other things, the message action determines whether or not the item
will be included in the issue summary. For regular (non-confidential) issues,
the summary is visible to the general public. It includes synopses of all
those messages whose actions change the <a
href="HelpTrackerOverview#stages">stage</a> of an issue, and also messages
that were submitted with the "Note" action. Other correspondence - the
default action, "Plain" - is not included in the summary, and is just between
the supporters and requester.
</p>
<p> See the topic concerning <a
href="HelpTrackerOverview#involved">issue corresondence</a> for more details
about who receives what correspondence.
</p>
<a name="actiontable">
<table border=1>
<tr>
<th align="left" valign="bottom"> Action </th>
<th align="left" valign="bottom"> From/To Stage </th>
<th align="left" valign="bottom"> Who? <a href="#who">*</a> </th>
<th align="left" valign="bottom"> To Summary? </th>
<th align="left" valign="bottom"> Purpose / Notes </th>
</tr>
<tr>
<th> <p> Plain </p> </th>
<td align="center"> <p>Any </p><hr><p> No change </p> </td>
<td align="center"> <p> Involved </p> </td>
<td align="center"> <p> No </p> </td>
<td> <p> Correspond with parties to issue / Not distinguished in
issue summary </p> </td>
</tr>
<tr>
<th> <p> Accept </p> </th>
<td align="center"> <p> <em>Pending</em>, <em>Deferred</em>
</p><hr><p> <em>Accepted</em> </p> </td>
<td align="center"> <p> Staff </p> </td>
<td align="center"> <p> Yes </p> </td>
<td> <p> Claim ownership of an issue /
Other supporters exempted from further issue correspondence </p>
</td>
</tr>
<tr>
<th> <p> Kibitz / Subscribe </p> </th>
<td align="center">
<p> <em>Pending</em>, <em>Deferred</em>, <em>Accepted</em>
</p><hr><p> No change </p> </td>
<td align="center"> <p> Anyone </p> </td>
<td align="center"> <p> No </p> </td>
<td> <p> Join in an issue / Only when not already involved </p> </td>
</tr>
<tr>
<th> <p> Resign </p> </th>
<td align="center"> <p>Any but pending </p><hr><p> No change<p> </td>
<td align="center"> <p> Owners </p> </td>
<td align="center"> <p> No </p> </td>
<td> <p>Abandon ownership of issue you own /
Not offered when not involved or only supporter</p> </td>
</tr>
<tr>
<th> <p> Note </p> </th>
<td align="center"> <p>Any </p><hr><p> No change</p> </td>
<td align="center"> <p> Involved </p> </td>
<td align="center"> <p> Yes </p> </td>
<td> <p> Item for summary that doesn't affect stage </p> </td>
</tr>
<tr>
<th> <p> Resolve </p> </th>
<td align="center"> <p> <em>Accepted</em>, <em>Pending</em> </p><hr><p>
<em>Resolved</em> </p> </td>
<td align="center"> <p> Staff </p> </td>
<td align="center"> <p> Yes </p> </td>
<td> <p> Conclude issue satisfying requester /
If accepted, only owners (acceptor or staff subscribers) can
resolve </p> </td>
</tr>
<tr>
<th> <p> Reject </p> </th>
<td align="center"> <p> <em>Accepted</em>, <em>Pending</em> </p><hr><p>
<em>Rejected</em> </p> </td>
<td align="center"> <p> Staff </p> </td>
<td align="center"> <p> Yes </p> </td>
<td> <p> Dismiss issue without resolution / Same as note as for
resolve </p>
</td>
</tr>
<tr>
<th> <p> Defer </p> </th>
<td align="center"> <p> <em>Accepted</em>, <em>Pending</em> </p><hr><p>
<em>Deferred</em> </p> </td>
<td align="center"> <p> Staff </p> </td>
<td align="center"> <p> Yes </p> </td>
<td> <p> Table this issue until whenever / Same as resolve note </p>
</td>
</tr>
<tr>
<th> <p> Reframe </p> </th>
<td align="center"> <p> Any </p><hr><p> No change </p> </td>
<td align="center"> <p> Staff </p> </td>
<td align="center"> <p> No </p> </td>
<td> <p> Change any of title/description and/or change traits
/ For when the requester wasn't quite clear or accurate </p>
</tr>
<tr>
<th> <p> Divert </p> </th>
<td align="center"> <p>Any </p><hr><p> <em>Diverted</em></p> </td>
<td align="center"> <p> Staff </p> </td>
<td align="center"> <p> Yes </p> </td>
<td> <p> Include the subsuming issue as the first of the references /
Same as resolve note </p> </td>
</tr>
</table>
<font size=-1>(<a name="who">*</a> Who? column is one of: <em>Anyone</em> -
anyone able to visit the issue, <em>Involved</em> - requester or tracker
staff, <em>Owners</em> - supporter(s) who have <em>accepted</em>
responsibility for the issue, <em>Staff</em> - supporters and tracker
owner.)
</font>
</a>
<a name="staffEyes"> </a>
<p> (Occasionally supporters need to send messages that are not exposed the
requester or to the public at large. This is done by checking the "Staff
eyes only?" box (beside the message subject input field). You must also
check the "don't-post-to-summary box, since summary items can't be private.)
</p>
<p> The stage, traits, privacy, and other issue settings can be forced using
the entries on the issue's "Edit State" tab. (Some state transitions may be
inhibited.) The Edit State form is included as part of the <em>Reframe</em>
item action. </p>
<dtml-var standard_tracker_footer>
=== Added File Products/TrackerBase/forms/HelpTrackerOverview.dtml === (631/731 lines abridged)
<dtml-var standard_tracker_header>
<h2> Zope Tracker Overview </h2>
<p> The Zope Tracker conducts web-based support and development dialogues,
organizing the flow and artifacts of the correspondence. This page presents a
general purpose client-oriented overview: </p>
<ul>
<li> <a href="#elements">Tracker Elements</a>, including <a href="#issueprocess">the process of
tracker issues</a>.
<li> <a href="#interacting">Interacting</a> with a Tracker
</ul>
<p> (Tracker administrators may want to visit the <a
href="HelpConfiguration">tracker configuration help</a>, and supporters may be
seeking <a href="HelpSupporter">support-specific help</a>.) </p>
<a name="elements">
<h3> Tracker Elements </h3>
</a>
<p> Any number of distinct trackers can be created within a single Zope site.
Each Tracker has its own administrator, with overriding configuration
privileges including, among other things, the ability to designate specific
<em>supporters</em> - tracker staff responsible for satisfying requests - and
the mode by which site users are allowed to submit (<em>request</em>) and
browse existing issues.
<a name="accessmode">
In <em>Open</em> operating mode, trackers admit all Zope site users. In
<em>Dedicated</em> mode, the tracker only admits browsing and requests from
designated users.</a> </p>
<a name="trackerissues">
<h4> Tracker Issues </h4>
</a>
<p> Individual tracker dialogues are known as <em>issues</em>. An issue is
basically a container for messages between the issue requester and suporters
about the issue, known as <em>items</em>. When submitting an issue, the
requester selects issue <a name="traits"><em>traits</em></a> which
characterize their request. The ranges of traits are configured by the
tracker administrator, tailored for the tracker's subject domain. </p>
<p> See also the discussion about browsing the issue overview page, <a
href="#issueoverview">below</a>. </p>
<a name="issueprocess">
<h4> The process of tracker issues. </h4>
</a>
[-=- -=- -=- 631 lines omitted -=- -=- -=-]
<ul>
<li> Following the links in the email notifications.
<li> Visiting the tracker index, finding the issue in question, and using
the <code>Last Msg</code> shortcut to get to the most recent item.
<li> Visiting the containing issue (eg, from the index) and using the
<code>Most recent message</code> shortcut located on the upper right
corner of the page.
<li> When dealing with other than the most recent item, using the other
links in the issue summary (or the links in the "Other Correspondence"
section, below the summary).
<li> Using the URL - the item's is that of the tracker, followed by a '/' and
the serial number of the issue, then another '/' and the serial number
of the item.
</ul>
<p> When you followup to an item your new message follows the original in its
correspondence thread. You can also start a new thread by using one of the
"Start a New Thread" links, found in the issue summary and in the items. </p>
<p> The forms for submitting new items are similar to those for <a
href="#submitting">submitting new issues</a>, with a few additions: </p>
<ul>
<li> When replying, the title and text of the original item are cited.
<li> Parties to an issue can select actions beyond just sending
correspondence. The choice is made using the Action radio-button
selection on the item form. Requesters have just a few choices:
<dl>
<dt> <code>Plain</code>
<dd> The default action, plain items are not registered in the summary,
hence are not visible to the general public.
<dt> <code>Note</code>
<dd> Note items are included in the summary, along with the landmark
items (see <a href="#issueoverview">above</a>). This action is
useful for posting key developments, like intermediate results.
<dt> <code>Cancel</code> - only until issue is accepted
<dd> The requester can withdraw an issue from consideration up until a
supporter has accepted responsibility for it. After the issue has
been accepted, however, this option is not offered, and the
requester must negotiate with the supporter to reject it.
</dl>
</li>
</ul>
<p> Supporters can invoke several other actions with their issues - they
should consult the <a href="HelpSupporter">support-specific help</a> for
details. </p>
<dtml-var standard_tracker_footer>
=== Added File Products/TrackerBase/forms/addTrackerForm.dtml ===
<!--#var standard_html_header-->
<!--#var manage_tabs-->
<h2>Add A Tracker</h2>
<form action="addTracker" method="POST">
<table border="0">
<tr>
<th align="left" valign="top">Id</th>
<td valign="top"><input type="text" size="40"
name="id"> </td>
</tr>
<tr>
<th align="left" valign="top">Title</th>
<td valign="top"><input type="text" size="40"
name="title"> </td>
</tr>
<tr>
<td> </td>
<td><br>
<input type="submit" value="Add ...">
<font color="gray"> ... three configuration steps remaining ... </font>
</td>
</tr>
</table>
</form>
<!--#var standard_html_footer-->
=== Added File Products/TrackerBase/forms/allIssuesView.dtml ===
<!--#var standard_tracker_header-->
<h2>All <a href="<!--#var "absolute_url()"-->">
<!--#if "title"--><!--#var "title"--><!--#else-->Tracker<!--#/if--></a>
Issues</h2>
<!--#with "_(allvis=elementFilter(seq=values(), visonly=1,
REQUEST=REQUEST))"-->
<center>
<h2> <u><!--#var "_.len(allvis)"-->
Issue<!--#if "_.len(allvis) != 1"-->s<!--#/if--> Total</u>
</h2>
</center>
<!--#if allvis-->
<p> To visit an issue, click on its ID. </p>
<!--#with "_(isr = allvis[0].issueSummaryRows,
elements=allvis)"-->
<table>
<!--#var isr-->
</table>
<!--#/with-->
<!--#else-->
Zero zilch no issues.
<!--#/if-->
<!--#/with-->
<!--#var standard_tracker_footer-->
=== Added File Products/TrackerBase/forms/attachmentsFormRow.dtml ===
<!--#comment-->
Some table rows providing form file input fields.
<!--#/comment-->
<!--#with "_(slots = (_.has_key('slots') and _['slots']) or 1)"-->
<tr>
<th align="right" valign="middle" bgcolor="eeeeee">References:</th>
<td>
<table>
<tr><td>
<textarea name="references:lines" rows=2 cols=30></textarea>
</td>
<td bgcolor="ffffcc">
Include <em>(issue)[item]</em> and/or absolute url
references, one per line (no HTML).
<dtml-if staff> When <em>diverting</em>, include the target
issue as the first reference.</dtml-if>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<th align="right" valign="middle" bgcolor="eeeeee">Attachments: </th>
<td colspan=3>
<table cellspacing=5>
<tr>
<th align="left"> File </th>
<td> </td>
<td>
Title (if different than file name)
</td>
</tr>
<input type=hidden name="slots" value=<!--#var slots-->>
<!--#in "_.range(slots)"-->
<tr>
<td>
<INPUT TYPE="file" SIZE="25" VALUE=""
NAME="file<!--#var sequence-item-->">
</td>
<td> </td>
<td valign="center">
<INPUT TYPE="string" SIZE=20 VALUE="" MAXLENGTH=30
NAME="file<!--#var sequence-item-->title">
</td>
</tr>
<!--#/in-->
</table>
</td>
</tr>
<!--#/with-->
=== Added File Products/TrackerBase/forms/catalog.dtml ===
<dtml-var standard_tracker_header>
Catalog info (see <a href="./configUpdatesMaint">Updates Maintenance</a> for
catalog reassessment):
<ul>
<li> <a href=manage_catalogView>View</a> <p>
<li> <a href=manage_catalogStatus>Status</a> <p>
<li> <a href=manage_catalogFind>Find</a> <p>
<li> <a href=manage_catalogIndexes>Indexes</a> <p>
<li> <a href=manage_catalogSchema>Schema</a> <p>
</ul>
<ul>
<dtml-in index_objects>
<li>
<dtml-var sequence-index html_quote> <dtml-var sequence-item html_quote>:
<dtml-if "_.hasattr(_['sequence-item'], 'uniqueValues')">
<dtml-var uniqueValues html_quote>
<dtml-else>
<dtml-var "_.len(_['sequence-item'])" html_quote>
</dtml-if>
</li>
</dtml-in>
</ul>
<dtml-var standard_tracker_footer>
=== Added File Products/TrackerBase/forms/configActivities.dtml ===
<dtml-var standard_tracker_header>
The configuration activities <a target="Help"
href="HelpConfiguration#config_process">(details)</a> proceed from one
to the next.
<table>
<tr bgcolor="#ffffcc">
<th align="right"> Activity </th>
<th align="left"> Description </th>
<th align="left"> </th>
</tr>
<tr>
<th align="right" valign="top" bgcolor="eeeeee">
<a href="./configBasicForm">Basic Configuration</a>
</th>
<td align="left">
<dtml-if "not _.has_key('did_basic')">
<font color="red"> Pending! </font> <i> Tracker configuration
incomplete until this is finished.</i>
</dtml-if>
Set fundamental tracker operation settings and name the trait
categories by which requesters qualify their issues.
</td>
<td align="left" valign="top">
<a target="Help"
href="./HelpConfiguration#basic_configuration">Help</a>
</td>
</tr>
<tr>
<th align="right" valign="top" bgcolor="eeeeee">
<a href="./configTraitValuesForm">Traits and Supporters</a>
</th>
<td align="left" valign="top">
<dtml-if "not _.has_key('did_traitvalues')">
<font color="red"> Pending! </font> <i> Tracker configuration
incomplete until this is finished.</i>
</dtml-if>
Enumerate values of a variety of tracker settings, including
designating the supporters and specifying the ranges of issue trait
values.
</td>
<td align="left" valign="top">
<a target="Help"
href="./HelpConfiguration#values_configuration">Help</a>
</td>
</tr>
<tr>
<th align="right" valign="top" bgcolor="eeeeee">
<a href="./configAssignmentsForm">Request Routing Assignments</a>
</th>
<td align="left">
Associate specific supporters with specific issue trait values, for
new issue notifications. (There is nothing to do here if none of
the traits were selected for notification routing in the
<a href="./configTraitValuesForm">Traits and Supporters</a>
activity.)
</td>
<td align="left" valign="top">
<a target="Help"
href="./HelpConfiguration#assignments_configuration">Help</a>
</td>
</tr>
<tr>
<th align="center" valign="top" COLSPAN=3>
<font size="-1"> Other </font>
</th>
</tr>
<tr>
<th align="right" valign="top" bgcolor="eeeeee">
<font size="-1">
<a href="./configMemberSettings">Member Settings</a>
</font>
</th>
<td align="left" valign="top">
<font size="-1">
Adjust tracker personnel (supporter and requester) email and
fullname settings.
</font>
</td>
</tr>
<tr>
<th align="right" valign="top" bgcolor="eeeeee">
<font size="-1">
<a href="./configUpdatesMaint">Updates Maintenance</a>
</font>
</th>
<td align="left" valign="top">
<font size="-1">
Adjust tracker issue indexes and other structural assessments, in
the face of upgrades or unexpected drift.
</font>
</td>
</tr>
<tr>
<th align="right" valign="top" bgcolor="eeeeee">
<font size="-1">
<a href="./catalog">Catalog Management</a>
</font>
</th>
<td align="left" valign="top">
<font size="-1">
Assess and interact with tracker's catalog structure.
</font>
</td>
</tr>
</font>
</table>
<dtml-var standard_tracker_footer>
=== Added File Products/TrackerBase/forms/configAssignmentsForm.dtml ===
<!--#var standard_tracker_header-->
<h2><!--#var elementEmblem--> Category/Supporter Assignments</h2>
<p> Assign specific request trait values to each supporter. The
supporter will receive notifications about new issues that have those
settings. <em>If no supporters are identified as relevant for a
particular request, the notices for that request are directed to the
tracker administrator.</em>
</p>
<!--#if "not pickers or not supporters"-->
<p>
<!--#if "not pickers and not supporters"-->
<em>No traits or supporters selected for assignment.</em>
<!--#elif "not pickers"-->
<em>No traits selected for assignment. All supporters will receive
all new-request notices.</em>
<!--#else-->
<em>No supporters selected for assignment. The tracker admin will
receive all requests.</em>
<!--#/if-->
</p>
<p>
If this is not what you intended, you can return to the
<a href="configBasicForm">Basic Configuration form</a> or the
<a href="configTraitValuesForm">Trait/Values form</a> and check the
boxes of the traits you want to use. Otherwise, you can just
<a href="./">proceed to the configured tracker</a>.
</p>
<!--#else-->
<p>
Selecting traits is a way of narrowing the range of issues for which
supporter receives new-request email notices. Not selecting any of a
supporter's values for a particular trait means the supporter's
relevance for receiving notices disregards that trait. Furthermore, not
selecting any values for any of a supporter's traits means that
supporter will receive notices for all new requests.
</p>
<!--#if "pickers.has_key(' __requesters')"-->
<p>
Traits that have many values have a special first entry -
<em><Invert></em>. Selecting <em><Invert></em> means that
the supporter is <em>disqualified</em> by the selected values, rather
than qualified by them. This makes it easy to disqualify a supporter
for just a few values of some extensive trait.
</p>
<!--#/if-->
<p>
For more details on the tracker configuration process in general, see
<a target="Help" href="HelpConfiguration"> here </a>.
See <a target="Help" href="HelpConfiguration#assignments_configuration">
here </a> for some more explanation of this configuration stage.
</p>
<form action="setTrackerConfig" method="POST">
<input type="hidden" name="nextpage" value=".">
<input type="hidden" name="config_form" value="assignments">
<table cellspacing=5>
<tr bgcolor="#ffffcc">
<th align="center"> Who </th>
<!--#if "pickers.has_key(' __requesters')"-->
<th> Requesters </th>
<!--#/if-->
<!--#in traits-->
<!--#if "pickers.has_key(_['sequence-item'])"-->
<th> <strong><!--#var sequence-item capitalize--></strong> </th>
<!--#/if "pickers.has_key(val_nm)"-->
<!--#/in-->
</tr>
<!--#in supporters-->
<!--#with "_(supporter = _['sequence-item'],
supasgn = assignments[_['sequence-item']])"-->
<tr>
<th> <!--#var supporter capitalize--> </th>
<!--#if "pickers.has_key(' __requesters')"-->
<td align="center">
<!--#with "_(inverted = (supasgn.has_key(' __requesters')
and (() in supasgn[' __requesters'])))"-->
<select name="<!--#var supporter-->__ __requesters:list"
multiple
size=<!--#if "(_.len(members) >= 7)
or inverted"--> 4 <!--#else--> 3 <!--#/if-->>
<dtml-let members="findAllMemberNames()">
<!--#if "(_.len(members) >= 7) or inverted"-->
<option value=" __INVERT"
<!--#if "supasgn.has_key(' __requesters')
and (() in supasgn[' __requesters'])"-->
SELECTED<!--#/if-->> <Invert> </option>
<!--#/if-->
<!--#in members-->
<!--#with "_(member = _['sequence-item'])"-->
<option <!--#if "inverted"-->
SELECTED<!--#/if-->> <!--#var member--></option>
<!--#/with-->
<!--#/in-->
</dtml-let>
<!--#/with-->
</select>
</td>
</td>
<!--#/if-->
<!--#in traits-->
<!--#with "_(val_nm = _['sequence-item'])"-->
<!--#if "pickers.has_key(val_nm)"-->
<!--#with "_(vals = traitsStruct[val_nm+'_range'][1],
assigned = supasgn.get(val_nm, []))"-->
<td align="center">
<select
name="<!--#var supporter-->__<!--#var val_nm-->:list"
multiple
size=<!--#if "(_.len(vals) >= 7)
or (() in assigned)"-->4
<!--#else-->3<!--#/if-->>
<!--#if "(_.len(vals) >= 7) or (() in assigned)"-->
<option value=" __INVERT"
<!--#if "() in assigned"-->
SELECTED<!--#/if-->> <Invert> </option>
<!--#/if-->
<!--#in vals-->
<option <!--#if "_['sequence-item'] in assigned"
-->SELECTED<!--#/if--> >
<!--#var sequence-item--> </option>
<!--#/in--> </select>
</td>
<!--#/with-->
<!--#/if-->
<!--#/with-->
<!--#/in-->
</tr>
<!--#/with-->
<!--#/in-->
<tr>
<td valign="top"><hr></td>
<td colspan=20 bgcolor="#ffffcc"> </td>
</tr>
<tr>
<td> </td>
<td colspan=5> <input type="SUBMIT" value="Submit Assignments">
<input type=reset value=" Reset ">
<br> Submit proceeds to main page.
<br> Prior config step:
<a href="./configTraitValuesForm">Traits and Members</a>
<br> Before that: <a href="./configBasicForm">Basic</a>
</font>
</td>
</tr>
</table>
</form>
<!--#/if-->
<!--#var standard_tracker_footer-->
=== Added File Products/TrackerBase/forms/configBasicForm.dtml ===
<!--#var standard_tracker_header-->
<form action="setTrackerConfig" method="POST">
<input type="hidden" name="config_form" value="basic">
<input type="hidden" name="nextpage" value="configTraitValuesForm">
<p>This begins a three-step
<a target="Help" href="HelpConfiguration#config_process">
tracker configuration process </a>, with fundamental tracker
identity attributes and naming of characteristic request traits.
See <a target="Help"
href="HelpConfiguration#values_configuration">here</a> for
details on this stage.
</p>
<table>
<tr>
<td valign="top"><hr></td>
<th colspan=3 bgcolor="#ffffcc"> Identity </th>
</tr>
<tr>
<th align="right" valign="middle">Id:</th>
<td valign="middle"> <strong><!--#var id--></strong> </td>
</tr>
<tr>
<th align="right" valign="middle">Title:</th>
<td valign="middle">
<input type="text" size="40" name="title:text"
value="<!--#var title-->">
</td>
</tr>
<tr>
<th align="right" valign="middle">Abbreviation:</th>
<td valign="middle">
<input type="text" size="4" name="abbrev:text"
value="<!--#var abbrev-->"> (Very brief - to distinguish email
subjects among trackers on this host.)
</td>
</tr>
<tr>
<th align="right" valign="top">Description:</th>
<td valign="top">
<textarea name="description:text"
rows=3 cols=50
><dtml-if description><dtml-var description></dtml-if></textarea>
</td>
</tr>
<tr>
<td valign="top"><hr></td>
<th colspan=3 bgcolor="#ffffcc"> Email Connection </th>
</tr>
<tr>
<dtml-let user="REQUEST.AUTHENTICATED_USER"
email="(_.hasattr(user, 'email') and user.email) or ''">
<th align="right" valign="middle"> Admin Address: </th>
<td valign="middle"><input type="string" size="30"
name="adminaddr"
value=<!--#if adminaddr--><!--#var adminaddr--><!--#else
--><dtml-var email><!--#/if-->>
</dtml-let>
</td>
</tr>
<tr>
<th align="right" valign="middle"> SMTP Host: </th>
<td valign="middle"><input type="text" size="30"
name="smtphost"
value=<!--#if smtphost--><!--#var smtphost--><!--#/if-->>
<strong> Port: </strong>
<input type="text" size="3" name="smtpport:int"
value=<!--#if smtpport--><!--#var smtpport--><!--#else
--> 25 <!--#/if-->>
</td>
</tr>
<tr>
<td valign="top"><hr></td>
<th colspan=3 bgcolor="#ffffcc"> Open vs Dedicated Mode </th>
</tr>
<tr>
<td> </td>
<td>
In an open tracker, any site members can submit issues, and
anyone at all can review existing ones. In a dedicated tracker,
only designated visitors can review and submit issues
<a target="Help" href="HelpConfiguration#open_vs_dedicated">
(details)</a>.
</td>
</tr>
<tr>
<th align="right" valign="middle"> Mode: </th>
<td align="left">
<dtml-with "_(isopen = (access_mode != 'dedicated'))">
<input type="radio" name="access_mode:string"
value="open" <dtml-if isopen>CHECKED</dtml-if> >
<dtml-if isopen> <u>Open</u> <dtml-else> Open </dtml-if>
<input type="radio" name="access_mode:string"
value="dedicated"
<dtml-if "not isopen"> CHECKED </dtml-if> >
<dtml-if "not isopen"> <u>Dedicated</u>
<dtml-else> Dedicated </dtml-if>
</td>
</tr>
</dtml-with>
<tr>
<td valign="top"><hr></td>
<th colspan=3 bgcolor="#ffffcc"> Issue Subscribers </th>
</tr>
<tr>
<td> </td>
<td>
Non-supporter tracker visitors can participate in issues without
being the requester if you allow an open subscription policy.
The policy can be overrident for individual issues from within
those issues.
</td>
</tr>
<tr>
<th align="right" valign="middle"> Subscribing: </th>
<td align="left">
<input type="radio" name="open_subscribe:int" value=0
<dtml-if expr="not open_subscribe">
CHECKED> <u>Disabled</u>
<dtml-else> > Disable </dtml-if>
<input type="radio" name="open_subscribe:int" value=1
<dtml-if expr="open_subscribe">
CHECKED> <u>Enabled</u>
<dtml-else> > Enable </dtml-if>
- Are regular visitors by default allow to subscribe to issues?
</td>
</tr>
<tr>
<th align="right" valign="middle"> Posting: </th>
<td align="left">
<input type="radio" name="subscribers_may_post:int" value=0
<dtml-if expr="not subscribers_may_post">
CHECKED> <u>Prohibited</u>
<dtml-else> > Prohibit </dtml-if>
<input type="radio" name="subscribers_may_post:int" value=1
<dtml-if expr="subscribers_may_post">
CHECKED> <u>Allowed</u>
<dtml-else> > Allow </dtml-if>
- Can subscribers by default post messages, or just get notified
about new ones?
</td>
</tr>
<tr>
<td valign="top"><hr></td>
<th colspan=3 bgcolor="#ffffcc"> Noisy mode </th>
</tr>
<tr>
<td> </td>
<td>
Regular trackers cut non-subscribing supporters out of the
correspondence loop once one of them accepts an issue.
"Noisy" trackers continue to notify all supporters about all
correspondence. Toggle this setting to change the behavior of
all issues, even already existing ones.
<a target="Help" href="HelpConfiguration#noisy">
(details)</a>.
</td>
</tr>
<tr>
<th align="right" valign="middle"> Broadcast: </th>
<td align="left">
<input type="radio" name="noisy:int" value="0"
<dtml-if "not noisy"> CHECKED </dtml-if> >
<dtml-if "not noisy"> <u>Regular</u>
<dtml-else> Regular </dtml-if>
<input type="radio" name="noisy:int" value="1"
<dtml-if noisy> CHECKED </dtml-if> >
<dtml-if "noisy"> <u>Noisy</u>
<dtml-else> Noisy </dtml-if>
</td>
</tr>
<tr>
<td valign="top"><hr></td>
<th colspan=3 bgcolor="#ffffcc"> Request Trait Fields </th>
</tr>
<tr>
<td> </td>
<td>
Use your own, and/or the sample ones. On the next form you'll
fill in the candidate values. (The samples have example
candidates.)
</td>
</tr>
<tr>
<th align="right" valign="top"> Trait Fields: </th>
<td>
<textarea name="traits:lines" rows="6"
cols="35"><!--#in traits--><!--#if
"_.string.strip(_['sequence-item'])"--><!--#var
sequence-item-->
<!--#/if--><!--#/in--></textarea>
</td>
</tr>
<tr>
<td valign="top"><hr></td>
<td colspan=3 bgcolor="#ffffcc"> </td>
</tr>
<tr>
<td> </td>
<td>
<input type="submit" value="Submit ...">
<input type=reset value=" Reset ">
<font color="gray">
<br> Submit proceeds to next step:
<a href="./configTraitValuesForm">Traits</a>
<br> Which is followed by:
<a href="./configAssignmentsForm">Assignments</a>
...</font>
</td>
</tr>
</table></form>
<!--#var standard_tracker_footer-->
=== Added File Products/TrackerBase/forms/configMemberSettings.dtml ===
<!--#var standard_tracker_header-->
<!--#comment-->
A kludge to make it easy to assign email addresses to staff and clients that
are new site members - particularly in the absence of membership, where the
fields may be unset.
<!--#/comment-->
<dtml-if "REQUEST.get('MissingEmailMsg', 0)">
<p>
<strong> A supporter or supporters are missing email settings. Such
entries will be marked with a '**' flag and a user ID in red. </strong>
</p>
</dtml-if>
<p>
Bonafide managers can assign member settings here. You create new
users using the <a href="<dtml-var
"acl_users.absolute_url()">/manage_main"> acl_users management
interface</a>. The IDs of supporters will be either green or red -
red to alert you to the lack of an email address for the supporter.
<p>
<p>If you were in the midst of configuring the tracker and
are done setting supporter email and full name settings, you can
continue with the final tracker configuration step <a
href="configAssignmentsForm">new issue routing assignments</a>.
</p>
<p>
<form action="editMembers" method="post">
<input type="hidden" name="config_form" value="members">
<input type="hidden" name="nextpage"
value="<dtml-var "REQUEST.get('deferrednextpage', URL0)">">
<table border=1>
<tr>
<th> ID </th>
<th> Fullname </th>
<th> Email </th>
</tr>
<dtml-let did="[]"
all="supporters + (_.hasattr(this(), 'clients')
and clients or [])">
<dtml-call "all.sort()">
<dtml-in all>
<dtml-let name="_['sequence-item']"
userobj="trackerGetUser(name)"
issupporter="name in supporters"
email="(_.hasattr(userobj, 'email') and userobj.email)
or ''"
full_name="(_.hasattr(userobj, 'full_name')
and userobj.full_name)
or ''"
flag="(issupporter and not email and '**') or ''"
color="(not issupporter and 'black')
or (email and 'green')
or 'red'">
<dtml-if "name not in did">
<dtml-call "did.append(name)">
<tr>
<dtml-if "userobj is _.None">
<th align="left" colspan=3>
<font color="red"> Invalid user '<dtml-var name>' </font>
</th>
<dtml-else>
<th align="right">
<dtml-var flag>
<font color="<dtml-var color>"><dtml-var name></font>
</th>
<td align="left">
<input type=text size=15
name="_new_<dtml-var name>_full_name"
value="<dtml-var full_name>">
</td>
<td align="left">
<input type=text size=15
name="_new_<dtml-var name>_email"
value="<dtml-var email>">
</td>
</dtml-if>
</tr>
</dtml-if>
</dtml-let>
</dtml-in>
</dtml-let>
</table>
<p>
<input type="submit" value="Submit Revisions"-->
<dtml-if "REQUEST.get('deferrednextpage', '')">
</dtml-if>
<input type="reset" value="reset"-->
<font color="gray">
<dtml-if "REQUEST.get('deferrednextpage', _.None)">
<br> Barring invalid entries, submit proceeds to
<a href="<dtml-var "REQUEST.get('deferrednextpage')">">the
next configuration step</a>
<br> ... or you can instead return to the
<dtml-else> Return to the
</dtml-if>
<a href="./configTraitValuesForm">Trait/Values form</a>
</font>
</form>
</p>
<!--#var standard_tracker_footer-->
=== Added File Products/TrackerBase/forms/configTraitValuesForm.dtml ===
<!--#var standard_tracker_header-->
<h2><!--#var elementEmblem--> Trait/Values Configuration</h2>
<dtml-let allmembers="findAllMemberNames(ceiling=110)">
<form action="setTrackerConfig" method="POST">
<input type="hidden" name="nextpage" value="configAssignmentsForm">
<input type="hidden" name="config_form" value="traitvalues">
<table>
<tr>
<td colspan=4>
<p>
Here you select the members who field the requests as support
staff<!--#if "access_mode == 'dedicated'"-->,
the members to whom this tracker is dedicated,
<!--#/if-->
and the range of values for each of your request trait fields -
one value per line. See <a target="Help"
href="HelpConfiguration#values_configuration">here</a> for
help.
</p>
</td>
</tr>
<tr>
<td valign="top"><hr></td>
<th colspan=3 bgcolor="#ffffcc"> Tracker Supporters </th>
</tr>
<tr>
<td> </td>
<td colspan=3>
Specify supporters - members responsible for fielding
requests.
</td>
</tr>
<tr><th align="right" valign="top">Supporters:</th>
<td align="center" valign="top">
<dtml-if "_.len(allmembers) > 100"> <!--Under ceiling! See above-->
<textarea name="supporters:lines" rows=7 cols=15
><dtml-in supporters><dtml-var sequence-item>
</dtml-in></textarea>
<dtml-else>
<select name="supporters:list" multiple
size=<!--#var "_.min(7, _.max(3, _.len(allmembers)))"-->>
<!--#in allmembers-->
<option value="<!--#var sequence-item-->"
<!--#if "_['sequence-item'] in supporters"-->
SELECTED <!--#/if-->> <!--#var sequence-item--></option>
<!--#/in-->
</select>
</dtml-if>
</td>
<td valign="top" colspan=2>
(Visit
<a href="configMemberSettings">configMemberSettings</a> to assign
supporter fullnames and email addresses.)
</td>
<tr>
<tr>
<td valign="top"><hr></td>
<th colspan=3 bgcolor="#ffffcc">
<dtml-var access_mode capitalize> Tracker </th>
</tr>
<tr>
<td> </td>
<td colspan=3>
<dtml-if "access_mode != 'dedicated'">
If this were a <a
href="HelpConfiguration#open_vs_dedicated">dedicated tracker</a>,
you would designate here those members privileged to
submit and browse as clients requests, their collective quota of
requests, and the time span within which that quota applies.
In open trackers, no such restrictions apply. To switch to
dedicated mode, return to the
<a href="configBasicForm">basic config form</a> and select
'dedicated' access mode, instead of 'open'.
</td>
</tr>
<dtml-else>
Specify <a href="HelpConfiguration#open_vs_dedicated">
dedicated tracker</a> attributes - members privileged to
submit and browse as clients requests, their collective quota of
requests, and the time span within which that quota applies.
(For tracker operation without these restrictions, return to the
<a href="configBasicForm">basic config form</a> and select 'open'
access mode, instead of 'dedicated'.)
</td>
</tr>
<tr>
<th rowspan=6 valign="top" align="right">
Clients and Request Quota: </th>
<td rowspan=6 align="center" valign="top">
<strong> Clients </strong>
<dtml-if "_.len(allmembers) > 100"> <!--Under ceiling! See above-->
<textarea name="clients:lines" rows=7 cols=15
><dtml-in clients><dtml-var sequence-item>
</dtml-in></textarea>
<dtml-else>
<select name="clients:list" multiple
size=<!--#var "_.min(7, _.max(3, _.len(allmembers)))"-->>
<!--#in allmembers-->
<option value="<!--#var sequence-item-->"
<!--#if "_['sequence-item'] in clients"-->
SELECTED <!--#/if-->> <!--#var sequence-item--></option>
<!--#/in-->
</select>
</dtml-if>
</td>
<tr>
<td> </td>
<th align="left"> Service Request Quota </th>
</tr>
<tr>
<th align="right"> Support Level: </th>
<td> <dtml-in support_levels>
<input type="radio" name="support_level"
value="<dtml-var sequence-item>"
<dtml-if
"_['sequence-item'] == support_level">CHECKED</dtml-if>>
<dtml-var sequence-item capitalize>
</dtml-in>
<td>
</tr>
<tr>
<th align="right"> Allotted Number: </th>
<td> <table> <tr> <td>
<input type="text" name="tickets_max:int" size=4
value="<dtml-var tickets_max>">
</td> <td>
... requests to resolve <br> within service period <br>
Negative for no limit. </td>
</tr> </table>
</td>
</tr>
<tr>
<th align="right"> Service Start: </th>
<td> <dtml-var "date_widget(this(), REQUEST=REQUEST,
initial_date = tickets_start_date,
month_var = 'tickets_start_month',
day_var = 'tickets_start_day',
year_var = 'tickets_start_year')">
</td>
</tr>
<tr>
<th align="right"> Service End: </th>
<td> <dtml-var "date_widget(this(), REQUEST=REQUEST,
initial_date = tickets_end_date,
month_var = 'tickets_end_month',
day_var = 'tickets_end_day',
year_var = 'tickets_end_year')">
</td>
</tr>
</dtml-if>
</tr>
<tr>
<td valign="top"><hr></td>
<th colspan=3 bgcolor="#ffffcc"> Traits Elaboration </th>
</tr>
<td> </td>
<td colspan=3>
Fill or adjust trait values, and check the boxes by traits you
will use to distinguish which supporters are notified for which
requests. In the next form you will use those traits to target
supporter notifications about new requests depending on the
request trait settings. </p>
</td>
</tr>
<tr>
<th valign="top" align="right">
Requester
<!-- XXX Removed until we handle large-membership sites
<br><input type="checkbox" name=" __requesters"
<dtml-if "pickers.has_key(' __requesters')">
CHECKED</dtml-if>>
-->
</th>
<td colspan=3> Check the Requester box if you wish to target
request notifications according to who submitted the request.
<em> This is disabled until Supporter Assignments form
handles large site membership. </em>
</td>
</tr>
<!--#in traits-->
<!--#with "_(val_nm = _['sequence-item'])"-->
<!--#with "_(vals = traitsStruct[val_nm+'_range'][1])"-->
<!--#if sequence-even-->
<tr align="center">
<!--#/if-->
<th valign="top" align="right">
<!--#var val_nm capitalize-->:
<br><input type="checkbox"
name="<!--#var val_nm-->__picker"
<!--#if "pickers.has_key(val_nm)"-->
CHECKED<!--#/if-->>
</th>
<td> <textarea name="<!--#var val_nm-->_range:lines"
rows=4 cols=20><!--#in vals--><!--#if
"_.string.strip(_['sequence-item'])"--><!--#var sequence-item-->
<!--#/if--><!--#/in--></textarea>
</td>
<!--#if sequence-odd-->
</tr>
<!--#/if-->
<!--#/with-->
<!--#/with-->
<!--#/in-->
<tr>
<td valign="top"><hr></td>
<td colspan=3 bgcolor="#ffffcc"> </td>
</tr>
<tr>
<td> </td>
<td colspan=3>
<input type="SUBMIT" name="traitvalues"
value="Submit Values ...">
<input type=reset value=" Reset ">
<font color="gray">
<br> Submit proceeds to last config step:
<a href="./configAssignmentsForm">Supporter Assignments</a>
<br> One preceeding step:
<a href="./configBasicForm">Basic</a> ... </font>
</td>
</tr>
</table>
</form>
</dtml-let>
<!--#var standard_tracker_footer-->
=== Added File Products/TrackerBase/forms/configUpdatesMaint.dtml ===
<dtml-var standard_tracker_header>
<form name="change" action="setTrackerConfig" method="POST">
<input type="hidden" name="nextpage" value="configActivities">
<input type="hidden" name="config_form" value="reconcile">
<table>
<tr>
<th> <input type="checkbox" name="reconcileStructure:boolean"> </th>
<td> Reestablish traits and values </td>
</tr>
<tr>
<th> <input type="checkbox" name="reconcileCatalog:boolean"> </th>
<td> Reinstate Catalog </td>
</tr>
<tr>
<th> </th>
<td>
<input type="SUBMIT" name="Submit" value="Submit">
<input type=reset value=" Reset ">
</td>
</tr>
<tr>
<th> </th>
<td> <font color="gray" size="-1">
<br> <a href="./configActivities">All Configuration Activities</a>
</font>
</td>
</tr>
</table>
</form>
<dtml-var standard_tracker_footer>
=== Added File Products/TrackerBase/forms/currentStateView.dtml ===
<!--#var standard_tracker_header-->
<h3>Issue Current Status (internal view)</h3>
<!--#var issueBanner-->
<table>
<!--#in "auditedAttrs['StatusVars'][0]"-->
<tr>
<th align="left"> <!--#var sequence-item capitalize-->: </th>
<td> <!--#var "_[_['sequence-item']]"-->
</td>
<tr>
<!--#/in-->
</table>
<!--#var standard_tracker_footer-->
=== Added File Products/TrackerBase/forms/date_widget.dtml ===
<dtml-comment>
Invoke this with namespace settings for:
thedate - a string for the initial date setting, defaults to now,
month_var, day_var, year_var - var names to get the chosen
month, day, and year settings.
</dtml-comment>
<select name="<!--#var month_var-->" size="1">
<!--#in "['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']"-->
<option <!--#if "_['sequence-item'] == initial_date.aMonth()"
--> SELECTED <!--#/if--> > <!--#var sequence-item--></option>
<!--#/in-->
</select>
<select name="<!--#var day_var-->" size="1">
<!--#in "[1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
31]"-->
<option <!--#if "_['sequence-item'] == initial_date.day()"
--> SELECTED <!--#/if--> > <!--#var sequence-item--></option>
<!--#/in-->
</select>
<input type="text" size="5" maxlength="4"
name="<!--#var year_var-->" value="<!--#var "initial_date.year()"-->">
=== Added File Products/TrackerBase/forms/doSetConfig.dtml ===
<!--#var standard_tracker_header-->
<!-- Take care of the configuration properties: -->
<!--#call "propertysheets.Configuration.manage_changeProperties(REQUEST)"-->
<!-- Do underlying tracker business, if any: -->
<!-- (nothing for now) -->
<!--#if "REQUEST.get('HTTP_REFERER', '') != ''"-->
<!--#call "RESPONSE.redirect(REQUEST.get('HTTP_REFERER'))"-->
<!--#else-->
<!--#call "RESPONSE.redirect(URL1)"-->
<!--#/if-->
=== Added File Products/TrackerBase/forms/editIssueStatus.dtml ===
<html><head><title><!--#var title_or_id--></title></head>
<body bgcolor="#FFFFFF" link="#000099" vlink="#555555">
<!--#var manage_tabs-->
<form action="propertysheets/IssueStatus/manage_editProperties"><table>
<tr><th align=left valign=top>stages</th>
<td align=left valign=top>
<!--#if "_.has_key('stages')"-->
<select name="stages">
<dtml-in "['pending', 'accepted', 'resolved',
'rejected', 'deferred']">
<option
<!--#if "_['sequence-item']=='stages'"-->
SELECTED<!--#/if-->
><!--#var sequence-item--></option>
<!--#/in-->
</select>
<!--#else-->
No value for stages
<!--#/if--></td>
</tr>
<tr><th align=left valign=top>urgencies</th>
<td align=left valign=top>
<!--#if "_.has_key('urgencies')"-->
<select name="urgencies">
<!--#in "_.string.split('normal low high critical')"-->
<option
<!--#if "_['sequence-item']=='urgencies'"-->
SELECTED<!--#/if-->
><!--#var sequence-item--></option>
<!--#/in-->
</select>
<!--#else-->
No value for urgencies
<!--#/if--></td>
</tr>
<tr><th align=left valign=top>punctualities</th>
<td align=left valign=top>
<!--#if "_.has_key('punctualities')"-->
<select name="punctualities">
<!--#in "_.string.split('ok due overdue')"-->
<option
<!--#if "_['sequence-item']=='punctualities'"-->
SELECTED<!--#/if-->
><!--#var sequence-item--></option>
<!--#/in-->
</select>
<!--#else-->
No value for punctualities
<!--#/if--></td>
</tr>
<tr><th align=left valign=top>correspondences</th>
<td align=left valign=top>
<!--#if "_.has_key('correspondences')"-->
<select name="correspondences">
<!--#in "_.string.split('caught-up rsvp')"-->
<option
<!--#if "_['sequence-item']=='correspondences'"-->
SELECTED<!--#/if-->
><!--#var sequence-item--></option>
<!--#/in-->
</select>
<!--#else-->
No value for correspondences
<!--#/if--></td>
</tr>
<tr><td colspan=2>
<input type=submit value=" Change ">
<input type=reset value=" Reset ">
</td></tr>
</table></form>
<!--#var standard_tracker_footer-->
=== Added File Products/TrackerBase/forms/editStateYikes.dtml ===
<!--#var standard_tracker_header-->
<form action="setIssueState">
<input type="hidden" name="editState", value=1>
<table cellspacing=5>
<tr>
<td align="right"> <!--#if icon-->
<img src="<!--#var SCRIPT_NAME-->/<!--#var icon-->"
alt="<!--#var meta_type-->" border="0">
<!--#endif-->
</td>
<th align="left" colspan="5">
<!--#var issueBanner--> - <dtml-var title_or_id>
</th>
</tr>
<tr>
<td> <hr solid> </td>
<th align="left" colspan="5" bgcolor="#ffffcc">
<font size="+1">Override Issue Attributes</font>
</th>
</tr>
<tr>
<td> </td>
<td colspan="5"> Tracker staff can force new settings for issue
attributes here. (To reformulate the issue text, submit a
message in the issue with the 'reframe' action; the last step
will include this form.)
</td>
</tr>
<tr>
<th align="right" valign="top"> Private: </th>
<td align="left" valign="top">
<input type="radio" name="private:int" value=0
<dtml-if "not private"> CHECKED >
<u>Public</u>
<dtml-else> > Public </dtml-if>
<br>
<input type="radio" name="private:int" value=1
<dtml-if "private"> CHECKED >
<u>Private</u>
<dtml-else> > Private </dtml-if>
</td>
<th align="right" valign="top"> Allow Subscribers: </th>
<td align="left" valign="top">
<input type="radio" name="open_subscribe:int" value=0
<dtml-if "not open_subscribe"> CHECKED >
<u>Subscribing Disabled</u>
<dtml-else> > Disable Subscribing </dtml-if>
<br>
<input type="radio" name="open_subscribe:int" value=1
<dtml-if "open_subscribe"> CHECKED >
<u>Subscribing Enabled</u>
<dtml-else> > Enable Subscribing </dtml-if>
</td>
</tr>
<!--#with "_(attrNames=auditedAttrs['StatusVars'][0],
attrRanges=auditedAttrs['StatusVars'][1])"-->
<dtml-in "['stage']">
<tr>
<!-- The attr name: -->
<th align="right" valign="top">
<dtml-var sequence-item capitalize>: </th>
<td>
<!-- Make a select list of candidates, selecting current val: -->
<!--#with "_(curcandidates=attrRanges[_['sequence-item']],
curval = _[_['sequence-item']])"-->
<select name=<!--#var sequence-item-->>
<!--#in curcandidates-->
<OPTION
<dtml-if "curval == _['sequence-item']">SELECTED</dtml-if> >
<!--#var sequence-item--></option>
<!--#/in-->
</select>
<!--#/with-->
</td>
</tr>
<!--#/in-->
<!--#/with-->
<tr><th align="right" valign="top">Requester: </th>
<td align=left valign=top>
<input name="requester" value="<dtml-var requester>">
</td>
<th align="right" valign="top" ROWSPAN="2">Subscribers: </th>
<td align=left valign=top ROWSPAN="2">
<textarea name="subscribers:lines" rows=5 cols=15
><dtml-in subscribers><dtml-var sequence-item>
</dtml-in></textarea>
</td>
</tr>
<tr><th align="right" valign="top">Supporters: </th>
<td align=left valign=top>
<input name="owners:tokens"
value="<dtml-var "_.string.join(issueOwners())">">
</td>
</tr>
<tr>
<th valign="top" align="right">Traits: </th>
<td bgcolor="#eeeeee" COLSPAN="5">
<table>
<dtml-in traitVals>
<dtml-if "_['sequence-start'] or _['sequence-even']">
<tr>
</dtml-if>
<dtml-let trait=sequence-key
value=sequence-item
range="trait + '_range'"
valRange="((traitsStruct.has_key(range)
and traitsStruct[range][1])
or [value])">
<th align="right"> <dtml-var trait capitalize>: </th>
<td align="left">
<select name="<dtml-var trait>__trait:string">
<dtml-in valRange>
<option
<dtml-if "_['sequence-item'] == value">selected</dtml-if>
><dtml-var sequence-item html_quote></option>
</dtml-in></select>
</td>
</dtml-let>
<dtml-if "_['sequence-end'] or _['sequence-odd']">
</tr>
</dtml-if>
</dtml-in>
</table>
</td>
</tr>
<tr>
<td> </td>
<td colspan="4">
<br>
<input type=submit value="Submit Changes">
<input type=reset value="Reset">
</td>
</tr>
</form>
<tr>
<td> <hr solid> </td>
<th bgcolor="#ffffcc" colspan="4"> </th>
</tr>
<form action="reattrs">
<tr>
<th> </th>
<td> <input type="submit" name=":reattrs" value="Recompute Stages">
</td>
<td colspan=3> Recompute the stage settings for this issue, to catch
up with tracker architectural changes. </td>
</tr>
</form>
</table>
<!--#var standard_tracker_footer-->
=== Added File Products/TrackerBase/forms/elementSummaryRows.dtml ===
<!--#comment-->
Generalized synopsis presentation of tracker element (issues and items)
sequences as a bunch of table <tr> rows. It requires the sequence to be
bound to be (using eg a '#with') to the variable 'element', and a list of
the desired fields to be bound to 'summary_fields'.
Several fields are specially handled, in particular:
- 'emblem' is presented as a short sign for the element that links to it.
- 'date' is presented so current day is just the am/pm time,
and current years are shown without the year.
- Lists are unrolled with ',' commas between the pieces.
- 'in_reply_to' and 'replies' entries are turned into the emblem links for
the elements.
<!--#/comment-->
<!--#call "REQUEST.set('_did_traits_header', 0)"-->
<!--#in "[()] + elements"-->
<!--#with "_(element = _['sequence-item'],
firstpass = _['sequence-start'])"-->
<tr <!--#if firstpass-->BGCOLOR="#ccffcc"<!--#/if-->>
<!--#in "summary_fields" skip_unauthorized-->
<!--#if "_['sequence-item'] == 'emblem'"-->
<!--#if firstpass-->
<th valign="bottom"> ID </th>
<!--#else-->
<td> <!--#var "element.elementEmblem(REQUEST=REQUEST)"-->
</td>
<!--#/if-->
<!--#elif "_['sequence-item'] == 'action'"-->
<!--#comment--> Item only <!--#/comment-->
<!--#if firstpass-->
<th valign="bottom" align="center"> Action </th>
<!--#else-->
<td align="center"> <!--#if "element.msgrole != 'correspond'"-->
<!--#var "element.msgrole"-->
<!--#/if-->
</td>
<!--#/if-->
<!--#elif "_['sequence-item'] == 'supporter'"-->
<!--#comment--> Issue only <!--#/comment-->
<!--#if firstpass-->
<th valign="bottom" align="center"> Supporter </th>
<!--#else-->
<td align="center">
<!--#with "_(owners = element.issueOwners(element))"-->
<!--#if owners-->
<!--#var "_.string.join(owners, ', ')" size=10-->
<!--#else-->
<font color="gray"> - </font>
<!--#/if-->
<!--#/with-->
</td>
<!--#/if-->
<!--#elif "_['sequence-item'] == 'last msg'"-->
<!--#if firstpass-->
<th valign="bottom" align="center"> Last<br>Msg </th>
<!--#else-->
<td>
<!--#with "_(visibles = elementFilter(visonly=1, REQUEST=REQUEST))"-->
<!--#if visibles-->
<!--#var "visibles[-1].elementEmblem(REQUEST=REQUEST)"-->
<!--#/if-->
<!--#/with-->
</td>
<!--#/if-->
<!--#elif "_['sequence-item'] == 'in_reply_to'"-->
<!--#if firstpass-->
<th align="left"> Re </th>
<!--#else-->
<!--#with "_(curval=_.getattr(element, _['sequence-item']))"-->
<td align="left">
<!--#if "curval"-->
<!--#var "elementEmblem(item_id=curval, REQUEST=REQUEST)"-->
<!--#/if-->
</td>
<!--#/with-->
<!--#/if-->
<!--#elif "_['sequence-item'] == 'description'"-->
<!--#unless firstpass-->
</tr>
<tr>
<td> </td>
<td align=left colspan=<!--#var "_.len(summary_fields) - 1"-->>
<font color="gray">
<!--#var "element.description" size=100 fmt=html-quote--></font>
</td>
</tr>
<tr>
<!--#/unless-->
<!--#elif "_['sequence-item'] == 'attachments'"-->
<!--#unless firstpass-->
<!--#with element-->
<!--#if "objectItems()"-->
</tr>
<tr>
<td> </td>
<td align=left colspan=<!--#var "_.len(summary_fields) - 1"-->>
<!--#var attachments-->
</td>
</tr>
<tr>
<!--#/if-->
<!--#/with-->
<!--#/unless-->
<!--#elif "_['sequence-item'] == 'traits'"-->
<!--#comment--> issues only <!--#/comment-->
<!--#unless firstpass-->
</tr>
<tr>
<td> </td>
<td colspan=20>
<table>
<tr>
<!--#with element-->
<!--#in traitVals-->
<td align="center">
<font color="gray">
<!--#if "REQUEST.get('_did_traits_header') == 0"-->
<em><!--#var sequence-key capitalize--></em></font> <br>
<!--#/if-->
<font color="gray">
<!--#var sequence-item--><!--#unless
sequence-end-->,<!--#/unless-->
</font>
</td>
<!--#/in-->
<!--#/with-->
<!--#if "REQUEST.get('_did_traits_header') == 0"-->
<!--#call "REQUEST.set('_did_traits_header', 1)"-->
<!--#/if-->
</tr>
</table>
</td>
</tr>
<!--#/unless-->
<!--#else-->
<!--#if firstpass-->
<th valign="bottom" align=<!--#if "_['sequence-item'] == 'title'"-->"left"
<!--#else-->"center"<!--#/if-->>
<!--#var "_['sequence-item']" capitalize fmt=html-quote-->
</th>
<!--#else-->
<td align=<!--#if "_['sequence-item'] == 'title'"-->"left"
<!--#else-->"center"<!--#/if-->>
<!--#if "_.hasattr(element, _['sequence-item'])"-->
<!--#with "_(curval=_.getattr(element, _['sequence-item']),
curfield=_['sequence-item'])"-->
<!--#if "curfield == 'date'"-->
<!--#var "((curval.isCurrentDay()
and curval.AMPMMinutes())
or (curval.isCurrentYear() and
'%s %s %s' % (curval.aMonth(), curval.day(),
curval.AMPMMinutes()))
or curval.aCommon())"-->
<!--#elif "curfield == 'replies'"-->
<!--#if "curval"-->
<!--#in curval skip_unauthorized-->
<!--#if sequence-item-->
<!--#var "elementEmblem(item_id=_['sequence-item'],
REQUEST=REQUEST)"-->
<!--#/if sequence-item-->
<!--#/in-->
<!--#/if-->
<!--#elif "curfield == 'private'"--> <!--#if curval--> * <!--#/if-->
<!--#elif "curfield == 'title'"-->
<a href="<!--#var absolute_url-->">
<!--#var curval fmt=html-quote size=30--></a>
<!--#else-->
<!--#if "curval[0:0] == ''"-->
<!--#var curval fmt=html-quote-->
<!--#else-->
<!--#in curval skip_unauthorized-->
<!--#var sequence-item fmt=html-quote--><!--#unless
sequence-end-->,<!--#/unless-->
<!--#/in-->
<!--#/if-->
<!--#/if-->
<!--#/with-->
<!--#else-->
<!--#/if-->
</td>
<!--#/if-->
<!--#/if-->
<!--#/in-->
</tr>
<!--#/with-->
<!--#/in-->
=== Added File Products/TrackerBase/forms/index_html.dtml ===
<!--#var standard_tracker_header-->
<dtml-comment> Tracker index_html </dtml-comment>
<table>
<tr>
<td align="right">
<dtml-if icon>
<img src="<!--#var SCRIPT_NAME-->/<!--#var icon-->"
alt="<!--#var meta_type-->" border="0">
<dtml-else>
</dtml-if>
</td>
<th align="left" bgcolor="#ccffcc">
<font size=+1>
<!--#if title--> <!--#var title--> <!--#/if-->Issue Tracker
</font>
</th>
</tr>
<!--#if "_.string.strip(description)"-->
<tr>
<th align="left"> Purpose: </th>
<td bgcolor="eeeeee"> <!--#var description--> </td>
</tr>
<!--#/if-->
<tr>
<td valign="top"> <hr> </td>
<td>
Below are existing issues, filtered according to the search settings at
the bottom of the page.
</td>
</tr>
<tr>
<td> </td>
<td>
To visit one of the existing issues, click on the ID or title. To go
directly to the most recent message in the issue (for details, or to
respond to it), click on the identifier in the last-message column.
</td>
</tr>
<tr>
<td> </td>
<td>
To submit a new issue, click <a href="submitIssueForm">
<strong>here</strong></a>, or use the tab at the top of the page.
</td>
</tr>
<tr>
<td> </td>
<td>
For more background and instructions, visit the
<a target="Help" href="HelpTrackerOverview"> Tracker overview </a>.
</td>
</tr>
<!--#comment-->
We do massive preparation of search criteria. We may be coming in from
elsewhere - a fresh start - or we may be cycling back one of the search
buttons at the bottom. Then there's some massaging of traits, etc.
<!--#/comment-->
<dtml-let criteria="{'type': 'tracker_issue'}"
default_batch_size="trackerpref(pref='batch_size', default=10,
REQUEST=REQUEST)"
refine_defaults="[('refine_show', 'Close Advanced Search'),
('refine_type', 'strict'),
('any', ''),
('public', 'ON'),
('private', 'ON'),
('requester', []),
('supporter', []),
('priority', []),
('stage', ['pending', 'accepted']),
('batch_size', default_batch_size)]"
init="(not REQUEST.get('refine_mode', ())
or REQUEST.get('refine_vanilla', ()))"
type="(((REQUEST.get('refine_show', ())
== 'Close Advanced Search') and 'simple')
or ((REQUEST.get('refine_show', ())
== 'Open Advanced Search') and 'elaborate')
or REQUEST.get('refine_mode', 'simple'))"
didb="_.has_key('did_basic')"
didt="_.has_key('did_traitvalues')"
topp="REQUEST.get('topprev', 0)"
topn="REQUEST.get('topnext', 0)"
topc="REQUEST.get('topbatchchange', 0)"
topretain="REQUEST.get('topbatchretain', 0)"
top="(topp or topn)"
botp="REQUEST.get('bottomprev', 0)"
botn="REQUEST.get('bottomnext', 0)"
botc="REQUEST.get('bottombatchchange', 0)"
botretain="REQUEST.get('bottombatchretain', 0)"
bot="(botp or botn)"
batch_last_start="REQUEST.get('batch_last_start', 0)"
batch_last_end="REQUEST.get('batch_last_end', 0)"
cur_batch_size="_.max(1,
((top and REQUEST.get('batch_size_top', 0))
or (bot and REQUEST.get('batch_size_bottom', 0))
or (topc and REQUEST.get('batch_size_top', 0))
or (botc and REQUEST.get('batch_size_bottom', 0))
or REQUEST.get('batch_size', default_batch_size)))
or 15"
direction="((topp or botp) and -1)
or ((topn or botn) and 1)
or 0">
<dtml-comment>
Prime search settings with refine_defaults, according to whether we're:
- coming in from elsewhere - fresh, init from defaults
- doing simple search - retain simple settings, default the others
- doing elaborate search - retain all settings
- "default" search button was hit - reinit from defaults
</dtml-comment>
<!--#in refine_defaults-->
<!--#call "REQUEST.set(_['sequence-key'],
(((init or (type == 'simple'
and (_['sequence-key']
not in ['requester',
'supporter',
'priority',
'stage'])))
and _['sequence-item'])
or REQUEST.get(_['sequence-key'], ())))"-->
<!--#call "criteria.update(
{_['sequence-key']: REQUEST.get(_['sequence-key'])})"-->
<!--#/in-->
<dtml-comment> Prime search criteria with batch settings. </dtml-comment>
<dtml-if "cur_batch_size
and ((top or topc) and topretain) or ((bot or botc) and botretain)
and (cur_batch_size != trackerpref(pref='batch_size',
REQUEST=REQUEST))">
<dtml-call "trackerpref(pref='batch_size', value=cur_batch_size,
REQUEST=REQUEST)">
</dtml-if>
<dtml-if "top or bot">
<dtml-call "criteria.update({
'batch_size': cur_batch_size,
'batch_direction': direction,
'batch_last_start': batch_last_start,
'batch_last_end': batch_last_end,
})">
<dtml-else>
<dtml-call "criteria.update({
'batch_size': cur_batch_size,
'batch_direction': 0,
'batch_last_start': 0,
'batch_last_end': 0
})">
</dtml-if>
<dtml-comment> Prime search criteria with date info. </dtml-comment>
<dtml-call "criteria.update(
{'until_active': REQUEST.get('until_active', ''),
'until_year': REQUEST.get('until_year', ''),
'until_month': REQUEST.get('until_month', ''),
'until_day': REQUEST.get('until_day', ''),
'since_active': REQUEST.get('since_active', ''),
'since_year': REQUEST.get('since_year', ''),
'since_month': REQUEST.get('since_month', ''),
'since_day': REQUEST.get('since_day', '')})">
<dtml-comment> Prime search criteria with trait settings. </dtml-comment>
<!--#if "type != 'simple'"-->
<!--#with "_(traits_criteria = {})"-->
<!--#in traits-->
<!--#call "traits_criteria.update(
{_['sequence-item']:
REQUEST.get('refine_trait_' + _['sequence-item'], [])})"-->
<!--#/in-->
<!--#call "criteria.update({'refine_traits': traits_criteria})"-->
<!--#/with-->
<!--#/if-->
<!--#comment-->
Check for proper tracker configuration and report prospective problems.
<!--#/comment-->
<!--#if "not (didb and didt)"-->
<tr>
<td> <hr> </td>
</tr>
<tr>
<td> <font color="red"><strong>NOTE!</strong></font> </td>
<td>
This tracker is incompletely configured, which may lead to
malfunction. The following needs to be configured (by tracker staff):
<!--#if "not didb"-->
<a href="./configBasicForm"> Basic Config </a>
<!--#/if-->
<!--#if "not didt"-->
<!--#if "not didb"--> and <!--#/if-->
<a href="./configTraitValuesForm"> Traits Config </a>
<!--#/if-->
</td>
</tr>
<tr>
<td> <hr> </td>
</tr>
<!--#/if "not (didb and didt)"-->
<dtml-comment> DO THE SEARCH. </dtml-comment>
<dtml-let got="issuesSearch(this(), criteria, REQUEST=REQUEST,
viewable_only=1)"
currents="got[0]"
numpriors="got[1]"
numafters="got[2]"
totmatches="_.len(currents) + numpriors + numafters"
simple="REQUEST.get('refine_show', ()) == 'Close Advanced Search'">
<tr>
<td> </td>
</tr>
<tr>
<td> <hr> </td>
<th align="left">
<font size="+1">
<dtml-var "_.len(currents)">
<dtml-if "totmatches == 1"> Matching Issue
<dtml-else>
<dtml-if "_.len(currents) != totmatches">
of <dtml-var totmatches> </dtml-if>
Matching Issues
</dtml-if>
(<!--#var length--> Total<dtml-if "access_mode == 'dedicated'">
- <dtml-if "tickets_max >= 0">
<dtml-var "quota_stats(this(), 'remaining')"> remaining tickets
of
<dtml-var "quota_stats(this(), 'allotted')"> allotted through
<dtml-else>
service scheduled through
</dtml-if>
<dtml-var tickets_end_date></dtml-if>)
</font>
</td>
</tr>
</table>
<form name="doit" action="<!--#var URL-->" method="get">
<input type="hidden" name="batch_last_start:int"
value="<dtml-var numpriors>">
<input type="hidden" name="batch_last_end:int"
value="<dtml-var "numpriors + _.len(currents)">">
<!--#if "lastVisible(currents, REQUEST=REQUEST)"-->
<dtml-let isr="lastVisible(currents, REQUEST=REQUEST).issueSummaryRows"
elements=currents>
<table width="100%" cellpadding=2 cellspacing=0 border=0>
<dtml-in "['top', 'bottom']">
<tr>
<dtml-let pos="_['sequence-item']">
<td colspan=10>
<table>
<tr>
<dtml-if numpriors>
<td>
<font color="green" size=-1>
<input type="submit" name="<dtml-var pos>prev"
value="<<< Prior">
</font>
</td>
</dtml-if>
<td align="center">
<input type="text" name="batch_size_<dtml-var pos>:int" size=2
value="<dtml-var cur_batch_size>">
</td>
<dtml-if numafters>
<td>
<font color="green" size=-1>
<input type="submit" name="<dtml-var pos>next"
value="Next >>>">
</font>
</td>
</dtml-if>
<td>
<dtml-unless "numpriors or numafters">
<td>
<input type="submit" name="<dtml-var pos>batchchange"
value="Change batch size.">
</td>
</dtml-unless>
<dtml-if "AUTHENTICATED_USER.getUserName() not in
['Anonymous User', 'superuser']">
<td>
<font size=-1>(</font><input type="checkbox"
name="<dtml-var pos>batchretain">
<font size=-1>
<a target="help" href="HelpTrackerOverview#batching">
Retain batch size as personal default</a>)
</font>
</td>
</dtml-if>
</tr>
</table>
</td>
</dtml-let>
</tr>
<dtml-if "_['sequence-item'] == 'top'">
<dtml-let doheader="1">
<!--#var isr-->
</dtml-let>
<!--#var isr-->
<dtml-let doheader="1">
<!--#var isr-->
</dtml-let>
</dtml-if>
</dtml-in>
</table>
</dtml-let>
<!--#else-->
<input type="hidden" name="batch_last_start" value="0">
<input type="hidden" name="batch_last_end" value="0">
<table width="100%">
<tr BGCOLOR="#ccffcc">
<td>
Zero zilch no matching issues.
</td>
</tr>
</table>
<!--#/if-->
<!--#if simple-->
<!--#var searchFormSimple-->
<!--#else-->
<!--#var searchFormComplex-->
<!--#/if-->
<center>
<input type="submit" value="Do Search">
<input type="reset" value="Reset Form">
<!--#if simple-->
<input type="hidden" name="refine_mode" value="simple">
<input type="submit" name="refine_show" value="Open Advanced Search">
<!--#else-->
<input type="hidden" name="refine_mode" value="elaborate">
<input type="submit" name="refine_show" value="Close Advanced Search">
<!--#/if-->
</center>
</form>
</dtml-let>
</dtml-let>
<!--#var standard_tracker_footer-->
=== Added File Products/TrackerBase/forms/issue-attachments.dtml ===
<!--#comment-->
Enumerate all the attachments for the current issue, with icon/link format.
If there's a binding for 'attachments_delimiter', it's put between
the item entries.
<!--#/comment-->
<!--#in items-->
<!--#with sequence-item-->
<!--#var attachments--> <!--#comment-->... of item.<!--#/comment-->
<!--#/with-->
<!--#/in-->
=== Added File Products/TrackerBase/forms/issue-index_html.dtml ===
<!--#var standard_tracker_header-->
<dtml-let staff="tracker_role(this(), 'staff', REQUEST)"
pseudouser="tracker_role(this(), ['Anonymous User','superuser'], REQUEST)"
involved="tracker_role(this(), 'involved', REQUEST)"
subscriber="tracker_role(this(), 'Subscriber', REQUEST)">
<form action="setIssueState" name="change">
<input type="hidden" name="issueIndex", value=1>
<table>
<dtml-if diverted>
<tr>
<dtml-with "_(refs = hrefize(this(), diverted, REQUEST=REQUEST))">
<th align="right"> <font color="red"> => </font>
<dtml-if "refs[1]"> <dtml-var "refs[0]"> </dtml-if>
</th>
<th colspan=4 align="left" bgcolor="ffffcc">
This issue has been diverted to
<dtml-if "refs[1]">
<a href="<dtml-var "refs[1][0].absolute_url()">">
<dtml-var "refs[1][0].title"> </a>
<dtml-else>
<dtml-var "refs[0]">
</dtml-if>
</th>
</dtml-with>
</tr>
</dtml-if>
<tr>
<td align="right"> <!--#if icon-->
<img src="<!--#var SCRIPT_NAME-->/<!--#var icon-->"
alt="<!--#var meta_type-->" border="0">
<!--#endif-->
</td>
<td align="left" colspan=3>
<a href="<dtml-var URL2>">
<img src="uparrow.gif" alt="" border="0"> </a>
<b> <dtml-var "elementEmblem(aq_parent, REQUEST=REQUEST)"> <b> </th>
</td>
</tr>
<tr>
<td> <hr solid> </td>
<th align="left" colspan=2 bgcolor="#ccffcc">
<font size="+1">
Issue
<dtml-var "elementEmblem(this(), REQUEST=REQUEST, nolink=1)">
Summary
</font>
</th>
<td align="left" colspan=2 bgcolor="#ccffcc">
(Most recent message:
<dtml-with "lastVisible(seq=this().values(),REQUEST=REQUEST)">
<dtml-var "elementEmblem(REQUEST=REQUEST)">,
<dtml-if from> <dtml-var from><dtml-else>
<dtml-var requester></dtml-if>)
</dtml-with-->
</td>
</tr>
<dtml-with "_(element = (not reframed and get(1)) or get(reframed))">
<tr>
<th align="right" valign="center" NOWRAP>
<a href="<dtml-var "element.absolute_url()">">
<em> <dtml-if reframed> Reframe <dtml-else> Request </dtml-if> </em>
<dtml-var "element.elementEmblem(nolink=1, REQUEST=REQUEST)"></a>:
</th>
<td colspan=4 align="left">
<table bgcolor="#eeeeee"> <tr> <td>
<a href="<dtml-var "element.absolute_url()">">
<dtml-var "hrefize(title, REQUEST=REQUEST)[0]"> </a>
</td> </tr>
</table>
</td>
</tr>
<!--#var issueStatusRows-->
<tr>
<th align="right" valign="top"> Traits: </th>
<td colspan=3>
<table width="100%" bgcolor="ffffee">
<tr>
<!--#with "_(splitpoint = (((11 < _.len(traits) < 20)
and (_.len(traits)+1)/2) or 11))"-->
<!--#in traitVals-->
<td align="center">
<font color="gray">
<em><!--#var sequence-key capitalize size=12 etc=""--></em>
</font>
<br><!--#var sequence-item size=16 etc=""-->
</td>
<!--#if "(_.divmod(_['sequence-index']+1, splitpoint)[1] == 0)
and (not _['sequence-end'])
and (not _['sequence-start'])"-->
</tr>
<tr>
<!--#/if-->
<!--#/in-->
<!--#/with-->
</tr>
</table>
</td>
</tr>
<dtml-if "element.aq_explicit.references">
<tr>
<th align="right"> Item Refs: </th>
<td colspan=3> <dtml-var "hrefize(this(),
_.string.join(element.references, ', '),
complete=1, REQUEST=REQUEST)[0]">
</tr>
</dtml-if>
<dtml-with element>
<dtml-if objectItems>
<tr>
<th> Attachments: </th>
<td> <dtml-with element> <dtml-var attachments> </dtml-with> </td>
</tr>
</dtml-if>
</dtml-with>
<tr>
<th align="right" valign="top"> Description: </th>
<td valign="top" COLSPAN=4 bgcolor="#eeeeee" width="100%">
<samp>
<dtml-var "html_quote_indented(description, do_hrefize=1,
maxlines=7, maxchars=350,
etc=('[truncated - see '
+ ('(%s)[1]' % id)
+ ' for message.]'),
charsbreak=' ...<br>',
linesbreak=' ', REQUEST=REQUEST)">
</samp>
</td>
</tr>
</dtml-with>
<!--#in "promotes()[((not reframed and 1) or 0):]"-->
<!--#with "get(_['sequence-item'])"-->
<tr>
<td> </td>
<td> <hr solid> </td>
</tr>
<tr>
<th align="right" NOWRAP>
<a href="<dtml-var absolute_url>">
<em> <dtml-var msgrole capitalize> </em>
<dtml-var "elementEmblem(nolink=1, REQUEST=REQUEST)"></a>: </th>
<td colspan=4 align="left">
<table bgcolor="#eeeeee"> <tr> <td>
<a href="<dtml-var absolute_url>">
<dtml-var "hrefize(title, REQUEST=REQUEST)[0]"> </a>
</table>
</td>
</tr>
<tr>
<th align="right"> From: </th>
<td> <dtml-if from> <!--#var from--> <dtml-else>
<dtml-var requester></dtml-if>,
<!--#var date fmt=aCommon--> </td>
</tr>
<dtml-if "aq_explicit.references">
<tr>
<th align="right"> Item Refs: </th>
<td> <dtml-var "hrefize(this(), _.string.join(references, ', '),
complete=1, REQUEST=REQUEST)[0]">
</tr>
</dtml-if>
<!--#if objectItems-->
<tr>
<th align="right"> Attachments: </th>
<td COLSPAN=3> <!--#var attachments--> </td>
</tr>
<!--#/if-->
<tr>
<th align="right" valign="top"> Description: </th>
<td valign="top" COLSPAN=4 bgcolor="#eeeeee" width="100%">
<samp>
<dtml-var "html_quote_indented(
description, do_hrefize=1,
maxlines=3, maxchars=150,
etc=('[truncated - see '
+ ('(%s)[%s]' % (aq_parent.id, id))
+ ' for message.]'),
charsbreak=' ...<br>',
linesbreak=' ', REQUEST=REQUEST)">
</samp>
</td>
</tr>
<!--#/with-->
<!--#/in-->
<tr>
<td> <hr solid> </td>
<td bgcolor="#ccffcc" colspan=4> </td>
</tr>
<tr>
<th valign="top"> <font size="-1"> Subscriptions: </font> </th>
<td align="left" valign="top" colspan=3>
<font size="-1">
<dtml-if staff>
Issue subscribibility:
<input type="radio" name="open_subscribe:int" value=0
<dtml-if "not open_subscribe"> CHECKED >
<u>Disabled</u>
<dtml-else> >Disable</dtml-if>
<input type="radio" name="open_subscribe:int" value=1
<dtml-if "open_subscribe"> CHECKED >
<u>Enabled</u>
<dtml-else> >Enable</dtml-if>
<br>
</dtml-if>
<dtml-if "not open_subscribe and not subscriber">
<em> Subscriptions disabled for this issue </em>
<dtml-elif pseudouser>
<em> Non-member </em>
<dtml-var "AUTHENTICATED_USER.getUserName()">
<em> cannot subscribe </em>
<dtml-else>
Issue subscription:
<input type="radio" name="subscribe:int" value=0
<dtml-if "not subscriber"> CHECKED >
<u>Remain Unsubscribed</u>
<dtml-else> >Unsubscribe</dtml-if>
<input type="radio" name="subscribe:int" value=1
<dtml-if "subscriber"> CHECKED > <u>Remain Subscribed</u>
<dtml-else> >Subscribe</dtml-if>
<br>
<dtml-unless open_subscribe>
<em>Note: subscriptions are disabled, so no
resubscribing if you unsubscribe <br></em>
</dtml-unless>
<font size="-1">Subscribing includes you among those
notified about <dtml-if subscribers_may_post> and posting
</font>
</dtml-if>
new issue items.
</dtml-if>
</font>
</td>
</tr>
<dtml-if staff>
<tr>
<td> </td>
<td colspan=3>
<font size="-1">
<dtml-if "not open_subscribe"> <font color="gray"> </dtml-if>
Issue subscriber posting:
<input type="radio" name="subscribers_may_post:int" value=0
<dtml-if "not subscribers_may_post"> CHECKED >
<u>Disabled</u>
<dtml-else> >Disable</dtml-if>
<input type="radio" name="subscribers_may_post:int" value=1
<dtml-if "subscribers_may_post"> CHECKED >
<u>Enabled</u>
<dtml-else> >Enable</dtml-if>
<dtml-if "not open_subscribe"> </font> </dtml-if>
</font>
</td>
</tr>
</dtml-if>
<dtml-if "staff or subscriber or (open_subscribe and not pseudouser)">
<tr>
<td> </td>
<td> <input type="submit" value="Submit">
<input type=reset value=" Reset ">
</td>
</tr>
</dtml-if>
</table>
</form>
<dtml-if "staff or involved or subscriber">
<dtml-let elements="elementFilter(seq=values(), visonly=1,
unpromoted=1, REQUEST=REQUEST)">
<table>
<tr>
<td colspan=30>
<a name="correspondence"></a>
<table width="100%">
<dtml-if elements>
<tr bgcolor="#ccffff">
<td align="center" colspan=3>
<strong><font size="+1"> Other Issue Correspondence
</font></strong>
</td>
</tr>
</dtml-if>
<tr>
<td>
<dtml-if "stage not in ['resolved', 'rejected', 'diverted']">
To followup or for
<dtml-else>
For
</dtml-if>
item details,
select an item by clicking an <em>Action[ID]</em> header,
above,
<dtml-if elements> or an ID/title, below </dtml-if>
<strong> OR </strong>
<dtml-if "stage not in ['resolved', 'rejected', 'deferred']">
start a new thread for this issue
<dtml-else>
supplement discussion in this closed issue
</dtml-if>
<a href="<dtml-var absolute_url>/1?newitem=1">here</a>.
(See <a target="Help"
href="HelpTrackerOverview#corresponding">here</a>
for help.)
</td>
</tr>
</table>
</td>
</tr>
<dtml-if elements>
<dtml-with "_(itr = elements[0].itemSummaryRows)">
<dtml-var itr>
</dtml-with>
<dtml-else>
<tr> <td align="center">
<em> All correspondence is covered in the summary </em>
</td> </tr>
</dtml-if>
</table>
</dtml-let>
</dtml-if>
</dtml-let>
<!--#var standard_tracker_footer-->
=== Added File Products/TrackerBase/forms/issueAllIssues.dtml ===
<!--#call "RESPONSE.redirect(URL2 + '/allIssuesView')"-->
=== Added File Products/TrackerBase/forms/issueBanner.dtml ===
<!--#comment-->
Handy presentation of the current issue id - including link to
current tracker
<!--#/comment-->
<!--#with "aq_parent"--> <!--#comment--> Tracker. <!--#/comment-->
<!--#var "elementEmblem(this(), REQUEST=REQUEST)"-->
<!--#/with-->
Issue
<!--#var "elementEmblem(this(), nolink=1, REQUEST=REQUEST)"-->
=== Added File Products/TrackerBase/forms/issueCurrentIssues.dtml ===
<!--#call "RESPONSE.redirect(URL2)"-->
=== Added File Products/TrackerBase/forms/issueHistory.dtml ===
<!--#var standard_tracker_header-->
<h3><!--#var issueBanner--><br>
Change History <em>(internal view)</em></h3>
<table>
<tr>
<th> </th>
<th> Which </th>
<th> What </th>
<th> Who </th>
<th> When </th>
<th> Tick </th>
</tr>
<!--#in history-->
<tr>
<td> <!--#var "_.len(history) - _['sequence-index']"--> </td>
<td> <!--#var "_['sequence-item'][0]"--> </td>
<td> <!--#var "_['sequence-item'][1]"--> </td>
<td> <!--#var "_['sequence-item'][2]"--> </td>
<td>
<!--#with "_(date = ZopeTime(_['sequence-item'][3]))"-->
<!--#var "((date.isCurrentDay() and date.AMPMMinutes())
or (date.isCurrentYear() and
'%s %s %s' % (date.aMonth(), date.day(),
date.AMPMMinutes()))
or date.aCommon())"-->
<!--#/with-->
</td>
<td> <!--#var "_['sequence-item'][4]"--> </td>
</tr>
<!--#/in-->
</table>
<!--#var standard_tracker_footer-->
=== Added File Products/TrackerBase/forms/issueStatusRows.dtml ===
<dtml-comment> issueStatusRows </dtml-comment>
<dtml-let overdues="this().audited_state.get('overdue', {})"
dues="this().audited_state.get('due', {})"
staff="REQUEST.get('staff',
tracker_role(this(), 'staff', REQUEST))"
involved="REQUEST.get('involved',
tracker_role(this(),'involved',REQUEST))"
subscriber="REQUEST.get('subscriber',
tracker_role(this(),'Subscriber',REQUEST))"
stagewhen="ZopeTime(this().audited_state.history(
varname='stage', max=1)[0][3])"
divref="(diverted and hrefize(this(), diverted,
REQUEST=REQUEST)[0])"
owners="issueOwners()">
<tr>
<th align="right" valign="bottom">
<!--#if qualifier--><!--#var qualifier--><!--#/if--> From: </th>
<td valign="bottom" NOWRAP><!--#var requester-->,
<!--#var date fmt=aCommon--> </td>
<th align="right">
Supporter<dtml-if "_.len(owners)>1">s</dtml-if>:
</th>
<td>
<!--#if owners-->
<!--#var "_.string.join(owners, ', ')"-->
<!--#else-->
<font color="gray">Not assigned</font>
<!--#/if-->
</td>
</tr>
<tr>
<th align="right" valign="middle">
<!--#if qualifier--><!--#var qualifier--><!--#/if--> Stage: </th>
<td valign="middle" NOWRAP>
<!--#with "_(status = ((overdues.has_key('ownership')
and ('red', '<em> Overdue </em>'))
or ((dues.has_key('ownership')
and ('orange', '<em> Due </em>')))
or ''))"-->
<!--#var stage capitalize--><dtml-if
"(stage == 'diverted') and divref">
=> <dtml-var divref></dtml-if>,
<!--#if "status is not ''"-->
<!--#var "((stagewhen.isCurrentDay()
and stagewhen.AMPMMinutes())
or (stagewhen.isCurrentYear() and
'%s %s %s' % (stagewhen.aMonth(), stagewhen.day(),
stagewhen.AMPMMinutes()))
or stagewhen.aCommon())"-->
<font color = "<!--#var "status[0]"-->">
<!--#var "status[1]"--> </font>
<!--#else-->
<!--#var "((stagewhen.isCurrentDay()
and stagewhen.AMPMMinutes())
or (stagewhen.isCurrentYear() and
'%s %s %s' % (stagewhen.aMonth(), stagewhen.day(),
stagewhen.AMPMMinutes()))
or stagewhen.aCommon())"-->
<!--#/if-->
<!--#/with-->
</td>
<dtml-if "involved and staff">
<th align="right" valign="middle"> Priority: </th>
<td valign="middle" colspan=2 NOWRAP>
<dtml-in priority_range>
<input type="radio" name="priority"
value="<dtml-var sequence-item>"
<dtml-if "priority == _['sequence-item']">CHECKED >
<u><dtml-var sequence-item capitalize></u>
<dtml-else> > <dtml-var sequence-item capitalize>
</dtml-if>
</dtml-in>
</td>
</dtml-if>
</tr>
<dtml-if references>
<tr>
<th align="right"> Issue Refs: </th>
<td colspan=3> <dtml-var "hrefize(this(),
_.string.join(references, ', '),
complete=1,
REQUEST=REQUEST)[0]">
</td>
</tr>
</dtml-if>
<dtml-if subscribers>
<tr>
<th align="right"> Subscribers: </th>
<td> <dtml-if subscriber>
<b> <dtml-var "AUTHENTICATED_USER.getUserName()"> </b>
</dtml-if>
<dtml-in "subscribers[:9]"> <dtml-if "_['sequence-item'] !=
AUTHENTICATED_USER.getUserName()"> <dtml-var
sequence-item> </dtml-if> </dtml-in>
<dtml-if "_.len(subscribers) > 10">
(+ <dtml-var "_.len(subscribers) - 10"> more)
</dtml-if>
</td>
</tr>
</dtml-if>
<!--#if involved-->
<tr>
<th align="right" NOWRAP>
<!--#if qualifier--><!--#var qualifier--><!--#/if--> Private: </th>
<td> <!--#if private--> <em>Yes</em> <!--#else--> No <!--#/if--> </td>
<!--#if item_private-->
<th align="right" valign="middle" NOWRAP> Item Private: </th>
<td valign="middle"> <!--#var item_private--> </td>
<!--#/if-->
</tr>
<!--#/if-->
</tr>
<!--#comment-->
<!--#if involved-->
<th align="right"> Correspondence: </th>
<td>
<!--#with "_(status = ((overdues.has_key('rsvp')
and ('red', '<em> Response Overdue </em>'))
or ((dues.has_key('rsvp')
and ('orange',
'<em> Response Due </em>')))
or ''),
last = ((statecond('msgfromrole', 'Requester', 0)
and 'Client last')
or
((statecond('msgfromrole', ['Supporter',
'TrackerOwner'], 0))
and 'Staff last')
or 'Quiet'))"-->
<!--#if "status is not ''"-->
<font color = "<!--#var "status[0]"-->">
<!-- Requester correspondence more recent than staff -->
<!--#var last--> </font> <!--#var "status[1]"-->
<!--#else-->
<!--#var last-->
<!--#/if-->
<!--#/with-->
</td>
</tr>
<!--#/if-->
<!--#/comment-->
</dtml-let>
=== Added File Products/TrackerBase/forms/issueSummaryRows.dtml ===
<!--#comment-->
This is the place to set the standard format for an issue summary
row, and the thing to use to generate them.
If 'doheader' is set, only the header is shown, otherwise only the
body is shown.
Convenience for displaying an issue synopsis as a bunch of <td>
columns.
It expects a list of issues to be displayed to be bound to
'elements', the number of elements in the list to be bound to
'totmatches', and the amount of elements in the previous batch
to be bound to 'numpriors'.
Binding 'summary_header_only' around a call here will emit
a table header of the field names, instead of the values.
<!--#/comment-->
<dtml-let staff="tracker_role('staff', REQUEST=REQUEST)">
<dtml-if doheader>
<tr BGCOLOR="#ccffcc" width="100%">
<th valign="top" align="center">
ID <br> <font color="gray"> # </font> </th>
<th valign="top" align="left">
Title <br> <font color="gray">Description</font> </th>
<th valign="top" align="center"> Request </th>
<th valign="top" align="center"> Last<br>Msg </th>
<th valign="top" align="center"> Stage </th>
<dtml-if staff>
<th valign="top" align="center"> Priority </th>
</dtml-if>
<th valign="top" align="center"> Traits </th>
</tr>
<dtml-else>
<dtml-in elements skip_unauthorized>
<dtml-let element="_['sequence-item']"
lastMsg="lastVisible(seq=this().values(), REQUEST=REQUEST)"
owners="_['sequence-item'].issueOwners()"
splitpoint="((4 < _.len(_['sequence-item'].traits) < 8)
and (_.len(_['sequence-item'].traits)
+ 1)/2 )
or 4"
descrcolspan="(((references or diverted) and 1) or 0)
+ ((staff and 5) or 4)"
refs="references and
hrefize(_.string.join(references, ', '),
complete=1, REQUEST=REQUEST)"
divref="diverted and
hrefize(diverted, complete=1,
REQUEST=REQUEST)[0]">
<tr <dtml-if sequence-odd> bgcolor="eeeeee" </dtml-if>>
<td align="center" NOWRAP>
<!--#var "elementEmblem(REQUEST=REQUEST)"-->
<dtml-if diverted>
<br> =>
</dtml-if>
</td>
<td NOWRAP> <a href="<!--#var absolute_url-->">
<dtml-var expr="double_line(title,35)"></a>
</td>
<td align="center" NOWRAP>
<dtml-var requester> <dtml-if subscribers>
(+<dtml-var "_.len(subscribers)">) </dtml-if>
<br>
<dtml-var "(date.isCurrentYear()
and (date.isCurrentDay()
and '%s %s %s' % (date.aMonth(), date.day(),
date.AMPMMinutes()))
or '%s %s' % (date.aMonth(), date.day()))
or date.aCommon()[:12]">
<dtml-comment> XXX instead, eg: date.strftime("%b %e %I:%M %P"))
BUT, %b, ..., get caught by dtml processing!
</dtml-comment>
</td>
<td align="center" NOWRAP>
<dtml-if lastMsg>
<dtml-var "lastMsg.elementEmblem(REQUEST=REQUEST)">
<dtml-if "lastMsg.date.Date() != date.Date()">
<br> <dtml-var "(lastMsg.date.isCurrentYear()
and '%s %s' % (lastMsg.date.aMonth(),
lastMsg.date.day()))
or lastMsg.date.aCommon()[:12]">
<dtml-comment> XXX See other XXX, above. </dtml-comment>
</dtml-if>
<dtml-else>
</dtml-if>
</td>
<td align="center" NOWRAP>
<dtml-with "_(overdues = this().audited_state.get('overdue', {}),
dues = this().audited_state.get('due', {}))">
<dtml-with "_(color = ((overdues.has_key('ownership') and 'red')
or (dues.has_key('ownership') and 'orange')
or ''))">
<dtml-if "color is not ''">
<font color = "<dtml-var color>">
</dtml-if>
<dtml-var stage capitalize>
<dtml-if "color is not ''"> </font> </dtml-if>
</dtml-with>
</dtml-with>
<dtml-if owners><br><dtml-var "_.string.join(owners, ', ')" size=10>
</dtml-if>
</td>
<dtml-if staff>
<td align="center">
<dtml-if "priority == 'normal'"> -
<dtml-else> <dtml-var priority> </dtml-if>
</td>
</dtml-if>
<td align="center" rowspan=2>
<!--#in traitVals-->
<!--#var sequence-item--><!--#if "not _['sequence-end']"-->,
<!--#/if-->
<!--#if "(_.divmod(_['sequence-index']+1, splitpoint)[1] == 0)
and (not _['sequence-end'])
and (not _['sequence-start'])"-->
<br>
<!--#/if-->
<!--#/in-->
</tr>
<dtml-if "diverted or references">
<tr <dtml-if sequence-odd> bgcolor="eeeeee" </dtml-if>>
<td> </td>
<td align="left" colspan=<dtml-if staff>5<dtml-else>4</dtml-if>>
<dtml-if diverted>
Diverted
<dtml-if divref> to <dtml-var divref>
<dtml-elif "refs[1]"> to <a href="<dtml-var "refs[1][0]">">
<dtml-var "refs[1][0]"></a>
<dtml-else> <dtml-var "refs[0]">
</dtml-if>
</dtml-if>
<dtml-if references>
<dtml-if divref> - </dtml-if>
References:
<dtml-var "hrefize(_.string.join(references, ', '),
complete=1, REQUEST=REQUEST)[0]">
</dtml-if>
</td>
</tr>
</dtml-if>
<tr <dtml-if sequence-odd> bgcolor="eeeeee" </dtml-if>>
<td align="left">
<font color="gray">
<dtml-var "numpriors + 1 + _['sequence-index']">/<dtml-var
totmatches> </font> </td>
<td align="left" colspan=<dtml-var descrcolspan>>
<font color="gray">
<dtml-if "element.description">
<dtml-var "element.description" size=70 fmt=html-quote>
<dtml-else> </dtml-if>
</font>
</td>
</tr>
</dtml-let>
</dtml-in>
</dtml-if>
</dtml-let>
=== Added File Products/TrackerBase/forms/item-attachments.dtml ===
<!--#comment-->
Enumerate all the attachments for the item, with icon/link format.
<!--#/comment-->
<dtml-in references>
<dtml-with "_(ized = hrefize(this(), _['sequence-item'], REQUEST=REQUEST)">
<dtml-if "ized[1] and ized[1][0].icon">
<A HREF="<dtml-var "ized[1][0].absolute_url()">">
<img src="<dtml-var SCRIPT_NAME>/<dtml-var "ized[1][0].icon">"
alt="<dtml-var "ized[1][0].meta_type">" border="0"></a>
</dtml-if>
<dtml-var "ized[0]">
</dtml-with>
</dtml-in>
<!--#in objectItems-->
<!--#if icon-->
<A HREF="<!--#var absolute_url-->">
<IMG SRC="<!--#var SCRIPT_NAME-->/<!--#var icon-->"
ALT="[<!--#var meta_type-->]" BORDER="0"></A>
<!--#/if icon-->
<!--#with "_(it = _['sequence-item'])"-->
<A HREF="<!--#var absolute_url-->"><!--#var title_or_id--></A>
<!--#/with-->
<!--#unless sequence-end-->, <!--#/unless-->
<!--#/in-->
=== Added File Products/TrackerBase/forms/item-index_html.dtml ===
Content-Type: text/HTML
<!--#comment-->
Multi-perspective home page for items. When visited without arguments, it
shows the current-item details and a form for followup in the thread, and
also a link to a form for starting a new thread in the issue.
That "starting a new thread" form is actually the same index_html, but it
doesn't show the section with the details of the current item, or any other
signs that there *is* a current item.
<!--#/comment-->
<!--#var standard_tracker_header-->
<dtml-let staff="tracker_role(this(), 'staff', REQUEST)"
observer="tracker_role(this(), 'observer', REQUEST)"
promoted="promotes()">
<table cellspacing=2 border=0>
<dtml-if "aq_parent.diverted">
<tr>
<dtml-with "_(refs = hrefize(this(), aq_parent.diverted,
REQUEST=REQUEST))">
<th align="right"> <font color="red"> => </font>
<dtml-if "refs[1]"> <dtml-var "refs[0]"> </dtml-if>
</th>
<th align="left" colspan=3 bgcolor="ffffcc">
This issue has been diverted to
<dtml-if "refs[1]">
<a href="<dtml-var "refs[1][0].absolute_url()">">
<dtml-var "refs[1][0].title"> </a>
<dtml-else>
<dtml-var "refs[0]">
</dtml-if>
</th>
</dtml-with>
</tr>
</dtml-if>
<!--#if newitem--> <!-- not newitem mode -->
<!--#else--> <!-- not newitem mode -->
<tr>
<td align="right"> <!--#if icon-->
<img src="<!--#var SCRIPT_NAME-->/<!--#var icon-->"
alt="<!--#var meta_type-->" border="0">
<!--#endif-->
</td>
<th colspan=3 align="left">
<a href="<dtml-var URL3>">
<img src="uparrow.gif" alt="" border="0"> </a>
<!--#var itemBanner--> of <dtml-var "aq_parent.length()">
</th>
</tr>
<tr>
<td> <hr> </td>
<th colspan=2 align="left" bgcolor="#ccffff">
<font size="+1"> Message Details </font>
</th>
<dtml-if "staff or observer">
<td align="center" bgcolor="#ccffff" NOWRAP>
<!--
(Reply <a href="#replyform"> below</a>)
-->
</td>
</dtml-if>
</tr>
<tr>
<th align="right" valign="center"> Subject: </th>
<td align="left" colspan=3>
<table bgcolor="#eeeeee"> <tr><td>
<!--#var title fmt=html-quote size=50--></b>
</td> </tr>
</table>
</td>
</tr>
<tr>
<th align="right" NOWRAP> From: </th>
<td align="left"> <!--#var from-->,
<!--#var date fmt=aCommon-->
</td>
<th align="right" NOWRAP> Action: </th>
<td> <!--#var msgrole capitalize-->
<dtml-if "(msgrole == 'reframe') and (id != reframed)">
(Overridden by
<dtml-var "elementEmblem(item_id=reframed, REQUEST=REQUEST)">)
</dtml-if>
</td>
</tr>
<!--#if "in_reply_to or (replies and replies[0])"-->
<tr>
<th align="right"> In reply to: </th>
<td>
<!--#if in_reply_to-->
<!--#var "elementEmblem(item_id=in_reply_to,
REQUEST=REQUEST)"-->
<!--#/if-->
</td>
<th align="right"> Replies: </th>
<td>
<!--#in replies--><!--#if sequence-item-->
<!--#var "elementEmblem(item_id=_['sequence-item'],
REQUEST=REQUEST)"-->
<!--#/if--><!--#/in-->
</td>
</tr>
<!--#/if-->
<form action="../setIssueState" name="change">
<!--#with "_(qualifier = 'Issue',
item_private = ((private and '<em>Yes</em>') or 'No'))"-->
<!--#with "aq_parent"-->
<!--#var issueStatusRows-->
<!--#/with-->
<!--#/with-->
</form>
<dtml-if "aq_explicit.references">
<tr>
<th align="right"> Item Refs: </th>
<td> <dtml-var "hrefize(this(), _.string.join(references, ', '),
complete=1, REQUEST=REQUEST)[0]">
</tr>
</dtml-if>
<!--#if objectItems-->
<tr>
<th align="right"> Attachments: </th>
<td colspan=3>
<!--#with "_(attachments_delimiter = '<br>')"-->
<!--#var attachments-->
<!--#/with-->
</td>
</tr>
<!--#/if-->
<tr>
<th align="right" valign="top"> Description: </th>
<td colspan=3 bgcolor="#eeeeee">
<code><dtml-var "html_quote_indented(description, do_hrefize=1,
REQUEST=REQUEST)">
</code>
</td>
</tr>
<tr>
<td> <hr> </td>
<th colspan=3 align="left" bgcolor="#ccffff"> </th>
</tr>
<form action="<dtml-var absolute_url>/specialItemKnobs" method="post">
<!--#if staff-->
<dtml-if "_.int(id) not in promoted">
<tr>
<td align="right">
<input type="radio" name="privacy" value="public"
<dtml-if "not private">CHECKED</dtml-if> >
<dtml-if "not private"><u>Public</u><dtml-else>Public</dtml-if>
<br>
<input type="radio" name="privacy" value="private"
<dtml-if private>CHECKED</dtml-if> >
<dtml-if private><u>Private</u><dtml-else>Private</dtml-if>
</td>
<td>
<input type="submit" name="privacy_only" value="Change">
<td colspan=3>
... to change the item privacy setting, alone.
</td>
</tr>
<tr>
<td align="right">
<select name="msgrole">
<!--#in msgroles-->
<dtml-if "_['sequence-item'] in ['note', 'reframe']">
<option
<!--#if "msgrole == _['sequence-item']"-->SELECTED<!--#/if--> >
<!--#var sequence-item--></option>
<!--#/if-->
<!--#/in--> </select>
</td>
<td>
<input type="submit" name="promoting" value="Promote">
<td colspan=3>
... to promote this item to the issue summary with the few
actions that don't change the issue state. (Visit
<a href="<dtml-var "aq_parent.absolute_url()">/editStateYikes">
here</a> for stage-altering actions.)
<!--#if private-->
<font color="red">NOTE</font> - to promote it you must
unset privacy.
<!--#/if-->
</td>
</tr>
<dtml-elif "_.int(id) != 1">
<tr>
<td> </td>
<td>
<input type="submit" name="promoting" value="Demote">
<td colspan=3>
This item is an issue summary '<!--#var msgrole-->' message.
You can demote it to only be part of the requester/staff
correspondence.
<dtml-if "_.str(id) == aq_parent.reframed">
(Note that demoting it will make the issue phrasing go back to
that of the request.)
</dtml-if>
</td>
</tr>
</dtml-if>
<!--#/if-->
</table>
<p> </p>
<dtml-if "staff or observer">
<center>
<table>
<tr>
<td width="45%" valign="left" align="center">
Followup to this message below...
</td>
<td align="center">
<strong> OR </strong>
</td>
<td width="45%" valign="center" align="center">
<a href="<dtml-var absolute_url>?newitem=1">
<dtml-if "aq_parent.stage not in ['resolved', 'rejected',
'diverted']">
Start a new thread</a> for this issue.
<dtml-else>
Supplement discussion</a> in this closed issue.
</dtml-if>
</td>
</tr>
</table>
</center>
</dtml-if>
</form>
<!--#/if-->
<a name="replyform"></a>
<dtml-if "staff or observer">
<dtml-if subscribers_may_post>
<dtml-var itemForm>
<dtml-else>
<em> (No subscriber posting in this
<dtml-if "this().aq_parent.aq_parent.subscribers_may_post">issue
<dtml-else>tracker</dtml-if>)
</em>
</dtml-if>
</dtml-if>
</dtml-let>
<!--#var standard_tracker_footer-->
=== Added File Products/TrackerBase/forms/itemBanner.dtml ===
<!--#comment-->
Handy presentation of the current item identifier - including links to
current tracker and issue
<!--#/comment-->
<!--#with "aq_parent"-->
<!--#with "aq_parent"--> <!--#comment--> Tracker. <!--#/comment-->
<!--#var "elementEmblem(REQUEST=REQUEST)"-->
<!--#/with-->
Issue
<!--#var "elementEmblem(REQUEST=REQUEST)"-->
<!--#/with-->
<dtml-unless newitem>
Item <!--#var "elementEmblem(nolink=1, REQUEST=REQUEST)"-->
</dtml-unless>
=== Added File Products/TrackerBase/forms/itemForm.dtml ===
<dtml-comment> Tracker item itemForm </dtml-comment>
<form action="<!--#var "aq_parent.absolute_url()"-->/addIssueItem"
ENCTYPE="multipart/form-data"
method="post">
<input type="hidden" name="fromurl" value="<!--#var "REQUEST.URL0"-->">
<dtml-let staff="tracker_role(this(), 'staff', REQUEST)"
involved="tracker_role(this(), 'involved', REQUEST)"
observer="tracker_role(this(), 'observer', REQUEST)"
iowners="issueOwners()">
<!--#if newitem--> <!-- not newitem mode -->
<!--#else--> <!-- not newitem mode -->
<input type="hidden" name="in_reply_to" value="<!--#var id-->">
<!--#/if-->
<table cellspacing="2" border="0">
<dtml-if newitem>
<tr>
<td align="right"> <!--#if icon-->
<img src="<!--#var SCRIPT_NAME-->/<!--#var icon-->"
alt="<!--#var meta_type-->" border="0">
<!--#endif-->
</td>
<th colspan=3 align="left"> <!--#var itemBanner-->
<i> <dtml-var title fmt=html-quote size=40> </i>
</th>
</th>
</tr>
</dtml-if>
<dtml-if "aq_parent.stage not in ['pending', 'accepted', 'deferred']">
<tr>
<th>
<font color="red" size="+1">Note!</font>
</th>
<th align="left">
This item is closed.
Further correspondence may be unwelcome - <br> consider <a
href="<!--#var "this().aq_parent.aq_parent.submitIssueForm.absolute_url()"-->"
>submitting a new issue</a> instead.
</th>
</tr>
<tr> <td> </td> </tr>
</dtml-if>
<tr>
<td valign="top"> <hr> </td>
<td colspan=3 bgcolor="#ffffcc" align="center">
<font size="+1"> <strong>
<!--#if newitem-->
New Item
<!--#else-->
Reply Form
<!--#/if-->
</strong> </font>
</td>
</tr>
<tr>
<th align="right" valign="middle" bgcolor="eeeeee">Subject:</th>
<td align="left" valign="top" colspan=3>
<input type="text" name="title:string" size="30"
<!--#unless newitem-->
<!--#if title-->value="<!--#if
"_.string.find(_.string.lower(title), 're:') == -1"-->Re: <!--#/if
--><!--#var title html_quote-->"<!--#/if--><!--#/unless-->>
<!--#if staff-->
<input type="checkbox" name="private:boolean"
> Staff eyes only?
<a target="help"
href="HelpSupporter#staffEyes">(details)</a>
<!--#/if-->
</tr>
<tr>
<td align="right" valign="middle" bgcolor="#eeeeee">
<strong>From:</strong>
<br> <a target="help"
href="HelpTrackerOverview#altreqid">(details)</a>
</td>
<td> <font size="+1"><dtml-var "REQUEST.AUTHENTICATED_USER">:</font>
<input type="hidden" name="from"
value="<dtml-var "`REQUEST.AUTHENTICATED_USER`">">
<dtml-let user="REQUEST.AUTHENTICATED_USER"
alt_full_name="alt_full_names and alt_full_names.get(`user`, '')"
alt_email="alt_emails and alt_emails.get(`user`, '')"
full_name="(alt_full_name or
(_.hasattr(user, 'full_name') and user.full_name)
or '')"
email="(alt_email
or (_.hasattr(user, 'email') and user.email)
or '')">
Full Name: <input type="text" size=15 name="alt_full_name"
value="<dtml-var full_name>">
Email: <input type="text" size=20 name="alt_email"
value="<dtml-var email>">
</dtml-let>
</td>
</tr>
<dtml-if "staff or observer">
<tr>
<td align="right" valign="middle" bgcolor="eeeeee">
<strong>Action:</strong>
<br> <a target="help"
href=<dtml-if staff>"HelpSupporter#actions"<dtml-else
>"HelpTrackerOverview#followacts"</dtml-if>>(details)</a>
</th>
<td colspan=5>
<dtml-if staff>
<dtml-comment> *** Supporter Action Options *** </dtml-comment>
<dtml-in msgroles>
<dtml-let message=sequence-item
stage="aq_parent.stage">
<dtml-if "message == 'request'">
<dtml-comment> 'request' is never overt -
always implicit in request
submission.
</dtml-comment>
<dtml-elif "message == 'correspond'">
<dtml-comment> Plain corresondence is
always an option.
</dtml-comment>
<input type="radio" name="msgrole" value="correspond" CHECKED
>Plain
<dtml-elif "message == 'accept'">
<dtml-comment> Can only 'accept' from active or
deferred stages. It's 'kibitzing'
when there's already an owner.
It's also "reactivating" when done
from deferred stage.
</dtml-comment>
<dtml-let isowner="`REQUEST.AUTHENTICATED_USER` in iowners">
<dtml-if "(stage == 'pending')
or (stage == 'accepted' and not isowner)">
<input type="radio" name="msgrole" value="accept">
Accept
<dtml-elif "stage == 'deferred'">
<input type="radio" name="msgrole" value="accept">
<dtml-if iowners>
Reactivate<dtml-if "not isowner">/Kibitz</dtml-if>
<dtml-else> Accept </dtml-if>
</dtml-if>
</dtml-let>
<dtml-elif "message == 'subscribe'">
<dtml-comment> Can 'subscribe' when not involved.
</dtml-comment>
<dtml-if "not observer">
<input type="radio" name="msgrole" value="subscribe"
>Subscribe
</dtml-if>
<dtml-elif "message == 'defer'">
<dtml-comment> Can 'defer' anytime it's not
already deferred.
</dtml-comment>
<dtml-if "stage != 'deferred'">
<input type="radio" name="msgrole" value="defer"
>Defer
</dtml-if>
<dtml-elif "message == 'resign'">
<dtml-comment> Can 'resign' when an owner and
there is at least one other.
</dtml-comment>
<dtml-if "involved and staff and (_.len(iowners) > 1)">
<input type="radio" name="msgrole" value="resign"
>Resign
</dtml-if>
<dtml-elif "message in ['resolve', 'reject']">
<dtml-comment> Can complete (besides divert) when
issue is pending, or it's active
and you're an owner.
</dtml-comment>
<dtml-if "(stage == 'pending')
or ((stage == 'accepted') and involved)">
<input type="radio" name="msgrole"
value=<dtml-var sequence-item>
><dtml-var sequence-item capitalize>
<!--#/if-->
<dtml-else>
<dtml-comment> Anything else is fair game.
</dtml-comment>
<input type="radio" name="msgrole"
value=<!--#var sequence-item-->
><dtml-var sequence-item capitalize>
</dtml-if>
</dtml-let message=sequence-item>
</dtml-in>
<br> (<input type="checkbox" name="no_post:boolean">
But don't post to summary, even if non-plain?)
<dtml-else>
<input type="radio" name="msgrole" value="correspond"
CHECKED>Plain
<input type="radio" name="msgrole" value="note">Note
<dtml-if "(stage == 'pending')
and tracker_role(this(), 'Requester', REQUEST=REQUEST)">
<input type="radio" name="msgrole" value="reject">Cancel
</dtml-if>
</dtml-if>
</td>
</tr>
</dtml-if>
<tr>
<td valign="top"> <hr> </td>
</tr>
<tr>
<th align="right" valign="top" bgcolor="eeeeee">Description:</th>
<td align="left" valign="top" colspan=3>
<textarea name="description:text" rows=10 cols=60><!--#if
newitem--><!--#elif description-->
On <!--#var date fmt=aCommon-->, <!--#var from--> wrote:
<!--#in "_.string.split(description, '\n')"-->
> <!--#var sequence-item html_quote-->
<!--#/in--><!--#/if--></textarea>
</td>
</tr>
<tr>
<th align="right" valign="top" bgcolor="#eeeeee"> Signature: </th>
<td align="left" valign="top" COLSPAN=3>
<table>
<tr>
<td>
<dtml-let sig="trackerpref(pref='signature', default='',
REQUEST=REQUEST)"
formed="(sig and (sig[0] == '\n') and ' ' + sig)
or sig">
<textarea name="signature:text" rows=2 cols=40><dtml-var
formed></textarea>
</dtml-let>
</td>
<td> (<input type="checkbox" name="retainsig">
Retain as personal default.)
</td>
</tr>
</table>
</td>
</tr>
<tr>
<th valign="top" align="right"> <hr> </th>
</tr>
<!--#with "_(slots = 2)"-->
<!--#var attachmentsFormRow-->
<!--#/with-->
<tr>
<td valign="top"><hr></td>
<td colspan=3 bgcolor="#ffffcc"> </td>
</tr>
<tr>
<td></td>
<td> <input type="submit"
<!--#if newitem-->
value="Submit New Message"
<!--#else-->
value="Submit Reply"
<!--#/if-->
>
<input type="reset" value="Reset">
</td>
</tr>
</table>
</form>
</dtml-let>
=== Added File Products/TrackerBase/forms/itemIssueView ===
<!--#call "RESPONSE.redirect(aq_parent.absolute_url())"-->
=== Added File Products/TrackerBase/forms/itemIssuesIndexView.dtml ===
<!--#call "RESPONSE.redirect(URL2)"-->
=== Added File Products/TrackerBase/forms/itemSubmitNewIssue.dtml ===
<!--#call "RESPONSE.redirect(URL3 + '/submitIssueForm')"-->
=== Added File Products/TrackerBase/forms/itemSummaryRows.dtml ===
<!--#comment-->
This is the place to set the standard format for an item summary
row, and the thing to use to generate them.
Convenience for displaying an item synopsis as a bunch of <td>
columns. It expects the current item to be bound to 'element',
and binding 'summary_header_only' around a call here will emit
a table header of the field names, instead of the values.
<!--#/comment-->
<tr BGCOLOR="#ccffff" width="100%">
<th valign="bottom" align="center"> ID </th>
<th valign="bottom" align="left" NOWRAP>
Title / <br> <font color="gray">Description
( / Incidentals ) </font> </th>
<th valign="bottom" align="center"> Date </th>
<th valign="bottom" align="center"> Action </th>
<th valign="bottom" align="center"> From </th>
<th valign="bottom" align="center"> Re </th>
<th valign="bottom" align="center"> Replies </th>
</tr>
<dtml-in elements>
<dtml-with expr="_(element = _['sequence-item'])">
<tr>
<td> <!--#var "element.elementEmblem(REQUEST=REQUEST)"--> </td>
<td NOWRAP> <a href="<!--#var absolute_url-->">
<!--#var title fmt=html-quote size=30--></a>
<dtml-if references>
<br>
Refs: <dtml-var "hrefize(this(),
_.string.join(references, ', '),
complete=1,
REQUEST=REQUEST)[0]">
</dtml-if>
</td>
<td align="center" NOWRAP>
<!--#var "((date.isCurrentDay() and date.AMPMMinutes())
or (date.isCurrentYear() and
'%s %s %s' % (date.aMonth(), date.day(),
date.AMPMMinutes()))
or date.aCommon())"-->
</td>
<td align="center"> <!--#if "element.msgrole != 'correspond'"-->
<!--#var "element.msgrole"--> <!--#/if-->
</td>
<td align="center"> <dtml-var from> </td>
<td align="left">
<dtml-var "elementEmblem(item_id=element.in_reply_to,
REQUEST=REQUEST)">
</td>
<td>
<dtml-in replies skip_unauthorized>
<dtml-if "_['sequence-item']">
<dtml-var "elementEmblem(item_id=_['sequence-item'],
REQUEST=REQUEST)">
</dtml-if>
</dtml-in>
</td>
</tr>
<tr>
<td> </td>
<td align="left" colspan=5>
<font color="gray">
<dtml-var "element.description" size=100 fmt=html-quote>
</font>
</td>
</tr>
<dtml-if "(objectItems or references)">
<tr>
<td> </td>
<td align=left colspan=5>
<dtml-var attachments>
</td>
</tr>
</dtml-if>
</dtml-with>
</dtml-in>
=== Added File Products/TrackerBase/forms/login.dtml ===
<dtml-var relogin>
<dtml-if "REQUEST.get('HTTP_REFERER', '') !=
''">
<dtml-call "RESPONSE.redirect(REQUEST.get('HTTP_REFERER'))">
<dtml-else>
<dtml-call "RESPONSE.redirect(URL1)">
</dtml-if>
=== Added File Products/TrackerBase/forms/relogin.dtml ===
<!--#comment-->
Call this from other methods to force user reauthentication before
redirecting back to the calling script.
(This script leaves traces before raising "Unauthorized" so that it
recognizes the return after the authentication, and avoids repeating.
At that point the cookie used to recognize the return is removed,
enabling the process for the next invocation.)
<!--#/comment-->
<!--#var "REQUEST.AUTHENTICATED_USER" html_quote-->
<!--#if "(REQUEST.cookies.has_key('relogin')
and (not _.hasattr(REQUEST.cookies['relogin'],'has_key')
or not REQUEST.cookies['relogin'].has_key('value')
or (REQUEST.cookies['relogin']['value'] != 'deleted')))"-->
<!--#call "REQUEST.RESPONSE.expireCookie('relogin')"-->
<!--#else-->
<dtml-call "REQUEST.RESPONSE.setCookie('relogin', 1,
expires=(ZopeTime('GMT')
+(1.0/(24*60))).rfc822())">
<!--#call "REQUEST.RESPONSE.expireCookie('__ac', path='/')"-->
(Interim - the raise value only shows when the user login fails.)
<!--#raise Unauthorized-->
Refresh this page to get the login prompt.
<!--#/raise-->
<!--#/if-->
=== Added File Products/TrackerBase/forms/searchFormComplex.dtml ===
<table width="100%">
<tr>
<td BGCOLOR="#ffffcc" align="center" colspan=5>
<strong> Advanced Issues Search </strong>
<a target="Help" href="HelpTrackerOverview#search">(details)</a>
</td>
</tr>
<tr>
<td align="center" valign="middle">
<table> <tr> <td align="left">
<td align="left"> <strong> Title/Description </strong>
<a target="Help" href="HelpTrackerOverview#textquery">
(details)</a> <br>
<input type="text" name="any:string" size=35
<!--#if "REQUEST.get('any', '')"-->
value="<!--#var "REQUEST.get('any')"-->"
<!--#/if-->>
</table>
</td>
<td align="center" valign="top"> <strong> Stage </strong> <br>
<select name="stage:list" multiple size="3">
<dtml-in "fieldValuesRange(this(), 'stage',
precedence=stage_range,
include=['pending', 'accepted'])">
<option value="<!--#var sequence-item-->"
<!--#if "_['sequence-item'] in
REQUEST.get('stage', [])"-->
selected <!--#/if-->>
<!--#var sequence-item--></option>
<!--#/in-->
</select>
</td>
<td align="center" valign="top">
<dtml-with "_(requesters = fieldValuesRange(this(),
'requester'))">
<strong>Requester</strong> <br>
<select name="requester:list" multiple
size="<dtml-var
"_.min(3, _.max(1, _.len(requesters)))">">
<!--#in requesters-->
<option <!--#if "_['sequence-item'] in
REQUEST.get('requester',[])"-->
selected<!--#/if-->>
<!--#var sequence-item--></option>
<!--#/in-->
</select>
</dtml-with>
</td>
<td align="center" valign="top">
<dtml-with "_(iowners = fieldValuesRange(this(), 'issueOwners'))">
<strong>Supporter</strong> <br>
<select name="supporter:list" multiple
size="<!--#var
"_.min(3, _.max(1, _.len(iowners)))"-->">
<!--#in iowners-->
<option <!--#if "_['sequence-item'] in
REQUEST.get('supporter',[])"-->
selected<!--#/if-->>
<!--#var sequence-item--></option>
<!--#/in-->
</select>
</dtml-with>
</td>
<dtml-if "tracker_role(this(), 'staff', REQUEST)">
<td align="center" valign="top">
<strong>Priority</strong> <br>
<dtml-with "_(priorities = fieldValuesRange(this(), 'priority',
precedence=priority_range))">
<select name="priority:list" multiple
size="<!--#var
"_.min(3, _.max(1, _.len(priorities)))"-->">
<!--#in priorities-->
<option <dtml-if "_['sequence-item'] in REQUEST.get('priority',[])">
selected<!--#/if-->>
<!--#var sequence-item--></option>
<!--#/in-->
</select>
</dtml-with>
</td>
</dtml-if>
</tr>
<tr>
<td valign="center" align="center" COLSPAN=2>
<strong>Issue activity</strong>
<a target="Help" href="HelpTrackerOverview#datesearch">
(details)</a>
<dtml-with "_(
untilinit = ((REQUEST.get('until_date', 0)
and ZopeTime(REQUEST.get('until_date'))
or ZopeTime())),
sinceinit = ((REQUEST.get('since_date', 0)
and ZopeTime(REQUEST.get('since_date'))
or ZopeTime())))">
<br>
<table>
<tr>
<td NOWRAP>
<strong>Since:</strong>
<input type="checkbox" name="since_active"
value="ON" <dtml-if
"REQUEST.get('since_active', 0)">
CHECKED </dtml-if>>
<dtml-var "date_widget(this(), REQUEST=REQUEST,
initial_date = sinceinit,
month_var = 'since_month',
day_var = 'since_day',
year_var = 'since_year')">
</td>
</tr>
<tr>
<td NOWRAP>
<strong>Until:</strong>
<input type="checkbox" name="until_active"
value="ON" <dtml-if
"REQUEST.get('until_active', 0)">
CHECKED </dtml-if>>
<dtml-var "date_widget(this(), REQUEST=REQUEST,
initial_date = untilinit,
month_var = 'until_month',
day_var = 'until_day',
year_var = 'until_year')">
</td>
</tr>
</table>
</dtml-with>
</td>
<td align="center" valign="middle">
<table>
<tr>
<th rowspan=2 valign="middle"> Access: </th>
<td> <input type="checkbox" name="public:boolean" VALUE="ON"
<dtml-if "(REQUEST.get('public', 'ON') == 'ON')">
CHECKED </dtml-if>> Public </td>
</tr>
<td> <input type="checkbox" name="private:boolean" VALUE="ON"
<dtml-if "(REQUEST.get('private', 'ON') == 'ON')">
CHECKED </dtml-if>> Private </td>
</tr>
</table>
</td>
<td NOWRAP>
<table> <tr> <td NOWRAP>
</tr> <tr> <td NOWRAP>
</table>
</td>
</tr>
<tr>
<td colspan=5 align="center">
<table width="80%" border=1>
<tr>
<th align="center" valign="middle"> Issue Traits: </th>
<!--#with "_(splitpoint = (((4 < _.len(traits) < 8)
and (_.len(traits)+1)/2) or 4))"-->
<!--#in traits-->
<!--#with "_(val_nm = _['sequence-item'])"-->
<td align="center">
<strong> <!--#var val_nm capitalize--> </strong> <br>
<select name="refine_trait_<!--#var val_nm-->:list"
multiple size=3>
<!--#in "traitsStruct[val_nm+'_range'][1]"-->
<option <!--#if "REQUEST.get('refine_traits', '') == ()
or (_['sequence-item'] in
REQUEST.get('refine_trait_' + val_nm,
[]))"-->SELECTED<!--#/if-->>
<!--#var "_['sequence-item']"--></option>
<!--#/in-->
</select>
</td>
<!--#if "(_.divmod(_['sequence-index']+1, splitpoint)[1] == 0)
and (not _['sequence-end'])
and (not _['sequence-start'])"-->
</tr>
<tr>
<!--#/if-->
<!--#/with-->
<!--#/in-->
<!--#/with-->
</tr>
</table>
</td>
</tr>
</table>
=== Added File Products/TrackerBase/forms/searchFormSimple.dtml ===
<dtml-with "_(staff = tracker_role(this(), 'staff', REQUEST))">
<table width="100%" border=0>
<tr BGCOLOR="#ffffcc">
<td align="center" colspan=5> <strong>Issues Search</strong>
<a target="Help" href="HelpTrackerOverview#search">(details)</a>
</td>
</tr>
<tr valign="top">
<td align="center"> <table> <tr> <td align="left">
<strong>Title/Description </strong>
<a target="Help" href="HelpTrackerOverview#textquery">
(details)</a> <br>
<input type="text" name="any:string" size=30
<!--#if "REQUEST.get('any', '')"-->
value="<!--#var "REQUEST.get('any')"-->"
<!--#/if-->>
</td> </tr> </table>
</td>
<td align="center" valign="top">
<strong>Stage</strong> <br>
<select name="stage:list" multiple size="3">
<dtml-in "fieldValuesRange(this(), 'stage',
precedence=stage_range,
include=['pending', 'accepted'])">
<option value="<!--#var sequence-item-->"
<!--#if "_['sequence-item'] in
REQUEST.get('stage', [])"-->
selected <!--#/if-->>
<!--#var sequence-item--></option>
<!--#/in-->
</select>
</td>
<td align="center" valign="top">
<strong>Requester</strong> <br>
<dtml-with "_(requesters = fieldValuesRange(this(),
'requester'))">
<select name="requester:list" multiple
size="<dtml-var
"_.min(3, _.max(1, _.len(requesters)))">">
<!--#in requesters-->
<option <!--#if "_['sequence-item'] in
REQUEST.get('requester',[])"-->
selected<!--#/if-->>
<!--#var sequence-item--></option>
<!--#/in-->
</select>
</dtml-with>
</td>
<dtml-if staff>
<td align="center">
<dtml-with "_(iowners = fieldValuesRange(this(), 'issueOwners'))">
<strong>Supporter</strong> <br>
<select name="supporter:list" multiple
size="<!--#var
"_.min(3, _.max(1, _.len(iowners)))"-->">
<!--#in iowners-->
<option <!--#if "_['sequence-item'] in
REQUEST.get('supporter',[])"-->
selected<!--#/if-->>
<!--#var sequence-item--></option>
<!--#/in-->
</select>
</dtml-with>
</td>
<td align="center" valign="top">
<strong>Priority</strong> <br>
<dtml-with "_(priorities = fieldValuesRange(this(), 'priority',
precedence=priority_range))">
<select name="priority:list" multiple
size="<!--#var
"_.min(3, _.max(1, _.len(priorities)))"-->">
<!--#in priorities-->
<option <dtml-if "_['sequence-item'] in REQUEST.get('priority',[])">
selected<!--#/if-->>
<!--#var sequence-item--></option>
<!--#/in-->
</select>
</dtml-with>
</td>
</dtml-if>
</tr>
</table>
<!--#/with-->
=== Added File Products/TrackerBase/forms/setIssueState.dtml ===
<!--#var standard_tracker_header-->
<!--#call "REQUEST.set('changed', ZopeTime())"-->
<!-- Post state changes -->
<!--#with "_(result = reconcileState(this(), REQUEST))"-->
<!--#if result-->
<!--#raise redirect--><!--#var
"_.string.split(REQUEST.get('HTTP_REFERER', URL1), '?', 1)[0]"
-->?manage_tabs_message=<!--#var
"('<font color=red>Changes abandoned: <strong>%s</strong></font>'
% _.str(result[0][1]))" url_quote--><!--#/raise-->
<!--#/if-->
<!--#/with-->
<dtml-comment>
XXX We don't currently participate right in site findability! The
following old call isn't right, but holds the place for when we get the
right thing.
!--#call "propertysheets.Findables.manage_changeProperties(REQUEST)"
</dtml-comment>
<!--#if "REQUEST.get('private', '')"-->
<!--#call "set_privacy(this(), 1, 1)"-->
<!--#else-->
<!--#call "set_privacy(this(), 0, 1)"-->
<!--#/if-->
<dtml-call "recatalogElement(this(), REQUEST=REQUEST)">
<!--#if "REQUEST.get('HTTP_REFERER', '') != ''"-->
<dtml-if "_.string.split(REQUEST.get('HTTP_REFERER', ''), '/')[-1]
== 'editStateYikes'">
<dtml-call "RESPONSE.redirect(URL1)">
<dtml-else>
<!--#call "RESPONSE.redirect(_.string.split(REQUEST.get('HTTP_REFERER'),
'?', 1)[0]
+ '?manage_tabs_message=Changed')"-->
</dtml-if>
<!--#else-->
<!--#call "RESPONSE.redirect(URL1)"-->
<!--#/if-->
<!--#var standard_tracker_footer-->
=== Added File Products/TrackerBase/forms/standard_tracker_footer.dtml ===
<p align="right">
<!--#if "REQUEST.AUTHENTICATED_USER"-->
<!--#var "`REQUEST.AUTHENTICATED_USER`" html_quote-->
(<a href="login">Re-login</a>)
<!--#/if-->
<br>
<!--#var standard_html_footer-->
=== Added File Products/TrackerBase/forms/standard_tracker_header.dtml ===
<!--#var standard_html_header-->
<dtml-with "_(MANAGE_TABS_NO_BANNER = 1)">
<!--#var manage_tabs-->
</dtml-with>
=== Added File Products/TrackerBase/forms/submitIssueForm.dtml ===
<!--#var standard_tracker_header-->
<dtml-if "(access_mode == 'dedicated')
and quota_stats(this(), 'remaining') <= 0">
<table>
<tr>
<td> <hr> </td>
<th align="left">
<font size="+1">Service Contract Exhausted</font>
</th>
<tr>
<td> </td>
<td align="left"> Please contact your
<a href="mailto:<dtml-var adminaddr>">tracker administrator</a> for
further info.
</td>
</tr>
</table>
<dtml-else>
<dtml-if "tracker_role(this(), 'anonymous', REQUEST=REQUEST)">
<p> <font color="red">NOTE</font> - You are using the Anonymous User account,
which means you don't have a verified identity. Since the anonymous
account is unregulated, the support staff cannot reliably identify who
they're dealing with, so we will not be able to offer you the ability to
post followups to your issue, or submit attachments with your request. To
have these capabilities you must login.</p>
<p> <a href="login">Click here</a> to login.</p>
<p><hr></p>
<p><hr></p>
<p><hr></p>
<p><hr></p>
<p><hr></p>
<p><hr></p>
<p><hr></p>
</dtml-if>
<form action="<dtml-var "this().absolute_url()">/addTrackerIssue"
ENCTYPE="multipart/form-data" method="POST">
<input type="hidden" name="msgrole" value="request">
<table cellspacing="2" border="0">
<tr>
<td align="right">
<dtml-if icon>
<img src="<!--#var SCRIPT_NAME-->/<!--#var icon-->"
alt="<!--#var meta_type-->" border="0">
<dtml-else>
</dtml-if>
</td>
<th align="left">
<font size=+1>
<!--#if title--> <!--#var title--> <!--#/if-->Issue Tracker
</font>
</th>
</tr>
<tr>
<td valign="top"> <hr> </td>
<td colspan=2 bgcolor="#ccffcc">
<strong> <font size=+1> Submit a New Issue </font> </strong>
<a target="help"
href="HelpTrackerOverview#submitting">(details)</a>
</td>
</tr>
<tr>
<th align="right" valign="middle" bgcolor="#eeeeee">Subject:</th>
<td align="left" valign="top" COLSPAN=3>
<input type="text" name="title:string" size="40">
<dtml-if "tracker_role(this(), 'anonymous', REQUEST=REQUEST)">
<input type="hidden" name="confidential:boolean">
<dtml-else>
<input type="checkbox" name="confidential:boolean" size="35"
<!--#if private-->CHECKED<!--#/if-->>
<strong>Confidential?</strong>
</dtml-if>
</td>
</tr>
<tr>
<td align="right" valign="middle" bgcolor="#eeeeee">
<strong>From:</strong>
</td>
<td> <font size="+1"><!--#var "REQUEST.AUTHENTICATED_USER"--> </font>
<input type="hidden" name="from"
value="<!--#var "`REQUEST.AUTHENTICATED_USER`"-->">
<dtml-let user="REQUEST.AUTHENTICATED_USER"
full_name="(_.hasattr(user, 'full_name')
and user.full_name)
or ''"
email="(_.hasattr(user, 'email') and user.email)
or ''">
- Name: <input type="text" size=15 name="alt_full_name"
value="<dtml-var full_name>">
Email: <input type="text" size=20 name="alt_email"
value="<dtml-var email>">
</dtml-let>
<dtml-if "tracker_role(this(), 'anonymous', REQUEST=REQUEST)">
<br> (... anonymous can't post followups)
</dtml-if>
</td>
</tr>
<tr>
<td valign="top"> <hr> </td>
</tr>
<tr>
<th align="right" valign="middle" bgcolor="#eeeeee">Traits:</th>
<td>
<table>
<!--#in traits-->
<!--#if "_['sequence-start'] or _['sequence-even']"-->
<tr>
<!--#/if-->
<!--#with "_(valname = _['sequence-item'],
vals = traitsStruct[_['sequence-item']+
'_range'][1])"-->
<th align="right"> <!--#var valname capitalize-->:
</th>
<td align="left">
<select name="<!--#var valname-->__trait:string">
<!--#in vals-->
<option><!--#var sequence-item html_quote--></option>
<!--#/in--></select>
</td>
<!--#/with-->
<!--#if "_['sequence-end'] or _['sequence-odd']"-->
</tr>
<!--#/if-->
<!--#/in-->
</table>
</td>
</tr>
<tr>
<td valign="top"> <hr> </td>
</tr>
<tr>
<th align="left" valign="top" bgcolor="#eeeeee"> Description: </th>
<td align="left" valign="top" COLSPAN=3>
<textarea name="description:text" rows=10 cols=60></textarea>
</td>
</tr>
<tr>
<th align="left" valign="top" bgcolor="#eeeeee"> Signature: </th>
<td align="left" valign="top" COLSPAN=3>
<table>
<tr>
<td>
<dtml-let sig="trackerpref(pref='signature', default='',
REQUEST=REQUEST)"
formed="(sig and (sig[0] == '\n') and ' ' + sig)
or sig">
<textarea name="signature:text" rows=2 cols=40><dtml-var
formed></textarea>
</dtml-let>
</td>
<td> <dtml-unless "tracker_role(this(), ['Anonymous User',
'superuser'], REQUEST)">
(<input type="checkbox" name="retainsig">
Retain as personal default.)
</dtml-unless>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td valign="top"> <hr> </td>
</tr>
<!--#with "_(slots = 2)"-->
<!--#var attachmentsFormRow-->
<!--#/with-->
<tr>
<td valign="top"><hr></td>
<td colspan=3 bgcolor="#ccffcc"> </td>
</tr>
<tr>
<td valign="center"> </td>
<td colspan=3>
<input type="submit" value="Submit">
<input type="reset" value="Reset">
</td>
</tr>
</table>
</form>
<!--#var standard_tracker_footer-->
</dtml-if>
More information about the zopeorg-checkins
mailing list