Fossil SCM
Use URI extensions rather than name= query parameters on key ticket hyperlinks.
Commit
5f22b960b3e34964d4be97666a9ba3abeba581215e9cb6ac1c7b8773206bb6f2
Parent
bc36fdcf3acb311…
2 files changed
+1
-1
+8
-8
+1
-1
| --- src/report.c | ||
| +++ src/report.c | ||
| @@ -932,11 +932,11 @@ | ||
| 932 | 932 | blob_reset(&content); |
| 933 | 933 | @ %s(pState->zWikiEnd) |
| 934 | 934 | } |
| 935 | 935 | }else if( azName[i][0]=='#' ){ |
| 936 | 936 | zTid = zData; |
| 937 | - @ <td valign="top">%z(href("%R/tktview?name=%h",zData))%h(zData)</a></td> | |
| 937 | + @ <td valign="top">%z(href("%R/tktview/%h",zData))%h(zData)</a></td> | |
| 938 | 938 | }else if( zData[0]==0 ){ |
| 939 | 939 | @ <td valign="top"> </td> |
| 940 | 940 | }else{ |
| 941 | 941 | @ <td valign="top"> |
| 942 | 942 | @ %h(zData) |
| 943 | 943 |
| --- src/report.c | |
| +++ src/report.c | |
| @@ -932,11 +932,11 @@ | |
| 932 | blob_reset(&content); |
| 933 | @ %s(pState->zWikiEnd) |
| 934 | } |
| 935 | }else if( azName[i][0]=='#' ){ |
| 936 | zTid = zData; |
| 937 | @ <td valign="top">%z(href("%R/tktview?name=%h",zData))%h(zData)</a></td> |
| 938 | }else if( zData[0]==0 ){ |
| 939 | @ <td valign="top"> </td> |
| 940 | }else{ |
| 941 | @ <td valign="top"> |
| 942 | @ %h(zData) |
| 943 |
| --- src/report.c | |
| +++ src/report.c | |
| @@ -932,11 +932,11 @@ | |
| 932 | blob_reset(&content); |
| 933 | @ %s(pState->zWikiEnd) |
| 934 | } |
| 935 | }else if( azName[i][0]=='#' ){ |
| 936 | zTid = zData; |
| 937 | @ <td valign="top">%z(href("%R/tktview/%h",zData))%h(zData)</a></td> |
| 938 | }else if( zData[0]==0 ){ |
| 939 | @ <td valign="top"> </td> |
| 940 | }else{ |
| 941 | @ <td valign="top"> |
| 942 | @ %h(zData) |
| 943 |
+8
-8
| --- src/tkt.c | ||
| +++ src/tkt.c | ||
| @@ -712,11 +712,11 @@ | ||
| 712 | 712 | @ </ul></div> |
| 713 | 713 | } |
| 714 | 714 | |
| 715 | 715 | /* |
| 716 | 716 | ** WEBPAGE: tktview |
| 717 | -** URL: tktview?name=HASH | |
| 717 | +** URL: tktview/HASH | |
| 718 | 718 | ** |
| 719 | 719 | ** View a ticket identified by the name= query parameter. |
| 720 | 720 | ** Other query parameters: |
| 721 | 721 | ** |
| 722 | 722 | ** tl Show a timeline of the ticket above the status |
| @@ -728,11 +728,11 @@ | ||
| 728 | 728 | int showTimeline = P("tl")!=0; |
| 729 | 729 | |
| 730 | 730 | login_check_credentials(); |
| 731 | 731 | if( !g.perm.RdTkt ){ login_needed(g.anon.RdTkt); return; } |
| 732 | 732 | if( g.anon.WrTkt || g.anon.ApndTkt ){ |
| 733 | - style_submenu_element("Edit", "%R/tktedit?name=%T", PD("name","")); | |
| 733 | + style_submenu_element("Edit", "%R/tktedit/%T", PD("name","")); | |
| 734 | 734 | } |
| 735 | 735 | if( g.perm.Hyperlink ){ |
| 736 | 736 | style_submenu_element("History", "%R/tkthistory/%T", zUuid); |
| 737 | 737 | style_submenu_element("Check-ins", "%R/tkttimeline/%T?y=ci", zUuid); |
| 738 | 738 | } |
| @@ -1055,11 +1055,11 @@ | ||
| 1055 | 1055 | login_needed(g.anon.ApndTkt || g.anon.WrTkt); |
| 1056 | 1056 | return; |
| 1057 | 1057 | } |
| 1058 | 1058 | zName = P("name"); |
| 1059 | 1059 | if( P("cancel") ){ |
| 1060 | - cgi_redirectf("tktview?name=%T", zName); | |
| 1060 | + cgi_redirectf("tktview/%T", zName); | |
| 1061 | 1061 | } |
| 1062 | 1062 | style_set_current_feature("tkt"); |
| 1063 | 1063 | style_header("Edit Ticket"); |
| 1064 | 1064 | if( zName==0 || (nName = strlen(zName))<4 || nName>HNAME_LEN_SHA1 |
| 1065 | 1065 | || !validate16(zName,nName) ){ |
| @@ -1212,13 +1212,13 @@ | ||
| 1212 | 1212 | return; |
| 1213 | 1213 | } |
| 1214 | 1214 | zUuid = PD("name",""); |
| 1215 | 1215 | zType = PD("y","a"); |
| 1216 | 1216 | if( zType[0]!='c' ){ |
| 1217 | - style_submenu_element("Check-ins", "%R/tkttimeline?name=%T&y=ci", zUuid); | |
| 1217 | + style_submenu_element("Check-ins", "%R/tkttimeline/%T&y=ci", zUuid); | |
| 1218 | 1218 | }else{ |
| 1219 | - style_submenu_element("Timeline", "%R/tkttimeline?name=%T", zUuid); | |
| 1219 | + style_submenu_element("Timeline", "%R/tkttimeline/%T", zUuid); | |
| 1220 | 1220 | } |
| 1221 | 1221 | style_submenu_element("History", "%R/tkthistory/%s", zUuid); |
| 1222 | 1222 | style_submenu_element("Status", "%R/info/%s", zUuid); |
| 1223 | 1223 | if( zType[0]=='c' ){ |
| 1224 | 1224 | zTitle = mprintf("Check-ins Associated With Ticket %h", zUuid); |
| @@ -1240,11 +1240,11 @@ | ||
| 1240 | 1240 | style_finish_page(); |
| 1241 | 1241 | } |
| 1242 | 1242 | |
| 1243 | 1243 | /* |
| 1244 | 1244 | ** WEBPAGE: tkthistory |
| 1245 | -** URL: /tkthistory?name=TICKETUUID | |
| 1245 | +** URL: /tkthistory/TICKETUUID | |
| 1246 | 1246 | ** |
| 1247 | 1247 | ** Show the complete change history for a single ticket. Or (to put it |
| 1248 | 1248 | ** another way) show a list of artifacts associated with a single ticket. |
| 1249 | 1249 | ** |
| 1250 | 1250 | ** By default, the artifacts are decoded and formatted. Text fields |
| @@ -1270,12 +1270,12 @@ | ||
| 1270 | 1270 | return; |
| 1271 | 1271 | } |
| 1272 | 1272 | zUuid = PD("name",""); |
| 1273 | 1273 | zTitle = mprintf("History Of Ticket %h", zUuid); |
| 1274 | 1274 | style_submenu_element("Status", "%R/info/%s", zUuid); |
| 1275 | - style_submenu_element("Check-ins", "%R/tkttimeline?name=%s&y=ci", zUuid); | |
| 1276 | - style_submenu_element("Timeline", "%R/tkttimeline?name=%s", zUuid); | |
| 1275 | + style_submenu_element("Check-ins", "%R/tkttimeline/%s?y=ci", zUuid); | |
| 1276 | + style_submenu_element("Timeline", "%R/tkttimeline/%s", zUuid); | |
| 1277 | 1277 | if( P("raw")!=0 ){ |
| 1278 | 1278 | style_submenu_element("Decoded", "%R/tkthistory/%s", zUuid); |
| 1279 | 1279 | }else if( g.perm.Admin ){ |
| 1280 | 1280 | style_submenu_element("Raw", "%R/tkthistory/%s?raw", zUuid); |
| 1281 | 1281 | } |
| 1282 | 1282 |
| --- src/tkt.c | |
| +++ src/tkt.c | |
| @@ -712,11 +712,11 @@ | |
| 712 | @ </ul></div> |
| 713 | } |
| 714 | |
| 715 | /* |
| 716 | ** WEBPAGE: tktview |
| 717 | ** URL: tktview?name=HASH |
| 718 | ** |
| 719 | ** View a ticket identified by the name= query parameter. |
| 720 | ** Other query parameters: |
| 721 | ** |
| 722 | ** tl Show a timeline of the ticket above the status |
| @@ -728,11 +728,11 @@ | |
| 728 | int showTimeline = P("tl")!=0; |
| 729 | |
| 730 | login_check_credentials(); |
| 731 | if( !g.perm.RdTkt ){ login_needed(g.anon.RdTkt); return; } |
| 732 | if( g.anon.WrTkt || g.anon.ApndTkt ){ |
| 733 | style_submenu_element("Edit", "%R/tktedit?name=%T", PD("name","")); |
| 734 | } |
| 735 | if( g.perm.Hyperlink ){ |
| 736 | style_submenu_element("History", "%R/tkthistory/%T", zUuid); |
| 737 | style_submenu_element("Check-ins", "%R/tkttimeline/%T?y=ci", zUuid); |
| 738 | } |
| @@ -1055,11 +1055,11 @@ | |
| 1055 | login_needed(g.anon.ApndTkt || g.anon.WrTkt); |
| 1056 | return; |
| 1057 | } |
| 1058 | zName = P("name"); |
| 1059 | if( P("cancel") ){ |
| 1060 | cgi_redirectf("tktview?name=%T", zName); |
| 1061 | } |
| 1062 | style_set_current_feature("tkt"); |
| 1063 | style_header("Edit Ticket"); |
| 1064 | if( zName==0 || (nName = strlen(zName))<4 || nName>HNAME_LEN_SHA1 |
| 1065 | || !validate16(zName,nName) ){ |
| @@ -1212,13 +1212,13 @@ | |
| 1212 | return; |
| 1213 | } |
| 1214 | zUuid = PD("name",""); |
| 1215 | zType = PD("y","a"); |
| 1216 | if( zType[0]!='c' ){ |
| 1217 | style_submenu_element("Check-ins", "%R/tkttimeline?name=%T&y=ci", zUuid); |
| 1218 | }else{ |
| 1219 | style_submenu_element("Timeline", "%R/tkttimeline?name=%T", zUuid); |
| 1220 | } |
| 1221 | style_submenu_element("History", "%R/tkthistory/%s", zUuid); |
| 1222 | style_submenu_element("Status", "%R/info/%s", zUuid); |
| 1223 | if( zType[0]=='c' ){ |
| 1224 | zTitle = mprintf("Check-ins Associated With Ticket %h", zUuid); |
| @@ -1240,11 +1240,11 @@ | |
| 1240 | style_finish_page(); |
| 1241 | } |
| 1242 | |
| 1243 | /* |
| 1244 | ** WEBPAGE: tkthistory |
| 1245 | ** URL: /tkthistory?name=TICKETUUID |
| 1246 | ** |
| 1247 | ** Show the complete change history for a single ticket. Or (to put it |
| 1248 | ** another way) show a list of artifacts associated with a single ticket. |
| 1249 | ** |
| 1250 | ** By default, the artifacts are decoded and formatted. Text fields |
| @@ -1270,12 +1270,12 @@ | |
| 1270 | return; |
| 1271 | } |
| 1272 | zUuid = PD("name",""); |
| 1273 | zTitle = mprintf("History Of Ticket %h", zUuid); |
| 1274 | style_submenu_element("Status", "%R/info/%s", zUuid); |
| 1275 | style_submenu_element("Check-ins", "%R/tkttimeline?name=%s&y=ci", zUuid); |
| 1276 | style_submenu_element("Timeline", "%R/tkttimeline?name=%s", zUuid); |
| 1277 | if( P("raw")!=0 ){ |
| 1278 | style_submenu_element("Decoded", "%R/tkthistory/%s", zUuid); |
| 1279 | }else if( g.perm.Admin ){ |
| 1280 | style_submenu_element("Raw", "%R/tkthistory/%s?raw", zUuid); |
| 1281 | } |
| 1282 |
| --- src/tkt.c | |
| +++ src/tkt.c | |
| @@ -712,11 +712,11 @@ | |
| 712 | @ </ul></div> |
| 713 | } |
| 714 | |
| 715 | /* |
| 716 | ** WEBPAGE: tktview |
| 717 | ** URL: tktview/HASH |
| 718 | ** |
| 719 | ** View a ticket identified by the name= query parameter. |
| 720 | ** Other query parameters: |
| 721 | ** |
| 722 | ** tl Show a timeline of the ticket above the status |
| @@ -728,11 +728,11 @@ | |
| 728 | int showTimeline = P("tl")!=0; |
| 729 | |
| 730 | login_check_credentials(); |
| 731 | if( !g.perm.RdTkt ){ login_needed(g.anon.RdTkt); return; } |
| 732 | if( g.anon.WrTkt || g.anon.ApndTkt ){ |
| 733 | style_submenu_element("Edit", "%R/tktedit/%T", PD("name","")); |
| 734 | } |
| 735 | if( g.perm.Hyperlink ){ |
| 736 | style_submenu_element("History", "%R/tkthistory/%T", zUuid); |
| 737 | style_submenu_element("Check-ins", "%R/tkttimeline/%T?y=ci", zUuid); |
| 738 | } |
| @@ -1055,11 +1055,11 @@ | |
| 1055 | login_needed(g.anon.ApndTkt || g.anon.WrTkt); |
| 1056 | return; |
| 1057 | } |
| 1058 | zName = P("name"); |
| 1059 | if( P("cancel") ){ |
| 1060 | cgi_redirectf("tktview/%T", zName); |
| 1061 | } |
| 1062 | style_set_current_feature("tkt"); |
| 1063 | style_header("Edit Ticket"); |
| 1064 | if( zName==0 || (nName = strlen(zName))<4 || nName>HNAME_LEN_SHA1 |
| 1065 | || !validate16(zName,nName) ){ |
| @@ -1212,13 +1212,13 @@ | |
| 1212 | return; |
| 1213 | } |
| 1214 | zUuid = PD("name",""); |
| 1215 | zType = PD("y","a"); |
| 1216 | if( zType[0]!='c' ){ |
| 1217 | style_submenu_element("Check-ins", "%R/tkttimeline/%T&y=ci", zUuid); |
| 1218 | }else{ |
| 1219 | style_submenu_element("Timeline", "%R/tkttimeline/%T", zUuid); |
| 1220 | } |
| 1221 | style_submenu_element("History", "%R/tkthistory/%s", zUuid); |
| 1222 | style_submenu_element("Status", "%R/info/%s", zUuid); |
| 1223 | if( zType[0]=='c' ){ |
| 1224 | zTitle = mprintf("Check-ins Associated With Ticket %h", zUuid); |
| @@ -1240,11 +1240,11 @@ | |
| 1240 | style_finish_page(); |
| 1241 | } |
| 1242 | |
| 1243 | /* |
| 1244 | ** WEBPAGE: tkthistory |
| 1245 | ** URL: /tkthistory/TICKETUUID |
| 1246 | ** |
| 1247 | ** Show the complete change history for a single ticket. Or (to put it |
| 1248 | ** another way) show a list of artifacts associated with a single ticket. |
| 1249 | ** |
| 1250 | ** By default, the artifacts are decoded and formatted. Text fields |
| @@ -1270,12 +1270,12 @@ | |
| 1270 | return; |
| 1271 | } |
| 1272 | zUuid = PD("name",""); |
| 1273 | zTitle = mprintf("History Of Ticket %h", zUuid); |
| 1274 | style_submenu_element("Status", "%R/info/%s", zUuid); |
| 1275 | style_submenu_element("Check-ins", "%R/tkttimeline/%s?y=ci", zUuid); |
| 1276 | style_submenu_element("Timeline", "%R/tkttimeline/%s", zUuid); |
| 1277 | if( P("raw")!=0 ){ |
| 1278 | style_submenu_element("Decoded", "%R/tkthistory/%s", zUuid); |
| 1279 | }else if( g.perm.Admin ){ |
| 1280 | style_submenu_element("Raw", "%R/tkthistory/%s?raw", zUuid); |
| 1281 | } |
| 1282 |