iqvoc 3.2.3
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/Gemfile +69 -0
- data/Gemfile.lock +134 -0
- data/LICENSE +13 -0
- data/README.md +68 -0
- data/Rakefile +23 -0
- data/app/controllers/application_controller.rb +125 -0
- data/app/controllers/collections/hierarchical_controller.rb +44 -0
- data/app/controllers/collections_controller.rb +124 -0
- data/app/controllers/concepts/alphabetical_controller.rb +39 -0
- data/app/controllers/concepts/hierarchical_controller.rb +74 -0
- data/app/controllers/concepts/untranslated_controller.rb +38 -0
- data/app/controllers/concepts/versions_controller.rb +119 -0
- data/app/controllers/concepts_controller.rb +174 -0
- data/app/controllers/dashboard_controller.rb +43 -0
- data/app/controllers/pages_controller.rb +22 -0
- data/app/controllers/rdf_controller.rb +43 -0
- data/app/controllers/search_results_controller.rb +101 -0
- data/app/controllers/triple_store_syncs_controller.rb +45 -0
- data/app/controllers/user_sessions_controller.rb +48 -0
- data/app/controllers/users_controller.rb +81 -0
- data/app/helpers/application_helper.rb +60 -0
- data/app/helpers/concepts_helper.rb +86 -0
- data/app/helpers/dashboard_helper.rb +46 -0
- data/app/helpers/rdf_helper.rb +63 -0
- data/app/helpers/search_results_helper.rb +32 -0
- data/app/models/collection/base.rb +161 -0
- data/app/models/collection/member/base.rb +23 -0
- data/app/models/collection/member/collection.rb +33 -0
- data/app/models/collection/member/concept.rb +33 -0
- data/app/models/collection/unordered.rb +18 -0
- data/app/models/concept/base.rb +418 -0
- data/app/models/concept/relation/base.rb +95 -0
- data/app/models/concept/relation/reverse_relation_extension.rb +49 -0
- data/app/models/concept/relation/skos/base.rb +37 -0
- data/app/models/concept/relation/skos/broader/base.rb +41 -0
- data/app/models/concept/relation/skos/broader/mono.rb +28 -0
- data/app/models/concept/relation/skos/broader/poly.rb +23 -0
- data/app/models/concept/relation/skos/narrower/base.rb +37 -0
- data/app/models/concept/relation/skos/related.rb +21 -0
- data/app/models/concept/skos/base.rb +28 -0
- data/app/models/label/base.rb +98 -0
- data/app/models/label/skos/base.rb +27 -0
- data/app/models/labeling/base.rb +81 -0
- data/app/models/labeling/skos/alt_label.rb +21 -0
- data/app/models/labeling/skos/base.rb +99 -0
- data/app/models/labeling/skos/hidden_label.rb +25 -0
- data/app/models/labeling/skos/pref_label.rb +30 -0
- data/app/models/match/base.rb +57 -0
- data/app/models/match/skos/base.rb +23 -0
- data/app/models/match/skos/broad_match.rb +21 -0
- data/app/models/match/skos/close_match.rb +21 -0
- data/app/models/match/skos/exact_match.rb +21 -0
- data/app/models/match/skos/mapping_relation.rb +21 -0
- data/app/models/match/skos/narrow_match.rb +21 -0
- data/app/models/match/skos/related_match.rb +21 -0
- data/app/models/note/annotated/base.rb +29 -0
- data/app/models/note/base.rb +127 -0
- data/app/models/note/skos/base.rb +52 -0
- data/app/models/note/skos/change_note.rb +38 -0
- data/app/models/note/skos/definition.rb +33 -0
- data/app/models/note/skos/editorial_note.rb +21 -0
- data/app/models/note/skos/example.rb +21 -0
- data/app/models/note/skos/history_note.rb +21 -0
- data/app/models/note/skos/scope_note.rb +21 -0
- data/app/models/origin_mapping.rb +58 -0
- data/app/models/rdf_store.rb +96 -0
- data/app/models/search_extension.rb +58 -0
- data/app/models/user.rb +49 -0
- data/app/models/user_session.rb +23 -0
- data/app/views/collections/_collection.html.erb +10 -0
- data/app/views/collections/_form.html.erb +47 -0
- data/app/views/collections/edit.html.erb +11 -0
- data/app/views/collections/index.html.erb +12 -0
- data/app/views/collections/new.html.erb +7 -0
- data/app/views/collections/show.html.erb +53 -0
- data/app/views/collections/show.iqrdf +22 -0
- data/app/views/concepts/_base_data.html.erb +72 -0
- data/app/views/concepts/_close_match.html.erb +16 -0
- data/app/views/concepts/_show_head.html.erb +23 -0
- data/app/views/concepts/_visualization.html.erb +9 -0
- data/app/views/concepts/alphabetical/_pref_labeling.html.erb +6 -0
- data/app/views/concepts/alphabetical/index.html.erb +17 -0
- data/app/views/concepts/edit.html.erb +32 -0
- data/app/views/concepts/hierarchical/_treeview.html.erb +20 -0
- data/app/views/concepts/hierarchical/index.html.erb +5 -0
- data/app/views/concepts/index.iqrdf +24 -0
- data/app/views/concepts/new.html.erb +3 -0
- data/app/views/concepts/show_published.html.erb +16 -0
- data/app/views/concepts/show_unpublished.html.erb +43 -0
- data/app/views/concepts/untranslated/index.html.erb +23 -0
- data/app/views/dashboard/index.html.erb +47 -0
- data/app/views/errors/access_denied.html.erb +3 -0
- data/app/views/errors/multiple_choices.html.erb +11 -0
- data/app/views/errors/not_found.html.erb +8 -0
- data/app/views/kaminari/_page.html.erb +6 -0
- data/app/views/kaminari/_paginator.html.erb +15 -0
- data/app/views/layouts/_controls.html.erb +37 -0
- data/app/views/layouts/_header.html.erb +1 -0
- data/app/views/layouts/_navigation.html.erb +27 -0
- data/app/views/layouts/_sections.html.erb +8 -0
- data/app/views/layouts/application.html.erb +83 -0
- data/app/views/pages/about.html.erb +77 -0
- data/app/views/partials/_rdf_logo.html.erb +4 -0
- data/app/views/partials/collection/_member.html.erb +14 -0
- data/app/views/partials/collection_label/_search_result.html.erb +5 -0
- data/app/views/partials/concept/_edit_link_base.html.erb +4 -0
- data/app/views/partials/concept/_inline_base.html.erb +4 -0
- data/app/views/partials/concept/_new_link_base.html.erb +4 -0
- data/app/views/partials/concept/relation/_base.html.erb +8 -0
- data/app/views/partials/concept/relation/_edit_base.html.erb +15 -0
- data/app/views/partials/concept/relation/skos/_narrower.html.erb +12 -0
- data/app/views/partials/concept/relation/skos/broader/_mono.html.erb +28 -0
- data/app/views/partials/concept/relation/skos/broader/_poly.html.erb +14 -0
- data/app/views/partials/labeling/skos/_base.html.erb +17 -0
- data/app/views/partials/labeling/skos/_edit_base.html.erb +7 -0
- data/app/views/partials/labeling/skos/_search_result.html.erb +12 -0
- data/app/views/partials/match/_base.html.erb +13 -0
- data/app/views/partials/match/_edit_base.html.erb +6 -0
- data/app/views/partials/note/_base.html.erb +15 -0
- data/app/views/partials/note/_edit_base.html.erb +28 -0
- data/app/views/partials/note/_note.html.erb +14 -0
- data/app/views/partials/note/_search_result.html.erb +8 -0
- data/app/views/partials/note/skos/_edit_change_note.html.erb +47 -0
- data/app/views/partials/note/skos/definition/_search_result.html.erb +8 -0
- data/app/views/rdf/show_concept.iqrdf +5 -0
- data/app/views/search_results/_head_contents.html.erb +4 -0
- data/app/views/search_results/_rdf_links.html.erb +4 -0
- data/app/views/search_results/index.html.erb +92 -0
- data/app/views/search_results/index.iqrdf +33 -0
- data/app/views/triple_store_syncs/new.html.erb +7 -0
- data/app/views/user_sessions/new.html.erb +11 -0
- data/app/views/users/_form.html.erb +45 -0
- data/app/views/users/_user_preference.html.erb +12 -0
- data/app/views/users/edit.html.erb +14 -0
- data/app/views/users/index.html.erb +29 -0
- data/app/views/users/new.html.erb +13 -0
- data/config/application.rb +82 -0
- data/config/boot.rb +29 -0
- data/config/database.template.yml +43 -0
- data/config/database.yml +40 -0
- data/config/deploy/common.rb +79 -0
- data/config/deploy/ec2.rb +43 -0
- data/config/deploy/history.rb +29 -0
- data/config/deploy/innoq.rb +37 -0
- data/config/deploy.rb +72 -0
- data/config/engine.rb +25 -0
- data/config/environment.rb +21 -0
- data/config/environments/development.rb +74 -0
- data/config/environments/production.rb +65 -0
- data/config/environments/production.template.rb +65 -0
- data/config/environments/production_internal.rb +65 -0
- data/config/environments/test.rb +51 -0
- data/config/initializers/action_view.rb +23 -0
- data/config/initializers/active_record.rb +18 -0
- data/config/initializers/backtrace_silencers.rb +23 -0
- data/config/initializers/inflections.rb +26 -0
- data/config/initializers/iqvoc.rb +50 -0
- data/config/initializers/jdbc.rb +23 -0
- data/config/initializers/kaminari_config.rb +8 -0
- data/config/initializers/language.rb +6 -0
- data/config/initializers/mime_types.rb +24 -0
- data/config/initializers/secret_token.rb +29 -0
- data/config/initializers/secret_token.rb.template +29 -0
- data/config/initializers/session_store.rb +24 -0
- data/config/locales/activerecord.de.yml +135 -0
- data/config/locales/activerecord.en.yml +135 -0
- data/config/locales/authlogic.de.yml +38 -0
- data/config/locales/authlogic.en.yml +38 -0
- data/config/locales/de.yml +326 -0
- data/config/locales/defaults.de.yml +153 -0
- data/config/locales/en.yml +332 -0
- data/config/routes.rb +53 -0
- data/config/warble.rb +158 -0
- data/db/iqvoc_test.sqlite3 +0 -0
- data/db/migrate/20100927101502_create_schema.rb +174 -0
- data/db/migrate/20101125141218_add_collection_tables.rb +32 -0
- data/db/migrate/20101129161528_add_type_to_collections.rb +24 -0
- data/db/migrate/20101202094602_add_origin_to_collections.rb +25 -0
- data/db/migrate/20101202135420_rename_collection_contents_to_collection_members.rb +25 -0
- data/db/migrate/20101208103531_add_type_to_collection_contents.rb +27 -0
- data/db/migrate/20101210153916_add_indexes_to_collections.rb +25 -0
- data/db/migrate/20110204121244_create_collection_labels.rb +32 -0
- data/db/migrate/20110208084250_change_origin_lengths.rb +27 -0
- data/db/migrate/20110328124300_discard_collection_specifics.rb +27 -0
- data/db/migrate/20110408120357_remove_classifications_and_classifiers.rb +32 -0
- data/db/migrate/20110408120740_remove_xl_specfic_stuff.rb +39 -0
- data/db/migrate/20110420133640_change_value_in_notes.rb +8 -0
- data/db/migrate/20110427120534_add_published_at_to_labels.rb +9 -0
- data/db/migrate/20110510162719_use_mono_hierarchy_instead_of_poly_hierarchy.rb +13 -0
- data/db/migrate/20110512132624_extend_notes_value_field_length.rb +8 -0
- data/db/migrate/20110525103100_separate_note_annotation_predicates.rb +38 -0
- data/db/migrate/20110615134040_change_umt_note_annotations_to_dct.rb +9 -0
- data/db/schema.rb +127 -0
- data/db/seeds.rb +37 -0
- data/iqvoc.gemspec +27 -0
- data/lib/engine_tasks/assets.rake +49 -0
- data/lib/engine_tasks/db.rake +18 -0
- data/lib/engine_tasks/release.rake +118 -0
- data/lib/iqvoc/ability.rb +44 -0
- data/lib/iqvoc/data_helper.rb +27 -0
- data/lib/iqvoc/deep_cloning.rb +92 -0
- data/lib/iqvoc/rdf_helper.rb +67 -0
- data/lib/iqvoc/skos_importer.rb +144 -0
- data/lib/iqvoc/version.rb +19 -0
- data/lib/iqvoc/versioning.rb +151 -0
- data/lib/iqvoc.rb +228 -0
- data/lib/maker.rb +144 -0
- data/lib/ojdbc14.jar +0 -0
- data/lib/string.rb +23 -0
- data/lib/tasks/importer.rake +16 -0
- data/lib/tasks/jdbc.rake +24 -0
- data/public/404.html +26 -0
- data/public/422.html +26 -0
- data/public/500.html +26 -0
- data/public/favicon.ico +0 -0
- data/public/images/iqvoc/add.png +0 -0
- data/public/images/iqvoc/arrow_down.gif +0 -0
- data/public/images/iqvoc/arrow_up.gif +0 -0
- data/public/images/iqvoc/footer.png +0 -0
- data/public/images/iqvoc/go_there.png +0 -0
- data/public/images/iqvoc/header.png +0 -0
- data/public/images/iqvoc/header_long.png +0 -0
- data/public/images/iqvoc/iqvoc.png +0 -0
- data/public/images/iqvoc/note_add.png +0 -0
- data/public/images/iqvoc/note_delete.png +0 -0
- data/public/images/iqvoc/note_edit.png +0 -0
- data/public/images/iqvoc/ok.png +0 -0
- data/public/images/iqvoc/rails.png +0 -0
- data/public/images/iqvoc/rdf_flyer.gif +0 -0
- data/public/images/iqvoc/red_arrow.png +0 -0
- data/public/images/iqvoc/remove.png +0 -0
- data/public/images/iqvoc/shadow.png +0 -0
- data/public/images/iqvoc/spinner.gif +0 -0
- data/public/images/iqvoc/tokenizer_delete.png +0 -0
- data/public/images/iqvoc/tokenizer_pencile.png +0 -0
- data/public/images/iqvoc/tokenizer_show.png +0 -0
- data/public/images/iqvoc/unfinished.png +0 -0
- data/public/javascripts/iqvoc/application.js +123 -0
- data/public/javascripts/iqvoc/entityselect.js +121 -0
- data/public/javascripts/iqvoc/excanvas.js +35 -0
- data/public/javascripts/iqvoc/iqvoc.js +118 -0
- data/public/javascripts/iqvoc/jit_rgraph.js +153 -0
- data/public/javascripts/iqvoc/jquery-1.6.2.min.js +18 -0
- data/public/javascripts/iqvoc/jquery-treeview/changelog.txt +29 -0
- data/public/javascripts/iqvoc/jquery-treeview/demo/async.html +44 -0
- data/public/javascripts/iqvoc/jquery-treeview/demo/bg.gif +0 -0
- data/public/javascripts/iqvoc/jquery-treeview/demo/demo.js +43 -0
- data/public/javascripts/iqvoc/jquery-treeview/demo/images.html +56 -0
- data/public/javascripts/iqvoc/jquery-treeview/demo/index.html +340 -0
- data/public/javascripts/iqvoc/jquery-treeview/demo/large.html +559 -0
- data/public/javascripts/iqvoc/jquery-treeview/demo/prerendered.html +621 -0
- data/public/javascripts/iqvoc/jquery-treeview/demo/screen.css +24 -0
- data/public/javascripts/iqvoc/jquery-treeview/demo/simple.html +82 -0
- data/public/javascripts/iqvoc/jquery-treeview/demo/source.php +87 -0
- data/public/javascripts/iqvoc/jquery-treeview/demo/source.phps +87 -0
- data/public/javascripts/iqvoc/jquery-treeview/images/ajax-loader.gif +0 -0
- data/public/javascripts/iqvoc/jquery-treeview/images/file.gif +0 -0
- data/public/javascripts/iqvoc/jquery-treeview/images/folder-closed.gif +0 -0
- data/public/javascripts/iqvoc/jquery-treeview/images/folder.gif +0 -0
- data/public/javascripts/iqvoc/jquery-treeview/images/minus.gif +0 -0
- data/public/javascripts/iqvoc/jquery-treeview/images/plus.gif +0 -0
- data/public/javascripts/iqvoc/jquery-treeview/images/treeview-black-line.gif +0 -0
- data/public/javascripts/iqvoc/jquery-treeview/images/treeview-black.gif +0 -0
- data/public/javascripts/iqvoc/jquery-treeview/images/treeview-default-line.gif +0 -0
- data/public/javascripts/iqvoc/jquery-treeview/images/treeview-default.gif +0 -0
- data/public/javascripts/iqvoc/jquery-treeview/images/treeview-famfamfam-line.gif +0 -0
- data/public/javascripts/iqvoc/jquery-treeview/images/treeview-famfamfam.gif +0 -0
- data/public/javascripts/iqvoc/jquery-treeview/images/treeview-gray-line.gif +0 -0
- data/public/javascripts/iqvoc/jquery-treeview/images/treeview-gray.gif +0 -0
- data/public/javascripts/iqvoc/jquery-treeview/images/treeview-red-line.gif +0 -0
- data/public/javascripts/iqvoc/jquery-treeview/images/treeview-red.gif +0 -0
- data/public/javascripts/iqvoc/jquery-treeview/jquery.treeview.async.js +82 -0
- data/public/javascripts/iqvoc/jquery-treeview/jquery.treeview.css +75 -0
- data/public/javascripts/iqvoc/jquery-treeview/jquery.treeview.js +251 -0
- data/public/javascripts/iqvoc/jquery-treeview/jquery.treeview.min.js +15 -0
- data/public/javascripts/iqvoc/jquery-treeview/jquery.treeview.pack.js +16 -0
- data/public/javascripts/iqvoc/jquery-treeview/lib/jquery.cookie.js +92 -0
- data/public/javascripts/iqvoc/jquery-treeview/lib/jquery.js +3363 -0
- data/public/javascripts/iqvoc/jquery-treeview/todo +8 -0
- data/public/javascripts/iqvoc/jquery-ui-1.8.13.custom.js +3229 -0
- data/public/javascripts/iqvoc/jquery-ui-1.8.13.custom.min.js +163 -0
- data/public/javascripts/iqvoc/jquery-ui.datepicker-de.js +22 -0
- data/public/javascripts/iqvoc/json2.js +480 -0
- data/public/javascripts/iqvoc/langselect.js +73 -0
- data/public/javascripts/iqvoc/rails.js +132 -0
- data/public/javascripts/iqvoc/storage.js +122 -0
- data/public/javascripts/iqvoc/visualization.js +321 -0
- data/public/robots.txt +5 -0
- data/public/stylesheets/iqvoc/blueprint/ie.css +35 -0
- data/public/stylesheets/iqvoc/blueprint/plugins/buttons/icons/cross.png +0 -0
- data/public/stylesheets/iqvoc/blueprint/plugins/buttons/icons/key.png +0 -0
- data/public/stylesheets/iqvoc/blueprint/plugins/buttons/icons/tick.png +0 -0
- data/public/stylesheets/iqvoc/blueprint/plugins/buttons/readme.txt +32 -0
- data/public/stylesheets/iqvoc/blueprint/plugins/buttons/screen.css +97 -0
- data/public/stylesheets/iqvoc/blueprint/plugins/fancy-type/readme.txt +14 -0
- data/public/stylesheets/iqvoc/blueprint/plugins/fancy-type/screen.css +71 -0
- data/public/stylesheets/iqvoc/blueprint/plugins/link-icons/icons/doc.png +0 -0
- data/public/stylesheets/iqvoc/blueprint/plugins/link-icons/icons/email.png +0 -0
- data/public/stylesheets/iqvoc/blueprint/plugins/link-icons/icons/external.png +0 -0
- data/public/stylesheets/iqvoc/blueprint/plugins/link-icons/icons/feed.png +0 -0
- data/public/stylesheets/iqvoc/blueprint/plugins/link-icons/icons/im.png +0 -0
- data/public/stylesheets/iqvoc/blueprint/plugins/link-icons/icons/pdf.png +0 -0
- data/public/stylesheets/iqvoc/blueprint/plugins/link-icons/icons/visited.png +0 -0
- data/public/stylesheets/iqvoc/blueprint/plugins/link-icons/icons/xls.png +0 -0
- data/public/stylesheets/iqvoc/blueprint/plugins/link-icons/readme.txt +18 -0
- data/public/stylesheets/iqvoc/blueprint/plugins/link-icons/screen.css +40 -0
- data/public/stylesheets/iqvoc/blueprint/plugins/rtl/readme.txt +10 -0
- data/public/stylesheets/iqvoc/blueprint/plugins/rtl/screen.css +110 -0
- data/public/stylesheets/iqvoc/blueprint/print.css +29 -0
- data/public/stylesheets/iqvoc/blueprint/screen.css +258 -0
- data/public/stylesheets/iqvoc/blueprint/src/forms.css +65 -0
- data/public/stylesheets/iqvoc/blueprint/src/grid.css +280 -0
- data/public/stylesheets/iqvoc/blueprint/src/grid.png +0 -0
- data/public/stylesheets/iqvoc/blueprint/src/ie.css +76 -0
- data/public/stylesheets/iqvoc/blueprint/src/print.css +85 -0
- data/public/stylesheets/iqvoc/blueprint/src/reset.css +45 -0
- data/public/stylesheets/iqvoc/blueprint/src/typography.css +106 -0
- data/public/stylesheets/iqvoc/forms.css +71 -0
- data/public/stylesheets/iqvoc/images/back.png +0 -0
- data/public/stylesheets/iqvoc/images/branch.png +0 -0
- data/public/stylesheets/iqvoc/images/categ.png +0 -0
- data/public/stylesheets/iqvoc/images/categ_open.png +0 -0
- data/public/stylesheets/iqvoc/images/go_there.png +0 -0
- data/public/stylesheets/iqvoc/images/iqvoc.png +0 -0
- data/public/stylesheets/iqvoc/images/leaf_end.png +0 -0
- data/public/stylesheets/iqvoc/images/leaf_end_filled.png +0 -0
- data/public/stylesheets/iqvoc/images/leaf_mid.png +0 -0
- data/public/stylesheets/iqvoc/images/leaf_mid_filled.png +0 -0
- data/public/stylesheets/iqvoc/images/leaf_nothing.png +0 -0
- data/public/stylesheets/iqvoc/images/leaf_only.png +0 -0
- data/public/stylesheets/iqvoc/images/leaf_only_filled.png +0 -0
- data/public/stylesheets/iqvoc/images/leaf_top.png +0 -0
- data/public/stylesheets/iqvoc/images/leaf_top_filled.png +0 -0
- data/public/stylesheets/iqvoc/images/nothing.png +0 -0
- data/public/stylesheets/iqvoc/images/top_01.png +0 -0
- data/public/stylesheets/iqvoc/images/trunk.png +0 -0
- data/public/stylesheets/iqvoc/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/public/stylesheets/iqvoc/images/ui-bg_flat_55_fbec88_40x100.png +0 -0
- data/public/stylesheets/iqvoc/images/ui-bg_glass_75_d0e5f5_1x400.png +0 -0
- data/public/stylesheets/iqvoc/images/ui-bg_glass_85_dfeffc_1x400.png +0 -0
- data/public/stylesheets/iqvoc/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/public/stylesheets/iqvoc/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png +0 -0
- data/public/stylesheets/iqvoc/images/ui-bg_inset-hard_100_f5f8f9_1x100.png +0 -0
- data/public/stylesheets/iqvoc/images/ui-bg_inset-hard_100_fcfdfd_1x100.png +0 -0
- data/public/stylesheets/iqvoc/images/ui-icons_217bc0_256x240.png +0 -0
- data/public/stylesheets/iqvoc/images/ui-icons_2e83ff_256x240.png +0 -0
- data/public/stylesheets/iqvoc/images/ui-icons_469bdd_256x240.png +0 -0
- data/public/stylesheets/iqvoc/images/ui-icons_6da8d5_256x240.png +0 -0
- data/public/stylesheets/iqvoc/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/public/stylesheets/iqvoc/images/ui-icons_d8e7f3_256x240.png +0 -0
- data/public/stylesheets/iqvoc/images/ui-icons_f9bd01_256x240.png +0 -0
- data/public/stylesheets/iqvoc/iqvoc.css +477 -0
- data/public/stylesheets/iqvoc/jquery-ui-1.8.13.custom.css +415 -0
- data/public/stylesheets/iqvoc/widgets.css +81 -0
- data/test/factories.rb +74 -0
- data/test/integration/alphabetical_test.rb +53 -0
- data/test/integration/authentication_test.rb +41 -0
- data/test/integration/browse_concepts_and_labels_test.rb +61 -0
- data/test/integration/browse_static_pages_test.rb +29 -0
- data/test/integration/client_augmentation_test.rb +42 -0
- data/test/integration/client_edit_concept_test.rb +72 -0
- data/test/integration/collection_circularity_test.rb +110 -0
- data/test/integration/concept_test.rb +61 -0
- data/test/integration/edit_concepts_test.rb +40 -0
- data/test/integration/note_annotations_test.rb +86 -0
- data/test/integration/search_test.rb +205 -0
- data/test/integration/tree_test.rb +31 -0
- data/test/integration/untranslated_test.rb +60 -0
- data/test/integration_test_helper.rb +45 -0
- data/test/performance/browsing_test.rb +25 -0
- data/test/test_helper.rb +29 -0
- data/test/unit/concept_test.rb +93 -0
- data/test/unit/note_test.rb +32 -0
- data/test/unit/origin_mapping_test.rb +70 -0
- data/test/unit/skos_import_test.rb +100 -0
- metadata +522 -0
data/Gemfile
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
# Copyright 2011 innoQ Deutschland GmbH
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
source 'http://rubygems.org'
|
18
|
+
|
19
|
+
# TODO: The following dependencies could be included by the "gemspec" command.
|
20
|
+
# There is only one problem: gemspec puts the dependencies automatically to a
|
21
|
+
# group (:development by default). This is not what we need.
|
22
|
+
gem 'rails', '3.0.10'
|
23
|
+
|
24
|
+
gem 'kaminari'
|
25
|
+
gem 'authlogic'
|
26
|
+
gem 'cancan'
|
27
|
+
gem 'iq_rdf', '~> 0.0.15'
|
28
|
+
gem 'json'
|
29
|
+
|
30
|
+
# Hotfix for the problem of engine/plugin helpers not being mixed in.
|
31
|
+
# https://rails.lighthouseapp.com/projects/8994/tickets/1905-apphelpers-within-plugin-not-being-mixed-in
|
32
|
+
# http://github.com/drogus/rails_helpers_fix
|
33
|
+
gem 'rails_helpers_fix'
|
34
|
+
|
35
|
+
group :development do
|
36
|
+
gem 'awesome_print'
|
37
|
+
end
|
38
|
+
|
39
|
+
group :development, :test do
|
40
|
+
platforms :ruby do
|
41
|
+
gem 'mysql2', '0.2.7'
|
42
|
+
gem 'sqlite3'
|
43
|
+
end
|
44
|
+
|
45
|
+
platforms :jruby do
|
46
|
+
gem 'activerecord-jdbcmysql-adapter'
|
47
|
+
gem 'activerecord-jdbcsqlite3-adapter'
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
group :test do
|
52
|
+
gem 'nokogiri', '1.5.0'
|
53
|
+
gem 'capybara'
|
54
|
+
gem 'capybara-webkit'
|
55
|
+
gem 'database_cleaner'
|
56
|
+
gem 'factory_girl_rails'
|
57
|
+
# gem 'factory_girl'
|
58
|
+
gem 'memory_test_fix'
|
59
|
+
end
|
60
|
+
|
61
|
+
group :production, :production_internal do
|
62
|
+
platforms :ruby do
|
63
|
+
gem 'sqlite3'
|
64
|
+
end
|
65
|
+
|
66
|
+
platforms :jruby do
|
67
|
+
gem 'activerecord-oracle_enhanced-adapter'
|
68
|
+
end
|
69
|
+
end
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,134 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
abstract (1.0.0)
|
5
|
+
actionmailer (3.0.10)
|
6
|
+
actionpack (= 3.0.10)
|
7
|
+
mail (~> 2.2.19)
|
8
|
+
actionpack (3.0.10)
|
9
|
+
activemodel (= 3.0.10)
|
10
|
+
activesupport (= 3.0.10)
|
11
|
+
builder (~> 2.1.2)
|
12
|
+
erubis (~> 2.6.6)
|
13
|
+
i18n (~> 0.5.0)
|
14
|
+
rack (~> 1.2.1)
|
15
|
+
rack-mount (~> 0.6.14)
|
16
|
+
rack-test (~> 0.5.7)
|
17
|
+
tzinfo (~> 0.3.23)
|
18
|
+
activemodel (3.0.10)
|
19
|
+
activesupport (= 3.0.10)
|
20
|
+
builder (~> 2.1.2)
|
21
|
+
i18n (~> 0.5.0)
|
22
|
+
activerecord (3.0.10)
|
23
|
+
activemodel (= 3.0.10)
|
24
|
+
activesupport (= 3.0.10)
|
25
|
+
arel (~> 2.0.10)
|
26
|
+
tzinfo (~> 0.3.23)
|
27
|
+
activeresource (3.0.10)
|
28
|
+
activemodel (= 3.0.10)
|
29
|
+
activesupport (= 3.0.10)
|
30
|
+
activesupport (3.0.10)
|
31
|
+
arel (2.0.10)
|
32
|
+
authlogic (3.0.3)
|
33
|
+
activerecord (>= 3.0.7)
|
34
|
+
activerecord (>= 3.0.7)
|
35
|
+
awesome_print (0.4.0)
|
36
|
+
builder (2.1.2)
|
37
|
+
cancan (1.6.5)
|
38
|
+
capybara (1.0.1)
|
39
|
+
mime-types (>= 1.16)
|
40
|
+
nokogiri (>= 1.3.3)
|
41
|
+
rack (>= 1.0.0)
|
42
|
+
rack-test (>= 0.5.4)
|
43
|
+
selenium-webdriver (~> 2.0)
|
44
|
+
xpath (~> 0.1.4)
|
45
|
+
capybara-webkit (0.6.0)
|
46
|
+
capybara (~> 1.0.0)
|
47
|
+
childprocess (0.2.1)
|
48
|
+
ffi (~> 1.0.6)
|
49
|
+
database_cleaner (0.6.7)
|
50
|
+
erubis (2.6.6)
|
51
|
+
abstract (>= 1.0.0)
|
52
|
+
factory_girl (2.0.4)
|
53
|
+
factory_girl_rails (1.1.0)
|
54
|
+
factory_girl (~> 2.0.0)
|
55
|
+
railties (>= 3.0.0)
|
56
|
+
ffi (1.0.9)
|
57
|
+
i18n (0.5.0)
|
58
|
+
iq_rdf (0.0.15)
|
59
|
+
builder
|
60
|
+
bundler
|
61
|
+
json (1.5.3)
|
62
|
+
json_pure (1.5.3)
|
63
|
+
kaminari (0.12.4)
|
64
|
+
rails (>= 3.0.0)
|
65
|
+
mail (2.2.19)
|
66
|
+
activesupport (>= 2.3.6)
|
67
|
+
i18n (>= 0.4.0)
|
68
|
+
mime-types (~> 1.16)
|
69
|
+
treetop (~> 1.4.8)
|
70
|
+
memory_test_fix (0.2.0)
|
71
|
+
mime-types (1.16)
|
72
|
+
mysql2 (0.2.7)
|
73
|
+
nokogiri (1.5.0)
|
74
|
+
polyglot (0.3.2)
|
75
|
+
rack (1.2.3)
|
76
|
+
rack-mount (0.6.14)
|
77
|
+
rack (>= 1.0.0)
|
78
|
+
rack-test (0.5.7)
|
79
|
+
rack (>= 1.0)
|
80
|
+
rails (3.0.10)
|
81
|
+
actionmailer (= 3.0.10)
|
82
|
+
actionpack (= 3.0.10)
|
83
|
+
activerecord (= 3.0.10)
|
84
|
+
activeresource (= 3.0.10)
|
85
|
+
activesupport (= 3.0.10)
|
86
|
+
bundler (~> 1.0)
|
87
|
+
railties (= 3.0.10)
|
88
|
+
rails_helpers_fix (0.1.1)
|
89
|
+
railties (3.0.10)
|
90
|
+
actionpack (= 3.0.10)
|
91
|
+
activesupport (= 3.0.10)
|
92
|
+
rake (>= 0.8.7)
|
93
|
+
rdoc (~> 3.4)
|
94
|
+
thor (~> 0.14.4)
|
95
|
+
rake (0.9.2)
|
96
|
+
rdoc (3.9.2)
|
97
|
+
rubyzip (0.9.4)
|
98
|
+
selenium-webdriver (2.4.0)
|
99
|
+
childprocess (>= 0.2.1)
|
100
|
+
ffi (>= 1.0.7)
|
101
|
+
json_pure
|
102
|
+
rubyzip
|
103
|
+
sqlite3 (1.3.4)
|
104
|
+
thor (0.14.6)
|
105
|
+
treetop (1.4.10)
|
106
|
+
polyglot
|
107
|
+
polyglot (>= 0.3.1)
|
108
|
+
tzinfo (0.3.29)
|
109
|
+
xpath (0.1.4)
|
110
|
+
nokogiri (~> 1.3)
|
111
|
+
|
112
|
+
PLATFORMS
|
113
|
+
ruby
|
114
|
+
|
115
|
+
DEPENDENCIES
|
116
|
+
activerecord-jdbcmysql-adapter
|
117
|
+
activerecord-jdbcsqlite3-adapter
|
118
|
+
activerecord-oracle_enhanced-adapter
|
119
|
+
authlogic
|
120
|
+
awesome_print
|
121
|
+
cancan
|
122
|
+
capybara
|
123
|
+
capybara-webkit
|
124
|
+
database_cleaner
|
125
|
+
factory_girl_rails
|
126
|
+
iq_rdf (~> 0.0.15)
|
127
|
+
json
|
128
|
+
kaminari
|
129
|
+
memory_test_fix
|
130
|
+
mysql2 (= 0.2.7)
|
131
|
+
nokogiri (= 1.5.0)
|
132
|
+
rails (= 3.0.10)
|
133
|
+
rails_helpers_fix
|
134
|
+
sqlite3
|
data/LICENSE
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
Copyright 2011 innoQ Deutschland GmbH
|
2
|
+
|
3
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
you may not use this file except in compliance with the License.
|
5
|
+
You may obtain a copy of the License at
|
6
|
+
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
|
9
|
+
Unless required by applicable law or agreed to in writing, software
|
10
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
See the License for the specific language governing permissions and
|
13
|
+
limitations under the License.
|
data/README.md
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
# iQvoc
|
2
|
+
|
3
|
+
iQvoc is a vocabulary management tool that combines easy-to-use human interfaces with Semantic Web interoperability.
|
4
|
+
|
5
|
+
iQvoc supports vocabularies that are common to many knowledge organization systems, such as:
|
6
|
+
|
7
|
+
* Thesauri
|
8
|
+
* Taxonomies
|
9
|
+
* Classification schemes
|
10
|
+
* Subject heading systems
|
11
|
+
|
12
|
+
iQvoc provides comprehensive functionality for all aspects of managing such vocabularies:
|
13
|
+
|
14
|
+
* import of existing vocabularies from a SKOS representation
|
15
|
+
* multilingual display and navigation in any Web browser
|
16
|
+
* editorial features for registered users
|
17
|
+
* publishing the vocabulary in the Semantic Web
|
18
|
+
|
19
|
+
iQvoc is built with state-of-the-art technology and can be easily customized according to user's needs.
|
20
|
+
|
21
|
+
## Getting Started
|
22
|
+
|
23
|
+
1. Configure your database via `config/database.template.yml`
|
24
|
+
2. `bundle install`
|
25
|
+
3. Run `rake db:create` to create the database
|
26
|
+
4. Create the necessary tables by running `rake db:migrate`
|
27
|
+
5. Load some base data by running `rake db:seed`
|
28
|
+
6. Create `config/initializers/secret_token.rb` based on
|
29
|
+
`config/initializers/secret_token.rb.template`, filling in the secret token
|
30
|
+
generated by `rake secret`
|
31
|
+
7. Boot up the app using `rails s` (or `passenger start` if you use passenger)
|
32
|
+
8. Log in with "admin@iqvoc" / "admin" or "demo@iqvoc" / "cooluri" (cf. step #5)
|
33
|
+
9. Visit the Users section and change the default passwords
|
34
|
+
|
35
|
+
## Compatibility
|
36
|
+
|
37
|
+
iQvoc is fully compatible with Ruby 1.9.2, 1.8.7 and JRuby 1.6.
|
38
|
+
|
39
|
+
## Customization
|
40
|
+
|
41
|
+
There are many hooks providing support for your own classes and configuration. The core app
|
42
|
+
also works as a Rails Engine. The config residing in `lib/iqvoc.rb` provides a basic
|
43
|
+
overview of the possibilities.
|
44
|
+
|
45
|
+
## Contributing
|
46
|
+
|
47
|
+
If you want to help out there are several options:
|
48
|
+
|
49
|
+
* Found a bug? Just create an issue on the [GitHub Issue tracker](https://github.com/innoq/iqvoc/issues) and/or submit a patch by initiating a pull request
|
50
|
+
* You're welcome to fix bugs listed under [Issues](https://github.com/innoq/iqvoc/issues)
|
51
|
+
* Proposal, discussion and implementation of new features on our mailing list iqvoc@lists.innoq.com or on the issue tracker
|
52
|
+
|
53
|
+
If you make changes to existing code please make sure that the test suite stays green. Please include tests to your additional contributions.
|
54
|
+
|
55
|
+
Tests can be run via `rake test`. We're using capybara-webkit for integration tests with JavaScript support.
|
56
|
+
|
57
|
+
## Maintainer & Contributors
|
58
|
+
|
59
|
+
iQvoc was originally created and is being maintained by [innoQ Deutschland GmbH](http://innoq.com).
|
60
|
+
|
61
|
+
* Robert Glaser ([mrreynolds](http://github.com/mrreynolds))
|
62
|
+
* Till Schulte-Coerne ([tillsc](http://github.com/tillsc))
|
63
|
+
* Frederik Dohr ([FND](http://github.com/FND))
|
64
|
+
|
65
|
+
## License
|
66
|
+
|
67
|
+
Copyright 2011 innoQ Deutschland GmbH
|
68
|
+
Licensed under the Apache License, Version 2.0
|
data/Rakefile
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
# Copyright 2011 innoQ Deutschland GmbH
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
# Add your own tasks in files placed in lib/tasks ending in .rake,
|
18
|
+
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
|
19
|
+
|
20
|
+
require File.expand_path('../config/application', __FILE__)
|
21
|
+
require 'rake'
|
22
|
+
|
23
|
+
Iqvoc::Application.load_tasks
|
@@ -0,0 +1,125 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
# Copyright 2011 innoQ Deutschland GmbH
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
class ApplicationController < ActionController::Base
|
18
|
+
|
19
|
+
prepend_before_filter :set_locale
|
20
|
+
before_filter :ensure_extension
|
21
|
+
before_filter :require_user
|
22
|
+
|
23
|
+
helper :all
|
24
|
+
helper_method :current_user_session, :current_user, :concept_widget_data, :collection_widget_data, :label_widget_data
|
25
|
+
|
26
|
+
rescue_from ActiveRecord::RecordNotFound, :with => :handle_not_found
|
27
|
+
rescue_from CanCan::AccessDenied, :with => :handle_access_denied
|
28
|
+
|
29
|
+
protect_from_forgery
|
30
|
+
|
31
|
+
protected
|
32
|
+
|
33
|
+
def default_url_options(options = nil)
|
34
|
+
{ :format => params[:format], :lang => I18n.locale }.
|
35
|
+
reject { |key, value| key == :lang and value.to_s.strip.blank? }. # Strip out the lang parameter if it's empty.
|
36
|
+
merge(options || {})
|
37
|
+
end
|
38
|
+
|
39
|
+
# Force an extension to every url. (LOD)
|
40
|
+
def ensure_extension
|
41
|
+
unless params[:format] || request.method != "GET"
|
42
|
+
redirect_to url_for(params.merge(:format => (request.format && request.format.symbol) || :html))
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def handle_access_denied(exception)
|
47
|
+
@exception = exception
|
48
|
+
render :template => 'errors/access_denied', :status => :access_denied
|
49
|
+
end
|
50
|
+
|
51
|
+
def handle_multiple_choices(exception)
|
52
|
+
@exception = exception
|
53
|
+
render :template => 'errors/multiple_choices', :status => :multiple_choices
|
54
|
+
end
|
55
|
+
|
56
|
+
def handle_not_found(exception)
|
57
|
+
@exception = exception
|
58
|
+
SearchResultsController.prepare_basic_variables(self)
|
59
|
+
|
60
|
+
respond_to do |format|
|
61
|
+
format.html { render :template => 'errors/not_found', :status => :not_found }
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def set_locale
|
66
|
+
if Iqvoc::Concept.pref_labeling_languages.include?(nil)
|
67
|
+
I18n.locale = " "
|
68
|
+
elsif params[:lang] && Iqvoc::Concept.pref_labeling_languages.include?(params[:lang].to_sym)
|
69
|
+
I18n.locale = params[:lang]
|
70
|
+
else
|
71
|
+
I18n.locale = Iqvoc::Concept.pref_labeling_languages.first
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def concept_widget_data(concept)
|
76
|
+
{
|
77
|
+
:id => concept.origin,
|
78
|
+
:name => concept.pref_label.value.to_s + (concept.additional_info ? " (#{concept.additional_info })" : "")
|
79
|
+
}
|
80
|
+
end
|
81
|
+
|
82
|
+
def collection_widget_data(collection)
|
83
|
+
{
|
84
|
+
:id => collection.origin,
|
85
|
+
:name => collection.pref_label.to_s
|
86
|
+
}
|
87
|
+
end
|
88
|
+
|
89
|
+
def label_widget_data(label)
|
90
|
+
{
|
91
|
+
:id => label.origin,
|
92
|
+
:name => label.value
|
93
|
+
}
|
94
|
+
end
|
95
|
+
|
96
|
+
# Configurable Ability class
|
97
|
+
def current_ability
|
98
|
+
@current_ability ||= Iqvoc.ability_class.new(current_user)
|
99
|
+
end
|
100
|
+
|
101
|
+
def current_user_session
|
102
|
+
return @current_user_session if defined?(@current_user_session)
|
103
|
+
@current_user_session = UserSession.find
|
104
|
+
end
|
105
|
+
|
106
|
+
def current_user
|
107
|
+
return @current_user if defined?(@current_user)
|
108
|
+
@current_user = current_user_session && current_user_session.user
|
109
|
+
end
|
110
|
+
|
111
|
+
# TODO: Don't require an user (this is skipped in nearly every controller).
|
112
|
+
# Use Abilitys instead and handle the AccessDeniedException: (#handle_access_denied)
|
113
|
+
# * User logged in: Exception!
|
114
|
+
# * User not logged in: Redirect to login path!
|
115
|
+
# Don't forget to delete this method and all the /.*before_filter :require_user/
|
116
|
+
# statements in the controllers.
|
117
|
+
def require_user
|
118
|
+
unless current_user
|
119
|
+
flash[:error] = I18n.t("txt.controllers.application.login_required")
|
120
|
+
redirect_to new_user_session_url(:back_to => request.fullpath)
|
121
|
+
return false
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
# Copyright 2011 innoQ Deutschland GmbH
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
class Collections::HierarchicalController < CollectionsController
|
18
|
+
skip_before_filter :require_user # This is public for everyone
|
19
|
+
|
20
|
+
def index
|
21
|
+
authorize! :read, Iqvoc::Collection.base_class
|
22
|
+
|
23
|
+
children = Iqvoc::Collection.base_class.find(params[:root]).subcollections.includes(:pref_labels, :subcollections)
|
24
|
+
|
25
|
+
children.sort! do |a, b|
|
26
|
+
a.pref_label.to_s <=> b.pref_label.to_s
|
27
|
+
end
|
28
|
+
|
29
|
+
respond_to do |format|
|
30
|
+
format.json do # Treeview data
|
31
|
+
children.map! do |collection|
|
32
|
+
{
|
33
|
+
:id => collection.id,
|
34
|
+
:url => collection_path(:id => collection, :format => :html),
|
35
|
+
:text => CGI.escapeHTML(collection.pref_label.to_s),
|
36
|
+
:hasChildren => collection.subcollections.any?
|
37
|
+
}
|
38
|
+
end
|
39
|
+
render :json => children.to_json
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
@@ -0,0 +1,124 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
# Copyright 2011 innoQ Deutschland GmbH
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
class CollectionsController < ApplicationController
|
18
|
+
skip_before_filter :require_user
|
19
|
+
|
20
|
+
def index
|
21
|
+
authorize! :read, Iqvoc::Collection.base_class
|
22
|
+
|
23
|
+
respond_to do |format|
|
24
|
+
format.html do
|
25
|
+
@top_collections = Iqvoc::Collection.base_class.
|
26
|
+
with_pref_labels.
|
27
|
+
tops.
|
28
|
+
sort { |a, b| a.pref_label.to_s <=> b.pref_label.to_s }
|
29
|
+
|
30
|
+
# When in single query mode, AR handles ALL includes to be loaded by that
|
31
|
+
# one query. We don't want that! So let's do it manually :-)
|
32
|
+
Iqvoc::Collection.base_class.send(:preload_associations, @collections, [:subcollections])
|
33
|
+
end
|
34
|
+
format.json do # For the widget
|
35
|
+
@collections = Iqvoc::Collection.base_class.with_pref_labels.merge(Label::Base.by_query_value("#{params[:query]}%"))
|
36
|
+
response = []
|
37
|
+
@collections.each { |c| response << collection_widget_data(c) }
|
38
|
+
render :json => response
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def show
|
44
|
+
@collection = Iqvoc::Collection.base_class.by_origin(params[:id]).last
|
45
|
+
raise ActiveRecord::RecordNotFound.new("Could not find Collection for id '#{params[:id]}'") unless @collection
|
46
|
+
|
47
|
+
authorize! :read, @collection
|
48
|
+
|
49
|
+
# When in single query mode, AR handles ALL includes to be loaded by that
|
50
|
+
# one query. We don't want that! So let's do it manually :-)
|
51
|
+
Iqvoc::Collection.base_class.send(:preload_associations, @collection, [:pref_labels, {:subcollections => [:pref_labels, :subcollections]}, {:concepts => [:pref_labels] + Iqvoc::Concept.base_class.default_includes}])
|
52
|
+
end
|
53
|
+
|
54
|
+
def new
|
55
|
+
authorize! :create, Iqvoc::Collection.base_class
|
56
|
+
|
57
|
+
@collection = Iqvoc::Collection.base_class.new
|
58
|
+
build_note_relations
|
59
|
+
end
|
60
|
+
|
61
|
+
def create
|
62
|
+
authorize! :create, Iqvoc::Collection.base_class
|
63
|
+
|
64
|
+
@collection = Iqvoc::Collection.base_class.new(params[:concept])
|
65
|
+
|
66
|
+
if @collection.save
|
67
|
+
flash[:notice] = I18n.t("txt.controllers.collections.save.success")
|
68
|
+
redirect_to collection_path(:id => @collection)
|
69
|
+
else
|
70
|
+
flash.now[:error] = I18n.t("txt.controllers.collections.save.error")
|
71
|
+
render :new
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def edit
|
76
|
+
@collection = Iqvoc::Collection.base_class.by_origin(params[:id]).last
|
77
|
+
raise ActiveRecord::RecordNotFound.new("Could not find Collection for id '#{params[:id]}'") unless @collection
|
78
|
+
|
79
|
+
authorize! :update, @collection
|
80
|
+
|
81
|
+
# When in single query mode, AR handles ALL includes to be loaded by that
|
82
|
+
# one query. We don't want that! So let's do it manually :-)
|
83
|
+
Iqvoc::Collection.base_class.send(:preload_associations, @collection, [:pref_labels, {:subcollections => :pref_labels}, {:concepts => [:pref_labels] + Iqvoc::Concept.base_class.default_includes}])
|
84
|
+
|
85
|
+
build_note_relations
|
86
|
+
end
|
87
|
+
|
88
|
+
def update
|
89
|
+
@collection = Iqvoc::Collection.base_class.by_origin(params[:id]).last
|
90
|
+
raise ActiveRecord::RecordNotFound.new("Could not find Collection for id '#{params[:id]}'") unless @collection
|
91
|
+
|
92
|
+
authorize! :update, @collection
|
93
|
+
|
94
|
+
if @collection.update_attributes(params[:concept])
|
95
|
+
flash[:notice] = I18n.t("txt.controllers.collections.save.success")
|
96
|
+
redirect_to collection_path(:id => @collection)
|
97
|
+
else
|
98
|
+
flash.now[:error] = I18n.t("txt.controllers.collections.save.error")
|
99
|
+
render :edit
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
def destroy
|
104
|
+
@collection = Iqvoc::Collection.base_class.by_origin(params[:id]).last
|
105
|
+
raise ActiveRecord::RecordNotFound.new("Could not find Collection for id '#{params[:id]}'") unless @collection
|
106
|
+
|
107
|
+
authorize! :destroy, @collection
|
108
|
+
|
109
|
+
if @collection.destroy
|
110
|
+
flash[:notice] = I18n.t("txt.controllers.collections.destroy.success")
|
111
|
+
redirect_to collections_path
|
112
|
+
else
|
113
|
+
flash.now[:error] = I18n.t("txt.controllers.collections.destroy.error")
|
114
|
+
render :action => :show
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
private
|
119
|
+
|
120
|
+
def build_note_relations
|
121
|
+
@collection.note_skos_definitions.build if @collection.note_skos_definitions.empty?
|
122
|
+
end
|
123
|
+
|
124
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
# Copyright 2011 innoQ Deutschland GmbH
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
class Concepts::AlphabeticalController < ConceptsController
|
18
|
+
skip_before_filter :require_user
|
19
|
+
|
20
|
+
def index
|
21
|
+
authorize! :read, Concept::Base
|
22
|
+
|
23
|
+
@pref_labelings = Iqvoc::Concept.pref_labeling_class.
|
24
|
+
concept_published.
|
25
|
+
label_begins_with(params[:letter]).
|
26
|
+
by_label_language(I18n.locale).
|
27
|
+
includes(:target).
|
28
|
+
order("LOWER(#{Label::Base.table_name}.value)").
|
29
|
+
joins(:owner).
|
30
|
+
where(:concepts => { :type => Iqvoc::Concept.base_class_name }).
|
31
|
+
page(params[:page])
|
32
|
+
|
33
|
+
# When in single query mode, AR handles ALL includes to be loaded by that
|
34
|
+
# one query. We don't want that! So let's do it manually :-)
|
35
|
+
Iqvoc::Concept.pref_labeling_class.send(:preload_associations,
|
36
|
+
@pref_labelings, :owner => Iqvoc::Concept.base_class.default_includes)
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|