Browse Source

Merge pull request #920 from rosiel/infinite-derivs

Avoid Infinite Derivatives.
pull/922/head
Nigel Banks 2 years ago committed by GitHub
parent
commit
db31d1438d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 5
      src/EventGenerator/EmitEvent.php
  2. 11
      src/Exception/IslandoraDerivativeException.php
  3. 8
      src/Plugin/Action/AbstractGenerateDerivative.php

5
src/EventGenerator/EmitEvent.php

@ -14,6 +14,7 @@ use Drupal\Core\Session\AccountInterface;
use Drupal\Core\StringTranslation\StringTranslationTrait; use Drupal\Core\StringTranslation\StringTranslationTrait;
use Drupal\islandora\Event\StompHeaderEvent; use Drupal\islandora\Event\StompHeaderEvent;
use Drupal\islandora\Event\StompHeaderEventException; use Drupal\islandora\Event\StompHeaderEventException;
use Drupal\islandora\Exception\IslandoraDerivativeException;
use Stomp\Exception\StompException; use Stomp\Exception\StompException;
use Stomp\StatefulStomp; use Stomp\StatefulStomp;
use Stomp\Transport\Message; use Stomp\Transport\Message;
@ -168,6 +169,10 @@ abstract class EmitEvent extends ConfigurableActionBase implements ContainerFact
$event->getHeaders()->all() $event->getHeaders()->all()
); );
} }
catch (IslandoraDerivativeException $e) {
$this->logger->info($e->getMessage());
return;
}
catch (StompHeaderEventException $e) { catch (StompHeaderEventException $e) {
$this->logger->error($e->getMessage()); $this->logger->error($e->getMessage());
$this->messenger->addError($e->getMessage()); $this->messenger->addError($e->getMessage());

11
src/Exception/IslandoraDerivativeException.php

@ -0,0 +1,11 @@
<?php
namespace Drupal\islandora\Exception;
/**
* Islandora exceptions.
*
* @package islandora
*/
class IslandoraDerivativeException extends \RuntimeException {
}

8
src/Plugin/Action/AbstractGenerateDerivative.php

@ -5,6 +5,7 @@ namespace Drupal\islandora\Plugin\Action;
use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Url; use Drupal\Core\Url;
use Drupal\islandora\Exception\IslandoraDerivativeException;
/** /**
* Emits a Node event. * Emits a Node event.
@ -60,6 +61,13 @@ class AbstractGenerateDerivative extends AbstractGenerateDerivativeBase {
throw new \RuntimeException("Could not locate taxonomy term with uri: " . $this->configuration['derivative_term_uri'], 500); throw new \RuntimeException("Could not locate taxonomy term with uri: " . $this->configuration['derivative_term_uri'], 500);
} }
// See if there is a destination media already set, and abort if it's the
// same as the source media. Dont cause an error, just don't continue.
$derivative_media = $this->utils->getMediaWithTerm($entity, $derivative_term);
if (!is_null($derivative_media) && $derivative_media->id() == $source_media->id()) {
throw new IslandoraDerivativeException("Halting derivative, as source and target media are the same. Derivative term: [" . $this->configuration['derivative_term_uri'] . "] Source term: [" . $this->configuration['source_term_uri'] . "] Node id: [" . $entity->id() . "].", 500);
}
$route_params = [ $route_params = [
'node' => $entity->id(), 'node' => $entity->id(),
'media_type' => $this->configuration['destination_media_type'], 'media_type' => $this->configuration['destination_media_type'],

Loading…
Cancel
Save