Overview
SHA1 Hash: | ce277caddac488a112e53841b93cc31bdcfd7468 |
---|---|
Date: | 2008-05-25 19:36:47 |
User: | drh |
Comment: | Incremental work on tickets and especially ticket configuration. |
Timelines: | ancestors | descendants | both | trunk |
Other Links: | files | ZIP archive | manifest |
Tags And Properties
- branch=trunk inherited from [a28c83647d]
- sym-trunk inherited from [a28c83647d]
Changes
[hide diffs]Modified src/report.c from [341078a2b9] to [754ebac1f2].
@@ -676,11 +676,11 @@ char **azArg, /* Text of data in all columns */ char **azName /* Names of the columns */ ){ struct GenerateHTML *pState = (struct GenerateHTML*)pUser; int i; - int tn; /* Ticket number. (value of column named '#') */ + const char *zTid; /* Ticket UUID. (value of column named '#') */ int rn; /* Report number */ char *zBg = 0; /* Use this background color */ char zPage[30]; /* Text version of the ticket number */ /* Get the report number @@ -717,30 +717,29 @@ } /* The first time this routine is called, output a table header */ @ <tr> - tn = -1; + zTid = 0; for(i=0; i<nArg; i++){ char *zName = azName[i]; if( i==pState->iBg ) continue; if( pState->iNewRow>=0 && i>=pState->iNewRow ){ - if( g.okWrite && tn>=0 ){ + if( g.okWrite && zTid ){ @ <th> </th> - tn = -1; + zTid = 0; } if( zName[0]=='_' ) zName++; @ </tr><tr><th colspan=%d(pState->nCol)>%h(zName)</th> }else{ if( zName[0]=='#' ){ - tn = i; - }else{ - @ <th>%h(zName)</th> + zTid = zName; } + @ <th>%h(zName)</th> } } - if( g.okWrite && tn>=0 ){ + if( g.okWrite && zTid ){ @ <th> </th> } @ </tr> } if( azArg==0 ){ @@ -761,39 +760,42 @@ /* Output the data for this entry from the database */ zBg = pState->iBg>=0 ? azArg[pState->iBg] : 0; if( zBg==0 ) zBg = "white"; @ <tr bgcolor="%h(zBg)"> - tn = 0; + zTid = 0; zPage[0] = 0; for(i=0; i<nArg; i++){ char *zData; if( i==pState->iBg ) continue; zData = azArg[i]; if( zData==0 ) zData = ""; if( pState->iNewRow>=0 && i>=pState->iNewRow ){ - if( tn>0 && g.okWrite ){ - @ <td valign="top"><a href="tktedit?tn=%d(tn),%d(rn)">edit</a></td> - tn = 0; + if( zTid && g.okWrite ){ + @ <td valign="top"><a href="tktedit/%h(zTid)">edit</a></td> + zTid = 0; } if( zData[0] ){ + Blob content; @ </tr><tr bgcolor="%h(zBg)"><td colspan=%d(pState->nCol)> - @ %h(zData) + blob_init(&content, zData, -1); + wiki_convert(&content, 0, 0); + blob_reset(&content); } }else if( azName[i][0]=='#' ){ - tn = atoi(zData); - @ <td valign="top"><a href="tktview?tn=%d(tn),%d(rn)">%h(zData)</a></td> + zTid = zData; + @ <td valign="top"><a href="tktview?name=%h(zData)">%h(zData)</a></td> }else if( zData[0]==0 ){ @ <td valign="top"> </td> }else{ @ <td valign="top"> @ %h(zData) @ </td> } } - if( tn>0 && g.okWrite ){ - @ <td valign="top"><a href="tktedit?tn=%d(tn),%d(rn)">edit</a></td> + if( zTid && g.okWrite ){ + @ <td valign="top"><a href="tktedit/%h(zTid)">edit</a></td> } @ </tr> return 0; }
Modified src/setup.c from [b4cd5e8549] to [9b54ba173a].
@@ -66,11 +66,11 @@ "Control access settings."); setup_menu_entry("Configuration", "setup_config", "Configure the WWW components of the repository"); setup_menu_entry("Timeline", "setup_timeline", "Timeline display preferences"); - setup_menu_entry("Tickets", "setup_ticket", + setup_menu_entry("Tickets", "tktsetup", "Configure the trouble-ticketing system for this repository"); setup_menu_entry("CSS", "setup_editcss", "Edit the Cascading Style Sheet used by all pages of this repository"); setup_menu_entry("Header", "setup_header", "Edit HTML text inserted at the top of every page");
Modified src/tktsetup.c from [eeccd454b7] to [3051830ac9].
@@ -28,17 +28,427 @@ #include "tktsetup.h" #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 ){ 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 + ); }