0edee97370 2007-10-03 drh: /* 0edee97370 2007-10-03 drh: ** Copyright (c) 2007 D. Richard Hipp 0edee97370 2007-10-03 drh: ** 0edee97370 2007-10-03 drh: ** This program is free software; you can redistribute it and/or 0edee97370 2007-10-03 drh: ** modify it under the terms of the GNU General Public 0edee97370 2007-10-03 drh: ** License version 2 as published by the Free Software Foundation. 0edee97370 2007-10-03 drh: ** 0edee97370 2007-10-03 drh: ** This program is distributed in the hope that it will be useful, 0edee97370 2007-10-03 drh: ** but WITHOUT ANY WARRANTY; without even the implied warranty of 0edee97370 2007-10-03 drh: ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 0edee97370 2007-10-03 drh: ** General Public License for more details. 0edee97370 2007-10-03 drh: ** 0edee97370 2007-10-03 drh: ** You should have received a copy of the GNU General Public 0edee97370 2007-10-03 drh: ** License along with this library; if not, write to the 0edee97370 2007-10-03 drh: ** Free Software Foundation, Inc., 59 Temple Place - Suite 330, 0edee97370 2007-10-03 drh: ** Boston, MA 02111-1307, USA. 0edee97370 2007-10-03 drh: ** 0edee97370 2007-10-03 drh: ** Author contact information: 0edee97370 2007-10-03 drh: ** drh@hwaci.com 0edee97370 2007-10-03 drh: ** http://www.hwaci.com/drh/ 0edee97370 2007-10-03 drh: ** 0edee97370 2007-10-03 drh: ******************************************************************************* 0edee97370 2007-10-03 drh: ** 0edee97370 2007-10-03 drh: ** This file contains code to implement the ticket configuration 0edee97370 2007-10-03 drh: ** setup screens. 0edee97370 2007-10-03 drh: */ 0edee97370 2007-10-03 drh: #include "config.h" 0edee97370 2007-10-03 drh: #include "tktsetup.h" 0edee97370 2007-10-03 drh: #include <assert.h> 0edee97370 2007-10-03 drh: 0edee97370 2007-10-03 drh: /* 0edee97370 2007-10-03 drh: ** Main sub-menu for configuring the ticketing system. ce277cadda 2008-05-25 drh: ** WEBPAGE: tktsetup 0edee97370 2007-10-03 drh: */ 0edee97370 2007-10-03 drh: void tktsetup_page(void){ 0edee97370 2007-10-03 drh: login_check_credentials(); 0edee97370 2007-10-03 drh: if( !g.okSetup ){ 0edee97370 2007-10-03 drh: login_needed(); 0edee97370 2007-10-03 drh: } 0edee97370 2007-10-03 drh: 0edee97370 2007-10-03 drh: style_header("Ticket Setup"); ce277cadda 2008-05-25 drh: @ <table border="0" cellspacing="20"> ce277cadda 2008-05-25 drh: setup_menu_entry("Table", "tktsetup_tab", ce277cadda 2008-05-25 drh: "Specify the schema of the \"ticket\" table in the database."); ac3f1f2ba7 2008-10-18 drh: setup_menu_entry("Timeline", "tktsetup_timeline", ac3f1f2ba7 2008-10-18 drh: "How to display ticket status in the timeline"); ce277cadda 2008-05-25 drh: setup_menu_entry("Common", "tktsetup_com", ce277cadda 2008-05-25 drh: "Common TH1 code run before all ticket processing."); ce277cadda 2008-05-25 drh: setup_menu_entry("New Ticket Page", "tktsetup_newpage", ce277cadda 2008-05-25 drh: "HTML with embedded TH1 code for the \"new ticket\" webpage."); ce277cadda 2008-05-25 drh: setup_menu_entry("View Ticket Page", "tktsetup_viewpage", ce277cadda 2008-05-25 drh: "HTML with embedded TH1 code for the \"view ticket\" webpage."); ce277cadda 2008-05-25 drh: setup_menu_entry("Edit Ticket Page", "tktsetup_editpage", ce277cadda 2008-05-25 drh: "HTML with embedded TH1 code for the \"edit ticket\" webpage."); 49380d500a 2008-05-28 drh: setup_menu_entry("Report Template", "tktsetup_rpttplt", ce277cadda 2008-05-25 drh: "The default ticket report format."); 49380d500a 2008-05-28 drh: setup_menu_entry("Key Template", "tktsetup_keytplt", 49380d500a 2008-05-28 drh: "The default color key for reports."); ce277cadda 2008-05-25 drh: @ </table> 1e9c0e287e 2007-10-03 drh: style_footer(); 1e9c0e287e 2007-10-03 drh: } 1e9c0e287e 2007-10-03 drh: 1e9c0e287e 2007-10-03 drh: /* 21326fb6f7 2008-07-19 drh: ** NOTE: When changing the table definition below, also change the 21326fb6f7 2008-07-19 drh: ** equivalent definition found in schema.c. 21326fb6f7 2008-07-19 drh: */ ce277cadda 2008-05-25 drh: /* @-comment: ** */ 86db6fa150 2008-05-28 drh: static const char zDefaultTicketTable[] = ce277cadda 2008-05-25 drh: @ CREATE TABLE ticket( ce277cadda 2008-05-25 drh: @ -- Do not change any column that begins with tkt_ ce277cadda 2008-05-25 drh: @ tkt_id INTEGER PRIMARY KEY, fb8dc7d07f 2008-10-05 drh: @ tkt_uuid TEXT UNIQUE, ce277cadda 2008-05-25 drh: @ tkt_mtime DATE, ce277cadda 2008-05-25 drh: @ -- Add as many field as required below this line ce277cadda 2008-05-25 drh: @ type TEXT, ce277cadda 2008-05-25 drh: @ status TEXT, ce277cadda 2008-05-25 drh: @ subsystem TEXT, ce277cadda 2008-05-25 drh: @ priority TEXT, ce277cadda 2008-05-25 drh: @ severity TEXT, ce277cadda 2008-05-25 drh: @ foundin TEXT, 21326fb6f7 2008-07-19 drh: @ private_contact TEXT, ce277cadda 2008-05-25 drh: @ resolution TEXT, ce277cadda 2008-05-25 drh: @ title TEXT, fb8dc7d07f 2008-10-05 drh: @ comment TEXT ce277cadda 2008-05-25 drh: @ ); ce277cadda 2008-05-25 drh: ; 86db6fa150 2008-05-28 drh: 86db6fa150 2008-05-28 drh: /* 86db6fa150 2008-05-28 drh: ** Return the ticket table definition 86db6fa150 2008-05-28 drh: */ 86db6fa150 2008-05-28 drh: const char *ticket_table_schema(void){ 86db6fa150 2008-05-28 drh: return db_get("ticket-table", (char*)zDefaultTicketTable); 86db6fa150 2008-05-28 drh: } ce277cadda 2008-05-25 drh: ce277cadda 2008-05-25 drh: /* ce277cadda 2008-05-25 drh: ** Common implementation for the ticket setup editor pages. ce277cadda 2008-05-25 drh: */ ce277cadda 2008-05-25 drh: static void tktsetup_generic( ce277cadda 2008-05-25 drh: const char *zTitle, /* Page title */ ce277cadda 2008-05-25 drh: const char *zDbField, /* Configuration field being edited */ 86db6fa150 2008-05-28 drh: const char *zDfltValue, /* Default text value */ ce277cadda 2008-05-25 drh: const char *zDesc, /* Description of this field */ 86db6fa150 2008-05-28 drh: char *(*xText)(const char*), /* Validitity test or NULL */ 86db6fa150 2008-05-28 drh: void (*xRebuild)(void), /* Run after successulf update */ ce277cadda 2008-05-25 drh: int height /* Height of the edit box */ ce277cadda 2008-05-25 drh: ){ ce277cadda 2008-05-25 drh: const char *z; ce277cadda 2008-05-25 drh: int isSubmit; 1e9c0e287e 2007-10-03 drh: 1e9c0e287e 2007-10-03 drh: login_check_credentials(); 1e9c0e287e 2007-10-03 drh: if( !g.okSetup ){ 1e9c0e287e 2007-10-03 drh: login_needed(); 1e9c0e287e 2007-10-03 drh: } ce277cadda 2008-05-25 drh: if( P("setup") ){ 1e9c0e287e 2007-10-03 drh: cgi_redirect("tktsetup"); 1e9c0e287e 2007-10-03 drh: } ce277cadda 2008-05-25 drh: isSubmit = P("submit")!=0; ce277cadda 2008-05-25 drh: z = P("x"); ce277cadda 2008-05-25 drh: if( z==0 ){ 86db6fa150 2008-05-28 drh: z = db_get(zDbField, (char*)zDfltValue); ce277cadda 2008-05-25 drh: } ce277cadda 2008-05-25 drh: style_header("Edit %s", zTitle); ce277cadda 2008-05-25 drh: if( P("clear")!=0 ){ 0be54823ba 2008-10-18 drh: login_verify_csrf_secret(); ce277cadda 2008-05-25 drh: db_unset(zDbField, 0); 86db6fa150 2008-05-28 drh: if( xRebuild ) xRebuild(); ce277cadda 2008-05-25 drh: z = zDfltValue; ce277cadda 2008-05-25 drh: }else if( isSubmit ){ 86db6fa150 2008-05-28 drh: char *zErr = 0; 0be54823ba 2008-10-18 drh: login_verify_csrf_secret(); 86db6fa150 2008-05-28 drh: if( xText && (zErr = xText(z))!=0 ){ 86db6fa150 2008-05-28 drh: @ <p><font color="red"><b>ERROR: %h(zErr)</b></font></p> 1e9c0e287e 2007-10-03 drh: }else{ 86db6fa150 2008-05-28 drh: db_set(zDbField, z, 0); 86db6fa150 2008-05-28 drh: if( xRebuild ) xRebuild(); 1e9c0e287e 2007-10-03 drh: cgi_redirect("tktsetup"); 1e9c0e287e 2007-10-03 drh: } 1e9c0e287e 2007-10-03 drh: } ce277cadda 2008-05-25 drh: @ <form action="%s(g.zBaseURL)/%s(g.zPath)" method="POST"> 0be54823ba 2008-10-18 drh: login_insert_csrf_secret(); b7588eb2f7 2008-07-19 drh: @ <p>%s(zDesc)</p> 86db6fa150 2008-05-28 drh: @ <textarea name="x" rows="%d(height)" cols="80">%h(z)</textarea> b7588eb2f7 2008-07-19 drh: @ <blockquote> ce277cadda 2008-05-25 drh: @ <input type="submit" name="submit" value="Apply Changes"> ce277cadda 2008-05-25 drh: @ <input type="submit" name="clear" value="Revert To Default"> b7588eb2f7 2008-07-19 drh: @ <input type="submit" name="setup" value="Cancel"> b7588eb2f7 2008-07-19 drh: @ </blockquote> ce277cadda 2008-05-25 drh: @ </form> ce277cadda 2008-05-25 drh: @ <hr> ce277cadda 2008-05-25 drh: @ <h2>Default %s(zTitle)</h2> ce277cadda 2008-05-25 drh: @ <blockquote><pre> ce277cadda 2008-05-25 drh: @ %h(zDfltValue) ce277cadda 2008-05-25 drh: @ </pre></blockquote> 0edee97370 2007-10-03 drh: style_footer(); 0edee97370 2007-10-03 drh: } 0edee97370 2007-10-03 drh: 0edee97370 2007-10-03 drh: /* ce277cadda 2008-05-25 drh: ** WEBPAGE: tktsetup_tab ce277cadda 2008-05-25 drh: */ ce277cadda 2008-05-25 drh: void tktsetup_tab_page(void){ ce277cadda 2008-05-25 drh: static const char zDesc[] = ce277cadda 2008-05-25 drh: @ <p>Enter a valid CREATE TABLE statement for the "ticket" table. The ce277cadda 2008-05-25 drh: @ table must contain columns named "tkt_id", "tkt_uuid", and "tkt_mtime" ce277cadda 2008-05-25 drh: @ with an unique index on "tkt_uuid" and "tkt_mtime".</p> ce277cadda 2008-05-25 drh: ; ce277cadda 2008-05-25 drh: tktsetup_generic( ce277cadda 2008-05-25 drh: "Ticket Table Schema", ce277cadda 2008-05-25 drh: "ticket-table", 86db6fa150 2008-05-28 drh: zDefaultTicketTable, ce277cadda 2008-05-25 drh: zDesc, 86db6fa150 2008-05-28 drh: ticket_schema_check, 86db6fa150 2008-05-28 drh: ticket_rebuild, ce277cadda 2008-05-25 drh: 20 ce277cadda 2008-05-25 drh: ); ce277cadda 2008-05-25 drh: } ce277cadda 2008-05-25 drh: 86db6fa150 2008-05-28 drh: static const char zDefaultTicketCommon[] = ce277cadda 2008-05-25 drh: @ set type_choices { ce277cadda 2008-05-25 drh: @ Code_Defect ce277cadda 2008-05-25 drh: @ Build_Problem ce277cadda 2008-05-25 drh: @ Documentation ce277cadda 2008-05-25 drh: @ Feature_Request ce277cadda 2008-05-25 drh: @ Incident ce277cadda 2008-05-25 drh: @ } ce277cadda 2008-05-25 drh: @ set priority_choices { ce277cadda 2008-05-25 drh: @ Immediate ce277cadda 2008-05-25 drh: @ High ce277cadda 2008-05-25 drh: @ Medium ce277cadda 2008-05-25 drh: @ Low ce277cadda 2008-05-25 drh: @ Zero ce277cadda 2008-05-25 drh: @ } ce277cadda 2008-05-25 drh: @ set severity_choices { ce277cadda 2008-05-25 drh: @ Critical ce277cadda 2008-05-25 drh: @ Severe ce277cadda 2008-05-25 drh: @ Important ce277cadda 2008-05-25 drh: @ Minor ce277cadda 2008-05-25 drh: @ Cosmetic ce277cadda 2008-05-25 drh: @ } ce277cadda 2008-05-25 drh: @ set resolution_choices { ce277cadda 2008-05-25 drh: @ Open ce277cadda 2008-05-25 drh: @ Fixed ce277cadda 2008-05-25 drh: @ Rejected ce277cadda 2008-05-25 drh: @ Unable_To_Reproduce ce277cadda 2008-05-25 drh: @ Works_As_Designed ce277cadda 2008-05-25 drh: @ External_Bug ce277cadda 2008-05-25 drh: @ Not_A_Bug ce277cadda 2008-05-25 drh: @ Duplicate ce277cadda 2008-05-25 drh: @ Overcome_By_Events ce277cadda 2008-05-25 drh: @ Drive_By_Patch ce277cadda 2008-05-25 drh: @ } ce277cadda 2008-05-25 drh: @ set status_choices { ce277cadda 2008-05-25 drh: @ Open ce277cadda 2008-05-25 drh: @ Verified 49380d500a 2008-05-28 drh: @ Review ce277cadda 2008-05-25 drh: @ Deferred ce277cadda 2008-05-25 drh: @ Fixed ce277cadda 2008-05-25 drh: @ Tested ce277cadda 2008-05-25 drh: @ Closed ce277cadda 2008-05-25 drh: @ } efb759a07d 2008-10-26 drh: @ set subsystem_choices { efb759a07d 2008-10-26 drh: @ } ce277cadda 2008-05-25 drh: ; 86db6fa150 2008-05-28 drh: 86db6fa150 2008-05-28 drh: /* 86db6fa150 2008-05-28 drh: ** Return the ticket common code. 86db6fa150 2008-05-28 drh: */ 86db6fa150 2008-05-28 drh: const char *ticket_common_code(void){ 86db6fa150 2008-05-28 drh: return db_get("ticket-common", (char*)zDefaultTicketCommon); 86db6fa150 2008-05-28 drh: } ce277cadda 2008-05-25 drh: ce277cadda 2008-05-25 drh: /* ce277cadda 2008-05-25 drh: ** WEBPAGE: tktsetup_com ce277cadda 2008-05-25 drh: */ ce277cadda 2008-05-25 drh: void tktsetup_com_page(void){ ce277cadda 2008-05-25 drh: static const char zDesc[] = ce277cadda 2008-05-25 drh: @ <p>Enter TH1 script that initializes variables prior to generating ce277cadda 2008-05-25 drh: @ any of the ticket view, edit, or creation pages.</p> ce277cadda 2008-05-25 drh: ; ce277cadda 2008-05-25 drh: tktsetup_generic( ce277cadda 2008-05-25 drh: "Ticket Common Script", ce277cadda 2008-05-25 drh: "ticket-common", 86db6fa150 2008-05-28 drh: zDefaultTicketCommon, ce277cadda 2008-05-25 drh: zDesc, 86db6fa150 2008-05-28 drh: 0, 86db6fa150 2008-05-28 drh: 0, ce277cadda 2008-05-25 drh: 30 ce277cadda 2008-05-25 drh: ); ce277cadda 2008-05-25 drh: } ce277cadda 2008-05-25 drh: 86db6fa150 2008-05-28 drh: static const char zDefaultNew[] = ce277cadda 2008-05-25 drh: @ <th1> ce277cadda 2008-05-25 drh: @ if {[info exists submit]} { ce277cadda 2008-05-25 drh: @ set status Open ce277cadda 2008-05-25 drh: @ submit_ticket ce277cadda 2008-05-25 drh: @ } ce277cadda 2008-05-25 drh: @ </th1> 49380d500a 2008-05-28 drh: @ <h1 align="center">Enter A New Bug Report</h1> ce277cadda 2008-05-25 drh: @ <table cellpadding="5"> ce277cadda 2008-05-25 drh: @ <tr> ce277cadda 2008-05-25 drh: @ <td colspan="2"> ce277cadda 2008-05-25 drh: @ Enter a one-line summary of the problem:<br> ce277cadda 2008-05-25 drh: @ <input type="text" name="title" size="60" value="$<title>"> ce277cadda 2008-05-25 drh: @ </td> ce277cadda 2008-05-25 drh: @ </tr> ce277cadda 2008-05-25 drh: @ ce277cadda 2008-05-25 drh: @ <tr> ce277cadda 2008-05-25 drh: @ <td align="right">Type: ce277cadda 2008-05-25 drh: @ <th1>combobox type $type_choices 1</th1> ce277cadda 2008-05-25 drh: @ </td> ce277cadda 2008-05-25 drh: @ <td>What type of ticket is this?</td> ce277cadda 2008-05-25 drh: @ </tr> ce277cadda 2008-05-25 drh: @ ce277cadda 2008-05-25 drh: @ <tr> ce277cadda 2008-05-25 drh: @ <td align="right">Version: ce277cadda 2008-05-25 drh: @ <input type="text" name="foundin" size="20" value="$<foundin>"> ce277cadda 2008-05-25 drh: @ </td> ce277cadda 2008-05-25 drh: @ <td>In what version or build number do you observe the problem?</td> ce277cadda 2008-05-25 drh: @ </tr> ce277cadda 2008-05-25 drh: @ ce277cadda 2008-05-25 drh: @ <tr> ce277cadda 2008-05-25 drh: @ <td align="right">Severity: ce277cadda 2008-05-25 drh: @ <th1>combobox severity $severity_choices 1</th1> ce277cadda 2008-05-25 drh: @ </td> ce277cadda 2008-05-25 drh: @ <td>How debilitating is the problem? How badly does the problem f3ce1c9fed 2008-08-24 bharder: @ affect the operation of the product?</td> ce277cadda 2008-05-25 drh: @ </tr> ce277cadda 2008-05-25 drh: @ ce277cadda 2008-05-25 drh: @ <tr> ce277cadda 2008-05-25 drh: @ <td align="right">EMail: 21326fb6f7 2008-07-19 drh: @ <input type="text" name="private_contact" value="$<private_contact>" size="30"> ce277cadda 2008-05-25 drh: @ </td> 49380d500a 2008-05-28 drh: @ <td><u>Not publicly visible</u>. Used by developers to contact you with ce277cadda 2008-05-25 drh: @ questions.</td> ce277cadda 2008-05-25 drh: @ </tr> ce277cadda 2008-05-25 drh: @ ce277cadda 2008-05-25 drh: @ <tr> ce277cadda 2008-05-25 drh: @ <td colspan="2"> ce277cadda 2008-05-25 drh: @ Enter a detailed description of the problem. ce277cadda 2008-05-25 drh: @ For code defects, be sure to provide details on exactly how ce277cadda 2008-05-25 drh: @ the problem can be reproduced. Provide as much detail as ce277cadda 2008-05-25 drh: @ possible. ce277cadda 2008-05-25 drh: @ <br> ce277cadda 2008-05-25 drh: @ <th1>set nline [linecount $comment 50 10]</th1> ce277cadda 2008-05-25 drh: @ <textarea name="comment" cols="80" rows="$nline" ce277cadda 2008-05-25 drh: @ wrap="virtual" class="wikiedit">$<comment></textarea><br> ce277cadda 2008-05-25 drh: @ <input type="submit" name="preview" value="Preview"> ce277cadda 2008-05-25 drh: @ </tr> ce277cadda 2008-05-25 drh: @ ce277cadda 2008-05-25 drh: @ <th1>enable_output [info exists preview]</th1> ce277cadda 2008-05-25 drh: @ <tr><td colspan="2"> ce277cadda 2008-05-25 drh: @ Description Preview:<br><hr> ce277cadda 2008-05-25 drh: @ <th1>wiki $comment</th1> ce277cadda 2008-05-25 drh: @ <hr> ce277cadda 2008-05-25 drh: @ </td></tr> ce277cadda 2008-05-25 drh: @ <th1>enable_output 1</th1> ce277cadda 2008-05-25 drh: @ ce277cadda 2008-05-25 drh: @ <tr> ce277cadda 2008-05-25 drh: @ <td align="right"> ce277cadda 2008-05-25 drh: @ <input type="submit" name="submit" value="Submit"> ce277cadda 2008-05-25 drh: @ </td> ce277cadda 2008-05-25 drh: @ <td>After filling in the information above, press this button to create ce277cadda 2008-05-25 drh: @ the new ticket</td> ce277cadda 2008-05-25 drh: @ </tr> 27d2e6e458 2008-05-28 drh: @ <tr> 27d2e6e458 2008-05-28 drh: @ <td align="right"> 27d2e6e458 2008-05-28 drh: @ <input type="submit" name="cancel" value="Cancel"> 27d2e6e458 2008-05-28 drh: @ </td> 27d2e6e458 2008-05-28 drh: @ <td>Abandon and forget this bug report</td> 86db6fa150 2008-05-28 drh: @ </tr> ce277cadda 2008-05-25 drh: @ </table> ce277cadda 2008-05-25 drh: ; 86db6fa150 2008-05-28 drh: 86db6fa150 2008-05-28 drh: /* 86db6fa150 2008-05-28 drh: ** Return the code used to generate the new ticket page 86db6fa150 2008-05-28 drh: */ 86db6fa150 2008-05-28 drh: const char *ticket_newpage_code(void){ 86db6fa150 2008-05-28 drh: return db_get("ticket-newpage", (char*)zDefaultNew); 86db6fa150 2008-05-28 drh: } ce277cadda 2008-05-25 drh: ce277cadda 2008-05-25 drh: /* ce277cadda 2008-05-25 drh: ** WEBPAGE: tktsetup_newpage ce277cadda 2008-05-25 drh: */ ce277cadda 2008-05-25 drh: void tktsetup_newpage_page(void){ ce277cadda 2008-05-25 drh: static const char zDesc[] = ce277cadda 2008-05-25 drh: @ <p>Enter HTML with embedded TH1 script that will render the "new ticket" ce277cadda 2008-05-25 drh: @ page</p> ce277cadda 2008-05-25 drh: ; ce277cadda 2008-05-25 drh: tktsetup_generic( ce277cadda 2008-05-25 drh: "HTML For New Tickets", ce277cadda 2008-05-25 drh: "ticket-newpage", ce277cadda 2008-05-25 drh: zDefaultNew, ce277cadda 2008-05-25 drh: zDesc, 86db6fa150 2008-05-28 drh: 0, 86db6fa150 2008-05-28 drh: 0, ce277cadda 2008-05-25 drh: 40 ce277cadda 2008-05-25 drh: ); ce277cadda 2008-05-25 drh: } ce277cadda 2008-05-25 drh: 86db6fa150 2008-05-28 drh: static const char zDefaultView[] = ce277cadda 2008-05-25 drh: @ <table cellpadding="5"> 49380d500a 2008-05-28 drh: @ <tr><td align="right">Ticket UUID:</td><td bgcolor="#d0d0d0" colspan="3"> 49380d500a 2008-05-28 drh: @ $<tkt_uuid> 49380d500a 2008-05-28 drh: @ </td></tr> 49380d500a 2008-05-28 drh: @ <tr><td align="right">Title:</td> 49380d500a 2008-05-28 drh: @ <td bgcolor="#d0d0d0" colspan="3" valign="top"> ce277cadda 2008-05-25 drh: @ $<title> ce277cadda 2008-05-25 drh: @ </td></tr> 49380d500a 2008-05-28 drh: @ <tr><td align="right">Status:</td><td bgcolor="#d0d0d0"> ce277cadda 2008-05-25 drh: @ $<status> 49380d500a 2008-05-28 drh: @ </td> 49380d500a 2008-05-28 drh: @ <td align="right">Type:</td><td bgcolor="#d0d0d0"> ce277cadda 2008-05-25 drh: @ $<type> ce277cadda 2008-05-25 drh: @ </td></tr> 49380d500a 2008-05-28 drh: @ <tr><td align="right">Severity:</td><td bgcolor="#d0d0d0"> ce277cadda 2008-05-25 drh: @ $<severity> 49380d500a 2008-05-28 drh: @ </td> 49380d500a 2008-05-28 drh: @ <td align="right">Priority:</td><td bgcolor="#d0d0d0"> ce277cadda 2008-05-25 drh: @ $<priority> ce277cadda 2008-05-25 drh: @ </td></tr> 49380d500a 2008-05-28 drh: @ <tr><td align="right">Subsystem:</td><td bgcolor="#d0d0d0"> 49380d500a 2008-05-28 drh: @ $<subsystem> 49380d500a 2008-05-28 drh: @ </td> 49380d500a 2008-05-28 drh: @ <td align="right">Resolution:</td><td bgcolor="#d0d0d0"> ce277cadda 2008-05-25 drh: @ $<resolution> ce277cadda 2008-05-25 drh: @ </td></tr> 49380d500a 2008-05-28 drh: @ <tr><td align="right">Last Modified:</td><td bgcolor="#d0d0d0"> 49380d500a 2008-05-28 drh: @ $<tkt_datetime> 49380d500a 2008-05-28 drh: @ </td> ce277cadda 2008-05-25 drh: @ <th1>enable_output [hascap e]</th1> 49380d500a 2008-05-28 drh: @ <td align="right">Contact:</td><td bgcolor="#d0d0d0"> 21326fb6f7 2008-07-19 drh: @ $<private_contact> 49380d500a 2008-05-28 drh: @ </td> ce277cadda 2008-05-25 drh: @ <th1>enable_output 1</th1> 49380d500a 2008-05-28 drh: @ </tr> 49380d500a 2008-05-28 drh: @ <tr><td align="right">Version Found In:</td> 49380d500a 2008-05-28 drh: @ <td colspan="3" valign="top" bgcolor="#d0d0d0"> ce277cadda 2008-05-25 drh: @ $<foundin> ce277cadda 2008-05-25 drh: @ </td></tr> 49380d500a 2008-05-28 drh: @ <tr><td>Description & Comments:</td></tr> 49380d500a 2008-05-28 drh: @ <tr><td colspan="4" bgcolor="#d0d0d0"> 49380d500a 2008-05-28 drh: @ <span bgcolor="#d0d0d0"><th1>wiki $comment</th1></span> ce277cadda 2008-05-25 drh: @ </td></tr> ce277cadda 2008-05-25 drh: @ </table> ce277cadda 2008-05-25 drh: ; ce277cadda 2008-05-25 drh: 86db6fa150 2008-05-28 drh: 86db6fa150 2008-05-28 drh: /* 86db6fa150 2008-05-28 drh: ** Return the code used to generate the view ticket page 86db6fa150 2008-05-28 drh: */ 86db6fa150 2008-05-28 drh: const char *ticket_viewpage_code(void){ 86db6fa150 2008-05-28 drh: return db_get("ticket-viewpage", (char*)zDefaultView); 86db6fa150 2008-05-28 drh: } ce277cadda 2008-05-25 drh: ce277cadda 2008-05-25 drh: /* ce277cadda 2008-05-25 drh: ** WEBPAGE: tktsetup_viewpage ce277cadda 2008-05-25 drh: */ ce277cadda 2008-05-25 drh: void tktsetup_viewpage_page(void){ ce277cadda 2008-05-25 drh: static const char zDesc[] = ce277cadda 2008-05-25 drh: @ <p>Enter HTML with embedded TH1 script that will render the "view ticket" ce277cadda 2008-05-25 drh: @ page</p> ce277cadda 2008-05-25 drh: ; ce277cadda 2008-05-25 drh: tktsetup_generic( ce277cadda 2008-05-25 drh: "HTML For Viewing Tickets", ce277cadda 2008-05-25 drh: "ticket-viewpage", ce277cadda 2008-05-25 drh: zDefaultView, ce277cadda 2008-05-25 drh: zDesc, 86db6fa150 2008-05-28 drh: 0, 86db6fa150 2008-05-28 drh: 0, ce277cadda 2008-05-25 drh: 40 ce277cadda 2008-05-25 drh: ); ce277cadda 2008-05-25 drh: } ce277cadda 2008-05-25 drh: 86db6fa150 2008-05-28 drh: static const char zDefaultEdit[] = ce277cadda 2008-05-25 drh: @ <th1> ce277cadda 2008-05-25 drh: @ if {![info exists username]} {set username $login} ce277cadda 2008-05-25 drh: @ if {[info exists submit]} { ce277cadda 2008-05-25 drh: @ if {[info exists cmappnd]} { ce277cadda 2008-05-25 drh: @ if {[string length $cmappnd]>0} { ce277cadda 2008-05-25 drh: @ set ctxt "\n\n<hr><i>[htmlize $login]" ce277cadda 2008-05-25 drh: @ if {$username ne $login} { ce277cadda 2008-05-25 drh: @ set ctxt "$ctxt claiming to be [htmlize $username]" ce277cadda 2008-05-25 drh: @ } ce277cadda 2008-05-25 drh: @ set ctxt "$ctxt added on [date]:</i><br>\n$cmappnd" ce277cadda 2008-05-25 drh: @ append_field comment $ctxt ce277cadda 2008-05-25 drh: @ } ce277cadda 2008-05-25 drh: @ } ce277cadda 2008-05-25 drh: @ submit_ticket ce277cadda 2008-05-25 drh: @ } ce277cadda 2008-05-25 drh: @ </th1> ce277cadda 2008-05-25 drh: @ <table cellpadding="5"> ce277cadda 2008-05-25 drh: @ <tr><td align="right">Title:</td><td> ce277cadda 2008-05-25 drh: @ <input type="text" name="title" value="$<title>" size="60"> ce277cadda 2008-05-25 drh: @ </td></tr> ce277cadda 2008-05-25 drh: @ <tr><td align="right">Status:</td><td> ce277cadda 2008-05-25 drh: @ <th1>combobox status $status_choices 1</th1> ce277cadda 2008-05-25 drh: @ </td></tr> ce277cadda 2008-05-25 drh: @ <tr><td align="right">Type:</td><td> ce277cadda 2008-05-25 drh: @ <th1>combobox type $type_choices 1</th1> ce277cadda 2008-05-25 drh: @ </td></tr> ce277cadda 2008-05-25 drh: @ <tr><td align="right">Severity:</td><td> ce277cadda 2008-05-25 drh: @ <th1>combobox severity $severity_choices 1</th1> ce277cadda 2008-05-25 drh: @ </td></tr> ce277cadda 2008-05-25 drh: @ <tr><td align="right">Priority:</td><td> ce277cadda 2008-05-25 drh: @ <th1>combobox priority $priority_choices 1</th1> ce277cadda 2008-05-25 drh: @ </td></tr> ce277cadda 2008-05-25 drh: @ <tr><td align="right">Resolution:</td><td> ce277cadda 2008-05-25 drh: @ <th1>combobox resolution $resolution_choices 1</th1> ce277cadda 2008-05-25 drh: @ </td></tr> ce277cadda 2008-05-25 drh: @ <tr><td align="right">Subsystem:</td><td> ce277cadda 2008-05-25 drh: @ <th1>combobox subsystem $subsystem_choices 1</th1> ce277cadda 2008-05-25 drh: @ </td></tr> ce277cadda 2008-05-25 drh: @ <th1>enable_output [hascap e]</th1> ce277cadda 2008-05-25 drh: @ <tr><td align="right">Contact:</td><td> 21326fb6f7 2008-07-19 drh: @ <input type="text" name="private_contact" size="40" 21326fb6f7 2008-07-19 drh: @ value="$<private_contact>"> ce277cadda 2008-05-25 drh: @ </td></tr> ce277cadda 2008-05-25 drh: @ <th1>enable_output 1</th1> ce277cadda 2008-05-25 drh: @ <tr><td align="right">Version Found In:</td><td> ce277cadda 2008-05-25 drh: @ <input type="text" name="foundin" size="50" value="$<foundin>"> ce277cadda 2008-05-25 drh: @ </td></tr> ce277cadda 2008-05-25 drh: @ <tr><td colspan="2"> ce277cadda 2008-05-25 drh: @ <th1> ce277cadda 2008-05-25 drh: @ if {![info exists eall]} {set eall 0} ce277cadda 2008-05-25 drh: @ if {[info exists aonlybtn]} {set eall 0} ce277cadda 2008-05-25 drh: @ if {[info exists eallbtn]} {set eall 1} ce277cadda 2008-05-25 drh: @ if {![hascap w]} {set eall 0} ce277cadda 2008-05-25 drh: @ if {![info exists cmappnd]} {set cmappnd {}} ce277cadda 2008-05-25 drh: @ set nline [linecount $comment 15 10] ce277cadda 2008-05-25 drh: @ enable_output $eall ce277cadda 2008-05-25 drh: @ </th1> ce277cadda 2008-05-25 drh: @ Description And Comments:<br> ce277cadda 2008-05-25 drh: @ <textarea name="comment" cols="80" rows="$nline" ce277cadda 2008-05-25 drh: @ wrap="virtual" class="wikiedit">$<comment></textarea><br> ce277cadda 2008-05-25 drh: @ <input type="hidden" name="eall" value="1"> ce277cadda 2008-05-25 drh: @ <input type="submit" name="aonlybtn" value="Append Remark"> ce277cadda 2008-05-25 drh: @ <th1>enable_output [expr {!$eall}]</th1> ce277cadda 2008-05-25 drh: @ Append Remark from ce277cadda 2008-05-25 drh: @ <input type="text" name="username" value="$<username>" size="30">:<br> ce277cadda 2008-05-25 drh: @ <textarea name="cmappnd" cols="80" rows="15" ce277cadda 2008-05-25 drh: @ wrap="virtual" class="wikiedit">$<cmappnd></textarea><br> ce277cadda 2008-05-25 drh: @ <th1>enable_output [expr {[hascap w] && !$eall}]</th1> ce277cadda 2008-05-25 drh: @ <input type="submit" name="eallbtn" value="Edit All"> ce277cadda 2008-05-25 drh: @ <th1>enable_output 1</th1> ce277cadda 2008-05-25 drh: @ </td></tr> ce277cadda 2008-05-25 drh: @ <tr><td align="right"></td><td> ce277cadda 2008-05-25 drh: @ <input type="submit" name="submit" value="Submit Changes"> 27d2e6e458 2008-05-28 drh: @ <input type="submit" name="cancel" value="Cancel"> ce277cadda 2008-05-25 drh: @ </td></tr> ce277cadda 2008-05-25 drh: @ </table> ce277cadda 2008-05-25 drh: ; 86db6fa150 2008-05-28 drh: 86db6fa150 2008-05-28 drh: /* 86db6fa150 2008-05-28 drh: ** Return the code used to generate the edit ticket page 86db6fa150 2008-05-28 drh: */ 86db6fa150 2008-05-28 drh: const char *ticket_editpage_code(void){ 86db6fa150 2008-05-28 drh: return db_get("ticket-editpage", (char*)zDefaultEdit); 86db6fa150 2008-05-28 drh: } ce277cadda 2008-05-25 drh: ce277cadda 2008-05-25 drh: /* ce277cadda 2008-05-25 drh: ** WEBPAGE: tktsetup_editpage ce277cadda 2008-05-25 drh: */ ce277cadda 2008-05-25 drh: void tktsetup_editpage_page(void){ ce277cadda 2008-05-25 drh: static const char zDesc[] = ce277cadda 2008-05-25 drh: @ <p>Enter HTML with embedded TH1 script that will render the "edit ticket" ce277cadda 2008-05-25 drh: @ page</p> ce277cadda 2008-05-25 drh: ; ce277cadda 2008-05-25 drh: tktsetup_generic( ce277cadda 2008-05-25 drh: "HTML For Editing Tickets", ce277cadda 2008-05-25 drh: "ticket-editpage", ce277cadda 2008-05-25 drh: zDefaultEdit, ce277cadda 2008-05-25 drh: zDesc, 86db6fa150 2008-05-28 drh: 0, 86db6fa150 2008-05-28 drh: 0, ce277cadda 2008-05-25 drh: 40 ce277cadda 2008-05-25 drh: ); 49380d500a 2008-05-28 drh: } 49380d500a 2008-05-28 drh: 49380d500a 2008-05-28 drh: /* 49380d500a 2008-05-28 drh: ** The default template ticket report format: 49380d500a 2008-05-28 drh: */ 49380d500a 2008-05-28 drh: static char zDefaultReport[] = 49380d500a 2008-05-28 drh: @ SELECT 49380d500a 2008-05-28 drh: @ CASE WHEN status IN ('Open','Verified') THEN '#f2dcdc' 49380d500a 2008-05-28 drh: @ WHEN status='Review' THEN '#e8e8e8' 49380d500a 2008-05-28 drh: @ WHEN status='Fixed' THEN '#cfe8bd' 49380d500a 2008-05-28 drh: @ WHEN status='Tested' THEN '#bde5d6' 49380d500a 2008-05-28 drh: @ WHEN status='Deferred' THEN '#cacae5' 49380d500a 2008-05-28 drh: @ ELSE '#c8c8c8' END AS 'bgcolor', 49380d500a 2008-05-28 drh: @ substr(tkt_uuid,1,10) AS '#', 49380d500a 2008-05-28 drh: @ datetime(tkt_mtime) AS 'mtime', 49380d500a 2008-05-28 drh: @ type, 49380d500a 2008-05-28 drh: @ status, 49380d500a 2008-05-28 drh: @ subsystem, 49380d500a 2008-05-28 drh: @ title, 49380d500a 2008-05-28 drh: @ comment AS '_comments' 49380d500a 2008-05-28 drh: @ FROM ticket 49380d500a 2008-05-28 drh: ; 49380d500a 2008-05-28 drh: 49380d500a 2008-05-28 drh: 49380d500a 2008-05-28 drh: /* 49380d500a 2008-05-28 drh: ** Return the template ticket report format: 49380d500a 2008-05-28 drh: */ 49380d500a 2008-05-28 drh: char *ticket_report_template(void){ 49380d500a 2008-05-28 drh: return db_get("ticket-report-template", zDefaultReport); 49380d500a 2008-05-28 drh: } 49380d500a 2008-05-28 drh: 49380d500a 2008-05-28 drh: /* 49380d500a 2008-05-28 drh: ** WEBPAGE: tktsetup_rpttplt 49380d500a 2008-05-28 drh: */ 49380d500a 2008-05-28 drh: void tktsetup_rpttplt_page(void){ 49380d500a 2008-05-28 drh: static const char zDesc[] = 49380d500a 2008-05-28 drh: @ <p>Enter the default ticket report format template. This is the b7588eb2f7 2008-07-19 drh: @ the template report format that initially appears when creating a 49380d500a 2008-05-28 drh: @ new ticket summary report.</p> 49380d500a 2008-05-28 drh: ; 49380d500a 2008-05-28 drh: tktsetup_generic( 49380d500a 2008-05-28 drh: "Default Report Template", 49380d500a 2008-05-28 drh: "ticket-report-template", 49380d500a 2008-05-28 drh: zDefaultReport, 49380d500a 2008-05-28 drh: zDesc, 49380d500a 2008-05-28 drh: 0, 49380d500a 2008-05-28 drh: 0, 49380d500a 2008-05-28 drh: 20 49380d500a 2008-05-28 drh: ); 49380d500a 2008-05-28 drh: } 49380d500a 2008-05-28 drh: 49380d500a 2008-05-28 drh: /* 49380d500a 2008-05-28 drh: ** The default template ticket key: 49380d500a 2008-05-28 drh: */ 49380d500a 2008-05-28 drh: static const char zDefaultKey[] = 49380d500a 2008-05-28 drh: @ #ffffff Key: 49380d500a 2008-05-28 drh: @ #f2dcdc Active 49380d500a 2008-05-28 drh: @ #e8e8e8 Review 49380d500a 2008-05-28 drh: @ #cfe8bd Fixed 49380d500a 2008-05-28 drh: @ #bde5d6 Tested 49380d500a 2008-05-28 drh: @ #cacae5 Deferred 49380d500a 2008-05-28 drh: @ #c8c8c8 Closed 49380d500a 2008-05-28 drh: ; 49380d500a 2008-05-28 drh: 49380d500a 2008-05-28 drh: 49380d500a 2008-05-28 drh: /* 49380d500a 2008-05-28 drh: ** Return the template ticket report format: 49380d500a 2008-05-28 drh: */ 49380d500a 2008-05-28 drh: const char *ticket_key_template(void){ 49380d500a 2008-05-28 drh: return db_get("ticket-key-template", (char*)zDefaultKey); 49380d500a 2008-05-28 drh: } 49380d500a 2008-05-28 drh: 49380d500a 2008-05-28 drh: /* 49380d500a 2008-05-28 drh: ** WEBPAGE: tktsetup_keytplt 0edee97370 2007-10-03 drh: */ 49380d500a 2008-05-28 drh: void tktsetup_keytplt_page(void){ 49380d500a 2008-05-28 drh: static const char zDesc[] = b7588eb2f7 2008-07-19 drh: @ <p>Enter the default ticket report color-key template. This is the b7588eb2f7 2008-07-19 drh: @ the color-key that initially appears when creating a 49380d500a 2008-05-28 drh: @ new ticket summary report.</p> 49380d500a 2008-05-28 drh: ; 49380d500a 2008-05-28 drh: tktsetup_generic( b7588eb2f7 2008-07-19 drh: "Default Report Color-Key Template", b7588eb2f7 2008-07-19 drh: "ticket-key-template", b7588eb2f7 2008-07-19 drh: zDefaultKey, 49380d500a 2008-05-28 drh: zDesc, 49380d500a 2008-05-28 drh: 0, 49380d500a 2008-05-28 drh: 0, b7588eb2f7 2008-07-19 drh: 10 1e9c0e287e 2007-10-03 drh: ); ac3f1f2ba7 2008-10-18 drh: } 0edee97370 2007-10-03 drh: ac3f1f2ba7 2008-10-18 drh: /* ac3f1f2ba7 2008-10-18 drh: ** WEBPAGE: tktsetup_timeline ac3f1f2ba7 2008-10-18 drh: */ ac3f1f2ba7 2008-10-18 drh: void tktsetup_timeline_page(void){ 0edee97370 2007-10-03 drh: login_check_credentials(); 0edee97370 2007-10-03 drh: if( !g.okSetup ){ 0edee97370 2007-10-03 drh: login_needed(); 0edee97370 2007-10-03 drh: } ac3f1f2ba7 2008-10-18 drh: ac3f1f2ba7 2008-10-18 drh: if( P("setup") ){ 0edee97370 2007-10-03 drh: cgi_redirect("tktsetup"); 0edee97370 2007-10-03 drh: } ac3f1f2ba7 2008-10-18 drh: style_header("Ticket Display On Timelines"); ac3f1f2ba7 2008-10-18 drh: db_begin_transaction(); ac3f1f2ba7 2008-10-18 drh: @ <form action="%s(g.zBaseURL)/tktsetup_timeline" method="POST"> 0be54823ba 2008-10-18 drh: login_insert_csrf_secret(); ac3f1f2ba7 2008-10-18 drh: ac3f1f2ba7 2008-10-18 drh: @ <hr> ac3f1f2ba7 2008-10-18 drh: entry_attribute("Ticket Title", 40, "ticket-title-expr", "t", "title"); ac3f1f2ba7 2008-10-18 drh: @ <p>An SQL expression in a query against the TICKET table that will f0c8693845 2008-10-20 drh: @ return the title of the ticket for display purposes.</p> f0c8693845 2008-10-20 drh: f0c8693845 2008-10-20 drh: @ <hr> f0c8693845 2008-10-20 drh: entry_attribute("Ticket Status", 40, "ticket-status-column", "s", "status"); f0c8693845 2008-10-20 drh: @ <p>The name of the column in the TICKET table that contains the ticket f0c8693845 2008-10-20 drh: @ status in human-readable form. Case sensitive.</p> ac3f1f2ba7 2008-10-18 drh: ac3f1f2ba7 2008-10-18 drh: @ <hr> ac3f1f2ba7 2008-10-18 drh: entry_attribute("Ticket Closed", 40, "ticket-closed-expr", "c", ac3f1f2ba7 2008-10-18 drh: "status='Closed'"); ac3f1f2ba7 2008-10-18 drh: @ <p>An SQL expression that evaluates to true in a TICKET table query if ac3f1f2ba7 2008-10-18 drh: @ the ticket is closed.</p> ac3f1f2ba7 2008-10-18 drh: ac3f1f2ba7 2008-10-18 drh: @ <hr> ac3f1f2ba7 2008-10-18 drh: @ <p> ac3f1f2ba7 2008-10-18 drh: @ <input type="submit" name="submit" value="Apply Changes"> ac3f1f2ba7 2008-10-18 drh: @ <input type="submit" name="setup" value="Cancel"> ac3f1f2ba7 2008-10-18 drh: @ </p> ac3f1f2ba7 2008-10-18 drh: @ </form> ac3f1f2ba7 2008-10-18 drh: db_end_transaction(0); 1e9c0e287e 2007-10-03 drh: style_footer(); ac3f1f2ba7 2008-10-18 drh: 0edee97370 2007-10-03 drh: }