Browse Source

Implement inputargs in GenerateImageDerivative and GenerateImageDerivativeFile, instead of in AbstractGenerateDerivative. Add utility function to add a form element (or other array entry) at a specific position.

pull/904/head
Jason Hildebrand 2 years ago
parent
commit
deff2ddb26
  1. 1
      modules/islandora_audio/src/Plugin/Action/GenerateAudioDerivative.php
  2. 3
      modules/islandora_image/config/schema/islandora_image.schema.yml
  3. 25
      modules/islandora_image/src/Plugin/Action/GenerateImageDerivative.php
  4. 24
      modules/islandora_image/src/Plugin/Action/GenerateImageDerivativeFile.php
  5. 1
      modules/islandora_text_extraction/src/Plugin/Action/GenerateOCRDerivative.php
  6. 1
      modules/islandora_text_extraction/src/Plugin/Action/GenerateOCRDerivativeFile.php
  7. 1
      modules/islandora_video/src/Plugin/Action/GenerateVideoDerivative.php
  8. 22
      src/IslandoraUtils.php
  9. 9
      src/Plugin/Action/AbstractGenerateDerivative.php

1
modules/islandora_audio/src/Plugin/Action/GenerateAudioDerivative.php

@ -36,7 +36,6 @@ class GenerateAudioDerivative extends AbstractGenerateDerivative {
$form = parent::buildConfigurationForm($form, $form_state); $form = parent::buildConfigurationForm($form, $form_state);
$form['mimetype']['#description'] = $this->t('Mimetype to convert to (e.g. audio/mpeg, audio/m4a, etc...)'); $form['mimetype']['#description'] = $this->t('Mimetype to convert to (e.g. audio/mpeg, audio/m4a, etc...)');
$form['args']['#description'] = $this->t('Additional command line parameters for FFMpeg'); $form['args']['#description'] = $this->t('Additional command line parameters for FFMpeg');
unset($form['inputargs']);
return $form; return $form;
} }

3
modules/islandora_image/config/schema/islandora_image.schema.yml

@ -23,6 +23,9 @@ action.configuration.generate_image_derivative:
args: args:
type: text type: text
label: 'Convert Arguments' label: 'Convert Arguments'
inputargs:
type: text
label: 'Input arguments for convert'
scheme: scheme:
type: text type: text
label: 'Flysystem scheme' label: 'Flysystem scheme'

25
modules/islandora_image/src/Plugin/Action/GenerateImageDerivative.php

@ -24,6 +24,7 @@ class GenerateImageDerivative extends AbstractGenerateDerivative {
$config['mimetype'] = 'image/jpeg'; $config['mimetype'] = 'image/jpeg';
$config['path'] = '[date:custom:Y]-[date:custom:m]/[node:nid].jpg'; $config['path'] = '[date:custom:Y]-[date:custom:m]/[node:nid].jpg';
$config['destination_media_type'] = 'image'; $config['destination_media_type'] = 'image';
$config['inputargs'] = '';
return $config; return $config;
} }
@ -34,11 +35,22 @@ class GenerateImageDerivative extends AbstractGenerateDerivative {
$form = parent::buildConfigurationForm($form, $form_state); $form = parent::buildConfigurationForm($form, $form_state);
$form['mimetype']['#description'] = $this->t('Mimetype to convert to (e.g. image/jpeg, image/png, etc...)'); $form['mimetype']['#description'] = $this->t('Mimetype to convert to (e.g. image/jpeg, image/png, etc...)');
$form['inputargs']['#title'] = $this->t('Additional input arguments'); // adjust args title and description for better clarity
$form['inputargs']['#description'] = $this->t('Additional input options for ImageMagick convert (e.g. -density 144).<br>Check the <a target="_blank" href="https://manpages.ubuntu.com/manpages/trusty/man1/convert.im6.1.html">man page</a> to see which options are input options.');
$form['args']['#title'] = $this->t('Additional output arguments'); $form['args']['#title'] = $this->t('Additional output arguments');
$form['args']['#description'] = $this->t('Additional output options for ImageMagick convert (e.g. -resize 50% -unsharp 0x.5).<br>See <a target="_blank" href="https://imagemagick.org/script/convert.php">documentation</a> for available options.'); $form['args']['#description'] = $this->t('Additional output options for ImageMagick convert (e.g. -resize 50% -unsharp 0x.5).<br>See <a target="_blank" href="https://imagemagick.org/script/convert.php">documentation</a> for available options.');
$new = [
'inputargs' => [
'#type' => 'textfield',
'#title' => $this->t('Additional input arguments'),
'#default_value' => $this->configuration['inputargs'],
'#rows' => '8',
'#description' => $this->t('Additional input options for ImageMagick convert (e.g. -density 144).<br>Check the <a target="_blank" href="https://manpages.ubuntu.com/manpages/trusty/man1/convert.im6.1.html">man page</a> to see which options are input options.'),
]
];
$form = $this->utils->array_insert_after($form, 'mimetype', $new);
return $form; return $form;
} }
@ -58,4 +70,11 @@ class GenerateImageDerivative extends AbstractGenerateDerivative {
} }
} }
/**
* {@inheritdoc}
*/
public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
parent::submitConfigurationForm($form, $form_state);
$this->configuration['inputargs'] = $form_state->getValue('inputargs');
}
} }

