Skip to content

Commit

Permalink
Moved functions to service from module file.
Browse files Browse the repository at this point in the history
  • Loading branch information
dj1999 committed Feb 8, 2024
1 parent 96879d6 commit 71b3ac3
Show file tree
Hide file tree
Showing 6 changed files with 187 additions and 43 deletions.
27 changes: 25 additions & 2 deletions config/install/filehash.settings.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,28 @@
_core:
default_config_hash: V3ulwBSb67S5rXWYPoTxUclL7J68U9ebpzj5z3lfigk
algos:
sha1: sha1
blake2b_128: '0'
blake2b_160: '0'
blake2b_224: '0'
blake2b_256: '0'
blake2b_384: '0'
blake2b_512: '0'
md5: '0'
sha1: sha1
sha224: '0'
sha256: '0'
dedupe: true
sha384: '0'
sha512_224: '0'
sha512_256: '0'
sha512: '0'
sha3_224: '0'
sha3_256: '0'
sha3_384: '0'
sha3_512: '0'
dedupe: 1
rehash: true
original: false
dedupe_original: true
mime_types: { }
autohash: true
suppress_warnings: false
47 changes: 7 additions & 40 deletions modules/damopen_assets_library/damopen_assets_library.module
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\Url;
use Drupal\filehash\FileHashInterface;
use Drupal\user\UserInterface;

/**
Expand Down Expand Up @@ -76,50 +77,16 @@ function damopen_assets_library_entity_access(EntityInterface $entity, $operatio
* Add filehash validation if needed to media_bulk_upload form.
*/
function damopen_assets_library_form_media_upload_bulk_upload_form_alter(&$form, FormStateInterface $form_state, $form_id) {
// @todo: Require this dep?
if (
Drupal::moduleHandler()->moduleExists('filehash')
&& Drupal::config('filehash.settings')->get('dedupe')
) {
$form['#validate'][] = '_damopen_assets_library_media_upload_bulk_upload_validate';
}
\Drupal::service('damopen_assets_library.helper')
->formMediaUploadBulkUploadFormAlter($form, $form_state, $form_id);
}

