| #--###################################################################### |
| # 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 |
| |
| |