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;
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' => [
......
......@@ -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
......@@ -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
......@@ -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
<!-- 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