put module app json into init,making orbit app work with module app.

This commit is contained in:
Matthew K. Fu JuYuan 2012-11-29 14:21:46 +08:00
parent 3d573680b2
commit f9bcb27efc
15 changed files with 349 additions and 66 deletions

View File

@ -31,9 +31,9 @@ class Admin::PagePartsController < ApplicationController
@widget_path = @part.widget_path ? @part.widget_path : @module_app.widgets.keys[0] @widget_path = @part.widget_path ? @part.widget_path : @module_app.widgets.keys[0]
if @module_app.widgets.any?{|b| b.class == Array} # if @module_app.widgets.any?{|b| b.class == Array}
@widget_style = @module_app.widgets[@widget_path] if !@widget_path.blank? && !@module_app.widgets.blank? # @widget_style = @module_app.widgets[@widget_path] if !@widget_path.blank? && !@module_app.widgets.blank?
end # end
case @module_app.key case @module_app.key
when 'announcement' when 'announcement'
@ -119,7 +119,6 @@ class Admin::PagePartsController < ApplicationController
def reload_widget_styles def reload_widget_styles
@module_app = ModuleApp.find(params[:module_app_id]) @module_app = ModuleApp.find(params[:module_app_id])
@widget_style = @module_app.widgets[params[:id]] @widget_style = @module_app.widgets[params[:id]]
respond_to do |format| respond_to do |format|

View File

@ -4,6 +4,7 @@ class Item
include Mongoid::Timestamps include Mongoid::Timestamps
include Mongoid::Tree include Mongoid::Tree
include Mongoid::Tree::Ordering include Mongoid::Tree::Ordering
LIST = YAML.load(File.read('config/list.yml'))
field :name field :name
field :path field :path
@ -15,7 +16,7 @@ class Item
validates_format_of :name, :with => /^[0-9a-zA-Z\-_]+$/ validates_format_of :name, :with => /^[0-9a-zA-Z\-_]+$/
validates :name, :exclusion => { :in => LIST[:forbidden_item_names] } # validates :name, :exclusion => { :in => LIST[:forbidden_item_names] }
validates_uniqueness_of :name, :scope => :parent_id validates_uniqueness_of :name, :scope => :parent_id
validates_presence_of :name validates_presence_of :name
validates_associated :parent, :children validates_associated :parent, :children

View File

@ -5,23 +5,11 @@ class ModuleApp
field :key field :key
field :title field :title
field :version
field :organization
field :author
field :intro
field :update_info
field :create_date
field :enable_frontend, type: Boolean, :default => true
field :app_pages ,type: Array
# field :widgets ,type: Array
field :widgets ,type: Hash
field :widget_fields ,type: Array
has_many :managers,as: :managing_app ,:class_name => "AppManager" ,:dependent => :destroy#,:foreign_key => "managing_app_id",:inverse_of => :managing_app has_many :managers,as: :managing_app ,:class_name => "AppManager" ,:dependent => :destroy#,:foreign_key => "managing_app_id",:inverse_of => :managing_app
has_many :sub_managers,as: :sub_managing_app ,:class_name => "AppManager", :dependent => :destroy#,:foreign_key => "sub_managing_app_id",:inverse_of => :sub_managing_app has_many :sub_managers,as: :sub_managing_app ,:class_name => "AppManager", :dependent => :destroy#,:foreign_key => "sub_managing_app_id",:inverse_of => :sub_managing_app
has_many :tags # has_many :tags
has_many :page_parts has_many :page_parts
has_many :pages has_many :pages
@ -29,6 +17,33 @@ class ModuleApp
before_save :set_key before_save :set_key
def get_registration
OrbitApp::Module::Registration.find_by_key(key)
end
# %w{label_i18n }.each do |field|
# define_method(field){|var| get_registration.send("get_#{m}") }
# end
def label_i18n
reg = get_registration
reg.nil? ? 'Init is not defined completely' : get_registration.get_label_i18n
end
# def method_missing(m, *args, &block)
# # get_registration.send("get_#{m}")
# end
def using_default_widget?
!get_registration.get_default_widget.blank?
end
def get_widget_for_select
widgets = get_registration.get_widgets
ary = widgets.collect{|k,v| [I18n.t(v["label"]),k]}
ary << [I18n.t('widget.default_widget'),'default_widget']if using_default_widget?
end
def is_manager?(user) def is_manager?(user)
managing_users.include?(user) managing_users.include?(user)
end end
@ -79,6 +94,10 @@ class ModuleApp
end end
end end
def label
I18n.t(label_i18n)
end
protected protected
def set_key def set_key

