Fossil SCM
Rename pEditLeaf to pEditTail
Commit
145a6ef281a66d310858cdd552bda8f389baf333dc17109b0a4030ad2837a795
Parent
763d22b78a5e784…
1 file changed
+26
-26
+26
-26
| --- src/forum.c | ||
| +++ src/forum.c | ||
| @@ -38,11 +38,11 @@ | ||
| 38 | 38 | int firt; /* This entry replies to firt */ |
| 39 | 39 | int mfirt; /* Root in-reply-to */ |
| 40 | 40 | int nReply; /* Number of replies to this entry */ |
| 41 | 41 | int sid; /* Serial ID number */ |
| 42 | 42 | char *zUuid; /* Artifact hash */ |
| 43 | - ForumEntry *pEditLeaf; /* Most recent edit for this entry */ | |
| 43 | + ForumEntry *pEditTail; /* Most recent edit for this entry */ | |
| 44 | 44 | ForumEntry *pEditNext; /* This entry is edited by pEditNext */ |
| 45 | 45 | ForumEntry *pEditPrev; /* This entry is an edit of pEditPrev */ |
| 46 | 46 | ForumEntry *pNext; /* Next in chronological order */ |
| 47 | 47 | ForumEntry *pPrev; /* Previous in chronological order */ |
| 48 | 48 | ForumEntry *pDisplay; /* Next in display order */ |
| @@ -193,11 +193,11 @@ | ||
| 193 | 193 | } |
| 194 | 194 | db_finalize(&q); |
| 195 | 195 | bag_clear(&seen); |
| 196 | 196 | |
| 197 | 197 | /* Establish which entries are the latest edit. After this loop |
| 198 | - ** completes, entries that have non-NULL pEditLeaf should not be | |
| 198 | + ** completes, entries that have non-NULL pEditTail should not be | |
| 199 | 199 | ** displayed. |
| 200 | 200 | */ |
| 201 | 201 | for(pEntry=pThread->pFirst; pEntry; pEntry=pEntry->pNext){ |
| 202 | 202 | if( pEntry->fprev ){ |
| 203 | 203 | ForumEntry *pBase = 0, *p; |
| @@ -204,11 +204,11 @@ | ||
| 204 | 204 | p = forumentry_backward(pEntry->pPrev, pEntry->fprev); |
| 205 | 205 | p->pEditNext = pEntry; |
| 206 | 206 | pEntry->pEditPrev = p; |
| 207 | 207 | while( p ){ |
| 208 | 208 | pBase = p; |
| 209 | - p->pEditLeaf = pEntry; | |
| 209 | + p->pEditTail = pEntry; | |
| 210 | 210 | p = pBase->pEditPrev; |
| 211 | 211 | } |
| 212 | 212 | for(p=pEntry->pNext; p; p=p->pNext){ |
| 213 | 213 | if( p->mfirt==pEntry->fpid ) p->mfirt = pBase->fpid; |
| 214 | 214 | } |
| @@ -295,21 +295,21 @@ | ||
| 295 | 295 | pThread = forumthread_create(froot, 1); |
| 296 | 296 | fossil_print("Chronological:\n"); |
| 297 | 297 | fossil_print( |
| 298 | 298 | /* 0 1 2 3 4 5 6 7 */ |
| 299 | 299 | /* 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123 */ |
| 300 | - " sid fpid firt fprev mfirt pEditLeaf nReply hash\n"); | |
| 300 | + " sid fpid firt fprev mfirt pEditTail nReply hash\n"); | |
| 301 | 301 | for(p=pThread->pFirst; p; p=p->pNext){ |
| 302 | 302 | fossil_print("%4d %9d %9d %9d %11d %9d %6d %8.8s\n", p->sid, |
| 303 | 303 | p->fpid, p->firt, p->fprev, p->mfirt, |
| 304 | - p->pEditLeaf ? p->pEditLeaf->fpid : 0, p->nReply, p->zUuid); | |
| 304 | + p->pEditTail ? p->pEditTail->fpid : 0, p->nReply, p->zUuid); | |
| 305 | 305 | } |
| 306 | 306 | fossil_print("\nDisplay\n"); |
| 307 | 307 | for(p=pThread->pDisplay; p; p=p->pDisplay){ |
| 308 | 308 | fossil_print("%*s", (p->nIndent-1)*3, ""); |
| 309 | - if( p->pEditLeaf ){ | |
| 310 | - fossil_print("%d->%d\n", p->fpid, p->pEditLeaf->fpid); | |
| 309 | + if( p->pEditTail ){ | |
| 310 | + fossil_print("%d->%d\n", p->fpid, p->pEditTail->fpid); | |
| 311 | 311 | }else{ |
| 312 | 312 | fossil_print("%d\n", p->fpid); |
| 313 | 313 | } |
| 314 | 314 | } |
| 315 | 315 | forumthread_delete(pThread); |
| @@ -425,11 +425,11 @@ | ||
| 425 | 425 | |
| 426 | 426 | pPost = manifest_get(p->fpid, CFTYPE_FORUM, 0); |
| 427 | 427 | if( pPost==0 ) continue; |
| 428 | 428 | if( p->fpid==target ){ |
| 429 | 429 | @ <div id="forum%d(p->fpid)" class="forumTime forumSel"> |
| 430 | - }else if( p->pEditLeaf!=0 ){ | |
| 430 | + }else if( p->pEditTail!=0 ){ | |
| 431 | 431 | @ <div id="forum%d(p->fpid)" class="forumTime forumObs"> |
| 432 | 432 | }else{ |
| 433 | 433 | @ <div id="forum%d(p->fpid)" class="forumTime"> |
| 434 | 434 | } |
| 435 | 435 | if( pPost->zThreadTitle ){ |
| @@ -456,14 +456,14 @@ | ||
| 456 | 456 | @ in reply to %z(href("%R/forumpost/%S?t=%c",pIrt->zUuid,cMode))\ |
| 457 | 457 | @ %d(pIrt->sid)</a> |
| 458 | 458 | } |
| 459 | 459 | } |
| 460 | 460 | zUuid = p->zUuid; |
| 461 | - if( p->pEditLeaf ){ | |
| 462 | - @ updated by %z(href("%R/forumpost/%S?t=%c",p->pEditLeaf->zUuid,cMode))\ | |
| 463 | - @ %d(p->pEditLeaf->sid)</a> | |
| 464 | - zUuid = p->pEditLeaf->zUuid; | |
| 461 | + if( p->pEditTail ){ | |
| 462 | + @ updated by %z(href("%R/forumpost/%S?t=%c",p->pEditTail->zUuid,cMode))\ | |
| 463 | + @ %d(p->pEditTail->sid)</a> | |
| 464 | + zUuid = p->pEditTail->zUuid; | |
| 465 | 465 | } |
| 466 | 466 | if( p->fpid!=target ){ |
| 467 | 467 | @ %z(href("%R/forumpost/%S?t=%c",zUuid,cMode))[link]</a> |
| 468 | 468 | } |
| 469 | 469 | if( !bRawMode ){ |
| @@ -476,18 +476,18 @@ | ||
| 476 | 476 | @ <p><span class="modpending">Awaiting Moderator Approval</span></p> |
| 477 | 477 | }else{ |
| 478 | 478 | const char *zMimetype; |
| 479 | 479 | if( bRawMode ){ |
| 480 | 480 | zMimetype = "text/plain"; |
| 481 | - }else if( p->pEditLeaf!=0 ){ | |
| 481 | + }else if( p->pEditTail!=0 ){ | |
| 482 | 482 | zMimetype = "text/plain"; |
| 483 | 483 | }else{ |
| 484 | 484 | zMimetype = pPost->zMimetype; |
| 485 | 485 | } |
| 486 | 486 | forum_render(0, zMimetype, pPost->zWiki, 0, 1); |
| 487 | 487 | } |
| 488 | - if( g.perm.WrForum && p->pEditLeaf==0 ){ | |
| 488 | + if( g.perm.WrForum && p->pEditTail==0 ){ | |
| 489 | 489 | int sameUser = login_is_individual() |
| 490 | 490 | && fossil_strcmp(pPost->zUser, g.zLogin)==0; |
| 491 | 491 | @ <div><form action="%R/forumedit" method="POST"> |
| 492 | 492 | @ <input type="hidden" name="fpid" value="%s(p->zUuid)"> |
| 493 | 493 | if( !isPrivate ){ |
| @@ -519,16 +519,16 @@ | ||
| 519 | 519 | ** to be displayed for debugging purposes. |
| 520 | 520 | */ |
| 521 | 521 | if( PB("threadtable") ){ |
| 522 | 522 | @ <hr> |
| 523 | 523 | @ <table border="1" cellpadding="3" cellspacing="0"> |
| 524 | - @ <tr><th>sid<th>fpid<th>firt<th>fprev<th>mfirt<th>pEditLeaf<th>nReply\ | |
| 524 | + @ <tr><th>sid<th>fpid<th>firt<th>fprev<th>mfirt<th>pEditTail<th>nReply\ | |
| 525 | 525 | @ <th>hash |
| 526 | 526 | for(p=pThread->pFirst; p; p=p->pNext){ |
| 527 | 527 | @ <tr><td>%d(p->sid)<td>%d(p->fpid)<td>%d(p->firt)\ |
| 528 | 528 | @ <td>%d(p->fprev)<td>%d(p->mfirt)\ |
| 529 | - @ <td>%d(p->pEditLeaf?p->pEditLeaf->fpid:0)<td>%d(p->nReply)\ | |
| 529 | + @ <td>%d(p->pEditTail?p->pEditTail->fpid:0)<td>%d(p->nReply)\ | |
| 530 | 530 | @ <td>%S(p->zUuid)</tr> |
| 531 | 531 | } |
| 532 | 532 | @ </table> |
| 533 | 533 | } |
| 534 | 534 | |
| @@ -540,15 +540,15 @@ | ||
| 540 | 540 | static void forum_display_history(int froot, int target, int bRawMode){ |
| 541 | 541 | ForumThread *pThread = forumthread_create(froot, 0); |
| 542 | 542 | ForumEntry *p; |
| 543 | 543 | int notAnon = login_is_individual(); |
| 544 | 544 | char cMode = bRawMode ? 'r' : 'c'; |
| 545 | - ForumEntry *pEditLeaf = 0; | |
| 545 | + ForumEntry *pEditTail = 0; | |
| 546 | 546 | int cnt = 0; |
| 547 | 547 | for(p=pThread->pFirst; p; p=p->pNext){ |
| 548 | 548 | if( p->fpid==target ){ |
| 549 | - pEditLeaf = p->pEditLeaf ? p->pEditLeaf : p; | |
| 549 | + pEditTail = p->pEditTail ? p->pEditTail : p; | |
| 550 | 550 | break; |
| 551 | 551 | } |
| 552 | 552 | } |
| 553 | 553 | for(p=pThread->pFirst; p; p=p->pNext){ |
| 554 | 554 | char *zDate; |
| @@ -556,11 +556,11 @@ | ||
| 556 | 556 | int isPrivate; /* True for posts awaiting moderation */ |
| 557 | 557 | int sameUser; /* True if author is also the reader */ |
| 558 | 558 | const char *zUuid; |
| 559 | 559 | char *zDisplayName; /* The display name */ |
| 560 | 560 | |
| 561 | - if( p->fpid!=pEditLeaf->fpid && p->pEditLeaf!=pEditLeaf ) continue; | |
| 561 | + if( p->fpid!=pEditTail->fpid && p->pEditTail!=pEditTail ) continue; | |
| 562 | 562 | cnt++; |
| 563 | 563 | pPost = manifest_get(p->fpid, CFTYPE_FORUM, 0); |
| 564 | 564 | if( pPost==0 ) continue; |
| 565 | 565 | @ <div id="forum%d(p->fpid)" class="forumTime"> |
| 566 | 566 | zDate = db_text(0, "SELECT datetime(%.17g)", pPost->rDate); |
| @@ -592,11 +592,11 @@ | ||
| 592 | 592 | @ <p><span class="modpending">Awaiting Moderator Approval</span></p> |
| 593 | 593 | }else{ |
| 594 | 594 | forum_render(0, bRawMode?"text/plain":pPost->zMimetype, pPost->zWiki, |
| 595 | 595 | 0, 1); |
| 596 | 596 | } |
| 597 | - if( g.perm.WrForum && p->pEditLeaf==0 ){ | |
| 597 | + if( g.perm.WrForum && p->pEditTail==0 ){ | |
| 598 | 598 | int sameUser = login_is_individual() |
| 599 | 599 | && fossil_strcmp(pPost->zUser, g.zLogin)==0; |
| 600 | 600 | @ <div><form action="%R/forumedit" method="POST"> |
| 601 | 601 | @ <input type="hidden" name="fpid" value="%s(p->zUuid)"> |
| 602 | 602 | if( !isPrivate ){ |
| @@ -654,13 +654,13 @@ | ||
| 654 | 654 | for(p=pThread->pDisplay; p; p=p->pDisplay){ |
| 655 | 655 | int isPrivate; /* True for posts awaiting moderation */ |
| 656 | 656 | int sameUser; /* True if reader is also the poster */ |
| 657 | 657 | char *zDisplayName; /* User name to be displayed */ |
| 658 | 658 | pOPost = manifest_get(p->fpid, CFTYPE_FORUM, 0); |
| 659 | - if( p->pEditLeaf ){ | |
| 660 | - fpid = p->pEditLeaf->fpid; | |
| 661 | - zUuid = p->pEditLeaf->zUuid; | |
| 659 | + if( p->pEditTail ){ | |
| 660 | + fpid = p->pEditTail->fpid; | |
| 661 | + zUuid = p->pEditTail->zUuid; | |
| 662 | 662 | pPost = manifest_get(fpid, CFTYPE_FORUM, 0); |
| 663 | 663 | }else{ |
| 664 | 664 | fpid = p->fpid; |
| 665 | 665 | zUuid = p->zUuid; |
| 666 | 666 | pPost = pOPost; |
| @@ -684,22 +684,22 @@ | ||
| 684 | 684 | fossil_free(zDate); |
| 685 | 685 | if( g.perm.Debug ){ |
| 686 | 686 | @ <span class="debug">\ |
| 687 | 687 | @ <a href="%R/artifact/%h(p->zUuid)">(artifact-%d(p->fpid))</a></span> |
| 688 | 688 | } |
| 689 | - if( p->pEditLeaf ){ | |
| 689 | + if( p->pEditTail ){ | |
| 690 | 690 | zDate = db_text(0, "SELECT datetime(%.17g)", pPost->rDate); |
| 691 | 691 | if( fossil_strcmp(pOPost->zUser,pPost->zUser)==0 ){ |
| 692 | 692 | @ and edited on %h(zDate) |
| 693 | 693 | }else{ |
| 694 | 694 | @ as edited by %h(pPost->zUser) on %h(zDate) |
| 695 | 695 | } |
| 696 | 696 | fossil_free(zDate); |
| 697 | 697 | if( g.perm.Debug ){ |
| 698 | 698 | @ <span class="debug">\ |
| 699 | - @ <a href="%R/artifact/%h(p->pEditLeaf->zUuid)">\ | |
| 700 | - @ (artifact-%d(p->pEditLeaf->fpid))</a></span> | |
| 699 | + @ <a href="%R/artifact/%h(p->pEditTail->zUuid)">\ | |
| 700 | + @ (artifact-%d(p->pEditTail->fpid))</a></span> | |
| 701 | 701 | } |
| 702 | 702 | @ %z(href("%R/forumpost/%S?t=y",p->zUuid))[history]</a> |
| 703 | 703 | manifest_destroy(pOPost); |
| 704 | 704 | } |
| 705 | 705 | if( fpid!=target ){ |
| 706 | 706 |
| --- src/forum.c | |
| +++ src/forum.c | |
| @@ -38,11 +38,11 @@ | |
| 38 | int firt; /* This entry replies to firt */ |
| 39 | int mfirt; /* Root in-reply-to */ |
| 40 | int nReply; /* Number of replies to this entry */ |
| 41 | int sid; /* Serial ID number */ |
| 42 | char *zUuid; /* Artifact hash */ |
| 43 | ForumEntry *pEditLeaf; /* Most recent edit for this entry */ |
| 44 | ForumEntry *pEditNext; /* This entry is edited by pEditNext */ |
| 45 | ForumEntry *pEditPrev; /* This entry is an edit of pEditPrev */ |
| 46 | ForumEntry *pNext; /* Next in chronological order */ |
| 47 | ForumEntry *pPrev; /* Previous in chronological order */ |
| 48 | ForumEntry *pDisplay; /* Next in display order */ |
| @@ -193,11 +193,11 @@ | |
| 193 | } |
| 194 | db_finalize(&q); |
| 195 | bag_clear(&seen); |
| 196 | |
| 197 | /* Establish which entries are the latest edit. After this loop |
| 198 | ** completes, entries that have non-NULL pEditLeaf should not be |
| 199 | ** displayed. |
| 200 | */ |
| 201 | for(pEntry=pThread->pFirst; pEntry; pEntry=pEntry->pNext){ |
| 202 | if( pEntry->fprev ){ |
| 203 | ForumEntry *pBase = 0, *p; |
| @@ -204,11 +204,11 @@ | |
| 204 | p = forumentry_backward(pEntry->pPrev, pEntry->fprev); |
| 205 | p->pEditNext = pEntry; |
| 206 | pEntry->pEditPrev = p; |
| 207 | while( p ){ |
| 208 | pBase = p; |
| 209 | p->pEditLeaf = pEntry; |
| 210 | p = pBase->pEditPrev; |
| 211 | } |
| 212 | for(p=pEntry->pNext; p; p=p->pNext){ |
| 213 | if( p->mfirt==pEntry->fpid ) p->mfirt = pBase->fpid; |
| 214 | } |
| @@ -295,21 +295,21 @@ | |
| 295 | pThread = forumthread_create(froot, 1); |
| 296 | fossil_print("Chronological:\n"); |
| 297 | fossil_print( |
| 298 | /* 0 1 2 3 4 5 6 7 */ |
| 299 | /* 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123 */ |
| 300 | " sid fpid firt fprev mfirt pEditLeaf nReply hash\n"); |
| 301 | for(p=pThread->pFirst; p; p=p->pNext){ |
| 302 | fossil_print("%4d %9d %9d %9d %11d %9d %6d %8.8s\n", p->sid, |
| 303 | p->fpid, p->firt, p->fprev, p->mfirt, |
| 304 | p->pEditLeaf ? p->pEditLeaf->fpid : 0, p->nReply, p->zUuid); |
| 305 | } |
| 306 | fossil_print("\nDisplay\n"); |
| 307 | for(p=pThread->pDisplay; p; p=p->pDisplay){ |
| 308 | fossil_print("%*s", (p->nIndent-1)*3, ""); |
| 309 | if( p->pEditLeaf ){ |
| 310 | fossil_print("%d->%d\n", p->fpid, p->pEditLeaf->fpid); |
| 311 | }else{ |
| 312 | fossil_print("%d\n", p->fpid); |
| 313 | } |
| 314 | } |
| 315 | forumthread_delete(pThread); |
| @@ -425,11 +425,11 @@ | |
| 425 | |
| 426 | pPost = manifest_get(p->fpid, CFTYPE_FORUM, 0); |
| 427 | if( pPost==0 ) continue; |
| 428 | if( p->fpid==target ){ |
| 429 | @ <div id="forum%d(p->fpid)" class="forumTime forumSel"> |
| 430 | }else if( p->pEditLeaf!=0 ){ |
| 431 | @ <div id="forum%d(p->fpid)" class="forumTime forumObs"> |
| 432 | }else{ |
| 433 | @ <div id="forum%d(p->fpid)" class="forumTime"> |
| 434 | } |
| 435 | if( pPost->zThreadTitle ){ |
| @@ -456,14 +456,14 @@ | |
| 456 | @ in reply to %z(href("%R/forumpost/%S?t=%c",pIrt->zUuid,cMode))\ |
| 457 | @ %d(pIrt->sid)</a> |
| 458 | } |
| 459 | } |
| 460 | zUuid = p->zUuid; |
| 461 | if( p->pEditLeaf ){ |
| 462 | @ updated by %z(href("%R/forumpost/%S?t=%c",p->pEditLeaf->zUuid,cMode))\ |
| 463 | @ %d(p->pEditLeaf->sid)</a> |
| 464 | zUuid = p->pEditLeaf->zUuid; |
| 465 | } |
| 466 | if( p->fpid!=target ){ |
| 467 | @ %z(href("%R/forumpost/%S?t=%c",zUuid,cMode))[link]</a> |
| 468 | } |
| 469 | if( !bRawMode ){ |
| @@ -476,18 +476,18 @@ | |
| 476 | @ <p><span class="modpending">Awaiting Moderator Approval</span></p> |
| 477 | }else{ |
| 478 | const char *zMimetype; |
| 479 | if( bRawMode ){ |
| 480 | zMimetype = "text/plain"; |
| 481 | }else if( p->pEditLeaf!=0 ){ |
| 482 | zMimetype = "text/plain"; |
| 483 | }else{ |
| 484 | zMimetype = pPost->zMimetype; |
| 485 | } |
| 486 | forum_render(0, zMimetype, pPost->zWiki, 0, 1); |
| 487 | } |
| 488 | if( g.perm.WrForum && p->pEditLeaf==0 ){ |
| 489 | int sameUser = login_is_individual() |
| 490 | && fossil_strcmp(pPost->zUser, g.zLogin)==0; |
| 491 | @ <div><form action="%R/forumedit" method="POST"> |
| 492 | @ <input type="hidden" name="fpid" value="%s(p->zUuid)"> |
| 493 | if( !isPrivate ){ |
| @@ -519,16 +519,16 @@ | |
| 519 | ** to be displayed for debugging purposes. |
| 520 | */ |
| 521 | if( PB("threadtable") ){ |
| 522 | @ <hr> |
| 523 | @ <table border="1" cellpadding="3" cellspacing="0"> |
| 524 | @ <tr><th>sid<th>fpid<th>firt<th>fprev<th>mfirt<th>pEditLeaf<th>nReply\ |
| 525 | @ <th>hash |
| 526 | for(p=pThread->pFirst; p; p=p->pNext){ |
| 527 | @ <tr><td>%d(p->sid)<td>%d(p->fpid)<td>%d(p->firt)\ |
| 528 | @ <td>%d(p->fprev)<td>%d(p->mfirt)\ |
| 529 | @ <td>%d(p->pEditLeaf?p->pEditLeaf->fpid:0)<td>%d(p->nReply)\ |
| 530 | @ <td>%S(p->zUuid)</tr> |
| 531 | } |
| 532 | @ </table> |
| 533 | } |
| 534 | |
| @@ -540,15 +540,15 @@ | |
| 540 | static void forum_display_history(int froot, int target, int bRawMode){ |
| 541 | ForumThread *pThread = forumthread_create(froot, 0); |
| 542 | ForumEntry *p; |
| 543 | int notAnon = login_is_individual(); |
| 544 | char cMode = bRawMode ? 'r' : 'c'; |
| 545 | ForumEntry *pEditLeaf = 0; |
| 546 | int cnt = 0; |
| 547 | for(p=pThread->pFirst; p; p=p->pNext){ |
| 548 | if( p->fpid==target ){ |
| 549 | pEditLeaf = p->pEditLeaf ? p->pEditLeaf : p; |
| 550 | break; |
| 551 | } |
| 552 | } |
| 553 | for(p=pThread->pFirst; p; p=p->pNext){ |
| 554 | char *zDate; |
| @@ -556,11 +556,11 @@ | |
| 556 | int isPrivate; /* True for posts awaiting moderation */ |
| 557 | int sameUser; /* True if author is also the reader */ |
| 558 | const char *zUuid; |
| 559 | char *zDisplayName; /* The display name */ |
| 560 | |
| 561 | if( p->fpid!=pEditLeaf->fpid && p->pEditLeaf!=pEditLeaf ) continue; |
| 562 | cnt++; |
| 563 | pPost = manifest_get(p->fpid, CFTYPE_FORUM, 0); |
| 564 | if( pPost==0 ) continue; |
| 565 | @ <div id="forum%d(p->fpid)" class="forumTime"> |
| 566 | zDate = db_text(0, "SELECT datetime(%.17g)", pPost->rDate); |
| @@ -592,11 +592,11 @@ | |
| 592 | @ <p><span class="modpending">Awaiting Moderator Approval</span></p> |
| 593 | }else{ |
| 594 | forum_render(0, bRawMode?"text/plain":pPost->zMimetype, pPost->zWiki, |
| 595 | 0, 1); |
| 596 | } |
| 597 | if( g.perm.WrForum && p->pEditLeaf==0 ){ |
| 598 | int sameUser = login_is_individual() |
| 599 | && fossil_strcmp(pPost->zUser, g.zLogin)==0; |
| 600 | @ <div><form action="%R/forumedit" method="POST"> |
| 601 | @ <input type="hidden" name="fpid" value="%s(p->zUuid)"> |
| 602 | if( !isPrivate ){ |
| @@ -654,13 +654,13 @@ | |
| 654 | for(p=pThread->pDisplay; p; p=p->pDisplay){ |
| 655 | int isPrivate; /* True for posts awaiting moderation */ |
| 656 | int sameUser; /* True if reader is also the poster */ |
| 657 | char *zDisplayName; /* User name to be displayed */ |
| 658 | pOPost = manifest_get(p->fpid, CFTYPE_FORUM, 0); |
| 659 | if( p->pEditLeaf ){ |
| 660 | fpid = p->pEditLeaf->fpid; |
| 661 | zUuid = p->pEditLeaf->zUuid; |
| 662 | pPost = manifest_get(fpid, CFTYPE_FORUM, 0); |
| 663 | }else{ |
| 664 | fpid = p->fpid; |
| 665 | zUuid = p->zUuid; |
| 666 | pPost = pOPost; |
| @@ -684,22 +684,22 @@ | |
| 684 | fossil_free(zDate); |
| 685 | if( g.perm.Debug ){ |
| 686 | @ <span class="debug">\ |
| 687 | @ <a href="%R/artifact/%h(p->zUuid)">(artifact-%d(p->fpid))</a></span> |
| 688 | } |
| 689 | if( p->pEditLeaf ){ |
| 690 | zDate = db_text(0, "SELECT datetime(%.17g)", pPost->rDate); |
| 691 | if( fossil_strcmp(pOPost->zUser,pPost->zUser)==0 ){ |
| 692 | @ and edited on %h(zDate) |
| 693 | }else{ |
| 694 | @ as edited by %h(pPost->zUser) on %h(zDate) |
| 695 | } |
| 696 | fossil_free(zDate); |
| 697 | if( g.perm.Debug ){ |
| 698 | @ <span class="debug">\ |
| 699 | @ <a href="%R/artifact/%h(p->pEditLeaf->zUuid)">\ |
| 700 | @ (artifact-%d(p->pEditLeaf->fpid))</a></span> |
| 701 | } |
| 702 | @ %z(href("%R/forumpost/%S?t=y",p->zUuid))[history]</a> |
| 703 | manifest_destroy(pOPost); |
| 704 | } |
| 705 | if( fpid!=target ){ |
| 706 |
| --- src/forum.c | |
| +++ src/forum.c | |
| @@ -38,11 +38,11 @@ | |
| 38 | int firt; /* This entry replies to firt */ |
| 39 | int mfirt; /* Root in-reply-to */ |
| 40 | int nReply; /* Number of replies to this entry */ |
| 41 | int sid; /* Serial ID number */ |
| 42 | char *zUuid; /* Artifact hash */ |
| 43 | ForumEntry *pEditTail; /* Most recent edit for this entry */ |
| 44 | ForumEntry *pEditNext; /* This entry is edited by pEditNext */ |
| 45 | ForumEntry *pEditPrev; /* This entry is an edit of pEditPrev */ |
| 46 | ForumEntry *pNext; /* Next in chronological order */ |
| 47 | ForumEntry *pPrev; /* Previous in chronological order */ |
| 48 | ForumEntry *pDisplay; /* Next in display order */ |
| @@ -193,11 +193,11 @@ | |
| 193 | } |
| 194 | db_finalize(&q); |
| 195 | bag_clear(&seen); |
| 196 | |
| 197 | /* Establish which entries are the latest edit. After this loop |
| 198 | ** completes, entries that have non-NULL pEditTail should not be |
| 199 | ** displayed. |
| 200 | */ |
| 201 | for(pEntry=pThread->pFirst; pEntry; pEntry=pEntry->pNext){ |
| 202 | if( pEntry->fprev ){ |
| 203 | ForumEntry *pBase = 0, *p; |
| @@ -204,11 +204,11 @@ | |
| 204 | p = forumentry_backward(pEntry->pPrev, pEntry->fprev); |
| 205 | p->pEditNext = pEntry; |
| 206 | pEntry->pEditPrev = p; |
| 207 | while( p ){ |
| 208 | pBase = p; |
| 209 | p->pEditTail = pEntry; |
| 210 | p = pBase->pEditPrev; |
| 211 | } |
| 212 | for(p=pEntry->pNext; p; p=p->pNext){ |
| 213 | if( p->mfirt==pEntry->fpid ) p->mfirt = pBase->fpid; |
| 214 | } |
| @@ -295,21 +295,21 @@ | |
| 295 | pThread = forumthread_create(froot, 1); |
| 296 | fossil_print("Chronological:\n"); |
| 297 | fossil_print( |
| 298 | /* 0 1 2 3 4 5 6 7 */ |
| 299 | /* 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123 */ |
| 300 | " sid fpid firt fprev mfirt pEditTail nReply hash\n"); |
| 301 | for(p=pThread->pFirst; p; p=p->pNext){ |
| 302 | fossil_print("%4d %9d %9d %9d %11d %9d %6d %8.8s\n", p->sid, |
| 303 | p->fpid, p->firt, p->fprev, p->mfirt, |
| 304 | p->pEditTail ? p->pEditTail->fpid : 0, p->nReply, p->zUuid); |
| 305 | } |
| 306 | fossil_print("\nDisplay\n"); |
| 307 | for(p=pThread->pDisplay; p; p=p->pDisplay){ |
| 308 | fossil_print("%*s", (p->nIndent-1)*3, ""); |
| 309 | if( p->pEditTail ){ |
| 310 | fossil_print("%d->%d\n", p->fpid, p->pEditTail->fpid); |
| 311 | }else{ |
| 312 | fossil_print("%d\n", p->fpid); |
| 313 | } |
| 314 | } |
| 315 | forumthread_delete(pThread); |
| @@ -425,11 +425,11 @@ | |
| 425 | |
| 426 | pPost = manifest_get(p->fpid, CFTYPE_FORUM, 0); |
| 427 | if( pPost==0 ) continue; |
| 428 | if( p->fpid==target ){ |
| 429 | @ <div id="forum%d(p->fpid)" class="forumTime forumSel"> |
| 430 | }else if( p->pEditTail!=0 ){ |
| 431 | @ <div id="forum%d(p->fpid)" class="forumTime forumObs"> |
| 432 | }else{ |
| 433 | @ <div id="forum%d(p->fpid)" class="forumTime"> |
| 434 | } |
| 435 | if( pPost->zThreadTitle ){ |
| @@ -456,14 +456,14 @@ | |
| 456 | @ in reply to %z(href("%R/forumpost/%S?t=%c",pIrt->zUuid,cMode))\ |
| 457 | @ %d(pIrt->sid)</a> |
| 458 | } |
| 459 | } |
| 460 | zUuid = p->zUuid; |
| 461 | if( p->pEditTail ){ |
| 462 | @ updated by %z(href("%R/forumpost/%S?t=%c",p->pEditTail->zUuid,cMode))\ |
| 463 | @ %d(p->pEditTail->sid)</a> |
| 464 | zUuid = p->pEditTail->zUuid; |
| 465 | } |
| 466 | if( p->fpid!=target ){ |
| 467 | @ %z(href("%R/forumpost/%S?t=%c",zUuid,cMode))[link]</a> |
| 468 | } |
| 469 | if( !bRawMode ){ |
| @@ -476,18 +476,18 @@ | |
| 476 | @ <p><span class="modpending">Awaiting Moderator Approval</span></p> |
| 477 | }else{ |
| 478 | const char *zMimetype; |
| 479 | if( bRawMode ){ |
| 480 | zMimetype = "text/plain"; |
| 481 | }else if( p->pEditTail!=0 ){ |
| 482 | zMimetype = "text/plain"; |
| 483 | }else{ |
| 484 | zMimetype = pPost->zMimetype; |
| 485 | } |
| 486 | forum_render(0, zMimetype, pPost->zWiki, 0, 1); |
| 487 | } |
| 488 | if( g.perm.WrForum && p->pEditTail==0 ){ |
| 489 | int sameUser = login_is_individual() |
| 490 | && fossil_strcmp(pPost->zUser, g.zLogin)==0; |
| 491 | @ <div><form action="%R/forumedit" method="POST"> |
| 492 | @ <input type="hidden" name="fpid" value="%s(p->zUuid)"> |
| 493 | if( !isPrivate ){ |
| @@ -519,16 +519,16 @@ | |
| 519 | ** to be displayed for debugging purposes. |
| 520 | */ |
| 521 | if( PB("threadtable") ){ |
| 522 | @ <hr> |
| 523 | @ <table border="1" cellpadding="3" cellspacing="0"> |
| 524 | @ <tr><th>sid<th>fpid<th>firt<th>fprev<th>mfirt<th>pEditTail<th>nReply\ |
| 525 | @ <th>hash |
| 526 | for(p=pThread->pFirst; p; p=p->pNext){ |
| 527 | @ <tr><td>%d(p->sid)<td>%d(p->fpid)<td>%d(p->firt)\ |
| 528 | @ <td>%d(p->fprev)<td>%d(p->mfirt)\ |
| 529 | @ <td>%d(p->pEditTail?p->pEditTail->fpid:0)<td>%d(p->nReply)\ |
| 530 | @ <td>%S(p->zUuid)</tr> |
| 531 | } |
| 532 | @ </table> |
| 533 | } |
| 534 | |
| @@ -540,15 +540,15 @@ | |
| 540 | static void forum_display_history(int froot, int target, int bRawMode){ |
| 541 | ForumThread *pThread = forumthread_create(froot, 0); |
| 542 | ForumEntry *p; |
| 543 | int notAnon = login_is_individual(); |
| 544 | char cMode = bRawMode ? 'r' : 'c'; |
| 545 | ForumEntry *pEditTail = 0; |
| 546 | int cnt = 0; |
| 547 | for(p=pThread->pFirst; p; p=p->pNext){ |
| 548 | if( p->fpid==target ){ |
| 549 | pEditTail = p->pEditTail ? p->pEditTail : p; |
| 550 | break; |
| 551 | } |
| 552 | } |
| 553 | for(p=pThread->pFirst; p; p=p->pNext){ |
| 554 | char *zDate; |
| @@ -556,11 +556,11 @@ | |
| 556 | int isPrivate; /* True for posts awaiting moderation */ |
| 557 | int sameUser; /* True if author is also the reader */ |
| 558 | const char *zUuid; |
| 559 | char *zDisplayName; /* The display name */ |
| 560 | |
| 561 | if( p->fpid!=pEditTail->fpid && p->pEditTail!=pEditTail ) continue; |
| 562 | cnt++; |
| 563 | pPost = manifest_get(p->fpid, CFTYPE_FORUM, 0); |
| 564 | if( pPost==0 ) continue; |
| 565 | @ <div id="forum%d(p->fpid)" class="forumTime"> |
| 566 | zDate = db_text(0, "SELECT datetime(%.17g)", pPost->rDate); |
| @@ -592,11 +592,11 @@ | |
| 592 | @ <p><span class="modpending">Awaiting Moderator Approval</span></p> |
| 593 | }else{ |
| 594 | forum_render(0, bRawMode?"text/plain":pPost->zMimetype, pPost->zWiki, |
| 595 | 0, 1); |
| 596 | } |
| 597 | if( g.perm.WrForum && p->pEditTail==0 ){ |
| 598 | int sameUser = login_is_individual() |
| 599 | && fossil_strcmp(pPost->zUser, g.zLogin)==0; |
| 600 | @ <div><form action="%R/forumedit" method="POST"> |
| 601 | @ <input type="hidden" name="fpid" value="%s(p->zUuid)"> |
| 602 | if( !isPrivate ){ |
| @@ -654,13 +654,13 @@ | |
| 654 | for(p=pThread->pDisplay; p; p=p->pDisplay){ |
| 655 | int isPrivate; /* True for posts awaiting moderation */ |
| 656 | int sameUser; /* True if reader is also the poster */ |
| 657 | char *zDisplayName; /* User name to be displayed */ |
| 658 | pOPost = manifest_get(p->fpid, CFTYPE_FORUM, 0); |
| 659 | if( p->pEditTail ){ |
| 660 | fpid = p->pEditTail->fpid; |
| 661 | zUuid = p->pEditTail->zUuid; |
| 662 | pPost = manifest_get(fpid, CFTYPE_FORUM, 0); |
| 663 | }else{ |
| 664 | fpid = p->fpid; |
| 665 | zUuid = p->zUuid; |
| 666 | pPost = pOPost; |
| @@ -684,22 +684,22 @@ | |
| 684 | fossil_free(zDate); |
| 685 | if( g.perm.Debug ){ |
| 686 | @ <span class="debug">\ |
| 687 | @ <a href="%R/artifact/%h(p->zUuid)">(artifact-%d(p->fpid))</a></span> |
| 688 | } |
| 689 | if( p->pEditTail ){ |
| 690 | zDate = db_text(0, "SELECT datetime(%.17g)", pPost->rDate); |
| 691 | if( fossil_strcmp(pOPost->zUser,pPost->zUser)==0 ){ |
| 692 | @ and edited on %h(zDate) |
| 693 | }else{ |
| 694 | @ as edited by %h(pPost->zUser) on %h(zDate) |
| 695 | } |
| 696 | fossil_free(zDate); |
| 697 | if( g.perm.Debug ){ |
| 698 | @ <span class="debug">\ |
| 699 | @ <a href="%R/artifact/%h(p->pEditTail->zUuid)">\ |
| 700 | @ (artifact-%d(p->pEditTail->fpid))</a></span> |
| 701 | } |
| 702 | @ %z(href("%R/forumpost/%S?t=y",p->zUuid))[history]</a> |
| 703 | manifest_destroy(pOPost); |
| 704 | } |
| 705 | if( fpid!=target ){ |
| 706 |