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 babf0f5cecff2247120e105db76f788b4b8b888a..5dc5f64a141947d1af437065eec9fe7ba9304a25 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 818e8de5843b7423da7334cba221573903d7ca2b..61daa1b7a2396fd9d314fc6c085136429dc28721 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 03fa4ab3f15f5be9efb49e1149e42157096d1f77..98e89b6f070b672c32cd54ec4bbd21533eb5107a 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"