diff options
| author | erdgeist <erdgeist@erdgeist.org> | 2026-07-12 23:42:43 +0200 |
|---|---|---|
| committer | erdgeist <erdgeist@erdgeist.org> | 2026-07-12 23:42:43 +0200 |
| commit | b271648f89cba7cafafa1b73b1658b1c1bc0e4b0 (patch) | |
| tree | 567302b1aa6add08b46e0be028a0972f76c52abc /app/controllers/admin_controller.rb | |
| parent | cf93acb8ad44ba9cd486e8f6457d9fd9fbc041cc (diff) | |
Rebuild the admin dashboard: icon nav, search, signposts, widgets
Replaces the old admin#index wizard -- accreted over years, never
designed as a whole -- with the dashboard settled on this session:
a three-icon nav (dashboard/search/log out, no locale selector), a
nodes-first search bar, four task signposts, and two symmetric
widgets (drafts/autosaves, recent changes) with a quiet housekeeping
row beneath them.
Node.recently_changed now filters and orders by the head page's own
updated_at instead of the node's blanket timestamp, so a lock/unlock
cycle with no actual publish no longer surfaces here, and the
original publisher is no longer misattributed to someone else's
housekeeping action. This also restores the "published" qualifier on
each entry, which the query previously couldn't guarantee was true.
@mynodes and its dedicated "My Work" table are retired along with the
old wizard -- "Continue my work" is a link to the existing, already-
correct NodesController#mine instead of a second, duplicate query.
Its one dedicated test (dedup across multiple revisions by the same
user) is ported to nodes_controller_test.rb, since mine already
carries the same .distinct protection the old query did; it just had
no test of its own until now.
Diffstat (limited to 'app/controllers/admin_controller.rb')
| -rw-r--r-- | app/controllers/admin_controller.rb | 21 |
1 files changed, 2 insertions, 19 deletions
diff --git a/app/controllers/admin_controller.rb b/app/controllers/admin_controller.rb index 8445997..37fd78b 100644 --- a/app/controllers/admin_controller.rb +++ b/app/controllers/admin_controller.rb | |||
| @@ -5,25 +5,8 @@ class AdminController < ApplicationController | |||
| 5 | before_action :login_required | 5 | before_action :login_required |
| 6 | 6 | ||
| 7 | def index | 7 | def index |
| 8 | @drafts = Node.where("draft_id IS NOT NULL OR autosave_id IS NOT NULL") | 8 | @drafts = Node.drafts_and_autosaves(current_user_id: current_user.id).limit(5) |
| 9 | .limit(50).order("updated_at desc") | 9 | @recent_changes = Node.recently_changed.limit(5) |
| 10 | |||
| 11 | @drafts_count = Node.where("draft_id IS NOT NULL OR autosave_id IS NOT NULL").count | ||
| 12 | |||
| 13 | @recent_changes = Node.where( | ||
| 14 | "updated_at < ? AND updated_at > ? AND parent_id IS NOT NULL", | ||
| 15 | Time.now, Time.now - 14.days | ||
| 16 | ).limit(50).order("updated_at desc") | ||
| 17 | |||
| 18 | ordered_with_level = Node.root.self_and_descendants_ordered_with_level | ||
| 19 | @sitemap_depth = {} | ||
| 20 | ordered_with_level.each { |node, level| @sitemap_depth[node.id] = level } | ||
| 21 | @sitemap = ordered_with_level.map(&:first).reject(&:update?) | ||
| 22 | |||
| 23 | @mynodes = Node.joins(:pages) | ||
| 24 | .where("pages.user_id = ? or pages.editor_id = ?", current_user, current_user) | ||
| 25 | .order("updated_at desc") | ||
| 26 | .distinct.first(50) | ||
| 27 | end | 10 | end |
| 28 | 11 | ||
| 29 | def conventions | 12 | def conventions |
