Fossil SCM
Added a user configurable TH1 template for the ticket report list.
Commit
14253e9b3336a629243248dbb4c96da27705304e
Parent
6069602aba14bf7…
2 files changed
+46
-56
+52
+46
-56
| --- src/report.c | ||
| +++ src/report.c | ||
| @@ -33,73 +33,63 @@ | ||
| 33 | 33 | |
| 34 | 34 | /* |
| 35 | 35 | ** WEBPAGE: /reportlist |
| 36 | 36 | */ |
| 37 | 37 | void view_list(void){ |
| 38 | + const char *zScript; | |
| 39 | + Blob ril; /* Report Item List */ | |
| 38 | 40 | Stmt q; |
| 39 | 41 | int rn = 0; |
| 40 | 42 | int cnt = 0; |
| 41 | 43 | |
| 42 | 44 | login_check_credentials(); |
| 43 | 45 | if( !g.okRdTkt && !g.okNewTkt ){ login_needed(); return; } |
| 44 | 46 | style_header("Ticket Main Menu"); |
| 45 | - if( g.okNewTkt ){ | |
| 46 | - @ <p>Enter a new ticket:</p> | |
| 47 | - @ <ol><li value="1"><a href="tktnew">New ticket</a></li></ol> | |
| 48 | - @ | |
| 49 | - cnt++; | |
| 50 | - }else if( db_exists( | |
| 51 | - "SELECT 1 FROM user" | |
| 52 | - " WHERE login='anonymous' AND cap GLOB '*n*'") | |
| 53 | - ){ | |
| 54 | - @ <p><a href="login?anon=1&g=tktnew">Login as "anonymous"</a> | |
| 55 | - @ to enter a new ticket.</p> | |
| 56 | - } | |
| 57 | - if( !g.okRdTkt ){ | |
| 58 | - @ <p>You are not authorized to view existing tickets.</p> | |
| 59 | - }else{ | |
| 60 | - db_prepare(&q, "SELECT rn, title, owner FROM reportfmt ORDER BY title"); | |
| 61 | - @ <p>Choose a report format from the following list:</p> | |
| 62 | - @ <ol> | |
| 63 | - while( db_step(&q)==SQLITE_ROW ){ | |
| 64 | - const char *zTitle = db_column_text(&q, 1); | |
| 65 | - const char *zOwner = db_column_text(&q, 2); | |
| 66 | - if( zTitle[0] =='_' && !g.okTktFmt ){ | |
| 67 | - continue; | |
| 68 | - } | |
| 69 | - rn = db_column_int(&q, 0); | |
| 70 | - cnt++; | |
| 71 | - @ <li value="%d(cnt)"> | |
| 72 | - if( zTitle[0] == '_' ){ | |
| 73 | - @%h(zTitle) | |
| 74 | - } else { | |
| 75 | - @<a href="rptview?rn=%d(rn)" | |
| 76 | - @ rel="nofollow">%h(zTitle)</a> | |
| 77 | - } | |
| 78 | - @ | |
| 79 | - if( g.okWrite && zOwner && zOwner[0] ){ | |
| 80 | - @ (by <i>%h(zOwner)</i>) | |
| 81 | - } | |
| 82 | - if( g.okTktFmt ){ | |
| 83 | - @ [<a href="rptedit?rn=%d(rn)&copy=1" rel="nofollow">copy</a>] | |
| 84 | - } | |
| 85 | - if( g.okAdmin || (g.okWrTkt && zOwner && strcmp(g.zLogin,zOwner)==0) ){ | |
| 86 | - @ [<a href="rptedit?rn=%d(rn)" rel="nofollow">edit</a>] | |
| 87 | - } | |
| 88 | - if( g.okTktFmt ){ | |
| 89 | - @ [<a href="rptsql?rn=%d(rn)" rel="nofollow">sql</a>] | |
| 90 | - } | |
| 91 | - @ </li> | |
| 92 | - } | |
| 93 | - } | |
| 94 | - @ </ol> | |
| 95 | - if( g.okTktFmt ){ | |
| 96 | - @ <p>Create a new ticket display format:</p> | |
| 97 | - @ <ol> | |
| 98 | - @ <li value="%d(cnt+1)"><a href="rptnew">New report format</a></li> | |
| 99 | - @ </ol> | |
| 100 | - } | |
| 47 | + if( g.thTrace ) Th_Trace("BEGIN_REPORTLIST<br />\n", -1); | |
| 48 | + zScript = ticket_reportlist_code(); | |
| 49 | + if( g.thTrace ) Th_Trace("BEGIN_REPORTLIST_SCRIPT<br />\n", -1); | |
| 50 | + | |
| 51 | + blob_zero(&ril); | |
| 52 | + | |
| 53 | + db_prepare(&q, "SELECT rn, title, owner FROM reportfmt ORDER BY title"); | |
| 54 | + while( db_step(&q)==SQLITE_ROW ){ | |
| 55 | + const char *zTitle = db_column_text(&q, 1); | |
| 56 | + const char *zOwner = db_column_text(&q, 2); | |
| 57 | + if( zTitle[0] =='_' && !g.okTktFmt ){ | |
| 58 | + continue; | |
| 59 | + } | |
| 60 | + rn = db_column_int(&q, 0); | |
| 61 | + cnt++; | |
| 62 | + blob_appendf(&ril, "<li>"); | |
| 63 | + if( zTitle[0] == '_' ){ | |
| 64 | + blob_appendf(&ril, "%s", zTitle); | |
| 65 | + } else { | |
| 66 | + blob_appendf(&ril, "<a href=\"rptview?rn=%d\" rel=\"nofollow\">%h</a>", rn, zTitle); | |
| 67 | + } | |
| 68 | + blob_appendf(&ril, " "); | |
| 69 | + if( g.okWrite && zOwner && zOwner[0] ){ | |
| 70 | + blob_appendf(&ril, "(by <i>%h</i></i>) ", zOwner); | |
| 71 | + } | |
| 72 | + if( g.okTktFmt ){ | |
| 73 | + blob_appendf(&ril, "[<a href=\"rptedit?rn=%d&copy=1\" rel=\"nofollow\">copy</a>] ", rn); | |
| 74 | + } | |
| 75 | + if( g.okAdmin || (g.okWrTkt && zOwner && strcmp(g.zLogin,zOwner)==0) ){ | |
| 76 | + blob_appendf(&ril, "[<a href=\"rptedit?rn=%d\" rel=\"nofollow\">edit</a>] ", rn); | |
| 77 | + } | |
| 78 | + if( g.okTktFmt ){ | |
| 79 | + blob_appendf(&ril, "[<a href=\"rptsql?rn=%d\" rel=\"nofollow\">sql</a>] ", rn); | |
| 80 | + } | |
| 81 | + blob_appendf(&ril, "</li>\n"); | |
| 82 | + } | |
| 83 | + | |
| 84 | + Th_Store("report_items", blob_str(&ril)); | |
| 85 | + | |
| 86 | + Th_Render(zScript); | |
| 87 | + | |
| 88 | + blob_reset(&ril); | |
| 89 | + if( g.thTrace ) Th_Trace("END_REPORTLIST<br />\n", -1); | |
| 90 | + | |
| 101 | 91 | style_footer(); |
| 102 | 92 | } |
| 103 | 93 | |
| 104 | 94 | /* |
| 105 | 95 | ** Remove whitespace from both ends of a string. |
| 106 | 96 |
| --- src/report.c | |
| +++ src/report.c | |
| @@ -33,73 +33,63 @@ | |
| 33 | |
| 34 | /* |
| 35 | ** WEBPAGE: /reportlist |
| 36 | */ |
| 37 | void view_list(void){ |
| 38 | Stmt q; |
| 39 | int rn = 0; |
| 40 | int cnt = 0; |
| 41 | |
| 42 | login_check_credentials(); |
| 43 | if( !g.okRdTkt && !g.okNewTkt ){ login_needed(); return; } |
| 44 | style_header("Ticket Main Menu"); |
| 45 | if( g.okNewTkt ){ |
| 46 | @ <p>Enter a new ticket:</p> |
| 47 | @ <ol><li value="1"><a href="tktnew">New ticket</a></li></ol> |
| 48 | @ |
| 49 | cnt++; |
| 50 | }else if( db_exists( |
| 51 | "SELECT 1 FROM user" |
| 52 | " WHERE login='anonymous' AND cap GLOB '*n*'") |
| 53 | ){ |
| 54 | @ <p><a href="login?anon=1&g=tktnew">Login as "anonymous"</a> |
| 55 | @ to enter a new ticket.</p> |
| 56 | } |
| 57 | if( !g.okRdTkt ){ |
| 58 | @ <p>You are not authorized to view existing tickets.</p> |
| 59 | }else{ |
| 60 | db_prepare(&q, "SELECT rn, title, owner FROM reportfmt ORDER BY title"); |
| 61 | @ <p>Choose a report format from the following list:</p> |
| 62 | @ <ol> |
| 63 | while( db_step(&q)==SQLITE_ROW ){ |
| 64 | const char *zTitle = db_column_text(&q, 1); |
| 65 | const char *zOwner = db_column_text(&q, 2); |
| 66 | if( zTitle[0] =='_' && !g.okTktFmt ){ |
| 67 | continue; |
| 68 | } |
| 69 | rn = db_column_int(&q, 0); |
| 70 | cnt++; |
| 71 | @ <li value="%d(cnt)"> |
| 72 | if( zTitle[0] == '_' ){ |
| 73 | @%h(zTitle) |
| 74 | } else { |
| 75 | @<a href="rptview?rn=%d(rn)" |
| 76 | @ rel="nofollow">%h(zTitle)</a> |
| 77 | } |
| 78 | @ |
| 79 | if( g.okWrite && zOwner && zOwner[0] ){ |
| 80 | @ (by <i>%h(zOwner)</i>) |
| 81 | } |
| 82 | if( g.okTktFmt ){ |
| 83 | @ [<a href="rptedit?rn=%d(rn)&copy=1" rel="nofollow">copy</a>] |
| 84 | } |
| 85 | if( g.okAdmin || (g.okWrTkt && zOwner && strcmp(g.zLogin,zOwner)==0) ){ |
| 86 | @ [<a href="rptedit?rn=%d(rn)" rel="nofollow">edit</a>] |
| 87 | } |
| 88 | if( g.okTktFmt ){ |
| 89 | @ [<a href="rptsql?rn=%d(rn)" rel="nofollow">sql</a>] |
| 90 | } |
| 91 | @ </li> |
| 92 | } |
| 93 | } |
| 94 | @ </ol> |
| 95 | if( g.okTktFmt ){ |
| 96 | @ <p>Create a new ticket display format:</p> |
| 97 | @ <ol> |
| 98 | @ <li value="%d(cnt+1)"><a href="rptnew">New report format</a></li> |
| 99 | @ </ol> |
| 100 | } |
| 101 | style_footer(); |
| 102 | } |
| 103 | |
| 104 | /* |
| 105 | ** Remove whitespace from both ends of a string. |
| 106 |
| --- src/report.c | |
| +++ src/report.c | |
| @@ -33,73 +33,63 @@ | |
| 33 | |
| 34 | /* |
| 35 | ** WEBPAGE: /reportlist |
| 36 | */ |
| 37 | void view_list(void){ |
| 38 | const char *zScript; |
| 39 | Blob ril; /* Report Item List */ |
| 40 | Stmt q; |
| 41 | int rn = 0; |
| 42 | int cnt = 0; |
| 43 | |
| 44 | login_check_credentials(); |
| 45 | if( !g.okRdTkt && !g.okNewTkt ){ login_needed(); return; } |
| 46 | style_header("Ticket Main Menu"); |
| 47 | if( g.thTrace ) Th_Trace("BEGIN_REPORTLIST<br />\n", -1); |
| 48 | zScript = ticket_reportlist_code(); |
| 49 | if( g.thTrace ) Th_Trace("BEGIN_REPORTLIST_SCRIPT<br />\n", -1); |
| 50 | |
| 51 | blob_zero(&ril); |
| 52 | |
| 53 | db_prepare(&q, "SELECT rn, title, owner FROM reportfmt ORDER BY title"); |
| 54 | while( db_step(&q)==SQLITE_ROW ){ |
| 55 | const char *zTitle = db_column_text(&q, 1); |
| 56 | const char *zOwner = db_column_text(&q, 2); |
| 57 | if( zTitle[0] =='_' && !g.okTktFmt ){ |
| 58 | continue; |
| 59 | } |
| 60 | rn = db_column_int(&q, 0); |
| 61 | cnt++; |
| 62 | blob_appendf(&ril, "<li>"); |
| 63 | if( zTitle[0] == '_' ){ |
| 64 | blob_appendf(&ril, "%s", zTitle); |
| 65 | } else { |
| 66 | blob_appendf(&ril, "<a href=\"rptview?rn=%d\" rel=\"nofollow\">%h</a>", rn, zTitle); |
| 67 | } |
| 68 | blob_appendf(&ril, " "); |
| 69 | if( g.okWrite && zOwner && zOwner[0] ){ |
| 70 | blob_appendf(&ril, "(by <i>%h</i></i>) ", zOwner); |
| 71 | } |
| 72 | if( g.okTktFmt ){ |
| 73 | blob_appendf(&ril, "[<a href=\"rptedit?rn=%d&copy=1\" rel=\"nofollow\">copy</a>] ", rn); |
| 74 | } |
| 75 | if( g.okAdmin || (g.okWrTkt && zOwner && strcmp(g.zLogin,zOwner)==0) ){ |
| 76 | blob_appendf(&ril, "[<a href=\"rptedit?rn=%d\" rel=\"nofollow\">edit</a>] ", rn); |
| 77 | } |
| 78 | if( g.okTktFmt ){ |
| 79 | blob_appendf(&ril, "[<a href=\"rptsql?rn=%d\" rel=\"nofollow\">sql</a>] ", rn); |
| 80 | } |
| 81 | blob_appendf(&ril, "</li>\n"); |
| 82 | } |
| 83 | |
| 84 | Th_Store("report_items", blob_str(&ril)); |
| 85 | |
| 86 | Th_Render(zScript); |
| 87 | |
| 88 | blob_reset(&ril); |
| 89 | if( g.thTrace ) Th_Trace("END_REPORTLIST<br />\n", -1); |
| 90 | |
| 91 | style_footer(); |
| 92 | } |
| 93 | |
| 94 | /* |
| 95 | ** Remove whitespace from both ends of a string. |
| 96 |
+52
| --- src/tktsetup.c | ||
| +++ src/tktsetup.c | ||
| @@ -50,10 +50,12 @@ | ||
| 50 | 50 | "HTML with embedded TH1 code for the \"new ticket\" webpage."); |
| 51 | 51 | setup_menu_entry("View Ticket Page", "tktsetup_viewpage", |
| 52 | 52 | "HTML with embedded TH1 code for the \"view ticket\" webpage."); |
| 53 | 53 | setup_menu_entry("Edit Ticket Page", "tktsetup_editpage", |
| 54 | 54 | "HTML with embedded TH1 code for the \"edit ticket\" webpage."); |
| 55 | + setup_menu_entry("Report List Page", "tktsetup_reportlist", | |
| 56 | + "HTML with embedded TH1 code for the \"report list\" webpage."); | |
| 55 | 57 | setup_menu_entry("Report Template", "tktsetup_rpttplt", |
| 56 | 58 | "The default ticket report format."); |
| 57 | 59 | setup_menu_entry("Key Template", "tktsetup_keytplt", |
| 58 | 60 | "The default color key for reports."); |
| 59 | 61 | @ </table> |
| @@ -548,10 +550,60 @@ | ||
| 548 | 550 | "HTML For Editing Tickets", |
| 549 | 551 | "ticket-editpage", |
| 550 | 552 | zDefaultEdit, |
| 551 | 553 | zDesc, |
| 552 | 554 | 0, |
| 555 | + 0, | |
| 556 | + 40 | |
| 557 | + ); | |
| 558 | +} | |
| 559 | + | |
| 560 | +/* | |
| 561 | +** The default report list page | |
| 562 | +*/ | |
| 563 | +static const char zDefaultReportList[] = | |
| 564 | +@ <th1> | |
| 565 | +@ if {[hascap n]} { | |
| 566 | +@ html "<p>Enter a new ticket:</p>" | |
| 567 | +@ html "<ul><li><a href='tktnew'>New ticket</a></li></ul>" | |
| 568 | +@ } | |
| 569 | +@ </th1> | |
| 570 | +@ | |
| 571 | +@ <p>Choose a report format from the following list:</p> | |
| 572 | +@ <ol> | |
| 573 | +@ <th1>html $report_items</th1> | |
| 574 | +@ </ol> | |
| 575 | +@ | |
| 576 | +@ <th1> | |
| 577 | +@ if {[hascap t]} { | |
| 578 | +@ html "<p>Create a new ticket display format:</p>" | |
| 579 | +@ html "<ul><li><a href='rptnew'>New report format</a></li></ul>" | |
| 580 | +@ } | |
| 581 | +@ </th1> | |
| 582 | +; | |
| 583 | + | |
| 584 | +/* | |
| 585 | +** Return the code used to generate the report list | |
| 586 | +*/ | |
| 587 | +const char *ticket_reportlist_code(void){ | |
| 588 | + return db_get("ticket-reportlist", (char*)zDefaultEdit); | |
| 589 | +} | |
| 590 | + | |
| 591 | +/* | |
| 592 | +** WEBPAGE: tktsetup_reportlist | |
| 593 | +*/ | |
| 594 | +void tktsetup_reportlist(void){ | |
| 595 | + static const char zDesc[] = | |
| 596 | + @ <p>Enter HTML with embedded TH1 script that will render the "report list" | |
| 597 | + @ page</p> | |
| 598 | + ; | |
| 599 | + tktsetup_generic( | |
| 600 | + "HTML For Report List", | |
| 601 | + "ticket-reportlist", | |
| 602 | + zDefaultReportList, | |
| 603 | + zDesc, | |
| 604 | + 0, | |
| 553 | 605 | 0, |
| 554 | 606 | 40 |
| 555 | 607 | ); |
| 556 | 608 | } |
| 557 | 609 | |
| 558 | 610 |
| --- src/tktsetup.c | |
| +++ src/tktsetup.c | |
| @@ -50,10 +50,12 @@ | |
| 50 | "HTML with embedded TH1 code for the \"new ticket\" webpage."); |
| 51 | setup_menu_entry("View Ticket Page", "tktsetup_viewpage", |
| 52 | "HTML with embedded TH1 code for the \"view ticket\" webpage."); |
| 53 | setup_menu_entry("Edit Ticket Page", "tktsetup_editpage", |
| 54 | "HTML with embedded TH1 code for the \"edit ticket\" webpage."); |
| 55 | setup_menu_entry("Report Template", "tktsetup_rpttplt", |
| 56 | "The default ticket report format."); |
| 57 | setup_menu_entry("Key Template", "tktsetup_keytplt", |
| 58 | "The default color key for reports."); |
| 59 | @ </table> |
| @@ -548,10 +550,60 @@ | |
| 548 | "HTML For Editing Tickets", |
| 549 | "ticket-editpage", |
| 550 | zDefaultEdit, |
| 551 | zDesc, |
| 552 | 0, |
| 553 | 0, |
| 554 | 40 |
| 555 | ); |
| 556 | } |
| 557 | |
| 558 |
| --- src/tktsetup.c | |
| +++ src/tktsetup.c | |
| @@ -50,10 +50,12 @@ | |
| 50 | "HTML with embedded TH1 code for the \"new ticket\" webpage."); |
| 51 | setup_menu_entry("View Ticket Page", "tktsetup_viewpage", |
| 52 | "HTML with embedded TH1 code for the \"view ticket\" webpage."); |
| 53 | setup_menu_entry("Edit Ticket Page", "tktsetup_editpage", |
| 54 | "HTML with embedded TH1 code for the \"edit ticket\" webpage."); |
| 55 | setup_menu_entry("Report List Page", "tktsetup_reportlist", |
| 56 | "HTML with embedded TH1 code for the \"report list\" webpage."); |
| 57 | setup_menu_entry("Report Template", "tktsetup_rpttplt", |
| 58 | "The default ticket report format."); |
| 59 | setup_menu_entry("Key Template", "tktsetup_keytplt", |
| 60 | "The default color key for reports."); |
| 61 | @ </table> |
| @@ -548,10 +550,60 @@ | |
| 550 | "HTML For Editing Tickets", |
| 551 | "ticket-editpage", |
| 552 | zDefaultEdit, |
| 553 | zDesc, |
| 554 | 0, |
| 555 | 0, |
| 556 | 40 |
| 557 | ); |
| 558 | } |
| 559 | |
| 560 | /* |
| 561 | ** The default report list page |
| 562 | */ |
| 563 | static const char zDefaultReportList[] = |
| 564 | @ <th1> |
| 565 | @ if {[hascap n]} { |
| 566 | @ html "<p>Enter a new ticket:</p>" |
| 567 | @ html "<ul><li><a href='tktnew'>New ticket</a></li></ul>" |
| 568 | @ } |
| 569 | @ </th1> |
| 570 | @ |
| 571 | @ <p>Choose a report format from the following list:</p> |
| 572 | @ <ol> |
| 573 | @ <th1>html $report_items</th1> |
| 574 | @ </ol> |
| 575 | @ |
| 576 | @ <th1> |
| 577 | @ if {[hascap t]} { |
| 578 | @ html "<p>Create a new ticket display format:</p>" |
| 579 | @ html "<ul><li><a href='rptnew'>New report format</a></li></ul>" |
| 580 | @ } |
| 581 | @ </th1> |
| 582 | ; |
| 583 | |
| 584 | /* |
| 585 | ** Return the code used to generate the report list |
| 586 | */ |
| 587 | const char *ticket_reportlist_code(void){ |
| 588 | return db_get("ticket-reportlist", (char*)zDefaultEdit); |
| 589 | } |
| 590 | |
| 591 | /* |
| 592 | ** WEBPAGE: tktsetup_reportlist |
| 593 | */ |
| 594 | void tktsetup_reportlist(void){ |
| 595 | static const char zDesc[] = |
| 596 | @ <p>Enter HTML with embedded TH1 script that will render the "report list" |
| 597 | @ page</p> |
| 598 | ; |
| 599 | tktsetup_generic( |
| 600 | "HTML For Report List", |
| 601 | "ticket-reportlist", |
| 602 | zDefaultReportList, |
| 603 | zDesc, |
| 604 | 0, |
| 605 | 0, |
| 606 | 40 |
| 607 | ); |
| 608 | } |
| 609 | |
| 610 |