Skip to content
Snippets Groups Projects
Commit 729f9ef6 authored by Sebastian Kehr's avatar Sebastian Kehr :rowboat_tone2:
Browse files

Merge branch 'instance/fid' into instance/fid_adlr

parents 04df3b3c 1373c26e
No related merge requests found
...@@ -33,7 +33,7 @@ use fid\Helper\TranslatorDelegator; ...@@ -33,7 +33,7 @@ use fid\Helper\TranslatorDelegator;
use fid\Hydrator\OrderHydrator; use fid\Hydrator\OrderHydrator;
use fid\Hydrator\UserHydrator; use fid\Hydrator\UserHydrator;
use fid\Hydrator\UserHydratorDelegatorFactory; use fid\Hydrator\UserHydratorDelegatorFactory;
use fid\Listener\BaseUrlListener; use fid\Listener\ClientConfigListener;
use fid\Listener\ErrorListener; use fid\Listener\ErrorListener;
use fid\Listener\ErrorListenerFactory; use fid\Listener\ErrorListenerFactory;
use fid\Listener\LocaleListener; use fid\Listener\LocaleListener;
...@@ -105,7 +105,7 @@ $config = [ ...@@ -105,7 +105,7 @@ $config = [
'listeners' => [ 'listeners' => [
ErrorListener::class, ErrorListener::class,
LocaleListener::class, LocaleListener::class,
BaseUrlListener::class, ClientConfigListener::class,
], ],
// TODO: issue PR to add alias to vufind core // TODO: issue PR to add alias to vufind core
'controller_plugins' => [ 'controller_plugins' => [
...@@ -131,7 +131,7 @@ $config = [ ...@@ -131,7 +131,7 @@ $config = [
ErrorListener::class => InvokableFactory:: class, ErrorListener::class => InvokableFactory:: class,
ILSAuthenticator::class => ILSAuthenticatorFactory::class, ILSAuthenticator::class => ILSAuthenticatorFactory::class,
LocaleListener::class => InvokableFactory::class, LocaleListener::class => InvokableFactory::class,
BaseUrlListener::class => InvokableFactory::class ClientConfigListener::class => InvokableFactory::class
], ],
], ],
'view_helpers' => [ 'view_helpers' => [
......
...@@ -22,7 +22,6 @@ ...@@ -22,7 +22,6 @@
namespace fid\Listener; namespace fid\Listener;
use fid\Service\ClientException; use fid\Service\ClientException;
use fid\Service\ClientFactory;
use Psr\Container\ContainerInterface; use Psr\Container\ContainerInterface;
use VuFind\Config\PluginManager; use VuFind\Config\PluginManager;
use VuFind\Cookie\CookieManager; use VuFind\Cookie\CookieManager;
...@@ -32,25 +31,29 @@ use Zend\EventManager\EventManagerInterface; ...@@ -32,25 +31,29 @@ use Zend\EventManager\EventManagerInterface;
use Zend\Mvc\MvcEvent; use Zend\Mvc\MvcEvent;
use Zend\View\Model\ViewModel; use Zend\View\Model\ViewModel;
class BaseUrlListener extends AbstractListenerAggregate class ClientConfigListener extends AbstractListenerAggregate
{ {
protected const PARAM = 'fidis_base_url'; protected const PARAM = 'fidis_base_url';
protected const EVENT = MvcEvent::EVENT_ROUTE; 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'; 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) public function attach(EventManagerInterface $events, $priority = 9000)
...@@ -71,29 +74,36 @@ class BaseUrlListener extends AbstractListenerAggregate ...@@ -71,29 +74,36 @@ class BaseUrlListener extends AbstractListenerAggregate
$request = $event->getRequest(); $request = $event->getRequest();
$container = $event->getApplication()->getServiceManager(); $container = $event->getApplication()->getServiceManager();
$configManager = $container->get(PluginManager::class); $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; return;
} }
$this->baseUrl = $request->getQuery(self::PARAM) $baseUrl = $request->getQuery(self::PARAM)
?? $request->getCookie()[self::PARAM] ?? $request->getCookie()[self::PARAM]
?? $config->baseUrl; ?? $config->baseUrl;
$valid = $this->baseUrl === $config->baseUrl $valid = $baseUrl === $config->baseUrl
|| preg_match("#$config->baseUrlOverridePattern#", $this->baseUrl); || preg_match("#$config->baseUrlOverridePattern#", $baseUrl);
if (!$valid) { if (!$valid) {
$this->baseUrl = $config->baseUrl; $baseUrl = $config->baseUrl;
} }
/** @var ViewModel $viewModel */ /** @var ViewModel $viewModel */
/** @var CookieManager $cookieManager */ /** @var CookieManager $cookieManager */
$this->config['baseUrl'] = $baseUrl;
$cookieManager = $container->get(CookieManager::class); $cookieManager = $container->get(CookieManager::class);
$cookieManager->set(self::PARAM, $baseUrl);
$viewModel = $container->get('ViewManager')->getViewModel(); $viewModel = $container->get('ViewManager')->getViewModel();
$cookieManager->set(self::PARAM, $this->baseUrl); $fidisStatus = sprintf(self::STATUS, $valid ? '' : '!', $baseUrl);
$fidisStatus = sprintf(self::STATUS, $valid ? '' : '!', $this->baseUrl);
$viewModel->setVariable('fidisStatus', $fidisStatus); $viewModel->setVariable('fidisStatus', $fidisStatus);
} }
} }
\ No newline at end of file
...@@ -21,44 +21,28 @@ ...@@ -21,44 +21,28 @@
namespace fid\Service; namespace fid\Service;
use fid\Listener\BaseUrlListener; use fid\Listener\ClientConfigListener;
use Psr\Container\ContainerInterface; use Psr\Container\ContainerInterface;
use Psr\Http\Client\ClientInterface as HttpClientInterface; use Psr\Http\Client\ClientInterface as HttpClientInterface;
use Psr\Http\Message\RequestFactoryInterface; use Psr\Http\Message\RequestFactoryInterface;
use Psr\Http\Message\StreamFactoryInterface; use Psr\Http\Message\StreamFactoryInterface;
use Psr\Http\Message\UriFactoryInterface; use Psr\Http\Message\UriFactoryInterface;
use Symfony\Component\Serializer\SerializerInterface; use Symfony\Component\Serializer\SerializerInterface;
use VuFind\Config\PluginManager;
use VuFind\Cookie\CookieManager; use VuFind\Cookie\CookieManager;
use Zend\Config\Config;
use Zend\Session\Container as Session; use Zend\Session\Container as Session;
use Zend\Session\SessionManager; use Zend\Session\SessionManager;
class ClientFactory class ClientFactory
{ {
public const CONFIG_KEY = 'fid';
protected const ERROR_CONFIG_FILE = 'Invalid configuration file "%s.ini".';
/** /**
* @param ContainerInterface $container * @param ContainerInterface $container
* *
* @return Client * @return Client
* @throws ClientException
*/ */
public function __invoke(ContainerInterface $container): Client public function __invoke(ContainerInterface $container): Client
{ {
$config = $container->get(PluginManager::class) /** @var ClientConfigListener $clientConfigListener */
->get(self::CONFIG_KEY)->Client; $clientConfigListener = $container->get(ClientConfigListener::class);
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 SessionManager $sessionManager */ /** @var SessionManager $sessionManager */
$sessionManager = $container->get(SessionManager::class); $sessionManager = $container->get(SessionManager::class);
$session = new Session(Client::class, $sessionManager); $session = new Session(Client::class, $sessionManager);
...@@ -76,8 +60,8 @@ class ClientFactory ...@@ -76,8 +60,8 @@ class ClientFactory
$requestFactory = $container->get(RequestFactoryInterface::class); $requestFactory = $container->get(RequestFactoryInterface::class);
return new Client( return new Client(
$configArray, $session, $cookies, $serializer, $httpClient, $clientConfigListener->getConfig(), $session, $cookies, $serializer,
$uriFactory, $streamFactory, $requestFactory $httpClient, $uriFactory, $streamFactory, $requestFactory
); );
} }
} }
\ No newline at end of file
...@@ -41,3 +41,15 @@ ...@@ -41,3 +41,15 @@
.back-to-login { .back-to-login {
font-size: large; 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
<!-- 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&amp;_=<?=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 -->
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment