Overview
SHA1 Hash: | 49380d500a1259b4dd10230c83d0816264d4e59d |
---|---|
Date: | 2008-05-28 18:48:12 |
User: | drh |
Comment: | Continuing work on the ticketing system. |
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/login.c from [659c4f23c6] to [43d8acf6c2].
@@ -311,11 +311,12 @@ switch( zCap[i] ){ case 's': g.okSetup = 1; case 'a': g.okAdmin = g.okRdTkt = g.okWrTkt = g.okQuery = g.okRdWiki = g.okWrWiki = g.okNewWiki = g.okApndWiki = g.okHistory = g.okClone = - g.okNewTkt = g.okPassword = g.okRdAddr = 1; + g.okNewTkt = g.okPassword = g.okRdAddr = + g.okTktFmt = 1; case 'i': g.okRead = g.okWrite = 1; break; case 'o': g.okRead = 1; break; case 'd': g.okDelete = 1; break; case 'h': g.okHistory = 1; break; @@ -332,10 +333,11 @@ case 'r': g.okRdTkt = 1; break; case 'n': g.okNewTkt = 1; break; case 'w': g.okWrTkt = g.okRdTkt = g.okNewTkt = g.okApndTkt = 1; break; case 'c': g.okApndTkt = 1; break; + case 't': g.okTktFmt = 1; break; } } } /* @@ -364,10 +366,11 @@ case 'o': rc = g.okRead; break; case 'p': rc = g.okPassword; break; case 'q': rc = g.okQuery; break; case 'r': rc = g.okRdTkt; break; case 's': rc = g.okSetup; break; + case 't': rc = g.okTktFmt; break; case 'w': rc = g.okWrTkt; break; default: rc = 0; break; } } return rc;
Modified src/main.c from [8f6eeea4b5] to [96c79d2faa].
@@ -114,10 +114,11 @@ int okWrWiki; /* k: edit wiki via web */ int okRdTkt; /* r: view tickets via web */ int okNewTkt; /* n: create new tickets */ int okApndTkt; /* c: append to tickets via the web */ int okWrTkt; /* w: make changes to tickets via web */ + int okTktFmt; /* t: create new ticket report formats */ int okRdAddr; /* e: read email addresses on tickets */ FILE *fDebug; /* Write debug information here, if the file exists */ /* Storage for the aux() and/or option() SQL function arguments */
Modified src/report.c from [754ebac1f2] to [5e81235a00].
@@ -35,17 +35,18 @@ ** WEBPAGE: /reportlist */ void view_list(void){ Stmt q; int rn = 0; + int cnt = 1; login_check_credentials(); if( !g.okRdTkt && !g.okNewTkt ){ login_needed(); return; } style_header("Bug Report Main Menu"); if( g.okNewTkt ){ @ <p>Enter a new bug report:</p> - @ <ol><li value="0"><a href="tktnew">New bug report</a></li></ol> + @ <ol><li value="1"><a href="tktnew">New bug report</a></li></ol> @ } if( !g.okRdTkt ){ @ <p>You are not authorized to view existing bug reports.</p> }else{ @@ -54,16 +55,17 @@ @ <ol> while( db_step(&q)==SQLITE_ROW ){ rn = db_column_int(&q, 0); const char *zTitle = db_column_text(&q, 1); const char *zOwner = db_column_text(&q, 2); - @ <li value="%d(rn)"><a href="rptview?rn=%d(rn)" + cnt++; + @ <li value="%d(cnt)"><a href="rptview?rn=%d(rn)" @ rel="nofollow">%h(zTitle)</a> if( g.okWrite && zOwner && zOwner[0] ){ @ (by <i>%h(zOwner)</i>) } - if( g.okWrTkt ){ + if( g.okTktFmt ){ @ [<a href="rptedit?rn=%d(rn)&copy=1" rel="nofollow">copy</a>] } if( g.okAdmin || (g.okWrTkt && zOwner && strcmp(g.zLogin,zOwner)==0) ){ @ [<a href="rptedit?rn=%d(rn)" rel="nofollow">edit</a>] } @@ -70,14 +72,14 @@ @ [<a href="rptsql?rn=%d(rn)" rel="nofollow">sql</a>] @ </li> } } @ </ol> - if( g.okWrTkt ){ + if( g.okTktFmt ){ @ <p>Create a new bug report display format:</p> @ <ol> - @ <li value="%d(rn+1)"><a href="rptnew">New report format</a></li> + @ <li value="%d(cnt+1)"><a href="rptnew">New report format</a></li> @ </ol> } style_footer(); } @@ -293,11 +295,11 @@ void view_edit(void){ int rn; const char *zTitle; const char *z; const char *zOwner; - char *zClrKey; + const char *zClrKey; char *zSQL; char *zErr = 0; login_check_credentials(); if( !g.okQuery ){ @@ -360,40 +362,12 @@ cgi_redirect(mprintf("rptview?rn=%d", rn)); return; } }else if( rn==0 ){ zTitle = ""; - zSQL = - @ SELECT - @ CASE WHEN status IN ('new','active') THEN '#f2dcdc' - @ WHEN status='review' THEN '#e8e8bd' - @ WHEN status='fixed' THEN '#cfe8bd' - @ WHEN status='tested' THEN '#bde5d6' - @ WHEN status='defer' THEN '#cacae5' - @ ELSE '#c8c8c8' END AS 'bgcolor', - @ tn AS '#', - @ type AS 'Type', - @ status AS 'Status', - @ sdate(origtime) AS 'Created', - @ owner AS 'By', - @ subsystem AS 'Subsys', - @ sdate(changetime) AS 'Changed', - @ assignedto AS 'Assigned', - @ severity AS 'Svr', - @ priority AS 'Pri', - @ title AS 'Title' - @ FROM ticket - ; - zClrKey = - @ #ffffff Key: - @ #f2dcdc Active - @ #e8e8e8 Review - @ #cfe8bd Fixed - @ #bde5d6 Tested - @ #cacae5 Deferred - @ #c8c8c8 Closed - ; + zSQL = ticket_report_template(); + zClrKey = ticket_key_template(); }else{ Stmt q; db_prepare(&q, "SELECT title, sqlcode, owner, cols " "FROM reportfmt WHERE rn=%d",rn); if( db_step(&q)==SQLITE_ROW ){
Modified src/setup.c from [bebb1229f9] to [8169d5ad06].
@@ -148,10 +148,11 @@ @ <li value="15"><b>Check-Out</b>: Check out versions</li> @ <li value="16"><b>Password</b>: Change your own password</li> @ <li value="17"><b>Query</b>: Create new queries against tickets</li> @ <li value="18"><b>Read-Tkt</b>: View tickets</li> @ <li value="19"><b>Setup:</b> Setup and configure this website</li> + @ <li value="20"><b>Tkt-Report:</b> Create new bug summary reports</li> @ <li value="23"><b>Write-Tkt</b>: Edit tickets</li> @ </ol> @ </p></li> @ @ <li><p> @@ -171,10 +172,11 @@ */ void user_edit(void){ const char *zId, *zLogin, *zInfo, *zCap; char *oaa, *oas, *oar, *oaw, *oan, *oai, *oaj, *oao, *oap; char *oak, *oad, *oaq, *oac, *oaf, *oam, *oah, *oag, *oae; + char *oat; int doWrite; int uid; int higherUser = 0; /* True if user being edited is SETUP and the */ /* user doing the editing is ADMIN. Disallow editing */ @@ -205,11 +207,11 @@ */ doWrite = cgi_all("login","info","pw") && !higherUser; if( doWrite ){ const char *zPw; const char *zLogin; - char zCap[30]; + char zCap[50]; int i = 0; int aa = P("aa")!=0; int ad = P("ad")!=0; int ae = P("ae")!=0; int ai = P("ai")!=0; @@ -225,10 +227,11 @@ int ac = P("ac")!=0; int af = P("af")!=0; int am = P("am")!=0; int ah = P("ah")!=0; int ag = P("ag")!=0; + int at = P("at")!=0; if( aa ){ zCap[i++] = 'a'; } if( ac ){ zCap[i++] = 'c'; } if( ad ){ zCap[i++] = 'd'; } if( ae ){ zCap[i++] = 'e'; } if( af ){ zCap[i++] = 'f'; } @@ -242,10 +245,11 @@ if( ao ){ zCap[i++] = 'o'; } if( ap ){ zCap[i++] = 'p'; } if( aq ){ zCap[i++] = 'q'; } if( ar ){ zCap[i++] = 'r'; } if( as ){ zCap[i++] = 's'; } + if( at ){ zCap[i++] = 't'; } if( aw ){ zCap[i++] = 'w'; } zCap[i] = 0; zPw = P("pw"); if( zPw==0 || zPw[0]==0 ){ @@ -276,11 +280,11 @@ */ zLogin = ""; zInfo = ""; zCap = ""; oaa = oac = oad = oae = oaf = oag = oah = oai = oaj = oak = oam = - oan = oao = oap = oaq = oar = oas = oaw = ""; + oan = oao = oap = oaq = oar = oas = oat = oaw = ""; if( uid ){ zLogin = db_text("", "SELECT login FROM user WHERE uid=%d", uid); zInfo = db_text("", "SELECT info FROM user WHERE uid=%d", uid); zCap = db_text("", "SELECT cap FROM user WHERE uid=%d", uid); if( strchr(zCap, 'a') ) oaa = " checked"; @@ -298,10 +302,11 @@ if( strchr(zCap, 'o') ) oao = " checked"; if( strchr(zCap, 'p') ) oap = " checked"; if( strchr(zCap, 'q') ) oaq = " checked"; if( strchr(zCap, 'r') ) oar = " checked"; if( strchr(zCap, 's') ) oas = " checked"; + if( strchr(zCap, 't') ) oat = " checked"; if( strchr(zCap, 'w') ) oaw = " checked"; } /* Begin generating the page */ @@ -350,11 +355,12 @@ @ <input type="checkbox" name="am"%s(oam)>Append Wiki</input><br> @ <input type="checkbox" name="ak"%s(oak)>Write Wiki</input><br> @ <input type="checkbox" name="ar"%s(oar)>Read Tkt</input><br> @ <input type="checkbox" name="an"%s(oan)>New Tkt</input><br> @ <input type="checkbox" name="ac"%s(oac)>Append Tkt</input><br> - @ <input type="checkbox" name="aw"%s(oaw)>Write Tkt</input> + @ <input type="checkbox" name="aw"%s(oaw)>Write Tkt</input><br> + @ <input type="checkbox" name="at"%s(oat)>Tkt Report</input> @ </td> @ </tr> @ <tr> @ <td align="right">Password:</td> @ <td><input type="password" name="pw" value=""></td>
Modified src/tkt.c from [0e6ecf299d] to [0ee8650d53].
@@ -102,12 +102,13 @@ static void initializeVariablesFromDb(void){ const char *zName; Stmt q; int i, n, size, j; - zName = PD("name",""); - db_prepare(&q, "SELECT * FROM ticket WHERE tkt_uuid GLOB '%q*'", zName); + zName = PD("name","-none-"); + db_prepare(&q, "SELECT datetime(tkt_mtime) AS tkt_datetime, *" + " FROM ticket WHERE tkt_uuid GLOB '%q*'", zName); if( db_step(&q)==SQLITE_ROW ){ n = db_column_count(&q); for(i=0; i<n; i++){ const char *zVal = db_column_text(&q, i); const char *zName = db_column_name(&q, i);
Modified src/tktsetup.c from [bcb0231e49] to [05495fef8d].
@@ -48,12 +48,14 @@ "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", + setup_menu_entry("Report Template", "tktsetup_rpttplt", "The default ticket report format."); + setup_menu_entry("Key Template", "tktsetup_keytplt", + "The default color key for reports."); @ </table> style_footer(); } /* @-comment: ** */ @@ -198,11 +200,11 @@ @ Drive_By_Patch @ } @ set status_choices { @ Open @ Verified -@ In_Process +@ Review @ Deferred @ Fixed @ Tested @ Closed @ } @@ -240,10 +242,11 @@ @ if {[info exists submit]} { @ set status Open @ submit_ticket @ } @ </th1> +@ <h1 align="center">Enter A New Bug Report</h1> @ <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>"> @@ -274,11 +277,11 @@ @ @ <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 +@ <td><u>Not publicly visible</u>. Used by developers to contact you with @ questions.</td> @ </tr> @ @ <tr> @ <td colspan="2"> @@ -337,42 +340,52 @@ ); } static const char zDefaultView[] = @ <table cellpadding="5"> -@ <tr><td align="right">Title:</td><td> +@ <tr><td align="right">Ticket UUID:</td><td bgcolor="#d0d0d0" colspan="3"> +@ $<tkt_uuid> +@ </td></tr> +@ <tr><td align="right">Title:</td> +@ <td bgcolor="#d0d0d0" colspan="3" valign="top"> @ $<title> @ </td></tr> -@ <tr><td align="right">Status:</td><td> +@ <tr><td align="right">Status:</td><td bgcolor="#d0d0d0"> @ $<status> -@ </td></tr> -@ <tr><td align="right">Type:</td><td> +@ </td> +@ <td align="right">Type:</td><td bgcolor="#d0d0d0"> @ $<type> @ </td></tr> -@ <tr><td align="right">Severity:</td><td> +@ <tr><td align="right">Severity:</td><td bgcolor="#d0d0d0"> @ $<severity> -@ </td></tr> -@ <tr><td align="right">Priority:</td><td> +@ </td> +@ <td align="right">Priority:</td><td bgcolor="#d0d0d0"> @ $<priority> @ </td></tr> -@ <tr><td align="right">Resolution:</td><td> +@ <tr><td align="right">Subsystem:</td><td bgcolor="#d0d0d0"> +@ $<subsystem> +@ </td> +@ <td align="right">Resolution:</td><td bgcolor="#d0d0d0"> @ $<resolution> @ </td></tr> -@ <tr><td align="right">Subsystem:</td><td> -@ $<subsystem> -@ </td></tr> +@ <tr><td align="right">Last Modified:</td><td bgcolor="#d0d0d0"> +@ $<tkt_datetime> +@ </td> @ <th1>enable_output [hascap e]</th1> -@ <tr><td align="right">Contact:</td><td> +@ <td align="right">Contact:</td><td bgcolor="#d0d0d0"> @ $<contact> -@ </td></tr> +@ </td> @ <th1>enable_output 1</th1> -@ <tr><td align="right">Version Found In:</td><td> +@ </tr> +@ <tr><td align="right">Version Found In:</td> +@ <td colspan="3" valign="top" bgcolor="#d0d0d0"> @ $<foundin> @ </td></tr> -@ <tr><td colspan="2"> +@ <tr><td>Description & Comments:</td></tr> +@ <tr><td colspan="4" bgcolor="#d0d0d0"> @ Description And Comments:<br> -@ <th1>wiki $comment</th1> +@ <span bgcolor="#d0d0d0"><th1>wiki $comment</th1></span> @ </td></tr> @ </table> ; @@ -500,7 +513,97 @@ zDefaultEdit, zDesc, 0, 0, 40 + ); +} + +/* +** The default template ticket report format: +*/ +static char zDefaultReport[] = +@ SELECT +@ CASE WHEN status IN ('Open','Verified') THEN '#f2dcdc' +@ WHEN status='Review' THEN '#e8e8e8' +@ WHEN status='Fixed' THEN '#cfe8bd' +@ WHEN status='Tested' THEN '#bde5d6' +@ WHEN status='Deferred' THEN '#cacae5' +@ ELSE '#c8c8c8' END AS 'bgcolor', +@ substr(tkt_uuid,1,10) AS '#', +@ datetime(tkt_mtime) AS 'mtime', +@ type, +@ status, +@ subsystem, +@ title, +@ comment AS '_comments' +@ FROM ticket +; + + +/* +** Return the template ticket report format: +*/ +char *ticket_report_template(void){ + return db_get("ticket-report-template", zDefaultReport); +} + +/* +** WEBPAGE: tktsetup_rpttplt +*/ +void tktsetup_rpttplt_page(void){ + static const char zDesc[] = + @ <p>Enter the default ticket report format template. This is the + @ the template report format that initial appears when creating a + @ new ticket summary report.</p> + ; + tktsetup_generic( + "Default Report Template", + "ticket-report-template", + zDefaultReport, + zDesc, + 0, + 0, + 20 + ); +} + +/* +** The default template ticket key: +*/ +static const char zDefaultKey[] = +@ #ffffff Key: +@ #f2dcdc Active +@ #e8e8e8 Review +@ #cfe8bd Fixed +@ #bde5d6 Tested +@ #cacae5 Deferred +@ #c8c8c8 Closed +; + + +/* +** Return the template ticket report format: +*/ +const char *ticket_key_template(void){ + return db_get("ticket-key-template", (char*)zDefaultKey); +} + +/* +** WEBPAGE: tktsetup_keytplt +*/ +void tktsetup_keytplt_page(void){ + static const char zDesc[] = + @ <p>Enter the default ticket report key template. This is the + @ the template report format that initial appears when creating a + @ new ticket summary report.</p> + ; + tktsetup_generic( + "Default Report Template", + "ticket-report-template", + zDefaultReport, + zDesc, + 0, + 0, + 20 ); }