summaryrefslogtreecommitdiff
path: root/config
AgeCommit message (Collapse)Author
2026-07-31Replace user deletion with deactivationerdgeist
Deactivation adds the alumni role and leaves the others in place, so reactivation is lossless and nobody has to remember what an account held. login_from_session checks alumni? on every request, so a signed-in user is locked out on their next one without any session invalidation. Guards prevent deactivating yourself or the last active admin, and both verbs are witnessed in the action log.
2026-07-31Group user accounts by roleerdgeist
Replaces the two-way admin/user split with four groups ordered by capability: administration, Redaktion, editors, alumni. alumni takes precedence over capability in role_group, so a retired admin appears at the bottom rather than the top. Forms now offer the three roles as checkboxes rather than a single admin checkbox, with a trailing hidden blank so an empty set can be posted, and user_params permits roles only for admins. Three create buttons prefill the common combinations.
2026-07-31Translate the Copied! label indicator for copy-url buttonserdgeist
2026-07-31Let shortcode aggregate log but remove failed shortcode itselferdgeist
2026-07-30Provide the full i18n matrix for public/admin-preview/shared-preview urlserdgeist
2026-07-30Replaces the grey slab and filled-box handle with the house card idiom,erdgeist
a tabler grip and icon-only edit and delete actions. Shows each item's non-default translations muted below the title, read from the translation rows rather than the accessor so the fallback chain cannot disguise a missing label as a translated one. Adds move up/down buttons via acts_as_list, the single-pointer alternative WCAG 2.5.7 requires: the jQuery UI sortable binds mouse events only, so dragging works neither on touch nor from the keyboard. The grip is hidden below the desktop breakpoint for the same reason. The sort handler dropped dataType: "json" against a head :ok response, which sent every success down the error path, and now reloads so the disabled chevron states match the stored order after a drag.
2026-07-30Localise model validation messages and refusal reasonserdgeist
2026-07-30Use icon sets on the public page and add a public-site shortcut in admin realmerdgeist
2026-07-30Retire the unroutable scaffold viewserdgeist
Nine generator leftovers for actions that either do not exist or never render HTML. menu_items/show goes with its route and its action, since deleting the template alone would turn a dead page into a missing-template error; pages_controller has only #preview, so its four CRUD views were unreachable by any route; and nodes#update redirects on every path.
2026-07-30Emit per-page Open Graph metadataerdgeist
Replaces one hardcoded German description and an unrenderable SVG with per-page title, description, canonical URL, locale and publication date, plus the card variant or a site-wide default.
2026-07-28Let editors manage menu titles in both localeserdgeist
2026-07-27Surface held locks in the dashboard's work-in-progress widgeterdgeist
A lock with no draft or autosave behind it was invisible to everyone including its holder, until the next editor collided with it. work_in_progress now admits those nodes, and the widget names the holder rather than the last editor on any locked row. Also flips the ordering to stalest-first, so a backlog reads as a queue rather than a feed, and gives the heading a real total: the count came from the already-limited relation and could never exceed five.
2026-07-27Retire orphaned drafts partial and their translationserdgeist
2026-07-27Consolidate all main nav items in a single partialerdgeist
2026-07-27Move nav_switcher locale keys to layoutserdgeist
2026-07-27Move switchers out of the user check, so it also works when logged outerdgeist
2026-07-26Fix login view so the user knows where they are logging in toerdgeist
2026-07-25Extract public-site strings to i18nerdgeist
The public views were never part of the admin extraction and were broken in both directions: German visitors got "Featured", "Calendar" and "Tags", English visitors got "Suchergebnisse für Suchbegriff:". Also picks up the unlock-confirm message in link_helper, a straggler from the revisions/menu_items batch, and drops two raw() calls in the application layout in favour of link_to blocks.
2026-07-25Extract admin strings to i18n: revisions, page_translations, and menu items,erdgeist
2026-07-25Extract admin strings to i18n: dashboard, layout chrome, and the JS bridgeerdgeist
2026-07-25Extract admin strings to i18n: assets and events clusterserdgeist
2026-07-25Extract flashes to i18n and stop dispatching on submit labelserdgeist
2026-07-25Extract admin strings to i18n: users and tags clusterserdgeist
2026-07-25Extract admin strings to i18n: the nodes clustererdgeist
2026-07-24Extract admin strings to i18n: sessions, otp, users/editerdgeist
2026-07-24Add a pseudo-locale tripwire for the i18n extractionerdgeist
2026-07-24Give all sessions a uniform absolute lifetime of one weekerdgeist
Enforced at restore via a login-time stamp, written only at genuine logins so the limit stays absolute rather than sliding. The cookie name rotation logs everyone out once at deploy. Second-factor users are deliberately not treated worse than password-only ones.
2026-07-24Render the otp verbs properly in the action logerdgeist
2026-07-24Polish the OTP flows: autocomplete tokens, button dialect, QR sizing, my-account linkerdgeist
2026-07-24Add self-service TOTP enrollment UI and witnessed admin reseterdgeist
2026-07-24Add TOTP enrollment and verification to User, witnessed in the action logerdgeist
2026-07-24Reduce visual clutter: remove time from article partialserdgeist
2026-07-23Force tags to be lowercase. A script unifies existing tags in both caseserdgeist
2026-07-23Zoom the action log on assetserdgeist
Asset names in summaries and publish deltas link to assets#show with an inline Chronik beside each, suppressed inside that asset's own zoom, per the node convention. assets#show gains a history button. Also renames the details summary (no longer only translations) and moves View Diff onto its own line.
2026-07-23Record asset deltas at publish, with changed assets as participantserdgeist
2026-07-23Witness asset uploads and out-of-band attaches in the action logerdgeist
2026-07-23Witness asset destruction, naming every node it stripserdgeist
2026-07-22Retire nodes#recent, superseded by the action logerdgeist
2026-07-21Render PDF headlines as document cards, not lightbox imageserdgeist
A starred PDF previously ran through the same crop-and-lightbox path a photo does -- exactly the awkward treatment explicit headline designation was meant to avoid. _headline_image.html.erb now branches on @headline_asset.pdf?: a PDF renders as a linked card (a :medium thumbnail, a file icon, its name), no gallery participation at all. The existing image-headline and gallery-fallback logic is otherwise unchanged, now scoped to an image-specific headline only. Other attached PDFs -- headlined or not -- list below as plain links, same reasoning as why non-headline photos still get a gallery trigger: an attached document shouldn't go invisible just because nothing's been starred yet. headline_image's own render guard needed widening to cover a page with PDFs attached but no images and no headline at all -- the one case none of the existing conditions accounted for.
2026-07-21Remove unreachable image_box drag-and-drop UIerdgeist
image_interface and meta_data (admin_interface.js), the sort_images action and route, and their admin.css rules -- the old vertical image_browser sidebar this all depended on isn't rendered by any current view. related_assets.js and the star-toggle sidebar fully supersede what this did. Confirmed unreachable via full grep across app/, config/routes.rb, and admin_bundle.js before removal -- route, controller action, and JS handler were all individually real and functional, just with nothing left anywhere that could ever trigger them.
2026-07-20Make headline images explicit, add asset creditserdgeist
- related_assets gains a `headline` boolean (DB-enforced: at most one per page), replacing "first image by position" as the headline rule. A rake task backfills the current first image on every live head/draft, so nothing changes visually until an editor changes it. - The image picker sidebar gets a star toggle reflecting the flag; the TinyMCE inline-image picker's badge now reads it too, instead of assuming position 0. - No headline chosen (or none attached) now falls back to the gallery-count caption itself becoming the lightbox trigger, instead of the gallery being unreachable. - Assets gain creator, source_url, and license_key (against a new config/asset_licenses.yml dictionary). asset_credit renders a degrading attribution line, reused as a hidden per-image glightbox caption so credit is one click away for every image, not only the headline's always-visible one. - Fixed: asset thumbnails rendered unconditionally regardless of whether a real variant exists on disk. Asset#has_variant? checks file existence, not content type -- some legacy PDFs have real pre-rewrite thumbnails a content-type check would have hidden. - assets#new/edit rebuilt onto the same node_description/node_content layout as assets#show, picking up the three new fields in the process.
2026-07-19Log CSP violations to their own file instead of relying on Rails.loggererdgeist
2026-07-19Add deliberate default to xml for rss and rdferdgeist
2026-07-19Add the error log writererdgeist
2026-07-19Add a 500er logger and a trip wire in admin/boom to test iterdgeist
2026-07-18Emit a report-only Content-Security-Policy with nonced inline scriptserdgeist
- dark-mode restore now travels nonced, the admin constants likewise - AUTH_TOKEN deleted in favour of the csrf meta tag - new report collector at /csp_reports
2026-07-18Annotate the History list with each revision's lifecycleerdgeist
Each row in nodes#show's History section now carries terse badges from the action log: created, published, and restored (rollback re-promotion), with date and actor, rendered from entry metadata alone. Backfilled entries wear the inferred marker, so reconstructed provenance stays distinguishable from witnessed history. A revision that was published and later restored shows both badges chronologically -- its true biography. Only create and publish entries carry page_id; trash, restore, and destroy annotate the node's own log zoom instead of any single revision, by design.
2026-07-18Teach the action log reader the Trash vocabularyerdgeist
Sentences for trash (with the pre-trash path), restore_from_trash (with the destination), and destroy (with the final path, read from its flat create-symmetric key).
2026-07-18Add Trash affordances: cockpit, listing, dashboard entryerdgeist
nodes#show gains a Trash section on trashed nodes: provenance from the trash entry, a restore form whose parent picker pre-fills the old parent while it still lives, and permanent deletion. A Move-to-Trash button joins the status actions on living nodes. nodes#trashed lists trashed subtree roots with weight, provenance, and deletion; the dashboard housekeeping row links to it, and trash/destroy redirect there. Deletion from Trash now removes the whole subtree, deepest first, each node through a real destroy! so every per-node cascade runs -- amending the never-recursive rule for this one sanctioned path (both confirms state the count; the root entry carries destroyed_descendants). Bare Node#destroy still refuses children.
2026-07-17Route and control trash, restore, and permanent deletionerdgeist