From 4801ed4451c0af8d3403a551bdc90647f600e133 Mon Sep 17 00:00:00 2001 From: Alexander Purr <purr@ub.uni-leipzig.de> Date: Mon, 15 Mar 2021 17:38:48 +0100 Subject: [PATCH] refs #18996 [fid_bbi] show digitization-on-demand link on details page * if logged in and correct permission & * record older than 71 years & * format is no ebook * format is Atlas, Book, Manuscript, Map, Print or Thesis --- .../src/fid_bbi/View/Helper/Root/Factory.php | 4 +- .../src/fid_bbi/View/Helper/Root/Record.php | 41 +++++++++++++++++-- .../RecordDriver/DefaultRecord/core.phtml | 14 +++++++ 3 files changed, 54 insertions(+), 5 deletions(-) diff --git a/module/fid_bbi/src/fid_bbi/View/Helper/Root/Factory.php b/module/fid_bbi/src/fid_bbi/View/Helper/Root/Factory.php index babf0f5cecf..5dc5f64a141 100644 --- a/module/fid_bbi/src/fid_bbi/View/Helper/Root/Factory.php +++ b/module/fid_bbi/src/fid_bbi/View/Helper/Root/Factory.php @@ -28,6 +28,7 @@ namespace fid_bbi\View\Helper\Root; use Interop\Container\ContainerInterface; +use VuFind\Role\PermissionManager; /** * Factory for Root view helpers. @@ -56,7 +57,8 @@ class Factory $container->get('ViewHelperManager')->get('url'), $container->get('VuFind\AuthManager'), $container->get('finc\Rewrite\EblRewrite'), - $container->get('VuFind\Config')->get('Resolver') + $container->get('VuFind\Config')->get('Resolver'), + $container->get(PermissionManager::class) ); //due to https://github.com/vufind-org/vufind/pull/718 diff --git a/module/fid_bbi/src/fid_bbi/View/Helper/Root/Record.php b/module/fid_bbi/src/fid_bbi/View/Helper/Root/Record.php index 818e8de5843..61daa1b7a23 100644 --- a/module/fid_bbi/src/fid_bbi/View/Helper/Root/Record.php +++ b/module/fid_bbi/src/fid_bbi/View/Helper/Root/Record.php @@ -27,6 +27,8 @@ */ namespace fid_bbi\View\Helper\Root; +use VuFind\Role\PermissionManager; + /** * Record driver view helper * @@ -43,13 +45,19 @@ class Record extends \finc\View\Helper\Root\Record */ protected $formatIconMappings = []; - public function __construct($config, \Zend\View\Helper\Url $helper, \VuFind\Auth\Manager $manager, $rewrite, $resolverConfig) + /** + * @var PermissionManager + */ + protected $permissionManager; + + public function __construct($config, \Zend\View\Helper\Url $helper, \VuFind\Auth\Manager $manager, $rewrite, $resolverConfig, PermissionManager $permissionManager) { parent::__construct($config, $helper, $manager, $rewrite, $resolverConfig); - $formatIconMappingsFile = APPLICATION_PATH.$config->Record->format_icon_mappings_file_path; + $formatIconMappingsFile = APPLICATION_PATH . $config->Record->format_icon_mappings_file_path; if (file_exists($formatIconMappingsFile)) { $this->formatIconMappings = json_decode(file_get_contents($formatIconMappingsFile), true); } + $this->permissionManager = $permissionManager; } /** @@ -112,7 +120,7 @@ class Record extends \finc\View\Helper\Root\Record $subtitle = (!empty($subTitle) ? ': ' . $subTitle : '') . (!empty($sectionTitle) ? ', ' . $sectionTitle : ''); - $subtitle = preg_replace('/^((\S*\s){'.$maxLengthArr.'})\S.*$/','$1 ...',$subtitle); + $subtitle = preg_replace('/^((\S*\s){' . $maxLengthArr . '})\S.*$/', '$1 ...', $subtitle); if (!empty($subtitle)) { $escapeHtml = $this->getView()->plugin('escapeHtml'); @@ -123,9 +131,34 @@ class Record extends \finc\View\Helper\Root\Record public function getIconMapping($format = null) { - if (is_null($format)) { + if (null === $format) { $format = ($this->driver->tryMethod('getFormats') ?? ['Unknown format'])[0]; } return $this->formatIconMappings[$format] ?? 'unknown'; } + + public function allowDigitizationOnDemand() + { + if (!$this->manager->isLoggedIn()) { + return false; + } + if (!$this->permissionManager->isAuthorized('fid.Acquisitions')) { + return false; + } + $publishDate = $this->driver->tryMethod('getPublishDateSort'); + $copyrightExpiredDate = date("Y") - 71; + if (!($publishDate < $copyrightExpiredDate && $publishDate > 0)) { + return false; + } + $formats = $this->driver->tryMethod('getFormat'); + if (in_array("eBook", $formats)) { + return false; + } + $allowedFormats = ["Atlas","Book","Manuscript","Map","Print","Thesis"]; + if (array_intersect($allowedFormats, $formats)) { + return true; + } else { + return false; + } + } } diff --git a/themes/fid_bbi/templates/RecordDriver/DefaultRecord/core.phtml b/themes/fid_bbi/templates/RecordDriver/DefaultRecord/core.phtml index 03fa4ab3f15..98e89b6f070 100644 --- a/themes/fid_bbi/templates/RecordDriver/DefaultRecord/core.phtml +++ b/themes/fid_bbi/templates/RecordDriver/DefaultRecord/core.phtml @@ -100,6 +100,20 @@ </a> </li> + <?php if($this->record($this->driver)->allowDigitizationOnDemand()): ?> + <li> + <a + class="link-with-icon" + data-lightbox + href="<?=$this->recordLink()->getActionUrl($this->driver, 'fidDigitization')?>" + rel="nofollow" + > + <?=$this->icon('small/scan-book')?> + <?=$this->transEsc('Digitization-On-Demand Service')?> + </a> + </li> + <?php endif; ?> + <li> <a class="link-with-icon" -- GitLab