24
modules/islandora_image/src/Plugin/Action/GenerateImageDerivativeFile.php

@ -26,6 +26,7 @@ class GenerateImageDerivativeFile extends AbstractGenerateDerivativeMediaFile {
$config['queue'] = 'islandora-connector-houdini'; $config['queue'] = 'islandora-connector-houdini';
$config['destination_media_type'] = 'file'; $config['destination_media_type'] = 'file';
$config['scheme'] = $this->config->get('default_scheme'); $config['scheme'] = $this->config->get('default_scheme');
$config['inputargs'] = '';
return $config; return $config;
} }
@ -38,12 +39,29 @@ class GenerateImageDerivativeFile extends AbstractGenerateDerivativeMediaFile {
$form['mimetype']['#value'] = 'image/jpeg'; $form['mimetype']['#value'] = 'image/jpeg';
$form['mimetype']['#type'] = 'hidden'; $form['mimetype']['#type'] = 'hidden';
$form['inputargs']['#title'] = $this->t('Additional input arguments'); // adjust args title and description for better clarity
$form['inputargs']['#description'] = $this->t('Additional input options for ImageMagick convert (e.g. -density 144).<br>Check the <a target="_blank" href="https://manpages.ubuntu.com/manpages/trusty/man1/convert.im6.1.html">man page</a> to see which options are input options.');
$form['args']['#title'] = $this->t('Additional output arguments'); $form['args']['#title'] = $this->t('Additional output arguments');
$form['args']['#description'] = $this->t('Additional output options for ImageMagick convert (e.g. -resize 50% -unsharp 0x.5).<br>See <a target="_blank" href="https://imagemagick.org/script/convert.php">documentation</a> for available options.'); $form['args']['#description'] = $this->t('Additional output options for ImageMagick convert (e.g. -resize 50% -unsharp 0x.5).<br>See <a target="_blank" href="https://imagemagick.org/script/convert.php">documentation</a> for available options.');
$new = [
'inputargs' => [
'#type' => 'textfield',
'#title' => $this->t('Additional input arguments'),
'#default_value' => $this->configuration['inputargs'],
'#rows' => '8',
'#description' => $this->t('Additional input options for ImageMagick convert (e.g. -density 144).<br>Check the <a target="_blank" href="https://manpages.ubuntu.com/manpages/trusty/man1/convert.im6.1.html">man page</a> to see which options are input options.'),
]
];
$form = $this->utils->array_insert_after($form, 'mimetype', $new);
return $form; return $form;
} }
/**
* {@inheritdoc}
*/
public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
parent::submitConfigurationForm($form, $form_state);
$this->configuration['inputargs'] = $form_state->getValue('inputargs');
}
} }

1
modules/islandora_text_extraction/src/Plugin/Action/GenerateOCRDerivative.php

@ -38,7 +38,6 @@ class GenerateOCRDerivative extends AbstractGenerateDerivative {
$form['mimetype']['#type'] = 'textfield'; $form['mimetype']['#type'] = 'textfield';
unset($form['args']); unset($form['args']);
unset($form['inputargs']);
return $form; return $form;
} }

1
modules/islandora_text_extraction/src/Plugin/Action/GenerateOCRDerivativeFile.php

