blob: 3d28c75cdde54e1fceb502b15930ed68152bb884 [file] [log] [blame]
#--######################################################################
# Copyright (c) 2006 LogicaCMG
#
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
#
# Contributors:
#
# Onno van der Straaten:: initial implementation
#++######################################################################
# {Copyright (c) 2006 LogicaCMG}[link:files/COPYRIGHT.html]
class VersionsController < ApplicationController
before_filter :authenticate
before_filter :authenticate_admin, :only => [:toggle_done, :review]
FLASH_FILES_IDENTICAL = "The two selected files are identical"
def show
@version = Version.find(params[:id])
@baseversion = @version.baseversion
@latest_version = Version.find_latest_version(@version.site, @version.page)
@current_version = @version.current_version
@source_version = @version.source_version
@previous_version = @version.previous_version
end
# Action #list to display the version history (versions of a page in a particular site)
def list
@site = Site.find(params[:site_id])
@page = Page.find(params[:page_id])
@versions = @page.versions_in_site(@site)
@other_versions = Version.find(:all, :conditions => ['site_id<>? and page_id=?', @site.id, @page.id], :order=> 'site_id, version ASC')
end
def listall
@version_pages, @versions = paginate :version, :per_page => 10, :order => 'created_on DESC', :conditions => ['version <> ?', 0]
@heading = 'Versions'
end
def listtodo
@version_pages, @versions = paginate :version, :per_page => 10, :order => 'created_on DESC', :conditions => ['done <> ? and version <> ?', "Y", 0]
@heading = 'Versions To Do'
render :action => 'listall'
end
def listdone
@version_pages, @versions = paginate :version, :per_page => 10, :order => 'created_on DESC', :conditions => ['done=? and version <> ?', "Y", 0]
@heading = 'Versions Done'
render :action => 'listall'
end
def listcheckouts
@version_pages, @versions = paginate :version, :per_page => 10, :order => 'created_on DESC', :conditions => ['exists (select * from checkouts cot where cot.version_id = versions.id)']
@heading = "Checkouts"
render :action => 'listall'
end
# Action #edit to update the version note
def edit
@version = Version.find(params[:id])
if request.get?
else
@version = Version.find(params[:id])
# TODO R? move to authorization to model
if mine?(@version) || cadmin?
@version.note = params[:version][:note]
if @version.update_attributes(params[:version])
flash['notice'] = ::FLASH_RECORD_UPDATED
redirect_to :action => 'list', :site_id => @version.site_id, :page_id => @version.page_id
end
else
flash.now['error'] = ::FLASH_NOT_OWNER
end
end
end
# Action #review assigns current User as the reviewer
def review
@version = Version.find(params[:id])
if @version.reviewer.nil?
@version.reviewer = session['user']
else
if @version.reviewer == session['user']
@version.reviewer = nil
else
@version.reviewer = session['user'] if cadmin?
end
end
@version.save!
render :inline => "<%= link_to_reviewer(@version) %>"
end
def markdown
@version = Version.find(params[:id])
end
def toggle_done
@version = Version.find(params[:id])
if @version.done == 'N'
@version.done = 'Y'
@version.user_thatmarkeddone = session['user']
else
@version.done = 'N'
@version.user_thatmarkedtodo = session['user']
end
@version.save!
render :inline => '<%= link_to_done_toggle(@version) %>'
end
# Action #compare is used to analyse the differences of the files of two Version-records.
# TODO ? check if markdown files are equal. Versio-record files can be different when markdown versions are not (although not likely)
# TODO ? check if version different from other_version
# TODO R1 html2text.py replacement, see xhtmldiff? [http://theinternetco.net/projects/ruby/xhtmldiff] instead of the Python script
# TODO R1 refactor to model
def compare
@version = Version.find(params[:id])
@versions = @version.page.versions_in_site(@version.site)
if request.get?
@source_version = @version.previous_version
else
@source_version = Version.find(params[:source_version_id])
if File.compare(@source_version.path, @version.path)
flash['notice'] = FLASH_FILES_IDENTICAL
else
@compare_results = diff(@version, @source_version) if params[:tab] == 'html'
@compare_results = diff_markdown(@version, @source_version) if !params[:tab]
end
end
end
end