diff --git a/modules/islandora_core_feature/islandora_core_feature.info.yml b/modules/islandora_core_feature/islandora_core_feature.info.yml index 1e5f10b9..eda5da43 100755 --- a/modules/islandora_core_feature/islandora_core_feature.info.yml +++ b/modules/islandora_core_feature/islandora_core_feature.info.yml @@ -12,7 +12,6 @@ dependencies: - filehash - image - islandora - - islandora_defaults - jsonld - jwt - language diff --git a/src/Form/AddChildrenForm.php b/src/Form/AddChildrenForm.php deleted file mode 100644 index 82332ca8..00000000 --- a/src/Form/AddChildrenForm.php +++ /dev/null @@ -1,200 +0,0 @@ -config->get(IslandoraSettingsForm::UPLOAD_FORM_LOCATION); - $upload_location = $this->token->replace($upload_pattern); - - $valid_extensions = $this->config->get(IslandoraSettingsForm::UPLOAD_FORM_ALLOWED_MIMETYPES); - - $this->parentId = $this->routeMatch->getParameter('node'); - $parent = $this->entityTypeManager->getStorage('node')->load($this->parentId); - - $form['upload'] = [ - '#type' => 'managed_file', - '#title' => $this->t('Files'), - '#description' => $this->t("Upload one or more files to add children to @title", ['@title' => $parent->getTitle()]), - '#upload_location' => $upload_location, - '#upload_validators' => [ - 'file_validate_extensions' => [$valid_extensions], - ], - '#multiple' => TRUE, - ]; - $form['submit'] = [ - '#type' => 'submit', - '#value' => $this->t('Submit'), - ]; - - return $form; - } - - /** - * {@inheritdoc} - */ - public function submitForm(array &$form, FormStateInterface $form_state) { - $parent_id = $this->routeMatch->getParameter('node'); - $parent = $this->entityTypeManager->getStorage('node')->load($parent_id); - - $fids = $form_state->getValue('upload'); - - $operations = []; - foreach ($fids as $fid) { - $operations[] = [[$this, 'buildNodeForFile'], [$fid, $parent_id]]; - } - - $batch = [ - 'title' => $this->t("Uploading Children for @title", ['@title' => $parent->getTitle()]), - 'operations' => $operations, - 'progress_message' => t('Processed @current out of @total. Estimated time: @estimate.'), - 'error_message' => t('The process has encountered an error.'), - 'finished' => [$this, 'buildNodeFinished'], - ]; - - batch_set($batch); - } - - /** - * Wires up a file/media/node combo for a file upload. - * - * @param int $fid - * Uploaded file id. - * @param int $parent_id - * Id of the parent node. - * @param array $context - * Batch context. - * - * @throws \Symfony\Component\HttpKernel\Exception\HttpException - */ - public function buildNodeForFile($fid, $parent_id, array &$context) { - // Since we make 3 different entities, do this in a transaction. - $transaction = $this->database->startTransaction(); - - try { - $file = $this->entityTypeManager->getStorage('file')->load($fid); - $file->setPermanent(); - $file->save(); - - $parent = $this->entityTypeManager->getStorage('node')->load($parent_id); - - $mime = $file->getMimetype(); - $exploded_mime = explode('/', $mime); - if ($exploded_mime[0] == 'image') { - if (in_array($exploded_mime[1], ['tiff', 'jp2'])) { - $media_type = 'file'; - } - else { - $media_type = 'image'; - } - $model = $this->utils->getTermForUri('http://purl.org/coar/resource_type/c_c513'); - } - elseif ($exploded_mime[0] == 'audio') { - $media_type = 'audio'; - $model = $this->utils->getTermForUri('http://purl.org/coar/resource_type/c_18cc'); - } - elseif ($exploded_mime[0] == 'video') { - $media_type = 'video'; - $model = $this->utils->getTermForUri('http://purl.org/coar/resource_type/c_12ce'); - } - else { - $media_type = 'file'; - if ($mime == 'application/pdf') { - $model = $this->utils->getTermForUri('https://schema.org/DigitalDocument'); - } - else { - $model = $this->utils->getTermForUri('http://purl.org/coar/resource_type/c_1843'); - } - } - $source_field = $this->mediaSource->getSourceFieldName($media_type); - - $node = $this->entityTypeManager->getStorage('node')->create([ - 'type' => $this->config->get(IslandoraSettingsForm::UPLOAD_FORM_BUNDLE), - 'title' => $file->getFileName(), - IslandoraUtils::MODEL_FIELD => $model, - IslandoraUtils::MEMBER_OF_FIELD => $parent, - 'uid' => $this->account->id(), - 'status' => 1, - ]); - $node->save(); - - $uri = $this->config->get(IslandoraSettingsForm::UPLOAD_FORM_TERM); - $term = $this->utils->getTermForUri($uri); - $media = $this->entityTypeManager->getStorage('media')->create([ - 'bundle' => $media_type, - $source_field => $fid, - 'name' => $file->getFileName(), - IslandoraUtils::MEDIA_USAGE_FIELD => $term, - IslandoraUtils::MEDIA_OF_FIELD => $node, - ]); - $media->save(); - } - catch (HttpException $e) { - $transaction->rollBack(); - throw $e; - } - catch (\Exception $e) { - $transaction->rollBack(); - throw new HttpException(500, $e->getMessage()); - } - } - - /** - * Batch finished callback. - * - * $success bool - * Success status - * $results mixed - * The 'results' from the batch context. - * $operations array - * Remaining operations. - */ - public function buildNodeFinished($success, $results, $operations) { - return new RedirectResponse( - Url::fromRoute('view.manage_members.page_1', ['node' => $this->parentId])->toString() - ); - } - - /** - * Check if the user can create any "Islandora" nodes and media. - * - * @param \Drupal\Core\Routing\RouteMatch $route_match - * The current routing match. - * - * @return \Drupal\Core\Access\AccessResultAllowed|\Drupal\Core\Access\AccessResultForbidden - * Whether we can or can't show the "thing". - */ - public function access(RouteMatch $route_match) { - $can_create_media = $this->utils->canCreateIslandoraEntity('media', 'media_type'); - $can_create_node = $this->utils->canCreateIslandoraEntity('node', 'node_type'); - - if ($can_create_media && $can_create_node) { - return AccessResult::allowed(); - } - - return AccessResult::forbidden(); - } - -} diff --git a/src/Form/AddMediaForm.php b/src/Form/AddMediaForm.php deleted file mode 100644 index 9b70461e..00000000 --- a/src/Form/AddMediaForm.php +++ /dev/null @@ -1,301 +0,0 @@ -entityTypeManager = $entity_type_manager; - $this->entityFieldManager = $entity_field_manager; - $this->utils = $utils; - $this->mediaSource = $media_source; - $this->config = $config; - $this->token = $token; - $this->account = $account; - $this->routeMatch = $route_match; - $this->database = $database; - } - - /** - * {@inheritdoc} - */ - public static function create(ContainerInterface $container) { - return new static( - $container->get('entity_type.manager'), - $container->get('entity_field.manager'), - $container->get('islandora.utils'), - $container->get('islandora.media_source_service'), - $container->get('config.factory')->get('islandora.settings'), - $container->get('token'), - $container->get('current_user'), - $container->get('current_route_match'), - $container->get('database') - ); - } - - /** - * {@inheritdoc} - */ - public function getFormId() { - return 'add_media_form'; - } - - /** - * {@inheritdoc} - */ - public function buildForm(array $form, FormStateInterface $form_state) { - $upload_pattern = $this->config->get(IslandoraSettingsForm::UPLOAD_FORM_LOCATION); - $upload_location = $this->token->replace($upload_pattern); - - $valid_extensions = $this->config->get(IslandoraSettingsForm::UPLOAD_FORM_ALLOWED_MIMETYPES); - - $this->parentId = $this->routeMatch->getParameter('node'); - $parent = $this->entityTypeManager->getStorage('node')->load($this->parentId); - - $form['upload'] = [ - '#type' => 'managed_file', - '#title' => $this->t('File'), - '#description' => $this->t("Upload a file for @title", ['@title' => $parent->getTitle()]), - '#upload_location' => $upload_location, - '#upload_validators' => [ - 'file_validate_extensions' => [$valid_extensions], - ], - '#required' => TRUE, - ]; - - $options = []; - $terms = $this->entityTypeManager->getStorage('taxonomy_term')->loadTree('islandora_media_use', 0, NULL, TRUE); - foreach ($terms as $term) { - $options[$this->utils->getUriForTerm($term)] = $term->getName(); - }; - $form['use'] = [ - '#type' => 'checkboxes', - '#title' => $this->t('Usage'), - '#description' => $this->t("Defined by Portland Common Data Model: Use Extension https://pcdm.org/2015/05/12/use. ''Original File'' will trigger creation of derivatives."), - '#options' => $options, - '#required' => TRUE, - ]; - - $form['submit'] = [ - '#type' => 'submit', - '#value' => $this->t('Submit'), - ]; - - return $form; - } - - /** - * {@inheritdoc} - */ - public function submitForm(array &$form, FormStateInterface $form_state) { - $parent_id = $this->routeMatch->getParameter('node'); - $parent = $this->entityTypeManager->getStorage('node')->load($parent_id); - - $fid = $form_state->getValue('upload')[0]; - $external_uris = $form_state->getValue('use'); - - // Since we make 2 different entities, do this in a transaction. - $transaction = $this->database->startTransaction(); - - try { - $file = $this->entityTypeManager->getStorage('file')->load($fid); - $file->setPermanent(); - $file->save(); - - $parent = $this->entityTypeManager->getStorage('node')->load($parent_id); - - $mime = $file->getMimetype(); - $exploded_mime = explode('/', $mime); - if ($exploded_mime[0] == 'image') { - if (in_array($exploded_mime[1], ['tiff', 'jp2'])) { - $media_type = 'file'; - } - else { - $media_type = 'image'; - } - } - elseif ($exploded_mime[0] == 'audio') { - $media_type = 'audio'; - } - elseif ($exploded_mime[0] == 'video') { - $media_type = 'video'; - } - else { - $media_type = 'file'; - } - $source_field = $this->mediaSource->getSourceFieldName($media_type); - - $terms = []; - foreach ($external_uris as $uri) { - $terms[] = $this->utils->getTermForUri($uri); - } - $media = $this->entityTypeManager->getStorage('media')->create([ - 'bundle' => $media_type, - 'uid' => $this->account->id(), - $source_field => $fid, - 'name' => $file->getFileName(), - IslandoraUtils::MEDIA_USAGE_FIELD => $terms, - IslandoraUtils::MEDIA_OF_FIELD => $parent, - ]); - $media->save(); - - $form_state->setRedirect( - 'view.media_of.page_1', - ['node' => $parent_id] - ); - } - catch (HttpException $e) { - $transaction->rollBack(); - throw $e; - } - catch (\Exception $e) { - $transaction->rollBack(); - throw new HttpException(500, $e->getMessage()); - } - } - - /** - * Check if the user can create any "Islandora" media. - * - * @param \Drupal\Core\Routing\RouteMatch $route_match - * The current routing match. - * - * @return \Drupal\Core\Access\AccessResultAllowed|\Drupal\Core\Access\AccessResultForbidden - * Whether we can or can't show the "thing". - */ - public function access(RouteMatch $route_match) { - if ($this->utils->canCreateIslandoraEntity('media', 'media_type')) { - return AccessResult::allowed(); - } - - return AccessResult::forbidden(); - } - - /** - * Utility function to check if user can create 'Islandora' entity types. - */ - protected function canCreateIslandoraEntity($entity_type, $bundle_type) { - $bundles = $this->entityTypeManager->getStorage($bundle_type)->loadMultiple(); - $access_control_handler = $this->entityTypeManager->getAccessControlHandler($entity_type); - - $allowed = []; - foreach (array_keys($bundles) as $bundle) { - // Skip bundles that aren't 'Islandora' types. - if (!$this->utils->isIslandoraType($entity_type, $bundle)) { - continue; - } - - $access = $access_control_handler->createAccess($bundle, NULL, [], TRUE); - if (!$access->isAllowed()) { - continue; - } - - return TRUE; - } - - return FALSE; - } - -} diff --git a/src/Form/IslandoraSettingsForm.php b/src/Form/IslandoraSettingsForm.php index 43016d00..f71cb93c 100644 --- a/src/Form/IslandoraSettingsForm.php +++ b/src/Form/IslandoraSettingsForm.php @@ -4,11 +4,9 @@ namespace Drupal\islandora\Form; use Drupal\Core\Config\ConfigFactoryInterface; use Drupal\Core\Entity\EntityTypeBundleInfo; -use Drupal\Core\Entity\EntityStorageInterface; use Drupal\Core\Form\ConfigFormBase; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Url; -use Drupal\islandora\IslandoraUtils; use GuzzleHttp\Exception\ConnectException; use Islandora\Crayfish\Commons\Client\GeminiClient; use Stomp\Client; @@ -24,11 +22,6 @@ class IslandoraSettingsForm extends ConfigFormBase { const CONFIG_NAME = 'islandora.settings'; const BROKER_URL = 'broker_url'; const JWT_EXPIRY = 'jwt_expiry'; - const UPLOAD_FORM = 'upload_form'; - const UPLOAD_FORM_BUNDLE = 'upload_form_bundle'; - const UPLOAD_FORM_TERM = 'upload_form_term'; - const UPLOAD_FORM_LOCATION = 'upload_form_location'; - const UPLOAD_FORM_ALLOWED_MIMETYPES = 'upload_form_allowed_mimetypes'; const GEMINI_URL = 'gemini_url'; const GEMINI_PSEUDO = 'gemini_pseudo_bundles'; @@ -39,20 +32,6 @@ class IslandoraSettingsForm extends ConfigFormBase { */ private $entityTypeBundleInfo; - /** - * Islandora utils. - * - * @var \Drupal\islandora\IslandoraUtils - */ - private $utils; - - /** - * Term storage. - * - * @var \Drupal\Core\Entity\EntityStorageInterface - */ - private $termStorage; - /** * Constructs a \Drupal\system\ConfigFormBase object. * @@ -60,21 +39,10 @@ class IslandoraSettingsForm extends ConfigFormBase { * The factory for configuration objects. * @param \Drupal\Core\Entity\EntityTypeBundleInfo $entity_type_bundle_info * The EntityTypeBundleInfo service. - * @param \Drupal\islandora\IslandoraUtils $utils - * Islandora utils. - * @param \Drupal\Core\Entity\EntityStorageInterface $term_storage - * Term storage. */ - public function __construct( - ConfigFactoryInterface $config_factory, - EntityTypeBundleInfo $entity_type_bundle_info, - IslandoraUtils $utils, - EntityStorageInterface $term_storage - ) { + public function __construct(ConfigFactoryInterface $config_factory, EntityTypeBundleInfo $entity_type_bundle_info) { $this->setConfigFactory($config_factory); $this->entityTypeBundleInfo = $entity_type_bundle_info; - $this->utils = $utils; - $this->termStorage = $term_storage; } /** @@ -83,9 +51,7 @@ class IslandoraSettingsForm extends ConfigFormBase { public static function create(ContainerInterface $container) { return new static( $container->get('config.factory'), - $container->get('entity_type.bundle.info'), - $container->get('islandora.utils'), - $container->get('entity_type.manager')->getStorage('taxonomy_term') + $container->get('entity_type.bundle.info') ); } @@ -124,55 +90,6 @@ class IslandoraSettingsForm extends ConfigFormBase { '#description' => 'Eg: 60, "2 days", "10h", "7d". A numeric value is interpreted as a seconds count. If you use a string be sure you provide the time units (days, hours, etc), otherwise milliseconds unit is used by default ("120" is equal to "120ms").', ]; - $form[self::UPLOAD_FORM] = [ - '#type' => 'fieldset', - '#title' => $this->t('Add Children / Media Form'), - ]; - - $form[self::UPLOAD_FORM][self::UPLOAD_FORM_LOCATION] = [ - '#type' => 'textfield', - '#title' => $this->t('Upload location'), - '#description' => $this->t('Tokenized URI pattern where the uploaded file should go. You may use tokens to provide a pattern (e.g. "fedora://[date:custom:Y]-[date:custom:m]")'), - '#default_value' => $config->get(self::UPLOAD_FORM_LOCATION), - '#element_validate' => ['token_element_validate'], - '#token_types' => ['system'], - ]; - $form[self::UPLOAD_FORM]['TOKEN_HELP'] = [ - '#theme' => 'token_tree_link', - '#token_type' => ['system'], - ]; - - $form[self::UPLOAD_FORM][self::UPLOAD_FORM_ALLOWED_MIMETYPES] = [ - '#type' => 'textarea', - '#title' => $this->t('Allowed Mimetypes'), - '#description' => $this->t('Add mimetypes as a space delimited list with no periods before the extension.'), - '#default_value' => $config->get(self::UPLOAD_FORM_ALLOWED_MIMETYPES), - ]; - - $options = []; - foreach ($this->entityTypeBundleInfo->getBundleInfo('node') as $bundle_id => $bundle) { - if ($this->utils->isIslandoraType('node', $bundle_id)) { - $options[$bundle_id] = $bundle['label']; - } - }; - $form[self::UPLOAD_FORM][self::UPLOAD_FORM_BUNDLE] = [ - '#type' => 'select', - '#title' => $this->t('Content type to create (Add Children Form Only)'), - '#default_value' => $config->get(self::UPLOAD_FORM_BUNDLE), - '#options' => $options, - ]; - - $options = []; - foreach ($this->termStorage->loadTree('islandora_media_use', 0, NULL, TRUE) as $term) { - $options[$this->utils->getUriForTerm($term)] = $term->getName(); - }; - $form[self::UPLOAD_FORM][self::UPLOAD_FORM_TERM] = [ - '#type' => 'select', - '#title' => $this->t('Media Use Term for Uploaded Files (Add Children Form Only)'), - '#default_value' => $config->get(self::UPLOAD_FORM_TERM), - '#options' => $options, - ]; - $form[self::GEMINI_URL] = [ '#type' => 'textfield', '#title' => $this->t('Gemini URL'), @@ -299,10 +216,6 @@ class IslandoraSettingsForm extends ConfigFormBase { $config ->set(self::BROKER_URL, $form_state->getValue(self::BROKER_URL)) ->set(self::JWT_EXPIRY, $form_state->getValue(self::JWT_EXPIRY)) - ->set(self::UPLOAD_FORM_BUNDLE, $form_state->getValue(self::UPLOAD_FORM_BUNDLE)) - ->set(self::UPLOAD_FORM_TERM, $form_state->getValue(self::UPLOAD_FORM_TERM)) - ->set(self::UPLOAD_FORM_LOCATION, $form_state->getValue(self::UPLOAD_FORM_LOCATION)) - ->set(self::UPLOAD_FORM_ALLOWED_MIMETYPES, $form_state->getValue(self::UPLOAD_FORM_ALLOWED_MIMETYPES)) ->set(self::GEMINI_URL, $form_state->getValue(self::GEMINI_URL)) ->set(self::GEMINI_PSEUDO, $pseudo_types) ->save(); diff --git a/src/Plugin/Condition/NodeHasTerm.php b/src/Plugin/Condition/NodeHasTerm.php index c912ea9b..dae52ad0 100644 --- a/src/Plugin/Condition/NodeHasTerm.php +++ b/src/Plugin/Condition/NodeHasTerm.php @@ -79,16 +79,6 @@ class NodeHasTerm extends ConditionPluginBase implements ContainerFactoryPluginI ); } - /** - * {@inheritdoc} - */ - public function defaultConfiguration() { - return array_merge( - ['logic' => 'and'], - parent::defaultConfiguration() - ); - } - /** * {@inheritdoc} */ @@ -110,16 +100,6 @@ class NodeHasTerm extends ConditionPluginBase implements ContainerFactoryPluginI '#required' => TRUE, ]; - $form['logic'] = [ - '#type' => 'radios', - '#title' => $this->t('Logic'), - '#description' => $this->t('Whether to use AND or OR logic to evaluate multiple terms'), - '#options' => [ - 'and' => 'And', - 'or' => 'Or', - ], - '#default_value' => $this->configuration['logic'], - ]; return parent::buildConfigurationForm($form, $form_state); } @@ -144,9 +124,6 @@ class NodeHasTerm extends ConditionPluginBase implements ContainerFactoryPluginI $this->configuration['uri'] = implode(',', $uris); } } - - $this->configuration['logic'] = $form_state->getValue('logic'); - parent::submitConfigurationForm($form, $form_state); } @@ -191,7 +168,7 @@ class NodeHasTerm extends ConditionPluginBase implements ContainerFactoryPluginI // FALSE if there's no URIs on the node. if (empty($haystack)) { - return FALSE; + return $this->isNegated() ? TRUE : FALSE; } // Get the URIs to look for. It's a required field, so there @@ -199,19 +176,12 @@ class NodeHasTerm extends ConditionPluginBase implements ContainerFactoryPluginI $needles = explode(',', $this->configuration['uri']); // TRUE if every needle is in the haystack. - if ($this->configuration['logic'] == 'and') { - if (count(array_intersect($needles, $haystack)) == count($needles)) { - return TRUE; - } - return FALSE; - } - // TRUE if any needle is in the haystack. - else { - if (count(array_intersect($needles, $haystack)) > 0) { - return TRUE; - } - return FALSE; + if (count(array_intersect($needles, $haystack)) == count($needles)) { + return $this->isNegated() ? FALSE : TRUE; } + + // Otherwise, FALSE. + return $this->isNegated() ? TRUE : FALSE; } /**