##// END OF EJS Templates
Do not mass create API keys for existing users....
Do not mass create API keys for existing users. They will be created on the fly if needed, just like for new users. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3221 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r3053:f33231181f95
r3107:edab0f0cbb85
Show More
wiki_page.rb
193 lines | 6.3 KiB | text/x-ruby | RubyLexer
Jean-Philippe Lang
Ability to watch a wiki or a single wiki page (#413)....
r2666 # Redmine - project management software
# Copyright (C) 2006-2009 Jean-Philippe Lang
Jean-Philippe Lang
wiki branch merged into trunk...
r320 #
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Jean-Philippe Lang
Added wiki diff....
r580 require 'diff'
Jean-Philippe Lang
Added wiki annotate view. It's accessible for each version from the page history view. ...
r1007 require 'enumerator'
Jean-Philippe Lang
Added wiki diff....
r580
Jean-Philippe Lang
wiki branch merged into trunk...
r320 class WikiPage < ActiveRecord::Base
belongs_to :wiki
has_one :content, :class_name => 'WikiContent', :foreign_key => 'page_id', :dependent => :destroy
Jean-Philippe Lang
AttachmentsController now handles attachments deletion....
r2114 acts_as_attachable :delete_permission => :delete_wiki_pages_attachments
Jean-Philippe Lang
Ask user what to do with child pages when deleting a parent wiki page (#3202)....
r2584 acts_as_tree :dependent => :nullify, :order => 'title'
Jean-Philippe Lang
Ability to watch a wiki or a single wiki page (#413)....
r2666
acts_as_watchable
Jean-Philippe Lang
Search engines now supports pagination....
r755 acts_as_event :title => Proc.new {|o| "#{l(:label_wiki)}: #{o.title}"},
:description => :text,
:datetime => :created_on,
:url => Proc.new {|o| {:controller => 'wiki', :id => o.wiki.project_id, :page => o.title}}
acts_as_searchable :columns => ['title', 'text'],
Jean-Philippe Lang
Ability to search all projects or the projects the user belongs to (#791)....
r1420 :include => [{:wiki => :project}, :content],
Jean-Philippe Lang
Search engines now supports pagination....
r755 :project_key => "#{Wiki.table_name}.project_id"
Jean-Philippe Lang
Added the ability to rename wiki pages (specific permission required)....
r709 attr_accessor :redirect_existing_links
Jean-Philippe Lang
wiki branch merged into trunk...
r320 validates_presence_of :title
Jean-Philippe Lang
Fixed 10211 Wiki names can't have periods in them....
r460 validates_format_of :title, :with => /^[^,\.\/\?\;\|\s]*$/
Jean-Philippe Lang
wiki branch merged into trunk...
r320 validates_uniqueness_of :title, :scope => :wiki_id, :case_sensitive => false
validates_associated :content
Jean-Philippe Lang
Makes user unwatch what he can no longer view after its permissions have changed (#3589)....
r3053
def visible?(user=User.current)
!user.nil? && user.allowed_to?(:view_wiki_pages, project)
end
Jean-Philippe Lang
Added the ability to rename wiki pages (specific permission required)....
r709
def title=(value)
value = Wiki.titleize(value)
@previous_title = read_attribute(:title) if @previous_title.blank?
write_attribute(:title, value)
end
Jean-Philippe Lang
wiki branch merged into trunk...
r320 def before_save
Jean-Philippe Lang
Added the ability to rename wiki pages (specific permission required)....
r709 self.title = Wiki.titleize(title)
# Manage redirects if the title has changed
if !@previous_title.blank? && (@previous_title != title) && !new_record?
# Update redirects that point to the old title
wiki.redirects.find_all_by_redirects_to(@previous_title).each do |r|
r.redirects_to = title
r.title == r.redirects_to ? r.destroy : r.save
end
# Remove redirects for the new title
wiki.redirects.find_all_by_title(title).each(&:destroy)
# Create a redirect to the new title
wiki.redirects << WikiRedirect.new(:title => @previous_title, :redirects_to => title) unless redirect_existing_links == "0"
@previous_title = nil
end
end
def before_destroy
# Remove redirects to this page
wiki.redirects.find_all_by_redirects_to(title).each(&:destroy)
Jean-Philippe Lang
wiki branch merged into trunk...
r320 end
def pretty_title
Jean-Philippe Lang
patch #9429 Display Wiki edits in activity log (Nick Read)...
r367 WikiPage.pretty_title(title)
end
Jean-Philippe Lang
Added the ability to easily rollback to a previous version of a wiki page....
r421 def content_for_version(version=nil)
result = content.versions.find_by_version(version.to_i) if version
result ||= content
result
end
Jean-Philippe Lang
Added wiki diff....
r580 def diff(version_to=nil, version_from=nil)
version_to = version_to ? version_to.to_i : self.content.version
version_from = version_from ? version_from.to_i : version_to - 1
version_to, version_from = version_from, version_to unless version_from < version_to
content_to = content.versions.find_by_version(version_to)
content_from = content.versions.find_by_version(version_from)
(content_to && content_from) ? WikiDiff.new(content_to, content_from) : nil
end
Jean-Philippe Lang
Added wiki annotate view. It's accessible for each version from the page history view. ...
r1007 def annotate(version=nil)
version = version ? version.to_i : self.content.version
c = content.versions.find_by_version(version)
c ? WikiAnnotate.new(c) : nil
end
Jean-Philippe Lang
patch #9429 Display Wiki edits in activity log (Nick Read)...
r367 def self.pretty_title(str)
(str && str.is_a?(String)) ? str.tr('_', ' ') : str
Jean-Philippe Lang
wiki branch merged into trunk...
r320 end
Jean-Philippe Lang
Attachments can now be added to wiki pages (original patch by Pavol Murin). Only authorized users can add/delete attachments....
r538
def project
wiki.project
end
Jean-Philippe Lang
Search engines now supports pagination....
r755
def text
content.text if content
end
Jean-Philippe Lang
Wiki page protection (#851, patch #1146 by Mateo Murphy with slight changes)....
r1400
# Returns true if usr is allowed to edit the page, otherwise false
def editable_by?(usr)
!protected? || usr.allowed_to?(:protect_wiki_pages, wiki.project)
end
Jean-Philippe Lang
AttachmentsController now handles attachments deletion....
r2114
def attachments_deletable?(usr=User.current)
editable_by?(usr) && super(usr)
end
Jean-Philippe Lang
Wiki page hierarchy (#528). Parent page can be assigned on Rename screen....
r1689
def parent_title
@parent_title || (self.parent && self.parent.pretty_title)
end
def parent_title=(t)
@parent_title = t
parent_page = t.blank? ? nil : self.wiki.find_page(t)
self.parent = parent_page
end
protected
def validate
Jean-Philippe Lang
Merged Rails 2.2 branch. Redmine now requires Rails 2.2.2....
r2430 errors.add(:parent_title, :invalid) if !@parent_title.blank? && parent.nil?
errors.add(:parent_title, :circular_dependency) if parent && (parent == self || parent.ancestors.include?(self))
errors.add(:parent_title, :not_same_project) if parent && (parent.wiki_id != wiki_id)
Jean-Philippe Lang
Wiki page hierarchy (#528). Parent page can be assigned on Rename screen....
r1689 end
Jean-Philippe Lang
wiki branch merged into trunk...
r320 end
Jean-Philippe Lang
Added wiki diff....
r580
class WikiDiff
attr_reader :diff, :words, :content_to, :content_from
def initialize(content_to, content_from)
@content_to = content_to
@content_from = content_from
@words = content_to.text.split(/(\s+)/)
@words = @words.select {|word| word != ' '}
words_from = content_from.text.split(/(\s+)/)
words_from = words_from.select {|word| word != ' '}
@diff = words_from.diff @words
end
end
Jean-Philippe Lang
Added wiki annotate view. It's accessible for each version from the page history view. ...
r1007
class WikiAnnotate
attr_reader :lines, :content
def initialize(content)
@content = content
current = content
current_lines = current.text.split(/\r?\n/)
@lines = current_lines.collect {|t| [nil, nil, t]}
positions = []
current_lines.size.times {|i| positions << i}
while (current.previous)
d = current.previous.text.split(/\r?\n/).diff(current.text.split(/\r?\n/)).diffs.flatten
d.each_slice(3) do |s|
sign, line = s[0], s[1]
if sign == '+' && positions[line] && positions[line] != -1
if @lines[positions[line]][0].nil?
@lines[positions[line]][0] = current.version
@lines[positions[line]][1] = current.author
end
end
end
d.each_slice(3) do |s|
sign, line = s[0], s[1]
if sign == '-'
positions.insert(line, -1)
else
positions[line] = nil
end
end
positions.compact!
# Stop if every line is annotated
break unless @lines.detect { |line| line[0].nil? }
current = current.previous
end
@lines.each { |line| line[0] ||= current.version }
end
end