Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Incremental work on tickets and especially ticket configuration. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
ce277caddac488a112e53841b93cc31b |
User & Date: | drh 2008-05-25 19:36:47.000 |
Context
2008-05-28
| ||
15:29 | Split of the ticket configuratio into separately editable pieces. ... (check-in: 86db6fa1 user: drh tags: trunk) | |
2008-05-25
| ||
19:36 | Incremental work on tickets and especially ticket configuration. ... (check-in: ce277cad user: drh tags: trunk) | |
11:50 | Allow command-line options of the form "--name=value". ... (check-in: be758137 user: drh tags: trunk) | |
Changes
Changes to src/report.c.
︙ | ︙ | |||
674 675 676 677 678 679 680 | void *pUser, /* Pointer to output state */ int nArg, /* Number of columns in this result row */ char **azArg, /* Text of data in all columns */ char **azName /* Names of the columns */ ){ struct GenerateHTML *pState = (struct GenerateHTML*)pUser; int i; | | | 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 | void *pUser, /* Pointer to output state */ int nArg, /* Number of columns in this result row */ char **azArg, /* Text of data in all columns */ char **azName /* Names of the columns */ ){ struct GenerateHTML *pState = (struct GenerateHTML*)pUser; int i; 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 */ rn = pState->rn; |
︙ | ︙ | |||
715 716 717 718 719 720 721 | } } } /* The first time this routine is called, output a table header */ @ <tr> | | | | < < | > | | 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 | } } } /* The first time this routine is called, output a table header */ @ <tr> 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 && zTid ){ @ <th> </th> zTid = 0; } if( zName[0]=='_' ) zName++; @ </tr><tr><th colspan=%d(pState->nCol)>%h(zName)</th> }else{ if( zName[0]=='#' ){ zTid = zName; } @ <th>%h(zName)</th> } } if( g.okWrite && zTid ){ @ <th> </th> } @ </tr> } if( azArg==0 ){ @ <tr><td colspan="%d(pState->nCol)"> @ <i>No records match the report criteria</i> |
︙ | ︙ | |||
759 760 761 762 763 764 765 | } /* 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)"> | | | | | > | > > | | | | | 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 | } /* 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)"> 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( 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)> blob_init(&content, zData, -1); wiki_convert(&content, 0, 0); blob_reset(&content); } }else if( azName[i][0]=='#' ){ 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( zTid && g.okWrite ){ @ <td valign="top"><a href="tktedit/%h(zTid)">edit</a></td> } @ </tr> return 0; } /* ** Output the text given in the argument. Convert tabs and newlines into |
︙ | ︙ |
Changes to src/setup.c.
︙ | ︙ | |||
64 65 66 67 68 69 70 | "Grant privileges to individual users."); setup_menu_entry("Access", "setup_access", "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"); | | | 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | "Grant privileges to individual users."); setup_menu_entry("Access", "setup_access", "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", "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"); setup_menu_entry("Footer", "setup_footer", "Edit HTML text inserted at the bottom of every page"); |
︙ | ︙ |
Changes to src/tktsetup.c.
︙ | ︙ | |||
26 27 28 29 30 31 32 | */ #include "config.h" #include "tktsetup.h" #include <assert.h> /* ** Main sub-menu for configuring the ticketing system. | | > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 | */ #include "config.h" #include "tktsetup.h" #include <assert.h> /* ** Main sub-menu for configuring the ticketing system. ** WEBPAGE: tktsetup */ void tktsetup_page(void){ login_check_credentials(); if( !g.okSetup ){ login_needed(); } style_header("Ticket Setup"); @ <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 ); } |