429 lines
9.4 KiB
Ruby
429 lines
9.4 KiB
Ruby
# -*- encoding : utf-8 -*-
|
|
class Admin::MenuItemsController < ApplicationController
|
|
before_action :auth_admin
|
|
|
|
before_action :admin_space
|
|
|
|
def admin_space
|
|
@admin_space = "ventes"
|
|
end
|
|
|
|
layout "admin"
|
|
|
|
def lien_anglais
|
|
@text_contents = TextContent.where( "content LIKE ?", "%/en/%")
|
|
end
|
|
|
|
def anglais
|
|
|
|
@lang = LangSite.find(2)
|
|
@menu = Menu.find(1)
|
|
@menu_items = @menu.menu_items.unarchived.where(:parent_id => params[:parent_id]).order("position ASC")
|
|
|
|
end
|
|
|
|
|
|
def find_menu_items
|
|
|
|
|
|
params[:parent_id] = nil if !params[:parent_id] or params[:parent_id] == ""
|
|
|
|
@menu_parent = MenuItem.find(params[:parent_id]) if params[:parent_id]
|
|
|
|
|
|
@menu_items = @menu.menu_items.where(:parent_id => params[:parent_id]).order("position ASC")
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
def reorder
|
|
|
|
i = 1
|
|
|
|
|
|
params[:menu_items_ids].each do |id|
|
|
|
|
|
|
menu_item = MenuItem.find(id)
|
|
menu_item.position = i
|
|
|
|
menu_item.skip_index = true
|
|
menu_item.save
|
|
|
|
i = i + 1
|
|
|
|
|
|
end
|
|
|
|
if params[:menu_id] and params[:menu_id] != "" and @menu = Menu.find(params[:menu_id])
|
|
|
|
find_menu_items
|
|
end
|
|
|
|
flash[:success] = "Menus réorganisés avec succès."
|
|
|
|
|
|
|
|
end
|
|
|
|
def index
|
|
|
|
params[:lang] = params[:lang] || "fr"
|
|
|
|
@lang = LangSite.find_by_slug(params[:lang])
|
|
|
|
@title = "Eléments de menu"
|
|
|
|
if params[:menu_id] and params[:menu_id] != "" and @menu = Menu.find(params[:menu_id])
|
|
|
|
find_menu_items
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
else
|
|
redirect_to admin_root_path, :alert => "Un menu doit être séléctionné."
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
def new
|
|
|
|
|
|
|
|
@menu_item = MenuItem.new(:menu_id => params[:menu_id],:parent_id => params[:parent_id], :visible => true, :title_image => true)
|
|
|
|
params[:menu_item_content_type] = "Page" if !params[:menu_item_content_type]
|
|
|
|
@content = params[:menu_item_content_type].constantize.new()
|
|
|
|
if params[:menu_item_content_type] == "Page"
|
|
LangSite.all.each do |ls|
|
|
@content.lang_pages << LangPage.new(:lang_site_id => ls.id)
|
|
end
|
|
|
|
end
|
|
@menu_item.menu_content = @content
|
|
|
|
|
|
|
|
|
|
LangSite.all.each do |ls|
|
|
@menu_item.menu_item_langs << MenuItemLang.new(:lang_site_id => ls.id)
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
def create
|
|
params[:lang] = params[:lang] || "fr"
|
|
|
|
@lang = LangSite.find_by_slug(params[:lang])
|
|
|
|
params_content = params[:menu_item].delete(:menu_content_attributes)
|
|
content_type = params[:menu_item][:menu_content_type]
|
|
params_langs = params[:menu_item].delete(:menu_item_langs_attributes)
|
|
|
|
|
|
@menu_item= MenuItem.new(params.require(:menu_item).permit!)
|
|
content = content_type.constantize.new(params_content.permit!)
|
|
|
|
params_langs.each do |lang|
|
|
@menu_item.menu_item_langs << MenuItemLang.new(lang[1].permit!)
|
|
end
|
|
|
|
@menu_item.menu_content = content
|
|
|
|
|
|
|
|
respond_to do |format|
|
|
if @menu_item.save
|
|
MenuItem.all.each do |mi|
|
|
mi.set_permalink
|
|
end
|
|
|
|
@menu = Menu.find( @menu_item.menu_id)
|
|
params[:parent_id] = @menu_item.parent_id
|
|
find_menu_items
|
|
|
|
|
|
flash[:notice] = "Le menu à été ajouté avec succès."
|
|
format.html {
|
|
redirect_to(admin_menu_items_path(:menu_id => @menu_item.menu_id, :parent_id => @menu_item.parent_id))
|
|
}
|
|
format.js
|
|
|
|
else
|
|
|
|
format.html { render :action => "new" }
|
|
format.js { render :action => "new" }
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
def edit
|
|
|
|
@menu_item= MenuItem.find(params[:id])
|
|
|
|
params[:lang] = params[:lang] || "fr"
|
|
|
|
@lang = LangSite.find_by_slug(params[:lang])
|
|
|
|
|
|
@admin = true
|
|
end
|
|
|
|
def edit_articles
|
|
|
|
@menu_item= MenuItem.find(params[:id])
|
|
|
|
params[:lang] = params[:lang] || "fr"
|
|
|
|
@lang = LangSite.find_by_slug(params[:lang])
|
|
|
|
|
|
@admin = true
|
|
end
|
|
|
|
def update
|
|
|
|
params[:lang] = params[:lang] || "fr"
|
|
|
|
@lang = LangSite.find_by_slug(params[:lang])
|
|
|
|
@menu_item= MenuItem.find(params[:id])
|
|
|
|
@menu = @menu_item.menu
|
|
|
|
if request.xhr?
|
|
@menu_parent = @menu_item.parent if @menu_item.parent
|
|
@menu_items = MenuItem.where(:parent_id => @menu_item.parent_id, :menu_id => @menu_item.menu_id).order(:position)
|
|
end
|
|
|
|
if params[:menu_item][:parent_id] and params[:menu_item][:parent_id] == "no-menu-selected"
|
|
@menu_item.parent_id = nil
|
|
@menu_item.save
|
|
params[:menu_item].delete(:parent_id)
|
|
|
|
end
|
|
|
|
@reorder = true if params[:reorder]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
respond_to do |format|
|
|
if @menu_item.update_attributes(params.require(:menu_item).permit!)
|
|
|
|
|
|
|
|
flash[:notice] = "Le menu à été modifié avec succès."
|
|
format.html { redirect_to(admin_menu_items_path(:parent_id => @menu_item.parent_id, :menu_id => @menu_item.menu_id)) }
|
|
if @reorder
|
|
MenuItem.all.each do |mi|
|
|
mi.set_permalink
|
|
|
|
end
|
|
|
|
format.js {
|
|
|
|
render :action => "update" }
|
|
else
|
|
@menu_item.set_permalink
|
|
format.js {
|
|
@menu_item = MenuItem.find(@menu_item.id)
|
|
render :action => "show" }
|
|
end
|
|
else
|
|
|
|
flash[:error] = "Cet élément de menu n'a pas pu être déplacé. Vérifiez que son lien permanent n'éxiste pas déjà dans l'élément cible."
|
|
if @reorder
|
|
format.js { render :action => "update_reorder_failled" }
|
|
else
|
|
format.html { render :action => "edit" }
|
|
format.js { render :action => "edit" }
|
|
end
|
|
|
|
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
def destroy
|
|
|
|
params[:lang] = params[:lang] || "fr"
|
|
|
|
@lang = LangSite.find_by_slug(params[:lang])
|
|
|
|
@menu_item = MenuItem.find(params[:id])
|
|
@menu_item.destroy
|
|
flash[:notice] = "L'élément de menu a été supprimé avec succès."
|
|
respond_to do |format|
|
|
|
|
|
|
format.html { redirect_to(admin_menu_items_path(:menu_id => @menu_item.menu_id, :parent_id => @menu_item.parent_id)) }
|
|
format.js
|
|
|
|
|
|
end
|
|
end
|
|
|
|
def show
|
|
@menu_item= MenuItem.unarchived.find(params[:id])
|
|
end
|
|
|
|
|
|
|
|
def cible
|
|
|
|
params[:menu_id] = params[:menu_id] || 1
|
|
|
|
if params[:menu_id] and params[:menu_id] != "" and @menu = Menu.find(params[:menu_id])
|
|
|
|
|
|
params[:parent_id] = nil if !params[:parent_id]
|
|
|
|
@menu_parent = MenuItem.find(params[:parent_id]) if params[:parent_id]
|
|
|
|
|
|
|
|
@order = "position ASC"
|
|
|
|
@menu_items = @menu.menu_items.where(:parent_id => params[:parent_id]).order(@order)
|
|
|
|
|
|
|
|
else
|
|
redirect_to admin_root_path, :alert => "Un menu doit être séléctionné."
|
|
end
|
|
|
|
render :layout => false
|
|
|
|
end
|
|
|
|
|
|
def update_permalinks
|
|
MenuItem.all.each do |mi|
|
|
mi.set_permalink
|
|
|
|
end
|
|
render :inline => "alert('Mise à jour effectuée');"
|
|
end
|
|
|
|
|
|
def clone_as_article
|
|
|
|
@menu_item= MenuItem.find(params[:id])
|
|
|
|
@article = Article.new(:published_at => Time.now, :skip_block => true)
|
|
@article.save
|
|
LangSite.all.each do |ls|
|
|
block = @menu_item.menu_content.blocks.find_by_lang_site_id(ls.id)
|
|
new_b = block.dup
|
|
new_b.blockable = @article
|
|
new_b.save
|
|
mil = @menu_item.select_lang(ls.id)
|
|
lang_page = @menu_item.menu_content.lang_pages.find_by_lang_site_id(ls.id)
|
|
@article.lang_articles << LangArticle.new(:lang_site_id => ls.id, :title => lang_page.title, :description => lang_page.description)
|
|
end
|
|
@article.save
|
|
|
|
redirect_to admin_articles_path
|
|
|
|
end
|
|
|
|
|
|
|
|
def clone
|
|
@menu_item= MenuItem.find(params[:id])
|
|
|
|
@new = @menu_item.dup
|
|
|
|
|
|
@new.id
|
|
@new.menu_content = @menu_item.menu_content.dup
|
|
@new.save
|
|
MenuItem.all.each do |mi|
|
|
mi.set_permalink
|
|
|
|
end
|
|
|
|
@menu_item.menu_item_langs.each do |menu_item_lang|
|
|
new_ml = menu_item_lang.dup
|
|
new_ml.name = menu_item_lang.name+" copie"
|
|
slug = menu_item_lang.slug+"-copie"
|
|
new_ml.slug = slug
|
|
|
|
i = 0
|
|
while MenuItemLang.where(:slug => new_ml.slug).exists?
|
|
i= i+1
|
|
new_ml.slug = slug+"-#{i}"
|
|
end
|
|
new_ml.name = new_ml.name+" (#{i})" if i >0
|
|
new_ml.menu_item = @new
|
|
new_ml.save
|
|
|
|
|
|
MenuItem.all.each do |mi|
|
|
mi.set_permalink
|
|
|
|
end
|
|
|
|
end
|
|
|
|
redirect_to :back
|
|
end
|
|
|
|
def archives
|
|
@menu_items = MenuItem.archived.order("archived_at DESC")
|
|
end
|
|
|
|
|
|
def archive
|
|
@menu_item= MenuItem.find(params[:id])
|
|
|
|
@new = @menu_item.dup
|
|
@date = Time.now
|
|
@new.name = @new.name+" archive "+ @date.strftime("%m-%d-%Y %H:%M:%S")
|
|
@slug = @new.slug+"-archive-"+ @date.strftime("%m-%d-%Y-%H-%M-%S")
|
|
@new.slug = @slug
|
|
i = 0
|
|
while MenuItem.where(:slug => @new.slug, :menu_id => @new.menu_id, :parent_id => @new.parent_id).exists?
|
|
i= i+1
|
|
@new.slug = @slug+"-#{i}"
|
|
end
|
|
@new.name = @new.name+" (#{i})" if i >0
|
|
@new.id
|
|
@new.menu_content = @menu_item.menu_content.dup
|
|
|
|
@new.archived_at = Time.now
|
|
@new.parent_id = nil
|
|
@new.archived = true
|
|
@new.archive_id = @menu_item.id
|
|
|
|
|
|
@new.save
|
|
MenuItem.all.each do |mi|
|
|
mi.set_permalink
|
|
|
|
end
|
|
redirect_to :back
|
|
end
|
|
|
|
|
|
end
|