Fossil SCM

Add the ticket-default-report setting, which if set to the title of a ticket report causes that ticket report to be displayed below the search box in the /ticket page.

drh 2021-07-11 23:43 trunk merge
Commit c51ace6bc8bd0e16a66c53d11cb9ac16617469984ee1505a8501d1d4c3dd4e9f
+68 -22
--- src/report.c
+++ src/report.c
@@ -27,10 +27,18 @@
2727
2828
#ifndef SQLITE_RECURSIVE
2929
# define SQLITE_RECURSIVE 33
3030
#endif
3131
32
+/* Settings that can be used to control ticket reports */
33
+/*
34
+** SETTING: ticket-default-report width=80
35
+** If this setting has a string value, then when the ticket
36
+** search page query is blank, the report with this title is shown.
37
+** If the setting is blank (default), then no report is shown.
38
+*/
39
+
3240
/*
3341
** WEBPAGE: reportlist
3442
**
3543
** Main menu for Tickets.
3644
*/
@@ -38,10 +46,11 @@
3846
const char *zScript;
3947
Blob ril; /* Report Item List */
4048
Stmt q;
4149
int rn = 0;
4250
int cnt = 0;
51
+ char *defaultReport = db_get("ticket-default-report", 0);
4352
4453
login_check_credentials();
4554
if( !g.perm.RdTkt && !g.perm.NewTkt ){
4655
login_needed(g.anon.RdTkt || g.anon.NewTkt);
4756
return;
@@ -85,10 +94,13 @@
8594
href("%R/rptedit?rn=%d", rn));
8695
}
8796
if( g.perm.TktFmt ){
8897
blob_appendf(&ril, "[%zsql</a>]",
8998
href("%R/rptsql?rn=%d", rn));
99
+ }
100
+ if( fossil_strcmp(zTitle, defaultReport)==0 ){
101
+ blob_appendf(&ril, "&nbsp;← default");
90102
}
91103
blob_appendf(&ril, "</li>\n");
92104
}
93105
db_finalize(&q);
94106
@@ -384,10 +396,11 @@
384396
const char *z;
385397
const char *zOwner;
386398
const char *zClrKey;
387399
char *zSQL;
388400
char *zErr = 0;
401
+ int dflt = P("dflt") ? 1 : 0;
389402
390403
login_check_credentials();
391404
if( !g.perm.TktFmt ){
392405
login_needed(g.anon.TktFmt);
393406
return;
@@ -452,10 +465,18 @@
452465
}else{
453466
db_multi_exec("INSERT INTO reportfmt(title,sqlcode,owner,cols,mtime) "
454467
"VALUES(%Q,%Q,%Q,%Q,now())",
455468
zTitle, zSQL, zOwner, zClrKey);
456469
rn = db_last_insert_rowid();
470
+ }
471
+ if( dflt ){
472
+ db_set("ticket-default-report", zTitle, 0);
473
+ }else{
474
+ char *defaultReport = db_get("ticket-default-report", 0);
475
+ if( fossil_strcmp(zTitle, defaultReport)==0 ){
476
+ db_set("ticket-default-report", "", 0);
477
+ }
457478
}
458479
cgi_redirect(mprintf("rptview?rn=%d", rn));
459480
return;
460481
}
461482
}else if( rn==0 ){
@@ -465,14 +486,16 @@
465486
}else{
466487
Stmt q;
467488
db_prepare(&q, "SELECT title, sqlcode, owner, cols "
468489
"FROM reportfmt WHERE rn=%d",rn);
469490
if( db_step(&q)==SQLITE_ROW ){
491
+ char *defaultReport = db_get("ticket-default-report", 0);
470492
zTitle = db_column_malloc(&q, 0);
471493
zSQL = db_column_malloc(&q, 1);
472494
zOwner = db_column_malloc(&q, 2);
473495
zClrKey = db_column_malloc(&q, 3);
496
+ dflt = fossil_strcmp(zTitle, defaultReport)==0;
474497
}
475498
db_finalize(&q);
476499
if( P("copy") ){
477500
rn = 0;
478501
zTitle = mprintf("Copy Of %s", zTitle);
@@ -507,10 +530,12 @@
507530
@ color key is displayed.) Each line contains the text for a single
508531
@ entry in the key. The first token of each line is the background
509532
@ color for that line.<br />
510533
@ <textarea name="k" rows="8" cols="50">%h(zClrKey)</textarea>
511534
@ </p>
535
+ @ <p><label><input type="checkbox" name="dflt" %s(dflt?"checked":"")> \
536
+ @ Make this the default report</label></p>
512537
if( !g.perm.Admin && fossil_strcmp(zOwner,g.zLogin)!=0 ){
513538
@ <p>This report format is owned by %h(zOwner). You are not allowed
514539
@ to change it.</p>
515540
@ </form>
516541
report_format_hints();
@@ -982,10 +1007,22 @@
9821007
** corresponding to REPORTFMT.RN. If the tablist query parameter exists,
9831008
** then the output consists of lines of tab-separated fields instead of
9841009
** an HTML table.
9851010
*/
9861011
void rptview_page(void){
1012
+ rptview_page_content(0, 1, 1);
1013
+}
1014
+
1015
+/*
1016
+** Render a report.
1017
+*/
1018
+void rptview_page_content(
1019
+ const char *defaultTitleSearch, /* If rn and title query parameters are
1020
+ blank, search reports by this title. */
1021
+ int pageWrap, /* If true, render full page; otherwise, just the report */
1022
+ int redirectMissing /* If true and report not found, go to reportlist */
1023
+){
9871024
int count = 0;
9881025
int rn, rc;
9891026
char *zSql;
9901027
char *zTitle;
9911028
char *zOwner;
@@ -1001,19 +1038,24 @@
10011038
db_prepare(&q,
10021039
"SELECT title, sqlcode, owner, cols, rn FROM reportfmt WHERE rn=%d",
10031040
atoi(PD("rn","0")));
10041041
rc = db_step(&q);
10051042
if( rc!=SQLITE_ROW ){
1043
+ const char *titleSearch =
1044
+ defaultTitleSearch==0 || trim_string(defaultTitleSearch)[0]==0 ?
1045
+ P("title") : defaultTitleSearch;
10061046
db_finalize(&q);
10071047
db_prepare(&q,
10081048
"SELECT title, sqlcode, owner, cols, rn FROM reportfmt WHERE title GLOB %Q",
1009
- P("title"));
1049
+ titleSearch);
10101050
rc = db_step(&q);
10111051
}
10121052
if( rc!=SQLITE_ROW ){
10131053
db_finalize(&q);
1014
- cgi_redirect("reportlist");
1054
+ if( redirectMissing ) {
1055
+ cgi_redirect("reportlist");
1056
+ }
10151057
return;
10161058
}
10171059
zTitle = db_column_malloc(&q, 0);
10181060
zSql = db_column_malloc(&q, 1);
10191061
zOwner = db_column_malloc(&q, 2);
@@ -1041,29 +1083,31 @@
10411083
struct GenerateHTML sState = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
10421084
const char *zQS = PD("QUERY_STRING","");
10431085
10441086
db_multi_exec("PRAGMA empty_result_callbacks=ON");
10451087
style_set_current_feature("report");
1046
- /* style_finish_page() should provide escaping via %h formatting */
1047
- if( zQS[0] ){
1048
- style_submenu_element("Raw","%R/%s?tablist=1&%s",g.zPath,zQS);
1049
- style_submenu_element("Reports","%R/reportlist?%s",zQS);
1050
- } else {
1051
- style_submenu_element("Raw","%R/%s?tablist=1",g.zPath);
1052
- style_submenu_element("Reports","%R/reportlist");
1053
- }
1054
- if( g.perm.Admin
1055
- || (g.perm.TktFmt && g.zLogin && fossil_strcmp(g.zLogin,zOwner)==0) ){
1056
- style_submenu_element("Edit", "rptedit?rn=%d", rn);
1057
- }
1058
- if( g.perm.TktFmt ){
1059
- style_submenu_element("SQL", "rptsql?rn=%d",rn);
1060
- }
1061
- if( g.perm.NewTkt ){
1062
- style_submenu_element("New Ticket", "%R/tktnew");
1063
- }
1064
- style_header("%s", zTitle);
1088
+ if( pageWrap ) {
1089
+ /* style_finish_page() should provide escaping via %h formatting */
1090
+ if( zQS[0] ){
1091
+ style_submenu_element("Raw","%R/%s?tablist=1&%s",g.zPath,zQS);
1092
+ style_submenu_element("Reports","%R/reportlist?%s",zQS);
1093
+ } else {
1094
+ style_submenu_element("Raw","%R/%s?tablist=1",g.zPath);
1095
+ style_submenu_element("Reports","%R/reportlist");
1096
+ }
1097
+ if( g.perm.Admin
1098
+ || (g.perm.TktFmt && g.zLogin && fossil_strcmp(g.zLogin,zOwner)==0) ){
1099
+ style_submenu_element("Edit", "rptedit?rn=%d", rn);
1100
+ }
1101
+ if( g.perm.TktFmt ){
1102
+ style_submenu_element("SQL", "rptsql?rn=%d",rn);
1103
+ }
1104
+ if( g.perm.NewTkt ){
1105
+ style_submenu_element("New Ticket", "%R/tktnew");
1106
+ }
1107
+ style_header("%s", zTitle);
1108
+ }
10651109
output_color_key(zClrKey, 1,
10661110
"border=\"0\" cellpadding=\"3\" cellspacing=\"0\" class=\"report\"");
10671111
@ <table border="1" cellpadding="2" cellspacing="0" class="report sortable"
10681112
@ data-column-types='' data-init-sort='0'>
10691113
sState.rn = rn;
@@ -1076,11 +1120,13 @@
10761120
@ <p class="reportError">Error: %h(zErr1)</p>
10771121
}else if( zErr2 ){
10781122
@ <p class="reportError">Error: %h(zErr2)</p>
10791123
}
10801124
style_table_sorter();
1081
- style_finish_page();
1125
+ if( pageWrap ) {
1126
+ style_finish_page();
1127
+ }
10821128
}else{
10831129
report_restrict_sql(&zErr1);
10841130
db_exec_readonly(g.db, zSql, output_tab_separated, &count, &zErr2);
10851131
report_unrestrict_sql();
10861132
cgi_set_content_type("text/plain");
10871133
--- src/report.c
+++ src/report.c
@@ -27,10 +27,18 @@
27
28 #ifndef SQLITE_RECURSIVE
29 # define SQLITE_RECURSIVE 33
30 #endif
31
 
 
 
 
 
 
 
 
32 /*
33 ** WEBPAGE: reportlist
34 **
35 ** Main menu for Tickets.
36 */
@@ -38,10 +46,11 @@
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.perm.RdTkt && !g.perm.NewTkt ){
46 login_needed(g.anon.RdTkt || g.anon.NewTkt);
47 return;
@@ -85,10 +94,13 @@
85 href("%R/rptedit?rn=%d", rn));
86 }
87 if( g.perm.TktFmt ){
88 blob_appendf(&ril, "[%zsql</a>]",
89 href("%R/rptsql?rn=%d", rn));
 
 
 
90 }
91 blob_appendf(&ril, "</li>\n");
92 }
93 db_finalize(&q);
94
@@ -384,10 +396,11 @@
384 const char *z;
385 const char *zOwner;
386 const char *zClrKey;
387 char *zSQL;
388 char *zErr = 0;
 
