Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Improved timeline messages for forum events. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | forum-v2 |
Files: | files | file ages | folders |
SHA3-256: |
e9b13d68a7c9411a8e1fb81db3ff9797 |
User & Date: | drh 2018-07-25 19:00:29.791 |
Context
2018-07-25
| ||
21:00 | Hierarchical display of forum threads. ... (check-in: 7da12996 user: drh tags: forum-v2) | |
19:00 | Improved timeline messages for forum events. ... (check-in: e9b13d68 user: drh tags: forum-v2) | |
17:53 | Further improvements to webpage_error() and webpage_assert(). Fix forum processing so that moderator approval and disapproval work. Add the "Delete" feature to forum that simply nulls out the page using an edit. ... (check-in: 32bbb9a9 user: drh tags: forum-v2) | |
Changes
Changes to src/forum.c.
︙ | ︙ | |||
25 26 27 28 29 30 31 | ** Render a forum post for display */ void forum_render( const char *zTitle, const char *zMimetype, const char *zContent ){ | < > | > > | > > > | | | | > > > | 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | ** Render a forum post for display */ void forum_render( const char *zTitle, const char *zMimetype, const char *zContent ){ @ <div style='border: 1px solid black;padding: 1ex;'> if( zTitle ){ if( zTitle[0] ){ @ <h1>%h(zTitle)</h1> }else{ @ <h1><i>Deleted</i></h1> } } if( zContent && zContent[0] ){ Blob x; blob_init(&x, 0, 0); blob_append(&x, zContent, -1); wiki_render_by_mimetype(&x, zMimetype); blob_reset(&x); }else{ @ <i>Deleted</i> } @ </div> } /* ** Display all posts in a forum thread in chronological order */ static void forum_thread_chronological(int froot){ |
︙ | ︙ | |||
366 367 368 369 370 371 372 | }else{ webpage_error("Missing 'reply' query parameter"); } if( done ) return; } if( isDelete ){ zMimetype = "text/x-fossil-wiki"; | | | > | 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 | }else{ webpage_error("Missing 'reply' query parameter"); } if( done ) return; } if( isDelete ){ zMimetype = "text/x-fossil-wiki"; zContent = ""; if( pPost->zThreadTitle ) zTitle = ""; style_header("Delete %s", zTitle ? "Post" : "Reply"); @ <h1>Original Post:</h1> forum_render(pPost->zThreadTitle, pPost->zMimetype, pPost->zWiki); @ <h1>Change Into:</h1> forum_render(zTitle, zMimetype, zContent); @ <form action="%R/forumedit" method="POST"> @ <input type="hidden" name="fpid" value="%h(P("fpid"))"> @ <input type="hidden" name="nullout" value="1"> |
︙ | ︙ | |||
390 391 392 393 394 395 396 | zContent = PT("content"); zTitle = P("title"); if( zContent==0 ) zContent = fossil_strdup(pPost->zWiki); if( zMimetype==0 ) zMimetype = fossil_strdup(pPost->zMimetype); if( zTitle==0 && pPost->zThreadTitle!=0 ){ zTitle = fossil_strdup(pPost->zThreadTitle); } | | | | 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 | zContent = PT("content"); zTitle = P("title"); if( zContent==0 ) zContent = fossil_strdup(pPost->zWiki); if( zMimetype==0 ) zMimetype = fossil_strdup(pPost->zMimetype); if( zTitle==0 && pPost->zThreadTitle!=0 ){ zTitle = fossil_strdup(pPost->zThreadTitle); } style_header("Edit %s", zTitle ? "Post" : "Reply"); @ <h1>Original Post:</h1> forum_render(pPost->zThreadTitle, pPost->zMimetype, pPost->zWiki); if( P("preview") ){ @ <h1>Preview Of Editted Post:</h1> forum_render(zTitle, zMimetype, zContent); } @ <h1>Enter A Reply:</h1> @ <form action="%R/forumedit" method="POST"> @ <input type="hidden" name="fpid" value="%h(P("fpid"))"> @ <input type="hidden" name="edit" value="1"> forum_entry_widget(zTitle, zMimetype, zContent); }else{ /* Reply */ zMimetype = PD("mimetype","text/x-fossil-wiki"); zContent = PDT("content",""); style_header("Reply"); @ <h1>Replying To:</h1> forum_render(0, pPost->zMimetype, pPost->zWiki); if( P("preview") ){ @ <h1>Preview:</h1> forum_render(0, zMimetype,zContent); } @ <h1>Enter A Reply:</h1> |
︙ | ︙ |
Changes to src/manifest.c.
︙ | ︙ | |||
2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 | "VALUES('g',%.17g,%d,%Q,%Q)", p->rDate, rid, p->zUser, blob_str(&comment)+1 ); blob_reset(&comment); } if( p->type==CFTYPE_FORUM ){ int froot, fprev, firt; schema_forum(); froot = p->zThreadRoot ? uuid_to_rid(p->zThreadRoot, 1) : rid; fprev = p->nParent ? uuid_to_rid(p->azParent[0],1) : 0; firt = p->zInReplyTo ? uuid_to_rid(p->zInReplyTo,1) : 0; db_multi_exec( "INSERT INTO forumpost(fpid,froot,fprev,firt,fmtime)" "VALUES(%d,%d,nullif(%d,0),nullif(%d,0),%.17g)", p->rid, froot, fprev, firt, p->rDate ); | > > | > > > > > > > | < < | > > > > > > > > > > > > > > > > > > > > > > > > > > | | < < < | < | 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 | "VALUES('g',%.17g,%d,%Q,%Q)", p->rDate, rid, p->zUser, blob_str(&comment)+1 ); blob_reset(&comment); } if( p->type==CFTYPE_FORUM ){ int froot, fprev, firt; char *zFType; const char *zTitle; schema_forum(); froot = p->zThreadRoot ? uuid_to_rid(p->zThreadRoot, 1) : rid; fprev = p->nParent ? uuid_to_rid(p->azParent[0],1) : 0; firt = p->zInReplyTo ? uuid_to_rid(p->zInReplyTo,1) : 0; db_multi_exec( "INSERT INTO forumpost(fpid,froot,fprev,firt,fmtime)" "VALUES(%d,%d,nullif(%d,0),nullif(%d,0),%.17g)", p->rid, froot, fprev, firt, p->rDate ); if( firt==0 ){ /* This is the start of a new thread, either the initial entry ** or an edit of the initial entry. */ zTitle = p->zThreadTitle; if( zTitle==0 || zTitle[0]==0 ){ zTitle = "<i>Deleted</i>"; } zFType = fprev ? "Edit" : "Post"; db_multi_exec( "REPLACE INTO event(type,mtime,objid,user,comment)" "VALUES('f',%.17g,%d,%Q,'%q: %q')", p->rDate, rid, p->zUser, zFType, zTitle ); /* ** If this edit is the most recent, then make it the title for ** all other entries for the same thread */ if( !db_exists("SELECT 1 FROM forumpost WHERE froot=%d AND firt=0" " AND fpid!=%d AND fmtime>%.17g", froot, rid, p->rDate) ){ /* This entry establishes a new title for all entries on the thread */ db_multi_exec( "UPDATE event" " SET comment=substr(comment,1,instr(comment,':')) || ' %q'" " WHERE objid IN (SELECT fpid FROM forumpost WHERE froot=%d)", zTitle, froot ); } }else{ /* This is a reply to a prior post. Take the title from the root. */ zTitle = db_text(0, "SELECT substr(comment,instr(comment,':')+2)" " FROM event WHERE objid=%d", froot); if( zTitle==0 ) zTitle = fossil_strdup("<i>Unknown</i>"); if( p->zWiki[0]==0 ){ zFType = "Delete reply"; }else if( fprev ){ zFType = "Edit reply"; }else{ zFType = "Reply"; } db_multi_exec( "REPLACE INTO event(type,mtime,objid,user,comment)" "VALUES('f',%.17g,%d,%Q,'%q: %q')", p->rDate, rid, p->zUser, zFType, zTitle ); fossil_free(zTitle); } } db_end_transaction(0); if( permitHooks ){ rc = xfer_run_common_script(); if( rc==TH_OK ){ rc = xfer_run_script(zScript, zUuid, 0); |
︙ | ︙ |