Fossil SCM

Add support for omitting some ticket events from the default timeline view. Filtering is defined by the 'ticket-hidden-expr' option added to the <tt>/tktsetup_timeline</tt> page. Filtering is bypassed if this expression is unset or if the "Unhide" checkbox (at the timeline's submenu) is checked. See [forum:/forumthread/4c49b2ad661c90b7|forum thread 4c49b2ad661c] for discussion.

george 2022-12-12 16:12 trunk
Commit 452805c2a02e17f0a6d780066fb88635a357e8442d4e1c535b1d88a878a0cc59
--- src/configure.c
+++ src/configure.c
@@ -162,10 +162,11 @@
162162
{ "ticket-reportlist", CONFIGSET_TKT },
163163
{ "ticket-report-template", CONFIGSET_TKT },
164164
{ "ticket-key-template", CONFIGSET_TKT },
165165
{ "ticket-title-expr", CONFIGSET_TKT },
166166
{ "ticket-closed-expr", CONFIGSET_TKT },
167
+ { "ticket-hidden-expr", CONFIGSET_TKT },
167168
{ "@reportfmt", CONFIGSET_TKT },
168169
169170
{ "@user", CONFIGSET_USER },
170171
{ "user-color-map", CONFIGSET_USER },
171172
172173
--- src/configure.c
+++ src/configure.c
@@ -162,10 +162,11 @@
162 { "ticket-reportlist", CONFIGSET_TKT },
163 { "ticket-report-template", CONFIGSET_TKT },
164 { "ticket-key-template", CONFIGSET_TKT },
165 { "ticket-title-expr", CONFIGSET_TKT },
166 { "ticket-closed-expr", CONFIGSET_TKT },
 
167 { "@reportfmt", CONFIGSET_TKT },
168
169 { "@user", CONFIGSET_USER },
170 { "user-color-map", CONFIGSET_USER },
171
172
--- src/configure.c
+++ src/configure.c
@@ -162,10 +162,11 @@
162 { "ticket-reportlist", CONFIGSET_TKT },
163 { "ticket-report-template", CONFIGSET_TKT },
164 { "ticket-key-template", CONFIGSET_TKT },
165 { "ticket-title-expr", CONFIGSET_TKT },
166 { "ticket-closed-expr", CONFIGSET_TKT },
167 { "ticket-hidden-expr", CONFIGSET_TKT },
168 { "@reportfmt", CONFIGSET_TKT },
169
170 { "@user", CONFIGSET_USER },
171 { "user-color-map", CONFIGSET_USER },
172
173
+13 -1
--- src/timeline.c
+++ src/timeline.c
@@ -1979,10 +1979,18 @@
19791979
blob_append_sql(&sql,
19801980
" AND NOT EXISTS(SELECT 1 FROM tagxref"
19811981
" WHERE tagid=%d AND tagtype>0 AND rid=blob.rid)\n",
19821982
TAG_HIDDEN
19831983
);
1984
+ if( *zType=='a' || *zType=='t' || *zType=='n' ){
1985
+ const char *zExpr = db_get("ticket-hidden-expr",0);
1986
+ if( zExpr && zExpr[0] ){
1987
+ blob_append_sql(&sql,
1988
+ " AND NOT EXISTS(SELECT 1 FROM ticketchng JOIN ticket USING(tkt_id)"
1989
+ " WHERE tkt_rid=blob.rid AND\n\t\t( %z ))\n", zExpr/*safe-for-%s*/);
1990
+ }
1991
+ }
19841992
}
19851993
if( ((from_rid && to_rid) || (me_rid && you_rid)) && g.perm.Read ){
19861994
/* If from= and to= are present, display all nodes on a path connecting
19871995
** the two */
19881996
PathNode *p = 0;
@@ -2664,11 +2672,15 @@
26642672
zNewerButtonLabel = "More";
26652673
}
26662674
free(zDate);
26672675
}
26682676
if( advancedMenu ){
2669
- if( zType[0]=='a' || zType[0]=='c' ){
2677
+ const char *zExpr = 0;
2678
+ if( zType[0]=='t' || zType[0]=='n' ){
2679
+ zExpr = db_get("ticket-hidden-expr",0);
2680
+ }
2681
+ if( (zExpr && zExpr[0]) || zType[0]=='a' || zType[0]=='c' ){
26702682
style_submenu_checkbox("unhide", "Unhide", 0, 0);
26712683
}
26722684
style_submenu_checkbox("v", "Files",(zType[0]!='a' && zType[0]!='c'),0);
26732685
}
26742686
style_submenu_entry("n","Max:",4,0);
26752687
--- src/timeline.c
+++ src/timeline.c
@@ -1979,10 +1979,18 @@
1979 blob_append_sql(&sql,
1980 " AND NOT EXISTS(SELECT 1 FROM tagxref"
1981 " WHERE tagid=%d AND tagtype>0 AND rid=blob.rid)\n",
1982 TAG_HIDDEN
1983 );
 
 
 
 
 
 
 
 
1984 }
1985 if( ((from_rid && to_rid) || (me_rid && you_rid)) && g.perm.Read ){
1986 /* If from= and to= are present, display all nodes on a path connecting
1987 ** the two */
1988 PathNode *p = 0;
@@ -2664,11 +2672,15 @@
2664 zNewerButtonLabel = "More";
2665 }
2666 free(zDate);
2667 }
2668 if( advancedMenu ){
2669 if( zType[0]=='a' || zType[0]=='c' ){
 
 
 
 
2670 style_submenu_checkbox("unhide", "Unhide", 0, 0);
2671 }
2672 style_submenu_checkbox("v", "Files",(zType[0]!='a' && zType[0]!='c'),0);
2673 }
2674 style_submenu_entry("n","Max:",4,0);
2675
--- src/timeline.c
+++ src/timeline.c
@@ -1979,10 +1979,18 @@
1979 blob_append_sql(&sql,
1980 " AND NOT EXISTS(SELECT 1 FROM tagxref"
1981 " WHERE tagid=%d AND tagtype>0 AND rid=blob.rid)\n",
1982 TAG_HIDDEN
1983 );
1984 if( *zType=='a' || *zType=='t' || *zType=='n' ){
1985 const char *zExpr = db_get("ticket-hidden-expr",0);
1986 if( zExpr && zExpr[0] ){
1987 blob_append_sql(&sql,
1988 " AND NOT EXISTS(SELECT 1 FROM ticketchng JOIN ticket USING(tkt_id)"
1989 " WHERE tkt_rid=blob.rid AND\n\t\t( %z ))\n", zExpr/*safe-for-%s*/);
1990 }
1991 }
1992 }
1993 if( ((from_rid && to_rid) || (me_rid && you_rid)) && g.perm.Read ){
1994 /* If from= and to= are present, display all nodes on a path connecting
1995 ** the two */
1996 PathNode *p = 0;
@@ -2664,11 +2672,15 @@
2672 zNewerButtonLabel = "More";
2673 }
2674 free(zDate);
2675 }
2676 if( advancedMenu ){
2677 const char *zExpr = 0;
2678 if( zType[0]=='t' || zType[0]=='n' ){
2679 zExpr = db_get("ticket-hidden-expr",0);
2680 }
2681 if( (zExpr && zExpr[0]) || zType[0]=='a' || zType[0]=='c' ){
2682 style_submenu_checkbox("unhide", "Unhide", 0, 0);
2683 }
2684 style_submenu_checkbox("v", "Files",(zType[0]!='a' && zType[0]!='c'),0);
2685 }
2686 style_submenu_entry("n","Max:",4,0);
2687
--- src/tktsetup.c
+++ src/tktsetup.c
@@ -933,10 +933,16 @@
933933
"status='Closed'", 0);
934934
@ <p>An SQL expression that evaluates to true in a TICKET table query if
935935
@ the ticket is closed.
936936
@ (Property: ticket-closed-expr)</p>
937937
938
+ @ <hr />
939
+ entry_attribute("Ticket Hidden", 40, "ticket-hidden-expr", "h","",0);
940
+ @ <p>A boolean SQL expression with the columns of TICKET and TICKETCHNG
941
+ @ tables which filters ticket events out of the default timeline view.
942
+ @ (Property: ticket-hidden-expr)</p>
943
+
938944
@ <hr />
939945
@ <p>
940946
@ <input type="submit" name="submit" value="Apply Changes" />
941947
@ <input type="submit" name="setup" value="Cancel" />
942948
@ </p>
943949
--- src/tktsetup.c
+++ src/tktsetup.c
@@ -933,10 +933,16 @@
933 "status='Closed'", 0);
934 @ <p>An SQL expression that evaluates to true in a TICKET table query if
935 @ the ticket is closed.
936 @ (Property: ticket-closed-expr)</p>
937
 
 
 
 
 
 
938 @ <hr />
939 @ <p>
940 @ <input type="submit" name="submit" value="Apply Changes" />
941 @ <input type="submit" name="setup" value="Cancel" />
942 @ </p>
943
--- src/tktsetup.c
+++ src/tktsetup.c
@@ -933,10 +933,16 @@
933 "status='Closed'", 0);
934 @ <p>An SQL expression that evaluates to true in a TICKET table query if
935 @ the ticket is closed.
936 @ (Property: ticket-closed-expr)</p>
937
938 @ <hr />
939 entry_attribute("Ticket Hidden", 40, "ticket-hidden-expr", "h","",0);
940 @ <p>A boolean SQL expression with the columns of TICKET and TICKETCHNG
941 @ tables which filters ticket events out of the default timeline view.
942 @ (Property: ticket-hidden-expr)</p>
943
944 @ <hr />
945 @ <p>
946 @ <input type="submit" name="submit" value="Apply Changes" />
947 @ <input type="submit" name="setup" value="Cancel" />
948 @ </p>
949

Keyboard Shortcuts

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