From 55729e20f9f8b89688c7023a8e0e519df88f8859 Mon Sep 17 00:00:00 2001 From: Benjamin Meichsner Date: Thu, 11 Jun 2009 23:51:26 +0200 Subject: [PATCH] Create a redirect when editing the title of a page. --- app/controllers/pages_controller.rb | 7 +++-- app/helpers/pages_helper.rb | 1 - app/models/page.rb | 31 ++++++++++++++++++++--- app/views/pages/version.html.haml | 2 +- config/routes.rb | 4 +-- db/migrate/20090325175756_create_pages.rb | 1 + 6 files changed, 36 insertions(+), 10 deletions(-) diff --git a/app/controllers/pages_controller.rb b/app/controllers/pages_controller.rb index 5c5d8c2d..ff911232 100644 --- a/app/controllers/pages_controller.rb +++ b/app/controllers/pages_controller.rb @@ -1,7 +1,7 @@ class PagesController < ApplicationController def index - @page = Page.find_by_permalink "home" + @page = Page.find_by_permalink "Home" if @page render :action => 'show' @@ -15,6 +15,9 @@ class PagesController < ApplicationController if @page.nil? redirect_to new_page_path(:title => params[:permalink]) + elsif @page.redirect? + flash[:notice] = "Weitergeleitet von #{@page.title} ..." + redirect_to wiki_page_path(Page.find(@page.redirect).permalink) end end @@ -79,7 +82,7 @@ class PagesController < ApplicationController end def all - @pages = Page.all :order => 'created_at' + @pages = Page.all :order => 'created_at', :conditions => {:redirect => nil} end def version diff --git a/app/helpers/pages_helper.rb b/app/helpers/pages_helper.rb index 5c9f594a..5d4d96e4 100644 --- a/app/helpers/pages_helper.rb +++ b/app/helpers/pages_helper.rb @@ -38,7 +38,6 @@ module PagesHelper toc << "#" * number + " #{name}\n" end - logger.debug("TOC: #{toc}") toc = Wikitext::Parser.new.parse toc toc.gsub(/
  • ([^<>\n]*)/) do diff --git a/app/models/page.rb b/app/models/page.rb index 8250a0db..61595ecd 100644 --- a/app/models/page.rb +++ b/app/models/page.rb @@ -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 diff --git a/app/views/pages/version.html.haml b/app/views/pages/version.html.haml index 3e6ab40a..ab6e1d23 100644 --- a/app/views/pages/version.html.haml +++ b/app/views/pages/version.html.haml @@ -1,4 +1,4 @@ -- title @version.title +- title @page.title #page-versions{:style => "float:right"} %b= "Version vom #{format_datetime @version.updated_at}" diff --git a/config/routes.rb b/config/routes.rb index 905692cb..0eecbce0 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,7 +1,7 @@ ActionController::Routing::Routes.draw do |map| map.resources :pages, :collection => { :all => :get }, :member => {:version => :get, :revert => :get} - map.wiki_page "/wiki/:permalink", :controller => 'pages', :action => 'show', :permalink => /[\w\._\-\%\d]+/ - map.wiki "/wiki", :controller => 'pages', :action => 'show', :permalink => 'home' + map.wiki_page "/wiki/:permalink", :controller => 'pages', :action => 'show', :permalink => /[^\s]+/ + map.wiki "/wiki", :controller => 'pages', :action => 'show', :permalink => 'Home' map.logout '/logout', :controller => 'login', :action => 'logout' map.my_profile '/home/profile', :controller => 'home', :action => 'profile' diff --git a/db/migrate/20090325175756_create_pages.rb b/db/migrate/20090325175756_create_pages.rb index 316a418d..6141e285 100644 --- a/db/migrate/20090325175756_create_pages.rb +++ b/db/migrate/20090325175756_create_pages.rb @@ -6,6 +6,7 @@ class CreatePages < ActiveRecord::Migration t.string :permalink t.integer :lock_version, :default => 0 t.integer :updated_by + t.integer :redirect t.timestamps end