|
|
@ -3,6 +3,8 @@ |
|
|
|
namespace Drupal\islandora; |
|
|
|
namespace Drupal\islandora; |
|
|
|
|
|
|
|
|
|
|
|
use Drupal\context\ContextManager; |
|
|
|
use Drupal\context\ContextManager; |
|
|
|
|
|
|
|
use Drupal\Component\Utility\Html; |
|
|
|
|
|
|
|
use Drupal\Core\Cache\CacheBackendInterface; |
|
|
|
use Drupal\Core\Entity\ContentEntityInterface; |
|
|
|
use Drupal\Core\Entity\ContentEntityInterface; |
|
|
|
use Drupal\Core\Entity\EntityFieldManagerInterface; |
|
|
|
use Drupal\Core\Entity\EntityFieldManagerInterface; |
|
|
|
use Drupal\Core\Entity\EntityInterface; |
|
|
|
use Drupal\Core\Entity\EntityInterface; |
|
|
@ -10,6 +12,7 @@ use Drupal\Core\Entity\EntityTypeManagerInterface; |
|
|
|
use Drupal\Core\Entity\Query\QueryException; |
|
|
|
use Drupal\Core\Entity\Query\QueryException; |
|
|
|
use Drupal\Core\Entity\Query\QueryInterface; |
|
|
|
use Drupal\Core\Entity\Query\QueryInterface; |
|
|
|
use Drupal\Core\Language\LanguageManagerInterface; |
|
|
|
use Drupal\Core\Language\LanguageManagerInterface; |
|
|
|
|
|
|
|
use Drupal\Core\Session\AccountProxyInterface; |
|
|
|
use Drupal\Core\Site\Settings; |
|
|
|
use Drupal\Core\Site\Settings; |
|
|
|
use Drupal\Core\Url; |
|
|
|
use Drupal\Core\Url; |
|
|
|
use Drupal\file\FileInterface; |
|
|
|
use Drupal\file\FileInterface; |
|
|
@ -70,6 +73,19 @@ class IslandoraUtils { |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
protected $languageManager; |
|
|
|
protected $languageManager; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* Cache backend. |
|
|
|
|
|
|
|
* |
|
|
|
|
|
|
|
* @var \Drupal\Core\Cache\CacheBackendInterface |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
protected $cache; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** Current user. |
|
|
|
|
|
|
|
* |
|
|
|
|
|
|
|
* @var \Drupal\Core\Session\AccountProxyInterface |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
protected $currentUser; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* Constructor. |
|
|
|
* Constructor. |
|
|
|
* |
|
|
|
* |
|
|
@ -83,19 +99,27 @@ class IslandoraUtils { |
|
|
|
* Flysystem factory. |
|
|
|
* Flysystem factory. |
|
|
|
* @param \Drupal\Core\Language\LanguageManagerInterface $language_manager |
|
|
|
* @param \Drupal\Core\Language\LanguageManagerInterface $language_manager |
|
|
|
* Language manager. |
|
|
|
* Language manager. |
|
|
|
|
|
|
|
* @param \Drupal\Core\Cache\CacheBackendInterface |
|
|
|
|
|
|
|
* Cache backend. |
|
|
|
|
|
|
|
* @param \Drupal\Core\Session\AccountProxyInterface |
|
|
|
|
|
|
|
* Current user account. |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
public function __construct( |
|
|
|
public function __construct( |
|
|
|
EntityTypeManagerInterface $entity_type_manager, |
|
|
|
EntityTypeManagerInterface $entity_type_manager, |
|
|
|
EntityFieldManagerInterface $entity_field_manager, |
|
|
|
EntityFieldManagerInterface $entity_field_manager, |
|
|
|
ContextManager $context_manager, |
|
|
|
ContextManager $context_manager, |
|
|
|
FlysystemFactory $flysystem_factory, |
|
|
|
FlysystemFactory $flysystem_factory, |
|
|
|
LanguageManagerInterface $language_manager |
|
|
|
LanguageManagerInterface $language_manager, |
|
|
|
|
|
|
|
CacheBackendInterface $cache, |
|
|
|
|
|
|
|
AccountProxyInterface $currentUser |
|
|
|
) { |
|
|
|
) { |
|
|
|
$this->entityTypeManager = $entity_type_manager; |
|
|
|
$this->entityTypeManager = $entity_type_manager; |
|
|
|
$this->entityFieldManager = $entity_field_manager; |
|
|
|
$this->entityFieldManager = $entity_field_manager; |
|
|
|
$this->contextManager = $context_manager; |
|
|
|
$this->contextManager = $context_manager; |
|
|
|
$this->flysystemFactory = $flysystem_factory; |
|
|
|
$this->flysystemFactory = $flysystem_factory; |
|
|
|
$this->languageManager = $language_manager; |
|
|
|
$this->languageManager = $language_manager; |
|
|
|
|
|
|
|
$this->cache = $cache; |
|
|
|
|
|
|
|
$this->currentUser = $currentUser; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
@ -235,6 +259,19 @@ class IslandoraUtils { |
|
|
|
* Calling getStorage() throws if the storage handler couldn't be loaded. |
|
|
|
* Calling getStorage() throws if the storage handler couldn't be loaded. |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
public function getTermForUri($uri) { |
|
|
|
public function getTermForUri($uri) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$cid_parts = [ |
|
|
|
|
|
|
|
'islandora', |
|
|
|
|
|
|
|
'term-for-uri', |
|
|
|
|
|
|
|
'user-' . $this->currentUser->id(), |
|
|
|
|
|
|
|
'uri-' . Html::getClass($uri), |
|
|
|
|
|
|
|
]; |
|
|
|
|
|
|
|
$cid = implode(':', $cid_parts); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ($cache = $this->cache->get($cid)) { |
|
|
|
|
|
|
|
return $cache->data; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Get authority link fields to search. |
|
|
|
// Get authority link fields to search. |
|
|
|
$field_map = $this->entityFieldManager->getFieldMap(); |
|
|
|
$field_map = $this->entityFieldManager->getFieldMap(); |
|
|
|
$fields = []; |
|
|
|
$fields = []; |
|
|
@ -258,12 +295,20 @@ class IslandoraUtils { |
|
|
|
->condition($orGroup) |
|
|
|
->condition($orGroup) |
|
|
|
->execute(); |
|
|
|
->execute(); |
|
|
|
|
|
|
|
|
|
|
|
if (empty($results)) { |
|
|
|
$term = NULL; |
|
|
|
return NULL; |
|
|
|
if (!empty($results)) { |
|
|
|
|
|
|
|
$term = $this->entityTypeManager->getStorage('taxonomy_term') |
|
|
|
|
|
|
|
->load(reset($results)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return $this->entityTypeManager->getStorage('taxonomy_term') |
|
|
|
$this->cache->set( |
|
|
|
->load(reset($results)); |
|
|
|
$cid, |
|
|
|
|
|
|
|
$term, |
|
|
|
|
|
|
|
CacheBackendInterface::CACHE_PERMANENT, |
|
|
|
|
|
|
|
$term->getCacheTags() |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return $term; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|