Git Product home page Git Product logo

islandora's Introduction

Islandora

Minimum PHP Version Build Status Contribution Guidelines LICENSE codecov

Introduction

This is the core module of Islandora's digital repository ecosystem. The islandora module provides:

  • Fedora 5 integration via the flysystem module
  • Integration with the context module to control your digital repository's behaviour
  • Publishing messages to a queue so they can be processed in the background

islandora contains several submodules and features:

  • islandora_core_feature (required)
    • Configuration required by the islandora module
  • islandora_image
    • Integrates with a Houdini (Imagemagick) server for image processing
  • islandora_audio and islandora_video
    • Integrate with a Homarus (ffmpeg) server for audio/video processing
  • islandora_text_extraction and islandora_text_extraction_defaults
    • Integrate with a Hypercube (tessseract and pdftotext) server for text extraction
  • islandora_breadcrumbs
    • Provides breadcrumbs following collection structure
  • islandora_iiif
    • Provides IIIF manifests for repository content

Requirements

Installing via composer will download all required libraries and modules. However, for reference, islandora requires the following drupal modules:

It also requires the following PHP libraries:

If you are using a Drush version less than 10.4 you will also need to install and enable migrate_tools separately.

Installation

For a full digital repository solution, see our installation documentation.

To download/enable just this module, use the following from the command line:

$ composer require islandora/islandora
$ drush en islandora_core_feature
$ drush mim islandora_tags

Configuration

image

You can set the following configuration at admin/config/islandora/core:

  • Broker URL
    • The URL to your message broker (i.e. Activemq)
  • JWT Expiry
    • Set to increase the amount of time that authorization tokens remain valid. If you have a long running derivative processes or a migration, you may need to set this to be a very long time, e.g. 500d. Otherwise, it's best to leave it alone.
  • Gemini URL
    • The URL to your Gemini server, which keeps track of where Islandora content is in Fedora.
  • Fedora URL Display
    • Selected bundles can display the Fedora URL for repository content.

Documentation

Further documentation for this module is available on the Islandora 8 documentation site.

Troubleshooting/Issues

Having problems or solved a problem? Check out the Islandora google groups for a solution.

Maintainers

Current maintainers:

Sponsors

Development

If you would like to contribute, please get involved by attending our weekly Tech Call. We love to hear from you!

If you would like to contribute code to the project, you need to be covered by an Islandora Foundation Contributor License Agreement or Corporate Contributor License Agreement. Please see the Contributor License Agreements page on the islandora-community wiki for more information.

We recommend using the islandora-playbook to get started.

License

GPLv2

islandora's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

islandora's Issues

[BUG] PHP 8.1 compatibility

Automated tests fail on PHP 8.1. Example.

1 - Stomp is not 8.1 compatible. This is a known issue.
2 - During our JsonldTypeAlterReactionTest, NULL gets sent to mb_strtolower() and that's deprecated in 8.1. My attempt to parse the error is that we try to compile() a Drupal\Core\Config\Entity\Query\Condition with $condition['value'] of NULL?

PHPUnit 9.5.21 #StandWithUkraine
Runtime:       PHP 8.1.8
Configuration: /opt/drupal/web/core/phpunit.xml
Testing 
......E....E..E......                                             21 / 21 (100%)
Time: 17:28.178, Memory: 16.00 MB
There were 3 errors:

1) Drupal\Tests\islandora\Functional\EmitNodeEventTest::testEmitEvent
Exception: Deprecated function: Return type of Stomp\Transport\Frame::offsetExists($offset) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice
include()() (Line: 19)

/opt/drupal/web/core/lib/Drupal/Core/Test/HttpClientMiddleware/TestHttpClientMiddleware.php:49
/opt/drupal/vendor/guzzlehttp/promises/src/Promise.php:204
/opt/drupal/vendor/guzzlehttp/promises/src/Promise.php:153
/opt/drupal/vendor/guzzlehttp/promises/src/TaskQueue.php:48
/opt/drupal/vendor/guzzlehttp/promises/src/Promise.php:248
/opt/drupal/vendor/guzzlehttp/promises/src/Promise.php:224
/opt/drupal/vendor/guzzlehttp/promises/src/Promise.php:269
/opt/drupal/vendor/guzzlehttp/promises/src/Promise.php:226
/opt/drupal/vendor/guzzlehttp/promises/src/Promise.php:62
/opt/drupal/vendor/guzzlehttp/guzzle/src/Client.php:182
/opt/drupal/web/core/tests/Drupal/Tests/DrupalTestBrowser.php:137
/opt/drupal/vendor/symfony/browser-kit/Client.php:404
/opt/drupal/vendor/symfony/browser-kit/Client.php:324
/opt/drupal/vendor/friends-of-behat/mink-browserkit-driver/src/BrowserKitDriver.php:719
/opt/drupal/vendor/friends-of-behat/mink-browserkit-driver/src/BrowserKitDriver.php:494
/opt/drupal/vendor/behat/mink/src/Element/NodeElement.php:153
/opt/drupal/vendor/behat/mink/src/Element/NodeElement.php:161
/opt/drupal/web/core/tests/Drupal/Tests/UiHelperTrait.php:100
/opt/drupal/web/core/tests/Drupal/Tests/UiHelperTrait.php:216
/home/runner/work/islandora/islandora/build_dir/tests/src/Functional/IslandoraFunctionalTestBase.php:315
/home/runner/work/islandora/islandora/build_dir/tests/src/Functional/EmitNodeEventTest.php:53
/opt/drupal/vendor/phpunit/phpunit/src/Framework/TestResult.php:726

