class AdminController < ApplicationController layout 'default' cache_sweeper :web_sweeper before_filter :dnsbl_check def create_system if @wiki.setup? flash[:error] = "Wiki has already been created in '#{@wiki.storage_path}'. " + "Shut down Instiki and delete this directory if you want to recreate it from scratch." + "\n\n" + "(WARNING: this will destroy content of your current wiki)." redirect_home(@wiki.webs.keys.first) elsif params['web_name'] # form submitted -> create a wiki @wiki.setup(params['password'], params['web_name'], params['web_address']) flash[:info] = "Your new wiki '#{params['web_name']}' is created!\n" + "Please edit its home page and press Submit when finished." redirect_to :web => params['web_address'], :controller => 'wiki', :action => 'new', :id => 'HomePage' else # no form submitted -> go to template end end def create_web if params['address'] return unless is_post # form submitted if @wiki.authenticate(params['system_password']) begin @wiki.create_web(params['name'], params['address']) flash[:info] = "New web '#{params['name']}' successfully created." redirect_to :web => params['address'], :controller => 'wiki', :action => 'new', :id => 'HomePage' rescue Instiki::ValidationError => e @error = e.message # and re-render the form again end else flash[:error] = "System Password incorrect. Try again." redirect_to :controller => 'admin', :action => 'create_web' end else # no form submitted -> render template end end def edit_web system_password = params['system_password'] if system_password return unless is_post # form submitted if wiki.authenticate(system_password) begin raise Instiki::ValidationError.new("Password for this Web didn't match") unless (params['password'].empty? or params['password'] == params['password_check']) wiki.edit_web( @web.address, params['address'], params['name'], params['markup'].intern, params['color'], params['additional_style'], params['safe_mode'] ? true : false, params['password'].empty? ? nil : params['password'], params['published'] ? true : false, params['brackets_only'] ? true : false, params['count_pages'] ? true : false, params['allow_uploads'] ? true : false, params['max_upload_size'] ) flash[:info] = "Web '#{params['address']}' was successfully updated" redirect_home(params['address']) rescue Instiki::ValidationError => e logger.warn e.message @error = e.message # and re-render the same template again end else @error = password_error(system_password) # and re-render the same template again end else # no form submitted - go to template end end def remove_orphaned_pages return unless is_post if wiki.authenticate(params['system_password_orphaned']) wiki.remove_orphaned_pages(@web_name) flash[:info] = 'Orphaned pages removed' redirect_to :controller => 'wiki', :web => @web_name, :action => 'list' else flash[:error] = password_error(params['system_password_orphaned']) redirect_to :controller => 'admin', :web => @web_name, :action => 'edit_web' end end def remove_orphaned_pages_in_category return unless is_post if wiki.authenticate(params['system_password_orphaned_in_category']) category = params['category'] wiki.remove_orphaned_pages_in_category(@web_name, category) flash[:info] = "Orphaned pages in category \"#{category}\" removed" redirect_to :controller => 'wiki', :web => @web_name, :action => 'list' else flash[:error] = password_error(params['system_password_orphaned_in_category']) redirect_to :controller => 'admin', :web => @web_name, :action => 'edit_web' end end def delete_web return unless is_post if wiki.authenticate(params['system_password_delete_web']) wiki.delete_web(@web_name) flash[:info] = "Web \"#{@web_name}\" has been deleted." redirect_to :controller => 'wiki', :action => 'web_list' else flash[:error] = password_error(params['system_password_delete_web']) redirect_to :controller => 'admin', :web => @web_name, :action => 'edit_web' end end def delete_files return unless is_post some_deleted = false if wiki.authenticate(params['system_password']) params.each do |file, p| if p == 'delete' WikiFile.find_by_file_name(file).destroy some_deleted = true end end flash[:info] = "File(s) successfully deleted." if some_deleted else flash[:error] = password_error(params['system_password']) end redirect_to :back end private def is_post unless (request.post? || ENV["RAILS_ENV"] == "test") headers['Allow'] = 'POST' render(:status => 405, :text => 'You must use an HTTP POST', :layout => 'error') return false end return true end end