The notifications schema is already set up for reddit-style
chronological notifications. We simply have to remove the logic that
builds the context and patch up a few places in the frontend that
were expecting full reply trees.
`Comment.header_msg` previously expected the user's own comment to
be top-level in comment replies. Logic is revised to expect the actual
reply.
`files.routes.front.notifications_main` now has reduced query volume
because we aren't expiring the session when marking notifications read.
This also allows us to remove the unused `comms` variable, which is a
makeshift "pattern" of storing duplicate database replies across a
commit so the templates don't requery (thus losing data attached to
the runtime object, like `c.unread` / `c.notif_utc`).
We move the `is_notification_page` flag to the route callers rather
than templates checking `request.path`.
Minor UI style: "Clear all notifications" -> "Mark All Read", since
this was a persistent point of user confusion upstream, with people
expecting their inbox to empty out. Also less margin between notifs
to be consistent with tighter comment display elsewhere and removed
need to separate groups of comments vs single comments.
Change the notifications subpages to be distinct route handlers with
actual paths rather than query parameters. They already were a massive
conditional chain with almost no common logic.
Hard wrap some of the more egregious query lines. Use less duplicated
code for shadowban exclusion.
Only major functionality change which is somewhat related to #476 is
to sort subtrees by Comment.id DESC. Otherwise, upstream is
substantially the same as TheMotte. Given that upstream didn't
experience #476, I think the issue may have been resolved by prior
changes to filtering / comment visibility & moderation.
In the distant past, the codebase would check pushshift for keyword
mentions and generate notifications to admins about them. I can't
find where we removed it, but I don't think it was ever operative.
Since these notifications don't get generated, we don't need a
notifications page for them.
Fixes#612. Ports in an existing working fix from upstream with
the change to bs_trigger. Also a stylistic improvement on the
preceding line I noticed while porting it.
bs_trigger is what attaches the event listeners for the Boostrap
popovers. It wasn't being called on the new elements, so they get no
user card. It is now, so it does. Calling it on the comment form
element doesn't work here because, unlike in an earlier stage of the
codebase (which I think the fork occured during the transition of)
put replies into a dedicated element rather than replacing the reply
form.
* Use sessionmaker instead of context block
Essentially there were two bugs:
1) The logging lines before explicit `Session.begin` caused the root
"A transaction is already begun on this Session.", which is
resolved by moving the logging within the explicit session block,
as intended.
2) We were reusing a Session across cron runs. The architecture was
intended to not do so, but we didn't have an actual sessionmaker
available to cron. We probably ought to get rid of scoped_session
elsewhere, but baby steps to resolve the immediate issue.
In testing, this works correctly with the fix to `db.begin`, and
tests with deliberately reintroducing the logging bug, the changes
to session creation prevent the every-15sec stack trace spam.
---------
Almost-entirely-authored-by: TLSM <duolsm@outlook.com>
* Guarantees that the flask db upgrade happens before cron starts
* De-duplicates upgrade logic
* Provides a convenient place to put more startup steps
Investigation of why `@tyre_inflator` didn't appear to ping
`@Tyre_Inflator` revealed that the alerts/notifications system is
correctly case-insensitive. However, the logic in `sanitize` that
converts `@mention`s into user profile links was case-sensitive.
We resolve that here the naive way by normalizing case while comparing.
In some cases, #535 caused comment display to wildly break visible
page formatting. The sidebar often moved to bottom of page, and some
comments would display in a second column alongside the main one.
Root cause was a closing `</div>` left outside of a conditional
which was included in rendered markup even when:
1) A comment is invisible for the current browsing user v, e.g.
filtered or removed.
2) The subtree rooted at said comment is to be hidden based on
the display logic added in #535.
Which left a stray `</div>` with no opening tag where those
comments should've gone.
Most of the testing appears to have been done on reply chains of
comments, which behave correctly. It is specifically the zero
children (or otherwise not even showing a "Removed" message in the
page) which causes the bug.
* invisibleify completely removed trees only (fixes#431)
* fix visibility state for shadowbanned users.
this also ends up moving some of the complexity out of the templates.
* comments: remove unused variable
* moderation state machine
* no seriously this really should check for v not being None
* fix shadowban state
* fix visibility state
* update stateful counters
* don't use bespoke function for show_descendants
* properly mock ModerationState for cron submissions
* fix approval discrepency
* remove treenukes for removed comments
* show shadowbans as removed
* remove holes
* don't import class that doesn't exist
* remove subs in template code
* remove subs_created
* fix sticky bug
* uh... i think this will fix it????
* fix stupid nearly ungrokkable nesting error
* ...
* ....
* ....
* *sigh*
* .............................i think i got it.
* Revert ".............................i think i got it."
This reverts commit 419a545875.
* Revert "*sigh*"
This reverts commit fcfc9d7995.
* Revert "...."
This reverts commit e200c8f6f0.
* Revert "...."
This reverts commit 681db8cb02.
* Revert "..."
This reverts commit c54372b9ff.
* Revert "fix stupid nearly ungrokkable nesting error"
This reverts commit e202fd774c.
* Revert "uh... i think this will fix it????"
This reverts commit e4d9366093.
* readd missing endif
* fix email templates.
* fix frontpage listing
* some minor fixes wrt saving
* fix some listing errors
* Remove more references to holes system
A couple of these came from the merge of #554. A few others were just
left in the templates and presumably hard to catch on the first
removal pass.
* remove unnecessary lazy
* Add migration
Tested. Very sensitive to order. I wound up borrowing the statement
order we used for deleting sub rows on upstream (manually, of course).
---------
Co-authored-by: TLSM <duolsm@outlook.com>
b46ada9f72 added support for dotenv files to be loaded in lieu of
actual environment variables. This code has since been neglected across
infrastructure changes that removed the need for an env file, moved
its location, and changed dependency management style.
This won't be operative in production (and already isn't, since there'd
be an ImportError on 'dotenv' if so) but makes some local testing
setups more convenient.
* leaderboard: correct LB set when !ENABLE_SERVICES
* leaderboard: fix NotImplementedError
UserBlockLeaderboard did not, in fact, implement `value_func`. Nor did
its superclass. The bug was replicated by having at least one UserBlock
in the test data.