Loading config/schema/filehash.schema.yml +8 −0 Original line number Diff line number Diff line Loading @@ -80,3 +80,11 @@ field.formatter.settings.filehash_table: use_description_as_link_text: type: boolean label: 'Replace the file name by its description when available' field.field.*.*.*.third_party.filehash: type: mapping label: 'File Hash settings' mapping: dedupe: type: integer label: 'Disallow duplicate files' filehash.module +8 −6 Original line number Diff line number Diff line Loading @@ -74,15 +74,17 @@ function filehash_entity_storage_load($files, $entity_type) { } /** * Implements hook_field_widget_single_element_WIDGET_TYPE_form_alter(). * Implements hook_field_widget_single_element_form_alter(). */ function filehash_field_widget_single_element_managed_file_form_alter(&$element, FormStateInterface $form_state, $context) { function filehash_field_widget_single_element_form_alter(&$element, FormStateInterface $form_state, $context) { if (isset($element['#type']) && $element['#type'] === 'managed_file') { $settings = $context['items']->getFieldDefinition()->getThirdPartySettings('filehash'); if (!empty($settings['dedupe'])) { $strict = FileHashInterface::STRICT_DEDUPE == $settings['dedupe']; $element['#upload_validators']['filehash_validate_dedupe'] = [$strict]; } } } /** * Implements hook_ENTITY_TYPE_create(). Loading tests/src/Functional/DrushTest.php +1 −1 Original line number Diff line number Diff line Loading @@ -8,7 +8,7 @@ use Drush\TestTraits\DrushTestTrait; /** * @coversDefaultClass \Drupal\filehash\Commands\FileHashCommands * * @group File Hash * @group filehash */ class DrushTest extends BrowserTestBase { Loading tests/src/Functional/FileHashTest.php +24 −1 Original line number Diff line number Diff line Loading @@ -10,7 +10,7 @@ use Drupal\Tests\file\Functional\FileFieldTestBase; /** * File Hash tests. * * @group File Hash * @group filehash */ class FileHashTest extends FileFieldTestBase implements FileHashTestInterface { Loading Loading @@ -150,6 +150,29 @@ class FileHashTest extends FileFieldTestBase implements FileHashTestInterface { $this->drupalGet("node/$nid/edit"); $this->submitForm([], 'Save'); $this->assertSession()->addressEquals("node/$nid"); // Disable global dedupe setting. $this->drupalGet('admin/config/media/filehash'); $fields = ['dedupe' => 0]; $this->submitForm($fields, 'Save configuration'); // Test field-level dedupe enabled. $this->drupalGet("admin/structure/types/manage/article/fields/node.article.$field_name"); $fields = ['third_party_settings[filehash][dedupe]' => 2]; $this->submitForm($fields, 'Save settings'); $nid = $this->uploadNodeFile($test_file, $field_name, $type_name); $this->assertSession()->addressEquals("node/$nid/edit"); $this->assertSession()->pageTextContains(strtr('The specified file %name could not be uploaded.', ['%name' => $test_file->getFilename()])); $this->assertSession()->pageTextContains('Sorry, duplicate files are not permitted.'); // Test field-level dedupe disabled. $this->drupalGet("admin/structure/types/manage/article/fields/node.article.$field_name"); $fields = ['third_party_settings[filehash][dedupe]' => 0]; $this->submitForm($fields, 'Save settings'); $nid = $this->uploadNodeFile($test_file, $field_name, $type_name); $this->assertSession()->addressEquals("node/$nid"); } /** Loading tests/src/Kernel/FileHashTest.php +2 −0 Original line number Diff line number Diff line Loading @@ -9,6 +9,8 @@ use Drupal\Tests\filehash\Functional\FileHashTestInterface; /** * Using kernel tests rather than functional for speediness. * * @group filehash */ class FileHashTest extends KernelTestBase implements FileHashTestInterface { Loading Loading
config/schema/filehash.schema.yml +8 −0 Original line number Diff line number Diff line Loading @@ -80,3 +80,11 @@ field.formatter.settings.filehash_table: use_description_as_link_text: type: boolean label: 'Replace the file name by its description when available' field.field.*.*.*.third_party.filehash: type: mapping label: 'File Hash settings' mapping: dedupe: type: integer label: 'Disallow duplicate files'
filehash.module +8 −6 Original line number Diff line number Diff line Loading @@ -74,15 +74,17 @@ function filehash_entity_storage_load($files, $entity_type) { } /** * Implements hook_field_widget_single_element_WIDGET_TYPE_form_alter(). * Implements hook_field_widget_single_element_form_alter(). */ function filehash_field_widget_single_element_managed_file_form_alter(&$element, FormStateInterface $form_state, $context) { function filehash_field_widget_single_element_form_alter(&$element, FormStateInterface $form_state, $context) { if (isset($element['#type']) && $element['#type'] === 'managed_file') { $settings = $context['items']->getFieldDefinition()->getThirdPartySettings('filehash'); if (!empty($settings['dedupe'])) { $strict = FileHashInterface::STRICT_DEDUPE == $settings['dedupe']; $element['#upload_validators']['filehash_validate_dedupe'] = [$strict]; } } } /** * Implements hook_ENTITY_TYPE_create(). Loading
tests/src/Functional/DrushTest.php +1 −1 Original line number Diff line number Diff line Loading @@ -8,7 +8,7 @@ use Drush\TestTraits\DrushTestTrait; /** * @coversDefaultClass \Drupal\filehash\Commands\FileHashCommands * * @group File Hash * @group filehash */ class DrushTest extends BrowserTestBase { Loading
tests/src/Functional/FileHashTest.php +24 −1 Original line number Diff line number Diff line Loading @@ -10,7 +10,7 @@ use Drupal\Tests\file\Functional\FileFieldTestBase; /** * File Hash tests. * * @group File Hash * @group filehash */ class FileHashTest extends FileFieldTestBase implements FileHashTestInterface { Loading Loading @@ -150,6 +150,29 @@ class FileHashTest extends FileFieldTestBase implements FileHashTestInterface { $this->drupalGet("node/$nid/edit"); $this->submitForm([], 'Save'); $this->assertSession()->addressEquals("node/$nid"); // Disable global dedupe setting. $this->drupalGet('admin/config/media/filehash'); $fields = ['dedupe' => 0]; $this->submitForm($fields, 'Save configuration'); // Test field-level dedupe enabled. $this->drupalGet("admin/structure/types/manage/article/fields/node.article.$field_name"); $fields = ['third_party_settings[filehash][dedupe]' => 2]; $this->submitForm($fields, 'Save settings'); $nid = $this->uploadNodeFile($test_file, $field_name, $type_name); $this->assertSession()->addressEquals("node/$nid/edit"); $this->assertSession()->pageTextContains(strtr('The specified file %name could not be uploaded.', ['%name' => $test_file->getFilename()])); $this->assertSession()->pageTextContains('Sorry, duplicate files are not permitted.'); // Test field-level dedupe disabled. $this->drupalGet("admin/structure/types/manage/article/fields/node.article.$field_name"); $fields = ['third_party_settings[filehash][dedupe]' => 0]; $this->submitForm($fields, 'Save settings'); $nid = $this->uploadNodeFile($test_file, $field_name, $type_name); $this->assertSession()->addressEquals("node/$nid"); } /** Loading
tests/src/Kernel/FileHashTest.php +2 −0 Original line number Diff line number Diff line Loading @@ -9,6 +9,8 @@ use Drupal\Tests\filehash\Functional\FileHashTestInterface; /** * Using kernel tests rather than functional for speediness. * * @group filehash */ class FileHashTest extends KernelTestBase implements FileHashTestInterface { Loading