2) Drupal\Tests\islandora\Functional\IslandoraSettingsFormTest::testJwtExpiry
Exception: Deprecated function: Return type of Stomp\States\Meta\SubscriptionList::getIterator() should either be compatible with IteratorAggregate::getIterator(): Traversable, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice
include()() (Line: 23)

/opt/drupal/web/core/lib/Drupal/Core/Test/HttpClientMiddleware/TestHttpClientMiddleware.php:49
/opt/drupal/vendor/guzzlehttp/promises/src/Promise.php:204
/opt/drupal/vendor/guzzlehttp/promises/src/Promise.php:153
/opt/drupal/vendor/guzzlehttp/promises/src/TaskQueue.php:48
/opt/drupal/vendor/guzzlehttp/promises/src/Promise.php:248
/opt/drupal/vendor/guzzlehttp/promises/src/Promise.php:224
/opt/drupal/vendor/guzzlehttp/promises/src/Promise.php:269
/opt/drupal/vendor/guzzlehttp/promises/src/Promise.php:226
/opt/drupal/vendor/guzzlehttp/promises/src/Promise.php:62
/opt/drupal/vendor/guzzlehttp/guzzle/src/Client.php:182
/opt/drupal/web/core/tests/Drupal/Tests/DrupalTestBrowser.php:137
/opt/drupal/vendor/symfony/browser-kit/Client.php:404
/opt/drupal/vendor/symfony/browser-kit/Client.php:324
/opt/drupal/vendor/friends-of-behat/mink-browserkit-driver/src/BrowserKitDriver.php:719
/opt/drupal/vendor/friends-of-behat/mink-browserkit-driver/src/BrowserKitDriver.php:494
/opt/drupal/vendor/behat/mink/src/Element/NodeElement.php:153
/opt/drupal/vendor/behat/mink/src/Element/NodeElement.php:161
/opt/drupal/web/core/tests/Drupal/Tests/UiHelperTrait.php:100
/opt/drupal/web/core/tests/Drupal/Tests/UiHelperTrait.php:216
/home/runner/work/islandora/islandora/build_dir/tests/src/Functional/IslandoraSettingsFormTest.php:40
/opt/drupal/vendor/phpunit/phpunit/src/Framework/TestResult.php:726

3) Drupal\Tests\islandora\Functional\JsonldTypeAlterReactionTest::testMappingReaction
Exception: Deprecated function: mb_strtolower(): Passing null to parameter #1 ($string) of type string is deprecated
Drupal\Core\Config\Entity\Query\Condition->compile()() (Line: 39)

/opt/drupal/web/core/lib/Drupal/Core/Test/HttpClientMiddleware/TestHttpClientMiddleware.php:49
/opt/drupal/vendor/guzzlehttp/promises/src/Promise.php:204
/opt/drupal/vendor/guzzlehttp/promises/src/Promise.php:153
/opt/drupal/vendor/guzzlehttp/promises/src/TaskQueue.php:48
/opt/drupal/vendor/guzzlehttp/promises/src/Promise.php:248
/opt/drupal/vendor/guzzlehttp/promises/src/Promise.php:224
/opt/drupal/vendor/guzzlehttp/promises/src/Promise.php:269
/opt/drupal/vendor/guzzlehttp/promises/src/Promise.php:226
/opt/drupal/vendor/guzzlehttp/promises/src/Promise.php:62
/opt/drupal/vendor/guzzlehttp/guzzle/src/Client.php:182
/opt/drupal/web/core/tests/Drupal/Tests/DrupalTestBrowser.php:137
/opt/drupal/vendor/symfony/browser-kit/Client.php:404
/opt/drupal/vendor/symfony/browser-kit/Client.php:324
/opt/drupal/vendor/friends-of-behat/mink-browserkit-driver/src/BrowserKitDriver.php:719
/opt/drupal/vendor/friends-of-behat/mink-browserkit-driver/src/BrowserKitDriver.php:494
/opt/drupal/vendor/behat/mink/src/Element/NodeElement.php:153
/opt/drupal/vendor/behat/mink/src/Element/NodeElement.php:161
/opt/drupal/web/core/tests/Drupal/Tests/UiHelperTrait.php:100
/opt/drupal/web/core/tests/Drupal/Tests/UiHelperTrait.php:216
/home/runner/work/islandora/islandora/build_dir/tests/src/Functional/JsonldTypeAlterReactionTest.php:30
/opt/drupal/vendor/phpunit/phpunit/src/Framework/TestResult.php:726
ERRORS!
Tests: 21, Assertions: 340, Errors: 3.

What steps does it take to reproduce the issue?

  • When does this issue occur?

  • Which page does it occur on?

  • What happens?

  • To whom does it occur (anonymous visitor, editor, administrator)?

  • What did you expect to happen?

Which version of Islandora are you using?

Any related open or closed issues to this bug report?

Screenshots:

[BUG] Tests failing on Drupal 10.2.x; `TypeError: trim(): Argument #1 ($string) must be of type string, bool given`

The automated tests are failing on Drupal 10.2.x (which is still unreleased, so it's not critical this passes, but RC1 is out now and release will happen sooner than later).

The error is:

There was 1 error:

1) Drupal\Tests\islandora\FunctionalJavascript\IntegerWeightTest::testIntegerWeightSelector
TypeError: trim(): Argument #1 ($string) must be of type string, bool given

