summaryrefslogtreecommitdiff
path: root/app/controllers
diff options
context:
space:
mode:
authorerdgeist <erdgeist@erdgeist.org>2026-07-12 23:42:43 +0200
committererdgeist <erdgeist@erdgeist.org>2026-07-12 23:42:43 +0200
commitb271648f89cba7cafafa1b73b1658b1c1bc0e4b0 (patch)
tree567302b1aa6add08b46e0be028a0972f76c52abc /app/controllers
parentcf93acb8ad44ba9cd486e8f6457d9fd9fbc041cc (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')
-rw-r--r--app/controllers/admin_controller.rb21
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