diff --git a/module/fid/config/module.config.php b/module/fid/config/module.config.php index d32247d06d75a64348d6c26ed659a059595b0c8b..bb11f27f4b4c0c49c62087e384a4fe63369de70a 100644 --- a/module/fid/config/module.config.php +++ b/module/fid/config/module.config.php @@ -33,7 +33,7 @@ use fid\Helper\TranslatorDelegator; use fid\Hydrator\OrderHydrator; use fid\Hydrator\UserHydrator; use fid\Hydrator\UserHydratorDelegatorFactory; -use fid\Listener\BaseUrlListener; +use fid\Listener\ClientConfigListener; use fid\Listener\ErrorListener; use fid\Listener\ErrorListenerFactory; use fid\Listener\LocaleListener; @@ -105,7 +105,7 @@ $config = [ 'listeners' => [ ErrorListener::class, LocaleListener::class, - BaseUrlListener::class, + ClientConfigListener::class, ], // TODO: issue PR to add alias to vufind core 'controller_plugins' => [ @@ -131,7 +131,7 @@ $config = [ ErrorListener::class => InvokableFactory:: class, ILSAuthenticator::class => ILSAuthenticatorFactory::class, LocaleListener::class => InvokableFactory::class, - BaseUrlListener::class => InvokableFactory::class + ClientConfigListener::class => InvokableFactory::class ], ], 'view_helpers' => [ diff --git a/module/fid/src/Listener/BaseUrlListener.php b/module/fid/src/Listener/ClientConfigListener.php similarity index 73% rename from module/fid/src/Listener/BaseUrlListener.php rename to module/fid/src/Listener/ClientConfigListener.php index 3fb05b4216f38c4f6f4362667cd21335637dfc33..8f5bf8300e14326c4e2de8d81eceb5fbfc66dd69 100644 --- a/module/fid/src/Listener/BaseUrlListener.php +++ b/module/fid/src/Listener/ClientConfigListener.php @@ -22,7 +22,6 @@ namespace fid\Listener; use fid\Service\ClientException; -use fid\Service\ClientFactory; use Psr\Container\ContainerInterface; use VuFind\Config\PluginManager; use VuFind\Cookie\CookieManager; @@ -32,25 +31,29 @@ use Zend\EventManager\EventManagerInterface; use Zend\Mvc\MvcEvent; use Zend\View\Model\ViewModel; -class BaseUrlListener extends AbstractListenerAggregate +class ClientConfigListener extends AbstractListenerAggregate { protected const PARAM = 'fidis_base_url'; protected const EVENT = MvcEvent::EVENT_ROUTE; + protected const CONFIG_KEY = 'fid'; + + protected const ERROR_CONFIG_FILE = 'Invalid configuration file "%s.ini".'; + protected const STATUS = '%sFidis: %s'; /** - * @var string + * @var array */ - protected $baseUrl; + protected $config; /** - * @return string + * @return array */ - public function getBaseUrl(): string + public function getConfig(): array { - return $this->baseUrl; + return $this->config; } public function attach(EventManagerInterface $events, $priority = 9000) @@ -71,29 +74,36 @@ class BaseUrlListener extends AbstractListenerAggregate $request = $event->getRequest(); $container = $event->getApplication()->getServiceManager(); $configManager = $container->get(PluginManager::class); - $config = $configManager->get(ClientFactory::CONFIG_KEY)->Client; + $config = $configManager->get(self::CONFIG_KEY)->Client; + + if (!$config instanceof Config || !$config->baseUrl) { + $message = sprintf(self::ERROR_CONFIG_FILE, self::CONFIG_KEY); + throw new ClientException($message); + } - if (!$config instanceof Config || !$config->baseUrlOverrideAllowed) { + $this->config = $config->toArray(); + if (!$config->baseUrlOverrideAllowed) { return; } - $this->baseUrl = $request->getQuery(self::PARAM) + $baseUrl = $request->getQuery(self::PARAM) ?? $request->getCookie()[self::PARAM] ?? $config->baseUrl; - $valid = $this->baseUrl === $config->baseUrl - || preg_match("#$config->baseUrlOverridePattern#", $this->baseUrl); + $valid = $baseUrl === $config->baseUrl + || preg_match("#$config->baseUrlOverridePattern#", $baseUrl); if (!$valid) { - $this->baseUrl = $config->baseUrl; + $baseUrl = $config->baseUrl; } /** @var ViewModel $viewModel */ /** @var CookieManager $cookieManager */ + $this->config['baseUrl'] = $baseUrl; $cookieManager = $container->get(CookieManager::class); + $cookieManager->set(self::PARAM, $baseUrl); $viewModel = $container->get('ViewManager')->getViewModel(); - $cookieManager->set(self::PARAM, $this->baseUrl); - $fidisStatus = sprintf(self::STATUS, $valid ? '' : '!', $this->baseUrl); + $fidisStatus = sprintf(self::STATUS, $valid ? '' : '!', $baseUrl); $viewModel->setVariable('fidisStatus', $fidisStatus); } } \ No newline at end of file diff --git a/module/fid/src/Service/ClientFactory.php b/module/fid/src/Service/ClientFactory.php index ef621cd0aa8ae846e016b05d4183778e2941ec97..08398aeadeda3d1c7513aa0a19629d1bde7bf5b5 100644 --- a/module/fid/src/Service/ClientFactory.php +++ b/module/fid/src/Service/ClientFactory.php @@ -21,44 +21,28 @@ namespace fid\Service; -use fid\Listener\BaseUrlListener; +use fid\Listener\ClientConfigListener; use Psr\Container\ContainerInterface; use Psr\Http\Client\ClientInterface as HttpClientInterface; use Psr\Http\Message\RequestFactoryInterface; use Psr\Http\Message\StreamFactoryInterface; use Psr\Http\Message\UriFactoryInterface; use Symfony\Component\Serializer\SerializerInterface; -use VuFind\Config\PluginManager; use VuFind\Cookie\CookieManager; -use Zend\Config\Config; use Zend\Session\Container as Session; use Zend\Session\SessionManager; class ClientFactory { - public const CONFIG_KEY = 'fid'; - - protected const ERROR_CONFIG_FILE = 'Invalid configuration file "%s.ini".'; - /** * @param ContainerInterface $container * * @return Client - * @throws ClientException */ public function __invoke(ContainerInterface $container): Client { - $config = $container->get(PluginManager::class) - ->get(self::CONFIG_KEY)->Client; - - if (!$config instanceof Config || !$config->baseUrl) { - $message = sprintf(self::ERROR_CONFIG_FILE, self::CONFIG_KEY); - throw new ClientException($message); - } - - $baseUrl = $container->get(BaseUrlListener::class)->getBaseUrl(); - $configArray = compact('baseUrl') + $config->toArray(); - + /** @var ClientConfigListener $clientConfigListener */ + $clientConfigListener = $container->get(ClientConfigListener::class); /** @var SessionManager $sessionManager */ $sessionManager = $container->get(SessionManager::class); $session = new Session(Client::class, $sessionManager); @@ -76,8 +60,8 @@ class ClientFactory $requestFactory = $container->get(RequestFactoryInterface::class); return new Client( - $configArray, $session, $cookies, $serializer, $httpClient, - $uriFactory, $streamFactory, $requestFactory + $clientConfigListener->getConfig(), $session, $cookies, $serializer, + $httpClient, $uriFactory, $streamFactory, $requestFactory ); } } \ No newline at end of file diff --git a/themes/fid/scss/compiled.scss b/themes/fid/scss/compiled.scss index c0e51dd18e028dd7624c923c57971d1ea4e592ed..f58e72151ef824e5d58a49417cba9a8193205205 100644 --- a/themes/fid/scss/compiled.scss +++ b/themes/fid/scss/compiled.scss @@ -41,3 +41,15 @@ .back-to-login { font-size: large; } + +// fidis status +.fidis-status { + position: fixed; + left: 0; + right: 0; + bottom: 0; + z-index: 10000; + text-align: center; + background: rgba(#000, 0.6); + color: #fff; +} \ No newline at end of file diff --git a/themes/fid/templates/footer.phtml b/themes/fid/templates/footer.phtml new file mode 100644 index 0000000000000000000000000000000000000000..29c511c5b11555f96cef52d3e6f0629411f2baf0 --- /dev/null +++ b/themes/fid/templates/footer.phtml @@ -0,0 +1,52 @@ +<!-- finc: footer --> +<footer class="hidden-print"> + <div class="footer-container"> + <div class="footer-column"> + <h2><?=$this->transEsc('Search Options')?></h2> + <ul> + <li><a href="<?=$this->url('search-history')?>"><?=$this->transEsc('Search History')?></a></li> + <li><a href="<?=$this->url('search-advanced')?>"><?=$this->transEsc('Advanced Search')?></a></li> + </ul> + </div> + + <div class="footer-column"> + <h2><?=$this->transEsc('Find More')?></h2> + <ul> + <li><a href="<?=$this->url('browse-home')?>"><?=$this->transEsc('Browse the Catalog')?></a></li> + <li><a href="<?=$this->url('alphabrowse-home')?>"><?=$this->transEsc('Browse Alphabetically')?></a></li> + <li><a href="<?=$this->url('channels-home')?>"><?=$this->transEsc('channel_explore')?></a></li> + <li><a href="<?=$this->url('search-reserves')?>"><?=$this->transEsc('Course Reserves')?></a></li> + <li><a href="<?=$this->url('search-newitem')?>"><?=$this->transEsc('New Items')?></a></li> + <?php /* finc-specific - CK */ ?> + <li><a href="<?=$this->url('myresearch-acquisition')?>"><?=$this->transEsc('Suggestions for acquisition')?></a></li> + </ul> + </div> + <div class="footer-column"> + <h2><?=$this->transEsc('Need Help?')?></h2> + <ul> + <li><a href="<?=$this->url('help-home')?>?topic=search&_=<?=time()?>" data-lightbox class="help-link"><?=$this->transEsc('Search Tips')?></a></li> + <li><a href="<?=$this->url('content-page', ['page' => 'asklibrary'])?>"><?=$this->transEsc('Ask a Librarian')?></a></li> + <li><a href="<?=$this->url('content-page', ['page' => 'faq'])?>"><?=$this->transEsc('FAQs')?></a></li> + </ul> + </div> + </div> + + <?php /* finc branding footer */ ?> + <hr> + <div class="footer-container powered-by"> + <div class="footer-column"> + <?=$this->layout()->poweredBy?> + <span lang="en">Powered by</span> + <a href="https://vufind.org/" title="<?=$this->transEsc('vufind-logo_title')?>" target="_blank"> + <img src="<?=$this->imageLink('vufind_logo.png')?>" alt="<?=$this->transEsc('vufind-logo_alt')?>"/> + </a> + <a href="http://blog.finc.info" title="<?=$this->transEsc('finc-logo_title')?>" target="_blank"> + <img src="<?=$this->imageLink('finc_logo.png')?>" alt="<?=$this->transEsc('finc-logo_alt')?>"/> + </a> + </div> + </div> +</footer> +<?php if ($this->fidisStatus): ?> + <div class="fidis-status"><?=$this->fidisStatus?></div> +<?php endif; ?> +<!-- finc: Footer - END -->