From bf10913873ac01a116979d2c2b6655eddc4193c3 Mon Sep 17 00:00:00 2001 From: Marcelo JĂșnior Date: Tue, 23 Sep 2014 20:07:34 -0300 Subject: [PATCH] dspace_plugin : improve viewing dspace item --- plugins/dspace/controllers/dspace_plugin_controller.rb | 9 +++++++++ plugins/dspace/lib/dspace/collection.rb | 4 ++-- plugins/dspace/lib/dspace/item.rb | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ plugins/dspace/lib/dspace_plugin/bitstream.rb | 5 +++++ plugins/dspace/lib/dspace_plugin/item.rb | 6 +++++- plugins/dspace/public/style.css | 29 +++++++++++++++++++++++++++++ plugins/dspace/views/content_viewer/_item.html.erb | 5 +++-- plugins/dspace/views/dspace_plugin/view_item.html.erb | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 199 insertions(+), 5 deletions(-) create mode 100644 plugins/dspace/controllers/dspace_plugin_controller.rb create mode 100644 plugins/dspace/lib/dspace_plugin/bitstream.rb create mode 100644 plugins/dspace/views/dspace_plugin/view_item.html.erb diff --git a/plugins/dspace/controllers/dspace_plugin_controller.rb b/plugins/dspace/controllers/dspace_plugin_controller.rb new file mode 100644 index 0000000..3701424 --- /dev/null +++ b/plugins/dspace/controllers/dspace_plugin_controller.rb @@ -0,0 +1,9 @@ +class DspacePluginController < PublicController + append_view_path File.join(File.dirname(__FILE__) + '/../views') + + def view_item + @collection = DspacePlugin::Collection.find(params[:collection_id]) + @item = Dspace::Item.get_item_by_id 6 + end + +end diff --git a/plugins/dspace/lib/dspace/collection.rb b/plugins/dspace/lib/dspace/collection.rb index 479a543..4dfbab6 100644 --- a/plugins/dspace/lib/dspace/collection.rb +++ b/plugins/dspace/lib/dspace/collection.rb @@ -23,7 +23,7 @@ class Dspace::Collection < Dspace::Resource metadata = item_metadata[3].attributes if metadata != {} metadata = Hash[[metadata.map{|k,v| v}]] - date_issued = metadata.has_key?('dc.date.issued') ? metadata['dc.date.issued'] : nil + issue_date = metadata.has_key?('dc.date.issued') ? metadata['dc.date.issued'] : nil end item = DspacePlugin::Item.new @@ -31,7 +31,7 @@ class Dspace::Collection < Dspace::Resource item.id = element.id item.name = element.name item.author = author - item.date_issued = date_issued + item.issue_date = issue_date item_list << item diff --git a/plugins/dspace/lib/dspace/item.rb b/plugins/dspace/lib/dspace/item.rb index fa4e81f..58d99c5 100644 --- a/plugins/dspace/lib/dspace/item.rb +++ b/plugins/dspace/lib/dspace/item.rb @@ -6,4 +6,82 @@ class Dspace::Item < Dspace::Resource result.metadata end + def self.get_item_by_id(item_id) + self.site = 'http://dspace.maljr.net/rest/' + result = self.find item_id, :params => { :expand => 'metadata' } + + item_metadata = Dspace::Item.get_all_item_metadata_from self.site, result.id + + # author + metadata = item_metadata[0].attributes + if metadata != {} + metadata = Hash[[metadata.map{|k,v| v}]] + author = metadata.has_key?('dc.contributor.author') ? metadata['dc.contributor.author'] : nil + end + + # issue date + metadata = item_metadata[3].attributes + if metadata != {} + metadata = Hash[[metadata.map{|k,v| v}]] + issue_date = metadata.has_key?('dc.date.issued') ? metadata['dc.date.issued'] : nil + end + + # uri + metadata = item_metadata[4].attributes + if metadata != {} + metadata = Hash[[metadata.map{|k,v| v}]] + uri = metadata.has_key?('dc.identifier.uri') ? metadata['dc.identifier.uri'] : nil + end + + # description + metadata = item_metadata[5].attributes + if metadata != {} + metadata = Hash[[metadata.map{|k,v| v}]] + abstract = metadata.has_key?('dc.description') ? metadata['dc.description'] : nil + end + + # abstract + metadata = item_metadata[6].attributes + if metadata != {} + metadata = Hash[[metadata.map{|k,v| v}]] + description = metadata.has_key?('dc.description.abstract') ? metadata['dc.description.abstract'] : nil + end + + item = DspacePlugin::Item.new + + item.id = result.id + item.name = result.name + item.author = author + item.issue_date = issue_date + item.abstract = abstract + item.description = description + item.uri = uri + + ### BITSTREAMS + + item_bitstreams = self.find item_id, :params => { :expand => 'bitstreams' } + + bitstreams = item_bitstreams.bitstreams + + bitstreams.each do |bs| + bitstream = DspacePlugin::Bitstream.new + bitstream.id = bs.attributes[:id] + bitstream.name = bs.attributes[:name] + bitstream.description = bs.attributes[:description] + bitstream.mimetype = bs.attributes[:mimeType] + bitstream.size_bytes = bs.attributes[:sizeBytes] + bitstream.retrieve_link = bs.attributes[:retrieveLink] + bitstream.format = bs.attributes[:format] + bitstream.link = bs.attributes[:link] + + #raise bitstream.to_yaml + + item.files << bitstream + + end + + item + + end + end diff --git a/plugins/dspace/lib/dspace_plugin/bitstream.rb b/plugins/dspace/lib/dspace_plugin/bitstream.rb new file mode 100644 index 0000000..0c28013 --- /dev/null +++ b/plugins/dspace/lib/dspace_plugin/bitstream.rb @@ -0,0 +1,5 @@ +class DspacePlugin::Bitstream + + attr_accessor :id, :name, :description, :mimetype, :size_bytes, :retrieve_link, :format, :link + +end diff --git a/plugins/dspace/lib/dspace_plugin/item.rb b/plugins/dspace/lib/dspace_plugin/item.rb index 4e566ee..064f8c1 100644 --- a/plugins/dspace/lib/dspace_plugin/item.rb +++ b/plugins/dspace/lib/dspace_plugin/item.rb @@ -1,5 +1,9 @@ class DspacePlugin::Item - attr_accessor :id, :name, :author, :date_issued + attr_accessor :id, :name, :author, :issue_date, :abstract, :description, :uri, :files + + def initialize + self.files = [] + end end diff --git a/plugins/dspace/public/style.css b/plugins/dspace/public/style.css index 2cd59ba..b0a358f 100644 --- a/plugins/dspace/public/style.css +++ b/plugins/dspace/public/style.css @@ -21,3 +21,32 @@ #dspace_library div#actions { margin: 10px 0; } + +#dspace_library_item { + /*8border: 1px solid green;*/ +} + +.dspace_item_section { + margin-left: 20px; +} + +.dspace_item_section_title { + margin: 0px; + font-weight: bold; + border-bottom: 1px solid #c0c0c0; +} + +#dspace_library_item ul { + list-style-type: none; +} + +#dspace_library_item ul#item_files_list, +#dspace_library_item ul.item_file_attributes_list { + margin: 0; + padding: 0; +} + +#dspace_library_item ul#item_files_list > li { + margin: 5px 0; +} + diff --git a/plugins/dspace/views/content_viewer/_item.html.erb b/plugins/dspace/views/content_viewer/_item.html.erb index 324a5ea..8757ac6 100644 --- a/plugins/dspace/views/content_viewer/_item.html.erb +++ b/plugins/dspace/views/content_viewer/_item.html.erb @@ -1,4 +1,5 @@
  • - <%= item.name %>
    - <%= item.author %> (<%= item.date_issued %>) + + <%= link_to item.name, :controller => 'dspace_plugin', :action => 'view_item', :id => item.id, :collection_id => @page.id %>
    + <%= item.author %> (<%= item.issue_date %>)
  • diff --git a/plugins/dspace/views/dspace_plugin/view_item.html.erb b/plugins/dspace/views/dspace_plugin/view_item.html.erb new file mode 100644 index 0000000..732cc22 --- /dev/null +++ b/plugins/dspace/views/dspace_plugin/view_item.html.erb @@ -0,0 +1,68 @@ +<% dspace_server_url = @collection.parent.parent.dspace_server_url %> + +<% if dspace_server_url =~ /\/$/ %> + <% dspace_server_url.gsub!(/\/$/,'') %> +<% end %> + +
    + <%= button(:back, _('Go back to %s') % @collection.short_title, @collection.url) %> +
    + +
    + +
    + <%= content_tag 'h1', @item.name, :class => 'title' %> +
    + +
    + +
    + <%= content_tag 'div', _('Authors:'), :class => 'dspace_item_section_title' %> + <%= content_tag 'div', @item.author, :class => 'dspace_item_section_value' %> +
    + +
    + +
    + <%= content_tag 'div', _('Issue date:'), :class => 'dspace_item_section_title' %> + <%= content_tag 'div', @item.issue_date, :class => 'dspace_item_section_value' %> +
    +
    + +
    + <%= content_tag 'div', _('Abstract:'), :class => 'dspace_item_section_title' %> + <%= content_tag 'div', @item.abstract, :class => 'dspace_item_section_value' %> +
    + +
    + +
    + <%= content_tag 'div', _('Description:'), :class => 'dspace_item_section_title' %> + <%= content_tag 'div', @item.description, :class => 'dspace_item_section_value' %> +
    + +
    + +
    + <%= content_tag 'div', _('URI:'), :class => 'dspace_item_section_title' %> + <%= content_tag 'div', link_to(@item.uri, @item.uri), :class => 'dspace_item_section_value' %> +
    + +
    + +
    + <%= content_tag 'div', _('Files in this item'), :class => 'dspace_item_section_title' %> +
      + <% @item.files.each do |file| %> +
    • +
        +
      • File: <%= link_to file.name, dspace_server_url + file.retrieve_link %>
      • +
      • Description: <%= file.description %>
      • +
      • Size: <%= number_to_human_size( file.size_bytes ) %>
      • +
      +
    • + <% end %> +
    +
    + +
    -- libgit2 0.21.2