Project

General

Profile

Download (5.45 KB) Statistics
| Branch: | Tag: | Revision:
module Foreman::Controller::TaxonomiesController
extend ActiveSupport::Concern

included do
before_filter :find_taxonomy, :only => %w{edit update destroy clone_taxonomy assign_hosts
assign_selected_hosts assign_all_hosts step2 select}
before_filter :count_nil_hosts, :only => %w{index create step2}
skip_before_filter :authorize, :set_taxonomy, :only => %w{select clear}
end

def index
begin
values = taxonomy_class.send("my_#{taxonomies_plural}").search_for(params[:search], :order => params[:order])
rescue => e
error e.to_s
values = taxonomy_class.send("my_#{taxonomies_plural}")
end

respond_to do |format|
format.html do
@taxonomies = values.paginate(:page => params[:page])
@counter = Host.group(taxonomy_id).where(taxonomy_id => values).count
render 'taxonomies/index'
end
format.json
end
end

def new
@taxonomy = taxonomy_class.new
Taxonomy.no_taxonomy_scope do
# we explicitly render here in order to evaluate the view without taxonomy scope
render 'taxonomies/new'
end
end

def nest
@taxonomy = taxonomy_class.new
@taxonomy.parent_id = params[:id].to_i
render 'taxonomies/new'
end

# cannot name this method "clone" since Object has a clone method and the mixin doesn't overwrite it
def clone_taxonomy
@old_name = @taxonomy.name
@taxonomy = @taxonomy.dup
render 'taxonomies/clone'
end

def create
@taxonomy = taxonomy_class.new(params[taxonomy_single.to_sym])
if @taxonomy.save
if @count_nil_hosts > 0
redirect_to send("step2_#{taxonomy_single}_path",@taxonomy)
else
process_success(:object => @taxonomy)
end
else
process_error(:render => "taxonomies/new", :object => @taxonomy)
end
end

def edit
Taxonomy.no_taxonomy_scope do
# we explicitly render here in order to evaluate the view without taxonomy scope
render 'taxonomies/edit'
end
end

def step2
Taxonomy.no_taxonomy_scope do
render 'taxonomies/step2'
end
end

def update
result = Taxonomy.no_taxonomy_scope do
@taxonomy.update_attributes(params[taxonomy_single])
end
if result
process_success(:object => @taxonomy)
else
process_error(:render => "taxonomies/edit", :object => @taxonomy)
end
end

def destroy
if @taxonomy.destroy
clear_current_taxonomy_from_session if session[taxonomy_id] == @taxonomy.id
process_success
else
process_error
end
rescue Ancestry::AncestryException
flash[:error] = _('Cannot delete %{current} because it has nested %{sti_name}.') % { :current => @taxonomy.title, :sti_name => @taxonomy.sti_name }
process_error
end

def select
taxonomy_class.current = @taxonomy
session[taxonomy_id] = @taxonomy ? @taxonomy.id : nil

TopbarSweeper.expire_cache(self)
redirect_back_or_to root_url
end

def clear
clear_current_taxonomy_from_session
redirect_back_or_to root_url
end

def clear_current_taxonomy_from_session
taxonomy_class.current = nil
session[taxonomy_id] = nil
TopbarSweeper.expire_cache(self)
end

def mismatches
Taxonomy.no_taxonomy_scope do
@mismatches = Taxonomy.all_mismatcheds
end
render 'taxonomies/mismatches'
end

def import_mismatches
@taxonomy = Taxonomy.find_by_id(params[:id])
if @taxonomy
@mismatches = @taxonomy.import_missing_ids
redirect_to send("edit_#{taxonomy_single}_path", @taxonomy), :notice => _("All mismatches between hosts and %s have been fixed") % @taxonomy.name
else
Taxonomy.all_import_missing_ids
redirect_to send("#{taxonomies_plural}_path"), :notice => _("All mismatches between hosts and locations/organizations have been fixed")
end
end

def assign_hosts
@taxonomy_type = taxonomy_single.classify
@hosts = Host.authorized(:view_hosts, Host).send("no_#{taxonomy_single}").includes(included_associations).search_for(params[:search],:order => params[:order]).paginate(:page => params[:page])
render "hosts/assign_hosts"
end

def assign_all_hosts
Host.send("no_#{taxonomy_single}").update_all(taxonomy_id => @taxonomy.id)
@taxonomy.import_missing_ids
redirect_to send("#{taxonomies_plural}_path"), :notice => _("All hosts previously with no %{single} are now assigned to %{name}") % { :single => taxonomy_single, :name => @taxonomy.name }
end

def assign_selected_hosts
host_ids = params[taxonomy_single.to_sym][:host_ids] - ["0"]
@hosts = Host.where(:id => host_ids).update_all(taxonomy_id => @taxonomy.id)
@taxonomy.import_missing_ids
redirect_to send("#{taxonomies_plural}_path"), :notice => _("Selected hosts are now assigned to %s") % @taxonomy.name
end

private

def taxonomy_id
case controller_name
when 'organizations'
:organization_id
when 'locations'
:location_id
end
end

def taxonomy_single
controller_name.singularize
end

def taxonomies_plural
controller_name
end

def taxonomy_class
controller_name.classify.constantize
end

def find_taxonomy
case controller_name
when 'organizations'
@taxonomy = @organization = Organization.find(params[:id])
when 'locations'
@taxonomy = @location = Location.find(params[:id])
end
end

def count_nil_hosts
return @count_nil_hosts if @count_nil_hosts
@count_nil_hosts = Host.where(taxonomy_id => nil).count
end

end
(6-6/8)