View File

@ -10,12 +10,12 @@
</div> </div>
<span id='module_app_list'> <span id='module_app_list'>
<%= f.select :module_app, options_from_collection_for_select(@module_apps, :id, :title, :selected => @module_app.id), {}, {:rel => admin_page_parts_path} %> <%= f.select :module_app, options_from_collection_for_select(@module_apps, :id, :label, :selected => @module_app.id), {}, {:rel => admin_page_parts_path} %>
</span> </span>
<span id='widget_list'> <span id='widget_list'>
<%#= f.select :widget_path, @module_app.widgets.collect{|widget| [widget.humanize, widget]}, :selected => @part.widget_path %> <%#= f.select :widget_path, @module_app.widgets.collect{|widget| [widget.humanize, widget]}, :selected => @part.widget_path %>
<%= f.select :widget_path, @module_app.widgets.collect{|k,v| [k.humanize, k]}, {}, { :selected => @part.widget_path, :rel => admin_page_parts_path } %> <%= f.select :widget_path, @module_app.get_widget_for_select, {}, { :selected => @part.widget_path, :rel => admin_page_parts_path } %>
</span> </span>
<span id='widget_style_list'> <span id='widget_style_list'>
@ -34,18 +34,10 @@
</span> </span>
<span id='widget_field'> <span id='widget_field'>
<%= render 'widget_fields' %> <%= render 'widget_fields' %>
<%#= f.label :widget_field %>
<%# @module_app.widget_fields.each_with_index do |widget_field, i| %>
<%#= i+1 %>
<%#= select_tag "page_part[widget_field][]", options_for_select(@module_app.widget_fields.collect{|widget_field| [widget_field.humanize, widget_field]}, (@part.widget_field ? @part.widget_field[i] : nil) ), :include_blank => true %> <br />
<%# end %>
<%#= select_tag "page_part[widget_field][]", options_for_select(@module_app.widget_fields.collect{|widget_field| [widget_field.humanize, widget_field]}, @part.widget_field.collect{|widget_field| widget_field}), {:multiple => :multiple, :size => 6} %>
</span> </span>
<div id="widget_data_count"> <div id="widget_data_count">
<%= f.label :widget_data_count %> <%= f.label :widget_data_count %>
<%= f.text_field :widget_data_count %> <%= f.text_field :widget_data_count %>

View File

@ -1,4 +1,4 @@
$('#widget_list select').html("<%= j options_for_select(@module_app.widgets.collect{|k,v| k}) %>"); $('#widget_list select').html("<%= j options_for_select(@module_app.get_widget_for_select) %>");
$('#widget_style_list').html("<%= escape_javascript(select 'page_part', 'widget_style', @module_app.widgets[@widget_path]) if !@widget_path.blank? %>"); $('#widget_style_list').html("<%= escape_javascript(select 'page_part', 'widget_style', @module_app.widgets[@widget_path]) if !@widget_path.blank? %>");
$('#widget_field').html("<%= j render 'widget_fields' %>"); $('#widget_field').html("<%= j render 'widget_fields' %>");
$('#widget_category').html("<%= j render 'widget_categories' %>"); $('#widget_category').html("<%= j render 'widget_categories' %>");

