added notes

This commit is contained in:
albert
2010-02-24 15:40:55 -05:00
parent 7bb935256b
commit 55700efeb1
17 changed files with 462 additions and 27 deletions

View File

@@ -1,22 +1,23 @@
class RelatedTagCalculator
def find_tags(tag, limit)
ActiveRecord::Base.connection.select_values_sql("SELECT tag_string FROM posts WHERE tag_index @@ to_tsquery('danbooru', ?) ORDER BY id DESC LIMIT ?", tag, limit)
ActiveRecord::Base.select_values_sql("SELECT tag_string FROM posts WHERE tag_index @@ to_tsquery('danbooru', ?) ORDER BY id DESC LIMIT ?", tag, limit)
end
def calculate_from_sample(name, limit, category_constraint = nil)
counts = Hash.new {|h, k| h[k] = 0}
find_tags(name, limit).each do |post|
find_tags(name, limit).each do |tags|
tag_array = Tag.scan_tags(tags)
if category_constraint
categories = Tag.categories_for(post.tag_array)
categories = Tag.categories_for(tag_array)
post.tag_array.each do |tag|
tag_array.each do |tag|
if categories[tag] == category_constraint && tag != name
counts[tag] += 1
end
end
else
post.tag_array.each do |tag|
tag_array.each do |tag|
if tag != name
counts[tag] += 1
end

View File

@@ -5,6 +5,7 @@ class Artist < ActiveRecord::Base
after_save :create_version
after_save :commit_url_string
validates_uniqueness_of :name
validates_presence_of :updater_id, :updater_ip_addr
belongs_to :updater, :class_name => "User"
belongs_to :creator, :class_name => "User"
has_many :members, :class_name => "Artist", :foreign_key => "group_name", :primary_key => "name"
@@ -137,12 +138,14 @@ class Artist < ActiveRecord::Base
)
end
def revert_to!(version)
def revert_to!(version, reverter_id, reverter_ip_addr)
self.name = version.name
self.url_string = version.url_string
self.is_active = version.is_active
self.other_names = version.other_names
self.group_name = version.group_name
self.updater_id = reverter_id
self.updater_ip_addr = reverter_ip_addr
save
end
end

109
app/models/note.rb Normal file
View File

@@ -0,0 +1,109 @@
class Note < ActiveRecord::Base
attr_accessor :updater_id, :updater_ip_addr
belongs_to :post
belongs_to :creator, :class_name => "User"
belongs_to :updater, :class_name => "User"
before_save :initialize_creator
before_save :blank_body
has_many :versions, :class_name => "NoteVersion"
after_save :update_post
after_save :create_version
validate :post_must_not_be_note_locked
validates_presence_of :updater_id, :updater_ip_addr
attr_accessible :x, :y, :width, :height, :body, :updater_id, :updater_ip_addr, :is_active
scope :active, where("is_active = TRUE")
def presenter
@presenter ||= NotePresenter.new(self)
end
def initialize_creator
self.creator_id = updater_id
end
def post_must_not_be_note_locked
if is_locked?
errors.add :post, "is note locked"
return false
end
end
def is_locked?
Post.exists?(["id = ? AND is_note_locked = ?", post_id, true])
end
def blank_body
self.body = "(empty)" if body.blank?
end
def creator_name
User.find_name(creator_id)
end
def update_post
if Note.exists?(["is_active = ? AND post_id = ?", true, post_id])
Post.update(post_id, :last_noted_at => updated_at, :updater_id => updater_id, :updater_ip_addr => updater_ip_addr)
else
Post.update(post_id, :last_noted_at => nil, :updater_id => updater_id, :updater_ip_addr => updater_ip_addr)
end
end
def create_version
versions.create(
:updater_id => updater_id,
:updater_ip_addr => updater_ip_addr,
:x => x,
:y => y,
:width => width,
:height => height,
:is_active => is_active,
:body => body
)
end
def revert_to(version, reverter_id, reverter_ip_addr)
self.x = version.x
self.y = version.y
self.body = version.body
self.width = version.width
self.height = version.height
self.is_active = version.is_active
self.updater_id = reverter_id
self.updater_ip_addr = reverter_ip_addr
end
def revert_to!(version, reverter_id, reverter_ip_addr)
revert_to(version, reverter_id, reverter_ip_addr)
save!
end
def self.undo_changes_by_user(user_id, reverter_id, reverter_ip_addr)
transaction do
notes = Note.joins(:versions).where(["note_versions.updater_id = ?", user_id]).select("DISTINCT notes.*").all
NoteVersion.destroy_all(["updater_id = ?", user_id])
notes.each do |note|
first = note.versions.first
if first
note.revert_to!(first, reverter_id, reverter_ip_addr)
end
end
end
end
def self.build_relation(params)
relation = where()
if !params[:query].blank?
query = params[:query].scan(/\S+/).join(" & ")
relation = relation.where(["text_index @@ plainto_tsquery(?)", query])
end
if params[:status] == "Active"
relation = relation.where("is_active = TRUE")
elsif params[:status] == "Deleted"
relation = relation.where("is_active = FALSE")
end
relation
end
end

