ontologies_controller.rb revision 1365c7c52c67284d3c305ed7cbc2f22a20de7acf
be2e4e54da3c8054525321422f7f290d45b32a6cStéphane Graber#
be2e4e54da3c8054525321422f7f290d45b32a6cStéphane Graber# Controller for ontologies
be2e4e54da3c8054525321422f7f290d45b32a6cStéphane Graber#
be2e4e54da3c8054525321422f7f290d45b32a6cStéphane Graberclass OntologiesController < InheritedResources::Base
be2e4e54da3c8054525321422f7f290d45b32a6cStéphane Graber
be2e4e54da3c8054525321422f7f290d45b32a6cStéphane Graber include FilesHelper
be2e4e54da3c8054525321422f7f290d45b32a6cStéphane Graber
be2e4e54da3c8054525321422f7f290d45b32a6cStéphane Graber belongs_to :repository, finder: :find_by_path!
be2e4e54da3c8054525321422f7f290d45b32a6cStéphane Graber has_pagination
d79067a726f1b4a06828220cc11dd3cfbc244856Daniel Miranda has_scope :search, :state
be2e4e54da3c8054525321422f7f290d45b32a6cStéphane Graber
be2e4e54da3c8054525321422f7f290d45b32a6cStéphane Graber actions :index, :show, :edit, :update, :destroy
d4f6fa926d92803d8b8217468be483ac2f7e270eStéphane Graber
d4f6fa926d92803d8b8217468be483ac2f7e270eStéphane Graber respond_to :html, except: %i(show)
d4f6fa926d92803d8b8217468be483ac2f7e270eStéphane Graber
d4f6fa926d92803d8b8217468be483ac2f7e270eStéphane Graber def index
d4f6fa926d92803d8b8217468be483ac2f7e270eStéphane Graber if in_repository?
be2e4e54da3c8054525321422f7f290d45b32a6cStéphane Graber @search_response = paginate_for(parent.ontologies)
9a42db48e0bcf4f34b05a3de1cda23e06f51d131Stéphane Graber @count = end_of_association_chain.total_count
be2e4e54da3c8054525321422f7f290d45b32a6cStéphane Graber @repository_id = parent.id
be2e4e54da3c8054525321422f7f290d45b32a6cStéphane Graber render :index_repository
be2e4e54da3c8054525321422f7f290d45b32a6cStéphane Graber else
c13c0e08da7dbfecb52e85233ac6cd17afa5d818Stéphane Graber @search_response = paginate_for(Ontology.scoped)
c13c0e08da7dbfecb52e85233ac6cd17afa5d818Stéphane Graber @count = resource_class.count
c13c0e08da7dbfecb52e85233ac6cd17afa5d818Stéphane Graber render :index_global
f10e04e36170dbd0faae3a667d53f0af1ef6a13aStéphane Graber end
f10e04e36170dbd0faae3a667d53f0af1ef6a13aStéphane Graber end
f10e04e36170dbd0faae3a667d53f0af1ef6a13aStéphane Graber
def new
@ontology_version = build_resource.versions.build
@c_vertices = Category.first.roots.first.children rescue []
end
def edit
@ontology = resource
@c_vertices = Category.first.roots.first.children rescue []
end
def update
resource.category_ids = user_selected_categories
params[:ontology].try(:except!, :iri)
super
end
def create
@version = build_resource.versions.first
@version.user = current_user
super
resource.category_ids = user_selected_categories
end
def show
@content_object = :ontology
if !params[:repository_id]
# redirect for legacy routing
ontology = Ontology.find params[:id]
redirect_to [ontology.repository, ontology, params_to_pass_on_redirect]
return
end
respond_to do |format|
format.html do
if !resource.distributed?
default_kind = resource.symbols.groups_by_kind.first.kind
redirect_to locid_for(resource, :symbols,
params_to_pass_on_redirect.merge(kind: default_kind))
else
redirect_to locid_for(resource, :children, params_to_pass_on_redirect)
end
end
end
end
def destroy
if resource.is_imported?
flash[:error] = "Can't delete #{Settings.OMS.with_indefinite_article}
that is imported by another one."
redirect_to resource_chain
else
resource.destroy_with_parent(current_user)
destroy!
end
end
def retry_failed
scope = end_of_association_chain
if id = params[:id]
# retry a specific ontology
scope = scope.where(id: id)
end
scope.retry_failed
redirect_to (id ? [parent, scope.first!, :ontology_versions] : [parent, :ontologies])
end
def oops_state
respond_to do |format|
format.json do
respond_with resource.current_version.try(:request)
end
end
end
protected
def check_read_permissions
unless params[:action] == 'index'
authorize!(:show, Repository.find_by_path(params[:repository_id]))
end
end
def build_resource
@ontology ||= begin
type = (params[:ontology] || {}).delete(:type)
clazz = type=='DistributedOntology' ? DistributedOntology : SingleOntology
@ontology = clazz.new params[:ontology]
@ontology.repository = parent
@ontology
end
end
def check_write_permission
authorize! :write, parent
end
def build_categories_tree(vertex)
@a ||= []
vertex.children.each { |child| build_categories_tree(child) unless child.children.empty?; @a << child }
@a
end
def user_selected_categories
params[:category_ids].keys unless params[:category_ids].nil?
end
helper_method :repository
def repository
parent
end
end