View File

@ -70,3 +70,10 @@ widget_field_type:
- tag - tag
- viewcount - viewcount
- poster - poster
default_widget_style:
- style1
- style2
- style3
- style4
- style5

View File

@ -864,7 +864,14 @@ zh_tw:
one: "有 1 個錯誤發生使得「%{model}」無法被儲存。" one: "有 1 個錯誤發生使得「%{model}」無法被儲存。"
other: "有 %{count} 個錯誤發生使得「%{model}」無法被儲存。" other: "有 %{count} 個錯誤發生使得「%{model}」無法被儲存。"
body: "以下欄位發生問題:" body: "以下欄位發生問題:"
widget:
default_widget: 系統預設Widget
_default_widget:
style1: 表格列表
style2: 單行列佐圖(同邊)
style3: 多行列佐圖(同邊)
style4: 多行列佐圖(異邊)
style5: 單行列佐單圖(同邊)
# : <<<<<<< HEAD # : <<<<<<< HEAD
mongoid: mongoid:
models: models:

View File

@ -4,6 +4,8 @@ require "orbit_app/helper/renderer"
require "orbit_app/helper/side_bar_renderer" require "orbit_app/helper/side_bar_renderer"
require "orbit_app/helper/context_link_renderer" require "orbit_app/helper/context_link_renderer"
require "orbit_app/module/side_bar" require "orbit_app/module/side_bar"
require "orbit_app/module/widget"
require "orbit_app/module/front_end"
require "orbit_app/plugin/summary" require "orbit_app/plugin/summary"
require "orbit_app/plugin/registration" require "orbit_app/plugin/registration"
require "orbit_app/module/summary" require "orbit_app/module/summary"

View File

@ -0,0 +1,56 @@
module OrbitApp
module Module
module FrontendUtility
Version = "0.1"
module ClassMethods
@@frontend_pages = []
def add(var)
@@frontend_pages << var
end
def all
return @@frontend_pages
end
end
extend ClassMethods
def self.included( other )
other.extend( ClassMethods )
end
class AppPageSet
def initialize(&block)
@frontend_pages = []
block.arity < 1 ? instance_eval(&block) : block.call(self) if block_given?
end
def app_page(name,options ={})
@frontend_pages << AppPage.new(name,options)
end
def to_module_app_format
@frontend_pages.collect{|t| t.name}
end
end
class AppPage
attr_reader :name
def initialize(name,options ={})
@name = name
end
def finalize!
end
protected
end# of AppPage
end # of FrontendUtility
end # of Module
end # of OrbitApp

View File

