diff --git a/app/assets/stylesheets/modules/access-panel-course-reserve.css.scss b/app/assets/stylesheets/modules/access-panel-course-reserve.css.scss
new file mode 100644
index 000000000..0f27d9420
--- /dev/null
+++ b/app/assets/stylesheets/modules/access-panel-course-reserve.css.scss
@@ -0,0 +1,18 @@
+.panel-course-reserve {
+ ul.links {
+ padding-left: 0;
+ list-style-type: none;
+ li {
+ padding-right: 20px;
+ padding-bottom: 15px;
+ }
+ li:last-child {
+ padding-bottom: 0px;
+ }
+ }
+}
+
+.course-reserve-title {
+ text-transform: capitalize !important;
+ font-size: $font-size-small;
+}
diff --git a/app/assets/stylesheets/searchworks.css.scss b/app/assets/stylesheets/searchworks.css.scss
index eb4dc9866..e08fbf35b 100644
--- a/app/assets/stylesheets/searchworks.css.scss
+++ b/app/assets/stylesheets/searchworks.css.scss
@@ -2,8 +2,9 @@
@import 'base';
@import 'layout';
+@import 'modules/access-panel-course-reserve';
@import 'modules/access-panel-online';
@import 'modules/breadcrumb';
@import 'modules/record-toolbar';
@import 'modules/search-bar';
-@import 'modules/record-metadata-section';
\ No newline at end of file
+@import 'modules/record-metadata-section';
diff --git a/app/controllers/catalog_controller.rb b/app/controllers/catalog_controller.rb
index 72927b901..b72b96a69 100644
--- a/app/controllers/catalog_controller.rb
+++ b/app/controllers/catalog_controller.rb
@@ -78,8 +78,8 @@ class CatalogController < ApplicationController
#config.add_facet_field "dewey_2digit_facet", :label => "Refine Call Number", :show => false
#config.add_facet_field "dewey_b4cutter_facet", :label => "Refine Call Number", :show => false
#config.add_facet_field "gov_doc_type_facet", :label => "Refine Call Number", :show => false
- #config.add_facet_field "course", :label => "Course", :show => false
- #config.add_facet_field "instructor", :label => "Instructor", :show => false
+ config.add_facet_field "course", :label => "Course", :show => false
+ config.add_facet_field "instructor", :label => "Instructor", :show => false
config.add_facet_field "author_other_facet", :label => "Organization (as Author)", :limit => true
config.add_facet_field "geographic_facet", :label => "Region", :limit => true
config.add_facet_field "era_facet", :label => "Era", :limit => true
diff --git a/app/helpers/access_panel_helper.rb b/app/helpers/access_panel_helper.rb
new file mode 100644
index 000000000..42780494a
--- /dev/null
+++ b/app/helpers/access_panel_helper.rb
@@ -0,0 +1,7 @@
+module AccessPanelHelper
+
+ def link_to_course_reserve_course(course)
+ link_to("#{course.id} -- #{course.name}", catalog_index_path({f: {course: [course.id], instructor: [course.instructor]}}))
+ end
+
+end
diff --git a/app/models/concerns/course_reserves.rb b/app/models/concerns/course_reserves.rb
new file mode 100644
index 000000000..9492b4eed
--- /dev/null
+++ b/app/models/concerns/course_reserves.rb
@@ -0,0 +1,40 @@
+module CourseReserves
+ def course_reserves
+ if self.respond_to?(:[])
+ @course_reserves ||= CourseReserves::Processor.new(self)
+ end
+ end
+
+ private
+ class Processor
+ def initialize(document)
+ @courses = document[:crez_course_info].map { |course| CourseInfo.new(course) } unless document[:crez_course_info].nil?
+ end
+
+ def present?
+ true ? @courses : false
+ end
+
+ attr_reader :courses
+
+ end
+
+ class CourseInfo
+ def initialize(course)
+ @course = course.split('-|-').map { |c| c.strip }
+ end
+
+ def id
+ @course[0]
+ end
+
+ def name
+ @course[1]
+ end
+
+ def instructor
+ @course[2]
+ end
+
+ end
+end
diff --git a/app/models/solr_document.rb b/app/models/solr_document.rb
index efa608f2d..cd302d7f0 100644
--- a/app/models/solr_document.rb
+++ b/app/models/solr_document.rb
@@ -1,9 +1,11 @@
# -*- encoding : utf-8 -*-
-class SolrDocument
+class SolrDocument
include MarcLinks
+ include CourseReserves
include AccessPanelsConcern
+
include Blacklight::Solr::Document
# The following shows how to setup this blacklight document to display marc documents
extension_parameters[:marc_source_field] = :marcxml
@@ -11,8 +13,8 @@ class SolrDocument
use_extension( Blacklight::Solr::Document::Marc) do |document|
document.key?( :marcxml )
end
-
- field_semantics.merge!(
+
+ field_semantics.merge!(
:title => "title_display",
:author => "author_display",
:language => "language_facet",
@@ -22,10 +24,10 @@ class SolrDocument
# self.unique_key = 'id'
-
+
# Email uses the semantic field mappings below to generate the body of an email.
SolrDocument.use_extension( Blacklight::Solr::Document::Email )
-
+
# SMS uses the semantic field mappings below to generate the body of an SMS email.
SolrDocument.use_extension( Blacklight::Solr::Document::Sms )
diff --git a/app/views/catalog/access_panels/_course_reserve.html.erb b/app/views/catalog/access_panels/_course_reserve.html.erb
new file mode 100644
index 000000000..0351b4230
--- /dev/null
+++ b/app/views/catalog/access_panels/_course_reserve.html.erb
@@ -0,0 +1,21 @@
+<% document ||= @document %>
+
+<% if document.access_panels.course_reserve.present? %>
+
+
Course reserve
+
+
+ <% document.access_panels.course_reserve.courses.each do |course| %>
+ -
+
+ <%= t('blacklight.access_panels.course_reserve.course', link: link_to_course_reserve_course(course)).html_safe %>
+
+
+ <%= t('blacklight.access_panels.course_reserve.instructor', instructor: course.instructor).html_safe %>
+
+
+ <% end %>
+
+
+
+<% end %>
diff --git a/app/views/catalog/record/_record_metadata_panels.html.erb b/app/views/catalog/record/_record_metadata_panels.html.erb
index 7ce8a6bd9..9bd14f1d2 100644
--- a/app/views/catalog/record/_record_metadata_panels.html.erb
+++ b/app/views/catalog/record/_record_metadata_panels.html.erb
@@ -1,5 +1,6 @@
<%= render "catalog/access_panels/online" %>
+ <%= render "catalog/access_panels/course_reserve" %>
<%# dummy panels (to be replaced) --
Course reserves
@@ -10,4 +11,4 @@
%>
-
\ No newline at end of file
+
diff --git a/config/locales/searchworks.en.yml b/config/locales/searchworks.en.yml
index 44d55dbc8..e8026b395 100644
--- a/config/locales/searchworks.en.yml
+++ b/config/locales/searchworks.en.yml
@@ -22,3 +22,7 @@ en:
back_to_search: ' Back to results'
back_to_search_xs: ''
+ access_panels:
+ course_reserve:
+ course: 'COURSE: %{link}'
+ instructor: 'INSTRUCTOR(S): %{instructor}'
diff --git a/lib/access_panels/course_reserve.rb b/lib/access_panels/course_reserve.rb
new file mode 100644
index 000000000..9e892b01c
--- /dev/null
+++ b/lib/access_panels/course_reserve.rb
@@ -0,0 +1,8 @@
+class CourseReserve < AccessPanel
+ delegate :present?, to: :courses
+ def courses
+ if @document.course_reserves.present?
+ @document.course_reserves.courses
+ end
+ end
+end
diff --git a/spec/features/access_panels/course_reserve_spec.rb b/spec/features/access_panels/course_reserve_spec.rb
new file mode 100644
index 000000000..c84b296e8
--- /dev/null
+++ b/spec/features/access_panels/course_reserve_spec.rb
@@ -0,0 +1,31 @@
+require 'spec_helper'
+
+feature "Course Reserve Access Panel" do
+
+ scenario "should have 3 course reservations" do
+ visit '/catalog/1'
+ within "div.panel-course-reserve" do
+ expect(page).to have_css('div.course-reserve-course', count: 3, text: "COURSE:")
+ expect(page).to have_css('span.course-reserve-title', text: "COURSE:")
+ expect(page).to have_css('a', text: "ACCT-212-01-02 -- Managerial Accounting: Base")
+ expect(page).to have_css('div.course-reserve-instructor', text: "INSTRUCTOR(S):")
+ end
+ end
+
+ scenario "should have 1 course reservations" do
+ visit '/catalog/2'
+ within "div.panel-course-reserve" do
+ expect(page).to have_css('div.course-reserve-course', count: 1, text: "CAT-401-01-01 -- Emergency Kittenz")
+ expect(page).to have_css('span.course-reserve-title', text: "COURSE:")
+ expect(page).to have_css('a', text: "CAT-401-01-01 -- Emergency Kittenz")
+ expect(page).to have_css('div.course-reserve-instructor', text: "INSTRUCTOR(S): McDonald, Ronald")
+ end
+ end
+
+ scenario "should have 0 course reservations" do
+ visit '/catalog/3'
+ expect(page.has_no_css?('div.panel-course-reserve')).to eql true
+
+ end
+
+end
diff --git a/spec/fixtures/solr_documents/1.yml b/spec/fixtures/solr_documents/1.yml
index 991929616..69b4fe737 100644
--- a/spec/fixtures/solr_documents/1.yml
+++ b/spec/fixtures/solr_documents/1.yml
@@ -7,3 +7,7 @@
:pub_date: 2014
:access_facet: Online
:building_facet: Green
+:crez_course_info:
+ - "ACCT-212-01-02 -|- Managerial Accounting: Base -|- Rajan, Madhav V."
+ - "ACCT-212-01-02 -|- Managerial Accounting: Base -|- Reichelstein, Stefan J"
+ - "ACCT-215-01-02 -|- Managerial Accounting: Accelerated -|- Marinovic Vial, Ivan"
diff --git a/spec/fixtures/solr_documents/2.yml b/spec/fixtures/solr_documents/2.yml
index 46ce2398b..0236f43b4 100644
--- a/spec/fixtures/solr_documents/2.yml
+++ b/spec/fixtures/solr_documents/2.yml
@@ -7,3 +7,5 @@
:pub_date: 2013
:access_facet: Online
:building_facet: SAL3 (off-campus storage)
+:crez_course_info:
+ - "CAT-401-01-01 -|- Emergency Kittenz -|- McDonald, Ronald"
diff --git a/spec/integration/external-data/access_panels_spec.rb b/spec/integration/external-data/access_panels_spec.rb
index 958df12b7..0cc38c123 100644
--- a/spec/integration/external-data/access_panels_spec.rb
+++ b/spec/integration/external-data/access_panels_spec.rb
@@ -16,4 +16,18 @@
end
end
end
+
+ describe "Course Reserve" do
+ it "should not be displayed for non course reserve objects" do
+ visit catalog_path('10473427')
+ expect(page).not_to have_css(".panel-course-reserve")
+ end
+ it "should be displayed for course reserve objects" do
+ visit catalog_path('10020587')
+
+ within(".panel-course-reserve") do
+ expect(page).to have_css("li a", text: "ACCT-212-01-02 -- Managerial Accounting: Base")
+ end
+ end
+ end
end
diff --git a/spec/lib/access_panels/course_reserve_spec.rb b/spec/lib/access_panels/course_reserve_spec.rb
new file mode 100644
index 000000000..00e6f70e2
--- /dev/null
+++ b/spec/lib/access_panels/course_reserve_spec.rb
@@ -0,0 +1,18 @@
+require 'spec_helper'
+require 'course_reserve'
+
+describe CourseReserve do
+
+ describe "present?" do
+
+ it "should have a course reserve present" do
+ doc = SolrDocument.new(id: '123', crez_course_info: ["CAT-401-01-01 -|- Emergency Kittenz -|- McDonald, Ronald"])
+ expect(CourseReserve.new(doc).present?).to eq true
+ end
+
+ it "should not have a course reserve present" do
+ doc = SolrDocument.new(id: '123')
+ expect(CourseReserve.new(doc).present?).to eq false
+ end
+ end
+end
diff --git a/spec/models/concerns/course_reserves_spec.rb b/spec/models/concerns/course_reserves_spec.rb
new file mode 100644
index 000000000..e7b7f7d0b
--- /dev/null
+++ b/spec/models/concerns/course_reserves_spec.rb
@@ -0,0 +1,42 @@
+require 'spec_helper'
+
+class CourseReservesTestClass
+ include CourseReserves
+end
+
+describe CourseReserves do
+ it "should return nil for non course reserve docs" do
+ expect(CourseReservesTestClass.new.course_reserves).to be_nil
+ end
+
+ describe "present?" do
+ it "should return false" do
+ expect(CourseReservesTestClass.new.course_reserves.present?).to be_false
+ end
+
+ it "should return true" do
+ doc = SolrDocument.new(id: '123', crez_course_info: ["CAT-401-01-01 -|- Emergency Kittenz -|- McDonald, Ronald"])
+ expect(doc.course_reserves.present?).to be_true
+ end
+ end
+
+ describe CourseReserves::CourseInfo do
+ let(:doc) {"CAT-401-01-01 -|- Emergency Kittenz -|- McDonald, Ronald"}
+ let(:course_info) { CourseReserves::CourseInfo.new(doc) }
+ it "should initialize a new reservation" do
+ expect(course_info).to be_an CourseReserves::CourseInfo
+ end
+
+ it "should have the correct id" do
+ expect(course_info.id).to eq "CAT-401-01-01"
+ end
+
+ it "should have the correct name" do
+ expect(course_info.name).to eq "Emergency Kittenz"
+ end
+
+ it "should have the correct instructor" do
+ expect(course_info.instructor).to eq "McDonald, Ronald"
+ end
+ end
+end