From 71d5abae2e94f54d02cbd3137eb645fa588706a7 Mon Sep 17 00:00:00 2001 From: Fu Matthew Date: Tue, 29 Jan 2013 20:33:40 +0800 Subject: [PATCH] first version of app config and modified inits. --- .../admin/page_parts_controller.rb | 59 ++--- app/controllers/admin/pages_controller.rb | 10 +- app/helpers/admin/page_parts_helper.rb | 6 +- app/models/module_app.rb | 229 +++++++----------- .../admin/module_apps/_app_selector.html.erb | 2 +- .../_custom_widget_setting.html.erb | 4 +- .../admin/page_parts/_module_widget.html.erb | 4 +- .../_widget_data_source_tag.html.erb | 2 +- .../page_parts/_widget_ext_options.html.erb | 5 +- .../admin/page_parts/reload_widgets.js.erb | 2 +- app/views/admin/pages/_app_selector.html.erb | 2 +- config/locales/zh_tw.yml | 9 +- lib/orbit_app/module/front_end.rb | 31 ++- lib/orbit_app/module/registration.rb | 27 ++- lib/orbit_app/module/widget.rb | 77 +++++- lib/orbit_app/module_app_membership_tools.rb | 73 ++++++ vendor/built_in_modules/ad_banner/init.rb | 2 +- .../announcement/config/locales/zh_tw.yml | 2 + vendor/built_in_modules/announcement/init.rb | 13 +- .../archive/config/locales/zh_tw.yml | 4 +- vendor/built_in_modules/archive/init.rb | 5 +- .../gallery/app/models/gallery_category.rb | 24 +- .../gallery/config/locales/zh_tw.yml | 4 + vendor/built_in_modules/gallery/init.rb | 17 +- .../miss_module/config/locales/zh_tw.yml | 4 +- vendor/built_in_modules/personal_book/init.rb | 2 +- .../built_in_modules/personal_diploma/init.rb | 2 +- .../personal_experience/init.rb | 1 + .../built_in_modules/personal_honor/init.rb | 2 +- .../built_in_modules/personal_journal/init.rb | 2 +- vendor/built_in_modules/personal_lab/init.rb | 2 +- .../built_in_modules/personal_patent/init.rb | 2 +- .../built_in_modules/personal_project/init.rb | 2 +- .../personal_research/init.rb | 2 +- .../built_in_modules/personal_seminar/init.rb | 2 +- vendor/built_in_modules/web_resource/init.rb | 5 +- 36 files changed, 377 insertions(+), 264 deletions(-) create mode 100644 lib/orbit_app/module_app_membership_tools.rb diff --git a/app/controllers/admin/page_parts_controller.rb b/app/controllers/admin/page_parts_controller.rb index 1ac7d669..6442d2fc 100644 --- a/app/controllers/admin/page_parts_controller.rb +++ b/app/controllers/admin/page_parts_controller.rb @@ -29,37 +29,24 @@ class Admin::PagePartsController < ApplicationController @user_choose = @part.widget_path @r_tag = @part.public_r_tag.blank? ? LIST[:public_r_tags][0] : @part.public_r_tag @tag_objects = @r_tag.classify.constantize.all rescue nil - @widget_path = @part.widget_path ? @part.widget_path : @module_app.widgets.keys[0] - @widget_style = @module_app.get_widget_style[@widget_path][:style] unless @widget_path.nil? - @categories = @module_app.get_registration.get_categories - @tags = @module_app.get_registration.get_tags - # if @module_app.widgets.any?{|b| b.class == Array} - # @widget_style = @module_app.widgets[@widget_path] if !@widget_path.blank? && !@module_app.widgets.blank? - # end - + if @module_app + @widget_path = @part.widget_path ? @part.widget_path : @module_app.widgets.keys[0] + @widget_style = @module_app.get_widget_style[@widget_path][:style] unless @widget_path.nil? or @module_app.nil? + end + + + unless @module_app.nil? + @categories = @module_app.get_categories + @tags = @module_app.get_tags + end + @widget_path = @part.widget_path ? @part.widget_path : (@module_app.widgets.keys[0] rescue nil) if @module_app && @module_app.widgets.any?{|b| b.class == Array} @widget_style = @module_app.widgets[@widget_path] if !@widget_path.blank? && !@module_app.widgets.blank? end - # TODO 應該要有一些東西來決定 @categories @tags - # case @module_app.key - # when 'announcement' - # @categories = BulletinCategory.all - # @tags = AnnouncementTag.all - # when 'gallery' - # @albums = GalleryAlbum.all - # when 'web_resource' - # @categories = WebLinkCategory.all - # @tags = WebResourceTag.all - # when 'archive' - # @categories = ArchiveFileCategory.all - # @tags = ArchiveTag.all - # end if @module_app - - end def create @@ -107,29 +94,13 @@ class Admin::PagePartsController < ApplicationController def reload_widgets @part = PagePart.find params[:id] - @categories =[] @module_app = ModuleApp.find(params[:module_app_id]) rescue nil - - @widget_path = @module_app.widgets.keys[0] if (@module_app && @module_app.widgets[0].blank? ) - + @categories =@module_app ? @module_app.get_categories : [] + @tags =@module_app ? @module_app.get_tags : [] + @widget_path = @module_app.widgets.keys[0] if (@module_app && @module_app.widgets[0].blank? ) @widget_style = @module_app.widgets[@widget_path] if ( !@widget_path.blank? ) - case @module_app.key - when 'announcement' - @categories = BulletinCategory.all - @tags = AnnouncementTag.all - when 'gallery' - @albums = GalleryAlbum.all - @tags = [] - when 'web_resource' - @categories = WebLinkCategory.all - @tags = WebResourceTag.all - when 'archive' - @categories = ArchiveFileCategory.all - @tags = ArchiveTag.all - end if @module_app - - @part.widget_path = @module_app.widgets.first if( @module_app && @module_app.needs_to_widget_option?) + @part.widget_path = @module_app.widgets.first if( @module_app) respond_to do |format| format.js {} end diff --git a/app/controllers/admin/pages_controller.rb b/app/controllers/admin/pages_controller.rb index e1cd0c0d..f2de0c9e 100644 --- a/app/controllers/admin/pages_controller.rb +++ b/app/controllers/admin/pages_controller.rb @@ -29,8 +29,8 @@ helper Admin::PagePartsHelper @design = @item.design ? @item.design : @designs.first if @item.module_app - @app_frontend_urls = @item.module_app.app_pages - @app_frontend_urls << 'default_widget' if @item.module_app.has_default_widget? + @app_frontend_urls = @item.module_app.app_pages.map{|t| [I18n.t(t[0]),t[1]]} + @app_frontend_urls << [I18n.t('default_widget.name'),'default_widget'] if @item.module_app.has_default_widget? end @@ -140,11 +140,9 @@ helper Admin::PagePartsHelper @page = Page.find params[:id] rescue nil # @categories =[] @module_app = ModuleApp.find(params[:module_app_id]) rescue nil - - @app_frontend_urls = @module_app.nil? ? nil : @module_app.app_pages - @app_frontend_urls << 'default_widget' if(@module_app && @module_app.has_default_widget?) + @app_frontend_urls = @module_app.nil? ? nil : @module_app.app_pages.map{|t| [I18n.t(t[0]),t[1]]} + @app_frontend_urls << [I18n.t('default_widget.name'),'default_widget'] if(@module_app && @module_app.has_default_widget?) - case (@module_app.nil? ? nil : @module_app.key ) when 'announcement' @categories = BulletinCategory.all diff --git a/app/helpers/admin/page_parts_helper.rb b/app/helpers/admin/page_parts_helper.rb index 24f21b78..818fe46b 100644 --- a/app/helpers/admin/page_parts_helper.rb +++ b/app/helpers/admin/page_parts_helper.rb @@ -12,7 +12,11 @@ module Admin::PagePartsHelper def widget_field_options(i,local_item=nil) local_item = @part if local_item.nil? && @part local_item = @page if local_item.nil? && @page - options = @module_app.widget_fields.collect{|widget_field| [I18n.t(widget_field[1]), widget_field[0]]} + + options = @module_app.widget_fields.collect do |widget_field| + label = I18n.t("#{@module_app.key}.default_widget.#{widget_field[0]}") + [label, widget_field[0]] + end case local_item when Page diff --git a/app/models/module_app.rb b/app/models/module_app.rb index d188a70b..fb735438 100644 --- a/app/models/module_app.rb +++ b/app/models/module_app.rb @@ -2,74 +2,40 @@ class ModuleApp include Mongoid::Document include Mongoid::Timestamps include OrbitCoreLib::ObjectTokenUtility + include OrbitApp::ModuleAppMembershipTools field :key field :title + field :sidebar_order#,type: Integer - 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 - field :widget_options,type:Hash - field :widget_options_fields_i18n,type:Hash - field :widget_fields_link_method,type:Hash - field :get_default_widget,type:Hash - - - 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 :tags - has_many :page_parts - has_many :pages - - has_one :app_auth,dependent: :delete - - before_save :set_key - - def get_registration - OrbitApp::Module::Registration.find_by_key(key) + def refetch_setting!(reg) + # %w{module_label category base_url version organization author intro update_info create_date}.each do |field| + # self[field.to_sym] = reg.send field + # end + self[:app_pages] = reg.get_app_pages + self[:enable_frontend] = reg.get_enable_frontend + self[:get_widget_style] = reg.get_widgets + self[:using_default_widget] = !reg.get_default_widget.blank? + self[:widgets] = reg.get_widgets end - %w{widget_styles }.each do |field| - define_method(field){|var| get_registration.send("get_#{field}") } + + # def app_pages + # get_registration.get_app_pages + # end + + + def enable_frontend? + self[:enable_frontend] end def get_default_widget - get_registration.get_default_widget + raise 'Need to link with OrbitApp [type: Array]' end - def enable_frontend? - get_registration.get_enable_frontend - 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_style - widgets = get_registration.get_widgets - end def get_widget_for_select - widgets = get_registration.get_widgets + widgets = get_widget_style ary = widgets.collect do |k,v| if k == 'default_widget' [I18n.t('widget.default_widget'),'default_widget'] @@ -80,104 +46,85 @@ class ModuleApp end end - def is_manager?(user) - if user.nil? - return false - else - m_users = managing_users - if m_users.blank? - false - else - m_users.include?(user) - end - end + # def get_widget_style + # get_registration.get_widgets + # end + + def has_default_widget? + self[:widgets].has_key? 'default_widget' end - - def is_sub_manager?(user) - if user.nil? - return false - else # when user is guest - s_m_users = sub_managing_users - result = false - if s_m_users.blank? - result = false - else - result = s_m_users.include?(user) - end - result || is_manager?(user) - end - end - - def managing_users - self.managers.collect{ |t| t.user } - end - - def sub_managing_users - self.sub_managers.collect{ |t| t.user } - end - - def assign_manager(user,assigner) - manager = AppManager.first(conditions: {managing_app_id: self.id,user_id: user.id}) rescue nil - if manager.nil? - manager = self.managers.create(:user_id => user.id,:rule_creator_id => (assigner.id rescue nil)) - end - manager - end - - def assign_sub_manager(user,assigner) - submanager = AppManager.first(conditions: {sub_managing_app_id: self.id,user_id: user.id}) rescue nil - if submanager.nil? && !self.managing_users.include?(user) - submanager = self.sub_managers.create(:user_id => user.id,:rule_creator_id => (assigner.id rescue nil) ) - end - submanager - end - - def remove_manager(user) - manager = AppManager.first(conditions: {managing_app_id: self.id,user_id: user.id}) rescue nil - if manager - manager.destroy - else - false - end - end - - def remove_sub_manager(user) - submanager = AppManager.first(conditions: {sub_managing_app_id: self.id,user_id: user.id}) rescue nil - if submanager - submanager.destroy - else - false - end - end - def label I18n.t(label_i18n) end - def needs_to_widget_option? - if self.widget_options - self.widget_options.has_key? widgets.first - else - false - end + def label_i18n + reg = get_registration + reg.nil? ? 'Init is not defined completely' : get_registration.get_label_i18n end - def has_default_widget? - case self[:widgets] - when Array - false - when Hash - self[:widgets].has_key? 'default_widget' - end - + + # def needs_to_widget_option? + # if self.widget_options + # self.widget_options.has_key? widgets.first + # else + # false + # end + # end + + def using_default_widget? + # !get_registration.get_default_widget.blank? + self[:get_default_widget] end - protected + def widget_fields + # binding.pry + # raise 'Need to link with OrbitApp [type: Array]' + get_registration.get_default_widget_fields + end + + # def widgets + # # get_registration.get_widgets + # # get_registration.get_default_widget + # end + + def widget_options(widget_path=nil) + get_registration.get_widget_by_path(widget_path) + # raise 'Need to link with OrbitApp [type: Hash]' + end + + def widget_options_fields_i18n + raise 'Need to link with OrbitApp [type: Hash]' + end + + def widget_fields_link_method + raise 'Need to link with OrbitApp [type: Hash]' + end + + + 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 - def set_key - self.key = self.title.underscore.singularize if self.title + # # has_many :tags + has_many :page_parts + has_many :pages + + has_one :app_auth,dependent: :delete + + def get_tags + get_registration.get_tags end + def get_categories + get_registration.get_categories + end + + def module_name + I18n.t(get_registration.get_label_i18n) + end + + def get_registration + OrbitApp::Module::Registration.find_by_key(key) + end end diff --git a/app/views/admin/module_apps/_app_selector.html.erb b/app/views/admin/module_apps/_app_selector.html.erb index c20a3885..60cf2d6f 100644 --- a/app/views/admin/module_apps/_app_selector.html.erb +++ b/app/views/admin/module_apps/_app_selector.html.erb @@ -1 +1 @@ -<%= f.select :module_app_id, @apps.collect { |t| [t.title.capitalize, t.id] }, {:include_blank => true} ,{:rel => admin_module_apps_path } %> +<%= f.select :module_app_id, @apps.collect { |t| [t.module_name, t.id] }, {:include_blank => true} ,{:rel => admin_module_apps_path } %> diff --git a/app/views/admin/page_parts/_custom_widget_setting.html.erb b/app/views/admin/page_parts/_custom_widget_setting.html.erb index 33615e5b..998b5853 100644 --- a/app/views/admin/page_parts/_custom_widget_setting.html.erb +++ b/app/views/admin/page_parts/_custom_widget_setting.html.erb @@ -6,11 +6,11 @@ <% if @module_app.nil? || @module_app.widgets.nil? || (@module_app.widgets[@widget_path].blank? rescue true) %> <%= t("default_widget.no_support_setting")%> <%else%> - <%= select('page_part', 'widget_style', @module_app.widgets[@widget_path]) %> + <%= select('page_part', 'widget_style', @module_app.widgets[@widget_path]["style"]) %> <% end %> - <% if(@module_app && @module_app.widget_options && @module_app.widget_options.has_key?(@widget_path)) %> + <% if(@module_app && @module_app.widget_options(@widget_path)) %>
diff --git a/app/views/admin/page_parts/_module_widget.html.erb b/app/views/admin/page_parts/_module_widget.html.erb index 1db248b5..38fb013f 100644 --- a/app/views/admin/page_parts/_module_widget.html.erb +++ b/app/views/admin/page_parts/_module_widget.html.erb @@ -17,7 +17,7 @@ <%= t "default_widget.select_module_app" %>
- <%= f.select :module_app, options_from_collection_for_select(@module_apps, :id, :title, :selected => (@module_app.id rescue nil)), {:include_blank => true }, {:rel => admin_page_parts_path,:id=>"page_module_app_id"} %> + <%= f.select :module_app, options_from_collection_for_select(@module_apps, :id, :module_name, :selected => (@module_app.id rescue nil)), {:include_blank => true }, {:rel => admin_page_parts_path,:id=>"page_module_app_id"} %>
@@ -26,7 +26,7 @@ <%= t "default_widget.select_widget_path" %>
- <%= f.select :widget_path, @module_app ? @module_app.widgets.collect{|k,v| [k.humanize, k]} : [], {}, { :selected => @part.widget_path, :rel => admin_page_parts_path } %> + <%= f.select :widget_path, @module_app ? @module_app.widgets.collect{|k,v| [I18n.t(v["i18n"]),k]} : [], {}, { :selected => @part.widget_path, :rel => admin_page_parts_path } %>
diff --git a/app/views/admin/page_parts/_widget_data_source_tag.html.erb b/app/views/admin/page_parts/_widget_data_source_tag.html.erb index 521d2ff4..bcb3e9c3 100644 --- a/app/views/admin/page_parts/_widget_data_source_tag.html.erb +++ b/app/views/admin/page_parts/_widget_data_source_tag.html.erb @@ -14,7 +14,7 @@ <%= content_tag_for(:label, @tags,:class=>"radio inline") do |tag|%> <%= radio_button_tag("#{field_name}[tag]", tag.id, tag_checked_value(object,tag.id) ) %> <%= tag[I18n.locale]%> - <% end %> + <% end if @tags%> <% else %> <%= t("default_widget.no_support_setting")%> diff --git a/app/views/admin/page_parts/_widget_ext_options.html.erb b/app/views/admin/page_parts/_widget_ext_options.html.erb index c38d0543..6985939b 100644 --- a/app/views/admin/page_parts/_widget_ext_options.html.erb +++ b/app/views/admin/page_parts/_widget_ext_options.html.erb @@ -1,5 +1,6 @@ - <% @module_app.widget_options[@widget_path].each do |key,options| %> - <%= label_tag(t(@module_app.widget_options_fields_i18n[@widget_path][key]))%> + <% @module_app.widget_options(@widget_path).get_options.each do |key,settings| %> + <% options = settings[:opts] %> + <%= label_tag(t(settings[:label_i18n]))%> <% case options%> <% when Hash%> <%= select_tag "page_part[widget_options][#{key}]", options_from_collection_for_select(eval(options["query"]), options["value"], options["label"].to_s, :selected => (@part.widget_options[key] rescue nil)) %> diff --git a/app/views/admin/page_parts/reload_widgets.js.erb b/app/views/admin/page_parts/reload_widgets.js.erb index 40e9ec8f..c32e07c2 100644 --- a/app/views/admin/page_parts/reload_widgets.js.erb +++ b/app/views/admin/page_parts/reload_widgets.js.erb @@ -1,5 +1,5 @@ <% if @module_app%> - $('#widget_list select').html("<%= j options_for_select(@module_app.widgets.collect{|k,v| k},@part.widget_path) %>"); + $('#widget_list select').html("<%= j options_for_select(@module_app.widgets.collect{|k,v| [I18n.t(v['i18n']),k]},@part.widget_path) %>"); $("#widget_data_source_category").html("<%= j render :partial => 'widget_data_source_category',:locals=>{:object=>@part} %>"); $("#widget_data_source_tag").html("<%= j render :partial => 'widget_data_source_tag',:locals=>{:object=>@part} %>"); diff --git a/app/views/admin/pages/_app_selector.html.erb b/app/views/admin/pages/_app_selector.html.erb index 6c0d1b40..9cb4c694 100644 --- a/app/views/admin/pages/_app_selector.html.erb +++ b/app/views/admin/pages/_app_selector.html.erb @@ -1 +1 @@ -<%= f.select :module_app_id, @apps.collect { |t| [t.title.capitalize, t.id] }, {:include_blank => true} ,{:rel => admin_pages_path } %> +<%= f.select :module_app_id, @apps.collect { |t| [t.module_name, t.id] }, {:include_blank => true} ,{:rel => admin_pages_path } %> diff --git a/config/locales/zh_tw.yml b/config/locales/zh_tw.yml index 80ec221c..0bbb1755 100644 --- a/config/locales/zh_tw.yml +++ b/config/locales/zh_tw.yml @@ -1,7 +1,11 @@ zh_tw: _locale: 中文 - + rulingcom: + errors: + init: + app_page_noname: 未命名前台頁面 + module_app_noname: 未命名模組 front_page: select_app_url: 模組前台樣式 is_published: 是否公開 @@ -112,6 +116,7 @@ zh_tw: delete: 刪除 delete_file: 刪除檔案 default_widget: + name: 預設樣式 no_support_setting: 沒有可以使用的設定 no_value: 不設定(全部) fields_: 前台輸出欄位 @@ -361,7 +366,7 @@ zh_tw: link: 連結已更新成功 page: 頁面已更新成功 user: 使用者已更新成功 - success_: 更新成功 + # success_: 更新成功 paper: Paper was successfully updated. user: User was successfully updated. success_: S使用者已更新成功 diff --git a/lib/orbit_app/module/front_end.rb b/lib/orbit_app/module/front_end.rb index 65f79f8e..0c5b245c 100644 --- a/lib/orbit_app/module/front_end.rb +++ b/lib/orbit_app/module/front_end.rb @@ -4,13 +4,14 @@ module OrbitApp Version = "0.1" module ClassMethods - @@frontend_pages = [] + @@frontend_pages = [] + #Record all frontend pages of orbit - def add(var) + def add(var) #build @@frontend_pages @@frontend_pages << var end - def all + def all #return all frontend_pages of orbit return @@frontend_pages end @@ -21,18 +22,18 @@ module OrbitApp other.extend( ClassMethods ) end - class AppPageSet + class AppPageSet # From Registration def initialize(&block) - @frontend_pages = [] + @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) + def app_page(name,&block) + @frontend_pages << AppPage.new(name,&block) end - def to_module_app_format - @frontend_pages.collect{|t| t.name} + def to_module_app_format #For ModuleApp to fetch data + @frontend_pages.collect{|t| [t.get_i18n,t.name]} end end @@ -40,10 +41,20 @@ module OrbitApp class AppPage attr_reader :name - def initialize(name,options ={}) + def initialize(name,&block) @name = name + @frontend_i18n = 'rulingcom.errors.init.app_page_noname' + block.arity < 1 ? instance_eval(&block) : block.call(self) if block_given? end + def frontend_i18n(i18n) + @frontend_i18n = i18n + end + + def get_i18n + @frontend_i18n + end + def finalize! end diff --git a/lib/orbit_app/module/registration.rb b/lib/orbit_app/module/registration.rb index 4c64f629..4911042b 100644 --- a/lib/orbit_app/module/registration.rb +++ b/lib/orbit_app/module/registration.rb @@ -35,6 +35,7 @@ module OrbitApp @key = name.underscore.singularize @side_bar = nil @front_end_app_pages = nil + @module_label = 'rulingcom.errors.init.module_app_noname' block.arity < 1 ? instance_eval(&block) : block.call(self) if block_given? setup_module_app end @@ -46,7 +47,7 @@ module OrbitApp def setup_module_app module_app = get_module_app module_app = ModuleApp.new(:key=>@key,:title=>name) if module_app.nil? - + module_app.refetch_setting!(self) begin module_app.save(:validate=>false) rescue @@ -59,6 +60,10 @@ module OrbitApp @module_label end + def get_default_widget_fields + return @widget_set.get_fields + end + def get_default_widget if @widget_set.nil? # Init not defining widget return {} @@ -77,32 +82,40 @@ module OrbitApp @front_end_app_pages.nil? ? [] : @front_end_app_pages.to_module_app_format end + def get_widget_by_path(path) + if @widget_set + @widget_set.find_by_path(path) + else + nil + end + end + def get_widgets @widget_set.nil? ? {} : @widget_set.to_module_app_format end def get_categories - @widget_set.get_categories + @widget_set.get_categories rescue [] end def get_tags - @widget_set.get_tags + @widget_set.get_tags rescue [] end - def front_end(&block) + def front_end(&block) #setter for front_end from init @front_end_app_pages = FrontendUtility::AppPageSet.new(&block) end - def side_bar(&block) + def side_bar(&block) #setter for side_bar from init @side_bar = SideBarRegisition::SideBar.new(@name,@key,method(:get_module_app),&block) end - def personal_plugin(params) + def personal_plugin(params) #setter for personal_plugin from init # TODO 這裡要看是一些檔案是不是都有 Plugin::Registration.new_from_module_app(@name,@base_path,params) end - def widgets(&block) + def widgets(&block) #setter for widget from init # @widgets = WidgetRegisition::WidgetSet.new(&block) @widget_set = WidgetUtility::WidgetSet.new(&block) diff --git a/lib/orbit_app/module/widget.rb b/lib/orbit_app/module/widget.rb index 5c6932bd..a02a2427 100644 --- a/lib/orbit_app/module/widget.rb +++ b/lib/orbit_app/module/widget.rb @@ -34,6 +34,12 @@ module OrbitApp define_method(field){|var| instance_variable_set( "@" + field, var)} end + def find_by_path(path) + @widgets.each do |widget| + return widget if widget.name == path + end + end + def get_categories eval(@categories_query) rescue nil end @@ -46,9 +52,17 @@ module OrbitApp @default_widget = DefaultWidget.new(&block) end - def customize_widget(name,label,options ={}) - @widgets << Widget.new(name,label,options) - end + def customize_widget(name,&block) + @widgets << Widget.new(name,&block) + end + + # def customize_widget(name,label,options ={}) + # @widgets << Widget.new(name,label,options) + # end + + # def customize_widget_options_fields_i18n(settings) + # @customize_widget_options_fields_i18n = settings + # end def to_module_app_format hash = {} @@ -57,10 +71,13 @@ module OrbitApp hash end + def get_fields + get_default_widget.get_fields + end + def get_default_widget return @default_widget end - end class DefaultWidget @@ -69,9 +86,16 @@ module OrbitApp def initialize(&block) @query = nil @image = nil + @more_link = {} + @fields = [] block.arity < 1 ? instance_eval(&block) : block.call(self) if block_given? end + def more_link_to(label_i18n,path_method) + @more_link[:label_i18n] = label_i18n + @more_link[:path_method] = path_method + end + def self.get_interface_args #will need to work with design {:name=>"default_widget",:field=>nil,:label=>'label',:style=>STYLE} @@ -81,6 +105,18 @@ module OrbitApp {:query=>@query,:image=>@image} rescue nil end + def link_field(field_name,setting) + @fields << [field_name,setting,:link] + end + + def field(field_name) + @fields << [field_name,nil,:field] + end + + def get_fields + @fields + end + def query(var) @query = var end @@ -94,19 +130,38 @@ module OrbitApp class Widget attr_reader :name,:default_template,:fields - def initialize(name,label,options ={}) + def initialize(name,&block) @name = name - @fields = options[:fields] - @label = label - @style= options[:style] + @options = {} + block.arity < 1 ? instance_eval(&block) : block.call(self) if block_given? + + # @fields = options[:fields] + # @label = label + # @style= options[:style] end - def to_hash - {:name => @name,:fields=>@fields,:label=>@label,:style=>@style} + def widget_i18n(str) # "gallery.widget.widget1" + @widget_i18n = str + end + + def style(ary)# [] + @style = ary + end + + def get_options + @options end - def finalize! + def options(opt_name,*options) # "vertical", + option = options[0] + @options[opt_name] = {:label_i18n=>option[:i18n] , :opts=>option[:options_item]} + # options => :i18n => "gallery.widget_option.vertical",:options_item=>[1, 2] + # :i18n =>"gallery.widget_option.album",:options_item => {"query"=>"GalleryAlbum.all", "value"=>:id, "label"=>:name} + end + + def to_hash + {:name => @name,:fields=>@fields,:label=>@label,:style=>@style,:i18n=>@widget_i18n} end protected diff --git a/lib/orbit_app/module_app_membership_tools.rb b/lib/orbit_app/module_app_membership_tools.rb new file mode 100644 index 00000000..a7a9a378 --- /dev/null +++ b/lib/orbit_app/module_app_membership_tools.rb @@ -0,0 +1,73 @@ +module OrbitApp + module ModuleAppMembershipTools + def is_manager?(user) + if user.nil? + return false + else + m_users = managing_users + if m_users.blank? + false + else + m_users.include?(user) + end + end + end + + def is_sub_manager?(user) + if user.nil? + return false + else # when user is guest + s_m_users = sub_managing_users + result = false + if s_m_users.blank? + result = false + else + result = s_m_users.include?(user) + end + result || is_manager?(user) + end + end + + def managing_users + self.managers.collect{ |t| t.user } + end + + def sub_managing_users + self.sub_managers.collect{ |t| t.user } + end + + def assign_manager(user,assigner) + manager = AppManager.first(conditions: {managing_app_id: self.id,user_id: user.id}) rescue nil + if manager.nil? + manager = self.managers.create(:user_id => user.id,:rule_creator_id => (assigner.id rescue nil)) + end + manager + end + + def assign_sub_manager(user,assigner) + submanager = AppManager.first(conditions: {sub_managing_app_id: self.id,user_id: user.id}) rescue nil + if submanager.nil? && !self.managing_users.include?(user) + submanager = self.sub_managers.create(:user_id => user.id,:rule_creator_id => (assigner.id rescue nil) ) + end + submanager + end + + def remove_manager(user) + manager = AppManager.first(conditions: {managing_app_id: self.id,user_id: user.id}) rescue nil + if manager + manager.destroy + else + false + end + end + + def remove_sub_manager(user) + submanager = AppManager.first(conditions: {sub_managing_app_id: self.id,user_id: user.id}) rescue nil + if submanager + submanager.destroy + else + false + end + end + end +end \ No newline at end of file diff --git a/vendor/built_in_modules/ad_banner/init.rb b/vendor/built_in_modules/ad_banner/init.rb index e4c7f8cc..4a9aafba 100644 --- a/vendor/built_in_modules/ad_banner/init.rb +++ b/vendor/built_in_modules/ad_banner/init.rb @@ -1,6 +1,6 @@ module AdBanner OrbitApp.registration "AdBanner",:type=> 'ModuleApp' do - module_label 'ad_banner.ad_banner' + module_label 'miss_module_i18n.ad_banner' base_url File.expand_path File.dirname(__FILE__) # personal_plugin :enable => true,:path=>"panel/ad_banner/plugin/profile",:i18n=>'admin.ad_banner' diff --git a/vendor/built_in_modules/announcement/config/locales/zh_tw.yml b/vendor/built_in_modules/announcement/config/locales/zh_tw.yml index 8b1b6131..995bf2f5 100644 --- a/vendor/built_in_modules/announcement/config/locales/zh_tw.yml +++ b/vendor/built_in_modules/announcement/config/locales/zh_tw.yml @@ -11,6 +11,8 @@ zh_tw: editing_announcement_category: 編輯公告類別 error: no_avilb_cate_for_posting: 公告必需有一個類別才能發送,請與管理員聯絡 + front_end: + bulletins: 請LIN給名字前台頁 new_bulletin_category: 新增公告類別 search: 搜尋公告 update_bulletin_success: 公告已成功更新 diff --git a/vendor/built_in_modules/announcement/init.rb b/vendor/built_in_modules/announcement/init.rb index dad19454..c1174dac 100644 --- a/vendor/built_in_modules/announcement/init.rb +++ b/vendor/built_in_modules/announcement/init.rb @@ -12,7 +12,9 @@ module Announcement update_info 'some update_info' front_end do - app_page 'bulletins' + app_page 'bulletins' do + frontend_i18n "announcement.front_end.bulletins" + end end category ["BulletinCategory"] @@ -21,13 +23,18 @@ module Announcement default_widget do query 'Bulletin.all' image :image + field :postdate + link_field :title,{:method => 'panel_announcement_front_end_bulletin_path',:args=>:self} + link_field :bulletin_category_with_title,{:method => 'panel_announcement_front_end_bulletins_path',:args=>{:category_id => [:bulletin_category,:id]}} end categories_query 'BulletinCategory.all' tags_query 'AnnouncementTag.all' - customize_widget "index","announcement.widget.index",:fields=>["title","category","postdate"],:style=>["cu_style_1","cu_style_2","cu_style_3","cu_style_4","cu_style_5"] - customize_widget "bulletins_and_web_links","announcement.widget.bulletins_and_web_links" + customize_widget "index" do + widget_i18n "announcement.widget.index" + style ["1","2"] + end # item "index","announcement.widget.index",:default_template=>true,:fields=>["title","category","postdate"] # item "bulletins_and_web_links","announcement.widget.bulletins_and_web_links" end diff --git a/vendor/built_in_modules/archive/config/locales/zh_tw.yml b/vendor/built_in_modules/archive/config/locales/zh_tw.yml index 4ef309e6..807fca2b 100644 --- a/vendor/built_in_modules/archive/config/locales/zh_tw.yml +++ b/vendor/built_in_modules/archive/config/locales/zh_tw.yml @@ -1,7 +1,9 @@ zh_tw: _locale: 中文 - + archive: + widget: + archive_files: 檔案室Wiget add: 新增 back: 回去 create: 創造 diff --git a/vendor/built_in_modules/archive/init.rb b/vendor/built_in_modules/archive/init.rb index 5efd18f7..53d57479 100644 --- a/vendor/built_in_modules/archive/init.rb +++ b/vendor/built_in_modules/archive/init.rb @@ -26,7 +26,10 @@ module Archive # categories_query 'BulletinCategory.all' # tags_query 'ArchiveTag.all' - customize_widget "archive_files","archive.widget.archive_files",:style=>[] + customize_widget "archive_files" do + widget_i18n "archive.widget.archive_files" + style [] + end end side_bar do diff --git a/vendor/built_in_modules/gallery/app/models/gallery_category.rb b/vendor/built_in_modules/gallery/app/models/gallery_category.rb index 622ec4a4..07c5df8c 100644 --- a/vendor/built_in_modules/gallery/app/models/gallery_category.rb +++ b/vendor/built_in_modules/gallery/app/models/gallery_category.rb @@ -1,17 +1,21 @@ class GalleryCategory - include Mongoid::Document - include Mongoid::Timestamps + include Mongoid::Document + include Mongoid::Timestamps - include OrbitCoreLib::ObjectAuthable + include OrbitCoreLib::ObjectAuthable - ObjectAuthTitlesOptions = %W{new_album} - APP_NAME = "album" + ObjectAuthTitlesOptions = %W{new_album} + APP_NAME = "album" - field :name, localize: true + field :name, localize: true - has_many :gallery_albums, :autosave => true, :dependent => :destroy + has_many :gallery_albums, :autosave => true, :dependent => :destroy - def pp_object - name - end + def title + name + end + + def pp_object + name + end end \ No newline at end of file diff --git a/vendor/built_in_modules/gallery/config/locales/zh_tw.yml b/vendor/built_in_modules/gallery/config/locales/zh_tw.yml index 164c93cc..33a480ae 100644 --- a/vendor/built_in_modules/gallery/config/locales/zh_tw.yml +++ b/vendor/built_in_modules/gallery/config/locales/zh_tw.yml @@ -23,6 +23,8 @@ zh_tw: edit: 編輯 delete_selected: 刪除選擇項目 del_album?: "要刪除這本相簿嗎?" + front_end: + albums: 相簿前台 album_not_found: 找不到此相簿 pic_not_found: 找不到該照片 save: 儲存 @@ -33,6 +35,8 @@ zh_tw: set_cover: 設為封面 sure?: "你確定嗎?" no_description: 沒有描述 + widget: + widget1: Widget1 widget_option: horizontal: 水平圖片數量 vertical: 垂直圖片數量 diff --git a/vendor/built_in_modules/gallery/init.rb b/vendor/built_in_modules/gallery/init.rb index 3e7fa633..615d6593 100644 --- a/vendor/built_in_modules/gallery/init.rb +++ b/vendor/built_in_modules/gallery/init.rb @@ -11,7 +11,9 @@ module Gallery update_info 'some update_info' front_end do - app_page 'albums' + app_page 'albums' do + frontend_i18n "gallery.front_end.albums" + end end category ["gallery_categories"] @@ -25,8 +27,17 @@ module Gallery categories_query 'GalleryCategory.all' # tags_query 'GalleryTag.all' - customize_widget "albums","gallery.widget.albums",:fields=>[],:style=>[] - + #* customize_widget "albums","gallery.widget.albums",:fields=>[],:style=>[],:options=>{"widget1"=>{"vertical"=>[1, 2], "horizontal"=>[1, 2, 3, 4, 5, 6], "album_id"=>{"query"=>"GalleryAlbum.all", "value"=>:id, "label"=>:name}}} + #* customize_widget_options_fields_i18n({"widget1"=>{"vertical"=>"gallery.widget_option.vertical", "horizontal"=>"gallery.widget_option.horizontal", "album_id"=>"gallery.widget_option.album"}} ) + + customize_widget "widget1" do + widget_i18n "gallery.widget.widget1" + style [] + options "vertical",:i18n => "gallery.widget_option.vertical",:options_item=>[1, 2] + options "horizontal",:i18n => "gallery.widget_option.horizontal",:options_item=>[1, 2,3,4,5,6] + options "album_id",:i18n =>"gallery.widget_option.album",:options_item => {"query"=>"GalleryAlbum.all", "value"=>:id, "label"=>:name} + end + end side_bar do diff --git a/vendor/built_in_modules/miss_module/config/locales/zh_tw.yml b/vendor/built_in_modules/miss_module/config/locales/zh_tw.yml index 18cbc760..aeea83c6 100644 --- a/vendor/built_in_modules/miss_module/config/locales/zh_tw.yml +++ b/vendor/built_in_modules/miss_module/config/locales/zh_tw.yml @@ -7,8 +7,8 @@ zh_tw: calendar: 日曆模組 calendars: 日曆 gallery: 相簿 - location: Location - + location: (未命名)Location + ad_banner: 廣告輪播 miss_plugin_i18n: personal_book: Personal Book diff --git a/vendor/built_in_modules/personal_book/init.rb b/vendor/built_in_modules/personal_book/init.rb index b362fedc..47bff5bd 100644 --- a/vendor/built_in_modules/personal_book/init.rb +++ b/vendor/built_in_modules/personal_book/init.rb @@ -1,6 +1,6 @@ module PersonalBook OrbitApp.registration "Book",:type=> 'ModuleApp' do - + module_label 'miss_plugin_i18n.personal_book' base_url File.expand_path File.dirname(__FILE__) personal_plugin :enable => true,:path=>"panel/personal_book/plugin/profile",:i18n=>'miss_module_i18n.personal_book' diff --git a/vendor/built_in_modules/personal_diploma/init.rb b/vendor/built_in_modules/personal_diploma/init.rb index 0147cbf8..adf2ce23 100644 --- a/vendor/built_in_modules/personal_diploma/init.rb +++ b/vendor/built_in_modules/personal_diploma/init.rb @@ -1,6 +1,6 @@ module PersonalDiploma OrbitApp.registration "Diploma",:type=> 'ModuleApp' do - + module_label 'miss_plugin_i18n.personal_diploma' base_url File.expand_path File.dirname(__FILE__) personal_plugin :enable => true,:path=>"panel/personal_diploma/plugin/profile",:i18n=>'miss_plugin_i18n.personal_diploma' diff --git a/vendor/built_in_modules/personal_experience/init.rb b/vendor/built_in_modules/personal_experience/init.rb index 0afedc1c..b1cc47a2 100644 --- a/vendor/built_in_modules/personal_experience/init.rb +++ b/vendor/built_in_modules/personal_experience/init.rb @@ -1,5 +1,6 @@ module PersonalExperience OrbitApp.registration "Experience",:type=> 'ModuleApp' do + module_label 'miss_plugin_i18n.personal_experience' base_url File.expand_path File.dirname(__FILE__) personal_plugin :enable => true,:path=>"panel/personal_experience/plugin/profile",:i18n=>'miss_plugin_i18n.personal_experience' diff --git a/vendor/built_in_modules/personal_honor/init.rb b/vendor/built_in_modules/personal_honor/init.rb index 7d2de98a..7c27a359 100644 --- a/vendor/built_in_modules/personal_honor/init.rb +++ b/vendor/built_in_modules/personal_honor/init.rb @@ -1,6 +1,6 @@ module PersonalHonor OrbitApp.registration "Honor",:type=> 'ModuleApp' do - + module_label 'miss_plugin_i18n.personal_honor' base_url File.expand_path File.dirname(__FILE__) personal_plugin :enable => true,:path=>"panel/personal_honor/plugin/profile",:i18n=>'miss_plugin_i18n.personal_honor' diff --git a/vendor/built_in_modules/personal_journal/init.rb b/vendor/built_in_modules/personal_journal/init.rb index 8fdd1787..42e8bdc3 100644 --- a/vendor/built_in_modules/personal_journal/init.rb +++ b/vendor/built_in_modules/personal_journal/init.rb @@ -1,6 +1,6 @@ module PersonalJournal OrbitApp.registration "Journal",:type=> 'ModuleApp' do - + module_label 'miss_plugin_i18n.personal_journal' base_url File.expand_path File.dirname(__FILE__) personal_plugin :enable => true,:path=>"panel/personal_journal/plugin/profile",:i18n=>'miss_plugin_i18n.personal_journal' diff --git a/vendor/built_in_modules/personal_lab/init.rb b/vendor/built_in_modules/personal_lab/init.rb index a01aced8..989dc90f 100644 --- a/vendor/built_in_modules/personal_lab/init.rb +++ b/vendor/built_in_modules/personal_lab/init.rb @@ -1,6 +1,6 @@ module PersonalLab OrbitApp.registration "Lab",:type=> 'ModuleApp' do - + module_label 'miss_plugin_i18n.personal_lab' base_url File.expand_path File.dirname(__FILE__) personal_plugin :enable => true,:path=>"panel/personal_lab/plugin/profile",:i18n=>'miss_plugin_i18n.personal_lab' diff --git a/vendor/built_in_modules/personal_patent/init.rb b/vendor/built_in_modules/personal_patent/init.rb index 7587fff0..ff12d639 100644 --- a/vendor/built_in_modules/personal_patent/init.rb +++ b/vendor/built_in_modules/personal_patent/init.rb @@ -1,6 +1,6 @@ module PersonalPatent OrbitApp.registration "Patent",:type=> 'ModuleApp' do - + module_label 'miss_plugin_i18n.personal_patent' base_url File.expand_path File.dirname(__FILE__) personal_plugin :enable => true,:path=>"panel/personal_patent/plugin/profile",:i18n=>'miss_plugin_i18n.personal_patent' diff --git a/vendor/built_in_modules/personal_project/init.rb b/vendor/built_in_modules/personal_project/init.rb index db357d43..b0b8d69e 100644 --- a/vendor/built_in_modules/personal_project/init.rb +++ b/vendor/built_in_modules/personal_project/init.rb @@ -1,6 +1,6 @@ module PersonalProject OrbitApp.registration "Research Project",:type=> 'ModuleApp' do - + module_label 'miss_plugin_i18n.personal_project' base_url File.expand_path File.dirname(__FILE__) personal_plugin :enable => true,:path=>"panel/personal_project/plugin/profile",:i18n=>'miss_plugin_i18n.personal_project' diff --git a/vendor/built_in_modules/personal_research/init.rb b/vendor/built_in_modules/personal_research/init.rb index 96e8f7a0..5787cd05 100644 --- a/vendor/built_in_modules/personal_research/init.rb +++ b/vendor/built_in_modules/personal_research/init.rb @@ -1,6 +1,6 @@ module PersonalResearch OrbitApp.registration "Research",:type=> 'ModuleApp' do - + module_label 'miss_plugin_i18n.personal_research' base_url File.expand_path File.dirname(__FILE__) personal_plugin :enable => true,:path=>"panel/personal_research/plugin/profile",:i18n=>'miss_plugin_i18n.personal_research' diff --git a/vendor/built_in_modules/personal_seminar/init.rb b/vendor/built_in_modules/personal_seminar/init.rb index 5aa57aeb..b66d9d76 100644 --- a/vendor/built_in_modules/personal_seminar/init.rb +++ b/vendor/built_in_modules/personal_seminar/init.rb @@ -1,6 +1,6 @@ module PersonalSeminar OrbitApp.registration "Seminar",:type=> 'ModuleApp' do - + module_label 'miss_plugin_i18n.personal_seminar' base_url File.expand_path File.dirname(__FILE__) personal_plugin :enable => true,:path=>"panel/personal_seminar/plugin/profile",:i18n=>'miss_plugin_i18n.personal_seminar' diff --git a/vendor/built_in_modules/web_resource/init.rb b/vendor/built_in_modules/web_resource/init.rb index 3362849a..abbf2332 100644 --- a/vendor/built_in_modules/web_resource/init.rb +++ b/vendor/built_in_modules/web_resource/init.rb @@ -21,8 +21,9 @@ module WebResource categories_query 'BulletinCategory.all' tags_query 'WebResourceTag.all' - customize_widget "home_list","web_resource.widget.home_list" - + customize_widget "home_list" do + widget_i18n "web_resource.widget.home_list" + end end side_bar do