diff --git a/app/controllers/admin/personal_plugin_fields_controller.rb b/app/controllers/admin/personal_plugin_fields_controller.rb index 28ff3cf..1f8c95f 100644 --- a/app/controllers/admin/personal_plugin_fields_controller.rb +++ b/app/controllers/admin/personal_plugin_fields_controller.rb @@ -43,19 +43,18 @@ class Admin::PersonalPluginFieldsController < OrbitAdminController cp_template_dir_path = "#{Rails.root}/tmp/#{@personal_plugin_field.module_name}/" FileUtils.rm_rf(cp_template_dir_path) FileUtils.cp_r(template_dir_path,cp_template_dir_path) - dirs = Dir.glob("#{cp_template_dir_path}*/") files = Dir.glob("#{cp_template_dir_path}*").select { |fn| File.file?(fn) } - + begin in_use_locales = Site.first.in_use_locales - + primary_modal_fields = @personal_plugin_field.primary_modal_fields.select{|f| (f[:field_name].present? rescue false)} yml_files = Dir.glob("#{cp_template_dir_path}config/locales/*.yml") yml_files.each do |yml_file| locale = yml_file.split("/").last.split(".yml").first yml_text = File.read(yml_file) translate_hash = {} - @personal_plugin_field.primary_modal_fields.each do |field_value| - if field_value[:field_name] && (field_value[:translation_name][locale].present? rescue false) + primary_modal_fields.each do |field_value| + if (field_value[:translation_name][locale].present? rescue false) translate_hash[field_value[:field_name]] = field_value[:translation_name][locale] end end @@ -88,10 +87,14 @@ class Admin::PersonalPluginFieldsController < OrbitAdminController end end @blank_text = " " - slug_title = @personal_plugin_field.primary_modal_fields.select{|field_value| field_value[:slug_title] == "1" rescue false}.first[:field_name].to_s rescue "" - plugin_template_related_files = @personal_plugin_field.primary_modal_fields.select{|field_value| field_value[:field_type] == "file" rescue false}.map{|v| v[:field_name]} + slug_title = primary_modal_fields.select{|field_value| field_value[:slug_title] == "1" rescue false}.first[:field_name].to_s rescue "" + plugin_template_related_files = primary_modal_fields.select{|field_value| field_value[:field_type] == "file" rescue false}.map{|v| v[:field_name]} + plugin_template_related_links = primary_modal_fields.select{|field_value| field_value[:field_type] == "link" rescue false}.map{|v| v[:field_name]} + plugin_template_related_members = primary_modal_fields.select{|field_value| field_value[:field_type] == "member" rescue false}.map{|v| v[:field_name]} plugin_template_related_files_text = plugin_template_related_files.to_s - plugin_template_related_files_fields = plugin_template_related_files.map{|field_name| + plugin_template_related_links_text = plugin_template_related_links.to_s + fields = plugin_template_related_files + plugin_template_related_links + plugin_template_related_files_fields = fields.map{|field_name| "has_many :#{field_name.pluralize}, :dependent => :destroy, :autosave => true\r\n" + "accepts_nested_attributes_for :#{field_name.pluralize}, :allow_destroy => true" }.join("\r\n") @@ -99,15 +102,17 @@ class Admin::PersonalPluginFieldsController < OrbitAdminController backend_index_fields = @personal_plugin_field.backend_fields["index"] rescue [] backend_index_fields_contents = backend_index_fields.map do |field_name| if field_name == slug_title - "<%= link_to #{plugin_template}.#{field_name}, page_for_#{plugin_template}(#{plugin_template}), target: \"blank\" %>\r\n" + - "
"+ - " "+ - "
\r\n" + "\r\n <%= link_to #{plugin_template}.#{field_name}, page_for_#{plugin_template}(#{plugin_template}), target: \"blank\" %>\r\n" + + "
\r\n"+ + " \r\n"+ + "
\r\n " elsif field_name.include?(".") "<%= #{plugin_template}.#{field_name} rescue \"\" %>" + elsif fields.include?(field_name) || plugin_template_related_members.include?(field_name) #file or link or member + "<%= #{plugin_template}.display_field(\"#{field_name}\").html_safe rescue \"\" %>" else "<%= #{plugin_template}.#{field_name} %>" end @@ -118,7 +123,7 @@ class Admin::PersonalPluginFieldsController < OrbitAdminController extra_translate_title = col_name_to_show_in_index_page.map{|field_name| #在個人外掛前台index頁面的欄位翻譯名稱hash ["th-#{field_name}","I18n.t(\"#{@personal_plugin_field.module_name}.#{field_name}\")"] } - col_fields = get_fields_text(@personal_plugin_field.primary_modal_fields) + col_fields = get_fields_text(primary_modal_fields) col_related_fields = @personal_plugin_field.related_modal_fields.map{|field_values| get_fields_text(field_values)} plugin_template_related = @personal_plugin_field.related_modal_name.select{|n| n.present?} plugin_template_related_main_field = @personal_plugin_field.related_modal_fields.map{|field_values| @@ -128,7 +133,7 @@ class Admin::PersonalPluginFieldsController < OrbitAdminController end slug_titles.map{|field_value| field_value[:field_name]}.select{|t| t.present?}.first } - locale_fields , none_locale_fields , locale_fields_input_fields,none_locale_fields_input_fields = get_input_fields(@personal_plugin_field.primary_modal_fields) + locale_fields , none_locale_fields , locale_fields_input_fields,none_locale_fields_input_fields = get_input_fields(primary_modal_fields) related_locale_fields = [] related_none_locale_fields = [] related_locale_fields_input_fields = [] @@ -144,7 +149,7 @@ class Admin::PersonalPluginFieldsController < OrbitAdminController backend_profile_fields = backend_index_fields backend_profile_fields_contents = backend_index_fields_contents datetime_field_types_hash = {"year_month"=>"%Y/%m","date"=>"%Y/%m/%d","time"=>"%H:%M","date_time"=>"%Y/%m/%d %H:%M"} - datetime_fields = @personal_plugin_field.primary_modal_fields.select{|field_value| datetime_field_types_hash.keys.include?(field_value[:field_type])}.map{|field_value| + datetime_fields = primary_modal_fields.select{|field_value| datetime_field_types_hash.keys.include?(field_value[:field_type])}.map{|field_value| [field_value[:field_name],datetime_field_types_hash[field_value[:field_type]]] }.to_h value_case_codes = ["value = #{plugin_template}.send(field) rescue \"\"", @@ -153,6 +158,8 @@ class Admin::PersonalPluginFieldsController < OrbitAdminController "#{@blank_text}field.split(\".\").each{|f| value = value.send(f) rescue nil }", "end", "file_fields = #{plugin_template_related_files}", + "link_fields = #{plugin_template_related_links}", + "member_fields = #{plugin_template_related_members}", "if file_fields.include?(field)", "#{@blank_text}files = #{plugin_template}.send(field.pluralize)", "#{@blank_text}value = files.map do |file|", @@ -161,6 +168,22 @@ class Admin::PersonalPluginFieldsController < OrbitAdminController "#{@blank_text * 2}\"
  • \#{title}
  • \"", "#{@blank_text}end", "#{@blank_text}value = value.join(\"\")", + "elsif link_fields.include?(field)", + "#{@blank_text}links = #{plugin_template}.send(field.pluralize)", + "#{@blank_text}value = links.map do |link|", + "#{@blank_text * 2}url = link.url", + "#{@blank_text * 2}title = (link.title.blank? ? url : link.title)", + "#{@blank_text * 2}\"
  • \#{title}
  • \"", + "#{@blank_text}end", + "#{@blank_text}value = value.join(\"\")", + "elsif member_fields.include?(field)", + "#{@blank_text}members = #{plugin_template}.send(field.pluralize)", + "#{@blank_text}value = members.map{|m|", + "#{@blank_text*2}path = OrbitHelper.url_to_plugin_show(m.to_param, 'member') rescue '#'", + "#{@blank_text*2}((text_only rescue false) ? m.name : \"\#{m.name}\")", + "#{@blank_text}}", + "#{@blank_text}join_text = (text_only rescue false) ? \",\" : \"
    \"", + "#{@blank_text}value = value.join(join_text)", "end", "strftime_hash = #{datetime_fields}", "if strftime_hash.keys.include?(field)", @@ -178,12 +201,32 @@ class Admin::PersonalPluginFieldsController < OrbitAdminController related_modal_name = @personal_plugin_field.related_modal_name[i] field_names.map{|field_name| "<%= #{related_modal_name}.#{field_name} %>"} } - member_methods_define = @personal_plugin_field.primary_modal_fields.select{|f| f[:field_type] == "member" && f[:field_name].present?}.map{|field_value| + member_methods_define = primary_modal_fields.select{|f| f[:field_type] == "member"}.map{|field_value| ["def #{field_value[:field_name].pluralize}", " MemberProfile.find(self.#{field_value[:field_name].singularize}_ids) rescue []", "end"] }.flatten - @match_pattern = {"personal_plugin_template" => @personal_plugin_field.module_name, + analysis_field_name = @personal_plugin_field.backend_fields[:analysis][0] rescue "" + analysis_field_name = "year" if analysis_field_name.blank? + analysis_field_input_fields = "" + personal_plugin_template = @personal_plugin_field.module_name + iterate_step_text = "1.minute" + if analysis_field_name.present? + field_type = primary_modal_fields.select{|f| f[:field_name] == analysis_field_name}.first[:field_type] rescue "date_time" + + analysis_field_input_fields = ["start","end"].map{|f| + "<%=t(\"#{personal_plugin_template}.extend_translate.#{f}_#{field_type}\")%>" + + generate_input_field(field_type,"#{analysis_field_name}_#{f}" ).gsub("<%= f.","<%= ").gsub(", :new_record => @#{plugin_template}.new_record?","") + }.join("") + if field_type == "date" || field_type == "date_time" + iterate_step_text = "1.day" + elsif field_type == "year" + iterate_step_text = "1" + end + end + time_fields = primary_modal_fields.select{|f| f[:field_type] == "time"}.map{|f| f[:field_name]} + before_save_codes = ""#time_fields.map{|f| "self.#{f} = parse_time(self.#{f}.strftime('%H:%M'))"}.join("\r\n") + @match_pattern = {"personal_plugin_template" => personal_plugin_template, "plugin_template" => plugin_template, "plugin_template_related" => plugin_template_related, "plugin_template_related_files_fields" => plugin_template_related_files_fields, @@ -194,12 +237,14 @@ class Admin::PersonalPluginFieldsController < OrbitAdminController "col_fields" => col_fields, "col_related_fields" => col_related_fields, "plugin_template_file" => plugin_template_related_files, + "plugin_template_link" => plugin_template_related_links, "plugin_template_sort_hash" => "nil", "col_name_to_show_in_index_page_arr" => col_name_to_show_in_index_page, "related_backend_index_fields" => related_backend_index_fields, "related_backend_index_fields_contents" => related_backend_index_fields_contents, "backend_index_fields" => backend_index_fields, "backend_index_fields_contents" => backend_index_fields_contents, + "plugin_template_related_links_text" => plugin_template_related_links_text, "plugin_template_related_files_text" => plugin_template_related_files_text, "locale_fields" => locale_fields, "none_locale_fields" => none_locale_fields, @@ -214,7 +259,12 @@ class Admin::PersonalPluginFieldsController < OrbitAdminController "backend_profile_fields_contents" => backend_profile_fields_contents, "value_case_codes" => value_case_codes, "display_field_code" => display_field_code, - "member_methods_define" => member_methods_define + "member_methods_define" => member_methods_define, + "analysis_field_name" => analysis_field_name, + "analysis_field_input_fields" => analysis_field_input_fields, + "before_save_codes" => before_save_codes, + "time_fields_text" => time_fields.to_s, + "iterate_step_text" => iterate_step_text } max_length = @match_pattern.keys.map{|k| k.length}.max @match_pattern = @match_pattern.sort_by{|k,v| (v.class != Array) ? (max_length - k.length) : -k.length} @@ -225,6 +275,12 @@ class Admin::PersonalPluginFieldsController < OrbitAdminController #end copy_templates("#{cp_template_dir_path}modules/#{@personal_plugin_field.module_name}/") render :html => @logs#@match_pattern#@logs.join("
    ").html_safe#@match_pattern + rescue => e + @match_pattern = {"parse_again_start"=>"","parse_again_end"=>"","col_name_translate_yaml"=>""} + replace_files(files) + replace_dirs(dirs,false) + render :html => e.backtrace.join("
    ") + end end def copy_templates(source) templates = Dir.glob('app/templates/*/').select{|f| File.basename(f) != 'mobile'} @@ -242,7 +298,7 @@ class Admin::PersonalPluginFieldsController < OrbitAdminController field_name = field_value[:field_name] field_type = field_value[:field_type] next if field_name.blank? - next if field_type == "file" + next if field_type == "file" || field_type == "link" if (field_value[:localize] == "1" rescue false) locale_fields << field_name input_field = generate_input_field(field_type,field_name,true,extra_field_name,plugin_template) @@ -261,7 +317,7 @@ class Admin::PersonalPluginFieldsController < OrbitAdminController plugin_template = @personal_plugin_field.primary_modal_name if plugin_template.nil? input_field = "" field_value_text = "@#{plugin_template}.#{field_name}" - field_name_text = ":#{field_name}" + field_name_text = "\"#{field_name}\"" field_name_text = "locale" if localize placeholder = "#{personal_plugin_template}.#{field_name}" placeholder = "#{personal_plugin_template}.#{extra_field_name}.#{field_name}" if extra_field_name @@ -298,17 +354,20 @@ class Admin::PersonalPluginFieldsController < OrbitAdminController end def get_fields_text(field_values) fields_text = field_values.map do |field_value| - next if field_value[:field_type] == "file" || field_value[:field_name].blank? + next if field_value[:field_type] == "file" || field_value[:field_type] == "link" || field_value[:field_name].blank? type = "String" default = "\"\"" field_name = field_value[:field_name] case field_value[:field_type] + when "year" + type = "Integer" + default = "DateTime.now.year" when "date" type = "Date" default = "Date.parse(DateTime.now.to_s)" when "time" - type = "Time" - default = "Time.now" + type = "String" + default = "\"\"" when "date_time" type = "DateTime" default = "DateTime.now" @@ -432,7 +491,7 @@ class Admin::PersonalPluginFieldsController < OrbitAdminController break end end - new_text = new_text.gsub(/<% parse_again_start %>((?:(?!<% parse_again_start %>).)+)<% parse_again_end %>/m) do |ff| + new_text = new_text.gsub(/parse_again_start((?:(?!parse_again_start).)+)parse_again_end/m) do |ff| parse_content = $1 #last match result = ff if include_key($1,k) diff --git a/app/views/admin/personal_plugin_fields/_form.html.erb b/app/views/admin/personal_plugin_fields/_form.html.erb index 75e5a71..42aa1aa 100644 --- a/app/views/admin/personal_plugin_fields/_form.html.erb +++ b/app/views/admin/personal_plugin_fields/_form.html.erb @@ -117,7 +117,7 @@ - <% field_types = ["text_field","text_editor","file","select","year","year_month","date","time","date_time","member"].map{|field| [thead_field(field),field]} + <% field_types = ["text_field","text_editor","file","link","year","year_month","date","time","date_time","member"].map{|field| [thead_field(field),field]} field_types1 = field_types.select{|a| a[1] != "file" && a[1] != "member"} %>
    @@ -228,7 +228,7 @@ } }) } - $("form").submit(function(){ + $(".main-forms").submit(function(){ if($("#primary_modal_plane .slug_title:checked").length == 0){ alert("<%=thead_field('please_choose_one_slug_title')%>"); }else if($("#primary_modal_plane .slug_title:checked").length > 1){ diff --git a/app/views/admin/personal_plugin_fields/_render_fields_check_table.html.erb b/app/views/admin/personal_plugin_fields/_render_fields_check_table.html.erb index 0f26282..a46afcd 100644 --- a/app/views/admin/personal_plugin_fields/_render_fields_check_table.html.erb +++ b/app/views/admin/personal_plugin_fields/_render_fields_check_table.html.erb @@ -1,16 +1,22 @@ +
    <% object = f.object %>
    <%=thead_field(page_name)%>
    - + + +
    "> <% object.primary_modal_fields.each do |field_value| %> + <% next if (!access_field_types.include?(field_value[:field_type]) rescue false) %> <% end %> - <% f.object.related_modal_name.each_with_index do |related_modal_name,i| %> - <% field_values = f.object.related_modal_fields[i].to_a %> - <% field_values.each do |field_value| %> - + <% if page_name != "analysis" %> + <% f.object.related_modal_name.each_with_index do |related_modal_name,i| %> + <% field_values = f.object.related_modal_fields[i].to_a %> + <% field_values.each do |field_value| %> + + <% end %> <% end %> <% end %> @@ -20,20 +26,24 @@ <%= f.fields_for root_name do |f| %> <%= f.fields_for page_name do |f| %> <% object.primary_modal_fields.each do |field_value| %> + <% next if (!access_field_types.include?(field_value[:field_type]) rescue false) %> <% end %> - <% object.related_modal_name.each_with_index do |related_modal_name,i| %> - <% field_values = object.related_modal_fields[i].to_a %> - <% field_values.each do |field_value| %> - + <% if page_name != "analysis" %> + <% object.related_modal_name.each_with_index do |related_modal_name,i| %> + <% field_values = object.related_modal_fields[i].to_a %> + <% field_values.each do |field_value| %> + + <% end %> <% end %> <% end %> <% end %> <% end %> -
    <%="#{field_value[:translation_name][I18n.locale] rescue ""}-#{field_value[:field_name]}"%><%="#{related_modal_name}-#{field_value[:translation_name][I18n.locale] rescue ""}-#{field_value[:field_name]}"%><%="#{related_modal_name}-#{field_value[:translation_name][I18n.locale] rescue ""}-#{field_value[:field_name]}"%>
    <%= check_box_tag "#{f.object_name}[]", field_value[:field_name] , (object.send(root_name)[page_name].include?(field_value[:field_name]) rescue false),:id=>nil %> - <%= check_box_tag "#{f.object_name}[]", "#{related_modal_name+'.'+field_value[:field_name]}" , (object.send(root_name)[page_name].include?(related_modal_name+'.'+field_value[:field_name]) rescue false),:id=>nil %> - + <%= check_box_tag "#{f.object_name}[]", "#{related_modal_name+'.'+field_value[:field_name]}" , (object.send(root_name)[page_name].include?(related_modal_name+'.'+field_value[:field_name]) rescue false),:id=>nil %> +
    \ No newline at end of file + +
    \ No newline at end of file diff --git a/app/views/admin/personal_plugin_fields/fields_setting.html.erb b/app/views/admin/personal_plugin_fields/fields_setting.html.erb index 932b285..7e3f37d 100644 --- a/app/views/admin/personal_plugin_fields/fields_setting.html.erb +++ b/app/views/admin/personal_plugin_fields/fields_setting.html.erb @@ -25,6 +25,7 @@

    <%= thead_field('backend_page') %>

    <%= render :partial => 'render_fields_check_table',locals: {:f=>f,:root_name=>'backend_fields',:page_name=>'index'} %> + <%= render :partial => 'render_fields_check_table',locals: {:f=>f,:root_name=>'backend_fields',:page_name=>'analysis',:access_field_types=>["date","date_time","year","year_month","time"]} %>

    <%= thead_field('frontend_page') %>

    @@ -41,4 +42,31 @@ <%= link_to t('cancel'), request.referer, :class=>"btn" %>
    -<% end %> \ No newline at end of file +<% end %> + \ No newline at end of file diff --git a/config/locales/en.yml b/config/locales/en.yml index d354e69..3295ffe 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -35,5 +35,9 @@ en: slug_title: Slug title please_choose_one_slug_title: Please choose one Slug title! slug_title_can_only_choose_one: Slug title can only choose one! + please_choose_one_analysis_field: Please choose one analysis field! + analysis_field_can_only_choose_one: Analysis field can only choose one! generate_plugin: Generate plugin - member: Member \ No newline at end of file + member: Member + link: Link + analysis: Analysis Page \ No newline at end of file diff --git a/config/locales/zh_tw.yml b/config/locales/zh_tw.yml index c09be43..e7ae731 100644 --- a/config/locales/zh_tw.yml +++ b/config/locales/zh_tw.yml @@ -35,5 +35,9 @@ zh_tw: slug_title: 頭銜標題 please_choose_one_slug_title: 請至少選擇一個頭銜標題! slug_title_can_only_choose_one: 頭銜標題只能選擇一個! + please_choose_one_analysis_field: 請至少選擇一個分析欄位! + analysis_field_can_only_choose_one: 分析欄位只能選擇一個! generate_plugin: 生成個人外掛 - member: 會員 \ No newline at end of file + member: 會員 + link: 連結 + analysis: 分析頁面 \ No newline at end of file diff --git a/template_generator/app/controllers/admin/plugin_templates_controller.rb b/template_generator/app/controllers/admin/plugin_templates_controller.rb index ca73d31..cefe86c 100644 --- a/template_generator/app/controllers/admin/plugin_templates_controller.rb +++ b/template_generator/app/controllers/admin/plugin_templates_controller.rb @@ -24,21 +24,25 @@ class Admin::PluginTemplatesController < OrbitMemberController def show end + def analysis + end def analysis_report role = params[:role_id] - year_start = params[:year_start].to_i - year_end = params[:year_end].to_i + analysis_field_name_start = params[:analysis_field_name_start] + analysis_field_name_end = params[:analysis_field_name_end] graph_by = params[:graph_by] - @data = get_chart_data(year_start,year_end,role,params[:graph_by]) + @data = get_chart_data(analysis_field_name_start,analysis_field_name_end,role,params[:graph_by],params[:time_zone]) render :layout => false end def download_excel - year_start = params[:year_start].to_i - year_end = params[:year_end].to_i - @data = get_data_for_excel(year_start,year_end) + analysis_field_name_start = params[:analysis_field_name_start] + analysis_field_name_end = params[:analysis_field_name_end] + @data = get_data_for_excel(analysis_field_name_start,analysis_field_name_end,params[:time_zone]) + @protocol = (request.referer.blank? ? "http" : URI(request.referer).scheme) + @host_url = "#{@protocol}://#{request.host_with_port}" respond_to do |format| format.xlsx { response.headers['Content-Disposition'] = 'attachment; filename="plugin_templates.xlsx"' @@ -103,9 +107,9 @@ class Admin::PluginTemplatesController < OrbitMemberController end def get_settings - <% parse_again_start %> + parse_again_start @plugin_template_relateds = PluginTemplateRelated.all - <% parse_again_end %> + parse_again_end end def set_plugin diff --git a/template_generator/app/helpers/admin/plugin_templates_helper.rb b/template_generator/app/helpers/admin/plugin_templates_helper.rb index 999d0ce..bbfe971 100644 --- a/template_generator/app/helpers/admin/plugin_templates_helper.rb +++ b/template_generator/app/helpers/admin/plugin_templates_helper.rb @@ -1,28 +1,58 @@ module Admin::PluginTemplatesHelper + include OrbitFormHelper + alias :org_datetime_picker :datetime_picker + def datetime_picker(*arg,**args) + org_datetime_picker(arg,args) + end + def time_iterate(start_time, end_time, step, &block) + begin + yield(start_time) + end while (start_time += step) <= end_time + end + def parse_time(time_str,timezone="+08:00") + DateTime.parse("0000-01-01 " + time_str + timezone) + end def page_for_plugin_template(plugin_template_object) page = Page.where(:module=>"personal_plugin_template").first ("/#{I18n.locale}"+page.url+'/'+plugin_template_object.to_param).gsub('//','/') rescue "#" end - def get_data_for_excel(year_start,year_end) + def get_data_for_excel(analysis_field_name_start,analysis_field_name_end,timezone) + analysis_field_name_start = parse_date_time_field("analysis_field_name",analysis_field_name_start,timezone) + analysis_field_name_end = parse_date_time_field("analysis_field_name",analysis_field_name_end,timezone) data = [] roles = Role.where(:disabled => false, :title.ne => "", :title.ne => nil).asc(:key) roles.each do |role| d = {} d["name"] = role.title mps = role.member_profile_ids - d["data"] = PluginTemplate.where(:year.gte => year_start, :year.lte => year_end, :member_profile_id.in => mps) rescue [] + d["data"] = PluginTemplate.where(:analysis_field_name.gte => analysis_field_name_start, :analysis_field_name.lte => analysis_field_name_end, :member_profile_id.in => mps) rescue [] data << d end return data end - def get_chart_data(year_start,year_end,role,type) + def get_chart_data(analysis_field_name_start,analysis_field_name_end,role,type,timezone) + analysis_field_name_start = parse_date_time_field("analysis_field_name",analysis_field_name_start,timezone) + analysis_field_name_end = parse_date_time_field("analysis_field_name",analysis_field_name_end,timezone) + main_field_name = "" + time_fields = time_fields_text + max_iterate = 20 + iterate_step = iterate_step_text + iterate_count = ((analysis_field_name_end - analysis_field_name_start) / iterate_step * 1.day.second).ceil + if iterate_count > max_iterate + iterate_step = (iterate_step * (iterate_count / max_iterate.to_f).ceil).second + end case type - when "semester" - jls = CourseSemester.all - when "category" - jls = CourseCategory.all + when "default" + jls = [] +parse_again_start + when "plugin_template_related" + jls = PluginTemplateRelated.all + main_field_name = "plugin_template_related_main_field" +parse_again_end + else + jls = [] end finaldata = [] @@ -33,31 +63,69 @@ module Admin::PluginTemplatesHelper end jls.each do |jl| data = {} - data["name"] = jl.title + data["name"] = jl.send(main_field_name) rescue "N/A" data["data"] = {} - (year_start..year_end).each do |year| - # d1 = DateTime.new(year,1,1,0,0) - # d2 = DateTime.new(year,12,31,23,59) - t = jl.courses.where(:year.gte => year, :year.lte => year, :member_profile_id.in => mps).count rescue 0 - data["data"][year.to_s] = t + time_iterate(analysis_field_name_start,analysis_field_name_end,iterate_step) do |analysis_field_name| + next_analysis_field_name = analysis_field_name + iterate_step + current_analysis_field_name = analysis_field_name + current_analysis_field_name = analysis_field_name.strftime("%H:%M") if time_fields.include?("analysis_field_name") + next_analysis_field_name = next_analysis_field_name.strftime("%H:%M") if time_fields.include?("analysis_field_name") + t = jl.plugin_templates.where(:analysis_field_name.gte => current_analysis_field_name, :analysis_field_name.lt => next_analysis_field_name, :member_profile_id.in => mps).count rescue 0 + if current_analysis_field_name.class == DateTime + current_analysis_field_name = display_date_time(current_analysis_field_name,timezone,iterate_step) + end + data["data"][current_analysis_field_name.to_s] = t end finaldata << data end data = {"name" => "N/A", "data" => {}} - (year_start..year_end).each do |year| - # d1 = DateTime.new(year,1,1,0,0) - # d2 = DateTime.new(year,12,31,23,59) + time_iterate(analysis_field_name_start,analysis_field_name_end,iterate_step) do |analysis_field_name| + next_analysis_field_name = analysis_field_name + iterate_step + current_analysis_field_name = analysis_field_name + current_analysis_field_name = analysis_field_name.strftime("%H:%M") if time_fields.include?("analysis_field_name") + next_analysis_field_name = next_analysis_field_name.strftime("%H:%M") if time_fields.include?("analysis_field_name") case type - when "semester" - t = Course.where(:year.gte => year, :year.lte => year, :member_profile_id.in => mps, :course_semester_id => nil).count rescue 0 - when "category" - t = Course.where(:year.gte => year, :year.lte => year, :member_profile_id.in => mps, :course_category_id => nil).count rescue 0 + when "default" + t = PluginTemplate.where(:analysis_field_name.gte => current_analysis_field_name, :analysis_field_name.lt => next_analysis_field_name, :member_profile_id.in => mps).count rescue 0 +parse_again_start + when "plugin_template_related" + t = PluginTemplate.where(:analysis_field_name.gte => current_analysis_field_name, :analysis_field_name.lt => next_analysis_field_name, :member_profile_id.in => mps, :plugin_template_related_id => nil).count rescue 0 +parse_again_end + else + t = PluginTemplate.where(:analysis_field_name.gte => current_analysis_field_name, :analysis_field_name.lt => next_analysis_field_name, :member_profile_id.in => mps).count rescue 0 end - - data["data"][year.to_s] = t + current_analysis_field_name = current_analysis_field_name.new_offset(timezone) if current_analysis_field_name.class == DateTime + if current_analysis_field_name.class == DateTime + current_analysis_field_name = display_date_time(current_analysis_field_name,timezone,iterate_step) + end + data["data"][current_analysis_field_name.to_s] = t end finaldata << data finaldata end - + def parse_date_time_field(field,value,timezone="+08:00") + time_fields = time_fields_text + if time_fields.include?(field) + parse_time(value,timezone) + elsif PluginTemplate.fields[field].type == Integer + value.to_i + elsif PluginTemplate.fields[field].type == Date + Date.parse(value) + else + DateTime.parse(value+timezone).utc + end + end + def display_date_time(date_time,timezone,iterate_step) + date_time = date_time.new_offset(timezone) + if iterate_step > 1.year + date_time = date_time.strftime("%Y") + elsif iterate_step > 1.month + date_time = date_time.strftime("%Y/%m") + elsif iterate_step > 1.day + date_time = date_time.strftime("%Y/%m/%d") + else + date_time = date_time.strftime("%Y/%m/%d %H:%M") + end + return date_time + end end \ No newline at end of file diff --git a/template_generator/app/models/plugin_template.rb b/template_generator/app/models/plugin_template.rb index 276c1e8..e554d44 100644 --- a/template_generator/app/models/plugin_template.rb +++ b/template_generator/app/models/plugin_template.rb @@ -10,17 +10,24 @@ class PluginTemplate plugin_template_related_files_fields -<% parse_again_start %> +parse_again_start belongs_to :plugin_template_related -<% parse_again_end %> +parse_again_end + field :rss2_id belongs_to :member_profile scope :sort_for_frontend, ->{ where(:is_hidden=>false).order_by(plugin_template_sort_hash) } -<% parse_again_start %> +parse_again_start member_methods_define -<% parse_again_end %> +parse_again_end + before_save do + before_save_codes + end + def parse_time(time_str) + DateTime.parse("0000-01-01 " + time_str) + end def self.get_plugin_datas_to_member(datas) fields_to_show = col_name_to_show @@ -88,7 +95,7 @@ class PluginTemplate } end - def display_field(field) + def display_field(field,text_only=false) plugin_template = self display_field_code end diff --git a/template_generator/app/models/plugin_template_link.rb b/template_generator/app/models/plugin_template_link.rb new file mode 100644 index 0000000..aa28ab6 --- /dev/null +++ b/template_generator/app/models/plugin_template_link.rb @@ -0,0 +1,25 @@ +# encoding: utf-8 +require 'uri' + +class PluginTemplateLink + include Mongoid::Document + include Mongoid::Timestamps + + field :url + field :title, localize: true + + belongs_to :plugin_template + + before_validation :add_http + + #validates :url, :presence => true, :format => /\A(http|https):\/\/(([a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5})|((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))(:[0-9]{1,5})?(\/.*)?\Z/i + + protected + + def add_http + unless self.url[/^http:\/\//] || self.url[/^https:\/\//] + self.url = 'http://' + self.url + end + end + +end \ No newline at end of file diff --git a/template_generator/app/views/admin/plugin_template_relateds/_form.html.erb b/template_generator/app/views/admin/plugin_template_relateds/_form.html.erb index c3b05ac..4b33bd8 100644 --- a/template_generator/app/views/admin/plugin_template_relateds/_form.html.erb +++ b/template_generator/app/views/admin/plugin_template_relateds/_form.html.erb @@ -5,7 +5,7 @@
    -<% parse_again_end %> -<% parse_again_start %> +parse_again_end +parse_again_start
    @@ -32,7 +32,7 @@ related_none_locale_fields_input_fields
    -<% parse_again_end %> +parse_again_end <% end %> - + + <% + links_hash = {} + plugin_template_related_links_text.each do |link| + hash = {} + hash["html"] = add_attribute("form_link", f, link.pluralize.to_sym) + hash["count"] = @plugin_template.send(link.pluralize).count rescue 0 + links_hash[link] = hash + %> +
    + +
    + + + <% if !@plugin_template.new_record? && hash["count"] > 0 %> +
    + <% @plugin_template.send(link.pluralize).each_with_index do |obj, i| %> + <% if !obj.new_record? %> + <%= f.fields_for link.pluralize.to_sym, obj do |f| %> + <%= render :partial => "form_link", :object => obj, :locals => {:f => f, :i => i} %> + <% end %> + <% end %> + <% end %> +
    +
    + <% end %> + + +
    +
    +

    + <%= t(:add) %> +

    + +
    +
    + <% end %> + <% files_hash = {} plugin_template_related_files_text.each do |file| @@ -127,7 +164,7 @@ <% end %> -<% parse_again_start %> +parse_again_start
    @@ -135,16 +172,16 @@ none_locale_fields_input_fields
    -<% parse_again_end %> -<% parse_again_start %> +parse_again_end +parse_again_start
    - <%= f.select :plugin_template_related_id, PluginTemplateRelated.all.collect {|t| [ t.plugin_template_related_main_field, t.id ]} %> + <%= f.select :plugin_template_related_id, PluginTemplateRelated.all.collect {|t| [ t.plugin_template_related_main_field, t.id ]}, { include_blank: true } %>
    -<% parse_again_end %> +parse_again_end
    @@ -180,6 +217,18 @@ return false; }) + var links = <%= links_hash.to_json.html_safe %>; + $("a.add_link").on("click",function(){ + var type = $(this).attr("for"), + html = links[type].html, + count = parseInt(links[type].count), + replaceReg = new RegExp("new_" + type + "s","g"); + html = html.replace(replaceReg,count); + $(".add-target[for=" + type + "]").append(html); + count++; + links[type].count = count; + return false; + }) $(document).on('click', '.delete_file', function(){ $(this).parents('.input-prepend').remove(); }); diff --git a/template_generator/app/views/admin/plugin_templates/_form_link.html.erb b/template_generator/app/views/admin/plugin_templates/_form_link.html.erb new file mode 100644 index 0000000..461a3fc --- /dev/null +++ b/template_generator/app/views/admin/plugin_templates/_form_link.html.erb @@ -0,0 +1,26 @@ +
    + + <%= f.text_field :url, class: "input-large", placeholder: t(:url) %> + + + <% @site_in_use_locales.each_with_index do |locale, i| %> + <%= locale %>"> + <%= f.fields_for :title_translations do |f| %> + <%= f.text_field locale, :class => "input-large", placeholder: t(:url_alt), :value => (form_link.title_translations[locale] rescue nil) %> + <% end %> + + <% end %> + + + <% if form_link.new_record? %> + + + + <% else %> + + <%= f.hidden_field :id %> + + <%= f.hidden_field :_destroy, :value => nil, :class => 'should_destroy' %> + + <% end %> +
    diff --git a/template_generator/app/views/admin/plugin_templates/_plugin_template_related.html.erb b/template_generator/app/views/admin/plugin_templates/_plugin_template_related.html.erb index 62822ea..7ce8dcb 100644 --- a/template_generator/app/views/admin/plugin_templates/_plugin_template_related.html.erb +++ b/template_generator/app/views/admin/plugin_templates/_plugin_template_related.html.erb @@ -1,17 +1,17 @@ -<% parse_again_start %> +parse_again_start <%= t("personal_plugin_template.plugin_template_related.related_backend_index_fields") %> -<% parse_again_end %> +parse_again_end <%= t(:action) %> <% @plugin_template_relateds.each do |plugin_template_related| %> -<% parse_again_start %> +parse_again_start related_backend_index_fields_contents -<% parse_again_end %> +parse_again_end <%= t(:edit) %> <%= link_to t(:delete_), admin_plugin_template_related_path(plugin_template_related), "data-confirm" => t('sure?'), :method => :delete, :remote => true,:class=>"archive_toggle action" %> diff --git a/template_generator/app/views/admin/plugin_templates/_plugin_templates.html.erb b/template_generator/app/views/admin/plugin_templates/_plugin_templates.html.erb index 6adc52a..93818f7 100644 --- a/template_generator/app/views/admin/plugin_templates/_plugin_templates.html.erb +++ b/template_generator/app/views/admin/plugin_templates/_plugin_templates.html.erb @@ -1,7 +1,7 @@ <% @plugin_templates.each do |plugin_template| %> -<% parse_again_start %> +parse_again_start backend_index_fields_contents -<% parse_again_end %> +parse_again_end <% end %> \ No newline at end of file diff --git a/template_generator/app/views/admin/plugin_templates/analysis.html.erb b/template_generator/app/views/admin/plugin_templates/analysis.html.erb index 3e6a09d..c93670c 100644 --- a/template_generator/app/views/admin/plugin_templates/analysis.html.erb +++ b/template_generator/app/views/admin/plugin_templates/analysis.html.erb @@ -32,24 +32,26 @@ <%= javascript_include_tag "justgage.1.0.1.min" %> <%= javascript_include_tag "raphael.2.1.0.min" %> <%= javascript_include_tag "validator" %> + <%= javascript_include_tag "lib/bootstrap-datetimepicker" %> + <%= javascript_include_tag "lib/datetimepicker/datetimepicker.js" %> <% end %>
    - +
    - <%= select_year(DateTime.now.year - 5, {:start_year => DateTime.now.year, :end_year => 1950}, {:name => 'start_year', :class => "span1"} ) %> - - - <%= select_year(DateTime.now.year, {:start_year => DateTime.now.year, :end_year => 1950}, {:name => 'end_year', :class => "span1"} ) %> + analysis_field_input_fields
    - +
    - <%= t("personal_course.course_semester") %> - <%= t("personal_course.course_category") %> +parse_again_start + <%= t("personal_plugin_template.plugin_template_related.plugin_template_related_main_field") %> + +parse_again_end
    @@ -71,13 +73,19 @@
    -<% parse_again_end %> \ No newline at end of file +parse_again_end \ No newline at end of file diff --git a/template_generator/app/views/plugin/personal_plugin_template/_profile.html.erb b/template_generator/app/views/plugin/personal_plugin_template/_profile.html.erb index 86533b0..5e2da04 100644 --- a/template_generator/app/views/plugin/personal_plugin_template/_profile.html.erb +++ b/template_generator/app/views/plugin/personal_plugin_template/_profile.html.erb @@ -28,9 +28,9 @@ <% if has_access? %> <% end -%> -<% parse_again_start %> +parse_again_start <%= t('personal_plugin_template.backend_profile_fields') %> -<% parse_again_end %> +parse_again_end @@ -41,9 +41,9 @@ <%= check_box_tag 'to_change[]', plugin_template.id.to_s, false, :class => "list-check" %> <% end %> -<% parse_again_start %> +parse_again_start backend_profile_fields_contents -<% parse_again_end %> +parse_again_end <% end %> diff --git a/template_generator/config/locales/en.yml b/template_generator/config/locales/en.yml index 816d52c..e7db082 100644 --- a/template_generator/config/locales/en.yml +++ b/template_generator/config/locales/en.yml @@ -4,4 +4,17 @@ en: plugin_templates: personal_plugin_template_translate plugin_template: personal_plugin_template_translate personal_plugin_template: + extend_translate: + start_time: Start time + end_time: End time + start_date: Start date + end_date: End date + start_date_time: Start date & time + end_date_time: End date & time + start_year: Start year + end_year: End year + start_year_month: Start year/month + end_year_month: End year/month + total_number: Total number + graph_by: "Graph By" col_name_translate_yaml \ No newline at end of file diff --git a/template_generator/config/locales/zh_tw.yml b/template_generator/config/locales/zh_tw.yml index 849a2b3..9fc705e 100644 --- a/template_generator/config/locales/zh_tw.yml +++ b/template_generator/config/locales/zh_tw.yml @@ -4,4 +4,17 @@ zh_tw: plugin_templates: personal_plugin_template_translate plugin_template: personal_plugin_template_translate personal_plugin_template: + extend_translate: + start_time: 開始時間 + end_time: 結束時間 + start_date: 開始日期 + end_date: 結束日期 + start_date_time: 開始日期時間 + end_date_time: 結束日期時間 + start_year: 開始年分 + end_year: 結束年分 + start_year_month: 開始年月 + end_year_month: 結束年月 + total_number: 總數量 + graph_by: "Graph By" col_name_translate_yaml \ No newline at end of file diff --git a/template_generator/config/routes.rb b/template_generator/config/routes.rb index a51f015..9f9a723 100644 --- a/template_generator/config/routes.rb +++ b/template_generator/config/routes.rb @@ -24,9 +24,9 @@ Rails.application.routes.draw do end end end -<% parse_again_start %> +parse_again_start resources :plugin_template_relateds -<% parse_again_end %> +parse_again_end end end end diff --git a/template_generator/modules/personal_plugin_template/index.html.erb b/template_generator/modules/personal_plugin_template/index.html.erb index d6ff619..cf5d8c8 100644 --- a/template_generator/modules/personal_plugin_template/index.html.erb +++ b/template_generator/modules/personal_plugin_template/index.html.erb @@ -2,16 +2,16 @@

    {{widget-title}}

    - <% parse_again_start %> + parse_again_start {{th-col_name_to_show_in_index_page_arr}} - <% parse_again_end %> + parse_again_end - <% parse_again_start %> + parse_again_start {{col_name_to_show_in_index_page_arr}} - <% parse_again_end %> + parse_again_end