ld4l_virtual_collection 0.1.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.
Files changed (133) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +34 -0
  3. data/.travis.yml +14 -0
  4. data/CHANGES.md +12 -0
  5. data/Gemfile +5 -0
  6. data/LICENSE.txt +14 -0
  7. data/README.md +128 -0
  8. data/Rakefile +34 -0
  9. data/app/assets/images/ld4l_virtual_collection/loading_spinner.gif +0 -0
  10. data/app/assets/javascripts/ld4l_virtual_collection/application.js +19 -0
  11. data/app/assets/javascripts/ld4l_virtual_collection/collections.js +2 -0
  12. data/app/assets/javascripts/ld4l_virtual_collection/items.js +2 -0
  13. data/app/assets/stylesheets/ld4l_virtual_collection/_bootstrap-custom.scss +50 -0
  14. data/app/assets/stylesheets/ld4l_virtual_collection/application.css.scss +22 -0
  15. data/app/assets/stylesheets/ld4l_virtual_collection/collections.css.scss +4 -0
  16. data/app/assets/stylesheets/ld4l_virtual_collection/items.css.scss +4 -0
  17. data/app/assets/stylesheets/ld4l_virtual_collection/my_virtual_collections.css.scss +4 -0
  18. data/app/assets/stylesheets/scaffold.css +56 -0
  19. data/app/controllers/ld4l_virtual_collection/application_controller.rb +9 -0
  20. data/app/controllers/ld4l_virtual_collection/collections_controller.rb +101 -0
  21. data/app/controllers/ld4l_virtual_collection/items_controller.rb +94 -0
  22. data/app/controllers/ld4l_virtual_collection/my_virtual_collections_controller.rb +189 -0
  23. data/app/controllers/ld4l_virtual_collection/notes_controller.rb +84 -0
  24. data/app/controllers/ld4l_virtual_collection/tags_controller.rb +105 -0
  25. data/app/helpers/ld4l_virtual_collection/application_helper.rb +4 -0
  26. data/app/helpers/ld4l_virtual_collection/collections_helper.rb +4 -0
  27. data/app/helpers/ld4l_virtual_collection/items_helper.rb +4 -0
  28. data/app/models/ld4l_virtual_collection/collection.rb +47 -0
  29. data/app/models/ld4l_virtual_collection/item.rb +50 -0
  30. data/app/models/ld4l_virtual_collection/note.rb +52 -0
  31. data/app/models/ld4l_virtual_collection/tag.rb +94 -0
  32. data/app/views/layouts/ld4l_virtual_collection/application.html.erb +14 -0
  33. data/app/views/ld4l_virtual_collection/collections/_form.html.erb +28 -0
  34. data/app/views/ld4l_virtual_collection/collections/edit.html.erb +13 -0
  35. data/app/views/ld4l_virtual_collection/collections/index.html.erb +30 -0
  36. data/app/views/ld4l_virtual_collection/collections/new.html.erb +12 -0
  37. data/app/views/ld4l_virtual_collection/collections/show.html.erb +43 -0
  38. data/app/views/ld4l_virtual_collection/items/_collection_info.html.erb +14 -0
  39. data/app/views/ld4l_virtual_collection/items/_form.html.erb +25 -0
  40. data/app/views/ld4l_virtual_collection/items/edit.html.erb +14 -0
  41. data/app/views/ld4l_virtual_collection/items/index.html.erb +24 -0
  42. data/app/views/ld4l_virtual_collection/items/new.html.erb +14 -0
  43. data/app/views/ld4l_virtual_collection/items/show.html.erb +23 -0
  44. data/app/views/ld4l_virtual_collection/my_virtual_collections/_collection_lists.html.erb +82 -0
  45. data/app/views/ld4l_virtual_collection/my_virtual_collections/_edit_collection_modal.html.erb +20 -0
  46. data/app/views/ld4l_virtual_collection/my_virtual_collections/_form_collection.html.erb +51 -0
  47. data/app/views/ld4l_virtual_collection/my_virtual_collections/_form_collection_item.html.erb +48 -0
  48. data/app/views/ld4l_virtual_collection/my_virtual_collections/_form_collection_items_query.html.erb +37 -0
  49. data/app/views/ld4l_virtual_collection/my_virtual_collections/_form_item_note.html.erb +31 -0
  50. data/app/views/ld4l_virtual_collection/my_virtual_collections/_form_item_tag.html.erb +30 -0
  51. data/app/views/ld4l_virtual_collection/my_virtual_collections/_modals.html.erb +8 -0
  52. data/app/views/ld4l_virtual_collection/my_virtual_collections/_new_collection_item_modal.html.erb +20 -0
  53. data/app/views/ld4l_virtual_collection/my_virtual_collections/_new_collection_items_by_query_modal.html.erb +20 -0
  54. data/app/views/ld4l_virtual_collection/my_virtual_collections/_new_collection_modal.html.erb +20 -0
  55. data/app/views/ld4l_virtual_collection/my_virtual_collections/_selected_collection_header.html.erb +17 -0
  56. data/app/views/ld4l_virtual_collection/my_virtual_collections/_selected_collection_items.html.erb +121 -0
  57. data/app/views/ld4l_virtual_collection/my_virtual_collections/_selected_collection_range.html.erb +44 -0
  58. data/app/views/ld4l_virtual_collection/my_virtual_collections/edit_collection_modal.js.erb +1 -0
  59. data/app/views/ld4l_virtual_collection/my_virtual_collections/index.html.erb +4 -0
  60. data/app/views/ld4l_virtual_collection/my_virtual_collections/new_collection_item_modal.js.erb +1 -0
  61. data/app/views/ld4l_virtual_collection/my_virtual_collections/new_collection_items_by_query_modal.js.erb +1 -0
  62. data/app/views/ld4l_virtual_collection/my_virtual_collections/new_collection_modal.js.erb +1 -0
  63. data/app/views/ld4l_virtual_collection/my_virtual_collections/show.html.erb +14 -0
  64. data/bin/rails +12 -0
  65. data/config/routes.rb +16 -0
  66. data/ld4l_virtual_collection.gemspec +50 -0
  67. data/lib/ld4l_virtual_collection.rb +34 -0
  68. data/lib/ld4l_virtual_collection/configuration.rb +86 -0
  69. data/lib/ld4l_virtual_collection/engine.rb +23 -0
  70. data/lib/ld4l_virtual_collection/version.rb +3 -0
  71. data/lib/tasks/ld4l_virtual_collection_tasks.rake +4 -0
  72. data/test/controllers/ld4l_virtual_collection/collections_controller_test.rb +51 -0
  73. data/test/controllers/ld4l_virtual_collection/items_controller_test.rb +51 -0
  74. data/test/controllers/ld4l_virtual_collection/my_virtual_collections_controller_test.rb +51 -0
  75. data/test/controllers/ld4l_virtual_collection/virtual_collections_controller_test.rb +51 -0
  76. data/test/dummy/Gemfile +20 -0
  77. data/test/dummy/README.rdoc +28 -0
  78. data/test/dummy/Rakefile +6 -0
  79. data/test/dummy/app/assets/images/.keep +0 -0
  80. data/test/dummy/app/assets/javascripts/application.js +13 -0
  81. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  82. data/test/dummy/app/controllers/application_controller.rb +5 -0
  83. data/test/dummy/app/controllers/concerns/.keep +0 -0
  84. data/test/dummy/app/helpers/application_helper.rb +2 -0
  85. data/test/dummy/app/mailers/.keep +0 -0
  86. data/test/dummy/app/models/.keep +0 -0
  87. data/test/dummy/app/models/concerns/.keep +0 -0
  88. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  89. data/test/dummy/bin/bundle +3 -0
  90. data/test/dummy/bin/rails +4 -0
  91. data/test/dummy/bin/rake +4 -0
  92. data/test/dummy/config.ru +4 -0
  93. data/test/dummy/config/application.rb +23 -0
  94. data/test/dummy/config/boot.rb +5 -0
  95. data/test/dummy/config/database.yml +25 -0
  96. data/test/dummy/config/environment.rb +5 -0
  97. data/test/dummy/config/environments/development.rb +37 -0
  98. data/test/dummy/config/environments/production.rb +78 -0
  99. data/test/dummy/config/environments/test.rb +39 -0
  100. data/test/dummy/config/initializers/assets.rb +8 -0
  101. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  102. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  103. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  104. data/test/dummy/config/initializers/inflections.rb +16 -0
  105. data/test/dummy/config/initializers/mime_types.rb +4 -0
  106. data/test/dummy/config/initializers/rdf_repositories.rb +32 -0
  107. data/test/dummy/config/initializers/session_store.rb +3 -0
  108. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  109. data/test/dummy/config/locales/en.yml +23 -0
  110. data/test/dummy/config/routes.rb +3 -0
  111. data/test/dummy/config/secrets.yml +22 -0
  112. data/test/dummy/lib/assets/.keep +0 -0
  113. data/test/dummy/log/.keep +0 -0
  114. data/test/dummy/public/404.html +67 -0
  115. data/test/dummy/public/422.html +67 -0
  116. data/test/dummy/public/500.html +66 -0
  117. data/test/dummy/public/favicon.ico +0 -0
  118. data/test/fixtures/ld4l_virtual_collection/collections.yml +11 -0
  119. data/test/fixtures/ld4l_virtual_collection/items.yml +11 -0
  120. data/test/fixtures/ld4l_virtual_collection/my_virtual_collections.yml +11 -0
  121. data/test/fixtures/ld4l_virtual_collection/virtual_collections.yml +9 -0
  122. data/test/helpers/ld4l_virtual_collection/collections_helper_test.rb +6 -0
  123. data/test/helpers/ld4l_virtual_collection/items_helper_test.rb +6 -0
  124. data/test/helpers/ld4l_virtual_collection/my_virtual_collections_helper_test.rb +6 -0
  125. data/test/helpers/ld4l_virtual_collection/virtual_collections_helper_test.rb +6 -0
  126. data/test/integration/navigation_test.rb +10 -0
  127. data/test/ld4l_virtual_collection_test.rb +7 -0
  128. data/test/models/ld4l_virtual_collection/collection_test.rb +9 -0
  129. data/test/models/ld4l_virtual_collection/item_test.rb +9 -0
  130. data/test/models/ld4l_virtual_collection/my_virtual_collection_test.rb +9 -0
  131. data/test/models/ld4l_virtual_collection/virtual_collection_test.rb +9 -0
  132. data/test/test_helper.rb +17 -0
  133. metadata +544 -0
