@@ -215,20 +215,21 @@
215 215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** At most one of technote=, tkt=, forumpost=, or page= may be supplied.
216 216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
217 217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If none are given, all attachments are listed. If one is given, only
218 218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** attachments for the designated technote, ticket or wiki page are shown.
219 219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** HASH may be just a prefix of the relevant technical note or ticket
221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** artifact hash, in which case all attachments of all technical notes or
222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** tickets with the prefix will be listed. Forum posts, on the other hand,
223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** require a unique hash prefix.
220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** HASH may be just a prefix of the relevant forum post, technical
221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** note, or ticket artifact hash, in which case all attachments of all
222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** technical notes or tickets with the prefix will be listed. Forum
223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** posts, on the other hand, require a unique hash or hash prefix.
224 224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
225 225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void attachlist_page(void){
226 226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zPage = P("page");
227 227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zTkt = P("tkt");
228 228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zTechNote = P("technote");
229 229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zForumPost = P("forumpost");
230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zLink = 0;
230 231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob sql;
231 232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Stmt q;
232 233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
233 234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zPage && zTkt ) zTkt = 0;
234 235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
login_check_credentials();
@@ -248,32 +249,47 @@
248 249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( fnid<=0 ){
249 250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
webpage_error("Invalid forum post ID: %h", zForumPost);
250 251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
251 252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append_sql(&sql, " WHERE target="
252 253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"(SELECT uuid FROM blob WHERE rid=%d)", fnid);
254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zLink = mprintf("forum post <a href='%R/forumpost/%t'>%#h</a>",
255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zForumPost, hash_digits(0), zForumPost);
253 256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( zPage ){
254 257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.perm.RdWiki==0 ){ login_needed(g.anon.RdWiki); return; }
255 258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
style_header("Attachments To Wiki page %h", zPage);
256 259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append_sql(&sql, " WHERE target=%Q", zPage);
260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zLink = mprintf("wiki page <a href='%R/wiki?name=%t'>%h</a>",
261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zPage, zPage);
257 262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( zTkt ){
258 263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.perm.RdTkt==0 ){ login_needed(g.anon.RdTkt); return; }
259 264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
style_header("Attachments To Ticket %S", zTkt);
260 265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append_sql(&sql, " WHERE target GLOB '%q*'", zTkt);
266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zLink = mprintf("ticket <a href='%R/tktview?name=%t'>%#h</a>",
267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zTkt, hash_digits(0), zTkt);
261 268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( zTechNote ){
262 269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.perm.RdWiki==0 ){ login_needed(g.anon.RdWiki); return; }
263 270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
style_header("Attachments To Tech Note %S", zTechNote);
264 271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append_sql(&sql, " WHERE target GLOB '%q*'",
265 272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zTechNote);
273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zLink = mprintf("tech-note <a href='%R/technote?name=%t'>%#h</a>",
274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zTechNote, hash_digits(0), zTechNote);
266 275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
267 276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.perm.RdTkt==0 && g.perm.RdWiki==0 ){
268 277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
login_needed(g.anon.RdTkt || g.anon.RdWiki);
269 278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
270 279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
271 280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
style_header("All Attachments");
272 281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
273 282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append_sql(&sql, " ORDER BY mtime DESC");
274 283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_prepare(&q, "%s", blob_sql_text(&sql));
284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zLink ){
286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <h2>Attachments for %s(zLink)</h2>
287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_free(zLink);
288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zLink = 0;
289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
275 291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <ol>
276 292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( db_step(&q)==SQLITE_ROW ){
277 293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zDate;
278 294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zSrc;
279 295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zTarget;
@@ -954,11 +970,11 @@
954 970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zTarget = db_text(0, "SELECT substr(tagname,7) FROM tag"
955 971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" WHERE tagname GLOB 'event-%q*'", zTarget);
956 972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zTarget==0) fossil_redirect_home();
957 973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
958 974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zTo = zFrom ? 0 : mprintf("%R/technote?name=%T", zTarget);
959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zTargetType = mprintf("Tech Note <a href=\"%R/technote/%s\">%S</a>",
975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zTargetType = mprintf("Tech-note <a href=\"%R/technote/%s\">%S</a>",
960 976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zTarget, zTarget);
961 977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
noJsArgs[1] = zTarget;
962 978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
963 979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
964 980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case CFTYPE_TICKET:{
@@ -984,11 +1000,11 @@
984 1000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
985 1001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !db_exists("SELECT 1 FROM tag WHERE tagname='wiki-%q'", zTarget) ){
986 1002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_redirect_home();
987 1003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
988 1004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zTo = zFrom ? 0 : mprintf("%R/wiki?name=%T", zTarget);
989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zTargetType = mprintf("Wiki Page <a href=\"%R/wiki?name=%h\">%h</a>",
1005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zTargetType = mprintf("Wiki page <a href=\"%R/wiki?name=%h\">%h</a>",
990 1006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zTarget, zTarget);
991 1007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
noJsArgs[3] = zTarget;
992 1008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
993 1009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
994 1010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -1306,10 +1322,12 @@
1306 1322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1307 1323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define ATTACHLIST_HRULE_ABOVE 0x01 /* Insert <hr> above header */
1308 1324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define ATTACHLIST_TARGET_BLANK 0x02 /* use target=_blank for links */
1309 1325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define ATTACHLIST_SIZE 0x04 /* add size */
1310 1326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define ATTACHLIST_HIDE_UNAPPROVED 0x08 /* Hide pending-moderation files */
1327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define ATTACHLIST_DETAILS_CLOSED 0x10 /* Wrap in a closed DETAILS element */
1328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define ATTACHLIST_DETAILS_OPEN 0x20 /* Wrap in an open DETAILS element */
1311 1329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
1312 1330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1313 1331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
1314 1332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Output HTML to show a list of attachments.
1315 1333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -1320,11 +1338,14 @@
1320 1338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
1321 1339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int cnt = 0;
1322 1340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char szBuf[36] = {0}; /* scratchpad for attachment size value */
1323 1341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zLinkTgt = (ATTACHLIST_TARGET_BLANK & flags)
1324 1342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
? " target=\"_blank\"" : "";
1343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const int bUseDetail = flags &
1344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (ATTACHLIST_DETAILS_CLOSED | ATTACHLIST_DETAILS_OPEN);
1325 1345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Stmt q;
1346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1326 1347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_prepare(&q,
1327 1348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"SELECT datetime(mtime,toLocal()), a.filename, a.user,"
1328 1349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" b1.uuid, a.src, a.target, a.attachid, b2.size\n"
1329 1350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" FROM attachment a, blob b1, blob b2\n"
1330 1351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" WHERE a.isLatest\n"
@@ -1350,15 +1371,27 @@
1350 1371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& moderation_pending(aid)
1351 1372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& !moderation_user_could(aid, 1, 0) ){
1352 1373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
continue;
1353 1374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1354 1375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( cnt==0 ){
1355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ <section class='attachlist'>
1376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( bUseDetail ){
1377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <details class='attachlist'
1378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ATTACHLIST_DETAILS_OPEN & flags ){
1379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ open
1380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ >
1382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
1383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <section class='attachlist'>
1384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1356 1385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( flags & ATTACHLIST_HRULE_ABOVE ){
1357 1386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <hr>
1358 1387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ %s(zHeader)
1388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( bUseDetail ){
1389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <summary>%s(zHeader)</summary>
1390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
1391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ %s(zHeader)
1392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1360 1393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <ul>
1361 1394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1362 1395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cnt++;
1363 1396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
switch( attachment_target_type(zTarget, 1) ){
1364 1397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case CFTYPE_TICKET: zTypeArg = "tkt"; break;
1365 1398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!