@ -12,7 +12,7 @@ module OrbitApp
def find_by_key(key) def find_by_key(key)
@@registrations.each{|t| @@registrations.each{|t|
return t if t.name == key return t if t.key == key
} }
return nil return nil
end end
@ -28,20 +28,69 @@ module OrbitApp
end end
class DataSheet class DataSheet
attr_reader :name attr_reader :name,:key,:base_path,:module_label
attr_reader :base_path
def initialize(name, &block) def initialize(name, &block)
@name = name @name = name
@key = name.underscore.singularize
@side_bar = nil @side_bar = nil
@front_end_app_pages = nil
block.arity < 1 ? instance_eval(&block) : block.call(self) if block_given? block.arity < 1 ? instance_eval(&block) : block.call(self) if block_given?
setup_module_app
end
def setup_module_app
module_app = ModuleApp.first(conditions: {:key=>@key,:title=>name})
module_app = ModuleApp.new(:key=>@key,:title=>name) if module_app.nil?
begin
module_app.save(:validate=>false)
rescue
retry
end
end
def get_label_i18n
@module_label
end
def get_default_widget
if @widget_set.nil? # Init not defining widget
return {}
elsif @widget_set.get_default_widget.nil? # Init had defining widget,but say nothing about default_widget
return {}
else
@widget_set.get_default_widget.to_module_app_format
end
end
def get_enable_frontend
(@front_end_app_pages.nil? ? false : true)
end
def get_app_pages
@front_end_app_pages.nil? ? [] : @front_end_app_pages.to_module_app_format
end
def get_widgets
@widget_set.nil? ? {} : @widget_set.to_module_app_format
end
def get_categories
eval(@widget_set.categories_query) rescue nil
end
def get_tags
eval(@widget_set.tags_query) rescue nil
end
def front_end(&block)
@front_end_app_pages = FrontendUtility::AppPageSet.new(&block)
end end
def side_bar(&block) def side_bar(&block)
@side_bar = SideBarRegisition::SideBar.new(&block) @side_bar = SideBarRegisition::SideBar.new(@name,@key,&block)
@side_bar.module_app_key = @name
@side_bar.finalize!
OrbitApp::Module::SideBarRegisition.add(@side_bar)
end end
def personal_plugin(params) def personal_plugin(params)
@ -49,10 +98,20 @@ module OrbitApp
Plugin::Registration.new_from_module_app(@name,@base_path,params) Plugin::Registration.new_from_module_app(@name,@base_path,params)
end end
def base_url(var) def widgets(&block)
@base_path = var # @widgets = WidgetRegisition::WidgetSet.new(&block)
end @widget_set = WidgetUtility::WidgetSet.new(&block)
end
# @widgets = widget_set.widgets
# @default_widget = widget_set.default_widget
end
%w{module_label category base_url version organization author intro update_info}.each do |field|
define_method(field){|var| instance_variable_set( "@" + field, var)}
end
end # of class DataSheet
end end
end end
end end

View File

@ -37,8 +37,7 @@ module OrbitApp
# def is_manager? # def is_manager?
# binding.pry # binding.pry
# end # end
def initialize( &block) def initialize(name = '',key,&block)
name = ''
@head_label = name @head_label = name
@context_links = [] @context_links = []
@available_for = [] @available_for = []
@ -48,18 +47,16 @@ module OrbitApp
@head_link = "" @head_link = ""
@app_base_path = '' @app_base_path = ''
block.arity < 1 ? instance_eval(&block) : block.call(self) if block_given? block.arity < 1 ? instance_eval(&block) : block.call(self) if block_given?
# setup_module_app(module_app_key)
@module_app_key = key
finalize!
SideBarRegisition.add(self)
end end
def module_app_key=(var) def head_label_i18n(var,options ={})
@module_app_title = var
@module_app = ModuleApp.where(:title=>var).desc(:create_date).first
@module_app_key = @module_app.key
end
def head_label_i18n(var,optoins =nil)
@head_label = var @head_label = var
@icon_class = optoins[:icon_class] @icon_class = options[:icon_class]
end end
def available_for(var) def available_for(var)
@ -85,17 +82,23 @@ module OrbitApp
def finalize! def finalize!
set_controllers_scope set_controllers_scope
set_default_active_app_auth # set_default_active_app_auth
@context_links.each do |t| @context_links.each do |t|
t.set_module_app = @module_app # t.set_module_app = @module_app
t.finalize! t.finalize!
end end
end end
protected protected
def set_default_active_app_auth # def setup_module_app(var)
@active_for_app_auth = @module_app.title # @module_app_title = var
end # @module_app = ModuleApp.where(:key=>var).desc(:create_date).first
# @module_app_key = @module_app.key
# end
# def set_default_active_app_auth
# @active_for_app_auth = @module_app.title
# end
def set_controllers_scope def set_controllers_scope
var = @active_for_controllers var = @active_for_controllers
@ -131,10 +134,10 @@ module OrbitApp
@active_for_action[controller] == action @active_for_action[controller] == action
end end
def set_module_app=(var) # def set_module_app=(var)
@module_app = var # @module_app = var
@module_app_key = var.key # @module_app_key = var.key
end # end
def finalize! def finalize!
set_active_actions set_active_actions

