diff --git a/app/controllers/admin/patchfiles_controller.rb b/app/controllers/admin/patchfiles_controller.rb index 36611c1..bf9fad7 100644 --- a/app/controllers/admin/patchfiles_controller.rb +++ b/app/controllers/admin/patchfiles_controller.rb @@ -9,9 +9,39 @@ class Admin::PatchfilesController < OrbitAdminController super @app_title = "patchfile" end - + def repair_module + ModuleApp.all.map{|v| v}.group_by{|v| [v.key,v.title]}.select{|k,v| Array(v).length>1}.each do |k,vs| + array_vs = Array(vs) + cats = array_vs.collect{|v| v.categories}.flatten.uniq + tags = array_vs.collect{|v| v.tags}.flatten.uniq + auths = array_vs.collect{|v| v.authorizations}.flatten.uniq + array_vs.reverse.each_with_index do |v,i| + if i == 0 + tags = tags.collect do |tag| + tag.module_app_ids = [v.id] + tag.save + tag + end + cats = cats.collect do |cat| + cat.module_app_id = v.id + cat.save + cat + end + auths = auths.collect do |auth| + auth.module_app_id = v.id + auth.save + auth + end + else + v.tag_ids = [] + v.destroy + end + end + end + render :text => 'repair finish' + end def index - #@tags = @module_app.tags + #@tags = @module_app.tags #@categories = @module_app.categories.enabled #@filter_fields = filter_fields(@categories, @tags) #@table_fields = [:status, :category, :title, :start_date, :end_date, :last_modified] @@ -20,34 +50,34 @@ class Admin::PatchfilesController < OrbitAdminController end end def edit - params["filefield"]["file_show"].each do |name,status| - @file_to_show.file_show[name][:status] = status.to_i - end - params["filefield"]["sub_file_fields"].each do |name,files| - files.each do |index,file_and_status| - file_and_status.each do |file_name,status| - @file_to_show["file_show"][name]["files"][file_name]["status"] = status.to_i - end - end - end - if params["filefield"]["refresh_btn"] == "true" - @last_message = @file_to_show.last_message - @active_file_arr = @file_to_show.file_show.values.map{|hash| hash.values.first}.map{|hash| hash.keys.zip(hash.values.map{|hash| hash[:status]}).to_h}.select{|hash| hash.values.include?(1)}.flat_map{|hash| hash.values.map.with_index{|status,i| (status != 1) ? nil : i}.select{|index| !index.nil?}.map{|index| hash.keys[index]}} - @file_to_show.destroy - @file_to_show = Filefield.new() - @file_to_show.last_message = @last_message - @active_file_arr.each{|active_file| @file_to_show.file_show.keys.each{|file_group| (@file_to_show.file_show[file_group][:files].keys.include?(active_file)) ? (@file_to_show.file_show[file_group][:files][active_file][:status] = 1) : nil }} - @file_to_show.save - end - if params["filefield"]["recovery_btn"] == "true" - @file_to_show.recovery = "true" - else - @file_to_show.recovery = "false" - end - @file_to_show.num = 0 - @file_to_show.update - @file_to_show = Filefield.where("title"=>@app_title).first - redirect_to admin_patchfiles_path and return + params["filefield"]["file_show"].each do |name,status| + @file_to_show.file_show[name][:status] = status.to_i + end + params["filefield"]["sub_file_fields"].each do |name,files| + files.each do |index,file_and_status| + file_and_status.each do |file_name,status| + @file_to_show["file_show"][name]["files"][file_name]["status"] = status.to_i + end + end + end + if params["filefield"]["refresh_btn"] == "true" + @last_message = @file_to_show.last_message + @active_file_arr = @file_to_show.file_show.values.map{|hash| hash.values.first}.map{|hash| hash.keys.zip(hash.values.map{|hash| hash[:status]}).to_h}.select{|hash| hash.values.include?(1)}.flat_map{|hash| hash.values.map.with_index{|status,i| (status != 1) ? nil : i}.select{|index| !index.nil?}.map{|index| hash.keys[index]}} + @file_to_show.destroy + @file_to_show = Filefield.new() + @file_to_show.last_message = @last_message + @active_file_arr.each{|active_file| @file_to_show.file_show.keys.each{|file_group| (@file_to_show.file_show[file_group][:files].keys.include?(active_file)) ? (@file_to_show.file_show[file_group][:files][active_file][:status] = 1) : nil }} + @file_to_show.save + end + if params["filefield"]["recovery_btn"] == "true" + @file_to_show.recovery = "true" + else + @file_to_show.recovery = "false" + end + @file_to_show.num = 0 + @file_to_show.update + @file_to_show = Filefield.where("title"=>@app_title).first + redirect_to admin_patchfiles_path and return end def showckeditor end @@ -56,186 +86,186 @@ class Admin::PatchfilesController < OrbitAdminController def editfontfile end def update - if params[:id] == "editfontfile" - @field_name - params["fontfile"]["font_file"] = "" if params["fontfile"]["font_file"].nil? == true - params["fontfile"].each do |update_key,update_value| - if update_key != "font_file" - @font_settings["old_"+update_key] = @font_settings[update_key] rescue nil - @font_settings[update_key] = update_value - else - @file = params["fontfile"]["font_file"] if params["fontfile"]["font_file"] != "" - @file_path = Rails.root.to_s + '/app/assets/fonts' - - if @file.nil? != true - @file_name = @file.original_filename - @file_content = @file.read - @file_content.force_encoding('UTF-8') - Dir.chdir(@file_path) - @filetowrite - if !File.file?(@file_name) - @filetowrite = File.new(@file_name,"w") - else - @filetowrite = File.open(@file_name,"w") - end - @filetowrite.write(@file_content) - @filetowrite.close - Dir.chdir(Rails.root.to_s) - else - @file_name = @font_settings.font_file_name - end - @field_name = {"font_file_name" => @file_name,"font_dir" => @file_path} - @field_name.each do |name,value| - @font_settings["old_" + name.to_s] = @font_settings[name.to_s] - @font_settings[name.to_s] = value.to_s - end - end - end - @font_settings.update - end - redirect_to admin_patchfiles_showckeditor_path + if params[:id] == "editfontfile" + @field_name + params["fontfile"]["font_file"] = "" if params["fontfile"]["font_file"].nil? == true + params["fontfile"].each do |update_key,update_value| + if update_key != "font_file" + @font_settings["old_"+update_key] = @font_settings[update_key] rescue nil + @font_settings[update_key] = update_value + else + @file = params["fontfile"]["font_file"] if params["fontfile"]["font_file"] != "" + @file_path = Rails.root.to_s + '/app/assets/fonts' + + if @file.nil? != true + @file_name = @file.original_filename + @file_content = @file.read + @file_content.force_encoding('UTF-8') + Dir.chdir(@file_path) + @filetowrite + if !File.file?(@file_name) + @filetowrite = File.new(@file_name,"w") + else + @filetowrite = File.open(@file_name,"w") + end + @filetowrite.write(@file_content) + @filetowrite.close + Dir.chdir(Rails.root.to_s) + else + @file_name = @font_settings.font_file_name + end + @field_name = {"font_file_name" => @file_name,"font_dir" => @file_path} + @field_name.each do |name,value| + @font_settings["old_" + name.to_s] = @font_settings[name.to_s] + @font_settings[name.to_s] = value.to_s + end + end + end + @font_settings.update + end + redirect_to admin_patchfiles_showckeditor_path end def newfont - if params["patchfilefield"]["initial_btn"] == "true" - #render :html => @field.id and return - @field_to_copy = Patchfilefield.where("title"=>(@app_title + "_back")).take_while{true}.last - @field_to_copy.attributes.each do |copy_field,value| - if copy_field != "_id" || copy_field != "title" - @field[copy_field] = value - end - end - @field.update - @field = Patchfilefield.where("title"=>@app_title).first - @field.update - @field = Patchfilefield.where("title"=>@app_title).first - @font_arr = [] - @field.font_array.each do |font,istrue| - @font_arr.push font - end - @font_arr.each do |font,istrue| - if (@field_to_copy.font_array.keys.include? font) == false - @field.font_array.delete(font) - @field.delete_font = font - @field.update - @field = Patchfilefield.where("title"=>@app_title).first - end - end - redirect_to admin_patchfiles_editckeditor_path and return - elsif params["patchfilefield"]["delete_btn"] == "true" - params["patchfilefield"]["font_array"] = {} if params["patchfilefield"]["font_array"].nil? == true - params["patchfilefield"]["font_array"].each do |font,istrue| - if istrue =="1" - @field.font_array.delete(font) - @field.delete_font = font - @field.update - @field = Patchfilefield.where("title"=>@app_title).first - end - end - redirect_to admin_patchfiles_editckeditor_path and return - else - params["patchfilefield"]["new_add_font"] = params["patchfilefield"]["new_add_font"].gsub('\"','').gsub("\'",'').gsub(";",'').gsub('\\','') - @field.new_add_font = params["patchfilefield"]["new_add_font"] rescue (redirect_to admin_patchfiles_showckeditor_path and return) - @key_arr = @field.font_array.keys - params["patchfilefield"]["font_array"] = {} if params["patchfilefield"]["font_array"].nil? == true - params["patchfilefield"]["font_array"].each do |font,istrue| - if istrue =="0" - @field.font_array[font] = false - elsif istrue =="1" - @field.font_array[font] = true - end - end - @field.update - redirect_to admin_patchfiles_showckeditor_path and return - end + if params["patchfilefield"]["initial_btn"] == "true" + #render :html => @field.id and return + @field_to_copy = Patchfilefield.where("title"=>(@app_title + "_back")).take_while{true}.last + @field_to_copy.attributes.each do |copy_field,value| + if copy_field != "_id" || copy_field != "title" + @field[copy_field] = value + end + end + @field.update + @field = Patchfilefield.where("title"=>@app_title).first + @field.update + @field = Patchfilefield.where("title"=>@app_title).first + @font_arr = [] + @field.font_array.each do |font,istrue| + @font_arr.push font + end + @font_arr.each do |font,istrue| + if (@field_to_copy.font_array.keys.include? font) == false + @field.font_array.delete(font) + @field.delete_font = font + @field.update + @field = Patchfilefield.where("title"=>@app_title).first + end + end + redirect_to admin_patchfiles_editckeditor_path and return + elsif params["patchfilefield"]["delete_btn"] == "true" + params["patchfilefield"]["font_array"] = {} if params["patchfilefield"]["font_array"].nil? == true + params["patchfilefield"]["font_array"].each do |font,istrue| + if istrue =="1" + @field.font_array.delete(font) + @field.delete_font = font + @field.update + @field = Patchfilefield.where("title"=>@app_title).first + end + end + redirect_to admin_patchfiles_editckeditor_path and return + else + params["patchfilefield"]["new_add_font"] = params["patchfilefield"]["new_add_font"].gsub('\"','').gsub("\'",'').gsub(";",'').gsub('\\','') + @field.new_add_font = params["patchfilefield"]["new_add_font"] rescue (redirect_to admin_patchfiles_showckeditor_path and return) + @key_arr = @field.font_array.keys + params["patchfilefield"]["font_array"] = {} if params["patchfilefield"]["font_array"].nil? == true + params["patchfilefield"]["font_array"].each do |font,istrue| + if istrue =="0" + @field.font_array[font] = false + elsif istrue =="1" + @field.font_array[font] = true + end + end + @field.update + redirect_to admin_patchfiles_showckeditor_path and return + end end def getfont - @font_array = [] - @ckeditor_path = ENV['PWD'] + '/app/assets/javascripts/ckeditor' - @filedata = File.read(@ckeditor_path+"/config.js.erb") rescue return - @name_to_search ="config.font_names" - @index_of_font = @filedata.index(@name_to_search) - @font_str = "" - @end_character - @str_start - @str_end - if @index_of_font != nil - @inex_start_to_search = @index_of_font + @name_to_search.length - @str_start = @inex_start_to_search - if (@filedata[@inex_start_to_search] != "\'" && @filedata[@inex_start_to_search] != "\"") - for @str_start in @inex_start_to_search..@filedata.length - break if (@filedata[@str_start] == "\'" || @filedata[@str_start] == "\"") - end - end - @end_character = @filedata[@str_start] - @str_end = @str_start+1 - if @str_start+1 < @filedata.length - @str_end = @str_start+1 - for @str_end in @str_start+1..@filedata.length - break if @filedata[@str_end] == @end_character || @str_end == @str_start - if @filedata[@str_end] == "=" - @str_end = @str_start - break - end - end - if @str_end != @str_start - @font_str = @filedata[@str_start+1...@str_end] - else - @font_str = "" - end - end - @font_array = @font_str.split("\;") - @font_array.map!{|i| i.strip} - @font_array.delete("") - end + @font_array = [] + @ckeditor_path = ENV['PWD'] + '/app/assets/javascripts/ckeditor' + @filedata = File.read(@ckeditor_path+"/config.js.erb") rescue return + @name_to_search ="config.font_names" + @index_of_font = @filedata.index(@name_to_search) + @font_str = "" + @end_character + @str_start + @str_end + if @index_of_font != nil + @inex_start_to_search = @index_of_font + @name_to_search.length + @str_start = @inex_start_to_search + if (@filedata[@inex_start_to_search] != "\'" && @filedata[@inex_start_to_search] != "\"") + for @str_start in @inex_start_to_search..@filedata.length + break if (@filedata[@str_start] == "\'" || @filedata[@str_start] == "\"") + end + end + @end_character = @filedata[@str_start] + @str_end = @str_start+1 + if @str_start+1 < @filedata.length + @str_end = @str_start+1 + for @str_end in @str_start+1..@filedata.length + break if @filedata[@str_end] == @end_character || @str_end == @str_start + if @filedata[@str_end] == "=" + @str_end = @str_start + break + end + end + if @str_end != @str_start + @font_str = @filedata[@str_start+1...@str_end] + else + @font_str = "" + end + end + @font_array = @font_str.split("\;") + @font_array.map!{|i| i.strip} + @font_array.delete("") + end + end + def create_first_field + @app_title = "patchfile" + if Patchfilefield.where("title"=>(@app_title + "_back")).take_while{true}.count == 0 + @field = Patchfilefield.new() + @field.title = @app_title +"_back" + @field.save + end + @field + if Patchfilefield.where("title"=>@app_title).take_while{true}.count == 0 + @field = Patchfilefield.new() + @field.title=@app_title + @field.save + @field = Patchfilefield.where("title"=>@app_title).first + else + @field = Patchfilefield.where("title"=>@app_title).first + end + if params[:font] != nil + if Fontfile.where("title"=>params[:font]).first.nil? == true + @font_settings = Fontfile.new + @font_settings.title = params[:font] + @font_settings.save + end + @font_settings = Fontfile.where("title"=>params[:font]).first + end + if Filefield.where("title"=>@app_title).take_while{true}.count == 0 + @file_to_show = Filefield.new() + @file_to_show.title=@app_title + @file_to_show.save + @file_to_show = Filefield.where("title"=>@app_title).first + else + @default_field = Filefield.new() + @file_to_show = Filefield.where("title"=>@app_title).first + @default_field.file_show.each do |name,property| + if @file_to_show.file_show[name] == nil + @file_to_show.file_show[name] = property + @file_to_show.save + @file_to_show = Filefield.where("title"=>@app_title).first + end + end + @default_field.file_show.each do |name,property| + property[:files].each do |file_name,sub_property| + if @file_to_show.file_show[name][:files][file_name] == nil + @file_to_show.file_show[name][:files][file_name] = sub_property + @file_to_show.save + @file_to_show = Filefield.where("title"=>@app_title).first + end + end + end + end end - def create_first_field - @app_title = "patchfile" - if Patchfilefield.where("title"=>(@app_title + "_back")).take_while{true}.count == 0 - @field = Patchfilefield.new() - @field.title = @app_title +"_back" - @field.save - end - @field - if Patchfilefield.where("title"=>@app_title).take_while{true}.count == 0 - @field = Patchfilefield.new() - @field.title=@app_title - @field.save - @field = Patchfilefield.where("title"=>@app_title).first - else - @field = Patchfilefield.where("title"=>@app_title).first - end - if params[:font] != nil - if Fontfile.where("title"=>params[:font]).first.nil? == true - @font_settings = Fontfile.new - @font_settings.title = params[:font] - @font_settings.save - end - @font_settings = Fontfile.where("title"=>params[:font]).first - end - if Filefield.where("title"=>@app_title).take_while{true}.count == 0 - @file_to_show = Filefield.new() - @file_to_show.title=@app_title - @file_to_show.save - @file_to_show = Filefield.where("title"=>@app_title).first - else - @default_field = Filefield.new() - @file_to_show = Filefield.where("title"=>@app_title).first - @default_field.file_show.each do |name,property| - if @file_to_show.file_show[name] == nil - @file_to_show.file_show[name] = property - @file_to_show.save - @file_to_show = Filefield.where("title"=>@app_title).first - end - end - @default_field.file_show.each do |name,property| - property[:files].each do |file_name,sub_property| - if @file_to_show.file_show[name][:files][file_name] == nil - @file_to_show.file_show[name][:files][file_name] = sub_property - @file_to_show.save - @file_to_show = Filefield.where("title"=>@app_title).first - end - end - end - end - end end \ No newline at end of file diff --git a/app/views/admin/patchfiles/index.html.erb b/app/views/admin/patchfiles/index.html.erb index 27e46d6..b81fcf2 100644 --- a/app/views/admin/patchfiles/index.html.erb +++ b/app/views/admin/patchfiles/index.html.erb @@ -55,226 +55,234 @@
<% @i = 0 %> + +
<%=form_for @file_to_show ,:url=>{:controller=>"patchfiles" ,:action=>"edit"} do |file|%> - <%= file.fields_for :file_show do |filefield|%> -
- - <% @file_to_show.file_show.each do |name,property| %> - - <%if property[:status].to_i == 1%> - <%=filefield.check_box name,{:checked=>true,:id=>"checkbox"+@i.to_s,:class=>"checkbox",:style=>"float:left;"}%> - <%else%> - <%=filefield.check_box name,{:checked=>false,:id=>"checkbox"+@i.to_s,:class=>"checkbox",:style=>"float:left;"}%> - <%end%> - -
- <% @i = @i+1 %> - <% @j = 0 %> - <%= file.fields_for :sub_file_fields do |each_files|%> - <%= each_files.fields_for name do |each_file|%> - <% property[:files].each do |file_name,sub_property| %> - <%if sub_property[:status].to_i == 1%> - <%=each_file.check_box file_name,{:checked=>true,:id=>"checkbox"+@i.to_s,:class=>"sub_checkbox",:style=>"float:left;margin-left:1em;",:index=>@j}%> - <%else%> - <%=each_file.check_box file_name,{:checked=>false,:id=>"checkbox"+@i.to_s,:class=>"sub_checkbox",:style=>"float:left;margin-left:1em;",:index=>@j}%> - <%end%> - <% file_name = file_name.gsub("@",".") %> - -
- <% @i = @i+1 %> - <% @j = @j+1 %> - <% end %> - <%end%> - <%end%> -
- <%end%> -
- <%end%> - <%=file.submit "#{t(:updatefont)}",{:id=>"updatebtn",:onclick=>"return updatefcn()"}%> - <%=file.text_field :recovery_btn, {:id=>"hidden-recovery",:type => "hidden",:value=>"false"} %> - <%=file.text_field :refresh_btn, {:id=>"hidden-refresh",:type => "hidden",:value=>"false"} %> - - - + <%= file.fields_for :file_show do |filefield|%> +
+ + <% @file_to_show.file_show.each do |name,property| %> + + <%if property[:status].to_i == 1%> + <%=filefield.check_box name,{:checked=>true,:id=>"checkbox"+@i.to_s,:class=>"checkbox",:style=>"float:left;"}%> + <%else%> + <%=filefield.check_box name,{:checked=>false,:id=>"checkbox"+@i.to_s,:class=>"checkbox",:style=>"float:left;"}%> + <%end%> + +
+ <% @i = @i+1 %> + <% @j = 0 %> + <%= file.fields_for :sub_file_fields do |each_files|%> + <%= each_files.fields_for name do |each_file|%> + <% property[:files].each do |file_name,sub_property| %> + <%if sub_property[:status].to_i == 1%> + <%=each_file.check_box file_name,{:checked=>true,:id=>"checkbox"+@i.to_s,:class=>"sub_checkbox",:style=>"float:left;margin-left:1em;",:index=>@j}%> + <%else%> + <%=each_file.check_box file_name,{:checked=>false,:id=>"checkbox"+@i.to_s,:class=>"sub_checkbox",:style=>"float:left;margin-left:1em;",:index=>@j}%> + <%end%> + <% file_name = file_name.gsub("@",".") %> + +
+ <% @i = @i+1 %> + <% @j = @j+1 %> + <% end %> + <%end%> + <%end%> +
+ <%end%> +
+ <%end%> + <%=file.submit "#{t(:updatefont)}",{:id=>"updatebtn",:onclick=>"return updatefcn()"}%> + <%=file.text_field :recovery_btn, {:id=>"hidden-recovery",:type => "hidden",:value=>"false"} %> + <%=file.text_field :refresh_btn, {:id=>"hidden-refresh",:type => "hidden",:value=>"false"} %> + + + <%end%> 網站目錄根路徑:<%=Dir.pwd.to_s%>
  • - CKEDITOR現有字形 - <% @ckicktosee_str = (I18n.locale.to_s == "en") ? "click me to see all font which CKEDITOR have now" : "點擊我來查看編輯器所有目前擁有的字形" %> - <%= @ckicktosee_str %> - + CKEDITOR現有字形 + <% @ckicktosee_str = (I18n.locale.to_s == "en") ? "click me to see all font which CKEDITOR have now" : "點擊我來查看編輯器所有目前擁有的字形" %> + <%= @ckicktosee_str %> +
  • \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 45fbacf..83e7e66 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -4,18 +4,18 @@ Rails.application.routes.draw do scope "(:locale)", locale: Regexp.new(locales.join("|")) do namespace :admin do - get 'patchfiles' , to: 'patchfiles#index' - get 'patchfiles/showckeditor' , to: 'patchfiles#showckeditor' - get 'patchfiles/editckeditor' , to: 'patchfiles#editckeditor' - get 'patchfiles/editfontfile' , to: 'patchfiles#editfontfile' - post 'patchfiles/newfont' , to: 'patchfiles#newfont' - get 'patchfiles/newfont' , to: 'patchfiles#newfont' - patch 'patchfiles/newfont' , to: 'patchfiles#newfont' - post 'patchfiles/edit' , to: 'patchfiles#edit' - get 'patchfiles/edit' , to: 'patchfiles#edit' - patch 'patchfiles/edit' , to: 'patchfiles#edit' - - resources :patchfiles + get 'patchfiles' , to: 'patchfiles#index' + get 'patchfiles/repair_module' , to: 'patchfiles#repair_module' + get 'patchfiles/showckeditor' , to: 'patchfiles#showckeditor' + get 'patchfiles/editckeditor' , to: 'patchfiles#editckeditor' + get 'patchfiles/editfontfile' , to: 'patchfiles#editfontfile' + post 'patchfiles/newfont' , to: 'patchfiles#newfont' + get 'patchfiles/newfont' , to: 'patchfiles#newfont' + patch 'patchfiles/newfont' , to: 'patchfiles#newfont' + post 'patchfiles/edit' , to: 'patchfiles#edit' + get 'patchfiles/edit' , to: 'patchfiles#edit' + patch 'patchfiles/edit' , to: 'patchfiles#edit' + resources :patchfiles end end