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.
Files changed (376) hide show
  1. data/Gemfile +69 -0
  2. data/Gemfile.lock +134 -0
  3. data/LICENSE +13 -0
  4. data/README.md +68 -0
  5. data/Rakefile +23 -0
  6. data/app/controllers/application_controller.rb +125 -0
  7. data/app/controllers/collections/hierarchical_controller.rb +44 -0
  8. data/app/controllers/collections_controller.rb +124 -0
  9. data/app/controllers/concepts/alphabetical_controller.rb +39 -0
  10. data/app/controllers/concepts/hierarchical_controller.rb +74 -0
  11. data/app/controllers/concepts/untranslated_controller.rb +38 -0
  12. data/app/controllers/concepts/versions_controller.rb +119 -0
  13. data/app/controllers/concepts_controller.rb +174 -0
  14. data/app/controllers/dashboard_controller.rb +43 -0
  15. data/app/controllers/pages_controller.rb +22 -0
  16. data/app/controllers/rdf_controller.rb +43 -0
  17. data/app/controllers/search_results_controller.rb +101 -0
  18. data/app/controllers/triple_store_syncs_controller.rb +45 -0
  19. data/app/controllers/user_sessions_controller.rb +48 -0
  20. data/app/controllers/users_controller.rb +81 -0
  21. data/app/helpers/application_helper.rb +60 -0
  22. data/app/helpers/concepts_helper.rb +86 -0
  23. data/app/helpers/dashboard_helper.rb +46 -0
  24. data/app/helpers/rdf_helper.rb +63 -0
  25. data/app/helpers/search_results_helper.rb +32 -0
  26. data/app/models/collection/base.rb +161 -0
  27. data/app/models/collection/member/base.rb +23 -0
  28. data/app/models/collection/member/collection.rb +33 -0
  29. data/app/models/collection/member/concept.rb +33 -0
  30. data/app/models/collection/unordered.rb +18 -0
  31. data/app/models/concept/base.rb +418 -0
  32. data/app/models/concept/relation/base.rb +95 -0
  33. data/app/models/concept/relation/reverse_relation_extension.rb +49 -0
  34. data/app/models/concept/relation/skos/base.rb +37 -0
  35. data/app/models/concept/relation/skos/broader/base.rb +41 -0
  36. data/app/models/concept/relation/skos/broader/mono.rb +28 -0
  37. data/app/models/concept/relation/skos/broader/poly.rb +23 -0
  38. data/app/models/concept/relation/skos/narrower/base.rb +37 -0
  39. data/app/models/concept/relation/skos/related.rb +21 -0
  40. data/app/models/concept/skos/base.rb +28 -0
  41. data/app/models/label/base.rb +98 -0
  42. data/app/models/label/skos/base.rb +27 -0
  43. data/app/models/labeling/base.rb +81 -0
  44. data/app/models/labeling/skos/alt_label.rb +21 -0
  45. data/app/models/labeling/skos/base.rb +99 -0
  46. data/app/models/labeling/skos/hidden_label.rb +25 -0
  47. data/app/models/labeling/skos/pref_label.rb +30 -0
  48. data/app/models/match/base.rb +57 -0
  49. data/app/models/match/skos/base.rb +23 -0
  50. data/app/models/match/skos/broad_match.rb +21 -0
  51. data/app/models/match/skos/close_match.rb +21 -0
  52. data/app/models/match/skos/exact_match.rb +21 -0
  53. data/app/models/match/skos/mapping_relation.rb +21 -0
  54. data/app/models/match/skos/narrow_match.rb +21 -0
  55. data/app/models/match/skos/related_match.rb +21 -0
  56. data/app/models/note/annotated/base.rb +29 -0
  57. data/app/models/note/base.rb +127 -0
  58. data/app/models/note/skos/base.rb +52 -0
  59. data/app/models/note/skos/change_note.rb +38 -0
  60. data/app/models/note/skos/definition.rb +33 -0
  61. data/app/models/note/skos/editorial_note.rb +21 -0
  62. data/app/models/note/skos/example.rb +21 -0
  63. data/app/models/note/skos/history_note.rb +21 -0
  64. data/app/models/note/skos/scope_note.rb +21 -0
  65. data/app/models/origin_mapping.rb +58 -0
  66. data/app/models/rdf_store.rb +96 -0
  67. data/app/models/search_extension.rb +58 -0
  68. data/app/models/user.rb +49 -0
  69. data/app/models/user_session.rb +23 -0
  70. data/app/views/collections/_collection.html.erb +10 -0
  71. data/app/views/collections/_form.html.erb +47 -0
  72. data/app/views/collections/edit.html.erb +11 -0
  73. data/app/views/collections/index.html.erb +12 -0
  74. data/app/views/collections/new.html.erb +7 -0
  75. data/app/views/collections/show.html.erb +53 -0
  76. data/app/views/collections/show.iqrdf +22 -0
  77. data/app/views/concepts/_base_data.html.erb +72 -0
  78. data/app/views/concepts/_close_match.html.erb +16 -0
  79. data/app/views/concepts/_show_head.html.erb +23 -0
  80. data/app/views/concepts/_visualization.html.erb +9 -0
  81. data/app/views/concepts/alphabetical/_pref_labeling.html.erb +6 -0
  82. data/app/views/concepts/alphabetical/index.html.erb +17 -0
  83. data/app/views/concepts/edit.html.erb +32 -0
  84. data/app/views/concepts/hierarchical/_treeview.html.erb +20 -0
  85. data/app/views/concepts/hierarchical/index.html.erb +5 -0
  86. data/app/views/concepts/index.iqrdf +24 -0
  87. data/app/views/concepts/new.html.erb +3 -0
  88. data/app/views/concepts/show_published.html.erb +16 -0
  89. data/app/views/concepts/show_unpublished.html.erb +43 -0
  90. data/app/views/concepts/untranslated/index.html.erb +23 -0
  91. data/app/views/dashboard/index.html.erb +47 -0
  92. data/app/views/errors/access_denied.html.erb +3 -0
  93. data/app/views/errors/multiple_choices.html.erb +11 -0
  94. data/app/views/errors/not_found.html.erb +8 -0
  95. data/app/views/kaminari/_page.html.erb +6 -0
  96. data/app/views/kaminari/_paginator.html.erb +15 -0
  97. data/app/views/layouts/_controls.html.erb +37 -0
  98. data/app/views/layouts/_header.html.erb +1 -0
  99. data/app/views/layouts/_navigation.html.erb +27 -0
  100. data/app/views/layouts/_sections.html.erb +8 -0
  101. data/app/views/layouts/application.html.erb +83 -0
  102. data/app/views/pages/about.html.erb +77 -0
  103. data/app/views/partials/_rdf_logo.html.erb +4 -0
  104. data/app/views/partials/collection/_member.html.erb +14 -0
  105. data/app/views/partials/collection_label/_search_result.html.erb +5 -0
  106. data/app/views/partials/concept/_edit_link_base.html.erb +4 -0
  107. data/app/views/partials/concept/_inline_base.html.erb +4 -0
  108. data/app/views/partials/concept/_new_link_base.html.erb +4 -0
  109. data/app/views/partials/concept/relation/_base.html.erb +8 -0
  110. data/app/views/partials/concept/relation/_edit_base.html.erb +15 -0
  111. data/app/views/partials/concept/relation/skos/_narrower.html.erb +12 -0
  112. data/app/views/partials/concept/relation/skos/broader/_mono.html.erb +28 -0
  113. data/app/views/partials/concept/relation/skos/broader/_poly.html.erb +14 -0
  114. data/app/views/partials/labeling/skos/_base.html.erb +17 -0
  115. data/app/views/partials/labeling/skos/_edit_base.html.erb +7 -0
  116. data/app/views/partials/labeling/skos/_search_result.html.erb +12 -0
  117. data/app/views/partials/match/_base.html.erb +13 -0
  118. data/app/views/partials/match/_edit_base.html.erb +6 -0
  119. data/app/views/partials/note/_base.html.erb +15 -0
  120. data/app/views/partials/note/_edit_base.html.erb +28 -0
  121. data/app/views/partials/note/_note.html.erb +14 -0
  122. data/app/views/partials/note/_search_result.html.erb +8 -0
  123. data/app/views/partials/note/skos/_edit_change_note.html.erb +47 -0
  124. data/app/views/partials/note/skos/definition/_search_result.html.erb +8 -0
  125. data/app/views/rdf/show_concept.iqrdf +5 -0
  126. data/app/views/search_results/_head_contents.html.erb +4 -0
  127. data/app/views/search_results/_rdf_links.html.erb +4 -0
  128. data/app/views/search_results/index.html.erb +92 -0
  129. data/app/views/search_results/index.iqrdf +33 -0
  130. data/app/views/triple_store_syncs/new.html.erb +7 -0
  131. data/app/views/user_sessions/new.html.erb +11 -0
  132. data/app/views/users/_form.html.erb +45 -0
  133. data/app/views/users/_user_preference.html.erb +12 -0
  134. data/app/views/users/edit.html.erb +14 -0
  135. data/app/views/users/index.html.erb +29 -0
  136. data/app/views/users/new.html.erb +13 -0
  137. data/config/application.rb +82 -0
  138. data/config/boot.rb +29 -0
  139. data/config/database.template.yml +43 -0
  140. data/config/database.yml +40 -0
  141. data/config/deploy/common.rb +79 -0
  142. data/config/deploy/ec2.rb +43 -0
  143. data/config/deploy/history.rb +29 -0
  144. data/config/deploy/innoq.rb +37 -0
  145. data/config/deploy.rb +72 -0
  146. data/config/engine.rb +25 -0
  147. data/config/environment.rb +21 -0
  148. data/config/environments/development.rb +74 -0
  149. data/config/environments/production.rb +65 -0
  150. data/config/environments/production.template.rb +65 -0
  151. data/config/environments/production_internal.rb +65 -0
  152. data/config/environments/test.rb +51 -0
  153. data/config/initializers/action_view.rb +23 -0
  154. data/config/initializers/active_record.rb +18 -0
  155. data/config/initializers/backtrace_silencers.rb +23 -0
  156. data/config/initializers/inflections.rb +26 -0
  157. data/config/initializers/iqvoc.rb +50 -0
  158. data/config/initializers/jdbc.rb +23 -0
  159. data/config/initializers/kaminari_config.rb +8 -0
  160. data/config/initializers/language.rb +6 -0
  161. data/config/initializers/mime_types.rb +24 -0
  162. data/config/initializers/secret_token.rb +29 -0
  163. data/config/initializers/secret_token.rb.template +29 -0
  164. data/config/initializers/session_store.rb +24 -0
  165. data/config/locales/activerecord.de.yml +135 -0
  166. data/config/locales/activerecord.en.yml +135 -0
  167. data/config/locales/authlogic.de.yml +38 -0
  168. data/config/locales/authlogic.en.yml +38 -0
  169. data/config/locales/de.yml +326 -0
  170. data/config/locales/defaults.de.yml +153 -0
  171. data/config/locales/en.yml +332 -0
  172. data/config/routes.rb +53 -0
  173. data/config/warble.rb +158 -0
  174. data/db/iqvoc_test.sqlite3 +0 -0
  175. data/db/migrate/20100927101502_create_schema.rb +174 -0
  176. data/db/migrate/20101125141218_add_collection_tables.rb +32 -0
  177. data/db/migrate/20101129161528_add_type_to_collections.rb +24 -0
  178. data/db/migrate/20101202094602_add_origin_to_collections.rb +25 -0
  179. data/db/migrate/20101202135420_rename_collection_contents_to_collection_members.rb +25 -0
  180. data/db/migrate/20101208103531_add_type_to_collection_contents.rb +27 -0
  181. data/db/migrate/20101210153916_add_indexes_to_collections.rb +25 -0
  182. data/db/migrate/20110204121244_create_collection_labels.rb +32 -0
  183. data/db/migrate/20110208084250_change_origin_lengths.rb +27 -0
  184. data/db/migrate/20110328124300_discard_collection_specifics.rb +27 -0
  185. data/db/migrate/20110408120357_remove_classifications_and_classifiers.rb +32 -0
  186. data/db/migrate/20110408120740_remove_xl_specfic_stuff.rb +39 -0
  187. data/db/migrate/20110420133640_change_value_in_notes.rb +8 -0
  188. data/db/migrate/20110427120534_add_published_at_to_labels.rb +9 -0
  189. data/db/migrate/20110510162719_use_mono_hierarchy_instead_of_poly_hierarchy.rb +13 -0
  190. data/db/migrate/20110512132624_extend_notes_value_field_length.rb +8 -0
  191. data/db/migrate/20110525103100_separate_note_annotation_predicates.rb +38 -0
  192. data/db/migrate/20110615134040_change_umt_note_annotations_to_dct.rb +9 -0
  193. data/db/schema.rb +127 -0
  194. data/db/seeds.rb +37 -0
  195. data/iqvoc.gemspec +27 -0
  196. data/lib/engine_tasks/assets.rake +49 -0
  197. data/lib/engine_tasks/db.rake +18 -0
  198. data/lib/engine_tasks/release.rake +118 -0
  199. data/lib/iqvoc/ability.rb +44 -0
  200. data/lib/iqvoc/data_helper.rb +27 -0
  201. data/lib/iqvoc/deep_cloning.rb +92 -0
  202. data/lib/iqvoc/rdf_helper.rb +67 -0
  203. data/lib/iqvoc/skos_importer.rb +144 -0
  204. data/lib/iqvoc/version.rb +19 -0
  205. data/lib/iqvoc/versioning.rb +151 -0
  206. data/lib/iqvoc.rb +228 -0
  207. data/lib/maker.rb +144 -0
  208. data/lib/ojdbc14.jar +0 -0
  209. data/lib/string.rb +23 -0
  210. data/lib/tasks/importer.rake +16 -0
  211. data/lib/tasks/jdbc.rake +24 -0
  212. data/public/404.html +26 -0
  213. data/public/422.html +26 -0
  214. data/public/500.html +26 -0
  215. data/public/favicon.ico +0 -0
  216. data/public/images/iqvoc/add.png +0 -0
  217. data/public/images/iqvoc/arrow_down.gif +0 -0
  218. data/public/images/iqvoc/arrow_up.gif +0 -0
  219. data/public/images/iqvoc/footer.png +0 -0
  220. data/public/images/iqvoc/go_there.png +0 -0
  221. data/public/images/iqvoc/header.png +0 -0
  222. data/public/images/iqvoc/header_long.png +0 -0
  223. data/public/images/iqvoc/iqvoc.png +0 -0
  224. data/public/images/iqvoc/note_add.png +0 -0
  225. data/public/images/iqvoc/note_delete.png +0 -0
  226. data/public/images/iqvoc/note_edit.png +0 -0
  227. data/public/images/iqvoc/ok.png +0 -0
  228. data/public/images/iqvoc/rails.png +0 -0
  229. data/public/images/iqvoc/rdf_flyer.gif +0 -0
  230. data/public/images/iqvoc/red_arrow.png +0 -0
  231. data/public/images/iqvoc/remove.png +0 -0
  232. data/public/images/iqvoc/shadow.png +0 -0
  233. data/public/images/iqvoc/spinner.gif +0 -0
  234. data/public/images/iqvoc/tokenizer_delete.png +0 -0
  235. data/public/images/iqvoc/tokenizer_pencile.png +0 -0
  236. data/public/images/iqvoc/tokenizer_show.png +0 -0
  237. data/public/images/iqvoc/unfinished.png +0 -0
  238. data/public/javascripts/iqvoc/application.js +123 -0
  239. data/public/javascripts/iqvoc/entityselect.js +121 -0
  240. data/public/javascripts/iqvoc/excanvas.js +35 -0
  241. data/public/javascripts/iqvoc/iqvoc.js +118 -0
  242. data/public/javascripts/iqvoc/jit_rgraph.js +153 -0
  243. data/public/javascripts/iqvoc/jquery-1.6.2.min.js +18 -0
  244. data/public/javascripts/iqvoc/jquery-treeview/changelog.txt +29 -0
  245. data/public/javascripts/iqvoc/jquery-treeview/demo/async.html +44 -0
  246. data/public/javascripts/iqvoc/jquery-treeview/demo/bg.gif +0 -0
  247. data/public/javascripts/iqvoc/jquery-treeview/demo/demo.js +43 -0
  248. data/public/javascripts/iqvoc/jquery-treeview/demo/images.html +56 -0
  249. data/public/javascripts/iqvoc/jquery-treeview/demo/index.html +340 -0
  250. data/public/javascripts/iqvoc/jquery-treeview/demo/large.html +559 -0
  251. data/public/javascripts/iqvoc/jquery-treeview/demo/prerendered.html +621 -0
  252. data/public/javascripts/iqvoc/jquery-treeview/demo/screen.css +24 -0
  253. data/public/javascripts/iqvoc/jquery-treeview/demo/simple.html +82 -0
  254. data/public/javascripts/iqvoc/jquery-treeview/demo/source.php +87 -0
  255. data/public/javascripts/iqvoc/jquery-treeview/demo/source.phps +87 -0
  256. data/public/javascripts/iqvoc/jquery-treeview/images/ajax-loader.gif +0 -0
  257. data/public/javascripts/iqvoc/jquery-treeview/images/file.gif +0 -0
  258. data/public/javascripts/iqvoc/jquery-treeview/images/folder-closed.gif +0 -0
  259. data/public/javascripts/iqvoc/jquery-treeview/images/folder.gif +0 -0
  260. data/public/javascripts/iqvoc/jquery-treeview/images/minus.gif +0 -0
  261. data/public/javascripts/iqvoc/jquery-treeview/images/plus.gif +0 -0
  262. data/public/javascripts/iqvoc/jquery-treeview/images/treeview-black-line.gif +0 -0
  263. data/public/javascripts/iqvoc/jquery-treeview/images/treeview-black.gif +0 -0
  264. data/public/javascripts/iqvoc/jquery-treeview/images/treeview-default-line.gif +0 -0
  265. data/public/javascripts/iqvoc/jquery-treeview/images/treeview-default.gif +0 -0
  266. data/public/javascripts/iqvoc/jquery-treeview/images/treeview-famfamfam-line.gif +0 -0
  267. data/public/javascripts/iqvoc/jquery-treeview/images/treeview-famfamfam.gif +0 -0
  268. data/public/javascripts/iqvoc/jquery-treeview/images/treeview-gray-line.gif +0 -0
  269. data/public/javascripts/iqvoc/jquery-treeview/images/treeview-gray.gif +0 -0
  270. data/public/javascripts/iqvoc/jquery-treeview/images/treeview-red-line.gif +0 -0
  271. data/public/javascripts/iqvoc/jquery-treeview/images/treeview-red.gif +0 -0
  272. data/public/javascripts/iqvoc/jquery-treeview/jquery.treeview.async.js +82 -0
  273. data/public/javascripts/iqvoc/jquery-treeview/jquery.treeview.css +75 -0
  274. data/public/javascripts/iqvoc/jquery-treeview/jquery.treeview.js +251 -0
  275. data/public/javascripts/iqvoc/jquery-treeview/jquery.treeview.min.js +15 -0
  276. data/public/javascripts/iqvoc/jquery-treeview/jquery.treeview.pack.js +16 -0
  277. data/public/javascripts/iqvoc/jquery-treeview/lib/jquery.cookie.js +92 -0
  278. data/public/javascripts/iqvoc/jquery-treeview/lib/jquery.js +3363 -0
  279. data/public/javascripts/iqvoc/jquery-treeview/todo +8 -0
  280. data/public/javascripts/iqvoc/jquery-ui-1.8.13.custom.js +3229 -0
  281. data/public/javascripts/iqvoc/jquery-ui-1.8.13.custom.min.js +163 -0
  282. data/public/javascripts/iqvoc/jquery-ui.datepicker-de.js +22 -0
  283. data/public/javascripts/iqvoc/json2.js +480 -0
  284. data/public/javascripts/iqvoc/langselect.js +73 -0
  285. data/public/javascripts/iqvoc/rails.js +132 -0
  286. data/public/javascripts/iqvoc/storage.js +122 -0
  287. data/public/javascripts/iqvoc/visualization.js +321 -0
  288. data/public/robots.txt +5 -0
  289. data/public/stylesheets/iqvoc/blueprint/ie.css +35 -0
  290. data/public/stylesheets/iqvoc/blueprint/plugins/buttons/icons/cross.png +0 -0
  291. data/public/stylesheets/iqvoc/blueprint/plugins/buttons/icons/key.png +0 -0
  292. data/public/stylesheets/iqvoc/blueprint/plugins/buttons/icons/tick.png +0 -0
  293. data/public/stylesheets/iqvoc/blueprint/plugins/buttons/readme.txt +32 -0
  294. data/public/stylesheets/iqvoc/blueprint/plugins/buttons/screen.css +97 -0
  295. data/public/stylesheets/iqvoc/blueprint/plugins/fancy-type/readme.txt +14 -0
  296. data/public/stylesheets/iqvoc/blueprint/plugins/fancy-type/screen.css +71 -0
  297. data/public/stylesheets/iqvoc/blueprint/plugins/link-icons/icons/doc.png +0 -0
  298. data/public/stylesheets/iqvoc/blueprint/plugins/link-icons/icons/email.png +0 -0
  299. data/public/stylesheets/iqvoc/blueprint/plugins/link-icons/icons/external.png +0 -0
  300. data/public/stylesheets/iqvoc/blueprint/plugins/link-icons/icons/feed.png +0 -0
  301. data/public/stylesheets/iqvoc/blueprint/plugins/link-icons/icons/im.png +0 -0
  302. data/public/stylesheets/iqvoc/blueprint/plugins/link-icons/icons/pdf.png +0 -0
  303. data/public/stylesheets/iqvoc/blueprint/plugins/link-icons/icons/visited.png +0 -0
  304. data/public/stylesheets/iqvoc/blueprint/plugins/link-icons/icons/xls.png +0 -0
  305. data/public/stylesheets/iqvoc/blueprint/plugins/link-icons/readme.txt +18 -0
  306. data/public/stylesheets/iqvoc/blueprint/plugins/link-icons/screen.css +40 -0
  307. data/public/stylesheets/iqvoc/blueprint/plugins/rtl/readme.txt +10 -0
  308. data/public/stylesheets/iqvoc/blueprint/plugins/rtl/screen.css +110 -0
  309. data/public/stylesheets/iqvoc/blueprint/print.css +29 -0
  310. data/public/stylesheets/iqvoc/blueprint/screen.css +258 -0
  311. data/public/stylesheets/iqvoc/blueprint/src/forms.css +65 -0
  312. data/public/stylesheets/iqvoc/blueprint/src/grid.css +280 -0
  313. data/public/stylesheets/iqvoc/blueprint/src/grid.png +0 -0
  314. data/public/stylesheets/iqvoc/blueprint/src/ie.css +76 -0
  315. data/public/stylesheets/iqvoc/blueprint/src/print.css +85 -0
  316. data/public/stylesheets/iqvoc/blueprint/src/reset.css +45 -0
  317. data/public/stylesheets/iqvoc/blueprint/src/typography.css +106 -0
  318. data/public/stylesheets/iqvoc/forms.css +71 -0
  319. data/public/stylesheets/iqvoc/images/back.png +0 -0
  320. data/public/stylesheets/iqvoc/images/branch.png +0 -0
  321. data/public/stylesheets/iqvoc/images/categ.png +0 -0
  322. data/public/stylesheets/iqvoc/images/categ_open.png +0 -0
  323. data/public/stylesheets/iqvoc/images/go_there.png +0 -0
  324. data/public/stylesheets/iqvoc/images/iqvoc.png +0 -0
  325. data/public/stylesheets/iqvoc/images/leaf_end.png +0 -0
  326. data/public/stylesheets/iqvoc/images/leaf_end_filled.png +0 -0
  327. data/public/stylesheets/iqvoc/images/leaf_mid.png +0 -0
  328. data/public/stylesheets/iqvoc/images/leaf_mid_filled.png +0 -0
  329. data/public/stylesheets/iqvoc/images/leaf_nothing.png +0 -0
  330. data/public/stylesheets/iqvoc/images/leaf_only.png +0 -0
  331. data/public/stylesheets/iqvoc/images/leaf_only_filled.png +0 -0
  332. data/public/stylesheets/iqvoc/images/leaf_top.png +0 -0
  333. data/public/stylesheets/iqvoc/images/leaf_top_filled.png +0 -0
  334. data/public/stylesheets/iqvoc/images/nothing.png +0 -0
  335. data/public/stylesheets/iqvoc/images/top_01.png +0 -0
  336. data/public/stylesheets/iqvoc/images/trunk.png +0 -0
  337. data/public/stylesheets/iqvoc/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  338. data/public/stylesheets/iqvoc/images/ui-bg_flat_55_fbec88_40x100.png +0 -0
  339. data/public/stylesheets/iqvoc/images/ui-bg_glass_75_d0e5f5_1x400.png +0 -0
  340. data/public/stylesheets/iqvoc/images/ui-bg_glass_85_dfeffc_1x400.png +0 -0
  341. data/public/stylesheets/iqvoc/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  342. data/public/stylesheets/iqvoc/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png +0 -0
  343. data/public/stylesheets/iqvoc/images/ui-bg_inset-hard_100_f5f8f9_1x100.png +0 -0
  344. data/public/stylesheets/iqvoc/images/ui-bg_inset-hard_100_fcfdfd_1x100.png +0 -0
  345. data/public/stylesheets/iqvoc/images/ui-icons_217bc0_256x240.png +0 -0
  346. data/public/stylesheets/iqvoc/images/ui-icons_2e83ff_256x240.png +0 -0
  347. data/public/stylesheets/iqvoc/images/ui-icons_469bdd_256x240.png +0 -0
  348. data/public/stylesheets/iqvoc/images/ui-icons_6da8d5_256x240.png +0 -0
  349. data/public/stylesheets/iqvoc/images/ui-icons_cd0a0a_256x240.png +0 -0
  350. data/public/stylesheets/iqvoc/images/ui-icons_d8e7f3_256x240.png +0 -0
  351. data/public/stylesheets/iqvoc/images/ui-icons_f9bd01_256x240.png +0 -0
  352. data/public/stylesheets/iqvoc/iqvoc.css +477 -0
  353. data/public/stylesheets/iqvoc/jquery-ui-1.8.13.custom.css +415 -0
  354. data/public/stylesheets/iqvoc/widgets.css +81 -0
  355. data/test/factories.rb +74 -0
  356. data/test/integration/alphabetical_test.rb +53 -0
  357. data/test/integration/authentication_test.rb +41 -0
  358. data/test/integration/browse_concepts_and_labels_test.rb +61 -0
  359. data/test/integration/browse_static_pages_test.rb +29 -0
  360. data/test/integration/client_augmentation_test.rb +42 -0
  361. data/test/integration/client_edit_concept_test.rb +72 -0
  362. data/test/integration/collection_circularity_test.rb +110 -0
  363. data/test/integration/concept_test.rb +61 -0
  364. data/test/integration/edit_concepts_test.rb +40 -0
  365. data/test/integration/note_annotations_test.rb +86 -0
  366. data/test/integration/search_test.rb +205 -0
  367. data/test/integration/tree_test.rb +31 -0
  368. data/test/integration/untranslated_test.rb +60 -0
  369. data/test/integration_test_helper.rb +45 -0
  370. data/test/performance/browsing_test.rb +25 -0
  371. data/test/test_helper.rb +29 -0
  372. data/test/unit/concept_test.rb +93 -0
  373. data/test/unit/note_test.rb +32 -0
  374. data/test/unit/origin_mapping_test.rb +70 -0
  375. data/test/unit/skos_import_test.rb +100 -0
  376. 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