gfdnavi 1.3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/ChangeLog +10949 -0
- data/LICENCE.txt +57 -0
- data/Makefile +18 -0
- data/TODO +132 -0
- data/app/controllers/analysis_controller.rb +700 -0
- data/app/controllers/application.rb +41 -0
- data/app/controllers/draw_method_controller.rb +172 -0
- data/app/controllers/explorer_controller.rb +197 -0
- data/app/controllers/finder_controller.rb +331 -0
- data/app/controllers/function_controller.rb +204 -0
- data/app/controllers/group_controller.rb +115 -0
- data/app/controllers/keyword_attributes_controller.rb +52 -0
- data/app/controllers/knowledge_controller.rb +928 -0
- data/app/controllers/nodes_controller.rb +515 -0
- data/app/controllers/search_controller.rb +341 -0
- data/app/controllers/user_controller.rb +337 -0
- data/app/helpers/analysis_helper.rb +2 -0
- data/app/helpers/application_helper.rb +105 -0
- data/app/helpers/description_helper.rb +2 -0
- data/app/helpers/function_helper.rb +2 -0
- data/app/helpers/group_helper.rb +2 -0
- data/app/helpers/search_helper.rb +3 -0
- data/app/helpers/user_helper.rb +2 -0
- data/app/helpers/work_flow_helper.rb +92 -0
- data/app/models/actual_file.rb +3 -0
- data/app/models/analysis.rb +715 -0
- data/app/models/analysis_history.rb +42 -0
- data/app/models/cross_array.rb +22 -0
- data/app/models/cross_result.rb +254 -0
- data/app/models/derived_spatial_attribute.rb +3 -0
- data/app/models/diagram_cache.rb +16 -0
- data/app/models/diagram_cache_datum.rb +4 -0
- data/app/models/diagram_cache_session.rb +8 -0
- data/app/models/directory.rb +21 -0
- data/app/models/draw_method.rb +48 -0
- data/app/models/draw_method_attribute.rb +8 -0
- data/app/models/draw_parameter.rb +12 -0
- data/app/models/explorer_query.rb +354 -0
- data/app/models/explorer_result.rb +312 -0
- data/app/models/function.rb +75 -0
- data/app/models/function_argument.rb +6 -0
- data/app/models/function_output.rb +4 -0
- data/app/models/group.rb +153 -0
- data/app/models/image.rb +20 -0
- data/app/models/keyword_attribute.rb +179 -0
- data/app/models/knowledge.rb +94 -0
- data/app/models/knowledge_backup.rb +32 -0
- data/app/models/knowledge_figure.rb +16 -0
- data/app/models/knowledge_figure_backup.rb +16 -0
- data/app/models/knowledge_parser.rb +392 -0
- data/app/models/node.rb +605 -0
- data/app/models/node_entity_abstract.rb +112 -0
- data/app/models/node_lineage.rb +6 -0
- data/app/models/node_relation.rb +4 -0
- data/app/models/path_node.rb +60 -0
- data/app/models/query.rb +193 -0
- data/app/models/query_history.rb +12 -0
- data/app/models/results.rb +48 -0
- data/app/models/sign_up_user.rb +25 -0
- data/app/models/spatial_and_time_attribute.rb +11 -0
- data/app/models/user.rb +115 -0
- data/app/models/user_mailer.rb +48 -0
- data/app/models/value_type.rb +3 -0
- data/app/models/variable.rb +70 -0
- data/app/models/virtual_node.rb +457 -0
- data/app/views/analysis/__help_analysis_tab.en.html +57 -0
- data/app/views/analysis/__help_draw_share.en.html +12 -0
- data/app/views/analysis/__help_draw_tab.en.html +6 -0
- data/app/views/analysis/_analysis_function_settings.rhtml +61 -0
- data/app/views/analysis/_analysis_settings.rhtml +28 -0
- data/app/views/analysis/_diagram.rhtml +70 -0
- data/app/views/analysis/_dimension_option.rhtml +59 -0
- data/app/views/analysis/_draw_general_settings.rhtml +217 -0
- data/app/views/analysis/_draw_settings.rhtml +73 -0
- data/app/views/analysis/_history.rhtml +19 -0
- data/app/views/analysis/_popular_diagrams.rhtml +42 -0
- data/app/views/analysis/_save_form.rhtml +44 -0
- data/app/views/analysis/_variables.rhtml +66 -0
- data/app/views/analysis/_variables_order.rhtml +56 -0
- data/app/views/analysis/index.rhtml +195 -0
- data/app/views/analysis/preview.rhtml +3 -0
- data/app/views/analysis/save.rhtml +73 -0
- data/app/views/analysis/show_diagram.rhtml +42 -0
- data/app/views/cross/_display_map.rhtml +201 -0
- data/app/views/cross/_result.rhtml +205 -0
- data/app/views/cross/_show_result_tree.rhtml +40 -0
- data/app/views/cross/_show_results.rhtml +80 -0
- data/app/views/cross/_style.rhtml +21 -0
- data/app/views/cross/index.rhtml +271 -0
- data/app/views/draw_method/_edit_form.rhtml +110 -0
- data/app/views/draw_method/create.rhtml +8 -0
- data/app/views/draw_method/details.rhtml +113 -0
- data/app/views/draw_method/edit.rhtml +8 -0
- data/app/views/draw_method/list.rhtml +80 -0
- data/app/views/explorer/_display_map.rhtml +199 -0
- data/app/views/explorer/_show_result_tree.rhtml +40 -0
- data/app/views/explorer/_show_results.rhtml +101 -0
- data/app/views/explorer/_style.rhtml +21 -0
- data/app/views/explorer/index.rhtml +214 -0
- data/app/views/finder/_children.html.erb +84 -0
- data/app/views/finder/_children_details.html.erb +74 -0
- data/app/views/finder/_children_details_tr.html.erb +196 -0
- data/app/views/finder/create_tree.html.erb +15 -0
- data/app/views/finder/flex.html.erb +52 -0
- data/app/views/finder/index.html.erb +47 -0
- data/app/views/finder/show_details.html.erb +3 -0
- data/app/views/finder/show_images.html.erb +3 -0
- data/app/views/function/_edit_form.rhtml +106 -0
- data/app/views/function/create.rhtml +8 -0
- data/app/views/function/details.rhtml +96 -0
- data/app/views/function/edit.rhtml +8 -0
- data/app/views/function/list.rhtml +80 -0
- data/app/views/group/add_member.rhtml +13 -0
- data/app/views/group/change_owner.rhtml +15 -0
- data/app/views/group/create.rhtml +11 -0
- data/app/views/group/delete_member.rhtml +14 -0
- data/app/views/group/list.rhtml +63 -0
- data/app/views/knowledge/_backup.rhtml +135 -0
- data/app/views/knowledge/_category.rhtml +58 -0
- data/app/views/knowledge/_category_list.rhtml +34 -0
- data/app/views/knowledge/_category_table.rhtml +23 -0
- data/app/views/knowledge/_comment.rhtml +64 -0
- data/app/views/knowledge/_comment_input_form.rhtml +19 -0
- data/app/views/knowledge/_comments.rhtml +84 -0
- data/app/views/knowledge/_form.rhtml +139 -0
- data/app/views/knowledge/_group_figure_form.rhtml +187 -0
- data/app/views/knowledge/_layout_figure.rhtml +61 -0
- data/app/views/knowledge/_layout_figures_in_a_row_above_text.rhtml +42 -0
- data/app/views/knowledge/_layout_figures_under_text.rhtml +45 -0
- data/app/views/knowledge/_layout_one_figure_above_text.rhtml +28 -0
- data/app/views/knowledge/_summary.rhtml +21 -0
- data/app/views/knowledge/edit.rhtml +37 -0
- data/app/views/knowledge/list.rhtml +287 -0
- data/app/views/knowledge/new.rhtml +23 -0
- data/app/views/knowledge/new_from_analysis.rhtml +21 -0
- data/app/views/knowledge/show.rhtml +196 -0
- data/app/views/layouts/gfdnavi.rhtml +105 -0
- data/app/views/nodes/_ancestors.html.erb +89 -0
- data/app/views/nodes/_description_methods_table.html.erb +75 -0
- data/app/views/nodes/_mode.html.erb +16 -0
- data/app/views/nodes/description.html.erb +181 -0
- data/app/views/nodes/description_methods.html.erb +1 -0
- data/app/views/nodes/edit.html.erb +73 -0
- data/app/views/nodes/index.html.erb +25 -0
- data/app/views/nodes/show.html.erb +20 -0
- data/app/views/search/_children_details_mapsearch.rhtml +68 -0
- data/app/views/search/_children_details_tr.rhtml +205 -0
- data/app/views/search/_show_grouplist.rhtml +74 -0
- data/app/views/search/_show_results.rhtml +43 -0
- data/app/views/search/_show_results_global.rhtml +36 -0
- data/app/views/search/_show_results_partial.rhtml +39 -0
- data/app/views/search/_show_results_partial_groupbyfile.rhtml +50 -0
- data/app/views/search/_show_variablelist.rhtml +28 -0
- data/app/views/search/mapsearch.rhtml +176 -0
- data/app/views/search/remapsearch.rjs +18 -0
- data/app/views/search/show_details.rhtml +3 -0
- data/app/views/user/add_user.rhtml +30 -0
- data/app/views/user/change_password.rhtml +25 -0
- data/app/views/user/edit.html.erb +50 -0
- data/app/views/user/index.rhtml +162 -0
- data/app/views/user/login.rhtml +41 -0
- data/app/views/user/logout.rhtml +4 -0
- data/app/views/user/signup.rhtml +36 -0
- data/app/views/user/signup_succeeded.rhtml +36 -0
- data/app/views/user_mailer/authorization_inform.rhtml +15 -0
- data/app/views/user_mailer/signup_accepted.rhtml +12 -0
- data/app/views/user_mailer/signup_confirm.rhtml +14 -0
- data/app/views/user_mailer/signup_inform.rhtml +13 -0
- data/app/views/user_mailer/signup_rejected.rhtml +11 -0
- data/app/views/work_flow/_push_wsdls.rhtml +55 -0
- data/app/views/work_flow/index.rhtml +46 -0
- data/config/database.yml.example +35 -0
- data/config/environment.rb +68 -0
- data/config/gfdnavi.yml.example +95 -0
- data/config/load_config.rb +151 -0
- data/config/routes.rb +35 -0
- data/consistency_checker.rb +129 -0
- data/data/gfdnavi_docs/how_to_draw_multiple_images.knlge +68 -0
- data/data/gfdnavi_docs/how_to_knowledge.knlge +138 -0
- data/data/gfdnavi_docs/how_to_write_document_about_Gfdnavi.knlge +30 -0
- data/data/samples/jmadata.SIGEN +8 -0
- data/data/samples/jmadata.yml +6 -0
- data/data/samples/jmadata/MSM-P/2006.nc.yml +2 -0
- data/data/samples/jmadata/MSM-P/2006.yml +17 -0
- data/data/samples/jmadata/MSM-P/2006/0101.nc +0 -0
- data/data/samples/jmadata/MSM-P/2006/0101.nc.yml +13 -0
- data/data/samples/jmadata/MSM-P/2006/0102.nc +0 -0
- data/data/samples/jmadata/MSM-P/2006/0103.nc +0 -0
- data/data/samples/jmadata/MSM-P/2006/0104.nc +0 -0
- data/data/samples/jmadata/MSM-P/2006/0105.nc +0 -0
- data/data/samples/jmadata/MSM-P/2006/010[1-3].nc.yml +2 -0
- data/data/samples/jmadata/MSM-P/2006/skip_data.rb +96 -0
- data/data/samples/jmadata/MSM-P/2006/skip_data.sh +6 -0
- data/data/samples/reanalysis.SIGEN +8 -0
- data/data/samples/reanalysis/era40.SIGEN +8 -0
- data/data/samples/reanalysis/era40.yml +2 -0
- data/data/samples/reanalysis/era40/t.jan.nc +0 -0
- data/data/samples/reanalysis/era40/t.jan.nc.yml +1 -0
- data/data/samples/reanalysis/ncep.SIGEN +9 -0
- data/data/samples/reanalysis/ncep/T.jan.100hPa.png +0 -0
- data/data/samples/reanalysis/ncep/T.jan.100hPa.png.yml +43 -0
- data/data/samples/reanalysis/ncep/T.jan.nc +0 -0
- data/data/samples/reanalysis/ncep/T.jan.zonal_mean.nc +0 -0
- data/data/samples/reanalysis/ncep/T.jan.zonal_mean.nc.yml +8 -0
- data/data/samples/reanalysis/ncep/T.jan_only_root.nc +0 -0
- data/data/samples/reanalysis/ncep/T.jan_only_root.nc.yml +4 -0
- data/data/samples/reanalysis/ncep/UV.jan.nc +0 -0
- data/data/samples/reanalysis/ncep/UV.jan.nc.yml +10 -0
- data/data/samples/reanalysis/ncep/UV.jan.nc.yml.ja +11 -0
- data/data/samples/sonde_operational.yml +5 -0
- data/data/samples/sonde_operational/std_plev.yml +12 -0
- data/data/samples/sonde_operational/std_plev/41256.spl.nc +0 -0
- data/data/samples/sonde_operational/std_plev/42410.spl.nc +0 -0
- data/data/samples/sonde_operational/std_plev/43333.spl.nc +0 -0
- data/data/samples/sonde_operational/std_plev/43346.spl.nc +0 -0
- data/data/samples/sonde_operational/std_plev/48698.spl.nc +0 -0
- data/data/samples/sonde_operational/std_plev/61641.spl.nc +0 -0
- data/data/samples/sonde_operational/std_plev/63741.spl.nc +0 -0
- data/data/samples/sonde_operational/std_plev/67083.spl.nc +0 -0
- data/data/samples/sonde_operational/std_plev/72261.spl.nc +0 -0
- data/data/samples/sonde_operational/std_plev/76805.spl.nc +0 -0
- data/data/samples/sonde_operational/std_plev/82193.spl.nc +0 -0
- data/data/samples/sonde_operational/std_plev/91165.spl.nc +0 -0
- data/data/samples/sonde_operational/std_plev/91610.spl.nc +0 -0
- data/data/samples/sonde_operational/std_plev/91948.spl.nc +0 -0
- data/data/samples/sonde_operational/std_plev/94294.spl.nc +0 -0
- data/db/NetCDFparser.rb +406 -0
- data/db/create_derived_spatial_attributes.sql +12 -0
- data/db/draw_methods/line.yml +6 -0
- data/db/draw_methods/scatter.yml +38 -0
- data/db/draw_methods/tone.yml +64 -0
- data/db/draw_methods/vector.yml +19 -0
- data/db/dump_db.rb +43 -0
- data/db/functions/additions.yml +10 -0
- data/db/functions/cut.yml +10 -0
- data/db/functions/division.yml +10 -0
- data/db/functions/mean.yml +28 -0
- data/db/functions/multiplication.yml +10 -0
- data/db/functions/stddev.yml +28 -0
- data/db/functions/subtraction.yml +10 -0
- data/db/migrate/001_initial_scheme.rb +289 -0
- data/db/migrate/002_add_open_id_authentication_tables.rb +20 -0
- data/db/register_directory_tree.rb +760 -0
- data/db/restore_db.rb +60 -0
- data/gfdnavi-install +828 -0
- data/install.rb +828 -0
- data/lib/activerecord_gfdnavi.rb +31 -0
- data/lib/basic_authorization.rb +50 -0
- data/lib/create_activeresources.rb +108 -0
- data/lib/execute_analysis.rb +472 -0
- data/lib/file_gfdnavi.rb +38 -0
- data/lib/gphys_gfdnavi.rb +81 -0
- data/lib/localdir.rb +110 -0
- data/lib/login_system.rb +110 -0
- data/lib/multibytes.rb +20 -0
- data/lib/narray_yaml.rb +58 -0
- data/lib/no_rdb_base.rb +40 -0
- data/lib/opendapdir.rb +171 -0
- data/lib/tar.rb +127 -0
- data/lib/tasks/clean.rake +65 -0
- data/lib/tasks/setup.rake +316 -0
- data/lib/tasks/update.rake +62 -0
- data/lib/vizshot_gfdnavi.rb +224 -0
- data/public/crossdomain.xml +4 -0
- data/public/flex/NodeTreeDescriptor.as +55 -0
- data/public/flex/TreeNode.as +253 -0
- data/public/flex/finder.mxml +304 -0
- data/public/flex/finder.swf +0 -0
- data/public/flex/gfdnavi.mxml +52 -0
- data/public/flex/gfdnavi.swf +0 -0
- data/public/images/Help_S-shots/dir_tree_with_add.jpg +0 -0
- data/public/images/analyze.gif +0 -0
- data/public/images/circle.gif +0 -0
- data/public/images/create_from_analysis_button.png +0 -0
- data/public/images/delete.png +0 -0
- data/public/images/down.png +0 -0
- data/public/images/drawbutton.gif +0 -0
- data/public/images/gfdnavi_home_logo.png +0 -0
- data/public/images/gfdnavi_logo_big.png +0 -0
- data/public/images/gfdnavi_logo_med.png +0 -0
- data/public/images/gfdnavi_logo_mini.png +0 -0
- data/public/images/gfdnavi_logo_nobg_big.png +0 -0
- data/public/images/gfdnavi_logo_nobg_med.png +0 -0
- data/public/images/gfdnavi_logo_nobg_small.png +0 -0
- data/public/images/gfdnavi_logo_small.png +0 -0
- data/public/images/gfdnavi_logo_xsmall.png +0 -0
- data/public/images/hbar.png +0 -0
- data/public/images/helpmark16.png +0 -0
- data/public/images/helpmark18.png +0 -0
- data/public/images/kikyu_g.gif +0 -0
- data/public/images/kikyu_r.gif +0 -0
- data/public/images/map_icon_g.gif +0 -0
- data/public/images/map_icon_r.gif +0 -0
- data/public/images/new_knowledge.png +0 -0
- data/public/images/openid.png +0 -0
- data/public/images/read_in_the_form.png +0 -0
- data/public/images/slider_f.gif +0 -0
- data/public/images/slider_f_red.gif +0 -0
- data/public/images/star1.gif +0 -0
- data/public/images/star2.gif +0 -0
- data/public/images/startanim.gif +0 -0
- data/public/images/stopanim.gif +0 -0
- data/public/images/tree/DL.png +0 -0
- data/public/images/tree/anal_viz.png +0 -0
- data/public/images/tree/analyze_visualize_checked_items.png +0 -0
- data/public/images/tree/binary.png +0 -0
- data/public/images/tree/details.png +0 -0
- data/public/images/tree/download_checked_items.png +0 -0
- data/public/images/tree/folder.png +0 -0
- data/public/images/tree/folder_close.gif +0 -0
- data/public/images/tree/image2.png +0 -0
- data/public/images/tree/knowledge.png +0 -0
- data/public/images/tree/knowledges.png +0 -0
- data/public/images/tree/last.gif +0 -0
- data/public/images/tree/last.png +0 -0
- data/public/images/tree/minus.gif +0 -0
- data/public/images/tree/minus_simple.gif +0 -0
- data/public/images/tree/none.gif +0 -0
- data/public/images/tree/none.png +0 -0
- data/public/images/tree/plus.gif +0 -0
- data/public/images/tree/plus_simple.gif +0 -0
- data/public/images/tree/show.png +0 -0
- data/public/images/tree/show_checked_items.png +0 -0
- data/public/images/tree/t.gif +0 -0
- data/public/images/tree/t.png +0 -0
- data/public/images/tree/tate.gif +0 -0
- data/public/images/tree/tate.png +0 -0
- data/public/images/up.png +0 -0
- data/public/images/vbar.png +0 -0
- data/public/images/white.bmp +0 -0
- data/public/images/x.gif +0 -0
- data/public/index.html +100 -0
- data/public/javascripts/AC_OETags.js +269 -0
- data/public/javascripts/analysis.js +751 -0
- data/public/javascripts/application.js +29 -0
- data/public/javascripts/directory_tree.js +102 -0
- data/public/javascripts/draw_method.js +83 -0
- data/public/javascripts/excanvas.js +704 -0
- data/public/javascripts/function.js +107 -0
- data/public/javascripts/gfdnavi.js +175 -0
- data/public/javascripts/knowledge.js +384 -0
- data/public/javascripts/mapsearch.js +313 -0
- data/public/javascripts/progress.js +42 -0
- data/public/javascripts/resizable_box.js +164 -0
- data/public/javascripts/slider.js +260 -0
- data/public/javascripts/tab.js +17 -0
- data/public/javascripts/work_flow.js +452 -0
- data/public/stylesheets/analysis.css +111 -0
- data/public/stylesheets/description.css +71 -0
- data/public/stylesheets/gfdnavi.css +141 -0
- data/public/stylesheets/knowledge.css +218 -0
- data/public/stylesheets/search.css +184 -0
- data/public/stylesheets/tree.css +45 -0
- data/public/stylesheets/tree_for_ie.css +3 -0
- data/public/stylesheets/work_flow.css +78 -0
- data/script/cleaner +11 -0
- data/script/server_ssl +131 -0
- data/test/fixtures/diagram_cache_data.yml +5 -0
- data/test/fixtures/diagram_cache_sessions.yml +6 -0
- data/test/fixtures/diagram_caches.yml +6 -0
- data/test/fixtures/directories.yml +57 -0
- data/test/fixtures/draw_parameters.yml +6 -0
- data/test/fixtures/function_arguments.yml +15 -0
- data/test/fixtures/function_outputs.yml +15 -0
- data/test/fixtures/functions.yml +29 -0
- data/test/fixtures/group_members.yml +33 -0
- data/test/fixtures/groups.yml +25 -0
- data/test/fixtures/images.yml +12 -0
- data/test/fixtures/keyword_attributes.yml +73 -0
- data/test/fixtures/knowledges.yml +10 -0
- data/test/fixtures/node_relations.yml +11 -0
- data/test/fixtures/nodes.yml +298 -0
- data/test/fixtures/sign_up_users.yml +8 -0
- data/test/fixtures/spatial_and_time_attributes.yml +29 -0
- data/test/fixtures/user_mailer/authorization_inform +11 -0
- data/test/fixtures/user_mailer/signup_accepted +10 -0
- data/test/fixtures/user_mailer/signup_confirm +17 -0
- data/test/fixtures/user_mailer/signup_inform +10 -0
- data/test/fixtures/user_mailer/signup_rejected +9 -0
- data/test/fixtures/users.yml +31 -0
- data/test/fixtures/value_types.yml +10 -0
- data/test/fixtures/variables.yml +17 -0
- data/test/functional/analysis_controller_test.rb +169 -0
- data/test/functional/description_controller_test.rb +18 -0
- data/test/functional/function_controller_test.rb +18 -0
- data/test/functional/group_controller_test.rb +18 -0
- data/test/functional/search_controller_test.rb +83 -0
- data/test/functional/user_controller_test.rb +77 -0
- data/test/functional/webservice_analysis_api_test.rb +12 -0
- data/test/functional/work_flow_controller_test.rb +18 -0
- data/test/test_helper.rb +28 -0
- data/test/unit/diagram_cache_datum_test.rb +10 -0
- data/test/unit/diagram_cache_session_test.rb +10 -0
- data/test/unit/diagram_cache_test.rb +10 -0
- data/test/unit/directory_test.rb +49 -0
- data/test/unit/draw_parameter_test.rb +10 -0
- data/test/unit/function_argument_test.rb +10 -0
- data/test/unit/function_output_test.rb +10 -0
- data/test/unit/function_test.rb +10 -0
- data/test/unit/group_test.rb +48 -0
- data/test/unit/image_test.rb +13 -0
- data/test/unit/keyword_attribute_test.rb +33 -0
- data/test/unit/knowledge_test.rb +13 -0
- data/test/unit/node_relation_test.rb +20 -0
- data/test/unit/node_test.rb +85 -0
- data/test/unit/sign_up_user_test.rb +20 -0
- data/test/unit/spatial_and_time_attribute_test.rb +29 -0
- data/test/unit/user_mailer_test.rb +101 -0
- data/test/unit/user_test.rb +134 -0
- data/test/unit/value_type_test.rb +10 -0
- data/test/unit/variable_test.rb +35 -0
- data/vendor/plugins/acts_as_list/README +23 -0
- data/vendor/plugins/acts_as_list/init.rb +3 -0
- data/vendor/plugins/acts_as_list/lib/active_record/acts/list.rb +256 -0
- data/vendor/plugins/acts_as_list/test/list_test.rb +332 -0
- data/vendor/plugins/acts_as_tree/README +26 -0
- data/vendor/plugins/acts_as_tree/Rakefile +22 -0
- data/vendor/plugins/acts_as_tree/init.rb +1 -0
- data/vendor/plugins/acts_as_tree/lib/active_record/acts/tree.rb +96 -0
- data/vendor/plugins/acts_as_tree/test/abstract_unit.rb +0 -0
- data/vendor/plugins/acts_as_tree/test/acts_as_tree_test.rb +219 -0
- data/vendor/plugins/acts_as_tree/test/database.yml +0 -0
- data/vendor/plugins/acts_as_tree/test/fixtures/mixin.rb +0 -0
- data/vendor/plugins/acts_as_tree/test/fixtures/mixins.yml +0 -0
- data/vendor/plugins/acts_as_tree/test/schema.rb +0 -0
- data/vendor/plugins/will_paginate/CHANGELOG +92 -0
- data/vendor/plugins/will_paginate/LICENSE +18 -0
- data/vendor/plugins/will_paginate/README.rdoc +131 -0
- data/vendor/plugins/will_paginate/Rakefile +62 -0
- data/vendor/plugins/will_paginate/examples/apple-circle.gif +0 -0
- data/vendor/plugins/will_paginate/examples/index.haml +69 -0
- data/vendor/plugins/will_paginate/examples/index.html +92 -0
- data/vendor/plugins/will_paginate/examples/pagination.css +90 -0
- data/vendor/plugins/will_paginate/examples/pagination.sass +91 -0
- data/vendor/plugins/will_paginate/init.rb +1 -0
- data/vendor/plugins/will_paginate/lib/will_paginate.rb +86 -0
- data/vendor/plugins/will_paginate/lib/will_paginate/array.rb +16 -0
- data/vendor/plugins/will_paginate/lib/will_paginate/collection.rb +145 -0
- data/vendor/plugins/will_paginate/lib/will_paginate/core_ext.rb +32 -0
- data/vendor/plugins/will_paginate/lib/will_paginate/finder.rb +247 -0
- data/vendor/plugins/will_paginate/lib/will_paginate/named_scope.rb +132 -0
- data/vendor/plugins/will_paginate/lib/will_paginate/named_scope_patch.rb +39 -0
- data/vendor/plugins/will_paginate/lib/will_paginate/version.rb +9 -0
- data/vendor/plugins/will_paginate/lib/will_paginate/view_helpers.rb +373 -0
- data/vendor/plugins/will_paginate/will_paginate.gemspec +21 -0
- metadata +586 -0
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
class FunctionController < ApplicationController
|
|
2
|
+
layout "gfdnavi"
|
|
3
|
+
|
|
4
|
+
before_filter :login_required
|
|
5
|
+
|
|
6
|
+
def index
|
|
7
|
+
redirect_to :action => "list"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def create
|
|
11
|
+
user = (login=session[:user]) && User.find_by_login(login)
|
|
12
|
+
@directory = "/usr/#{user.login}/functions"
|
|
13
|
+
case request.method
|
|
14
|
+
when :post
|
|
15
|
+
@function = Function.new
|
|
16
|
+
@function.attributes = params[:function]
|
|
17
|
+
@function.owner = user
|
|
18
|
+
@function.path = "#{@directory}/#{@function.name}"
|
|
19
|
+
Node.make_user_directory(@directory, user, 0)
|
|
20
|
+
groups = params[:groups]
|
|
21
|
+
groups.shift if groups[0] == 'only me'
|
|
22
|
+
if user.super_user? && groups[0] == 'everyone' && groups.shift
|
|
23
|
+
@function.other_mode = 4
|
|
24
|
+
else
|
|
25
|
+
@function.other_mode = 0
|
|
26
|
+
end
|
|
27
|
+
@function.set_rgroups(groups) if groups.length > 0
|
|
28
|
+
if check_erb(@function) && check_script(@function)
|
|
29
|
+
flag = nil
|
|
30
|
+
Function.transaction do
|
|
31
|
+
if flag = @function.save
|
|
32
|
+
output_num = params[:output_num].to_i
|
|
33
|
+
output_num.times{|i|
|
|
34
|
+
fo = FunctionOutput.new( params[:output][i.to_s] )
|
|
35
|
+
fo.function = @function
|
|
36
|
+
fo.save!
|
|
37
|
+
}
|
|
38
|
+
argument_num = params[:argument_num].to_i
|
|
39
|
+
argument_num.times{|i|
|
|
40
|
+
param = params[:argument][i.to_s]
|
|
41
|
+
value_type = param.delete(:value_type)
|
|
42
|
+
fa = FunctionArgument.new( param )
|
|
43
|
+
fa.function = @function
|
|
44
|
+
fa.value_type = ValueType.find(:first,:conditions=>["name=?",value_type])
|
|
45
|
+
fa.save!
|
|
46
|
+
}
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
if flag
|
|
50
|
+
flash[:notice] = "create successful"
|
|
51
|
+
redirect_back_or_default :action => "list"
|
|
52
|
+
else
|
|
53
|
+
flash[:notice] = "create unsuccessful"
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
when :get
|
|
57
|
+
@function = Function.new
|
|
58
|
+
end
|
|
59
|
+
@groups = user.own_groups + user.belonging_groups
|
|
60
|
+
@user = user
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def edit
|
|
64
|
+
user = (login=session[:user]) && User.find_by_login(login)
|
|
65
|
+
@function = Function.find(:first, :conditions=>["name=?",params[:id]], :user=>user)
|
|
66
|
+
unless @function && @function.owner==user
|
|
67
|
+
redirect_back_or_default :action => "list"
|
|
68
|
+
return
|
|
69
|
+
end
|
|
70
|
+
@directory = "/usr/#{user.login}/functions"
|
|
71
|
+
case request.method
|
|
72
|
+
when :post
|
|
73
|
+
@function.attributes = params[:function]
|
|
74
|
+
output_num = params[:output_num].to_i
|
|
75
|
+
outputs = @function.function_outputs
|
|
76
|
+
output_num.times{|i|
|
|
77
|
+
param = params[:output][i.to_s]
|
|
78
|
+
if outputs[i]
|
|
79
|
+
fo = outputs[i]
|
|
80
|
+
fo.attributes = param
|
|
81
|
+
else
|
|
82
|
+
fo = outputs.create(param)
|
|
83
|
+
end
|
|
84
|
+
fo.save
|
|
85
|
+
}
|
|
86
|
+
for i in output_num...outputs.length
|
|
87
|
+
outputs[i].destroy
|
|
88
|
+
end
|
|
89
|
+
argument_num = params[:argument_num].to_i
|
|
90
|
+
args = @function.function_arguments
|
|
91
|
+
argument_num.times{|i|
|
|
92
|
+
param = params[:argument][i.to_s]
|
|
93
|
+
value_type = param.delete(:value_type)
|
|
94
|
+
if args[i]
|
|
95
|
+
fa = args[i]
|
|
96
|
+
fa.attributes = param
|
|
97
|
+
else
|
|
98
|
+
fa = args.create(param)
|
|
99
|
+
end
|
|
100
|
+
fa.value_type = ValueType.find(:first,:conditions=>["name=?",value_type])
|
|
101
|
+
fa.save
|
|
102
|
+
}
|
|
103
|
+
for i in argument_num...args.length
|
|
104
|
+
args[i].destroy
|
|
105
|
+
end
|
|
106
|
+
groups = params[:groups]
|
|
107
|
+
groups.shift if groups[0] == 'only me'
|
|
108
|
+
if user.super_user? && groups[0] == 'everyone' && groups.shift
|
|
109
|
+
@function.other_mode = 4
|
|
110
|
+
else
|
|
111
|
+
@function.other_mode = 0
|
|
112
|
+
end
|
|
113
|
+
@function.set_rgroups(groups) if groups.length > 0
|
|
114
|
+
if check_erb(@function) && check_script(@function)
|
|
115
|
+
if @function.save
|
|
116
|
+
flash[:notice] = "edit successful"
|
|
117
|
+
redirect_back_or_default :action => "list"
|
|
118
|
+
else
|
|
119
|
+
flash[:notice] = "edit unsuccessful"
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
@groups = user.own_groups + user.belonging_groups
|
|
124
|
+
@user = user
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def list
|
|
128
|
+
user = (login=session[:user]) && User.find_by_login(login)
|
|
129
|
+
funcs = Function.find(:all, :user => user)
|
|
130
|
+
@own_funcs = Array.new
|
|
131
|
+
@other_funcs = Array.new
|
|
132
|
+
funcs.each{|func|
|
|
133
|
+
if func.owner == user
|
|
134
|
+
@own_funcs.push func
|
|
135
|
+
else
|
|
136
|
+
@other_funcs.push func
|
|
137
|
+
end
|
|
138
|
+
}
|
|
139
|
+
@super_user = user.super_user
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def details
|
|
143
|
+
name = params[:id]
|
|
144
|
+
user = (login=session[:user]) && User.find_by_login(login)
|
|
145
|
+
func = Function.find(:first, :conditions=>["name=?",name], :user=>user)
|
|
146
|
+
if func
|
|
147
|
+
@func = func
|
|
148
|
+
@user = user
|
|
149
|
+
else
|
|
150
|
+
redirect_back_or_default :action => "list"
|
|
151
|
+
return
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def create_setting_html
|
|
156
|
+
unless request.xhr?
|
|
157
|
+
render :nothing => true
|
|
158
|
+
return
|
|
159
|
+
end
|
|
160
|
+
narg = params[:narg].to_i
|
|
161
|
+
args = params[:argument]
|
|
162
|
+
html = ""
|
|
163
|
+
if narg > 0
|
|
164
|
+
html += "<table>\n"
|
|
165
|
+
narg.times{|n|
|
|
166
|
+
html += " <tr>\n"
|
|
167
|
+
arg = args[n.to_s]
|
|
168
|
+
html +=<<-"EOS"
|
|
169
|
+
<td>#{arg["description"]}</td>
|
|
170
|
+
<td>(#{arg["value_type"]})</td>
|
|
171
|
+
<td><input type="text" size="5" value="#{arg["default"]}" name="analysis[function_arguments][#{n}]"/></td>
|
|
172
|
+
EOS
|
|
173
|
+
html += " </tr>\n"
|
|
174
|
+
}
|
|
175
|
+
html += "</table>\n"
|
|
176
|
+
end
|
|
177
|
+
render :update do |page|
|
|
178
|
+
page << "$('function_setting_html').value='#{escape_javascript(html)}'"
|
|
179
|
+
end
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
private
|
|
183
|
+
|
|
184
|
+
def check_script(function)
|
|
185
|
+
script = function.script
|
|
186
|
+
if script =~ /retry/
|
|
187
|
+
flash[:notice] = "you cannot use retry in script"
|
|
188
|
+
return false
|
|
189
|
+
end
|
|
190
|
+
return true
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
def check_erb(function)
|
|
194
|
+
html = function.setting_html
|
|
195
|
+
begin
|
|
196
|
+
ERB.new(html).run
|
|
197
|
+
return true
|
|
198
|
+
rescue SyntaxError
|
|
199
|
+
flash[:notice] = "html is invalid"
|
|
200
|
+
return false
|
|
201
|
+
end
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
end
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
class GroupController < ApplicationController
|
|
2
|
+
layout 'gfdnavi'
|
|
3
|
+
|
|
4
|
+
before_filter :login_required
|
|
5
|
+
|
|
6
|
+
def create
|
|
7
|
+
user = (login=session[:user]) && User.find_by_login(login)
|
|
8
|
+
raise("only super user can create groups") if !User.super_user?(user)
|
|
9
|
+
|
|
10
|
+
case request.method
|
|
11
|
+
when :post
|
|
12
|
+
if user
|
|
13
|
+
group = Group.new(:name => params[:group][:name])
|
|
14
|
+
group.owner = user
|
|
15
|
+
if group.save
|
|
16
|
+
flash['notice'] = "Create group successful"
|
|
17
|
+
redirect_back_or_default :action => "list"
|
|
18
|
+
return
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
flash['notice'] = "Failed to create a group"
|
|
22
|
+
redirect_back_or_default :action => "list"
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def delete
|
|
27
|
+
user = (login=session[:user]) && User.find_by_login(login)
|
|
28
|
+
name = params[:id]
|
|
29
|
+
group = Group.find(:first,:conditions=>["name=?",name])
|
|
30
|
+
if group
|
|
31
|
+
if group.owner == user || User.super_user?(user)
|
|
32
|
+
if group.destroy
|
|
33
|
+
flash[:notice] = "delete group successed #{name}"
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
redirect_back_or_default :action => "list"
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def add_member
|
|
41
|
+
case request.method
|
|
42
|
+
when :post
|
|
43
|
+
if ( group = Group.find(:first,:conditions=>["name=?",params[:id]]) )
|
|
44
|
+
user = (login=session[:user]) && User.find_by_login(login)
|
|
45
|
+
if user.super_user || group.owner == user
|
|
46
|
+
unames = params[:user].split(/[;, ]+/)
|
|
47
|
+
res, mesg = group.add_members(unames)
|
|
48
|
+
flash[:notice] = mesg
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
redirect_back_or_default :action => "list"
|
|
52
|
+
when :get
|
|
53
|
+
@group = Group.find(:first,:conditions=>["name=?",params[:id]])
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def delete_member
|
|
58
|
+
case request.method
|
|
59
|
+
when :post
|
|
60
|
+
if ( group = Group.find(:first,:conditions=>["name=?",params[:id]]) )
|
|
61
|
+
user = (login=session[:user]) && User.find_by_login(login)
|
|
62
|
+
if user.super_user || group.owner == user
|
|
63
|
+
res, mesg = group.del_member(params[:user])
|
|
64
|
+
flash[:notice] = mesg
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
redirect_back_or_default :action => "list"
|
|
68
|
+
when :get
|
|
69
|
+
if (group = Group.find(:first,:condition=>["name=?",params[:id]]))
|
|
70
|
+
@name = group.name
|
|
71
|
+
@members = group.members.collect{|u| u.login}
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def change_owner
|
|
77
|
+
case request.method
|
|
78
|
+
when :post
|
|
79
|
+
if ( group = Group.find(:first,:conditions=>["name=?",params[:id]]) ) && ( owner = User.find(:first,:conditions=>["login=?",(oname=params[:user])]) )
|
|
80
|
+
user = (login=session[:user]) && User.find_by_login(login)
|
|
81
|
+
if user.super_user || group.owner == user
|
|
82
|
+
group.owner = owner
|
|
83
|
+
if group.respond_to?(:update) ? group.update : group.save
|
|
84
|
+
flash[:notice] = "owner was changed to #{oname}"
|
|
85
|
+
else
|
|
86
|
+
flash[:notice] = "faild to change owner"
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
redirect_back_or_default :action => "list"
|
|
91
|
+
when :get
|
|
92
|
+
if (group = Group.find(:first,:conditions=>["name=?",params[:id]]))
|
|
93
|
+
@name = group.name
|
|
94
|
+
members = group.members
|
|
95
|
+
root = User.find_by_sql("SELECT * FROM users WHERE login='root' LIMIT 1")[0]
|
|
96
|
+
members.push(root) unless members.include?(root)
|
|
97
|
+
members.delete(group.owner)
|
|
98
|
+
@members = members.collect{|u| u.login}
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def list
|
|
104
|
+
user = (login=session[:user]) && User.find_by_login(login)
|
|
105
|
+
if User.super_user?(user)
|
|
106
|
+
@own_groups = Group.find(:all)
|
|
107
|
+
@super_user = true
|
|
108
|
+
else
|
|
109
|
+
@own_groups = user.own_groups(true)
|
|
110
|
+
@super_user = false
|
|
111
|
+
end
|
|
112
|
+
@belonging_groups = user.belonging_groups
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
class KeywordAttributesController < ApplicationController
|
|
2
|
+
|
|
3
|
+
layout "gfdnavi"
|
|
4
|
+
|
|
5
|
+
def index
|
|
6
|
+
path = params[:path]
|
|
7
|
+
path = "" unless path
|
|
8
|
+
path = File.join("",path)
|
|
9
|
+
user = (login=session[:user]) && User.find_by_login(login)
|
|
10
|
+
node = Node.find(:first, :conditions => ["path=?",path], :user => user)
|
|
11
|
+
if node
|
|
12
|
+
@kas = node.keyword_attributes
|
|
13
|
+
respond_to do |format|
|
|
14
|
+
format.html
|
|
15
|
+
format.xml { render :xml => @kas}
|
|
16
|
+
end
|
|
17
|
+
else
|
|
18
|
+
respond_to do |format|
|
|
19
|
+
format.html {
|
|
20
|
+
render :text => "not found", :status => :not_found
|
|
21
|
+
}
|
|
22
|
+
format.xml { head :not_found }
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
=begin
|
|
28
|
+
def show
|
|
29
|
+
if id = params[:id]
|
|
30
|
+
user = (login=session[:user]) && User.find_by_login(login)
|
|
31
|
+
ka = KeywordAttribute.find(id)
|
|
32
|
+
if ka && ka.node(false,:user=>user)
|
|
33
|
+
@ka = ka
|
|
34
|
+
respond_to do |format|
|
|
35
|
+
format.html
|
|
36
|
+
format.xml {render :xml => @ka}
|
|
37
|
+
end
|
|
38
|
+
return
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
respond_to do |format|
|
|
42
|
+
format.html {
|
|
43
|
+
flash[:notice] = "not found"
|
|
44
|
+
redirect_to :status => :not_found, :controller => "finder"
|
|
45
|
+
}
|
|
46
|
+
format.xml { head :not_found }
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
=end
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
end
|
|
@@ -0,0 +1,928 @@
|
|
|
1
|
+
require "vizshot_gfdnavi"
|
|
2
|
+
require "pp"
|
|
3
|
+
|
|
4
|
+
class KnowledgeController < ApplicationController
|
|
5
|
+
layout "gfdnavi", :except => [:list_without_layout, :show_without_layout, :category_search]
|
|
6
|
+
before_filter :login_required, :except => [:index, :list, :list_without_layout, :show, :show_without_layout, :appear_comment_input_form, :fig2analysis, :category_search]
|
|
7
|
+
verify :method => :post, :only => [ :destroy, :create, :update ], :redirect_to => { :action => :list }
|
|
8
|
+
|
|
9
|
+
def index
|
|
10
|
+
list
|
|
11
|
+
render :action => 'list'
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# == paginate�𗘗p���āA�m���h�L�������g�̈ꗗ��\������
|
|
15
|
+
def list
|
|
16
|
+
@user = (login=session[:user]) && User.find_by_login(login)
|
|
17
|
+
|
|
18
|
+
# ���̕����̃R�[�h�͎d���Ȃ����G�ȍ��ɂȂ��Ă���B
|
|
19
|
+
# paginate ���\�b�h�͓����I�� find ���\�b�h���g���Ă��邪
|
|
20
|
+
# ���� find �� Rails �Œ�`���ꂽ�I���W�i���̂��̂ł���B
|
|
21
|
+
# ����A�g�����������̂� node.rb �ōĒ�`���� find�B
|
|
22
|
+
# �Ƃ������ƂŁA�d�����邪 node.rb �� find �Ɠ����悤�ȋL�q�������B
|
|
23
|
+
# list_without_layout �ɂ��Ă����l�B
|
|
24
|
+
if Knowledge.respond_to?("paginate")
|
|
25
|
+
# for Rails 2.*
|
|
26
|
+
other_readable_conditions = Node.conditions_to_read(@user)
|
|
27
|
+
unless @user # �O�C�����
|
|
28
|
+
conditions = " AND (#{other_readable_conditions})"
|
|
29
|
+
else
|
|
30
|
+
if @user.super_user
|
|
31
|
+
conditions = ""
|
|
32
|
+
elsif @user.groups == 0 # ���[�U���O���[�v�ɏ������Ȃ��ꍇ
|
|
33
|
+
conditions = " AND (( (owner_id = #{@user.id}) OR (#{other_readable_conditions})))"
|
|
34
|
+
else # ���[�U�����炩�̃O���[�v�ɏ�������ꍇ
|
|
35
|
+
conditions = " AND (( (owner_id = #{@user.id}) OR NOT ((groups_readable & 1) = 0) OR (#{other_readable_conditions})))"
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# �\�[�g
|
|
40
|
+
unless params['sort']
|
|
41
|
+
order = "mtime DESC"
|
|
42
|
+
else
|
|
43
|
+
case params['sort']
|
|
44
|
+
when "time"
|
|
45
|
+
sort_by = "mtime"
|
|
46
|
+
when "author"
|
|
47
|
+
sort_by = "creator"
|
|
48
|
+
else
|
|
49
|
+
sort_by = params['sort']
|
|
50
|
+
end
|
|
51
|
+
order = sort_by
|
|
52
|
+
order += " DESC" if params['reverse_sort'] == 'reverse_sort'
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# �i�荞��
|
|
56
|
+
if params["commit"] == "Search"
|
|
57
|
+
conditions += " AND (knowledges.category = \"#{params['category']}\")" unless params["category"] == ""
|
|
58
|
+
conditions += " AND (knowledges.creator = \"#{params['creator']}\")" unless params["creator"] == ""
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# �y�[�W���O���ĕ\������
|
|
62
|
+
@knowledges = Knowledge.paginate_by_sql("SELECT knowledges.* FROM nodes, knowledges WHERE ((knowledges.node_id=nodes.id) AND (node_type=3) #{conditions} AND (knowledges.comment_on IS NULL)) ORDER BY #{order}", :page => params[:page], :per_page => GFDNAVI_PAGINATE_PER)
|
|
63
|
+
else
|
|
64
|
+
# for Rails 1.*
|
|
65
|
+
@knowledge_pages, @knowledges = paginate :knowledges, :per_page => GFDNAVI_PAGINATE_PER
|
|
66
|
+
@knowledge = Knowledge.find(:all, :user => @user, :order =>"mtime DESC")
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# == ���̉�ʂɖ��ߍ��ނ��߂ɁA
|
|
71
|
+
# ��ʏ㕔��Gfdnavi�̃��j���[���o������list��\������
|
|
72
|
+
# �R�����g�̈ꗗ�\���ȂǂɎg����B
|
|
73
|
+
def list_without_layout
|
|
74
|
+
@list_without_layout = true
|
|
75
|
+
@user = (login=session[:user]) && User.find_by_login(login)
|
|
76
|
+
if params[:node_ids]
|
|
77
|
+
node_ids = params[:node_ids]
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# for Rails 2.*
|
|
81
|
+
unless @user # �O�C�����
|
|
82
|
+
conditions = " AND (#{other_readable_conditions})"
|
|
83
|
+
else
|
|
84
|
+
if @user.super_user
|
|
85
|
+
conditions = ""
|
|
86
|
+
elsif @user.groups == 0 # ���[�U���O���[�v�ɏ������Ȃ��ꍇ
|
|
87
|
+
conditions = " AND (( (owner_id = #{@user.id}) OR (#{other_readable_conditions})))"
|
|
88
|
+
else # ���[�U�����炩�̃O���[�v�ɏ�������ꍇ
|
|
89
|
+
conditions = " AND (( (owner_id = #{@user.id}) OR NOT ((groups_readable & 1) = 0) OR (#{other_readable_conditions})))"
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# �R�����g�̏ꍇ�͌Â����A�����łȂ���ΐV�������ɕ\��
|
|
94
|
+
if params[:from] == "show_comments"
|
|
95
|
+
order = "ORDER BY mtime"
|
|
96
|
+
else
|
|
97
|
+
order = "ORDER BY mtime DESC"
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# Rails 1.* �ւ̑Ή�
|
|
101
|
+
if Knowledge.respond_to?("paginate")
|
|
102
|
+
# for Rails 2.*
|
|
103
|
+
@knowledges = Knowledge.paginate(:all, {:user => @user}, {:page => params[:page], :per_page => 5, :conditions => ["(node_id IN (?))", node_ids], :order =>"mtime DESC"})
|
|
104
|
+
else
|
|
105
|
+
# for Rails 1.*
|
|
106
|
+
@knowledge_pages, @knowledges = paginate :knowledges, :per_page => 5
|
|
107
|
+
@knowledges = []
|
|
108
|
+
for nid in node_ids
|
|
109
|
+
@knowledges.push(Knowledge.find(@user, :first, {:conditions => ["id = ?", nid]}))
|
|
110
|
+
end
|
|
111
|
+
@knowledges = @knowledges.uniq
|
|
112
|
+
@knowledges.sort! {|a,b| b.mtime <=> a.mtime}
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
render :action => 'list'
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
# �m���h�L�������g�̉{��
|
|
119
|
+
def show
|
|
120
|
+
begin
|
|
121
|
+
@user = (login=session[:user]) && User.find_by_login(login)
|
|
122
|
+
@knowledge, @knowledge_figures, @comments, @image_paths, @image_widths, @image_heights, @caption_widths, @caption_heights = Knowledge.read_parameters_of_knowledge_document(params[:path], @user)
|
|
123
|
+
rescue
|
|
124
|
+
flash[:notice] = "The knowledge document doesn't exist."
|
|
125
|
+
redirect_to :action => 'list'
|
|
126
|
+
else
|
|
127
|
+
@num_of_figure = 1 # �R�����g���e�����o���������Ƃ��ɕK�v
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
# ��ʏ㕔��Gfdnavi�̃��j���[���o������show�����s����
|
|
132
|
+
def show_without_layout
|
|
133
|
+
@show_without_layout = true
|
|
134
|
+
show
|
|
135
|
+
render :action => 'show'
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
# list.rhtml -> new.rhtml (Click "New Knowledge" button.)
|
|
139
|
+
def new
|
|
140
|
+
@type = "new"
|
|
141
|
+
@knowledge = Knowledge.new
|
|
142
|
+
@user = (login=session[:user]) && User.find_by_login(login)
|
|
143
|
+
@groups = @user.belonging_groups
|
|
144
|
+
@num_of_figure = 1
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
# Click "Click a Knowledge Document with this/these Image(s)" button in Analysis
|
|
148
|
+
def new_from_analysis
|
|
149
|
+
@type = "new_from_analysis"
|
|
150
|
+
@knowledge = Knowledge.new
|
|
151
|
+
@user = (login=session[:user]) && User.find_by_login(login)
|
|
152
|
+
@groups = @user.belonging_groups
|
|
153
|
+
session[:knowledge] = Hash.new
|
|
154
|
+
|
|
155
|
+
# ��ʓ��ɂ���G�̔ԍ��̔z����擾
|
|
156
|
+
if (diagram_ids = session[:diagrams].dup)
|
|
157
|
+
session[:knowledge_figure] = Hash.new
|
|
158
|
+
session[:knowledge_figure]["diagram_ids"] = diagram_ids
|
|
159
|
+
else
|
|
160
|
+
raise "diagram is not found."
|
|
161
|
+
end
|
|
162
|
+
@num_of_figure = diagram_ids ? diagram_ids.length : 0
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
# Edit a knowledge document.
|
|
166
|
+
# list.rhtml -> edit.rhtml (Click "Edit" link.)
|
|
167
|
+
def edit
|
|
168
|
+
@type = "edit"
|
|
169
|
+
@user = (login=session[:user]) && User.find_by_login(login)
|
|
170
|
+
@groups = @user.belonging_groups
|
|
171
|
+
|
|
172
|
+
# �ҏW�Ώۂ̕����̓��e�����炩���߃t�H�[���ɏ�������ł���
|
|
173
|
+
@knowledge = Knowledge.find(:first, :conditions => ["path=?", params[:path]], :user => @user)
|
|
174
|
+
unless @user == @knowledge.owner || @user.super_user
|
|
175
|
+
flash[:notice] = "Sorry, you don't have the right to edit this document."
|
|
176
|
+
redirect_to :action => "list"
|
|
177
|
+
end
|
|
178
|
+
session[:knowledge] = Hash.new
|
|
179
|
+
session[:knowledge_figure] = Hash.new
|
|
180
|
+
@figure_captions = Array.new
|
|
181
|
+
@figure_paths = Array.new
|
|
182
|
+
|
|
183
|
+
# �������̐}�ɂ��Ă����l
|
|
184
|
+
knowledge_figures = @knowledge.knowledge_figures
|
|
185
|
+
knowledge_figures.each do |kf|
|
|
186
|
+
img = Image.find(kf.image_id, :user => @user)
|
|
187
|
+
@figure_captions << kf.caption
|
|
188
|
+
@figure_paths << img.path
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
@num_of_figure = @knowledge.knowledge_figures.length
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
# create a knowledge document in new.rhtml
|
|
195
|
+
def create_from_new
|
|
196
|
+
if params[:commit] == "Create"
|
|
197
|
+
create
|
|
198
|
+
else
|
|
199
|
+
redirect_to :action => "new"
|
|
200
|
+
end
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
# create a knowledge document in edit.rhtml
|
|
204
|
+
def create_from_edit
|
|
205
|
+
if (params[:commit] == "Save" || params[:commit] == "Save As")
|
|
206
|
+
create
|
|
207
|
+
else
|
|
208
|
+
redirect_to :action => "edit", :path => params[:original_path]
|
|
209
|
+
end
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
# == create a knowledge document in Analysis.
|
|
213
|
+
# Save images in this method, and call create method to make a knowledge document.
|
|
214
|
+
def create_from_analysis
|
|
215
|
+
user = (login=session[:user]) && User.find_by_login(login)
|
|
216
|
+
unless user
|
|
217
|
+
redirect_to :controller=> "knowledge", :action => "index"
|
|
218
|
+
return
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
ActiveRecord::Base::transaction do
|
|
222
|
+
unless params[:commit] == "Create"
|
|
223
|
+
redirect_to :action => "new_from_analysis"
|
|
224
|
+
else
|
|
225
|
+
# �摜��ۑ����邽�߂̃p�X�`�F�b�N�B
|
|
226
|
+
# create���\�b�h���ɂ��������̂����邪�A������͒m�������p�B
|
|
227
|
+
if check_path(params[:node]["path"]) == "path_error."
|
|
228
|
+
redirect_to :action => "list"
|
|
229
|
+
return
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
# === save images
|
|
233
|
+
dirs = params[:node]["path"].split(File::Separator)[0..-2]
|
|
234
|
+
dirname = dirs.join("/")
|
|
235
|
+
dirname = dirname + "/" unless dirname == ""
|
|
236
|
+
filename = params[:node]["path"].split(File::Separator)[-1]
|
|
237
|
+
|
|
238
|
+
if params[:knowledge_figure]
|
|
239
|
+
params[:knowledge_figure].each do |key, value|
|
|
240
|
+
# determine realpath(��p�X) for figure.
|
|
241
|
+
case key.to_i
|
|
242
|
+
when 0..9 then auto_figure_path = "image00" + key.to_s
|
|
243
|
+
when 10..99 then auto_figure_path = "image0" + key.to_s
|
|
244
|
+
else auto_figure_path = "image" + key.to_s
|
|
245
|
+
end
|
|
246
|
+
type = "diagram"
|
|
247
|
+
name = value["filename"]
|
|
248
|
+
|
|
249
|
+
if user.super_user
|
|
250
|
+
value["figure_path"] = "/" + dirname + "." + filename + "/" + auto_figure_path
|
|
251
|
+
else
|
|
252
|
+
value["figure_path"] = "/usr/" + Knowledge.remove_scheme(user) + "/knowledge/" + dirname + "." + filename + "/" + auto_figure_path
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
# group
|
|
256
|
+
group = params[:knowledge]["group_name"]
|
|
257
|
+
|
|
258
|
+
# about groups
|
|
259
|
+
unless params[:groups]
|
|
260
|
+
groups = ['everyone']
|
|
261
|
+
# raise "Check at least 1 group to visible!\n"
|
|
262
|
+
else
|
|
263
|
+
groups = params[:groups].values # Hash to Array
|
|
264
|
+
end
|
|
265
|
+
if groups[0] == 'everyone'
|
|
266
|
+
other_mode = 4
|
|
267
|
+
groups.shift
|
|
268
|
+
else
|
|
269
|
+
other_mode = 0
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
refs = Array.new
|
|
273
|
+
var = Image.new
|
|
274
|
+
|
|
275
|
+
diagram = DiagramCache.find(session[:diagrams][key.to_i - 1])
|
|
276
|
+
viz = YAML.load(diagram.vizshot)
|
|
277
|
+
ids = viz.get_variables.collect{|v| # ���̃u���b�N�͂Ƃ肠�������̂܂܂ɂ��Ă��邪�A�v�Ή�
|
|
278
|
+
if Variable===v && ! v.id
|
|
279
|
+
from = v.fname
|
|
280
|
+
to, pa = auto_file_path("data")
|
|
281
|
+
File.move(from, to)
|
|
282
|
+
v.path = pa + '/' + v.name
|
|
283
|
+
v.owner = user
|
|
284
|
+
v.other_mode = other_mode
|
|
285
|
+
v.set_rgroups(groups) if groups.length > 0
|
|
286
|
+
v.save!
|
|
287
|
+
else
|
|
288
|
+
v = Variable===v ? v : Variable.find(:first, :conditions=>["path=?",v],:user=>user)
|
|
289
|
+
end
|
|
290
|
+
refs << v.node
|
|
291
|
+
v.id
|
|
292
|
+
}
|
|
293
|
+
var.vizshot = viz.to_yaml
|
|
294
|
+
var.path = value["figure_path"] + ".png"
|
|
295
|
+
name = var.name = File.basename(var.path)
|
|
296
|
+
var.owner = user
|
|
297
|
+
var.other_mode = other_mode
|
|
298
|
+
var.node.set_rgroups(groups) if groups.length > 0
|
|
299
|
+
|
|
300
|
+
from = value["diagram_path"]
|
|
301
|
+
to = var.fname
|
|
302
|
+
FileUtils.makedirs( File.dirname(to) )
|
|
303
|
+
|
|
304
|
+
# �m�������쐬�Ɠ����ɕۑ�����摜�ɂ�keyword_attributes�͂��Ȃ�
|
|
305
|
+
|
|
306
|
+
|
|
307
|
+
## If none, make directory.
|
|
308
|
+
# make directories
|
|
309
|
+
make_directories(var, user, groups, other_mode)
|
|
310
|
+
|
|
311
|
+
# save images
|
|
312
|
+
if var.save
|
|
313
|
+
rtype = {"diagram"=>"draw", "data"=>"analyze"}[type]
|
|
314
|
+
refs.each{|ref|
|
|
315
|
+
NodeRelation.new(:name=>rtype, :reference=>ref, :referenced_by=>var.node).save!
|
|
316
|
+
}
|
|
317
|
+
FileUtils.copy( from, to )
|
|
318
|
+
else
|
|
319
|
+
flash[:notice] = "Failed to save images.\n"
|
|
320
|
+
redirect_to :action => "list"
|
|
321
|
+
return
|
|
322
|
+
end
|
|
323
|
+
end
|
|
324
|
+
end
|
|
325
|
+
end
|
|
326
|
+
create
|
|
327
|
+
end
|
|
328
|
+
end
|
|
329
|
+
|
|
330
|
+
# == create and save Knowledge Document
|
|
331
|
+
# �ϐ� @knowledge �� knowledge_figures �ɓ��̓t�H�[������擾�����l��������
|
|
332
|
+
# ��� save (temporary save ���s��).
|
|
333
|
+
#
|
|
334
|
+
# save, temporary save �̏ꍇ������
|
|
335
|
+
# * �ꎞ�ۑ��Ȃ�o�b�N�A�b�v�̂ݕۑ�
|
|
336
|
+
# * �㏑���ۑ��Ȃ�{�̂ƃo�b�N�A�b�v�̗�����ۑ�
|
|
337
|
+
# * ���̂ق��̏ꍇ�͖{�̂̂ݕۑ�
|
|
338
|
+
def create
|
|
339
|
+
# print "========= create ==========\n"
|
|
340
|
+
# print "params = "
|
|
341
|
+
# pp params
|
|
342
|
+
@user = (login=session[:user]) && User.find_by_login(login)
|
|
343
|
+
add_a_comment_button_message = "Add a Comment on this document."
|
|
344
|
+
|
|
345
|
+
# === knowledges table
|
|
346
|
+
# * path check (�㏑�����A�R�����g���͎����Ńp�X�����܂��Ă���̂ŁA�`�F�b�N�͂��Ȃ�)
|
|
347
|
+
unless (params[:original_path] && params[:commit] == "Save") || (params[:commit] == add_a_comment_button_message) || (params[:commit] == "Temporary Save")
|
|
348
|
+
if check_path(params[:node]["path"]) == "path_error."
|
|
349
|
+
redirect_to :action => "list"
|
|
350
|
+
return
|
|
351
|
+
end
|
|
352
|
+
end
|
|
353
|
+
|
|
354
|
+
unless params[:commit]=="Save"
|
|
355
|
+
@knowledge = Knowledge.new
|
|
356
|
+
else
|
|
357
|
+
# ==== Click "Save" button in edit.rhtml
|
|
358
|
+
# * if "Save", insert all original data include "@Knowledge.id"
|
|
359
|
+
begin
|
|
360
|
+
@knowledge = Knowledge.find(:first, :conditions => ["path=?", params[:original_path]], :user => @user)
|
|
361
|
+
@old_knowledge = Knowledge.new
|
|
362
|
+
@old_knowledge.id = @knowledge.id
|
|
363
|
+
@old_knowledge.attributes = @knowledge.attributes
|
|
364
|
+
@old_knowledge.node.attributes = @knowledge.node.attributes
|
|
365
|
+
@old_knowledge.knowledge_figures = @knowledge.knowledge_figures
|
|
366
|
+
rescue
|
|
367
|
+
raise "Specified knowledge is not found or not yours."
|
|
368
|
+
end
|
|
369
|
+
end
|
|
370
|
+
|
|
371
|
+
# * about groups
|
|
372
|
+
if (!params[:groups] || params[:commit] == add_a_comment_button_message)
|
|
373
|
+
@groups = ['everyone']
|
|
374
|
+
else
|
|
375
|
+
# raise "Check at least 1 group to visible!\n" unless params[:groups]
|
|
376
|
+
@groups = params[:groups].values # Hash to Array
|
|
377
|
+
end
|
|
378
|
+
|
|
379
|
+
if @groups[0] == 'everyone'
|
|
380
|
+
other_mode = 4
|
|
381
|
+
@groups.shift
|
|
382
|
+
else
|
|
383
|
+
other_mode = 0
|
|
384
|
+
end
|
|
385
|
+
@knowledge.other_mode = other_mode
|
|
386
|
+
|
|
387
|
+
# * insert title, textbody(and change for RD-like format)
|
|
388
|
+
# , default_layout, horizontal number of figures
|
|
389
|
+
# , height/width, %/px, and size(number).
|
|
390
|
+
horizontal_figures = params[:knowledge]["horizontal_figures"] || 1
|
|
391
|
+
figures_size_status = params[:knowledge]["height_or_width"] == "width" ? 1 : 0
|
|
392
|
+
figures_size_status += 2 if params[:knowledge]["percent_or_pixel"] == "pixel"
|
|
393
|
+
figures_size_number = params[:knowledge]["figures_size_number"] || 100
|
|
394
|
+
|
|
395
|
+
if params[:commit] == add_a_comment_button_message
|
|
396
|
+
# for creating comment, insert knowledge.id to "comment_on"
|
|
397
|
+
if (knowledge = Knowledge.find(:first, :conditions => ["path=?", params[:path]], :user => @user))
|
|
398
|
+
@knowledge.attributes = {"comment_on" => knowledge.node_id}
|
|
399
|
+
end
|
|
400
|
+
# for creating comment, determine "comment_number"
|
|
401
|
+
@knowledge.attributes = {"comment_number" => params[:knowledge]["comment_number"]}
|
|
402
|
+
end
|
|
403
|
+
|
|
404
|
+
@knowledge.attributes = {
|
|
405
|
+
"category" => params[:knowledge]["category"],
|
|
406
|
+
"title" => params[:knowledge]["title"],
|
|
407
|
+
"creator" => params[:knowledge]["creator"],
|
|
408
|
+
"textbody" => params[:knowledge]["textbody"],
|
|
409
|
+
"description" => params[:knowledge]["description"],
|
|
410
|
+
"default_layout" => params[:knowledge]["default_layout"] || 0,
|
|
411
|
+
"horizontal_figures" => horizontal_figures,
|
|
412
|
+
"figures_size_status" => figures_size_status,
|
|
413
|
+
"figures_size_number" => figures_size_number
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
# === nodes table
|
|
417
|
+
# * insert name, path, owner for knowledge.node
|
|
418
|
+
|
|
419
|
+
# * �㏑�����ɂ́A���̃p�X��p����
|
|
420
|
+
# * ����ȊO�̎��́A���͂��ꂽ�p�X��p����
|
|
421
|
+
if params[:commit] == "Save"
|
|
422
|
+
begin
|
|
423
|
+
@knowledge.path = params[:original_path]
|
|
424
|
+
rescue
|
|
425
|
+
flash[:notice] = "Unknown error. The path of original knowledge document doesn't exists."
|
|
426
|
+
redirect_to :action => 'list'
|
|
427
|
+
end
|
|
428
|
+
else
|
|
429
|
+
if params[:node]["path"] && params[:node]["path"] != ""
|
|
430
|
+
filename = params[:node]["path"] + ".knlge"
|
|
431
|
+
elsif params[:original_path]
|
|
432
|
+
filename = params[:original_path] + ".knlge"
|
|
433
|
+
else
|
|
434
|
+
filename = ".knlge"
|
|
435
|
+
end
|
|
436
|
+
|
|
437
|
+
if @user.super_user
|
|
438
|
+
@knowledge.path = "/" + filename
|
|
439
|
+
else
|
|
440
|
+
@knowledge.path = "/usr/"+ Knowledge.remove_scheme(@user) + "/knowledge/" + filename
|
|
441
|
+
end
|
|
442
|
+
end
|
|
443
|
+
|
|
444
|
+
@knowledge.name = File.basename(@knowledge.path)
|
|
445
|
+
|
|
446
|
+
# �㏑���ۑ����A���Ƃ����̃��[�U�ƕʂ̃��[�U(�X�[�p�[���[�U�Ȃ�)�������������Ƃ��Ă��Aowner�͕ύX���Ȃ�
|
|
447
|
+
@knowledge.owner = @user unless params[:commit] == "Save"
|
|
448
|
+
|
|
449
|
+
@knowledge.node.set_rgroups(@groups) if @groups.length > 0
|
|
450
|
+
|
|
451
|
+
# if none, make directory.
|
|
452
|
+
# * path in the disc
|
|
453
|
+
FileUtils.makedirs(File.dirname(@knowledge.fname)) or raise("failed to makedir")
|
|
454
|
+
# * path in gfdnavi
|
|
455
|
+
make_directories(@knowledge, @user, @groups, other_mode)
|
|
456
|
+
|
|
457
|
+
# === knowledge_figures table
|
|
458
|
+
# if "Save", at first keep original knowledge_figures and keyword attributes
|
|
459
|
+
# that are already in the database. (delete them later.)
|
|
460
|
+
if params[:commit]=="Save"
|
|
461
|
+
old_knowledge_figures = KnowledgeFigure.find(:all, :conditions => ["knowledge_id = ?", params[:id]])
|
|
462
|
+
old_keyword_attributes = KeywordAttribute.find(:all, :conditions => ["node_id = ?", @knowledge.node])
|
|
463
|
+
end
|
|
464
|
+
|
|
465
|
+
# params�œn���ꂽ�G��Array(knowledge_figures)�Ɋi�[
|
|
466
|
+
knowledge_figures = Array.new
|
|
467
|
+
if params[:knowledge_figure]
|
|
468
|
+
params[:knowledge_figure].sort {|a, b| a[0].to_i <=> b[0].to_i}.each do |key, value| # �G�̏��Ԃ𐳂����\�[�g
|
|
469
|
+
figure_path = value["figure_path"]
|
|
470
|
+
if figure_path && figure_path != ""
|
|
471
|
+
unless img = Image.find(:first, :conditions => ["path=?", figure_path + ".png"], :user => @user)
|
|
472
|
+
raise "Image file #{figure_path} is not found."
|
|
473
|
+
end
|
|
474
|
+
knowledge_figure = KnowledgeFigure.new(:caption => value["figure_caption"], :image_id => img.node_id)
|
|
475
|
+
knowledge_figure.knowledge = @knowledge
|
|
476
|
+
knowledge_figures.push(knowledge_figure)
|
|
477
|
+
end
|
|
478
|
+
end
|
|
479
|
+
end
|
|
480
|
+
|
|
481
|
+
# �ۑ����悤�Ƃ��Ă���knowledge�I�u�W�F�N�g�ɊG���֘A�t����
|
|
482
|
+
@knowledge.knowledge_figures = knowledge_figures
|
|
483
|
+
|
|
484
|
+
# �����p�ɁAtitle �� textbody �� author(creator) �� category �� keyword_attributes �ɓ����B
|
|
485
|
+
@knowledge.keyword_attributes.build(:name => "title", :value => params[:knowledge]["title"])
|
|
486
|
+
@knowledge.keyword_attributes.build(:name => "textbody", :value => params[:knowledge]["textbody"])
|
|
487
|
+
@knowledge.keyword_attributes.build(:name => "description", :value => params[:knowledge]["description"])
|
|
488
|
+
@knowledge.keyword_attributes.build(:name => "creator", :value => params[:knowledge]["creator"])
|
|
489
|
+
@knowledge.keyword_attributes.build(:name => "category", :value => params[:knowledge]["category"])
|
|
490
|
+
|
|
491
|
+
# �X�V���Amtime���㏑��
|
|
492
|
+
@knowledge.mtime = Time.new unless params[:commit] == "Create"
|
|
493
|
+
|
|
494
|
+
# * �ꎞ�ۑ��Ȃ�o�b�N�A�b�v�̂ݕۑ�
|
|
495
|
+
# * �㏑���ۑ��Ȃ�{�̂ƃo�b�N�A�b�v�̗�����ۑ�
|
|
496
|
+
# * ���̂ق��̏ꍇ�͖{�̂̂ݕۑ�
|
|
497
|
+
if params[:commit] == "Temporary Save"
|
|
498
|
+
create_backup
|
|
499
|
+
@type = params[:type]
|
|
500
|
+
@knowledge = Knowledge.find(params[:document_id], :user => @user) if @type == "edit"
|
|
501
|
+
render :partial => "backup"
|
|
502
|
+
else
|
|
503
|
+
# �m�������� save
|
|
504
|
+
unless @knowledge.save
|
|
505
|
+
if params[:knowledge]["title"] == ""
|
|
506
|
+
flash[:notice] = "Title is empty. Failed to save."
|
|
507
|
+
redirect_to :action => "list"
|
|
508
|
+
else
|
|
509
|
+
flash[:notice] = "Failed to save."
|
|
510
|
+
redirect_to :action => 'list'
|
|
511
|
+
end
|
|
512
|
+
else
|
|
513
|
+
# === �����̏ꍇ�B
|
|
514
|
+
# Create, Save, Save As, new_from_analysis, comment
|
|
515
|
+
|
|
516
|
+
# temporary backup������
|
|
517
|
+
temporary_backups = KnowledgeBackup.find(:all, :conditions => ["backup_on=? AND temporary", @knowledge.path])
|
|
518
|
+
temporary_backups.each do |tb|
|
|
519
|
+
tb.destroy
|
|
520
|
+
end
|
|
521
|
+
|
|
522
|
+
# ���b�Z�[�W���o��
|
|
523
|
+
if params[:commit] == add_a_comment_button_message
|
|
524
|
+
flash[:notice] = "A comment is successfully saved."
|
|
525
|
+
else
|
|
526
|
+
flash[:notice] = "A knowledge document is successfully saved."
|
|
527
|
+
end
|
|
528
|
+
|
|
529
|
+
# �㏑���ۑ��̂Ƃ��A�o�b�N�A�b�v��ʃe�[�u���ɕۑ����Ă���
|
|
530
|
+
if params[:commit] == "Save"
|
|
531
|
+
create_backup
|
|
532
|
+
end
|
|
533
|
+
|
|
534
|
+
# + node_relations table
|
|
535
|
+
# * �摜���琔�l�f�[�^�ւƒH��Anode_relations�e�[�u����
|
|
536
|
+
# �m������ -> ���l�f�[�^�ւ̊W���i�[����
|
|
537
|
+
# * knowledge��node_id���K�v�Ȃ̂ŁA�ۑ���ł���K�v������B
|
|
538
|
+
# ++ Save �̂Ƃ��̂݁A�O�� node_relations ������
|
|
539
|
+
if params[:commit] == "Save"
|
|
540
|
+
old_node_relations = NodeRelation.find(:all, :conditions => ["name=? AND referenced_by=?", "based_on", @knowledge.node_id])
|
|
541
|
+
old_node_relations.each do |relation|
|
|
542
|
+
relation.destroy
|
|
543
|
+
end
|
|
544
|
+
end
|
|
545
|
+
# ++ node_relations �e�[�u���ɊW���L�^����
|
|
546
|
+
begin
|
|
547
|
+
variable_paths = Array.new
|
|
548
|
+
knowledge_figures.each do |figure|
|
|
549
|
+
image = Image.find(figure.image_id, :user => @user)
|
|
550
|
+
vizshot_yaml = image.vizshot
|
|
551
|
+
vizshot = YAML.load(vizshot_yaml)
|
|
552
|
+
analysis = Analysis.from_vizshot(vizshot)
|
|
553
|
+
|
|
554
|
+
analysis.attributes["variables"].each do |variable|
|
|
555
|
+
node_of_variable = Node.find(variable.node_id)
|
|
556
|
+
node_relation = NodeRelation.new
|
|
557
|
+
node_relation.attributes = {:reference => node_of_variable, :referenced_by => @knowledge.node, :name => "based_on"}
|
|
558
|
+
variable_paths.push(variable.path)
|
|
559
|
+
node_relation.save
|
|
560
|
+
end
|
|
561
|
+
end
|
|
562
|
+
rescue
|
|
563
|
+
flash[:notice] = "Unknown error is occurred when NodeRelation objects are created."
|
|
564
|
+
end
|
|
565
|
+
|
|
566
|
+
if variable_paths.length > 0
|
|
567
|
+
node_relation_hash = {"reference" => []}
|
|
568
|
+
variable_paths.uniq.each do |vpath|
|
|
569
|
+
node_relation_hash["reference"].push({"name" => "based_on", "path" => vpath})
|
|
570
|
+
end
|
|
571
|
+
end
|
|
572
|
+
|
|
573
|
+
# If "Save", delete original knowledge_figures.
|
|
574
|
+
if params[:commit] == "Save"
|
|
575
|
+
old_knowledge_figures.each do |old_knowledge_figure|
|
|
576
|
+
old_knowledge_figure.destroy
|
|
577
|
+
end
|
|
578
|
+
old_keyword_attributes.each do |old_keyword_attribute|
|
|
579
|
+
old_keyword_attribute.destroy
|
|
580
|
+
end
|
|
581
|
+
end
|
|
582
|
+
|
|
583
|
+
# == .knlge �t�@�C���쐬
|
|
584
|
+
# * knowledge �e�[�u���̗v�f
|
|
585
|
+
if (comment_on = @knowledge.comment_on && Knowledge.find(@knowledge.comment_on, :user => @user))
|
|
586
|
+
comment_on_path = comment_on.path
|
|
587
|
+
else
|
|
588
|
+
comment_on_path = nil
|
|
589
|
+
end
|
|
590
|
+
|
|
591
|
+
knowledge_hash = {
|
|
592
|
+
"gfdnavi_knowledge" =>
|
|
593
|
+
{
|
|
594
|
+
"title" => @knowledge.title,
|
|
595
|
+
"creator" => @knowledge.creator,
|
|
596
|
+
"category" => @knowledge.category,
|
|
597
|
+
"textbody" => @knowledge.textbody,
|
|
598
|
+
"description" => @knowledge.description,
|
|
599
|
+
"default_layout" => @knowledge.default_layout,
|
|
600
|
+
"horizontal_figures"=> @knowledge.horizontal_figures,
|
|
601
|
+
"knowledge_figures" => [],
|
|
602
|
+
"owner" => @knowledge.owner.login,
|
|
603
|
+
"figures_size_status" => @knowledge.figures_size_status,
|
|
604
|
+
"figures_size_number" => @knowledge.figures_size_number,
|
|
605
|
+
"comment_on" => comment_on_path,
|
|
606
|
+
"comment_number" => @knowledge.comment_number,
|
|
607
|
+
"rgroups" => @groups,
|
|
608
|
+
"other_mode" => @knowledge.other_mode
|
|
609
|
+
}}
|
|
610
|
+
# * knowledge_figures �e�[�u���̗v�f
|
|
611
|
+
@knowledge.knowledge_figures.length.times do |i|
|
|
612
|
+
image_id = @knowledge.knowledge_figures[i].image_id
|
|
613
|
+
image_path = Image.find(image_id, :user => @user).path
|
|
614
|
+
knowledge_hash["gfdnavi_knowledge"]["knowledge_figures"].push({"image_path" => image_path, "caption" => @knowledge.knowledge_figures[i].caption})
|
|
615
|
+
end
|
|
616
|
+
|
|
617
|
+
# * node_relation �e�[�u���̗v�f
|
|
618
|
+
knowledge_hash["gfdnavi_knowledge"].merge!(node_relation_hash) if node_relation_hash
|
|
619
|
+
|
|
620
|
+
# * .knlge�t�@�C���ւ̏�������
|
|
621
|
+
File.open(@knowledge.fname,"w"){|file| file.print knowledge_hash.to_yaml}
|
|
622
|
+
|
|
623
|
+
# * �R�����g�Ȃ�A���̃h�L�������g�� redirect
|
|
624
|
+
if params[:commit] == add_a_comment_button_message
|
|
625
|
+
@knowledge, @knowledge_figures, @comments, @image_paths, @image_widths, @image_heights, @caption_widths, @caption_heights = Knowledge.read_parameters_of_knowledge_document(params[:path], @user)
|
|
626
|
+
@num_of_figure = 1 # �R�����g���e�����o���������Ƃ��ɕK�v
|
|
627
|
+
@displayed_knowledge = @knowledge
|
|
628
|
+
render :partial => 'comments'
|
|
629
|
+
else
|
|
630
|
+
redirect_to :action => 'show', :path => @knowledge.path
|
|
631
|
+
end
|
|
632
|
+
end
|
|
633
|
+
end
|
|
634
|
+
end
|
|
635
|
+
|
|
636
|
+
# == Save backup of knowledge, knowledge figures.
|
|
637
|
+
# params[commit]�� "Save" �� "Temporary Save" �̂Ƃ��ɌĂ��B
|
|
638
|
+
def create_backup
|
|
639
|
+
# === search backups of knowledge.
|
|
640
|
+
if params[:commit] == "Temporary Save"
|
|
641
|
+
saved_backup = @knowledge
|
|
642
|
+
new_version_number = 0
|
|
643
|
+
else
|
|
644
|
+
saved_backup = @old_knowledge
|
|
645
|
+
backups = KnowledgeBackup.find(:all, :conditions => ["backup_on=?", @knowledge.path])
|
|
646
|
+
if backups.length > 0
|
|
647
|
+
backups.collect! {|backup|
|
|
648
|
+
backup = backup.version_number
|
|
649
|
+
}
|
|
650
|
+
new_version_number = backups.max + 1
|
|
651
|
+
else
|
|
652
|
+
new_version_number = 1
|
|
653
|
+
end
|
|
654
|
+
end
|
|
655
|
+
|
|
656
|
+
# === knowledge_backups Table.
|
|
657
|
+
knowledge_backup = KnowledgeBackup.new
|
|
658
|
+
knowledge_backup.attributes = {
|
|
659
|
+
"title" => saved_backup.title,
|
|
660
|
+
"creator" => saved_backup.creator,
|
|
661
|
+
"textbody" => saved_backup.textbody,
|
|
662
|
+
"description" => saved_backup.description,
|
|
663
|
+
"default_layout" => saved_backup.default_layout || 0,
|
|
664
|
+
"horizontal_figures" => saved_backup.horizontal_figures,
|
|
665
|
+
"figures_size_status" => saved_backup.figures_size_status,
|
|
666
|
+
"figures_size_number" => saved_backup.figures_size_number,
|
|
667
|
+
"comment_on" => saved_backup.comment_on,
|
|
668
|
+
"comment_number" => saved_backup.comment_number,
|
|
669
|
+
"mtime" => saved_backup.mtime,
|
|
670
|
+
"backup_on" => saved_backup.path,
|
|
671
|
+
"version_number" => new_version_number,
|
|
672
|
+
"temporary" => (params[:commit]=="Temporary Save"),
|
|
673
|
+
"owner_id" => @user.id,
|
|
674
|
+
"rgroups" => @groups,
|
|
675
|
+
"other_mode" => saved_backup.other_mode
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
@knowledge.id = params[:original_id] if params[:commit] == "Temporary Save"
|
|
679
|
+
knowledge_backup.temporary = (params[:commit] == "Temporary Save")
|
|
680
|
+
knowledge_backup.backup_on = @knowledge.path || "temporarily_backup"
|
|
681
|
+
|
|
682
|
+
# === knowledge_figure_backups Table.
|
|
683
|
+
knowledge_figure_backups = Array.new
|
|
684
|
+
if params[:knowledge_figure]
|
|
685
|
+
params[:knowledge_figure].sort {|a, b| a[0].to_i <=> b[0].to_i}.each do |key, value| # �G�̏��Ԃ𐳂����\�[�g
|
|
686
|
+
if value["figure_path"] && value["figure_path"] != ""
|
|
687
|
+
unless img = Image.find(:first, :conditions => ["path=?", value["figure_path"] + ".png"], :user => @user)
|
|
688
|
+
raise "Image file #{figure_path} is not found."
|
|
689
|
+
end
|
|
690
|
+
knowledge_figure_backup = KnowledgeFigureBackup.new(:caption => value["figure_caption"], :image_id => img.node_id)
|
|
691
|
+
knowledge_figure_backup.knowledge_backup = knowledge_backup
|
|
692
|
+
knowledge_figure_backups.push(knowledge_figure_backup)
|
|
693
|
+
elsif value["diagram_path"] && value["diagram_path"] != ""
|
|
694
|
+
knowledge_figure_backup = KnowledgeFigureBackup.new(:caption => value["figure_caption"])
|
|
695
|
+
knowledge_figure_backup.knowledge_backup = knowledge_backup
|
|
696
|
+
knowledge_figure_backups.push(knowledge_figure_backup)
|
|
697
|
+
end
|
|
698
|
+
end
|
|
699
|
+
end
|
|
700
|
+
knowledge_backup.knowledge_figure_backups = knowledge_figure_backups
|
|
701
|
+
unless knowledge_backup.save
|
|
702
|
+
flash[:notice] = "The backup failed to save."
|
|
703
|
+
end
|
|
704
|
+
|
|
705
|
+
# create ".knlge" file for backup.
|
|
706
|
+
# * knowledge_backups Table.
|
|
707
|
+
knowledge_backup_hash = {
|
|
708
|
+
"gfdnavi_knowledge" =>
|
|
709
|
+
{
|
|
710
|
+
"title" => saved_backup.title,
|
|
711
|
+
"creator" => saved_backup.creator,
|
|
712
|
+
"category" => saved_backup.category,
|
|
713
|
+
"textbody" => saved_backup.textbody,
|
|
714
|
+
"description" => saved_backup.description,
|
|
715
|
+
"default_layout" => saved_backup.default_layout,
|
|
716
|
+
"horizontal_figures"=> saved_backup.horizontal_figures,
|
|
717
|
+
"knowledge_figures" => [],
|
|
718
|
+
"owner" => saved_backup.owner.login,
|
|
719
|
+
"figures_size_status" => saved_backup.figures_size_status,
|
|
720
|
+
"figures_size_number" => saved_backup.figures_size_number,
|
|
721
|
+
"comment_on" => saved_backup.comment_on,
|
|
722
|
+
"comment_number" => saved_backup.comment_number,
|
|
723
|
+
"backup_on" => saved_backup.path,
|
|
724
|
+
"version_number" => new_version_number,
|
|
725
|
+
"temporary" => (params[:commit]=="Temporary Save"),
|
|
726
|
+
"rgroups" => @groups,
|
|
727
|
+
"other_mode" => saved_backup.other_mode
|
|
728
|
+
}}
|
|
729
|
+
# * knowledge_figure_backups Table
|
|
730
|
+
saved_backup.knowledge_figures.length.times do |i|
|
|
731
|
+
image_id = saved_backup.knowledge_figures[i].image_id
|
|
732
|
+
image_path = Image.find(image_id, :user => @user).path
|
|
733
|
+
knowledge_backup_hash["gfdnavi_knowledge"]["knowledge_figures"].push({"image_path" => image_path, "caption" => @knowledge.knowledge_figures[i].caption})
|
|
734
|
+
end
|
|
735
|
+
|
|
736
|
+
# �o�[�W�������̃o�b�N�A�b�v�́A.knlge�t�@�C���Ƃ��ĕۑ�����
|
|
737
|
+
unless params[:commit]=="Temporary Save"
|
|
738
|
+
File.open(saved_backup.fname[0..-7] + "." + new_version_number.to_s + ".knlge","w"){|file| file.print knowledge_backup_hash.to_yaml}
|
|
739
|
+
end
|
|
740
|
+
end
|
|
741
|
+
|
|
742
|
+
# == �m���������f�[�^�x�[�X�ƃf�B�X�N�����������
|
|
743
|
+
def destroy
|
|
744
|
+
@user = (login=session[:user]) && User.find_by_login(login)
|
|
745
|
+
knowledge = Knowledge.find(:first, :conditions => ["path=?", params[:path]], :user => @user)
|
|
746
|
+
|
|
747
|
+
# �֘A����R�����g�̃f�[�^�x�[�X����̏���
|
|
748
|
+
comments = Knowledge.find(:all, :conditions => ["comment_on=?", knowledge.node_id])
|
|
749
|
+
comments.each do |comment|
|
|
750
|
+
comment.destroy
|
|
751
|
+
end
|
|
752
|
+
|
|
753
|
+
# node_relations �e�[�u������̊W�̏���
|
|
754
|
+
node_relations = NodeRelation.find(:all, :conditions => ["name=? AND referenced_by=?", "based_on", knowledge.node_id])
|
|
755
|
+
node_relations.each do |nr|
|
|
756
|
+
nr.destroy
|
|
757
|
+
end
|
|
758
|
+
|
|
759
|
+
# �f�B�X�N���� .knlge �t�@�C��������
|
|
760
|
+
File.delete(knowledge. fname)
|
|
761
|
+
|
|
762
|
+
# �f�[�^�x�[�X����̏���
|
|
763
|
+
knowledge.destroy
|
|
764
|
+
|
|
765
|
+
if knowledge.comment_on
|
|
766
|
+
# �R�����g���폜����ꍇ
|
|
767
|
+
@knowledge, @knowledge_figures, @comments, @image_paths, @image_widths, @image_heights, @caption_widths, @caption_heights = Knowledge.read_parameters_of_knowledge_document(params[:parent_path], @user)
|
|
768
|
+
@displayed_knowledge = @knowledge
|
|
769
|
+
render :partial => 'comments'
|
|
770
|
+
else
|
|
771
|
+
# �R�����g�łȂ��A���ʂ̒m���������폜����ꍇ
|
|
772
|
+
redirect_to :action => 'list'
|
|
773
|
+
end
|
|
774
|
+
end
|
|
775
|
+
|
|
776
|
+
def destroy_backup
|
|
777
|
+
@user = (login=session[:user]) && User.find_by_login(login)
|
|
778
|
+
@type = params[:type]
|
|
779
|
+
@knowledge = Knowledge.find(params[:document_id], :user => @user) if @type == "edit"
|
|
780
|
+
|
|
781
|
+
@knowledge_backup = KnowledgeBackup.find(params[:backup_id])
|
|
782
|
+
knowledge_figure_backup = KnowledgeFigureBackup.new
|
|
783
|
+
|
|
784
|
+
# .knlge�t�@�C���̏���
|
|
785
|
+
# File.delete(@knowledge.fname)
|
|
786
|
+
|
|
787
|
+
# �f�[�^�x�[�X����̏���
|
|
788
|
+
flash[:notice] = "A backup file is failed to delete." unless @knowledge_backup.destroy
|
|
789
|
+
|
|
790
|
+
render :partial => "backup"
|
|
791
|
+
end
|
|
792
|
+
|
|
793
|
+
|
|
794
|
+
# == show.rhtml�̉����ɃR�����g�쐬�p�̃t�H�[�����o��������
|
|
795
|
+
def appear_comment_input_form
|
|
796
|
+
# �o������t�H�[���� partial �Ŗ��ߍ��܂�Ă���̂ŁA
|
|
797
|
+
# �O�C�����A before_filter :login_required ���g�킸��
|
|
798
|
+
# ���O�C����͈�U index (list.rhtml) �܂Ŗ߂��Ă��炤�B
|
|
799
|
+
unless @user = (login=session[:user]) && User.find_by_login(login)
|
|
800
|
+
redirect_to :controller => "user", :action => "login"
|
|
801
|
+
else
|
|
802
|
+
# �����̕ϐ��͊e�R�����g��\������ۂɏ㏑������Ă��܂��Ă���̂�
|
|
803
|
+
# �����ŁA�R�����g�̂���ꂽ�A���̃h�L�������g�̒l���Ăё�����Ă����B
|
|
804
|
+
@knowledge, @knowledge_figures, @comments, @image_paths, @image_widths, @image_heights, @caption_widths, @caption_heights = Knowledge.read_parameters_of_knowledge_document(params[:path], @user)
|
|
805
|
+
@num_of_figure = 1
|
|
806
|
+
@type = "comment"
|
|
807
|
+
|
|
808
|
+
# edit�Ɠ��l�A@knowledge �̒��g�����̂܂܃t�H�[���ɓ���B
|
|
809
|
+
# �������A�R�����g�̏ꍇ�͂��̂܂ܓ����Ă͍���̂ŁA�����ʼn��H���Ă����B
|
|
810
|
+
new_comment_number = @comments.collect{|comment| comment.comment_number}.max || 0 + 1
|
|
811
|
+
@knowledge.title = "Re[#{new_comment_number}]:"+ @knowledge.title
|
|
812
|
+
@knowledge.creator = @user.full_name
|
|
813
|
+
@knowledge.textbody = ""
|
|
814
|
+
@knowledge.description = ""
|
|
815
|
+
render :partial => "comment_input_form"
|
|
816
|
+
end
|
|
817
|
+
end
|
|
818
|
+
|
|
819
|
+
# == �m���h�L�������g�쐬�t�H�[�����́A�O���[�v�̉����̓��͕����� knowledge �e�[�u�����珑���߂��B
|
|
820
|
+
def restore_group_form
|
|
821
|
+
@user = (login=session[:user]) && User.find_by_login(login)
|
|
822
|
+
@groups = @user.belonging_groups
|
|
823
|
+
render :partial => "group_form"
|
|
824
|
+
end
|
|
825
|
+
|
|
826
|
+
# == �m���h�L�������g�쐬�t�H�[�����́A�}�̓��͕����� knowledge_figure_backups �e�[�u�����珑���߂��B
|
|
827
|
+
def restore_knowledge_figure_form
|
|
828
|
+
@type = params[:type]
|
|
829
|
+
@user = (login=session[:user]) && User.find_by_login(login)
|
|
830
|
+
@groups = @user.belonging_groups
|
|
831
|
+
|
|
832
|
+
# list.rhtml -> edit.rhtml (Click "Edit".)
|
|
833
|
+
@knowledge = KnowledgeBackup.find(params[:id])
|
|
834
|
+
@figure_captions = Array.new
|
|
835
|
+
@figure_paths = Array.new
|
|
836
|
+
|
|
837
|
+
knowledge_figures = @knowledge.knowledge_figure_backups
|
|
838
|
+
knowledge_figures.each do |kf|
|
|
839
|
+
@figure_captions << kf.caption
|
|
840
|
+
if (img = Image.find(kf.image_id, :user => @user))
|
|
841
|
+
# �ꎞ�ۑ��̂Ƃ��́A����image_id��null�ɂȂ�B
|
|
842
|
+
@figure_paths << img.node.path
|
|
843
|
+
else
|
|
844
|
+
@figure_paths << kf.temporarily_image_path
|
|
845
|
+
end
|
|
846
|
+
end
|
|
847
|
+
|
|
848
|
+
@num_of_figure = @knowledge.knowledge_figure_backups.length
|
|
849
|
+
render :partial => "knowledge_figure_form"
|
|
850
|
+
end
|
|
851
|
+
|
|
852
|
+
# == ���݂���J�e�S���[�̃��X�g�����o��
|
|
853
|
+
def category_search
|
|
854
|
+
@categories = Array.new
|
|
855
|
+
Knowledge.find(:all, :group => "category", :conditions => ['category LIKE ?', params[:keyword] + '%'], :order => "category").each do |knowledge|
|
|
856
|
+
@categories << knowledge.category
|
|
857
|
+
end
|
|
858
|
+
|
|
859
|
+
render :partial => 'category_table'
|
|
860
|
+
end
|
|
861
|
+
|
|
862
|
+
# /view/knowledge/_layout_figure.rhtml �Ŏg�p
|
|
863
|
+
def fig2analysis
|
|
864
|
+
user = (login=session[:user]) && User.find_by_login(login)
|
|
865
|
+
vizshot_yaml = Image.find(params[:image_id], :user => user).vizshot
|
|
866
|
+
vizshot = YAML.load(vizshot_yaml)
|
|
867
|
+
|
|
868
|
+
analysis = Analysis.from_vizshot(vizshot)
|
|
869
|
+
|
|
870
|
+
session[:analysis] = analysis
|
|
871
|
+
variable = Array.new
|
|
872
|
+
variable = [analysis.attributes["variables"], Node.find(analysis.attributes["variables"][0].attributes["node_id"], :user => user).path]
|
|
873
|
+
session[:variables_list] = variable
|
|
874
|
+
|
|
875
|
+
redirect_to :controller => "analysis", :action => "index"
|
|
876
|
+
end
|
|
877
|
+
|
|
878
|
+
private
|
|
879
|
+
def make_directories(obj, user, groups, other_mode)
|
|
880
|
+
full_path = ""
|
|
881
|
+
parent = nil
|
|
882
|
+
|
|
883
|
+
obj.path.split(File::Separator)[0..-2].each{|dname|
|
|
884
|
+
full_path = File.join(full_path, dname)
|
|
885
|
+
dir = Directory.find(:first, :conditions=>["path=?",full_path], :user=>user)
|
|
886
|
+
unless dir
|
|
887
|
+
dir = Directory.new
|
|
888
|
+
dir.name = dname
|
|
889
|
+
dir.path = full_path
|
|
890
|
+
dir.parent = parent.node
|
|
891
|
+
dir.owner = user
|
|
892
|
+
dir.other_mode = other_mode
|
|
893
|
+
dir.node.set_rgroups(groups) if groups.length > 0
|
|
894
|
+
if full_path == obj.file
|
|
895
|
+
dir.downloadable = obj.downloadable?
|
|
896
|
+
dir.plain_file = true
|
|
897
|
+
end
|
|
898
|
+
dir.save!
|
|
899
|
+
end
|
|
900
|
+
parent = dir
|
|
901
|
+
}
|
|
902
|
+
end
|
|
903
|
+
|
|
904
|
+
# == ���͂��ꂽ�p�X�����������ǂ����ׂ�
|
|
905
|
+
# // �Ȃǂ����������ׂ�B
|
|
906
|
+
def check_path(path)
|
|
907
|
+
case path
|
|
908
|
+
when /\.\.\//
|
|
909
|
+
flash[:notice] = '"../" cannot be used in path.'
|
|
910
|
+
return "path_error."
|
|
911
|
+
when /^\s*$/
|
|
912
|
+
flash[:notice] = 'Path cannot be empty.'
|
|
913
|
+
return "path_error."
|
|
914
|
+
when /^\s*\//, /\/\s*$/, /\/\s*\//
|
|
915
|
+
flash[:notice] = "Directory that doesn't have name is forbidden."
|
|
916
|
+
return "path_error."
|
|
917
|
+
when /\_comment\_/
|
|
918
|
+
flash[:notice] = "\"_comment_\" is forbidden string."
|
|
919
|
+
return "path_error."
|
|
920
|
+
when /\.\d\.$/
|
|
921
|
+
flash[:notice] = "\".number.knlge\" is forbidden string."
|
|
922
|
+
return "path_error."
|
|
923
|
+
end
|
|
924
|
+
end
|
|
925
|
+
|
|
926
|
+
end
|
|
927
|
+
|
|
928
|
+
|