Fossil SCM

Added a user configurable TH1 template for the ticket report list.

jeremy_c 2010-01-09 18:32 trunk
Commit 14253e9b3336a629243248dbb4c96da27705304e
2 files changed +46 -56 +52
+46 -56
--- src/report.c
+++ src/report.c
@@ -33,73 +33,63 @@
3333
3434
/*
3535
** WEBPAGE: /reportlist
3636
*/
3737
void view_list(void){
38
+ const char *zScript;
39
+ Blob ril; /* Report Item List */
3840
Stmt q;
3941
int rn = 0;
4042
int cnt = 0;
4143
4244
login_check_credentials();
4345
if( !g.okRdTkt && !g.okNewTkt ){ login_needed(); return; }
4446
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
- @&nbsp;&nbsp;&nbsp;
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)&amp;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, "&nbsp;&nbsp;&nbsp;");
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&amp;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
+
10191
style_footer();
10292
}
10393
10494
/*
10595
** Remove whitespace from both ends of a string.
10696
--- 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 @&nbsp;&nbsp;&nbsp;
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)&amp;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, "&nbsp;&nbsp;&nbsp;");
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&amp;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
--- src/tktsetup.c
+++ src/tktsetup.c
@@ -50,10 +50,12 @@
5050
"HTML with embedded TH1 code for the \"new ticket\" webpage.");
5151
setup_menu_entry("View Ticket Page", "tktsetup_viewpage",
5252
"HTML with embedded TH1 code for the \"view ticket\" webpage.");
5353
setup_menu_entry("Edit Ticket Page", "tktsetup_editpage",
5454
"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.");
5557
setup_menu_entry("Report Template", "tktsetup_rpttplt",
5658
"The default ticket report format.");
5759
setup_menu_entry("Key Template", "tktsetup_keytplt",
5860
"The default color key for reports.");
5961
@ </table>
@@ -548,10 +550,60 @@
548550
"HTML For Editing Tickets",
549551
"ticket-editpage",
550552
zDefaultEdit,
551553
zDesc,
552554
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,
553605
0,
554606
40
555607
);
556608
}
557609
558610
--- 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

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button