Added version control for wiki pages.

This commit is contained in:
Benjamin Meichsner 2009-05-15 17:32:45 +02:00
parent 7ba6bc3680
commit 053c665270
36 changed files with 1647 additions and 15 deletions

View file

@ -37,7 +37,7 @@ class PagesController < ApplicationController
# POST /pages
# POST /pages.xml
def create
@page = Page.new(params[:page])
@page = current_user.pages.build(params[:page])
respond_to do |format|
if @page.save
@ -56,7 +56,7 @@ class PagesController < ApplicationController
def update
@page = Page.find(params[:id])
if @page.update_attributes(params[:page])
if @page.update_attributes(params[:page].merge({:user => current_user}))
flash[:notice] = 'Seite wurde aktualisiert.'
redirect_to wiki_page_path(@page.permalink)
else
@ -83,4 +83,16 @@ class PagesController < ApplicationController
def all
@pages = Page.all :order => 'created_at'
end
def version
@page = Page.find(params[:id])
@version = @page.versions[params[:version].to_i - 1]
end
def revert
@page = Page.find(params[:id])
@page.revert_to(params[:version].to_i)
render :action => 'edit'
end
end

View file

@ -1,5 +1,10 @@
class Page < ActiveRecord::Base
belongs_to :user, :foreign_key => 'updated_by'
acts_as_versioned
self.non_versioned_columns += ['permalink', 'created_at']
validates_presence_of :title, :body
validates_uniqueness_of :permalink

View file

@ -29,6 +29,7 @@ class User < ActiveRecord::Base
has_many :assignments, :dependent => :destroy
has_many :tasks, :through => :assignments
has_many :send_messages, :class_name => "Message", :foreign_key => "sender_id"
has_many :pages, :foreign_key => 'updated_by'
attr_accessor :password, :setting_attributes

View file

@ -1,7 +1,22 @@
- title @page.title
#page-versions{:style => "float:right;margin-top:-2%;text-align:right;"}
= link_to "Bearbeiten", edit_page_path(@page)
= link_to_function "Versionen (#{@page.versions.count})", "Element.toggle('versions')"
#versions{:style => "display:none"}
%ul
- for version in @page.versions.reverse
%li
= link_to format_datetime(version.updated_at), version_page_path(@page, :version => version.version)
= "(#{User.find(version.updated_by).nick})"
= wikified_body @page.body
%hr/
%hr.clear/
%p
= link_to "Seite bearbeiten", edit_page_path(@page)
= link_to "Seite bearbeiten", edit_page_path(@page)
|
= link_to "Seite löschen", @page, :method => :delete, :confirm => "Achtung, möchtest Du wirklich die Wikiseite löschen?"
|
= "Zuletzt bearbeitet: #{format_datetime @page.updated_at} (#{@page.user.nick})"

View file

@ -0,0 +1,11 @@
- title @version.title
#page-versions{:style => "float:right"}
%b= "Version vom #{format_datetime @version.updated_at}"
%ul
%li= "Autor: #{User.find(@version.updated_by).nick}"
%li= link_to "Aktuelle Version sehen", wiki_page_path(:permalink => @page.permalink)
%li= link_to "Auf diese Version zurücksetzen", revert_page_path(@page, :version => @version.version)
= wikified_body @version.body