View File

@@ -0,0 +1,5 @@
class NoteVersion < ActiveRecord::Base
def updater_name
User.find_name(updater_id)
end
end

View File

@@ -14,7 +14,9 @@ class Post < ActiveRecord::Base
has_one :moderation_detail, :class_name => "PostModerationDetail", :dependent => :destroy
has_many :versions, :class_name => "PostVersion", :dependent => :destroy
has_many :votes, :class_name => "PostVote", :dependent => :destroy
attr_accessible :source, :rating, :tag_string, :old_tag_string, :updater_id, :updater_ip_addr
has_many :notes, :dependent => :destroy
validates_presence_of :updater_id, :updater_ip_addr
attr_accessible :source, :rating, :tag_string, :old_tag_string, :updater_id, :updater_ip_addr, :last_noted_at
module FileMethods
def delete_files
@@ -134,14 +136,16 @@ class Post < ActiveRecord::Base
:updater_id => updater_id,
:updater_ip_addr => updater_ip_addr
)
raise PostVersion::Error.new(version.errors.full_messages.join("; ")) if version.errors.any?
end
def revert_to!(version)
def revert_to!(version, reverter_id, reverter_ip_addr)
self.source = version.source
self.rating = version.rating
self.tag_string = version.tag_string
self.updater_id = reverter_id
self.updater_ip_addr = reverter_ip_addr
save!
end
end

View File

@@ -27,14 +27,16 @@ class WikiPage < ActiveRecord::Base
relation
end
def revert_to(version)
def revert_to(version, reverter_id, reverter_ip_addr)
self.title = version.title
self.body = version.body
self.is_locked = version.is_locked
self.updater_id = reverter_id
self.updater_ip_addr = reverter_ip_addr
end
def revert_to!(version)
revert_to(version)
def revert_to!(version, reverter_id, reverter_ip_addr)
revert_to(version, reverter_id, reverter_ip_addr)
save!
end
@@ -51,13 +53,15 @@ class WikiPage < ActiveRecord::Base
end
def create_version
versions.create(
:updater_id => updater_id,
:updater_ip_addr => updater_ip_addr,
:title => title,
:body => body,
:is_locked => is_locked
)
if title_changed? || body_changed? || is_locked_changed?
versions.create(
:updater_id => updater_id,
:updater_ip_addr => updater_ip_addr,
:title => title,
:body => body,
:is_locked => is_locked
)
end
end
def initialize_creator

View File

@@ -0,0 +1,9 @@
class NotePresenter
def initialize(note)
@note = note
end
def formatted_body
note.body.gsub(/<tn>(.+?)<\/tn>/m, '<br><p class="tn">\1</p>').gsub(/\n/, '<br>')
end
end