ontologies_controller.rb revision f25585170335aa8c73dc2775edb44979bbfb9116
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek#
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek# Controller for ontologies
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek#
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozekclass OntologiesController < InheritedResources::Base
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek include FilesHelper
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek belongs_to :repository, finder: :find_by_path!
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek respond_to :json, :xml
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek has_pagination
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek has_scope :search, :state
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek actions :index, :show, :edit, :update, :destroy
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek before_filter :check_write_permission, except: [:index, :show, :oops_state]
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek before_filter :check_read_permissions
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek def index
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek if in_repository?
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek @search_response = paginate_for(parent.ontologies)
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek @count = end_of_association_chain.total_count
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek render :index_repository
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek else
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek @search_response = paginate_for(Ontology.scoped)
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek @count = resource_class.count
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek render :index_global
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek end
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek end
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek def new
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek @ontology_version = build_resource.versions.build
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek @c_vertices = Category.first.roots.first.children rescue []
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose end
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose
60e54ce78177b72ae82b8986e37dc4d09fce5681Lukas Slebodnik def edit
60e54ce78177b72ae82b8986e37dc4d09fce5681Lukas Slebodnik @ontology = resource
60e54ce78177b72ae82b8986e37dc4d09fce5681Lukas Slebodnik @c_vertices = Category.first.roots.first.children rescue []
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose end
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek def update
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek resource.category_ids = user_selected_categories
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek params[:ontology].try(:except!, :iri)
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek super
51b5e1475b3e0b7acac34ed382cfaca8411883a4Jakub Hrozek end
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek def create
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek @version = build_resource.versions.first
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek @version.user = current_user
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek super
72ae534f5aef6d2e5d3f2f51299aede5abf9687eJakub Hrozek resource.category_ids = user_selected_categories
295c8e301e31f9bf27d921f80c14dfa5864b2383Lukas Slebodnik end
51b5e1475b3e0b7acac34ed382cfaca8411883a4Jakub Hrozek
51b5e1475b3e0b7acac34ed382cfaca8411883a4Jakub Hrozek def show
295c8e301e31f9bf27d921f80c14dfa5864b2383Lukas Slebodnik @content_object = :ontology
51b5e1475b3e0b7acac34ed382cfaca8411883a4Jakub Hrozek
30dd3f3e063dded0ec9f58bc2535a94727d8e96dJakub Hrozek if !params[:repository_id]
30dd3f3e063dded0ec9f58bc2535a94727d8e96dJakub Hrozek # redirect for legacy routing
30dd3f3e063dded0ec9f58bc2535a94727d8e96dJakub Hrozek ontology = Ontology.find params[:id]
295c8e301e31f9bf27d921f80c14dfa5864b2383Lukas Slebodnik redirect_to [ontology.repository, ontology]
30dd3f3e063dded0ec9f58bc2535a94727d8e96dJakub Hrozek return
30dd3f3e063dded0ec9f58bc2535a94727d8e96dJakub Hrozek end
30dd3f3e063dded0ec9f58bc2535a94727d8e96dJakub Hrozek
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose respond_to do |format|
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose format.html do
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose if !resource.distributed?
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose default_kind = resource.symbols.groups_by_kind.first.kind
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose redirect_to locid_for(resource, :symbols, kind: default_kind)
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose else
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose redirect_to locid_for(resource, :children)
51b5e1475b3e0b7acac34ed382cfaca8411883a4Jakub Hrozek end
51b5e1475b3e0b7acac34ed382cfaca8411883a4Jakub Hrozek end
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose format.json do
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose respond_with resource
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose end
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose format.text { send_download }
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose end
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose end
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose def destroy
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose if resource.is_imported?
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose flash[:error] = "Can't delete #{Settings.OMS.with_indefinite_article}
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose that is imported by another one."
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose redirect_to resource_chain
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose else
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose resource.destroy_with_parent(current_user)
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose destroy!
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose end
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose end
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose def retry_failed
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose scope = end_of_association_chain
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose
f1e3364a72eb75673d10cf8c97ba8f1d7a385405Petr Čech if id = params[:id]
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose # retry a specific ontology
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose scope = scope.where(id: id)
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose end
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose scope.retry_failed
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose redirect_to (id ? [parent, scope.first!, :ontology_versions] : [parent, :ontologies])
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose end
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose def oops_state
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose respond_to do |format|
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose format.json do
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose respond_with resource.current_version.try(:request)
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose end
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose end
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose end
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose protected
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose def check_read_permissions
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose unless params[:action] == 'index'
3d29430867cf92b2d71afa95abb679711231117cPavel Březina authorize!(:show, Repository.find_by_path(params[:repository_id]))
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose end
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose end
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose def build_resource
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose @ontology ||= begin
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose type = (params[:ontology] || {}).delete(:type)
3d29430867cf92b2d71afa95abb679711231117cPavel Březina clazz = type=='DistributedOntology' ? DistributedOntology : SingleOntology
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose @ontology = clazz.new params[:ontology]
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose @ontology.repository = parent
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose @ontology
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose end
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose end
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose def check_write_permission
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose authorize! :write, parent
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose end
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose def build_categories_tree(vertex)
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose @a ||= []
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose vertex.children.each { |child| build_categories_tree(child) unless child.children.empty?; @a << child }
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose @a
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose end
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose def user_selected_categories
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose params[:category_ids].keys unless params[:category_ids].nil?
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose end
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose helper_method :repository
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose def repository
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose parent
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose end
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose private
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose def send_download
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose asset = version || resource
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose render text: asset.file_in_repository.content,
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose content_type: Mime::Type.lookup('application/force-download')
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose end
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose def version
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose finder = OntologyVersionFinder.new(params[:reference], resource)
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose @version ||= finder.find if params[:reference]
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose end
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Boseend
63b8e826f62d2e8930c872de7d4cc8b5bc15d4a4Sumit Bose