389
390 login_check_credentials();
391 if( !g.perm.TktFmt ){
392 login_needed(g.anon.TktFmt);
393 return;
@@ -452,10 +465,18 @@
452 }else{
453 db_multi_exec("INSERT INTO reportfmt(title,sqlcode,owner,cols,mtime) "
454 "VALUES(%Q,%Q,%Q,%Q,now())",
455 zTitle, zSQL, zOwner, zClrKey);
456 rn = db_last_insert_rowid();
 
 
 
 
 
 
 
 
457 }
458 cgi_redirect(mprintf("rptview?rn=%d", rn));
459 return;
460 }
461 }else if( rn==0 ){
@@ -465,14 +486,16 @@
465 }else{
466 Stmt q;
467 db_prepare(&q, "SELECT title, sqlcode, owner, cols "
468 "FROM reportfmt WHERE rn=%d",rn);
469 if( db_step(&q)==SQLITE_ROW ){
 
470 zTitle = db_column_malloc(&q, 0);
471 zSQL = db_column_malloc(&q, 1);
472 zOwner = db_column_malloc(&q, 2);
473 zClrKey = db_column_malloc(&q, 3);
 
474 }
475 db_finalize(&q);
476 if( P("copy") ){
477 rn = 0;
478 zTitle = mprintf("Copy Of %s", zTitle);
@@ -507,10 +530,12 @@
507 @ color key is displayed.) Each line contains the text for a single
508 @ entry in the key. The first token of each line is the background
509 @ color for that line.<br />
510 @ <textarea name="k" rows="8" cols="50">%h(zClrKey)</textarea>
511 @ </p>
 
 
512 if( !g.perm.Admin && fossil_strcmp(zOwner,g.zLogin)!=0 ){
513 @ <p>This report format is owned by %h(zOwner). You are not allowed
514 @ to change it.</p>
515 @ </form>
516 report_format_hints();
@@ -982,10 +1007,22 @@
982 ** corresponding to REPORTFMT.RN. If the tablist query parameter exists,
983 ** then the output consists of lines of tab-separated fields instead of
984 ** an HTML table.
985 */
986 void rptview_page(void){
 
 
 
 
 
 
 
 
 
 
 
 
987 int count = 0;
988 int rn, rc;
989 char *zSql;
990 char *zTitle;
991 char *zOwner;
@@ -1001,19 +1038,24 @@
1001 db_prepare(&q,
1002 "SELECT title, sqlcode, owner, cols, rn FROM reportfmt WHERE rn=%d",
1003 atoi(PD("rn","0")));
1004 rc = db_step(&q);
1005 if( rc!=SQLITE_ROW ){
 
 
 
1006 db_finalize(&q);
1007 db_prepare(&q,
1008 "SELECT title, sqlcode, owner, cols, rn FROM reportfmt WHERE title GLOB %Q",
1009 P("title"));
1010 rc = db_step(&q);
1011 }
1012 if( rc!=SQLITE_ROW ){
1013 db_finalize(&q);
1014 cgi_redirect("reportlist");
 
 
1015 return;
1016 }
1017 zTitle = db_column_malloc(&q, 0);
1018 zSql = db_column_malloc(&q, 1);
1019 zOwner = db_column_malloc(&q, 2);
@@ -1041,29 +1083,31 @@
1041 struct GenerateHTML sState = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
1042 const char *zQS = PD("QUERY_STRING","");
1043
1044 db_multi_exec("PRAGMA empty_result_callbacks=ON");
1045 style_set_current_feature("report");
1046 /* style_finish_page() should provide escaping via %h formatting */
1047 if( zQS[0] ){
1048 style_submenu_element("Raw","%R/%s?tablist=1&%s",g.zPath,zQS);
1049 style_submenu_element("Reports","%R/reportlist?%s",zQS);
1050 } else {
1051 style_submenu_element("Raw","%R/%s?tablist=1",g.zPath);
1052 style_submenu_element("Reports","%R/reportlist");
1053 }
1054 if( g.perm.Admin
1055 || (g.perm.TktFmt && g.zLogin && fossil_strcmp(g.zLogin,zOwner)==0) ){
1056 style_submenu_element("Edit", "rptedit?rn=%d", rn);
1057 }
1058 if( g.perm.TktFmt ){
1059 style_submenu_element("SQL", "rptsql?rn=%d",rn);
1060 }
1061 if( g.perm.NewTkt ){
1062 style_submenu_element("New Ticket", "%R/tktnew");
1063 }
1064 style_header("%s", zTitle);
 
 
1065 output_color_key(zClrKey, 1,
1066 "border=\"0\" cellpadding=\"3\" cellspacing=\"0\" class=\"report\"");
1067 @ <table border="1" cellpadding="2" cellspacing="0" class="report sortable"
1068 @ data-column-types='' data-init-sort='0'>
1069 sState.rn = rn;
@@ -1076,11 +1120,13 @@
1076 @ <p class="reportError">Error: %h(zErr1)</p>
1077 }else if( zErr2 ){
1078 @ <p class="reportError">Error: %h(zErr2)</p>
1079 }
1080 style_table_sorter();
1081 style_finish_page();
 
 
1082 }else{
1083 report_restrict_sql(&zErr1);
1084 db_exec_readonly(g.db, zSql, output_tab_separated, &count, &zErr2);
1085 report_unrestrict_sql();
1086 cgi_set_content_type("text/plain");
1087
--- src/report.c
+++ src/report.c
@@ -27,10 +27,18 @@
27
28 #ifndef SQLITE_RECURSIVE
29 # define SQLITE_RECURSIVE 33
30 #endif
31
32 /* Settings that can be used to control ticket reports */
33 /*
34 ** SETTING: ticket-default-report width=80
35 ** If this setting has a string value, then when the ticket
36 ** search page query is blank, the report with this title is shown.
37 ** If the setting is blank (default), then no report is shown.
38 */
39
40 /*
41 ** WEBPAGE: reportlist
42 **
43 ** Main menu for Tickets.
44 */
@@ -38,10 +46,11 @@
46 const char *zScript;
47 Blob ril; /* Report Item List */
48 Stmt q;
49 int rn = 0;
50 int cnt = 0;
51 char *defaultReport = db_get("ticket-default-report", 0);
52
53 login_check_credentials();
54 if( !g.perm.RdTkt && !g.perm.NewTkt ){
55 login_needed(g.anon.RdTkt || g.anon.NewTkt);
56 return;
@@ -85,10 +94,13 @@
94 href("%R/rptedit?rn=%d", rn));
95 }
96 if( g.perm.TktFmt ){
97 blob_appendf(&ril, "[%zsql</a>]",
98 href("%R/rptsql?rn=%d", rn));
99 }
100 if( fossil_strcmp(zTitle, defaultReport)==0 ){
101 blob_appendf(&ril, "&nbsp;← default");
102 }
103 blob_appendf(&ril, "</li>\n");
104 }
105 db_finalize(&q);
106
@@ -384,10 +396,11 @@
396 const char *z;
397 const char *zOwner;
398 const char *zClrKey;
399 char *zSQL;
400 char *zErr = 0;
401 int dflt = P("dflt") ? 1 : 0;
402
403 login_check_credentials();
404 if( !g.perm.TktFmt ){
405 login_needed(g.anon.TktFmt);
406 return;
@@ -452,10 +465,18 @@
465 }else{
466 db_multi_exec("INSERT INTO reportfmt(title,sqlcode,owner,cols,mtime) "
467 "VALUES(%Q,%Q,%Q,%Q,now())",
468 zTitle, zSQL, zOwner, zClrKey);
469 rn = db_last_insert_rowid();
470 }
471 if( dflt ){
472 db_set("ticket-default-report", zTitle, 0);
473 }else{
474 char *defaultReport = db_get("ticket-default-report", 0);
475 if( fossil_strcmp(zTitle, defaultReport)==0 ){
476 db_set("ticket-default-report", "", 0);
477 }
478 }
479 cgi_redirect(mprintf("rptview?rn=%d", rn));
480 return;
481 }
482 }else if( rn==0 ){
@@ -465,14 +486,16 @@
486 }else{
487 Stmt q;
488 db_prepare(&q, "SELECT title, sqlcode, owner, cols "
489 "FROM reportfmt WHERE rn=%d",rn);
490 if( db_step(&q)==SQLITE_ROW ){
491 char *defaultReport = db_get("ticket-default-report", 0);
492 zTitle = db_column_malloc(&q, 0);
493 zSQL = db_column_malloc(&q, 1);
494 zOwner = db_column_malloc(&q, 2);
495 zClrKey = db_column_malloc(&q, 3);
496 dflt = fossil_strcmp(zTitle, defaultReport)==0;
497 }
498 db_finalize(&q);
499 if( P("copy") ){
500 rn = 0;
501 zTitle = mprintf("Copy Of %s", zTitle);
@@ -507,10 +530,12 @@
530 @ color key is displayed.) Each line contains the text for a single
531 @ entry in the key. The first token of each line is the background
532 @ color for that line.<br />
533 @ <textarea name="k" rows="8" cols="50">%h(zClrKey)</textarea>
534 @ </p>
535 @ <p><label><input type="checkbox" name="dflt" %s(dflt?"checked":"")> \
536 @ Make this the default report</label></p>
537 if( !g.perm.Admin && fossil_strcmp(zOwner,g.zLogin)!=0 ){
538 @ <p>This report format is owned by %h(zOwner). You are not allowed
539 @ to change it.</p>
540 @ </form>
541 report_format_hints();
@@ -982,10 +1007,22 @@
1007 ** corresponding to REPORTFMT.RN. If the tablist query parameter exists,
1008 ** then the output consists of lines of tab-separated fields instead of
1009 ** an HTML table.
1010 */
1011 void rptview_page(void){
1012 rptview_page_content(0, 1, 1);
1013 }
1014
1015 /*
1016 ** Render a report.
1017 */
1018 void rptview_page_content(
1019 const char *defaultTitleSearch, /* If rn and title query parameters are
1020 blank, search reports by this title. */
1021 int pageWrap, /* If true, render full page; otherwise, just the report */
1022 int redirectMissing /* If true and report not found, go to reportlist */
1023 ){
1024 int count = 0;
1025 int rn, rc;
1026 char *zSql;
1027 char *zTitle;
1028 char *zOwner;
@@ -1001,19 +1038,24 @@
1038 db_prepare(&q,
1039 "SELECT title, sqlcode, owner, cols, rn FROM reportfmt WHERE rn=%d",
1040 atoi(PD("rn","0")));
1041 rc = db_step(&q);
1042 if( rc!=SQLITE_ROW ){
1043 const char *titleSearch =
1044 defaultTitleSearch==0 || trim_string(defaultTitleSearch)[0]==0 ?
1045 P("title") : defaultTitleSearch;
1046 db_finalize(&q);
1047 db_prepare(&q,
1048 "SELECT title, sqlcode, owner, cols, rn FROM reportfmt WHERE title GLOB %Q",
1049 titleSearch);
1050 rc = db_step(&q);
1051 }
1052 if( rc!=SQLITE_ROW ){
1053 db_finalize(&q);
1054 if( redirectMissing ) {
1055 cgi_redirect("reportlist");
1056 }
1057 return;
1058 }
1059 zTitle = db_column_malloc(&q, 0);
1060 zSql = db_column_malloc(&q, 1);
1061 zOwner = db_column_malloc(&q, 2);
@@ -1041,29 +1083,31 @@
1083 struct GenerateHTML sState = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
1084 const char *zQS = PD("QUERY_STRING","");
1085
1086 db_multi_exec("PRAGMA empty_result_callbacks=ON");
1087 style_set_current_feature("report");
1088 if( pageWrap ) {
1089 /* style_finish_page() should provide escaping via %h formatting */
1090 if( zQS[0] ){
1091 style_submenu_element("Raw","%R/%s?tablist=1&%s",g.zPath,zQS);
1092 style_submenu_element("Reports","%R/reportlist?%s",zQS);
1093 } else {
1094 style_submenu_element("Raw","%R/%s?tablist=1",g.zPath);
1095 style_submenu_element("Reports","%R/reportlist");
1096 }
1097 if( g.perm.Admin
1098 || (g.perm.TktFmt && g.zLogin && fossil_strcmp(g.zLogin,zOwner)==0) ){
1099 style_submenu_element("Edit", "rptedit?rn=%d", rn);
1100 }
1101 if( g.perm.TktFmt ){
1102 style_submenu_element("SQL", "rptsql?rn=%d",rn);
1103 }
1104 if( g.perm.NewTkt ){
1105 style_submenu_element("New Ticket", "%R/tktnew");
1106 }
1107 style_header("%s", zTitle);
1108 }
1109 output_color_key(zClrKey, 1,
1110 "border=\"0\" cellpadding=\"3\" cellspacing=\"0\" class=\"report\"");
1111 @ <table border="1" cellpadding="2" cellspacing="0" class="report sortable"
1112 @ data-column-types='' data-init-sort='0'>
1113 sState.rn = rn;
@@ -1076,11 +1120,13 @@
1120 @ <p class="reportError">Error: %h(zErr1)</p>
1121 }else if( zErr2 ){
1122 @ <p class="reportError">Error: %h(zErr2)</p>
1123 }
1124 style_table_sorter();
1125 if( pageWrap ) {
1126 style_finish_page();
1127 }
1128 }else{
1129 report_restrict_sql(&zErr1);
1130 db_exec_readonly(g.db, zSql, output_tab_separated, &count, &zErr2);
1131 report_unrestrict_sql();
1132 cgi_set_content_type("text/plain");
1133
+7 -1
--- src/tkt.c
+++ src/tkt.c
@@ -1636,12 +1636,18 @@
16361636
** Usage: /tktsrch?s=PATTERN
16371637
**
16381638
** Full-text search of all current tickets
16391639
*/
16401640
void tkt_srchpage(void){
1641
+ char *defaultReport;
16411642
login_check_credentials();
16421643
style_set_current_feature("tkt");
16431644
style_header("Ticket Search");
16441645
ticket_standard_submenu(T_ALL_BUT(T_SRCH));
1645
- search_screen(SRCH_TKT, 0);
1646
+ if( !search_screen(SRCH_TKT, 0) ){
1647
+ defaultReport = db_get("ticket-default-report", 0);
1648
+ if( defaultReport ){
1649
+ rptview_page_content(defaultReport, 0, 0);
1650
+ }
1651
+ }
16461652
style_finish_page();
16471653
}
16481654
--- src/tkt.c
+++ src/tkt.c
@@ -1636,12 +1636,18 @@
1636 ** Usage: /tktsrch?s=PATTERN
1637 **
1638 ** Full-text search of all current tickets
1639 */
1640 void tkt_srchpage(void){
 
1641 login_check_credentials();
1642 style_set_current_feature("tkt");
1643 style_header("Ticket Search");
1644 ticket_standard_submenu(T_ALL_BUT(T_SRCH));
1645 search_screen(SRCH_TKT, 0);
 
 
 
 
 
1646 style_finish_page();
1647 }
1648
--- src/tkt.c
+++ src/tkt.c
@@ -1636,12 +1636,18 @@
1636 ** Usage: /tktsrch?s=PATTERN
1637 **
1638 ** Full-text search of all current tickets
1639 */
1640 void tkt_srchpage(void){
1641 char *defaultReport;
1642 login_check_credentials();
1643 style_set_current_feature("tkt");
1644 style_header("Ticket Search");
1645 ticket_standard_submenu(T_ALL_BUT(T_SRCH));
1646 if( !search_screen(SRCH_TKT, 0) ){
1647 defaultReport = db_get("ticket-default-report", 0);
1648 if( defaultReport ){
1649 rptview_page_content(defaultReport, 0, 0);
1650 }
1651 }
1652 style_finish_page();
1653 }
1654
--- test/tester.tcl
+++ test/tester.tcl
@@ -351,10 +351,11 @@
351351
ssl-ca-location \
352352
ssl-identity \
353353
tclsh \
354354
th1-setup \
355355
th1-uri-regexp \
356
+ ticket-default-report \
356357
user-color-map \
357358
uv-sync \
358359
web-browser]
359360
360361
fossil test-th-eval "hasfeature legacyMvRm"
361362
--- test/tester.tcl
+++ test/tester.tcl
@@ -351,10 +351,11 @@
351 ssl-ca-location \
352 ssl-identity \
353 tclsh \
354 th1-setup \
355 th1-uri-regexp \
 
356 user-color-map \
357 uv-sync \
358 web-browser]
359
360 fossil test-th-eval "hasfeature legacyMvRm"
361
--- test/tester.tcl
+++ test/tester.tcl
@@ -351,10 +351,11 @@
351 ssl-ca-location \
352 ssl-identity \
353 tclsh \
354 th1-setup \
355 th1-uri-regexp \
356 ticket-default-report \
357 user-color-map \
358 uv-sync \
359 web-browser]
360
361 fossil test-th-eval "hasfeature legacyMvRm"
362

Keyboard Shortcuts

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