app/controllers/concepts/versions_controller.rb
# encoding: UTF-8
# Copyright 2011-2013 innoQ Deutschland GmbH
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
class Concepts::VersionsController < ApplicationController
include RdfSyncService::Helper
def merge
concept_scope = Iqvoc::Concept.base_class.by_origin(params[:origin])
current_concept = concept_scope.published.last
new_version = concept_scope.unpublished.last
unless new_version
raise ActiveRecord::RecordNotFound,
"Can't find draft concept with origin '#{params[:origin]}'"
end
authorize! :merge, new_version
ActiveRecord::Base.transaction do
new_version.rdf_updated_at = nil
new_version.publish
if new_version.publishable?
new_version.save
if current_concept && !current_concept.destroy
flash[:error] = t('txt.controllers.versioning.merged_delete_error')
redirect_to concept_path(published: 0, id: new_version)
end
if Iqvoc.config['triplestore.autosync']
synced = triplestore_syncer.sync([new_version]) # XXX: blocking
flash[:warning] = 'triplestore synchronization failed' unless synced # TODO: i18n
end
flash[:success] = t('txt.controllers.versioning.published')
redirect_to concept_path(id: new_version)
else
flash[:error] = t('txt.controllers.versioning.merged_publishing_error')
redirect_to concept_path(published: 0, id: new_version)
end
end
end
def branch
concept_scope = Iqvoc::Concept.base_class.by_origin(params[:origin])
current_concept = concept_scope.published.last!
if draft_concept = concept_scope.unpublished.last
flash[:info] = t('txt.controllers.versioning.branch_error')
redirect_to concept_path(published: 0, id: draft_concept)
else
authorize! :branch, current_concept
new_version = nil
ActiveRecord::Base.transaction do
new_version = current_concept.branch
new_version.save!
Iqvoc.change_note_class.create! do |note|
note.owner = new_version
note.language = I18n.locale.to_s
note.position = (current_concept.send(Iqvoc.change_note_class_name.to_relation_name).maximum(:position) || 0).succ
note.annotations_attributes = [
{ namespace: 'dct', predicate: 'creator', value: current_user.name },
{ namespace: 'dct', predicate: 'modified', value: DateTime.now.to_s }
]
end
end
flash[:success] = t('txt.controllers.versioning.branched')
redirect_to edit_concept_path(published: 0, id: new_version)
end
end
def consistency_check
concept = Iqvoc::Concept.base_class.
by_origin(params[:origin]).
unpublished.
last!
authorize! :check_consistency, concept
if concept.publishable?
flash[:success] = t('txt.controllers.versioning.consistency_check_success')
redirect_to concept_path(published: 0, id: concept)
else
flash[:error] = t('txt.controllers.versioning.consistency_check_error')
redirect_to concept_path(published: 0, id: concept, full_consistency_check: '1')
end
end
def to_review
concept = Iqvoc::Concept.base_class.
by_origin(params[:origin]).
unpublished.
last!
authorize! :send_to_review, concept
# Only send the concept to review if it is publishable (e.g. consistency check is OK)
if concept.publishable?
concept.to_review
concept.save!
flash[:success] = t('txt.controllers.versioning.to_review_success')
redirect_to concept_path(published: 0, id: concept)
else
flash[:error] = t('txt.controllers.versioning.consistency_check_error')
redirect_to concept_path(published: 0, id: concept, full_consistency_check: '1')
end
end
end