@@ -29,9 +29,9 @@
#include <assert.h>
/*
** Main sub-menu for configuring the ticketing system.
-** WEBPAGE: /tktsetup
+** WEBPAGE: tktsetup
*/
void tktsetup_page(void){
login_check_credentials();
if( !g.okSetup ){
@@ -38,7 +38,417 @@
login_needed();
}
style_header("Ticket Setup");
- @ <i>TBD...</i>
+ @ <table border="0" cellspacing="20">
+ setup_menu_entry("Table", "tktsetup_tab",
+ "Specify the schema of the \"ticket\" table in the database.");
+ setup_menu_entry("Common", "tktsetup_com",
+ "Common TH1 code run before all ticket processing.");
+ setup_menu_entry("New Ticket Page", "tktsetup_newpage",
+ "HTML with embedded TH1 code for the \"new ticket\" webpage.");
+ setup_menu_entry("View Ticket Page", "tktsetup_viewpage",
+ "HTML with embedded TH1 code for the \"view ticket\" webpage.");
+ setup_menu_entry("Edit Ticket Page", "tktsetup_editpage",
+ "HTML with embedded TH1 code for the \"edit ticket\" webpage.");
+ setup_menu_entry("Report Format", "tktsetup_drep",
+ "The default ticket report format.");
+ @ </table>
+ style_footer();
+}
+
+/* @-comment: ** */
+static char zDefaultTab[] =
+@ CREATE TABLE ticket(
+@ -- Do not change any column that begins with tkt_
+@ tkt_id INTEGER PRIMARY KEY,
+@ tkt_uuid TEXT,
+@ tkt_mtime DATE,
+@ -- Add as many field as required below this line
+@ type TEXT,
+@ status TEXT,
+@ subsystem TEXT,
+@ priority TEXT,
+@ severity TEXT,
+@ foundin TEXT,
+@ contact TEXT,
+@ resolution TEXT,
+@ title TEXT,
+@ comment TEXT,
+@ -- Do not alter this UNIQUE clause:
+@ UNIQUE(tkt_uuid, tkt_mtime)
+@ );
+;
+
+/*
+** Common implementation for the ticket setup editor pages.
+*/
+static void tktsetup_generic(
+ const char *zTitle, /* Page title */
+ const char *zDbField, /* Configuration field being edited */
+ char *zDfltValue, /* Default text value */
+ const char *zDesc, /* Description of this field */
+ int height /* Height of the edit box */
+){
+ const char *z;
+ int isSubmit;
+
+ login_check_credentials();
+ if( !g.okSetup ){
+ login_needed();
+ }
+ if( P("setup") ){
+ cgi_redirect("tktsetup");
+ }
+ isSubmit = P("submit")!=0;
+ db_begin_transaction();
+ z = P("x");
+ if( z==0 ){
+ z = db_get(zDbField, zDfltValue);
+ }
+ style_header("Edit %s", zTitle);
+ if( P("clear")!=0 ){
+ db_unset(zDbField, 0);
+ z = zDfltValue;
+ }else if( isSubmit ){
+ db_set(zDbField, z, 0);
+ }
+ @ <form action="%s(g.zBaseURL)/%s(g.zPath)" method="POST">
+ @ %s(zDesc)
+ @ <textarea name="tab" rows="%d(height)" cols="80">%h(z)</textarea>
+ @ <br />
+ @ <input type="submit" name="submit" value="Apply Changes">
+ @ <input type="submit" name="clear" value="Revert To Default">
+ @ <input type="submit" name="setup" value="Ticket Setup Menu">
+ @ </form>
+ @ <hr>
+ @ <h2>Default %s(zTitle)</h2>
+ @ <blockquote><pre>
+ @ %h(zDfltValue)
+ @ </pre></blockquote>
+ db_end_transaction(0);
style_footer();
+}
+
+/*
+** WEBPAGE: tktsetup_tab
+*/
+void tktsetup_tab_page(void){
+ static const char zDesc[] =
+ @ <p>Enter a valid CREATE TABLE statement for the "ticket" table. The
+ @ table must contain columns named "tkt_id", "tkt_uuid", and "tkt_mtime"
+ @ with an unique index on "tkt_uuid" and "tkt_mtime".</p>
+ ;
+ tktsetup_generic(
+ "Ticket Table Schema",
+ "ticket-table",
+ zDefaultTab,
+ zDesc,
+ 20
+ );
+}
+
+static char zDefaultCom[] =
+@ set type_choices {
+@ Code_Defect
+@ Build_Problem
+@ Documentation
+@ Feature_Request
+@ Incident
+@ }
+@ set priority_choices {
+@ Immediate
+@ High
+@ Medium
+@ Low
+@ Zero
+@ }
+@ set severity_choices {
+@ Critical
+@ Severe
+@ Important
+@ Minor
+@ Cosmetic
+@ }
+@ set resolution_choices {
+@ Open
+@ Fixed
+@ Rejected
+@ Unable_To_Reproduce
+@ Works_As_Designed
+@ External_Bug
+@ Not_A_Bug
+@ Duplicate
+@ Overcome_By_Events
+@ Drive_By_Patch
+@ }
+@ set status_choices {
+@ Open
+@ Verified
+@ In_Process
+@ Deferred
+@ Fixed
+@ Tested
+@ Closed
+@ }
+@ set subsystem_choices {one two three}
+;
+
+/*
+** WEBPAGE: tktsetup_com
+*/
+void tktsetup_com_page(void){
+ static const char zDesc[] =
+ @ <p>Enter TH1 script that initializes variables prior to generating
+ @ any of the ticket view, edit, or creation pages.</p>
+ ;
+ tktsetup_generic(
+ "Ticket Common Script",
+ "ticket-common",
+ zDefaultCom,
+ zDesc,
+ 30
+ );
+}
+
+static char zDefaultNew[] =
+@ <th1>
+@ if {[info exists submit]} {
+@ set status Open
+@ submit_ticket
+@ }
+@ </th1>
+@ <table cellpadding="5">
+@ <tr>
+@ <td colspan="2">
+@ Enter a one-line summary of the problem:<br>
+@ <input type="text" name="title" size="60" value="$<title>">
+@ </td>
+@ </tr>
+@
+@ <tr>
+@ <td align="right">Type:
+@ <th1>combobox type $type_choices 1</th1>
+@ </td>
+@ <td>What type of ticket is this?</td>
+@ </tr>
+@
+@ <tr>
+@ <td align="right">Version:
+@ <input type="text" name="foundin" size="20" value="$<foundin>">
+@ </td>
+@ <td>In what version or build number do you observe the problem?</td>
+@ </tr>
+@
+@ <tr>
+@ <td align="right">Severity:
+@ <th1>combobox severity $severity_choices 1</th1>
+@ </td>
+@ <td>How debilitating is the problem? How badly does the problem
+@ effect the operation of the product?</td>
+@ </tr>
+@
+@ <tr>
+@ <td align="right">EMail:
+@ <input type="text" name="contact" value="$<contact>" size="30">
+@ </td>
+@ <td>Not publically visible. Used by developers to contact you with
+@ questions.</td>
+@ </tr>
+@
+@ <tr>
+@ <td colspan="2">
+@ Enter a detailed description of the problem.
+@ For code defects, be sure to provide details on exactly how
+@ the problem can be reproduced. Provide as much detail as
+@ possible.
+@ <br>
+@ <th1>set nline [linecount $comment 50 10]</th1>
+@ <textarea name="comment" cols="80" rows="$nline"
+@ wrap="virtual" class="wikiedit">$<comment></textarea><br>
+@ <input type="submit" name="preview" value="Preview">
+@ </tr>
+@
+@ <th1>enable_output [info exists preview]</th1>
+@ <tr><td colspan="2">
+@ Description Preview:<br><hr>
+@ <th1>wiki $comment</th1>
+@ <hr>
+@ </td></tr>
+@ <th1>enable_output 1</th1>
+@
+@ <tr>
+@ <td align="right">
+@ <input type="submit" name="submit" value="Submit">
+@ </td>
+@ <td>After filling in the information above, press this button to create
+@ the new ticket</td>
+@ </tr>
+@ </table>
+;
+
+/*
+** WEBPAGE: tktsetup_newpage
+*/
+void tktsetup_newpage_page(void){
+ static const char zDesc[] =
+ @ <p>Enter HTML with embedded TH1 script that will render the "new ticket"
+ @ page</p>
+ ;
+ tktsetup_generic(
+ "HTML For New Tickets",
+ "ticket-newpage",
+ zDefaultNew,
+ zDesc,
+ 40
+ );
+}
+
+static char zDefaultView[] =
+@ <table cellpadding="5">
+@ <tr><td align="right">Title:</td><td>
+@ $<title>
+@ </td></tr>
+@ <tr><td align="right">Status:</td><td>
+@ $<status>
+@ </td></tr>
+@ <tr><td align="right">Type:</td><td>
+@ $<type>
+@ </td></tr>
+@ <tr><td align="right">Severity:</td><td>
+@ $<severity>
+@ </td></tr>
+@ <tr><td align="right">Priority:</td><td>
+@ $<priority>
+@ </td></tr>
+@ <tr><td align="right">Resolution:</td><td>
+@ $<resolution>
+@ </td></tr>
+@ <tr><td align="right">Subsystem:</td><td>
+@ $<subsystem>
+@ </td></tr>
+@ <th1>enable_output [hascap e]</th1>
+@ <tr><td align="right">Contact:</td><td>
+@ $<contact>
+@ </td></tr>
+@ <th1>enable_output 1</th1>
+@ <tr><td align="right">Version Found In:</td><td>
+@ $<foundin>
+@ </td></tr>
+@ <tr><td colspan="2">
+@ Description And Comments:<br>
+@ <th1>wiki $comment</th1>
+@ </td></tr>
+@ </table>
+;
+
+
+/*
+** WEBPAGE: tktsetup_viewpage
+*/
+void tktsetup_viewpage_page(void){
+ static const char zDesc[] =
+ @ <p>Enter HTML with embedded TH1 script that will render the "view ticket"
+ @ page</p>
+ ;
+ tktsetup_generic(
+ "HTML For Viewing Tickets",
+ "ticket-viewpage",
+ zDefaultView,
+ zDesc,
+ 40
+ );
+}
+
+static char zDefaultEdit[] =
+@ <th1>
+@ if {![info exists username]} {set username $login}
+@ if {[info exists submit]} {
+@ if {[info exists cmappnd]} {
+@ if {[string length $cmappnd]>0} {
+@ set ctxt "\n\n<hr><i>[htmlize $login]"
+@ if {$username ne $login} {
+@ set ctxt "$ctxt claiming to be [htmlize $username]"
+@ }
+@ set ctxt "$ctxt added on [date]:</i><br>\n$cmappnd"
+@ append_field comment $ctxt
+@ }
+@ }
+@ submit_ticket
+@ }
+@ </th1>
+@ <table cellpadding="5">
+@ <tr><td align="right">Title:</td><td>
+@ <input type="text" name="title" value="$<title>" size="60">
+@ </td></tr>
+@ <tr><td align="right">Status:</td><td>
+@ <th1>combobox status $status_choices 1</th1>
+@ </td></tr>
+@ <tr><td align="right">Type:</td><td>
+@ <th1>combobox type $type_choices 1</th1>
+@ </td></tr>
+@ <tr><td align="right">Severity:</td><td>
+@ <th1>combobox severity $severity_choices 1</th1>
+@ </td></tr>
+@ <tr><td align="right">Priority:</td><td>
+@ <th1>combobox priority $priority_choices 1</th1>
+@ </td></tr>
+@ <tr><td align="right">Resolution:</td><td>
+@ <th1>combobox resolution $resolution_choices 1</th1>
+@ </td></tr>
+@ <tr><td align="right">Subsystem:</td><td>
+@ <th1>combobox subsystem $subsystem_choices 1</th1>
+@ </td></tr>
+@ <th1>enable_output [hascap e]</th1>
+@ <tr><td align="right">Contact:</td><td>
+@ <input type="text" name="contact" size="40" value="$<contact>">
+@ </td></tr>
+@ <th1>enable_output 1</th1>
+@ <tr><td align="right">Version Found In:</td><td>
+@ <input type="text" name="foundin" size="50" value="$<foundin>">
+@ </td></tr>
+@ <tr><td colspan="2">
+@ <th1>
+@ if {![info exists eall]} {set eall 0}
+@ if {[info exists aonlybtn]} {set eall 0}
+@ if {[info exists eallbtn]} {set eall 1}
+@ if {![hascap w]} {set eall 0}
+@ if {![info exists cmappnd]} {set cmappnd {}}
+@ set nline [linecount $comment 15 10]
+@ enable_output $eall
+@ </th1>
+@ Description And Comments:<br>
+@ <textarea name="comment" cols="80" rows="$nline"
+@ wrap="virtual" class="wikiedit">$<comment></textarea><br>
+@ <input type="hidden" name="eall" value="1">
+@ <input type="submit" name="aonlybtn" value="Append Remark">
+@ <th1>enable_output [expr {!$eall}]</th1>
+@ Append Remark from
+@ <input type="text" name="username" value="$<username>" size="30">:<br>
+@ <textarea name="cmappnd" cols="80" rows="15"
+@ wrap="virtual" class="wikiedit">$<cmappnd></textarea><br>
+@ <th1>enable_output [expr {[hascap w] && !$eall}]</th1>
+@ <input type="submit" name="eallbtn" value="Edit All">
+@ <th1>enable_output 1</th1>
+@ </td></tr>
+@ <tr><td align="right"></td><td>
+@ <input type="submit" name="submit" value="Submit Changes">
+@ </td></tr>
+@ </table>
+;
+
+/*
+** WEBPAGE: tktsetup_editpage
+*/
+void tktsetup_editpage_page(void){
+ static const char zDesc[] =
+ @ <p>Enter HTML with embedded TH1 script that will render the "edit ticket"
+ @ page</p>
+ ;
+ tktsetup_generic(
+ "HTML For Editing Tickets",
+ "ticket-editpage",
+ zDefaultEdit,
+ zDesc,
+ 40
+ );
}