/opt/drupal/web/core/tests/Drupal/FunctionalJavascriptTests/WebDriverCurlService.php:120
/opt/drupal/vendor/instaclick/php-webdriver/lib/WebDriver/AbstractWebDriver.php:125
/opt/drupal/vendor/instaclick/php-webdriver/lib/WebDriver/WebDriver.php:66
/opt/drupal/vendor/behat/mink-selenium2-driver/src/Selenium2Driver.php:300
/opt/drupal/vendor/behat/mink/src/Session.php:70
/opt/drupal/vendor/behat/mink/src/Session.php:145
/opt/drupal/web/core/tests/Drupal/Tests/BrowserTestBase.php:281
/opt/drupal/web/core/tests/Drupal/FunctionalJavascriptTests/WebDriverTestBase.php:88
/opt/drupal/web/core/tests/Drupal/Tests/BrowserTestBase.php:251
/opt/drupal/web/core/tests/Drupal/FunctionalJavascriptTests/WebDriverTestBase.php:54
/opt/drupal/web/core/tests/Drupal/Tests/BrowserTestBase.php:370
/home/runner/work/islandora/islandora/build_dir/tests/src/FunctionalJavascript/IntegerWeightTest.php:84
/opt/drupal/vendor/phpunit/phpunit/src/Framework/TestResult.php:728

I have spent half an hour diving in and can't figure out why it's pointing to IntegerWeightTest's parent::setUp() call, and why trim() doesn't appear except in phpunit's TestCase.php to do with the test's name.

I'm leaving the baton here for now. Feel free to pick it up.

[BUG] Node has Media Use Filter (views) fails if there's relationship

What steps does it take to reproduce the issue?

  • Create a view of content. Apply the "Node has Media Use filter" for example to show content missing Service Files.
  • Add a relationship to the node table. Suppose (in my case) you want to only show books that have children (pages). (some of our books are metadata-only and do not have children). Under relationships, add "Content using field_member_of".

I then see the ajax throbber never completing, and errors come up saying to check the developer console. In the Watchdog is this:

Drupal\Core\Database\IntegrityConstraintViolationException: SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'nid' in IN/ALL/ANY subquery is ambiguous: SELECT "node_field_data"."nid" AS "nid", "field_member_of_node_field_data"."nid" AS "field_member_of_node_field_data_nid" FROM "node_field_data" "node_field_data" LEFT JOIN "node__field_member_of" "node__field_member_of" ON node_field_data.nid = node__field_member_of.field_member_of_target_id AND node__field_member_of.deleted = :views_join_condition_0 LEFT JOIN "node_field_data" "field_member_of_node_field_data" ON node__field_member_of.entity_id = field_member_of_node_field_data.nid WHERE "nid" NOT IN (SELECT "of"."field_media_of_target_id" AS "field_media_of_target_id" FROM "media" "m" INNER JOIN "media__field_media_use" "use" ON m.mid = use.entity_id INNER JOIN "media__field_media_of" "of" ON m.mid = of.entity_id WHERE "use"."field_media_use_target_id" = :db_condition_placeholder_1); Array ( [:db_condition_placeholder_1] => 41 [:views_join_condition_0] => 0 ) in Drupal\mysql\Driver\Database\mysql\ExceptionHandler->handleExecutionException() (line 45 of /var/www/html/drupal/web/core/modules/mysql/src/Driver/Database/mysql/ExceptionHandler.php).

[DEPRECATION] Islandora IIIF uses deprecated HTTPClient class

```bash`

PHP Deprecated: Creation of dynamic property Drupal\islandora_iiif\Plugin\views\style\IIIFManifest::$httpClient is deprecated in /Users/.../Sites/d10/web/modules/contrib/islandora/modules/islandora_iiif/src/Plugin/views/style/IIIFManifest.php on line 115

Deprecated: Creation of dynamic property Drupal\islandora_iiif\Plugin\views\style\IIIFManifest::$httpClient is deprecated in /Users/.../Sites/d10/web/modules/contrib/islandora/modules/islandora_iiif/src/Plugin/views/style/IIIFManifest.php on line 115
Alexanders-MBP:d10 alexanderoneill$

Fix code using deprecated Symfony Event class

Way back in Drupal 9.1 they deprecated the Symfony Event class. The update required swapping arguments in the dispatch function. So, our site still works with D9 but will fail with D10. The JWT module just fixed this for themselves last week with their 1.1 release.

More immediately, however, enabling the current standalone version of webprofiler will cause the site to choke on the deprecation; e.g.:

[error] 19883#19883: *139901 FastCGI sent in stderr: "PHP message: TypeError: Argument 1 passed to "Symfony\Contracts\EventDispatcher\EventDispatcherInterface::dispatch()" must be an object, string given. in /var/www/html/drupal/web/modules/contrib/webprofiler/src/EventDispatcher/TraceableEventDispatcher.php on line 84 #0 /var/www/html/drupal/web/modules/contrib/islandora/src/EventGenerator/EmitEvent.php(163): Drupal\webprofiler\EventDispatcher\TraceableEventDispatcher->dispatch()
#1 /var/www/html/drupal/web/core/lib/Drupal/Core/Action/ActionBase.php(22): Drupal\islandora\EventGenerator\EmitEvent->execute()
#2 /var/www/html/drupal/web/core/modules/system/src/Entity/Action.php(129): Drupal\Core\Action\ActionBase->executeMultiple()
#3 /var/www/html/drupal/web/modules/contrib/islandora/src/PresetReaction/PresetReaction.php(59): Drupal\system\Entity\Action->execute()
#4 /var/www/html/drupal/web/modules/contrib/islandora/src/IslandoraUtils.php(329): Drupal\islandora\PresetReaction\PresetReaction->execute()
#5 /var/www/html/drupal/web/modules/contrib/islan" while reading response header from upstream, server: keep-qa.lib.asu.edu, request: "POST /node/172545/edit HTTP/1.1", upstream: "fastcgi://unix:/var/run/php/php8.0-fpm.sock:", host: "keep-qa.lib.asu.edu", referrer: "https://keep-qa.lib.asu.edu/node/172545/edit"

