Create a redirect when editing the title of a page.

This commit is contained in:
Benjamin Meichsner 2009-06-11 23:51:26 +02:00
parent 434fc4b2ff
commit 55729e20f9
6 changed files with 36 additions and 10 deletions

View file

@ -18,20 +18,43 @@ class Page < ActiveRecord::Base
belongs_to :user, :foreign_key => 'updated_by'
acts_as_versioned :version_column => :lock_version
self.non_versioned_columns += ['permalink', 'created_at']
self.non_versioned_columns += ['permalink', 'created_at', 'title']
attr_accessor :old_title # Save title to create redirect page when editing title
validates_presence_of :title, :body
validates_uniqueness_of :permalink
validates_uniqueness_of :permalink, :title
before_validation_on_create :set_permalink
before_validation_on_update :update_permalink
after_update :create_redirect
def self.permalink(title)
Wikitext::Parser.new.parse "[[#{title}]]"
title.gsub(" ", "_")
end
def set_permalink
unless self.permalink.blank?
unless title.blank?
self.permalink = Page.count == 0 ? "Home" : Page.permalink(title)
end
end
protected
def update_permalink
if changed.include?("title")
set_permalink
self.old_title = changes["title"].first # Save title for creating redirect
end
end
def create_redirect
unless old_title.blank?
Page.create :redirect => id,
:title => old_title,
:body => "Weiterleitung auf [[#{title}]]..",
:permalink => Page.permalink(old_title),
:updated_by => updated_by
end
end
end