orbit-basic/app/controllers/admin/links_controller.rb

94 lines
2.1 KiB
Ruby

class Admin::LinksController < Admin::ItemsController
def show
@item ||= Link.find(params[:id])
end
def new
@item = Link.new
@item.parent = Page.find(params[:parent_id]) rescue nil
render layout: false
end
def edit
@item = Link.find(params[:id])
render layout: false
end
def create
@item = Link.new(params[:link])
if @item.save(params[:link])
success = true
else
success = check_valid_url
end
if success
flash.now[:notice] = t('create.success.link')
respond_to do |format|
format.js { render 'admin/items/reload_items' }
end
else
flash.now[:error] = t('create.error.link')
render :action => "new"
end
end
def update
@item = Link.find(params[:id])
if @item.update_attributes(params[:link])
success = true
else
success = check_valid_url
end
if success
flash.now[:notice] = t('update.success.link')
respond_to do |format|
format.js { render 'admin/items/reload_items' }
end
else
flash.now[:error] = t('update.error.link')
render :action => "edit"
end
end
protected
def check_valid_url
if @item.errors.include?(:url) && !@item.errors.added?(:url, :blank) && @item.errors.added?(:url, :invalid)
begin
url = @item.url
url.gsub!('http://', '').slice!(/^\//)
path = Rails.application.routes.recognize_path(url)
if path.has_key?(:page_name)
if Page.where(path: path[:page_name]).first
new_url = "#{request.base_url}/#{url}"
else
success = false
end
else
new_url = "#{request.base_url}/#{url}"
end
if @item.errors.count == 1
@item.url = new_url
if @item.save
success = true
else
success = false
end
else
@item.url = new_url
success = false
end unless success == false
rescue
success = false
end
else
success = false
end
success
end
end