From 36fbc24faaea182f5212156abadad3f75edc1bc3 Mon Sep 17 00:00:00 2001 From: Anusha Ranganathan <anusha@cottagelabs.com> Date: Wed, 27 Apr 2022 01:35:32 +0100 Subject: [PATCH] Vanilla hyrax3 app with dataset work type --- .gitignore | 345 +++ LICENSE | 206 ++ README.md | 181 +- docker-compose.override.yml | 60 + docker-compose.yml | 189 ++ hyrax/.fcrepo_wrapper.yml | 4 + hyrax/.gitignore | 31 + hyrax/.rspec | 1 + hyrax/.ruby-version | 1 + hyrax/.solr_wrapper.yml | 8 + hyrax/Dockerfile | 94 + hyrax/Gemfile | 87 + hyrax/Gemfile.lock | 980 ++++++ hyrax/Rakefile | 8 + .../app/actors/hyrax/actors/dataset_actor.rb | 8 + hyrax/app/assets/config/manifest.js | 5 + hyrax/app/assets/images/.keep | 0 hyrax/app/assets/images/unauthorized.png | Bin 0 -> 1958 bytes hyrax/app/assets/images/us_404.svg | 91 + hyrax/app/assets/javascripts/application.js | 26 + .../assets/javascripts/blacklight_gallery.js | 1 + hyrax/app/assets/javascripts/cable.js | 13 + hyrax/app/assets/javascripts/channels/.keep | 0 hyrax/app/assets/javascripts/openseadragon.js | 2 + hyrax/app/assets/stylesheets/application.css | 16 + hyrax/app/assets/stylesheets/hyrax.scss | 17 + .../app/assets/stylesheets/openseadragon.css | 3 + .../app/channels/application_cable/channel.rb | 4 + .../channels/application_cable/connection.rb | 4 + .../app/controllers/application_controller.rb | 14 + hyrax/app/controllers/catalog_controller.rb | 306 ++ hyrax/app/controllers/concerns/.keep | 0 .../controllers/hyrax/datasets_controller.rb | 14 + hyrax/app/forms/hyrax/dataset_form.rb | 9 + hyrax/app/helpers/application_helper.rb | 2 + hyrax/app/helpers/hyrax_helper.rb | 6 + hyrax/app/indexers/dataset_indexer.rb | 18 + hyrax/app/jobs/application_job.rb | 2 + hyrax/app/mailers/application_mailer.rb | 4 + hyrax/app/models/ability.rb | 33 + hyrax/app/models/application_record.rb | 3 + hyrax/app/models/collection.rb | 8 + hyrax/app/models/concerns/.keep | 0 hyrax/app/models/dataset.rb | 14 + hyrax/app/models/file_set.rb | 5 + hyrax/app/models/qa.rb | 5 + hyrax/app/models/qa/local_authority.rb | 2 + hyrax/app/models/qa/local_authority_entry.rb | 3 + hyrax/app/models/search_builder.rb | 16 + hyrax/app/models/solr_document.rb | 28 + hyrax/app/models/user.rb | 30 + .../app/presenters/hyrax/dataset_presenter.rb | 6 + .../views/hyrax/datasets/_dataset.html.erb | 2 + hyrax/app/views/layouts/application.html.erb | 15 + hyrax/app/views/layouts/mailer.html.erb | 13 + hyrax/app/views/layouts/mailer.text.erb | 1 + hyrax/bin/bundle | 3 + hyrax/bin/rails | 9 + hyrax/bin/rake | 9 + hyrax/bin/setup | 36 + hyrax/bin/spring | 17 + hyrax/bin/update | 31 + hyrax/bin/yarn | 11 + hyrax/config.ru | 5 + hyrax/config/analytics.yml | 15 + hyrax/config/application.rb | 19 + hyrax/config/authorities/licenses.yml | 46 + hyrax/config/authorities/resource_types.yml | 41 + .../config/authorities/rights_statements.yml | 37 + hyrax/config/blacklight.yml | 9 + hyrax/config/boot.rb | 4 + hyrax/config/browse_everything_providers.yml | 24 + hyrax/config/cable.yml | 12 + hyrax/config/credentials.yml.enc | 1 + hyrax/config/database.yml | 23 + hyrax/config/environment.rb | 5 + hyrax/config/environments/development.rb | 72 + hyrax/config/environments/production.rb | 115 + hyrax/config/environments/test.rb | 56 + hyrax/config/fcrepo_wrapper_test.yml | 4 + hyrax/config/fedora.yml | 15 + .../application_controller_renderer.rb | 8 + hyrax/config/initializers/assets.rb | 14 + .../initializers/backtrace_silencers.rb | 7 + hyrax/config/initializers/clamav.rb | 2 + .../initializers/content_security_policy.rb | 25 + .../config/initializers/cookies_serializer.rb | 5 + hyrax/config/initializers/devise.rb | 311 ++ .../initializers/filter_parameter_logging.rb | 4 + hyrax/config/initializers/hydra_config.rb | 24 + hyrax/config/initializers/hyrax.rb | 315 ++ hyrax/config/initializers/inflections.rb | 16 + hyrax/config/initializers/mailboxer.rb | 22 + hyrax/config/initializers/mime_types.rb | 8 + hyrax/config/initializers/mini_magick.rb | 6 + hyrax/config/initializers/redis_config.rb | 4 + hyrax/config/initializers/riiif.rb | 29 + hyrax/config/initializers/simple_form.rb | 171 ++ .../initializers/simple_form_bootstrap.rb | 151 + hyrax/config/initializers/wrap_parameters.rb | 14 + hyrax/config/locales/blacklight.en.yml | 3 + hyrax/config/locales/dataset.de.yml | 8 + hyrax/config/locales/dataset.en.yml | 8 + hyrax/config/locales/dataset.es.yml | 10 + hyrax/config/locales/dataset.fr.yml | 8 + hyrax/config/locales/dataset.it.yml | 8 + hyrax/config/locales/dataset.pt-BR.yml | 8 + hyrax/config/locales/dataset.zh.yml | 10 + hyrax/config/locales/devise.en.yml | 65 + hyrax/config/locales/en.yml | 33 + hyrax/config/locales/hyrax.de.yml | 58 + hyrax/config/locales/hyrax.en.yml | 58 + hyrax/config/locales/hyrax.es.yml | 58 + hyrax/config/locales/hyrax.fr.yml | 58 + hyrax/config/locales/hyrax.it.yml | 58 + hyrax/config/locales/hyrax.pt-BR.yml | 58 + hyrax/config/locales/hyrax.zh.yml | 58 + hyrax/config/puma.rb | 37 + hyrax/config/redis.yml | 9 + hyrax/config/role_map.yml | 23 + hyrax/config/routes.rb | 34 + hyrax/config/solr.yml | 7 + hyrax/config/solr_wrapper_test.yml | 8 + hyrax/config/solr_wrapper_valkyrie_test.yml | 7 + hyrax/config/spring.rb | 6 + hyrax/config/storage.yml | 34 + hyrax/config/tinymce.yml | 13 + hyrax/config/uv/uv-config.json | 3 + hyrax/config/uv/uv.html | 87 + hyrax/config/valkyrie_index.yml | 12 + hyrax/config/workflows/default_workflow.json | 21 + .../workflows/mediated_deposit_workflow.json | 76 + ...220217192729_create_searches.blacklight.rb | 17 + ...20217192730_create_bookmarks.blacklight.rb | 19 + ...olymorphic_type_to_bookmarks.blacklight.rb | 9 + .../20220217192748_devise_create_users.rb | 44 + ...220217192751_add_devise_guests_to_users.rb | 15 + ...7192823_create_version_committers.hyrax.rb | 15 + ...192824_create_checksum_audit_logs.hyrax.rb | 19 + ...217192825_create_single_use_links.hyrax.rb | 12 + ...0220217192826_add_social_to_users.hyrax.rb | 13 + ...0217192827_add_ldap_attrs_to_user.hyrax.rb | 27 + ...220217192828_add_avatars_to_users.hyrax.rb | 15 + .../20220217192829_create_trophies.hyrax.rb | 10 + ...20217192830_add_linkedin_to_users.hyrax.rb | 5 + ...20217192831_create_tinymce_assets.hyrax.rb | 8 + ...20217192832_create_content_blocks.hyrax.rb | 10 + ...20217192833_create_featured_works.hyrax.rb | 12 + ...dd_external_key_to_content_blocks.hyrax.rb | 6 + ...92835_create_proxy_deposit_rights.hyrax.rb | 10 + ...836_create_proxy_deposit_requests.hyrax.rb | 15 + ...0217192837_create_file_view_stats.hyrax.rb | 12 + ...192838_create_file_download_stats.hyrax.rb | 12 + ...20220217192839_add_orcid_to_users.hyrax.rb | 5 + .../20220217192840_create_user_stats.hyrax.rb | 19 + ...0217192841_create_work_view_stats.hyrax.rb | 12 + ...217192842_add_works_to_user_stats.hyrax.rb | 13 + ...trophy_generic_file_id_to_work_id.hyrax.rb | 5 + ...eposit_generic_file_id_to_work_id.hyrax.rb | 5 + ...og_generic_file_id_to_file_set_id.hyrax.rb | 5 + ...equest_generic_file_id_to_work_id.hyrax.rb | 5 + ...20217192847_create_uploaded_files.hyrax.rb | 10 + .../20220217192848_create_features.hyrax.rb | 10 + .../20220217192849_create_operations.hyrax.rb | 23 + ...d_work_generic_file_id_to_work_id.hyrax.rb | 6 + ...0220217192851_add_arkivo_to_users.hyrax.rb | 8 + .../20220217192852_create_sipity.hyrax.rb | 163 + ...53_create_sipity_workflow_methods.hyrax.rb | 10 + ...192854_create_permission_template.hyrax.rb | 11 + ...create_permission_template_access.hyrax.rb | 11 + ...d_release_to_permission_templates.hyrax.rb | 6 + ...ssion_template_to_sipity_workflow.hyrax.rb | 26 + ..._tidy_up_because_of_bad_exception.hyrax.rb | 13 + ...d_allows_access_grant_to_workflow.hyrax.rb | 5 + ...7192860_change_checksum_audit_log.hyrax.rb | 18 + ...0217192861_create_job_io_wrappers.hyrax.rb | 15 + ...217192862_create_collection_types.hyrax.rb | 17 + ...date_collection_type_column_names.hyrax.rb | 9 + ...te_collection_type_column_options.hyrax.rb | 17 + ..._create_collection_branding_infos.hyrax.rb | 15 + ...eate_collection_type_participants.hyrax.rb | 11 + ..._rename_admin_set_id_to_source_id.hyrax.rb | 5 + ...868_add_preferred_locale_to_users.hyrax.rb | 5 + ...d_collection_type_sharing_options.hyrax.rb | 5 + ...t_to_permission_template_accesses.hyrax.rb | 8 + ...1_add_branding_to_collection_type.hyrax.rb | 5 + ...d_badge_color_to_collection_types.hyrax.rb | 5 + ...ate_single_use_links_column_names.hyrax.rb | 6 + ...ty_entity_specific_responsibility.hyrax.rb | 9 + ...create_default_administrative_set.hyrax.rb | 8 + ...92876_create_mailboxer.mailboxer_engine.rb | 65 + ...dd_conversation_optout.mailboxer_engine.rb | 15 + ...78_add_missing_indices.mailboxer_engine.rb | 20 + ..._to_mailboxer_receipts.mailboxer_engine.rb | 8 + ...20217192880_create_qa_local_authorities.rb | 10 + ...92881_create_qa_local_authority_entries.rb | 12 + ..._create_minter_states.noid_rails_engine.rb | 17 + ..._state_random_to_rand.noid_rails_engine.rb | 8 + hyrax/db/migrate/20220218044917_user_roles.rb | 20 + hyrax/db/schema.rb | 582 ++++ hyrax/db/seeds.rb | 7 + hyrax/docker-entrypoint.sh | 67 + hyrax/lib/assets/.keep | 0 hyrax/lib/tasks/.keep | 0 hyrax/lib/tasks/db_exists.rake | 13 + hyrax/lib/tasks/setup_hyrax.rake | 48 + hyrax/lib/tasks/test_servers.rake | 60 + hyrax/log/.keep | 0 hyrax/package.json | 17 + hyrax/public/404.html | 67 + hyrax/public/422.html | 67 + hyrax/public/500.html | 66 + hyrax/public/apple-touch-icon-precomposed.png | 0 hyrax/public/apple-touch-icon.png | 0 hyrax/public/favicon.ico | 0 hyrax/public/robots.txt | 1 + hyrax/seed/.keep | 0 hyrax/seed/setup.json | 22 + hyrax/solr/conf/_rest_managed.json | 3 + hyrax/solr/conf/admin-extra.html | 31 + hyrax/solr/conf/elevate.xml | 36 + hyrax/solr/conf/mapping-ISOLatin1Accent.txt | 246 ++ hyrax/solr/conf/protwords.txt | 21 + hyrax/solr/conf/schema.xml | 367 +++ hyrax/solr/conf/scripts.conf | 24 + hyrax/solr/conf/solrconfig.xml | 325 ++ hyrax/solr/conf/spellings.txt | 2 + hyrax/solr/conf/stopwords.txt | 58 + hyrax/solr/conf/stopwords_en.txt | 58 + hyrax/solr/conf/synonyms.txt | 31 + hyrax/solr/conf/xslt/example.xsl | 132 + hyrax/solr/conf/xslt/example_atom.xsl | 67 + hyrax/solr/conf/xslt/example_rss.xsl | 66 + hyrax/solr/conf/xslt/luke.xsl | 337 +++ hyrax/solr/sample_solr_documents.yml | 2692 +++++++++++++++++ .../actors/hyrax/actors/dataset_actor_spec.rb | 9 + .../hyrax/datasets_controller_spec.rb | 9 + hyrax/spec/features/create_dataset_spec.rb | 70 + hyrax/spec/forms/hyrax/dataset_form_spec.rb | 9 + hyrax/spec/models/collection_spec.rb | 8 + hyrax/spec/models/dataset_spec.rb | 9 + hyrax/spec/models/file_set_spec.rb | 8 + .../models/qa/local_authority_entry_spec.rb | 5 + hyrax/spec/models/qa/local_authority_spec.rb | 5 + .../hyrax/dataset_presenter_spec.rb | 9 + hyrax/spec/rails_helper.rb | 64 + hyrax/spec/spec_helper.rb | 94 + hyrax/storage/.keep | 0 hyrax/test/application_system_test_case.rb | 5 + hyrax/test/controllers/.keep | 0 hyrax/test/fixtures/.keep | 0 hyrax/test/fixtures/files/.keep | 0 hyrax/test/fixtures/users.yml | 11 + hyrax/test/helpers/.keep | 0 hyrax/test/integration/.keep | 0 hyrax/test/mailers/.keep | 0 hyrax/test/models/.keep | 0 hyrax/test/models/user_test.rb | 7 + hyrax/test/system/.keep | 0 hyrax/test/test_helper.rb | 10 + hyrax/tmp/.keep | 0 hyrax/vendor/.keep | 0 matomo.conf | 69 + matomo_config.ini.php | 79 + 264 files changed, 12644 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 docker-compose.override.yml create mode 100644 docker-compose.yml create mode 100644 hyrax/.fcrepo_wrapper.yml create mode 100644 hyrax/.gitignore create mode 100644 hyrax/.rspec create mode 100644 hyrax/.ruby-version create mode 100644 hyrax/.solr_wrapper.yml create mode 100644 hyrax/Dockerfile create mode 100644 hyrax/Gemfile create mode 100644 hyrax/Gemfile.lock create mode 100644 hyrax/Rakefile create mode 100644 hyrax/app/actors/hyrax/actors/dataset_actor.rb create mode 100644 hyrax/app/assets/config/manifest.js create mode 100644 hyrax/app/assets/images/.keep create mode 100644 hyrax/app/assets/images/unauthorized.png create mode 100644 hyrax/app/assets/images/us_404.svg create mode 100644 hyrax/app/assets/javascripts/application.js create mode 100644 hyrax/app/assets/javascripts/blacklight_gallery.js create mode 100644 hyrax/app/assets/javascripts/cable.js create mode 100644 hyrax/app/assets/javascripts/channels/.keep create mode 100644 hyrax/app/assets/javascripts/openseadragon.js create mode 100644 hyrax/app/assets/stylesheets/application.css create mode 100644 hyrax/app/assets/stylesheets/hyrax.scss create mode 100644 hyrax/app/assets/stylesheets/openseadragon.css create mode 100644 hyrax/app/channels/application_cable/channel.rb create mode 100644 hyrax/app/channels/application_cable/connection.rb create mode 100644 hyrax/app/controllers/application_controller.rb create mode 100644 hyrax/app/controllers/catalog_controller.rb create mode 100644 hyrax/app/controllers/concerns/.keep create mode 100644 hyrax/app/controllers/hyrax/datasets_controller.rb create mode 100644 hyrax/app/forms/hyrax/dataset_form.rb create mode 100644 hyrax/app/helpers/application_helper.rb create mode 100644 hyrax/app/helpers/hyrax_helper.rb create mode 100644 hyrax/app/indexers/dataset_indexer.rb create mode 100644 hyrax/app/jobs/application_job.rb create mode 100644 hyrax/app/mailers/application_mailer.rb create mode 100644 hyrax/app/models/ability.rb create mode 100644 hyrax/app/models/application_record.rb create mode 100644 hyrax/app/models/collection.rb create mode 100644 hyrax/app/models/concerns/.keep create mode 100644 hyrax/app/models/dataset.rb create mode 100644 hyrax/app/models/file_set.rb create mode 100644 hyrax/app/models/qa.rb create mode 100644 hyrax/app/models/qa/local_authority.rb create mode 100644 hyrax/app/models/qa/local_authority_entry.rb create mode 100644 hyrax/app/models/search_builder.rb create mode 100644 hyrax/app/models/solr_document.rb create mode 100644 hyrax/app/models/user.rb create mode 100644 hyrax/app/presenters/hyrax/dataset_presenter.rb create mode 100644 hyrax/app/views/hyrax/datasets/_dataset.html.erb create mode 100644 hyrax/app/views/layouts/application.html.erb create mode 100644 hyrax/app/views/layouts/mailer.html.erb create mode 100644 hyrax/app/views/layouts/mailer.text.erb create mode 100755 hyrax/bin/bundle create mode 100755 hyrax/bin/rails create mode 100755 hyrax/bin/rake create mode 100755 hyrax/bin/setup create mode 100755 hyrax/bin/spring create mode 100755 hyrax/bin/update create mode 100755 hyrax/bin/yarn create mode 100644 hyrax/config.ru create mode 100644 hyrax/config/analytics.yml create mode 100644 hyrax/config/application.rb create mode 100644 hyrax/config/authorities/licenses.yml create mode 100644 hyrax/config/authorities/resource_types.yml create mode 100644 hyrax/config/authorities/rights_statements.yml create mode 100644 hyrax/config/blacklight.yml create mode 100644 hyrax/config/boot.rb create mode 100644 hyrax/config/browse_everything_providers.yml create mode 100644 hyrax/config/cable.yml create mode 100644 hyrax/config/credentials.yml.enc create mode 100644 hyrax/config/database.yml create mode 100644 hyrax/config/environment.rb create mode 100644 hyrax/config/environments/development.rb create mode 100644 hyrax/config/environments/production.rb create mode 100644 hyrax/config/environments/test.rb create mode 100644 hyrax/config/fcrepo_wrapper_test.yml create mode 100644 hyrax/config/fedora.yml create mode 100644 hyrax/config/initializers/application_controller_renderer.rb create mode 100644 hyrax/config/initializers/assets.rb create mode 100644 hyrax/config/initializers/backtrace_silencers.rb create mode 100644 hyrax/config/initializers/clamav.rb create mode 100644 hyrax/config/initializers/content_security_policy.rb create mode 100644 hyrax/config/initializers/cookies_serializer.rb create mode 100644 hyrax/config/initializers/devise.rb create mode 100644 hyrax/config/initializers/filter_parameter_logging.rb create mode 100644 hyrax/config/initializers/hydra_config.rb create mode 100644 hyrax/config/initializers/hyrax.rb create mode 100644 hyrax/config/initializers/inflections.rb create mode 100644 hyrax/config/initializers/mailboxer.rb create mode 100644 hyrax/config/initializers/mime_types.rb create mode 100644 hyrax/config/initializers/mini_magick.rb create mode 100644 hyrax/config/initializers/redis_config.rb create mode 100644 hyrax/config/initializers/riiif.rb create mode 100644 hyrax/config/initializers/simple_form.rb create mode 100644 hyrax/config/initializers/simple_form_bootstrap.rb create mode 100644 hyrax/config/initializers/wrap_parameters.rb create mode 100644 hyrax/config/locales/blacklight.en.yml create mode 100644 hyrax/config/locales/dataset.de.yml create mode 100644 hyrax/config/locales/dataset.en.yml create mode 100644 hyrax/config/locales/dataset.es.yml create mode 100644 hyrax/config/locales/dataset.fr.yml create mode 100644 hyrax/config/locales/dataset.it.yml create mode 100644 hyrax/config/locales/dataset.pt-BR.yml create mode 100644 hyrax/config/locales/dataset.zh.yml create mode 100644 hyrax/config/locales/devise.en.yml create mode 100644 hyrax/config/locales/en.yml create mode 100644 hyrax/config/locales/hyrax.de.yml create mode 100644 hyrax/config/locales/hyrax.en.yml create mode 100644 hyrax/config/locales/hyrax.es.yml create mode 100644 hyrax/config/locales/hyrax.fr.yml create mode 100644 hyrax/config/locales/hyrax.it.yml create mode 100644 hyrax/config/locales/hyrax.pt-BR.yml create mode 100644 hyrax/config/locales/hyrax.zh.yml create mode 100644 hyrax/config/puma.rb create mode 100644 hyrax/config/redis.yml create mode 100644 hyrax/config/role_map.yml create mode 100644 hyrax/config/routes.rb create mode 100644 hyrax/config/solr.yml create mode 100644 hyrax/config/solr_wrapper_test.yml create mode 100644 hyrax/config/solr_wrapper_valkyrie_test.yml create mode 100644 hyrax/config/spring.rb create mode 100644 hyrax/config/storage.yml create mode 100644 hyrax/config/tinymce.yml create mode 100644 hyrax/config/uv/uv-config.json create mode 100644 hyrax/config/uv/uv.html create mode 100644 hyrax/config/valkyrie_index.yml create mode 100644 hyrax/config/workflows/default_workflow.json create mode 100644 hyrax/config/workflows/mediated_deposit_workflow.json create mode 100644 hyrax/db/migrate/20220217192729_create_searches.blacklight.rb create mode 100644 hyrax/db/migrate/20220217192730_create_bookmarks.blacklight.rb create mode 100644 hyrax/db/migrate/20220217192731_add_polymorphic_type_to_bookmarks.blacklight.rb create mode 100644 hyrax/db/migrate/20220217192748_devise_create_users.rb create mode 100644 hyrax/db/migrate/20220217192751_add_devise_guests_to_users.rb create mode 100644 hyrax/db/migrate/20220217192823_create_version_committers.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192824_create_checksum_audit_logs.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192825_create_single_use_links.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192826_add_social_to_users.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192827_add_ldap_attrs_to_user.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192828_add_avatars_to_users.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192829_create_trophies.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192830_add_linkedin_to_users.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192831_create_tinymce_assets.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192832_create_content_blocks.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192833_create_featured_works.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192834_add_external_key_to_content_blocks.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192835_create_proxy_deposit_rights.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192836_create_proxy_deposit_requests.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192837_create_file_view_stats.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192838_create_file_download_stats.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192839_add_orcid_to_users.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192840_create_user_stats.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192841_create_work_view_stats.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192842_add_works_to_user_stats.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192843_change_trophy_generic_file_id_to_work_id.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192844_change_proxy_deposit_generic_file_id_to_work_id.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192845_change_audit_log_generic_file_id_to_file_set_id.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192846_change_proxy_deposit_request_generic_file_id_to_work_id.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192847_create_uploaded_files.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192848_create_features.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192849_create_operations.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192850_change_featured_work_generic_file_id_to_work_id.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192851_add_arkivo_to_users.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192852_create_sipity.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192853_create_sipity_workflow_methods.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192854_create_permission_template.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192855_create_permission_template_access.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192856_add_release_to_permission_templates.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192857_add_permission_template_to_sipity_workflow.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192858_tidy_up_because_of_bad_exception.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192859_add_allows_access_grant_to_workflow.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192860_change_checksum_audit_log.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192861_create_job_io_wrappers.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192862_create_collection_types.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192863_update_collection_type_column_names.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192864_update_collection_type_column_options.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192865_create_collection_branding_infos.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192866_create_collection_type_participants.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192867_rename_admin_set_id_to_source_id.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192868_add_preferred_locale_to_users.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192869_add_collection_type_sharing_options.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192870_add_unique_constraint_to_permission_template_accesses.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192871_add_branding_to_collection_type.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192872_add_badge_color_to_collection_types.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192873_update_single_use_links_column_names.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192874_change_sipity_entity_specific_responsibility.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192875_create_default_administrative_set.hyrax.rb create mode 100644 hyrax/db/migrate/20220217192876_create_mailboxer.mailboxer_engine.rb create mode 100644 hyrax/db/migrate/20220217192877_add_conversation_optout.mailboxer_engine.rb create mode 100644 hyrax/db/migrate/20220217192878_add_missing_indices.mailboxer_engine.rb create mode 100644 hyrax/db/migrate/20220217192879_add_delivery_tracking_info_to_mailboxer_receipts.mailboxer_engine.rb create mode 100644 hyrax/db/migrate/20220217192880_create_qa_local_authorities.rb create mode 100644 hyrax/db/migrate/20220217192881_create_qa_local_authority_entries.rb create mode 100644 hyrax/db/migrate/20220217192905_create_minter_states.noid_rails_engine.rb create mode 100644 hyrax/db/migrate/20220217192906_rename_minter_state_random_to_rand.noid_rails_engine.rb create mode 100644 hyrax/db/migrate/20220218044917_user_roles.rb create mode 100644 hyrax/db/schema.rb create mode 100644 hyrax/db/seeds.rb create mode 100644 hyrax/docker-entrypoint.sh create mode 100644 hyrax/lib/assets/.keep create mode 100644 hyrax/lib/tasks/.keep create mode 100644 hyrax/lib/tasks/db_exists.rake create mode 100644 hyrax/lib/tasks/setup_hyrax.rake create mode 100644 hyrax/lib/tasks/test_servers.rake create mode 100644 hyrax/log/.keep create mode 100644 hyrax/package.json create mode 100644 hyrax/public/404.html create mode 100644 hyrax/public/422.html create mode 100644 hyrax/public/500.html create mode 100644 hyrax/public/apple-touch-icon-precomposed.png create mode 100644 hyrax/public/apple-touch-icon.png create mode 100644 hyrax/public/favicon.ico create mode 100644 hyrax/public/robots.txt create mode 100644 hyrax/seed/.keep create mode 100644 hyrax/seed/setup.json create mode 100644 hyrax/solr/conf/_rest_managed.json create mode 100644 hyrax/solr/conf/admin-extra.html create mode 100644 hyrax/solr/conf/elevate.xml create mode 100644 hyrax/solr/conf/mapping-ISOLatin1Accent.txt create mode 100644 hyrax/solr/conf/protwords.txt create mode 100644 hyrax/solr/conf/schema.xml create mode 100644 hyrax/solr/conf/scripts.conf create mode 100644 hyrax/solr/conf/solrconfig.xml create mode 100644 hyrax/solr/conf/spellings.txt create mode 100644 hyrax/solr/conf/stopwords.txt create mode 100644 hyrax/solr/conf/stopwords_en.txt create mode 100644 hyrax/solr/conf/synonyms.txt create mode 100644 hyrax/solr/conf/xslt/example.xsl create mode 100644 hyrax/solr/conf/xslt/example_atom.xsl create mode 100644 hyrax/solr/conf/xslt/example_rss.xsl create mode 100644 hyrax/solr/conf/xslt/luke.xsl create mode 100644 hyrax/solr/sample_solr_documents.yml create mode 100644 hyrax/spec/actors/hyrax/actors/dataset_actor_spec.rb create mode 100644 hyrax/spec/controllers/hyrax/datasets_controller_spec.rb create mode 100644 hyrax/spec/features/create_dataset_spec.rb create mode 100644 hyrax/spec/forms/hyrax/dataset_form_spec.rb create mode 100644 hyrax/spec/models/collection_spec.rb create mode 100644 hyrax/spec/models/dataset_spec.rb create mode 100644 hyrax/spec/models/file_set_spec.rb create mode 100644 hyrax/spec/models/qa/local_authority_entry_spec.rb create mode 100644 hyrax/spec/models/qa/local_authority_spec.rb create mode 100644 hyrax/spec/presenters/hyrax/dataset_presenter_spec.rb create mode 100644 hyrax/spec/rails_helper.rb create mode 100644 hyrax/spec/spec_helper.rb create mode 100644 hyrax/storage/.keep create mode 100644 hyrax/test/application_system_test_case.rb create mode 100644 hyrax/test/controllers/.keep create mode 100644 hyrax/test/fixtures/.keep create mode 100644 hyrax/test/fixtures/files/.keep create mode 100644 hyrax/test/fixtures/users.yml create mode 100644 hyrax/test/helpers/.keep create mode 100644 hyrax/test/integration/.keep create mode 100644 hyrax/test/mailers/.keep create mode 100644 hyrax/test/models/.keep create mode 100644 hyrax/test/models/user_test.rb create mode 100644 hyrax/test/system/.keep create mode 100644 hyrax/test/test_helper.rb create mode 100644 hyrax/tmp/.keep create mode 100644 hyrax/vendor/.keep create mode 100644 matomo.conf create mode 100644 matomo_config.ini.php diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..5947de29 --- /dev/null +++ b/.gitignore @@ -0,0 +1,345 @@ +### project specific +.idea/ + +# ignore files for puma but keep directory structure +hyrax/shared/log/* +!hyrax/shared/log/.keep +hyrax/shared/pids/* +!hyrax/shared/pids/.keep +hyrax/shared/sockets/* +!hyrax/shared/sockets/.keep + +# Files that appeared when I ran hyrax that weren't initally checked in +.generators +.rakeTasks + +# public assets generated files +hyrax/public/assets + +# Created by .ignore support plugin (hsz.mobi) +### Ansible template +*.retry +### Emacs template +# -*- mode: gitignore; -*- +*~ +\#*\# +/.emacs.desktop +/.emacs.desktop.lock +*.elc +auto-save-list +tramp +.\#* + +# Org-mode +.org-id-locations +*_archive + +# flymake-mode +*_flymake.* + +# eshell files +/eshell/history +/eshell/lastdir + +# elpa packages +/elpa/ + +# reftex files +*.rel + +# AUCTeX auto folder +/auto/ + +# cask packages +.cask/ +dist/ + +# Flycheck +flycheck_*.el + +# server auth directory +/server/ + +# projectiles files +.projectile + +# directory configuration +.dir-locals.el +### Rails template +*.rbc +capybara-*.html +#.rspec +/log +/tmp +/db/*.sqlite3 +/db/*.sqlite3-journal +/public/system +/coverage/ +/hyrax/coverage +/spec/tmp +*.orig +rerun.txt +pickle-email-*.html +hyrax/docs + +# TODO Comment out this rule if you are OK with secrets being uploaded to the repo +config/initializers/secret_token.rb +config/master.key + +# Only include if you have production secrets in this file, which is no longer a Rails default +# config/secrets.yml + +## Environment normalization: +/.bundle +/vendor/bundle + +# unless supporting rvm < 1.11.0 or doing something fancy, ignore this: +.rvmrc + +# if using bower-rails ignore default bower_components path bower.json files +/vendor/assets/bower_components +*.bowerrc +bower.json + +# Ignore pow environment settings +.powenv + +# Ignore Byebug command history file. +.byebug_history + +# Ignore node_modules +node_modules/ + +### Vim template +# Swap +[._]*.s[a-v][a-z] +[._]*.sw[a-p] +[._]s[a-v][a-z] +[._]sw[a-p] + +# Session +Session.vim + +# Temporary +.netrwhist +*~ +# Auto-generated tag files +tags +# Persistent undo +[._]*.un~ +### SublimeText template +# Cache files for Sublime Text +*.tmlanguage.cache +*.tmPreferences.cache +*.stTheme.cache + +# Workspace files are user-specific +*.sublime-workspace + +# Project files should be checked into the repository, unless a significant +# proportion of contributors will probably not be using Sublime Text +# *.sublime-project + +# SFTP configuration file +sftp-config.json + +# Package control specific files +Package Control.last-run +Package Control.ca-list +Package Control.ca-bundle +Package Control.system-ca-bundle +Package Control.cache/ +Package Control.ca-certs/ +Package Control.merged-ca-bundle +Package Control.user-ca-bundle +oscrypto-ca-bundle.crt +bh_unicode_properties.cache + +# Sublime-github package stores a github token in this file +# https://packagecontrol.io/packages/sublime-github +GitHub.sublime-settings +### JetBrains template +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/dictionaries +.idea/**/shelf + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# CMake +cmake-build-debug/ +cmake-build-release/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests +### Terraform template +# Local .terraform directories +**/.terraform/* + +# .tfstate files +*.tfstate +*.tfstate.* + +# Ignore any .tfvars files that are generated automatically for each Terraform run. Most +# .tfvars files are managed as part of configuration and so should be included in +# version control. +# +# example.tfvars +### Ruby template +*.gem +*.rbc +/.config +/coverage/ +/InstalledFiles +/pkg/ +/spec/reports/ +/spec/examples.txt +/test/tmp/ +/test/version_tmp/ +/tmp/ + +# Used by dotenv library to load environment variables. +# .env + +## Specific to RubyMotion: +.dat* +.repl_history +build/ +*.bridgesupport +build-iPhoneOS/ +build-iPhoneSimulator/ + +## Specific to RubyMotion (use of CocoaPods): +# +# We recommend against adding the Pods directory to your .gitignore. However +# you should judge for yourself, the pros and cons are mentioned at: +# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control +# +# vendor/Pods/ + +## Documentation cache and generated files: +/.yardoc/ +/_yardoc/ +/doc/ +/rdoc/ + +## Environment normalization: +/.bundle/ +/vendor/bundle +/lib/bundler/man/ + +# unless supporting rvm < 1.11.0 or doing something fancy, ignore this: +.rvmrc +### Linux template +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* +### macOS template +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk +### Windows template +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# Environment variables file +.env.production +.env +/hyrax/.fedora-test.pid +/hyrax/.solr-test.pid + +# Default HOST_APP_DATA_PATH in .env.template.development +/data/ diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..01e31ac2 --- /dev/null +++ b/LICENSE @@ -0,0 +1,206 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2012 Penn State University + Copyright 2013 University of Notre Dame, Northwestern University, and Data Curation Experts + Copyright 2014 Data Curation Experts + Copyright 2020 National Institute for Materials Science + Additional copyright may be held by others, as reflected in the commit log + + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md index a2c89568..78643a1c 100644 --- a/README.md +++ b/README.md @@ -1 +1,180 @@ -This is the codebase for the RUB RDMS system \ No newline at end of file +## Introduction + +[rdms](https://gitlab.ruhr-uni-bochum.de/FDM/rdm-system/rdms) is an application based on [Hyrax 3.3](https://github.com/samvera/hyrax/releases/tag/v3.3.0) stack by [Cottage Labs](https://cottagelabs.com/) and [AntLeaf](https://antleaf.com/). It is built with Docker containers. + +## Getting Started + +Clone the repository with `git clone https://gitlab.ruhr-uni-bochum.de/FDM/rdm-system/rdms.git`. + +Ensure you have docker and docker-compose. + +Open a console and try running `docker -h` and `docker-compose -h` to verify they are both accessible. + +Create the environment file `.env`. You can start by copying the template file [.env.template.development](https://gitlab.ruhr-uni-bochum.de/FDM/rdm-system/rdms/-/blob/master/.env.template.development) to `.env` and customizing the values to your setup. <br> +Note: For production environment, use .env.template as your template. + +## quick start +If you would like to do a test run of the system, start the docker containers +```bash +$ cd rdms +$ docker-compose up -d +``` +You should see the containers being built and the services start. + +## Docker compose explained + +There are 2 `docker-compose` files provided in the repository, which build the containers running the services as shown above +* [docker-compose.yml](https://gitlab.ruhr-uni-bochum.de/FDM/rdm-system/rdms/-/blob/master/docker-compose.yml) is the main docker-compose file. It builds all the core servcies required to run the application +* [docker-compose.override.yml](https://gitlab.ruhr-uni-bochum.de/FDM/rdm-system/rdms/-/blob/master/docker-compose.override.yml) is used along with the main [docker-compose.yml](https://gitlab.ruhr-uni-bochum.de/FDM/rdm-system/rdms/-/blob/master/docker-compose.yml) file in development, mainly to expose ports for the various services. + +### Containers running in docker + +* [fcrepo](https://gitlab.ruhr-uni-bochum.de/FDM/rdm-system/rdms/-/blob/master/docker-compose.yml#L13-L22) is the container running the [Fedora 4 commons repository](https://wiki.duraspace.org/display/FEDORA47/Fedora+4.7+Documentation), an rdf document store. + + By default, this runs the fedora service on port 8080 internally in docker (http://fcrepo:8080/fcrepo/rest).<br/><br/> + +* [Solr container](https://gitlab.ruhr-uni-bochum.de/FDM/rdm-system/rdms/-/blob/master/docker-compose.yml#L24-L45) runs [SOLR](lucene.apache.org/solr/), an enterprise search server. + + By default, this runs the SOLR service on port 8983 internally in docker (http://solr:8983).<br/><br/> + +* [db containers](https://gitlab.ruhr-uni-bochum.de/FDM/rdm-system/rdms/-/blob/master/docker-compose.yml#L47-L76) running a postgres database for use by the Hyrax application (appdb) and Fedora (fcrepodb). + + By default, this runs the database service on port 5432 internally in docker.<br/><br/> + +* [redis container](https://gitlab.ruhr-uni-bochum.de/FDM/rdm-system/rdms/-/blob/master/docker-compose.yml#L121-L132) running [redis](https://redis.io/), used by Hyrax to manage background tasks. + + By default, this runs the redis service on port 6379 internally in docker.<br/><br/> + +* [app container](https://gitlab.ruhr-uni-bochum.de/FDM/rdm-system/rdms/-/blob/master/docker-compose.yml#L78-L96) sets up the Hyrax application, which is then used by 2 services - web and workers.<br/><br/> + + * [Web container](https://gitlab.ruhr-uni-bochum.de/FDM/rdm-system/rdms/-/blob/master/docker-compose.yml#L98-L110) runs the application. + + By default, this runs on port 3000 internally in docker (http://web:3000). + + This container runs [docker-entrypoint.sh](https://gitlab.ruhr-uni-bochum.de/FDM/rdm-system/rdms/-/blob/master/hyrax/docker-entrypoint.sh), on startup. The bash script + + * creates the log folder + * checks the bundle (and installs It in development) + * does the database setup + * checksSolr and Fedora are running + * It runs a rake task [setup_hyrax.rake](https://gitlab.ruhr-uni-bochum.de/FDM/rdm-system/rdms/-/blob/master/hyrax/lib/tasks/setup_hyrax.rake) to setup the application. This rake task + * creates users listed in [setup.json]( https://gitlab.ruhr-uni-bochum.de/FDM/rdm-system/rdms/-/blob/master/hyrax/seed/setup.json) + + * Loads the default workflows + + * Creates the default admin set and collection types + * Starts the rails server + + + + + * [Wokers container](https://gitlab.ruhr-uni-bochum.de/FDM/rdm-system/rdms/-/blob/master/docker-compose.yml#L112-L119) runs the background tasks, using [sidekiq](https://github.com/mperham/sidekiq) and redis. + + By default, this runs the worker service. + + Hyrax processes long-running or particularly slow work in background jobs to speed up the web request/response cycle. When a user submits a file through a work (using the web or an import task), there a number of background jobs that are run, initilated by the hyrax actor stack, as explained [here](https://samvera.github.io/what-happens-deposit-2.0.html)<br/><br/>You can monitor the background workers using the materials data repository service at http://web:3000/sidekiq when logged in as an admin user. <br/><br/> + + +The data for the application is stored in docker named volumes as specified by the compose files. These are: + +```bash +$ docker volume list -f name=rdms +DRIVER VOLUME NAME +local rdms_app +local rdms_cache +local rdms_db +local rdms_db-fcrepo +local rdms_derivatives +local rdms_fcrepo +local rdms_file_uploads +local rdms_redis +local rdms_solr +``` + +These will persist when the system is brought down and rebuilt. Deleting them will require importers etc. to run again. + + +## Running in development or test + +When running in development and test environment, prepare your .env file using .env.template.development as the template. You need to use `docker-compose -f docker-compose.yml -f docker-compose.override.yml`. This will use the docker-compose.yml file and the docker-compose.override.yml file. + * fcrepo container will run the fedora service, which will be available in port 8080 at http://localhost:8080/fcrepo/rest + * Solr container will run the Solr service, which will be available in port 8983 at http://localhost:8983 + * The web container runs the materials data repository service, which will be available in port 3000 at http://localhost:3000 + +You could setup an alias for docker-compose on your local machine, to ease typing + +```bash +alias hd='docker-compose -f docker-compose.yml -f docker-compose.override.yml' +``` + +### Yarn and static assets + +Static asset build is only run in `production` environment to speed up container creation in develop. To see features such as the IIIF viewer, `yarn install` must be run on the web container once it's up. + +``` +hd run web yarn install +``` + +## Builidng, starting and managing the service with docker + +### Build the docker container + +To start with, you would need to build the system, before running the services. To do this you need to issue the `build` command +```bash +$ hd build +``` + +### Start and run the services in the containers + +To run the containers after build, issue the `up` command (-d means run as daemon, in the background): + +```bash +$ hd up -d +``` +The containers should all start and the services should be available in their end points as described above +* web server at http://localhost:3000 in development and https://domain-name in production + +### docker container status and logs + +You can see the state of the containers with `docker-compose ps`, and view logs e.g. for the web container using `docker-compose logs web` + +The services that you would need to monitor the logs for are docker mainly web and workers. + + +### Some example docker commands and usage: + +[Docker cheat sheet](https://github.com/wsargent/docker-cheat-sheet) + +```bash +# Bring the whole application up to run in the background, building the containers +hd up -d --build + +# Stop the container +hd stop + +# Halt the system +hd down + +# Re-create the web container without affecting the rest of the system (and run in the background with -d) +hd up -d --build --no-deps --force-recreate web + +# View the logs for the web application container +hd logs web + +# Create a log dump file +hd logs web | tee web_logs_`date --iso-8601` +# (writes to e.g. web_logs_2022-02-14) + +# View all running containers +hd ps + +# Using its container name, you can run a shell in a container to view or make changes directly +docker exec -it rdms-web-1 /bin/bash +``` + +## Backups + +There is [docker documentation](https://docs.docker.com/storage/volumes/#backup-restore-or-migrate-data-volumes) advising how to back up volumes and their data. + + + diff --git a/docker-compose.override.yml b/docker-compose.override.yml new file mode 100644 index 00000000..49655ca7 --- /dev/null +++ b/docker-compose.override.yml @@ -0,0 +1,60 @@ +# Overrides the docker-compose file for development environment +# - Use the example end.production file (because in dev it doesn't matter) +# - Publish the fcrepo and solr ports +# - No nginx in front of the app +# - app accessible on port 3000 + + +version: '3' + +volumes: + file_uploads: + derivatives: + cache: + fcrepo: + redis: + +services: + + fcrepo: + ports: + - 8080:8080 + volumes: + - fcrepo:/data + + solr: + environment: + - OOM=script + ports: + - 8983:8983 + + web: + ports: + - 3000:3000 + environment: + - RAILS_FORCE_SSL=false + volumes: + - file_uploads:${UPLOADS_PATH} + - derivatives:${DERIVATIVES_PATH} + - cache:${CACHE_PATH} + - ${HOST_APP_DATA_PATH:-/data/}:/data/data + - ./hyrax:/data:cached + networks: + internal: + aliases: + - web + + workers: + volumes: + - file_uploads:${UPLOADS_PATH} + - derivatives:${DERIVATIVES_PATH} + - cache:${CACHE_PATH} + - ${HOST_APP_DATA_PATH:-/data/}:/data/data + - ./hyrax:/data:cached + + redis: + ports: + - 6379:6379 + volumes: + - redis:/data + diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..fccdd3df --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,189 @@ +version: '3' + +volumes: + solr: + db: + db-fcrepo: + app: + mysql-db: + matomo: + matomo_logs: + +networks: + internal: + +services: + fcrepo: + image: ualbertalib/docker-fcrepo4:4.7 + expose: + - 8080 + depends_on: + - fcrepodb + networks: + internal: + environment: + - CATALINA_OPTS=-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms512m -Xmx1024m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+DisableExplicitGC -Dfcrepo.home=/data -Dfcrepo.object.directory=/data/objects -Dfcrepo.binary.directory=/data/binaries -Dfcrepo.postgresql.username=$POSTGRES_USER -Dfcrepo.postgresql.password=$POSTGRES_PASSWORD -Dfcrepo.postgresql.host=$POSTGRES_HOST_FCREPO -Dfcrepo.postgresql.port=$POSTGRES_PORT -Dfcrepo.modeshape.configuration=classpath:/config/jdbc-postgresql/repository.json + + solr: + image: solr:8 + expose: + - 8983 + ports: + - 8983:8983 + env_file: + - .env + healthcheck: + test: ["CMD-SHELL", "wget -O /dev/null http://localhost:8983/solr/"] + interval: 30s + timeout: 5s + retries: 3 + networks: + internal: + volumes: + - solr:/opt/solr/server/solr/mycores + - ./hyrax/solr/conf:/opt/solr/solr_conf + command: + - sh + - "-c" + - "precreate-core hydra-test /opt/solr/solr_conf; solr-precreate ${SOLR_CORE} /opt/solr/solr_conf" + + db: &db + image: postgres:13-alpine + networks: + internal: + env_file: + - .env + expose: + - 5432 + fcrepodb: + <<: *db + environment: + - POSTGRES_DB=${POSTGRES_DB_FCREPO} + volumes: + - db-fcrepo:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "POSTGRES_PASSWORD=${POSTGRES_PASSWORD} pg_isready -U ${POSTGRES_USER} -h localhost -d ${POSTGRES_DB_FCREPO}"] + interval: 30s + timeout: 5s + retries: 3 + appdb: + <<: *db + environment: + - POSTGRES_DB=${POSTGRES_DB_APP} + volumes: + - db:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "POSTGRES_PASSWORD=${POSTGRES_PASSWORD} pg_isready -U ${POSTGRES_USER} -h localhost -d ${POSTGRES_DB_APP}"] + interval: 30s + timeout: 5s + retries: 3 + + app: &app + build: + context: hyrax + args: + RAILS_ENV: ${RAILS_ENV} + UPLOADS_PATH: ${UPLOADS_PATH} + DERIVATIVES_PATH: ${DERIVATIVES_PATH} + CACHE_PATH: ${CACHE_PATH} + FITS_PATH: ${FITS_PATH} + FITS_VERSION: ${FITS_VERSION} + env_file: + - .env + volumes: + - app:${UPLOADS_PATH} + - app:${DERIVATIVES_PATH} + - app:${CACHE_PATH} + - app:${BRAND_PATH} + networks: + internal: + + web: + <<: *app + command: bash -c "/bin/docker-entrypoint.sh" + environment: + - VIRTUAL_HOST=rdms.docker + - VIRTUAL_PORT=3000 + depends_on: + - appdb + - solr + - fcrepo + - redis + expose: + - 3000 + + workers: + <<: *app + command: bundle exec sidekiq + depends_on: + - appdb + - solr + - fcrepo + - redis + + redis: + image: redis:6 + command: redis-server --appendonly yes + expose: + - 6379 + networks: + internal: + healthcheck: + test: ["CMD-SHELL", "redis-cli ping"] + interval: 30s + timeout: 5s + retries: 3 + + matomo_db: + image: mariadb + command: --max-allowed-packet=64MB + restart: always + volumes: + - mysql-db:/var/lib/mysql + environment: + - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} + env_file: + - .env + expose: + - 3306 + networks: + internal: + aliases: + - matomo_db + + matomo_app: + image: matomo:fpm-alpine + restart: always + links: + - matomo_db + volumes: + # - ./matomo_config:/var/www/html/config:rw + - matomo_logs:/var/www/html/logs + - matomo:/var/www/html + - ./matomo_config.ini.php:/var/www/html/config/config.ini.php:rw + environment: + - MATOMO_DATABASE_HOST=matomo_db + - PHP_MEMORY_LIMIT=2048M + env_file: + - .env + networks: + internal: + aliases: + - matomo_app + +# matomo_web: +# image: nginx:alpine +# restart: always +# volumes: +# - matomo:/var/www/html:ro +# # see https://github.com/matomo-org/matomo-nginx +# - ./matomo.conf:/etc/nginx/conf.d/default.conf:ro +# ports: +# - 8000:80 +# expose: +# - 8000 +# networks: +# internal: +# aliases: +# - matomo + diff --git a/hyrax/.fcrepo_wrapper.yml b/hyrax/.fcrepo_wrapper.yml new file mode 100644 index 00000000..3f921105 --- /dev/null +++ b/hyrax/.fcrepo_wrapper.yml @@ -0,0 +1,4 @@ +# Place any default configuration for fcrepo_wrapper here +port: 8984 +enable_jms: false +fcrepo_home_dir: tmp/fcrepo4-development-data diff --git a/hyrax/.gitignore b/hyrax/.gitignore new file mode 100644 index 00000000..81452db9 --- /dev/null +++ b/hyrax/.gitignore @@ -0,0 +1,31 @@ +# See https://help.github.com/articles/ignoring-files for more about ignoring files. +# +# If you find yourself ignoring temporary files generated by your text editor +# or operating system, you probably want to add a global ignore instead: +# git config --global core.excludesfile '~/.gitignore_global' + +# Ignore bundler config. +/.bundle + +# Ignore the default SQLite database. +/db/*.sqlite3 +/db/*.sqlite3-journal + +# Ignore all logfiles and tempfiles. +/log/* +/tmp/* +!/log/.keep +!/tmp/.keep + +# Ignore uploaded files in development +/storage/* +!/storage/.keep + +/node_modules +/yarn-error.log + +/public/assets +.byebug_history + +# Ignore master key for decrypting credentials and more. +/config/master.key diff --git a/hyrax/.rspec b/hyrax/.rspec new file mode 100644 index 00000000..c99d2e73 --- /dev/null +++ b/hyrax/.rspec @@ -0,0 +1 @@ +--require spec_helper diff --git a/hyrax/.ruby-version b/hyrax/.ruby-version new file mode 100644 index 00000000..73ad4780 --- /dev/null +++ b/hyrax/.ruby-version @@ -0,0 +1 @@ +ruby-2.7.5 \ No newline at end of file diff --git a/hyrax/.solr_wrapper.yml b/hyrax/.solr_wrapper.yml new file mode 100644 index 00000000..563acd2b --- /dev/null +++ b/hyrax/.solr_wrapper.yml @@ -0,0 +1,8 @@ +# Place any default configuration for solr_wrapper here +# version: 6.0.0 +# port: 8983 +instance_dir: tmp/solr-development +collection: + persist: true + dir: solr/conf/ + name: hydra-development diff --git a/hyrax/Dockerfile b/hyrax/Dockerfile new file mode 100644 index 00000000..ca5d1ddd --- /dev/null +++ b/hyrax/Dockerfile @@ -0,0 +1,94 @@ +FROM ruby:2.7-buster + +# Setup build variables +ARG RAILS_ENV +ARG DERIVATIVES_PATH +ARG UPLOADS_PATH +ARG CACHE_PATH +ARG FITS_PATH +ARG FITS_VERSION +ARG IM_VERSION=7.0.7-39 + +ENV APP_PRODUCTION=/data/ \ + APP_WORKDIR=/data + +# Add backports to apt-get sources +# Install libraries, dependencies, java and fits + +RUN apt-get update -qq && \ + apt-get -y install apt-transport-https && \ + curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ + echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \ + curl -sL https://deb.nodesource.com/setup_14.x | bash - && \ + apt-get update -qq && apt-get install -y --no-install-recommends \ + libpq-dev \ + libxml2-dev libxslt1-dev \ + nodejs \ + libreoffice \ + libass-dev libfreetype6-dev libmp3lame-dev libopus-dev libsdl2-dev libtheora-dev libtool libva-dev libvdpau-dev \ + libvpx-dev libvorbis-dev libx264-dev libx265-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev nasm pkg-config \ + texinfo wget yasm zlib1g-dev \ + libjpeg-dev libtiff-dev libpng-dev libraw-dev libwebp-dev libjxr-dev \ + libcairo2-dev libgs-dev librsvg2-dev \ + libmp3lame-dev libvorbis-dev libtheora-dev libspeex-dev libx264-dev \ + ghostscript ffmpeg \ + ufraw \ + bzip2 unzip xz-utils \ + vim \ + git \ + openjdk-11-jre-headless \ + yarn && \ + yarn config set no-progress && \ + yarn config set silent + +RUN git clone https://github.com/ImageMagick/ImageMagick.git && \ + cd ImageMagick && git checkout ${IM_VERSION} && \ + ./configure --prefix=/usr --without-magick-plus-plus --disable-docs --disable-static --with-tiff && \ + make && make install + +RUN mkdir -p /fits/ \ + && wget -q https://github.com/harvard-lts/fits/releases/download/$FITS_VERSION/fits-$FITS_VERSION.zip -O /fits/fits-$FITS_VERSION.zip \ + && unzip -q /fits/fits-$FITS_VERSION.zip -d /fits/fits-$FITS_VERSION \ + && chmod a+x $FITS_PATH \ + && rm /fits/fits-$FITS_VERSION.zip + +# copy gemfiles to production folder +COPY Gemfile Gemfile.lock $APP_PRODUCTION + +# install gems to system - use flags dependent on RAILS_ENV +RUN cd $APP_PRODUCTION && \ + bundle config build.nokogiri --use-system-libraries \ + && if [ "$RAILS_ENV" = "production" ]; then \ + bundle install --without test:development; \ + else \ + bundle install --without production --no-deployment; \ + fi \ + && mv Gemfile.lock Gemfile.lock.built_by_docker + +# copy the seeds +COPY ./seed /seed + +# create a folder to store derivatives, file uploads and cache directory +RUN mkdir -p $DERIVATIVES_PATH +RUN mkdir -p $UPLOADS_PATH +RUN mkdir -p $CACHE_PATH + +# copy the application +COPY . $APP_PRODUCTION +COPY docker-entrypoint.sh /bin/ + +# use the just built Gemfile.lock, not the one copied into the container and verify the gems are correctly installed +RUN cd $APP_PRODUCTION \ + && mv Gemfile.lock.built_by_docker Gemfile.lock \ + && bundle check + +# generate production assets if production environment +RUN if [ "$RAILS_ENV" = "production" ]; then \ + cd $APP_PRODUCTION \ + && yarn install \ + && SECRET_KEY_BASE_PRODUCTION=0 bundle exec rake assets:clean assets:precompile; \ + fi + +WORKDIR $APP_WORKDIR + +RUN chmod +x /bin/docker-entrypoint.sh diff --git a/hyrax/Gemfile b/hyrax/Gemfile new file mode 100644 index 00000000..d1dfee0b --- /dev/null +++ b/hyrax/Gemfile @@ -0,0 +1,87 @@ +source 'https://rubygems.org' +git_source(:github) { |repo| "https://github.com/#{repo}.git" } + +ruby '2.7.5' + +# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' +gem 'rails', '~> 5.2.6' +# Use sqlite3 as the database for Active Record +gem "sqlite3", "~> 1.3.0" +# Use Puma as the app server +gem 'puma', '~> 3.11' +# Use SCSS for stylesheets +gem 'sass-rails', '~> 5.0' +# Use Uglifier as compressor for JavaScript assets +gem 'uglifier', '>= 1.3.0' +# See https://github.com/rails/execjs#readme for more supported runtimes +# gem 'mini_racer', platforms: :ruby + +# Use CoffeeScript for .coffee assets and views +gem 'coffee-rails', '~> 4.2' +# Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks +gem 'turbolinks', '~> 5' +# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder +gem 'jbuilder', '~> 2.5' +# Use Redis adapter to run Action Cable in production +gem 'redis', '~> 4.0' +# Use ActiveModel has_secure_password +# gem 'bcrypt', '~> 3.1.7' + +# Use ActiveStorage variant +# gem 'mini_magick', '~> 4.8' + +# Use Capistrano for deployment +# gem 'capistrano-rails', group: :development + +# Reduces boot times through caching; required in config/boot.rb +gem 'bootsnap', '>= 1.1.0', require: false + +group :development, :test do + # Call 'byebug' anywhere in the code to stop execution and get a debugger console + gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] + gem 'factory_bot_rails' +end + +group :development do + # Access an interactive console on exception pages or by calling 'console' anywhere in the code. + gem 'web-console', '>= 3.3.0' + gem 'listen', '>= 3.0.5', '< 3.2' + # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring + gem 'spring' + gem 'spring-watcher-listen', '~> 2.0.0' +end + +group :test do + # Adds support for Capybara system testing and selenium driver + gem 'capybara', '>= 2.15' + gem 'selenium-webdriver' + # Easy installation and use of chromedriver to run system tests with Chrome + gem 'chromedriver-helper' +end + +# Windows does not include zoneinfo files, so bundle the tzinfo-data gem +gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] + +gem 'hyrax', '3.3.0' +group :development, :test do + gem 'solr_wrapper', '>= 0.3' +end + +gem 'rsolr', '>= 1.0', '< 3' +gem 'bootstrap-sass', '~> 3.0' +gem 'twitter-typeahead-rails', '0.11.1.pre.corejavascript' +gem 'jquery-rails' +gem 'devise' +gem 'devise-guests', '~> 0.6' +group :development, :test do + gem 'fcrepo_wrapper' + gem 'rspec-rails' +end + +gem 'sidekiq' +gem 'hydra-role-management' +gem 'bootstrap-datepicker-rails' +gem 'pg' + +gem 'riiif', '~> 2.3' +gem 'coveralls', require: false diff --git a/hyrax/Gemfile.lock b/hyrax/Gemfile.lock new file mode 100644 index 00000000..9b11bbf4 --- /dev/null +++ b/hyrax/Gemfile.lock @@ -0,0 +1,980 @@ +GEM + remote: https://rubygems.org/ + specs: + actioncable (5.2.6.2) + actionpack (= 5.2.6.2) + nio4r (~> 2.0) + websocket-driver (>= 0.6.1) + actionmailer (5.2.6.2) + actionpack (= 5.2.6.2) + actionview (= 5.2.6.2) + activejob (= 5.2.6.2) + mail (~> 2.5, >= 2.5.4) + rails-dom-testing (~> 2.0) + actionpack (5.2.6.2) + actionview (= 5.2.6.2) + activesupport (= 5.2.6.2) + rack (~> 2.0, >= 2.0.8) + rack-test (>= 0.6.3) + rails-dom-testing (~> 2.0) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + actionview (5.2.6.2) + activesupport (= 5.2.6.2) + builder (~> 3.1) + erubi (~> 1.4) + rails-dom-testing (~> 2.0) + rails-html-sanitizer (~> 1.0, >= 1.0.3) + active-fedora (13.2.5) + active-triples (>= 0.11.0, < 2.0.0) + activemodel (>= 5.1) + activesupport (>= 5.1) + deprecation + faraday (~> 0.12) + faraday-encoding (>= 0.0.5) + ldp (>= 0.7.0, < 2) + rsolr (>= 1.1.2, < 3) + ruby-progressbar (~> 1.0) + active-triples (1.1.1) + activemodel (>= 3.0.0) + activesupport (>= 3.0.0) + rdf (>= 2.0.2, < 4.0) + rdf-vocab (>= 2.0, < 4.0) + active_encode (0.8.2) + rails + sprockets (< 4) + activejob (5.2.6.2) + activesupport (= 5.2.6.2) + globalid (>= 0.3.6) + activemodel (5.2.6.2) + activesupport (= 5.2.6.2) + activemodel-serializers-xml (1.0.2) + activemodel (> 5.x) + activesupport (> 5.x) + builder (~> 3.1) + activerecord (5.2.6.2) + activemodel (= 5.2.6.2) + activesupport (= 5.2.6.2) + arel (>= 9.0) + activerecord-import (1.3.0) + activerecord (>= 4.2) + activestorage (5.2.6.2) + actionpack (= 5.2.6.2) + activerecord (= 5.2.6.2) + marcel (~> 1.0.0) + activesupport (5.2.6.2) + concurrent-ruby (~> 1.0, >= 1.0.2) + i18n (>= 0.7, < 2) + minitest (~> 5.1) + tzinfo (~> 1.1) + addressable (2.8.0) + public_suffix (>= 2.0.2, < 5.0) + almond-rails (0.3.0) + rails (>= 4.2) + amazing_print (1.4.0) + archive-zip (0.12.0) + io-like (~> 0.3.0) + arel (9.0.0) + autoprefixer-rails (10.4.2.0) + execjs (~> 2) + awesome_nested_set (3.5.0) + activerecord (>= 4.0.0, < 7.1) + aws-eventstream (1.2.0) + aws-partitions (1.554.0) + aws-sdk-core (3.126.2) + aws-eventstream (~> 1, >= 1.0.2) + aws-partitions (~> 1, >= 1.525.0) + aws-sigv4 (~> 1.1) + jmespath (~> 1.0) + aws-sdk-kms (1.54.0) + aws-sdk-core (~> 3, >= 3.126.0) + aws-sigv4 (~> 1.1) + aws-sdk-s3 (1.112.0) + aws-sdk-core (~> 3, >= 3.126.0) + aws-sdk-kms (~> 1) + aws-sigv4 (~> 1.4) + aws-sigv4 (1.4.0) + aws-eventstream (~> 1, >= 1.0.2) + babel-source (5.8.35) + babel-transpiler (0.7.0) + babel-source (>= 4.0, < 6) + execjs (~> 2.0) + bcp47 (0.3.3) + i18n + bcrypt (3.1.16) + bindex (0.8.1) + blacklight (6.24.0) + bootstrap-sass (~> 3.2) + deprecation + globalid + jbuilder (~> 2.7) + kaminari (>= 0.15) + nokogiri (~> 1.6) + rails (>= 4.2, < 6) + rsolr (>= 1.0.6, < 3) + twitter-typeahead-rails (= 0.11.1.pre.corejavascript) + blacklight-access_controls (0.6.2) + blacklight (~> 6.0) + cancancan (~> 1.8) + deprecation (~> 1.0) + blacklight-gallery (0.12.0) + blacklight (~> 6.3) + bootstrap-sass (~> 3.0) + openseadragon (>= 0.2.0) + rails + bootsnap (1.10.3) + msgpack (~> 1.2) + bootstrap-datepicker-rails (1.9.0.1) + railties (>= 3.0) + bootstrap-sass (3.4.1) + autoprefixer-rails (>= 5.2.1) + sassc (>= 2.0.0) + bootstrap_form (5.0.0) + actionpack (>= 5.2) + activemodel (>= 5.2) + breadcrumbs_on_rails (3.0.1) + browse-everything (1.1.2) + addressable (~> 2.5) + aws-sdk-s3 + dropbox_api (>= 0.1.10) + google-api-client (~> 0.23) + google_drive (>= 2.1, < 4) + googleauth (>= 0.6.6, < 1.0) + rails (>= 4.2, < 7.0) + ruby-box + signet (~> 0.8) + typhoeus + builder (3.2.4) + byebug (11.1.3) + cancancan (1.17.0) + capybara (3.36.0) + addressable + matrix + mini_mime (>= 0.1.3) + nokogiri (~> 1.8) + rack (>= 1.6.0) + rack-test (>= 0.6.3) + regexp_parser (>= 1.5, < 3.0) + xpath (~> 3.2) + carrierwave (1.3.2) + activemodel (>= 4.0.0) + activesupport (>= 4.0.0) + mime-types (>= 1.16) + ssrf_filter (~> 1.0) + childprocess (4.1.0) + chromedriver-helper (2.1.1) + archive-zip (~> 0.10) + nokogiri (~> 1.8) + clipboard-rails (1.7.1) + coffee-rails (4.2.2) + coffee-script (>= 2.2.0) + railties (>= 4.0.0) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.12.2) + concurrent-ruby (1.1.9) + connection_pool (2.2.5) + coveralls (0.8.23) + json (>= 1.8, < 3) + simplecov (~> 0.16.1) + term-ansicolor (~> 1.3) + thor (>= 0.19.4, < 2.0) + tins (~> 1.6) + crass (1.0.6) + declarative (0.0.20) + declarative-builder (0.1.0) + declarative-option (< 0.2.0) + declarative-option (0.1.0) + deprecation (1.1.0) + activesupport + devise (4.8.1) + bcrypt (~> 3.0) + orm_adapter (~> 0.1) + railties (>= 4.1.0) + responders + warden (~> 1.2.3) + devise-guests (0.8.1) + devise + diff-lcs (1.5.0) + disposable (0.4.7) + declarative (>= 0.0.9, < 1.0.0) + declarative-builder (< 0.2.0) + declarative-option (< 0.2.0) + representable (>= 2.4.0, <= 3.1.0) + uber (< 0.2.0) + docile (1.4.0) + domain_name (0.5.20190701) + unf (>= 0.0.5, < 1.0.0) + draper (4.0.2) + actionpack (>= 5.0) + activemodel (>= 5.0) + activemodel-serializers-xml (>= 1.0) + activesupport (>= 5.0) + request_store (>= 1.0) + ruby2_keywords + dropbox_api (0.1.18) + faraday (<= 1.0) + oauth2 (~> 1.1) + dry-configurable (0.14.0) + concurrent-ruby (~> 1.0) + dry-core (~> 0.6) + dry-container (0.9.0) + concurrent-ruby (~> 1.0) + dry-configurable (~> 0.13, >= 0.13.0) + dry-core (0.7.1) + concurrent-ruby (~> 1.0) + dry-equalizer (0.3.0) + dry-events (0.2.0) + concurrent-ruby (~> 1.0) + dry-core (~> 0.4) + dry-equalizer (~> 0.2) + dry-inflector (0.2.1) + dry-initializer (3.1.1) + dry-logic (1.2.0) + concurrent-ruby (~> 1.0) + dry-core (~> 0.5, >= 0.5) + dry-matcher (0.9.0) + dry-core (~> 0.4, >= 0.4.8) + dry-monads (1.4.0) + concurrent-ruby (~> 1.0) + dry-core (~> 0.7) + dry-schema (1.9.1) + concurrent-ruby (~> 1.0) + dry-configurable (~> 0.13, >= 0.13.0) + dry-core (~> 0.5, >= 0.5) + dry-initializer (~> 3.0) + dry-logic (~> 1.0) + dry-types (~> 1.5) + dry-struct (1.4.0) + dry-core (~> 0.5, >= 0.5) + dry-types (~> 1.5) + ice_nine (~> 0.11) + dry-transaction (0.13.3) + dry-container (>= 0.2.8) + dry-events (>= 0.1.0) + dry-matcher (>= 0.7.0) + dry-monads (>= 0.4.0) + dry-types (1.5.1) + concurrent-ruby (~> 1.0) + dry-container (~> 0.3) + dry-core (~> 0.5, >= 0.5) + dry-inflector (~> 0.1, >= 0.1.2) + dry-logic (~> 1.0, >= 1.0.2) + dry-validation (1.8.0) + concurrent-ruby (~> 1.0) + dry-container (~> 0.7, >= 0.7.1) + dry-core (~> 0.5, >= 0.5) + dry-initializer (~> 3.0) + dry-schema (~> 1.9, >= 1.9.1) + ebnf (2.3.0) + amazing_print (~> 1.4) + htmlentities (~> 4.3) + rdf (~> 3.2) + scanf (~> 1.0) + sxp (~> 1.2) + unicode-types (~> 1.7) + erubi (1.10.0) + ethon (0.15.0) + ffi (>= 1.15.0) + execjs (2.8.1) + factory_bot (6.2.0) + activesupport (>= 5.0.0) + factory_bot_rails (6.2.0) + factory_bot (~> 6.2.0) + railties (>= 5.0.0) + faraday (0.17.4) + multipart-post (>= 1.2, < 3) + faraday-encoding (0.0.5) + faraday + fcrepo_wrapper (0.9.0) + ruby-progressbar + ffi (1.15.5) + ffi-compiler (1.0.1) + ffi (>= 1.0.0) + rake + flipflop (2.6.0) + activesupport (>= 4.0) + flot-rails (0.0.7) + jquery-rails + font-awesome-rails (4.7.0.8) + railties (>= 3.2, < 8.0) + gems (1.2.0) + geocoder (1.7.3) + globalid (1.0.0) + activesupport (>= 5.0) + google-api-client (0.53.0) + google-apis-core (~> 0.1) + google-apis-generator (~> 0.1) + google-apis-core (0.4.2) + addressable (~> 2.5, >= 2.5.1) + googleauth (>= 0.16.2, < 2.a) + httpclient (>= 2.8.1, < 3.a) + mini_mime (~> 1.0) + representable (~> 3.0) + retriable (>= 2.0, < 4.a) + rexml + webrick + google-apis-discovery_v1 (0.8.0) + google-apis-core (>= 0.4, < 2.a) + google-apis-drive_v3 (0.18.0) + google-apis-core (>= 0.4, < 2.a) + google-apis-generator (0.4.1) + activesupport (>= 5.0) + gems (~> 1.2) + google-apis-core (>= 0.4, < 2.a) + google-apis-discovery_v1 (~> 0.5) + thor (>= 0.20, < 2.a) + google-apis-sheets_v4 (0.11.0) + google-apis-core (>= 0.4, < 2.a) + google_drive (3.0.7) + google-apis-drive_v3 (>= 0.5.0, < 1.0.0) + google-apis-sheets_v4 (>= 0.4.0, < 1.0.0) + googleauth (>= 0.5.0, < 1.0.0) + nokogiri (>= 1.5.3, < 2.0.0) + googleauth (0.17.1) + faraday (>= 0.17.3, < 2.0) + jwt (>= 1.4, < 3.0) + memoist (~> 0.16) + multi_json (~> 1.11) + os (>= 0.9, < 2.0) + signet (~> 0.15) + haml (5.2.2) + temple (>= 0.8.0) + tilt + hamster (3.0.0) + concurrent-ruby (~> 1.0) + hiredis (0.6.3) + htmlentities (4.3.4) + http (5.0.4) + addressable (~> 2.8) + http-cookie (~> 1.0) + http-form_data (~> 2.2) + llhttp-ffi (~> 0.4.0) + http-cookie (1.0.4) + domain_name (~> 0.5) + http-form_data (2.3.0) + http_logger (0.7.0) + httpclient (2.8.3) + hydra-access-controls (11.0.7) + active-fedora (>= 10.0.0) + activesupport (>= 4, < 6) + blacklight (>= 5.16) + blacklight-access_controls (~> 0.6.0) + cancancan (~> 1.8) + deprecation (~> 1.0) + hydra-core (11.0.7) + hydra-access-controls (= 11.0.7) + railties (>= 4.0.0, < 6) + hydra-derivatives (3.6.1) + active-fedora (>= 11.5.6, != 13.2.1, != 13.2.0, != 13.1.3, != 13.1.2, != 13.1.1, != 13.1.0, != 13.0.0, != 12.2.1, != 12.2.0, != 12.1.1, != 12.1.0, != 12.0.3, != 12.0.2, != 12.0.1, != 12.0.0) + active_encode (~> 0.1) + activemodel (< 6.1) + activesupport (>= 4.0, < 7) + addressable (~> 2.5) + deprecation + mime-types (> 2.0, < 4.0) + mini_magick (>= 3.2, < 5) + hydra-editor (5.0.5) + active-fedora (>= 9.0.0) + activerecord (~> 5.0) + almond-rails (~> 0.1) + cancancan (~> 1.8) + rails (>= 5, < 6) + simple_form (>= 4.1.0, < 6.0) + sprockets (~> 3.7) + sprockets-es6 + hydra-file_characterization (1.1.2) + activesupport (>= 3.0.0) + hydra-head (11.0.7) + hydra-access-controls (= 11.0.7) + hydra-core (= 11.0.7) + rails (>= 5.2, < 6.1) + hydra-pcdm (1.1.0) + active-fedora (>= 10, < 14) + mime-types (>= 1) + hydra-role-management (1.0.3) + blacklight + bootstrap_form + bundler (>= 1.5) + cancancan + json (>= 1.8) + hydra-works (2.0.0) + activesupport (>= 5.2, < 7.0) + hydra-derivatives (~> 3.6) + hydra-file_characterization (~> 1.0) + hydra-pcdm (>= 0.9) + hyrax (3.3.0) + active-fedora (~> 13.1, >= 13.1.2) + almond-rails (~> 0.1) + awesome_nested_set (~> 3.1) + blacklight (~> 6.14) + blacklight-gallery (~> 0.7) + breadcrumbs_on_rails (~> 3.0) + browse-everything (>= 0.16, < 2.0) + carrierwave (~> 1.0) + clipboard-rails (~> 1.5) + draper (~> 4.0) + dry-equalizer (~> 0.2) + dry-events (~> 0.2.0) + dry-struct (~> 1.0) + dry-transaction (~> 0.11) + dry-validation (~> 1.3) + flipflop (~> 2.3) + flot-rails (~> 0.0.6) + font-awesome-rails (~> 4.2) + hydra-derivatives (~> 3.3) + hydra-editor (~> 5.0, >= 5.0.4) + hydra-file_characterization (~> 1.1.2) + hydra-head (~> 11.0, >= 11.0.1) + hydra-works (>= 0.16) + iiif_manifest (>= 0.3, < 2.0) + jquery-datatables-rails (~> 3.4) + jquery-ui-rails (~> 6.0) + json-schema + kaminari_route_prefix (~> 0.1.1) + legato (~> 0.3) + linkeddata + mailboxer (~> 0.12) + nest (~> 3.1) + noid-rails (~> 3.0.0) + oauth + oauth2 (~> 1.2) + posix-spawn + power_converter (~> 0.1, >= 0.1.2) + qa (~> 5.5, >= 5.5.1) + rails (~> 5.0) + rails_autolink (~> 1.1) + rdf-rdfxml + rdf-vocab (~> 3.0) + redis-namespace (~> 1.5) + redlock (>= 0.1.2) + reform (~> 2.3) + reform-rails (~> 0.2.0) + retriable (>= 2.9, < 4.0) + samvera-nesting_indexer (~> 2.0) + sass-rails (~> 5.0) + select2-rails (~> 3.5) + signet + tinymce-rails + valkyrie (~> 2, >= 2.1.1) + i18n (1.10.0) + concurrent-ruby (~> 1.0) + ice_nine (0.11.2) + iiif-image-api (0.2.0) + activesupport + iiif_manifest (1.1.0) + activesupport (>= 4) + io-like (0.3.1) + jbuilder (2.11.5) + actionview (>= 5.0.0) + activesupport (>= 5.0.0) + jmespath (1.6.0) + jquery-datatables-rails (3.4.0) + actionpack (>= 3.1) + jquery-rails + railties (>= 3.1) + sass-rails + jquery-rails (4.4.0) + rails-dom-testing (>= 1, < 3) + railties (>= 4.2.0) + thor (>= 0.14, < 2.0) + jquery-ui-rails (6.0.1) + railties (>= 3.2.16) + json (2.6.1) + json-canonicalization (0.3.0) + json-ld (3.2.0) + htmlentities (~> 4.3) + json-canonicalization (~> 0.3) + link_header (~> 0.0, >= 0.0.8) + multi_json (~> 1.15) + rack (~> 2.2) + rdf (~> 3.2) + json-ld-preloaded (3.2.0) + json-ld (~> 3.2) + rdf (~> 3.2) + json-schema (2.8.1) + addressable (>= 2.4) + jwt (2.3.0) + kaminari (1.2.2) + activesupport (>= 4.1.0) + kaminari-actionview (= 1.2.2) + kaminari-activerecord (= 1.2.2) + kaminari-core (= 1.2.2) + kaminari-actionview (1.2.2) + actionview + kaminari-core (= 1.2.2) + kaminari-activerecord (1.2.2) + activerecord + kaminari-core (= 1.2.2) + kaminari-core (1.2.2) + kaminari_route_prefix (0.1.1) + kaminari (~> 1.0) + ld-patch (3.2.0) + ebnf (~> 2.2) + rdf (~> 3.2) + rdf-xsd (~> 3.2) + sparql (~> 3.2) + sxp (~> 1.2) + ldp (1.0.3) + deprecation + faraday + http_logger + json-ld + rdf (>= 1.1) + rdf-isomorphic + rdf-turtle + rdf-vocab (>= 0.8) + slop + ldpath (1.1.0) + nokogiri (~> 1.8) + parslet + rdf (~> 3.0) + legato (0.7.0) + multi_json + link_header (0.0.8) + linkeddata (3.2.0) + json-ld (~> 3.2) + json-ld-preloaded (~> 3.2) + ld-patch (~> 3.2) + nokogiri (~> 1.12, >= 1.12.5) + rdf (~> 3.2) + rdf-aggregate-repo (~> 3.2) + rdf-hamster-repo (~> 3.2) + rdf-isomorphic (~> 3.2) + rdf-json (~> 3.2) + rdf-microdata (~> 3.2) + rdf-n3 (~> 3.2) + rdf-normalize (~> 0.5) + rdf-ordered-repo (~> 3.2) + rdf-rdfa (~> 3.2) + rdf-rdfxml (~> 3.2) + rdf-reasoner (~> 0.8) + rdf-tabular (~> 3.2) + rdf-trig (~> 3.2) + rdf-trix (~> 3.2) + rdf-turtle (~> 3.2) + rdf-vocab (~> 3.2) + rdf-xsd (~> 3.2) + shacl (~> 0.2) + shex (~> 0.7) + sparql (~> 3.2) + sparql-client (~> 3.2) + listen (3.1.5) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + ruby_dep (~> 1.2) + llhttp-ffi (0.4.0) + ffi-compiler (~> 1.0) + rake (~> 13.0) + logger (1.5.0) + loofah (2.14.0) + crass (~> 1.0.2) + nokogiri (>= 1.5.9) + mail (2.7.1) + mini_mime (>= 0.1.1) + mailboxer (0.15.1) + carrierwave (>= 0.5.8) + rails (>= 5.0.0) + marcel (1.0.2) + matrix (0.4.2) + memoist (0.16.2) + method_source (1.0.0) + mime-types (3.4.1) + mime-types-data (~> 3.2015) + mime-types-data (3.2022.0105) + mini_magick (4.11.0) + mini_mime (1.1.2) + mini_portile2 (2.7.1) + minitest (5.15.0) + msgpack (1.4.5) + multi_json (1.15.0) + multi_xml (0.6.0) + multipart-post (2.1.1) + nest (3.2.0) + redic + net-http-persistent (4.0.1) + connection_pool (~> 2.2) + nio4r (2.5.8) + noid (0.9.0) + noid-rails (3.0.3) + actionpack (>= 5.0.0, < 7) + noid (~> 0.9) + nokogiri (1.13.1) + mini_portile2 (~> 2.7.0) + racc (~> 1.4) + oauth (0.5.8) + oauth2 (1.4.7) + faraday (>= 0.8, < 2.0) + jwt (>= 1.0, < 3.0) + multi_json (~> 1.3) + multi_xml (~> 0.5) + rack (>= 1.2, < 3) + openseadragon (0.6.0) + rails (> 3.2.0) + orm_adapter (0.5.0) + os (1.1.4) + parslet (2.0.0) + pg (1.3.2) + posix-spawn (0.3.15) + power_converter (0.1.2) + public_suffix (4.0.6) + puma (3.12.6) + qa (5.8.1) + activerecord-import + deprecation + faraday (< 2.0) + geocoder + ldpath + nokogiri (~> 1.6) + rails (>= 5.0, < 6.2) + rdf + racc (1.6.0) + rack (2.2.3) + rack-test (1.1.0) + rack (>= 1.0, < 3) + rails (5.2.6.2) + actioncable (= 5.2.6.2) + actionmailer (= 5.2.6.2) + actionpack (= 5.2.6.2) + actionview (= 5.2.6.2) + activejob (= 5.2.6.2) + activemodel (= 5.2.6.2) + activerecord (= 5.2.6.2) + activestorage (= 5.2.6.2) + activesupport (= 5.2.6.2) + bundler (>= 1.3.0) + railties (= 5.2.6.2) + sprockets-rails (>= 2.0.0) + rails-dom-testing (2.0.3) + activesupport (>= 4.2.0) + nokogiri (>= 1.6) + rails-html-sanitizer (1.4.2) + loofah (~> 2.3) + rails_autolink (1.1.6) + rails (> 3.1) + railties (5.2.6.2) + actionpack (= 5.2.6.2) + activesupport (= 5.2.6.2) + method_source + rake (>= 0.8.7) + thor (>= 0.19.0, < 2.0) + rake (13.0.6) + rb-fsevent (0.11.1) + rb-inotify (0.10.1) + ffi (~> 1.0) + rdf (3.2.4) + link_header (~> 0.0, >= 0.0.8) + rdf-aggregate-repo (3.2.0) + rdf (~> 3.2) + rdf-hamster-repo (3.2.1) + hamster (~> 3.0) + rdf (~> 3.2, >= 3.2.1) + rdf-isomorphic (3.2.1) + rdf (~> 3.2) + rdf-json (3.2.0) + rdf (~> 3.2) + rdf-microdata (3.2.1) + htmlentities (~> 4.3) + nokogiri (~> 1.13) + rdf (~> 3.2) + rdf-rdfa (~> 3.2) + rdf-xsd (~> 3.2) + rdf-n3 (3.2.1) + ebnf (~> 2.2) + rdf (~> 3.2) + sparql (~> 3.2) + sxp (~> 1.2) + rdf-normalize (0.5.0) + rdf (~> 3.2) + rdf-ordered-repo (3.2.1) + rdf (~> 3.2, >= 3.2.1) + rdf-rdfa (3.2.0) + haml (~> 5.2) + htmlentities (~> 4.3) + rdf (~> 3.2) + rdf-aggregate-repo (~> 3.2) + rdf-vocab (~> 3.2) + rdf-xsd (~> 3.2) + rdf-rdfxml (3.2.0) + htmlentities (~> 4.3) + rdf (~> 3.2) + rdf-rdfa (~> 3.2) + rdf-xsd (~> 3.2) + rdf-reasoner (0.8.0) + rdf (~> 3.2) + rdf-xsd (~> 3.2) + rdf-tabular (3.2.0) + addressable (~> 2.8) + bcp47 (~> 0.3, >= 0.3.3) + json-ld (~> 3.2) + rdf (~> 3.2) + rdf-vocab (~> 3.2) + rdf-xsd (~> 3.2) + rdf-trig (3.2.0) + ebnf (~> 2.2) + rdf (~> 3.2) + rdf-turtle (~> 3.2) + rdf-trix (3.2.0) + rdf (~> 3.2) + rdf-xsd (~> 3.2) + rdf-turtle (3.2.0) + ebnf (~> 2.3) + rdf (~> 3.2) + rdf-vocab (3.2.1) + rdf (~> 3.2, >= 3.2.4) + rdf-xsd (3.2.0) + rdf (~> 3.2) + rexml (~> 3.2) + redic (1.5.3) + hiredis + redis (4.6.0) + redis-namespace (1.8.1) + redis (>= 3.0.4) + redlock (1.2.2) + redis (>= 3.0.0, < 5.0) + reform (2.5.0) + disposable (>= 0.4.2, < 0.5.0) + representable (>= 2.4.0, < 3.1.0) + uber (< 0.2.0) + reform-rails (0.2.3) + activemodel (>= 5.0) + reform (>= 2.3.1, < 3.0.0) + regexp_parser (2.2.1) + representable (3.0.4) + declarative (< 0.1.0) + declarative-option (< 0.2.0) + uber (< 0.2.0) + request_store (1.5.1) + rack (>= 1.4) + responders (3.0.1) + actionpack (>= 5.0) + railties (>= 5.0) + retriable (3.1.2) + rexml (3.2.5) + riiif (2.3.0) + deprecation (>= 1.0.0) + iiif-image-api (>= 0.1.0) + railties (>= 4.2, < 7) + rsolr (2.5.0) + builder (>= 2.1.2) + faraday (>= 0.9, < 3, != 2.0.0) + rspec-core (3.11.0) + rspec-support (~> 3.11.0) + rspec-expectations (3.11.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.11.0) + rspec-mocks (3.11.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.11.0) + rspec-rails (5.1.0) + actionpack (>= 5.2) + activesupport (>= 5.2) + railties (>= 5.2) + rspec-core (~> 3.10) + rspec-expectations (~> 3.10) + rspec-mocks (~> 3.10) + rspec-support (~> 3.10) + rspec-support (3.11.0) + ruby-box (1.15.0) + addressable + json + multipart-post + oauth2 + ruby-progressbar (1.11.0) + ruby2_keywords (0.0.5) + ruby_dep (1.5.0) + rubyzip (2.3.2) + samvera-nesting_indexer (2.0.0) + dry-equalizer + sass (3.7.4) + sass-listen (~> 4.0.0) + sass-listen (4.0.0) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + sass-rails (5.1.0) + railties (>= 5.2.0) + sass (~> 3.1) + sprockets (>= 2.8, < 4.0) + sprockets-rails (>= 2.0, < 4.0) + tilt (>= 1.1, < 3) + sassc (2.4.0) + ffi (~> 1.9) + scanf (1.0.0) + select2-rails (3.5.11) + selenium-webdriver (4.1.0) + childprocess (>= 0.5, < 5.0) + rexml (~> 3.2, >= 3.2.5) + rubyzip (>= 1.2.2) + shacl (0.2.1) + json-ld (~> 3.2) + rdf (~> 3.2) + sparql (~> 3.2) + sxp (~> 1.2) + shex (0.7.1) + ebnf (~> 2.2) + htmlentities (~> 4.3) + json-ld (~> 3.2) + json-ld-preloaded (~> 3.2) + rdf (~> 3.2) + rdf-xsd (~> 3.2) + sparql (~> 3.2) + sxp (~> 1.2) + sidekiq (6.4.1) + connection_pool (>= 2.2.2) + rack (~> 2.0) + redis (>= 4.2.0) + signet (0.16.0) + addressable (~> 2.8) + faraday (>= 0.17.3, < 2.0) + jwt (>= 1.5, < 3.0) + multi_json (~> 1.10) + simple_form (5.1.0) + actionpack (>= 5.2) + activemodel (>= 5.2) + simplecov (0.16.1) + docile (~> 1.1) + json (>= 1.8, < 3) + simplecov-html (~> 0.10.0) + simplecov-html (0.10.2) + slop (4.9.1) + solr_wrapper (3.1.2) + http + retriable + ruby-progressbar + rubyzip + sparql (3.2.1) + builder (~> 3.2) + ebnf (~> 2.2) + logger (~> 1.4) + rdf (~> 3.2, >= 3.2.3) + rdf-aggregate-repo (~> 3.2) + rdf-xsd (~> 3.2) + sparql-client (~> 3.2) + sxp (~> 1.2, >= 1.2.1) + sparql-client (3.2.0) + net-http-persistent (~> 4.0, >= 4.0.1) + rdf (~> 3.2) + spring (2.1.1) + spring-watcher-listen (2.0.1) + listen (>= 2.7, < 4.0) + spring (>= 1.2, < 3.0) + sprockets (3.7.2) + concurrent-ruby (~> 1.0) + rack (> 1, < 3) + sprockets-es6 (0.9.2) + babel-source (>= 5.8.11) + babel-transpiler + sprockets (>= 3.0.0) + sprockets-rails (3.4.2) + actionpack (>= 5.2) + activesupport (>= 5.2) + sprockets (>= 3.0.0) + sqlite3 (1.3.13) + ssrf_filter (1.0.7) + sxp (1.2.1) + matrix + rdf (~> 3.2) + sync (0.5.0) + temple (0.8.2) + term-ansicolor (1.7.1) + tins (~> 1.0) + thor (1.2.1) + thread_safe (0.3.6) + tilt (2.0.10) + tins (1.31.0) + sync + tinymce-rails (5.10.3) + railties (>= 3.1.1) + turbolinks (5.2.1) + turbolinks-source (~> 5.2) + turbolinks-source (5.2.0) + twitter-typeahead-rails (0.11.1.pre.corejavascript) + actionpack (>= 3.1) + jquery-rails + railties (>= 3.1) + typhoeus (1.4.0) + ethon (>= 0.9.0) + tzinfo (1.2.9) + thread_safe (~> 0.1) + uber (0.1.0) + uglifier (4.2.0) + execjs (>= 0.3.0, < 3) + unf (0.1.4) + unf_ext + unf_ext (0.0.8) + unicode-types (1.7.0) + valkyrie (2.2.0) + activemodel + activesupport + disposable (~> 0.4.5) + draper + dry-struct + dry-types (~> 1.0) + faraday (< 1.0) + json + json-ld + railties + rdf (~> 3.0, >= 3.0.10) + rdf-vocab + reform (~> 2.2) + reform-rails + warden (1.2.9) + rack (>= 2.0.9) + web-console (3.7.0) + actionview (>= 5.0) + activemodel (>= 5.0) + bindex (>= 0.4.0) + railties (>= 5.0) + webrick (1.7.0) + websocket-driver (0.7.5) + websocket-extensions (>= 0.1.0) + websocket-extensions (0.1.5) + xpath (3.2.0) + nokogiri (~> 1.8) + +PLATFORMS + ruby + +DEPENDENCIES + bootsnap (>= 1.1.0) + bootstrap-datepicker-rails + bootstrap-sass (~> 3.0) + byebug + capybara (>= 2.15) + chromedriver-helper + coffee-rails (~> 4.2) + coveralls + devise + devise-guests (~> 0.6) + factory_bot_rails + fcrepo_wrapper + hydra-role-management + hyrax (= 3.3.0) + jbuilder (~> 2.5) + jquery-rails + listen (>= 3.0.5, < 3.2) + pg + puma (~> 3.11) + rails (~> 5.2.6) + redis (~> 4.0) + riiif (~> 2.3) + rsolr (>= 1.0, < 3) + rspec-rails + sass-rails (~> 5.0) + selenium-webdriver + sidekiq + solr_wrapper (>= 0.3) + spring + spring-watcher-listen (~> 2.0.0) + sqlite3 (~> 1.3.0) + turbolinks (~> 5) + twitter-typeahead-rails (= 0.11.1.pre.corejavascript) + tzinfo-data + uglifier (>= 1.3.0) + web-console (>= 3.3.0) + +RUBY VERSION + ruby 2.7.5p203 + +BUNDLED WITH + 2.1.4 diff --git a/hyrax/Rakefile b/hyrax/Rakefile new file mode 100644 index 00000000..fe21c072 --- /dev/null +++ b/hyrax/Rakefile @@ -0,0 +1,8 @@ +# Add your own tasks in files placed in lib/tasks ending in .rake, +# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. + +require_relative 'config/application' + +Rails.application.load_tasks + +require 'solr_wrapper/rake_task' unless Rails.env.production? || ENV['IN_DOCKER'] == "true" diff --git a/hyrax/app/actors/hyrax/actors/dataset_actor.rb b/hyrax/app/actors/hyrax/actors/dataset_actor.rb new file mode 100644 index 00000000..eeca62e1 --- /dev/null +++ b/hyrax/app/actors/hyrax/actors/dataset_actor.rb @@ -0,0 +1,8 @@ +# Generated via +# `rails generate hyrax:work Dataset` +module Hyrax + module Actors + class DatasetActor < Hyrax::Actors::BaseActor + end + end +end diff --git a/hyrax/app/assets/config/manifest.js b/hyrax/app/assets/config/manifest.js new file mode 100644 index 00000000..c9bfb0b4 --- /dev/null +++ b/hyrax/app/assets/config/manifest.js @@ -0,0 +1,5 @@ +//= link_tree ../images +//= link_directory ../javascripts .js +//= link_directory ../stylesheets .css + +//= link openseadragon-assets diff --git a/hyrax/app/assets/images/.keep b/hyrax/app/assets/images/.keep new file mode 100644 index 00000000..e69de29b diff --git a/hyrax/app/assets/images/unauthorized.png b/hyrax/app/assets/images/unauthorized.png new file mode 100644 index 0000000000000000000000000000000000000000..b832c6192aa4a28d68c7004338235650c021deaa GIT binary patch literal 1958 zcmah~2~ZPP7+$RwwFnliQ538#im2T(16U=XawL$5QBi~fTZ#xM3IVc7a5$_~P(({X zQBk7?#VbP)F+j3FJgOqW9MBp-A|90_kOU7ffMENwLE34x-T8Ok```b6$NML<$yrPD zn>@*O5(Gh$DgM5J5Hv<)dMA7YPAE={DzJ=;^;+!(LFIX$3`LFy`4~o^pEtyp&enpx z)7pRyByb3&+=P;`kx0Uz#9D|hHl;~o2&7;WUkN4Gm;wdoHBbTu#WX?;Ar8UMO>hyE zR5Q|VLg9Nee1u$N>W{-Yld4Uf3=G<N35Vb$J9nD)&>uL~OjV8B099ZHk5O8>5C`HU zKsOOr9Ib->#40G!Yze??A*Kjo0|w9uq84WZ67K>4O%k94AZ8)+6-F;rW1m)b9n5MI z8c16Yefl=#_ipl(tqxxeS`6uD^xKc0d$2Hnub;M7_*9p(L-XpWPlx3ro2*qImmO1$ zeKY1xP5XiettUc%-uCj4bMg74#5Je8)b({UH)a$C*;+r`vdBM#v%O*G-BQ=xY4U5) z13Zdl9~FYemr{JaHl(!aRnHQlf~RFa)^C2&7;v=6rO48!2t3l^2;U%q_)^>QKweyr z;H2^6ms>rrOdSZJIu$rj-XCXI9P4=4riw6xb}JWk)V;jdJ!f8aSXhKE)bQj$EdAW> zStnrhUe$By`GMYSBC_8;%{VZ;A=z&|a^mD*7ujBT6W(ayH^(vmxZwu#d6#~gSba|P zg9<BrM3+2;W7vm_o8!@SVMET9?G53CD(lWKo8wvesnhybGnn&T5q3{#h^PWi3BJ*W zuynTZWl_p4YCDWf)V8>VD$9NDSlJQLa=klC)5481eyxq+?MJLdw>#e+lEIUZfwvOj zW>%zz`fY27e>7n)|Bx(0x|y(#?~%45A6YC4<ad_ml8@BGvk`kN1>LF}+Z0`%>wn}I z*a5M^j-pPw%%<qexzr=q;KfK9R*gQ^k8LJZ<pvPiVOL~3)`D{Nna!liTpFPT_CUh1 zel${VBPR(YD+#~C<B<StHab^dASYdwcoXFCWW)pWKp*RD6r>7?FQF0s3|WkYqg-8q zf^<bfCe*`r$ZRYPjnvsR^_8c-au+RBzrK82_!GZDI9He4ly!L(m2e$igh1F;RR7>v zNq3a-z8e}O)khld+ThKpsrE=ABeg|E3Rbt<vwFBZhG8>yYaYs!a<;QAkP?RD1C@8M zwmpZnrk#whWn3Q9;DG%&OB2T--c7JY1dOsJ{a1XH62lI(PijXu_NL?OH@?9y+RIsD zE^minDJDFwi91R3ylo($ZnE_L6jxOg8YD|k?p-lC-8q-vC6pb=XieV*Ha&3O&_vm3 zUaCQ*$jgxb=4mWZ^c-EK={os_>0&K8BOkUN-pdaX9Z?9V#t8@yC1^rRQpbReojdBJ zrO5?U_AXHOL`$2H;%$WnOHksuXlzRs9S5CZMLx;}Nb5@FLe--g$Qd+xX%>H-sJvqx zIoJ(Z=Br$YEIZ~6I%XP9Z#%@dq!Hu-N^nEl;1{ALT51vg<0dOVS4GV6m%UYTw=F?6 zI@AW$$Xj!)fIe8Y4jMVPVk(|+E1D^CuFoEG>2H~%*B&blhn8tBESm_BW*X2eH9=y} zA3TlYh@5eNidAeTVY%b2zGlYvDZdjl`v4ioL?oq|6iuE^;B+_*kWu4iM@)_wA}Y*| z|6loEW>Ne`W+0dX10M`NkiU$88JTdnAr1#m-i_kFl>ceg&i#WkbPI4ai{KYdR&b_h zA5fxEwf`XNyO}Ecf;xQ=nVoZ%zG4HJoqd)bTc{|NI%}1Uaq*`P(!I6H7-rtmjhz>I zw<eU--B~{?WUzNr)|%-Scf#khJubYs_&jl6<JoiB%;kzxWS5KDQ1OAJ`k1smeHjNk z>r*?c*%EDF(oH+>Gi@^uUjm=Im4oM}(=19}-@i}r8m_(7CzxMHbQjkOFmYqI?68qt jRjJPX(C2jYJWkJUE!AH~DmGm-{ijk$G+(~=_nChJB*mwj literal 0 HcmV?d00001 diff --git a/hyrax/app/assets/images/us_404.svg b/hyrax/app/assets/images/us_404.svg new file mode 100644 index 00000000..7ac476d3 --- /dev/null +++ b/hyrax/app/assets/images/us_404.svg @@ -0,0 +1,91 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + width="600" + height="600" + id="svg2997"> + <defs + id="defs19" /> + <metadata + id="metadata3002"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + transform="translate(-88.571,-155.22)" + id="g3057"> + <g + transform="translate(88.571,155.22)" + id="g4097"> + <path + d="M 0,50 C 0,22.386 22.385,0 50,0 h 500 c 27.614,0 50,22.386 50,50 v 500 c 0,27.615 -22.386,50 -50,50 H 50 C 22.385,600 0,577.62 0,550 V 50 z" + inkscape:connector-curvature="0" + id="path4099" /> + <path + d="M 300,300" + inkscape:connector-curvature="0" + id="path4101" /> + </g> + <g + id="g3051"> + <g + transform="matrix(0.39465,0,0,0.39465,-753.67,260.87)" + id="g3783-5-2"> + <path + d="M 2455.5,-227.53 2151.8,40.85 c 95.691,54.056 160.31,156.69 160.31,274.44 0,58.027 -15.751,112.35 -43.125,159.03 -6.0012,10.234 -12.637,20.046 -19.719,29.5 -2.8607,4.7586 -5.6558,9.5784 -8.3125,14.469 -2.9441,5.4198 -5.7516,10.895 -8.4375,16.469 -2.6858,5.574 -5.2368,11.249 -7.6562,16.969 -2.4194,5.7202 -4.6987,11.485 -6.8438,17.344 -2.145,5.8584 -4.1686,11.793 -6.0312,17.781 -1.8627,5.9886 -3.584,12.045 -5.1563,18.156 -1.5722,6.1108 -2.9761,12.275 -4.25,18.5 -1.2738,6.225 -2.4076,12.513 -3.375,18.844 -0.9673,6.3311 -1.7845,12.727 -2.4375,19.156 -0.6529,6.4293 -1.1382,12.887 -1.4687,19.406 -0.3305,6.5194 -0.5,13.086 -0.5,19.688 0,6.6015 0.1695,13.168 0.5,19.688 0.3305,6.5194 0.8158,12.977 1.4687,19.406 0.653,6.4293 1.4702,12.825 2.4375,19.156 0.9674,6.3311 2.1012,12.619 3.375,18.844 1.2739,6.2249 2.6778,12.389 4.25,18.5 1.5723,6.1107 3.2936,12.168 5.1563,18.156 1.8626,5.9886 3.8862,11.923 6.0312,17.781 2.1451,5.8587 4.4244,11.624 6.8438,17.344 2.4194,5.7202 4.9704,11.394 7.6562,16.969 2.6859,5.5735 5.4934,11.049 8.4375,16.469 2.9442,5.4198 6.0242,10.773 9.2188,16.031 3.1946,5.2572 6.5006,10.444 9.9375,15.531 3.4369,5.0873 7.0163,10.059 10.688,14.969 3.6712,4.9086 7.4462,9.7459 11.344,14.469 3.8976,4.7228 7.9154,9.3465 12.031,13.875 4.1159,4.5285 8.3301,8.9547 12.656,13.281 4.3262,4.3259 8.7528,8.5403 13.281,12.656 4.5285,4.1159 9.1522,8.1341 13.875,12.031 4.7227,3.8978 9.5597,7.6726 14.469,11.344 4.9091,3.6712 9.8815,7.2506 14.969,10.688 5.0873,3.4369 10.274,6.7429 15.531,9.9375 5.2576,3.1946 10.612,6.2742 16.031,9.2188 5.4198,2.9438 10.895,5.7519 16.469,8.4374 5.574,2.6861 11.249,5.2369 16.969,7.6563 5.7202,2.4194 11.485,4.6988 17.344,6.8437 2.7997,1.0254 5.6701,1.9143 8.5,2.875 6.9951,1.9608 14.006,3.8715 21.062,5.6876 7.998,2.0571 16.02,4.0424 24.094,5.9062 6.8303,1.5767 13.708,3.0358 20.594,4.4688 1.2538,0.2606 2.4951,0.556 3.75,0.8124 8.1474,1.6676 16.313,3.2508 24.531,4.7188 8.2182,1.468 16.495,2.8271 24.781,4.0938 8.2864,1.2655 16.586,2.4377 24.938,3.5 8.3519,1.0612 16.742,2.0199 25.156,2.875 8.4148,0.8541 16.869,1.6046 25.344,2.25 8.1324,0.6183 16.283,1.1079 24.469,1.5312 0.6494,0 1.287,-0.062 1.9375,-0.062 7.3954,0 14.692,0.3998 21.938,1 81.289,6.7337 152.44,50.344 197.44,112.94 44.998,-62.594 116.15,-106.2 197.44,-112.94 7.2451,-0.6002 14.542,-1 21.938,-1 0.6505,0 1.2881,0.062 1.9375,0.062 8.1855,-0.4233 16.336,-0.9129 24.469,-1.5312 8.475,-0.6453 16.929,-1.3959 25.344,-2.25 8.4148,-0.8551 16.804,-1.8138 25.156,-2.875 8.3518,-1.0623 16.651,-2.2345 24.938,-3.5 8.2862,-1.2667 16.563,-2.6258 24.781,-4.0938 8.2182,-1.468 16.384,-3.0512 24.531,-4.7188 1.2549,-0.2563 2.4963,-0.5519 3.75,-0.8124 6.8856,-1.4329 13.764,-2.8922 20.594,-4.4688 8.074,-1.8639 16.096,-3.8491 24.094,-5.9062 7.0562,-1.8161 14.067,-3.7268 21.062,-5.6876 2.83,-0.9608 5.7003,-1.8496 8.5,-2.875 5.8586,-2.1449 11.624,-4.4243 17.344,-6.8437 5.7202,-2.4194 11.395,-4.9701 16.969,-7.6563 5.5737,-2.6856 11.049,-5.4937 16.469,-8.4374 5.4198,-2.9445 10.774,-6.0243 16.031,-9.2188 5.2573,-3.1947 10.444,-6.5007 15.531,-9.9375 5.0873,-3.437 10.06,-7.0164 14.969,-10.688 4.909,-3.6713 9.746,-7.4459 14.469,-11.344 4.7228,-3.8973 9.3465,-7.9154 13.875,-12.031 4.5285,-4.116 8.9551,-8.3304 13.281,-12.656 4.326,-4.3265 8.5403,-8.7529 12.656,-13.281 4.1159,-4.5286 8.1338,-9.1523 12.031,-13.875 3.8977,-4.7228 7.6726,-9.5601 11.344,-14.469 3.6712,-4.9095 7.2506,-9.8816 10.688,-14.969 3.4369,-5.0874 6.7429,-10.274 9.9375,-15.531 3.1946,-5.258 6.2745,-10.612 9.2188,-16.031 2.944,-5.4199 5.7516,-10.895 8.4374,-16.469 2.6858,-5.5743 5.2369,-11.249 7.6563,-16.969 2.4194,-5.7203 4.6987,-11.485 6.8437,-17.344 2.145,-5.8581 4.1687,-11.793 6.0313,-17.781 1.8627,-5.9887 3.584,-12.046 5.1563,-18.156 1.5722,-6.111 2.9759,-12.275 4.25,-18.5 1.2736,-6.2252 2.4076,-12.513 3.375,-18.844 0.9672,-6.3312 1.7845,-12.727 2.4374,-19.156 0.6531,-6.4293 1.1383,-12.887 1.4688,-19.406 0.3305,-6.5195 0.5,-13.086 0.5,-19.688 0,-6.6016 -0.1695,-13.168 -0.5,-19.688 -0.3305,-6.5195 -0.8157,-12.977 -1.4688,-19.406 -0.6529,-6.4293 -1.4702,-12.825 -2.4374,-19.156 -0.9674,-6.3312 -2.1014,-12.619 -3.375,-18.844 -1.274,-6.225 -2.6779,-12.389 -4.25,-18.5 -1.5725,-6.1108 -3.2936,-12.168 -5.1563,-18.156 -1.8626,-5.9887 -3.8862,-11.923 -6.0313,-17.781 -2.145,-5.8584 -4.4243,-11.624 -6.8437,-17.344 -2.4194,-5.7203 -4.9703,-11.395 -7.6563,-16.969 -2.6857,-5.574 -5.4933,-11.049 -8.4374,-16.469 -2.6568,-4.8905 -5.4518,-9.7102 -8.3126,-14.469 -7.0815,-9.4541 -13.718,-19.266 -19.719,-29.5 -27.374,-46.682 -43.125,-101 -43.125,-159.03 0,-117.74 64.621,-220.38 160.31,-274.44 l -303.75,-268.38 c -56.769,55.377 -133.8,90 -219.38,90 -85.284,0 -162.66,-34.95 -219.38,-90 -56.718,55.05 -134.09,90 -219.38,90 -85.57,0 -162.61,-34.623 -219.38,-90 z m 438.75,140.62 c 9.315,0 16.875,7.56 16.875,16.875 0,9.315 -7.56,16.875 -16.875,16.875 -9.315,0 -16.875,-7.56 -16.875,-16.875 0,-9.315 7.56,-16.875 16.875,-16.875 z m 0,1080 c 9.315,0 16.875,7.56 16.875,16.875 0,9.315 -7.56,16.875 -16.875,16.875 -9.315,0 -16.875,-7.56 -16.875,-16.875 0,-9.315 7.56,-16.875 16.875,-16.875 z" + inkscape:connector-curvature="0" + id="path2939-8-9" + style="fill:#ffffff;stroke:#000000;stroke-width:0.89999998;stroke-miterlimit:4;stroke-dasharray:none" /> + </g> + <rect + width="36.103001" + height="33.429001" + rx="37.5" + ry="33.429001" + x="369.06" + y="217.97" + id="rect3047" + style="fill:#ffffff;fill-rule:nonzero" /> + <rect + width="29.417999" + height="26.743" + rx="16.5" + ry="13.929" + x="371.73001" + y="645.85999" + id="rect3049" + style="fill:#ffffff;fill-rule:nonzero" /> + </g> + </g> + <g + id="routenum" + style="font-size:440.29998779px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;font-family:Roadgeek 2005 Series B"> + <path + d="m 164.9,151.54 h 26.444 v 198.01 h 19.564 v 26.444 h -19.564 v 69.012 H 164.9 V 375.994 H 81.699 V 349.55 L 164.9,151.54 m 0,198.01 V 218.62 L 110.292,349.55 H 164.9" + inkscape:connector-curvature="0" + id="path2993" /> + <path + d="m 300.97,145.73 c 14.189,3e-4 26.229,5.2317 36.118,15.694 6.4496,6.7366 10.893,16.053 13.329,27.949 6.5929,31.102 9.8894,67.364 9.8896,108.79 -1.4e-4,41.565 -3.2967,77.898 -9.8896,109 -2.8667,13.903 -8.5281,24.437 -16.984,31.604 -9.4597,8.0263 -20.567,12.039 -33.323,12.039 -14.906,-10e-6 -27.304,-5.2314 -37.193,-15.694 -6.3064,-6.7364 -10.678,-16.053 -13.114,-27.949 -6.5931,-30.959 -9.8896,-67.22 -9.8896,-108.79 -2e-5,-41.135 3.2965,-77.468 9.8896,-109 2.8665,-13.902 8.5279,-24.509 16.984,-31.819 9.4595,-7.8827 20.854,-11.824 34.183,-11.824 m -0.42998,31.174 c -13.186,2.7e-4 -21.427,9.6032 -24.724,28.809 -1.1467,7.0232 -2.7233,20.353 -4.7298,39.988 -1.72,17.199 -2.5799,34.614 -2.5799,52.243 -5e-5,20.496 1.4332,43.428 4.2998,68.797 2.5798,22.789 5.303,36.548 8.1696,41.278 4.873,7.7397 11.251,11.61 19.134,11.609 12.899,3e-5 20.997,-9.6029 24.294,-28.809 1.2898,-7.3096 2.8664,-20.639 4.7298,-39.988 1.7198,-17.199 2.5798,-34.757 2.5799,-52.673 -1.2e-4,-23.075 -2.0784,-51.239 -6.2347,-84.491 -1.4334,-12.326 -3.5116,-20.71 -6.2347,-25.154 -4.7299,-7.7394 -10.965,-11.609 -18.704,-11.609" + inkscape:connector-curvature="0" + id="path2995" /> + <path + d="m 466.27,151.54 h 26.444 v 198.01 h 19.564 v 26.444 h -19.564 v 69.012 H 466.27 V 375.994 H 383.069 V 349.55 L 466.27,151.54 m 0,198.01 V 218.62 l -54.608,130.93 h 54.608" + inkscape:connector-curvature="0" + id="path2997" /> + </g> +</svg> diff --git a/hyrax/app/assets/javascripts/application.js b/hyrax/app/assets/javascripts/application.js new file mode 100644 index 00000000..40590c10 --- /dev/null +++ b/hyrax/app/assets/javascripts/application.js @@ -0,0 +1,26 @@ +// This is a manifest file that'll be compiled into application.js, which will include all the files +// listed below. +// +// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, or any plugin's +// vendor/assets/javascripts directory can be referenced here using a relative path. +// +// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the +// compiled file. JavaScript code in this file should be added after the last require_* statement. +// +// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details +// about supported directives. +// +//= +//= require activestorage +//= require turbolinks +// +// Required by Blacklight +//= require jquery +//= require jquery_ujs +//= require dataTables/jquery.dataTables +//= require dataTables/bootstrap/3/jquery.dataTables.bootstrap +//= require blacklight/blacklight + +//= require_tree . +//= require hyrax + diff --git a/hyrax/app/assets/javascripts/blacklight_gallery.js b/hyrax/app/assets/javascripts/blacklight_gallery.js new file mode 100644 index 00000000..992a7d4d --- /dev/null +++ b/hyrax/app/assets/javascripts/blacklight_gallery.js @@ -0,0 +1 @@ +//= require blacklight_gallery/default \ No newline at end of file diff --git a/hyrax/app/assets/javascripts/cable.js b/hyrax/app/assets/javascripts/cable.js new file mode 100644 index 00000000..739aa5f0 --- /dev/null +++ b/hyrax/app/assets/javascripts/cable.js @@ -0,0 +1,13 @@ +// Action Cable provides the framework to deal with WebSockets in Rails. +// You can generate new channels where WebSocket features live using the `rails generate channel` command. +// +//= require action_cable +//= require_self +//= require_tree ./channels + +(function() { + this.App || (this.App = {}); + + App.cable = ActionCable.createConsumer(); + +}).call(this); diff --git a/hyrax/app/assets/javascripts/channels/.keep b/hyrax/app/assets/javascripts/channels/.keep new file mode 100644 index 00000000..e69de29b diff --git a/hyrax/app/assets/javascripts/openseadragon.js b/hyrax/app/assets/javascripts/openseadragon.js new file mode 100644 index 00000000..2ab91a9f --- /dev/null +++ b/hyrax/app/assets/javascripts/openseadragon.js @@ -0,0 +1,2 @@ +//= require openseadragon/openseadragon +//= require openseadragon/rails \ No newline at end of file diff --git a/hyrax/app/assets/stylesheets/application.css b/hyrax/app/assets/stylesheets/application.css new file mode 100644 index 00000000..2f002803 --- /dev/null +++ b/hyrax/app/assets/stylesheets/application.css @@ -0,0 +1,16 @@ +/* + * This is a manifest file that'll be compiled into application.css, which will include all the files + * listed below. + * + * Any CSS and SCSS file within this directory, lib/assets/stylesheets, or any plugin's + * vendor/assets/stylesheets directory can be referenced here using a relative path. + * + * You're free to add application-wide styles to this file and they'll appear at the bottom of the + * compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS + * files in this directory. Styles in this file should be added after the last require_* statement. + * It is generally better to create a new file per style scope. + * + *= require_tree . + *= require dataTables/bootstrap/3/jquery.dataTables.bootstrap + *= require_self + */ diff --git a/hyrax/app/assets/stylesheets/hyrax.scss b/hyrax/app/assets/stylesheets/hyrax.scss new file mode 100644 index 00000000..a43b9675 --- /dev/null +++ b/hyrax/app/assets/stylesheets/hyrax.scss @@ -0,0 +1,17 @@ +/* ... + *= require jquery-ui + *= require select2 + *= require_self +*/ + +@import "bootstrap-sprockets"; +@import "bootstrap-default-overrides"; +@import 'bootstrap'; +@import 'blacklight/blacklight'; +@import "font-awesome"; +@import "blacklight_gallery/gallery"; +@import "blacklight_gallery/masonry"; +@import "blacklight_gallery/slideshow"; +@import "blacklight_gallery/osd_viewer"; +@import 'hyrax/hyrax'; +@import 'hyrax/login_signup'; diff --git a/hyrax/app/assets/stylesheets/openseadragon.css b/hyrax/app/assets/stylesheets/openseadragon.css new file mode 100644 index 00000000..c1efc39f --- /dev/null +++ b/hyrax/app/assets/stylesheets/openseadragon.css @@ -0,0 +1,3 @@ +/* + *= require openseadragon/openseadragon + */ \ No newline at end of file diff --git a/hyrax/app/channels/application_cable/channel.rb b/hyrax/app/channels/application_cable/channel.rb new file mode 100644 index 00000000..d6726972 --- /dev/null +++ b/hyrax/app/channels/application_cable/channel.rb @@ -0,0 +1,4 @@ +module ApplicationCable + class Channel < ActionCable::Channel::Base + end +end diff --git a/hyrax/app/channels/application_cable/connection.rb b/hyrax/app/channels/application_cable/connection.rb new file mode 100644 index 00000000..0ff5442f --- /dev/null +++ b/hyrax/app/channels/application_cable/connection.rb @@ -0,0 +1,4 @@ +module ApplicationCable + class Connection < ActionCable::Connection::Base + end +end diff --git a/hyrax/app/controllers/application_controller.rb b/hyrax/app/controllers/application_controller.rb new file mode 100644 index 00000000..8b869ca8 --- /dev/null +++ b/hyrax/app/controllers/application_controller.rb @@ -0,0 +1,14 @@ +class ApplicationController < ActionController::Base + helper Openseadragon::OpenseadragonHelper + # Adds a few additional behaviors into the application controller + include Blacklight::Controller + skip_after_action :discard_flash_if_xhr + include Hydra::Controller::ControllerBehavior + + # Adds Hyrax behaviors into the application controller + include Hyrax::Controller + include Hyrax::ThemedLayoutController + with_themed_layout '1_column' + + +end diff --git a/hyrax/app/controllers/catalog_controller.rb b/hyrax/app/controllers/catalog_controller.rb new file mode 100644 index 00000000..36404761 --- /dev/null +++ b/hyrax/app/controllers/catalog_controller.rb @@ -0,0 +1,306 @@ +# frozen_string_literal: true +class CatalogController < ApplicationController + include Hydra::Catalog + include Hydra::Controller::ControllerBehavior + + # This filter applies the hydra access controls + before_action :enforce_show_permissions, only: :show + # Allow all search options when in read-only mode + skip_before_action :check_read_only + + def self.uploaded_field + "system_create_dtsi" + end + + def self.modified_field + "system_modified_dtsi" + end + + configure_blacklight do |config| + config.view.gallery.partials = [:index_header, :index] + config.view.masonry.partials = [:index] + config.view.slideshow.partials = [:index] + + + config.show.tile_source_field = :content_metadata_image_iiif_info_ssm + config.show.partials.insert(1, :openseadragon) + config.search_builder_class = Hyrax::CatalogSearchBuilder + + # Show gallery view + config.view.gallery.partials = [:index_header, :index] + config.view.slideshow.partials = [:index] + + # Because too many times on Samvera tech people raise a problem regarding a failed query to SOLR. + # Often, it's because they inadvertently exceeded the character limit of a GET request. + config.http_method = :post + + ## Default parameters to send to solr for all search-like requests. See also SolrHelper#solr_search_params + config.default_solr_params = { + qt: "search", + rows: 10, + qf: "title_tesim description_tesim creator_tesim keyword_tesim" + } + + # solr field configuration for document/show views + config.index.title_field = "title_tesim" + config.index.display_type_field = "has_model_ssim" + config.index.thumbnail_field = 'thumbnail_path_ss' + + # solr fields that will be treated as facets by the blacklight application + # The ordering of the field names is the order of the display + config.add_facet_field "human_readable_type_sim", label: "Type", limit: 5 + config.add_facet_field "resource_type_sim", label: "Resource Type", limit: 5 + config.add_facet_field "creator_sim", limit: 5 + config.add_facet_field "contributor_sim", label: "Contributor", limit: 5 + config.add_facet_field "keyword_sim", limit: 5 + config.add_facet_field "subject_sim", limit: 5 + config.add_facet_field "language_sim", limit: 5 + config.add_facet_field "based_near_label_sim", limit: 5 + config.add_facet_field "publisher_sim", limit: 5 + config.add_facet_field "file_format_sim", limit: 5 + config.add_facet_field "member_of_collection_ids_ssim", limit: 5, label: 'Collections', helper_method: :collection_title_by_id + + # The generic_type and depositor are not displayed on the facet list + # They are used to give a label to the filters that comes from the user profile + config.add_facet_field "generic_type_sim", if: false + config.add_facet_field "depositor_ssim", label: "Depositor", if: false + + # Have BL send all facet field names to Solr, which has been the default + # previously. Simply remove these lines if you'd rather use Solr request + # handler defaults, or have no facets. + config.add_facet_fields_to_solr_request! + + # solr fields to be displayed in the index (search results) view + # The ordering of the field names is the order of the display + config.add_index_field "title_tesim", label: "Title", itemprop: 'name', if: false + config.add_index_field "description_tesim", itemprop: 'description', helper_method: :iconify_auto_link + config.add_index_field "keyword_tesim", itemprop: 'keywords', link_to_search: "keyword_sim" + config.add_index_field "subject_tesim", itemprop: 'about', link_to_search: "subject_sim" + config.add_index_field "creator_tesim", itemprop: 'creator', link_to_search: "creator_sim" + config.add_index_field "contributor_tesim", itemprop: 'contributor', link_to_search: "contributor_sim" + config.add_index_field "proxy_depositor_ssim", label: "Depositor", helper_method: :link_to_profile + config.add_index_field "depositor_tesim", label: "Owner", helper_method: :link_to_profile + config.add_index_field "publisher_tesim", itemprop: 'publisher', link_to_search: "publisher_sim" + config.add_index_field "based_near_label_tesim", itemprop: 'contentLocation', link_to_search: "based_near_label_sim" + config.add_index_field "language_tesim", itemprop: 'inLanguage', link_to_search: "language_sim" + config.add_index_field "date_uploaded_dtsi", itemprop: 'datePublished', helper_method: :human_readable_date + config.add_index_field "date_modified_dtsi", itemprop: 'dateModified', helper_method: :human_readable_date + config.add_index_field "date_created_tesim", itemprop: 'dateCreated' + config.add_index_field "rights_statement_tesim", helper_method: :rights_statement_links + config.add_index_field "license_tesim", helper_method: :license_links + config.add_index_field "resource_type_tesim", label: "Resource Type", link_to_search: "resource_type_sim" + config.add_index_field "file_format_tesim", link_to_search: "file_format_sim" + config.add_index_field "identifier_tesim", helper_method: :index_field_link, field_name: 'identifier' + config.add_index_field Hydra.config.permissions.embargo.release_date, label: "Embargo release date", helper_method: :human_readable_date + config.add_index_field Hydra.config.permissions.lease.expiration_date, label: "Lease expiration date", helper_method: :human_readable_date + + # solr fields to be displayed in the show (single result) view + # The ordering of the field names is the order of the display + config.add_show_field "title_tesim" + config.add_show_field "description_tesim" + config.add_show_field "keyword_tesim" + config.add_show_field "subject_tesim" + config.add_show_field "creator_tesim" + config.add_show_field "contributor_tesim" + config.add_show_field "publisher_tesim" + config.add_show_field "based_near_label_tesim" + config.add_show_field "language_tesim" + config.add_show_field "date_uploaded_tesim" + config.add_show_field "date_modified_tesim" + config.add_show_field "date_created_tesim" + config.add_show_field "rights_statement_tesim" + config.add_show_field "license_tesim" + config.add_show_field "resource_type_tesim", label: "Resource Type" + config.add_show_field "format_tesim" + config.add_show_field "identifier_tesim" + + # "fielded" search configuration. Used by pulldown among other places. + # For supported keys in hash, see rdoc for Blacklight::SearchFields + # + # Search fields will inherit the :qt solr request handler from + # config[:default_solr_parameters], OR can specify a different one + # with a :qt key/value. Below examples inherit, except for subject + # that specifies the same :qt as default for our own internal + # testing purposes. + # + # The :key is what will be used to identify this BL search field internally, + # as well as in URLs -- so changing it after deployment may break bookmarked + # urls. A display label will be automatically calculated from the :key, + # or can be specified manually to be different. + # + # This one uses all the defaults set by the solr request handler. Which + # solr request handler? The one set in config[:default_solr_parameters][:qt], + # since we aren't specifying it otherwise. + config.add_search_field('all_fields', label: 'All Fields') do |field| + all_names = config.show_fields.values.map(&:field).join(" ") + title_name = "title_tesim" + field.solr_parameters = { + qf: "#{all_names} file_format_tesim all_text_timv", + pf: title_name.to_s + } + end + + # Now we see how to over-ride Solr request handler defaults, in this + # case for a BL "search field", which is really a dismax aggregate + # of Solr search fields. + # creator, title, description, publisher, date_created, + # subject, language, resource_type, format, identifier, based_near, + config.add_search_field('contributor') do |field| + # solr_parameters hash are sent to Solr as ordinary url query params. + + # :solr_local_parameters will be sent using Solr LocalParams + # syntax, as eg {! qf=$title_qf }. This is neccesary to use + # Solr parameter de-referencing like $title_qf. + # See: http://wiki.apache.org/solr/LocalParams + solr_name = "contributor_tesim" + field.solr_local_parameters = { + qf: solr_name, + pf: solr_name + } + end + + config.add_search_field('creator') do |field| + solr_name = "creator_tesim" + field.solr_local_parameters = { + qf: solr_name, + pf: solr_name + } + end + + config.add_search_field('title') do |field| + solr_name = "title_tesim" + field.solr_local_parameters = { + qf: solr_name, + pf: solr_name + } + end + + config.add_search_field('description') do |field| + field.label = "Description" + solr_name = "description_tesim" + field.solr_local_parameters = { + qf: solr_name, + pf: solr_name + } + end + + config.add_search_field('publisher') do |field| + solr_name = "publisher_tesim" + field.solr_local_parameters = { + qf: solr_name, + pf: solr_name + } + end + + config.add_search_field('date_created') do |field| + solr_name = "created_tesim" + field.solr_local_parameters = { + qf: solr_name, + pf: solr_name + } + end + + config.add_search_field('subject') do |field| + solr_name = "subject_tesim" + field.solr_local_parameters = { + qf: solr_name, + pf: solr_name + } + end + + config.add_search_field('language') do |field| + solr_name = "language_tesim" + field.solr_local_parameters = { + qf: solr_name, + pf: solr_name + } + end + + config.add_search_field('resource_type') do |field| + solr_name = "resource_type_tesim" + field.solr_local_parameters = { + qf: solr_name, + pf: solr_name + } + end + + config.add_search_field('format') do |field| + solr_name = "format_tesim" + field.solr_local_parameters = { + qf: solr_name, + pf: solr_name + } + end + + config.add_search_field('identifier') do |field| + solr_name = "id_tesim" + field.solr_local_parameters = { + qf: solr_name, + pf: solr_name + } + end + + config.add_search_field('based_near') do |field| + field.label = "Location" + solr_name = "based_near_label_tesim" + field.solr_local_parameters = { + qf: solr_name, + pf: solr_name + } + end + + config.add_search_field('keyword') do |field| + solr_name = "keyword_tesim" + field.solr_local_parameters = { + qf: solr_name, + pf: solr_name + } + end + + config.add_search_field('depositor') do |field| + solr_name = "depositor_ssim" + field.solr_local_parameters = { + qf: solr_name, + pf: solr_name + } + end + + config.add_search_field('rights_statement') do |field| + solr_name = "rights_statement_tesim" + field.solr_local_parameters = { + qf: solr_name, + pf: solr_name + } + end + + config.add_search_field('license') do |field| + solr_name = "license_tesim" + field.solr_local_parameters = { + qf: solr_name, + pf: solr_name + } + end + + # "sort results by" select (pulldown) + # label in pulldown is followed by the name of the SOLR field to sort by and + # whether the sort is ascending or descending (it must be asc or desc + # except in the relevancy case). + # label is key, solr field is value + config.add_sort_field "score desc, #{uploaded_field} desc", label: "relevance" + config.add_sort_field "#{uploaded_field} desc", label: "date uploaded \u25BC" + config.add_sort_field "#{uploaded_field} asc", label: "date uploaded \u25B2" + config.add_sort_field "#{modified_field} desc", label: "date modified \u25BC" + config.add_sort_field "#{modified_field} asc", label: "date modified \u25B2" + + # If there are more than this many search results, no spelling ("did you + # mean") suggestion is offered. + config.spell_max = 5 + end + + # disable the bookmark control from displaying in gallery view + # Hyrax doesn't show any of the default controls on the list view, so + # this method is not called in that context. + def render_bookmarks_control? + false + end +end diff --git a/hyrax/app/controllers/concerns/.keep b/hyrax/app/controllers/concerns/.keep new file mode 100644 index 00000000..e69de29b diff --git a/hyrax/app/controllers/hyrax/datasets_controller.rb b/hyrax/app/controllers/hyrax/datasets_controller.rb new file mode 100644 index 00000000..2e58b47c --- /dev/null +++ b/hyrax/app/controllers/hyrax/datasets_controller.rb @@ -0,0 +1,14 @@ +# Generated via +# `rails generate hyrax:work Dataset` +module Hyrax + # Generated controller for Dataset + class DatasetsController < ApplicationController + # Adds Hyrax behaviors to the controller. + include Hyrax::WorksControllerBehavior + include Hyrax::BreadcrumbsForWorks + self.curation_concern_type = ::Dataset + + # Use this line if you want to use a custom presenter + self.show_presenter = Hyrax::DatasetPresenter + end +end diff --git a/hyrax/app/forms/hyrax/dataset_form.rb b/hyrax/app/forms/hyrax/dataset_form.rb new file mode 100644 index 00000000..ff6de5d2 --- /dev/null +++ b/hyrax/app/forms/hyrax/dataset_form.rb @@ -0,0 +1,9 @@ +# Generated via +# `rails generate hyrax:work Dataset` +module Hyrax + # Generated form for Dataset + class DatasetForm < Hyrax::Forms::WorkForm + self.model_class = ::Dataset + self.terms += [:resource_type] + end +end diff --git a/hyrax/app/helpers/application_helper.rb b/hyrax/app/helpers/application_helper.rb new file mode 100644 index 00000000..de6be794 --- /dev/null +++ b/hyrax/app/helpers/application_helper.rb @@ -0,0 +1,2 @@ +module ApplicationHelper +end diff --git a/hyrax/app/helpers/hyrax_helper.rb b/hyrax/app/helpers/hyrax_helper.rb new file mode 100644 index 00000000..9b695c37 --- /dev/null +++ b/hyrax/app/helpers/hyrax_helper.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true +module HyraxHelper + include ::BlacklightHelper + include Hyrax::BlacklightOverride + include Hyrax::HyraxHelperBehavior +end diff --git a/hyrax/app/indexers/dataset_indexer.rb b/hyrax/app/indexers/dataset_indexer.rb new file mode 100644 index 00000000..f7a770b5 --- /dev/null +++ b/hyrax/app/indexers/dataset_indexer.rb @@ -0,0 +1,18 @@ +# Generated via +# `rails generate hyrax:work Dataset` +class DatasetIndexer < Hyrax::WorkIndexer + # This indexes the default metadata. You can remove it if you want to + # provide your own metadata and indexing. + include Hyrax::IndexesBasicMetadata + + # Fetch remote labels for based_near. You can remove this if you don't want + # this behavior + include Hyrax::IndexesLinkedMetadata + + # Uncomment this block if you want to add custom indexing behavior: + # def generate_solr_document + # super.tap do |solr_doc| + # solr_doc['my_custom_field_ssim'] = object.my_custom_property + # end + # end +end diff --git a/hyrax/app/jobs/application_job.rb b/hyrax/app/jobs/application_job.rb new file mode 100644 index 00000000..a009ace5 --- /dev/null +++ b/hyrax/app/jobs/application_job.rb @@ -0,0 +1,2 @@ +class ApplicationJob < ActiveJob::Base +end diff --git a/hyrax/app/mailers/application_mailer.rb b/hyrax/app/mailers/application_mailer.rb new file mode 100644 index 00000000..286b2239 --- /dev/null +++ b/hyrax/app/mailers/application_mailer.rb @@ -0,0 +1,4 @@ +class ApplicationMailer < ActionMailer::Base + default from: 'from@example.com' + layout 'mailer' +end diff --git a/hyrax/app/models/ability.rb b/hyrax/app/models/ability.rb new file mode 100644 index 00000000..43ef51e5 --- /dev/null +++ b/hyrax/app/models/ability.rb @@ -0,0 +1,33 @@ +class Ability + include Hydra::Ability + + include Hyrax::Ability + self.ability_logic += [ + :everyone_can_create_curation_concerns, + :create_content + ] + + # Define any customized permissions here. + def custom_permissions + # Limits deleting objects to a the admin user + # + # if current_user.admin? + # can [:destroy], ActiveFedora::Base + # end + + # Limits creating new objects to a specific group + # + # if user_groups.include? 'special_group' + # can [:create], ActiveFedora::Base + # end + if current_user.admin? + can [:create, :show, :add_user, :remove_user, :index, :edit, :update, :destroy], Role + end + end + + def create_content + # everyone who is logged in can create content + # return unless registered_user? + can :create, ::Dataset if current_user + end +end diff --git a/hyrax/app/models/application_record.rb b/hyrax/app/models/application_record.rb new file mode 100644 index 00000000..10a4cba8 --- /dev/null +++ b/hyrax/app/models/application_record.rb @@ -0,0 +1,3 @@ +class ApplicationRecord < ActiveRecord::Base + self.abstract_class = true +end diff --git a/hyrax/app/models/collection.rb b/hyrax/app/models/collection.rb new file mode 100644 index 00000000..4ca25e20 --- /dev/null +++ b/hyrax/app/models/collection.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# Generated by hyrax:models +class Collection < ActiveFedora::Base + include ::Hyrax::CollectionBehavior + # You can replace these metadata if they're not suitable + include Hyrax::BasicMetadata + self.indexer = Hyrax::CollectionWithBasicMetadataIndexer +end diff --git a/hyrax/app/models/concerns/.keep b/hyrax/app/models/concerns/.keep new file mode 100644 index 00000000..e69de29b diff --git a/hyrax/app/models/dataset.rb b/hyrax/app/models/dataset.rb new file mode 100644 index 00000000..836578ca --- /dev/null +++ b/hyrax/app/models/dataset.rb @@ -0,0 +1,14 @@ +# Generated via +# `rails generate hyrax:work Dataset` +class Dataset < ActiveFedora::Base + include ::Hyrax::WorkBehavior + + self.indexer = DatasetIndexer + # Change this to restrict which works can be added as a child. + # self.valid_child_concerns = [] + validates :title, presence: { message: 'Your work must have a title.' } + + # This must be included at the end, because it finalizes the metadata + # schema (by adding accepts_nested_attributes) + include ::Hyrax::BasicMetadata +end diff --git a/hyrax/app/models/file_set.rb b/hyrax/app/models/file_set.rb new file mode 100644 index 00000000..fc5d0577 --- /dev/null +++ b/hyrax/app/models/file_set.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true +# Generated by hyrax:models:install +class FileSet < ActiveFedora::Base + include ::Hyrax::FileSetBehavior +end diff --git a/hyrax/app/models/qa.rb b/hyrax/app/models/qa.rb new file mode 100644 index 00000000..58fe5cdd --- /dev/null +++ b/hyrax/app/models/qa.rb @@ -0,0 +1,5 @@ +module Qa + def self.table_name_prefix + 'qa_' + end +end diff --git a/hyrax/app/models/qa/local_authority.rb b/hyrax/app/models/qa/local_authority.rb new file mode 100644 index 00000000..a82a3eae --- /dev/null +++ b/hyrax/app/models/qa/local_authority.rb @@ -0,0 +1,2 @@ +class Qa::LocalAuthority < ApplicationRecord +end diff --git a/hyrax/app/models/qa/local_authority_entry.rb b/hyrax/app/models/qa/local_authority_entry.rb new file mode 100644 index 00000000..45cff8d3 --- /dev/null +++ b/hyrax/app/models/qa/local_authority_entry.rb @@ -0,0 +1,3 @@ +class Qa::LocalAuthorityEntry < ApplicationRecord + belongs_to :local_authority +end diff --git a/hyrax/app/models/search_builder.rb b/hyrax/app/models/search_builder.rb new file mode 100644 index 00000000..c8969859 --- /dev/null +++ b/hyrax/app/models/search_builder.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true +class SearchBuilder < Blacklight::SearchBuilder + include Blacklight::Solr::SearchBuilderBehavior + # Add a filter query to restrict the search to documents the current user has access to + include Hydra::AccessControlsEnforcement + include Hyrax::SearchFilters + + + ## + # @example Adding a new step to the processor chain + # self.default_processor_chain += [:add_custom_data_to_query] + # + # def add_custom_data_to_query(solr_parameters) + # solr_parameters[:custom] = blacklight_params[:user_value] + # end +end diff --git a/hyrax/app/models/solr_document.rb b/hyrax/app/models/solr_document.rb new file mode 100644 index 00000000..d8673266 --- /dev/null +++ b/hyrax/app/models/solr_document.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true +class SolrDocument + include Blacklight::Solr::Document + include Blacklight::Gallery::OpenseadragonSolrDocument + + # Adds Hyrax behaviors to the SolrDocument. + include Hyrax::SolrDocumentBehavior + + + # self.unique_key = 'id' + + # Email uses the semantic field mappings below to generate the body of an email. + SolrDocument.use_extension(Blacklight::Document::Email) + + # SMS uses the semantic field mappings below to generate the body of an SMS email. + SolrDocument.use_extension(Blacklight::Document::Sms) + + # DublinCore uses the semantic field mappings below to assemble an OAI-compliant Dublin Core document + # Semantic mappings of solr stored fields. Fields may be multi or + # single valued. See Blacklight::Document::SemanticFields#field_semantics + # and Blacklight::Document::SemanticFields#to_semantic_values + # Recommendation: Use field names from Dublin Core + use_extension(Blacklight::Document::DublinCore) + + # Do content negotiation for AF models. + + use_extension( Hydra::ContentNegotiation ) +end diff --git a/hyrax/app/models/user.rb b/hyrax/app/models/user.rb new file mode 100644 index 00000000..bd9c7c75 --- /dev/null +++ b/hyrax/app/models/user.rb @@ -0,0 +1,30 @@ +class User < ApplicationRecord + # Connects this user object to Hydra behaviors. + include Hydra::User + # Connects this user object to Role-management behaviors. + include Hydra::RoleManagement::UserRoles + + + # Connects this user object to Hyrax behaviors. + include Hyrax::User + include Hyrax::UserUsageStats + + + + if Blacklight::Utils.needs_attr_accessible? + attr_accessible :email, :password, :password_confirmation + end + # Connects this user object to Blacklights Bookmarks. + include Blacklight::User + # Include default devise modules. Others available are: + # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable + devise :database_authenticatable, :registerable, + :recoverable, :rememberable, :validatable + + # Method added by Blacklight; Blacklight uses #to_s on your + # user class to get a user-displayable login/identifier for + # the account. + def to_s + email + end +end diff --git a/hyrax/app/presenters/hyrax/dataset_presenter.rb b/hyrax/app/presenters/hyrax/dataset_presenter.rb new file mode 100644 index 00000000..5cca1d77 --- /dev/null +++ b/hyrax/app/presenters/hyrax/dataset_presenter.rb @@ -0,0 +1,6 @@ +# Generated via +# `rails generate hyrax:work Dataset` +module Hyrax + class DatasetPresenter < Hyrax::WorkShowPresenter + end +end diff --git a/hyrax/app/views/hyrax/datasets/_dataset.html.erb b/hyrax/app/views/hyrax/datasets/_dataset.html.erb new file mode 100644 index 00000000..074a62e9 --- /dev/null +++ b/hyrax/app/views/hyrax/datasets/_dataset.html.erb @@ -0,0 +1,2 @@ +<%# This is a search result view %> +<%= render 'catalog/document', document: dataset, document_counter: dataset_counter %> diff --git a/hyrax/app/views/layouts/application.html.erb b/hyrax/app/views/layouts/application.html.erb new file mode 100644 index 00000000..4806c22f --- /dev/null +++ b/hyrax/app/views/layouts/application.html.erb @@ -0,0 +1,15 @@ +<!DOCTYPE html> +<html> + <head> + <title>Hyrax3App</title> + <%= csrf_meta_tags %> + <%= csp_meta_tag %> + + <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %> + <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %> + </head> + + <body> + <%= yield %> + </body> +</html> diff --git a/hyrax/app/views/layouts/mailer.html.erb b/hyrax/app/views/layouts/mailer.html.erb new file mode 100644 index 00000000..cbd34d2e --- /dev/null +++ b/hyrax/app/views/layouts/mailer.html.erb @@ -0,0 +1,13 @@ +<!DOCTYPE html> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <style> + /* Email styles need to be inline */ + </style> + </head> + + <body> + <%= yield %> + </body> +</html> diff --git a/hyrax/app/views/layouts/mailer.text.erb b/hyrax/app/views/layouts/mailer.text.erb new file mode 100644 index 00000000..37f0bddb --- /dev/null +++ b/hyrax/app/views/layouts/mailer.text.erb @@ -0,0 +1 @@ +<%= yield %> diff --git a/hyrax/bin/bundle b/hyrax/bin/bundle new file mode 100755 index 00000000..f19acf5b --- /dev/null +++ b/hyrax/bin/bundle @@ -0,0 +1,3 @@ +#!/usr/bin/env ruby +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__) +load Gem.bin_path('bundler', 'bundle') diff --git a/hyrax/bin/rails b/hyrax/bin/rails new file mode 100755 index 00000000..5badb2fd --- /dev/null +++ b/hyrax/bin/rails @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +APP_PATH = File.expand_path('../config/application', __dir__) +require_relative '../config/boot' +require 'rails/commands' diff --git a/hyrax/bin/rake b/hyrax/bin/rake new file mode 100755 index 00000000..d87d5f57 --- /dev/null +++ b/hyrax/bin/rake @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +require_relative '../config/boot' +require 'rake' +Rake.application.run diff --git a/hyrax/bin/setup b/hyrax/bin/setup new file mode 100755 index 00000000..94fd4d79 --- /dev/null +++ b/hyrax/bin/setup @@ -0,0 +1,36 @@ +#!/usr/bin/env ruby +require 'fileutils' +include FileUtils + +# path to your application root. +APP_ROOT = File.expand_path('..', __dir__) + +def system!(*args) + system(*args) || abort("\n== Command #{args} failed ==") +end + +chdir APP_ROOT do + # This script is a starting point to setup your application. + # Add necessary setup steps to this file. + + puts '== Installing dependencies ==' + system! 'gem install bundler --conservative' + system('bundle check') || system!('bundle install') + + # Install JavaScript dependencies if using Yarn + # system('bin/yarn') + + # puts "\n== Copying sample files ==" + # unless File.exist?('config/database.yml') + # cp 'config/database.yml.sample', 'config/database.yml' + # end + + puts "\n== Preparing database ==" + system! 'bin/rails db:setup' + + puts "\n== Removing old logs and tempfiles ==" + system! 'bin/rails log:clear tmp:clear' + + puts "\n== Restarting application server ==" + system! 'bin/rails restart' +end diff --git a/hyrax/bin/spring b/hyrax/bin/spring new file mode 100755 index 00000000..d89ee495 --- /dev/null +++ b/hyrax/bin/spring @@ -0,0 +1,17 @@ +#!/usr/bin/env ruby + +# This file loads Spring without using Bundler, in order to be fast. +# It gets overwritten when you run the `spring binstub` command. + +unless defined?(Spring) + require 'rubygems' + require 'bundler' + + lockfile = Bundler::LockfileParser.new(Bundler.default_lockfile.read) + spring = lockfile.specs.detect { |spec| spec.name == 'spring' } + if spring + Gem.use_paths Gem.dir, Bundler.bundle_path.to_s, *Gem.path + gem 'spring', spring.version + require 'spring/binstub' + end +end diff --git a/hyrax/bin/update b/hyrax/bin/update new file mode 100755 index 00000000..58bfaed5 --- /dev/null +++ b/hyrax/bin/update @@ -0,0 +1,31 @@ +#!/usr/bin/env ruby +require 'fileutils' +include FileUtils + +# path to your application root. +APP_ROOT = File.expand_path('..', __dir__) + +def system!(*args) + system(*args) || abort("\n== Command #{args} failed ==") +end + +chdir APP_ROOT do + # This script is a way to update your development environment automatically. + # Add necessary update steps to this file. + + puts '== Installing dependencies ==' + system! 'gem install bundler --conservative' + system('bundle check') || system!('bundle install') + + # Install JavaScript dependencies if using Yarn + # system('bin/yarn') + + puts "\n== Updating database ==" + system! 'bin/rails db:migrate' + + puts "\n== Removing old logs and tempfiles ==" + system! 'bin/rails log:clear tmp:clear' + + puts "\n== Restarting application server ==" + system! 'bin/rails restart' +end diff --git a/hyrax/bin/yarn b/hyrax/bin/yarn new file mode 100755 index 00000000..460dd565 --- /dev/null +++ b/hyrax/bin/yarn @@ -0,0 +1,11 @@ +#!/usr/bin/env ruby +APP_ROOT = File.expand_path('..', __dir__) +Dir.chdir(APP_ROOT) do + begin + exec "yarnpkg", *ARGV + rescue Errno::ENOENT + $stderr.puts "Yarn executable was not detected in the system." + $stderr.puts "Download Yarn at https://yarnpkg.com/en/docs/install" + exit 1 + end +end diff --git a/hyrax/config.ru b/hyrax/config.ru new file mode 100644 index 00000000..f7ba0b52 --- /dev/null +++ b/hyrax/config.ru @@ -0,0 +1,5 @@ +# This file is used by Rack-based servers to start the application. + +require_relative 'config/environment' + +run Rails.application diff --git a/hyrax/config/analytics.yml b/hyrax/config/analytics.yml new file mode 100644 index 00000000..bd51d37e --- /dev/null +++ b/hyrax/config/analytics.yml @@ -0,0 +1,15 @@ +# +# You can manually fill in these values or use the ENV variables. +# +analytics: + google: + analytics_id: <%= ENV['GOOGLE_ANALYTICS_ID'] %> + app_name: <%= ENV['GOOGLE_OAUTH_APP_NAME'] %> + app_version: <%= ENV['GOOGLE_OAUTH_APP_VERSION'] %> + privkey_path: <%= ENV['GOOGLE_OAUTH_PRIVATE_KEY_PATH'] %> + privkey_secret: <%= ENV['GOOGLE_OAUTH_PRIVATE_KEY_SECRET'] %> + client_email: <%= ENV['GOOGLE_OAUTH_CLIENT_EMAIL'] %> + matomo: + base_url: <%= ENV['MATOMO_BASE_URL'] %> + site_id: <%= ENV['MATOMO_SITE_ID'] %> + auth_token: <%= ENV['MATOMO_AUTH_TOKEN'] %> diff --git a/hyrax/config/application.rb b/hyrax/config/application.rb new file mode 100644 index 00000000..4d487868 --- /dev/null +++ b/hyrax/config/application.rb @@ -0,0 +1,19 @@ +require_relative 'boot' + +require 'rails/all' + +# Require the gems listed in Gemfile, including any gems +# you've limited to :test, :development, or :production. +Bundler.require(*Rails.groups) + +module Hyrax3App + class Application < Rails::Application + # Initialize configuration defaults for originally generated Rails version. + config.load_defaults 5.2 + + # Settings in config/environments/* take precedence over those specified here. + # Application configuration can go into files in config/initializers + # -- all .rb files in that directory are automatically loaded after loading + # the framework and any gems in your application. + end +end diff --git a/hyrax/config/authorities/licenses.yml b/hyrax/config/authorities/licenses.yml new file mode 100644 index 00000000..89dd602a --- /dev/null +++ b/hyrax/config/authorities/licenses.yml @@ -0,0 +1,46 @@ +terms: + - id: http://creativecommons.org/licenses/by/3.0/us/ + term: Attribution 3.0 United States + active: false + - id: http://creativecommons.org/licenses/by-sa/3.0/us/ + term: Attribution-ShareAlike 3.0 United States + active: false + - id: http://creativecommons.org/licenses/by-nc/3.0/us/ + term: Attribution-NonCommercial 3.0 United States + active: false + - id: http://creativecommons.org/licenses/by-nd/3.0/us/ + term: Attribution-NoDerivs 3.0 United States + active: false + - id: http://creativecommons.org/licenses/by-nc-nd/3.0/us/ + term: Attribution-NonCommercial-NoDerivs 3.0 United States + active: false + - id: http://creativecommons.org/licenses/by-nc-sa/3.0/us/ + term: Attribution-NonCommercial-ShareAlike 3.0 United States + active: false + - id: http://www.europeana.eu/portal/rights/rr-r.html + term: All rights reserved + active: false + - id: https://creativecommons.org/licenses/by/4.0/ + term: Creative Commons BY Attribution 4.0 International + active: true + - id: https://creativecommons.org/licenses/by-sa/4.0/ + term: Creative Commons BY-SA Attribution-ShareAlike 4.0 International + active: true + - id: https://creativecommons.org/licenses/by-nd/4.0/ + term: Creative Commons BY-ND Attribution-NoDerivatives 4.0 International + active: true + - id: https://creativecommons.org/licenses/by-nc/4.0/ + term: Creative Commons BY-NC Attribution-NonCommercial 4.0 International + active: true + - id: https://creativecommons.org/licenses/by-nc-nd/4.0/ + term: Creative Commons BY-NC-ND Attribution-NonCommercial-NoDerivs 4.0 International + active: true + - id: https://creativecommons.org/licenses/by-nc-sa/4.0/ + term: Creative Commons BY-NC-SA Attribution-NonCommercial-ShareAlike 4.0 International + active: true + - id: http://creativecommons.org/publicdomain/zero/1.0/ + term: Creative Commons CC0 1.0 Universal + active: true + - id: http://creativecommons.org/publicdomain/mark/1.0/ + term: Creative Commons Public Domain Mark 1.0 + active: true diff --git a/hyrax/config/authorities/resource_types.yml b/hyrax/config/authorities/resource_types.yml new file mode 100644 index 00000000..69c22256 --- /dev/null +++ b/hyrax/config/authorities/resource_types.yml @@ -0,0 +1,41 @@ +terms: + - id: Article + term: Article + - id: Audio + term: Audio + - id: Book + term: Book + - id: Capstone Project + term: Capstone Project + - id: Conference Proceeding + term: Conference Proceeding + - id: Dataset + term: Dataset + - id: Dissertation + term: Dissertation + - id: Image + term: Image + - id: Journal + term: Journal + - id: Map or Cartographic Material + term: Map or Cartographic Material + - id: Masters Thesis + term: Masters Thesis + - id: Part of Book + term: Part of Book + - id: Poster + term: Poster + - id: Presentation + term: Presentation + - id: Project + term: Project + - id: Report + term: Report + - id: Research Paper + term: Research Paper + - id: Software or Program Code + term: Software or Program Code + - id: Video + term: Video + - id: Other + term: Other diff --git a/hyrax/config/authorities/rights_statements.yml b/hyrax/config/authorities/rights_statements.yml new file mode 100644 index 00000000..719e7576 --- /dev/null +++ b/hyrax/config/authorities/rights_statements.yml @@ -0,0 +1,37 @@ +terms: +- id: http://rightsstatements.org/vocab/InC/1.0/ + term: "In Copyright" + active: true +- id: http://rightsstatements.org/vocab/InC-OW-EU/1.0/ + term: "In Copyright - EU Orphan Work" + active: true +- id: http://rightsstatements.org/vocab/InC-EDU/1.0/ + term: "In Copyright - Educational Use Permitted" + active: true +- id: http://rightsstatements.org/vocab/InC-NC/1.0/ + term: "In Copyright - Non-Commercial Use Permitted" + active: true +- id: http://rightsstatements.org/vocab/InC-RUU/1.0/ + term: "In Copyright - Rights-holder(s) Unlocatable or Unidentifiable" + active: true +- id: http://rightsstatements.org/vocab/NoC-CR/1.0/ + term: "No Copyright - Contractual Restrictions" + active: true +- id: http://rightsstatements.org/vocab/NoC-NC/1.0/ + term: "No Copyright - Non-Commercial Use Only " + active: true +- id: http://rightsstatements.org/vocab/NoC-OKLR/1.0/ + term: "No Copyright - Other Known Legal Restrictions" + active: true +- id: http://rightsstatements.org/vocab/NoC-US/1.0/ + term: "No Copyright - United States" + active: true +- id: http://rightsstatements.org/vocab/CNE/1.0/ + term: "Copyright Not Evaluated" + active: true +- id: http://rightsstatements.org/vocab/UND/1.0/ + term: "Copyright Undetermined" + active: true +- id: http://rightsstatements.org/vocab/NKC/1.0/ + term: "No Known Copyright" + active: true diff --git a/hyrax/config/blacklight.yml b/hyrax/config/blacklight.yml new file mode 100644 index 00000000..026ff8a5 --- /dev/null +++ b/hyrax/config/blacklight.yml @@ -0,0 +1,9 @@ +development: + adapter: solr + url: <%= ENV['SOLR_URL_SCHEME'] || 'http' %>://<%= ENV['SOLR_HOST'] || '127.0.0.1' %>:<%= ENV['SOLR_PORT'] || '8983' %>/solr/hyrax_production +test: &test + adapter: solr + url: <%= ENV['SOLR_URL_SCHEME'] || 'http' %>://<%= ENV['SOLR_HOST'] || '127.0.0.1' %>:<%= ENV['SOLR_TEST_PORT'] || '8985' %>/solr/hydra-test +production: + adapter: solr + url: <%= ENV['SOLR_URL_SCHEME'] || 'http' %>://<%= ENV['SOLR_HOST'] || 'solr' %>:<%= ENV['SOLR_PORT'] || '8983' %>/solr/hyrax_production diff --git a/hyrax/config/boot.rb b/hyrax/config/boot.rb new file mode 100644 index 00000000..b9e460ce --- /dev/null +++ b/hyrax/config/boot.rb @@ -0,0 +1,4 @@ +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__) + +require 'bundler/setup' # Set up gems listed in the Gemfile. +require 'bootsnap/setup' # Speed up boot time by caching expensive operations. diff --git a/hyrax/config/browse_everything_providers.yml b/hyrax/config/browse_everything_providers.yml new file mode 100644 index 00000000..48b3d11e --- /dev/null +++ b/hyrax/config/browse_everything_providers.yml @@ -0,0 +1,24 @@ +# +# To make browse-everything aware of a provider, uncomment the info for that provider and add your API key information. +# The file_system provider can be a path to any directory on the server where your application is running. +# +# file_system: +# home: /home/rdms +# dropbox: +# client_id: YOUR_DROPBOX_APP_KEY +# client_secret: YOUR_DROPBOX_APP_SECRET +# download_directory: tmp/ +# box: +# client_id: YOUR_BOX_CLIENT_ID +# client_secret: YOUR_BOX_CLIENT_SECRET +# google_drive: +# client_id: YOUR_GOOGLE_API_CLIENT_ID +# client_secret: YOUR_GOOGLE_API_CLIENT_SECRET +# s3: +# bucket: YOUR_AWS_S3_BUCKET +# response_type: signed_url # set to :public_url for public urls or :s3_uri for an s3://BUCKET/KEY uri +# expires_in: 14400 # for signed_url response_type, number of seconds url will be valid for. +# app_key: YOUR_AWS_S3_KEY # :app_key, :app_secret, and :region can be specified +# app_secret: YOUR_AWS_S3_SECRET # explicitly here, or left out to use system-configured +# region: YOUR_AWS_S3_REGION # defaults. +# See https://aws.amazon.com/blogs/security/a-new-and-standardized-way-to-manage-credentials-in-the-aws-sdks/ diff --git a/hyrax/config/cable.yml b/hyrax/config/cable.yml new file mode 100644 index 00000000..b4ec06e7 --- /dev/null +++ b/hyrax/config/cable.yml @@ -0,0 +1,12 @@ +development: + adapter: redis + url: redis://<%= ENV['REDIS_HOST'] || 'localhost' %>:<%= ENV['REDIS_PORT'] || '6379' %>/1 + channel_prefix: hyrax_development + +test: + adapter: async + +production: + adapter: redis + url: redis://<%= ENV['REDIS_HOST'] || 'redis' %>:<%= ENV['REDIS_PORT'] || '6379' %>/1 + channel_prefix: hyrax_production diff --git a/hyrax/config/credentials.yml.enc b/hyrax/config/credentials.yml.enc new file mode 100644 index 00000000..2edb4808 --- /dev/null +++ b/hyrax/config/credentials.yml.enc @@ -0,0 +1 @@ +OWHyZEsMiVoVeJ4mePKMQ3t4hDJtqhpjFzfAVO8A67JQ2EPmgYep4As1s+4KNcKi5T4d9N54tZ/tztZWrshC1Jor+YYGoybNbl1H3kJ8/7hFBVxhJBKMjJBKD0zCWl0rX5yxDo1S6a5T38toZErp148dj3Ns2Ffd4hYzckB+AXUMmLXWdX7hLVs5s5trMoY/2UDc3xpLqNgpZ72K8uipWueWeRdx6gqAAWOINlLSHq4qROKYbkG59nLeR7Lohe4y6WWNUDRsBkPFShuacOgdXENif00fYmpApzG9g9ZbdzQil2B+P36efesyX4JCw9J4b+SABFBKxrHetoaeqzYgCf9NK00n8ezBWHRWurqPxa+YVfsg6apDJwFGciFh5tZ6VHsqOPN4FTOMej3HIe7IOnhZs946be5yfENW--Oqjd3ANl5VLtNV58--rVBRSosL17TnXSxKqDR2ag== \ No newline at end of file diff --git a/hyrax/config/database.yml b/hyrax/config/database.yml new file mode 100644 index 00000000..65f4d0e5 --- /dev/null +++ b/hyrax/config/database.yml @@ -0,0 +1,23 @@ +default: &default + adapter: postgresql + pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> + timeout: 5000 + encoding: unicode + host: <%= ENV['POSTGRES_HOST_APP'] || 'db' %> + port: <%= ENV['POSTGRES_PORT'] || '5432' %> + username: <%= ENV['POSTGRES_USER'] || 'postgres' %> + password: <%= ENV['POSTGRES_PASSWORD'] || 'password' %> + +development: + <<: *default + database: <%= ENV['POSTGRES_DB_APP'] || 'hyrax_development' %> + +test: + <<: *default + database: <%= ENV['POSTGRES_DB_TEST'] || 'hyrax_test' %> + +production: + <<: *default + database: <%= ENV['POSTGRES_DB_APP'] || 'hyrax_production' %> + pool: 50 + diff --git a/hyrax/config/environment.rb b/hyrax/config/environment.rb new file mode 100644 index 00000000..426333bb --- /dev/null +++ b/hyrax/config/environment.rb @@ -0,0 +1,5 @@ +# Load the Rails application. +require_relative 'application' + +# Initialize the Rails application. +Rails.application.initialize! diff --git a/hyrax/config/environments/development.rb b/hyrax/config/environments/development.rb new file mode 100644 index 00000000..298ac03b --- /dev/null +++ b/hyrax/config/environments/development.rb @@ -0,0 +1,72 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # In the development environment your application's code is reloaded on + # every request. This slows down response time but is perfect for development + # since you don't have to restart the web server when you make code changes. + config.cache_classes = false + + # Do not eager load code on boot. + config.eager_load = false + + # Show full error reports. + config.consider_all_requests_local = true + + # Enable/disable caching. By default caching is disabled. + # Run rails dev:cache to toggle caching. + if Rails.root.join('tmp', 'caching-dev.txt').exist? + config.action_controller.perform_caching = true + + config.cache_store = :memory_store + config.public_file_server.headers = { + 'Cache-Control' => "public, max-age=#{2.days.to_i}" + } + else + config.action_controller.perform_caching = false + + config.cache_store = :null_store + end + + # Store uploaded files on the local file system (see config/storage.yml for options) + config.active_storage.service = :local + + # Don't care if the mailer can't send. + config.action_mailer.raise_delivery_errors = false + + config.action_mailer.perform_caching = false + + # Print deprecation notices to the Rails logger. + config.active_support.deprecation = :log + + # Raise an error on page load if there are pending migrations. + config.active_record.migration_error = :page_load + + # Highlight code that triggered database queries in logs. + config.active_record.verbose_query_logs = true + + # Debug mode disables concatenation and preprocessing of assets. + # This option may cause significant delays in view rendering with a large + # number of complex assets. + config.assets.debug = false + + # Suppress logger output for asset requests. + config.assets.quiet = true + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true + + # Use an evented file watcher to asynchronously detect changes in source code, + # routes, locales, etc. This feature depends on the listen gem. + config.file_watcher = ActiveSupport::EventedFileUpdateChecker + + config.force_ssl = false + if ENV['APP_HOST'].present? + Rails.application.routes.default_url_options = {protocol: 'http', host: ENV['APP_HOST']} + Hyrax::Engine.routes.default_url_options = {protocol: 'http', host: ENV['APP_HOST']} + config.application_url = "http://#{ENV['APP_HOST']}" + else + Rails.application.routes.default_url_options = {protocol: 'http', host: "localhost"} + Hyrax::Engine.routes.default_url_options = {protocol: 'http', host: "localhost"} + config.application_url = "http://localhost" + end +end diff --git a/hyrax/config/environments/production.rb b/hyrax/config/environments/production.rb new file mode 100644 index 00000000..52dfc44d --- /dev/null +++ b/hyrax/config/environments/production.rb @@ -0,0 +1,115 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # Added for Rails 5.2 + config.secret_key_base = ENV['SECRET_KEY_BASE_PRODUCTION'] + + # Code is not reloaded between requests. + config.cache_classes = true + + # Eager load code on boot. This eager loads most of Rails and + # your application in memory, allowing both threaded web servers + # and those relying on copy on write to perform better. + # Rake tasks automatically ignore this option for performance. + config.eager_load = true + + # Full error reports are disabled and caching is turned on. + config.consider_all_requests_local = false + config.action_controller.perform_caching = true + + # Ensures that a master key has been made available in either ENV["RAILS_MASTER_KEY"] + # or in config/master.key. This key is used to decrypt credentials (and other encrypted files). + # config.require_master_key = true + + # Disable serving static files from the `/public` folder by default since + # Apache or NGINX already handles this. + if ENV['RAILS_SERVE_STATIC_FILES'].present? + config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'] + else + config.public_file_server.enabled = true + end + + # Compress JavaScripts and CSS. + config.assets.js_compressor = :uglifier + # config.assets.css_compressor = :sass + + # Do not fallback to assets pipeline if a precompiled asset is missed. + config.assets.compile = false + + # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb + + # Enable serving of images, stylesheets, and JavaScripts from an asset server. + # config.action_controller.asset_host = 'http://assets.example.com' + + # Specifies the header that your server uses for sending files. + # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache + # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX + + # Store uploaded files on the local file system (see config/storage.yml for options) + config.active_storage.service = :local + + # Mount Action Cable outside main process or domain + # config.action_cable.mount_path = nil + # config.action_cable.url = 'wss://example.com/cable' + # config.action_cable.allowed_request_origins = [ 'http://example.com', /http:\/\/example.*/ ] + + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + # config.force_ssl = true + + # Use the lowest log level to ensure availability of diagnostic information + # when problems arise. + config.log_level = :info + + # Prepend all log lines with the following tags. + config.log_tags = [ :request_id ] + + # Use a different cache store in production. + # config.cache_store = :mem_cache_store + + # Use a real queuing backend for Active Job (and separate queues per environment) + # config.active_job.queue_adapter = :resque + # config.active_job.queue_name_prefix = "rdms_#{Rails.env}" + + config.action_mailer.perform_caching = false + + # Ignore bad email addresses and do not raise email delivery errors. + # Set this to true and configure the email server for immediate delivery to raise delivery errors. + # config.action_mailer.raise_delivery_errors = false + + # Enable locale fallbacks for I18n (makes lookups for any locale fall back to + # the I18n.default_locale when a translation cannot be found). + config.i18n.fallbacks = true + + # Send deprecation notices to registered listeners. + config.active_support.deprecation = :notify + + # Use default logging formatter so that PID and timestamp are not suppressed. + config.log_formatter = ::Logger::Formatter.new + + # Use a different logger for distributed setups. + # require 'syslog/logger' + # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name') + + if ENV["RAILS_LOG_TO_STDOUT"].present? + logger = ActiveSupport::Logger.new(STDOUT) + logger.formatter = config.log_formatter + config.logger = ActiveSupport::TaggedLogging.new(logger) + end + + # Do not dump schema after migrations. + config.active_record.dump_schema_after_migration = false + + if ENV["RAILS_FORCE_SSL"].present? && (ENV["RAILS_FORCE_SSL"].to_s.downcase == 'false') then + config.force_ssl = false + Rails.application.routes.default_url_options = \ + Hyrax::Engine.routes.default_url_options = \ + {protocol: 'http', host: ENV['APP_HOST']} + config.application_url = "http://#{ENV['APP_HOST']}" + else + config.force_ssl = true #default if nothing specified is more secure. + Rails.application.routes.default_url_options = \ + Hyrax::Engine.routes.default_url_options = \ + {protocol: 'https', host: ENV['APP_HOST']} + config.application_url = "https://#{ENV['APP_HOST']}" + end +end diff --git a/hyrax/config/environments/test.rb b/hyrax/config/environments/test.rb new file mode 100644 index 00000000..77553f7e --- /dev/null +++ b/hyrax/config/environments/test.rb @@ -0,0 +1,56 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # The test environment is used exclusively to run your application's + # test suite. You never need to work with it otherwise. Remember that + # your test database is "scratch space" for the test suite and is wiped + # and recreated between test runs. Don't rely on the data there! + config.cache_classes = true + + # Do not eager load code on boot. This avoids loading your whole application + # just for the purpose of running a single test. If you are using a tool that + # preloads Rails for running tests, you may have to set it to true. + config.eager_load = false + + # Configure public file server for tests with Cache-Control for performance. + config.public_file_server.enabled = true + config.public_file_server.headers = { + 'Cache-Control' => "public, max-age=#{1.hour.to_i}" + } + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Raise exceptions instead of rendering exception templates. + config.action_dispatch.show_exceptions = false + + # Disable request forgery protection in test environment. + config.action_controller.allow_forgery_protection = false + + # Store uploaded files on the local file system in a temporary directory + config.active_storage.service = :test + + config.action_mailer.perform_caching = false + + # Tell Action Mailer not to deliver emails to the real world. + # The :test delivery method accumulates sent emails in the + # ActionMailer::Base.deliveries array. + config.action_mailer.delivery_method = :test + + # Print deprecation notices to the stderr. + config.active_support.deprecation = :stderr + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true + + if ENV['APP_HOST'].present? + Rails.application.routes.default_url_options = {protocol: 'http', host: ENV['APP_HOST']} + Hyrax::Engine.routes.default_url_options = {protocol: 'http', host: ENV['APP_HOST']} + config.application_url = "http://#{ENV['APP_HOST']}" + else + Rails.application.routes.default_url_options = {protocol: 'http', host: "localhost"} + Hyrax::Engine.routes.default_url_options = {protocol: 'http', host: "localhost"} + config.application_url = "http://localhost" + end +end diff --git a/hyrax/config/fcrepo_wrapper_test.yml b/hyrax/config/fcrepo_wrapper_test.yml new file mode 100644 index 00000000..77f79a6e --- /dev/null +++ b/hyrax/config/fcrepo_wrapper_test.yml @@ -0,0 +1,4 @@ +#config/fcrepo_wrapper_test.yml.sample +port: 8986 +enable_jms: false +fcrepo_home_dir: tmp/fcrepo4-test-data diff --git a/hyrax/config/fedora.yml b/hyrax/config/fedora.yml new file mode 100644 index 00000000..41b2f271 --- /dev/null +++ b/hyrax/config/fedora.yml @@ -0,0 +1,15 @@ +development: + user: fedoraAdmin + password: fedoraAdmin + url: <%= ENV['FEDORA_URL_SCHEME'] || 'http' %>://<%= ENV['FEDORA_HOST'] || 'localhost' %>:<%= ENV['FCREPO_DEVELOPMENT_PORT'] || 8984 %><%= ENV['FCREPO_PATH'] || '/rest' %> + base_path: /dev +test: + user: fedoraAdmin + password: fedoraAdmin + url: <%= ENV['FEDORA_URL_SCHEME'] || 'http' %>://<%= ENV['FEDORA_HOST'] || 'localhost' %>:<%= ENV['FEDORA_TEST_PORT'] || 8986 %><%= ENV['FCREPO_PATH'] || '/rest' %> + base_path: /test +production: + user: fedoraAdmin + password: fedoraAdmin + url: <%= ENV['FEDORA_URL_SCHEME'] || 'http' %>://<%= ENV['FEDORA_HOST'] || 'fcrepo' %>:<%= ENV['FEDORA_PORT'] || '8080' %><%= ENV['FCREPO_PATH'] || '/fcrepo/rest' %> + base_path: /hyrax_production \ No newline at end of file diff --git a/hyrax/config/initializers/application_controller_renderer.rb b/hyrax/config/initializers/application_controller_renderer.rb new file mode 100644 index 00000000..89d2efab --- /dev/null +++ b/hyrax/config/initializers/application_controller_renderer.rb @@ -0,0 +1,8 @@ +# Be sure to restart your server when you modify this file. + +# ActiveSupport::Reloader.to_prepare do +# ApplicationController.renderer.defaults.merge!( +# http_host: 'example.org', +# https: false +# ) +# end diff --git a/hyrax/config/initializers/assets.rb b/hyrax/config/initializers/assets.rb new file mode 100644 index 00000000..4b828e80 --- /dev/null +++ b/hyrax/config/initializers/assets.rb @@ -0,0 +1,14 @@ +# Be sure to restart your server when you modify this file. + +# Version of your assets, change this if you want to expire all your assets. +Rails.application.config.assets.version = '1.0' + +# Add additional assets to the asset load path. +# Rails.application.config.assets.paths << Emoji.images_path +# Add Yarn node_modules folder to the asset load path. +Rails.application.config.assets.paths << Rails.root.join('node_modules') + +# Precompile additional assets. +# application.js, application.css, and all non-JS/CSS in the app/assets +# folder are already added. +# Rails.application.config.assets.precompile += %w( admin.js admin.css ) diff --git a/hyrax/config/initializers/backtrace_silencers.rb b/hyrax/config/initializers/backtrace_silencers.rb new file mode 100644 index 00000000..59385cdf --- /dev/null +++ b/hyrax/config/initializers/backtrace_silencers.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } + +# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +# Rails.backtrace_cleaner.remove_silencers! diff --git a/hyrax/config/initializers/clamav.rb b/hyrax/config/initializers/clamav.rb new file mode 100644 index 00000000..7dcb60d7 --- /dev/null +++ b/hyrax/config/initializers/clamav.rb @@ -0,0 +1,2 @@ +# frozen_string_literal: true +ClamAV.instance.loaddb if defined? ClamAV diff --git a/hyrax/config/initializers/content_security_policy.rb b/hyrax/config/initializers/content_security_policy.rb new file mode 100644 index 00000000..d3bcaa5e --- /dev/null +++ b/hyrax/config/initializers/content_security_policy.rb @@ -0,0 +1,25 @@ +# Be sure to restart your server when you modify this file. + +# Define an application-wide content security policy +# For further information see the following documentation +# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy + +# Rails.application.config.content_security_policy do |policy| +# policy.default_src :self, :https +# policy.font_src :self, :https, :data +# policy.img_src :self, :https, :data +# policy.object_src :none +# policy.script_src :self, :https +# policy.style_src :self, :https + +# # Specify URI for violation reports +# # policy.report_uri "/csp-violation-report-endpoint" +# end + +# If you are using UJS then enable automatic nonce generation +# Rails.application.config.content_security_policy_nonce_generator = -> request { SecureRandom.base64(16) } + +# Report CSP violations to a specified URI +# For further information see the following documentation: +# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only +# Rails.application.config.content_security_policy_report_only = true diff --git a/hyrax/config/initializers/cookies_serializer.rb b/hyrax/config/initializers/cookies_serializer.rb new file mode 100644 index 00000000..5a6a32d3 --- /dev/null +++ b/hyrax/config/initializers/cookies_serializer.rb @@ -0,0 +1,5 @@ +# Be sure to restart your server when you modify this file. + +# Specify a serializer for the signed and encrypted cookie jars. +# Valid options are :json, :marshal, and :hybrid. +Rails.application.config.action_dispatch.cookies_serializer = :json diff --git a/hyrax/config/initializers/devise.rb b/hyrax/config/initializers/devise.rb new file mode 100644 index 00000000..bfff43ba --- /dev/null +++ b/hyrax/config/initializers/devise.rb @@ -0,0 +1,311 @@ +# frozen_string_literal: true + +# Assuming you have not yet modified this file, each configuration option below +# is set to its default value. Note that some are commented out while others +# are not: uncommented lines are intended to protect your configuration from +# breaking changes in upgrades (i.e., in the event that future versions of +# Devise change the default values for those options). +# +# Use this hook to configure devise mailer, warden hooks and so forth. +# Many of these configuration options can be set straight in your model. +Devise.setup do |config| + # The secret key used by Devise. Devise uses this key to generate + # random tokens. Changing this key will render invalid all existing + # confirmation, reset password and unlock tokens in the database. + # Devise will use the `secret_key_base` as its `secret_key` + # by default. You can change it below and use your own secret key. + config.secret_key = ENV['DEVISE_SECRET_KEY'] || '70727dee31e389416785e18afc87fe427892f5019192dd193e07917880eb9f494af846cc979be51c711b48da9b9fd24ba883cefbd1ecc081ecf9a04b0655c0a0' + + # ==> Controller configuration + # Configure the parent class to the devise controllers. + # config.parent_controller = 'DeviseController' + + # ==> Mailer Configuration + # Configure the e-mail address which will be shown in Devise::Mailer, + # note that it will be overwritten if you use your own mailer class + # with default "from" parameter. + config.mailer_sender = ENV['USER_MANAGEMENT_EMAIL_FROM_ADDRESS'] || 'please-change-me-at-config-initializers-devise@example.com' + + # Configure the class responsible to send e-mails. + # config.mailer = 'Devise::Mailer' + + # Configure the parent class responsible to send e-mails. + # config.parent_mailer = 'ActionMailer::Base' + + # ==> ORM configuration + # Load and configure the ORM. Supports :active_record (default) and + # :mongoid (bson_ext recommended) by default. Other ORMs may be + # available as additional gems. + require 'devise/orm/active_record' + + # ==> Configuration for any authentication mechanism + # Configure which keys are used when authenticating a user. The default is + # just :email. You can configure it to use [:username, :subdomain], so for + # authenticating a user, both parameters are required. Remember that those + # parameters are used only when authenticating and not when retrieving from + # session. If you need permissions, you should implement that in a before filter. + # You can also supply a hash where the value is a boolean determining whether + # or not authentication should be aborted when the value is not present. + # config.authentication_keys = [:email] + + # Configure parameters from the request object used for authentication. Each entry + # given should be a request method and it will automatically be passed to the + # find_for_authentication method and considered in your model lookup. For instance, + # if you set :request_keys to [:subdomain], :subdomain will be used on authentication. + # The same considerations mentioned for authentication_keys also apply to request_keys. + # config.request_keys = [] + + # Configure which authentication keys should be case-insensitive. + # These keys will be downcased upon creating or modifying a user and when used + # to authenticate or find a user. Default is :email. + config.case_insensitive_keys = [:email] + + # Configure which authentication keys should have whitespace stripped. + # These keys will have whitespace before and after removed upon creating or + # modifying a user and when used to authenticate or find a user. Default is :email. + config.strip_whitespace_keys = [:email] + + # Tell if authentication through request.params is enabled. True by default. + # It can be set to an array that will enable params authentication only for the + # given strategies, for example, `config.params_authenticatable = [:database]` will + # enable it only for database (email + password) authentication. + # config.params_authenticatable = true + + # Tell if authentication through HTTP Auth is enabled. False by default. + # It can be set to an array that will enable http authentication only for the + # given strategies, for example, `config.http_authenticatable = [:database]` will + # enable it only for database authentication. + # For API-only applications to support authentication "out-of-the-box", you will likely want to + # enable this with :database unless you are using a custom strategy. + # The supported strategies are: + # :database = Support basic authentication with authentication key + password + # config.http_authenticatable = false + + # If 401 status code should be returned for AJAX requests. True by default. + # config.http_authenticatable_on_xhr = true + + # The realm used in Http Basic Authentication. 'Application' by default. + # config.http_authentication_realm = 'Application' + + # It will change confirmation, password recovery and other workflows + # to behave the same regardless if the e-mail provided was right or wrong. + # Does not affect registerable. + # config.paranoid = true + + # By default Devise will store the user in session. You can skip storage for + # particular strategies by setting this option. + # Notice that if you are skipping storage for all authentication paths, you + # may want to disable generating routes to Devise's sessions controller by + # passing skip: :sessions to `devise_for` in your config/routes.rb + config.skip_session_storage = [:http_auth] + + # By default, Devise cleans up the CSRF token on authentication to + # avoid CSRF token fixation attacks. This means that, when using AJAX + # requests for sign in and sign up, you need to get a new CSRF token + # from the server. You can disable this option at your own risk. + # config.clean_up_csrf_token_on_authentication = true + + # When false, Devise will not attempt to reload routes on eager load. + # This can reduce the time taken to boot the app but if your application + # requires the Devise mappings to be loaded during boot time the application + # won't boot properly. + # config.reload_routes = true + + # ==> Configuration for :database_authenticatable + # For bcrypt, this is the cost for hashing the password and defaults to 12. If + # using other algorithms, it sets how many times you want the password to be hashed. + # The number of stretches used for generating the hashed password are stored + # with the hashed password. This allows you to change the stretches without + # invalidating existing passwords. + # + # Limiting the stretches to just one in testing will increase the performance of + # your test suite dramatically. However, it is STRONGLY RECOMMENDED to not use + # a value less than 10 in other environments. Note that, for bcrypt (the default + # algorithm), the cost increases exponentially with the number of stretches (e.g. + # a value of 20 is already extremely slow: approx. 60 seconds for 1 calculation). + config.stretches = Rails.env.test? ? 1 : 12 + + # Set up a pepper to generate the hashed password. + # config.pepper = '00b43d5f232462fe8629b22e52f432482dddde1bb941492186e8478a662e09a60a0a6f13082d9b0c69467caeaf03cf3ca3961fca64ce7695adcd95a7c98ddd1d' + + # Send a notification to the original email when the user's email is changed. + # config.send_email_changed_notification = false + + # Send a notification email when the user's password is changed. + # config.send_password_change_notification = false + + # ==> Configuration for :confirmable + # A period that the user is allowed to access the website even without + # confirming their account. For instance, if set to 2.days, the user will be + # able to access the website for two days without confirming their account, + # access will be blocked just in the third day. + # You can also set it to nil, which will allow the user to access the website + # without confirming their account. + # Default is 0.days, meaning the user cannot access the website without + # confirming their account. + # config.allow_unconfirmed_access_for = 2.days + + # A period that the user is allowed to confirm their account before their + # token becomes invalid. For example, if set to 3.days, the user can confirm + # their account within 3 days after the mail was sent, but on the fourth day + # their account can't be confirmed with the token any more. + # Default is nil, meaning there is no restriction on how long a user can take + # before confirming their account. + # config.confirm_within = 3.days + + # If true, requires any email changes to be confirmed (exactly the same way as + # initial account confirmation) to be applied. Requires additional unconfirmed_email + # db field (see migrations). Until confirmed, new email is stored in + # unconfirmed_email column, and copied to email column on successful confirmation. + config.reconfirmable = true + + # Defines which key will be used when confirming an account + # config.confirmation_keys = [:email] + + # ==> Configuration for :rememberable + # The time the user will be remembered without asking for credentials again. + # config.remember_for = 2.weeks + + # Invalidates all the remember me tokens when the user signs out. + config.expire_all_remember_me_on_sign_out = true + + # If true, extends the user's remember period when remembered via cookie. + # config.extend_remember_period = false + + # Options to be passed to the created cookie. For instance, you can set + # secure: true in order to force SSL only cookies. + # config.rememberable_options = {} + + # ==> Configuration for :validatable + # Range for password length. + config.password_length = 6..128 + + # Email regex used to validate email formats. It simply asserts that + # one (and only one) @ exists in the given string. This is mainly + # to give user feedback and not to assert the e-mail validity. + config.email_regexp = /\A[^@\s]+@[^@\s]+\z/ + + # ==> Configuration for :timeoutable + # The time you want to timeout the user session without activity. After this + # time the user will be asked for credentials again. Default is 30 minutes. + # config.timeout_in = 30.minutes + + # ==> Configuration for :lockable + # Defines which strategy will be used to lock an account. + # :failed_attempts = Locks an account after a number of failed attempts to sign in. + # :none = No lock strategy. You should handle locking by yourself. + # config.lock_strategy = :failed_attempts + + # Defines which key will be used when locking and unlocking an account + # config.unlock_keys = [:email] + + # Defines which strategy will be used to unlock an account. + # :email = Sends an unlock link to the user email + # :time = Re-enables login after a certain amount of time (see :unlock_in below) + # :both = Enables both strategies + # :none = No unlock strategy. You should handle unlocking by yourself. + # config.unlock_strategy = :both + + # Number of authentication tries before locking an account if lock_strategy + # is failed attempts. + # config.maximum_attempts = 20 + + # Time interval to unlock the account if :time is enabled as unlock_strategy. + # config.unlock_in = 1.hour + + # Warn on the last attempt before the account is locked. + # config.last_attempt_warning = true + + # ==> Configuration for :recoverable + # + # Defines which key will be used when recovering the password for an account + # config.reset_password_keys = [:email] + + # Time interval you can reset your password with a reset password key. + # Don't put a too small interval or your users won't have the time to + # change their passwords. + config.reset_password_within = 6.hours + + # When set to false, does not sign a user in automatically after their password is + # reset. Defaults to true, so a user is signed in automatically after a reset. + # config.sign_in_after_reset_password = true + + # ==> Configuration for :encryptable + # Allow you to use another hashing or encryption algorithm besides bcrypt (default). + # You can use :sha1, :sha512 or algorithms from others authentication tools as + # :clearance_sha1, :authlogic_sha512 (then you should set stretches above to 20 + # for default behavior) and :restful_authentication_sha1 (then you should set + # stretches to 10, and copy REST_AUTH_SITE_KEY to pepper). + # + # Require the `devise-encryptable` gem when using anything other than bcrypt + # config.encryptor = :sha512 + + # ==> Scopes configuration + # Turn scoped views on. Before rendering "sessions/new", it will first check for + # "users/sessions/new". It's turned off by default because it's slower if you + # are using only default views. + # config.scoped_views = false + + # Configure the default scope given to Warden. By default it's the first + # devise role declared in your routes (usually :user). + # config.default_scope = :user + + # Set this configuration to false if you want /users/sign_out to sign out + # only the current scope. By default, Devise signs out all scopes. + # config.sign_out_all_scopes = true + + # ==> Navigation configuration + # Lists the formats that should be treated as navigational. Formats like + # :html, should redirect to the sign in page when the user does not have + # access, but formats like :xml or :json, should return 401. + # + # If you have any extra navigational formats, like :iphone or :mobile, you + # should add them to the navigational formats lists. + # + # The "*/*" below is required to match Internet Explorer requests. + # config.navigational_formats = ['*/*', :html] + + # The default HTTP method used to sign out a resource. Default is :delete. + config.sign_out_via = :get + + # ==> OmniAuth + # Add a new OmniAuth provider. Check the wiki for more information on setting + # up on your models and hooks. + # config.omniauth :github, 'APP_ID', 'APP_SECRET', scope: 'user,public_repo' + + # ==> Warden configuration + # If you want to use other strategies, that are not supported by Devise, or + # change the failure app, you can configure them inside the config.warden block. + # + # config.warden do |manager| + # manager.intercept_401 = false + # manager.default_strategies(scope: :user).unshift :some_external_strategy + # end + + # ==> Mountable engine configurations + # When using Devise inside an engine, let's call it `MyEngine`, and this engine + # is mountable, there are some extra configurations to be taken into account. + # The following options are available, assuming the engine is mounted as: + # + # mount MyEngine, at: '/my_engine' + # + # The router that invoked `devise_for`, in the example above, would be: + # config.router_name = :my_engine + # + # When using OmniAuth, Devise cannot automatically set OmniAuth path, + # so you need to do it manually. For the users scope, it would be: + # config.omniauth_path_prefix = '/my_engine/users/auth' + + # ==> Turbolinks configuration + # If your app is using Turbolinks, Turbolinks::Controller needs to be included to make redirection work correctly: + # + # ActiveSupport.on_load(:devise_failure_app) do + # include Turbolinks::Controller + # end + + # ==> Configuration for :registerable + + # When set to false, does not sign a user in automatically after their password is + # changed. Defaults to true, so a user is signed in automatically after changing a password. + # config.sign_in_after_change_password = true +end diff --git a/hyrax/config/initializers/filter_parameter_logging.rb b/hyrax/config/initializers/filter_parameter_logging.rb new file mode 100644 index 00000000..4a994e1e --- /dev/null +++ b/hyrax/config/initializers/filter_parameter_logging.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Configure sensitive parameters which will be filtered from the log file. +Rails.application.config.filter_parameters += [:password] diff --git a/hyrax/config/initializers/hydra_config.rb b/hyrax/config/initializers/hydra_config.rb new file mode 100644 index 00000000..35f9eccd --- /dev/null +++ b/hyrax/config/initializers/hydra_config.rb @@ -0,0 +1,24 @@ +# windows doesn't properly require hydra-head (from the gemfile), so we need to require it explicitly here: +require 'hydra/head' unless defined? Hydra + +Hydra.configure do |config| + # This specifies the solr field names of permissions-related fields. + # You only need to change these values if you've indexed permissions by some means other than the Hydra's built-in tooling. + # If you change these, you must also update the permissions request handler in your solrconfig.xml to return those values + # + # config.permissions.discover.group = ActiveFedora::SolrQueryBuilder.solr_name("discover_access_group", :symbol) + # config.permissions.discover.individual = ActiveFedora::SolrQueryBuilder.solr_name("discover_access_person", :symbol) + # config.permissions.read.group = ActiveFedora::SolrQueryBuilder.solr_name("read_access_group", :symbol) + # config.permissions.read.individual = ActiveFedora::SolrQueryBuilder.solr_name("read_access_person", :symbol) + # config.permissions.edit.group = ActiveFedora::SolrQueryBuilder.solr_name("edit_access_group", :symbol) + # config.permissions.edit.individual = ActiveFedora::SolrQueryBuilder.solr_name("edit_access_person", :symbol) + # + # config.permissions.embargo.release_date = ActiveFedora::SolrQueryBuilder.solr_name("embargo_release_date", :stored_sortable, type: :date) + # config.permissions.lease.expiration_date = ActiveFedora::SolrQueryBuilder.solr_name("lease_expiration_date", :stored_sortable, type: :date) + # + # + # Specify the user model + # config.user_model = 'User' + + config.user_key_field = Devise.authentication_keys.first +end diff --git a/hyrax/config/initializers/hyrax.rb b/hyrax/config/initializers/hyrax.rb new file mode 100644 index 00000000..f470e547 --- /dev/null +++ b/hyrax/config/initializers/hyrax.rb @@ -0,0 +1,315 @@ +# frozen_string_literal: true +Hyrax.config do |config| + # Injected via `rails g hyrax:work Dataset` + config.register_curation_concern :dataset + # Register roles that are expected by your implementation. + # @see Hyrax::RoleRegistry for additional details. + # @note there are magical roles as defined in Hyrax::RoleRegistry::MAGIC_ROLES + # config.register_roles do |registry| + # registry.add(name: 'captaining', description: 'For those that really like the front lines') + # end + + # When an admin set is created, we need to activate a workflow. + # The :default_active_workflow_name is the name of the workflow we will activate. + # @see Hyrax::Configuration for additional details and defaults. + # config.default_active_workflow_name = 'default' + + # Which RDF term should be used to relate objects to an admin set? + # If this is a new repository, you may want to set a custom predicate term here to + # avoid clashes if you plan to use the default (dct:isPartOf) for other relations. + # config.admin_set_predicate = ::RDF::DC.isPartOf + + # Which RDF term should be used to relate objects to a rendering? + # If this is a new repository, you may want to set a custom predicate term here to + # avoid clashes if you plan to use the default (dct:hasFormat) for other relations. + # config.rendering_predicate = ::RDF::DC.hasFormat + + # Email recipient of messages sent via the contact form + config.contact_email = ENV['CONTACT_FORM_RECIPIENT_EMAIL'] || "repo-admin@example.org" + + # Text prefacing the subject entered in the contact form + config.subject_prefix = ENV['CONTACT_FORM_SUBJECT_PREFIX'] || "Hyrax Contact form:" + + # How many notifications should be displayed on the dashboard + # config.max_notifications_for_dashboard = 5 + + # How frequently should a file be fixity checked + # config.max_days_between_fixity_checks = 7 + + # Options to control the file uploader + # config.uploader = { + # limitConcurrentUploads: 6, + # maxNumberOfFiles: 100, + # maxFileSize: 500.megabytes + # } + + # Enables a link to the citations page for a work + # Default is false + config.citations = true + + # Where to store tempfiles, leave blank for the system temp directory (e.g. /tmp) + # config.temp_file_base = '/home/developer1' + + # Hostpath to be used in Endnote exports + # config.persistent_hostpath = 'http://localhost/files/' + + # If you have ffmpeg installed and want to transcode audio and video set to true + config.enable_ffmpeg = true + + # Hyrax uses NOIDs for files and collections instead of Fedora UUIDs + # where NOID = 10-character string and UUID = 32-character string w/ hyphens + config.enable_noids = true + + # Template for your repository's NOID IDs + # config.noid_template = ".reeddeeddk" + + # Use the database-backed minter class + # config.noid_minter_class = Noid::Rails::Minter::Db + + # Store identifier minter's state in a file for later replayability + # config.minter_statefile = '/tmp/minter-state' + + # Prefix for Redis keys + # config.redis_namespace = "hyrax" + + # Path to the file characterization tool + config.fits_path = ENV['FITS_PATH'] || "/fits/fits-1.5.0/fits.sh" + + # Path to the file derivatives creation tool + # config.libreoffice_path = "soffice" + + # Option to enable/disable full text extraction from PDFs + # Default is true, set to false to disable full text extraction + # config.extract_full_text = true + + # How many seconds back from the current time that we should show by default of the user's activity on the user's dashboard + # config.activity_to_show_default_seconds_since_now = 24*60*60 + + # Hyrax can integrate with Zotero's Arkivo service for automatic deposit + # of Zotero-managed research items. + # config.arkivo_api = false + + # Stream realtime notifications to users in the browser + # config.realtime_notifications = true + + # Location autocomplete uses geonames to search for named regions + # Username for connecting to geonames + # config.geonames_username = '' + + # Should the acceptance of the licence agreement be active (checkbox), or + # implied when the save button is pressed? Set to true for active + # The default is true. + # config.active_deposit_agreement_acceptance = true + + # Should work creation require file upload, or can a work be created first + # and a file added at a later time? + # The default is true. + # config.work_requires_files = true + + # How many rows of items should appear on the work show view? + # The default is 10 + # config.show_work_item_rows = 10 + + # Enable IIIF image service. This is required to use the + # IIIF viewer enabled show page + # + # If you have run the riiif generator, an embedded riiif service + # will be used to deliver images via IIIF. If you have not, you will + # need to configure the following other configuration values to work + # with your image server: + # + # * iiif_image_url_builder + # * iiif_info_url_builder + # * iiif_image_compliance_level_uri + # * iiif_image_size_default + # + # Default is false + config.iiif_image_server = true + if ENV.fetch('IIIF_TO_SERVE_SSL_URLS', 'false') == 'true' + protocol = 'https' + else + protocol = 'http' + end + + if Rails.env.development? + port = ENV.fetch('PORT', 3000) + else + port = nil + end + + # Returns a URL that resolves to an image provided by a IIIF image server + config.iiif_image_url_builder = lambda do |file_id, base_url, size, format| + Riiif::Engine.routes.url_helpers.image_url(file_id, host: base_url, size: size, protocol: protocol, port: port) + end + # config.iiif_image_url_builder = lambda do |file_id, base_url, size, format| + # "#{base_url}/downloads/#{file_id.split('/').first}" + # end + + # Returns a URL that resolves to an info.json file provided by a IIIF image server + config.iiif_info_url_builder = lambda do |file_id, base_url| + uri = Riiif::Engine.routes.url_helpers.info_url(file_id, host: base_url, protocol: protocol, port: port) + uri.sub(%r{/info\.json\Z}, '') + end + + # Returns a URL that indicates your IIIF image server compliance level + # config.iiif_image_compliance_level_uri = 'http://iiif.io/api/image/2/level2.json' + + # Returns a IIIF image size default + # config.iiif_image_size_default = '600,' + + # Fields to display in the IIIF metadata section; default is the required fields + # config.iiif_metadata_fields = Hyrax::Forms::WorkForm.required_fields + + # Should a button with "Share my work" show on the front page to all users (even those not logged in)? + config.display_share_button_when_not_logged_in = false + + # This user is logged as the acting user for jobs and other processes that + # run without being attributed to a specific user (e.g. creation of the + # default admin set). + # config.system_user_key = 'systemuser@example.com' + + # The user who runs batch jobs. Update this if you aren't using emails + # config.batch_user_key = 'batchuser@example.com' + + # The user who runs fixity check jobs. Update this if you aren't using emails + # config.audit_user_key = 'audituser@example.com' + # + # The banner image. Should be 5000px wide by 1000px tall + # config.banner_image = 'https://cloud.githubusercontent.com/assets/92044/18370978/88ecac20-75f6-11e6-8399-6536640ef695.jpg' + + # Temporary paths to hold uploads before they are ingested into FCrepo + # These must be lambdas that return a Pathname. Can be configured separately + config.upload_path = ->() { ENV.fetch('UPLOADS_PATH', Rails.root.join('tmp', 'uploads')) } + config.cache_path = ->() { ENV.fetch('CACHE_PATH', Rails.root.join('tmp', 'uploads', 'cache')) } + + # Location on local file system where derivatives will be stored + # If you use a multi-server architecture, this MUST be a shared volume + config.derivatives_path = ENV.fetch('DERIVATIVES_PATH', Rails.root.join('tmp', 'derivatives')) + + # Should schema.org microdata be displayed? + # config.display_microdata = true + + # What default microdata type should be used if a more appropriate + # type can not be found in the locale file? + # config.microdata_default_type = 'http://schema.org/CreativeWork' + + # Location on local file system where uploaded files will be staged + # prior to being ingested into the repository or having derivatives generated. + # If you use a multi-server architecture, this MUST be a shared volume. + config.working_path = ENV.fetch('UPLOADS_PATH', Rails.root.join('tmp', 'uploads')) + + # Should the media display partial render a download link? + # config.display_media_download_link = true + + # A configuration point for changing the behavior of the license service + # @see Hyrax::LicenseService for implementation details + # config.license_service_class = Hyrax::LicenseService + + # Labels for display of permission levels + # config.permission_levels = { "View/Download" => "read", "Edit access" => "edit" } + + # Labels for permission level options used in dropdown menus + # config.permission_options = { "Choose Access" => "none", "View/Download" => "read", "Edit" => "edit" } + + # Labels for owner permission levels + # config.owner_permission_levels = { "Edit Access" => "edit" } + + # Path to the ffmpeg tool + # config.ffmpeg_path = 'ffmpeg' + + # Max length of FITS messages to display in UI + # config.fits_message_length = 5 + + # ActiveJob queue to handle ingest-like jobs + # config.ingest_queue_name = :default + + ## Attributes for the lock manager which ensures a single process/thread is mutating a ore:Aggregation at once. + # How many times to retry to acquire the lock before raising UnableToAcquireLockError + # config.lock_retry_count = 600 # Up to 2 minutes of trying at intervals up to 200ms + # + # Maximum wait time in milliseconds before retrying. Wait time is a random value between 0 and retry_delay. + # config.lock_retry_delay = 200 + # + # How long to hold the lock in milliseconds + # config.lock_time_to_live = 60_000 + + ## Do not alter unless you understand how ActiveFedora handles URI/ID translation + # config.translate_id_to_uri = lambda do |uri| + # baseparts = 2 + [(Noid::Rails::Config.template.gsub(/\.[rsz]/, '').length.to_f / 2).ceil, 4].min + # uri.to_s.sub(baseurl, '').split('/', baseparts).last + # end + # config.translate_uri_to_id = lambda do |id| + # "#{ActiveFedora.fedora.host}#{ActiveFedora.fedora.base_path}/#{Noid::Rails.treeify(id)}" + # end + + # Identify the model class name that will be used for Collections in your app + # (i.e. ::Collection for ActiveFedora, Hyrax::PcdmCollection for Valkyrie) + # config.collection_model = '::Collection' + # config.collection_model = 'Hyrax::PcdmCollection' + + # Identify the model class name that will be used for Admin Sets in your app + # (i.e. AdminSet for ActiveFedora, Hyrax::AdministrativeSet for Valkyrie) + # config.admin_set_model = 'AdminSet' + # config.admin_set_model = 'Hyrax::AdministrativeSet' + + # When your application is ready to use the valkyrie index instead of the one + # maintained by active fedora, you will need to set this to true. You will + # also need to update your Blacklight configuration. + # config.query_index_from_valkyrie = false + + ## Configure index adapter for Valkyrie::Resources to use solr readonly indexer + # config.index_adapter = :solr_index + + ## Fedora import/export tool + # + # Path to the Fedora import export tool jar file + # config.import_export_jar_file_path = "tmp/fcrepo-import-export.jar" + # + # Location where BagIt files should be exported + # config.bagit_dir = "tmp/descriptions" + + # If browse-everything has been configured, load the configs. Otherwise, set to nil. + begin + if defined? BrowseEverything + config.browse_everything = BrowseEverything.config + else + Rails.logger.warn "BrowseEverything is not installed" + end + rescue Errno::ENOENT + config.browse_everything = nil + end + + ## Register all directories which can be used to ingest from the local file + # system. + # + # Any file, and only those, that is anywhere under one of the specified + # directories can be used by CreateWithRemoteFilesActor to add local files + # to works. Files uploaded by the user are handled separately and the + # temporary directory for those need not be included here. + # + # Default value includes BrowseEverything.config['file_system'][:home] if it + # is set, otherwise default is an empty list. You should only need to change + # this if you have custom ingestions using CreateWithRemoteFilesActor to + # ingest files from the file system that are not part of the BrowseEverything + # mount point. + # + # config.registered_ingest_dirs = [] + + ## + # Set the system-wide virus scanner + config.virus_scanner = Hyrax::VirusScanner + + ## Remote identifiers configuration + # Add registrar implementations by uncommenting and adding to the hash below. + # See app/services/hyrax/identifier/registrar.rb for the registrar interface + # config.identifier_registrars = {} +end + +DEFAULT_DATE_FORMAT = ENV['DEFAULT_DATE_FORMAT'] || '%d/%m/%Y' +Date::DATE_FORMATS[:standard] = DEFAULT_DATE_FORMAT +DateTime::DATE_FORMATS[:standard] = DEFAULT_DATE_FORMAT +Date::DATE_FORMATS[:default] = DEFAULT_DATE_FORMAT + +Qa::Authorities::Local.register_subauthority('subjects', 'Qa::Authorities::Local::TableBasedAuthority') +Qa::Authorities::Local.register_subauthority('languages', 'Qa::Authorities::Local::TableBasedAuthority') +Qa::Authorities::Local.register_subauthority('genres', 'Qa::Authorities::Local::TableBasedAuthority') diff --git a/hyrax/config/initializers/inflections.rb b/hyrax/config/initializers/inflections.rb new file mode 100644 index 00000000..ac033bf9 --- /dev/null +++ b/hyrax/config/initializers/inflections.rb @@ -0,0 +1,16 @@ +# Be sure to restart your server when you modify this file. + +# Add new inflection rules using the following format. Inflections +# are locale specific, and you may define rules for as many different +# locales as you wish. All of these examples are active by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.plural /^(ox)$/i, '\1en' +# inflect.singular /^(ox)en/i, '\1' +# inflect.irregular 'person', 'people' +# inflect.uncountable %w( fish sheep ) +# end + +# These inflection rules are supported but not enabled by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.acronym 'RESTful' +# end diff --git a/hyrax/config/initializers/mailboxer.rb b/hyrax/config/initializers/mailboxer.rb new file mode 100644 index 00000000..92b190ea --- /dev/null +++ b/hyrax/config/initializers/mailboxer.rb @@ -0,0 +1,22 @@ +Mailboxer.setup do |config| + + #Configures if your application uses or not email sending for Notifications and Messages + config.uses_emails = true + + #Configures the default from for emails sent for Messages and Notifications + config.default_from = ENV['NOTIFICATIONS_EMAIL_DEFAULT_FROM_ADDRESS'] || "no-reply@mailboxer.com" + + #Configures the methods needed by mailboxer + config.email_method = :mailboxer_email + config.name_method = :name + config.notify_method = :notify + + #Configures if you use or not a search engine and which one you are using + #Supported engines: [:solr,:sphinx,:pg_search] + config.search_enabled = false + config.search_engine = :solr + + #Configures maximum length of the message subject and body + config.subject_max_length = 255 + config.body_max_length = 32000 +end diff --git a/hyrax/config/initializers/mime_types.rb b/hyrax/config/initializers/mime_types.rb new file mode 100644 index 00000000..5894028a --- /dev/null +++ b/hyrax/config/initializers/mime_types.rb @@ -0,0 +1,8 @@ +# Be sure to restart your server when you modify this file. + +# Add new mime types for use in respond_to blocks: +# Mime::Type.register "text/richtext", :rtf +Mime::Type.register "application/n-triples", :nt +Mime::Type.register "application/ld+json", :jsonld +Mime::Type.register "text/turtle", :ttl +Mime::Type.register 'application/x-endnote-refer', :endnote \ No newline at end of file diff --git a/hyrax/config/initializers/mini_magick.rb b/hyrax/config/initializers/mini_magick.rb new file mode 100644 index 00000000..7fc113a3 --- /dev/null +++ b/hyrax/config/initializers/mini_magick.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true +require 'mini_magick' + +MiniMagick.configure do |config| + config.shell_api = "posix-spawn" +end diff --git a/hyrax/config/initializers/redis_config.rb b/hyrax/config/initializers/redis_config.rb new file mode 100644 index 00000000..313cf19c --- /dev/null +++ b/hyrax/config/initializers/redis_config.rb @@ -0,0 +1,4 @@ +# frozen_string_literal: true +require 'redis' +config = YAML.safe_load(ERB.new(IO.read(Rails.root.join('config', 'redis.yml'))).result)[Rails.env].with_indifferent_access +Redis.current = Redis.new(config.merge(thread_safe: true)) diff --git a/hyrax/config/initializers/riiif.rb b/hyrax/config/initializers/riiif.rb new file mode 100644 index 00000000..b29200cc --- /dev/null +++ b/hyrax/config/initializers/riiif.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true +ActiveSupport::Reloader.to_prepare do + Riiif::Image.file_resolver = Riiif::HttpFileResolver.new + Riiif::Image.info_service = lambda do |id, _file| + # id will look like a path to a pcdm:file + # (e.g. rv042t299%2Ffiles%2F6d71677a-4f80-42f1-ae58-ed1063fd79c7) + # but we just want the id for the FileSet it's attached to. + + # Capture everything before the first slash + fs_id = id.sub(/\A([^\/]*)\/.*/, '\1') + resp = Hyrax::SolrService.get("id:#{fs_id}") + doc = resp['response']['docs'].first + raise "Unable to find solr document with id:#{fs_id}" unless doc + { height: doc['height_is'], width: doc['width_is'], format: doc['mime_type_ssi'], channels: doc['alpha_channels_ssi'] } + end + + Riiif::Image.file_resolver.id_to_uri = lambda do |id| + Hyrax::Base.id_to_uri(CGI.unescape(id)).tap do |url| + Rails.logger.info "Riiif resolved #{id} to #{url}" + end + end + + Riiif::Image.authorization_service = Hyrax::IIIFAuthorizationService + + Riiif.not_found_image = Rails.root.join('app', 'assets', 'images', 'us_404.svg') + Riiif.unauthorized_image = Rails.root.join('app', 'assets', 'images', 'us_404.svg') + + Riiif::Engine.config.cache_duration = 365.days +end diff --git a/hyrax/config/initializers/simple_form.rb b/hyrax/config/initializers/simple_form.rb new file mode 100644 index 00000000..b92657cf --- /dev/null +++ b/hyrax/config/initializers/simple_form.rb @@ -0,0 +1,171 @@ +# frozen_string_literal: true +# NOTE: This is a modified version of simple_form's default config file. +# The only changes were to move the input to after the hint and error. + +# Use this setup block to configure all options available in SimpleForm. +SimpleForm.setup do |config| + # Wrappers are used by the form builder to generate a + # complete input. You can remove any component from the + # wrapper, change the order or even add your own to the + # stack. The options given below are used to wrap the + # whole input. + config.wrappers :default, class: :input, + hint_class: :field_with_hint, + error_class: :field_with_errors do |b| + ## Extensions enabled by default + # Any of these extensions can be disabled for a + # given input by passing: `f.input EXTENSION_NAME => false`. + # You can make any of these extensions optional by + # renaming `b.use` to `b.optional`. + + # Determines whether to use HTML5 (:email, :url, ...) + # and required attributes + b.use :html5 + + # Calculates placeholders automatically from I18n + # You can also pass a string as f.input placeholder: "Placeholder" + b.use :placeholder + + ## Optional extensions + # They are disabled unless you pass `f.input EXTENSION_NAME => true` + # to the input. If so, they will retrieve the values from the model + # if any exists. If you want to enable any of those + # extensions by default, you can change `b.optional` to `b.use`. + + # Calculates maxlength from length validations for string inputs + b.optional :maxlength + + # Calculates pattern from format validations for string inputs + b.optional :pattern + + # Calculates min and max from length validations for numeric inputs + b.optional :min_max + + # Calculates readonly automatically from readonly attributes + b.optional :readonly + + ## Inputs + b.use :label + b.use :hint, wrap_with: { tag: :span, class: :hint } + b.use :error, wrap_with: { tag: :span, class: :error } + b.use :input + + ## full_messages_for + # If you want to display the full error message for the attribute, you can + # use the component :full_error, like: + # + # b.use :full_error, wrap_with: { tag: :span, class: :error } + end + + # The default wrapper to be used by the FormBuilder. + config.default_wrapper = :default + + # Define the way to render check boxes / radio buttons with labels. + # Defaults to :nested for bootstrap config. + # inline: input + label + # nested: label > input + config.boolean_style = :nested + + # Default class for buttons + config.button_class = 'btn' + + # Method used to tidy up errors. Specify any Rails Array method. + # :first lists the first message for each field. + # Use :to_sentence to list all errors for each field. + # config.error_method = :first + + # Default tag used for error notification helper. + config.error_notification_tag = :div + + # CSS class to add for error notification helper. + config.error_notification_class = 'error_notification' + + # ID to add for error notification helper. + # config.error_notification_id = nil + + # Series of attempts to detect a default label method for collection. + # config.collection_label_methods = [ :to_label, :name, :title, :to_s ] + + # Series of attempts to detect a default value method for collection. + # config.collection_value_methods = [ :id, :to_s ] + + # You can wrap a collection of radio/check boxes in a pre-defined tag, defaulting to none. + # config.collection_wrapper_tag = nil + + # You can define the class to use on all collection wrappers. Defaulting to none. + # config.collection_wrapper_class = nil + + # You can wrap each item in a collection of radio/check boxes with a tag, + # defaulting to :span. + # config.item_wrapper_tag = :span + + # You can define a class to use in all item wrappers. Defaulting to none. + # config.item_wrapper_class = nil + + # How the label text should be generated altogether with the required text. + config.label_text = ->(label, required, _) { "#{label} #{required}" } + + # You can define the class to use on all labels. Default is nil. + # config.label_class = nil + + # You can define the default class to be used on forms. Can be overriden + # with `html: { :class }`. Defaulting to none. + # config.default_form_class = nil + + # You can define which elements should obtain additional classes + # config.generate_additional_classes_for = [:wrapper, :label, :input] + + # Whether attributes are required by default (or not). Default is true. + # config.required_by_default = true + + # Tell browsers whether to use the native HTML5 validations (novalidate form option). + # These validations are enabled in SimpleForm's internal config but disabled by default + # in this configuration, which is recommended due to some quirks from different browsers. + # To stop SimpleForm from generating the novalidate option, enabling the HTML5 validations, + # change this configuration to true. + config.browser_validations = true + + # Collection of methods to detect if a file type was given. + # config.file_methods = [ :mounted_as, :file?, :public_filename ] + + # Custom mappings for input types. This should be a hash containing a regexp + # to match as key, and the input type that will be used when the field name + # matches the regexp as value. + # config.input_mappings = { /count/ => :integer } + + # Custom wrappers for input types. This should be a hash containing an input + # type as key and the wrapper that will be used for all inputs with specified type. + # config.wrapper_mappings = { string: :prepend } + + # Namespaces where SimpleForm should look for custom input classes that + # override default inputs. + # config.custom_inputs_namespaces << "CustomInputs" + + # Default priority for time_zone inputs. + # config.time_zone_priority = nil + + # Default priority for country inputs. + # config.country_priority = nil + + # When false, do not use translations for labels. + # config.translate_labels = true + + # Automatically discover new inputs in Rails' autoload path. + # config.inputs_discovery = true + + # Cache SimpleForm inputs discovery + # config.cache_discovery = !Rails.env.development? + + # Default class for inputs + # config.input_class = nil + + # Define the default class of the input wrapper of the boolean input. + config.boolean_label_class = 'checkbox' + + # Defines if the default input wrapper class should be included in radio + # collection wrappers. + # config.include_default_input_wrapper_class = true + + # Defines which i18n scope will be used in Simple Form. + # config.i18n_scope = 'simple_form' +end diff --git a/hyrax/config/initializers/simple_form_bootstrap.rb b/hyrax/config/initializers/simple_form_bootstrap.rb new file mode 100644 index 00000000..094cb3bc --- /dev/null +++ b/hyrax/config/initializers/simple_form_bootstrap.rb @@ -0,0 +1,151 @@ +# frozen_string_literal: true +# NOTE: This is a modified version of simple_form's default config file. +# The only changes were to move the inputs to after the hints and errors. + +# Use this setup block to configure all options available in SimpleForm. + +SimpleForm.setup do |config| + config.error_notification_class = 'alert alert-danger' + config.button_class = 'btn btn-default' + config.boolean_label_class = nil + + config.wrappers :vertical_form, tag: 'div', class: 'form-group', error_class: 'has-error' do |b| + b.use :html5 + b.use :placeholder + b.optional :maxlength + b.optional :pattern + b.optional :min_max + b.optional :readonly + b.use :label, class: 'control-label' + b.use :error, wrap_with: { tag: 'span', class: 'help-block' } + b.use :hint, wrap_with: { tag: 'p', class: 'help-block' } + b.use :input, class: 'form-control' + end + + config.wrappers :vertical_file_input, tag: 'div', class: 'form-group', error_class: 'has-error' do |b| + b.use :html5 + b.use :placeholder + b.optional :maxlength + b.optional :readonly + b.use :label, class: 'control-label' + b.use :error, wrap_with: { tag: 'span', class: 'help-block' } + b.use :hint, wrap_with: { tag: 'p', class: 'help-block' } + b.use :input + end + + config.wrappers :vertical_boolean, tag: 'div', class: 'form-group', error_class: 'has-error' do |b| + b.use :html5 + b.optional :readonly + + b.wrapper tag: 'div', class: 'checkbox' do |ba| + ba.use :label_input + end + + b.use :error, wrap_with: { tag: 'span', class: 'help-block' } + b.use :hint, wrap_with: { tag: 'p', class: 'help-block' } + end + + config.wrappers :vertical_radio_and_checkboxes, tag: 'div', class: 'form-group', error_class: 'has-error' do |b| + b.use :html5 + b.optional :readonly + b.use :label, class: 'control-label' + b.use :error, wrap_with: { tag: 'span', class: 'help-block' } + b.use :hint, wrap_with: { tag: 'p', class: 'help-block' } + b.use :input + end + + config.wrappers :horizontal_form, tag: 'div', class: 'form-group', error_class: 'has-error' do |b| + b.use :html5 + b.use :placeholder + b.optional :maxlength + b.optional :pattern + b.optional :min_max + b.optional :readonly + b.use :label, class: 'col-sm-3 control-label' + + b.wrapper tag: 'div', class: 'col-sm-9' do |ba| + ba.use :error, wrap_with: { tag: 'span', class: 'help-block' } + ba.use :hint, wrap_with: { tag: 'p', class: 'help-block' } + ba.use :input, class: 'form-control' + end + end + + config.wrappers :horizontal_file_input, tag: 'div', class: 'form-group', error_class: 'has-error' do |b| + b.use :html5 + b.use :placeholder + b.optional :maxlength + b.optional :readonly + b.use :label, class: 'col-sm-3 control-label' + + b.wrapper tag: 'div', class: 'col-sm-9' do |ba| + ba.use :error, wrap_with: { tag: 'span', class: 'help-block' } + ba.use :hint, wrap_with: { tag: 'p', class: 'help-block' } + ba.use :input + end + end + + config.wrappers :horizontal_boolean, tag: 'div', class: 'form-group', error_class: 'has-error' do |b| + b.use :html5 + b.optional :readonly + + b.wrapper tag: 'div', class: 'col-sm-offset-3 col-sm-9' do |wr| + wr.wrapper tag: 'div', class: 'checkbox' do |ba| + ba.use :label_input + end + + wr.use :error, wrap_with: { tag: 'span', class: 'help-block' } + wr.use :hint, wrap_with: { tag: 'p', class: 'help-block' } + end + end + + config.wrappers :horizontal_radio_and_checkboxes, tag: 'div', class: 'form-group', error_class: 'has-error' do |b| + b.use :html5 + b.optional :readonly + + b.use :label, class: 'col-sm-3 control-label' + + b.wrapper tag: 'div', class: 'col-sm-9' do |ba| + ba.use :error, wrap_with: { tag: 'span', class: 'help-block' } + ba.use :hint, wrap_with: { tag: 'p', class: 'help-block' } + ba.use :input + end + end + + config.wrappers :inline_form, tag: 'div', class: 'form-group', error_class: 'has-error' do |b| + b.use :html5 + b.use :placeholder + b.optional :maxlength + b.optional :pattern + b.optional :min_max + b.optional :readonly + b.use :label, class: 'sr-only' + b.use :error, wrap_with: { tag: 'span', class: 'help-block' } + b.use :hint, wrap_with: { tag: 'p', class: 'help-block' } + b.use :input, class: 'form-control' + end + + config.wrappers :multi_select, tag: 'div', class: 'form-group', error_class: 'has-error' do |b| + b.use :html5 + b.optional :readonly + b.use :label, class: 'control-label' + b.wrapper tag: 'div', class: 'form-inline' do |ba| + ba.use :error, wrap_with: { tag: 'span', class: 'help-block' } + ba.use :hint, wrap_with: { tag: 'p', class: 'help-block' } + ba.use :input, class: 'form-control' + end + end + # Wrappers for forms and inputs using the Bootstrap toolkit. + # Check the Bootstrap docs (http://getbootstrap.com) + # to learn about the different styles for forms and inputs, + # buttons and other elements. + config.default_wrapper = :vertical_form + config.wrapper_mappings = { + check_boxes: :vertical_radio_and_checkboxes, + radio_buttons: :vertical_radio_and_checkboxes, + file: :vertical_file_input, + boolean: :vertical_boolean, + datetime: :multi_select, + date: :multi_select, + time: :multi_select + } +end diff --git a/hyrax/config/initializers/wrap_parameters.rb b/hyrax/config/initializers/wrap_parameters.rb new file mode 100644 index 00000000..bbfc3961 --- /dev/null +++ b/hyrax/config/initializers/wrap_parameters.rb @@ -0,0 +1,14 @@ +# Be sure to restart your server when you modify this file. + +# This file contains settings for ActionController::ParamsWrapper which +# is enabled by default. + +# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +ActiveSupport.on_load(:action_controller) do + wrap_parameters format: [:json] +end + +# To enable root element in JSON for ActiveRecord objects. +# ActiveSupport.on_load(:active_record) do +# self.include_root_in_json = true +# end diff --git a/hyrax/config/locales/blacklight.en.yml b/hyrax/config/locales/blacklight.en.yml new file mode 100644 index 00000000..ff834b2f --- /dev/null +++ b/hyrax/config/locales/blacklight.en.yml @@ -0,0 +1,3 @@ +en: + blacklight: + application_name: 'Blacklight' \ No newline at end of file diff --git a/hyrax/config/locales/dataset.de.yml b/hyrax/config/locales/dataset.de.yml new file mode 100644 index 00000000..c133f7be --- /dev/null +++ b/hyrax/config/locales/dataset.de.yml @@ -0,0 +1,8 @@ +de: + hyrax: + icons: + dataset: 'fa fa-file-text-o' + select_type: + dataset: + description: "Dataset Werke" + name: "Dataset" diff --git a/hyrax/config/locales/dataset.en.yml b/hyrax/config/locales/dataset.en.yml new file mode 100644 index 00000000..dc79608c --- /dev/null +++ b/hyrax/config/locales/dataset.en.yml @@ -0,0 +1,8 @@ +en: + hyrax: + icons: + dataset: 'fa fa-file-text-o' + select_type: + dataset: + description: "Dataset works" + name: "Dataset" diff --git a/hyrax/config/locales/dataset.es.yml b/hyrax/config/locales/dataset.es.yml new file mode 100644 index 00000000..cd4e7fbd --- /dev/null +++ b/hyrax/config/locales/dataset.es.yml @@ -0,0 +1,10 @@ +es: + hyrax: + icons: + dataset: 'fa fa-file-text-o' + select_type: + dataset: + # TODO: translate `human_name` into Spanish + description: "Dataset trabajos" + name: "Dataset" + # TODO: translate `human_name` into Spanish diff --git a/hyrax/config/locales/dataset.fr.yml b/hyrax/config/locales/dataset.fr.yml new file mode 100644 index 00000000..f59979a3 --- /dev/null +++ b/hyrax/config/locales/dataset.fr.yml @@ -0,0 +1,8 @@ +fr: + hyrax: + icons: + dataset: 'fa fa-file-text-o' + select_type: + dataset: + description: "Dataset Å“uvres" + name: "Dataset" diff --git a/hyrax/config/locales/dataset.it.yml b/hyrax/config/locales/dataset.it.yml new file mode 100644 index 00000000..bd37f833 --- /dev/null +++ b/hyrax/config/locales/dataset.it.yml @@ -0,0 +1,8 @@ +it: + hyrax: + icons: + dataset: 'fa fa-file-text-o' + select_type: + dataset: + description: "Dataset opere" + name: "Dataset" diff --git a/hyrax/config/locales/dataset.pt-BR.yml b/hyrax/config/locales/dataset.pt-BR.yml new file mode 100644 index 00000000..8b3652d4 --- /dev/null +++ b/hyrax/config/locales/dataset.pt-BR.yml @@ -0,0 +1,8 @@ +pt-BR: + hyrax: + icons: + dataset: 'fa fa-file-text-o' + select_type: + dataset: + description: "Dataset obras" + name: "Dataset" diff --git a/hyrax/config/locales/dataset.zh.yml b/hyrax/config/locales/dataset.zh.yml new file mode 100644 index 00000000..f9d1a533 --- /dev/null +++ b/hyrax/config/locales/dataset.zh.yml @@ -0,0 +1,10 @@ +zh: + hyrax: + icons: + dataset: 'fa fa-file-text-o' + select_type: + dataset: + # TODO: translate `human_name` into Chinese + description: "Dataset 作å“" + name: "Dataset" + # TODO: translate `human_name` into Chinese diff --git a/hyrax/config/locales/devise.en.yml b/hyrax/config/locales/devise.en.yml new file mode 100644 index 00000000..260e1c4b --- /dev/null +++ b/hyrax/config/locales/devise.en.yml @@ -0,0 +1,65 @@ +# Additional translations at https://github.com/heartcombo/devise/wiki/I18n + +en: + devise: + confirmations: + confirmed: "Your email address has been successfully confirmed." + send_instructions: "You will receive an email with instructions for how to confirm your email address in a few minutes." + send_paranoid_instructions: "If your email address exists in our database, you will receive an email with instructions for how to confirm your email address in a few minutes." + failure: + already_authenticated: "You are already signed in." + inactive: "Your account is not activated yet." + invalid: "Invalid %{authentication_keys} or password." + locked: "Your account is locked." + last_attempt: "You have one more attempt before your account is locked." + not_found_in_database: "Invalid %{authentication_keys} or password." + timeout: "Your session expired. Please sign in again to continue." + unauthenticated: "You need to sign in or sign up before continuing." + unconfirmed: "You have to confirm your email address before continuing." + mailer: + confirmation_instructions: + subject: "Confirmation instructions" + reset_password_instructions: + subject: "Reset password instructions" + unlock_instructions: + subject: "Unlock instructions" + email_changed: + subject: "Email Changed" + password_change: + subject: "Password Changed" + omniauth_callbacks: + failure: "Could not authenticate you from %{kind} because \"%{reason}\"." + success: "Successfully authenticated from %{kind} account." + passwords: + no_token: "You can't access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided." + send_instructions: "You will receive an email with instructions on how to reset your password in a few minutes." + send_paranoid_instructions: "If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes." + updated: "Your password has been changed successfully. You are now signed in." + updated_not_active: "Your password has been changed successfully." + registrations: + destroyed: "Bye! Your account has been successfully cancelled. We hope to see you again soon." + signed_up: "Welcome! You have signed up successfully." + signed_up_but_inactive: "You have signed up successfully. However, we could not sign you in because your account is not yet activated." + signed_up_but_locked: "You have signed up successfully. However, we could not sign you in because your account is locked." + signed_up_but_unconfirmed: "A message with a confirmation link has been sent to your email address. Please follow the link to activate your account." + update_needs_confirmation: "You updated your account successfully, but we need to verify your new email address. Please check your email and follow the confirmation link to confirm your new email address." + updated: "Your account has been updated successfully." + updated_but_not_signed_in: "Your account has been updated successfully, but since your password was changed, you need to sign in again." + sessions: + signed_in: "Signed in successfully." + signed_out: "Signed out successfully." + already_signed_out: "Signed out successfully." + unlocks: + send_instructions: "You will receive an email with instructions for how to unlock your account in a few minutes." + send_paranoid_instructions: "If your account exists, you will receive an email with instructions for how to unlock it in a few minutes." + unlocked: "Your account has been unlocked successfully. Please sign in to continue." + errors: + messages: + already_confirmed: "was already confirmed, please try signing in" + confirmation_period_expired: "needs to be confirmed within %{period}, please request a new one" + expired: "has expired, please request a new one" + not_found: "not found" + not_locked: "was not locked" + not_saved: + one: "1 error prohibited this %{resource} from being saved:" + other: "%{count} errors prohibited this %{resource} from being saved:" diff --git a/hyrax/config/locales/en.yml b/hyrax/config/locales/en.yml new file mode 100644 index 00000000..decc5a85 --- /dev/null +++ b/hyrax/config/locales/en.yml @@ -0,0 +1,33 @@ +# Files in the config/locales directory are used for internationalization +# and are automatically loaded by Rails. If you want to use locales other +# than English, add the necessary files in this directory. +# +# To use the locales, use `I18n.t`: +# +# I18n.t 'hello' +# +# In views, this is aliased to just `t`: +# +# <%= t('hello') %> +# +# To use a different locale, set it with `I18n.locale`: +# +# I18n.locale = :es +# +# This would use the information in config/locales/es.yml. +# +# The following keys must be escaped otherwise they will not be retrieved by +# the default I18n backend: +# +# true, false, on, off, yes, no +# +# Instead, surround them with single quotes. +# +# en: +# 'true': 'foo' +# +# To learn more, please read the Rails Internationalization guide +# available at http://guides.rubyonrails.org/i18n.html. + +en: + hello: "Hello world" diff --git a/hyrax/config/locales/hyrax.de.yml b/hyrax/config/locales/hyrax.de.yml new file mode 100644 index 00000000..e5be9af8 --- /dev/null +++ b/hyrax/config/locales/hyrax.de.yml @@ -0,0 +1,58 @@ +--- +de: + blacklight: + search: + fields: + facet: + based_near_label_sim: Ort + creator_sim: Schöpfer + file_format_sim: Format + generic_type_sim: Art + keyword_sim: Stichwort + language_sim: Sprache + publisher_sim: Herausgeber + subject_sim: Fach + index: + based_near_tesim: Ort + contributor_tesim: Mitwirkender + creator_tesim: Schöpfer + date_created_tesim: Datum erstellt + date_modified_dtsi: Datum geändert + date_uploaded_dtsi: Datum hochgeladen + description_tesim: Beschreibung + file_format_tesim: Datei Format + identifier_tesim: Identifikator + keyword_tesim: Stichwort + language_tesim: Sprache + license_tesim: Lizenz + publisher_tesim: Herausgeber + rights_statement_tesim: Rechte + subject_tesim: Fach + show: + based_near_tesim: Ort + contributor_tesim: Mitwirkender + creator_tesim: Schöpfer + date_created_tesim: Datum erstellt + date_modified_dtsi: Datum geändert + date_uploaded_dtsi: Datum hochgeladen + description_tesim: Beschreibung + file_format_tesim: Datei Format + identifier_tesim: Identifikator + keyword_tesim: Stichwort + language_tesim: Sprache + license_tesim: Lizenz + publisher_tesim: Herausgeber + rights_statement_tesim: Rechte + subject_tesim: Fach + title_tesim: Titel + hyrax: + account_name: Meine Institution Konto-ID + directory: + suffix: "@ Example.org" + footer: + copyright_html: "<strong>Copyright © 2018 Samvera lizenziert</strong> unter der Apache Lizenz, Version 2.0" + service_html: Ein Dienst von <a href="http://samvera.org/" class="navbar-link" target="_blank">Samvera</a> . + institution_name: Institution + institution_name_full: Name des Instituts + product_name: Hyrax + product_twitter_handle: "@SamveraRepo" diff --git a/hyrax/config/locales/hyrax.en.yml b/hyrax/config/locales/hyrax.en.yml new file mode 100644 index 00000000..15fc22f4 --- /dev/null +++ b/hyrax/config/locales/hyrax.en.yml @@ -0,0 +1,58 @@ +--- +en: + blacklight: + search: + fields: + facet: + based_near_label_sim: Location + creator_sim: Creator + file_format_sim: Format + generic_type_sim: Type + keyword_sim: Keyword + language_sim: Language + publisher_sim: Publisher + subject_sim: Subject + index: + based_near_tesim: Location + contributor_tesim: Contributor + creator_tesim: Creator + date_created_tesim: Date Created + date_modified_dtsi: Date Modified + date_uploaded_dtsi: Date Uploaded + description_tesim: Description + file_format_tesim: File Format + identifier_tesim: Identifier + keyword_tesim: Keyword + language_tesim: Language + license_tesim: License + publisher_tesim: Publisher + rights_statement_tesim: Rights Statement + subject_tesim: Subject + show: + based_near_tesim: Location + contributor_tesim: Contributor + creator_tesim: Creator + date_created_tesim: Date Created + date_modified_dtsi: Date Modified + date_uploaded_dtsi: Date Uploaded + description_tesim: Description + file_format_tesim: File Format + identifier_tesim: Identifier + keyword_tesim: Keyword + language_tesim: Language + license_tesim: License + publisher_tesim: Publisher + rights_statement_tesim: Rights Statement + subject_tesim: Subject + title_tesim: Title + hyrax: + account_name: My Institution Account Id + directory: + suffix: "@example.org" + footer: + copyright_html: "<strong>Copyright © 2018 Samvera</strong> Licensed under the Apache License, Version 2.0" + service_html: A service of <a href="http://samvera.org/" class="navbar-link" target="_blank">Samvera</a>. + institution_name: Institution + institution_name_full: The Institution Name + product_name: Hyrax + product_twitter_handle: "@SamveraRepo" diff --git a/hyrax/config/locales/hyrax.es.yml b/hyrax/config/locales/hyrax.es.yml new file mode 100644 index 00000000..4f8f61fd --- /dev/null +++ b/hyrax/config/locales/hyrax.es.yml @@ -0,0 +1,58 @@ +--- +es: + blacklight: + search: + fields: + facet: + based_near_label_sim: Ubicación + creator_sim: Creador + file_format_sim: Formato + generic_type_sim: Tipo + keyword_sim: Palabra clave + language_sim: Idioma + publisher_sim: Editor + subject_sim: Tema + index: + based_near_tesim: Ubicación + contributor_tesim: Contribuidor + creator_tesim: Creador + date_created_tesim: Fecha de Creacion + date_modified_dtsi: Fecha Modificada + date_uploaded_dtsi: Fecha de Subida + description_tesim: Descripción + file_format_tesim: Formato de Archivo + identifier_tesim: Identificador + keyword_tesim: Palabra clave + language_tesim: Idioma + license_tesim: Licencia + publisher_tesim: Editor + rights_statement_tesim: Derechos + subject_tesim: Tema + show: + based_near_tesim: Ubicación + contributor_tesim: Contribuidor + creator_tesim: Creador + date_created_tesim: Fecha de Creacion + date_modified_dtsi: Fecha Modificada + date_uploaded_dtsi: Fecha de Subida + description_tesim: Descripción + file_format_tesim: Formato de Archivo + identifier_tesim: Identificador + keyword_tesim: Palabra clave + language_tesim: Idioma + license_tesim: Licencia + publisher_tesim: Editor + rights_statement_tesim: Derechos + subject_tesim: Tema + title_tesim: TÃtulo + hyrax: + account_name: Mi identificador de cuenta institucional + directory: + suffix: "@example.org" + footer: + copyright_html: "<strong>Copyright © 2018 Samvera</strong> bajo licencia de Apache, Version 2.0" + service_html: Un servicio de <a href="http://samvera.org/" class="navbar-link" target="_blank">Samvera</a>. + institution_name: institución + institution_name_full: El nombre de la institución + product_name: Hyrax + product_twitter_handle: "@SamveraRepo" diff --git a/hyrax/config/locales/hyrax.fr.yml b/hyrax/config/locales/hyrax.fr.yml new file mode 100644 index 00000000..ee080b73 --- /dev/null +++ b/hyrax/config/locales/hyrax.fr.yml @@ -0,0 +1,58 @@ +--- +fr: + blacklight: + search: + fields: + facet: + based_near_label_sim: Emplacement + creator_sim: Créateur + file_format_sim: Format + generic_type_sim: Type + keyword_sim: Mot-clé + language_sim: La langue + publisher_sim: Éditeur + subject_sim: Assujettir + index: + based_near_tesim: Emplacement + contributor_tesim: Donateur + creator_tesim: Créateur + date_created_tesim: date créée + date_modified_dtsi: Date modifiée + date_uploaded_dtsi: Date de téléchargement + description_tesim: La description + file_format_tesim: Format de fichier + identifier_tesim: Identificateur + keyword_tesim: Mot-clé + language_tesim: La langue + license_tesim: Licence + publisher_tesim: Éditeur + rights_statement_tesim: Déclaration des droits + subject_tesim: Assujettir + show: + based_near_tesim: Emplacement + contributor_tesim: Donateur + creator_tesim: Créateur + date_created_tesim: date créée + date_modified_dtsi: Date modifiée + date_uploaded_dtsi: Date de téléchargement + description_tesim: La description + file_format_tesim: Format de fichier + identifier_tesim: Identificateur + keyword_tesim: Mot-clé + language_tesim: La langue + license_tesim: Licence + publisher_tesim: Éditeur + rights_statement_tesim: Déclaration des droits + subject_tesim: Assujettir + title_tesim: Titre + hyrax: + account_name: L'ID de compte de mon établissement + directory: + suffix: "@ Example.org" + footer: + copyright_html: "<strong>Copyright © 2018 Samvera</strong> Licence sous Licence Apache, Version 2.0" + service_html: Un service de <a href="http://samvera.org/" class="navbar-link" target="_blank">Samvera</a> . + institution_name: Institution + institution_name_full: Nom de l'établissement + product_name: Hyrax + product_twitter_handle: "@SamveraRepo" diff --git a/hyrax/config/locales/hyrax.it.yml b/hyrax/config/locales/hyrax.it.yml new file mode 100644 index 00000000..6735be8c --- /dev/null +++ b/hyrax/config/locales/hyrax.it.yml @@ -0,0 +1,58 @@ +--- +it: + blacklight: + search: + fields: + facet: + based_near_label_sim: luogo + creator_sim: Creatore + file_format_sim: Formato + generic_type_sim: Tipo + keyword_sim: Parola chiave + language_sim: Lingua + publisher_sim: Editore + subject_sim: Soggetto + index: + based_near_tesim: luogo + contributor_tesim: Collaboratore + creator_tesim: Creatore + date_created_tesim: data di creazione + date_modified_dtsi: Data modificata + date_uploaded_dtsi: Data caricata + description_tesim: Descrizione + file_format_tesim: Formato del file + identifier_tesim: Identifier + keyword_tesim: Parola chiave + language_tesim: Lingua + license_tesim: Licenza + publisher_tesim: Editore + rights_statement_tesim: Diritti + subject_tesim: Soggetto + show: + based_near_tesim: luogo + contributor_tesim: Collaboratore + creator_tesim: Creatore + date_created_tesim: data di creazione + date_modified_dtsi: Data modificata + date_uploaded_dtsi: Data caricata + description_tesim: Descrizione + file_format_tesim: Formato del file + identifier_tesim: Identifier + keyword_tesim: Parola chiave + language_tesim: Lingua + license_tesim: Licenza + publisher_tesim: Editore + rights_statement_tesim: Diritti + subject_tesim: Soggetto + title_tesim: Titolo + hyrax: + account_name: ID del mio istituto dell'istituto + directory: + suffix: "@ example.org" + footer: + copyright_html: "<strong>Copyright © 2018 Samvera</strong> Licenza sotto la licenza Apache, versione 2.0" + service_html: Un servizio di <a href="http://samvera.org/" class="navbar-link" target="_blank">Samvera</a> . + institution_name: Istituzione + institution_name_full: Nome dell'Istituzione + product_name: Hyrax + product_twitter_handle: "@SamveraRepo" diff --git a/hyrax/config/locales/hyrax.pt-BR.yml b/hyrax/config/locales/hyrax.pt-BR.yml new file mode 100644 index 00000000..3c55d9df --- /dev/null +++ b/hyrax/config/locales/hyrax.pt-BR.yml @@ -0,0 +1,58 @@ +--- +pt-BR: + blacklight: + search: + fields: + facet: + based_near_label_sim: Localização + creator_sim: Criador + file_format_sim: Formato + generic_type_sim: Tipo + keyword_sim: Palavra-chave + language_sim: LÃngua + publisher_sim: Editor + subject_sim: Sujeito + index: + based_near_tesim: Localização + contributor_tesim: Contribuinte + creator_tesim: O Criador + date_created_tesim: Data de Criação + date_modified_dtsi: Data de Modificação + date_uploaded_dtsi: Data de Carga + description_tesim: Descrição + file_format_tesim: Formato de arquivo + identifier_tesim: Identificador + keyword_tesim: Palavra-chave + language_tesim: LÃngua + license_tesim: Licença + publisher_tesim: Editor + rights_statement_tesim: Direitos + subject_tesim: Sujeito + show: + based_near_tesim: Localização + contributor_tesim: Colaborador + creator_tesim: Criador + date_created_tesim: Data de Criação + date_modified_dtsi: Data de Modificação + date_uploaded_dtsi: Data de Carga + description_tesim: Descrição + file_format_tesim: Formato de arquivo + identifier_tesim: Identificador + keyword_tesim: Palavra-chave + language_tesim: LÃngua + license_tesim: Licença + publisher_tesim: Editor + rights_statement_tesim: Direitos + subject_tesim: Sujeito + title_tesim: TÃtulo + hyrax: + account_name: ID da conta da minha instituição + directory: + suffix: "@ Example.org" + footer: + copyright_html: "<strong>Copyright © 2018 Samvera </strong> Licenciado sob a Licença Apache, Versão 2.0" + service_html: Um serviço de <a href="http://samvera.org/" class="navbar-link" target="_blank">Samvera</a> . + institution_name: Instituição + institution_name_full: O Nome da Instituição + product_name: Hyrax + product_twitter_handle: "@SamveraRepo" diff --git a/hyrax/config/locales/hyrax.zh.yml b/hyrax/config/locales/hyrax.zh.yml new file mode 100644 index 00000000..a6973345 --- /dev/null +++ b/hyrax/config/locales/hyrax.zh.yml @@ -0,0 +1,58 @@ +--- +zh: + blacklight: + search: + fields: + facet: + based_near_label_sim: ä½ç½® + creator_sim: åˆ›é€ è€… + file_format_sim: æ–‡ä»¶æ ¼å¼ + generic_type_sim: 类型 + keyword_sim: å…³é”®è¯ + language_sim: è¯è¨€ + publisher_sim: 出版者 + subject_sim: å¦ç§‘ + index: + based_near_tesim: ä½ç½® + contributor_tesim: 贡献者 + creator_tesim: åˆ›é€ è€… + date_created_tesim: 创建日期 + date_modified_dtsi: 修改日期 + date_uploaded_dtsi: æ—¥æœŸä¸Šä¼ + description_tesim: æè¿° + file_format_tesim: æ–‡ä»¶æ ¼å¼ + identifier_tesim: 识别ç + keyword_tesim: å…³é”®è¯ + language_tesim: è¯è¨€ + license_tesim: 执照 + publisher_tesim: 出版者 + rights_statement_tesim: æƒ + subject_tesim: å¦ç§‘ + show: + based_near_tesim: ä½ç½® + contributor_tesim: 贡献者 + creator_tesim: åˆ›é€ è€… + date_created_tesim: 创建日期 + date_modified_dtsi: 修改日期 + date_uploaded_dtsi: æ—¥æœŸä¸Šä¼ + description_tesim: æè¿° + file_format_tesim: æ–‡ä»¶æ ¼å¼ + identifier_tesim: 识别ç + keyword_tesim: å…³é”®è¯ + language_tesim: è¯è¨€ + license_tesim: 执照 + publisher_tesim: 出版者 + rights_statement_tesim: æƒ + subject_tesim: å¦ç§‘ + title_tesim: æ ‡é¢˜ + hyrax: + account_name: 我的机构å¸æˆ·æ ‡è¯†ç¬¦ + directory: + suffix: "@example.org" + footer: + copyright_html: "<strong>版æƒæ‰€æœ‰ © 2018 Samvera</strong> æ ¹æ®Apache许å¯è¯2.0版许å¯" + service_html: çš„æœåŠ¡<a href="http://samvera.org/" class="navbar-link" target="_blank">Samvera</a>. + institution_name: 机构 + institution_name_full: 机构å称 + product_name: 蹄兔 + product_twitter_handle: "@SamveraRepo" diff --git a/hyrax/config/puma.rb b/hyrax/config/puma.rb new file mode 100644 index 00000000..ed10558b --- /dev/null +++ b/hyrax/config/puma.rb @@ -0,0 +1,37 @@ +# Puma can serve each request in a thread from an internal thread pool. +# The `threads` method setting takes two numbers: a minimum and maximum. +# Any libraries that use thread pools should be configured to match +# the maximum value specified for Puma. Default is set to 5 threads for minimum +# and maximum; this matches the default thread size of Active Record. +# +threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }.to_i +threads threads_count, threads_count + +# Specifies the `port` that Puma will listen on to receive requests; default is 3000. +# +port ENV.fetch("PORT") { 3000 } + +# Specifies the `environment` that Puma will run in. +# +environment ENV.fetch("RAILS_ENV") { "development" } + +# Specifies the `pidfile` that Puma will use. +pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" } + +# Specifies the number of `workers` to boot in clustered mode. +# Workers are forked webserver processes. If using threads and workers together +# the concurrency of the application would be max `threads` * `workers`. +# Workers do not work on JRuby or Windows (both of which do not support +# processes). +# +# workers ENV.fetch("WEB_CONCURRENCY") { 2 } + +# Use the `preload_app!` method when specifying a `workers` number. +# This directive tells Puma to first boot the application and load code +# before forking the application. This takes advantage of Copy On Write +# process behavior so workers use less memory. +# +# preload_app! + +# Allow puma to be restarted by `rails restart` command. +plugin :tmp_restart diff --git a/hyrax/config/redis.yml b/hyrax/config/redis.yml new file mode 100644 index 00000000..181132ee --- /dev/null +++ b/hyrax/config/redis.yml @@ -0,0 +1,9 @@ +development: + host: <%= ENV.fetch('REDIS_HOST', 'localhost') %> + port: <%= ENV.fetch('REDIS_PORT', '6379') %> +test: + host: <%= ENV.fetch('REDIS_HOST', 'localhost') %> + port: <%= ENV.fetch('REDIS_PORT', '6379') %> +production: + host: <%= ENV.fetch('REDIS_HOST', 'redis') %> + port: <%= ENV.fetch('REDIS_PORT', '6379') %> \ No newline at end of file diff --git a/hyrax/config/role_map.yml b/hyrax/config/role_map.yml new file mode 100644 index 00000000..a13f3e36 --- /dev/null +++ b/hyrax/config/role_map.yml @@ -0,0 +1,23 @@ +development: + archivist: + - archivist1@example.com + +test: + archivist: + - archivist1@example.com + - archivist2@example.com + - leland_himself@example.com + admin_policy_object_editor: + - archivist1@example.com + donor: + - donor1@example.com + - leland_himself@example.com + researcher: + - archivist1@example.com + - researcher1@example.com + patron: + - patron1@example.com + - leland_himself@example.com + +production: + # Add roles for users here. diff --git a/hyrax/config/routes.rb b/hyrax/config/routes.rb new file mode 100644 index 00000000..8b03d547 --- /dev/null +++ b/hyrax/config/routes.rb @@ -0,0 +1,34 @@ +Rails.application.routes.draw do + mount Riiif::Engine => 'images', as: :riiif if Hyrax.config.iiif_image_server? + mount BrowseEverything::Engine => '/browse' + + mount Blacklight::Engine => '/' + + concern :searchable, Blacklight::Routes::Searchable.new + + resource :catalog, only: [:index], as: 'catalog', path: '/catalog', controller: 'catalog' do + concerns :searchable + end + devise_for :users + mount Hydra::RoleManagement::Engine => '/' + + mount Qa::Engine => '/authorities' + mount Hyrax::Engine, at: '/' + resources :welcome, only: 'index' + root 'hyrax/homepage#index' + curation_concerns_basic_routes + concern :exportable, Blacklight::Routes::Exportable.new + + resources :solr_documents, only: [:show], path: '/catalog', controller: 'catalog' do + concerns :exportable + end + + resources :bookmarks do + concerns :exportable + + collection do + delete 'clear' + end + end + # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html +end diff --git a/hyrax/config/solr.yml b/hyrax/config/solr.yml new file mode 100644 index 00000000..baed60a9 --- /dev/null +++ b/hyrax/config/solr.yml @@ -0,0 +1,7 @@ +# NB: the URLs in this file should match those in blacklight.yml +development: + url: <%= ENV['SOLR_URL_SCHEME'] || 'http' %>://<%= ENV['SOLR_HOST'] || '127.0.0.1' %>:<%= ENV['SOLR_PORT'] || '8983' %>/solr/hyrax_production +test: + url: <%= ENV['SOLR_URL_SCHEME'] || 'http' %>://<%= ENV['SOLR_HOST'] || '127.0.0.1' %>:<%= ENV['SOLR_TEST_PORT'] || '8985' %>/solr/hydra-test +production: + url: <%= ENV['SOLR_URL_SCHEME'] || 'http' %>://<%= ENV['SOLR_HOST'] || 'solr' %>:<%= ENV['SOLR_PORT'] || '8983' %>/solr/hyrax_production diff --git a/hyrax/config/solr_wrapper_test.yml b/hyrax/config/solr_wrapper_test.yml new file mode 100644 index 00000000..46571e69 --- /dev/null +++ b/hyrax/config/solr_wrapper_test.yml @@ -0,0 +1,8 @@ +#config/solr_wrapper_test.yml +# version: 6.1.0 +port: 8985 +instance_dir: tmp/solr-test +collection: + persist: false + dir: solr/conf + name: hydra-test diff --git a/hyrax/config/solr_wrapper_valkyrie_test.yml b/hyrax/config/solr_wrapper_valkyrie_test.yml new file mode 100644 index 00000000..226a6748 --- /dev/null +++ b/hyrax/config/solr_wrapper_valkyrie_test.yml @@ -0,0 +1,7 @@ +# config/solr_wrapper_valkyrie_test.yml +port: 8987 +instance_dir: tmp/solr-valkyrie-test +collection: + persist: false + dir: solr/conf + name: hyrax-valkyrie-test diff --git a/hyrax/config/spring.rb b/hyrax/config/spring.rb new file mode 100644 index 00000000..9fa7863f --- /dev/null +++ b/hyrax/config/spring.rb @@ -0,0 +1,6 @@ +%w[ + .ruby-version + .rbenv-vars + tmp/restart.txt + tmp/caching-dev.txt +].each { |path| Spring.watch(path) } diff --git a/hyrax/config/storage.yml b/hyrax/config/storage.yml new file mode 100644 index 00000000..d32f76e8 --- /dev/null +++ b/hyrax/config/storage.yml @@ -0,0 +1,34 @@ +test: + service: Disk + root: <%= Rails.root.join("tmp/storage") %> + +local: + service: Disk + root: <%= Rails.root.join("storage") %> + +# Use rails credentials:edit to set the AWS secrets (as aws:access_key_id|secret_access_key) +# amazon: +# service: S3 +# access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %> +# secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %> +# region: us-east-1 +# bucket: your_own_bucket + +# Remember not to checkin your GCS keyfile to a repository +# google: +# service: GCS +# project: your_project +# credentials: <%= Rails.root.join("path/to/gcs.keyfile") %> +# bucket: your_own_bucket + +# Use rails credentials:edit to set the Azure Storage secret (as azure_storage:storage_access_key) +# microsoft: +# service: AzureStorage +# storage_account_name: your_account_name +# storage_access_key: <%= Rails.application.credentials.dig(:azure_storage, :storage_access_key) %> +# container: your_container_name + +# mirror: +# service: Mirror +# primary: local +# mirrors: [ amazon, google, microsoft ] diff --git a/hyrax/config/tinymce.yml b/hyrax/config/tinymce.yml new file mode 100644 index 00000000..ed2b4c00 --- /dev/null +++ b/hyrax/config/tinymce.yml @@ -0,0 +1,13 @@ +default: &default + setup: tinymce_nav_safety # onChange event init +content_block: + <<: *default + menubar: false + toolbar1: styleselect | bold italic | undo redo + toolbar2: table | fullscreen | image + plugins: + - table + - fullscreen + - image +custom: + <<: *default diff --git a/hyrax/config/uv/uv-config.json b/hyrax/config/uv/uv-config.json new file mode 100644 index 00000000..077404aa --- /dev/null +++ b/hyrax/config/uv/uv-config.json @@ -0,0 +1,3 @@ +{ + +} \ No newline at end of file diff --git a/hyrax/config/uv/uv.html b/hyrax/config/uv/uv.html new file mode 100644 index 00000000..c8e8eced --- /dev/null +++ b/hyrax/config/uv/uv.html @@ -0,0 +1,87 @@ + +<!-- + This is what the embed iframe src links to. It doesn't need to communicate with the parent page, only fill the available space and look for #? parameters +--> + +<html> + <head> + <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" /> + <link rel="icon" href="favicon.ico"> + <link rel="stylesheet" type="text/css" href="uv.css"> + <script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script> + <script type="text/javascript" src="lib/offline.js"></script> + <script type="text/javascript" src="helpers.js"></script> + <style> + body { + margin: 0; + padding: 0; + overflow: hidden; + } + </style> + <script type="text/javascript"> + window.addEventListener('uvLoaded', function(e) { + urlDataProvider = new UV.URLDataProvider(true); + var formattedLocales; + var locales = urlDataProvider.get('locales', ''); + + if (locales) { + var names = locales.split(','); + formattedLocales = []; + + for (var i in names) { + var nameparts = String(names[i]).split(':'); + formattedLocales[i] = {name: nameparts[0], label: nameparts[1]}; + } + + } else { + formattedLocales = [ + { + name: 'en-GB' + } + ] + } + + uv = createUV('#uv', { + root: '.', + iiifResourceUri: urlDataProvider.get('manifest'), + configUri: urlDataProvider.get('config'), + collectionIndex: Number(urlDataProvider.get('c', 0)), + manifestIndex: Number(urlDataProvider.get('m', 0)), + sequenceIndex: Number(urlDataProvider.get('s', 0)), + canvasIndex: Number(urlDataProvider.get('cv', 0)), + rangeId: urlDataProvider.get('rid', 0), + rotation: Number(urlDataProvider.get('r', 0)), + xywh: urlDataProvider.get('xywh', ''), + embedded: true, + locales: formattedLocales + }, urlDataProvider); + }, false); + </script> + </head> + <body> + + <div id="uv" class="uv"></div> + + <script> + $(function() { + + var $UV = $('#uv'); + + function resize() { + var windowWidth = window.innerWidth; + var windowHeight = window.innerHeight; + $UV.width(windowWidth); + $UV.height(windowHeight); + } + + $(window).on('resize' ,function() { + resize(); + }); + + resize(); + }); + + </script> + <script type="text/javascript" src="uv.js"></script> + </body> +</html> diff --git a/hyrax/config/valkyrie_index.yml b/hyrax/config/valkyrie_index.yml new file mode 100644 index 00000000..239162f4 --- /dev/null +++ b/hyrax/config/valkyrie_index.yml @@ -0,0 +1,12 @@ +development: + host: <%= ENV['VALKYRIE_SOLR_HOST'] %> + port: <%= ENV['VALKYRIE_SOLR_PORT'] %> + core: <%= ENV['VALKYRIE_SOLR_CORE'] || 'hyrax-valkyrie-dev' %> +test: + host: <%= ENV['VALKYRIE_SOLR_HOST'] %> + port: <%= ENV['VALKYRIE_SOLR_PORT'] || 8987 %> + core: <%= ENV['VALKYRIE_SOLR_CORE'] || 'hyrax-valkyrie-test' %> +production: + host: <%= ENV['VALKYRIE_SOLR_HOST'] %> + port: <%= ENV['VALKYRIE_SOLR_PORT'] %> + core: <%= ENV['VALKYRIE_SOLR_CORE'] %> diff --git a/hyrax/config/workflows/default_workflow.json b/hyrax/config/workflows/default_workflow.json new file mode 100644 index 00000000..c0a8d0ea --- /dev/null +++ b/hyrax/config/workflows/default_workflow.json @@ -0,0 +1,21 @@ +{ + "workflows": [ + { + "name": "default", + "label": "Default workflow", + "description": "A single submission step, default workflow", + "allows_access_grant": true, + "actions": [ + { + "name": "deposit", + "from_states": [], + "transition_to": "deposited", + "methods": [ + "Hyrax::Workflow::GrantEditToDepositor", + "Hyrax::Workflow::ActivateObject" + ] + } + ] + } + ] +} diff --git a/hyrax/config/workflows/mediated_deposit_workflow.json b/hyrax/config/workflows/mediated_deposit_workflow.json new file mode 100644 index 00000000..fd4fe40e --- /dev/null +++ b/hyrax/config/workflows/mediated_deposit_workflow.json @@ -0,0 +1,76 @@ +{ + "workflows": [ + { + "name": "one_step_mediated_deposit", + "label": "One-step mediated deposit workflow", + "description": "A single-step workflow for mediated deposit in which all deposits must be approved by a reviewer. Reviewer may also send deposits back to the depositor.", + "allows_access_grant": false, + "actions": [ + { + "name": "deposit", + "from_states": [], + "transition_to": "pending_review", + "notifications": [ + { + "notification_type": "email", + "name": "Hyrax::Workflow::PendingReviewNotification", + "to": ["approving"] + } + ], + "methods": [ + "Hyrax::Workflow::GrantReadToDepositor", + "Hyrax::Workflow::DeactivateObject" + ] + }, { + "name": "request_changes", + "from_states": [{"names": ["deposited", "pending_review"], "roles": ["approving"]}], + "transition_to": "changes_required", + "notifications": [ + { + "notification_type": "email", + "name": "Hyrax::Workflow::ChangesRequiredNotification", + "to": ["approving"] + } + ], + "methods": [ + "Hyrax::Workflow::DeactivateObject", + "Hyrax::Workflow::GrantEditToDepositor" + ] + }, { + "name": "approve", + "from_states": [{"names": ["pending_review"], "roles": ["approving"]}], + "transition_to": "deposited", + "notifications": [ + { + "notification_type": "email", + "name": "Hyrax::Workflow::DepositedNotification", + "to": ["approving"] + } + ], + "methods": [ + "Hyrax::Workflow::GrantReadToDepositor", + "Hyrax::Workflow::RevokeEditFromDepositor", + "Hyrax::Workflow::ActivateObject" + ] + }, { + "name": "request_review", + "from_states": [{"names": ["changes_required"], "roles": ["depositing"]}], + "transition_to": "pending_review", + "notifications": [ + { + "notification_type": "email", + "name": "Hyrax::Workflow::PendingReviewNotification", + "to": ["approving"] + } + ] + }, { + "name": "comment_only", + "from_states": [ + { "names": ["pending_review", "deposited"], "roles": ["approving"] }, + { "names": ["changes_required"], "roles": ["depositing"] } + ] + } + ] + } + ] +} diff --git a/hyrax/db/migrate/20220217192729_create_searches.blacklight.rb b/hyrax/db/migrate/20220217192729_create_searches.blacklight.rb new file mode 100644 index 00000000..71d74dde --- /dev/null +++ b/hyrax/db/migrate/20220217192729_create_searches.blacklight.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true +# This migration comes from blacklight (originally 20140202020201) +class CreateSearches < ActiveRecord::Migration[4.2] + def self.up + create_table :searches do |t| + t.binary :query_params + t.integer :user_id, index: true + t.string :user_type + + t.timestamps null: false + end + end + + def self.down + drop_table :searches + end +end diff --git a/hyrax/db/migrate/20220217192730_create_bookmarks.blacklight.rb b/hyrax/db/migrate/20220217192730_create_bookmarks.blacklight.rb new file mode 100644 index 00000000..06104a34 --- /dev/null +++ b/hyrax/db/migrate/20220217192730_create_bookmarks.blacklight.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true +# This migration comes from blacklight (originally 20140202020202) +class CreateBookmarks < ActiveRecord::Migration[4.2] + def self.up + create_table :bookmarks do |t| + t.integer :user_id, index: true, null: false + t.string :user_type + t.string :document_id, index: true + t.string :document_type + t.binary :title + t.timestamps null: false + end + end + + def self.down + drop_table :bookmarks + end + +end diff --git a/hyrax/db/migrate/20220217192731_add_polymorphic_type_to_bookmarks.blacklight.rb b/hyrax/db/migrate/20220217192731_add_polymorphic_type_to_bookmarks.blacklight.rb new file mode 100644 index 00000000..cee3e2cb --- /dev/null +++ b/hyrax/db/migrate/20220217192731_add_polymorphic_type_to_bookmarks.blacklight.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +# This migration comes from blacklight (originally 20140320000000) +class AddPolymorphicTypeToBookmarks < ActiveRecord::Migration[4.2] + def change + add_column(:bookmarks, :document_type, :string) unless Bookmark.connection.column_exists? :bookmarks, :document_type + + add_index :bookmarks, :user_id unless Bookmark.connection.index_exists? :bookmarks, :user_id + end +end diff --git a/hyrax/db/migrate/20220217192748_devise_create_users.rb b/hyrax/db/migrate/20220217192748_devise_create_users.rb new file mode 100644 index 00000000..f674a595 --- /dev/null +++ b/hyrax/db/migrate/20220217192748_devise_create_users.rb @@ -0,0 +1,44 @@ +# frozen_string_literal: true + +class DeviseCreateUsers < ActiveRecord::Migration[5.2] + def change + create_table :users do |t| + ## Database authenticatable + t.string :email, null: false, default: "" + t.string :encrypted_password, null: false, default: "" + + ## Recoverable + t.string :reset_password_token + t.datetime :reset_password_sent_at + + ## Rememberable + t.datetime :remember_created_at + + ## Trackable + # t.integer :sign_in_count, default: 0, null: false + # t.datetime :current_sign_in_at + # t.datetime :last_sign_in_at + # t.string :current_sign_in_ip + # t.string :last_sign_in_ip + + ## Confirmable + # t.string :confirmation_token + # t.datetime :confirmed_at + # t.datetime :confirmation_sent_at + # t.string :unconfirmed_email # Only if using reconfirmable + + ## Lockable + # t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts + # t.string :unlock_token # Only if unlock strategy is :email or :both + # t.datetime :locked_at + + + t.timestamps null: false + end + + add_index :users, :email, unique: true + add_index :users, :reset_password_token, unique: true + # add_index :users, :confirmation_token, unique: true + # add_index :users, :unlock_token, unique: true + end +end diff --git a/hyrax/db/migrate/20220217192751_add_devise_guests_to_users.rb b/hyrax/db/migrate/20220217192751_add_devise_guests_to_users.rb new file mode 100644 index 00000000..1adadb97 --- /dev/null +++ b/hyrax/db/migrate/20220217192751_add_devise_guests_to_users.rb @@ -0,0 +1,15 @@ +class AddDeviseGuestsToUsers < ActiveRecord::Migration[5.2] + def self.up + change_table(:users) do |t| + ## Database authenticatable + t.boolean :guest, :default => false + end + + end + + def self.down + # By default, we don't want to make any assumption about how to roll back a migration when your + # model already existed. Please edit below which fields you would like to remove in this migration. + raise ActiveRecord::IrreversibleMigration + end +end diff --git a/hyrax/db/migrate/20220217192823_create_version_committers.hyrax.rb b/hyrax/db/migrate/20220217192823_create_version_committers.hyrax.rb new file mode 100644 index 00000000..66fac050 --- /dev/null +++ b/hyrax/db/migrate/20220217192823_create_version_committers.hyrax.rb @@ -0,0 +1,15 @@ +class CreateVersionCommitters < ActiveRecord::Migration[5.2] + def self.up + create_table :version_committers do |t| + t.string :obj_id + t.string :datastream_id + t.string :version_id + t.string :committer_login + t.timestamps null: false + end + end + + def self.down + drop_table :version_committers + end +end diff --git a/hyrax/db/migrate/20220217192824_create_checksum_audit_logs.hyrax.rb b/hyrax/db/migrate/20220217192824_create_checksum_audit_logs.hyrax.rb new file mode 100644 index 00000000..68fa1973 --- /dev/null +++ b/hyrax/db/migrate/20220217192824_create_checksum_audit_logs.hyrax.rb @@ -0,0 +1,19 @@ +class CreateChecksumAuditLogs < ActiveRecord::Migration[5.2] + def self.up + create_table :checksum_audit_logs do |t| + t.string :file_set_id + t.string :file_id + t.string :version + t.integer :pass + t.string :expected_result + t.string :actual_result + t.timestamps null: false + end + add_index :checksum_audit_logs, [:file_set_id, :file_id], name: 'by_file_set_id_and_file_id', order: { created_at: 'DESC' } + end + + def self.down + remove_index(:checksum_audit_logs, name: 'by_file_set_id_and_file_id') + drop_table :checksum_audit_logs + end +end diff --git a/hyrax/db/migrate/20220217192825_create_single_use_links.hyrax.rb b/hyrax/db/migrate/20220217192825_create_single_use_links.hyrax.rb new file mode 100644 index 00000000..ec7b2ac8 --- /dev/null +++ b/hyrax/db/migrate/20220217192825_create_single_use_links.hyrax.rb @@ -0,0 +1,12 @@ +class CreateSingleUseLinks < ActiveRecord::Migration[5.2] + def change + create_table :single_use_links do |t| + t.string :downloadKey + t.string :path + t.string :itemId + t.datetime :expires + + t.timestamps null: false + end + end +end diff --git a/hyrax/db/migrate/20220217192826_add_social_to_users.hyrax.rb b/hyrax/db/migrate/20220217192826_add_social_to_users.hyrax.rb new file mode 100644 index 00000000..6d46f26b --- /dev/null +++ b/hyrax/db/migrate/20220217192826_add_social_to_users.hyrax.rb @@ -0,0 +1,13 @@ +class AddSocialToUsers < ActiveRecord::Migration[5.2] + def self.up + add_column :users, :facebook_handle, :string + add_column :users, :twitter_handle, :string + add_column :users, :googleplus_handle, :string + end + + def self.down + remove_column :users, :facebook_handle, :string + remove_column :users, :twitter_handle, :string + remove_column :users, :googleplus_handle, :string + end +end diff --git a/hyrax/db/migrate/20220217192827_add_ldap_attrs_to_user.hyrax.rb b/hyrax/db/migrate/20220217192827_add_ldap_attrs_to_user.hyrax.rb new file mode 100644 index 00000000..e91c8bab --- /dev/null +++ b/hyrax/db/migrate/20220217192827_add_ldap_attrs_to_user.hyrax.rb @@ -0,0 +1,27 @@ +class AddLdapAttrsToUser < ActiveRecord::Migration[5.2] + def self.up + add_column :users, :display_name, :string + add_column :users, :address, :string + add_column :users, :admin_area, :string + add_column :users, :department, :string + add_column :users, :title, :string + add_column :users, :office, :string + add_column :users, :chat_id, :string + add_column :users, :website, :string + add_column :users, :affiliation, :string + add_column :users, :telephone, :string + end + + def self.down + remove_column :users, :display_name + remove_column :users, :address + remove_column :users, :admin_area + remove_column :users, :department + remove_column :users, :title + remove_column :users, :office + remove_column :users, :chat_id + remove_column :users, :website + remove_column :users, :affiliation + remove_column :users, :telephone + end +end diff --git a/hyrax/db/migrate/20220217192828_add_avatars_to_users.hyrax.rb b/hyrax/db/migrate/20220217192828_add_avatars_to_users.hyrax.rb new file mode 100644 index 00000000..1aa8d252 --- /dev/null +++ b/hyrax/db/migrate/20220217192828_add_avatars_to_users.hyrax.rb @@ -0,0 +1,15 @@ +class AddAvatarsToUsers < ActiveRecord::Migration[5.2] + def self.up + add_column :users, "avatar_file_name", :string + add_column :users, "avatar_content_type", :string + add_column :users, "avatar_file_size", :integer + add_column :users, "avatar_updated_at", :datetime + end + + def self.down + remove_column :users, "avatar_file_name" + remove_column :users, "avatar_content_type" + remove_column :users, "avatar_file_size" + remove_column :users, "avatar_updated_at" + end +end diff --git a/hyrax/db/migrate/20220217192829_create_trophies.hyrax.rb b/hyrax/db/migrate/20220217192829_create_trophies.hyrax.rb new file mode 100644 index 00000000..27b082ac --- /dev/null +++ b/hyrax/db/migrate/20220217192829_create_trophies.hyrax.rb @@ -0,0 +1,10 @@ +class CreateTrophies < ActiveRecord::Migration[5.2] + def change + create_table :trophies do |t| + t.integer :user_id + t.string :generic_file_id + + t.timestamps null: false + end + end +end diff --git a/hyrax/db/migrate/20220217192830_add_linkedin_to_users.hyrax.rb b/hyrax/db/migrate/20220217192830_add_linkedin_to_users.hyrax.rb new file mode 100644 index 00000000..7710944e --- /dev/null +++ b/hyrax/db/migrate/20220217192830_add_linkedin_to_users.hyrax.rb @@ -0,0 +1,5 @@ +class AddLinkedinToUsers < ActiveRecord::Migration[5.2] + def change + add_column :users, :linkedin_handle, :string + end +end diff --git a/hyrax/db/migrate/20220217192831_create_tinymce_assets.hyrax.rb b/hyrax/db/migrate/20220217192831_create_tinymce_assets.hyrax.rb new file mode 100644 index 00000000..7ff6ad95 --- /dev/null +++ b/hyrax/db/migrate/20220217192831_create_tinymce_assets.hyrax.rb @@ -0,0 +1,8 @@ +class CreateTinymceAssets < ActiveRecord::Migration[5.2] + def change + create_table :tinymce_assets do |t| + t.string :file + t.timestamps null: false + end + end +end diff --git a/hyrax/db/migrate/20220217192832_create_content_blocks.hyrax.rb b/hyrax/db/migrate/20220217192832_create_content_blocks.hyrax.rb new file mode 100644 index 00000000..2a30af2d --- /dev/null +++ b/hyrax/db/migrate/20220217192832_create_content_blocks.hyrax.rb @@ -0,0 +1,10 @@ +class CreateContentBlocks < ActiveRecord::Migration[5.2] + def change + create_table :content_blocks do |t| + t.string :name + t.text :value + t.timestamps null: false + end + add_index :content_blocks, :name, unique: true + end +end diff --git a/hyrax/db/migrate/20220217192833_create_featured_works.hyrax.rb b/hyrax/db/migrate/20220217192833_create_featured_works.hyrax.rb new file mode 100644 index 00000000..acf55b78 --- /dev/null +++ b/hyrax/db/migrate/20220217192833_create_featured_works.hyrax.rb @@ -0,0 +1,12 @@ +class CreateFeaturedWorks < ActiveRecord::Migration[5.2] + def change + create_table :featured_works do |t| + t.integer :order, default: 5 + t.string :work_id + + t.timestamps null: false + end + add_index :featured_works, :work_id + add_index :featured_works, :order + end +end diff --git a/hyrax/db/migrate/20220217192834_add_external_key_to_content_blocks.hyrax.rb b/hyrax/db/migrate/20220217192834_add_external_key_to_content_blocks.hyrax.rb new file mode 100644 index 00000000..d2d00d32 --- /dev/null +++ b/hyrax/db/migrate/20220217192834_add_external_key_to_content_blocks.hyrax.rb @@ -0,0 +1,6 @@ +class AddExternalKeyToContentBlocks < ActiveRecord::Migration[5.2] + def change + add_column :content_blocks, :external_key, :string + remove_index :content_blocks, :name + end +end diff --git a/hyrax/db/migrate/20220217192835_create_proxy_deposit_rights.hyrax.rb b/hyrax/db/migrate/20220217192835_create_proxy_deposit_rights.hyrax.rb new file mode 100644 index 00000000..b473c662 --- /dev/null +++ b/hyrax/db/migrate/20220217192835_create_proxy_deposit_rights.hyrax.rb @@ -0,0 +1,10 @@ +class CreateProxyDepositRights < ActiveRecord::Migration[5.2] + def change + create_table :proxy_deposit_rights do |t| + t.references :grantor + t.references :grantee + t.timestamps null: false + end + + end +end diff --git a/hyrax/db/migrate/20220217192836_create_proxy_deposit_requests.hyrax.rb b/hyrax/db/migrate/20220217192836_create_proxy_deposit_requests.hyrax.rb new file mode 100644 index 00000000..d26225aa --- /dev/null +++ b/hyrax/db/migrate/20220217192836_create_proxy_deposit_requests.hyrax.rb @@ -0,0 +1,15 @@ +class CreateProxyDepositRequests < ActiveRecord::Migration[5.2] + def change + create_table :proxy_deposit_requests do |t| + t.string :generic_file_id, null: false + t.references :sending_user, null: false + t.references :receiving_user, null: false + t.datetime :fulfillment_date + t.string :status, null: false, default: 'pending' + t.text :sender_comment + t.text :receiver_comment + t.timestamps null: false + end + + end +end diff --git a/hyrax/db/migrate/20220217192837_create_file_view_stats.hyrax.rb b/hyrax/db/migrate/20220217192837_create_file_view_stats.hyrax.rb new file mode 100644 index 00000000..d30650ff --- /dev/null +++ b/hyrax/db/migrate/20220217192837_create_file_view_stats.hyrax.rb @@ -0,0 +1,12 @@ +class CreateFileViewStats < ActiveRecord::Migration[5.2] + def change + create_table :file_view_stats do |t| + t.datetime :date + t.integer :views + t.string :file_id + + t.timestamps null: false + end + add_index :file_view_stats, :file_id + end +end diff --git a/hyrax/db/migrate/20220217192838_create_file_download_stats.hyrax.rb b/hyrax/db/migrate/20220217192838_create_file_download_stats.hyrax.rb new file mode 100644 index 00000000..e46dcf4c --- /dev/null +++ b/hyrax/db/migrate/20220217192838_create_file_download_stats.hyrax.rb @@ -0,0 +1,12 @@ +class CreateFileDownloadStats < ActiveRecord::Migration[5.2] + def change + create_table :file_download_stats do |t| + t.datetime :date + t.integer :downloads + t.string :file_id + + t.timestamps null: false + end + add_index :file_download_stats, :file_id + end +end diff --git a/hyrax/db/migrate/20220217192839_add_orcid_to_users.hyrax.rb b/hyrax/db/migrate/20220217192839_add_orcid_to_users.hyrax.rb new file mode 100644 index 00000000..70c7a1bf --- /dev/null +++ b/hyrax/db/migrate/20220217192839_add_orcid_to_users.hyrax.rb @@ -0,0 +1,5 @@ +class AddOrcidToUsers < ActiveRecord::Migration[5.2] + def change + add_column :users, :orcid, :string + end +end diff --git a/hyrax/db/migrate/20220217192840_create_user_stats.hyrax.rb b/hyrax/db/migrate/20220217192840_create_user_stats.hyrax.rb new file mode 100644 index 00000000..83b87be5 --- /dev/null +++ b/hyrax/db/migrate/20220217192840_create_user_stats.hyrax.rb @@ -0,0 +1,19 @@ +class CreateUserStats < ActiveRecord::Migration[5.2] + def change + create_table :user_stats do |t| + t.integer :user_id + t.datetime :date + t.integer :file_views + t.integer :file_downloads + + t.timestamps null: false + end + + add_column :file_view_stats, :user_id, :integer + add_column :file_download_stats, :user_id, :integer + + add_index :user_stats, :user_id + add_index :file_view_stats, :user_id + add_index :file_download_stats, :user_id + end +end diff --git a/hyrax/db/migrate/20220217192841_create_work_view_stats.hyrax.rb b/hyrax/db/migrate/20220217192841_create_work_view_stats.hyrax.rb new file mode 100644 index 00000000..2138c97a --- /dev/null +++ b/hyrax/db/migrate/20220217192841_create_work_view_stats.hyrax.rb @@ -0,0 +1,12 @@ +class CreateWorkViewStats < ActiveRecord::Migration[5.2] + def change + create_table :work_view_stats do |t| + t.datetime :date + t.integer :work_views + t.string :work_id + + t.timestamps null: false + end + add_index :work_view_stats, :work_id + end +end diff --git a/hyrax/db/migrate/20220217192842_add_works_to_user_stats.hyrax.rb b/hyrax/db/migrate/20220217192842_add_works_to_user_stats.hyrax.rb new file mode 100644 index 00000000..eb87767b --- /dev/null +++ b/hyrax/db/migrate/20220217192842_add_works_to_user_stats.hyrax.rb @@ -0,0 +1,13 @@ +class AddWorksToUserStats < ActiveRecord::Migration[5.2] + def self.up + add_column :user_stats, :work_views, :integer + add_column :work_view_stats, :user_id, :integer + add_index :work_view_stats, :user_id + end + + def self.down + remove_column :user_stats, :work_views, :integer + remove_column :work_view_stats, :user_id, :integer + remove_index :work_view_stats, :user_id + end +end diff --git a/hyrax/db/migrate/20220217192843_change_trophy_generic_file_id_to_work_id.hyrax.rb b/hyrax/db/migrate/20220217192843_change_trophy_generic_file_id_to_work_id.hyrax.rb new file mode 100644 index 00000000..423cf543 --- /dev/null +++ b/hyrax/db/migrate/20220217192843_change_trophy_generic_file_id_to_work_id.hyrax.rb @@ -0,0 +1,5 @@ +class ChangeTrophyGenericFileIdToWorkId < ActiveRecord::Migration[5.2] + def change + rename_column :trophies, :generic_file_id, :work_id + end +end diff --git a/hyrax/db/migrate/20220217192844_change_proxy_deposit_generic_file_id_to_work_id.hyrax.rb b/hyrax/db/migrate/20220217192844_change_proxy_deposit_generic_file_id_to_work_id.hyrax.rb new file mode 100644 index 00000000..ae365fa1 --- /dev/null +++ b/hyrax/db/migrate/20220217192844_change_proxy_deposit_generic_file_id_to_work_id.hyrax.rb @@ -0,0 +1,5 @@ +class ChangeProxyDepositGenericFileIdToWorkId < ActiveRecord::Migration[5.2] + def change + rename_column :proxy_deposit_requests, :generic_file_id, :work_id + end +end diff --git a/hyrax/db/migrate/20220217192845_change_audit_log_generic_file_id_to_file_set_id.hyrax.rb b/hyrax/db/migrate/20220217192845_change_audit_log_generic_file_id_to_file_set_id.hyrax.rb new file mode 100644 index 00000000..4cf6c517 --- /dev/null +++ b/hyrax/db/migrate/20220217192845_change_audit_log_generic_file_id_to_file_set_id.hyrax.rb @@ -0,0 +1,5 @@ +class ChangeAuditLogGenericFileIdToFileSetId < ActiveRecord::Migration[5.2] + def change + rename_column :checksum_audit_logs, :generic_file_id, :file_set_id unless ChecksumAuditLog.column_names.include?('file_set_id') + end +end diff --git a/hyrax/db/migrate/20220217192846_change_proxy_deposit_request_generic_file_id_to_work_id.hyrax.rb b/hyrax/db/migrate/20220217192846_change_proxy_deposit_request_generic_file_id_to_work_id.hyrax.rb new file mode 100644 index 00000000..13c53087 --- /dev/null +++ b/hyrax/db/migrate/20220217192846_change_proxy_deposit_request_generic_file_id_to_work_id.hyrax.rb @@ -0,0 +1,5 @@ +class ChangeProxyDepositRequestGenericFileIdToWorkId < ActiveRecord::Migration[5.2] + def change + rename_column :proxy_deposit_requests, :generic_file_id, :generic_id if ProxyDepositRequest.column_names.include?('generic_file_id') + end +end diff --git a/hyrax/db/migrate/20220217192847_create_uploaded_files.hyrax.rb b/hyrax/db/migrate/20220217192847_create_uploaded_files.hyrax.rb new file mode 100644 index 00000000..4c8895f2 --- /dev/null +++ b/hyrax/db/migrate/20220217192847_create_uploaded_files.hyrax.rb @@ -0,0 +1,10 @@ +class CreateUploadedFiles < ActiveRecord::Migration[5.2] + def change + create_table :uploaded_files do |t| + t.string :file + t.references :user, index: true, foreign_key: true + t.string :file_set_uri, index: true + t.timestamps null: false + end + end +end diff --git a/hyrax/db/migrate/20220217192848_create_features.hyrax.rb b/hyrax/db/migrate/20220217192848_create_features.hyrax.rb new file mode 100644 index 00000000..4e9b325f --- /dev/null +++ b/hyrax/db/migrate/20220217192848_create_features.hyrax.rb @@ -0,0 +1,10 @@ +class CreateFeatures < ActiveRecord::Migration[5.2] + def change + create_table :hyrax_features do |t| + t.string :key, null: false + t.boolean :enabled, null: false, default: false + + t.timestamps null: false + end + end +end diff --git a/hyrax/db/migrate/20220217192849_create_operations.hyrax.rb b/hyrax/db/migrate/20220217192849_create_operations.hyrax.rb new file mode 100644 index 00000000..1906eba5 --- /dev/null +++ b/hyrax/db/migrate/20220217192849_create_operations.hyrax.rb @@ -0,0 +1,23 @@ +class CreateOperations < ActiveRecord::Migration[5.2] + def change + create_table :curation_concerns_operations do |t| + t.string :status + t.string :operation_type + t.string :job_class + t.string :job_id + t.string :type # For Single Table Inheritance + t.text :message + t.references :user, index: true, foreign_key: true + + t.integer :parent_id, null: true, index: true + t.integer :lft, null: false, index: true + t.integer :rgt, null: false, index: true + + # optional fields + t.integer :depth, null: false, default: 0 + t.integer :children_count, null: false, default: 0 + + t.timestamps null: false + end + end +end diff --git a/hyrax/db/migrate/20220217192850_change_featured_work_generic_file_id_to_work_id.hyrax.rb b/hyrax/db/migrate/20220217192850_change_featured_work_generic_file_id_to_work_id.hyrax.rb new file mode 100644 index 00000000..487749eb --- /dev/null +++ b/hyrax/db/migrate/20220217192850_change_featured_work_generic_file_id_to_work_id.hyrax.rb @@ -0,0 +1,6 @@ +class ChangeFeaturedWorkGenericFileIdToWorkId < ActiveRecord::Migration[5.2] + def change + return unless column_exists?(:featured_works, :generic_file_id) + rename_column :featured_works, :generic_file_id, :work_id + end +end diff --git a/hyrax/db/migrate/20220217192851_add_arkivo_to_users.hyrax.rb b/hyrax/db/migrate/20220217192851_add_arkivo_to_users.hyrax.rb new file mode 100644 index 00000000..3dcf9f39 --- /dev/null +++ b/hyrax/db/migrate/20220217192851_add_arkivo_to_users.hyrax.rb @@ -0,0 +1,8 @@ +class AddArkivoToUsers < ActiveRecord::Migration[5.2] + def change + add_column :users, :arkivo_token, :string + add_column :users, :arkivo_subscription, :string + add_column :users, :zotero_token, :binary + add_column :users, :zotero_userid, :string + end +end diff --git a/hyrax/db/migrate/20220217192852_create_sipity.hyrax.rb b/hyrax/db/migrate/20220217192852_create_sipity.hyrax.rb new file mode 100644 index 00000000..db48839d --- /dev/null +++ b/hyrax/db/migrate/20220217192852_create_sipity.hyrax.rb @@ -0,0 +1,163 @@ +class CreateSipity < ActiveRecord::Migration[5.2] + def change + create_table "sipity_notification_recipients" do |t| + t.integer "notification_id", null: false + t.integer "role_id", null: false + t.string "recipient_strategy", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + add_index "sipity_notification_recipients", ["notification_id", "role_id", "recipient_strategy"], name: "sipity_notifications_recipients_surrogate" + add_index "sipity_notification_recipients", ["notification_id"], name: "sipity_notification_recipients_notification" + add_index "sipity_notification_recipients", ["recipient_strategy"], name: "sipity_notification_recipients_recipient_strategy" + add_index "sipity_notification_recipients", ["role_id"], name: "sipity_notification_recipients_role" + + create_table "sipity_notifications" do |t| + t.string "name", null: false + t.string "notification_type", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + add_index "sipity_notifications", ["name"], name: "index_sipity_notifications_on_name", unique: true + add_index "sipity_notifications", ["notification_type"], name: "index_sipity_notifications_on_notification_type" + + create_table "sipity_notifiable_contexts" do |t| + t.integer "scope_for_notification_id", null: false + t.string "scope_for_notification_type", null: false + t.string "reason_for_notification", null: false + t.integer "notification_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + add_index "sipity_notifiable_contexts", ["notification_id"], name: "sipity_notifiable_contexts_notification_id" + add_index "sipity_notifiable_contexts", ["scope_for_notification_id", "scope_for_notification_type", "reason_for_notification", "notification_id"], name: "sipity_notifiable_contexts_concern_surrogate", unique: true + add_index "sipity_notifiable_contexts", ["scope_for_notification_id", "scope_for_notification_type", "reason_for_notification"], name: "sipity_notifiable_contexts_concern_context" + add_index "sipity_notifiable_contexts", ["scope_for_notification_id", "scope_for_notification_type"], name: "sipity_notifiable_contexts_concern" + + create_table "sipity_agents" do |t| + t.string "proxy_for_id", null: false + t.string "proxy_for_type", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + add_index "sipity_agents", ["proxy_for_id", "proxy_for_type"], name: "sipity_agents_proxy_for", unique: true + + create_table "sipity_comments" do |t| + t.integer "entity_id", null: false + t.integer "agent_id", null: false + t.text "comment" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + add_index "sipity_comments", ["agent_id"], name: "index_sipity_comments_on_agent_id" + add_index "sipity_comments", ["created_at"], name: "index_sipity_comments_on_created_at" + add_index "sipity_comments", ["entity_id"], name: "index_sipity_comments_on_entity_id" + + create_table "sipity_entities" do |t| + t.string "proxy_for_global_id", null: false + t.integer "workflow_id", null: false + t.integer "workflow_state_id", null: true + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + add_index "sipity_entities", ["proxy_for_global_id"], name: "sipity_entities_proxy_for_global_id", unique: true + add_index "sipity_entities", ["workflow_id"], name: "index_sipity_entities_on_workflow_id" + add_index "sipity_entities", ["workflow_state_id"], name: "index_sipity_entities_on_workflow_state_id" + + create_table "sipity_entity_specific_responsibilities" do |t| + t.integer "workflow_role_id", null: false + t.string "entity_id", null: false + t.integer "agent_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + add_index "sipity_entity_specific_responsibilities", ["agent_id"], name: "sipity_entity_specific_responsibilities_agent" + add_index "sipity_entity_specific_responsibilities", ["entity_id"], name: "sipity_entity_specific_responsibilities_entity" + add_index "sipity_entity_specific_responsibilities", ["workflow_role_id", "entity_id", "agent_id"], name: "sipity_entity_specific_responsibilities_aggregate", unique: true + add_index "sipity_entity_specific_responsibilities", ["workflow_role_id"], name: "sipity_entity_specific_responsibilities_role" + + create_table "sipity_workflows" do |t| + t.string "name", null: false + t.string "label" + t.text "description" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + add_index "sipity_workflows", ["name"], name: "index_sipity_workflows_on_name", unique: true + + create_table "sipity_workflow_actions" do |t| + t.integer "workflow_id", null: false + t.integer "resulting_workflow_state_id" + t.string "name", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + add_index "sipity_workflow_actions", ["resulting_workflow_state_id"], name: "sipity_workflow_actions_resulting_workflow_state" + add_index "sipity_workflow_actions", ["workflow_id", "name"], name: "sipity_workflow_actions_aggregate", unique: true + add_index "sipity_workflow_actions", ["workflow_id"], name: "sipity_workflow_actions_workflow" + + create_table "sipity_workflow_responsibilities" do |t| + t.integer "agent_id", null: false + t.integer "workflow_role_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + add_index "sipity_workflow_responsibilities", ["agent_id", "workflow_role_id"], name: "sipity_workflow_responsibilities_aggregate", unique: true + + create_table "sipity_workflow_roles" do |t| + t.integer "workflow_id", null: false + t.integer "role_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + add_index "sipity_workflow_roles", ["workflow_id", "role_id"], name: "sipity_workflow_roles_aggregate", unique: true + + create_table "sipity_workflow_state_action_permissions" do |t| + t.integer "workflow_role_id", null: false + t.integer "workflow_state_action_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + add_index "sipity_workflow_state_action_permissions", ["workflow_role_id", "workflow_state_action_id"], name: "sipity_workflow_state_action_permissions_aggregate", unique: true + + create_table "sipity_workflow_state_actions" do |t| + t.integer "originating_workflow_state_id", null: false + t.integer "workflow_action_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + add_index "sipity_workflow_state_actions", ["originating_workflow_state_id", "workflow_action_id"], name: "sipity_workflow_state_actions_aggregate", unique: true + + create_table "sipity_workflow_states" do |t| + t.integer "workflow_id", null: false + t.string "name", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + add_index "sipity_workflow_states", ["name"], name: "index_sipity_workflow_states_on_name" + add_index "sipity_workflow_states", ["workflow_id", "name"], name: "sipity_type_state_aggregate", unique: true + + create_table "sipity_roles" do |t| + t.string "name", null: false + t.text "description" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + add_index "sipity_roles", ["name"], name: "index_sipity_roles_on_name", unique: true + end +end diff --git a/hyrax/db/migrate/20220217192853_create_sipity_workflow_methods.hyrax.rb b/hyrax/db/migrate/20220217192853_create_sipity_workflow_methods.hyrax.rb new file mode 100644 index 00000000..ff7dcecb --- /dev/null +++ b/hyrax/db/migrate/20220217192853_create_sipity_workflow_methods.hyrax.rb @@ -0,0 +1,10 @@ +class CreateSipityWorkflowMethods < ActiveRecord::Migration[5.2] + def change + create_table :sipity_workflow_methods do |t| + t.string "service_name", null: false + t.integer "weight", null: false + t.integer "workflow_action_id", index: true, null: false + t.timestamps null: false + end + end +end diff --git a/hyrax/db/migrate/20220217192854_create_permission_template.hyrax.rb b/hyrax/db/migrate/20220217192854_create_permission_template.hyrax.rb new file mode 100644 index 00000000..b139395b --- /dev/null +++ b/hyrax/db/migrate/20220217192854_create_permission_template.hyrax.rb @@ -0,0 +1,11 @@ +class CreatePermissionTemplate < ActiveRecord::Migration[5.2] + def change + create_table :permission_templates do |t| + t.belongs_to :workflow + t.string :admin_set_id + t.string :visibility + t.timestamps + end + add_index :permission_templates, :admin_set_id + end +end diff --git a/hyrax/db/migrate/20220217192855_create_permission_template_access.hyrax.rb b/hyrax/db/migrate/20220217192855_create_permission_template_access.hyrax.rb new file mode 100644 index 00000000..d6e9b5d2 --- /dev/null +++ b/hyrax/db/migrate/20220217192855_create_permission_template_access.hyrax.rb @@ -0,0 +1,11 @@ +class CreatePermissionTemplateAccess < ActiveRecord::Migration[5.2] + def change + create_table :permission_template_accesses do |t| + t.references :permission_template, foreign_key: true + t.string :agent_type + t.string :agent_id + t.string :access + t.timestamps + end + end +end diff --git a/hyrax/db/migrate/20220217192856_add_release_to_permission_templates.hyrax.rb b/hyrax/db/migrate/20220217192856_add_release_to_permission_templates.hyrax.rb new file mode 100644 index 00000000..7696db1b --- /dev/null +++ b/hyrax/db/migrate/20220217192856_add_release_to_permission_templates.hyrax.rb @@ -0,0 +1,6 @@ +class AddReleaseToPermissionTemplates < ActiveRecord::Migration[5.2] + def change + add_column :permission_templates, :release_date, :date + add_column :permission_templates, :release_period, :string + end +end diff --git a/hyrax/db/migrate/20220217192857_add_permission_template_to_sipity_workflow.hyrax.rb b/hyrax/db/migrate/20220217192857_add_permission_template_to_sipity_workflow.hyrax.rb new file mode 100644 index 00000000..fd40cc5d --- /dev/null +++ b/hyrax/db/migrate/20220217192857_add_permission_template_to_sipity_workflow.hyrax.rb @@ -0,0 +1,26 @@ +class AddPermissionTemplateToSipityWorkflow < ActiveRecord::Migration[5.2] + def change + add_column :sipity_workflows, :permission_template_id, :integer, index: true + remove_index :sipity_workflows, :name + add_index :sipity_workflows, [:permission_template_id, :name], name: :index_sipity_workflows_on_permission_template_and_name, unique: true + remove_index :permission_templates, :admin_set_id + add_index :permission_templates, :admin_set_id, unique: true + + # Only allow one to be true; Note the options should be nil or true to enforce uniqueness + add_column :sipity_workflows, :active, :boolean, default: nil, index: :unique + + # Doing an inline data migration + begin + if Hyrax::PermissionTemplate.column_names.include?('workflow_id') + Hyrax::PermissionTemplate.each do |permission_template| + workflow_id = permission_template.workflow_id + next unless workflow_id + Sipity::Workflow.find(workflow_id).update(active: true) + end + remove_column :permission_templates, :workflow_id + end + rescue + # It's okay, we didn't have the column + end + end +end diff --git a/hyrax/db/migrate/20220217192858_tidy_up_because_of_bad_exception.hyrax.rb b/hyrax/db/migrate/20220217192858_tidy_up_because_of_bad_exception.hyrax.rb new file mode 100644 index 00000000..27933c16 --- /dev/null +++ b/hyrax/db/migrate/20220217192858_tidy_up_because_of_bad_exception.hyrax.rb @@ -0,0 +1,13 @@ +class TidyUpBecauseOfBadException < ActiveRecord::Migration[5.2] + def change + if column_exists?(Hyrax::PermissionTemplate.table_name, :workflow_id) + Hyrax::PermissionTemplate.all.each do |permission_template| + workflow_id = permission_template.workflow_id + next unless workflow_id + Sipity::Workflow.find(workflow_id).update(active: true) + end + + remove_column Hyrax::PermissionTemplate.table_name, :workflow_id + end + end +end diff --git a/hyrax/db/migrate/20220217192859_add_allows_access_grant_to_workflow.hyrax.rb b/hyrax/db/migrate/20220217192859_add_allows_access_grant_to_workflow.hyrax.rb new file mode 100644 index 00000000..0c56e5a8 --- /dev/null +++ b/hyrax/db/migrate/20220217192859_add_allows_access_grant_to_workflow.hyrax.rb @@ -0,0 +1,5 @@ +class AddAllowsAccessGrantToWorkflow < ActiveRecord::Migration[5.2] + def change + add_column :sipity_workflows, :allows_access_grant, :boolean + end +end diff --git a/hyrax/db/migrate/20220217192860_change_checksum_audit_log.hyrax.rb b/hyrax/db/migrate/20220217192860_change_checksum_audit_log.hyrax.rb new file mode 100644 index 00000000..5c527ff5 --- /dev/null +++ b/hyrax/db/migrate/20220217192860_change_checksum_audit_log.hyrax.rb @@ -0,0 +1,18 @@ +class ChangeChecksumAuditLog < ActiveRecord::Migration[5.2] + def change + rename_column :checksum_audit_logs, :version, :checked_uri + add_column :checksum_audit_logs, :passed, :boolean + + reversible do |dir| + dir.up do + execute 'UPDATE checksum_audit_logs SET passed = (pass = 1)' + end + dir.down do + execute 'UPDATE checksum_audit_logs SET pass = CASE WHEN passed THEN 1 ELSE 0 END' + end + end + + remove_column :checksum_audit_logs, :pass + add_index :checksum_audit_logs, :checked_uri + end +end diff --git a/hyrax/db/migrate/20220217192861_create_job_io_wrappers.hyrax.rb b/hyrax/db/migrate/20220217192861_create_job_io_wrappers.hyrax.rb new file mode 100644 index 00000000..4710e913 --- /dev/null +++ b/hyrax/db/migrate/20220217192861_create_job_io_wrappers.hyrax.rb @@ -0,0 +1,15 @@ +class CreateJobIoWrappers < ActiveRecord::Migration[5.2] + def change + create_table :job_io_wrappers do |t| + t.references :user + t.references :uploaded_file + t.string :file_set_id + t.string :mime_type + t.string :original_name + t.string :path + t.string :relation + + t.timestamps + end + end +end diff --git a/hyrax/db/migrate/20220217192862_create_collection_types.hyrax.rb b/hyrax/db/migrate/20220217192862_create_collection_types.hyrax.rb new file mode 100644 index 00000000..a225b52d --- /dev/null +++ b/hyrax/db/migrate/20220217192862_create_collection_types.hyrax.rb @@ -0,0 +1,17 @@ +class CreateCollectionTypes < ActiveRecord::Migration[5.2] + def change + create_table :hyrax_collection_types do |t| + t.string :title + t.text :description + t.string :machine_id + t.boolean :nestable, null: false, default: true + t.boolean :discovery, null: false, default: true + t.boolean :sharing, null: false, default: true + t.boolean :multiple_membership, null: false, default: true + t.boolean :require_membership, null: false, default: false + t.boolean :workflow, null: false, default: false + t.boolean :visibility, null: false, default: false + end + add_index :hyrax_collection_types, :machine_id + end +end diff --git a/hyrax/db/migrate/20220217192863_update_collection_type_column_names.hyrax.rb b/hyrax/db/migrate/20220217192863_update_collection_type_column_names.hyrax.rb new file mode 100644 index 00000000..b643515b --- /dev/null +++ b/hyrax/db/migrate/20220217192863_update_collection_type_column_names.hyrax.rb @@ -0,0 +1,9 @@ +class UpdateCollectionTypeColumnNames < ActiveRecord::Migration[5.2] + def change + rename_column :hyrax_collection_types, :discovery, :discoverable + rename_column :hyrax_collection_types, :sharing, :sharable + rename_column :hyrax_collection_types, :multiple_membership, :allow_multiple_membership + rename_column :hyrax_collection_types, :workflow, :assigns_workflow + rename_column :hyrax_collection_types, :visibility, :assigns_visibility + end +end diff --git a/hyrax/db/migrate/20220217192864_update_collection_type_column_options.hyrax.rb b/hyrax/db/migrate/20220217192864_update_collection_type_column_options.hyrax.rb new file mode 100644 index 00000000..188a6a71 --- /dev/null +++ b/hyrax/db/migrate/20220217192864_update_collection_type_column_options.hyrax.rb @@ -0,0 +1,17 @@ +class UpdateCollectionTypeColumnOptions < ActiveRecord::Migration[5.2] + def up + change_column :hyrax_collection_types, :title, :string, unique: true + change_column :hyrax_collection_types, :machine_id, :string, unique: true + + remove_index :hyrax_collection_types, :machine_id + add_index :hyrax_collection_types, :machine_id, unique: true + end + + def down + change_column :hyrax_collection_types, :title, :string + change_column :hyrax_collection_types, :machine_id, :string + + remove_index :hyrax_collection_types, :machine_id + add_index :hyrax_collection_types, :machine_id + end +end diff --git a/hyrax/db/migrate/20220217192865_create_collection_branding_infos.hyrax.rb b/hyrax/db/migrate/20220217192865_create_collection_branding_infos.hyrax.rb new file mode 100644 index 00000000..432a634b --- /dev/null +++ b/hyrax/db/migrate/20220217192865_create_collection_branding_infos.hyrax.rb @@ -0,0 +1,15 @@ +class CreateCollectionBrandingInfos < ActiveRecord::Migration[5.2] + def change + create_table :collection_branding_infos do |t| + t.string :collection_id + t.string :role + t.string :local_path + t.string :alt_text + t.string :target_url + t.integer :height + t.integer :width + + t.timestamps + end + end +end diff --git a/hyrax/db/migrate/20220217192866_create_collection_type_participants.hyrax.rb b/hyrax/db/migrate/20220217192866_create_collection_type_participants.hyrax.rb new file mode 100644 index 00000000..5cdd4e80 --- /dev/null +++ b/hyrax/db/migrate/20220217192866_create_collection_type_participants.hyrax.rb @@ -0,0 +1,11 @@ +class CreateCollectionTypeParticipants < ActiveRecord::Migration[5.2] + def change + create_table :collection_type_participants do |t| + t.references :hyrax_collection_type, foreign_key: true, index: {:name => "hyrax_collection_type_id"} + t.string :agent_type + t.string :agent_id + t.string :access + t.timestamps + end + end +end diff --git a/hyrax/db/migrate/20220217192867_rename_admin_set_id_to_source_id.hyrax.rb b/hyrax/db/migrate/20220217192867_rename_admin_set_id_to_source_id.hyrax.rb new file mode 100644 index 00000000..0275c15a --- /dev/null +++ b/hyrax/db/migrate/20220217192867_rename_admin_set_id_to_source_id.hyrax.rb @@ -0,0 +1,5 @@ +class RenameAdminSetIdToSourceId < ActiveRecord::Migration[5.2] + def change + rename_column :permission_templates, :admin_set_id, :source_id + end +end diff --git a/hyrax/db/migrate/20220217192868_add_preferred_locale_to_users.hyrax.rb b/hyrax/db/migrate/20220217192868_add_preferred_locale_to_users.hyrax.rb new file mode 100644 index 00000000..6e66e41c --- /dev/null +++ b/hyrax/db/migrate/20220217192868_add_preferred_locale_to_users.hyrax.rb @@ -0,0 +1,5 @@ +class AddPreferredLocaleToUsers < ActiveRecord::Migration[5.2] + def change + add_column :users, :preferred_locale, :string + end +end diff --git a/hyrax/db/migrate/20220217192869_add_collection_type_sharing_options.hyrax.rb b/hyrax/db/migrate/20220217192869_add_collection_type_sharing_options.hyrax.rb new file mode 100644 index 00000000..855f162c --- /dev/null +++ b/hyrax/db/migrate/20220217192869_add_collection_type_sharing_options.hyrax.rb @@ -0,0 +1,5 @@ +class AddCollectionTypeSharingOptions < ActiveRecord::Migration[5.2] + def change + add_column :hyrax_collection_types, :share_applies_to_new_works, :boolean, null: false, default: true + end +end diff --git a/hyrax/db/migrate/20220217192870_add_unique_constraint_to_permission_template_accesses.hyrax.rb b/hyrax/db/migrate/20220217192870_add_unique_constraint_to_permission_template_accesses.hyrax.rb new file mode 100644 index 00000000..076ab155 --- /dev/null +++ b/hyrax/db/migrate/20220217192870_add_unique_constraint_to_permission_template_accesses.hyrax.rb @@ -0,0 +1,8 @@ +class AddUniqueConstraintToPermissionTemplateAccesses < ActiveRecord::Migration[5.2] + def change + add_index :permission_template_accesses, + [:permission_template_id, :agent_id, :agent_type, :access], + unique: true, + name: 'uk_permission_template_accesses' + end +end diff --git a/hyrax/db/migrate/20220217192871_add_branding_to_collection_type.hyrax.rb b/hyrax/db/migrate/20220217192871_add_branding_to_collection_type.hyrax.rb new file mode 100644 index 00000000..9352c03d --- /dev/null +++ b/hyrax/db/migrate/20220217192871_add_branding_to_collection_type.hyrax.rb @@ -0,0 +1,5 @@ +class AddBrandingToCollectionType < ActiveRecord::Migration[5.2] + def change + add_column :hyrax_collection_types, :brandable, :boolean, null: false, default: true + end +end diff --git a/hyrax/db/migrate/20220217192872_add_badge_color_to_collection_types.hyrax.rb b/hyrax/db/migrate/20220217192872_add_badge_color_to_collection_types.hyrax.rb new file mode 100644 index 00000000..ea700a62 --- /dev/null +++ b/hyrax/db/migrate/20220217192872_add_badge_color_to_collection_types.hyrax.rb @@ -0,0 +1,5 @@ +class AddBadgeColorToCollectionTypes < ActiveRecord::Migration[5.2] + def change + add_column :hyrax_collection_types, :badge_color, :string, default: '#663333' + end +end diff --git a/hyrax/db/migrate/20220217192873_update_single_use_links_column_names.hyrax.rb b/hyrax/db/migrate/20220217192873_update_single_use_links_column_names.hyrax.rb new file mode 100644 index 00000000..10b25604 --- /dev/null +++ b/hyrax/db/migrate/20220217192873_update_single_use_links_column_names.hyrax.rb @@ -0,0 +1,6 @@ +class UpdateSingleUseLinksColumnNames < ActiveRecord::Migration[5.2] + def change + rename_column :single_use_links, :downloadKey, :download_key + rename_column :single_use_links, :itemId, :item_id + end +end diff --git a/hyrax/db/migrate/20220217192874_change_sipity_entity_specific_responsibility.hyrax.rb b/hyrax/db/migrate/20220217192874_change_sipity_entity_specific_responsibility.hyrax.rb new file mode 100644 index 00000000..56db332d --- /dev/null +++ b/hyrax/db/migrate/20220217192874_change_sipity_entity_specific_responsibility.hyrax.rb @@ -0,0 +1,9 @@ +class ChangeSipityEntitySpecificResponsibility < ActiveRecord::Migration[5.2] + def change + if ActiveRecord::Base.connection.adapter_name == "PostgreSQL" + change_column :sipity_entity_specific_responsibilities, :entity_id, 'integer USING CAST(entity_id AS integer)' + else + change_column :sipity_entity_specific_responsibilities, :entity_id, :integer + end + end +end diff --git a/hyrax/db/migrate/20220217192875_create_default_administrative_set.hyrax.rb b/hyrax/db/migrate/20220217192875_create_default_administrative_set.hyrax.rb new file mode 100644 index 00000000..879be44c --- /dev/null +++ b/hyrax/db/migrate/20220217192875_create_default_administrative_set.hyrax.rb @@ -0,0 +1,8 @@ +class CreateDefaultAdministrativeSet < ActiveRecord::Migration[5.2] + def change + create_table :hyrax_default_administrative_set do |t| + t.string :default_admin_set_id, null: false + t.timestamps null: false + end + end +end diff --git a/hyrax/db/migrate/20220217192876_create_mailboxer.mailboxer_engine.rb b/hyrax/db/migrate/20220217192876_create_mailboxer.mailboxer_engine.rb new file mode 100644 index 00000000..d42e89f9 --- /dev/null +++ b/hyrax/db/migrate/20220217192876_create_mailboxer.mailboxer_engine.rb @@ -0,0 +1,65 @@ +# This migration comes from mailboxer_engine (originally 20110511145103) +class CreateMailboxer < ActiveRecord::Migration[4.2] + def self.up + #Tables + #Conversations + create_table :mailboxer_conversations do |t| + t.column :subject, :string, :default => "" + t.column :created_at, :datetime, :null => false + t.column :updated_at, :datetime, :null => false + end + #Receipts + create_table :mailboxer_receipts do |t| + t.references :receiver, :polymorphic => true + t.column :notification_id, :integer, :null => false + t.column :is_read, :boolean, :default => false + t.column :trashed, :boolean, :default => false + t.column :deleted, :boolean, :default => false + t.column :mailbox_type, :string, :limit => 25 + t.column :created_at, :datetime, :null => false + t.column :updated_at, :datetime, :null => false + end + #Notifications and Messages + create_table :mailboxer_notifications do |t| + t.column :type, :string + t.column :body, :text + t.column :subject, :string, :default => "" + t.references :sender, :polymorphic => true + t.column :conversation_id, :integer + t.column :draft, :boolean, :default => false + t.string :notification_code, :default => nil + t.references :notified_object, :polymorphic => true, index: { name: 'mailboxer_notifications_notified_object' } + t.column :attachment, :string + t.column :updated_at, :datetime, :null => false + t.column :created_at, :datetime, :null => false + t.boolean :global, default: false + t.datetime :expires + end + + #Indexes + #Conversations + #Receipts + add_index "mailboxer_receipts","notification_id" + + #Messages + add_index "mailboxer_notifications","conversation_id" + + #Foreign keys + #Conversations + #Receipts + add_foreign_key "mailboxer_receipts", "mailboxer_notifications", :name => "receipts_on_notification_id", :column => "notification_id" + #Messages + add_foreign_key "mailboxer_notifications", "mailboxer_conversations", :name => "notifications_on_conversation_id", :column => "conversation_id" + end + + def self.down + #Tables + remove_foreign_key "mailboxer_receipts", :name => "receipts_on_notification_id" + remove_foreign_key "mailboxer_notifications", :name => "notifications_on_conversation_id" + + #Indexes + drop_table :mailboxer_receipts + drop_table :mailboxer_conversations + drop_table :mailboxer_notifications + end +end diff --git a/hyrax/db/migrate/20220217192877_add_conversation_optout.mailboxer_engine.rb b/hyrax/db/migrate/20220217192877_add_conversation_optout.mailboxer_engine.rb new file mode 100644 index 00000000..a9860bdc --- /dev/null +++ b/hyrax/db/migrate/20220217192877_add_conversation_optout.mailboxer_engine.rb @@ -0,0 +1,15 @@ +# This migration comes from mailboxer_engine (originally 20131206080416) +class AddConversationOptout < ActiveRecord::Migration[4.2] + def self.up + create_table :mailboxer_conversation_opt_outs do |t| + t.references :unsubscriber, :polymorphic => true + t.references :conversation + end + add_foreign_key "mailboxer_conversation_opt_outs", "mailboxer_conversations", :name => "mb_opt_outs_on_conversations_id", :column => "conversation_id" + end + + def self.down + remove_foreign_key "mailboxer_conversation_opt_outs", :name => "mb_opt_outs_on_conversations_id" + drop_table :mailboxer_conversation_opt_outs + end +end diff --git a/hyrax/db/migrate/20220217192878_add_missing_indices.mailboxer_engine.rb b/hyrax/db/migrate/20220217192878_add_missing_indices.mailboxer_engine.rb new file mode 100644 index 00000000..608d7f62 --- /dev/null +++ b/hyrax/db/migrate/20220217192878_add_missing_indices.mailboxer_engine.rb @@ -0,0 +1,20 @@ +# This migration comes from mailboxer_engine (originally 20131206080417) +class AddMissingIndices < ActiveRecord::Migration[4.2] + def change + # We'll explicitly specify its name, as the auto-generated name is too long and exceeds 63 + # characters limitation. + add_index :mailboxer_conversation_opt_outs, [:unsubscriber_id, :unsubscriber_type], + name: 'index_mailboxer_conversation_opt_outs_on_unsubscriber_id_type' + add_index :mailboxer_conversation_opt_outs, :conversation_id + + add_index :mailboxer_notifications, :type + add_index :mailboxer_notifications, [:sender_id, :sender_type] + + # We'll explicitly specify its name, as the auto-generated name is too long and exceeds 63 + # characters limitation. + add_index :mailboxer_notifications, [:notified_object_id, :notified_object_type], + name: 'index_mailboxer_notifications_on_notified_object_id_and_type' + + add_index :mailboxer_receipts, [:receiver_id, :receiver_type] + end +end diff --git a/hyrax/db/migrate/20220217192879_add_delivery_tracking_info_to_mailboxer_receipts.mailboxer_engine.rb b/hyrax/db/migrate/20220217192879_add_delivery_tracking_info_to_mailboxer_receipts.mailboxer_engine.rb new file mode 100644 index 00000000..498d152d --- /dev/null +++ b/hyrax/db/migrate/20220217192879_add_delivery_tracking_info_to_mailboxer_receipts.mailboxer_engine.rb @@ -0,0 +1,8 @@ +# This migration comes from mailboxer_engine (originally 20151103080417) +class AddDeliveryTrackingInfoToMailboxerReceipts < ActiveRecord::Migration[4.2] + def change + add_column :mailboxer_receipts, :is_delivered, :boolean, default: false + add_column :mailboxer_receipts, :delivery_method, :string + add_column :mailboxer_receipts, :message_id, :string + end +end diff --git a/hyrax/db/migrate/20220217192880_create_qa_local_authorities.rb b/hyrax/db/migrate/20220217192880_create_qa_local_authorities.rb new file mode 100644 index 00000000..14e7f342 --- /dev/null +++ b/hyrax/db/migrate/20220217192880_create_qa_local_authorities.rb @@ -0,0 +1,10 @@ +class CreateQaLocalAuthorities < ActiveRecord::Migration[5.2] + def change + create_table :qa_local_authorities do |t| + t.string :name + + t.timestamps + end + add_index :qa_local_authorities, :name, unique: true + end +end diff --git a/hyrax/db/migrate/20220217192881_create_qa_local_authority_entries.rb b/hyrax/db/migrate/20220217192881_create_qa_local_authority_entries.rb new file mode 100644 index 00000000..63129848 --- /dev/null +++ b/hyrax/db/migrate/20220217192881_create_qa_local_authority_entries.rb @@ -0,0 +1,12 @@ +class CreateQaLocalAuthorityEntries < ActiveRecord::Migration[5.2] + def change + create_table :qa_local_authority_entries do |t| + t.references :local_authority, foreign_key: { to_table: :qa_local_authorities }, index: true + t.string :label + t.string :uri + + t.timestamps + end + add_index :qa_local_authority_entries, :uri, unique: true + end +end diff --git a/hyrax/db/migrate/20220217192905_create_minter_states.noid_rails_engine.rb b/hyrax/db/migrate/20220217192905_create_minter_states.noid_rails_engine.rb new file mode 100644 index 00000000..e109556d --- /dev/null +++ b/hyrax/db/migrate/20220217192905_create_minter_states.noid_rails_engine.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true +# This migration comes from noid_rails_engine (originally 20160610010003) + +class CreateMinterStates < ActiveRecord::Migration[4.2] + def change + create_table :minter_states do |t| + t.string :namespace, null: false, default: 'default' + t.string :template, null: false + t.text :counters + t.bigint :seq, default: 0 + t.binary :random + t.timestamps null: false + end + # Use both model and DB-level constraints for consistency while scaling horizontally + add_index :minter_states, :namespace, unique: true + end +end diff --git a/hyrax/db/migrate/20220217192906_rename_minter_state_random_to_rand.noid_rails_engine.rb b/hyrax/db/migrate/20220217192906_rename_minter_state_random_to_rand.noid_rails_engine.rb new file mode 100644 index 00000000..20013f8a --- /dev/null +++ b/hyrax/db/migrate/20220217192906_rename_minter_state_random_to_rand.noid_rails_engine.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from noid_rails_engine (originally 20161021203429) + +class RenameMinterStateRandomToRand < ActiveRecord::Migration[4.2] + def change + rename_column :minter_states, :random, :rand + end +end diff --git a/hyrax/db/migrate/20220218044917_user_roles.rb b/hyrax/db/migrate/20220218044917_user_roles.rb new file mode 100644 index 00000000..b40a6998 --- /dev/null +++ b/hyrax/db/migrate/20220218044917_user_roles.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +class UserRoles < ActiveRecord::Migration[5.0] + def up + create_table :roles do |t| + t.string :name + end + create_table :roles_users, id: false do |t| + t.references :role + t.references :user + end + add_index :roles_users, %i[role_id user_id] + add_index :roles_users, %i[user_id role_id] + end + + def down + drop_table :roles_users + drop_table :roles + end +end diff --git a/hyrax/db/schema.rb b/hyrax/db/schema.rb new file mode 100644 index 00000000..7d3296a0 --- /dev/null +++ b/hyrax/db/schema.rb @@ -0,0 +1,582 @@ +# This file is auto-generated from the current state of the database. Instead +# of editing this file, please use the migrations feature of Active Record to +# incrementally modify your database, and then regenerate this schema definition. +# +# Note that this schema.rb definition is the authoritative source for your +# database schema. If you need to create the application database on another +# system, you should be using db:schema:load, not running all the migrations +# from scratch. The latter is a flawed and unsustainable approach (the more migrations +# you'll amass, the slower it'll run and the greater likelihood for issues). +# +# It's strongly recommended that you check this file into your version control system. + +ActiveRecord::Schema.define(version: 2022_02_18_044917) do + + # These are extensions that must be enabled in order to support this database + enable_extension "plpgsql" + + create_table "bookmarks", id: :serial, force: :cascade do |t| + t.integer "user_id", null: false + t.string "user_type" + t.string "document_id" + t.string "document_type" + t.binary "title" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["document_id"], name: "index_bookmarks_on_document_id" + t.index ["user_id"], name: "index_bookmarks_on_user_id" + end + + create_table "checksum_audit_logs", force: :cascade do |t| + t.string "file_set_id" + t.string "file_id" + t.string "checked_uri" + t.string "expected_result" + t.string "actual_result" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.boolean "passed" + t.index ["checked_uri"], name: "index_checksum_audit_logs_on_checked_uri" + t.index ["file_set_id", "file_id"], name: "by_file_set_id_and_file_id" + end + + create_table "collection_branding_infos", force: :cascade do |t| + t.string "collection_id" + t.string "role" + t.string "local_path" + t.string "alt_text" + t.string "target_url" + t.integer "height" + t.integer "width" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + create_table "collection_type_participants", force: :cascade do |t| + t.bigint "hyrax_collection_type_id" + t.string "agent_type" + t.string "agent_id" + t.string "access" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["hyrax_collection_type_id"], name: "hyrax_collection_type_id" + end + + create_table "content_blocks", force: :cascade do |t| + t.string "name" + t.text "value" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.string "external_key" + end + + create_table "curation_concerns_operations", force: :cascade do |t| + t.string "status" + t.string "operation_type" + t.string "job_class" + t.string "job_id" + t.string "type" + t.text "message" + t.bigint "user_id" + t.integer "parent_id" + t.integer "lft", null: false + t.integer "rgt", null: false + t.integer "depth", default: 0, null: false + t.integer "children_count", default: 0, null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["lft"], name: "index_curation_concerns_operations_on_lft" + t.index ["parent_id"], name: "index_curation_concerns_operations_on_parent_id" + t.index ["rgt"], name: "index_curation_concerns_operations_on_rgt" + t.index ["user_id"], name: "index_curation_concerns_operations_on_user_id" + end + + create_table "featured_works", force: :cascade do |t| + t.integer "order", default: 5 + t.string "work_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["order"], name: "index_featured_works_on_order" + t.index ["work_id"], name: "index_featured_works_on_work_id" + end + + create_table "file_download_stats", force: :cascade do |t| + t.datetime "date" + t.integer "downloads" + t.string "file_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "user_id" + t.index ["file_id"], name: "index_file_download_stats_on_file_id" + t.index ["user_id"], name: "index_file_download_stats_on_user_id" + end + + create_table "file_view_stats", force: :cascade do |t| + t.datetime "date" + t.integer "views" + t.string "file_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "user_id" + t.index ["file_id"], name: "index_file_view_stats_on_file_id" + t.index ["user_id"], name: "index_file_view_stats_on_user_id" + end + + create_table "hyrax_collection_types", force: :cascade do |t| + t.string "title" + t.text "description" + t.string "machine_id" + t.boolean "nestable", default: true, null: false + t.boolean "discoverable", default: true, null: false + t.boolean "sharable", default: true, null: false + t.boolean "allow_multiple_membership", default: true, null: false + t.boolean "require_membership", default: false, null: false + t.boolean "assigns_workflow", default: false, null: false + t.boolean "assigns_visibility", default: false, null: false + t.boolean "share_applies_to_new_works", default: true, null: false + t.boolean "brandable", default: true, null: false + t.string "badge_color", default: "#663333" + t.index ["machine_id"], name: "index_hyrax_collection_types_on_machine_id", unique: true + end + + create_table "hyrax_default_administrative_set", force: :cascade do |t| + t.string "default_admin_set_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + create_table "hyrax_features", force: :cascade do |t| + t.string "key", null: false + t.boolean "enabled", default: false, null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + create_table "job_io_wrappers", force: :cascade do |t| + t.bigint "user_id" + t.bigint "uploaded_file_id" + t.string "file_set_id" + t.string "mime_type" + t.string "original_name" + t.string "path" + t.string "relation" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["uploaded_file_id"], name: "index_job_io_wrappers_on_uploaded_file_id" + t.index ["user_id"], name: "index_job_io_wrappers_on_user_id" + end + + create_table "mailboxer_conversation_opt_outs", id: :serial, force: :cascade do |t| + t.string "unsubscriber_type" + t.integer "unsubscriber_id" + t.integer "conversation_id" + t.index ["conversation_id"], name: "index_mailboxer_conversation_opt_outs_on_conversation_id" + t.index ["unsubscriber_id", "unsubscriber_type"], name: "index_mailboxer_conversation_opt_outs_on_unsubscriber_id_type" + end + + create_table "mailboxer_conversations", id: :serial, force: :cascade do |t| + t.string "subject", default: "" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + create_table "mailboxer_notifications", id: :serial, force: :cascade do |t| + t.string "type" + t.text "body" + t.string "subject", default: "" + t.string "sender_type" + t.integer "sender_id" + t.integer "conversation_id" + t.boolean "draft", default: false + t.string "notification_code" + t.string "notified_object_type" + t.integer "notified_object_id" + t.string "attachment" + t.datetime "updated_at", null: false + t.datetime "created_at", null: false + t.boolean "global", default: false + t.datetime "expires" + t.index ["conversation_id"], name: "index_mailboxer_notifications_on_conversation_id" + t.index ["notified_object_id", "notified_object_type"], name: "index_mailboxer_notifications_on_notified_object_id_and_type" + t.index ["notified_object_type", "notified_object_id"], name: "mailboxer_notifications_notified_object" + t.index ["sender_id", "sender_type"], name: "index_mailboxer_notifications_on_sender_id_and_sender_type" + t.index ["type"], name: "index_mailboxer_notifications_on_type" + end + + create_table "mailboxer_receipts", id: :serial, force: :cascade do |t| + t.string "receiver_type" + t.integer "receiver_id" + t.integer "notification_id", null: false + t.boolean "is_read", default: false + t.boolean "trashed", default: false + t.boolean "deleted", default: false + t.string "mailbox_type", limit: 25 + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.boolean "is_delivered", default: false + t.string "delivery_method" + t.string "message_id" + t.index ["notification_id"], name: "index_mailboxer_receipts_on_notification_id" + t.index ["receiver_id", "receiver_type"], name: "index_mailboxer_receipts_on_receiver_id_and_receiver_type" + end + + create_table "minter_states", id: :serial, force: :cascade do |t| + t.string "namespace", default: "default", null: false + t.string "template", null: false + t.text "counters" + t.bigint "seq", default: 0 + t.binary "rand" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["namespace"], name: "index_minter_states_on_namespace", unique: true + end + + create_table "permission_template_accesses", force: :cascade do |t| + t.bigint "permission_template_id" + t.string "agent_type" + t.string "agent_id" + t.string "access" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["permission_template_id", "agent_id", "agent_type", "access"], name: "uk_permission_template_accesses", unique: true + t.index ["permission_template_id"], name: "index_permission_template_accesses_on_permission_template_id" + end + + create_table "permission_templates", force: :cascade do |t| + t.string "source_id" + t.string "visibility" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.date "release_date" + t.string "release_period" + t.index ["source_id"], name: "index_permission_templates_on_source_id", unique: true + end + + create_table "proxy_deposit_requests", force: :cascade do |t| + t.string "work_id", null: false + t.bigint "sending_user_id", null: false + t.bigint "receiving_user_id", null: false + t.datetime "fulfillment_date" + t.string "status", default: "pending", null: false + t.text "sender_comment" + t.text "receiver_comment" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["receiving_user_id"], name: "index_proxy_deposit_requests_on_receiving_user_id" + t.index ["sending_user_id"], name: "index_proxy_deposit_requests_on_sending_user_id" + end + + create_table "proxy_deposit_rights", force: :cascade do |t| + t.bigint "grantor_id" + t.bigint "grantee_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["grantee_id"], name: "index_proxy_deposit_rights_on_grantee_id" + t.index ["grantor_id"], name: "index_proxy_deposit_rights_on_grantor_id" + end + + create_table "qa_local_authorities", force: :cascade do |t| + t.string "name" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["name"], name: "index_qa_local_authorities_on_name", unique: true + end + + create_table "qa_local_authority_entries", force: :cascade do |t| + t.bigint "local_authority_id" + t.string "label" + t.string "uri" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["local_authority_id"], name: "index_qa_local_authority_entries_on_local_authority_id" + t.index ["uri"], name: "index_qa_local_authority_entries_on_uri", unique: true + end + + create_table "roles", id: :serial, force: :cascade do |t| + t.string "name" + end + + create_table "roles_users", id: false, force: :cascade do |t| + t.integer "role_id" + t.integer "user_id" + t.index ["role_id", "user_id"], name: "index_roles_users_on_role_id_and_user_id" + t.index ["role_id"], name: "index_roles_users_on_role_id" + t.index ["user_id", "role_id"], name: "index_roles_users_on_user_id_and_role_id" + t.index ["user_id"], name: "index_roles_users_on_user_id" + end + + create_table "searches", id: :serial, force: :cascade do |t| + t.binary "query_params" + t.integer "user_id" + t.string "user_type" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["user_id"], name: "index_searches_on_user_id" + end + + create_table "single_use_links", force: :cascade do |t| + t.string "download_key" + t.string "path" + t.string "item_id" + t.datetime "expires" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + create_table "sipity_agents", force: :cascade do |t| + t.string "proxy_for_id", null: false + t.string "proxy_for_type", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["proxy_for_id", "proxy_for_type"], name: "sipity_agents_proxy_for", unique: true + end + + create_table "sipity_comments", force: :cascade do |t| + t.integer "entity_id", null: false + t.integer "agent_id", null: false + t.text "comment" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["agent_id"], name: "index_sipity_comments_on_agent_id" + t.index ["created_at"], name: "index_sipity_comments_on_created_at" + t.index ["entity_id"], name: "index_sipity_comments_on_entity_id" + end + + create_table "sipity_entities", force: :cascade do |t| + t.string "proxy_for_global_id", null: false + t.integer "workflow_id", null: false + t.integer "workflow_state_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["proxy_for_global_id"], name: "sipity_entities_proxy_for_global_id", unique: true + t.index ["workflow_id"], name: "index_sipity_entities_on_workflow_id" + t.index ["workflow_state_id"], name: "index_sipity_entities_on_workflow_state_id" + end + + create_table "sipity_entity_specific_responsibilities", force: :cascade do |t| + t.integer "workflow_role_id", null: false + t.integer "entity_id", null: false + t.integer "agent_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["agent_id"], name: "sipity_entity_specific_responsibilities_agent" + t.index ["entity_id"], name: "sipity_entity_specific_responsibilities_entity" + t.index ["workflow_role_id", "entity_id", "agent_id"], name: "sipity_entity_specific_responsibilities_aggregate", unique: true + t.index ["workflow_role_id"], name: "sipity_entity_specific_responsibilities_role" + end + + create_table "sipity_notifiable_contexts", force: :cascade do |t| + t.integer "scope_for_notification_id", null: false + t.string "scope_for_notification_type", null: false + t.string "reason_for_notification", null: false + t.integer "notification_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["notification_id"], name: "sipity_notifiable_contexts_notification_id" + t.index ["scope_for_notification_id", "scope_for_notification_type", "reason_for_notification", "notification_id"], name: "sipity_notifiable_contexts_concern_surrogate", unique: true + t.index ["scope_for_notification_id", "scope_for_notification_type", "reason_for_notification"], name: "sipity_notifiable_contexts_concern_context" + t.index ["scope_for_notification_id", "scope_for_notification_type"], name: "sipity_notifiable_contexts_concern" + end + + create_table "sipity_notification_recipients", force: :cascade do |t| + t.integer "notification_id", null: false + t.integer "role_id", null: false + t.string "recipient_strategy", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["notification_id", "role_id", "recipient_strategy"], name: "sipity_notifications_recipients_surrogate" + t.index ["notification_id"], name: "sipity_notification_recipients_notification" + t.index ["recipient_strategy"], name: "sipity_notification_recipients_recipient_strategy" + t.index ["role_id"], name: "sipity_notification_recipients_role" + end + + create_table "sipity_notifications", force: :cascade do |t| + t.string "name", null: false + t.string "notification_type", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["name"], name: "index_sipity_notifications_on_name", unique: true + t.index ["notification_type"], name: "index_sipity_notifications_on_notification_type" + end + + create_table "sipity_roles", force: :cascade do |t| + t.string "name", null: false + t.text "description" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["name"], name: "index_sipity_roles_on_name", unique: true + end + + create_table "sipity_workflow_actions", force: :cascade do |t| + t.integer "workflow_id", null: false + t.integer "resulting_workflow_state_id" + t.string "name", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["resulting_workflow_state_id"], name: "sipity_workflow_actions_resulting_workflow_state" + t.index ["workflow_id", "name"], name: "sipity_workflow_actions_aggregate", unique: true + t.index ["workflow_id"], name: "sipity_workflow_actions_workflow" + end + + create_table "sipity_workflow_methods", force: :cascade do |t| + t.string "service_name", null: false + t.integer "weight", null: false + t.integer "workflow_action_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["workflow_action_id"], name: "index_sipity_workflow_methods_on_workflow_action_id" + end + + create_table "sipity_workflow_responsibilities", force: :cascade do |t| + t.integer "agent_id", null: false + t.integer "workflow_role_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["agent_id", "workflow_role_id"], name: "sipity_workflow_responsibilities_aggregate", unique: true + end + + create_table "sipity_workflow_roles", force: :cascade do |t| + t.integer "workflow_id", null: false + t.integer "role_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["workflow_id", "role_id"], name: "sipity_workflow_roles_aggregate", unique: true + end + + create_table "sipity_workflow_state_action_permissions", force: :cascade do |t| + t.integer "workflow_role_id", null: false + t.integer "workflow_state_action_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["workflow_role_id", "workflow_state_action_id"], name: "sipity_workflow_state_action_permissions_aggregate", unique: true + end + + create_table "sipity_workflow_state_actions", force: :cascade do |t| + t.integer "originating_workflow_state_id", null: false + t.integer "workflow_action_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["originating_workflow_state_id", "workflow_action_id"], name: "sipity_workflow_state_actions_aggregate", unique: true + end + + create_table "sipity_workflow_states", force: :cascade do |t| + t.integer "workflow_id", null: false + t.string "name", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["name"], name: "index_sipity_workflow_states_on_name" + t.index ["workflow_id", "name"], name: "sipity_type_state_aggregate", unique: true + end + + create_table "sipity_workflows", force: :cascade do |t| + t.string "name", null: false + t.string "label" + t.text "description" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "permission_template_id" + t.boolean "active" + t.boolean "allows_access_grant" + t.index ["permission_template_id", "name"], name: "index_sipity_workflows_on_permission_template_and_name", unique: true + end + + create_table "tinymce_assets", force: :cascade do |t| + t.string "file" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + create_table "trophies", force: :cascade do |t| + t.integer "user_id" + t.string "work_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + create_table "uploaded_files", force: :cascade do |t| + t.string "file" + t.bigint "user_id" + t.string "file_set_uri" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["file_set_uri"], name: "index_uploaded_files_on_file_set_uri" + t.index ["user_id"], name: "index_uploaded_files_on_user_id" + end + + create_table "user_stats", force: :cascade do |t| + t.integer "user_id" + t.datetime "date" + t.integer "file_views" + t.integer "file_downloads" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "work_views" + t.index ["user_id"], name: "index_user_stats_on_user_id" + end + + create_table "users", force: :cascade do |t| + t.string "email", default: "", null: false + t.string "encrypted_password", default: "", null: false + t.string "reset_password_token" + t.datetime "reset_password_sent_at" + t.datetime "remember_created_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.boolean "guest", default: false + t.string "facebook_handle" + t.string "twitter_handle" + t.string "googleplus_handle" + t.string "display_name" + t.string "address" + t.string "admin_area" + t.string "department" + t.string "title" + t.string "office" + t.string "chat_id" + t.string "website" + t.string "affiliation" + t.string "telephone" + t.string "avatar_file_name" + t.string "avatar_content_type" + t.integer "avatar_file_size" + t.datetime "avatar_updated_at" + t.string "linkedin_handle" + t.string "orcid" + t.string "arkivo_token" + t.string "arkivo_subscription" + t.binary "zotero_token" + t.string "zotero_userid" + t.string "preferred_locale" + t.index ["email"], name: "index_users_on_email", unique: true + t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true + end + + create_table "version_committers", force: :cascade do |t| + t.string "obj_id" + t.string "datastream_id" + t.string "version_id" + t.string "committer_login" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + create_table "work_view_stats", force: :cascade do |t| + t.datetime "date" + t.integer "work_views" + t.string "work_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "user_id" + t.index ["user_id"], name: "index_work_view_stats_on_user_id" + t.index ["work_id"], name: "index_work_view_stats_on_work_id" + end + + add_foreign_key "collection_type_participants", "hyrax_collection_types" + add_foreign_key "curation_concerns_operations", "users" + add_foreign_key "mailboxer_conversation_opt_outs", "mailboxer_conversations", column: "conversation_id", name: "mb_opt_outs_on_conversations_id" + add_foreign_key "mailboxer_notifications", "mailboxer_conversations", column: "conversation_id", name: "notifications_on_conversation_id" + add_foreign_key "mailboxer_receipts", "mailboxer_notifications", column: "notification_id", name: "receipts_on_notification_id" + add_foreign_key "permission_template_accesses", "permission_templates" + add_foreign_key "qa_local_authority_entries", "qa_local_authorities", column: "local_authority_id" + add_foreign_key "uploaded_files", "users" +end diff --git a/hyrax/db/seeds.rb b/hyrax/db/seeds.rb new file mode 100644 index 00000000..1beea2ac --- /dev/null +++ b/hyrax/db/seeds.rb @@ -0,0 +1,7 @@ +# This file should contain all the record creation needed to seed the database with its default values. +# The data can then be loaded with the rails db:seed command (or created alongside the database with db:setup). +# +# Examples: +# +# movies = Movie.create([{ name: 'Star Wars' }, { name: 'Lord of the Rings' }]) +# Character.create(name: 'Luke', movie: movies.first) diff --git a/hyrax/docker-entrypoint.sh b/hyrax/docker-entrypoint.sh new file mode 100644 index 00000000..2521c602 --- /dev/null +++ b/hyrax/docker-entrypoint.sh @@ -0,0 +1,67 @@ +#!/bin/bash + +echo "Creating log folder" +mkdir -p $APP_WORKDIR/log + +if [ "$RAILS_ENV" = "production" ]; then + # Verify all the production gems are installed + bundle check +else + # install any missing development gems (as we can tweak the development container without rebuilding it) + bundle check || bundle install --without production +fi + +## Run any pending migrations, if the database exists +## If not setup the database +bundle exec rake db:exists && bundle exec rake db:migrate || bundle exec rake db:setup + +# Check solr and fedora are running +n=0 +solr_running=false +fedora_running=false +while [[ $n -lt 15 ]] +do + # check Solr is running + if [ "solr_running" = false ] ; then + SOLR=$(curl --silent --connect-timeout 45 "http://${SOLR_HOST:-solr}:${SOLR_PORT:-8983}/solr/" | grep "Apache SOLR") + if [ -n "$SOLR" ] ; then + echo "Solr is running" + solr_running=true + fi + fi + + # check Fedora is running + if [ "fedora_running" = false ] ; then + FEDORA=$(curl --silent --connect-timeout 45 "http://${FEDORA_HOST:-fcrepo}:${FEDORA_PORT:-8080}/fcrepo/" | grep "Fedora Commons Repository") + if [ -n "$FEDORA" ] ; then + echo "Fedora is running" + fedora_running=true + fi + fi + + if [ "solr_running" = true ] && [ "fedora_running" = true ] ; then + break + else + sleep 1 + fi + n=$(( n+1 )) +done + +# Exit if Solr is not running +if [ "solr_running" = false ] ; then + echo "ERROR: Solr is not running" + exit 1 +fi + +# Exit if Fedora is not running +if [ "fedora_running" = false ] ; then + echo "ERROR: Fedora is not running" + exit 1 +fi + +echo "Setting up hyrax... (this can take a few minutes)" +bundle exec rake rdms:setup_hyrax["seed/setup.json"] + +# echo "--------- Starting Hyrax in $RAILS_ENV mode ---------" +rm -f /tmp/hyrax.pid +bundle exec rails server -p 3000 -b '0.0.0.0' --pid /tmp/hyrax.pid diff --git a/hyrax/lib/assets/.keep b/hyrax/lib/assets/.keep new file mode 100644 index 00000000..e69de29b diff --git a/hyrax/lib/tasks/.keep b/hyrax/lib/tasks/.keep new file mode 100644 index 00000000..e69de29b diff --git a/hyrax/lib/tasks/db_exists.rake b/hyrax/lib/tasks/db_exists.rake new file mode 100644 index 00000000..4103f4ab --- /dev/null +++ b/hyrax/lib/tasks/db_exists.rake @@ -0,0 +1,13 @@ +namespace :db do + desc "Checks to see if the database exists" + task :exists do + begin + Rake::Task['environment'].invoke + ActiveRecord::Base.connection + rescue + exit 1 + else + exit 0 + end + end +end diff --git a/hyrax/lib/tasks/setup_hyrax.rake b/hyrax/lib/tasks/setup_hyrax.rake new file mode 100644 index 00000000..0f9a38d4 --- /dev/null +++ b/hyrax/lib/tasks/setup_hyrax.rake @@ -0,0 +1,48 @@ +namespace :rdms do + desc 'Setup Hyrax, will read from specified file usage: rdms:setup_hyrax["setup.json"]' + task :"setup_hyrax", [:seedfile] => :environment do |task, args| + seedfile = args.seedfile + unless args.seedfile.present? + seedfile = Rails.root.join("seed","setup.json") + end + + if (File.exists?(seedfile)) + puts("Running hyrax setup from seedfile: #{seedfile}") + else + abort("ERROR: missing seedfile for hyrax setup: #{seedfile}") + end + + seed = JSON.parse(File.read(seedfile)) + + ############################################## + # make the requested users + ###### + + admin = Role.where(name: "admin").first_or_create! + seed["users"].each do |user| + newUser = User.where(email: user["email"]).first_or_create!(password: user["password"], display_name: user["name"]) + if user["role"] == "admin" + unless admin.users.include?(newUser) + admin.users << newUser + admin.save! + end + end + end + + # finished creating users + ############################################## + + + ############################################## + # Create default administrative set and load workflow + ###### + Rake::Task['hyrax:default_admin_set:create'].invoke + Rake::Task['hyrax:workflow:load'].invoke + Rake::Task['hyrax:default_collection_types:create'].invoke + + ############################################## + # Create languages controlled vocabulary + ###### + Rake::Task['hyrax:controlled_vocabularies:language'].invoke if Qa::Authorities::Local.subauthority_for('languages').all.size == 0 + end +end diff --git a/hyrax/lib/tasks/test_servers.rake b/hyrax/lib/tasks/test_servers.rake new file mode 100644 index 00000000..cf44f3a1 --- /dev/null +++ b/hyrax/lib/tasks/test_servers.rake @@ -0,0 +1,60 @@ +FEDORA_PID_FILE = 'tmp/.fedora-test.pid' +SOLR_PID_FILE = 'tmp/.solr-test.pid' +MINTER_FILE = 'tmp/minter' + +namespace :test do + namespace :servers do + + desc "Load the solr options and solr instance" + task :environment do + abort "ERROR: must be run with RAILS_ENV=test (currently: #{ENV['RAILS_ENV']})" unless ENV['RAILS_ENV'] == 'test' + + SolrWrapper.default_instance_options = { config: 'config/solr_wrapper_test.yml' } + @solr_instance = SolrWrapper.default_instance + @fcrepo_instance = FcrepoWrapper.default_instance(config: 'config/fcrepo_wrapper_test.yml') + end + + desc 'Starts a test Solr and Fedora instance for running cucumber tests' + task :start => :environment do + abort "WARNING: Solr-test is already running; run \"rake test:servers:stop\" to stop it" if File.exists?(SOLR_PID_FILE) + abort "WARNING: Fedora-test is already running; run \"rake test:servers:stop\" to stop it" if File.exists?(FEDORA_PID_FILE) + + # clean out any old solr files + @solr_instance.remove_instance_dir! + @solr_instance.extract_and_configure + + # start solr + @solr_instance.start + # create the core - a bit of a bodge is required to get the correct collection options + collection_options = HashWithIndifferentAccess.new(@solr_instance.config.options[:collection].except(:name)) + @solr_instance.create(collection_options) + File.write(SOLR_PID_FILE, @solr_instance.pid) + + # start fedora + @fcrepo_instance.remove_instance_dir! + @fcrepo_instance.start + File.write(FEDORA_PID_FILE, @fcrepo_instance.pid) + end + + task :stop => :environment do + # kill fedora and clean up + if File.exists?(FEDORA_PID_FILE) + # NB: we cannot use @fcrepo_instance.stop here as the @instance does not know its PID, so kill in the conventional way instead + Process.kill 'HUP', File.read(FEDORA_PID_FILE).to_i + File.delete(FEDORA_PID_FILE) + sleep(0.5) + @fcrepo_instance.remove_instance_dir! + end + + # stop solr and clean up + if File.exists?(SOLR_PID_FILE) + @solr_instance.stop + File.delete(SOLR_PID_FILE) + @solr_instance.remove_instance_dir! + end + + # delete the test minter file + File.delete(MINTER_FILE) if File.exists?(MINTER_FILE) + end + end +end diff --git a/hyrax/log/.keep b/hyrax/log/.keep new file mode 100644 index 00000000..e69de29b diff --git a/hyrax/package.json b/hyrax/package.json new file mode 100644 index 00000000..571cadee --- /dev/null +++ b/hyrax/package.json @@ -0,0 +1,17 @@ +{ + "name": "hyrax", + "private": true, + "repository": "git@github.com:samvera/hyrax.git", + "dependencies": { + "universalviewer": "^3.0.16" +}, +"scripts": { + "preinstall": "rm -rf ./public/uv", + "postinstall": "yarn run uv-install && yarn run uv-config", + "uv-install": "shx cp -r ./node_modules/universalviewer/dist ./public/uv", + "uv-config": "shx cp ./config/uv/uv.html ./public/uv/uv.html & shx cp ./config/uv/uv-config.json ./public/uv/" + }, + "devDependencies": { + "shx": "^0.3.2" + } +} diff --git a/hyrax/public/404.html b/hyrax/public/404.html new file mode 100644 index 00000000..2be3af26 --- /dev/null +++ b/hyrax/public/404.html @@ -0,0 +1,67 @@ +<!DOCTYPE html> +<html> +<head> + <title>The page you were looking for doesn't exist (404)</title> + <meta name="viewport" content="width=device-width,initial-scale=1"> + <style> + .rails-default-error-page { + background-color: #EFEFEF; + color: #2E2F30; + text-align: center; + font-family: arial, sans-serif; + margin: 0; + } + + .rails-default-error-page div.dialog { + width: 95%; + max-width: 33em; + margin: 4em auto 0; + } + + .rails-default-error-page div.dialog > div { + border: 1px solid #CCC; + border-right-color: #999; + border-left-color: #999; + border-bottom-color: #BBB; + border-top: #B00100 solid 4px; + border-top-left-radius: 9px; + border-top-right-radius: 9px; + background-color: white; + padding: 7px 12% 0; + box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17); + } + + .rails-default-error-page h1 { + font-size: 100%; + color: #730E15; + line-height: 1.5em; + } + + .rails-default-error-page div.dialog > p { + margin: 0 0 1em; + padding: 1em; + background-color: #F7F7F7; + border: 1px solid #CCC; + border-right-color: #999; + border-left-color: #999; + border-bottom-color: #999; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + border-top-color: #DADADA; + color: #666; + box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17); + } + </style> +</head> + +<body class="rails-default-error-page"> + <!-- This file lives in public/404.html --> + <div class="dialog"> + <div> + <h1>The page you were looking for doesn't exist.</h1> + <p>You may have mistyped the address or the page may have moved.</p> + </div> + <p>If you are the application owner check the logs for more information.</p> + </div> +</body> +</html> diff --git a/hyrax/public/422.html b/hyrax/public/422.html new file mode 100644 index 00000000..c08eac0d --- /dev/null +++ b/hyrax/public/422.html @@ -0,0 +1,67 @@ +<!DOCTYPE html> +<html> +<head> + <title>The change you wanted was rejected (422)</title> + <meta name="viewport" content="width=device-width,initial-scale=1"> + <style> + .rails-default-error-page { + background-color: #EFEFEF; + color: #2E2F30; + text-align: center; + font-family: arial, sans-serif; + margin: 0; + } + + .rails-default-error-page div.dialog { + width: 95%; + max-width: 33em; + margin: 4em auto 0; + } + + .rails-default-error-page div.dialog > div { + border: 1px solid #CCC; + border-right-color: #999; + border-left-color: #999; + border-bottom-color: #BBB; + border-top: #B00100 solid 4px; + border-top-left-radius: 9px; + border-top-right-radius: 9px; + background-color: white; + padding: 7px 12% 0; + box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17); + } + + .rails-default-error-page h1 { + font-size: 100%; + color: #730E15; + line-height: 1.5em; + } + + .rails-default-error-page div.dialog > p { + margin: 0 0 1em; + padding: 1em; + background-color: #F7F7F7; + border: 1px solid #CCC; + border-right-color: #999; + border-left-color: #999; + border-bottom-color: #999; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + border-top-color: #DADADA; + color: #666; + box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17); + } + </style> +</head> + +<body class="rails-default-error-page"> + <!-- This file lives in public/422.html --> + <div class="dialog"> + <div> + <h1>The change you wanted was rejected.</h1> + <p>Maybe you tried to change something you didn't have access to.</p> + </div> + <p>If you are the application owner check the logs for more information.</p> + </div> +</body> +</html> diff --git a/hyrax/public/500.html b/hyrax/public/500.html new file mode 100644 index 00000000..78a030af --- /dev/null +++ b/hyrax/public/500.html @@ -0,0 +1,66 @@ +<!DOCTYPE html> +<html> +<head> + <title>We're sorry, but something went wrong (500)</title> + <meta name="viewport" content="width=device-width,initial-scale=1"> + <style> + .rails-default-error-page { + background-color: #EFEFEF; + color: #2E2F30; + text-align: center; + font-family: arial, sans-serif; + margin: 0; + } + + .rails-default-error-page div.dialog { + width: 95%; + max-width: 33em; + margin: 4em auto 0; + } + + .rails-default-error-page div.dialog > div { + border: 1px solid #CCC; + border-right-color: #999; + border-left-color: #999; + border-bottom-color: #BBB; + border-top: #B00100 solid 4px; + border-top-left-radius: 9px; + border-top-right-radius: 9px; + background-color: white; + padding: 7px 12% 0; + box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17); + } + + .rails-default-error-page h1 { + font-size: 100%; + color: #730E15; + line-height: 1.5em; + } + + .rails-default-error-page div.dialog > p { + margin: 0 0 1em; + padding: 1em; + background-color: #F7F7F7; + border: 1px solid #CCC; + border-right-color: #999; + border-left-color: #999; + border-bottom-color: #999; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + border-top-color: #DADADA; + color: #666; + box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17); + } + </style> +</head> + +<body class="rails-default-error-page"> + <!-- This file lives in public/500.html --> + <div class="dialog"> + <div> + <h1>We're sorry, but something went wrong.</h1> + </div> + <p>If you are the application owner check the logs for more information.</p> + </div> +</body> +</html> diff --git a/hyrax/public/apple-touch-icon-precomposed.png b/hyrax/public/apple-touch-icon-precomposed.png new file mode 100644 index 00000000..e69de29b diff --git a/hyrax/public/apple-touch-icon.png b/hyrax/public/apple-touch-icon.png new file mode 100644 index 00000000..e69de29b diff --git a/hyrax/public/favicon.ico b/hyrax/public/favicon.ico new file mode 100644 index 00000000..e69de29b diff --git a/hyrax/public/robots.txt b/hyrax/public/robots.txt new file mode 100644 index 00000000..37b576a4 --- /dev/null +++ b/hyrax/public/robots.txt @@ -0,0 +1 @@ +# See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file diff --git a/hyrax/seed/.keep b/hyrax/seed/.keep new file mode 100644 index 00000000..e69de29b diff --git a/hyrax/seed/setup.json b/hyrax/seed/setup.json new file mode 100644 index 00000000..7aa4540a --- /dev/null +++ b/hyrax/seed/setup.json @@ -0,0 +1,22 @@ +{ + "users": [{ + "email": "admin@hyrax", + "password": "password", + "name": "hyrax Admin", + "role": "admin" + }, + { + "email": "user@hyrax", + "password": "demouser", + "name": "Demo User", + "role": "user", + "depositor": true + }, + { + "email": "workflow@hyrax", + "password": "workflow", + "name": "Workflow Admin", + "role": "admin" + } + ] +} diff --git a/hyrax/solr/conf/_rest_managed.json b/hyrax/solr/conf/_rest_managed.json new file mode 100644 index 00000000..e7ada3f6 --- /dev/null +++ b/hyrax/solr/conf/_rest_managed.json @@ -0,0 +1,3 @@ +{ + "initArgs":{}, + "managedList":[]} \ No newline at end of file diff --git a/hyrax/solr/conf/admin-extra.html b/hyrax/solr/conf/admin-extra.html new file mode 100644 index 00000000..21b50901 --- /dev/null +++ b/hyrax/solr/conf/admin-extra.html @@ -0,0 +1,31 @@ +<!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<!-- The content of this page will be statically included into the top +of the admin page. Uncomment this as an example to see there the content +will show up. + +<hr> +<i>This line will appear before the first table</i> +<tr> +<td colspan="2"> +This row will be appended to the end of the first table +</td> +</tr> +<hr> + +--> diff --git a/hyrax/solr/conf/elevate.xml b/hyrax/solr/conf/elevate.xml new file mode 100644 index 00000000..b91e75ce --- /dev/null +++ b/hyrax/solr/conf/elevate.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<!-- If this file is found in the config directory, it will only be + loaded once at startup. If it is found in Solr's data + directory, it will be re-loaded every commit. +--> + +<elevate> + <query text="foo bar"> + <doc id="1" /> + <doc id="2" /> + <doc id="3" /> + </query> + + <query text="ipod"> + <doc id="MA147LL/A" /> <!-- put the actual ipod at the top --> + <doc id="IW-02" exclude="true" /> <!-- exclude this cable --> + </query> + +</elevate> diff --git a/hyrax/solr/conf/mapping-ISOLatin1Accent.txt b/hyrax/solr/conf/mapping-ISOLatin1Accent.txt new file mode 100644 index 00000000..186ca313 --- /dev/null +++ b/hyrax/solr/conf/mapping-ISOLatin1Accent.txt @@ -0,0 +1,246 @@ +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Syntax: +# "source" => "target" +# "source".length() > 0 (source cannot be empty.) +# "target".length() >= 0 (target can be empty.) + +# example: +# "??" => "A" +# "\u00C0" => "A" +# "\u00C0" => "\u0041" +# "??" => "ss" +# "\t" => " " +# "\n" => "" + +# ?? => A +"\u00C0" => "A" + +# ?? => A +"\u00C1" => "A" + +# ?? => A +"\u00C2" => "A" + +# ?? => A +"\u00C3" => "A" + +# ?? => A +"\u00C4" => "A" + +# ?? => A +"\u00C5" => "A" + +# ?? => AE +"\u00C6" => "AE" + +# ?? => C +"\u00C7" => "C" + +# ?? => E +"\u00C8" => "E" + +# ?? => E +"\u00C9" => "E" + +# ?? => E +"\u00CA" => "E" + +# ?? => E +"\u00CB" => "E" + +# ?? => I +"\u00CC" => "I" + +# ?? => I +"\u00CD" => "I" + +# ?? => I +"\u00CE" => "I" + +# ?? => I +"\u00CF" => "I" + +# ?? => IJ +"\u0132" => "IJ" + +# ?? => D +"\u00D0" => "D" + +# ?? => N +"\u00D1" => "N" + +# ?? => O +"\u00D2" => "O" + +# ?? => O +"\u00D3" => "O" + +# ?? => O +"\u00D4" => "O" + +# ?? => O +"\u00D5" => "O" + +# ?? => O +"\u00D6" => "O" + +# ?? => O +"\u00D8" => "O" + +# ?? => OE +"\u0152" => "OE" + +# ?? +"\u00DE" => "TH" + +# ?? => U +"\u00D9" => "U" + +# ?? => U +"\u00DA" => "U" + +# ?? => U +"\u00DB" => "U" + +# ?? => U +"\u00DC" => "U" + +# ?? => Y +"\u00DD" => "Y" + +# ?? => Y +"\u0178" => "Y" + +# ?? => a +"\u00E0" => "a" + +# ?? => a +"\u00E1" => "a" + +# ?? => a +"\u00E2" => "a" + +# ?? => a +"\u00E3" => "a" + +# ?? => a +"\u00E4" => "a" + +# ?? => a +"\u00E5" => "a" + +# ?? => ae +"\u00E6" => "ae" + +# ?? => c +"\u00E7" => "c" + +# ?? => e +"\u00E8" => "e" + +# ?? => e +"\u00E9" => "e" + +# ?? => e +"\u00EA" => "e" + +# ?? => e +"\u00EB" => "e" + +# ?? => i +"\u00EC" => "i" + +# ?? => i +"\u00ED" => "i" + +# ?? => i +"\u00EE" => "i" + +# ?? => i +"\u00EF" => "i" + +# ?? => ij +"\u0133" => "ij" + +# ?? => d +"\u00F0" => "d" + +# ?? => n +"\u00F1" => "n" + +# ?? => o +"\u00F2" => "o" + +# ?? => o +"\u00F3" => "o" + +# ?? => o +"\u00F4" => "o" + +# ?? => o +"\u00F5" => "o" + +# ?? => o +"\u00F6" => "o" + +# ?? => o +"\u00F8" => "o" + +# ?? => oe +"\u0153" => "oe" + +# ?? => ss +"\u00DF" => "ss" + +# ?? => th +"\u00FE" => "th" + +# ?? => u +"\u00F9" => "u" + +# ?? => u +"\u00FA" => "u" + +# ?? => u +"\u00FB" => "u" + +# ?? => u +"\u00FC" => "u" + +# ?? => y +"\u00FD" => "y" + +# ?? => y +"\u00FF" => "y" + +# ??? => ff +"\uFB00" => "ff" + +# ??? => fi +"\uFB01" => "fi" + +# ??? => fl +"\uFB02" => "fl" + +# ??? => ffi +"\uFB03" => "ffi" + +# ??? => ffl +"\uFB04" => "ffl" + +# ??? => ft +"\uFB05" => "ft" + +# ??? => st +"\uFB06" => "st" diff --git a/hyrax/solr/conf/protwords.txt b/hyrax/solr/conf/protwords.txt new file mode 100644 index 00000000..5a32e503 --- /dev/null +++ b/hyrax/solr/conf/protwords.txt @@ -0,0 +1,21 @@ +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#----------------------------------------------------------------------- +# Use a protected word file to protect against the stemmer reducing two +# unrelated words to the same base word. + +# Some non-words that normally won't be encountered, +# just to test that they won't be stemmed. +dontstems +zwhacky + diff --git a/hyrax/solr/conf/schema.xml b/hyrax/solr/conf/schema.xml new file mode 100644 index 00000000..19697ecd --- /dev/null +++ b/hyrax/solr/conf/schema.xml @@ -0,0 +1,367 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<!-- + This is the Solr schema file. This file should be named "schema.xml" and + should be in the conf directory under the solr home + (i.e. ./solr/conf/schema.xml by default) + or located where the classloader for the Solr webapp can find it. + + This example schema is the recommended starting point for users. + It should be kept correct and concise, usable out-of-the-box. + + For more information, on how to customize this file, please see + http://wiki.apache.org/solr/SchemaXml + + PERFORMANCE NOTE: this schema includes many optional features and should not + be used for benchmarking. To improve performance one could + - set stored="false" for all fields possible (esp large fields) when you + only need to search on the field but don't need to return the original + value. + - set indexed="false" if you don't need to search on the field, but only + return the field as a result of searching on other indexed fields. + - remove all unneeded copyField statements + - for best index size and searching performance, set "index" to false + for all general text fields, use copyField to copy them to the + catchall "text" field, and use that for searching. + - For maximum indexing performance, use the StreamingUpdateSolrServer + java client. + - Remember to run the JVM in server mode, and use a higher logging level + that avoids logging every request +--> + +<schema name="Hydra Demo Index" version="1.5"> + <!-- attribute "name" is the name of this schema and is only used for display purposes. + Applications should change this to reflect the nature of the search collection. + version="1.5" is Solr's version number for the schema syntax and semantics. It should + not normally be changed by applications. + 1.0: multiValued attribute did not exist, all fields are multiValued by nature + 1.1: multiValued attribute introduced, false by default + 1.2: omitTermFreqAndPositions attribute introduced, true by default except for text fields. + 1.3: removed optional field compress feature + 1.4: default auto-phrase (QueryParser feature) to off + 1.5: omitNorms defaults to true for primitive field types (int, float, boolean, string...) +# TODO 1.6: useDocValuesAsStored defaults to true. +# See https://github.com/samvera/active_fedora/issues/1346 + --> + + <types> + <fieldType name="string" class="solr.StrField" sortMissingLast="true" /> + <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true"/> + <fieldType name="rand" class="solr.RandomSortField" omitNorms="true"/> + + <!-- Default numeric field types. --> + <fieldType name="int" class="solr.IntPointField" docValues="true"/> + <fieldType name="float" class="solr.FloatPointField" docValues="true"/> + <fieldType name="long" class="solr.LongPointField" docValues="true"/> + <fieldType name="double" class="solr.DoublePointField" docValues="true"/> + + <!-- PointField numeric field types for faster range queries --> + <fieldType name="tint" class="solr.IntPointField" docValues="true"/> + <fieldType name="tfloat" class="solr.FloatPointField" docValues="true"/> + <fieldType name="tlong" class="solr.LongPointField" docValues="true"/> + <fieldType name="tdouble" class="solr.DoublePointField" docValues="true"/> + + <!-- The format for this date field is of the form 1995-12-31T23:59:59Z + Optional fractional seconds are allowed: 1995-12-31T23:59:59.999Z + --> + <fieldType name="date" class="solr.DatePointField" docValues="true"/> + <!-- A PointField based date field for faster date range queries and date faceting. --> + <fieldType name="tdate" class="solr.DatePointField" docValues="true"/> + <!-- A DateRange based date field for truly faster date range queries. --> + <fieldType name="dateRange" class="solr.DateRangeField" omitNorms="true" omitTermFreqAndPositions="true"/> + + <!-- This point type indexes the coordinates as separate fields (subFields) + If subFieldType is defined, it references a type, and a dynamic field + definition is created matching *___<typename>. Alternately, if + subFieldSuffix is defined, that is used to create the subFields. + Example: if subFieldType="double", then the coordinates would be + indexed in fields myloc_0___double,myloc_1___double. + Example: if subFieldSuffix="_d" then the coordinates would be indexed + in fields myloc_0_d,myloc_1_d + The subFields are an implementation detail of the fieldType, and end + users normally should not need to know about them. + --> + <fieldType name="point" class="solr.PointType" dimension="2" subFieldSuffix="_d"/> + + <!-- A geospatial field type new to Solr 4. It supports multiValued and polygon shapes. + For more information about this and other Spatial fields new to Solr 4, see: + http://wiki.apache.org/solr/SolrAdaptersForLuceneSpatial4 + --> + <fieldType name="location_rpt" class="solr.SpatialRecursivePrefixTreeFieldType" + geo="true" distErrPct="0.025" maxDistErr="0.000009" distanceUnits="degrees" /> + + <fieldType name="text" class="solr.TextField" omitNorms="false"> + <analyzer> + <tokenizer class="solr.ICUTokenizerFactory"/> + <filter class="solr.ICUFoldingFilterFactory"/> <!-- NFKC, case folding, diacritics removed --> + <filter class="solr.TrimFilterFactory"/> + </analyzer> + </fieldType> + + <!-- A text field that only splits on whitespace for exact matching of words --> + <fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100"> + <analyzer> + <tokenizer class="solr.WhitespaceTokenizerFactory"/> + <filter class="solr.TrimFilterFactory"/> + </analyzer> + </fieldType> + + <!-- single token analyzed text, for sorting. Punctuation is significant. --> + <fieldtype name="alphaSort" class="solr.TextField" sortMissingLast="true" omitNorms="true"> + <analyzer> + <tokenizer class="solr.KeywordTokenizerFactory" /> + <filter class="solr.ICUFoldingFilterFactory"/> + <filter class="solr.TrimFilterFactory" /> + </analyzer> + </fieldtype> + + <!-- A text field with defaults appropriate for English --> + <fieldType name="text_en" class="solr.TextField" positionIncrementGap="100"> + <analyzer> + <tokenizer class="solr.ICUTokenizerFactory"/> + <filter class="solr.ICUFoldingFilterFactory"/> <!-- NFKC, case folding, diacritics removed --> + <filter class="solr.EnglishPossessiveFilterFactory"/> + <!-- EnglishMinimalStemFilterFactory is less aggressive than PorterStemFilterFactory: --> + <filter class="solr.EnglishMinimalStemFilterFactory"/> + <!-- + <filter class="solr.PorterStemFilterFactory"/> + --> + <filter class="solr.TrimFilterFactory"/> + </analyzer> + </fieldType> + + <!-- queries for paths match documents at that path, or in descendent paths --> + <fieldType name="descendent_path" class="solr.TextField"> + <analyzer type="index"> + <tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/" /> + </analyzer> + <analyzer type="query"> + <tokenizer class="solr.KeywordTokenizerFactory" /> + </analyzer> + </fieldType> + + <!-- queries for paths match documents at that path, or in ancestor paths --> + <fieldType name="ancestor_path" class="solr.TextField"> + <analyzer type="index"> + <tokenizer class="solr.KeywordTokenizerFactory" /> + </analyzer> + <analyzer type="query"> + <tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/" /> + </analyzer> + </fieldType> + + <fieldType class="solr.TextField" name="textSuggest" positionIncrementGap="100"> + <analyzer> + <tokenizer class="solr.KeywordTokenizerFactory"/> + <filter class="solr.LowerCaseFilterFactory"/> + <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> + </analyzer> + </fieldType> + </types> + + + <fields> + <!-- If you remove this field, you must _also_ disable the update log in solrconfig.xml + or Solr won't start. _version_ and update log are required for SolrCloud + --> + <field name="_version_" type="long" indexed="true" stored="true"/> + + <field name="id" type="string" stored="true" indexed="true" multiValued="false" required="true"/> + <field name="timestamp" type="date" indexed="true" stored="true" default="NOW" multiValued="false"/> + + <field name="lat" type="tdouble" stored="true" indexed="true" multiValued="false"/> + <field name="lng" type="tdouble" stored="true" indexed="true" multiValued="false"/> + + <!-- NOTE: not all possible Solr field types are represented in the dynamic fields --> + + <!-- text (_t...) --> + <dynamicField name="*_ti" type="text" stored="false" indexed="true" multiValued="false"/> + <dynamicField name="*_tim" type="text" stored="false" indexed="true" multiValued="true"/> + <dynamicField name="*_ts" type="text" stored="true" indexed="false" multiValued="false"/> + <dynamicField name="*_tsm" type="text" stored="true" indexed="false" multiValued="true"/> + <dynamicField name="*_tsi" type="text" stored="true" indexed="true" multiValued="false"/> + <dynamicField name="*_tsim" type="text" stored="true" indexed="true" multiValued="true"/> + <dynamicField name="*_tiv" type="text" stored="false" indexed="true" multiValued="false" termVectors="true" termPositions="true" termOffsets="true"/> + <dynamicField name="*_timv" type="text" stored="false" indexed="true" multiValued="true" termVectors="true" termPositions="true" termOffsets="true"/> + <dynamicField name="*_tsiv" type="text" stored="true" indexed="true" multiValued="false" termVectors="true" termPositions="true" termOffsets="true"/> + <dynamicField name="*_tsimv" type="text" stored="true" indexed="true" multiValued="true" termVectors="true" termPositions="true" termOffsets="true"/> + + <!-- English text (_te...) --> + <dynamicField name="*_tei" type="text_en" stored="false" indexed="true" multiValued="false"/> + <dynamicField name="*_teim" type="text_en" stored="false" indexed="true" multiValued="true"/> + <dynamicField name="*_tes" type="text_en" stored="true" indexed="false" multiValued="false"/> + <dynamicField name="*_tesm" type="text_en" stored="true" indexed="false" multiValued="true"/> + <dynamicField name="*_tesi" type="text_en" stored="true" indexed="true" multiValued="false"/> + <dynamicField name="*_tesim" type="text_en" stored="true" indexed="true" multiValued="true"/> + <dynamicField name="*_teiv" type="text_en" stored="false" indexed="true" multiValued="false" termVectors="true" termPositions="true" termOffsets="true"/> + <dynamicField name="*_teimv" type="text_en" stored="false" indexed="true" multiValued="true" termVectors="true" termPositions="true" termOffsets="true"/> + <dynamicField name="*_tesiv" type="text_en" stored="true" indexed="true" multiValued="false" termVectors="true" termPositions="true" termOffsets="true"/> + <dynamicField name="*_tesimv" type="text_en" stored="true" indexed="true" multiValued="true" termVectors="true" termPositions="true" termOffsets="true"/> + + <!-- string (_s...) --> + <dynamicField name="*_si" type="string" stored="false" indexed="true" multiValued="false"/> + <dynamicField name="*_sim" type="string" stored="false" indexed="true" multiValued="true"/> + <dynamicField name="*_ss" type="string" stored="true" indexed="false" multiValued="false"/> + <dynamicField name="*_ssm" type="string" stored="true" indexed="false" multiValued="true"/> + <dynamicField name="*_ssi" type="string" stored="true" indexed="true" multiValued="false"/> + <dynamicField name="*_ssim" type="string" stored="true" indexed="true" multiValued="true"/> + <dynamicField name="*_ssort" type="alphaSort" stored="false" indexed="true" multiValued="false"/> + + <!-- integer (_i...) --> + <dynamicField name="*_ii" type="int" stored="false" indexed="true" multiValued="false"/> + <dynamicField name="*_iim" type="int" stored="false" indexed="true" multiValued="true"/> + <dynamicField name="*_is" type="int" stored="true" indexed="false" multiValued="false"/> + <dynamicField name="*_ism" type="int" stored="true" indexed="false" multiValued="true"/> + <dynamicField name="*_isi" type="int" stored="true" indexed="true" multiValued="false"/> + <dynamicField name="*_isim" type="int" stored="true" indexed="true" multiValued="true"/> + + <!-- IntegerPointField (_it...) (for faster range queries) --> + <dynamicField name="*_iti" type="tint" stored="false" indexed="true" multiValued="false"/> + <dynamicField name="*_itim" type="tint" stored="false" indexed="true" multiValued="true"/> + <dynamicField name="*_its" type="tint" stored="true" indexed="false" multiValued="false"/> + <dynamicField name="*_itsm" type="tint" stored="true" indexed="false" multiValued="true"/> + <dynamicField name="*_itsi" type="tint" stored="true" indexed="true" multiValued="false"/> + <dynamicField name="*_itsim" type="tint" stored="true" indexed="true" multiValued="true"/> + + <!-- date (_dt...) --> + <!-- The format for this date field is of the form 1995-12-31T23:59:59Z + Optional fractional seconds are allowed: 1995-12-31T23:59:59.999Z --> + <dynamicField name="*_dti" type="date" stored="false" indexed="true" multiValued="false"/> + <dynamicField name="*_dtim" type="date" stored="false" indexed="true" multiValued="true"/> + <dynamicField name="*_dts" type="date" stored="true" indexed="false" multiValued="false"/> + <dynamicField name="*_dtsm" type="date" stored="true" indexed="false" multiValued="true"/> + <dynamicField name="*_dtsi" type="date" stored="true" indexed="true" multiValued="false"/> + <dynamicField name="*_dtsim" type="date" stored="true" indexed="true" multiValued="true"/> + + <!-- DatePointField (_dtt...) (for faster range queries) --> + <dynamicField name="*_dtti" type="tdate" stored="false" indexed="true" multiValued="false"/> + <dynamicField name="*_dttim" type="tdate" stored="false" indexed="true" multiValued="true"/> + <dynamicField name="*_dtts" type="tdate" stored="true" indexed="false" multiValued="false"/> + <dynamicField name="*_dttsm" type="tdate" stored="true" indexed="false" multiValued="true"/> + <dynamicField name="*_dttsi" type="tdate" stored="true" indexed="true" multiValued="false"/> + <dynamicField name="*_dttsim" type="tdate" stored="true" indexed="true" multiValued="true"/> + + + <!-- date range (_dr...) (for faster AND better range queries) --> + <dynamicField name="*_dri" type="dateRange" stored="false" indexed="true" multiValued="false"/> + <dynamicField name="*_drim" type="dateRange" stored="false" indexed="true" multiValued="true"/> + <dynamicField name="*_drsi" type="dateRange" stored="true" indexed="true" multiValued="false"/> + <dynamicField name="*_drsim" type="dateRange" stored="true" indexed="true" multiValued="true"/> + <dynamicField name="*_drs" type="dateRange" stored="true" indexed="true" multiValued="false"/> <!-- indexed anyway because DateRangeField errors otherwise --> + <dynamicField name="*_drsm" type="dateRange" stored="true" indexed="true" multiValued="true"/> <!-- indexed anyway because DateRangeField errors otherwise --> + + <!-- long (_l...) --> + <dynamicField name="*_li" type="long" stored="false" indexed="true" multiValued="false"/> + <dynamicField name="*_lim" type="long" stored="false" indexed="true" multiValued="true"/> + <dynamicField name="*_ls" type="long" stored="true" indexed="false" multiValued="false"/> + <dynamicField name="*_lsm" type="long" stored="true" indexed="false" multiValued="true"/> + <dynamicField name="*_lsi" type="long" stored="true" indexed="true" multiValued="false"/> + <dynamicField name="*_lsim" type="long" stored="true" indexed="true" multiValued="true"/> + + <!-- LongPointField (_lt...) (for faster range queries) --> + <dynamicField name="*_lti" type="tlong" stored="false" indexed="true" multiValued="false"/> + <dynamicField name="*_ltim" type="tlong" stored="false" indexed="true" multiValued="true"/> + <dynamicField name="*_lts" type="tlong" stored="true" indexed="false" multiValued="false"/> + <dynamicField name="*_ltsm" type="tlong" stored="true" indexed="false" multiValued="true"/> + <dynamicField name="*_ltsi" type="tlong" stored="true" indexed="true" multiValued="false"/> + <dynamicField name="*_ltsim" type="tlong" stored="true" indexed="true" multiValued="true"/> + + <!-- double (_db...) --> + <dynamicField name="*_dbi" type="double" stored="false" indexed="true" multiValued="false"/> + <dynamicField name="*_dbim" type="double" stored="false" indexed="true" multiValued="true"/> + <dynamicField name="*_dbs" type="double" stored="true" indexed="false" multiValued="false"/> + <dynamicField name="*_dbsm" type="double" stored="true" indexed="false" multiValued="true"/> + <dynamicField name="*_dbsi" type="double" stored="true" indexed="true" multiValued="false"/> + <dynamicField name="*_dbsim" type="double" stored="true" indexed="true" multiValued="true"/> + + <!-- DoublePointField (_dbt...) (for faster range queries) --> + <dynamicField name="*_dbti" type="tdouble" stored="false" indexed="true" multiValued="false"/> + <dynamicField name="*_dbtim" type="tdouble" stored="false" indexed="true" multiValued="true"/> + <dynamicField name="*_dbts" type="tdouble" stored="true" indexed="false" multiValued="false"/> + <dynamicField name="*_dbtsm" type="tdouble" stored="true" indexed="false" multiValued="true"/> + <dynamicField name="*_dbtsi" type="tdouble" stored="true" indexed="true" multiValued="false"/> + <dynamicField name="*_dbtsim" type="tdouble" stored="true" indexed="true" multiValued="true"/> + + <!-- float (_f...) --> + <dynamicField name="*_fi" type="float" stored="false" indexed="true" multiValued="false"/> + <dynamicField name="*_fim" type="float" stored="false" indexed="true" multiValued="true"/> + <dynamicField name="*_fs" type="float" stored="true" indexed="false" multiValued="false"/> + <dynamicField name="*_fsm" type="float" stored="true" indexed="false" multiValued="true"/> + <dynamicField name="*_fsi" type="float" stored="true" indexed="true" multiValued="false"/> + <dynamicField name="*_fsim" type="float" stored="true" indexed="true" multiValued="true"/> + + <!-- FloatPointField (_ft...) (for faster range queries) --> + <dynamicField name="*_fti" type="tfloat" stored="false" indexed="true" multiValued="false"/> + <dynamicField name="*_ftim" type="tfloat" stored="false" indexed="true" multiValued="true"/> + <dynamicField name="*_fts" type="tfloat" stored="true" indexed="false" multiValued="false"/> + <dynamicField name="*_ftsm" type="tfloat" stored="true" indexed="false" multiValued="true"/> + <dynamicField name="*_ftsi" type="tfloat" stored="true" indexed="true" multiValued="false"/> + <dynamicField name="*_ftsim" type="tfloat" stored="true" indexed="true" multiValued="true"/> + + <!-- boolean (_b...) --> + <dynamicField name="*_bi" type="boolean" stored="false" indexed="true" multiValued="false"/> + <dynamicField name="*_bs" type="boolean" stored="true" indexed="false" multiValued="false"/> + <dynamicField name="*_bsi" type="boolean" stored="true" indexed="true" multiValued="false"/> + + <!-- Type used to index the lat and lon components for the "location" FieldType --> + <dynamicField name="*_coordinate" type="tdouble" indexed="true" stored="false" /> + + <dynamicField name="*suggest" type="textSuggest" indexed="true" stored="false" multiValued="true" /> + + <!-- you must define copyField source and dest fields explicity or schemaBrowser doesn't work --> + <field name="all_text_timv" type="text" stored="false" indexed="true" multiValued="true" termVectors="true" termPositions="true" termOffsets="true"/> + + + </fields> + + <!-- Field to use to determine and enforce document uniqueness. + Unless this field is marked with required="false", it will be a required field + --> + <uniqueKey>id</uniqueKey> + + <!-- copyField commands copy one field to another at the time a document + is added to the index. It's used either to index the same field differently, + or to add multiple fields to the same field for easier/faster searching. --> + <!-- Copy Fields --> + + <!-- Above, multiple source fields are copied to the [text] field. + Another way to map multiple source fields to the same + destination field is to use the dynamic field syntax. + copyField also supports a maxChars to copy setting. --> + + <!-- <copyField source="*_tesim" dest="all_text_timv" maxChars="3000"/> --> + <!-- for suggestions --> + <copyField source="*_tesim" dest="suggest"/> + <copyField source="*_ssim" dest="suggest"/> + + <!-- Similarity is the scoring routine for each document vs. a query. + A custom similarity may be specified here, but the default is fine + for most applications. --> + <!-- <similarity class="org.apache.lucene.search.DefaultSimilarity"/> --> + <!-- ... OR ... + Specify a SimilarityFactory class name implementation + allowing parameters to be used. + --> + <!-- + <similarity class="com.example.solr.CustomSimilarityFactory"> + <str name="paramkey">param value</str> + </similarity> + --> + +</schema> diff --git a/hyrax/solr/conf/scripts.conf b/hyrax/solr/conf/scripts.conf new file mode 100644 index 00000000..f58b262a --- /dev/null +++ b/hyrax/solr/conf/scripts.conf @@ -0,0 +1,24 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +user= +solr_hostname=localhost +solr_port=8983 +rsyncd_port=18983 +data_dir= +webapp_name=solr +master_host= +master_data_dir= +master_status_dir= diff --git a/hyrax/solr/conf/solrconfig.xml b/hyrax/solr/conf/solrconfig.xml new file mode 100644 index 00000000..8aadbef9 --- /dev/null +++ b/hyrax/solr/conf/solrconfig.xml @@ -0,0 +1,325 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<!-- + This is a stripped down config file used for a simple example... + It is *not* a good example to work from. +--> +<config> + + <!-- Controls what version of Lucene various components of Solr + adhere to. Generally, you want to use the latest version to + get all bug fixes and improvements. It is highly recommended + that you fully re-index after changing this setting as it can + affect both how text is indexed and queried. + --> + <luceneMatchVersion>5.0.0</luceneMatchVersion> + + <lib dir="${solr.install.dir:../../../..}/contrib/analysis-extras/lib" /> + <lib dir="${solr.install.dir:../../../..}/contrib/analysis-extras/lucene-libs" /> + <lib dir="${solr.install.dir:../../../..}/contrib/extraction/lib" regex=".*\.jar" /> + <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-cell-\d.*\.jar" /> + + <directoryFactory name="DirectoryFactory" + class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}"> + </directoryFactory> + + <codecFactory class="solr.SchemaCodecFactory"/> + + <schemaFactory class="ClassicIndexSchemaFactory"/> + + + <dataDir>${solr.blacklight-core.data.dir:}</dataDir> + + <requestDispatcher handleSelect="true" > + <requestParsers enableRemoteStreaming="false" multipartUploadLimitInKB="2048000" /> + </requestDispatcher> + + <requestHandler name="/analysis/field" startup="lazy" class="solr.FieldAnalysisRequestHandler" /> + + <!-- config for the admin interface --> + <admin> + <defaultQuery>*:*</defaultQuery> + </admin> + + <updateHandler class="solr.DirectUpdateHandler2"> + <updateLog> + <str name="dir">${solr.ulog.dir:}</str> + </updateLog> + + <autoCommit> + <maxTime>${solr.autoCommit.maxTime:15000}</maxTime> + <openSearcher>false</openSearcher> + </autoCommit> + + <autoSoftCommit> + <maxTime>${solr.autoSoftCommit.maxTime:-1}</maxTime> + </autoSoftCommit> + </updateHandler> + + <!-- SearchHandler + + http://wiki.apache.org/solr/SearchHandler + + For processing Search Queries, the primary Request Handler + provided with Solr is "SearchHandler" It delegates to a sequent + of SearchComponents (see below) and supports distributed + queries across multiple shards + --> + <requestHandler name="search" class="solr.SearchHandler" default="true"> + <!-- default values for query parameters can be specified, these + will be overridden by parameters in the request + --> + <lst name="defaults"> + <str name="defType">edismax</str> + <str name="echoParams">explicit</str> + <str name="q.alt">*:*</str> + <str name="mm">2<-1 5<-2 6<90%</str> + <int name="qs">1</int> + <int name="ps">2</int> + <float name="tie">0.01</float> + <!-- this qf and pf are used by default, if not otherwise specified by + client. The default blacklight_config will use these for the + "keywords" search. See the author_qf/author_pf, title_qf, etc + below, which the default blacklight_config will specify for + those searches. You may also be interested in: + http://wiki.apache.org/solr/LocalParams + --> + <str name="qf"> + id + title_tesim + author_tesim + subject_tesim + </str> + <str name="pf"> + all_text_timv^10 + </str> + + <str name="author_qf"> + author_tesim + </str> + <str name="author_pf"> + </str> + <str name="title_qf"> + title_tesim + </str> + <str name="title_pf"> + </str> + <str name="subject_qf"> + subject_tesim + </str> + <str name="subject_pf"> + </str> + + <str name="fl"> + *, + score + </str> + + <str name="facet">true</str> + <str name="facet.mincount">1</str> + + <str name="spellcheck">true</str> + <str name="spellcheck.dictionary">default</str> + <str name="spellcheck.onlyMorePopular">true</str> + <str name="spellcheck.extendedResults">true</str> + <str name="spellcheck.collate">false</str> + <str name="spellcheck.count">5</str> + + </lst> + <arr name="last-components"> + <str>spellcheck</str> + </arr> + </requestHandler> + + <requestHandler name="permissions" class="solr.SearchHandler" > + <lst name="defaults"> + <str name="facet">off</str> + <str name="echoParams">all</str> + <str name="rows">1</str> + <str name="q">{!raw f=id v=$id}</str> <!-- use id=666 instead of q=id:666 --> + <str name="fl"> + id, + access_ssim, + discover_access_group_ssim,discover_access_person_ssim, + read_access_group_ssim,read_access_person_ssim, + edit_access_group_ssim,edit_access_person_ssim, + depositor_ti, + embargo_release_date_dtsi + inheritable_access_ssim, + inheritable_discover_access_group_ssim,inheritable_discover_access_person_ssim, + inheritable_read_access_group_ssim,inheritable_read_access_person_ssim, + inheritable_edit_access_group_ssim,inheritable_edit_access_person_ssim, + inheritable_embargo_release_date_dtsi + </str> + </lst> + </requestHandler> + + <requestHandler name="standard" class="solr.SearchHandler"> + <lst name="defaults"> + <str name="echoParams">explicit</str> + <str name="defType">lucene</str> + </lst> + </requestHandler> + + <!-- for requests to get a single document; use id=666 instead of q=id:666 --> + <requestHandler name="document" class="solr.SearchHandler" > + <lst name="defaults"> + <str name="echoParams">all</str> + <str name="fl">*</str> + <str name="rows">1</str> + <str name="q">{!term f=id v=$id}</str> <!-- use id=666 instead of q=id:666 --> + </lst> + </requestHandler> + + <searchComponent name="termsComponent" class="solr.TermsComponent" /> + + <requestHandler name="/terms" class="solr.SearchHandler"> + <lst name="defaults"> + <bool name="terms">true</bool> + </lst> + <arr name="components"> + <str>termsComponent</str> + </arr> + </requestHandler> + +<!-- Spell Check + + The spell check component can return a list of alternative spelling + suggestions. + + http://wiki.apache.org/solr/SpellCheckComponent + --> + <searchComponent name="spellcheck" class="solr.SpellCheckComponent"> + + <str name="queryAnalyzerFieldType">textSpell</str> + + <!-- Multiple "Spell Checkers" can be declared and used by this + component + --> + + <!-- a spellchecker built from a field of the main index, and + written to disk + --> + <lst name="spellchecker"> + <str name="name">default</str> + <str name="field">spell</str> + <str name="spellcheckIndexDir">./spell</str> + <str name="buildOnOptimize">true</str> + </lst> + <lst name="spellchecker"> + <str name="name">author</str> + <str name="field">author_spell</str> + <str name="spellcheckIndexDir">./spell_author</str> + <str name="accuracy">0.7</str> + <str name="buildOnOptimize">true</str> + </lst> + <lst name="spellchecker"> + <str name="name">subject</str> + <str name="field">subject_spell</str> + <str name="spellcheckIndexDir">./spell_subject</str> + <str name="accuracy">0.7</str> + <str name="buildOnOptimize">true</str> + </lst> + <lst name="spellchecker"> + <str name="name">title</str> + <str name="field">title_spell</str> + <str name="spellcheckIndexDir">./spell_title</str> + <str name="accuracy">0.7</str> + <str name="buildOnOptimize">true</str> + </lst> + + <!-- a spellchecker that uses a different distance measure --> + <!-- + <lst name="spellchecker"> + <str name="name">jarowinkler</str> + <str name="field">spell</str> + <str name="distanceMeasure"> + org.apache.lucene.search.spell.JaroWinklerDistance + </str> + <str name="spellcheckIndexDir">spellcheckerJaro</str> + </lst> + --> + + <!-- a spellchecker that use an alternate comparator + + comparatorClass be one of: + 1. score (default) + 2. freq (Frequency first, then score) + 3. A fully qualified class name + --> + <!-- + <lst name="spellchecker"> + <str name="name">freq</str> + <str name="field">lowerfilt</str> + <str name="spellcheckIndexDir">spellcheckerFreq</str> + <str name="comparatorClass">freq</str> + <str name="buildOnCommit">true</str> + --> + + <!-- A spellchecker that reads the list of words from a file --> + <!-- + <lst name="spellchecker"> + <str name="classname">solr.FileBasedSpellChecker</str> + <str name="name">file</str> + <str name="sourceLocation">spellings.txt</str> + <str name="characterEncoding">UTF-8</str> + <str name="spellcheckIndexDir">spellcheckerFile</str> + </lst> + --> + </searchComponent> + +<!-- suggest searchComponent and requestHandler disabled by default due to performance penalties --> +<!-- + <searchComponent name="suggest" class="solr.SuggestComponent"> + <lst name="suggester"> + <str name="name">mySuggester</str> + <str name="lookupImpl">FuzzyLookupFactory</str> + <str name="suggestAnalyzerFieldType">textSuggest</str> + <str name="buildOnCommit">true</str> + <str name="field">suggest</str> + </lst> + </searchComponent> + + <requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy"> + <lst name="defaults"> + <str name="suggest">true</str> + <str name="suggest.count">5</str> + <str name="suggest.dictionary">mySuggester</str> + </lst> + <arr name="components"> + <str>suggest</str> + </arr> + </requestHandler> +--> + + <requestHandler name="/update/extract" class="org.apache.solr.handler.extraction.ExtractingRequestHandler"> + <lst name="defaults"> + <str name="fmap.Last-Modified">last_modified</str> + <str name="uprefix">ignored_</str> + </lst> + <!--Optional. Specify a path to a tika configuration file. See the Tika docs for details.--> + <!-- <str name="tika.config">/my/path/to/tika.config</str> --> + <!-- Optional. Specify one or more date formats to parse. See DateUtil.DEFAULT_DATE_FORMATS + for default date formats --> + <!-- <lst name="date.formats"> --> + <!-- <str>yyyy-MM-dd</str> --> + <!-- </lst> --> + </requestHandler> +</config> + diff --git a/hyrax/solr/conf/spellings.txt b/hyrax/solr/conf/spellings.txt new file mode 100644 index 00000000..765190ae --- /dev/null +++ b/hyrax/solr/conf/spellings.txt @@ -0,0 +1,2 @@ +pizza +history diff --git a/hyrax/solr/conf/stopwords.txt b/hyrax/solr/conf/stopwords.txt new file mode 100644 index 00000000..22f277fe --- /dev/null +++ b/hyrax/solr/conf/stopwords.txt @@ -0,0 +1,58 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#----------------------------------------------------------------------- +# a couple of test stopwords to test that the words are really being +# configured from this file: +stopworda +stopwordb + +#Standard english stop words taken from Lucene's StopAnalyzer +a +an +and +are +as +at +be +but +by +for +if +in +into +is +it +no +not +of +on +or +s +such +t +that +the +their +then +there +these +they +this +to +was +will +with + diff --git a/hyrax/solr/conf/stopwords_en.txt b/hyrax/solr/conf/stopwords_en.txt new file mode 100644 index 00000000..22f277fe --- /dev/null +++ b/hyrax/solr/conf/stopwords_en.txt @@ -0,0 +1,58 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#----------------------------------------------------------------------- +# a couple of test stopwords to test that the words are really being +# configured from this file: +stopworda +stopwordb + +#Standard english stop words taken from Lucene's StopAnalyzer +a +an +and +are +as +at +be +but +by +for +if +in +into +is +it +no +not +of +on +or +s +such +t +that +the +their +then +there +these +they +this +to +was +will +with + diff --git a/hyrax/solr/conf/synonyms.txt b/hyrax/solr/conf/synonyms.txt new file mode 100644 index 00000000..453eb313 --- /dev/null +++ b/hyrax/solr/conf/synonyms.txt @@ -0,0 +1,31 @@ +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#----------------------------------------------------------------------- +#some test synonym mappings unlikely to appear in real input text +aaa => aaaa +bbb => bbbb1 bbbb2 +ccc => cccc1,cccc2 +a\=>a => b\=>b +a\,a => b\,b +fooaaa,baraaa,bazaaa + +# Some synonym groups specific to this example +GB,gib,gigabyte,gigabytes +MB,mib,megabyte,megabytes +Television, Televisions, TV, TVs +#notice we use "gib" instead of "GiB" so any WordDelimiterFilter coming +#after us won't split it into two words. + +# Synonym mappings can be used for spelling correction too +pixima => pixma + diff --git a/hyrax/solr/conf/xslt/example.xsl b/hyrax/solr/conf/xslt/example.xsl new file mode 100644 index 00000000..ff7cae74 --- /dev/null +++ b/hyrax/solr/conf/xslt/example.xsl @@ -0,0 +1,132 @@ +<?xml version='1.0' encoding='UTF-8'?> + +<!-- + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + --> + +<!-- + Simple transform of Solr query results to HTML + --> +<xsl:stylesheet version='1.0' + xmlns:xsl='http://www.w3.org/1999/XSL/Transform' +> + + <xsl:output media-type="text/html; charset=UTF-8" encoding="UTF-8"/> + + <xsl:variable name="title" select="concat('Solr search results (',response/result/@numFound,' documents)')"/> + + <xsl:template match='/'> + <html> + <head> + <title><xsl:value-of select="$title"/></title> + <xsl:call-template name="css"/> + </head> + <body> + <h1><xsl:value-of select="$title"/></h1> + <div class="note"> + This has been formatted by the sample "example.xsl" transform - + use your own XSLT to get a nicer page + </div> + <xsl:apply-templates select="response/result/doc"/> + </body> + </html> + </xsl:template> + + <xsl:template match="doc"> + <xsl:variable name="pos" select="position()"/> + <div class="doc"> + <table width="100%"> + <xsl:apply-templates> + <xsl:with-param name="pos"><xsl:value-of select="$pos"/></xsl:with-param> + </xsl:apply-templates> + </table> + </div> + </xsl:template> + + <xsl:template match="doc/*[@name='score']" priority="100"> + <xsl:param name="pos"></xsl:param> + <tr> + <td class="name"> + <xsl:value-of select="@name"/> + </td> + <td class="value"> + <xsl:value-of select="."/> + + <xsl:if test="boolean(//lst[@name='explain'])"> + <xsl:element name="a"> + <!-- can't allow whitespace here --> + <xsl:attribute name="href">javascript:toggle("<xsl:value-of select="concat('exp-',$pos)" />");</xsl:attribute>?</xsl:element> + <br/> + <xsl:element name="div"> + <xsl:attribute name="class">exp</xsl:attribute> + <xsl:attribute name="id"> + <xsl:value-of select="concat('exp-',$pos)" /> + </xsl:attribute> + <xsl:value-of select="//lst[@name='explain']/str[position()=$pos]"/> + </xsl:element> + </xsl:if> + </td> + </tr> + </xsl:template> + + <xsl:template match="doc/arr" priority="100"> + <tr> + <td class="name"> + <xsl:value-of select="@name"/> + </td> + <td class="value"> + <ul> + <xsl:for-each select="*"> + <li><xsl:value-of select="."/></li> + </xsl:for-each> + </ul> + </td> + </tr> + </xsl:template> + + + <xsl:template match="doc/*"> + <tr> + <td class="name"> + <xsl:value-of select="@name"/> + </td> + <td class="value"> + <xsl:value-of select="."/> + </td> + </tr> + </xsl:template> + + <xsl:template match="*"/> + + <xsl:template name="css"> + <script> + function toggle(id) { + var obj = document.getElementById(id); + obj.style.display = (obj.style.display != 'block') ? 'block' : 'none'; + } + </script> + <style type="text/css"> + body { font-family: "Lucida Grande", sans-serif } + td.name { font-style: italic; font-size:80%; } + td { vertical-align: top; } + ul { margin: 0px; margin-left: 1em; padding: 0px; } + .note { font-size:80%; } + .doc { margin-top: 1em; border-top: solid grey 1px; } + .exp { display: none; font-family: monospace; white-space: pre; } + </style> + </xsl:template> + +</xsl:stylesheet> diff --git a/hyrax/solr/conf/xslt/example_atom.xsl b/hyrax/solr/conf/xslt/example_atom.xsl new file mode 100644 index 00000000..dbc7afa3 --- /dev/null +++ b/hyrax/solr/conf/xslt/example_atom.xsl @@ -0,0 +1,67 @@ +<?xml version='1.0' encoding='UTF-8'?> + +<!-- + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + --> + +<!-- + Simple transform of Solr query results to Atom + --> + +<xsl:stylesheet version='1.0' + xmlns:xsl='http://www.w3.org/1999/XSL/Transform'> + + <xsl:output + method="xml" + encoding="utf-8" + media-type="text/xml; charset=UTF-8" + /> + + <xsl:template match='/'> + <xsl:variable name="query" select="response/lst[@name='responseHeader']/lst[@name='params']/str[@name='q']"/> + <feed xmlns="http://www.w3.org/2005/Atom"> + <title>Example Solr Atom 1.0 Feed</title> + <subtitle> + This has been formatted by the sample "example_atom.xsl" transform - + use your own XSLT to get a nicer Atom feed. + </subtitle> + <author> + <name>Apache Solr</name> + <email>solr-user@lucene.apache.org</email> + </author> + <link rel="self" type="application/atom+xml" + href="http://localhost:8983/solr/q={$query}&wt=xslt&tr=atom.xsl"/> + <updated> + <xsl:value-of select="response/result/doc[position()=1]/date[@name='timestamp']"/> + </updated> + <id>tag:localhost,2007:example</id> + <xsl:apply-templates select="response/result/doc"/> + </feed> + </xsl:template> + + <!-- search results xslt --> + <xsl:template match="doc"> + <xsl:variable name="id" select="str[@name='id']"/> + <entry> + <title><xsl:value-of select="str[@name='name']"/></title> + <link href="http://localhost:8983/solr/select?q={$id}"/> + <id>tag:localhost,2007:<xsl:value-of select="$id"/></id> + <summary><xsl:value-of select="arr[@name='features']"/></summary> + <updated><xsl:value-of select="date[@name='timestamp']"/></updated> + </entry> + </xsl:template> + +</xsl:stylesheet> diff --git a/hyrax/solr/conf/xslt/example_rss.xsl b/hyrax/solr/conf/xslt/example_rss.xsl new file mode 100644 index 00000000..b5bd0cf9 --- /dev/null +++ b/hyrax/solr/conf/xslt/example_rss.xsl @@ -0,0 +1,66 @@ +<?xml version='1.0' encoding='UTF-8'?> + +<!-- + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + --> + +<!-- + Simple transform of Solr query results to RSS + --> + +<xsl:stylesheet version='1.0' + xmlns:xsl='http://www.w3.org/1999/XSL/Transform'> + + <xsl:output + method="xml" + encoding="utf-8" + media-type="text/xml; charset=UTF-8" + /> + <xsl:template match='/'> + <rss version="2.0"> + <channel> + <title>Example Solr RSS 2.0 Feed</title> + <link>http://localhost:8983/solr</link> + <description> + This has been formatted by the sample "example_rss.xsl" transform - + use your own XSLT to get a nicer RSS feed. + </description> + <language>en-us</language> + <docs>http://localhost:8983/solr</docs> + <xsl:apply-templates select="response/result/doc"/> + </channel> + </rss> + </xsl:template> + + <!-- search results xslt --> + <xsl:template match="doc"> + <xsl:variable name="id" select="str[@name='id']"/> + <xsl:variable name="timestamp" select="date[@name='timestamp']"/> + <item> + <title><xsl:value-of select="str[@name='name']"/></title> + <link> + http://localhost:8983/solr/select?q=id:<xsl:value-of select="$id"/> + </link> + <description> + <xsl:value-of select="arr[@name='features']"/> + </description> + <pubDate><xsl:value-of select="$timestamp"/></pubDate> + <guid> + http://localhost:8983/solr/select?q=id:<xsl:value-of select="$id"/> + </guid> + </item> + </xsl:template> +</xsl:stylesheet> diff --git a/hyrax/solr/conf/xslt/luke.xsl b/hyrax/solr/conf/xslt/luke.xsl new file mode 100644 index 00000000..d3f71c6d --- /dev/null +++ b/hyrax/solr/conf/xslt/luke.xsl @@ -0,0 +1,337 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + + +<!-- + Display the luke request handler with graphs + --> +<xsl:stylesheet + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns="http://www.w3.org/1999/xhtml" + version="1.0" + > + <xsl:output + method="html" + encoding="UTF-8" + media-type="text/html; charset=UTF-8" + doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" + doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" + /> + + <xsl:variable name="title">Solr Luke Request Handler Response</xsl:variable> + + <xsl:template match="/"> + <html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <link rel="stylesheet" type="text/css" href="solr-admin.css"/> + <link rel="icon" href="favicon.ico" type="image/ico"/> + <link rel="shortcut icon" href="favicon.ico" type="image/ico"/> + <title> + <xsl:value-of select="$title"/> + </title> + <xsl:call-template name="css"/> + + </head> + <body> + <h1> + <xsl:value-of select="$title"/> + </h1> + <div class="doc"> + <ul> + <xsl:if test="response/lst[@name='index']"> + <li> + <a href="#index">Index Statistics</a> + </li> + </xsl:if> + <xsl:if test="response/lst[@name='fields']"> + <li> + <a href="#fields">Field Statistics</a> + <ul> + <xsl:for-each select="response/lst[@name='fields']/lst"> + <li> + <a href="#{@name}"> + <xsl:value-of select="@name"/> + </a> + </li> + </xsl:for-each> + </ul> + </li> + </xsl:if> + <xsl:if test="response/lst[@name='doc']"> + <li> + <a href="#doc">Document statistics</a> + </li> + </xsl:if> + </ul> + </div> + <xsl:if test="response/lst[@name='index']"> + <h2><a name="index"/>Index Statistics</h2> + <xsl:apply-templates select="response/lst[@name='index']"/> + </xsl:if> + <xsl:if test="response/lst[@name='fields']"> + <h2><a name="fields"/>Field Statistics</h2> + <xsl:apply-templates select="response/lst[@name='fields']"/> + </xsl:if> + <xsl:if test="response/lst[@name='doc']"> + <h2><a name="doc"/>Document statistics</h2> + <xsl:apply-templates select="response/lst[@name='doc']"/> + </xsl:if> + </body> + </html> + </xsl:template> + + <xsl:template match="lst"> + <xsl:if test="parent::lst"> + <tr> + <td colspan="2"> + <div class="doc"> + <xsl:call-template name="list"/> + </div> + </td> + </tr> + </xsl:if> + <xsl:if test="not(parent::lst)"> + <div class="doc"> + <xsl:call-template name="list"/> + </div> + </xsl:if> + </xsl:template> + + <xsl:template name="list"> + <xsl:if test="count(child::*)>0"> + <table> + <thead> + <tr> + <th colspan="2"> + <p> + <a name="{@name}"/> + </p> + <xsl:value-of select="@name"/> + </th> + </tr> + </thead> + <tbody> + <xsl:choose> + <xsl:when + test="@name='histogram'"> + <tr> + <td colspan="2"> + <xsl:call-template name="histogram"/> + </td> + </tr> + </xsl:when> + <xsl:otherwise> + <xsl:apply-templates/> + </xsl:otherwise> + </xsl:choose> + </tbody> + </table> + </xsl:if> + </xsl:template> + + <xsl:template name="histogram"> + <div class="doc"> + <xsl:call-template name="barchart"> + <xsl:with-param name="max_bar_width">50</xsl:with-param> + <xsl:with-param name="iwidth">800</xsl:with-param> + <xsl:with-param name="iheight">160</xsl:with-param> + <xsl:with-param name="fill">blue</xsl:with-param> + </xsl:call-template> + </div> + </xsl:template> + + <xsl:template name="barchart"> + <xsl:param name="max_bar_width"/> + <xsl:param name="iwidth"/> + <xsl:param name="iheight"/> + <xsl:param name="fill"/> + <xsl:variable name="max"> + <xsl:for-each select="int"> + <xsl:sort data-type="number" order="descending"/> + <xsl:if test="position()=1"> + <xsl:value-of select="."/> + </xsl:if> + </xsl:for-each> + </xsl:variable> + <xsl:variable name="bars"> + <xsl:value-of select="count(int)"/> + </xsl:variable> + <xsl:variable name="bar_width"> + <xsl:choose> + <xsl:when test="$max_bar_width < ($iwidth div $bars)"> + <xsl:value-of select="$max_bar_width"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$iwidth div $bars"/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <table class="histogram"> + <tbody> + <tr> + <xsl:for-each select="int"> + <td> + <xsl:value-of select="."/> + <div class="histogram"> + <xsl:attribute name="style">background-color: <xsl:value-of select="$fill"/>; width: <xsl:value-of select="$bar_width"/>px; height: <xsl:value-of select="($iheight*number(.)) div $max"/>px;</xsl:attribute> + </div> + </td> + </xsl:for-each> + </tr> + <tr> + <xsl:for-each select="int"> + <td> + <xsl:value-of select="@name"/> + </td> + </xsl:for-each> + </tr> + </tbody> + </table> + </xsl:template> + + <xsl:template name="keyvalue"> + <xsl:choose> + <xsl:when test="@name"> + <tr> + <td class="name"> + <xsl:value-of select="@name"/> + </td> + <td class="value"> + <xsl:value-of select="."/> + </td> + </tr> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="."/> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <xsl:template match="int|bool|long|float|double|uuid|date"> + <xsl:call-template name="keyvalue"/> + </xsl:template> + + <xsl:template match="arr"> + <tr> + <td class="name"> + <xsl:value-of select="@name"/> + </td> + <td class="value"> + <ul> + <xsl:for-each select="child::*"> + <li> + <xsl:apply-templates/> + </li> + </xsl:for-each> + </ul> + </td> + </tr> + </xsl:template> + + <xsl:template match="str"> + <xsl:choose> + <xsl:when test="@name='schema' or @name='index' or @name='flags'"> + <xsl:call-template name="schema"/> + </xsl:when> + <xsl:otherwise> + <xsl:call-template name="keyvalue"/> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <xsl:template name="schema"> + <tr> + <td class="name"> + <xsl:value-of select="@name"/> + </td> + <td class="value"> + <xsl:if test="contains(.,'unstored')"> + <xsl:value-of select="."/> + </xsl:if> + <xsl:if test="not(contains(.,'unstored'))"> + <xsl:call-template name="infochar2string"> + <xsl:with-param name="charList"> + <xsl:value-of select="."/> + </xsl:with-param> + </xsl:call-template> + </xsl:if> + </td> + </tr> + </xsl:template> + + <xsl:template name="infochar2string"> + <xsl:param name="i">1</xsl:param> + <xsl:param name="charList"/> + + <xsl:variable name="char"> + <xsl:value-of select="substring($charList,$i,1)"/> + </xsl:variable> + <xsl:choose> + <xsl:when test="$char='I'"> + <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='I']"/> - </xsl:when> + <xsl:when test="$char='T'"> + <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='T']"/> - </xsl:when> + <xsl:when test="$char='S'"> + <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='S']"/> - </xsl:when> + <xsl:when test="$char='M'"> + <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='M']"/> - </xsl:when> + <xsl:when test="$char='V'"> + <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='V']"/> - </xsl:when> + <xsl:when test="$char='o'"> + <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='o']"/> - </xsl:when> + <xsl:when test="$char='p'"> + <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='p']"/> - </xsl:when> + <xsl:when test="$char='O'"> + <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='O']"/> - </xsl:when> + <xsl:when test="$char='L'"> + <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='L']"/> - </xsl:when> + <xsl:when test="$char='B'"> + <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='B']"/> - </xsl:when> + <xsl:when test="$char='C'"> + <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='C']"/> - </xsl:when> + <xsl:when test="$char='f'"> + <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='f']"/> - </xsl:when> + <xsl:when test="$char='l'"> + <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='l']"/> - + </xsl:when> + </xsl:choose> + + <xsl:if test="not($i>=string-length($charList))"> + <xsl:call-template name="infochar2string"> + <xsl:with-param name="i"> + <xsl:value-of select="$i+1"/> + </xsl:with-param> + <xsl:with-param name="charList"> + <xsl:value-of select="$charList"/> + </xsl:with-param> + </xsl:call-template> + </xsl:if> + </xsl:template> + <xsl:template name="css"> + <style type="text/css"> + <![CDATA[ + td.name {font-style: italic; font-size:80%; } + .doc { margin: 0.5em; border: solid grey 1px; } + .exp { display: none; font-family: monospace; white-space: pre; } + div.histogram { background: none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;} + table.histogram { width: auto; vertical-align: bottom; } + table.histogram td, table.histogram th { text-align: center; vertical-align: bottom; border-bottom: 1px solid #ff9933; width: auto; } + ]]> + </style> + </xsl:template> +</xsl:stylesheet> diff --git a/hyrax/solr/sample_solr_documents.yml b/hyrax/solr/sample_solr_documents.yml new file mode 100644 index 00000000..eee603dd --- /dev/null +++ b/hyrax/solr/sample_solr_documents.yml @@ -0,0 +1,2692 @@ +--- +- lc_1letter_facet: + - P - Language & Literature + author_t: + - Ayaz, Shaikh, + marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>00799cam + a2200241 a 4500</leader><controlfield tag=\"001\"> 00282214 </controlfield><controlfield + tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090120022042.0</controlfield><controlfield + tag=\"008\">000417s1998 pk 000 0 urdo </controlfield><datafield + tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\"> 00282214 </subfield></datafield><datafield + tag=\"025\" ind1=\" \" ind2=\" \"><subfield code=\"a\">P-U-00282214; 05; 06</subfield></datafield><datafield + tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC</subfield><subfield + code=\"c\">DLC</subfield><subfield code=\"d\">DLC</subfield></datafield><datafield + tag=\"041\" ind1=\"1\" ind2=\" \"><subfield code=\"a\">urd</subfield><subfield + code=\"h\">snd</subfield></datafield><datafield tag=\"042\" ind1=\" \" ind2=\" + \"><subfield code=\"a\">lcode</subfield></datafield><datafield tag=\"050\" ind1=\"0\" + ind2=\"0\"><subfield code=\"a\">PK2788.9.A9</subfield><subfield code=\"b\">F55 + 1998</subfield></datafield><datafield tag=\"100\" ind1=\"1\" ind2=\" \"><subfield + code=\"a\">Ayaz, Shaikh,</subfield><subfield code=\"d\">1923-1997.</subfield></datafield><datafield + tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield code=\"a\">Fikr-i AyaÌ„z /</subfield><subfield + code=\"c\">murattibiÌ„n, AÌ„sÌ£if Farruk̲h̲iÌ„, ShaÌ„h MuhÌ£ammad PiÌ„rzaÌ„dah.</subfield></datafield><datafield + tag=\"260\" ind1=\" \" ind2=\" \"><subfield code=\"a\">KaraÌ„ciÌ„ :</subfield><subfield + code=\"b\">DaÌ„niyaÌ„l,</subfield><subfield code=\"c\">[1998]</subfield></datafield><datafield + tag=\"300\" ind1=\" \" ind2=\" \"><subfield code=\"a\">375 p. ;</subfield><subfield + code=\"c\">23 cm.</subfield></datafield><datafield tag=\"546\" ind1=\" \" ind2=\" + \"><subfield code=\"a\">In Urdu.</subfield></datafield><datafield tag=\"520\" + ind1=\" \" ind2=\" \"><subfield code=\"a\">Selected poems and articles from the + works of renowned Sindhi poet; chiefly translated from Sindhi.</subfield></datafield><datafield + tag=\"700\" ind1=\"1\" ind2=\" \"><subfield code=\"a\">Farruk̲h̲iÌ„, AÌ„sÌ£if,</subfield><subfield + code=\"d\">1959-</subfield></datafield><datafield tag=\"700\" ind1=\"1\" ind2=\" + \"><subfield code=\"a\">PiÌ„rzaÌ„dah, ShaÌ„h MuhÌ£ammad.</subfield></datafield></record></collection>" + published_display: + - KaraÌ„ciÌ„ + author_display: Ayaz, Shaikh, 1923-1997 + lc_callnum_display: + - PK2788.9.A9 F55 1998 + title_t: + - Fikr-i AyaÌ„z / + pub_date: + - '1998' + pub_date_sort: 1998 + format: Book + material_type_display: + - 375 p. + lc_b4cutter_facet: + - PK2788.9.A9 + title_display: Fikr-i AyaÌ„z + title_sort: fikr-i ayaÌ„z + id: 00282214 + author_sort: Ayaz Shaikh 19231997 Fikri AyaÌ„z + title_addl_t: + - Fikr-i AyaÌ„z / + author_addl_t: + - Farruk̲h̲iÌ„, AÌ„sÌ£if, + - PiÌ„rzaÌ„dah, ShaÌ„h MuhÌ£ammad. + lc_alpha_facet: + - PK + language_facet: + - Urdu + timestamp: '2014-02-03T18:42:53.056Z' +- lc_1letter_facet: + - M - Music + author_t: + - Ayaz, Shaikh, + marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>00778cam + a22002417a 4500</leader><controlfield tag=\"001\"> 00282371 </controlfield><controlfield + tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090120021204.0</controlfield><controlfield + tag=\"008\">000509s1986 pk 000 0 urdo </controlfield><datafield + tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\"> 00282371 </subfield></datafield><datafield + tag=\"025\" ind1=\" \" ind2=\" \"><subfield code=\"a\">P-U-00282371; 08</subfield></datafield><datafield + tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC</subfield><subfield + code=\"c\">DLC</subfield><subfield code=\"d\">DLC</subfield></datafield><datafield + tag=\"041\" ind1=\"1\" ind2=\" \"><subfield code=\"a\">urd</subfield><subfield + code=\"h\">snd</subfield></datafield><datafield tag=\"042\" ind1=\" \" ind2=\" + \"><subfield code=\"a\">lcode</subfield></datafield><datafield tag=\"050\" ind1=\"0\" + ind2=\"0\"><subfield code=\"a\">MLCME 2002/02660 (D)</subfield></datafield><datafield + tag=\"100\" ind1=\"1\" ind2=\" \"><subfield code=\"a\">Ayaz, Shaikh,</subfield><subfield + code=\"d\">1923-1997.</subfield></datafield><datafield tag=\"245\" ind1=\"1\" + ind2=\"0\"><subfield code=\"a\">SaÌ„hivaÌ„l jail kiÌ„ dÌ£āʼiriÌ„ /</subfield><subfield + code=\"c\">Shaik̲h̲ AyaÌ„z; tarjumah, Kiran Singh.</subfield></datafield><datafield + tag=\"260\" ind1=\" \" ind2=\" \"><subfield code=\"a\">KaraÌ„ciÌ„ :</subfield><subfield + code=\"b\">Maktabah-yi DaÌ„niyaÌ„l,</subfield><subfield code=\"c\">1986.</subfield></datafield><datafield + tag=\"300\" ind1=\" \" ind2=\" \"><subfield code=\"a\">232 p. ;</subfield><subfield + code=\"c\">23 cm.</subfield></datafield><datafield tag=\"546\" ind1=\" \" ind2=\" + \"><subfield code=\"a\">In Urdu.</subfield></datafield><datafield tag=\"500\" + ind1=\" \" ind2=\" \"><subfield code=\"a\">Translated from Sindhi.</subfield></datafield><datafield + tag=\"520\" ind1=\" \" ind2=\" \"><subfield code=\"a\">Author's memoirs during + his imprisonment in Sahiwal District jail during late 1960s.</subfield></datafield><datafield + tag=\"504\" ind1=\" \" ind2=\" \"><subfield code=\"a\">Includes bibliographical + references.</subfield></datafield></record></collection>" + published_display: + - KaraÌ„ciÌ„ + author_display: Ayaz, Shaikh, 1923-1997 + lc_callnum_display: + - MLCME 2002/02660 (D) + title_t: + - SaÌ„hivaÌ„l jail kiÌ„ dÌ£āʼiriÌ„ / + pub_date: + - '1986' + pub_date_sort: 1986 + format: Book + material_type_display: + - 232 p. + lc_b4cutter_facet: + - MLCME 2002/02660 (D) + title_display: SaÌ„hivaÌ„l jail kiÌ„ dÌ£āʼiriÌ„ + title_sort: saÌ„hivaÌ„l jail kiÌ„ dÌ£āʼiriÌ„ + id: 00282371 + author_sort: Ayaz Shaikh 19231997 SaÌ„hivaÌ„l jail kiÌ„ dÌ£āʼiriÌ„ + title_addl_t: + - SaÌ„hivaÌ„l jail kiÌ„ dÌ£āʼiriÌ„ / + language_facet: + - Urdu + timestamp: '2014-02-03T18:42:53.056Z' +- subtitle_display: 'guft va guÌ„-yi Akbar GanjiÌ„ baÌ„ Ê»Abd AllaÌ„h NuÌ„riÌ„ : bih payvast-i + matn-i istiÌ„z̤aÌ„hÌ£-i Ê»Abd AllaÌ„h NuÌ„riÌ„ dar Majlis-i panjum' + author_vern_display: "â€Ù†ÙˆØ±Ù‰ØŒ عبد الله" + subject_addl_t: + - Interviews + - Trials, litigation, etc + - Officials and employees Interviews + - Politics and government 1997- + title_display: NaqdiÌ„ baraÌ„-yi tamaÌ„m-i fusÌ£uÌ„l + subject_era_facet: + - 1997- + id: 00313831 + isbn_t: + - '9645625963' + subject_geo_facet: + - Iran + subject_topic_facet: + - NuÌ„riÌ„, Ê»Abd AllaÌ„h, 1949- + - Iran. VizaÌ„rat-i Kishvar + lc_alpha_facet: + - DS + title_series_t: + - Farhang-i Ê»umuÌ„miÌ„ + - "â€Ùرهنگ عمومى" + subtitle_t: + - 'guft va guÌ„-yi Akbar GanjiÌ„ baÌ„ Ê»Abd AllaÌ„h NuÌ„riÌ„ : bih payvast-i matn-i istiÌ„z̤aÌ„hÌ£-i + Ê»Abd AllaÌ„h NuÌ„riÌ„ dar Majlis-i panjum.' + - "â€Ú¯Ùت Ùˆ گوى اکبر گنجى با عبد الله نورى : به پيوست متن Ø§Ø³ØªÙŠØ¶Ø§Ø Ø¹Ø¨Ø¯ الله نورى در + مجلس پنجم" + lc_1letter_facet: + - D - World History + author_t: + - NuÌ„riÌ„, Ê»Abd AllaÌ„h, + - "â€Ù†ÙˆØ±Ù‰ØŒ عبد الله" + marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>01988cam + a2200421 a 4500</leader><controlfield tag=\"001\"> 00313831 </controlfield><controlfield + tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090121100001.0</controlfield><controlfield + tag=\"008\">010611s2000 ir b 001 0dper d</controlfield><datafield + tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\"> 00313831 </subfield></datafield><datafield + tag=\"020\" ind1=\" \" ind2=\" \"><subfield code=\"a\">9645625963</subfield></datafield><datafield + tag=\"035\" ind1=\" \" ind2=\" \"><subfield code=\"a\">(CStRLIN)DCLN01-B3014</subfield></datafield><datafield + tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">MH</subfield><subfield + code=\"c\">MH</subfield><subfield code=\"d\">CStRLIN</subfield><subfield code=\"d\">DLC-R</subfield></datafield><datafield + tag=\"042\" ind1=\" \" ind2=\" \"><subfield code=\"a\">lccopycat</subfield><subfield + code=\"a\">lcode</subfield></datafield><datafield tag=\"043\" ind1=\" \" ind2=\" + \"><subfield code=\"a\">a-ir---</subfield></datafield><datafield tag=\"050\" ind1=\"0\" + ind2=\"0\"><subfield code=\"a\">DS318.84.N87</subfield><subfield code=\"b\">N87 + 2000</subfield></datafield><datafield tag=\"066\" ind1=\" \" ind2=\" \"><subfield + code=\"c\">(3</subfield><subfield code=\"c\">(4</subfield></datafield><datafield + tag=\"100\" ind1=\"1\" ind2=\" \"><subfield code=\"6\">880-01</subfield><subfield + code=\"a\">NuÌ„riÌ„, Ê»Abd AllaÌ„h,</subfield><subfield code=\"d\">1949-</subfield></datafield><datafield + tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield code=\"6\">880-02</subfield><subfield + code=\"a\">NaqdiÌ„ baraÌ„-yi tamaÌ„m-i fusÌ£uÌ„l :</subfield><subfield code=\"b\">guft + va guÌ„-yi Akbar GanjiÌ„ baÌ„ Ê»Abd AllaÌ„h NuÌ„riÌ„ : bih payvast-i matn-i istiÌ„z̤aÌ„hÌ£-i + Ê»Abd AllaÌ„h NuÌ„riÌ„ dar Majlis-i panjum.</subfield></datafield><datafield tag=\"246\" + ind1=\"1\" ind2=\"5\"><subfield code=\"a\">Critique for all seasons :</subfield><subfield + code=\"b\">Akbar Ganji's conversation with Abdullah Nuri</subfield></datafield><datafield + tag=\"250\" ind1=\" \" ind2=\" \"><subfield code=\"6\">880-03</subfield><subfield + code=\"a\">ChaÌ„p-i 1.</subfield></datafield><datafield tag=\"260\" ind1=\" \" + ind2=\" \"><subfield code=\"6\">880-04</subfield><subfield code=\"a\">TihraÌ„n + :</subfield><subfield code=\"b\">TÌ£arhÌ£-i Naw,</subfield><subfield code=\"c\">2000.</subfield></datafield><datafield + tag=\"300\" ind1=\" \" ind2=\" \"><subfield code=\"a\">245 p. ;</subfield><subfield + code=\"c\">22 cm.</subfield></datafield><datafield tag=\"440\" ind1=\" \" ind2=\"0\"><subfield + code=\"6\">880-05</subfield><subfield code=\"a\">Farhang-i Ê»umuÌ„miÌ„</subfield></datafield><datafield + tag=\"504\" ind1=\" \" ind2=\" \"><subfield code=\"a\">Includes bibliographical + references and index.</subfield></datafield><datafield tag=\"600\" ind1=\"1\" + ind2=\"0\"><subfield code=\"6\">880-06</subfield><subfield code=\"a\">NuÌ„riÌ„, + Ê»Abd AllaÌ„h,</subfield><subfield code=\"d\">1949-</subfield><subfield code=\"v\">Interviews.</subfield></datafield><datafield + tag=\"610\" ind1=\"1\" ind2=\"0\"><subfield code=\"a\">Iran.</subfield><subfield + code=\"b\">VizaÌ„rat-i Kishvar</subfield><subfield code=\"x\">Officials and employees</subfield><subfield + code=\"v\">Interviews.</subfield></datafield><datafield tag=\"600\" ind1=\"1\" + ind2=\"0\"><subfield code=\"6\">880-07</subfield><subfield code=\"a\">NuÌ„riÌ„, + Ê»Abd AllaÌ„h,</subfield><subfield code=\"d\">1949-</subfield><subfield code=\"v\">Trials, + litigation, etc.</subfield></datafield><datafield tag=\"651\" ind1=\" \" ind2=\"0\"><subfield + code=\"a\">Iran</subfield><subfield code=\"x\">Politics and government</subfield><subfield + code=\"y\">1997-</subfield></datafield><datafield tag=\"700\" ind1=\"1\" ind2=\" + \"><subfield code=\"6\">880-08</subfield><subfield code=\"a\">GanjiÌ„, Akbar.</subfield></datafield><datafield + tag=\"880\" ind1=\"1\" ind2=\" \"><subfield code=\"6\">100-01/(3/râ€</subfield><subfield + code=\"a\">â€Ù†ÙˆØ±Ù‰ØŒ عبد الله.</subfield></datafield><datafield tag=\"880\" ind1=\"1\" + ind2=\"0\"><subfield code=\"6\">245-02/(3/râ€</subfield><subfield code=\"a\">â€Ù†Ù‚دى + براى تمام Ùصول :â€</subfield><subfield code=\"b\">â€Ú¯Ùت Ùˆ گوى اکبر گنجى با عبد الله + نورى : به پيوست متن Ø§Ø³ØªÙŠØ¶Ø§Ø Ø¹Ø¨Ø¯ الله نورى در مجلس پنجم.</subfield></datafield><datafield + tag=\"880\" ind1=\" \" ind2=\" \"><subfield code=\"6\">250-03/(4/râ€</subfield><subfield + code=\"a\">â€Ú†Ø§Ù¾ 1.</subfield></datafield><datafield tag=\"880\" ind1=\" \" ind2=\" + \"><subfield code=\"6\">260-04/(3/râ€</subfield><subfield code=\"a\">â€ØªÙ‡Ø±Ø§Ù† :â€</subfield><subfield + code=\"b\">â€Ø·Ø±Ø نو،â€</subfield><subfield code=\"c\">â€â€ª2000‬.</subfield></datafield><datafield + tag=\"880\" ind1=\" \" ind2=\"0\"><subfield code=\"6\">440-05/(3/râ€</subfield><subfield + code=\"a\">â€Ùرهنگ عمومى</subfield></datafield><datafield tag=\"880\" ind1=\"1\" + ind2=\"4\"><subfield code=\"6\">600-06/(3/râ€</subfield><subfield code=\"a\">â€Ù†ÙˆØ±Ù‰ØŒ + عبد الله.</subfield></datafield><datafield tag=\"880\" ind1=\"1\" ind2=\"4\"><subfield + code=\"6\">600-07/(3/râ€</subfield><subfield code=\"a\">â€Ù†ÙˆØ±Ù‰ØŒ عبد الله.</subfield></datafield><datafield + tag=\"880\" ind1=\"1\" ind2=\" \"><subfield code=\"6\">700-08/(3/râ€</subfield><subfield + code=\"a\">â€Ú¯Ù†Ø¬Ù‰ØŒ اكبر.</subfield></datafield></record></collection>" + published_display: + - TihraÌ„n + author_display: NuÌ„riÌ„, Ê»Abd AllaÌ„h, 1949- + title_vern_display: "â€Ù†Ù‚دى براى تمام Ùصول :â€" + lc_callnum_display: + - DS318.84.N87 N87 2000 + title_t: + - 'NaqdiÌ„ baraÌ„-yi tamaÌ„m-i fusÌ£uÌ„l :' + - "â€Ù†Ù‚دى براى تمام Ùصول :â€" + pub_date: + - '2000' + pub_date_sort: 2000 + published_vern_display: + - "â€ØªÙ‡Ø±Ø§Ù† :â€" + format: Book + subtitle_vern_display: "â€Ú¯Ùت Ùˆ گوى اکبر گنجى با عبد الله نورى : به پيوست متن Ø§Ø³ØªÙŠØ¶Ø§Ø + عبد الله نورى در مجلس پنجم" + material_type_display: + - 245 p. + lc_b4cutter_facet: + - DS318.84.N87 + subject_t: + - NuÌ„riÌ„, Ê»Abd AllaÌ„h, 1949- + - Iran. VizaÌ„rat-i Kishvar + - Iran + - "â€Ù†ÙˆØ±Ù‰ØŒ عبد الله" + title_sort: 'naqdiÌ„ baraÌ„-yi tamaÌ„m-i fusÌ£uÌ„l :guft va guÌ„-yi akbar ganjiÌ„ baÌ„ Ê»abd + allaÌ„h nuÌ„riÌ„ : bih payvast-i matn-i istiÌ„z̤aÌ„hÌ£-i Ê»abd allaÌ„h nuÌ„riÌ„ dar majlis-i + panjum' + author_sort: NuÌ„riÌ„ Ê»Abd AllaÌ„h 1949 NaqdiÌ„ baraÌ„yi tamaÌ„mi fusÌ£uÌ„l guft va guÌ„yi + Akbar GanjiÌ„ baÌ„ Ê»Abd AllaÌ„h NuÌ„riÌ„ bih payvasti matni istiÌ„z̤aÌ„hÌ£i Ê»Abd AllaÌ„h + NuÌ„riÌ„ dar Majlisi panjum + title_addl_t: + - 'NaqdiÌ„ baraÌ„-yi tamaÌ„m-i fusÌ£uÌ„l : guft va guÌ„-yi Akbar GanjiÌ„ baÌ„ Ê»Abd AllaÌ„h + NuÌ„riÌ„ : bih payvast-i matn-i istiÌ„z̤aÌ„hÌ£-i Ê»Abd AllaÌ„h NuÌ„riÌ„ dar Majlis-i panjum.' + - 'Critique for all seasons : Akbar Ganji''s conversation with Abdullah Nuri' + - "â€Ù†Ù‚دى براى تمام Ùصول :†â€Ú¯Ùت Ùˆ گوى اکبر گنجى با عبد الله نورى : به پيوست متن + Ø§Ø³ØªÙŠØ¶Ø§Ø Ø¹Ø¨Ø¯ الله نورى در مجلس پنجم" + author_addl_t: + - GanjiÌ„, Akbar. + - "â€Ú¯Ù†Ø¬Ù‰ØŒ اكبر" + language_facet: + - Persian + timestamp: '2014-02-03T18:42:53.056Z' +- author_t: + - Yoshida, Hajime, + - "å‰ç”°ä¸€" + marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>00956dam + a22002655a 4500</leader><controlfield tag=\"001\"> 00314247 </controlfield><controlfield + tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090126095911.0</controlfield><controlfield + tag=\"008\">000214s1997 ja 000 0 jpn </controlfield><datafield + tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\"> 00314247 </subfield></datafield><datafield + tag=\"035\" ind1=\" \" ind2=\" \"><subfield code=\"a\">(CStRLIN)DCLP00-B1931</subfield></datafield><datafield + tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC-R</subfield><subfield + code=\"c\">DLC-R</subfield><subfield code=\"d\">DLC</subfield></datafield><datafield + tag=\"066\" ind1=\" \" ind2=\" \"><subfield code=\"c\">$1</subfield></datafield><datafield + tag=\"100\" ind1=\"1\" ind2=\" \"><subfield code=\"6\">880-01</subfield><subfield + code=\"a\">Yoshida, Hajime,</subfield><subfield code=\"d\">1934-</subfield></datafield><datafield + tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield code=\"6\">880-02</subfield><subfield + code=\"a\">Kubo Sakae \"Kazanbaichi\" o yomu /</subfield><subfield code=\"c\">Yoshida + Hajime cho.</subfield></datafield><datafield tag=\"260\" ind1=\" \" ind2=\" \"><subfield + code=\"6\">880-03</subfield><subfield code=\"a\">ToÌ„kyoÌ„ :</subfield><subfield + code=\"b\">HoÌ„sei Daigaku Shuppankyoku,</subfield><subfield code=\"c\">1997.</subfield></datafield><datafield + tag=\"300\" ind1=\" \" ind2=\" \"><subfield code=\"a\">480 p. ;</subfield><subfield + code=\"c\">19 cm.</subfield></datafield><datafield tag=\"600\" ind1=\"1\" ind2=\"0\"><subfield + code=\"6\">880-04</subfield><subfield code=\"a\">Kubo, Sakae,</subfield><subfield + code=\"d\">1901-1958.</subfield><subfield code=\"t\">Kazanbaichi.</subfield></datafield><datafield + tag=\"650\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Japanese drama</subfield><subfield + code=\"y\">20th century.</subfield></datafield><datafield tag=\"650\" ind1=\" + \" ind2=\"0\"><subfield code=\"a\">Political plays, Japanese.</subfield></datafield><datafield + tag=\"650\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Theater</subfield><subfield + code=\"z\">Japan</subfield><subfield code=\"x\">History.</subfield></datafield><datafield + tag=\"880\" ind1=\"1\" ind2=\" \"><subfield code=\"6\">100-01/$1</subfield><subfield + code=\"a\">å‰ç”°ä¸€,</subfield><subfield code=\"d\">1934-</subfield></datafield><datafield + tag=\"880\" ind1=\"1\" ind2=\"0\"><subfield code=\"6\">245-02/$1</subfield><subfield + code=\"a\">ä¹…ä¿æ „ 「ç«å±±ç°åœ°ã€ ã‚’èªã‚€ /</subfield><subfield code=\"c\">å‰ç”°ä¸€è‘—.</subfield></datafield><datafield + tag=\"880\" ind1=\" \" ind2=\" \"><subfield code=\"6\">260-03/$1</subfield><subfield + code=\"a\">æ±äº¬ :</subfield><subfield code=\"b\">法政大å¦å‡ºç‰ˆå±€,</subfield><subfield code=\"c\">1997.</subfield></datafield><datafield + tag=\"880\" ind1=\"1\" ind2=\"4\"><subfield code=\"6\">600-04/$1</subfield><subfield + code=\"a\">ä¹…ä¿æ „,</subfield><subfield code=\"d\">1901-1958.</subfield><subfield + code=\"t\">ç«å±±ç°åœ°.</subfield></datafield></record></collection>" + published_display: + - ToÌ„kyoÌ„ + title_vern_display: "ä¹…ä¿æ „ 「ç«å±±ç°åœ°ã€ ã‚’èªã‚€" + author_display: Yoshida, Hajime, 1934- + title_t: + - Kubo Sakae "Kazanbaichi" o yomu / + - "ä¹…ä¿æ „ 「ç«å±±ç°åœ°ã€ ã‚’èªã‚€" + pub_date: + - '1997' + pub_date_sort: 1997 + published_vern_display: + - "æ±äº¬" + format: Book + author_vern_display: "å‰ç”°ä¸€, 1934-" + material_type_display: + - 480 p. + title_display: Kubo Sakae "Kazanbaichi" o yomu + subject_addl_t: + - 20th century + - Japan History + subject_t: + - Kubo, Sakae, 1901-1958. Kazanbaichi + - Japanese drama + - Political plays, Japanese + - Theater + - "ä¹…ä¿æ „, 1901-1958. ç«å±±ç°åœ°" + subject_era_facet: + - 20th century + title_sort: kubo sakae "kazanbaichi" o yomu + id: '00314247' + author_sort: Yoshida Hajime 1934 Kubo Sakae Kazanbaichi o yomu + title_addl_t: + - Kubo Sakae "Kazanbaichi" o yomu / + - "ä¹…ä¿æ „ 「ç«å±±ç°åœ°ã€ ã‚’èªã‚€" + subject_geo_facet: + - Japan + subject_topic_facet: + - Kubo, Sakae, 1901-1958 + - Japanese drama + - Political plays, Japanese + - Theater + language_facet: + - Japanese + timestamp: '2014-02-03T18:42:53.056Z' +- lc_1letter_facet: + - D - World History + author_t: + - Viï¸ a︡tkin, M. P. (Mikhail Porfirʹevich), + marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>00987cam + a22002531 4500</leader><controlfield tag=\"001\"> 43037890 </controlfield><controlfield + tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090126171234.0</controlfield><controlfield + tag=\"008\">810731m19419999ru b b 000 0 ruso </controlfield><datafield + tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\"> 43037890 </subfield></datafield><datafield + tag=\"035\" ind1=\" \" ind2=\" \"><subfield code=\"a\">(OCoLC)28783996</subfield></datafield><datafield + tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC</subfield><subfield + code=\"c\">ICU</subfield><subfield code=\"d\">OCoLC</subfield><subfield code=\"d\">DLC</subfield></datafield><datafield + tag=\"043\" ind1=\" \" ind2=\" \"><subfield code=\"a\">e-ur-kz</subfield></datafield><datafield + tag=\"050\" ind1=\"0\" ind2=\"0\"><subfield code=\"a\">DK861.K3</subfield><subfield + code=\"b\">V5</subfield></datafield><datafield tag=\"100\" ind1=\"1\" ind2=\" + \"><subfield code=\"a\">Viï¸ a︡tkin, M. P.</subfield><subfield code=\"q\">(Mikhail + Porfirʹevich),</subfield><subfield code=\"d\">1895-1967.</subfield></datafield><datafield + tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield code=\"a\">Ocherki po istorii Kazakhskoĭ + SSR.</subfield></datafield><datafield tag=\"260\" ind1=\" \" ind2=\" \"><subfield + code=\"a\">[Moskva],</subfield><subfield code=\"b\">Ogiz, Gospolitizdat,</subfield><subfield + code=\"c\">1941-</subfield></datafield><datafield tag=\"300\" ind1=\" \" ind2=\" + \"><subfield code=\"a\">v.</subfield><subfield code=\"b\">fold. map.</subfield><subfield + code=\"c\">20 cm.</subfield></datafield><datafield tag=\"500\" ind1=\" \" ind2=\" + \"><subfield code=\"a\">At head of title: Akademiiï¸ a︡ nauk SSSR. Institut istorii + i Kazakhstanskiĭ filial. M. Viï¸ a︡tkin.</subfield></datafield><datafield tag=\"504\" + ind1=\" \" ind2=\" \"><subfield code=\"a\">\"Obzor literatury i istochnikov\": + v. 1, p. 5-[19]. \"Bibliograficheskiĭ ukazatelʹ\": v. 1, p. 356-364.</subfield></datafield><datafield + tag=\"505\" ind1=\"2\" ind2=\" \"><subfield code=\"a\">t. 1. S drevneĭshikh vremen + po 1870 g.</subfield></datafield><datafield tag=\"651\" ind1=\" \" ind2=\"0\"><subfield + code=\"a\">Kazakhstan</subfield><subfield code=\"x\">History.</subfield></datafield><datafield + tag=\"710\" ind1=\"2\" ind2=\" \"><subfield code=\"a\">Institut istorii (Akademiiï¸ a︡ + nauk SSSR)</subfield></datafield><datafield tag=\"710\" ind1=\"2\" ind2=\" \"><subfield + code=\"a\">Akademiiï¸ a︡ nauk Kazakhskoĭ SSR, Alma Ata.</subfield></datafield></record></collection>" + published_display: + - Moskva + author_display: Viï¸ a︡tkin, M. P. (Mikhail Porfirʹevich), 1895-1967 + lc_callnum_display: + - DK861.K3 V5 + title_t: + - Ocherki po istorii Kazakhskoĭ SSR. + pub_date: + - '1941' + pub_date_sort: 1941 + format: Book + material_type_display: + - v. + lc_b4cutter_facet: + - DK861.K3 + title_display: Ocherki po istorii Kazakhskoĭ SSR + subject_addl_t: + - History + subject_t: + - Kazakhstan + title_sort: ocherki po istorii kazakhskoĭ ssr + id: '43037890' + author_sort: Viï¸ a︡tkin M P Mikhail Porfirʹevich 18951967 Ocherki po istorii Kazakhskoĭ + SSR + title_addl_t: + - Ocherki po istorii Kazakhskoĭ SSR. + subject_geo_facet: + - Kazakhstan + author_addl_t: + - Institut istorii (Akademiiï¸ a︡ nauk SSSR) + - Akademiiï¸ a︡ nauk Kazakhskoĭ SSR, Alma Ata. + lc_alpha_facet: + - DK + language_facet: + - Russian + timestamp: '2014-02-03T18:42:53.056Z' +- lc_1letter_facet: + - K - Law + author_t: + - Korea (North) + marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>00955cam + a22002411 4500</leader><controlfield tag=\"001\"> 53029833 </controlfield><controlfield + tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090126171326.0</controlfield><controlfield + tag=\"008\">860911s1952 ru f000 0 rus </controlfield><datafield + tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\"> 53029833 </subfield></datafield><datafield + tag=\"035\" ind1=\" \" ind2=\" \"><subfield code=\"a\">(OCoLC)14207259</subfield></datafield><datafield + tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC</subfield><subfield + code=\"c\">CU</subfield><subfield code=\"d\">CU</subfield><subfield code=\"d\">DLC</subfield></datafield><datafield + tag=\"042\" ind1=\" \" ind2=\" \"><subfield code=\"a\">premarc</subfield></datafield><datafield + tag=\"043\" ind1=\" \" ind2=\" \"><subfield code=\"a\">a-kn---</subfield></datafield><datafield + tag=\"050\" ind1=\"0\" ind2=\"0\"><subfield code=\"a\">KPC13</subfield><subfield + code=\"b\">1952</subfield></datafield><datafield tag=\"110\" ind1=\"1\" ind2=\" + \"><subfield code=\"a\">Korea (North)</subfield></datafield><datafield tag=\"240\" + ind1=\"1\" ind2=\"0\"><subfield code=\"a\">Laws, etc. (Konstitutï¸ s︡iiï¸ a︡ i osnovnye + zakonodatelʹnye akty Koreĭskoĭ Narodno-Demokraticheskoĭ Respubliki)</subfield></datafield><datafield + tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield code=\"a\">Konstitutï¸ s︡iiï¸ a︡ i osnovnye + zakonodatelʹnye akty Koreĭskoĭ Narodno-Demokraticheskoĭ Respubliki.</subfield><subfield + code=\"c\">Perevod s koreĭskogo Iï¸ U︡.N. Mazura i Khan Dyk Pona. Pod red. i s + vstup. statʹeĭ G. Tavrova.</subfield></datafield><datafield tag=\"260\" ind1=\" + \" ind2=\" \"><subfield code=\"a\">Moskva,</subfield><subfield code=\"b\">Izd-vo + inostrannoĭ lit-ry,</subfield><subfield code=\"c\">1952.</subfield></datafield><datafield + tag=\"300\" ind1=\" \" ind2=\" \"><subfield code=\"a\">396 p.</subfield><subfield + code=\"c\">21 cm.</subfield></datafield><datafield tag=\"490\" ind1=\"0\" ind2=\" + \"><subfield code=\"a\">Zakonodatelʹstvo stran narodnoĭ demokratii</subfield></datafield><datafield + tag=\"700\" ind1=\"1\" ind2=\" \"><subfield code=\"a\">Mazur, Iï¸ U︡. N.</subfield></datafield><datafield + tag=\"710\" ind1=\"1\" ind2=\" \"><subfield code=\"a\">Korea (North)</subfield><subfield + code=\"t\">Constitution.</subfield></datafield></record></collection>" + published_display: + - Moskva + author_display: Korea (North) + lc_callnum_display: + - KPC13 1952 + title_t: + - Konstitutï¸ s︡iiï¸ a︡ i osnovnye zakonodatelʹnye akty Koreĭskoĭ Narodno-Demokraticheskoĭ + Respubliki. + pub_date: + - '1952' + pub_date_sort: 1952 + format: Book + material_type_display: + - 396 p. + lc_b4cutter_facet: + - KPC13 + title_display: Konstitutï¸ s︡iiï¸ a︡ i osnovnye zakonodatelʹnye akty Koreĭskoĭ Narodno-Demokraticheskoĭ + Respubliki + title_sort: konstitutï¸ s︡iiï¸ a︡ i osnovnye zakonodatelʹnye akty koreĭskoĭ narodno-demokraticheskoĭ + respubliki + id: '53029833' + author_sort: Korea North Laws etc Konstitutï¸ s︡iiï¸ a︡ i osnovnye zakonodatelʹnye akty + Koreĭskoĭ NarodnoDemokraticheskoĭ Respubliki Konstitutï¸ s︡iiï¸ a︡ i osnovnye zakonodatelʹnye + akty Koreĭskoĭ NarodnoDemokraticheskoĭ Respubliki + title_addl_t: + - Konstitutï¸ s︡iiï¸ a︡ i osnovnye zakonodatelʹnye akty Koreĭskoĭ Narodno-Demokraticheskoĭ + Respubliki. + - Laws, etc. (Konstitutï¸ s︡iiï¸ a︡ i osnovnye zakonodatelʹnye akty Koreĭskoĭ Narodno-Demokraticheskoĭ + Respubliki) + author_addl_t: + - Mazur, Iï¸ U︡. N. + - Korea (North) + title_added_entry_t: + - Constitution + title_series_t: + - Zakonodatelʹstvo stran narodnoĭ demokratii + lc_alpha_facet: + - KPC + language_facet: + - Russian + timestamp: '2014-02-03T18:42:53.056Z' +- lc_1letter_facet: + - D - World History + marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>01062cam + a2200301 a 4500</leader><controlfield tag=\"001\"> 77826928 </controlfield><controlfield + tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090122103906.0</controlfield><controlfield + tag=\"008\">070816s1976 ko 000 0ckor </controlfield><datafield + tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\"> 77826928 </subfield></datafield><datafield + tag=\"035\" ind1=\" \" ind2=\" \"><subfield code=\"a\">(CStRLIN)DCLP07-B11425</subfield></datafield><datafield + tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC</subfield><subfield + code=\"c\">*BZV*</subfield><subfield code=\"d\">MH-HY</subfield><subfield code=\"d\">OCoLC</subfield><subfield + code=\"d\">CU</subfield><subfield code=\"d\">CStRLIN</subfield><subfield code=\"d\">DLC-R</subfield><subfield + code=\"d\">DLC</subfield></datafield><datafield tag=\"043\" ind1=\" \" ind2=\" + \"><subfield code=\"a\">a-kr---</subfield></datafield><datafield tag=\"050\" ind1=\"0\" + ind2=\"0\"><subfield code=\"a\">DS912.38</subfield><subfield code=\"b\">.K982 + 1976</subfield></datafield><datafield tag=\"066\" ind1=\" \" ind2=\" \"><subfield + code=\"c\">$1</subfield></datafield><datafield tag=\"130\" ind1=\"0\" ind2=\" + \"><subfield code=\"6\">880-01</subfield><subfield code=\"a\">Koryŏsa.</subfield><subfield + code=\"p\">Yŏlchŏn.</subfield><subfield code=\"k\">Selections.</subfield></datafield><datafield + tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield code=\"6\">880-02</subfield><subfield + code=\"a\">Koryŏ inmul yŏlchŏn /</subfield><subfield code=\"c\">Yi Min-su pÊ»yŏnyŏk.</subfield></datafield><datafield + tag=\"260\" ind1=\" \" ind2=\" \"><subfield code=\"6\">880-03</subfield><subfield + code=\"a\">Sŏul :</subfield><subfield code=\"b\">Sŏmundang,</subfield><subfield + code=\"c\">1976.</subfield></datafield><datafield tag=\"300\" ind1=\" \" ind2=\" + \"><subfield code=\"a\">255 p. ;</subfield><subfield code=\"c\">19 cm.</subfield></datafield><datafield + tag=\"490\" ind1=\"0\" ind2=\" \"><subfield code=\"6\">880-04</subfield><subfield + code=\"a\">Sŏmun munʼgo ;</subfield><subfield code=\"v\">237</subfield></datafield><datafield + tag=\"651\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Korea</subfield><subfield + code=\"x\">History</subfield><subfield code=\"y\">Koryŏ period, 935-1392</subfield><subfield + code=\"v\">Biography.</subfield></datafield><datafield tag=\"651\" ind1=\" \" + ind2=\"0\"><subfield code=\"a\">Korea</subfield><subfield code=\"v\">Biography.</subfield></datafield><datafield + tag=\"700\" ind1=\"1\" ind2=\" \"><subfield code=\"6\">880-05</subfield><subfield + code=\"a\">Yi, Min-su,</subfield><subfield code=\"d\">1916-</subfield></datafield><datafield + tag=\"880\" ind1=\"0\" ind2=\" \"><subfield code=\"6\">130-01/$1</subfield><subfield + code=\"a\">高麗å².</subfield><subfield code=\"p\">列傅.</subfield><subfield code=\"k\">Selections.</subfield></datafield><datafield + tag=\"880\" ind1=\"1\" ind2=\"0\"><subfield code=\"6\">245-02/$1</subfield><subfield + code=\"a\">高麗 人物 列傅 /</subfield><subfield code=\"c\">æŽ æ°‘æ¨¹ ç·¨è¯.</subfield></datafield><datafield + tag=\"880\" ind1=\" \" ind2=\" \"><subfield code=\"6\">260-03/$1</subfield><subfield + code=\"a\">서울 :</subfield><subfield code=\"b\">ç‘žæ–‡å ‚,</subfield><subfield code=\"c\">1976.</subfield></datafield><datafield + tag=\"880\" ind1=\"0\" ind2=\" \"><subfield code=\"6\">490-04/$1</subfield><subfield + code=\"a\">ç‘žæ–‡ 文庫 ;</subfield><subfield code=\"v\">237</subfield></datafield><datafield + tag=\"880\" ind1=\"1\" ind2=\" \"><subfield code=\"6\">700-05/$1</subfield><subfield + code=\"a\">æŽ æ°‘æ¨¹,</subfield><subfield code=\"d\">1916-</subfield></datafield></record></collection>" + published_display: + - Sŏul + title_vern_display: "高麗 人物 列傅" + lc_callnum_display: + - DS912.38 .K982 1976 + title_t: + - Koryŏ inmul yŏlchŏn / + - "高麗 人物 列傅" + pub_date: + - '1976' + pub_date_sort: 1976 + published_vern_display: + - "서울" + format: Book + material_type_display: + - 255 p. + lc_b4cutter_facet: + - DS912.38 + title_display: Koryŏ inmul yŏlchŏn + subject_addl_t: + - History Koryŏ period, 935-1392 Biography + - Biography + subject_t: + - Korea + subject_era_facet: + - Koryŏ period, 935-1392 + title_sort: koryŏ inmul yŏlchŏn + id: '77826928' + author_sort: "\U0010FFFF Koryŏ inmul yŏlchŏn" + title_addl_t: + - Koryŏ inmul yŏlchŏn / + - Koryŏsa. Yŏlchŏn. Selections + - "高麗 人物 列傅" + - "高麗å². 列傅. Selections" + subject_geo_facet: + - Korea + author_addl_t: + - Yi, Min-su, + - "æŽ æ°‘æ¨¹" + title_series_t: + - Sŏmun munʼgo ; 237 + - "ç‘žæ–‡ 文庫 ; 237" + lc_alpha_facet: + - DS + language_facet: + - Korean + timestamp: '2014-02-03T18:42:53.056Z' +- lc_1letter_facet: + - P - Language & Literature + author_t: + - Parikshit Sharma, Ogeti, + marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>00813cam + a2200217 i 4500</leader><controlfield tag=\"001\"> 78908283 </controlfield><controlfield + tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090121104206.0</controlfield><controlfield + tag=\"008\">790619s1976 ii 000 0 sano </controlfield><datafield + tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\"> 78908283 </subfield></datafield><datafield + tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC</subfield><subfield + code=\"c\">DLC</subfield><subfield code=\"d\">DLC</subfield></datafield><datafield + tag=\"050\" ind1=\"0\" ind2=\"0\"><subfield code=\"a\">PK3799.P29</subfield><subfield + code=\"b\">Y3</subfield></datafield><datafield tag=\"100\" ind1=\"2\" ind2=\" + \"><subfield code=\"a\">Parikshit Sharma, Ogeti,</subfield><subfield code=\"d\">1930-</subfield></datafield><datafield + tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield code=\"a\">YasÌodharaÌ„-mahaÌ„kaÌ„vyam + /</subfield><subfield code=\"c\">OgetÌ£i PariÌ„ksÌ£itsÌarmaÌ„.</subfield></datafield><datafield + tag=\"260\" ind1=\" \" ind2=\" \"><subfield code=\"a\">PunÌ£yapattanam :</subfield><subfield + code=\"b\">SÌaÌ„radaÌ„-Gaurava-Grantha-MaÌ„laÌ„ ;</subfield><subfield code=\"a\">HaidraÌ„baÌ„da + :</subfield><subfield code=\"b\">praÌ„ptisthalam O. AcyutaraÌ„masÌaÌ„striÌ„,</subfield><subfield + code=\"c\">1976.</subfield></datafield><datafield tag=\"300\" ind1=\" \" ind2=\" + \"><subfield code=\"a\">24, 128, 2 p. ;</subfield><subfield code=\"c\">22 cm.</subfield></datafield><datafield + tag=\"490\" ind1=\"0\" ind2=\" \"><subfield code=\"a\">SÌaÌ„radaÌ„-gaurava-grantha-maÌ„laÌ„ + ; 37</subfield></datafield><datafield tag=\"500\" ind1=\" \" ind2=\" \"><subfield + code=\"a\">In Sanskrit; introductory matter in English or Sanskrit.</subfield></datafield><datafield + tag=\"500\" ind1=\" \" ind2=\" \"><subfield code=\"a\">A poem.</subfield></datafield><datafield + tag=\"600\" ind1=\"0\" ind2=\"0\"><subfield code=\"a\">Gautama Buddha</subfield><subfield + code=\"v\">Poetry.</subfield></datafield><datafield tag=\"600\" ind1=\"0\" ind2=\"0\"><subfield + code=\"a\">YasÌodharaÌ„</subfield><subfield code=\"c\">(Wife of Gautama Buddha)</subfield><subfield + code=\"v\">Poetry.</subfield></datafield></record></collection>" + published_display: + - PunÌ£yapattanam + - HaidraÌ„baÌ„da + author_display: Parikshit Sharma, Ogeti, 1930- + lc_callnum_display: + - PK3799.P29 Y3 + title_t: + - YasÌodharaÌ„-mahaÌ„kaÌ„vyam / + pub_date: + - '1976' + pub_date_sort: 1976 + format: Book + material_type_display: + - 24, 128, 2 p. + lc_b4cutter_facet: + - PK3799.P29 + title_display: YasÌodharaÌ„-mahaÌ„kaÌ„vyam + subject_addl_t: + - Poetry + subject_t: + - Gautama Buddha + - YasÌodharaÌ„ (Wife of Gautama Buddha) + title_sort: yasÌodharaÌ„-mahaÌ„kaÌ„vyam + id: '78908283' + author_sort: Parikshit Sharma Ogeti 1930 YasÌodharaÌ„mahaÌ„kaÌ„vyam + title_addl_t: + - YasÌodharaÌ„-mahaÌ„kaÌ„vyam / + subject_topic_facet: + - Gautama Buddha + - YasÌodharaÌ„ (Wife of Gautama Buddha) + title_series_t: + - SÌaÌ„radaÌ„-gaurava-grantha-maÌ„laÌ„ ; 37 + lc_alpha_facet: + - PK + language_facet: + - Sanskrit + timestamp: '2014-02-03T18:42:53.056Z' +- lc_1letter_facet: + - H - Social Sciences + author_t: + - IsÌ£laÌ„hÌ£iÌ„, AmiÌ„n AhÌ£san, + marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>00729cam + a2200229 i 4500</leader><controlfield tag=\"001\"> 79930185 </controlfield><controlfield + tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090123080110.0</controlfield><controlfield + tag=\"008\">791203r19781950pk 000 0 urdo </controlfield><datafield + tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\"> 79930185 </subfield></datafield><datafield + tag=\"020\" ind1=\" \" ind2=\" \"><subfield code=\"c\">Rs10.00</subfield></datafield><datafield + tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC</subfield><subfield + code=\"c\">DLC</subfield><subfield code=\"d\">DLC</subfield></datafield><datafield + tag=\"043\" ind1=\" \" ind2=\" \"><subfield code=\"a\">a-pk---</subfield></datafield><datafield + tag=\"050\" ind1=\"0\" ind2=\"0\"><subfield code=\"a\">HQ1745.5</subfield><subfield + code=\"b\">.I83 1978</subfield></datafield><datafield tag=\"100\" ind1=\"1\" ind2=\" + \"><subfield code=\"a\">IsÌ£laÌ„hÌ£iÌ„, AmiÌ„n AhÌ£san,</subfield><subfield code=\"d\">1904-1997.</subfield></datafield><datafield + tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield code=\"a\">PaÌ„kistaÌ„niÌ„ Ê»aurat doraÌ„he + par /</subfield><subfield code=\"c\">taÌ„liÌ„f AmiÌ„n AhÌ£san IsÌ£laÌ„hÌ£iÌ„.</subfield></datafield><datafield + tag=\"260\" ind1=\" \" ind2=\" \"><subfield code=\"a\">LaÌ„haur :</subfield><subfield + code=\"b\">Maktabah-yi MarkaziÌ„ Anjuman-i K̲h̲uddaÌ„mulqurʼaÌ„n,</subfield><subfield + code=\"c\">1978.</subfield></datafield><datafield tag=\"300\" ind1=\" \" ind2=\" + \"><subfield code=\"a\">8, 174 p. ;</subfield><subfield code=\"c\">22 cm.</subfield></datafield><datafield + tag=\"500\" ind1=\" \" ind2=\" \"><subfield code=\"a\">In Urdu.</subfield></datafield><datafield + tag=\"500\" ind1=\" \" ind2=\" \"><subfield code=\"a\">First published in 1950.</subfield></datafield><datafield + tag=\"650\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Women</subfield><subfield + code=\"z\">Pakistan.</subfield></datafield><datafield tag=\"650\" ind1=\" \" ind2=\"0\"><subfield + code=\"a\">Women</subfield><subfield code=\"z\">Pakistan</subfield><subfield code=\"x\">Social + conditions.</subfield></datafield></record></collection>" + published_display: + - LaÌ„haur + author_display: IsÌ£laÌ„hÌ£iÌ„, AmiÌ„n AhÌ£san, 1904-1997 + lc_callnum_display: + - HQ1745.5 .I83 1978 + title_t: + - PaÌ„kistaÌ„niÌ„ Ê»aurat doraÌ„he par / + pub_date: + - '1978' + pub_date_sort: 1978 + format: Book + material_type_display: + - 8, 174 p. + lc_b4cutter_facet: + - HQ1745.5 + title_display: PaÌ„kistaÌ„niÌ„ Ê»aurat doraÌ„he par + subject_addl_t: + - Pakistan + - Pakistan Social conditions + subject_t: + - Women + title_sort: paÌ„kistaÌ„niÌ„ Ê»aurat doraÌ„he par + id: '79930185' + author_sort: IsÌ£laÌ„hÌ£iÌ„ AmiÌ„n AhÌ£san 19041997 PaÌ„kistaÌ„niÌ„ Ê»aurat doraÌ„he par + title_addl_t: + - PaÌ„kistaÌ„niÌ„ Ê»aurat doraÌ„he par / + subject_geo_facet: + - Pakistan + subject_topic_facet: + - Women + lc_alpha_facet: + - HQ + language_facet: + - Urdu + timestamp: '2014-02-03T18:42:53.056Z' +- lc_1letter_facet: + - M - Music + author_t: + - NaÌ„raÌ„yanÌ£apanÌ£dÌ£ita, + marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>01012cam + a22002657a 4500</leader><controlfield tag=\"001\"> 85910001 </controlfield><controlfield + tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090121023106.0</controlfield><controlfield + tag=\"007\">heuamb---baca</controlfield><controlfield tag=\"007\">heubmb---baaa</controlfield><controlfield + tag=\"008\">860321r19851946dcu bb s001 0 sano </controlfield><datafield + tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\"> 85910001 </subfield></datafield><datafield + tag=\"025\" ind1=\" \" ind2=\" \"><subfield code=\"a\">LC San A 616</subfield></datafield><datafield + tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC</subfield><subfield + code=\"c\">DLC</subfield><subfield code=\"d\">DLC</subfield></datafield><datafield + tag=\"050\" ind1=\"0\" ind2=\"0\"><subfield code=\"a\">Microfiche 90/61328 (P)</subfield></datafield><datafield + tag=\"100\" ind1=\"0\" ind2=\" \"><subfield code=\"a\">NaÌ„raÌ„yanÌ£apanÌ£dÌ£ita,</subfield><subfield + code=\"d\">17th cent.</subfield></datafield><datafield tag=\"245\" ind1=\"1\" + ind2=\"0\"><subfield code=\"a\">AÌ„sÌlesÌ£aÌ„sÌataka of NaÌ„raÌ„yanÌ£a PanÌ£dÌ£ita</subfield><subfield + code=\"h\">[microform].</subfield></datafield><datafield tag=\"260\" ind1=\" \" + ind2=\" \"><subfield code=\"a\">Trivandrum :</subfield><subfield code=\"b\">University + MSS. Library, University of Travancore,</subfield><subfield code=\"c\">1946.</subfield></datafield><datafield + tag=\"300\" ind1=\" \" ind2=\" \"><subfield code=\"a\">xii, 24 p. ;</subfield><subfield + code=\"c\">24 cm.</subfield></datafield><datafield tag=\"500\" ind1=\" \" ind2=\" + \"><subfield code=\"a\">Poem.</subfield></datafield><datafield tag=\"500\" ind1=\" + \" ind2=\" \"><subfield code=\"a\">In Sanskrit; introd. in English.</subfield></datafield><datafield + tag=\"500\" ind1=\" \" ind2=\" \"><subfield code=\"a\">\"Reprint from the Journal + of the Travancore University Oriental Manuscripts Library, no. 7.\"</subfield></datafield><datafield + tag=\"504\" ind1=\" \" ind2=\" \"><subfield code=\"a\">Includes bibliographical + references and index.</subfield></datafield><datafield tag=\"500\" ind1=\" \" + ind2=\" \"><subfield code=\"a\">Master microform held by: DLC.</subfield></datafield><datafield + tag=\"533\" ind1=\" \" ind2=\" \"><subfield code=\"a\">Microfiche.</subfield><subfield + code=\"b\">Washington, D.C. :</subfield><subfield code=\"c\">Library of Congress + Photoduplication Service,</subfield><subfield code=\"d\">1985.</subfield><subfield + code=\"e\">1 microfiche ; 11 x 15 cm.</subfield></datafield></record></collection>" + published_display: + - Trivandrum + author_display: NaÌ„raÌ„yanÌ£apanÌ£dÌ£ita, 17th cent + lc_callnum_display: + - Microfiche 90/61328 (P) + title_t: + - AÌ„sÌlesÌ£aÌ„sÌataka of NaÌ„raÌ„yanÌ£a PanÌ£dÌ£ita + pub_date: + - '1946' + pub_date_sort: 1946 + format: Book + material_type_display: + - xii, 24 p. + lc_b4cutter_facet: + - Microfiche 90/61328 (P) + title_display: AÌ„sÌlesÌ£aÌ„sÌataka of NaÌ„raÌ„yanÌ£a PanÌ£dÌ£ita + title_sort: aÌ„sÌlesÌ£aÌ„sÌataka of naÌ„raÌ„yanÌ£a panÌ£dÌ£ita + id: '85910001' + author_sort: NaÌ„raÌ„yanÌ£apanÌ£dÌ£ita 17th cent AÌ„sÌlesÌ£aÌ„sÌataka of NaÌ„raÌ„yanÌ£a PanÌ£dÌ£ita + microform + title_addl_t: + - AÌ„sÌlesÌ£aÌ„sÌataka of NaÌ„raÌ„yanÌ£a PanÌ£dÌ£ita + language_facet: + - Sanskrit + timestamp: '2014-02-03T18:42:53.056Z' +- subtitle_display: sipurim mafliʼim ha-mevusasim Ê»al Ê»uvdot histÌ£oriyot + author_vern_display: "â€×¤×™× קל, ×—×™×™× ×™×¢×§×‘" + subject_addl_t: + - Anecdotes + title_display: Shodede-yam Yehudiyim + id: '86207417' + isbn_t: + - '9650101373' + subject_topic_facet: + - Jewish pirates + - Jewish criminals + lc_alpha_facet: + - G + subtitle_t: + - sipurim mafliʼim ha-mevusasim Ê»al Ê»uvdot histÌ£oriyot / + - "â€×¡×¤×•×¨×™× מפלי××™× ×”×ž×‘×•×¡×¡×™× ×¢×œ עובדות היסטוריות /â€" + author_t: + - Finkel, Chaim Jacob. + - "â€×¤×™× קל, ×—×™×™× ×™×¢×§×‘" + lc_1letter_facet: + - G - Geography, Anthropology, Recreation + marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>01258cam + a2200301 a 4500</leader><controlfield tag=\"001\"> 86207417 </controlfield><controlfield + tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090123161900.0</controlfield><controlfield + tag=\"008\">930810s1984 is a 000 0 heb </controlfield><datafield + tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\"> 86207417 </subfield></datafield><datafield + tag=\"020\" ind1=\" \" ind2=\" \"><subfield code=\"a\">9650101373</subfield></datafield><datafield + tag=\"035\" ind1=\" \" ind2=\" \"><subfield code=\"a\">(CStRLIN)DCLH93-B1897</subfield></datafield><datafield + tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC-R</subfield><subfield + code=\"c\">DLC-R</subfield></datafield><datafield tag=\"041\" ind1=\"1\" ind2=\" + \"><subfield code=\"a\">heb</subfield><subfield code=\"h\">eng</subfield></datafield><datafield + tag=\"050\" ind1=\"0\" ind2=\"0\"><subfield code=\"a\">G535</subfield><subfield + code=\"b\">.F54 1984</subfield></datafield><datafield tag=\"066\" ind1=\" \" ind2=\" + \"><subfield code=\"c\">(2</subfield></datafield><datafield tag=\"100\" ind1=\"1\" + ind2=\" \"><subfield code=\"6\">880-01</subfield><subfield code=\"a\">Finkel, + Chaim Jacob.</subfield></datafield><datafield tag=\"240\" ind1=\"1\" ind2=\"0\"><subfield + code=\"a\">Jewish pirates.</subfield><subfield code=\"l\">Hebrew</subfield></datafield><datafield + tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield code=\"6\">880-02</subfield><subfield + code=\"a\">Shodede-yam Yehudiyim :</subfield><subfield code=\"b\">sipurim mafliʼim + ha-mevusasim Ê»al Ê»uvdot histÌ£oriyot /</subfield><subfield code=\"c\">HÌ£ayim YaÊ»akÌ£ov + FinkÌ£el ; me-Anglit, Ofirah RahatÌ£.</subfield></datafield><datafield tag=\"260\" + ind1=\" \" ind2=\" \"><subfield code=\"6\">880-03</subfield><subfield code=\"a\">Yerushalayim + :</subfield><subfield code=\"b\">Devir,</subfield><subfield code=\"c\">c1984.</subfield></datafield><datafield + tag=\"300\" ind1=\" \" ind2=\" \"><subfield code=\"a\">283 p. :</subfield><subfield + code=\"b\">ill. ;</subfield><subfield code=\"c\">22 cm.</subfield></datafield><datafield + tag=\"500\" ind1=\" \" ind2=\" \"><subfield code=\"a\">Title on t.p. verso: Jewish + pirates.</subfield></datafield><datafield tag=\"650\" ind1=\" \" ind2=\"0\"><subfield + code=\"a\">Jewish pirates</subfield><subfield code=\"v\">Anecdotes.</subfield></datafield><datafield + tag=\"650\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Jewish criminals</subfield><subfield + code=\"v\">Anecdotes.</subfield></datafield><datafield tag=\"740\" ind1=\"0\" + ind2=\" \"><subfield code=\"a\">Jewish pirates.</subfield></datafield><datafield + tag=\"880\" ind1=\"1\" ind2=\" \"><subfield code=\"6\">100-01/(2/râ€</subfield><subfield + code=\"a\">â€×¤×™× קל, ×—×™×™× ×™×¢×§×‘.</subfield></datafield><datafield tag=\"880\" ind1=\"1\" + ind2=\"0\"><subfield code=\"6\">245-02/(2/râ€</subfield><subfield code=\"a\">â€×©×•×“×“×™Ö¾×™× + ×™×”×•×“×™×™× :â€</subfield><subfield code=\"b\">â€×¡×¤×•×¨×™× מפלי××™× ×”×ž×‘×•×¡×¡×™× ×¢×œ עובדות היסטוריות + /â€</subfield><subfield code=\"c\">â€×—×™×™× ×™×¢×§×‘ ×¤×™× ×§×œ ; מ×× ×’×œ×™×ª, ×ופירה רהט.</subfield></datafield><datafield + tag=\"880\" ind1=\" \" ind2=\" \"><subfield code=\"6\">260-03/(2/râ€</subfield><subfield + code=\"a\">â€×™×¨×•×©×œ×™× :â€</subfield><subfield code=\"b\">â€×“ביר,â€</subfield><subfield + code=\"c\">â€â€ªc1984‬.</subfield></datafield></record></collection>" + published_display: + - Yerushalayim + author_display: Finkel, Chaim Jacob + title_vern_display: "â€×©×•×“×“×™Ö¾×™× ×™×”×•×“×™×™× :â€" + lc_callnum_display: + - G535 .F54 1984 + title_t: + - 'Shodede-yam Yehudiyim :' + - "â€×©×•×“×“×™Ö¾×™× ×™×”×•×“×™×™× :â€" + pub_date: + - '1984' + pub_date_sort: 1984 + published_vern_display: + - "â€×™×¨×•×©×œ×™× :â€" + format: Book + subtitle_vern_display: "â€×¡×¤×•×¨×™× מפלי××™× ×”×ž×‘×•×¡×¡×™× ×¢×œ עובדות היסטוריות /â€" + lc_b4cutter_facet: + - G535 + material_type_display: + - 283 p. + subject_t: + - Jewish pirates + - Jewish criminals + title_sort: shodede-yam yehudiyim :sipurim mafliʼim ha-mevusasim Ê»al Ê»uvdot histÌ£oriyot + author_sort: Finkel Chaim Jacob Jewish pirates Hebrew Shodedeyam Yehudiyim sipurim + mafliʼim hamevusasim Ê»al Ê»uvdot histÌ£oriyot + title_addl_t: + - 'Shodede-yam Yehudiyim : sipurim mafliʼim ha-mevusasim Ê»al Ê»uvdot histÌ£oriyot + /' + - Jewish pirates. Hebrew + - "â€×©×•×“×“×™Ö¾×™× ×™×”×•×“×™×™× :†â€×¡×¤×•×¨×™× מפלי××™× ×”×ž×‘×•×¡×¡×™× ×¢×œ עובדות היסטוריות /â€" + title_added_entry_t: + - Jewish pirates. + language_facet: + - Hebrew + timestamp: '2014-02-03T18:42:53.056Z' +- lc_1letter_facet: + - B - Philosophy, Psychology, Religion + author_t: + - MuvahÌ£hÌ£id AbtÌ£ahÌ£iÌ„, HÌ£ujjat. + - "â€Ù…ÙˆØد ابطØى، خجة" + marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>01657cam + a2200337 a 4500</leader><controlfield tag=\"001\"> 87931798 </controlfield><controlfield + tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090121115059.0</controlfield><controlfield + tag=\"008\">060428m19869999ir ah b 000 0 per d</controlfield><datafield + tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\"> 87931798 </subfield></datafield><datafield + tag=\"035\" ind1=\" \" ind2=\" \"><subfield code=\"a\">(CStRLIN)DCLN06-B3656</subfield></datafield><datafield + tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">NjP</subfield><subfield + code=\"c\">NjP</subfield><subfield code=\"d\">UkLSOA</subfield><subfield code=\"d\">DLC-R</subfield></datafield><datafield + tag=\"042\" ind1=\" \" ind2=\" \"><subfield code=\"a\">lccopycat</subfield></datafield><datafield + tag=\"043\" ind1=\" \" ind2=\" \"><subfield code=\"a\">a------</subfield><subfield + code=\"a\">f------</subfield></datafield><datafield tag=\"050\" ind1=\"0\" ind2=\"0\"><subfield + code=\"a\">BP44</subfield><subfield code=\"b\">.M88 1986</subfield></datafield><datafield + tag=\"066\" ind1=\" \" ind2=\" \"><subfield code=\"c\">(3</subfield><subfield + code=\"c\">(4</subfield></datafield><datafield tag=\"100\" ind1=\"1\" ind2=\" + \"><subfield code=\"6\">880-01</subfield><subfield code=\"a\">MuvahÌ£hÌ£id AbtÌ£ahÌ£iÌ„, + HÌ£ujjat.</subfield></datafield><datafield tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield + code=\"6\">880-02</subfield><subfield code=\"a\">AÌ„shnāʼiÌ„ baÌ„ hÌ£awzahʹhaÌ„-yi + Ê»ilmiÌ„yah-ʼi ShiÌ„Ê»ah dar tÌ£uÌ„l-i taÌ„riÌ„kh /</subfield><subfield code=\"c\">bih + qalam-i HÌ£ujjat MuvahÌ£hÌ£id AbtÌ£ahÌ£iÌ„.</subfield></datafield><datafield tag=\"246\" + ind1=\"3\" ind2=\" \"><subfield code=\"6\">880-03</subfield><subfield code=\"a\">AÌ„shnaÌ„yiÌ„ + baÌ„ hÌ£awzahʹhaÌ„-yi Ê»ilmiÌ„yah-ʼi ShiÌ„Ê»ah dar tÌ£uÌ„l-i taÌ„riÌ„kh</subfield></datafield><datafield + tag=\"246\" ind1=\"3\" ind2=\"0\"><subfield code=\"6\">880-04</subfield><subfield + code=\"a\">HÌ£awzahʹhaÌ„-yi Ê»ilmiÌ„yah-ʼi ShiÌ„Ê»ah</subfield></datafield><datafield + tag=\"260\" ind1=\" \" ind2=\" \"><subfield code=\"6\">880-05</subfield><subfield + code=\"a\">IsÌ£fahaÌ„n :</subfield><subfield code=\"b\">HÌ£awzah-i Ê»IlmiÌ„yah,</subfield><subfield + code=\"c\">1365- [1986- ]</subfield></datafield><datafield tag=\"300\" + ind1=\" \" ind2=\" \"><subfield code=\"a\">v. <1> :</subfield><subfield + code=\"b\">ill. (some col.), facsims. ;</subfield><subfield code=\"c\">25 cm.</subfield></datafield><datafield + tag=\"504\" ind1=\" \" ind2=\" \"><subfield code=\"a\">Bibliography: v. 1, p.451-455.</subfield></datafield><datafield + tag=\"650\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Religious institutions</subfield><subfield + code=\"z\">Islamic countries.</subfield></datafield><datafield tag=\"650\" ind1=\" + \" ind2=\"0\"><subfield code=\"a\">Shiites</subfield><subfield code=\"x\">Education</subfield><subfield + code=\"z\">Islamic countries.</subfield></datafield><datafield tag=\"650\" ind1=\" + \" ind2=\"0\"><subfield code=\"a\">Islamic universities and colleges.</subfield></datafield><datafield + tag=\"880\" ind1=\"1\" ind2=\" \"><subfield code=\"6\">100-01/(3/râ€</subfield><subfield + code=\"a\">â€Ù…ÙˆØد ابطØى، خجة.</subfield></datafield><datafield tag=\"880\" ind1=\"1\" + ind2=\"0\"><subfield code=\"6\">245-02/(3/râ€</subfield><subfield code=\"a\">â€Ø§Ø´Ù†Ø§Ø¦Ù‰ + با Øوزه‌هاى علميۀ شيعه در طول تاريخ /â€</subfield><subfield code=\"c\">â€Ø¨Ù‚لم Øجة + موØد ابطØÙ‰.</subfield></datafield><datafield tag=\"880\" ind1=\"3\" ind2=\" \"><subfield + code=\"6\">246-03/(3/râ€</subfield><subfield code=\"a\">â€Ø§Ø´Ù†Ø§ÙŠÙ‰ با Øوزه‌هاى علميۀ + شيعه در طول تاريخ</subfield></datafield><datafield tag=\"880\" ind1=\"3\" ind2=\"0\"><subfield + code=\"6\">246-04/(3/râ€</subfield><subfield code=\"a\">â€Øوزه هاى علميۀ شيعه</subfield></datafield><datafield + tag=\"880\" ind1=\" \" ind2=\" \"><subfield code=\"6\">260-05/(3/râ€</subfield><subfield + code=\"a\">â€Ø§ØµÙهان :â€</subfield><subfield code=\"b\">â€Øوزۀ علميه،â€</subfield><subfield + code=\"c\">â€â€ª1365- [1986- ]‬.</subfield></datafield></record></collection>" + published_display: + - IsÌ£fahaÌ„n + title_vern_display: "â€Ø§Ø´Ù†Ø§Ø¦Ù‰ با Øوزه‌هاى علميۀ شيعه در طول تاريخ /â€" + author_display: MuvahÌ£hÌ£id AbtÌ£ahÌ£iÌ„, HÌ£ujjat + lc_callnum_display: + - BP44 .M88 1986 + title_t: + - AÌ„shnāʼiÌ„ baÌ„ hÌ£awzahʹhaÌ„-yi Ê»ilmiÌ„yah-ʼi ShiÌ„Ê»ah dar tÌ£uÌ„l-i taÌ„riÌ„kh / + - "â€Ø§Ø´Ù†Ø§Ø¦Ù‰ با Øوزه‌هاى علميۀ شيعه در طول تاريخ /â€" + pub_date: + - '1986' + pub_date_sort: 1986 + published_vern_display: + - "â€Ø§ØµÙهان :â€" + format: Book + author_vern_display: "â€Ù…ÙˆØد ابطØى، خجة" + material_type_display: + - v. <1> + lc_b4cutter_facet: + - BP44 + title_display: AÌ„shnāʼiÌ„ baÌ„ hÌ£awzahʹhaÌ„-yi Ê»ilmiÌ„yah-ʼi ShiÌ„Ê»ah dar tÌ£uÌ„l-i taÌ„riÌ„kh + subject_addl_t: + - Islamic countries + - Education Islamic countries + subject_t: + - Religious institutions + - Shiites + - Islamic universities and colleges + title_sort: aÌ„shnāʼiÌ„ baÌ„ hÌ£awzahʹhaÌ„-yi Ê»ilmiÌ„yah-ʼi shiÌ„Ê»ah dar tÌ£uÌ„l-i taÌ„riÌ„kh + id: '87931798' + author_sort: MuvahÌ£hÌ£id AbtÌ£ahÌ£iÌ„ HÌ£ujjat AÌ„shnāʼiÌ„ baÌ„ hÌ£awzahʹhaÌ„yi Ê»ilmiÌ„yahʼi + ShiÌ„Ê»ah dar tÌ£uÌ„li taÌ„riÌ„kh + title_addl_t: + - AÌ„shnāʼiÌ„ baÌ„ hÌ£awzahʹhaÌ„-yi Ê»ilmiÌ„yah-ʼi ShiÌ„Ê»ah dar tÌ£uÌ„l-i taÌ„riÌ„kh / + - AÌ„shnaÌ„yiÌ„ baÌ„ hÌ£awzahʹhaÌ„-yi Ê»ilmiÌ„yah-ʼi ShiÌ„Ê»ah dar tÌ£uÌ„l-i taÌ„riÌ„kh + - HÌ£awzahʹhaÌ„-yi Ê»ilmiÌ„yah-ʼi ShiÌ„Ê»ah + - "â€Ø§Ø´Ù†Ø§Ø¦Ù‰ با Øوزه‌هاى علميۀ شيعه در طول تاريخ /â€" + - "â€Ø§Ø´Ù†Ø§ÙŠÙ‰ با Øوزه‌هاى علميۀ شيعه در طول تاريخ" + - "â€Øوزه هاى علميۀ شيعه" + subject_geo_facet: + - Islamic countries + subject_topic_facet: + - Religious institutions + - Shiites + - Islamic universities and colleges + lc_alpha_facet: + - BP + language_facet: + - Persian + timestamp: '2014-02-03T18:42:53.056Z' +- lc_1letter_facet: + - M - Music + author_t: + - LomtÊ»atÊ»iże, CÌŒola, + marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>00610cam + a22001817a 4500</leader><controlfield tag=\"001\"> 90142413 </controlfield><controlfield + tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090126150928.0</controlfield><controlfield + tag=\"008\">900409s1975 gs 000 0 geo </controlfield><datafield + tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\"> 90142413 </subfield></datafield><datafield + tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC</subfield><subfield + code=\"c\">DLC</subfield></datafield><datafield tag=\"050\" ind1=\"0\" ind2=\"0\"><subfield + code=\"a\">MLCSN 96/3906 (H)</subfield></datafield><datafield tag=\"100\" ind1=\"1\" + ind2=\" \"><subfield code=\"a\">LomtÊ»atÊ»iże, CÌŒola,</subfield><subfield code=\"d\">1879-1915.</subfield></datafield><datafield + tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield code=\"a\">Mrecvelobis musÌŒakis cÊ»xovrebis + cesi :</subfield><subfield code=\"b\">tÊ»eoriul-metÊ»oduri narkvevi /</subfield><subfield + code=\"c\">CÌŒola LomtÊ»atÊ»iże.</subfield></datafield><datafield tag=\"246\" ind1=\"1\" + ind2=\" \"><subfield code=\"i\">Title in colophon:</subfield><subfield code=\"a\">Obraz + zhizni rabotnika promyshlennosti</subfield></datafield><datafield tag=\"260\" + ind1=\" \" ind2=\" \"><subfield code=\"a\">TÊ»bilisi :</subfield><subfield code=\"b\">MecÊ»niereba,</subfield><subfield + code=\"c\">1975.</subfield></datafield><datafield tag=\"300\" ind1=\" \" ind2=\" + \"><subfield code=\"a\">65 p. ;</subfield><subfield code=\"c\">22 cm.</subfield></datafield><datafield + tag=\"653\" ind1=\" \" ind2=\" \"><subfield code=\"a\">Industrial workers;</subfield><subfield + code=\"a\">life style</subfield></datafield></record></collection>" + published_display: + - TÊ»bilisi + author_display: LomtÊ»atÊ»iże, CÌŒola, 1879-1915 + lc_callnum_display: + - MLCSN 96/3906 (H) + title_t: + - 'Mrecvelobis musÌŒakis cÊ»xovrebis cesi :' + pub_date: + - '1975' + pub_date_sort: 1975 + subtitle_display: tÊ»eoriul-metÊ»oduri narkvevi + format: Book + material_type_display: + - 65 p. + lc_b4cutter_facet: + - MLCSN 96/3906 (H) + title_display: Mrecvelobis musÌŒakis cÊ»xovrebis cesi + subject_t: + - Industrial workers; life style + title_sort: mrecvelobis musÌŒakis cÊ»xovrebis cesi :tÊ»eoriul-metÊ»oduri narkvevi + id: '90142413' + author_sort: LomtÊ»atÊ»iże CÌŒola 18791915 Mrecvelobis musÌŒakis cÊ»xovrebis cesi tÊ»eoriulmetÊ»oduri + narkvevi + title_addl_t: + - 'Mrecvelobis musÌŒakis cÊ»xovrebis cesi : tÊ»eoriul-metÊ»oduri narkvevi /' + - Obraz zhizni rabotnika promyshlennosti + subject_topic_facet: + - Industrial workers; life style + language_facet: + - Georgian + subtitle_t: + - tÊ»eoriul-metÊ»oduri narkvevi / + timestamp: '2014-02-03T18:42:53.056Z' +- lc_1letter_facet: + - K - Law + author_t: + - Korea (North) + marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>01106cam + a2200325 a 4500</leader><controlfield tag=\"001\"> 92117465 </controlfield><controlfield + tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090126171556.0</controlfield><controlfield + tag=\"008\">920805s1990 ko l 000 0 kor </controlfield><datafield + tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\"> 92117465 </subfield></datafield><datafield + tag=\"020\" ind1=\" \" ind2=\" \"><subfield code=\"c\">W300000 (set)</subfield></datafield><datafield + tag=\"035\" ind1=\" \" ind2=\" \"><subfield code=\"a\">(CStRLIN)DCLP92-B14190</subfield></datafield><datafield + tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC-R</subfield><subfield + code=\"c\">DLC-R</subfield></datafield><datafield tag=\"043\" ind1=\" \" ind2=\" + \"><subfield code=\"a\">a-kn---</subfield></datafield><datafield tag=\"050\" ind1=\"0\" + ind2=\"0\"><subfield code=\"a\">KPC13</subfield><subfield code=\"b\">.K67 1990</subfield></datafield><datafield + tag=\"066\" ind1=\" \" ind2=\" \"><subfield code=\"c\">$1</subfield></datafield><datafield + tag=\"110\" ind1=\"1\" ind2=\" \"><subfield code=\"a\">Korea (North)</subfield></datafield><datafield + tag=\"240\" ind1=\"1\" ind2=\"0\"><subfield code=\"a\">Laws, etc.</subfield></datafield><datafield + tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield code=\"6\">880-01</subfield><subfield + code=\"a\">Pukhan pŏmnyŏngjip /</subfield><subfield code=\"c\">chÊ»aegim pÊ»yŏnjip + Chŏng Kyŏng-mo, ChÊ»oe Tal-gon.</subfield></datafield><datafield tag=\"250\" + ind1=\" \" ind2=\" \"><subfield code=\"6\">880-02</subfield><subfield code=\"a\">ChaepÊ»an.</subfield></datafield><datafield + tag=\"260\" ind1=\" \" ind2=\" \"><subfield code=\"6\">880-03</subfield><subfield + code=\"a\">Sŏul TÊ»ŭkpyŏlsi :</subfield><subfield code=\"b\">Taeryuk Yŏnʼguso,</subfield><subfield + code=\"c\">1990.</subfield></datafield><datafield tag=\"300\" ind1=\" \" ind2=\" + \"><subfield code=\"a\">5 v. ;</subfield><subfield code=\"c\">27 cm.</subfield></datafield><datafield + tag=\"650\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Law</subfield><subfield + code=\"z\">Korea (North)</subfield></datafield><datafield tag=\"700\" ind1=\"1\" + ind2=\" \"><subfield code=\"6\">880-04</subfield><subfield code=\"a\">Chŏng, + Kyŏng-mo,</subfield><subfield code=\"d\">1937-</subfield></datafield><datafield + tag=\"700\" ind1=\"1\" ind2=\" \"><subfield code=\"6\">880-05</subfield><subfield + code=\"a\">ChÊ»oe, Tal-gon.</subfield></datafield><datafield tag=\"880\" ind1=\"1\" + ind2=\"0\"><subfield code=\"6\">245-01/$1</subfield><subfield code=\"a\">北韓 法令集 ï¼</subfield><subfield + code=\"c\">責任 編輯 é„ 慶謨, 崔 逹å¤ï¼Ž</subfield></datafield><datafield tag=\"880\" ind1=\" + \" ind2=\" \"><subfield code=\"6\">250-02/$1</subfield><subfield code=\"a\">å†ç‰ˆï¼Ž</subfield></datafield><datafield + tag=\"880\" ind1=\" \" ind2=\" \"><subfield code=\"6\">260-03/$1</subfield><subfield + code=\"a\">서울 æŒåˆ¥å¸‚ :</subfield><subfield code=\"b\">å¤§é™¸ã€€ç ”ç©¶æ‰€ï¼Œ</subfield><subfield + code=\"c\">1990.</subfield></datafield><datafield tag=\"880\" ind1=\"1\" ind2=\" + \"><subfield code=\"6\">700-04/$1</subfield><subfield code=\"a\">é„ 慶謨,</subfield><subfield + code=\"d\">1937-</subfield></datafield><datafield tag=\"880\" ind1=\"1\" ind2=\" + \"><subfield code=\"6\">700-05/$1</subfield><subfield code=\"a\">崔 逹å¤ï¼Ž</subfield></datafield></record></collection>" + published_display: + - Sŏul TÊ»ŭkpyŏlsi + title_vern_display: "北韓 法令集 ï¼" + author_display: Korea (North) + lc_callnum_display: + - KPC13 .K67 1990 + title_t: + - Pukhan pŏmnyŏngjip / + - "北韓 法令集 ï¼" + pub_date: + - '1990' + pub_date_sort: 1990 + published_vern_display: + - "서울 æŒåˆ¥å¸‚ :" + format: Book + material_type_display: + - 5 v. + lc_b4cutter_facet: + - KPC13 + title_display: Pukhan pŏmnyŏngjip + subject_addl_t: + - Korea (North) + subject_t: + - Law + title_sort: pukhan pŏmnyŏngjip + id: '92117465' + author_sort: Korea North Laws etc Pukhan pŏmnyŏngjip + title_addl_t: + - Pukhan pŏmnyŏngjip / + - Laws, etc + - "北韓 法令集 ï¼" + subject_geo_facet: + - Korea (North) + subject_topic_facet: + - Law + author_addl_t: + - Chŏng, Kyŏng-mo, + - ChÊ»oe, Tal-gon. + - "é„ 慶謨," + - "崔 逹å¤ï¼Ž" + lc_alpha_facet: + - KPC + language_facet: + - Korean + timestamp: '2014-02-03T18:42:53.056Z' +- subtitle_display: vÌ£e-hu perush yafeh u-menupeh Ê»al ShulhÌ£an Ê»arukh OrahÌ£ hÌ£ayim + asher hÌ£iber Yosef KÌ£aro ... Ê»im hÌ£idushe dinim she-hishmitÌ£ ha-gaʼon ... vÌ£e-himtsiʼam + ... Mosheh Iserlish + author_vern_display: "â€×™×©×¨×ל מ×יר,†â€×”כהן" + subject_addl_t: + - Customs and practices + title_display: Sefer Mishnah berurah + id: '92828023' + subject_topic_facet: + - Karo, Joseph ben Ephraim, 1488-1575 + - Jewish law + - Judaism + lc_alpha_facet: + - BM + subtitle_t: + - vÌ£e-hu perush yafeh u-menupeh Ê»al ShulhÌ£an Ê»arukh OrahÌ£ hÌ£ayim asher hÌ£iber Yosef + KÌ£aro ... Ê»im hÌ£idushe dinim she-hishmitÌ£ ha-gaʼon ... vÌ£e-himtsiʼam ... Mosheh + Iserlish / + - "â€×•×”×•× ×¤×™×¨×•×© יפה ×•×ž× ×¤×” על שלחן ערוך ×רח ×—×™×™× ×שר חבר יוסף ק×רו ... ×¢× ×—×™×“×•×©×™ ×“×™× ×™× + שהשמיט ×”×’×ון ... והמצי×× ×ž×©×” ×יסרליש /â€" + author_t: + - Israel Meir, ha-Kohen, + - "â€×™×©×¨×ל מ×יר,†â€×”כהן" + lc_1letter_facet: + - B - Philosophy, Psychology, Religion + marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>03361cam + a2200493 a 4500</leader><controlfield tag=\"001\"> 92828023 </controlfield><controlfield + tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090122150744.0</controlfield><controlfield + tag=\"008\">921008m19929999is 000 0 heb </controlfield><datafield + tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\"> 92828023 </subfield></datafield><datafield + tag=\"035\" ind1=\" \" ind2=\" \"><subfield code=\"a\">(CStRLIN)DCLH92-B2385</subfield></datafield><datafield + tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC-R</subfield><subfield + code=\"c\">DLC-R</subfield><subfield code=\"d\">DLC-R</subfield><subfield code=\"d\">DLC</subfield></datafield><datafield + tag=\"050\" ind1=\"0\" ind2=\"0\"><subfield code=\"a\">BM520.88.A53</subfield><subfield + code=\"b\">I88 1992b</subfield></datafield><datafield tag=\"066\" ind1=\" \" ind2=\" + \"><subfield code=\"c\">(2</subfield></datafield><datafield tag=\"100\" ind1=\"0\" + ind2=\" \"><subfield code=\"6\">880-01</subfield><subfield code=\"a\">Israel Meir,</subfield><subfield + code=\"c\">ha-Kohen,</subfield><subfield code=\"d\">1838-1933.</subfield></datafield><datafield + tag=\"240\" ind1=\"1\" ind2=\"0\"><subfield code=\"6\">880-02</subfield><subfield + code=\"a\">Mishnah berurah</subfield></datafield><datafield tag=\"245\" ind1=\"1\" + ind2=\"0\"><subfield code=\"6\">880-03</subfield><subfield code=\"a\">Sefer Mishnah + berurah :</subfield><subfield code=\"b\">vÌ£e-hu perush yafeh u-menupeh Ê»al ShulhÌ£an + Ê»arukh OrahÌ£ hÌ£ayim asher hÌ£iber Yosef KÌ£aro ... Ê»im hÌ£idushe dinim she-hishmitÌ£ + ha-gaʼon ... vÌ£e-himtsiʼam ... Mosheh Iserlish /</subfield><subfield code=\"c\">kol + eleh hÌ£ibarti [z.o. asafti vÌ£e-Ê»arakhti] YisÌraʼel Meʼir b.R. Aryeh Zeʼev ha-Kohen.</subfield></datafield><datafield + tag=\"250\" ind1=\" \" ind2=\" \"><subfield code=\"6\">880-04</subfield><subfield + code=\"a\">Hotsaʼah hÌ£adashah, menukÌ£edet u-mefusekÌ£et uve-fiÊ»nuahÌ£ rashe-tevot + uve-hagahah medukÌ£dekÌ£et.</subfield></datafield><datafield tag=\"260\" ind1=\" + \" ind2=\" \"><subfield code=\"6\">880-05</subfield><subfield code=\"a\">[Jerusalem? + :</subfield><subfield code=\"b\">hÌ£. mo. l. ],</subfield><subfield code=\"c\">752-<[768]> + [1992-<2007 or 2008>]</subfield><subfield code=\"e\">(Yerushalayim :</subfield><subfield + code=\"f\">Nidpas Ê»a. y. Makhon le-hotsaʼat sefarim Ê»A. L.B.)</subfield></datafield><datafield + tag=\"300\" ind1=\" \" ind2=\" \"><subfield code=\"a\">v. <1-5> ;</subfield><subfield + code=\"c\">29 cm.</subfield></datafield><datafield tag=\"500\" ind1=\" \" ind2=\" + \"><subfield code=\"a\">Title on cover <v. 2-3, 5>: Sefer Mishnah berurah + ha-menukÌ£ad.</subfield></datafield><datafield tag=\"500\" ind1=\" \" ind2=\" \"><subfield + code=\"a\">Vol. 4- has ed. statement: Mahadura meyuhÌ£edet Ê»im hagahot vÌ£e-heÊ»arot + \"Ish matsliahÌ£\" la-Sefaradim vÌ£a-Ê»adot ha-MizrahÌ£.</subfield></datafield><datafield + tag=\"500\" ind1=\" \" ind2=\" \"><subfield code=\"a\">Vol. 4- published: Bene + BerakÌ£ : \"Mekhon ha-Rav MatsliahÌ£\" she-Ê»a. y. Mosdot Yeshivat \"Kise RahÌ£amim\" + Sefaradit.</subfield></datafield><datafield tag=\"500\" ind1=\" \" ind2=\" \"><subfield + code=\"a\">Includes text of ShulhÌ£an Ê»arukh, OrahÌ£ hÌ£ayim.</subfield></datafield><datafield + tag=\"500\" ind1=\" \" ind2=\" \"><subfield code=\"a\">Includes Beʼer ha-Golah + by Mosheh RavkÌ£ash, Baʼer hetÌ£ev by Judah ben Simon Ashkenazi, ShaÊ»are teshuvah + by HÌ£ayim Mordekhai Margaliyot.</subfield></datafield><datafield tag=\"600\" ind1=\"1\" + ind2=\"0\"><subfield code=\"a\">Karo, Joseph ben Ephraim,</subfield><subfield + code=\"d\">1488-1575.</subfield><subfield code=\"t\">OrahÌ£ hÌ£ayim.</subfield></datafield><datafield + tag=\"650\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Jewish law.</subfield></datafield><datafield + tag=\"650\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Judaism</subfield><subfield + code=\"x\">Customs and practices.</subfield></datafield><datafield tag=\"700\" + ind1=\"1\" ind2=\" \"><subfield code=\"6\">880-06</subfield><subfield code=\"a\">Isserles, + Moses ben Israel,</subfield><subfield code=\"d\">ca. 1525-1572.</subfield></datafield><datafield + tag=\"700\" ind1=\"1\" ind2=\"2\"><subfield code=\"6\">880-07</subfield><subfield + code=\"a\">Karo, Joseph ben Ephraim,</subfield><subfield code=\"d\">1488-1575.</subfield><subfield + code=\"t\">OrahÌ£ hÌ£ayim.</subfield></datafield><datafield tag=\"740\" ind1=\"0\" + ind2=\"2\"><subfield code=\"6\">880-08</subfield><subfield code=\"a\">Mishnah + berurah.</subfield></datafield><datafield tag=\"740\" ind1=\"0\" ind2=\"2\"><subfield + code=\"6\">880-09</subfield><subfield code=\"a\">Sefer Mishnah berurah ha-menukÌ£ad.</subfield></datafield><datafield + tag=\"740\" ind1=\"0\" ind2=\"2\"><subfield code=\"6\">880-10</subfield><subfield + code=\"a\">Ish matsliahÌ£.</subfield></datafield><datafield tag=\"880\" ind1=\"0\" + ind2=\" \"><subfield code=\"6\">100-01/(2/râ€</subfield><subfield code=\"a\">â€×™×©×¨×ל + מ×יר,â€</subfield><subfield code=\"c\">â€×”כהן.</subfield></datafield><datafield + tag=\"880\" ind1=\"1\" ind2=\"0\"><subfield code=\"6\">240-02/(2/râ€</subfield><subfield + code=\"a\">â€×ž×©× ×” ברורה</subfield></datafield><datafield tag=\"880\" ind1=\"1\" + ind2=\"0\"><subfield code=\"6\">245-03/(2/râ€</subfield><subfield code=\"a\">â€×¡×¤×¨ + ×ž×©× ×” ברורה :â€</subfield><subfield code=\"b\">â€×•×”×•× ×¤×™×¨×•×© יפה ×•×ž× ×¤×” על שלחן ערוך + ×רח ×—×™×™× ×שר חבר יוסף ק×רו ... ×¢× ×—×™×“×•×©×™ ×“×™× ×™× ×©×”×©×ž×™×˜ ×”×’×ון ... והמצי×× ×ž×©×” ×יסרליש + /â€</subfield><subfield code=\"c\">â€×›×œ ×לה חיברתי [×–×´× ×ספתי וערכתי] ישר×ל מ×יר + בר׳ ×ריה ×–×ב הכהן.</subfield></datafield><datafield tag=\"880\" ind1=\" \" ind2=\" + \"><subfield code=\"6\">250-04/(2/râ€</subfield><subfield code=\"a\">â€×”וצ××” חדשה, + ×ž× ×§×“×ª ומפסקת ×•×‘×¤×¢× ×•×— ר×שי־תבות ובהגהה מדקדקת.</subfield></datafield><datafield + tag=\"880\" ind1=\" \" ind2=\" \"><subfield code=\"6\">260-05/(2/râ€</subfield><subfield + code=\"a\">â€[Jerusalem? :â€</subfield><subfield code=\"b\">â€×—מו״ל,â€</subfield><subfield + code=\"c\">â€â€ª752-<[768]> [1992-<2007 or 2008>]â€</subfield><subfield + code=\"e\">â€(×™×¨×•×©×œ×™× :â€</subfield><subfield code=\"f\">â€× דפס ×¢×´×™ מכון להוצ×ת ×¡×¤×¨×™× + ×¢.ל.ב.)‬</subfield></datafield><datafield tag=\"880\" ind1=\"0\" ind2=\"4\"><subfield + code=\"6\">630-00/(2/râ€</subfield><subfield code=\"a\">â€×©×œ×—ן ערוך.â€</subfield><subfield + code=\"p\">â€×רח ×—×™×™×.</subfield></datafield><datafield tag=\"880\" ind1=\"1\" + ind2=\" \"><subfield code=\"6\">700-06/(2/râ€</subfield><subfield code=\"a\">â€×יסרליש, + משה.</subfield></datafield><datafield tag=\"880\" ind1=\"1\" ind2=\"2\"><subfield + code=\"6\">700-07/(2/râ€</subfield><subfield code=\"a\">â€×§×רו, יוסף.â€</subfield><subfield + code=\"t\">â€×ורח ×—×™×™×.</subfield></datafield><datafield tag=\"880\" ind1=\"0\" + ind2=\"2\"><subfield code=\"6\">740-08/(2/râ€</subfield><subfield code=\"a\">â€×ž×©× ×” + ברורה.</subfield></datafield><datafield tag=\"880\" ind1=\"0\" ind2=\"2\"><subfield + code=\"6\">740-09/(2/râ€</subfield><subfield code=\"a\">â€×¡×¤×¨ ×ž×©× ×” ברורה ×”×ž× ×§×“.</subfield></datafield><datafield + tag=\"880\" ind1=\"0\" ind2=\"2\"><subfield code=\"6\">740-10/(2/r</subfield><subfield + code=\"a\">×יש מצליח.</subfield></datafield></record></collection>" + published_display: + - Jerusalem? + author_display: Israel Meir, ha-Kohen, 1838-1933 + title_vern_display: "â€×¡×¤×¨ ×ž×©× ×” ברורה :â€" + lc_callnum_display: + - BM520.88.A53 I88 1992b + title_t: + - 'Sefer Mishnah berurah :' + - "â€×¡×¤×¨ ×ž×©× ×” ברורה :â€" + pub_date: + - '1992' + pub_date_sort: 1992 + published_vern_display: + - "â€[Jerusalem? :â€" + format: Book + subtitle_vern_display: "â€×•×”×•× ×¤×™×¨×•×© יפה ×•×ž× ×¤×” על שלחן ערוך ×רח ×—×™×™× ×שר חבר יוסף + ק×רו ... ×¢× ×—×™×“×•×©×™ ×“×™× ×™× ×©×”×©×ž×™×˜ ×”×’×ון ... והמצי×× ×ž×©×” ×יסרליש /â€" + lc_b4cutter_facet: + - BM520.88.A53 + material_type_display: + - v. <1-5> + subject_t: + - Karo, Joseph ben Ephraim, 1488-1575. OrahÌ£ hÌ£ayim + - Jewish law + - Judaism + - "â€×©×œ×—ן ערוך.†â€×רח ×—×™×™×" + title_sort: sefer mishnah berurah :vÌ£e-hu perush yafeh u-menupeh Ê»al shulhÌ£an Ê»arukh + orahÌ£ hÌ£ayim asher hÌ£iber yosef kÌ£aro ... Ê»im hÌ£idushe dinim she-hishmitÌ£ ha-gaʼon + ... vÌ£e-himtsiʼam ... mosheh iserlish + author_sort: Israel Meir haKohen 18381933 Mishnah berurah Sefer Mishnah berurah + vÌ£ehu perush yafeh umenupeh Ê»al ShulhÌ£an Ê»arukh OrahÌ£ hÌ£ayim asher hÌ£iber Yosef + KÌ£aro Ê»im hÌ£idushe dinim shehishmitÌ£ hagaʼon vÌ£ehimtsiʼam Mosheh Iserlish + title_addl_t: + - 'Sefer Mishnah berurah : vÌ£e-hu perush yafeh u-menupeh Ê»al ShulhÌ£an Ê»arukh OrahÌ£ + hÌ£ayim asher hÌ£iber Yosef KÌ£aro ... Ê»im hÌ£idushe dinim she-hishmitÌ£ ha-gaʼon ... + vÌ£e-himtsiʼam ... Mosheh Iserlish /' + - Mishnah berurah + - "â€×¡×¤×¨ ×ž×©× ×” ברורה :†â€×•×”×•× ×¤×™×¨×•×© יפה ×•×ž× ×¤×” על שלחן ערוך ×רח ×—×™×™× ×שר חבר יוסף ק×רו + ... ×¢× ×—×™×“×•×©×™ ×“×™× ×™× ×©×”×©×ž×™×˜ ×”×’×ון ... והמצי×× ×ž×©×” ×יסרליש /â€" + - "â€×ž×©× ×” ברורה" + author_addl_t: + - Isserles, Moses ben Israel, + - Karo, Joseph ben Ephraim, + - "â€×יסרליש, משה" + - "â€×§×רו, יוסף.â€" + title_added_entry_t: + - OrahÌ£ hÌ£ayim + - Mishnah berurah. + - Sefer Mishnah berurah ha-menukÌ£ad. + - Ish matsliahÌ£. + - "â€×ורח ×—×™×™×" + - "â€×ž×©× ×” ברורה" + - "â€×¡×¤×¨ ×ž×©× ×” ברורה ×”×ž× ×§×“" + - "×יש מצליח" + language_facet: + - Hebrew + timestamp: '2014-02-03T18:42:53.056Z' +- subtitle_display: 'kangnam yŏin kwa sin pÊ»albulchÊ»ul : Kim Hong-sin setÊ»ae rŭpÊ»o' + author_vern_display: "김 í™ì‹ , 1947-" + subject_addl_t: + - Korea (South) Social conditions + - Social conditions + title_display: Ajikto kŭrŏk chŏrŏk sasimnikka + id: '94120425' + subject_geo_facet: + - Seoul (Korea) + - Korea (South) + subject_topic_facet: + - Women + lc_alpha_facet: + - HQ + subtitle_t: + - 'kangnam yŏin kwa sin pÊ»albulchÊ»ul : Kim Hong-sin setÊ»ae rŭpÊ»o.' + - "강남 여ì¸ã€€ê³¼ã€€ì‹  팔불출 : 金 洪信 세태 르í¬" + author_t: + - Kim, Hong-sin, + - "김 í™ì‹ " + lc_1letter_facet: + - H - Social Sciences + marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>01149cam + a2200301 a 4500</leader><controlfield tag=\"001\"> 94120425 </controlfield><controlfield + tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090123075708.0</controlfield><controlfield + tag=\"008\">940328s1990 ko 000 0 kor d</controlfield><datafield + tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\"> 94120425 </subfield></datafield><datafield + tag=\"020\" ind1=\" \" ind2=\" \"><subfield code=\"c\">W3800</subfield></datafield><datafield + tag=\"035\" ind1=\" \" ind2=\" \"><subfield code=\"a\">(CStRLIN)DCLP94-B5791</subfield></datafield><datafield + tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">CLASIA</subfield><subfield + code=\"c\">CLASIA</subfield><subfield code=\"d\">DLC</subfield><subfield code=\"d\">CStRLIN</subfield><subfield + code=\"d\">DLC-R</subfield></datafield><datafield tag=\"042\" ind1=\" \" ind2=\" + \"><subfield code=\"a\">lccopycat</subfield></datafield><datafield tag=\"043\" + ind1=\" \" ind2=\" \"><subfield code=\"a\">a-ko---</subfield></datafield><datafield + tag=\"050\" ind1=\"0\" ind2=\"0\"><subfield code=\"a\">HQ1765.5</subfield><subfield + code=\"b\">.K46 1990</subfield></datafield><datafield tag=\"066\" ind1=\" \" ind2=\" + \"><subfield code=\"c\">$1</subfield></datafield><datafield tag=\"100\" ind1=\"1\" + ind2=\" \"><subfield code=\"6\">880-01</subfield><subfield code=\"a\">Kim, Hong-sin,</subfield><subfield + code=\"d\">1947-</subfield></datafield><datafield tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield + code=\"6\">880-02</subfield><subfield code=\"a\">Ajikto kŭrŏk chŏrŏk sasimnikka + :</subfield><subfield code=\"b\">kangnam yŏin kwa sin pÊ»albulchÊ»ul : Kim Hong-sin + setÊ»ae rŭpÊ»o.</subfield></datafield><datafield tag=\"250\" ind1=\" \" ind2=\" + \"><subfield code=\"6\">880-03</subfield><subfield code=\"a\">ChÊ»opÊ»an.</subfield></datafield><datafield + tag=\"260\" ind1=\" \" ind2=\" \"><subfield code=\"6\">880-04</subfield><subfield + code=\"a\">Sŏul :</subfield><subfield code=\"b\">Yŏwŏn ChÊ»ulpÊ»anʼguk,</subfield><subfield + code=\"c\">1990</subfield><subfield code=\"g\">(1992 printing)</subfield></datafield><datafield + tag=\"300\" ind1=\" \" ind2=\" \"><subfield code=\"a\">289 p. ;</subfield><subfield + code=\"c\">22 cm.</subfield></datafield><datafield tag=\"650\" ind1=\" \" ind2=\"0\"><subfield + code=\"a\">Women</subfield><subfield code=\"z\">Korea (South)</subfield><subfield + code=\"x\">Social conditions.</subfield></datafield><datafield tag=\"651\" ind1=\" + \" ind2=\"0\"><subfield code=\"a\">Seoul (Korea)</subfield><subfield code=\"x\">Social + conditions.</subfield></datafield><datafield tag=\"880\" ind1=\"1\" ind2=\" \"><subfield + code=\"6\">100-01/$1</subfield><subfield code=\"a\">김 í™ì‹ ,</subfield><subfield + code=\"d\">1947-</subfield></datafield><datafield tag=\"880\" ind1=\"1\" ind2=\"0\"><subfield + code=\"6\">245-02/$1</subfield><subfield code=\"a\">ì•„ì§ë„ 그ëŸã€€ì €ëŸã€€ì‚¬ì‹ë‹ˆê¹Œ :</subfield><subfield + code=\"b\">강남 여ì¸ã€€ê³¼ã€€ì‹  팔불출 : 金 洪信 세태 르í¬.</subfield></datafield><datafield tag=\"880\" + ind1=\" \" ind2=\" \"><subfield code=\"6\">250-03/$1</subfield><subfield code=\"a\">ì´ˆíŒ.</subfield></datafield><datafield + tag=\"880\" ind1=\" \" ind2=\" \"><subfield code=\"6\">260-04/$1</subfield><subfield + code=\"a\">서울 :</subfield><subfield code=\"b\">女苑 出版局,</subfield><subfield code=\"c\">1990</subfield><subfield + code=\"g\">(1992 printing)</subfield></datafield></record></collection>" + published_display: + - Sŏul + author_display: Kim, Hong-sin, 1947- + title_vern_display: "ì•„ì§ë„ 그ëŸã€€ì €ëŸã€€ì‚¬ì‹ë‹ˆê¹Œ" + lc_callnum_display: + - HQ1765.5 .K46 1990 + title_t: + - 'Ajikto kŭrŏk chŏrŏk sasimnikka :' + - "ì•„ì§ë„ 그ëŸã€€ì €ëŸã€€ì‚¬ì‹ë‹ˆê¹Œ" + pub_date: + - '1990' + pub_date_sort: 1990 + published_vern_display: + - "서울" + format: Book + subtitle_vern_display: "강남 여ì¸ã€€ê³¼ã€€ì‹  팔불출 : 金 洪信 세태 르í¬" + lc_b4cutter_facet: + - HQ1765.5 + material_type_display: + - 289 p. + subject_t: + - Women + - Seoul (Korea) + title_sort: 'ajikto kŭrŏk chŏrŏk sasimnikka :kangnam yŏin kwa sin pÊ»albulchÊ»ul + : kim hong-sin setÊ»ae rŭpÊ»o' + author_sort: Kim Hongsin 1947 Ajikto kŭrŏk chŏrŏk sasimnikka kangnam yŏin kwa + sin pÊ»albulchÊ»ul Kim Hongsin setÊ»ae rŭpÊ»o + title_addl_t: + - 'Ajikto kŭrŏk chŏrŏk sasimnikka : kangnam yŏin kwa sin pÊ»albulchÊ»ul : Kim + Hong-sin setÊ»ae rŭpÊ»o.' + - "ì•„ì§ë„ 그ëŸã€€ì €ëŸã€€ì‚¬ì‹ë‹ˆê¹Œ : 강남 여ì¸ã€€ê³¼ã€€ì‹  팔불출 : 金 洪信 세태 르í¬" + language_facet: + - Korean + timestamp: '2014-02-03T18:42:53.056Z' +- subtitle_display: dar khiradvarziÌ„-i siyaÌ„siÌ„ va huviÌ„yat-i maÌ„ IÌ„raÌ„niÌ„yaÌ„n + author_vern_display: "â€Ø±Ø¬Ø§ÙŠÙ‰ØŒ Ùرهنگ ." + subject_addl_t: + - Iran + - Ethnic identity + - Politics and government + - Civilization + title_display: MaÊ»rakah-ʼi jahaÌ„nʹbiÌ„nīʹhaÌ„ + id: '96933325' + subject_geo_facet: + - Iran + subject_topic_facet: + - Political science + - Iranians + lc_alpha_facet: + - DS + title_series_t: + - Sipihr-i farhang va jaÌ„miÊ»ah ; 1 + - "â€Ø³Ù¾Ù‡Ø± Ùرهنگ Ùˆ جامعه ؛†â€1" + subtitle_t: + - dar khiradvarziÌ„-i siyaÌ„siÌ„ va huviÌ„yat-i maÌ„ IÌ„raÌ„niÌ„yaÌ„n / + - "â€Ø¯Ø± خردورزى سياسى Ùˆ هويت ما ايرانيان /â€" + author_t: + - RajaÌ„yiÌ„, Farhang, + - "â€Ø±Ø¬Ø§ÙŠÙ‰ØŒ Ùرهنگ ." + lc_1letter_facet: + - D - World History + marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>01484cam + a2200349 a 4500</leader><controlfield tag=\"001\"> 96933325 </controlfield><controlfield + tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090121112252.0</controlfield><controlfield + tag=\"008\">040115s1994 ir b 001 0 per </controlfield><datafield + tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\"> 96933325 </subfield></datafield><datafield + tag=\"035\" ind1=\" \" ind2=\" \"><subfield code=\"a\">(CStRLIN)DCLN04-B274</subfield></datafield><datafield + tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC-R</subfield><subfield + code=\"c\">DLC-R</subfield></datafield><datafield tag=\"042\" ind1=\" \" ind2=\" + \"><subfield code=\"a\">lcode</subfield></datafield><datafield tag=\"043\" ind1=\" + \" ind2=\" \"><subfield code=\"a\">a-ir---</subfield></datafield><datafield tag=\"050\" + ind1=\"0\" ind2=\"0\"><subfield code=\"a\">DS274</subfield><subfield code=\"b\">.R327 + 1994</subfield></datafield><datafield tag=\"066\" ind1=\" \" ind2=\" \"><subfield + code=\"c\">(3</subfield><subfield code=\"c\">(4</subfield></datafield><datafield + tag=\"100\" ind1=\"1\" ind2=\" \"><subfield code=\"6\">880-01</subfield><subfield + code=\"a\">RajaÌ„yiÌ„, Farhang,</subfield><subfield code=\"d\">1952 or 3-</subfield></datafield><datafield + tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield code=\"6\">880-02</subfield><subfield + code=\"a\">MaÊ»rakah-ʼi jahaÌ„nʹbiÌ„nīʹhaÌ„ :</subfield><subfield code=\"b\">dar + khiradvarziÌ„-i siyaÌ„siÌ„ va huviÌ„yat-i maÌ„ IÌ„raÌ„niÌ„yaÌ„n /</subfield><subfield code=\"c\">Farhang + RajāʼiÌ„.</subfield></datafield><datafield tag=\"250\" ind1=\" \" ind2=\" \"><subfield + code=\"6\">880-03</subfield><subfield code=\"a\">ChaÌ„p-i 1.</subfield></datafield><datafield + tag=\"260\" ind1=\" \" ind2=\" \"><subfield code=\"6\">880-04</subfield><subfield + code=\"a\">TihraÌ„n :</subfield><subfield code=\"b\">IhÌ£yaÌ„-yi KitaÌ„b,</subfield><subfield + code=\"c\">1373 [1994 or 1995]</subfield></datafield><datafield tag=\"300\" ind1=\" + \" ind2=\" \"><subfield code=\"a\">323 p. ;</subfield><subfield code=\"c\">22 + cm.</subfield></datafield><datafield tag=\"440\" ind1=\" \" ind2=\"0\"><subfield + code=\"6\">880-05</subfield><subfield code=\"a\">Sipihr-i farhang va jaÌ„miÊ»ah + ;</subfield><subfield code=\"v\">1</subfield></datafield><datafield tag=\"504\" + ind1=\" \" ind2=\" \"><subfield code=\"a\">Includes bibliographical references + (p.287-320) and index.</subfield></datafield><datafield tag=\"651\" ind1=\" \" + ind2=\"0\"><subfield code=\"a\">Iran</subfield><subfield code=\"x\">Politics and + government.</subfield></datafield><datafield tag=\"650\" ind1=\" \" ind2=\"0\"><subfield + code=\"a\">Political science</subfield><subfield code=\"z\">Iran.</subfield></datafield><datafield + tag=\"650\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Iranians</subfield><subfield + code=\"x\">Ethnic identity.</subfield></datafield><datafield tag=\"651\" ind1=\" + \" ind2=\"0\"><subfield code=\"a\">Iran</subfield><subfield code=\"x\">Civilization.</subfield></datafield><datafield + tag=\"880\" ind1=\"1\" ind2=\" \"><subfield code=\"6\">100-01/(4/râ€</subfield><subfield + code=\"a\">â€Ø±Ø¬Ø§ÙŠÙ‰ØŒ Ùرهنگ .</subfield></datafield><datafield tag=\"880\" ind1=\"1\" + ind2=\"0\"><subfield code=\"6\">245-02/(3/râ€</subfield><subfield code=\"a\">â€Ù…عركۀ + جهان‌بينىها :â€</subfield><subfield code=\"b\">â€Ø¯Ø± خردورزى سياسى Ùˆ هويت ما ايرانيان + /â€</subfield><subfield code=\"c\">â€Ùرهنگ رجائى.</subfield></datafield><datafield + tag=\"880\" ind1=\" \" ind2=\" \"><subfield code=\"6\">250-03/(4/râ€</subfield><subfield + code=\"a\">â€Ú†Ø§Ù¾ 1.</subfield></datafield><datafield tag=\"880\" ind1=\" \" ind2=\" + \"><subfield code=\"6\">260-04/(3/râ€</subfield><subfield code=\"a\">â€ØªÙ‡Ø±Ø§Ù† :â€</subfield><subfield + code=\"b\">â€Ø§Øياء كتاب،â€</subfield><subfield code=\"c\">â€â€ª1373 [1994 or 1995]‬.</subfield></datafield><datafield + tag=\"880\" ind1=\" \" ind2=\"0\"><subfield code=\"6\">440-05/(3/râ€</subfield><subfield + code=\"a\">â€Ø³Ù¾Ù‡Ø± Ùرهنگ Ùˆ جامعه Ø›â€</subfield><subfield code=\"v\">â€1</subfield></datafield></record></collection>" + published_display: + - TihraÌ„n + author_display: RajaÌ„yiÌ„, Farhang, 1952 or 3- + title_vern_display: "â€Ù…عركۀ جهان‌بينىها :â€" + lc_callnum_display: + - DS274 .R327 1994 + title_t: + - 'MaÊ»rakah-ʼi jahaÌ„nʹbiÌ„nīʹhaÌ„ :' + - "â€Ù…عركۀ جهان‌بينىها :â€" + pub_date: + - '1994' + pub_date_sort: 1994 + published_vern_display: + - "â€ØªÙ‡Ø±Ø§Ù† :â€" + format: Book + subtitle_vern_display: "â€Ø¯Ø± خردورزى سياسى Ùˆ هويت ما ايرانيان /â€" + material_type_display: + - 323 p. + lc_b4cutter_facet: + - DS274 + subject_t: + - Political science + - Iranians + - Iran + title_sort: maÊ»rakah-ʼi jahaÌ„nʹbiÌ„nīʹhaÌ„ :dar khiradvarziÌ„-i siyaÌ„siÌ„ va huviÌ„yat-i + maÌ„ iÌ„raÌ„niÌ„yaÌ„n + author_sort: RajaÌ„yiÌ„ Farhang 1952 or 3 MaÊ»rakahʼi jahaÌ„nʹbiÌ„nīʹhaÌ„ dar khiradvarziÌ„i + siyaÌ„siÌ„ va huviÌ„yati maÌ„ IÌ„raÌ„niÌ„yaÌ„n + title_addl_t: + - 'MaÊ»rakah-ʼi jahaÌ„nʹbiÌ„nīʹhaÌ„ : dar khiradvarziÌ„-i siyaÌ„siÌ„ va huviÌ„yat-i maÌ„ + IÌ„raÌ„niÌ„yaÌ„n /' + - "â€Ù…عركۀ جهان‌بينىها :†â€Ø¯Ø± خردورزى سياسى Ùˆ هويت ما ايرانيان /â€" + language_facet: + - Persian + timestamp: '2014-02-03T18:42:53.056Z' +- lc_1letter_facet: + - P - Language & Literature + author_t: + - NaÌ„raÌ„yanÌ£a PanÌ£dÌ£itaÌ„caÌ„rya, + marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>01588cam + a2200313 a 4500</leader><controlfield tag=\"001\"> 2001417245</controlfield><controlfield + tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090121030347.0</controlfield><controlfield + tag=\"008\">011001m20009999ii 001 0 sano </controlfield><datafield + tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\"> 2001417245</subfield></datafield><datafield + tag=\"025\" ind1=\" \" ind2=\" \"><subfield code=\"a\">I-San-2001-417245; 11</subfield></datafield><datafield + tag=\"037\" ind1=\" \" ind2=\" \"><subfield code=\"b\">Library of Congress -- + New Delhi Overseas Office</subfield><subfield code=\"c\">Rs200.00 (v. 1)</subfield></datafield><datafield + tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC</subfield><subfield + code=\"c\">DLC</subfield><subfield code=\"d\">DLC</subfield></datafield><datafield + tag=\"041\" ind1=\"0\" ind2=\" \"><subfield code=\"a\">sanengkan</subfield></datafield><datafield + tag=\"042\" ind1=\" \" ind2=\" \"><subfield code=\"a\">lcode</subfield></datafield><datafield + tag=\"050\" ind1=\"0\" ind2=\"0\"><subfield code=\"a\">PK3798.N313</subfield><subfield + code=\"b\">S87 2000</subfield></datafield><datafield tag=\"100\" ind1=\"0\" ind2=\" + \"><subfield code=\"a\">NaÌ„raÌ„yanÌ£a PanÌ£dÌ£itaÌ„caÌ„rya,</subfield><subfield code=\"d\">13th + cent.</subfield></datafield><datafield tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield + code=\"a\">SumadhvavijayahÌ£ /</subfield><subfield code=\"c\">NaÌ„raÌ„yanÌ£apanÌ£dÌ£itaÌ„caÌ„ryaviracitahÌ£ + ; NaÌ„raÌ„yanÌ£apanÌ£dÌ£itaÌ„caÌ„ryaviracitabhaÌ„vaprakaÌ„sÌikaÌ„, VisÌvapatitiÌ„rthaviracitapadaÌ„rthadiÌ„pikodbodhikaÌ„, + ChalaÌ„riÌ„sÌesÌ£aÌ„caÌ„ryaviracitamandopakaÌ„rinÌ£iÌ„ iti vyaÌ„khyaÌ„natrayasametahÌ£ ; + edited by A.B. Shyamachar and S.R. Pandurangi.</subfield></datafield><datafield + tag=\"260\" ind1=\" \" ind2=\" \"><subfield code=\"a\">Bangalore :</subfield><subfield + code=\"b\">Dvaita Vedanta Studies and Research Foundation,</subfield><subfield + code=\"c\">2000-</subfield></datafield><datafield tag=\"300\" ind1=\" \" ind2=\" + \"><subfield code=\"a\">v. <1 > ;</subfield><subfield code=\"c\">25 cm.</subfield></datafield><datafield + tag=\"546\" ind1=\" \" ind2=\" \"><subfield code=\"a\">In Sanskrit; prefatory + matter in English and Kannada.</subfield></datafield><datafield tag=\"520\" ind1=\" + \" ind2=\" \"><subfield code=\"a\">Verse work on Madhva, 13th cent. Vaishnava + religious leader and exponent of dualistic philosophy; includes autocommentary + and two classical commentaries.</subfield></datafield><datafield tag=\"500\" ind1=\" + \" ind2=\" \"><subfield code=\"a\">Includes indexes.</subfield></datafield><datafield + tag=\"600\" ind1=\"0\" ind2=\"0\"><subfield code=\"a\">Madhva,</subfield><subfield + code=\"d\">13th cent.</subfield><subfield code=\"v\">Poetry.</subfield></datafield><datafield + tag=\"700\" ind1=\"0\" ind2=\"2\"><subfield code=\"a\">NaÌ„raÌ„yanÌ£a PanÌ£dÌ£itaÌ„caÌ„rya,</subfield><subfield + code=\"d\">17th cent.</subfield><subfield code=\"t\">BhaÌ„vaprakaÌ„sÌikaÌ„.</subfield><subfield + code=\"f\">2000.</subfield></datafield><datafield tag=\"700\" ind1=\"0\" ind2=\"2\"><subfield + code=\"a\">VisÌvapatitiÌ„rtha,</subfield><subfield code=\"d\">16th cent.</subfield><subfield + code=\"t\">PadaÌ„rthadiÌ„pikodbodhikaÌ„.</subfield><subfield code=\"f\">2000.</subfield></datafield><datafield + tag=\"700\" ind1=\"0\" ind2=\"2\"><subfield code=\"a\">ChalaÌ„risÌesÌ£aÌ„caÌ„rya.</subfield><subfield + code=\"t\">MandopakaÌ„rinÌ£iÌ„.</subfield><subfield code=\"f\">2000.</subfield></datafield><datafield + tag=\"700\" ind1=\"1\" ind2=\" \"><subfield code=\"a\">Shyamachar, A. B.</subfield></datafield><datafield + tag=\"700\" ind1=\"1\" ind2=\" \"><subfield code=\"a\">Pandurangi, S. R.</subfield></datafield></record></collection>" + published_display: + - Bangalore + author_display: NaÌ„raÌ„yanÌ£a PanÌ£dÌ£itaÌ„caÌ„rya, 13th cent + lc_callnum_display: + - PK3798.N313 S87 2000 + title_t: + - SumadhvavijayahÌ£ / + pub_date: + - '2000' + pub_date_sort: 2000 + format: Book + material_type_display: + - v. <1 > + lc_b4cutter_facet: + - PK3798.N313 + title_display: SumadhvavijayahÌ£ + subject_addl_t: + - Poetry + subject_t: + - Madhva, 13th cent + title_sort: sumadhvavijayahÌ£ + id: '2001417245' + author_sort: NaÌ„raÌ„yanÌ£a PanÌ£dÌ£itaÌ„caÌ„rya 13th cent SumadhvavijayahÌ£ + title_addl_t: + - SumadhvavijayahÌ£ / + subject_topic_facet: + - Madhva, 13th cent + author_addl_t: + - NaÌ„raÌ„yanÌ£a PanÌ£dÌ£itaÌ„caÌ„rya, + - VisÌvapatitiÌ„rtha, + - ChalaÌ„risÌesÌ£aÌ„caÌ„rya. + - Shyamachar, A. B. + - Pandurangi, S. R. + title_added_entry_t: + - BhaÌ„vaprakaÌ„sÌikaÌ„ + - PadaÌ„rthadiÌ„pikodbodhikaÌ„ + - MandopakaÌ„rinÌ£iÌ„ + lc_alpha_facet: + - PK + language_facet: + - Sanskrit + timestamp: '2014-02-03T18:42:53.056Z' +- lc_1letter_facet: + - U - Military Science + author_t: + - Wuld MawlaÌ„y al-Zayn, Sayyid MuhÌ£ammad wuld Sayyid. + - "ولد مولاي الزين، سيد Ù…Øمد ولد سيد" + marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>01197cam + a22003014a 4500</leader><controlfield tag=\"001\"> 2003546302</controlfield><controlfield + tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090123173626.0</controlfield><controlfield + tag=\"008\">030922s2003 mu 000 0 ara </controlfield><datafield + tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\"> 2003546302</subfield></datafield><datafield + tag=\"035\" ind1=\" \" ind2=\" \"><subfield code=\"a\">(CStRLIN)DCLN03-B4961</subfield></datafield><datafield + tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC-R</subfield><subfield + code=\"c\">DLC-R</subfield><subfield code=\"d\">DLC</subfield></datafield><datafield + tag=\"042\" ind1=\" \" ind2=\" \"><subfield code=\"a\">lcode</subfield></datafield><datafield + tag=\"050\" ind1=\"0\" ind2=\"0\"><subfield code=\"a\">U21.2</subfield><subfield + code=\"b\">.W85 2003</subfield></datafield><datafield tag=\"066\" ind1=\" \" ind2=\" + \"><subfield code=\"c\">(3</subfield></datafield><datafield tag=\"100\" ind1=\"1\" + ind2=\" \"><subfield code=\"6\">880-01</subfield><subfield code=\"a\">Wuld MawlaÌ„y + al-Zayn, Sayyid MuhÌ£ammad wuld Sayyid.</subfield></datafield><datafield tag=\"245\" + ind1=\"1\" ind2=\"3\"><subfield code=\"6\">880-02</subfield><subfield code=\"a\">al-HÌ£arb + fiÌ„ al-alfiÌ„yah al-thaÌ„lithah /</subfield><subfield code=\"c\">bi-qalam Sayyid + MuhÌ£ammad wuld Sayyid wuld MawlaÌ„y al-Zayn.</subfield></datafield><datafield tag=\"260\" + ind1=\" \" ind2=\" \"><subfield code=\"6\">880-03</subfield><subfield code=\"a\">NuwaÌ„kshuÌ„tÌ£ + :</subfield><subfield code=\"b\">[s.n.],</subfield><subfield code=\"c\">2003.</subfield></datafield><datafield + tag=\"300\" ind1=\" \" ind2=\" \"><subfield code=\"a\">128 p. ;</subfield><subfield + code=\"c\">20 cm.</subfield></datafield><datafield tag=\"650\" ind1=\" \" ind2=\"0\"><subfield + code=\"a\">War</subfield><subfield code=\"x\">History</subfield><subfield code=\"y\">21st + century.</subfield></datafield><datafield tag=\"650\" ind1=\" \" ind2=\"0\"><subfield + code=\"a\">Military art and science</subfield><subfield code=\"x\">History</subfield><subfield + code=\"y\">21st century.</subfield></datafield><datafield tag=\"650\" ind1=\" + \" ind2=\"0\"><subfield code=\"a\">War</subfield><subfield code=\"x\">Forecasting.</subfield></datafield><datafield + tag=\"650\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Military art and science</subfield><subfield + code=\"x\">Forecasting.</subfield></datafield><datafield tag=\"650\" ind1=\" \" + ind2=\"0\"><subfield code=\"a\">Warfare, Conventional.</subfield></datafield><datafield + tag=\"650\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Military weapons.</subfield></datafield><datafield + tag=\"880\" ind1=\"1\" ind2=\" \"><subfield code=\"6\">100-01/(3/r</subfield><subfield + code=\"a\">ولد مولاي الزين، سيد Ù…Øمد ولد سيد.</subfield></datafield><datafield + tag=\"880\" ind1=\"1\" ind2=\"2\"><subfield code=\"6\">245-02/(3/r</subfield><subfield + code=\"a\">الØرب ÙÙŠ الألÙية الثالثة /</subfield><subfield code=\"c\">بقلم سيد + Ù…Øمد ولد سيد ولد مولاي الزين.</subfield></datafield><datafield tag=\"880\" ind1=\" + \" ind2=\" \"><subfield code=\"6\">260-03/(3/r</subfield><subfield code=\"a\">نواكشوط + :</subfield><subfield code=\"b\">[s.n.]ØŒ</subfield><subfield code=\"c\">2003.</subfield></datafield></record></collection>" + published_display: + - NuwaÌ„kshuÌ„tÌ£ + title_vern_display: "الØرب ÙÙŠ الألÙية الثالثة" + author_display: Wuld MawlaÌ„y al-Zayn, Sayyid MuhÌ£ammad wuld Sayyid + lc_callnum_display: + - U21.2 .W85 2003 + title_t: + - al-HÌ£arb fiÌ„ al-alfiÌ„yah al-thaÌ„lithah / + - "الØرب ÙÙŠ الألÙية الثالثة" + pub_date: + - '2003' + pub_date_sort: 2003 + published_vern_display: + - "نواكشوط" + format: Book + author_vern_display: "ولد مولاي الزين، سيد Ù…Øمد ولد سيد" + material_type_display: + - 128 p. + lc_b4cutter_facet: + - U21.2 + title_display: al-HÌ£arb fiÌ„ al-alfiÌ„yah al-thaÌ„lithah + subject_addl_t: + - History 21st century + - Forecasting + subject_t: + - War + - Military art and science + - Warfare, Conventional + - Military weapons + subject_era_facet: + - 21st century + title_sort: hÌ£arb fiÌ„ al-alfiÌ„yah al-thaÌ„lithah + id: '2003546302' + author_sort: Wuld MawlaÌ„y alZayn Sayyid MuhÌ£ammad wuld Sayyid HÌ£arb fiÌ„ alalfiÌ„yah + althaÌ„lithah + title_addl_t: + - al-HÌ£arb fiÌ„ al-alfiÌ„yah al-thaÌ„lithah / + - "الØرب ÙÙŠ الألÙية الثالثة" + subject_topic_facet: + - War + - Military art and science + - Warfare, Conventional + - Military weapons + lc_alpha_facet: + - U + language_facet: + - Arabic + timestamp: '2014-02-03T18:42:53.056Z' +- lc_1letter_facet: + - D - World History + author_t: + - Bstan-ʼdzin-mkhas-grub, + marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>00875cam + a22002534a 4500</leader><controlfield tag=\"001\"> 2004310986</controlfield><controlfield + tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090123105515.0</controlfield><controlfield + tag=\"008\">040812s2004 cc a 000 0 tibo </controlfield><datafield + tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\"> 2004310986</subfield></datafield><datafield + tag=\"025\" ind1=\" \" ind2=\" \"><subfield code=\"a\">Ch-Tib-2004-310986; 16</subfield></datafield><datafield + tag=\"037\" ind1=\" \" ind2=\" \"><subfield code=\"b\">Library of Congress -- + New Delhi Overseas Office</subfield><subfield code=\"c\">Rs154.00</subfield></datafield><datafield + tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC</subfield><subfield + code=\"c\">DLC</subfield><subfield code=\"d\">DLC</subfield></datafield><datafield + tag=\"042\" ind1=\" \" ind2=\" \"><subfield code=\"a\">lcode</subfield></datafield><datafield + tag=\"043\" ind1=\" \" ind2=\" \"><subfield code=\"a\">a-cc-ti</subfield></datafield><datafield + tag=\"050\" ind1=\"0\" ind2=\"0\"><subfield code=\"a\">DS797.82.B663</subfield><subfield + code=\"b\">B75 2004</subfield></datafield><datafield tag=\"100\" ind1=\"0\" ind2=\" + \"><subfield code=\"a\">Bstan-ʼdzin-mkhas-grub,</subfield><subfield code=\"d\">1967-</subfield></datafield><datafield + tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield code=\"a\">Bon-brgyaʼi lo rgyus lugs + gñis gsal baʼi me loṅ zÌes bya ba bzÌugs so /</subfield><subfield code=\"c\">Bstan-ʼdzin-mkhas-grub + kyis brtsams.</subfield></datafield><datafield tag=\"260\" ind1=\" \" ind2=\" + \"><subfield code=\"a\">[Lha-sa :</subfield><subfield code=\"b\">s.n.,</subfield><subfield + code=\"c\">2004]</subfield></datafield><datafield tag=\"300\" ind1=\" \" ind2=\" + \"><subfield code=\"a\">149 p. :</subfield><subfield code=\"b\">ill. ;</subfield><subfield + code=\"c\">21 cm.</subfield></datafield><datafield tag=\"546\" ind1=\" \" ind2=\" + \"><subfield code=\"a\">In Tibetan.</subfield></datafield><datafield tag=\"520\" + ind1=\" \" ind2=\" \"><subfield code=\"a\">Historical account of Bon-brgya in + Tibet during 7th-9th cent.</subfield></datafield><datafield tag=\"651\" ind1=\" + \" ind2=\"0\"><subfield code=\"a\">Bon-brgya (China)</subfield><subfield code=\"x\">History.</subfield></datafield><datafield + tag=\"651\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Bon-brgya (China)</subfield><subfield + code=\"x\">Kings and rulers.</subfield></datafield></record></collection>" + published_display: + - Lha-sa + author_display: Bstan-ʼdzin-mkhas-grub, 1967- + lc_callnum_display: + - DS797.82.B663 B75 2004 + title_t: + - Bon-brgyaʼi lo rgyus lugs gñis gsal baʼi me loṅ zÌes bya ba bzÌugs so / + pub_date: + - '2004' + pub_date_sort: 2004 + format: Book + material_type_display: + - 149 p. + lc_b4cutter_facet: + - DS797.82.B663 + title_display: Bon-brgyaʼi lo rgyus lugs gñis gsal baʼi me loṅ zÌes bya ba bzÌugs + so + subject_addl_t: + - History + - Kings and rulers + subject_t: + - Bon-brgya (China) + title_sort: bon-brgyaʼi lo rgyus lugs gñis gsal baʼi me loṅ zÌes bya ba bzÌugs + so + id: '2004310986' + author_sort: Bstanʼdzinmkhasgrub 1967 Bonbrgyaʼi lo rgyus lugs gñis gsal baʼi me + loṅ zÌes bya ba bzÌugs so + title_addl_t: + - Bon-brgyaʼi lo rgyus lugs gñis gsal baʼi me loṅ zÌes bya ba bzÌugs so / + subject_geo_facet: + - Bon-brgya (China) + lc_alpha_facet: + - DS + language_facet: + - Tibetan + timestamp: '2014-02-03T18:42:53.056Z' +- subtitle_display: min jald al-dhaÌ„t ilaÌ sÌ£idq al-sharhÌ£ + author_vern_display: "أبو الخير، علي عبد الØميد" + subject_addl_t: + - 20th century + - 21st century + title_display: ThuquÌ„b fiÌ„ Ê»aql al-ummah + subject_era_facet: + - 20th century + - 21st century + id: '2005461726' + subject_topic_facet: + - Islam + lc_alpha_facet: + - BP + subtitle_t: + - min jald al-dhaÌ„t ilaÌ sÌ£idq al-sharhÌ£. + - "من جلد الذات إلى صدق الشرØ" + author_t: + - AbuÌ„ al-Khayr, Ê»AliÌ„ Ê»Abd al-HÌ£amiÌ„d. + - "أبو الخير، علي عبد الØميد" + lc_1letter_facet: + - B - Philosophy, Psychology, Religion + marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>01127nam + a2200277 a 4500</leader><controlfield tag=\"001\"> 2005461726</controlfield><controlfield + tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090126155550.0</controlfield><controlfield + tag=\"008\">070712s2006 ua 000 0 ara d</controlfield><datafield + tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\"> 2005461726</subfield></datafield><datafield + tag=\"035\" ind1=\" \" ind2=\" \"><subfield code=\"a\">(CStRLIN)DCLN07-B4171</subfield></datafield><datafield + tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">EMU</subfield><subfield + code=\"c\">EMU</subfield><subfield code=\"d\">CUY</subfield><subfield code=\"d\">DLC-R</subfield></datafield><datafield + tag=\"042\" ind1=\" \" ind2=\" \"><subfield code=\"a\">lccopycat</subfield><subfield + code=\"a\">lcode</subfield></datafield><datafield tag=\"050\" ind1=\"0\" ind2=\"0\"><subfield + code=\"a\">BP161.3</subfield><subfield code=\"b\">.A27 2006</subfield></datafield><datafield + tag=\"066\" ind1=\" \" ind2=\" \"><subfield code=\"c\">(3</subfield></datafield><datafield + tag=\"100\" ind1=\"1\" ind2=\" \"><subfield code=\"6\">880-01</subfield><subfield + code=\"a\">AbuÌ„ al-Khayr, Ê»AliÌ„ Ê»Abd al-HÌ£amiÌ„d.</subfield></datafield><datafield + tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield code=\"6\">880-02</subfield><subfield + code=\"a\">ThuquÌ„b fiÌ„ Ê»aql al-ummah :</subfield><subfield code=\"b\">min jald + al-dhaÌ„t ilaÌ sÌ£idq al-sharhÌ£.</subfield></datafield><datafield tag=\"250\" ind1=\" + \" ind2=\" \"><subfield code=\"6\">880-03</subfield><subfield code=\"a\">al-TÌ£abÊ»ah + 1.</subfield></datafield><datafield tag=\"260\" ind1=\" \" ind2=\" \"><subfield + code=\"6\">880-04</subfield><subfield code=\"a\">al-MaÊ»aÌ„diÌ„, al-QaÌ„hirah :</subfield><subfield + code=\"b\">Markaz YaÌ„faÌ„ lil-DiraÌ„saÌ„t wa-al-AbhÌ£aÌ„th,</subfield><subfield code=\"c\">2006.</subfield></datafield><datafield + tag=\"300\" ind1=\" \" ind2=\" \"><subfield code=\"a\">85 p. ;</subfield><subfield + code=\"c\">24 cm.</subfield></datafield><datafield tag=\"650\" ind1=\" \" ind2=\"0\"><subfield + code=\"a\">Islam</subfield><subfield code=\"y\">20th century.</subfield></datafield><datafield + tag=\"650\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Islam</subfield><subfield + code=\"y\">21st century.</subfield></datafield><datafield tag=\"880\" ind1=\"1\" + ind2=\" \"><subfield code=\"6\">100-01/(3/r</subfield><subfield code=\"a\">أبو + الخير، علي عبد الØميد.</subfield></datafield><datafield tag=\"880\" ind1=\"1\" + ind2=\"0\"><subfield code=\"6\">245-02/(3/r</subfield><subfield code=\"a\">ثقوب + ÙÙŠ عقل الأمة :</subfield><subfield code=\"b\">من جلد الذات إلى صدق الشرØ.</subfield></datafield><datafield + tag=\"880\" ind1=\" \" ind2=\" \"><subfield code=\"6\">250-03/(3/r</subfield><subfield + code=\"a\">الطبعة 1.</subfield></datafield><datafield tag=\"880\" ind1=\" \" ind2=\" + \"><subfield code=\"6\">260-04/(3/r</subfield><subfield code=\"a\">المعادي، القاهرة + :</subfield><subfield code=\"b\">مركز ياÙا للدراسات والأبØاث،</subfield><subfield + code=\"c\">2006.</subfield></datafield></record></collection>" + published_display: + - al-MaÊ»aÌ„diÌ„, al-QaÌ„hirah + author_display: AbuÌ„ al-Khayr, Ê»AliÌ„ Ê»Abd al-HÌ£amiÌ„d + title_vern_display: "ثقوب ÙÙŠ عقل الأمة" + lc_callnum_display: + - BP161.3 .A27 2006 + title_t: + - 'ThuquÌ„b fiÌ„ Ê»aql al-ummah :' + - "ثقوب ÙÙŠ عقل الأمة" + pub_date: + - '2006' + pub_date_sort: 2006 + published_vern_display: + - "المعادي، القاهرة" + format: Book + subtitle_vern_display: "من جلد الذات إلى صدق الشرØ" + lc_b4cutter_facet: + - BP161.3 + material_type_display: + - 85 p. + subject_t: + - Islam + title_sort: thuquÌ„b fiÌ„ Ê»aql al-ummah :min jald al-dhaÌ„t ilaÌ sÌ£idq al-sharhÌ£ + author_sort: AbuÌ„ alKhayr Ê»AliÌ„ Ê»Abd alHÌ£amiÌ„d ThuquÌ„b fiÌ„ Ê»aql alummah min jald + aldhaÌ„t ilaÌ sÌ£idq alsharhÌ£ + title_addl_t: + - 'ThuquÌ„b fiÌ„ Ê»aql al-ummah : min jald al-dhaÌ„t ilaÌ sÌ£idq al-sharhÌ£.' + - "ثقوب ÙÙŠ عقل الأمة : من جلد الذات إلى صدق الشرØ" + language_facet: + - Arabic + timestamp: '2014-02-03T18:42:53.056Z' +- lc_1letter_facet: + - H - Social Sciences + marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>03730cam + a22006257a 4500</leader><controlfield tag=\"001\"> 2005553155</controlfield><controlfield + tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090121104139.0</controlfield><controlfield + tag=\"008\">051007m19659999is | l 000 0 heb </controlfield><datafield + tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\"> 2005553155</subfield></datafield><datafield + tag=\"035\" ind1=\" \" ind2=\" \"><subfield code=\"a\">(CStRLIN)DCLH05-B11400</subfield></datafield><datafield + tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC-R</subfield><subfield + code=\"c\">DLC-R</subfield></datafield><datafield tag=\"043\" ind1=\" \" ind2=\" + \"><subfield code=\"a\">a-is---</subfield></datafield><datafield tag=\"050\" ind1=\"0\" + ind2=\"0\"><subfield code=\"a\">HG8695.2</subfield><subfield code=\"b\">.B57 1962</subfield></datafield><datafield + tag=\"066\" ind1=\" \" ind2=\" \"><subfield code=\"c\">(2</subfield></datafield><datafield + tag=\"245\" ind1=\"0\" ind2=\"0\"><subfield code=\"6\">880-01</subfield><subfield + code=\"a\">[BituahÌ£ u-vitÌ£ahÌ£on sotsyali].</subfield></datafield><datafield tag=\"260\" + ind1=\" \" ind2=\" \"><subfield code=\"a\">[Israel ,</subfield><subfield code=\"c\">1962-<2001>]</subfield></datafield><datafield + tag=\"300\" ind1=\" \" ind2=\" \"><subfield code=\"a\">items 1-<13> of <13> + ;</subfield><subfield code=\"c\">22-25 cm.</subfield></datafield><datafield tag=\"505\" + ind1=\"1\" ind2=\" \"><subfield code=\"a\">[1] Megamot be-meshekÌ£ ha-bitÌ£uahÌ£ + vÌ£eha-pikÌ£uahÌ£ Ê»al Ê»iskÌ£e bitÌ£uahÌ£ bi-shenat 1965. 1966. 52 leaves ; 25 cm. -- + [2] BitÌ£uahÌ£ zikÌ£nah : meÊ»udkan le-Yuli 2001. 24 p. ; 22 cm. -- [3] BitÌ£uahÌ£ sheʼirim + : meÊ»udkan le-Yuli 2001. 2001. 24 p. ; 22 cm. -- [4] Gimlah le-yeled nekheh : + meÊ»udkan le-Yuni 2001. 2001. 16 p. 22 cm. -- [5] BitÌ£uahÌ£ imahut : meÊ»udkan le-Yuli + 2002. 24 p. ; 22 cm. -- [6] BitÌ£uahÌ£ siÊ»ud : meÊ»udkan le-Februʼar 2001. 2001. + 12 p. ; 22 cm. -- [7] MedaÊ» le-Ê»oved Ê»atsmaʼi : meÊ»udkan le-Februʼar 2000. 2000. + 18 p. ; 22 cm. -- [8] BitÌ£uahÌ£ nifgeÊ»e teÊ»unot. 1999. 1 folded leaflet ; 22 cm. + -- [9] ha-KÌ£eren le-nifgeÊ»e tÌ£eror -- [10] Teluyim be-nifgeÊ»e Ê»avodah : meÊ»udkan + le-Februʼar 2001. 2001. 24 p. ; 22 cm. -- [11] Sherut miluʼim : meÊ»udkan le-Yuli + 2002. 2002. 16 p. ; 22 cm. -- [12] KÌ£itsbah le-sherutim meyuhadim le-nekhim kÌ£ashim + : meÊ»udkan le-Detsember 2002. 2002. 16 p. ; 22 cm. -- [13] MumhÌ£im benleʼumiyim + Ê»al medukat ha-bitÌ£ahÌ£on ha-sotsyali / YitshÌ£akÌ£ KÌ£anev. 1962. 10 p. ; 24 cm.</subfield></datafield><datafield + tag=\"650\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Insurance</subfield><subfield + code=\"z\">Israel.</subfield></datafield><datafield tag=\"650\" ind1=\" \" ind2=\"0\"><subfield + code=\"a\">Social security</subfield><subfield code=\"z\">Israel.</subfield></datafield><datafield + tag=\"650\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Family allowances</subfield><subfield + code=\"z\">Israel.</subfield></datafield><datafield tag=\"650\" ind1=\" \" ind2=\"0\"><subfield + code=\"a\">Maternity insurance</subfield><subfield code=\"z\">Israel.</subfield></datafield><datafield + tag=\"650\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Accident insurance</subfield><subfield + code=\"z\">Israel.</subfield></datafield><datafield tag=\"650\" ind1=\" \" ind2=\"0\"><subfield + code=\"a\">Old age</subfield><subfield code=\"x\">Economic aspects.</subfield></datafield><datafield + tag=\"651\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Israel</subfield><subfield + code=\"x\">Social policy.</subfield></datafield><datafield tag=\"651\" ind1=\" + \" ind2=\"0\"><subfield code=\"a\">Israel</subfield><subfield code=\"x\">Armed + Forces</subfield><subfield code=\"x\">Reserves</subfield><subfield code=\"x\">Pay, + allowances, etc.</subfield><subfield code=\"x\">Law and legislation</subfield></datafield><datafield + tag=\"650\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Social security</subfield><subfield + code=\"x\">Law and legislation</subfield><subfield code=\"z\">Israel.</subfield></datafield><datafield + tag=\"740\" ind1=\"0\" ind2=\"2\"><subfield code=\"6\">880-02</subfield><subfield + code=\"a\">Megamot be-meshekÌ£ ha-bitÌ£uahÌ£ vÌ£eha-pikÌ£uahÌ£ Ê»al Ê»iskÌ£e bitÌ£uahÌ£ bi-shenat + 1965.</subfield></datafield><datafield tag=\"740\" ind1=\"0\" ind2=\"2\"><subfield + code=\"6\">880-03</subfield><subfield code=\"a\">BitÌ£uahÌ£ zikÌ£nah.</subfield></datafield><datafield + tag=\"740\" ind1=\"0\" ind2=\"2\"><subfield code=\"6\">880-04</subfield><subfield + code=\"a\">BitÌ£uahÌ£ sheʼirim.</subfield></datafield><datafield tag=\"740\" ind1=\"0\" + ind2=\"2\"><subfield code=\"6\">880-05</subfield><subfield code=\"a\">Gimlah le-yeled + nekheh.</subfield></datafield><datafield tag=\"740\" ind1=\"0\" ind2=\"2\"><subfield + code=\"6\">880-06</subfield><subfield code=\"a\">BitÌ£uahÌ£ imahut.</subfield></datafield><datafield + tag=\"740\" ind1=\"0\" ind2=\"2\"><subfield code=\"6\">880-07</subfield><subfield + code=\"a\">BitÌ£uahÌ£ siÊ»ud.</subfield></datafield><datafield tag=\"740\" ind1=\"0\" + ind2=\"2\"><subfield code=\"6\">880-08</subfield><subfield code=\"a\">MedaÊ» le-Ê»oved + Ê»atsmaʼi.</subfield></datafield><datafield tag=\"740\" ind1=\"0\" ind2=\"2\"><subfield + code=\"6\">880-09</subfield><subfield code=\"a\">BitÌ£uahÌ£ nifgeÊ»e teÊ»unot.</subfield></datafield><datafield + tag=\"740\" ind1=\"0\" ind2=\"2\"><subfield code=\"6\">880-10</subfield><subfield + code=\"a\">KÌ£eren le-nifgeÊ»e tÌ£eror.</subfield></datafield><datafield tag=\"740\" + ind1=\"0\" ind2=\"2\"><subfield code=\"6\">880-11</subfield><subfield code=\"a\">Teluyim + be-nifgeÊ»e Ê»avodah.</subfield></datafield><datafield tag=\"740\" ind1=\"0\" ind2=\"2\"><subfield + code=\"6\">880-12</subfield><subfield code=\"a\">Sherut miluʼim.</subfield></datafield><datafield + tag=\"740\" ind1=\"0\" ind2=\"2\"><subfield code=\"6\">880-13</subfield><subfield + code=\"a\">KÌ£itsbah le-sherutim meyuhÌ£adim le-nekhim kÌ£ashim.</subfield></datafield><datafield + tag=\"740\" ind1=\"0\" ind2=\"2\"><subfield code=\"6\">880-14</subfield><subfield + code=\"a\">MumhÌ£im benleʼumiyim Ê»al medukat ha-bitÌ£ahÌ£on ha-sotsyali.</subfield></datafield><datafield + tag=\"880\" ind1=\"0\" ind2=\"0\"><subfield code=\"6\">245-01/(2/r</subfield><subfield + code=\"a\">[ביטוח וביטחון סוצי×לי].</subfield></datafield><datafield tag=\"880\" + ind1=\"0\" ind2=\"2\"><subfield code=\"6\">740-02/(2/r</subfield><subfield code=\"a\">מגמות + במשק הביטוח והפיקוח על עסקי ביטוח ×‘×©× ×ª 1965.</subfield></datafield><datafield + tag=\"880\" ind1=\"0\" ind2=\"2\"><subfield code=\"6\">740-03/(2/r</subfield><subfield + code=\"a\">ביטוח ×–×§× ×”.</subfield></datafield><datafield tag=\"880\" ind1=\"0\" + ind2=\"2\"><subfield code=\"6\">740-04/(2/r</subfield><subfield code=\"a\">ביטוח + ש×ירי×.</subfield></datafield><datafield tag=\"880\" ind1=\"0\" ind2=\"2\"><subfield + code=\"6\">740-05/(2/r</subfield><subfield code=\"a\">גמלה לילד × ×›×”.</subfield></datafield><datafield + tag=\"880\" ind1=\"0\" ind2=\"2\"><subfield code=\"6\">740-06/(2/r</subfield><subfield + code=\"a\">ביטוח ×מהות.</subfield></datafield><datafield tag=\"880\" ind1=\"0\" + ind2=\"2\"><subfield code=\"6\">740-07/(2/r</subfield><subfield code=\"a\">ביטוח + סיעוד.</subfield></datafield><datafield tag=\"880\" ind1=\"0\" ind2=\"2\"><subfield + code=\"6\">740-08/(2/r</subfield><subfield code=\"a\">מדע לעובד עצמ××™.</subfield></datafield><datafield + tag=\"880\" ind1=\"0\" ind2=\"2\"><subfield code=\"6\">740-09/(2/r</subfield><subfield + code=\"a\">ביטוח × ×¤×’×¢×™ ×ª×¢×•× ×•×ª.</subfield></datafield><datafield tag=\"880\" ind1=\"0\" + ind2=\"2\"><subfield code=\"6\">740-10/(2/r</subfield><subfield code=\"a\">קרן + ×œ× ×¤×’×¢×™ טרור.</subfield></datafield><datafield tag=\"880\" ind1=\"0\" ind2=\"2\"><subfield + code=\"6\">740-11/(2/r</subfield><subfield code=\"a\">×ª×œ×•×™×™× ×‘× ×™×¤×’×¢×™ ×ª×¢×•× ×”.</subfield></datafield><datafield + tag=\"880\" ind1=\"0\" ind2=\"2\"><subfield code=\"6\">740-12/(2/r</subfield><subfield + code=\"a\">שירות מילו××™×.</subfield></datafield><datafield tag=\"880\" ind1=\"0\" + ind2=\"2\"><subfield code=\"6\">740-13/(2/r</subfield><subfield code=\"a\">קצבה + ×œ×©×™×¨×•×ª×™× ×ž×™×•×—×“×™× ×œ× ×›×™× ×§×©×™×.</subfield></datafield><datafield tag=\"880\" ind1=\"0\" + ind2=\"2\"><subfield code=\"6\">740-14/(2/r</subfield><subfield code=\"a\">×ž×•×ž×—×™× + ×‘×™× ×œ××•×ž×™×™× ×¢×œ מדוכת הביטחון הסוצי×לי.</subfield></datafield></record></collection>" + published_display: + - Israel + title_vern_display: "ביטוח וביטחון סוצי×לי" + lc_callnum_display: + - HG8695.2 .B57 1962 + title_t: + - "[BituahÌ£ u-vitÌ£ahÌ£on sotsyali]." + - "ביטוח וביטחון סוצי×לי" + pub_date: + - '1962' + pub_date_sort: 1962 + format: Book + material_type_display: + - items 1-<13> of <13> + lc_b4cutter_facet: + - HG8695.2 + title_display: BituahÌ£ u-vitÌ£ahÌ£on sotsyali + subject_addl_t: + - Israel + - Economic aspects + - Law and legislation Israel + - Social policy + - Armed Forces Reserves Pay, allowances, etc. Law and legislation + subject_t: + - Insurance + - Social security + - Family allowances + - Maternity insurance + - Accident insurance + - Old age + - Israel + title_sort: bituahÌ£ u-vitÌ£ahÌ£on sotsyali + id: '2005553155' + author_sort: "\U0010FFFF BituahÌ£ uvitÌ£ahÌ£on sotsyali" + title_addl_t: + - "[BituahÌ£ u-vitÌ£ahÌ£on sotsyali]." + - "ביטוח וביטחון סוצי×לי" + subject_geo_facet: + - Israel + subject_topic_facet: + - Insurance + - Social security + - Family allowances + - Maternity insurance + - Accident insurance + - Old age + title_added_entry_t: + - Megamot be-meshekÌ£ ha-bitÌ£uahÌ£ vÌ£eha-pikÌ£uahÌ£ Ê»al Ê»iskÌ£e bitÌ£uahÌ£ bi-shenat 1965. + - BitÌ£uahÌ£ zikÌ£nah. + - BitÌ£uahÌ£ sheʼirim. + - Gimlah le-yeled nekheh. + - BitÌ£uahÌ£ imahut. + - BitÌ£uahÌ£ siÊ»ud. + - MedaÊ» le-Ê»oved Ê»atsmaʼi. + - BitÌ£uahÌ£ nifgeÊ»e teÊ»unot. + - KÌ£eren le-nifgeÊ»e tÌ£eror. + - Teluyim be-nifgeÊ»e Ê»avodah. + - Sherut miluʼim. + - KÌ£itsbah le-sherutim meyuhÌ£adim le-nekhim kÌ£ashim. + - MumhÌ£im benleʼumiyim Ê»al medukat ha-bitÌ£ahÌ£on ha-sotsyali. + - "מגמות במשק הביטוח והפיקוח על עסקי ביטוח ×‘×©× ×ª 1965" + - "ביטוח ×–×§× ×”" + - "ביטוח ש×ירי×" + - "גמלה לילד × ×›×”" + - "ביטוח ×מהות" + - "ביטוח סיעוד" + - "מדע לעובד עצמ××™" + - "ביטוח × ×¤×’×¢×™ ×ª×¢×•× ×•×ª" + - "קרן ×œ× ×¤×’×¢×™ טרור" + - "×ª×œ×•×™×™× ×‘× ×™×¤×’×¢×™ ×ª×¢×•× ×”" + - "שירות מילו××™×" + - "קצבה ×œ×©×™×¨×•×ª×™× ×ž×™×•×—×“×™× ×œ× ×›×™× ×§×©×™×" + - "×ž×•×ž×—×™× ×‘×™× ×œ××•×ž×™×™× ×¢×œ מדוכת הביטחון הסוצי×לי" + lc_alpha_facet: + - HG + language_facet: + - Hebrew + timestamp: '2014-02-03T18:42:53.056Z' +- lc_1letter_facet: + - E - History of the Americas (General) + author_t: + - Hearth, Amy Hill, + marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>01490cam + a2200361 a 4500</leader><controlfield tag=\"001\"> 2007020969</controlfield><controlfield + tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090126093447.0</controlfield><controlfield + tag=\"008\">070522s2008 nyua b 000 0beng </controlfield><datafield + tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\"> 2007020969</subfield></datafield><datafield + tag=\"020\" ind1=\" \" ind2=\" \"><subfield code=\"a\">9780743297790 (alk. paper)</subfield></datafield><datafield + tag=\"020\" ind1=\" \" ind2=\" \"><subfield code=\"a\">0743297792 (alk. paper)</subfield></datafield><datafield + tag=\"035\" ind1=\" \" ind2=\" \"><subfield code=\"a\">(OCoLC)ocn137335139</subfield></datafield><datafield + tag=\"035\" ind1=\" \" ind2=\" \"><subfield code=\"a\">(OCoLC)137335139</subfield></datafield><datafield + tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC</subfield><subfield + code=\"c\">DLC</subfield><subfield code=\"d\">BAKER</subfield><subfield code=\"d\">BTCTA</subfield><subfield + code=\"d\">YDXCP</subfield><subfield code=\"d\">C#P</subfield><subfield code=\"d\">DLC</subfield></datafield><datafield + tag=\"043\" ind1=\" \" ind2=\" \"><subfield code=\"a\">n-us-nj</subfield></datafield><datafield + tag=\"050\" ind1=\"0\" ind2=\"0\"><subfield code=\"a\">E99.D2</subfield><subfield + code=\"b\">H437 2008</subfield></datafield><datafield tag=\"082\" ind1=\"0\" ind2=\"0\"><subfield + code=\"a\">974.004/97345</subfield><subfield code=\"a\">B</subfield><subfield + code=\"2\">22</subfield></datafield><datafield tag=\"100\" ind1=\"1\" ind2=\" + \"><subfield code=\"a\">Hearth, Amy Hill,</subfield><subfield code=\"d\">1958-</subfield></datafield><datafield + tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield code=\"a\">\"Strong Medicine speaks\" + :</subfield><subfield code=\"b\">a Native American elder has her say : an oral + history /</subfield><subfield code=\"c\">Amy Hill Hearth.</subfield></datafield><datafield + tag=\"250\" ind1=\" \" ind2=\" \"><subfield code=\"a\">1st Atria Books hardcover + ed.</subfield></datafield><datafield tag=\"260\" ind1=\" \" ind2=\" \"><subfield + code=\"a\">New York :</subfield><subfield code=\"b\">Atria Books,</subfield><subfield + code=\"c\">2008.</subfield></datafield><datafield tag=\"300\" ind1=\" \" ind2=\" + \"><subfield code=\"a\">xvii, 267 p. :</subfield><subfield code=\"b\">ill. ;</subfield><subfield + code=\"c\">23 cm.</subfield></datafield><datafield tag=\"504\" ind1=\" \" ind2=\" + \"><subfield code=\"a\">Includes bibliographical references (p. 261-266).</subfield></datafield><datafield + tag=\"600\" ind1=\"0\" ind2=\"0\"><subfield code=\"a\">Strong Medicine,</subfield><subfield + code=\"d\">1922-</subfield></datafield><datafield tag=\"650\" ind1=\" \" ind2=\"0\"><subfield + code=\"a\">Delaware women</subfield><subfield code=\"z\">New Jersey</subfield><subfield + code=\"z\">Bridgeton</subfield><subfield code=\"v\">Biography.</subfield></datafield><datafield + tag=\"650\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Indian women shamans</subfield><subfield + code=\"z\">New Jersey</subfield><subfield code=\"z\">Bridgeton</subfield><subfield + code=\"v\">Biography.</subfield></datafield><datafield tag=\"650\" ind1=\" \" + ind2=\"0\"><subfield code=\"a\">Delaware Indians</subfield><subfield code=\"z\">New + Jersey</subfield><subfield code=\"z\">Bridgeton</subfield><subfield code=\"v\">Biography.</subfield></datafield><datafield + tag=\"650\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Delaware Indians</subfield><subfield + code=\"z\">New Jersey</subfield><subfield code=\"z\">Bridgeton</subfield><subfield + code=\"x\">History.</subfield></datafield><datafield tag=\"700\" ind1=\"0\" ind2=\" + \"><subfield code=\"a\">Strong Medicine,</subfield><subfield code=\"d\">1922-</subfield></datafield><datafield + tag=\"856\" ind1=\"4\" ind2=\"1\"><subfield code=\"3\">Table of contents only</subfield><subfield + code=\"u\">http://www.loc.gov/catdir/toc/ecip0719/2007020969.html</subfield></datafield><datafield + tag=\"856\" ind1=\"4\" ind2=\"2\"><subfield code=\"3\">Publisher description</subfield><subfield + code=\"u\">http://www.loc.gov/catdir/enhancements/fy0808/2007020969-d.html</subfield></datafield><datafield + tag=\"856\" ind1=\"4\" ind2=\"1\"><subfield code=\"3\">Sample text</subfield><subfield + code=\"u\">http://www.loc.gov/catdir/enhancements/fy0808/2007020969-s.html</subfield></datafield></record></collection>" + published_display: + - New York + author_display: Hearth, Amy Hill, 1958- + lc_callnum_display: + - E99.D2 H437 2008 + title_t: + - "\"Strong Medicine speaks\" :" + pub_date: + - '2008' + pub_date_sort: 2008 + subtitle_display: 'a Native American elder has her say : an oral history' + format: Book + url_suppl_display: + - http://www.loc.gov/catdir/toc/ecip0719/2007020969.html + - http://www.loc.gov/catdir/enhancements/fy0808/2007020969-d.html + - http://www.loc.gov/catdir/enhancements/fy0808/2007020969-s.html + material_type_display: + - xvii, 267 p. + lc_b4cutter_facet: + - E99.D2 + title_display: "\"Strong Medicine speaks\"" + subject_addl_t: + - New Jersey Bridgeton Biography + - New Jersey Bridgeton History + subject_t: + - Strong Medicine, 1922- + - Delaware women + - Indian women shamans + - Delaware Indians + title_sort: "\"strong medicine speaks\" :a native american elder has her say : an + oral history" + isbn_t: + - '9780743297790' + - 0743297792 + id: '2007020969' + author_sort: Hearth Amy Hill 1958 Strong Medicine speaks a Native American elder + has her say an oral history + title_addl_t: + - "\"Strong Medicine speaks\" : a Native American elder has her say : an oral history + /" + subject_geo_facet: + - New Jersey + - Bridgeton + subject_topic_facet: + - Strong Medicine, 1922- + - Delaware women + - Indian women shamans + - Delaware Indians + author_addl_t: + - Strong Medicine, + lc_alpha_facet: + - E + language_facet: + - English + subtitle_t: + - 'a Native American elder has her say : an oral history /' + timestamp: '2014-02-03T18:42:53.056Z' +- lc_1letter_facet: + - B - Philosophy, Psychology, Religion + author_t: + - Dkon-mchog-rgya-mtsho, Ra-se, + marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>01099cam + a22002534a 4500</leader><controlfield tag=\"001\"> 2008305903</controlfield><controlfield + tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090122162012.0</controlfield><controlfield + tag=\"008\">080602s2008 ii a 000 0 tibo </controlfield><datafield + tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\"> 2008305903</subfield></datafield><datafield + tag=\"025\" ind1=\" \" ind2=\" \"><subfield code=\"a\">I-Tib-2008-305903; 01; + 05-01</subfield></datafield><datafield tag=\"037\" ind1=\" \" ind2=\" \"><subfield + code=\"b\">Library of Congress -- New Delhi Overseas Office</subfield><subfield + code=\"c\">Rs400.00</subfield></datafield><datafield tag=\"040\" ind1=\" \" ind2=\" + \"><subfield code=\"a\">DLC</subfield><subfield code=\"c\">DLC</subfield></datafield><datafield + tag=\"042\" ind1=\" \" ind2=\" \"><subfield code=\"a\">lcode</subfield></datafield><datafield + tag=\"050\" ind1=\"0\" ind2=\"0\"><subfield code=\"a\">BQ7684.4</subfield><subfield + code=\"b\">.D564 2008</subfield></datafield><datafield tag=\"100\" ind1=\"0\" + ind2=\" \"><subfield code=\"a\">Dkon-mchog-rgya-mtsho,</subfield><subfield code=\"c\">Ra-se,</subfield><subfield + code=\"d\">1968-</subfield></datafield><datafield tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield + code=\"a\">Dris lan don gcig ma :</subfield><subfield code=\"b\">dam paʼi chos + dgoṅs pa gcig paʼi dri ba legs bsÌad bsu baʼi pho ñaʼi dris lan Dgoṅs-gcig + smra baʼi mdzes rgyan zÌes bya ba bzÌugs so /</subfield><subfield code=\"c\">Dwags-po + Spyan-sṅa-ba Dkon-mchog-rgya-mtshos brtsams.</subfield></datafield><datafield + tag=\"250\" ind1=\" \" ind2=\" \"><subfield code=\"a\">Par theṅ 2.</subfield></datafield><datafield + tag=\"260\" ind1=\" \" ind2=\" \"><subfield code=\"a\">[ʼPhags-yul Dhe-ra-dhun + :</subfield><subfield code=\"b\">Sroṅ-btsan dpe mdzod khaṅ nas grems spel byas,</subfield><subfield + code=\"c\">2008]</subfield></datafield><datafield tag=\"300\" ind1=\" \" ind2=\" + \"><subfield code=\"a\">208 p. :</subfield><subfield code=\"b\">1 col. ill. ;</subfield><subfield + code=\"c\">24 cm.</subfield></datafield><datafield tag=\"546\" ind1=\" \" ind2=\" + \"><subfield code=\"a\">In Tibetan.</subfield></datafield><datafield tag=\"520\" + ind1=\" \" ind2=\" \"><subfield code=\"a\">On the Dgoṅs-gcig teaching of Drikung + Kagyudpa sect in questions/answers format.</subfield></datafield><datafield tag=\"650\" + ind1=\" \" ind2=\"0\"><subfield code=\"a\">ʼBri-guṅ-pa (Sect)</subfield><subfield + code=\"x\">Doctrines</subfield><subfield code=\"v\">Miscellanea.</subfield></datafield><datafield + tag=\"710\" ind1=\"2\" ind2=\" \"><subfield code=\"a\">Sroṅ-btsan dpe mdzod khaṅ.</subfield></datafield></record></collection>" + published_display: + - "ʼPhags-yul Dhe-ra-dhun" + author_display: Dkon-mchog-rgya-mtsho, Ra-se, 1968- + lc_callnum_display: + - BQ7684.4 .D564 2008 + title_t: + - 'Dris lan don gcig ma :' + pub_date: + - '2008' + pub_date_sort: 2008 + subtitle_display: dam paʼi chos dgoṅs pa gcig paʼi dri ba legs bsÌad bsu baʼi pho + ñaʼi dris lan Dgoṅs-gcig smra baʼi mdzes rgyan zÌes bya ba bzÌugs so + format: Book + material_type_display: + - 208 p. + lc_b4cutter_facet: + - BQ7684.4 + title_display: Dris lan don gcig ma + subject_addl_t: + - Doctrines Miscellanea + subject_t: + - "ʼBri-guṅ-pa (Sect)" + title_sort: dris lan don gcig ma :dam paʼi chos dgoṅs pa gcig paʼi dri ba legs + bsÌad bsu baʼi pho ñaʼi dris lan dgoṅs-gcig smra baʼi mdzes rgyan zÌes bya ba + bzÌugs so + id: '2008305903' + author_sort: Dkonmchogrgyamtsho Rase 1968 Dris lan don gcig ma dam paʼi chos dgoṅs + pa gcig paʼi dri ba legs bsÌad bsu baʼi pho ñaʼi dris lan Dgoṅsgcig smra baʼi + mdzes rgyan zÌes bya ba bzÌugs so + title_addl_t: + - 'Dris lan don gcig ma : dam paʼi chos dgoṅs pa gcig paʼi dri ba legs bsÌad bsu + baʼi pho ñaʼi dris lan Dgoṅs-gcig smra baʼi mdzes rgyan zÌes bya ba bzÌugs so + /' + subject_topic_facet: + - "ʼBri-guṅ-pa (Sect)" + author_addl_t: + - Sroṅ-btsan dpe mdzod khaṅ. + lc_alpha_facet: + - BQ + language_facet: + - Tibetan + subtitle_t: + - dam paʼi chos dgoṅs pa gcig paʼi dri ba legs bsÌad bsu baʼi pho ñaʼi dris lan + Dgoṅs-gcig smra baʼi mdzes rgyan zÌes bya ba bzÌugs so / + timestamp: '2014-02-03T18:42:53.056Z' +- subtitle_display: a supplication to the noble Lama Mahaguru Padmasambhava + subject_addl_t: + - Prayers and devotions + - India Prayers and devotions + title_display: Pluvial nectar of blessings + id: '2008308175' + isbn_t: + - '8186470336' + subject_geo_facet: + - India + subject_topic_facet: + - Padma Sambhava, ca. 717-ca. 762 + - Priests, Buddhist + lc_alpha_facet: + - BQ + subtitle_t: + - a supplication to the noble Lama Mahaguru Padmasambhava / + author_t: + - Ṅag-dbaṅ-blo-bzaṅ-rgya-mtsho, Dalai Lama V, + lc_1letter_facet: + - B - Philosophy, Psychology, Religion + marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>01582cam + a2200325 a 4500</leader><controlfield tag=\"001\"> 2008308175</controlfield><controlfield + tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090123091532.0</controlfield><controlfield + tag=\"008\">080718s2002 ii b 000 0 eng </controlfield><datafield + tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\"> 2008308175</subfield></datafield><datafield + tag=\"020\" ind1=\" \" ind2=\" \"><subfield code=\"a\">8186470336</subfield></datafield><datafield + tag=\"025\" ind1=\" \" ind2=\" \"><subfield code=\"a\">I-E-2008-308175; 59-13</subfield></datafield><datafield + tag=\"037\" ind1=\" \" ind2=\" \"><subfield code=\"b\">Library of Congress -- + New Delhi Overseas Office</subfield><subfield code=\"c\">Rs185.00</subfield></datafield><datafield + tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC</subfield><subfield + code=\"c\">DLC</subfield></datafield><datafield tag=\"041\" ind1=\"1\" ind2=\" + \"><subfield code=\"a\">eng</subfield><subfield code=\"a\">tib</subfield><subfield + code=\"h\">tib</subfield></datafield><datafield tag=\"042\" ind1=\" \" ind2=\" + \"><subfield code=\"a\">lcode</subfield></datafield><datafield tag=\"043\" ind1=\" + \" ind2=\" \"><subfield code=\"a\">a-ii---</subfield></datafield><datafield tag=\"050\" + ind1=\"0\" ind2=\"0\"><subfield code=\"a\">BQ5593.P3</subfield><subfield code=\"b\">N3313 + 2002</subfield></datafield><datafield tag=\"100\" ind1=\"0\" ind2=\" \"><subfield + code=\"a\">Ṅag-dbaṅ-blo-bzaṅ-rgya-mtsho,</subfield><subfield code=\"c\">Dalai + Lama V,</subfield><subfield code=\"d\">1617-1682.</subfield></datafield><datafield + tag=\"240\" ind1=\"1\" ind2=\"0\"><subfield code=\"a\">Rje btsun bla ma ma haÌ„ + gu ru Padma-ʼbyuṅ-gnas la gsol ba ʼdebs pa byin rlabs bdud rtsiʼi char rgyun.</subfield><subfield + code=\"l\">English & Tibetan</subfield></datafield><datafield tag=\"245\" + ind1=\"1\" ind2=\"0\"><subfield code=\"a\">Pluvial nectar of blessings :</subfield><subfield + code=\"b\">a supplication to the noble Lama Mahaguru Padmasambhava /</subfield><subfield + code=\"c\">by His Holiness Ngag-dbang-blo-bzang-rgya-mtsho, the fifth Dalai Lama + ; translated from the Tibetan with commentary by Dennis Cordell.</subfield></datafield><datafield + tag=\"260\" ind1=\" \" ind2=\" \"><subfield code=\"a\">Dharamsala :</subfield><subfield + code=\"b\">Library of Tibetan Works and Archives,</subfield><subfield code=\"c\">2002.</subfield></datafield><datafield + tag=\"300\" ind1=\" \" ind2=\" \"><subfield code=\"a\">viii, 101 p. ;</subfield><subfield + code=\"c\">22 cm.</subfield></datafield><datafield tag=\"546\" ind1=\" \" ind2=\" + \"><subfield code=\"a\">English and Tibetan</subfield><subfield code=\"b\">(Tibetan + also in roman).</subfield></datafield><datafield tag=\"504\" ind1=\" \" ind2=\" + \"><subfield code=\"a\">Includes bibliographical references (p. [97]-101).</subfield></datafield><datafield + tag=\"600\" ind1=\"0\" ind2=\"0\"><subfield code=\"a\">Padma Sambhava,</subfield><subfield + code=\"d\">ca. 717-ca. 762</subfield><subfield code=\"v\">Prayers and devotions.</subfield></datafield><datafield + tag=\"650\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Priests, Buddhist</subfield><subfield + code=\"z\">India</subfield><subfield code=\"v\">Prayers and devotions.</subfield></datafield><datafield + tag=\"700\" ind1=\"1\" ind2=\" \"><subfield code=\"a\">Cordell, Dennis.</subfield></datafield><datafield + tag=\"700\" ind1=\"0\" ind2=\"2\"><subfield code=\"a\">Ṅag-dbaṅ-blo-bzaṅ-rgya-mtsho,</subfield><subfield + code=\"c\">Dalai Lama V,</subfield><subfield code=\"d\">1617-1682</subfield><subfield + code=\"t\">Rje btsun bla ma ma haÌ„ gu ru Padma-ʼbyuṅ-gnas la gsol ba ʼdebs pa + byin rlabs bdud rtsiʼi char rgyun.</subfield><subfield code=\"f\">2002</subfield></datafield><datafield + tag=\"710\" ind1=\"2\" ind2=\" \"><subfield code=\"a\">Library of Tibetan Works + & Archives.</subfield></datafield></record></collection>" + published_display: + - Dharamsala + author_display: Ṅag-dbaṅ-blo-bzaṅ-rgya-mtsho, Dalai Lama V, 1617-1682 + lc_callnum_display: + - BQ5593.P3 N3313 2002 + title_t: + - 'Pluvial nectar of blessings :' + pub_date: + - '2002' + pub_date_sort: 2002 + format: Book + lc_b4cutter_facet: + - BQ5593.P3 + material_type_display: + - viii, 101 p. + subject_t: + - Padma Sambhava, ca. 717-ca. 762 + - Priests, Buddhist + title_sort: pluvial nectar of blessings :a supplication to the noble lama mahaguru + padmasambhava + author_sort: Ṅagdbaṅblobzaṅrgyamtsho Dalai Lama V 16171682 Rje btsun bla ma ma + haÌ„ gu ru Padmaʼbyuṅgnas la gsol ba ʼdebs pa byin rlabs bdud rtsiʼi char rgyun + English Tibetan Pluvial nectar of blessings a supplication to the noble Lama + Mahaguru Padmasambhava + title_addl_t: + - 'Pluvial nectar of blessings : a supplication to the noble Lama Mahaguru Padmasambhava + /' + - Rje btsun bla ma ma haÌ„ gu ru Padma-ʼbyuṅ-gnas la gsol ba ʼdebs pa byin rlabs + bdud rtsiʼi char rgyun. English & Tibetan + author_addl_t: + - Cordell, Dennis. + - Ṅag-dbaṅ-blo-bzaṅ-rgya-mtsho, Dalai Lama V, + - Library of Tibetan Works & Archives. + title_added_entry_t: + - Rje btsun bla ma ma haÌ„ gu ru Padma-ʼbyuṅ-gnas la gsol ba ʼdebs pa byin rlabs + bdud rtsiʼi char rgyun + language_facet: + - English + - Tibetan + timestamp: '2014-02-03T18:42:53.056Z' +- lc_1letter_facet: + - B - Philosophy, Psychology, Religion + author_t: + - Bstan-ʼdzin-rgya-mtsho, Dalai Lama XIV, + marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>01221cam + a22002534a 4500</leader><controlfield tag=\"001\"> 2008308201</controlfield><controlfield + tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090122162646.0</controlfield><controlfield + tag=\"008\">080721s2008 ii 000 0 tibo </controlfield><datafield + tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\"> 2008308201</subfield></datafield><datafield + tag=\"025\" ind1=\" \" ind2=\" \"><subfield code=\"a\">I-Tib-2008-308201; 27</subfield></datafield><datafield + tag=\"037\" ind1=\" \" ind2=\" \"><subfield code=\"b\">Library of Congress -- + New Delhi Overseas Office</subfield><subfield code=\"c\">Rs150.00</subfield></datafield><datafield + tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC</subfield><subfield + code=\"c\">DLC</subfield></datafield><datafield tag=\"042\" ind1=\" \" ind2=\" + \"><subfield code=\"a\">lcode</subfield></datafield><datafield tag=\"050\" ind1=\"0\" + ind2=\"0\"><subfield code=\"a\">BQ4036</subfield><subfield code=\"b\">.B78 2008</subfield></datafield><datafield + tag=\"100\" ind1=\"0\" ind2=\" \"><subfield code=\"a\">Bstan-ʼdzin-rgya-mtsho,</subfield><subfield + code=\"c\">Dalai Lama XIV,</subfield><subfield code=\"d\">1935-</subfield></datafield><datafield + tag=\"245\" ind1=\"0\" ind2=\"0\"><subfield code=\"a\">Bod kyi naṅ chos ṅo sprod + sñiṅ bsdus :</subfield><subfield code=\"b\">goṅ sa skyabs mgon chen po mchog + nas deṅ dus Bod rigs na gzÌon rnams la naṅ chos ṅo sprod bstsal ba bzÌugs so.</subfield></datafield><datafield + tag=\"250\" ind1=\" \" ind2=\" \"><subfield code=\"a\">Par theṅs 2.</subfield></datafield><datafield + tag=\"260\" ind1=\" \" ind2=\" \"><subfield code=\"a\">Dharamsala, H.P. :</subfield><subfield + code=\"b\">Sku-bcar Rnam-par-rgyal-ba Phan-bde-legs-bsÌad-gliṅ Grwa-tshaṅ gi + SÌes-yon Lhan-tshogs,</subfield><subfield code=\"c\">2008.</subfield></datafield><datafield + tag=\"300\" ind1=\" \" ind2=\" \"><subfield code=\"a\">4, iv, 254 p. ;</subfield><subfield + code=\"c\">23 cm.</subfield></datafield><datafield tag=\"546\" ind1=\" \" ind2=\" + \"><subfield code=\"a\">In Tibetan.</subfield></datafield><datafield tag=\"520\" + ind1=\" \" ind2=\" \"><subfield code=\"a\">Series of lectures delivered by His + Holiness the Dali Lama to younger generation of Tibetan studying in different + colleges and universities in India and students from schools in Dharamsala on + the introduction of Buddhist teaching.</subfield></datafield><datafield tag=\"650\" + ind1=\" \" ind2=\"0\"><subfield code=\"a\">Buddhism</subfield><subfield code=\"x\">Essence, + genius, nature.</subfield></datafield><datafield tag=\"710\" ind1=\"2\" ind2=\" + \"><subfield code=\"a\">Rnam-rgyal Grwa-tshaṅ.</subfield><subfield code=\"b\">SÌes-yon + Lhan-tshogs.</subfield></datafield></record></collection>" + published_display: + - Dharamsala, H.P. + author_display: Bstan-ʼdzin-rgya-mtsho, Dalai Lama XIV, 1935- + lc_callnum_display: + - BQ4036 .B78 2008 + title_t: + - 'Bod kyi naṅ chos ṅo sprod sñiṅ bsdus :' + pub_date: + - '2008' + pub_date_sort: 2008 + subtitle_display: goṅ sa skyabs mgon chen po mchog nas deṅ dus Bod rigs na gzÌon + rnams la naṅ chos ṅo sprod bstsal ba bzÌugs so + format: Book + material_type_display: + - 4, iv, 254 p. + lc_b4cutter_facet: + - BQ4036 + title_display: Bod kyi naṅ chos ṅo sprod sñiṅ bsdus + subject_addl_t: + - Essence, genius, nature + subject_t: + - Buddhism + title_sort: bod kyi naṅ chos ṅo sprod sñiṅ bsdus :goṅ sa skyabs mgon chen po + mchog nas deṅ dus bod rigs na gzÌon rnams la naṅ chos ṅo sprod bstsal ba bzÌugs + so + id: '2008308201' + author_sort: Bstanʼdzinrgyamtsho Dalai Lama XIV 1935 Bod kyi naṅ chos ṅo sprod + sñiṅ bsdus goṅ sa skyabs mgon chen po mchog nas deṅ dus Bod rigs na gzÌon + rnams la naṅ chos ṅo sprod bstsal ba bzÌugs so + title_addl_t: + - 'Bod kyi naṅ chos ṅo sprod sñiṅ bsdus : goṅ sa skyabs mgon chen po mchog + nas deṅ dus Bod rigs na gzÌon rnams la naṅ chos ṅo sprod bstsal ba bzÌugs so.' + subject_topic_facet: + - Buddhism + author_addl_t: + - Rnam-rgyal Grwa-tshaṅ. SÌes-yon Lhan-tshogs. + lc_alpha_facet: + - BQ + language_facet: + - Tibetan + subtitle_t: + - goṅ sa skyabs mgon chen po mchog nas deṅ dus Bod rigs na gzÌon rnams la naṅ + chos ṅo sprod bstsal ba bzÌugs so. + timestamp: '2014-02-03T18:42:53.056Z' +- lc_1letter_facet: + - D - World History + author_t: + - Thub-bstan-yar-ʼphel, Rnam-grwa. + marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>01111cam + a2200289 a 4500</leader><controlfield tag=\"001\"> 2008308202</controlfield><controlfield + tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090121092141.0</controlfield><controlfield + tag=\"008\">080721s2005 ii b b 000 0 tibo </controlfield><datafield + tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\"> 2008308202</subfield></datafield><datafield + tag=\"025\" ind1=\" \" ind2=\" \"><subfield code=\"a\">I-Tib-2008-308202; 16</subfield></datafield><datafield + tag=\"037\" ind1=\" \" ind2=\" \"><subfield code=\"b\">Library of Congress -- + New Delhi Overseas Office</subfield><subfield code=\"c\">Rs150.00</subfield></datafield><datafield + tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC</subfield><subfield + code=\"c\">DLC</subfield></datafield><datafield tag=\"042\" ind1=\" \" ind2=\" + \"><subfield code=\"a\">lcode</subfield></datafield><datafield tag=\"043\" ind1=\" + \" ind2=\" \"><subfield code=\"a\">a-cc-ti</subfield></datafield><datafield tag=\"050\" + ind1=\"0\" ind2=\"0\"><subfield code=\"a\">DS785</subfield><subfield code=\"b\">.T475 + 2005</subfield></datafield><datafield tag=\"100\" ind1=\"0\" ind2=\" \"><subfield + code=\"a\">Thub-bstan-yar-ʼphel,</subfield><subfield code=\"c\">Rnam-grwa.</subfield></datafield><datafield + tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield code=\"a\">Bod gaṅs can gyi rgyal + rabs mdor bsdus dris lan brgya pa rab gsal sÌel gyi me loṅ zÌes bya ba bzÌugs + so /</subfield><subfield code=\"c\">Rnam-grwa Thub-bstan-yar-ʼphel.</subfield></datafield><datafield + tag=\"246\" ind1=\"1\" ind2=\"8\"><subfield code=\"a\">Rgyal rabs dris lan brgya + pa rab gsal sÌel gyi me loṅ</subfield></datafield><datafield tag=\"250\" ind1=\" + \" ind2=\" \"><subfield code=\"a\">1st ed.</subfield></datafield><datafield tag=\"260\" + ind1=\" \" ind2=\" \"><subfield code=\"a\">Dharamsala, H.P. :</subfield><subfield + code=\"b\">Sku-bcar Rnam-rgyal Grwa-tshaṅ nas ʼgrems spel zÌus,</subfield><subfield + code=\"c\">2005.</subfield></datafield><datafield tag=\"300\" ind1=\" \" ind2=\" + \"><subfield code=\"a\">a-e, iv, ii, 407 p. :</subfield><subfield code=\"b\">maps + ;</subfield><subfield code=\"c\">23 cm.</subfield></datafield><datafield tag=\"546\" + ind1=\" \" ind2=\" \"><subfield code=\"a\">In Tibetan.</subfield></datafield><datafield + tag=\"520\" ind1=\" \" ind2=\" \"><subfield code=\"a\">History of Tibet in questions/answers + format.</subfield></datafield><datafield tag=\"504\" ind1=\" \" ind2=\" \"><subfield + code=\"a\">Includes bibliographical references (p. 406-407).</subfield></datafield><datafield + tag=\"651\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Tibet (China)</subfield><subfield + code=\"x\">History</subfield><subfield code=\"v\">Miscellanea.</subfield></datafield><datafield + tag=\"710\" ind1=\"2\" ind2=\" \"><subfield code=\"a\">Rnam-rgyal Grwa-tshaṅ.</subfield></datafield></record></collection>" + published_display: + - Dharamsala, H.P. + author_display: Thub-bstan-yar-ʼphel, Rnam-grwa + lc_callnum_display: + - DS785 .T475 2005 + title_t: + - Bod gaṅs can gyi rgyal rabs mdor bsdus dris lan brgya pa rab gsal sÌel gyi me + loṅ zÌes bya ba bzÌugs so / + pub_date: + - '2005' + pub_date_sort: 2005 + format: Book + material_type_display: + - a-e, iv, ii, 407 p. + lc_b4cutter_facet: + - DS785 + title_display: Bod gaṅs can gyi rgyal rabs mdor bsdus dris lan brgya pa rab gsal + sÌel gyi me loṅ zÌes bya ba bzÌugs so + subject_addl_t: + - History Miscellanea + subject_t: + - Tibet (China) + title_sort: bod gaṅs can gyi rgyal rabs mdor bsdus dris lan brgya pa rab gsal sÌel + gyi me loṅ zÌes bya ba bzÌugs so + id: '2008308202' + author_sort: Thubbstanyarʼphel Rnamgrwa Bod gaṅs can gyi rgyal rabs mdor bsdus + dris lan brgya pa rab gsal sÌel gyi me loṅ zÌes bya ba bzÌugs so + title_addl_t: + - Bod gaṅs can gyi rgyal rabs mdor bsdus dris lan brgya pa rab gsal sÌel gyi me + loṅ zÌes bya ba bzÌugs so / + - Rgyal rabs dris lan brgya pa rab gsal sÌel gyi me loṅ + subject_geo_facet: + - Tibet (China) + author_addl_t: + - Rnam-rgyal Grwa-tshaṅ. + lc_alpha_facet: + - DS + language_facet: + - Tibetan + timestamp: '2014-02-03T18:42:53.056Z' +- marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>01127cam + a22002895a 4500</leader><controlfield tag=\"001\"> 2008308478</controlfield><controlfield + tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090123131001.0</controlfield><controlfield + tag=\"008\">080728s2007 ii 000 0 tibo </controlfield><datafield + tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\"> 2008308478</subfield></datafield><datafield + tag=\"025\" ind1=\" \" ind2=\" \"><subfield code=\"a\">I-Tib-2008-308478; 23</subfield></datafield><datafield + tag=\"037\" ind1=\" \" ind2=\" \"><subfield code=\"b\">Library of Congress -- + New Delhi Overseas Office</subfield></datafield><datafield tag=\"040\" ind1=\" + \" ind2=\" \"><subfield code=\"a\">DLC</subfield><subfield code=\"c\">DLC</subfield></datafield><datafield + tag=\"042\" ind1=\" \" ind2=\" \"><subfield code=\"a\">lcode</subfield></datafield><datafield + tag=\"043\" ind1=\" \" ind2=\" \"><subfield code=\"a\">a-cc-ti</subfield><subfield + code=\"a\">a-ii---</subfield></datafield><datafield tag=\"245\" ind1=\"0\" ind2=\"0\"><subfield + code=\"a\">SÌes yon.</subfield></datafield><datafield tag=\"250\" ind1=\" \" ind2=\" + \"><subfield code=\"a\">1st ed.</subfield></datafield><datafield tag=\"260\" ind1=\" + \" ind2=\" \"><subfield code=\"a\">Dharamsala, Distt. Kangra, H.P. :</subfield><subfield + code=\"b\">Skabs bzÌi paʼi ʼbriṅ rim dge ʼos slob thon pa thun moṅ gis ʼgrems + spel zÌus,</subfield><subfield code=\"c\">2007.</subfield></datafield><datafield + tag=\"300\" ind1=\" \" ind2=\" \"><subfield code=\"a\">xii, 419 p. ;</subfield><subfield + code=\"c\">22 cm.</subfield></datafield><datafield tag=\"546\" ind1=\" \" ind2=\" + \"><subfield code=\"a\">In Tibetan.</subfield></datafield><datafield tag=\"500\" + ind1=\" \" ind2=\" \"><subfield code=\"a\">Copyright: College for Higher Tibetan + Studies.</subfield></datafield><datafield tag=\"520\" ind1=\" \" ind2=\" \"><subfield + code=\"a\">Contributed articles reflecting new educational policy for development + of Tibetan education system in exile Tibetan community and Tibetan language teaching + method etc.</subfield></datafield><datafield tag=\"650\" ind1=\" \" ind2=\"0\"><subfield + code=\"a\">Education and state</subfield><subfield code=\"z\">China</subfield><subfield + code=\"z\">Tibet.</subfield></datafield><datafield tag=\"650\" ind1=\" \" ind2=\"0\"><subfield + code=\"a\">Tibetans</subfield><subfield code=\"x\">Education</subfield><subfield + code=\"z\">India.</subfield></datafield><datafield tag=\"650\" ind1=\" \" ind2=\"0\"><subfield + code=\"a\">Tibetan language</subfield><subfield code=\"x\">Study and teaching</subfield><subfield + code=\"z\">India.</subfield></datafield><datafield tag=\"650\" ind1=\" \" ind2=\"0\"><subfield + code=\"a\">Teaching</subfield><subfield code=\"x\">Methodology.</subfield></datafield><datafield + tag=\"710\" ind1=\"2\" ind2=\" \"><subfield code=\"a\">Sa-raÌ„ Bod kyi mtho rim + slob gñer khaṅ.</subfield></datafield></record></collection>" + published_display: + - Dharamsala, Distt. Kangra, H.P. + title_t: + - SÌes yon. + pub_date: + - '2007' + pub_date_sort: 2007 + format: Book + title_display: SÌes yon + subject_addl_t: + - China Tibet + - Education India + - Study and teaching India + - Methodology + - Education Policy + material_type_display: + - xii, 419 p. + subject_t: + - Education and state + - Tibetans + - Tibetan language + - Teaching + title_sort: sÌes yon + id: '2008308478' + author_sort: "\U0010FFFF SÌes yon" + title_addl_t: + - SÌes yon. + subject_geo_facet: + - China + - Tibet + - India + subject_topic_facet: + - Education and state + - Tibetans + - Tibetan language + - Teaching + author_addl_t: + - Sa-raÌ„ Bod kyi mtho rim slob gñer khaṅ. + language_facet: + - Tibetan + timestamp: '2014-02-03T18:42:53.056Z' +- author_vern_display: "å‰ç”°ä¸€, 1934-" + subject_addl_t: + - 20th century History and criticism + - History and criticism + - Japan History + title_display: Kubo Sakae 'Kazanbaichi' o yomu + subject_era_facet: + - 20th century + id: '2008543486' + isbn_t: + - '9784588460050' + - '4588460056' + subject_geo_facet: + - Japan + subject_topic_facet: + - Kubo, Sakae, 1901-1958 + - Japanese drama + - Political plays, Japanese + - Theater + lc_alpha_facet: + - PL + author_t: + - Yoshida, Hajime, + - "å‰ç”°ä¸€" + lc_1letter_facet: + - P - Language & Literature + marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>01230nam + a22003494a 4500</leader><controlfield tag=\"001\"> 2008543486</controlfield><controlfield + tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090126101044.0</controlfield><controlfield + tag=\"008\">081217s1997 ja 000 0 jpn d</controlfield><datafield + tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\"> 2008543486</subfield><subfield + code=\"z\"> 2000314247</subfield></datafield><datafield tag=\"020\" ind1=\" \" + ind2=\" \"><subfield code=\"a\">9784588460050</subfield></datafield><datafield + tag=\"020\" ind1=\" \" ind2=\" \"><subfield code=\"a\">4588460056</subfield></datafield><datafield + tag=\"035\" ind1=\" \" ind2=\" \"><subfield code=\"a\">(OCoLC)ocm40868083</subfield></datafield><datafield + tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">UIU</subfield><subfield + code=\"c\">UIU</subfield><subfield code=\"d\">TRCLS</subfield><subfield code=\"d\">OCLCG</subfield><subfield + code=\"d\">DLC</subfield></datafield><datafield tag=\"042\" ind1=\" \" ind2=\" + \"><subfield code=\"a\">lccopycat</subfield></datafield><datafield tag=\"043\" + ind1=\" \" ind2=\" \"><subfield code=\"a\">a-ja---</subfield></datafield><datafield + tag=\"050\" ind1=\"0\" ind2=\"0\"><subfield code=\"a\">PL832.U25</subfield><subfield + code=\"b\">Z96 1997</subfield></datafield><datafield tag=\"066\" ind1=\" \" ind2=\" + \"><subfield code=\"c\">$1</subfield></datafield><datafield tag=\"100\" ind1=\"1\" + ind2=\" \"><subfield code=\"6\">880-01</subfield><subfield code=\"a\">Yoshida, + Hajime,</subfield><subfield code=\"d\">1934-</subfield></datafield><datafield + tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield code=\"6\">880-02</subfield><subfield + code=\"a\">Kubo Sakae 'Kazanbaichi' o yomu /</subfield><subfield code=\"c\">Yoshida + Hajime cho.</subfield></datafield><datafield tag=\"250\" ind1=\" \" ind2=\" \"><subfield + code=\"6\">880-03</subfield><subfield code=\"a\">Shohan.</subfield></datafield><datafield + tag=\"260\" ind1=\" \" ind2=\" \"><subfield code=\"6\">880-04</subfield><subfield + code=\"a\">ToÌ„kyoÌ„ :</subfield><subfield code=\"b\">HoÌ„sei Daigaku Shuppankyoku,</subfield><subfield + code=\"c\">1997.</subfield></datafield><datafield tag=\"300\" ind1=\" \" ind2=\" + \"><subfield code=\"a\">480 p. ;</subfield><subfield code=\"c\">19 cm.</subfield></datafield><datafield + tag=\"600\" ind1=\"1\" ind2=\"0\"><subfield code=\"6\">880-05</subfield><subfield + code=\"a\">Kubo, Sakae,</subfield><subfield code=\"d\">1901-1958.</subfield><subfield + code=\"t\">Kazanbaichi.</subfield></datafield><datafield tag=\"650\" ind1=\" \" + ind2=\"0\"><subfield code=\"a\">Japanese drama</subfield><subfield code=\"y\">20th + century</subfield><subfield code=\"x\">History and criticism.</subfield></datafield><datafield + tag=\"650\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Political plays, Japanese</subfield><subfield + code=\"x\">History and criticism.</subfield></datafield><datafield tag=\"650\" + ind1=\" \" ind2=\"0\"><subfield code=\"a\">Theater</subfield><subfield code=\"z\">Japan</subfield><subfield + code=\"x\">History.</subfield></datafield><datafield tag=\"880\" ind1=\"1\" ind2=\" + \"><subfield code=\"6\">100-01/$1</subfield><subfield code=\"a\">å‰ç”°ä¸€,</subfield><subfield + code=\"d\">1934-</subfield></datafield><datafield tag=\"880\" ind1=\"1\" ind2=\"0\"><subfield + code=\"6\">245-02/$1</subfield><subfield code=\"a\">ä¹…ä¿æ „「ç«å±±ç°åœ°ã€ã‚’èªã‚€ /</subfield><subfield + code=\"c\">å‰ç”°ä¸€è‘—.</subfield></datafield><datafield tag=\"880\" ind1=\" \" ind2=\" + \"><subfield code=\"6\">250-03/$1</subfield><subfield code=\"a\">åˆç‰ˆ.</subfield></datafield><datafield + tag=\"880\" ind1=\" \" ind2=\" \"><subfield code=\"6\">260-04/$1</subfield><subfield + code=\"a\">æ±äº¬ :</subfield><subfield code=\"b\">法政大å¦å‡ºç‰ˆå±€,</subfield><subfield code=\"c\">1997.</subfield></datafield><datafield + tag=\"880\" ind1=\"1\" ind2=\"0\"><subfield code=\"6\">600-05/$1</subfield><subfield + code=\"a\">ä¹…ä¿æ „,</subfield><subfield code=\"d\">1901-1958.</subfield><subfield + code=\"t\">Kazanbaichi.</subfield></datafield></record></collection>" + published_display: + - ToÌ„kyoÌ„ + author_display: Yoshida, Hajime, 1934- + title_vern_display: "ä¹…ä¿æ „「ç«å±±ç°åœ°ã€ã‚’èªã‚€" + lc_callnum_display: + - PL832.U25 Z96 1997 + title_t: + - Kubo Sakae 'Kazanbaichi' o yomu / + - "ä¹…ä¿æ „「ç«å±±ç°åœ°ã€ã‚’èªã‚€" + pub_date: + - '1997' + pub_date_sort: 1997 + published_vern_display: + - "æ±äº¬" + format: Book + lc_b4cutter_facet: + - PL832.U25 + material_type_display: + - 480 p. + subject_t: + - Kubo, Sakae, 1901-1958. Kazanbaichi + - Japanese drama + - Political plays, Japanese + - Theater + - "ä¹…ä¿æ „, 1901-1958. Kazanbaichi" + title_sort: kubo sakae 'kazanbaichi' o yomu + author_sort: Yoshida Hajime 1934 Kubo Sakae Kazanbaichi o yomu + title_addl_t: + - Kubo Sakae 'Kazanbaichi' o yomu / + - "ä¹…ä¿æ „「ç«å±±ç°åœ°ã€ã‚’èªã‚€" + language_facet: + - Japanese + timestamp: '2014-02-03T18:42:53.056Z' +- author_vern_display: "æž—è¡Œæ¢" + subject_addl_t: + - 1990- + - 2005-2015 + - Economic conditions 1997- + - Politics and government 1997- + title_display: Ci an zhou bian + subject_era_facet: + - 1990- + - 2005-2015 + - 1997- + id: '2009373513' + isbn_t: + - '9789573908678' + - '9573908670' + subject_geo_facet: + - Economic history + - World politics + - Hong Kong (China) + lc_alpha_facet: + - HC + title_series_t: + - Lin Xingzhi zuo pin ji ; 51 + - "æž—è¡Œæ¢ä½œå“集 ; 51" + author_t: + - Lin, Xingzhi. + - "æž—è¡Œæ¢" + lc_1letter_facet: + - H - Social Sciences + marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>01213nam + a22003614a 4500</leader><controlfield tag=\"001\"> 2009373513</controlfield><controlfield + tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090121153231.0</controlfield><controlfield + tag=\"008\">090114s2008 ch 000 0 chi d</controlfield><datafield + tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\"> 2009373513</subfield></datafield><datafield + tag=\"020\" ind1=\" \" ind2=\" \"><subfield code=\"a\">9789573908678</subfield></datafield><datafield + tag=\"020\" ind1=\" \" ind2=\" \"><subfield code=\"a\">9573908670</subfield></datafield><datafield + tag=\"035\" ind1=\" \" ind2=\" \"><subfield code=\"a\">(OCoLC)ocn268619391</subfield></datafield><datafield + tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">HUA</subfield><subfield + code=\"c\">HUA</subfield><subfield code=\"d\">HKP</subfield><subfield code=\"d\">DLC</subfield></datafield><datafield + tag=\"042\" ind1=\" \" ind2=\" \"><subfield code=\"a\">lccopycat</subfield></datafield><datafield + tag=\"043\" ind1=\" \" ind2=\" \"><subfield code=\"a\">a-cc-hk</subfield></datafield><datafield + tag=\"050\" ind1=\"0\" ind2=\"0\"><subfield code=\"a\">HC59.15</subfield><subfield + code=\"b\">.L533 2008</subfield></datafield><datafield tag=\"066\" ind1=\" \" + ind2=\" \"><subfield code=\"c\">$1</subfield></datafield><datafield tag=\"100\" + ind1=\"1\" ind2=\" \"><subfield code=\"6\">880-01</subfield><subfield code=\"a\">Lin, + Xingzhi.</subfield></datafield><datafield tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield + code=\"6\">880-02</subfield><subfield code=\"a\">Ci an zhou bian /</subfield><subfield + code=\"c\">Lin Xingzhi zhu.</subfield></datafield><datafield tag=\"250\" ind1=\" + \" ind2=\" \"><subfield code=\"6\">880-03</subfield><subfield code=\"a\">Chu ban.</subfield></datafield><datafield + tag=\"260\" ind1=\" \" ind2=\" \"><subfield code=\"6\">880-04</subfield><subfield + code=\"a\">Taibei Xian Banqiao Shi :</subfield><subfield code=\"b\">Yuan jing + chu ban shi ye you xian gong si,</subfield><subfield code=\"c\">2008.</subfield></datafield><datafield + tag=\"300\" ind1=\" \" ind2=\" \"><subfield code=\"a\">5, 300 p. ;</subfield><subfield + code=\"c\">21 cm.</subfield></datafield><datafield tag=\"490\" ind1=\"0\" ind2=\" + \"><subfield code=\"6\">880-05</subfield><subfield code=\"a\">Lin Xingzhi zuo + pin ji ;</subfield><subfield code=\"v\">51</subfield></datafield><datafield tag=\"651\" + ind1=\" \" ind2=\"0\"><subfield code=\"a\">Economic history</subfield><subfield + code=\"y\">1990-</subfield></datafield><datafield tag=\"651\" ind1=\" \" ind2=\"0\"><subfield + code=\"a\">World politics</subfield><subfield code=\"y\">2005-2015.</subfield></datafield><datafield + tag=\"651\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Hong Kong (China)</subfield><subfield + code=\"x\">Economic conditions</subfield><subfield code=\"y\">1997-</subfield></datafield><datafield + tag=\"651\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Hong Kong (China)</subfield><subfield + code=\"x\">Politics and government</subfield><subfield code=\"y\">1997-</subfield></datafield><datafield + tag=\"880\" ind1=\"1\" ind2=\" \"><subfield code=\"6\">100-01/$1</subfield><subfield + code=\"a\">æž—è¡Œæ¢.</subfield></datafield><datafield tag=\"880\" ind1=\"1\" ind2=\"0\"><subfield + code=\"6\">245-02/$1</subfield><subfield code=\"a\">次按驟變 /</subfield><subfield + code=\"c\">æž—è¡Œæ¢è‘—.</subfield></datafield><datafield tag=\"880\" ind1=\" \" ind2=\" + \"><subfield code=\"6\">250-03/$1</subfield><subfield code=\"a\">åˆç‰ˆ.</subfield></datafield><datafield + tag=\"880\" ind1=\" \" ind2=\" \"><subfield code=\"6\">260-04/$1</subfield><subfield + code=\"a\">臺北縣æ¿æ©‹å¸‚ :</subfield><subfield code=\"b\">é 景出版事æ¥æœ‰é™å…¬å¸,</subfield><subfield + code=\"c\">2008.</subfield></datafield><datafield tag=\"880\" ind1=\"0\" ind2=\" + \"><subfield code=\"6\">490-05/$1</subfield><subfield code=\"a\">æž—è¡Œæ¢ä½œå“集 ;</subfield><subfield + code=\"v\">51</subfield></datafield></record></collection>" + published_display: + - Taibei Xian Banqiao Shi + author_display: Lin, Xingzhi + title_vern_display: "次按驟變" + lc_callnum_display: + - HC59.15 .L533 2008 + title_t: + - Ci an zhou bian / + - "次按驟變" + pub_date: + - '2008' + pub_date_sort: 2008 + published_vern_display: + - "臺北縣æ¿æ©‹å¸‚" + format: Book + lc_b4cutter_facet: + - HC59.15 + material_type_display: + - 5, 300 p. + subject_t: + - Economic history + - World politics + - Hong Kong (China) + title_sort: ci an zhou bian + author_sort: Lin Xingzhi Ci an zhou bian + title_addl_t: + - Ci an zhou bian / + - "次按驟變" + language_facet: + - Chinese + timestamp: '2014-02-03T18:42:53.056Z' diff --git a/hyrax/spec/actors/hyrax/actors/dataset_actor_spec.rb b/hyrax/spec/actors/hyrax/actors/dataset_actor_spec.rb new file mode 100644 index 00000000..4bb60aef --- /dev/null +++ b/hyrax/spec/actors/hyrax/actors/dataset_actor_spec.rb @@ -0,0 +1,9 @@ +# Generated via +# `rails generate hyrax:work Dataset` +require 'rails_helper' + +RSpec.describe Hyrax::Actors::DatasetActor do + it "has tests" do + skip "Add your tests here" + end +end diff --git a/hyrax/spec/controllers/hyrax/datasets_controller_spec.rb b/hyrax/spec/controllers/hyrax/datasets_controller_spec.rb new file mode 100644 index 00000000..db10c1ce --- /dev/null +++ b/hyrax/spec/controllers/hyrax/datasets_controller_spec.rb @@ -0,0 +1,9 @@ +# Generated via +# `rails generate hyrax:work Dataset` +require 'rails_helper' + +RSpec.describe Hyrax::DatasetsController do + it "has tests" do + skip "Add your tests here" + end +end diff --git a/hyrax/spec/features/create_dataset_spec.rb b/hyrax/spec/features/create_dataset_spec.rb new file mode 100644 index 00000000..40c17322 --- /dev/null +++ b/hyrax/spec/features/create_dataset_spec.rb @@ -0,0 +1,70 @@ +# Generated via +# `rails generate hyrax:work Dataset` +require 'rails_helper' +include Warden::Test::Helpers + +# NOTE: If you generated more than one work, you have to set "js: true" +RSpec.feature 'Create a Dataset', js: false do + context 'a logged in user' do + let(:user_attributes) do + { email: 'test@example.com' } + end + let(:user) do + User.new(user_attributes) { |u| u.save(validate: false) } + end + let(:admin_set_id) { Hyrax::AdminSetCreateService.find_or_create_default_admin_set.id.to_s } + let(:permission_template) { Hyrax::PermissionTemplate.find_or_create_by!(source_id: admin_set_id) } + let(:workflow) { Sipity::Workflow.create!(active: true, name: 'test-workflow', permission_template: permission_template) } + + before do + # Create a single action that can be taken + Sipity::WorkflowAction.create!(name: 'submit', workflow: workflow) + + # Grant the user access to deposit into the admin set. + Hyrax::PermissionTemplateAccess.create!( + permission_template_id: permission_template.id, + agent_type: 'user', + agent_id: user.user_key, + access: 'deposit' + ) + login_as user + end + + scenario do + pending 'Changes may be required for this test to pass. See TODO in test.' + + visit '/dashboard' + click_link "Works" + click_link "Add new work" + + # TODO: If you generate more than one work uncomment these lines + # choose "payload_concern", option: "Dataset" + # click_button "Create work" + + expect(page).to have_content "Add New Dataset" + click_link "Files" # switch tab + expect(page).to have_content "Add files" + expect(page).to have_content "Add folder" + within('div#add-files') do + attach_file("files[]", "#{Hyrax::Engine.root}/spec/fixtures/image.jp2", visible: false) + attach_file("files[]", "#{Hyrax::Engine.root}/spec/fixtures/jp2_fits.xml", visible: false) + end + click_link "Descriptions" # switch tab + fill_in('Title', with: 'My Test Work') + fill_in('Creator', with: 'Doe, Jane') + select('In Copyright', from: 'Rights statement') + + # With selenium and the chrome driver, focus remains on the + # select box. Click outside the box so the next line can't find + # its element + find('body').click + choose('dataset_visibility_open') + expect(page).to have_content('Please note, making something visible to the world (i.e. marking this as Public) may be viewed as publishing which could impact your ability to') + check('agreement') + + click_on('Save') + expect(page).to have_content('My Test Work') + expect(page).to have_content "Your files are being processed by Hyrax in the background." + end + end +end diff --git a/hyrax/spec/forms/hyrax/dataset_form_spec.rb b/hyrax/spec/forms/hyrax/dataset_form_spec.rb new file mode 100644 index 00000000..0e35e8ea --- /dev/null +++ b/hyrax/spec/forms/hyrax/dataset_form_spec.rb @@ -0,0 +1,9 @@ +# Generated via +# `rails generate hyrax:work Dataset` +require 'rails_helper' + +RSpec.describe Hyrax::DatasetForm do + it "has tests" do + skip "Add your tests here" + end +end diff --git a/hyrax/spec/models/collection_spec.rb b/hyrax/spec/models/collection_spec.rb new file mode 100644 index 00000000..304c637c --- /dev/null +++ b/hyrax/spec/models/collection_spec.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +require 'rails_helper' + +RSpec.describe Collection do + it "has tests" do + skip "Add your tests here" + end +end diff --git a/hyrax/spec/models/dataset_spec.rb b/hyrax/spec/models/dataset_spec.rb new file mode 100644 index 00000000..77a91571 --- /dev/null +++ b/hyrax/spec/models/dataset_spec.rb @@ -0,0 +1,9 @@ +# Generated via +# `rails generate hyrax:work Dataset` +require 'rails_helper' + +RSpec.describe Dataset do + it "has tests" do + skip "Add your tests here" + end +end diff --git a/hyrax/spec/models/file_set_spec.rb b/hyrax/spec/models/file_set_spec.rb new file mode 100644 index 00000000..ee22238b --- /dev/null +++ b/hyrax/spec/models/file_set_spec.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +require 'rails_helper' + +RSpec.describe FileSet do + it "has tests" do + skip "Add your tests here" + end +end diff --git a/hyrax/spec/models/qa/local_authority_entry_spec.rb b/hyrax/spec/models/qa/local_authority_entry_spec.rb new file mode 100644 index 00000000..031019d9 --- /dev/null +++ b/hyrax/spec/models/qa/local_authority_entry_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe Qa::LocalAuthorityEntry, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/hyrax/spec/models/qa/local_authority_spec.rb b/hyrax/spec/models/qa/local_authority_spec.rb new file mode 100644 index 00000000..dda462a5 --- /dev/null +++ b/hyrax/spec/models/qa/local_authority_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe Qa::LocalAuthority, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/hyrax/spec/presenters/hyrax/dataset_presenter_spec.rb b/hyrax/spec/presenters/hyrax/dataset_presenter_spec.rb new file mode 100644 index 00000000..1d69ff0f --- /dev/null +++ b/hyrax/spec/presenters/hyrax/dataset_presenter_spec.rb @@ -0,0 +1,9 @@ +# Generated via +# `rails generate hyrax:work Dataset` +require 'rails_helper' + +RSpec.describe Hyrax::DatasetPresenter do + it "has tests" do + skip "Add your tests here" + end +end diff --git a/hyrax/spec/rails_helper.rb b/hyrax/spec/rails_helper.rb new file mode 100644 index 00000000..b6317b5a --- /dev/null +++ b/hyrax/spec/rails_helper.rb @@ -0,0 +1,64 @@ +# This file is copied to spec/ when you run 'rails generate rspec:install' +require 'spec_helper' +ENV['RAILS_ENV'] ||= 'test' +require_relative '../config/environment' +# Prevent database truncation if the environment is production +abort("The Rails environment is running in production mode!") if Rails.env.production? +require 'rspec/rails' +# Add additional requires below this line. Rails is not loaded until this point! + +# Requires supporting ruby files with custom matchers and macros, etc, in +# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are +# run as spec files by default. This means that files in spec/support that end +# in _spec.rb will both be required and run as specs, causing the specs to be +# run twice. It is recommended that you do not name files matching this glob to +# end with _spec.rb. You can configure this pattern with the --pattern +# option on the command line or in ~/.rspec, .rspec or `.rspec-local`. +# +# The following line is provided for convenience purposes. It has the downside +# of increasing the boot-up time by auto-requiring all files in the support +# directory. Alternatively, in the individual `*_spec.rb` files, manually +# require only the support files necessary. +# +# Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f } + +# Checks for pending migrations and applies them before tests are run. +# If you are not using ActiveRecord, you can remove these lines. +begin + ActiveRecord::Migration.maintain_test_schema! +rescue ActiveRecord::PendingMigrationError => e + puts e.to_s.strip + exit 1 +end +RSpec.configure do |config| + # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures + config.fixture_path = "#{::Rails.root}/spec/fixtures" + + # If you're not using ActiveRecord, or you'd prefer not to run each of your + # examples within a transaction, remove the following line or assign false + # instead of true. + config.use_transactional_fixtures = true + + # You can uncomment this line to turn off ActiveRecord support entirely. + # config.use_active_record = false + + # RSpec Rails can automatically mix in different behaviours to your tests + # based on their file location, for example enabling you to call `get` and + # `post` in specs under `spec/controllers`. + # + # You can disable this behaviour by removing the line below, and instead + # explicitly tag your specs with their type, e.g.: + # + # RSpec.describe UsersController, type: :controller do + # # ... + # end + # + # The different available types are documented in the features, such as in + # https://relishapp.com/rspec/rspec-rails/docs + config.infer_spec_type_from_file_location! + + # Filter lines from Rails gems in backtraces. + config.filter_rails_from_backtrace! + # arbitrary gems may also be filtered via: + # config.filter_gems_from_backtrace("gem name") +end diff --git a/hyrax/spec/spec_helper.rb b/hyrax/spec/spec_helper.rb new file mode 100644 index 00000000..a0d40805 --- /dev/null +++ b/hyrax/spec/spec_helper.rb @@ -0,0 +1,94 @@ +# This file was generated by the `rails generate rspec:install` command. Conventionally, all +# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`. +# The generated `.rspec` file contains `--require spec_helper` which will cause +# this file to always be loaded, without a need to explicitly require it in any +# files. +# +# Given that it is always loaded, you are encouraged to keep this file as +# light-weight as possible. Requiring heavyweight dependencies from this file +# will add to the boot time of your test suite on EVERY test run, even for an +# individual file that may not need all of that loaded. Instead, consider making +# a separate helper file that requires the additional dependencies and performs +# the additional setup, and require it from the spec files that actually need +# it. +# +# See https://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration +RSpec.configure do |config| + # rspec-expectations config goes here. You can use an alternate + # assertion/expectation library such as wrong or the stdlib/minitest + # assertions if you prefer. + config.expect_with :rspec do |expectations| + # This option will default to `true` in RSpec 4. It makes the `description` + # and `failure_message` of custom matchers include text for helper methods + # defined using `chain`, e.g.: + # be_bigger_than(2).and_smaller_than(4).description + # # => "be bigger than 2 and smaller than 4" + # ...rather than: + # # => "be bigger than 2" + expectations.include_chain_clauses_in_custom_matcher_descriptions = true + end + + # rspec-mocks config goes here. You can use an alternate test double + # library (such as bogus or mocha) by changing the `mock_with` option here. + config.mock_with :rspec do |mocks| + # Prevents you from mocking or stubbing a method that does not exist on + # a real object. This is generally recommended, and will default to + # `true` in RSpec 4. + mocks.verify_partial_doubles = true + end + + # This option will default to `:apply_to_host_groups` in RSpec 4 (and will + # have no way to turn it off -- the option exists only for backwards + # compatibility in RSpec 3). It causes shared context metadata to be + # inherited by the metadata hash of host groups and examples, rather than + # triggering implicit auto-inclusion in groups with matching metadata. + config.shared_context_metadata_behavior = :apply_to_host_groups + +# The settings below are suggested to provide a good initial experience +# with RSpec, but feel free to customize to your heart's content. +=begin + # This allows you to limit a spec run to individual examples or groups + # you care about by tagging them with `:focus` metadata. When nothing + # is tagged with `:focus`, all examples get run. RSpec also provides + # aliases for `it`, `describe`, and `context` that include `:focus` + # metadata: `fit`, `fdescribe` and `fcontext`, respectively. + config.filter_run_when_matching :focus + + # Allows RSpec to persist some state between runs in order to support + # the `--only-failures` and `--next-failure` CLI options. We recommend + # you configure your source control system to ignore this file. + config.example_status_persistence_file_path = "spec/examples.txt" + + # Limits the available syntax to the non-monkey patched syntax that is + # recommended. For more details, see: + # https://relishapp.com/rspec/rspec-core/docs/configuration/zero-monkey-patching-mode + config.disable_monkey_patching! + + # Many RSpec users commonly either run the entire suite or an individual + # file, and it's useful to allow more verbose output when running an + # individual spec file. + if config.files_to_run.one? + # Use the documentation formatter for detailed output, + # unless a formatter has already been configured + # (e.g. via a command-line flag). + config.default_formatter = "doc" + end + + # Print the 10 slowest examples and example groups at the + # end of the spec run, to help surface which specs are running + # particularly slow. + config.profile_examples = 10 + + # Run specs in random order to surface order dependencies. If you find an + # order dependency and want to debug it, you can fix the order by providing + # the seed, which is printed after each run. + # --seed 1234 + config.order = :random + + # Seed global randomization in this process using the `--seed` CLI option. + # Setting this allows you to use `--seed` to deterministically reproduce + # test failures related to randomization by passing the same `--seed` value + # as the one that triggered the failure. + Kernel.srand config.seed +=end +end diff --git a/hyrax/storage/.keep b/hyrax/storage/.keep new file mode 100644 index 00000000..e69de29b diff --git a/hyrax/test/application_system_test_case.rb b/hyrax/test/application_system_test_case.rb new file mode 100644 index 00000000..d19212ab --- /dev/null +++ b/hyrax/test/application_system_test_case.rb @@ -0,0 +1,5 @@ +require "test_helper" + +class ApplicationSystemTestCase < ActionDispatch::SystemTestCase + driven_by :selenium, using: :chrome, screen_size: [1400, 1400] +end diff --git a/hyrax/test/controllers/.keep b/hyrax/test/controllers/.keep new file mode 100644 index 00000000..e69de29b diff --git a/hyrax/test/fixtures/.keep b/hyrax/test/fixtures/.keep new file mode 100644 index 00000000..e69de29b diff --git a/hyrax/test/fixtures/files/.keep b/hyrax/test/fixtures/files/.keep new file mode 100644 index 00000000..e69de29b diff --git a/hyrax/test/fixtures/users.yml b/hyrax/test/fixtures/users.yml new file mode 100644 index 00000000..80aed36e --- /dev/null +++ b/hyrax/test/fixtures/users.yml @@ -0,0 +1,11 @@ +# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html + +# This model initially had no columns defined. If you add columns to the +# model remove the '{}' from the fixture names and add the columns immediately +# below each fixture, per the syntax in the comments below +# +one: {} +# column: value +# +two: {} +# column: value diff --git a/hyrax/test/helpers/.keep b/hyrax/test/helpers/.keep new file mode 100644 index 00000000..e69de29b diff --git a/hyrax/test/integration/.keep b/hyrax/test/integration/.keep new file mode 100644 index 00000000..e69de29b diff --git a/hyrax/test/mailers/.keep b/hyrax/test/mailers/.keep new file mode 100644 index 00000000..e69de29b diff --git a/hyrax/test/models/.keep b/hyrax/test/models/.keep new file mode 100644 index 00000000..e69de29b diff --git a/hyrax/test/models/user_test.rb b/hyrax/test/models/user_test.rb new file mode 100644 index 00000000..82f61e01 --- /dev/null +++ b/hyrax/test/models/user_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class UserTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end diff --git a/hyrax/test/system/.keep b/hyrax/test/system/.keep new file mode 100644 index 00000000..e69de29b diff --git a/hyrax/test/test_helper.rb b/hyrax/test/test_helper.rb new file mode 100644 index 00000000..3ab84e3d --- /dev/null +++ b/hyrax/test/test_helper.rb @@ -0,0 +1,10 @@ +ENV['RAILS_ENV'] ||= 'test' +require_relative '../config/environment' +require 'rails/test_help' + +class ActiveSupport::TestCase + # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order. + fixtures :all + + # Add more helper methods to be used by all tests here... +end diff --git a/hyrax/tmp/.keep b/hyrax/tmp/.keep new file mode 100644 index 00000000..e69de29b diff --git a/hyrax/vendor/.keep b/hyrax/vendor/.keep new file mode 100644 index 00000000..e69de29b diff --git a/matomo.conf b/matomo.conf new file mode 100644 index 00000000..d5401f65 --- /dev/null +++ b/matomo.conf @@ -0,0 +1,69 @@ +upstream php-handler { + server matomo_app:9000; +} + +server { + listen 80; + + add_header Referrer-Policy origin; # make sure outgoing links don't show the URL to the Matomo instance + root /var/www/html; # replace with path to your matomo instance + index index.php; + try_files $uri $uri/ =404; + + ## only allow accessing the following php files + location ~ ^/(index|matomo|piwik|js/index|plugins/HeatmapSessionRecording/configs).php { + # regex to split $uri to $fastcgi_script_name and $fastcgi_path + fastcgi_split_path_info ^(.+\.php)(/.+)$; + + # Check that the PHP script exists before passing it + try_files $fastcgi_script_name =404; + + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param PATH_INFO $fastcgi_path_info; + fastcgi_param HTTP_PROXY ""; # prohibit httpoxy: https://httpoxy.org/ + fastcgi_pass php-handler; + } + + ## deny access to all other .php files + location ~* ^.+\.php$ { + deny all; + return 403; + } + + ## disable all access to the following directories + location ~ /(config|tmp|core|lang) { + deny all; + return 403; # replace with 404 to not show these directories exist + } + location ~ /\.ht { + deny all; + return 403; + } + + location ~ js/container_.*_preview\.js$ { + expires off; + add_header Cache-Control 'private, no-cache, no-store'; + } + + location ~ \.(gif|ico|jpg|png|svg|js|css|htm|html|mp3|mp4|wav|ogg|avi|ttf|eot|woff|woff2|json)$ { + allow all; + ## Cache images,CSS,JS and webfonts for an hour + ## Increasing the duration may improve the load-time, but may cause old files to show after an Matomo upgrade + expires 1h; + add_header Pragma public; + add_header Cache-Control "public"; + } + + location ~ /(libs|vendor|plugins|misc/user) { + deny all; + return 403; + } + + ## properly display textfiles in root directory + location ~/(.*\.md|LEGALNOTICE|LICENSE) { + default_type text/plain; + } +} + +# vim: filetype=nginx diff --git a/matomo_config.ini.php b/matomo_config.ini.php new file mode 100644 index 00000000..99c8167b --- /dev/null +++ b/matomo_config.ini.php @@ -0,0 +1,79 @@ +; <?php exit; ?> DO NOT REMOVE THIS LINE +; file automatically generated or modified by Matomo; you can manually override the default values in global.ini.php by redefining them in this file. +[database] +host = "matomo_db" +username = "matomo" +password = "password" +dbname = "matomo" +tables_prefix = "matomo_" +charset = "utf8mb4" + +[General] +salt = "62d1afc176ba96cd3d5a13af32ad762b" +trusted_hosts[] = "localhost:8000" + +[PluginsInstalled] +PluginsInstalled[] = "Diagnostics" +PluginsInstalled[] = "Login" +PluginsInstalled[] = "CoreAdminHome" +PluginsInstalled[] = "UsersManager" +PluginsInstalled[] = "SitesManager" +PluginsInstalled[] = "Installation" +PluginsInstalled[] = "Monolog" +PluginsInstalled[] = "Intl" +PluginsInstalled[] = "CoreVue" +PluginsInstalled[] = "CorePluginsAdmin" +PluginsInstalled[] = "CoreHome" +PluginsInstalled[] = "WebsiteMeasurable" +PluginsInstalled[] = "IntranetMeasurable" +PluginsInstalled[] = "CoreVisualizations" +PluginsInstalled[] = "Proxy" +PluginsInstalled[] = "API" +PluginsInstalled[] = "Widgetize" +PluginsInstalled[] = "Transitions" +PluginsInstalled[] = "LanguagesManager" +PluginsInstalled[] = "Actions" +PluginsInstalled[] = "Dashboard" +PluginsInstalled[] = "MultiSites" +PluginsInstalled[] = "Referrers" +PluginsInstalled[] = "UserLanguage" +PluginsInstalled[] = "DevicesDetection" +PluginsInstalled[] = "Goals" +PluginsInstalled[] = "Ecommerce" +PluginsInstalled[] = "SEO" +PluginsInstalled[] = "Events" +PluginsInstalled[] = "UserCountry" +PluginsInstalled[] = "GeoIp2" +PluginsInstalled[] = "VisitsSummary" +PluginsInstalled[] = "VisitFrequency" +PluginsInstalled[] = "VisitTime" +PluginsInstalled[] = "VisitorInterest" +PluginsInstalled[] = "RssWidget" +PluginsInstalled[] = "Feedback" +PluginsInstalled[] = "TwoFactorAuth" +PluginsInstalled[] = "CoreUpdater" +PluginsInstalled[] = "CoreConsole" +PluginsInstalled[] = "ScheduledReports" +PluginsInstalled[] = "UserCountryMap" +PluginsInstalled[] = "Live" +PluginsInstalled[] = "PrivacyManager" +PluginsInstalled[] = "ImageGraph" +PluginsInstalled[] = "Annotations" +PluginsInstalled[] = "MobileMessaging" +PluginsInstalled[] = "Overlay" +PluginsInstalled[] = "SegmentEditor" +PluginsInstalled[] = "Insights" +PluginsInstalled[] = "Morpheus" +PluginsInstalled[] = "Contents" +PluginsInstalled[] = "BulkTracking" +PluginsInstalled[] = "Resolution" +PluginsInstalled[] = "DevicePlugins" +PluginsInstalled[] = "Heartbeat" +PluginsInstalled[] = "Marketplace" +PluginsInstalled[] = "ProfessionalServices" +PluginsInstalled[] = "UserId" +PluginsInstalled[] = "CustomJsTracker" +PluginsInstalled[] = "Tour" +PluginsInstalled[] = "PagePerformance" +PluginsInstalled[] = "CustomDimensions" + -- GitLab