@@ -0,0 +1,9 @@
1
+ # # MODIFIED to have engine application controller extend main application's controller
2
+ class Ld4lVirtualCollection::ApplicationController < ApplicationController
3
+ end
4
+
5
+ # # GENERATED
6
+ # module Ld4lVirtualCollection
7
+ # class ApplicationController < ActionController::Base
8
+ # end
9
+ # end
@@ -0,0 +1,101 @@
1
+ require_dependency "ld4l_virtual_collection/application_controller"
2
+
3
+
4
+ # TODO This code implies that @collection is an instance of the Collection model, but it is actually an instance of
5
+ # LD4L::OreRDF::Aggregation. Should the Collection model be updated to hold the instance of LD4L::OreRDF::Aggregation
6
+ # and have the methods updated to redirect to the Aggregation model? OR should Collection inherit from
7
+ # LD4L::OreRDF::Aggregation and get the methods that way? That seems the cleaner way to go.
8
+
9
+
10
+ module Ld4lVirtualCollection
11
+ class CollectionsController < ApplicationController
12
+ before_action :set_collection, only: [:show, :edit, :update, :destroy]
13
+
14
+ # GET /collections
15
+ def index
16
+ @collections = Collection.all
17
+ end
18
+
19
+ # GET /collections/1
20
+ def show
21
+ # puts("*** Entering CTRL: show collection")
22
+ end
23
+
24
+ # GET /collections/new
25
+ def new
26
+ # puts("*** Entering CTRL: new collection")
27
+ @collection = Collection.new
28
+ end
29
+
30
+ # GET /collections/1/edit
31
+ def edit
32
+ # puts("*** Entering CTRL: edit")
33
+ end
34
+
35
+ # POST /collections
36
+ def create
37
+ # puts("*** Entering CTRL: create collection")
38
+ @collection = Collection.new(collection_params)
39
+ persisted = false
40
+ error_msg = ''
41
+ begin
42
+ persisted = LD4L::OreRDF::PersistAggregation.call(@collection)
43
+ rescue ArgumentError
44
+ # TODO should check that error message from ArgumentError is that Title is missing.
45
+ error_msg = "Title is required."
46
+ end
47
+ if persisted == true
48
+ flash[:notice] = 'Collection was successfully created.'
49
+ redirect_to my_virtual_collection_path(@collection.id.to_s)
50
+ else
51
+ flash[:error] = "Collection not created. #{error_msg}"
52
+ redirect_to my_virtual_collections_path
53
+ end
54
+ end
55
+
56
+ # PATCH/PUT /collections/1
57
+ def update
58
+ # puts("*** Entering CTRL: update collection")
59
+ @collection = Collection.update(collection_params)
60
+ persisted = false
61
+ error_msg = ''
62
+ begin
63
+ # TODO -- should update check that proxies persisted as well???
64
+ persisted = LD4L::OreRDF::PersistAggregation.call(@collection)
65
+ rescue ArgumentError
66
+ # TODO should check that error message from ArgumentError is that Title is missing.
67
+ error_msg = "Title is required."
68
+ end
69
+ if persisted == true
70
+ flash[:notice] = 'Collection was successfully updated.'
71
+ redirect_to my_virtual_collection_path(@collection.id.to_s)
72
+ else
73
+ flash[:error] = "Collection not updated. #{error_msg}"
74
+ redirect_to my_virtual_collections_path
75
+ end
76
+ end
77
+
78
+ # DELETE /collections/1
79
+ def destroy
80
+ # puts("*** Entering CTRL: destroy collection")
81
+ if LD4L::OreRDF::DestroyAggregation.call(@collection) == true
82
+ redirect_to my_virtual_collections_path, notice: 'Collection was successfully destroyed.'
83
+ else
84
+ # TODO Should it redirect to edit??? OR list??? OR where???
85
+ # TODO How to add error message about what failed to be destroyed???
86
+ render :edit
87
+ end
88
+ end
89
+
90
+ private
91
+ # Use callbacks to share common setup or constraints between actions.
92
+ def set_collection
93
+ @collection = Collection.find(params[:id])
94
+ end
95
+
96
+ # Only allow a trusted parameter "white list" through.
97
+ def collection_params
98
+ params[:collection]
99
+ end
100
+ end
101
+ end
@@ -0,0 +1,94 @@
1
+ require_dependency "ld4l_virtual_collection/application_controller"
2
+
3
+ module Ld4lVirtualCollection
4
+ class ItemsController < ApplicationController
5
+ before_action :set_collection
6
+ before_action :set_item, only: [:show, :edit, :update, :destroy, :metadata_from_uri]
7
+
8
+ # GET /collections/1/items
9
+ def index
10
+ @items = Item.all(@collection)
11
+ end
12
+
13
+ # GET /collections/1/items/1
14
+ def show
15
+ end
16
+
17
+ # GET /collections/1/items/new
18
+ def new
19
+ # puts("*** Entering CTRL: new item")
20
+ @item = Item.new(@collection)
21
+ @proxy_for = ""
22
+ end
23
+
24
+ # GET /items/1/edit
25
+ def edit
26
+ # puts("*** Entering CTRL: edit item")
27
+ end
28
+
29
+ # POST /collections/1/items
30
+ def create
31
+ # puts("*** Entering CTRL: create item")
32
+ @item = Item.new(@collection, item_params)
33
+
34
+ # TODO How to save only affected items & collection instead of all items & collection???
35
+ if LD4L::OreRDF::PersistAggregation.call(@collection) == true
36
+ redirect_to my_virtual_collection_path(@collection.id.to_s), notice: 'Item was successfully created.'
37
+ else
38
+ # TODO How to add error message about what failed to persist???
39
+ render :new
40
+ end
41
+ end
42
+
43
+ # PATCH/PUT /collections/1/items/1
44
+ def update
45
+ # puts("*** Entering CTRL: update item")
46
+ @item = Item.update(@collection, @item, item_params)
47
+ # TODO How to save only affected items & collection instead of all items & collection???
48
+ if LD4L::OreRDF::PersistAggregation.call(@collection) == true
49
+ redirect_to my_virtual_collection_path(@collection.id.to_s), notice: 'Item was successfully updated.'
50
+ else
51
+ render :edit
52
+ end
53
+ end
54
+
55
+ # GET /collections/1/items/1
56
+ def metadata_from_uri
57
+ # puts("*** Entering CTRL: create_from_uri (item)")
58
+ LD4L::WorksRDF::GetMetadataFromURI(@proxy_for)
59
+ end
60
+
61
+ # DELETE /collections/1/items/1
62
+ def destroy
63
+ # puts("*** Entering CTRL: destroy item")
64
+ # TODO -- need to implement destroy in ORE Gem -- Destroying just the item leaves the aggregates triples
65
+ @item.destroy ## TODO REMOVE THIS LINE WHEN DestroyProxy IS IMPLEMENTED
66
+ # if LD4L::OreRDF::DestroyProxy.call(@collection,@item.rdf_subject) == true
67
+ redirect_to my_virtual_collection_path(@collection.id.to_s), notice: 'Item was successfully removed.'
68
+ # else
69
+ # # TODO Should it redirect to edit??? OR list??? OR where???
70
+ # # TODO How to add error message about what failed to be destroyed???
71
+ # render :edit
72
+ # end
73
+ end
74
+
75
+ private
76
+ # Use callbacks to share common setup or constraints between actions.
77
+ def set_item
78
+ @item = Item.find(params[:id])
79
+ @proxy_for = @item.proxy_for_subject
80
+ @proxy_for |= ""
81
+ end
82
+
83
+ # Only allow a trusted parameter "white list" through.
84
+ def item_params
85
+ white_list_params = params.permit(:proxy_for) unless params.has_key?(:item)
86
+ white_list_params = params.require(:item).permit(:proxy_for) if params.has_key?(:item)
87
+ white_list_params
88
+ end
89
+
90
+ def set_collection
91
+ @collection = Collection.find(params["collection_id"])
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,189 @@
1
+ require_dependency "ld4l_virtual_collection/application_controller"
2
+
3
+
4
+ # TODO This code implies that @collection is an instance of the Collection model, but it is actually an instance of
5
+ # LD4L::OreRDF::Aggregation. Should the Collection model be updated to hold the instance of LD4L::OreRDF::Aggregation
6
+ # and have the methods updated to redirect to the Aggregation model? OR should Collection inherit from
7
+ # LD4L::OreRDF::Aggregation and get the methods that way? That seems the cleaner way to go.
8
+
9
+
10
+ module Ld4lVirtualCollection
11
+ class MyVirtualCollectionsController < ApplicationController
12
+ before_action :set_collections, :set_page_title
13
+ before_action :set_collection, only: [:edit, :update, :destroy, :edit_collection_modal, :new_collection_item_modal]
14
+ before_action :set_collection_and_items, only: [:show]
15
+
16
+ # GET /my_virtual_collections
17
+ def index
18
+ @collection = Collection.new
19
+ end
20
+
21
+ # GET /my_virtual_collections/1
22
+ def show
23
+ # puts("*** Entering CTRL: show virtual collection")
24
+ end
25
+
26
+ # GET /my_virtual_collections/new_collection_modal
27
+ def new_collection_modal
28
+ # puts("*** Entering CTRL: new virtual collection")
29
+ @collection = Collection.new
30
+ respond_to do |format|
31
+ format.html
32
+ format.js
33
+ end
34
+ end
35
+
36
+ # GET /my_virtual_collections/edit_collection_modal/1
37
+ def edit_collection_modal
38
+ # puts("*** Entering CTRL: edit virtual collection")
39
+ respond_to do |format|
40
+ format.html
41
+ format.js
42
+ end
43
+ end
44
+
45
+
46
+ # GET /my_virtual_collections/new_collection_item_modal/1
47
+ def new_collection_item_modal
48
+ # puts("*** Entering CTRL: new virtual collection item")
49
+ @item = Item.new(@collection)
50
+ @proxy_for = ""
51
+ respond_to do |format|
52
+ format.html
53
+ format.js
54
+ end
55
+ end
56
+
57
+
58
+ # # TODO XXX
59
+ # # GET /my_virtual_collections/new_collection_items_by_query_modal/1
60
+ # def new_collection_items_by_query_modal
61
+ # # puts("*** Entering CTRL: new virtual collection items by query")
62
+ # @item = Item.new(@collection)
63
+ # @proxy_for = ""
64
+ # respond_to do |format|
65
+ # format.html
66
+ # format.js
67
+ # end
68
+ # end
69
+
70
+
71
+ # # GET /my_virtual_collections/1/edit
72
+ # def edit
73
+ # # puts("*** Entering CTRL: edit")
74
+ # end
75
+ #
76
+ # # POST /my_virtual_collections
77
+ # def create
78
+ # puts("*** Entering CTRL: create collection")
79
+ # @collection = Collection.new(collection_params)
80
+ # if LD4L::OreRDF::PersistAggregation.call(@collection) == true
81
+ # redirect_to collection_path(@collection.id.to_s), notice: 'Collection was successfully created.'
82
+ # else
83
+ # # TODO How to add error message about what failed to persist???
84
+ # render :new
85
+ # end
86
+ # end
87
+ #
88
+ # # PATCH/PUT /my_virtual_collections/1
89
+ # def update
90
+ # puts("*** Entering CTRL: update collection")
91
+ # @collection = Collection.update(collection_params)
92
+ # # TODO -- should update check that proxies persisted as well???
93
+ # if LD4L::OreRDF::PersistAggregation.call(@collection) == true
94
+ # redirect_to collection_path(@collection.id.to_s), notice: 'Collection was successfully updated.'
95
+ # else
96
+ # # TODO How to add error message about what failed to persist???
97
+ # render :edit
98
+ # end
99
+ # end
100
+ #
101
+ # # DELETE /my_virtual_collections/1
102
+ # def destroy
103
+ # puts("*** Entering CTRL: destroy collection")
104
+ # if LD4L::OreRDF::DestroyAggregation.call(@collection) == true
105
+ # redirect_to collections_url, notice: 'Collection was successfully destroyed.'
106
+ # else
107
+ # # TODO Should it redirect to edit??? OR list??? OR where???
108
+ # # TODO How to add error message about what failed to be destroyed???
109
+ # render :edit
110
+ # end
111
+ # end
112
+
113
+ private
114
+ # Use callbacks to share common setup or constraints between actions.
115
+ def set_page_title
116
+ @heading = "Virtual Collections"
117
+ end
118
+
119
+ def set_collections
120
+ @collections = []
121
+ collections = Collection.all
122
+ Ld4lVirtualCollection::Engine.configuration.debug_logger.warn("*** Entering CTRL: set_collections -- @collections=#{@collections}")
123
+ collections.each do |uri, col|
124
+ parsed_col = {}
125
+ parsed_col[:title] = col[:title]
126
+ parsed_col[:description] = col[:description]
127
+ parsed_col[:uri] = uri
128
+ parsed_col[:id] = /https?:\/\/(\w*):?(\d{4})?([\/\w]*)\/(\w{10}-\w{4}-\w{4}-\w{4}-\w{12})/.match(uri).values_at(4)
129
+ @collections << parsed_col
130
+ end
131
+
132
+ # TODO Sorting collections alphabetically...
133
+ # TODO * @collections is a hash, so it can't be sorted
134
+ # TODO * need to convert @collections from a hash to an array
135
+
136
+ # @watched = Watched.all
137
+ end
138
+
139
+ def set_collection
140
+ @select_id = params[:id]
141
+ @collection = Collection.find(@select_id)
142
+ end
143
+
144
+ def set_collection_and_items
145
+ Ld4lVirtualCollection::Engine.configuration.debug_logger.warn("*** Entering CTRL: set_collection_and_items")
146
+ Ld4lVirtualCollection::Engine.configuration.debug_logger.warn("params=#{params}")
147
+ @select_id = params[:id]
148
+ @collection = Collection.find(@select_id)
149
+ @items = []
150
+ if @collection
151
+ Ld4lVirtualCollection::Engine.configuration.debug_logger.warn("****** Get metadata for virtual collection #{@collection.title}")
152
+ @collection.proxy_resources.each do |proxy|
153
+ next if proxy.nil?
154
+ uri = proxy.proxy_for_subject
155
+ next if uri.nil?
156
+ Ld4lVirtualCollection::Engine.configuration.debug_logger.warn(" begin processing URI: #{uri}")
157
+ parsable_uri = URI(uri) if uri
158
+ metadata_callback = Ld4lVirtualCollection::Engine.configuration.find_metadata_callback(parsable_uri.host) if parsable_uri
159
+ metadata_callback = Ld4lVirtualCollection::Engine.configuration.get_default_metadata_callback unless metadata_callback
160
+ items_metadata = metadata_callback.call( [ uri ] ) if metadata_callback
161
+
162
+ notes = Ld4lVirtualCollection::Note.all(@collection,proxy)
163
+ note = notes.first if notes && notes.size > 0
164
+ note = Ld4lVirtualCollection::Note.new(@collection,proxy) unless notes && notes.size > 0
165
+
166
+ tag_values = Ld4lVirtualCollection::Tag.all_values(proxy)
167
+ tag = Ld4lVirtualCollection::Tag.new(@collection,proxy)
168
+
169
+ @items << { :proxy => proxy, :metadata => items_metadata.first, :proxy_for => uri, :note => note, :tag => tag, :tags => tag_values } if items_metadata && items_metadata.size > 0
170
+
171
+ Ld4lVirtualCollection::Engine.configuration.debug_logger.warn(" processing complete - #{@items.size} items retrieved")
172
+ ### TODO Look for all usage of proxy_for and make sure correct. Cause it isn't correct here.
173
+
174
+ # @proxy_for = uri ### TODO This isn't correct as the proxy gets reset with every loop. How is it being used? Should get proxy from @items.
175
+ end
176
+ end
177
+ # TODO: Following 3 values are kludged for first page. Need better method for calculating when multiple pages.
178
+ @first_idx = @items.size > 0 ? 1 : 0
179
+ @last_idx = @items.size <= 20 ? @items.size : 20
180
+ @num_items = @items.size
181
+ @note = nil
182
+ end
183
+
184
+ # Only allow a trusted parameter "white list" through.
185
+ def my_virtual_collection_params
186
+ params[:collection]
187
+ end
188
+ end
189
+ end
@@ -0,0 +1,84 @@
1
+ require_dependency "ld4l_virtual_collection/application_controller"
2
+
3
+ module Ld4lVirtualCollection
4
+ class NotesController < ApplicationController
5
+ before_action :set_collection_and_item, only: [:new, :create, :index]
6
+ before_action :set_note, only: [:show, :edit, :update, :destroy]
7
+
8
+ # GET /collections/1/items/1/notes
9
+ def index
10
+ @notes = Note.all(@collection,@item)
11
+ end
12
+
13
+ # GET /notes/1
14
+ def show
15
+ end
16
+
17
+ # GET /collections/1/items/1/notes/new
18
+ def new
19
+ # puts("*** Entering CTRL: new note")
20
+ @note = Note.new(@collection,@item)
21
+ end
22
+
23
+ # GET /notes/1/edit
24
+ def edit
25
+ # puts("*** Entering CTRL: edit note")
26
+ end
27
+
28
+ # POST /collections/1/items/1/notes
29
+ def create
30
+ # puts("*** Entering CTRL: create note")
31
+ @note = Note.new(@collection, @item, note_params)
32
+
33
+ if @note.persist! == true
34
+ redirect_to my_virtual_collection_path(@collection.id.to_s), notice: 'Note was successfully created.'
35
+ else
36
+ # TODO How to add error message about what failed to persist???
37
+ render :new
38
+ end
39
+ end
40
+
41
+ # PATCH/PUT /notes/1
42
+ def update
43
+ # puts("*** Entering CTRL: update note")
44
+ @note = Note.update(@note, note_params)
45
+ # TODO should check old and new values and only update if changed
46
+ # TODO How to save only affected items & collection instead of all items & collection???
47
+ if @note.persist! == true
48
+ redirect_to my_virtual_collection_path(note_params[:collection_id]), notice: 'Note was successfully updated.'
49
+ else
50
+ render :edit
51
+ end
52
+ end
53
+
54
+ # DELETE /notes/1
55
+ def destroy
56
+ # puts("*** Entering CTRL: destroy note")
57
+ @note.destroy
58
+ # if LD4L::OreRDF::DestroyProxy.call(@collection,@item.rdf_subject) == true
59
+ redirect_to my_virtual_collection_path(@collection.id.to_s), notice: 'Note was successfully removed.'
60
+ # else
61
+ # # TODO Should it redirect to edit??? OR list??? OR where???
62
+ # # TODO How to add error message about what failed to be destroyed???
63
+ # render :edit
64
+ # end
65
+ end
66
+
67
+ private
68
+ # Use callbacks to share common setup or constraints between actions.
69
+ def set_note
70
+ @note = Note.find(params[:id])
71
+ end
72
+
73
+ # Only allow a trusted parameter "white list" through.
74
+ def note_params
75
+ params[:note]
76
+ end
77
+
78
+ def set_collection_and_item
79
+ @collection = Collection.find(params["collection_id"])
80
+ @item = Item.find(params["item_id"])
81
+ @proxy_for = @item && @item.proxy_for && @item.proxy_for.first ? @item.proxy_for.first.rdf_subject : ""
82
+ end
83
+ end
84
+ end