blob: 05362d3be3da9dca6eefe0527fb91d80943f4ec1 [file] [log] [blame]
#--######################################################################
# Copyright (c) 2006 Logica
#
# 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 Logica}[link:files/COPYRIGHT.html]
class SitesController < ApplicationController
layout 'management'
before_filter :authenticate
before_filter :authenticate_admin, :only => [:csv, :new, :compare, :new_wiki, :create, :update, :upload, :edit, :update_now, :obsolete, :update_cancel]
before_filter :authenticate_cadmin, :only => [:scan4content]
cache_sweeper :sweeper, :only => [:update, :update_cancel, :update_now, :new, :new_wiki]
verify :method => :post, :only => [:update, :update_cancel, :update_now, :obsolete, :csv],:add_flash => {'error' => ::FLASH_USE_POST_NOT_GET}, :redirect_to => { :controller => 'other', :action => 'error' }
FLASH_WIKI_SITE_CREATED = 'An empty Wiki site has been created. Now you can schedule a job to update the Wiki with a Baseline Process'
FLASH_WIKI_UPDATE_SUCCESS = 'Wiki succesfully updated'
#--
# TOOD Invalid argument in console
# In the console when running built-in server the message ERROR Errno::EINVAL: Invalid argument is displayed
#++
def index
list
render :action => 'list'
end
def list
@baseline_processes = BaselineProcess.find(:all)
@wikis = Wiki.find(:all)
end
# Action #new creates a BaselineProcess. A BaselineProcess is created from content in a server folder
# (that you uploaded with FTP or a folder share or something) or from a zip file submitted with the form
def new
@baseline_processes = BaselineProcess.find(:all, :conditions => ['obsolete_on is null'])
@folders = BaselineProcess.unused_folders
if request.get?
@site = Site.new
flash['notice'] = "<p>Although you can upload zip files with EPFC published sites here, it is recommended to upload content using some other means (FTP, SCP). You need to upload to the location #{ENV['EPFWIKI_ROOT_DIR']}#{ENV['EPFWIKI_PUBLIC_FOLDER']}/#{ENV['EPFWIKI_SITES_FOLDER']}. Server folder created there can be used to create a new Baseline Process.</p>"
flash['notice'] += "<p>It is also recommended to use version info or baseline info in your zip file names. The name is used to derive other attributes (server folder and title). Example: oup_20060721.zip</p>"
else
logger.info("Creating a new Baseline Process with params #{params.inspect}")
if params[:site][:file].nil?
logger.info("Creating a new Baseline Process from server folder")
@site = BaselineProcess.new(params[:site].merge(:user => session['user']))
else
logger.info("Creating a new Baseline Process using zip")
@site = BaselineProcess.new_from_upload(params[:site].merge(:user => session['user']))
end
if @site.errors.empty? && @site.save
flash['success'] = ::FLASH_RECORD_CREATED
redirect_to :action => 'list'
end
end
end
# Action #new_wiki creates a new Wiki. The typical next step is to schedule an #update to add content to this empty Wiki
def new_wiki
if request.get?
@wiki = Wiki.new
else
@wiki = Wiki.new(params[:wiki].merge(:user => session['user']))
if @wiki.save
flash['success'] = FLASH_WIKI_SITE_CREATED
redirect_to :action => 'description', :id => @wiki.id
end
end
end
# Action #update schedules an update. The actual update is typically performed
# with a job ('job_daily') but could also be forced by #update_now
def update
site = Site.find(params[:id])
bp = BaselineProcess.find(params[:baseline_process_id])
u = Update.new(:user => session['user'], :wiki => site, :baseline_process => bp)
u.save!
flash['success'] = "Update of #{site.title} to #{u.baseline_process.title} scheduled"
redirect_to :action => 'description', :id => site.id
end
# Action #update_cancel to cancel an scheduled updated
def update_cancel
site = Site.find(params[:id])
u = Update.find(params[:update_id])
u.destroy
flash['success'] = "Cancelled update of #{site.title} to #{u.baseline_process.title}"
redirect_to :action => 'description', :id => site.id
end
# action #update_now allows the administrator to do the update immediately, see also #update_wiki
def update_now
u = Update.find(params[:update_id])
u.do_update
flash['success'] = FLASH_WIKI_UPDATE_SUCCESS
redirect_to :action => 'description', :id => u.wiki.id
end
def description
@site = Site.find(params[:id])
end
def versions
@site = Site.find(params[:id])
logger.debug("params.inspect: #{params.inspect}")
@filter = UserVersion.new(params[:filter]) # done is default 'N'
@filter.type_filter = 'UserVersion' if @filter.type_filter.blank?
logger.debug("@filter: #{@filter.inspect}")
case @filter.done + @filter.type_filter
when 'NAll': cond = ['wiki_id = ? and done = ?', @site.id, 'N',] # default
when 'AllUserVersion': cond = ['wiki_id = ? and type = ?', @site.id, 'UserVersion' ] # all userversions
when 'AllAll': cond = ['wiki_id = ?', @site.id] # all versions
when 'NUserVersion': cond = ['wiki_id = ? and done = ? and type = ?', @site.id, 'N', 'UserVersion' ] # all todo userversions
end
logger.debug("cond: #{cond.inspect}")
@version_pages, @versions = paginate :version, :per_page => 25, :order => 'created_on DESC', :conditions => cond
render :action => 'description'
end
def pages
@site = Site.find(params[:id])
@page_pages, @pages = paginate :page, :per_page => 25, :order => 'created_on DESC', :conditions => ['site_id=?', @site.id]
render :action => 'description'
end
def comments
@site = Site.find(params[:id])
#logger.debug("params.inspect: #{params.inspect}")
@filter = Comment.new(params[:filter]) # done is default 'N'
cond = ['site_id = ?', @site.id ]
cond = ['site_id = ? and done = ?', @site.id, 'N' ] if @filter.done == 'N'
@comment_pages, @comments = paginate :comment, :per_page => 25, :order => 'created_on DESC', :conditions => cond
render :action => 'description'
end
def uploads
@site = Site.find(params[:id])
@upload_pages, @uploads = paginate :uploads, :order => 'created_on DESC', :per_page => 25
render :action => 'description'
end
def feedback
@site = Site.find(params[:id])
@feedback_pages, @feedbacks = paginate :feedbacks, :order => 'created_on DESC', :per_page => 25
render :action => 'description'
end
def edit
@site = Site.find(params[:id])
if request.get?
flash.now['warning'] = 'Updating the folder here won\'t update the file system. If you want to change the folder you will have to rename the folder manually on the filesystem'
else
@site = Site.find(params[:id])
if @site.update_attributes(params[:site])
flash['success'] = 'Site was successfully updated.'
redirect_to :action => 'description', :id => @site
else
render :action => 'edit'
end
end
end
def obsolete
site = Site.find(params[:id])
site.obsolete_by = session['user']
if site.obsolete_on.nil?
site.obsolete_on = Time.now
flash.now['success'] = "#{site.title} succesfully made obsolete"
else
site.obsolete_on = nil
flash.now['success'] = "#{site.title} is no longer obsolete"
end
site.save!
list
render :action => 'list'
end
def csv
site = Site.find(params[:id])
content_type = if request.user_agent =~ /windows/i
'application/vnd.ms-excel'
else
'text/csv'
end
site.export_csv if !File.exists?(site.path + '.csv')
send_data(IO.readlines(site.path + '.csv').join, :type => content_type, :filename => site.folder + '.csv')
end
end