/**
* Validate files on bulk upload with filehash_file_validate.
* Implements hook_ENTITY_TYPE_delete().
*/
function _damopen_assets_library_media_upload_bulk_upload_validate($form, FormStateInterface $form_state) {
$values = $form_state->getValues();
if (empty($values['dropzonejs']) || empty($values['dropzonejs']['uploaded_files'])) {
return;
}

$files = $values['dropzonejs']['uploaded_files'];
$tmpFiles = [];

/** @var \Drupal\file\FileStorageInterface $fileStorage */
$fileStorage = Drupal::entityTypeManager()->getStorage('file');

foreach ($files as $key => $file) {
// Set uri for filehash.
$file['uri'] = $file['path'];
$tmpFile = $fileStorage->create($file);
$tmpFiles[$key] = $tmpFile;
}

$messenger = Drupal::messenger();

foreach ($tmpFiles as $key => $tmpFile) {
$errors = filehash_file_validate($tmpFile);
if (!empty($errors)) {
foreach ($errors as $error) {
$messenger->addMessage(t('%filename: @error', ['%filename' => $files[$key]['filename'], '@error' => $error]), 'warning');
}
unset($files[$key]);
}
}
$values['dropzonejs']['uploaded_files'] = $files;
$form_state->setValue('dropzonejs', $values['dropzonejs']);
function damopen_assets_library_media_delete(EntityInterface $entity) {
\Drupal::service('damopen_assets_library.helper')
->mediaDelete($entity);
}

/**
Expand Down
10 changes: 10 additions & 0 deletions modules/damopen_assets_library/damopen_assets_library.services.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
services:
damopen_assets_library.helper:
class: Drupal\damopen_assets_library\Helper
arguments:
- '@entity_type.manager'
- '@file.recursive_validator'
- '@validation.constraint'
- '@module_handler'
- '@config.factory'
- '@messenger'
100 changes: 100 additions & 0 deletions modules/damopen_assets_library/src/Helper.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
<?php declare(strict_types = 1);

namespace Drupal\damopen_assets_library;

use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Messenger\MessengerInterface;
use Drupal\Core\Validation\ConstraintManager;
use Drupal\media\MediaInterface;
use Symfony\Component\Validator\Validator\ValidatorInterface;

/**
* Damopen Assets Library Helper service.
*/
final class Helper implements HelperInterface {

/**
* Constructs a Helper object.
*/
public function __construct(
private readonly EntityTypeManagerInterface $entityTypeManager,
private readonly ValidatorInterface $fileRecursiveValidator,
private readonly ConstraintManager $validationConstraint,
private readonly ModuleHandlerInterface $moduleHandler,
private readonly ConfigFactoryInterface $configFactory,
private readonly MessengerInterface $messenger
) {}

/**
* @inheritDoc
*/
public function formMediaUploadBulkUploadFormAlter(&$form, FormStateInterface $form_state, $form_id) {
if (
$this->moduleHandler->moduleExists('filehash')
&& $this->configFactory->get('filehash.settings')->get('dedupe')
) {
$form['#validate'][] = [$this, 'mediaUploadBulkUploadValidate'];
}
}

/**
* @inheritDoc
*/
public function mediaUploadBulkUploadValidate($form, FormStateInterface $form_state) {
$values = $form_state->getValues();
if (empty($values['dropzonejs']) || empty($values['dropzonejs']['uploaded_files'])) {
return;
}

$files = $values['dropzonejs']['uploaded_files'];
$tmpFiles = [];

/** @var \Drupal\file\FileStorageInterface $fileStorage */
$fileStorage = \Drupal::entityTypeManager()->getStorage('file');

foreach ($files as $key => $file) {
// Set uri for filehash.
$file['uri'] = $file['path'];
$tmpFile = $fileStorage->create($file);
$tmpFiles[$key] = $tmpFile;
}

$config = $this->configFactory->get('filehash.settings');
$options['strict'] = TRUE;
$options['original'] = $config->get('dedupe_original') ?? FALSE;
$constraints[] = $this->validationConstraint
->create('FileHashDedupe', $options);
foreach ($tmpFiles as $key => $tmpFile) {
$fileTypedData = $tmpFile->getTypedData();
$violations = $this->fileRecursiveValidator
->validate($fileTypedData, $constraints);
foreach ($violations as $violation) {
unset($files[$key]);
$this->messenger->addMessage($violation->getMessage(), 'warning');
}
}

$values['dropzonejs']['uploaded_files'] = $files;
$form_state->setValue('dropzonejs', $values['dropzonejs']);
}

/**
* @inheritDoc
*/
public function mediaDelete(MediaInterface $entity) {
$definitions = $entity->getFieldDefinitions();
foreach ($definitions as $definition) {
if (in_array($definition->getType(), ['file', 'image'])) {
$field = $definition->getName();
$files = $entity->get($field)->referencedEntities();
foreach ($files as $file) {
$file->delete();
}
}
}
}

}
43 changes: 43 additions & 0 deletions modules/damopen_assets_library/src/HelperInterface.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
<?php declare(strict_types = 1);

namespace Drupal\damopen_assets_library;

use Drupal\Core\Form\FormStateInterface;
use Drupal\media\MediaInterface;

/**
* Damopen Assets Library Helper service interface.
*/
interface HelperInterface {

/**
* Implements hook_form_FORM_ID_alter().
*
* @param $form
* The form array.
* @param \Drupal\Core\Form\FormStateInterface $form_state
* The form state.
* @param $form_id
* The form id.
*/
public function formMediaUploadBulkUploadFormAlter(&$form, FormStateInterface $form_state, $form_id);

/**
* CALLBACK for formMediaUploadBulkUploadFormAlter().
*
* @param $form
* The form array.
* @param \Drupal\Core\Form\FormStateInterface $form_state
* The form state.
*/
public function mediaUploadBulkUploadValidate($form, FormStateInterface $form_state);

/**
* Implements hook_entity_ENTITY_TYPE_delete().
*
* @param \Drupal\media\MediaInterface $entity
* The media entity to delete.
*/
public function mediaDelete(MediaInterface $entity);

}
3 changes: 2 additions & 1 deletion modules/damopen_assets_lister/damopen_assets_lister.module
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,8 @@ function _damopen_assets_lister_determine_unpublished_view(AccountProxyInterface
function damopen_assets_lister_toolbar_alter(array &$items) {
$currentUser = Drupal::currentUser();

if (!in_array('administrator', $currentUser->getRoles(), TRUE)) {
if ($currentUser->id() !== '1'
&& !in_array('administrator', $currentUser->getRoles(), TRUE)) {
// Hide toolbar search from regular users.
// @todo: Patch for admin toolbar (admin_toolbar_toolbar_alter), add perm.
// @todo: Hide "administrator" only when no items are under it.
Expand Down

0 comments on commit 71b3ac3

Please sign in to comment.