Using the current version of webprofiler requires a fix now.

Side-note: if you enable webprofiler you are likely to get similar errors for other out-of-date modules. Both facets and workbench_email needed updates to work.

Node has Parent context does not explicitly check if the field exists.

What steps does it take to reproduce the issue?

  • Add a context condition that gets triggered on Node has Parent.

  • In Field that contains reference to parents select field_member_of

  • Create a new content type.

  • Add a content reference field with some other field name than field_member_of (field_node_reference, for example)

  • Add new content of this type.

  • Make sure the content reference field has a value.

  • This results in a WSOD.

What happens?
WSOD

What did you expect to happen?
The content gets created

Which version of Islandora are you using?
2.0

Fix

if ($entity->getEntityTypeID() == 'node' && $referenced_entity->getEntityTypeId() == 'node') {

Should check whether field exists.

Another small win:

if ($this->evaluateContextConditions($context, $provided) && !$context->disabled()) {

Disabled check should happen before the evaluation of context conditions.

Screenshots:
image
image

[BUG] IsIslandora views filter needs to define operator

After implementing the Node Is Islandora views filter, it worked, but the logs gave me this:

Notice: Undefined index: operator in Drupal\views\Plugin\views\filter\FilterPluginBase->init() (line 95 of /var/www/html/drupal/web/core/modules/views/src/Plugin/views/filter/FilterPluginBase.php)

[BUG] All PRs are showing as failing testing.

All PRs on Drupal 10 fail because Islandora requires Context, and Context doesn't yet work with D10. I think we should remove the D10 testing.

What steps does it take to reproduce the issue?

  • When does this issue occur?
    Every pull request

  • Which page does it occur on?
    https://github.com/Islandora/islandora/pulls

  • What happens?
    Shows "X" beside each PR

  • What did you expect to happen?
    Those tests are already marked as "allow fail" but in Github that means the testing will not be halted and all other tests will attempt. Github doesn't let us have a nicer icon when the "allow fail" tests fail.

Which version of Islandora are you using?
dev

Any related open or closed issues to this bug report?

no

[BUG] Dependency oddities from switch to drupal/islandora

Summary of issue
This is more of an issue with Drupal's packaging tripping over itself, but maybe the dependency specifications in the islandora.info.yml could be modified as a workaround.

What steps does it take to reproduce the issue?

  • When does this issue occur?

    • On module install with composer require drupal/islandora in a site using Drupal 10.1.x or 10.2.x
  • What happens?

Your requirements could not be resolved to an installable set of packages.

 Problem 1
   - drupal/islandora[2.8.2, ..., 2.12.2] require drupal/action * -> satisfiable by drupal/action[dev-1.x, 0.0.1, ..., 0.2.1, 1.x-dev].
   - drupal/islandora 1.x-dev is an alias of drupal/islandora dev-1.x and thus requires it to be installed too.
   - drupal/islandora 1.0.0 requires drupal/core ^8 -> found drupal/core[8.0.0-beta6, ..., 8.9.x-dev] but the package is fixed to 10.1.8 (lock file version) by a partial update and that version does not match. Make sure you list it as an argument for the update command.
   - drupal/islandora[dev-1.x, 1.x-dev, 2.0.0, ..., 2.4.1] require drupal/core ^8 || ^9 -> found drupal/core[8.0.0-beta6, ..., 8.9.x-dev, 9.0.0-alpha1, ..., 9.5.x-dev] but the package is fixed to 10.1.8 (lock file version) by a partial update and that version does not match. Make sure you list it as an argument for the update command.
   - drupal/action 0.0.1 requires drupal/core >=10.3 -> found drupal/core[10.3.0-beta1, 10.3.0-rc1, 10.3.x-dev, 10.4.x-dev, 11.0.0-alpha1, 11.0.0-beta1, 11.0.x-dev, 11.x-dev] but the package is fixed to 10.1.8 (lock file version) by a partial update and that version does not match. Make sure you list it as an argument for the update command.
   - drupal/action[dev-1.x, 0.0.2, ..., 0.2.1, 1.x-dev] require drupal/core >10.2 -> found drupal/core[10.2.1, ..., 10.4.x-dev, 11.0.0-alpha1, 11.0.0-beta1, 11.0.x-dev, 11.x-dev] but the package is fixed to 10.1.8 (lock file version) by a partial update and that version does not match. Make sure you list it as an argument for the update command.
   - Root composer.json requires drupal/islandora * -> satisfiable by drupal/islandora[dev-1.x, 1.0.0, 1.x-dev (alias of dev-1.x), 2.0.0, ..., 2.12.2].
  • If using Drupal 10.2.x:
    • It installs drupal/action (0.2.1) which duplicates a core module as a contrib module even though the contrib module is not compatible with anything prior to Drupal 10.3

Which version of Islandora are you using?
This isn't specific to a certain version, but as an example, the latest version (drupal/islandora:2.12.2) can be used.

Any related open or closed issues to this bug report?
Related to the move towards requiring the use of drupal/islandora instead of islandora/islandora
Islandora/documentation#2270
#1020

[IMPROVEMENT] Update defaults for text extraction action

By updating the defaults for the text extraction actions, we can save ourselves some pain when using VBO. Any action that implements buildConfigurationForm tricks VBO into diverting you to a secondary form to configure the action. To avoid having to fill out the same stuff every time you wanna run a bulk action, the defaults will prepopulate the form, saving you clicks.

IIIF Manifest alter hooks were accidentally deleted

We recently merged a change that added alter hooks to the IIIF Manifest Views style plugin so that modules could add things like search annotation endpoints.

Looking at a recent version of the code, these hooks have gone missing. From the looks of things it was likely from having multiple PRs in flight at once.

PR forthcoming.

[FEATURE] Expose the "is an Islandora node" Views filter

Overview of feature request
We have a views filter to filter out whether a node is or isn/t islandora. It would be useful to sometimes expose this, for instance on the admin view of content.

What kind of user is the feature intended for?
Site managers

What inspired the request?
Dec 2022 sprint - trying to improve the Manage > Content view with relevant filters.

What existing behavior do you want changed?
It doesn't work when you try to expose it.

Any brand new behavior do you want to add to Islandora?

Any related open or closed issues to this feature request?

[FEATURE] IIIF Manifests should get hOCR from related media with a given tag

PR to come

The IIIF Manifest can now retrieve hOCR that is stored in a field on the image or file media types, i.e., multi-file media.

We should also make it an option to specify that hOCR is located on a different media attached to the parent node, identified by a Media Use tag.

What kind of user is the feature intended for? Site builder

What inspired the request?

Any brand new behavior do you want to add to Islandora?

A new configuration field on the islandora_iiif Views Style plugin for specifying a term that holds the hOCR
A Media Use tag for hOCR

[BUG] Endless repeating "Created a version in Fedora for [media name]"

Note While I found this bug using ISLE, the apparent behaviour of infinitely reacting to one event seems like a core Islandora problem that should not occur, especially so easily.

What steps does it take to reproduce the issue?

Discovered using ISLE development branch latest commit as of 2022-10-17. Observed on make demo and make starter_dev profiles.

  1. Do a fresh install using make starter_dev of an Isle site.
  2. Go to /node/add/islandora_object and add an object with model Paged Content.
  3. Add another object with model Page and under Relationships set it to be Member Of the node above.
  4. On the Page object, add a media of type File. Upload a JP2 image. (Will test with other files next. - @alxp) Set the Media Use checking both Original File and Service File and save.
  • When does this issue occur?

Seemingly on paged content + page object combinations.

  • Which page does it occur on?

After adding a media.

  • What happens?

Hypercube continually logs entries, Watchdog shows many repeated instances of ""Created a version in Fedora for [media file name]".
Fcrepo log continually shows requests for HEAD of the media item. (logs attached.)

logs.zip

  • To whom does it occur (anonymous visitor, editor, administrator)?

User with permission to create Fedora objects.

  • What did you expect to happen?

Expected the site to stop activity once derivatives are generated.

Which version of Islandora are you using?

islandora/islandora: 2.4.2
Islandora-Devops/isle-dc: Development 74968de32f08336afd76155cc747686dce49e51b Oct 17 2022

Any related open or closed issues to this bug report?

Slack discussion:

Screenshots:

image

Make default media alt-text configurable

Overview of feature request

Currently, Islandora's approach to generating alt-text on media is to default to title, in this function: https://github.com/Islandora/islandora/blob/2.x/islandora.module#L530-L552

Request: instead of hard-coding the title as the source of the default, make it configurable, so that any field (i.e. Description) from the Repository Item content type can be used.

What kind of user is the feature intended for?

Anyone who ingests objects; also can improve accessibility (by providing a useful default for alt-text, images that aren't given manual alt-text will receive something more helpful).

What inspired the request?

Received questions about accessibility from one of our admins as we prepare to migrate to modern Islandora. Found this note in the documentation:

Automatic alt-text
When creating image media, alt-text is a required attribute. An Islandora function currently automatically populates the alt-text, if that media is the "media of" a node, with the respective node's title.
This is not considered good accessibility as the node's title will likely be already on the page, and it doesn't add anything to describing the image itself. Please fill out the alt text with something meaningful when adding image content to Islandora.

Configurable default fields would improve (though not fully resolve) accessibility behaviour.

What existing behavior do you want changed?

Change the default behaviour when uploading media for an Islandora object (currently uses nodeTitle by default unless handmade alt text is provided); add configuration to specify a Drupal field as the source for default alt text.

[FEATURE] Ability to use Integer Weight Selector with Media

Overview of feature request

The Integer Weight Selector that powers the "Reorder Children" page is an islandora-ism, and only works on nodes. We'd like to be able to order media via an integer "weight" field, particularly in multi-file media.

What kind of user is the feature intended for?

Site Builder

What inspired the request?

Setting up a view of the media contained by a multifile media object.

What existing behavior do you want changed?

The weight selector currently only works with node fields, and it's not too much code to change it to include media fields.

Any brand new behavior do you want to add to Islandora?

Ability to use drag and drop to re-order media

Any related open or closed issues to this feature request?

not that i can tell.

[BUG] WSOD when viewing object

Looks like in Crayfish Commons 3.0, a service that's used in Drupal got removed and we still require it for populating the Fedora URI pseudofield.

What steps does it take to reproduce the issue?
Try to view an object or an Original File media.

  • When does this issue occur?
    Anytime you view an object

  • Which page does it occur on?
    Any object or media page

  • What happens?
    You get a whitescreen

  • To whom does it occur (anonymous visitor, editor, administrator)?
    Anyone

  • What did you expect to happen?
    To see the object

Which version of Islandora are you using?
2.7.0

Any related open or closed issues to this bug report?
Nope

[BUG] Missing error handling at PresetReaction

What steps does it take to reproduce the issue?

Define a context reaction with non-existing action ID and perform the given action.

  • When does this issue occur?

When the code in PresetReaction tries to invoke the action.

  • Which page does it occur on?

Upon custom integration of Islandora, with custom configuration.

  • What happens?
    PHP fatal error due to the failure of loading the action.

  • To whom does it occur (anonymous visitor, editor, administrator)?

Role-agnostic issue.

  • What did you expect to happen?

A Drupal database log entry should be created about the problem.

Which version of Islandora are you using?
2.11.0

Any related open or closed issues to this bug report?

Screenshots:

[BUG] `utf8_encode()` has been deprecated.

PHP Note: https://php.watch/versions/8.2/utf8_encode-utf8_decode-deprecated

What steps does it take to reproduce the issue?

Resolution

mbstring, iconv and intl are suggested as replacements, but I don't know enough to suggest which one (or combination) to use, or whether we have access to these extensions in the default deployment.

[FEATURE] Un-hide arguments field from Text Extraction action

PR: #945

Overview of feature request

Right now the Text Extraction action (non-multi file) hides the command-line arguments configuration field.

I would like to un-hide this so we can have more control over Tesseract.

One quick use of this is to be able to generate hOCR without needing to create a whole new advanced action type.

What kind of user is the feature intended for?

Site builder,

[FEATURE] Add islandora_fits to islandora

** Overview **

UPEI's Robertson Library has been holding on to the islandora_fits code. It's currently used by the two deployment systems, Playbook and ISLE.

We propose to contribute the islandora_fits module as a submodule of Islandora, to be maintained by the community.

This would be accompanied by:

  • instructions for existing sites to update Islandora to include islandora_fits / remove the separate islandora_fits repository
  • an update to Crayfish to include the repository known as Crayfits
  • an update to the Playbook to not install the separate repositories (Crayfits/islandora_fits), and to configure/use the code within Crayfish/Islandora
  • an update to ISLE to do the same

[Tech Debt] EVA 2.x is no longer supported

We should upgrade to 3.x to stay current. We're getting these on Drupal status reports, and because it's pinned to 2.x in Islandora and Islandora Defaults, composer won't update it.

image

image

[BUG] "Delete media and file" deletes three items, including the generic thumbnail.

What steps does it take to reproduce the issue?

  • Log in as admin.

  • Create a number of non-image media. Note that they have the default thumbnail, generic.png.

  • For good measure create an image media too, with an image file.

  • Select one non-image media from the Media list, and select the Action "Delete media and files".

  • See the message, "Deleted 3 items." (this should read "Deleted 2 items!)

  • Note that all the other non-image media that used to display in the media list with a default thumbnail, now have none!

  • Delete the image media using "Delete media and files."

  • Note that the message also says "Deleted 3 items." (though this is less destructive to other media, this is still what's causing our tests to fail).

  • When does this issue occur?

Whenever you use "Delete media and files"

  • Which page does it occur on?

The Media view or wherever you can apply actions to media.

  • What happens?

The thumbnail is getting deleted and maybe(??) shouldn't.

  • To whom does it occur (anonymous visitor, editor, administrator)?

Anyone with permission to delete media via an action.

  • What did you expect to happen?

The default thumbnail should not get deleted, and the output should always be "Deleted 2 items" (unless you've added other files to other fields on the media).

Which version of Islandora are you using?

Modern on Drupal 9.5.10.

Any related open or closed issues to this bug report?

Screenshots:

[BUG] WSOD on manifest generation

What steps does it take to reproduce the issue?
Attempt to display a non-tiff image which is missing dimensional day

  • When does this issue occur?
    Only with poorly formatted inputs

  • Which page does it occur on?
    Any page with a Mirador or an OSD display

  • What happens?

WSOD

  • To whom does it occur (anonymous visitor, editor, administrator)?
    Everyone

  • What did you expect to happen?
    Not WSOD

Which version of Islandora are you using?
2.x

Any related open or closed issues to this bug report?

No

Screenshots:

[FEATURE] Add hooks to let other modules modify IIIF manifest

Overview of feature request

Add hooks to the Islandora IIIF Views Template plugin so that other modules can modify the manifest.

PR to come shortly.

What kind of user is the feature intended for?
(Example user roles: Collections Manager, Developer, Systems Administrator, or User)

Developer

What inspired the request?

Our work on Mirador to enable the build-in search feature requires that the IIIF contain a search endpoint.

What existing behavior do you want changed?

N/A

Any brand new behavior do you want to add to Islandora?

New hooks.

Any related open or closed issues to this feature request?

[BUG] islandora_text_extraction inserting <br/> tags even when it shouldn't.

What steps does it take to reproduce the issue?

  • When does this issue occur?

When a media is configured to have an hOCR-formatted field (not a file field) and the text extraction is set to hOCR format.

  • Which page does it occur on?

After uploading a media from which text is set to be extracted.

  • What happens?

The hOCR formatted text is altered to include
tags, including inside the XML document declaration.

  • To whom does it occur (anonymous visitor, editor, administrator)?

Content creators.

  • What did you expect to happen?

hOCR generated by Tesseract is not altered.

Which version of Islandora are you using?

2.7.0

Any related open or closed issues to this bug report?

Screenshots:

[FEATURE] Islandora IIIF: Allow for relative file paths in IIIF manifests

Overview of feature request

What kind of user is the feature intended for?
Systems administrator

What inspired the request?
When testing the Drupal 10 compatibility of Islandora Mirador, I set up a simple local stack with an instance of Cantaloupe 5.0 running on my local computer.

Since it was local, I configured it to serve files directly from the Drupal sites/default/files folder rather than making web requests.

This would be a useful feature for performance improvement for installs where Cantaloupe can run on the same machine as Drupal.

What existing behavior do you want changed?

Add a config setting to let the site owner choose to have the IIIF Manifest include relative paths.

Follow this setting when generating IIIF manifests.

Any brand new behavior do you want to add to Islandora?

Any related open or closed issues to this feature request?

[BUG] all OCR mimetypes forced to start with `text`, excluding mimetype of `application/xml` for hOCR

What steps does it take to reproduce the issue?

Which version of Islandora are you using?

2.8.0

Any related open or closed issues to this bug report?

Screenshots:

Actions triggered via Views Bulk Operations never execute

What steps does it take to reproduce the issue?

  • Install VBO
  • Add the VBO widget to a view
  • Try to use the VBO widget to perform a derivative action, like "Generate an image derivative"
    image
  • Fill out the little form it makes you fill out
    image
  • Alpaca logs will contain
alpaca_1 | 2023-08-24T00:41:11.804751513Z 2023-08-24 00:41:11,804 | ERROR | nnector-houdini] | DefaultErrorHandler | 56 - org.apache.camel.camel-core - 2.20.4 | Failed delivery for (MessageId: ID:484a3574eabd-35331-1690401177428-3:137507๐Ÿ‘Ž1:19 on ExchangeId: ID-5c8908e3ad99-1690401207016-3-731092). Exhausted after delivery attempt: 11 caught: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "add_confirmation" (class ca.islandora.alpaca.support.event.AS2AttachmentContent), not marked as ignorable (7 known properties: "file_upload_uri", "fedora_uri", "source_uri", "destination_uri", "args", "mimetype", "source_field"])
  • You will not have new derivatives

When does this issue occur?
When using VBO to trigger actions,

Which page does it occur on?
Any view with the VBO widget

What happens?
VBO adds certain metadata to the message that gets put onto the queue. Camel tries to parse the message as json, but because its java and all strict-like, it complains when it finds these new keys. This all happens invisibly in the background as Drupal reports VBO has done its thing successfully but you don't see any new derivatives.

To whom does it occur (anonymous visitor, editor, administrator)?
admins

What did you expect to happen?
I would expect my action to execute successfully and I have a new derivative file

Which version of Islandora are you using?
2.8.2

Improve performance of IIIF Manifest generation

PR forthcoming.

The Islandora IIIF module contains a Views style plugin for generating IIIF manifests.

Many pages in Islandora repositories are stored as TIFF images using the File media type.

One requirement of IIF manifests is that each canvas (image) include the image's dimensions.

For media of Image type this is easily retrievable via a field, however TIFFs in File format are opened directly and the image file is examined on each load for each image.

We have a performance improvement internally where we add with and height fields to the File media type and store these values if they aren't already populated the first time the IIIF Manifest is generated.

[BUG] islandora_iiif generating incorrect canvas IDs

What steps does it take to reproduce the issue?

Go through the steps to create a view to generate an IIIF manifest if your site does not have one already.

On a site created via the starter site you should be able to:

  1. create a paged content object with one or more children.
  2. Then the manifest should be available at "/node/[nid]/book-manifest"

Load the manifest JSON from the manifest URL such as above.

The sequences section will have a list of canvases that will look like:

  "sequences": [
    {
      "@context": "http:\/\/iiif.io\/api\/presentation\/2\/context.json",
      "@id": "https:\/\/islandora.traefik.me\/\/node\/99\/sequence\/normal",
      "@type": "sc:Sequence",
      "canvases": [
        {
          "@id": "https:\/\/islandora.traefik.me\/\/node\/99\/canvas\/224",
          "@type": "sc:Canvas",
          "label": "newspaper scan1.tiff",

Notice that the @id in the canvas section has slashes doubled after the hostname: "@id": "https://islandora.traefik.me//node/99/canvas/224",

  • When does this issue occur?

Whenever generating a book or page manifest.

  • Which page does it occur on?

All pages generated by the IIF manifest views plugin.

  • What happens?

  • To whom does it occur (anonymous visitor, editor, administrator)?

End user.

  • What did you expect to happen?

A canvas id should be a correctly-formed URL to identify the page in a sequence.

The cause of this is a subtle bug:

in modules/islandora_iiif/src/Plugin/Views/style/IIIFMAnifest.php:

$request_host = $this->request->getSchemeAndHttpHost();
      $request_url = $this->request->getRequestUri();
      // Strip off the last URI component to get the base ID of the URL.
      // @todo assumming the view is a path like /node/1/manifest.json
      $url_components = explode('/', $request_url);
      array_pop($url_components);
      $content_path = implode('/', $url_components);
      $iiif_base_id = $request_host . '/' . $content_path;

The 'Explode'() call gets a string that begins with a slash, so it creates an array with the first element being an empty string.

Then later a call to 'implode()' puts a / between the empty string and the next element , 'node'.

The canvas id is then created with an additional slash.

Which version of Islandora are you using?

2.7.0

Any related open or closed issues to this bug report?

Discover while working on IIIF manifests, partly related to #937

This has the effect of making search results returned by an annotation server not show up on the pages themselves since the canvas IDs are misaligned.

Screenshots:

[BUG] IIIF Manifest does not supply node title as manifest @label

What steps does it take to reproduce the issue?
Open a page configured to display the Mirador viewer. If the view has not been given a name the top border of the viewer will display IIIF Manifest instead of the node or media's title.

  • When does this issue occur?

  • Which page does it occur on?

  • What happens?

  • To whom does it occur (anonymous visitor, editor, administrator)?

  • What did you expect to happen?

The top bar should display the view's name if configured, falling back to the node's title if the view is untitled. The Islandora standard manifest view is untitled by default.

Which version of Islandora are you using?

2.x

Any related open or closed issues to this bug report?

Screenshots:

[FEATURE] Ability to write to Media's "thumbnail"

Overview of feature request

It'd be really cool if we could use multifile media to write thumbnails - such as for PDFs and videos - that would take the place of the "default thumbnails" that show up in the Media list. It seems to be some kind of built in thing to Media.

We can't right now because it's not a real field, and doesn't have field_storage (so the processing we do before sending out the event fails).

Some modules seem to do this already - see

https://www.drupal.org/project/media_thumbnails_pdf
and its parent module https://www.drupal.org/project/media_thumbnails_pdf

What kind of user is the feature intended for?

Makes things really nice for end users, and for collection managers.

What inspired the request?

Trying to use PDF thumbnails in a site side-by-side with image media where we are making use of Drupal's media thumbnail.

What existing behavior do you want changed?

none?

Any brand new behavior do you want to add to Islandora?

Can write derivatives to the thumbnail not-a-field thing.

Any related open or closed issues to this feature request?

[FEATURE] Add tokens to get Original File filename, extension

PR Forthcoming.

Overview of feature request

Add new tokens to Islandora to get th Original File's file name, extension.

What kind of user is the feature intended for?
Site builder

What inspired the request?

We would like to have derivative files share the same file name as the original uploaded files. This info is currently not available to the token system.

Any brand new behavior do you want to add to Islandora?

New tokens

[BUG] CI for FunctionalJavascript tests not working

On every Islandora CI run, the FunctionalJavascript tests show up as green, but the tests were skipped (so they didn't actually run!)

The problem is with setting up and connecting Chromedriver. I've made some attempts but no success.

Skipped test message:

There was 1 skipped test:

1) Drupal\Tests\islandora\FunctionalJavascript\IntegerWeightTest::testIntegerWeightSelector
The test wasn't able to connect to your webdriver instance. For more information read core/tests/README.md.

The original message while starting Mink: Could not open connection: unknown error: Chrome failed to start: exited abnormally.
  (unknown error: DevToolsActivePort file doesn't exist)
  (The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
  (Driver info: chromedriver=103.0.5060.134 (8ec6fce403b3feb0869b0732eda8bd95011d333c-refs/branch-heads/5060@{#1262}),platform=Linux 5.15.0-1014-azure x86_64)

/opt/drupal/web/core/tests/Drupal/FunctionalJavascriptTests/WebDriverTestBase.php:55
/opt/drupal/web/core/tests/Drupal/Tests/BrowserTestBase.php:381
/home/runner/work/islandora/islandora/build_dir/tests/src/FunctionalJavascript/IntegerWeightTest.php:84
/opt/drupal/vendor/phpunit/phpunit/src/Framework/TestResult.php:726

The attempt to fix (resulted in above error):

build-2.x.yml

        # needed for FunctionalJavascript
      - name: Setup chromedriver
        uses: nanasess/setup-chromedriver@v1

      - name: Start chromedriver
        run: |
          export DISPLAY=:99
          chromedriver --port=4444 --no-sandbox --url-base=/wd/hub &

phpunit.xml

    <env name="MINK_DRIVER_ARGS_WEBDRIVER" value='["chrome", { "chromeOptions": { "w3c": false } }, "http://localhost:4444/wd/hub"]'/>

[TECH DEBT] Move islandora_text_extraction_defaults into the Islandora Starter Site

Overview of Tech Debt

Islandora Text Extraction Defaults is a config-rich Feature module that is bundled with Islandora. It is meant to be installed to add a functioning "default" out of the box to demonstrate Islandora Text Extraction. In all the other cases (audio, video, etc) this need was solved by putting configuration in Islandora Defaults (now the Islandora Starter Site).

The submodule islanodra_text_extraction_defaults should be removed from Islandora, and its config (if not already there) moved into the Starter Site.

[FEATURE] Image-only PDF files (as Digital Document) should get OCR

Overview of feature request
All PDF files ingested as media for a Digital Document model should have Extracted Text (OCR) derivatives that contain the OCR'd text from the files.

What kind of user is the feature intended for?
Collections Manager, User

What inspired the request?
Migrating PDF's created in Islandora7 (by Ghostscript) and discovering that all the Extracted Text derivatives are blank.

What existing behavior do you want changed?
PDF files as media for a Digital Document model currently have their Extracted Text media generated by copying the embedded text layer in the PDF. If the PDF is "image-only" (does not have a text layer) the Extracted Text media is created as a blank/empty text file.

Any brand new behavior do you want to add to Islandora?
Not sure how this should get implemented - maybe pages are broken out and individually OCR'd as an image file and that OCR is fed back to the original object's media. Maybe PDF's can be processed directly somehow?

Any related open or closed issues to this feature request?
Couldn't find any!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.