@ -58,7 +58,6 @@ class GenerateOCRDerivativeFile extends AbstractGenerateDerivativeMediaFile {
$form = array_merge($first, $middle, $last); $form = array_merge($first, $middle, $last);
unset($form['args']); unset($form['args']);
unset($form['inputargs']);
return $form; return $form;
} }

1
modules/islandora_video/src/Plugin/Action/GenerateVideoDerivative.php

@ -35,7 +35,6 @@ class GenerateVideoDerivative extends AbstractGenerateDerivative {
$form = parent::buildConfigurationForm($form, $form_state); $form = parent::buildConfigurationForm($form, $form_state);
$form['mimetype']['#description'] = $this->t('Mimetype to convert to (e.g. video/mp4, video/quicktime, etc...)'); $form['mimetype']['#description'] = $this->t('Mimetype to convert to (e.g. video/mp4, video/quicktime, etc...)');
$form['args']['#description'] = $this->t('Additional command line parameters for FFMpeg'); $form['args']['#description'] = $this->t('Additional command line parameters for FFMpeg');
unset($form['inputargs']);
return $form; return $form;
} }

22
src/IslandoraUtils.php

@ -751,4 +751,26 @@ class IslandoraUtils {
return $parents; return $parents;
} }
/**
* Insert a value or key/value pair after a specific key in an array. If key doesn't exist, value is appended
* to the end of the array.
*
* This is not islandora specific, but a useful function that neither PHP nor Drupal provide.
* (is there still hope after 16 years? https://www.drupal.org/project/drupal/issues/66183 )
*
* @param array $array
* @param string $key
* @param array $new
*
* @return array
*
* Credit: https://gist.github.com/wpscholar/0deadce1bbfa4adb4e4c
*/
function array_insert_after( array $array, $key, array $new ) {
$keys = array_keys( $array );
$index = array_search( $key, $keys );
$pos = false === $index ? count( $array ) : $index + 1;
return array_merge( array_slice( $array, 0, $pos ), $new, array_slice( $array, $pos ) );
}
} }

9
src/Plugin/Action/AbstractGenerateDerivative.php

@ -21,7 +21,6 @@ class AbstractGenerateDerivative extends AbstractGenerateDerivativeBase {
'source_term_uri' => '', 'source_term_uri' => '',
'derivative_term_uri' => '', 'derivative_term_uri' => '',
'mimetype' => '', 'mimetype' => '',
'inputargs' => '',
'args' => '', 'args' => '',
'destination_media_type' => '', 'destination_media_type' => '',
'scheme' => $this->config->get('default_scheme'), 'scheme' => $this->config->get('default_scheme'),
@ -131,13 +130,6 @@ class AbstractGenerateDerivative extends AbstractGenerateDerivativeBase {
'#rows' => '8', '#rows' => '8',
'#description' => $this->t('Mimetype to convert to (e.g. image/jpeg, video/mp4, etc...)'), '#description' => $this->t('Mimetype to convert to (e.g. image/jpeg, video/mp4, etc...)'),
]; ];
$form['inputargs'] = [
'#type' => 'textfield',
'#title' => $this->t('Additional input arguments'),
'#default_value' => $this->configuration['inputargs'],
'#rows' => '8',
'#description' => $this->t('Additional command line options related to the source file'),
];
$form['args'] = [ $form['args'] = [
'#type' => 'textfield', '#type' => 'textfield',
'#title' => $this->t('Additional arguments'), '#title' => $this->t('Additional arguments'),
@ -207,7 +199,6 @@ class AbstractGenerateDerivative extends AbstractGenerateDerivativeBase {
$this->configuration['derivative_term_uri'] = $this->utils->getUriForTerm($term); $this->configuration['derivative_term_uri'] = $this->utils->getUriForTerm($term);
$this->configuration['mimetype'] = $form_state->getValue('mimetype'); $this->configuration['mimetype'] = $form_state->getValue('mimetype');
$this->configuration['inputargs'] = $form_state->getValue('inputargs');
$this->configuration['args'] = $form_state->getValue('args'); $this->configuration['args'] = $form_state->getValue('args');
$this->configuration['scheme'] = $form_state->getValue('scheme'); $this->configuration['scheme'] = $form_state->getValue('scheme');
$this->configuration['path'] = trim($form_state->getValue('path'), '\\/'); $this->configuration['path'] = trim($form_state->getValue('path'), '\\/');

Loading…
Cancel
Save