Diff
Not logged in

Differences From:

File src/tktsetup.c part of check-in [ce277cadda] - Incremental work on tickets and especially ticket configuration. by drh on 2008-05-25 19:36:47. [view]

To:

File src/tktsetup.c part of check-in [86db6fa150] - Split of the ticket configuratio into separately editable pieces. by drh on 2008-05-28 15:29:16. [view]

@@ -56,9 +56,9 @@
   style_footer();
 }
 
 /* @-comment: ** */
-static char zDefaultTab[] =
+static const char zDefaultTicketTable[] =
 @ CREATE TABLE ticket(
 @   -- Do not change any column that begins with tkt_
 @   tkt_id INTEGER PRIMARY KEY,
 @   tkt_uuid TEXT,
@@ -79,15 +79,24 @@
 @ );
 ;
 
 /*
+** Return the ticket table definition
+*/
+const char *ticket_table_schema(void){
+  return db_get("ticket-table", (char*)zDefaultTicketTable);
+}
+
+/*
 ** 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 *zDfltValue,       /* Default text value */
   const char *zDesc,            /* Description of this field */
+  char *(*xText)(const char*),  /* Validitity test or NULL */
+  void (*xRebuild)(void),       /* Run after successulf update */
   int height                    /* Height of the edit box */
 ){
   const char *z;
   int isSubmit;
@@ -99,23 +108,29 @@
   if( P("setup") ){
     cgi_redirect("tktsetup");
   }
   isSubmit = P("submit")!=0;
-  db_begin_transaction();
   z = P("x");
   if( z==0 ){
-    z = db_get(zDbField, zDfltValue);
+    z = db_get(zDbField, (char*)zDfltValue);
   }
   style_header("Edit %s", zTitle);
   if( P("clear")!=0 ){
     db_unset(zDbField, 0);
+    if( xRebuild ) xRebuild();
     z = zDfltValue;
   }else if( isSubmit ){
-    db_set(zDbField, z, 0);
+    char *zErr = 0;
+    if( xText && (zErr = xText(z))!=0 ){
+      @ <p><font color="red"><b>ERROR: %h(zErr)</b></font></p>
+    }else{
+      db_set(zDbField, z, 0);
+      if( xRebuild ) xRebuild();
+    }
   }
   @ <form action="%s(g.zBaseURL)/%s(g.zPath)" method="POST">
   @ %s(zDesc)
-  @ <textarea name="tab" rows="%d(height)" cols="80">%h(z)</textarea>
+  @ <textarea name="x" 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">
@@ -124,9 +139,8 @@
   @ <h2>Default %s(zTitle)</h2>
   @ <blockquote><pre>
   @ %h(zDfltValue)
   @ </pre></blockquote>
-  db_end_transaction(0);
   style_footer();
 }
 
 /*
@@ -140,15 +154,17 @@
   ;
   tktsetup_generic(
     "Ticket Table Schema",
     "ticket-table",
-    zDefaultTab,
+    zDefaultTicketTable,
     zDesc,
+    ticket_schema_check,
+    ticket_rebuild,
     20
   );
 }
 
-static char zDefaultCom[] =
+static const char zDefaultTicketCommon[] =
 @ set type_choices {
 @    Code_Defect
 @    Build_Problem
 @    Documentation
@@ -193,8 +209,15 @@
 @ set subsystem_choices {one two three}
 ;
 
 /*
+** Return the ticket common code.
+*/
+const char *ticket_common_code(void){
+  return db_get("ticket-common", (char*)zDefaultTicketCommon);
+}
+
+/*
 ** WEBPAGE: tktsetup_com
 */
 void tktsetup_com_page(void){
   static const char zDesc[] =
@@ -203,15 +226,17 @@
   ;
   tktsetup_generic(
     "Ticket Common Script",
     "ticket-common",
-    zDefaultCom,
+    zDefaultTicketCommon,
     zDesc,
+    0,
+    0,
     30
   );
 }
 
-static char zDefaultNew[] =
+static const char zDefaultNew[] =
 @ <th1>
 @   if {[info exists submit]} {
 @      set status Open
 @      submit_ticket
@@ -286,8 +311,15 @@
 @ </table>
 ;
 
 /*
+** Return the code used to generate the new ticket page
+*/
+const char *ticket_newpage_code(void){
+  return db_get("ticket-newpage", (char*)zDefaultNew);
+}
+
+/*
 ** WEBPAGE: tktsetup_newpage
 */
 void tktsetup_newpage_page(void){
   static const char zDesc[] =
@@ -298,13 +330,15 @@
     "HTML For New Tickets",
     "ticket-newpage",
     zDefaultNew,
     zDesc,
+    0,
+    0,
     40
   );
 }
 
-static char zDefaultView[] =
+static const char zDefaultView[] =
 @ <table cellpadding="5">
 @ <tr><td align="right">Title:</td><td>
 @ $<title>
 @ </td></tr>
@@ -342,8 +376,15 @@
 ;
 
 
 /*
+** Return the code used to generate the view ticket page
+*/
+const char *ticket_viewpage_code(void){
+  return db_get("ticket-viewpage", (char*)zDefaultView);
+}
+
+/*
 ** WEBPAGE: tktsetup_viewpage
 */
 void tktsetup_viewpage_page(void){
   static const char zDesc[] =
@@ -354,13 +395,15 @@
     "HTML For Viewing Tickets",
     "ticket-viewpage",
     zDefaultView,
     zDesc,
+    0,
+    0,
     40
   );
 }
 
-static char zDefaultEdit[] =
+static const char zDefaultEdit[] =
 @ <th1>
 @   if {![info exists username]} {set username $login}
 @   if {[info exists submit]} {
 @     if {[info exists cmappnd]} {
@@ -436,8 +479,15 @@
 @ </table>
 ;
 
 /*
+** Return the code used to generate the edit ticket page
+*/
+const char *ticket_editpage_code(void){
+  return db_get("ticket-editpage", (char*)zDefaultEdit);
+}
+
+/*
 ** WEBPAGE: tktsetup_editpage
 */
 void tktsetup_editpage_page(void){
   static const char zDesc[] =
@@ -448,7 +498,9 @@
     "HTML For Editing Tickets",
     "ticket-editpage",
     zDefaultEdit,
     zDesc,
+    0,
+    0,
     40
   );
 }