To check out this repository please hg clone the following URL, or open the URL using EasyMercurial or your preferred Mercurial client.
root / app / models / wiki_content.rb @ 441:cbce1fd3b1b7
History | View | Annotate | Download (4.34 KB)
| 1 | 441:cbce1fd3b1b7 | Chris | # RedMine - project management software
|
|---|---|---|---|
| 2 | # Copyright (C) 2006-2011 Jean-Philippe Lang
|
||
| 3 | 0:513646585e45 | Chris | #
|
| 4 | # This program is free software; you can redistribute it and/or
|
||
| 5 | # modify it under the terms of the GNU General Public License
|
||
| 6 | # as published by the Free Software Foundation; either version 2
|
||
| 7 | # of the License, or (at your option) any later version.
|
||
| 8 | 441:cbce1fd3b1b7 | Chris | #
|
| 9 | 0:513646585e45 | Chris | # This program is distributed in the hope that it will be useful,
|
| 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
| 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
| 12 | # GNU General Public License for more details.
|
||
| 13 | 441:cbce1fd3b1b7 | Chris | #
|
| 14 | 0:513646585e45 | Chris | # You should have received a copy of the GNU General Public License
|
| 15 | # along with this program; if not, write to the Free Software
|
||
| 16 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||
| 17 | |||
| 18 | require 'zlib'
|
||
| 19 | |||
| 20 | class WikiContent < ActiveRecord::Base |
||
| 21 | set_locking_column :version
|
||
| 22 | belongs_to :page, :class_name => 'WikiPage', :foreign_key => 'page_id' |
||
| 23 | belongs_to :author, :class_name => 'User', :foreign_key => 'author_id' |
||
| 24 | validates_presence_of :text
|
||
| 25 | validates_length_of :comments, :maximum => 255, :allow_nil => true |
||
| 26 | 441:cbce1fd3b1b7 | Chris | |
| 27 | 0:513646585e45 | Chris | acts_as_versioned |
| 28 | 441:cbce1fd3b1b7 | Chris | |
| 29 | 0:513646585e45 | Chris | def visible?(user=User.current) |
| 30 | page.visible?(user) |
||
| 31 | end
|
||
| 32 | 441:cbce1fd3b1b7 | Chris | |
| 33 | 0:513646585e45 | Chris | def project |
| 34 | page.project |
||
| 35 | end
|
||
| 36 | 441:cbce1fd3b1b7 | Chris | |
| 37 | 0:513646585e45 | Chris | def attachments |
| 38 | page.nil? ? [] : page.attachments |
||
| 39 | end
|
||
| 40 | 441:cbce1fd3b1b7 | Chris | |
| 41 | 0:513646585e45 | Chris | # Returns the mail adresses of users that should be notified
|
| 42 | def recipients |
||
| 43 | notified = project.notified_users |
||
| 44 | notified.reject! {|user| !visible?(user)}
|
||
| 45 | notified.collect(&:mail)
|
||
| 46 | end
|
||
| 47 | 441:cbce1fd3b1b7 | Chris | |
| 48 | 0:513646585e45 | Chris | class Version |
| 49 | belongs_to :page, :class_name => '::WikiPage', :foreign_key => 'page_id' |
||
| 50 | belongs_to :author, :class_name => '::User', :foreign_key => 'author_id' |
||
| 51 | attr_protected :data
|
||
| 52 | |||
| 53 | acts_as_event :title => Proc.new {|o| "#{l(:label_wiki_edit)}: #{o.page.title} (##{o.version})"}, |
||
| 54 | :description => :comments, |
||
| 55 | :datetime => :updated_on, |
||
| 56 | :type => 'wiki-page', |
||
| 57 | 37:94944d00e43c | chris | :url => Proc.new {|o| {:controller => 'wiki', :action => 'show', :project_id => o.page.wiki.project, :id => o.page.title, :version => o.version}} |
| 58 | 0:513646585e45 | Chris | |
| 59 | acts_as_activity_provider :type => 'wiki_edits', |
||
| 60 | :timestamp => "#{WikiContent.versioned_table_name}.updated_on", |
||
| 61 | :author_key => "#{WikiContent.versioned_table_name}.author_id", |
||
| 62 | :permission => :view_wiki_edits, |
||
| 63 | :find_options => {:select => "#{WikiContent.versioned_table_name}.updated_on, #{WikiContent.versioned_table_name}.comments, " + |
||
| 64 | "#{WikiContent.versioned_table_name}.#{WikiContent.version_column}, #{WikiPage.table_name}.title, " +
|
||
| 65 | "#{WikiContent.versioned_table_name}.page_id, #{WikiContent.versioned_table_name}.author_id, " +
|
||
| 66 | "#{WikiContent.versioned_table_name}.id",
|
||
| 67 | :joins => "LEFT JOIN #{WikiPage.table_name} ON #{WikiPage.table_name}.id = #{WikiContent.versioned_table_name}.page_id " + |
||
| 68 | "LEFT JOIN #{Wiki.table_name} ON #{Wiki.table_name}.id = #{WikiPage.table_name}.wiki_id " +
|
||
| 69 | "LEFT JOIN #{Project.table_name} ON #{Project.table_name}.id = #{Wiki.table_name}.project_id"}
|
||
| 70 | |||
| 71 | def text=(plain) |
||
| 72 | case Setting.wiki_compression |
||
| 73 | when 'gzip' |
||
| 74 | begin
|
||
| 75 | self.data = Zlib::Deflate.deflate(plain, Zlib::BEST_COMPRESSION) |
||
| 76 | self.compression = 'gzip' |
||
| 77 | rescue
|
||
| 78 | self.data = plain
|
||
| 79 | self.compression = '' |
||
| 80 | end
|
||
| 81 | else
|
||
| 82 | self.data = plain
|
||
| 83 | self.compression = '' |
||
| 84 | end
|
||
| 85 | plain |
||
| 86 | end
|
||
| 87 | 441:cbce1fd3b1b7 | Chris | |
| 88 | 0:513646585e45 | Chris | def text |
| 89 | @text ||= case compression |
||
| 90 | when 'gzip' |
||
| 91 | Zlib::Inflate.inflate(data) |
||
| 92 | else
|
||
| 93 | # uncompressed data
|
||
| 94 | data |
||
| 95 | 441:cbce1fd3b1b7 | Chris | end
|
| 96 | 0:513646585e45 | Chris | end
|
| 97 | 441:cbce1fd3b1b7 | Chris | |
| 98 | 0:513646585e45 | Chris | def project |
| 99 | page.project |
||
| 100 | end
|
||
| 101 | 441:cbce1fd3b1b7 | Chris | |
| 102 | 0:513646585e45 | Chris | # Returns the previous version or nil
|
| 103 | def previous |
||
| 104 | 441:cbce1fd3b1b7 | Chris | @previous ||= WikiContent::Version.find(:first, |
| 105 | 0:513646585e45 | Chris | :order => 'version DESC', |
| 106 | :include => :author, |
||
| 107 | :conditions => ["wiki_content_id = ? AND version < ?", wiki_content_id, version]) |
||
| 108 | end
|
||
| 109 | end
|
||
| 110 | end |