Add Item#ancestors
This commit is contained in:
parent
e1440a79d8
commit
32e8bd108f
|
@ -10,7 +10,7 @@ class Admin::ComponentsController < ApplicationController
|
|||
def new
|
||||
@component = Component.new
|
||||
@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
|
||||
end
|
||||
|
@ -24,7 +24,7 @@ class Admin::ComponentsController < ApplicationController
|
|||
|
||||
if @component.save
|
||||
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
|
||||
render :action => "new"
|
||||
end
|
||||
|
@ -35,7 +35,7 @@ class Admin::ComponentsController < ApplicationController
|
|||
|
||||
if @component.update_attributes(params[:component])
|
||||
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
|
||||
render :action => "edit"
|
||||
end
|
||||
|
@ -47,7 +47,7 @@ class Admin::ComponentsController < ApplicationController
|
|||
|
||||
#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
|
||||
|
|
|
@ -5,13 +5,14 @@ class Admin::ItemsController < ApplicationController
|
|||
before_filter :find_snippets, :only => :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
|
||||
|
||||
protected
|
||||
|
||||
def find_snippets
|
||||
@snippets = Snippet.all( :conditions => { :parent_item_name => @parent_item.name } )
|
||||
@snippets = Snippet.all( :conditions => { :parent_name => @parent_item.name } )
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -10,7 +10,7 @@ class Admin::LinksController < ApplicationController
|
|||
def new
|
||||
@link = Link.new
|
||||
@link.is_published = true
|
||||
@link.parent_item_name = @parent_item.name
|
||||
@link.parent_name = @parent_item.name
|
||||
end
|
||||
|
||||
def edit
|
||||
|
@ -22,7 +22,7 @@ class Admin::LinksController < ApplicationController
|
|||
|
||||
if @link.save
|
||||
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
|
||||
render :action => "new"
|
||||
end
|
||||
|
@ -33,7 +33,7 @@ class Admin::LinksController < ApplicationController
|
|||
|
||||
if @link.update_attributes(params[:link])
|
||||
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
|
||||
render :action => "edit"
|
||||
end
|
||||
|
@ -43,7 +43,7 @@ class Admin::LinksController < ApplicationController
|
|||
@link = Link.find(params[:id])
|
||||
@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
|
||||
|
|
|
@ -10,7 +10,7 @@ class Admin::PagesController < ApplicationController
|
|||
def new
|
||||
@page = Page.new
|
||||
@page.is_published = true
|
||||
@page.parent_item_name = @parent_item.name
|
||||
@page.parent_name = @parent_item.name
|
||||
end
|
||||
|
||||
def edit
|
||||
|
@ -22,7 +22,7 @@ class Admin::PagesController < ApplicationController
|
|||
|
||||
if @page.save
|
||||
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
|
||||
render :action => "new"
|
||||
end
|
||||
|
@ -33,7 +33,7 @@ class Admin::PagesController < ApplicationController
|
|||
|
||||
if @page.update_attributes(params[:page])
|
||||
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
|
||||
render :action => "edit"
|
||||
end
|
||||
|
@ -43,7 +43,7 @@ class Admin::PagesController < ApplicationController
|
|||
@page = Page.find(params[:id])
|
||||
@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
|
||||
|
|
|
@ -9,7 +9,7 @@ class Admin::SnippetsController < ApplicationController
|
|||
|
||||
def new
|
||||
@snippet = Snippet.new
|
||||
@snippet.parent_item_name = @parent_item.name
|
||||
@snippet.parent_name = @parent_item.name
|
||||
end
|
||||
|
||||
def edit
|
||||
|
@ -21,7 +21,7 @@ class Admin::SnippetsController < ApplicationController
|
|||
|
||||
if @snippet.save
|
||||
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
|
||||
render :action => "new"
|
||||
end
|
||||
|
@ -32,7 +32,7 @@ class Admin::SnippetsController < ApplicationController
|
|||
|
||||
if @snippet.update_attributes(params[:snippet])
|
||||
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
|
||||
render :action => "edit"
|
||||
end
|
||||
|
@ -42,7 +42,7 @@ class Admin::SnippetsController < ApplicationController
|
|||
@snippet = Snippet.find(params[:id])
|
||||
@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
|
||||
|
|
|
@ -32,9 +32,9 @@ class ApplicationController < ActionController::Base
|
|||
end
|
||||
|
||||
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
|
||||
@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
|
||||
|
||||
|
|
|
@ -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 :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 :position, Integer, :required => 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
|
||||
|
||||
def self.find_by_name(item_name)
|
||||
Item.find(:first, :conditions => { :name => item_name, :is_published => true })
|
||||
end
|
||||
|
||||
|
||||
def ancestors
|
||||
node, nodes = self, []
|
||||
nodes << node = node.parent while !node.parent.blank?
|
||||
nodes.reverse
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def setup_default_value
|
||||
|
@ -26,8 +37,11 @@ class Item
|
|||
self.position = (max_page)? max_page.position.to_i + 1 : 1
|
||||
end
|
||||
|
||||
if self.parent_item_name.blank?
|
||||
self.parent_item_name = "root"
|
||||
if self.parent_name.blank?
|
||||
self.parent_name = nil
|
||||
self.parent_id = nil
|
||||
else
|
||||
self.parent_id = Item.find_by_name( self.parent_name ).id
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ class Snippet
|
|||
include MongoMapper::Document
|
||||
|
||||
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
|
||||
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<%= f.error_messages %>
|
||||
<%= f.hidden_field :parent_item_name %>
|
||||
<%= f.hidden_field :parent_name %>
|
||||
|
||||
<p>
|
||||
<%= f.label :name, "Name" %>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<tr>
|
||||
<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><%= item.position %></td>
|
||||
<td><%= item.is_published.to_s %></td>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<tr>
|
||||
<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><%= item.position %></td>
|
||||
<td><%= item.is_published.to_s %></td>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<tr>
|
||||
<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><%= item.position %></td>
|
||||
<td><%= item.is_published.to_s %></td>
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
<% content_for :secondary do %>
|
||||
<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_component, :scope => :admin), new_admin_component_path( :parent_item_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_snippet, :scope => :admin ), new_admin_snippet_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_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_name => @parent_item.name ), :class => 'button positive' %></li>
|
||||
</ul>
|
||||
<% end -%>
|
||||
|
||||
<h1>Listing items: <%= @parent_item.name %>/</h1>
|
||||
<h1>Listing items: <%= show_parent_items_link(@parent_item) %></h1>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<%= f.error_messages %>
|
||||
<%= f.hidden_field :parent_item_name %>
|
||||
<%= f.hidden_field :parent_name %>
|
||||
|
||||
<p>
|
||||
<%= f.label :name, "Name" %>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<%= f.error_messages %>
|
||||
<%= f.hidden_field :parent_item_name %>
|
||||
<%= f.hidden_field :parent_name %>
|
||||
|
||||
<p>
|
||||
<%= f.label :name, "Name" %>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<%= f.error_messages %>
|
||||
<%= f.hidden_field :parent_item_name %>
|
||||
<%= f.hidden_field :parent_name %>
|
||||
|
||||
<p>
|
||||
<%= f.label :name, "Name" %>
|
||||
|
|
Reference in New Issue