mirror of
https://github.com/discourse/discourse.git
synced 2024-12-17 06:33:42 +08:00
e7f251c105
FIX: history revision can now properly be hidden FIX: PostRevision serializer is now entirely dynamic to properly handle hidden revisions FIX: default history modal to "side by side" view on mobile FIX: properly hiden which revision has been hidden UX: inline category/user/wiki/post_type changes with the revision details FEATURE: new '/posts/:post_id/revisions/latest' endpoint to retrieve latest revision UX: do not show the hide/show revision button on mobile (no room for them) UX: remove CSS transitions on the buttons in the history modal FIX: PostRevisor now handles all the changes that might create new revisions FIX: PostRevision.ensure_consistency! was wrong due to off by 1 mistake... refactored topic's callbacks for better readability extracted 'PostRevisionGuardian'
56 lines
1.6 KiB
Ruby
56 lines
1.6 KiB
Ruby
require_dependency "discourse_diff"
|
|
|
|
class PostRevision < ActiveRecord::Base
|
|
belongs_to :post
|
|
belongs_to :user
|
|
|
|
serialize :modifications, Hash
|
|
|
|
def self.ensure_consistency!
|
|
# 1 - fix the numbers
|
|
PostRevision.exec_sql <<-SQL
|
|
UPDATE post_revisions
|
|
SET number = pr.rank
|
|
FROM (SELECT id, 1 + ROW_NUMBER() OVER (PARTITION BY post_id ORDER BY number, created_at, updated_at) AS rank FROM post_revisions) AS pr
|
|
WHERE post_revisions.id = pr.id
|
|
AND post_revisions.number <> pr.rank
|
|
SQL
|
|
|
|
# 2 - fix the versions on the posts
|
|
PostRevision.exec_sql <<-SQL
|
|
UPDATE posts
|
|
SET version = 1 + (SELECT COUNT(*) FROM post_revisions WHERE post_id = posts.id),
|
|
public_version = 1 + (SELECT COUNT(*) FROM post_revisions pr WHERE post_id = posts.id AND pr.hidden = 'f')
|
|
WHERE version <> 1 + (SELECT COUNT(*) FROM post_revisions WHERE post_id = posts.id)
|
|
OR public_version <> 1 + (SELECT COUNT(*) FROM post_revisions pr WHERE post_id = posts.id AND pr.hidden = 'f')
|
|
SQL
|
|
end
|
|
|
|
def hide!
|
|
update_column(:hidden, true)
|
|
end
|
|
|
|
def show!
|
|
update_column(:hidden, false)
|
|
end
|
|
|
|
end
|
|
|
|
# == Schema Information
|
|
#
|
|
# Table name: post_revisions
|
|
#
|
|
# id :integer not null, primary key
|
|
# user_id :integer
|
|
# post_id :integer
|
|
# modifications :text
|
|
# number :integer
|
|
# created_at :datetime not null
|
|
# updated_at :datetime not null
|
|
#
|
|
# Indexes
|
|
#
|
|
# index_post_revisions_on_post_id (post_id)
|
|
# index_post_revisions_on_post_id_and_number (post_id,number)
|
|
#
|