View File

@ -0,0 +1,108 @@
module OrbitApp
module Module
module WidgetUtility
Version = "0.1"
module ClassMethods
@@widgets = []
def add(var)
@@widgets << var
end
def all
return @@widgets
end
end
extend ClassMethods
def self.included( other )
other.extend( ClassMethods )
end
class WidgetSet
attr_reader :widgets,:categories_query,:tags_query
def initialize(&block)
@widgets = []
@default_widget = nil
@categories_query = ''
@tags_query = ''
block.arity < 1 ? instance_eval(&block) : block.call(self) if block_given?
end
%w{categories_query tags_query}.each do |field|
define_method(field){|var| instance_variable_set( "@" + field, var)}
end
def get_categories
@categories_query
end
def get_tags
@tags_query
end
def default_widget(&block)
@default_widget = DefaultWidget.new(&block)
end
def customize_widget(name,label,options ={})
@widgets << Widget.new(name,label,options)
end
def to_module_app_format
hash = {}
@widgets.collect{|t| hash[t.name] = t.to_hash}
hash
end
def get_default_widget
return @default_widget
end
end
class DefaultWidget
def initialize(&block)
@query = nil
@image = nil
block.arity < 1 ? instance_eval(&block) : block.call(self) if block_given?
end
def to_module_app_format
{:query=>@query,:image=>@image} rescue nil
end
def query(var)
@query = var
end
def image(var)
@image = var
end
end
class Widget
attr_reader :name,:default_template,:fields
def initialize(name,label,options ={})
@name = name
@fields = options[:fields]
@label = label
end
def to_hash
{:name => @name,:fields=>@fields,:label=>@label}
end
def finalize!
end
protected
end# of widget
end # of WidgetRegisition
end # of Module
end # of OrbitApp

View File

@ -15,3 +15,6 @@ zh_tw:
search: 搜尋公告 search: 搜尋公告
update_bulletin_success: 公告已成功更新 update_bulletin_success: 公告已成功更新
update_bulletin_category_success: 公告類別已成功更新 update_bulletin_category_success: 公告類別已成功更新
widget:
index: 目錄Widget
bulletins_and_web_links: 公告與連結並排Widget

View File

@ -1,9 +1,36 @@
module Announcement module Announcement
OrbitApp.registration "Announcement",:type=> 'ModuleApp' do OrbitApp.registration "Announcement",:type=> 'ModuleApp' do
module_label 'announcement.announcement'
base_url File.expand_path File.dirname(__FILE__) base_url File.expand_path File.dirname(__FILE__)
personal_plugin :enable => true,:path=>"panel/announcement/plugin/profile",:i18n=>'admin.announcement' personal_plugin :enable => true,:path=>"panel/announcement/plugin/profile",:i18n=>'admin.announcement'
version "0.1"
organization "Rulingcom"
author "RD dep"
intro "I am intro"
update_info 'some update_info'
front_end do
app_page 'bulletins'
end
category ["BulletinCategory"]
widgets do
default_widget do
query 'Bulletin.all'
image :image
end
categories_query 'BulletinCategory.all'
tags_query 'AnnouncementTag.all'
customize_widget "index","announcement.widget.index",:fields=>["title","category","postdate"]
customize_widget "bulletins_and_web_links","announcement.widget.bulletins_and_web_links"
# item "index","announcement.widget.index",:default_template=>true,:fields=>["title","category","postdate"]
# item "bulletins_and_web_links","announcement.widget.bulletins_and_web_links"
end
side_bar do side_bar do
head_label_i18n 'admin.announcement',:icon_class=>"icons-announcement" head_label_i18n 'admin.announcement',:icon_class=>"icons-announcement"
available_for [:admin,:guest,:manager,:sub_manager] available_for [:admin,:guest,:manager,:sub_manager]