Fossil SCM
Give sequential numbers to all display posts in the forum, and reference other forum posts in a thread by the sequence number.
Commit
5a7267d9e70cb9a7cc595a6c12f8c55b744f2eeabe758b0184fb6abf62b8aa0e
Parent
0cec52e08eef79d…
1 file changed
+13
-24
+13
-24
| --- src/forum.c | ||
| +++ src/forum.c | ||
| @@ -310,11 +310,10 @@ | ||
| 310 | 310 | */ |
| 311 | 311 | static void forum_display_chronological(int froot, int target){ |
| 312 | 312 | ForumThread *pThread = forumthread_create(froot, 0); |
| 313 | 313 | ForumEntry *p; |
| 314 | 314 | int notAnon = login_is_individual(); |
| 315 | - int iPrev = -1; | |
| 316 | 315 | for(p=pThread->pFirst; p; p=p->pNext){ |
| 317 | 316 | char *zDate; |
| 318 | 317 | Manifest *pPost; |
| 319 | 318 | int isPrivate; /* True for posts awaiting moderation */ |
| 320 | 319 | int sameUser; /* True if author is also the reader */ |
| @@ -330,35 +329,31 @@ | ||
| 330 | 329 | } |
| 331 | 330 | if( pPost->zThreadTitle ){ |
| 332 | 331 | @ <h1>%h(pPost->zThreadTitle)</h1> |
| 333 | 332 | } |
| 334 | 333 | zDate = db_text(0, "SELECT datetime(%.17g)", pPost->rDate); |
| 335 | - @ <p>By %h(pPost->zUser) on %h(zDate) (%d(p->fpid)) | |
| 334 | + @ <p>(%d(p->sid)) By %h(pPost->zUser) on %h(zDate) | |
| 336 | 335 | fossil_free(zDate); |
| 337 | 336 | if( p->pEdit ){ |
| 338 | - @ edit of %z(href("%R/forumpost/%S?t=c",p->pEdit->zUuid))%d(p->fprev)</a> | |
| 337 | + @ edit of %z(href("%R/forumpost/%S?t=c",p->pEdit->zUuid))\ | |
| 338 | + @ %d(p->pEdit->sid)</a> | |
| 339 | + } | |
| 340 | + if( g.perm.Debug ){ | |
| 341 | + @ <span class="debug">\ | |
| 342 | + @ <a href="%R/artifact/%h(p->zUuid)">(artifact)</a></span> | |
| 339 | 343 | } |
| 340 | 344 | if( p->firt ){ |
| 341 | 345 | ForumEntry *pIrt = p->pPrev; |
| 342 | 346 | while( pIrt && pIrt->fpid!=p->firt ) pIrt = pIrt->pPrev; |
| 343 | 347 | if( pIrt ){ |
| 344 | 348 | @ in reply to %z(href("%R/forumpost/%S?t=c",pIrt->zUuid))\ |
| 345 | - if( p->firt==iPrev ){ | |
| 346 | - @ previous</a> | |
| 347 | - }else{ | |
| 348 | - @ %d(p->firt)</a> | |
| 349 | - } | |
| 349 | + @ %d(pIrt->sid)</a> | |
| 350 | 350 | } |
| 351 | 351 | } |
| 352 | - iPrev = p->fpid; | |
| 353 | 352 | if( p->pLeaf ){ |
| 354 | 353 | @ updated by %z(href("%R/forumpost/%S?t=c",p->pLeaf->zUuid))\ |
| 355 | - @ %d(p->pLeaf->fpid)</a> | |
| 356 | - } | |
| 357 | - if( g.perm.Debug ){ | |
| 358 | - @ <span class="debug">\ | |
| 359 | - @ <a href="%R/artifact/%h(p->zUuid)">artifact</a></span> | |
| 354 | + @ %d(p->pLeaf->sid)</a> | |
| 360 | 355 | } |
| 361 | 356 | if( p->fpid!=target ){ |
| 362 | 357 | @ %z(href("%R/forumpost/%S?t=c",p->zUuid))[link]</a> |
| 363 | 358 | } |
| 364 | 359 | isPrivate = content_is_private(p->fpid); |
| @@ -410,11 +405,10 @@ | ||
| 410 | 405 | int fpid; |
| 411 | 406 | const char *zUuid; |
| 412 | 407 | char *zDate; |
| 413 | 408 | const char *zSel; |
| 414 | 409 | int notAnon = login_is_individual(); |
| 415 | - int iPrev = -1; | |
| 416 | 410 | int iIndentScale = 4; |
| 417 | 411 | |
| 418 | 412 | pThread = forumthread_create(froot, 1); |
| 419 | 413 | for(p=pThread->pFirst; p; p=p->pNext){ |
| 420 | 414 | if( p->fpid==target ){ |
| @@ -450,15 +444,15 @@ | ||
| 450 | 444 | if( pPost==0 ) continue; |
| 451 | 445 | if( pPost->zThreadTitle ){ |
| 452 | 446 | @ <h1>%h(pPost->zThreadTitle)</h1> |
| 453 | 447 | } |
| 454 | 448 | zDate = db_text(0, "SELECT datetime(%.17g)", pOPost->rDate); |
| 455 | - @ <p>By %h(pOPost->zUser) on %h(zDate) | |
| 449 | + @ <p>(%d(p->sid)) By %h(pOPost->zUser) on %h(zDate) | |
| 456 | 450 | fossil_free(zDate); |
| 457 | 451 | if( g.perm.Debug ){ |
| 458 | 452 | @ <span class="debug">\ |
| 459 | - @ <a href="%R/artifact/%h(p->zUuid)">(%d(p->fpid))</a></span> | |
| 453 | + @ <a href="%R/artifact/%h(p->zUuid)">(artifact)</a></span> | |
| 460 | 454 | } |
| 461 | 455 | if( p->pLeaf ){ |
| 462 | 456 | zDate = db_text(0, "SELECT datetime(%.17g)", pPost->rDate); |
| 463 | 457 | if( fossil_strcmp(pOPost->zUser,pPost->zUser)==0 ){ |
| 464 | 458 | @ and edited on %h(zDate) |
| @@ -466,11 +460,11 @@ | ||
| 466 | 460 | @ as edited by %h(pPost->zUser) on %h(zDate) |
| 467 | 461 | } |
| 468 | 462 | fossil_free(zDate); |
| 469 | 463 | if( g.perm.Debug ){ |
| 470 | 464 | @ <span class="debug">\ |
| 471 | - @ <a href="%R/artifact/%h(p->pLeaf->zUuid)">(%d(fpid))</a></span> | |
| 465 | + @ <a href="%R/artifact/%h(p->pLeaf->zUuid)">(artifact)</a></span> | |
| 472 | 466 | } |
| 473 | 467 | manifest_destroy(pOPost); |
| 474 | 468 | } |
| 475 | 469 | if( fpid!=target ){ |
| 476 | 470 | @ %z(href("%R/forumpost/%S",zUuid))[link]</a> |
| @@ -478,18 +472,13 @@ | ||
| 478 | 472 | if( p->firt ){ |
| 479 | 473 | ForumEntry *pIrt = p->pPrev; |
| 480 | 474 | while( pIrt && pIrt->fpid!=p->firt ) pIrt = pIrt->pPrev; |
| 481 | 475 | if( pIrt ){ |
| 482 | 476 | @ in reply to %z(href("%R/forumpost/%S?t=h",pIrt->zUuid))\ |
| 483 | - if( p->firt==iPrev ){ | |
| 484 | - @ previous</a> | |
| 485 | - }else{ | |
| 486 | - @ %d(p->firt)</a> | |
| 487 | - } | |
| 477 | + @ %d(pIrt->sid)</a> | |
| 488 | 478 | } |
| 489 | 479 | } |
| 490 | - iPrev = p->fpid; | |
| 491 | 480 | isPrivate = content_is_private(fpid); |
| 492 | 481 | sameUser = notAnon && fossil_strcmp(pPost->zUser, g.zLogin)==0; |
| 493 | 482 | if( isPrivate && !g.perm.ModForum && !sameUser ){ |
| 494 | 483 | @ <p><span class="modpending">Awaiting Moderator Approval</span></p> |
| 495 | 484 | }else{ |
| 496 | 485 |
| --- src/forum.c | |
| +++ src/forum.c | |
| @@ -310,11 +310,10 @@ | |
| 310 | */ |
| 311 | static void forum_display_chronological(int froot, int target){ |
| 312 | ForumThread *pThread = forumthread_create(froot, 0); |
| 313 | ForumEntry *p; |
| 314 | int notAnon = login_is_individual(); |
| 315 | int iPrev = -1; |
| 316 | for(p=pThread->pFirst; p; p=p->pNext){ |
| 317 | char *zDate; |
| 318 | Manifest *pPost; |
| 319 | int isPrivate; /* True for posts awaiting moderation */ |
| 320 | int sameUser; /* True if author is also the reader */ |
| @@ -330,35 +329,31 @@ | |
| 330 | } |
| 331 | if( pPost->zThreadTitle ){ |
| 332 | @ <h1>%h(pPost->zThreadTitle)</h1> |
| 333 | } |
| 334 | zDate = db_text(0, "SELECT datetime(%.17g)", pPost->rDate); |
| 335 | @ <p>By %h(pPost->zUser) on %h(zDate) (%d(p->fpid)) |
| 336 | fossil_free(zDate); |
| 337 | if( p->pEdit ){ |
| 338 | @ edit of %z(href("%R/forumpost/%S?t=c",p->pEdit->zUuid))%d(p->fprev)</a> |
| 339 | } |
| 340 | if( p->firt ){ |
| 341 | ForumEntry *pIrt = p->pPrev; |
| 342 | while( pIrt && pIrt->fpid!=p->firt ) pIrt = pIrt->pPrev; |
| 343 | if( pIrt ){ |
| 344 | @ in reply to %z(href("%R/forumpost/%S?t=c",pIrt->zUuid))\ |
| 345 | if( p->firt==iPrev ){ |
| 346 | @ previous</a> |
| 347 | }else{ |
| 348 | @ %d(p->firt)</a> |
| 349 | } |
| 350 | } |
| 351 | } |
| 352 | iPrev = p->fpid; |
| 353 | if( p->pLeaf ){ |
| 354 | @ updated by %z(href("%R/forumpost/%S?t=c",p->pLeaf->zUuid))\ |
| 355 | @ %d(p->pLeaf->fpid)</a> |
| 356 | } |
| 357 | if( g.perm.Debug ){ |
| 358 | @ <span class="debug">\ |
| 359 | @ <a href="%R/artifact/%h(p->zUuid)">artifact</a></span> |
| 360 | } |
| 361 | if( p->fpid!=target ){ |
| 362 | @ %z(href("%R/forumpost/%S?t=c",p->zUuid))[link]</a> |
| 363 | } |
| 364 | isPrivate = content_is_private(p->fpid); |
| @@ -410,11 +405,10 @@ | |
| 410 | int fpid; |
| 411 | const char *zUuid; |
| 412 | char *zDate; |
| 413 | const char *zSel; |
| 414 | int notAnon = login_is_individual(); |
| 415 | int iPrev = -1; |
| 416 | int iIndentScale = 4; |
| 417 | |
| 418 | pThread = forumthread_create(froot, 1); |
| 419 | for(p=pThread->pFirst; p; p=p->pNext){ |
| 420 | if( p->fpid==target ){ |
| @@ -450,15 +444,15 @@ | |
| 450 | if( pPost==0 ) continue; |
| 451 | if( pPost->zThreadTitle ){ |
| 452 | @ <h1>%h(pPost->zThreadTitle)</h1> |
| 453 | } |
| 454 | zDate = db_text(0, "SELECT datetime(%.17g)", pOPost->rDate); |
| 455 | @ <p>By %h(pOPost->zUser) on %h(zDate) |
| 456 | fossil_free(zDate); |
| 457 | if( g.perm.Debug ){ |
| 458 | @ <span class="debug">\ |
| 459 | @ <a href="%R/artifact/%h(p->zUuid)">(%d(p->fpid))</a></span> |
| 460 | } |
| 461 | if( p->pLeaf ){ |
| 462 | zDate = db_text(0, "SELECT datetime(%.17g)", pPost->rDate); |
| 463 | if( fossil_strcmp(pOPost->zUser,pPost->zUser)==0 ){ |
| 464 | @ and edited on %h(zDate) |
| @@ -466,11 +460,11 @@ | |
| 466 | @ as edited by %h(pPost->zUser) on %h(zDate) |
| 467 | } |
| 468 | fossil_free(zDate); |
| 469 | if( g.perm.Debug ){ |
| 470 | @ <span class="debug">\ |
| 471 | @ <a href="%R/artifact/%h(p->pLeaf->zUuid)">(%d(fpid))</a></span> |
| 472 | } |
| 473 | manifest_destroy(pOPost); |
| 474 | } |
| 475 | if( fpid!=target ){ |
| 476 | @ %z(href("%R/forumpost/%S",zUuid))[link]</a> |
| @@ -478,18 +472,13 @@ | |
| 478 | if( p->firt ){ |
| 479 | ForumEntry *pIrt = p->pPrev; |
| 480 | while( pIrt && pIrt->fpid!=p->firt ) pIrt = pIrt->pPrev; |
| 481 | if( pIrt ){ |
| 482 | @ in reply to %z(href("%R/forumpost/%S?t=h",pIrt->zUuid))\ |
| 483 | if( p->firt==iPrev ){ |
| 484 | @ previous</a> |
| 485 | }else{ |
| 486 | @ %d(p->firt)</a> |
| 487 | } |
| 488 | } |
| 489 | } |
| 490 | iPrev = p->fpid; |
| 491 | isPrivate = content_is_private(fpid); |
| 492 | sameUser = notAnon && fossil_strcmp(pPost->zUser, g.zLogin)==0; |
| 493 | if( isPrivate && !g.perm.ModForum && !sameUser ){ |
| 494 | @ <p><span class="modpending">Awaiting Moderator Approval</span></p> |
| 495 | }else{ |
| 496 |
| --- src/forum.c | |
| +++ src/forum.c | |
| @@ -310,11 +310,10 @@ | |
| 310 | */ |
| 311 | static void forum_display_chronological(int froot, int target){ |
| 312 | ForumThread *pThread = forumthread_create(froot, 0); |
| 313 | ForumEntry *p; |
| 314 | int notAnon = login_is_individual(); |
| 315 | for(p=pThread->pFirst; p; p=p->pNext){ |
| 316 | char *zDate; |
| 317 | Manifest *pPost; |
| 318 | int isPrivate; /* True for posts awaiting moderation */ |
| 319 | int sameUser; /* True if author is also the reader */ |
| @@ -330,35 +329,31 @@ | |
| 329 | } |
| 330 | if( pPost->zThreadTitle ){ |
| 331 | @ <h1>%h(pPost->zThreadTitle)</h1> |
| 332 | } |
| 333 | zDate = db_text(0, "SELECT datetime(%.17g)", pPost->rDate); |
| 334 | @ <p>(%d(p->sid)) By %h(pPost->zUser) on %h(zDate) |
| 335 | fossil_free(zDate); |
| 336 | if( p->pEdit ){ |
| 337 | @ edit of %z(href("%R/forumpost/%S?t=c",p->pEdit->zUuid))\ |
| 338 | @ %d(p->pEdit->sid)</a> |
| 339 | } |
| 340 | if( g.perm.Debug ){ |
| 341 | @ <span class="debug">\ |
| 342 | @ <a href="%R/artifact/%h(p->zUuid)">(artifact)</a></span> |
| 343 | } |
| 344 | if( p->firt ){ |
| 345 | ForumEntry *pIrt = p->pPrev; |
| 346 | while( pIrt && pIrt->fpid!=p->firt ) pIrt = pIrt->pPrev; |
| 347 | if( pIrt ){ |
| 348 | @ in reply to %z(href("%R/forumpost/%S?t=c",pIrt->zUuid))\ |
| 349 | @ %d(pIrt->sid)</a> |
| 350 | } |
| 351 | } |
| 352 | if( p->pLeaf ){ |
| 353 | @ updated by %z(href("%R/forumpost/%S?t=c",p->pLeaf->zUuid))\ |
| 354 | @ %d(p->pLeaf->sid)</a> |
| 355 | } |
| 356 | if( p->fpid!=target ){ |
| 357 | @ %z(href("%R/forumpost/%S?t=c",p->zUuid))[link]</a> |
| 358 | } |
| 359 | isPrivate = content_is_private(p->fpid); |
| @@ -410,11 +405,10 @@ | |
| 405 | int fpid; |
| 406 | const char *zUuid; |
| 407 | char *zDate; |
| 408 | const char *zSel; |
| 409 | int notAnon = login_is_individual(); |
| 410 | int iIndentScale = 4; |
| 411 | |
| 412 | pThread = forumthread_create(froot, 1); |
| 413 | for(p=pThread->pFirst; p; p=p->pNext){ |
| 414 | if( p->fpid==target ){ |
| @@ -450,15 +444,15 @@ | |
| 444 | if( pPost==0 ) continue; |
| 445 | if( pPost->zThreadTitle ){ |
| 446 | @ <h1>%h(pPost->zThreadTitle)</h1> |
| 447 | } |
| 448 | zDate = db_text(0, "SELECT datetime(%.17g)", pOPost->rDate); |
| 449 | @ <p>(%d(p->sid)) By %h(pOPost->zUser) on %h(zDate) |
| 450 | fossil_free(zDate); |
| 451 | if( g.perm.Debug ){ |
| 452 | @ <span class="debug">\ |
| 453 | @ <a href="%R/artifact/%h(p->zUuid)">(artifact)</a></span> |
| 454 | } |
| 455 | if( p->pLeaf ){ |
| 456 | zDate = db_text(0, "SELECT datetime(%.17g)", pPost->rDate); |
| 457 | if( fossil_strcmp(pOPost->zUser,pPost->zUser)==0 ){ |
| 458 | @ and edited on %h(zDate) |
| @@ -466,11 +460,11 @@ | |
| 460 | @ as edited by %h(pPost->zUser) on %h(zDate) |
| 461 | } |
| 462 | fossil_free(zDate); |
| 463 | if( g.perm.Debug ){ |
| 464 | @ <span class="debug">\ |
| 465 | @ <a href="%R/artifact/%h(p->pLeaf->zUuid)">(artifact)</a></span> |
| 466 | } |
| 467 | manifest_destroy(pOPost); |
| 468 | } |
| 469 | if( fpid!=target ){ |
| 470 | @ %z(href("%R/forumpost/%S",zUuid))[link]</a> |
| @@ -478,18 +472,13 @@ | |
| 472 | if( p->firt ){ |
| 473 | ForumEntry *pIrt = p->pPrev; |
| 474 | while( pIrt && pIrt->fpid!=p->firt ) pIrt = pIrt->pPrev; |
| 475 | if( pIrt ){ |
| 476 | @ in reply to %z(href("%R/forumpost/%S?t=h",pIrt->zUuid))\ |
| 477 | @ %d(pIrt->sid)</a> |
| 478 | } |
| 479 | } |
| 480 | isPrivate = content_is_private(fpid); |
| 481 | sameUser = notAnon && fossil_strcmp(pPost->zUser, g.zLogin)==0; |
| 482 | if( isPrivate && !g.perm.ModForum && !sameUser ){ |
| 483 | @ <p><span class="modpending">Awaiting Moderator Approval</span></p> |
| 484 | }else{ |
| 485 |