Add Item#ancestors
This commit is contained in:
parent
e1440a79d8
commit
32e8bd108f
|
@ -10,7 +10,7 @@ class Admin::ComponentsController < ApplicationController
|
||||||
def new
|
def new
|
||||||
@component = Component.new
|
@component = Component.new
|
||||||
@component.is_published = true
|
@component.is_published = true
|
||||||
@component.parent_item_name = @parent_item.name
|
@component.parent_name = @parent_item.name
|
||||||
|
|
||||||
@component.engine_name = 'Announcement' # only support Announcement now
|
@component.engine_name = 'Announcement' # only support Announcement now
|
||||||
end
|
end
|
||||||
|
@ -24,7 +24,7 @@ class Admin::ComponentsController < ApplicationController
|
||||||
|
|
||||||
if @component.save
|
if @component.save
|
||||||
flash[:notice] = 'Component was successfully created.'
|
flash[:notice] = 'Component was successfully created.'
|
||||||
redirect_to admin_items_url( :parent_item_name => @component.parent_item_name )
|
redirect_to admin_items_url( :parent_name => @component.parent_name )
|
||||||
else
|
else
|
||||||
render :action => "new"
|
render :action => "new"
|
||||||
end
|
end
|
||||||
|
@ -35,7 +35,7 @@ class Admin::ComponentsController < ApplicationController
|
||||||
|
|
||||||
if @component.update_attributes(params[:component])
|
if @component.update_attributes(params[:component])
|
||||||
flash[:notice] = 'Component was successfully updated.'
|
flash[:notice] = 'Component was successfully updated.'
|
||||||
redirect_to admin_items_url( :parent_item_name => @component.parent_item_name )
|
redirect_to admin_items_url( :parent_name => @component.parent_name )
|
||||||
else
|
else
|
||||||
render :action => "edit"
|
render :action => "edit"
|
||||||
end
|
end
|
||||||
|
@ -47,7 +47,7 @@ class Admin::ComponentsController < ApplicationController
|
||||||
|
|
||||||
#TODO: destroy engine data
|
#TODO: destroy engine data
|
||||||
|
|
||||||
redirect_to admin_items_url( :parent_item_name => @component.parent_item_name )
|
redirect_to admin_items_url( :parent_name => @component.parent_name )
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -5,13 +5,14 @@ class Admin::ItemsController < ApplicationController
|
||||||
before_filter :find_snippets, :only => :index
|
before_filter :find_snippets, :only => :index
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@items = Item.all( :conditions => { :parent_item_name => @parent_item.name } )
|
@items = Item.all( :conditions => { :parent_name => @parent_item.name } )
|
||||||
|
@items.unshift Item.find_by_name("root") if @parent_item.name == 'root'
|
||||||
end
|
end
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
def find_snippets
|
def find_snippets
|
||||||
@snippets = Snippet.all( :conditions => { :parent_item_name => @parent_item.name } )
|
@snippets = Snippet.all( :conditions => { :parent_name => @parent_item.name } )
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -10,7 +10,7 @@ class Admin::LinksController < ApplicationController
|
||||||
def new
|
def new
|
||||||
@link = Link.new
|
@link = Link.new
|
||||||
@link.is_published = true
|
@link.is_published = true
|
||||||
@link.parent_item_name = @parent_item.name
|
@link.parent_name = @parent_item.name
|
||||||
end
|
end
|
||||||
|
|
||||||
def edit
|
def edit
|
||||||
|
@ -22,7 +22,7 @@ class Admin::LinksController < ApplicationController
|
||||||
|
|
||||||
if @link.save
|
if @link.save
|
||||||
flash[:notice] = 'Link was successfully created.'
|
flash[:notice] = 'Link was successfully created.'
|
||||||
redirect_to admin_items_url( :parent_item_name => @link.parent_item_name )
|
redirect_to admin_items_url( :parent_name => @link.parent_name )
|
||||||
else
|
else
|
||||||
render :action => "new"
|
render :action => "new"
|
||||||
end
|
end
|
||||||
|
@ -33,7 +33,7 @@ class Admin::LinksController < ApplicationController
|
||||||
|
|
||||||
if @link.update_attributes(params[:link])
|
if @link.update_attributes(params[:link])
|
||||||
flash[:notice] = 'Link was successfully updated.'
|
flash[:notice] = 'Link was successfully updated.'
|
||||||
redirect_to admin_items_url( :parent_item_name => @link.parent_item_name )
|
redirect_to admin_items_url( :parent_name => @link.parent_name )
|
||||||
else
|
else
|
||||||
render :action => "edit"
|
render :action => "edit"
|
||||||
end
|
end
|
||||||
|
@ -43,7 +43,7 @@ class Admin::LinksController < ApplicationController
|
||||||
@link = Link.find(params[:id])
|
@link = Link.find(params[:id])
|
||||||
@link.destroy
|
@link.destroy
|
||||||
|
|
||||||
redirect_to admin_items_url( :parent_item_name => @link.parent_item_name )
|
redirect_to admin_items_url( :parent_name => @link.parent_name )
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -10,7 +10,7 @@ class Admin::PagesController < ApplicationController
|
||||||
def new
|
def new
|
||||||
@page = Page.new
|
@page = Page.new
|
||||||
@page.is_published = true
|
@page.is_published = true
|
||||||
@page.parent_item_name = @parent_item.name
|
@page.parent_name = @parent_item.name
|
||||||
end
|
end
|
||||||
|
|
||||||
def edit
|
def edit
|
||||||
|
@ -22,7 +22,7 @@ class Admin::PagesController < ApplicationController
|
||||||
|
|
||||||
if @page.save
|
if @page.save
|
||||||
flash[:notice] = 'Page was successfully created.'
|
flash[:notice] = 'Page was successfully created.'
|
||||||
redirect_to admin_items_url( :parent_item_name => @page.parent_item_name )
|
redirect_to admin_items_url( :parent_name => @page.parent_name )
|
||||||
else
|
else
|
||||||
render :action => "new"
|
render :action => "new"
|
||||||
end
|
end
|
||||||
|
@ -33,7 +33,7 @@ class Admin::PagesController < ApplicationController
|
||||||
|
|
||||||
if @page.update_attributes(params[:page])
|
if @page.update_attributes(params[:page])
|
||||||
flash[:notice] = 'Page was successfully updated.'
|
flash[:notice] = 'Page was successfully updated.'
|
||||||
redirect_to admin_items_url( :parent_item_name => @page.parent_item_name )
|
redirect_to admin_items_url( :parent_name => @page.parent_name )
|
||||||
else
|
else
|
||||||
render :action => "edit"
|
render :action => "edit"
|
||||||
end
|
end
|
||||||
|
@ -43,7 +43,7 @@ class Admin::PagesController < ApplicationController
|
||||||
@page = Page.find(params[:id])
|
@page = Page.find(params[:id])
|
||||||
@page.destroy
|
@page.destroy
|
||||||
|
|
||||||
redirect_to admin_items_url( :parent_item_name => @page.parent_item_name )
|
redirect_to admin_items_url( :parent_name => @page.parent_name )
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,7 +9,7 @@ class Admin::SnippetsController < ApplicationController
|
||||||
|
|
||||||
def new
|
def new
|
||||||
@snippet = Snippet.new
|
@snippet = Snippet.new
|
||||||
@snippet.parent_item_name = @parent_item.name
|
@snippet.parent_name = @parent_item.name
|
||||||
end
|
end
|
||||||
|
|
||||||
def edit
|
def edit
|
||||||
|
@ -21,7 +21,7 @@ class Admin::SnippetsController < ApplicationController
|
||||||
|
|
||||||
if @snippet.save
|
if @snippet.save
|
||||||
flash[:notice] = 'Snippet was successfully created.'
|
flash[:notice] = 'Snippet was successfully created.'
|
||||||
redirect_to admin_items_url( :parent_item_name => @snippet.parent_item_name )
|
redirect_to admin_items_url( :parent_name => @snippet.parent_name )
|
||||||
else
|
else
|
||||||
render :action => "new"
|
render :action => "new"
|
||||||
end
|
end
|
||||||
|
@ -32,7 +32,7 @@ class Admin::SnippetsController < ApplicationController
|
||||||
|
|
||||||
if @snippet.update_attributes(params[:snippet])
|
if @snippet.update_attributes(params[:snippet])
|
||||||
flash[:notice] = 'Snippet was successfully updated.'
|
flash[:notice] = 'Snippet was successfully updated.'
|
||||||
redirect_to admin_items_url( :parent_item_name => @snippet.parent_item_name )
|
redirect_to admin_items_url( :parent_name => @snippet.parent_name )
|
||||||
else
|
else
|
||||||
render :action => "edit"
|
render :action => "edit"
|
||||||
end
|
end
|
||||||
|
@ -42,7 +42,7 @@ class Admin::SnippetsController < ApplicationController
|
||||||
@snippet = Snippet.find(params[:id])
|
@snippet = Snippet.find(params[:id])
|
||||||
@snippet.destroy
|
@snippet.destroy
|
||||||
|
|
||||||
redirect_to admin_items_url( :parent_item_name => @snippet.parent_item_name )
|
redirect_to admin_items_url( :parent_name => @snippet.parent_name )
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -32,9 +32,9 @@ class ApplicationController < ActionController::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
def find_parent_item
|
def find_parent_item
|
||||||
@parent_item = Item.find_by_name(params[:parent_item_name] || 'root')
|
@parent_item = Item.find_by_name(params[:parent_name])
|
||||||
unless @parent_item
|
unless @parent_item
|
||||||
@parent_item = Page.create( :name => 'root', :title => t(:homepage), :layout_name => "root" )
|
@parent_item = Page.create( :name => "root", :title => "root", :layout_name => "root" )
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
module AdminHelper
|
||||||
|
|
||||||
|
def show_parent_items_link(parent_item)
|
||||||
|
@parent_items = @parent_item.ancestors.map{ |i| i.name }
|
||||||
|
( @parent_items.map{ |i| link_to(i, admin_items_path(:parent_name=>i) ) } << parent_item.name ).join("/")
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
|
@ -5,19 +5,30 @@ class Item
|
||||||
key :_type, String
|
key :_type, String
|
||||||
|
|
||||||
key :name, String, :required => true, :index => true
|
key :name, String, :required => true, :index => true
|
||||||
key :parent_item_name, String, :required => true, :index => true
|
|
||||||
|
key :parent_name, String, :index => true
|
||||||
|
key :parent_id, String, :index => true
|
||||||
|
|
||||||
key_i18n :title, String, :required => true
|
key_i18n :title, String, :required => true
|
||||||
|
|
||||||
key :position, Integer, :required => true
|
key :position, Integer, :required => true
|
||||||
key :is_published, Boolean, :required => true, :default => true, :index => true
|
key :is_published, Boolean, :required => true, :default => true, :index => true
|
||||||
|
|
||||||
|
belongs_to :parent, :class_name => "Item", :foreign_key => :parent_id
|
||||||
|
many :children, :class_name => "Item", :foreign_key => :parent_id
|
||||||
|
|
||||||
before_validation :setup_default_value
|
before_validation :setup_default_value
|
||||||
|
|
||||||
def self.find_by_name(item_name)
|
def self.find_by_name(item_name)
|
||||||
Item.find(:first, :conditions => { :name => item_name, :is_published => true })
|
Item.find(:first, :conditions => { :name => item_name, :is_published => true })
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def ancestors
|
||||||
|
node, nodes = self, []
|
||||||
|
nodes << node = node.parent while !node.parent.blank?
|
||||||
|
nodes.reverse
|
||||||
|
end
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
def setup_default_value
|
def setup_default_value
|
||||||
|
@ -26,8 +37,11 @@ class Item
|
||||||
self.position = (max_page)? max_page.position.to_i + 1 : 1
|
self.position = (max_page)? max_page.position.to_i + 1 : 1
|
||||||
end
|
end
|
||||||
|
|
||||||
if self.parent_item_name.blank?
|
if self.parent_name.blank?
|
||||||
self.parent_item_name = "root"
|
self.parent_name = nil
|
||||||
|
self.parent_id = nil
|
||||||
|
else
|
||||||
|
self.parent_id = Item.find_by_name( self.parent_name ).id
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@ class Snippet
|
||||||
include MongoMapper::Document
|
include MongoMapper::Document
|
||||||
|
|
||||||
key :name, String, :required => true, :index => true
|
key :name, String, :required => true, :index => true
|
||||||
key :parent_item_name, String, :required => true, :index => true
|
key :parent_name, String, :required => true, :index => true
|
||||||
key_i18n :content, String
|
key_i18n :content, String
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<%= f.error_messages %>
|
<%= f.error_messages %>
|
||||||
<%= f.hidden_field :parent_item_name %>
|
<%= f.hidden_field :parent_name %>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<%= f.label :name, "Name" %>
|
<%= f.label :name, "Name" %>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<tr>
|
<tr>
|
||||||
<td><%= item.class %></td>
|
<td><%= item.class %></td>
|
||||||
<td><%= link_to item.name, admin_items_path(:parent_item_name => item.name) %></td>
|
<td><%= link_to item.name, admin_items_path(:parent_name => item.name) %></td>
|
||||||
<td><%=h item.title %>
|
<td><%=h item.title %>
|
||||||
<td><%= item.position %></td>
|
<td><%= item.position %></td>
|
||||||
<td><%= item.is_published.to_s %></td>
|
<td><%= item.is_published.to_s %></td>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<tr>
|
<tr>
|
||||||
<td><%= item.class %></td>
|
<td><%= item.class %></td>
|
||||||
<td><%= link_to item.name, admin_items_path(:parent_item_name => item.name) %></td>
|
<td><%= link_to item.name, admin_items_path(:parent_name => item.name) %></td>
|
||||||
<td><%=h item.title %>
|
<td><%=h item.title %>
|
||||||
<td><%= item.position %></td>
|
<td><%= item.position %></td>
|
||||||
<td><%= item.is_published.to_s %></td>
|
<td><%= item.is_published.to_s %></td>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<tr>
|
<tr>
|
||||||
<td><%= item.class %></td>
|
<td><%= item.class %></td>
|
||||||
<td><%= link_to item.name, admin_items_path(:parent_item_name => item.name) %></td>
|
<td><%= link_to item.name, admin_items_path(:parent_name => item.name) %></td>
|
||||||
<td><%=h item.title %>
|
<td><%=h item.title %>
|
||||||
<td><%= item.position %></td>
|
<td><%= item.position %></td>
|
||||||
<td><%= item.is_published.to_s %></td>
|
<td><%= item.is_published.to_s %></td>
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
<% content_for :secondary do %>
|
<% content_for :secondary do %>
|
||||||
<ul class="list">
|
<ul class="list">
|
||||||
<li><%= link_to t(:new_page, :scope => :admin), new_admin_page_path( :parent_item_name => @parent_item.name ), :class => 'button positive' %></li>
|
<li><%= link_to t(:new_page, :scope => :admin), new_admin_page_path( :parent_name => @parent_item.name ), :class => 'button positive' %></li>
|
||||||
<li><%= link_to t(:new_component, :scope => :admin), new_admin_component_path( :parent_item_name => @parent_item.name ) %>
|
<li><%= link_to t(:new_component, :scope => :admin), new_admin_component_path( :parent_name => @parent_item.name ) %>
|
||||||
<li><%= link_to t(:new_link, :scope => :admin), new_admin_link_path( :parent_item_name => @parent_item.name ) %>
|
<li><%= link_to t(:new_link, :scope => :admin), new_admin_link_path( :parent_name => @parent_item.name ) %>
|
||||||
<li><%= link_to t(:new_snippet, :scope => :admin ), new_admin_snippet_path( :parent_item_name => @parent_item.name ), :class => 'button positive' %></li>
|
<li><%= link_to t(:new_snippet, :scope => :admin ), new_admin_snippet_path( :parent_name => @parent_item.name ), :class => 'button positive' %></li>
|
||||||
</ul>
|
</ul>
|
||||||
<% end -%>
|
<% end -%>
|
||||||
|
|
||||||
<h1>Listing items: <%= @parent_item.name %>/</h1>
|
<h1>Listing items: <%= show_parent_items_link(@parent_item) %></h1>
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<%= f.error_messages %>
|
<%= f.error_messages %>
|
||||||
<%= f.hidden_field :parent_item_name %>
|
<%= f.hidden_field :parent_name %>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<%= f.label :name, "Name" %>
|
<%= f.label :name, "Name" %>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<%= f.error_messages %>
|
<%= f.error_messages %>
|
||||||
<%= f.hidden_field :parent_item_name %>
|
<%= f.hidden_field :parent_name %>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<%= f.label :name, "Name" %>
|
<%= f.label :name, "Name" %>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<%= f.error_messages %>
|
<%= f.error_messages %>
|
||||||
<%= f.hidden_field :parent_item_name %>
|
<%= f.hidden_field :parent_name %>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<%= f.label :name, "Name" %>
|
<%= f.label :name, "Name" %>
|
||||||
|
|
Reference in New Issue