[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">
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        <dtml-if icon>
          <img src="<!--#var SCRIPT_NAME-->/<!--#var icon-->" 
               alt="<!--#var meta_type-->" border="0">
        <dtml-else>
          &nbsp;
        </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>&lt;<dtml-var got>&gt;</dtml-if>
</dtml-let>

</dtml-in></textarea> </a>
        <br> <input type="submit" value="Submit peer changes...">
             &nbsp; <input type="reset" value="Reset...">
           </form>
      </td>
    </tr>
    <tr>
      <td> &nbsp; </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> &nbsp; </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> &nbsp; </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> =&gt; <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> &nbsp; </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> &nbsp; </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> &nbsp; </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> &nbsp; </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> &nbsp; </td>
    </tr>
    <tr>
      <td> &nbsp; </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 -
          &lt;Invert&gt;. Selecting &lt;Invert&gt; 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 -
          &lt;Invert&gt;. Selecting &lt;Invert&gt; 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>&nbsp;</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>&nbsp;&nbsp;&nbsp; </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>&nbsp;&nbsp;&nbsp; </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"> &nbsp; </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>&lt;Invert&gt;</em>.  Selecting <em>&lt;Invert&gt;</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-->> &lt;Invert&gt; </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-->> &lt;Invert&gt; </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"> &nbsp; </td>
        </tr>
        <tr>
          <td> </td>
          <td colspan=5>  <input type="SUBMIT" value="Submit Assignments">
                &nbsp; <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> &nbsp; </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> >&nbsp;
              <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> >&nbsp;
            <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> &nbsp; </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> &nbsp; </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> &nbsp; </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&nbsp;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"> &nbsp; </td>
        </tr>
	<tr>
          <td> &nbsp; </td>
          <td>
	    <input type="submit" value="Submit ..."> &nbsp; 
            <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> &nbsp; </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> &nbsp; </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> &nbsp; </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"> &nbsp; </td>
        </tr>
	<tr>
          <td> &nbsp; </td>
          <td colspan=3>
	    <input type="SUBMIT" name="traitvalues"
                   value="Submit Values ..."> &nbsp;
            <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> &nbsp; </th>
      <td> 
        <input type="SUBMIT" name="Submit" value="Submit"> &nbsp;
        <input type=reset value=" Reset ">
      </td>
    </tr>
    <tr>
      <th> &nbsp; </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> &nbsp; </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> &nbsp; </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"> &nbsp; </th>
      </tr>
<form action="reattrs">
    <tr>
      <th> &nbsp; </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> &nbsp; </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> &nbsp; </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> &nbsp; </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-->
       &nbsp;
    <!--#/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">
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      <dtml-if icon>
        <img src="<!--#var SCRIPT_NAME-->/<!--#var icon-->" 
             alt="<!--#var meta_type-->" border="0">
      <dtml-else>
        &nbsp;
      </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> &nbsp; </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> &nbsp; </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> &nbsp; </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> &nbsp; </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="&lt;&lt;&lt; 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 &gt;&gt;&gt;">
                </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"> &nbsp;
    <input type="reset" value="Reset Form"> &nbsp;
 <!--#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"> =&gt; </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> &nbsp; </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> &nbsp; </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>
           &nbsp;
           <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>
           &nbsp;
           <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> &nbsp; </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>
           &nbsp;
           <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> &nbsp; </td>
        <td> <input type="submit" value="Submit"> &nbsp; 
             <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">
                =&gt; <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> =&gt;
            </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> &nbsp;
            </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> &nbsp; </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> &nbsp; </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"> =&gt; </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>
          &nbsp;
         <!--
           (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"> &nbsp; </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> &nbsp; </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> &nbsp; </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 '')">
                 &nbsp;&nbsp;
                   Full Name: <input type="text" size=15 name="alt_full_name"
                                     value="<dtml-var full_name>">
                 &nbsp;&nbsp;
                   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')"-->
&gt; <!--#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"> &nbsp; </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> &nbsp; </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> &nbsp; </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> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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>
              &nbsp;
            </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>">
                   &nbsp;&nbsp;
                     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"> &nbsp; </td>
       </tr>
       <tr>
         <td valign="center"> &nbsp; </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