Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Enable the chronological forum display for all users able to read the forum. Make chronological the default display mode for mobile devices, as determined by the user-agent string. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
c720327afe191528e0e62aa171fda8a1 |
User & Date: | drh 2018-09-26 14:04:10.928 |
Context
2018-09-26
| ||
18:39 | Setup and Admin users that are in the subscriber table were getting email alerts only if they had explicit moderator capabilities set. Those with bare "s" or "a" weren't getting notified. ... (check-in: 1d3dd1d9 user: wyoung tags: trunk) | |
14:04 | Enable the chronological forum display for all users able to read the forum. Make chronological the default display mode for mobile devices, as determined by the user-agent string. ... (check-in: c720327a user: drh tags: trunk) | |
13:33 | When clicking on a username in the timeline, link to a timeline that shows *all* events for that user. In other words, override the display-cookie y= query parameter by providing an explicit y=a query term. ... (check-in: 6313d0a8 user: drh tags: trunk) | |
Changes
Changes to src/cgi.c.
︙ | ︙ | |||
2065 2066 2067 2068 2069 2070 2071 | ** Return true if information is coming from the loopback network. */ int cgi_is_loopback(const char *zIpAddr){ return fossil_strcmp(zIpAddr, "127.0.0.1")==0 || fossil_strcmp(zIpAddr, "::ffff:127.0.0.1")==0 || fossil_strcmp(zIpAddr, "::1")==0; } | > > > > > > > > > > > > | 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 | ** Return true if information is coming from the loopback network. */ int cgi_is_loopback(const char *zIpAddr){ return fossil_strcmp(zIpAddr, "127.0.0.1")==0 || fossil_strcmp(zIpAddr, "::ffff:127.0.0.1")==0 || fossil_strcmp(zIpAddr, "::1")==0; } /* ** Return true if the HTTP request is likely to be from a small-screen ** mobile device. ** ** The returned value is a guess. Use it only for setting up defaults. */ int cgi_from_mobile(void){ const char *zAgent = P("HTTP_USER_AGENT"); if( zAgent==0 ) return 0; return sqlite3_strlike("%mobile%", zAgent, 0)==0; } |
Changes to src/forum.c.
︙ | ︙ | |||
293 294 295 296 297 298 299 | if( pPost->zThreadTitle ){ @ <h1>%h(pPost->zThreadTitle)</h1> } zDate = db_text(0, "SELECT datetime(%.17g)", pPost->rDate); @ <p>By %h(pPost->zUser) on %h(zDate) (%d(p->fpid)) fossil_free(zDate); if( p->pEdit ){ | | | | | | 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 | if( pPost->zThreadTitle ){ @ <h1>%h(pPost->zThreadTitle)</h1> } zDate = db_text(0, "SELECT datetime(%.17g)", pPost->rDate); @ <p>By %h(pPost->zUser) on %h(zDate) (%d(p->fpid)) fossil_free(zDate); if( p->pEdit ){ @ edit of %z(href("%R/forumpost/%S?t=c",p->pEdit->zUuid))%d(p->fprev)</a> } if( p->firt ){ ForumEntry *pIrt = p->pPrev; while( pIrt && pIrt->fpid!=p->firt ) pIrt = pIrt->pPrev; if( pIrt ){ @ reply to %z(href("%R/forumpost/%S?t=c",pIrt->zUuid))%d(p->firt)</a> } } if( p->pLeaf ){ @ updated by %z(href("%R/forumpost/%S?t=c",p->pLeaf->zUuid))\ @ %d(p->pLeaf->fpid)</a> } if( g.perm.Debug ){ @ <span class="debug">\ @ <a href="%R/artifact/%h(p->zUuid)">artifact</a></span> } if( p->fpid!=target ){ @ %z(href("%R/forumpost/%S?t=c",p->zUuid))[link]</a> } isPrivate = content_is_private(p->fpid); sameUser = notAnon && fossil_strcmp(pPost->zUser, g.zLogin)==0; if( isPrivate && !g.perm.ModForum && !sameUser ){ @ <p><span class="modpending">Awaiting Moderator Approval</span></p> }else{ forum_render(0, pPost->zMimetype, pPost->zWiki, 0); |
︙ | ︙ | |||
469 470 471 472 473 474 475 | ** it's entire thread. The selected posting is enclosed within ** <div class='forumSel'>...</div>. Javascript is used to move the ** selected posting into view after the page loads. ** ** Query parameters: ** ** name=X REQUIRED. The hash of the post to display | > | > | > | | | > > | > > > < | < | 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 | ** it's entire thread. The selected posting is enclosed within ** <div class='forumSel'>...</div>. Javascript is used to move the ** selected posting into view after the page loads. ** ** Query parameters: ** ** name=X REQUIRED. The hash of the post to display ** t=MODE Display mode. MODE is 'c' for chronological or ** 'h' for hierarchical, or 'a' for automatic. */ void forumpost_page(void){ forumthread_page(); } /* ** WEBPAGE: forumthread ** ** Show all forum messages associated with a particular message thread. ** The result is basically the same as /forumpost except that none of ** the postings in the thread are selected. ** ** Query parameters: ** ** name=X REQUIRED. The hash of any post of the thread. ** t=MODE Display mode. MODE is 'c' for chronological or ** 'h' for hierarchical, or 'a' for automatic. */ void forumthread_page(void){ int fpid; int froot; const char *zName = P("name"); const char *zMode = PD("t","a"); login_check_credentials(); if( !g.perm.RdForum ){ login_needed(g.anon.RdForum); return; } if( zName==0 ){ webpage_error("Missing \"name=\" query parameter"); } fpid = symbolic_name_to_rid(zName, "f"); if( fpid<=0 ){ webpage_error("Unknown or ambiguous forum id: \"%s\"", zName); } style_header("Forum"); froot = db_int(0, "SELECT froot FROM forumpost WHERE fpid=%d", fpid); if( froot==0 ){ webpage_error("Not a forum post: \"%s\"", zName); } if( fossil_strcmp(g.zPath,"forumthread")==0 ) fpid = 0; if( zMode[0]=='a' ){ if( cgi_from_mobile() ){ zMode = "c"; /* Default to chronological on mobile */ }else{ zMode = "h"; } } if( zMode[0]=='c' ){ style_submenu_element("Hierarchical", "%R/%s/%s?t=h", g.zPath, zName); forum_display_chronological(froot, fpid); }else{ style_submenu_element("Chronological", "%R/%s/%s?t=c", g.zPath, zName); forum_display_hierarchical(froot, fpid); } style_load_js("forum.js"); style_footer(); } /* |
︙ | ︙ |