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