* @return mixed * @throws ServiceNotFoundException if unable to resolve the service. * @throws ServiceNotCreatedException if an exception is raised when * creating a service. * @throws ContainerException if any other error occurs */ private function doCreate($resolvedName, array $options = null) { try { if (! isset($this->delegators[$resolvedName])) { // Let's create the service by fetching the factory $factory = $this->getFactory($resolvedName); $object = $factory($this->creationContext, $resolvedName, $options); } else { $object = $this->createDelegatorFromName($resolvedName, $options); } } catch (ContainerException $exception) { throw $exception; } catch (Exception $exception) { throw new ServiceNotCreatedException(sprintf( 'Service with name "%s" could not be created. Reason: %s', $resolvedName, $exception->getMessage() ), (int) $exception->getCode(), $exception); } foreach ($this->initializers as $initializer) { $initializer($this->creationContext, $object); } return $object; } /** * Create the lazy services delegator factory. * * Creates the lazy services delegator factory based on the lazy_services * configuration present. * * @return Proxy\LazyServiceFactory
/** * Set storage metadata * * Metadata is used to store information about the data being stored in the * object. Some example use cases include: * - Setting expiry data * - Maintaining access counts * - localizing session storage * - etc. * * @param string $key * @param mixed $value * @param bool $overwriteArray Whether to overwrite or merge array values; by default, merges * @return ArrayStorage * @throws Exception\RuntimeException */ public function setMetadata($key, $value, $overwriteArray = false) { if ($this->isImmutable()) { throw new Exception\RuntimeException( sprintf('Cannot set key "%s" as storage is marked isImmutable', $key) ); } if (! isset($_SESSION['__ZF']) || ! is_array($_SESSION['__ZF'])) { $_SESSION['__ZF'] = []; } if (isset($_SESSION['__ZF'][$key]) && is_array($value)) { if ($overwriteArray) { $_SESSION['__ZF'][$key] = $value; } else { $_SESSION['__ZF'][$key] = array_replace_recursive($_SESSION['__ZF'][$key], $value); } } else { if ((null === $value) && isset($_SESSION['__ZF'][$key])) { $array = $_SESSION['__ZF']; unset($array[$key]); $_SESSION['__ZF'] = $array; unset($array); } elseif (null !== $value) {
/** * Retrieve the request access time * * @return float */ public function getRequestAccessTime() { return $this->getMetadata('_REQUEST_ACCESS_TIME'); } /** * Set the request access time * * @param float $time * @return ArrayStorage */ protected function setRequestAccessTime($time) { $this->setMetadata('_REQUEST_ACCESS_TIME', $time); return $this; } /** * Cast the object to an array * * @param bool $metaData Whether to include metadata * @return array */ public function toArray($metaData = false) { if (isset($_SESSION)) { $values = $_SESSION; } else { $values = []; } if ($metaData) { return $values;
} /** * Initialize Storage * * @param array $input * @return void */ public function init($input = null) { if ((null === $input) && isset($_SESSION)) { $input = $_SESSION; if (is_object($input) && ! $_SESSION instanceof \ArrayObject) { $input = (array) $input; } } elseif (null === $input) { $input = []; } $_SESSION = $input; $this->setRequestAccessTime(microtime(true)); } /** * Get Offset * * @param mixed $key * @return mixed */ public function __get($key) { return $this->offsetGet($key); } /** * Set Offset * * @param mixed $key * @param mixed $value * @return void */
/** * Session storage in $_SESSION * * Replaces the $_SESSION superglobal with an ArrayObject that allows for * property access, metadata storage, locking, and immutability. */ abstract class AbstractSessionArrayStorage implements IteratorAggregate, StorageInterface, StorageInitializationInterface { /** * Constructor * * @param array|null $input */ public function __construct($input = null) { // this is here for B.C. $this->init($input); } /** * Initialize Storage * * @param array $input * @return void */ public function init($input = null) { if ((null === $input) && isset($_SESSION)) { $input = $_SESSION; if (is_object($input) && ! $_SESSION instanceof \ArrayObject) { $input = (array) $input; } } elseif (null === $input) { $input = []; } $_SESSION = $input; $this->setRequestAccessTime(microtime(true));
throw new Exception\RuntimeException(sprintf( 'Default config class %s is invalid; must implement %s\Config\ConfigInterface', $this->defaultConfigClass, __NAMESPACE__ )); } } $this->config = $config; // init storage if ($storage === null) { if (! class_exists($this->defaultStorageClass)) { throw new Exception\RuntimeException(sprintf( 'Unable to locate storage class "%s"; class does not exist', $this->defaultStorageClass )); } $storage = new $this->defaultStorageClass(); if (! $storage instanceof Storage) { throw new Exception\RuntimeException(sprintf( 'Default storage class %s is invalid; must implement %s\Storage\StorageInterface', $this->defaultConfigClass, __NAMESPACE__ )); } } $this->storage = $storage; // save handler if ($saveHandler !== null) { $this->saveHandler = $saveHandler; } $this->validators = $validators; }
* @param Config\ConfigInterface|null $config * @param Storage\StorageInterface|null $storage * @param SaveHandler\SaveHandlerInterface|null $saveHandler * @param array $validators * @param array $options * @throws Exception\RuntimeException */ public function __construct( Config\ConfigInterface $config = null, Storage\StorageInterface $storage = null, SaveHandler\SaveHandlerInterface $saveHandler = null, array $validators = [], array $options = [] ) { $options = array_merge($this->defaultOptions, $options); if ($options['attach_default_validators']) { $validators = array_merge($this->defaultValidators, $validators); } parent::__construct($config, $storage, $saveHandler, $validators); register_shutdown_function([$this, 'writeClose']); } /** * Does a session exist and is it currently active? * * @return bool */ public function sessionExists() { if (session_status() == PHP_SESSION_ACTIVE) { return true; } $sid = defined('SID') ? constant('SID') : false; if ($sid !== false && $this->getId()) { return true; } if (headers_sent()) { return true; }
class LangCodeConverter { static $iso639_1_codes = []; static $iso639_2_codes = []; protected $sessionManager; protected $session; /** * Loads language file content. * * @param \Zend\Session\Container $session * @param string $iso639_1_property Language property file in import/translation_maps * @param string $iso639_2_property Language property file in import/translation_maps * * @return array */ public function __construct($session = null, $iso639_1_property, $iso639_2_property) { if (($session == null) && ($this->session == null)) { $this->sessionManager = new \Zend\Session\SessionManager(); $this->session = new \Zend\Session\Container( 'LangCodeConverter', $this->sessionManager ); } else if ($session != null) { $this->session = $session; } $iso639_1_fpath = ConfigLocator::getConfigPath($iso639_1_property, 'import/translation_maps'); $iso639_2_fpath = ConfigLocator::getConfigPath($iso639_2_property, 'import/translation_maps'); if (((!isset($this->session->iso639_1_codes)) || ($this->session->iso639_1_codes_mtime != filemtime($iso639_1_fpath))) && ((!isset(static::$iso639_1_codes)) || (count(static::$iso639_1_codes) < 1))) { // parse_ini_file(..., false, INI_SCANNER_RAW): "syntax error, unexpected BOOL_FALSE in ..." static::$iso639_1_codes = static::loadIni($iso639_1_fpath); $this->session->iso639_1_codes = static::$iso639_1_codes; $this->session->iso639_1_codes_mtime = filemtime($iso639_1_fpath); } else if (isset($this->session->iso639_1_codes)) { static::$iso639_1_codes = $this->session->iso639_1_codes;
if (isset($searchSettings->General->default_sort)) { $this->defaultSort = $searchSettings->General->default_sort; } if (isset($searchSettings->DefaultSortingByType) && count($searchSettings->DefaultSortingByType) > 0 ) { foreach ($searchSettings->DefaultSortingByType as $key => $val) { $this->defaultSortByHandler[$key] = $val; } } foreach ($searchSettings->Resource_Types as $key => $value) $this->resource_types[$key] = $value; foreach ($searchSettings->Domain as $key => $value) $this->domains[$key] = $value; foreach ($searchSettings->Availability as $key => $value) $this->availability[$key] = $value; if ($searchSettings->General->lang_iso639_2) { $lcc = new \VuFind\I18n\LangCodeConverter(null, $searchSettings->General->lang_iso639_1, $searchSettings->General->lang_iso639_2); $this->languages = $lcc->getLangCodes(); } } /** * Return the IDs and names of availability statuses. * * @param string $key ex.: 'open_access' => 'open_access' * @return array */ public function getAvailability($key = null, $value = null) { if ($value != null) { $key = array_search($value, $this->availability); } return isset($key) && ($key != false) ? (isset($this->availability[$key]) ? [$key => $this->availability[$key]] : null) : $this->availability; }
{ /** * Create an object * * @param ContainerInterface $container Service manager * @param string $requestedName Service being created * @param null|array $options Extra options (optional) * * @return object * * @throws ServiceNotFoundException if unable to resolve the service. * @throws ServiceNotCreatedException if an exception is raised when * creating a service. * @throws ContainerException if any other error occurs */ public function __invoke(ContainerInterface $container, $requestedName, array $options = null ) { return new $requestedName( $container->get(\VuFind\Config\PluginManager::class), ...($options ?: []) ); } }
/** * Create a new instance with an already resolved name * * This is a highly performance sensitive method, do not modify if you have not benchmarked it carefully * * @param string $resolvedName * @param null|array $options * @return mixed * @throws ServiceNotFoundException if unable to resolve the service. * @throws ServiceNotCreatedException if an exception is raised when * creating a service. * @throws ContainerException if any other error occurs */ private function doCreate($resolvedName, array $options = null) { try { if (! isset($this->delegators[$resolvedName])) { // Let's create the service by fetching the factory $factory = $this->getFactory($resolvedName); $object = $factory($this->creationContext, $resolvedName, $options); } else { $object = $this->createDelegatorFromName($resolvedName, $options); } } catch (ContainerException $exception) { throw $exception; } catch (Exception $exception) { throw new ServiceNotCreatedException(sprintf( 'Service with name "%s" could not be created. Reason: %s', $resolvedName, $exception->getMessage() ), (int) $exception->getCode(), $exception); } foreach ($this->initializers as $initializer) { $initializer($this->creationContext, $object); } return $object; }
// is the fastest method). if (isset($this->services[$requestedName])) { return $this->services[$requestedName]; } $name = isset($this->resolvedAliases[$name]) ? $this->resolvedAliases[$name] : $name; // Next, if the alias should be shared, and we have cached the resolved // service, use it. if ($requestedName !== $name && (! isset($this->shared[$requestedName]) || $this->shared[$requestedName]) && isset($this->services[$name]) ) { $this->services[$requestedName] = $this->services[$name]; return $this->services[$name]; } // At this point, we need to create the instance; we use the resolved // name for that. $object = $this->doCreate($name); // Cache it for later, if it is supposed to be shared. if (($this->sharedByDefault && ! isset($this->shared[$name])) || (isset($this->shared[$name]) && $this->shared[$name]) ) { $this->services[$name] = $object; } // Also do so for aliases; this allows sharing based on service name used. if ($requestedName !== $name && (($this->sharedByDefault && ! isset($this->shared[$requestedName])) || (isset($this->shared[$requestedName]) && $this->shared[$requestedName])) ) { $this->services[$requestedName] = $object; } return $object; } /**
* a service definition for the instance, and the service is not * auto-invokable. * @throws InvalidServiceException if the plugin created is invalid for the * plugin context. */ public function get($name, array $options = null) { if (! $this->has($name)) { if (! $this->autoAddInvokableClass || ! class_exists($name)) { throw new Exception\ServiceNotFoundException(sprintf( 'A plugin by the name "%s" was not found in the plugin manager %s', $name, get_class($this) )); } $this->setFactory($name, Factory\InvokableFactory::class); } $instance = empty($options) ? parent::get($name) : $this->build($name, $options); $this->validate($instance); return $instance; } /** * {@inheritDoc} */ public function validate($instance) { if (method_exists($this, 'validatePlugin')) { trigger_error(sprintf( '%s::validatePlugin() has been deprecated as of 3.0; please define validate() instead', get_class($this) ), E_USER_DEPRECATED); $this->validatePlugin($instance); return; } if (empty($this->instanceOf) || $instance instanceof $this->instanceOf) { return;
* * @category VuFind * @package ServiceManager * @author Demian Katz <demian.katz@villanova.edu> * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License * @link https://vufind.org/wiki/development Wiki */ trait LowerCaseServiceNameTrait { /** * Retrieve a plugin * * @param string $name Name of plugin * @param null|array $options Options to use when creating the instance. * * @return mixed */ public function get($name, array $options = null) { return parent::get($this->getNormalizedServiceName($name), $options); } /** * Returns true if the container can return an entry for the given identifier. * Returns false otherwise. * * @param string $id Identifier of the entry to look for. * * @return bool */ public function has($id) { return parent::has($this->getNormalizedServiceName($id)); } /** * Hack for backward compatibility with services defined under * ServiceManager v2, when service names were case-insensitive. * TODO: set up aliases and/or normalize code to eliminate the need for this. *
* @param string $activeHandler Active search handler * * @return array */ protected function getCombinedHandlers($activeSearchClass, $activeHandler) { // Build settings: $handlers = []; $selectedFound = false; $backupSelectedIndex = false; $addedBrowseHandlers = false; $settings = $this->getCombinedHandlerConfig($activeSearchClass); $typeCount = count($settings['type']); for ($i = 0; $i < $typeCount; $i++) { $type = $settings['type'][$i]; $target = $settings['target'][$i]; $label = $settings['label'][$i]; if ($type == 'VuFind') { $options = $this->optionsManager->get($target); $j = 0; $basic = $options->getBasicHandlers(); if (empty($basic)) { $basic = ['' => '']; } foreach ($basic as $searchVal => $searchDesc) { $j++; $selected = $target == $activeSearchClass && $activeHandler == $searchVal; if ($selected) { $selectedFound = true; } elseif ($backupSelectedIndex === false && $target == $activeSearchClass ) { $backupSelectedIndex = count($handlers); } // Depending on whether or not the current section has a label, // we'll either want to override the first label and indent // subsequent ones, or else use all default labels without // any indentation.
? $this->placeholders['default'] : null); } return null; } /** * Get an array of information on search handlers for use in generating a * drop-down or hidden field. Returns an array of arrays with 'value', 'label', * 'indent' and 'selected' keys. * * @param string $activeSearchClass Active search class ID * @param string $activeHandler Active search handler * * @return array */ public function getHandlers($activeSearchClass, $activeHandler) { return $this->combinedHandlersActive() ? $this->getCombinedHandlers($activeSearchClass, $activeHandler) : $this->getBasicHandlers($activeSearchClass, $activeHandler); } /** * Get number of active filters * * @param array $checkboxFilters Checkbox filters * @param array $filterList Other filters * * @return int */ public function getFilterCount($checkboxFilters, $filterList) { $result = 0; foreach ($checkboxFilters as $filter) { if ($filter['selected']) { ++$result; } } foreach ($filterList as $filter) {
<?php // Set default value if necessary: if (!isset($this->searchClassId)) { $config = $this->config()->get('config'); $this->searchClassId = $config->Site->defaultSearchBackend ?? 'Solr'; } // Load search actions and settings (if any): $options = $this->searchOptions($this->searchClassId); $handlers = $this->searchbox()->getHandlers( $this->searchClassId, $this->searchIndex ?? null ); $handlerCount = count($handlers); $basicSearch = $this->searchbox()->combinedHandlersActive() ? 'combined-searchbox' : $options->getSearchAction(); $searchHome = $options->getSearchHomeAction(); $advSearch = $options->getAdvancedSearchAction(); $lastSort = $this->searchMemory()->getLastSort($this->searchClassId); $lastLimit = $this->searchMemory()->getLastLimit($this->searchClassId); $ignoreHiddenFilterMemory = $this->ignoreHiddenFilterMemory ?? false; $ignoreHiddenFiltersInRequest = $this->ignoreHiddenFiltersInRequest ?? false; $hiddenFilters = $this->searchTabs()->getHiddenFilters($this->searchClassId, $ignoreHiddenFilterMemory, $ignoreHiddenFiltersInRequest); if (empty($hiddenFilters) && !$ignoreHiddenFilterMemory) { $hiddenFilters = $this->searchMemory()->getLastHiddenFilters($this->searchClassId); if (empty($hiddenFilters)) { $hiddenFilters = $this->searchTabs()->getHiddenFilters($this->searchClassId); } } $hiddenFilterParams = $this->searchTabs()->getCurrentHiddenFilterParams($this->searchClassId, $ignoreHiddenFilterMemory, '?'); if (!isset($this->filterList) || !isset($this->checkboxFilters)) { $params = $this->searchMemory()->getLastSearchParams($this->searchClassId); $filterList = $params->getFilterList(true); $checkboxFilters = $params->getCheckboxFacets(); } else { $filterList = is_array($this->filterList) ? $this->filterList : []; $checkboxFilters = is_array($this->checkboxFilters) ? $this->checkboxFilters : []; } $filterDetails = $this->searchbox()->getFilterDetails($filterList, $checkboxFilters); $showFilters = $filterDetails && (isset($results) || $options->getRetainFilterSetting()); ?>
$__vars = $this->vars()->getArrayCopy(); if (array_key_exists('this', $__vars)) { unset($__vars['this']); } extract($__vars); unset($__vars); // remove $__vars from local scope $this->__content = ''; while ($this->__template = array_pop($this->__templates)) { $this->__file = $this->resolver($this->__template); if (! $this->__file) { throw new Exception\RuntimeException(sprintf( '%s: Unable to render template "%s"; resolver could not resolve to a file', __METHOD__, $this->__template )); } try { ob_start(); $includeReturn = include $this->__file; $this->__content = ob_get_clean(); } catch (\Throwable $ex) { ob_end_clean(); throw $ex; } catch (\Exception $ex) { // @TODO clean up once PHP 7 requirement is enforced ob_end_clean(); throw $ex; } if ($includeReturn === false && empty($this->__content)) { throw new Exception\UnexpectedValueException(sprintf( '%s: Unable to render template "%s"; file include failed', __METHOD__, $this->__file )); } } $this->setVars(array_pop($this->__varsCache)); if ($this->__filterChain instanceof FilterChain) {
$translations = $this->jsTranslations()->getJSON(); $dsb = DEFAULT_SEARCH_BACKEND; $setupJS = <<<JS VuFind.path = '{$root}'; VuFind.defaultSearchBackend = '{$dsb}'; VuFind.addTranslations({$translations}); JS; $this->headScript()->appendScript($setupJS); ?> <?=$this->headScript()?> </head> <body class="template-dir-<?=$this->templateDir?> template-name-<?=$this->templateName?> <?=$this->layoutClass('offcanvas-row')?><?php if ($this->layout()->rtl): ?> rtl<?php endif; ?>"> <?php // Set up the search box -- there are three possible cases: // 1. No search box was set; we should default to the normal box // 2. It was set to false; we should display nothing // 3. It is set to a custom string; we should display the provided version // Set up default search box if no data was provided from the template; // this covers case 1. Cases 2 and 3 are then covered by logic below. if (!isset($this->layout()->searchbox)) { $this->layout()->searchbox = $this->render('search/searchbox.phtml'); } ?> <header class="hidden-print"> <?php if (isset($this->layout()->srmessage)): // message for benefit of screen-reader users ?> <span class="sr-only" role="heading" aria-level="1"><?=$this->layout()->srmessage ?></span> <?php endif; ?> <a class="sr-only" href="#content"><?=$this->transEsc('Skip to content') ?></a> <?=$this->render('header.phtml')?> </header> <nav class="breadcrumbs" aria-label="<?=$this->transEsc('Breadcrumbs') ?>"> <div class="container"> <?php if((!isset($this->layout()->showBreadcrumbs) || $this->layout()->showBreadcrumbs == true) && !empty($this->layout()->breadcrumbs) && $this->layout()->breadcrumbs !== false ): ?> <ul class="breadcrumb hidden-print"> <?php if(is_array($this->layout()->breadcrumbs)): ?> <?php if(count($this->layout()->breadcrumbs) > 1): ?> <?=$this->render('breadcrumbs/multi.phtml', [ 'parents' => $this->layout()->breadcrumbs,
$__vars = $this->vars()->getArrayCopy(); if (array_key_exists('this', $__vars)) { unset($__vars['this']); } extract($__vars); unset($__vars); // remove $__vars from local scope $this->__content = ''; while ($this->__template = array_pop($this->__templates)) { $this->__file = $this->resolver($this->__template); if (! $this->__file) { throw new Exception\RuntimeException(sprintf( '%s: Unable to render template "%s"; resolver could not resolve to a file', __METHOD__, $this->__template )); } try { ob_start(); $includeReturn = include $this->__file; $this->__content = ob_get_clean(); } catch (\Throwable $ex) { ob_end_clean(); throw $ex; } catch (\Exception $ex) { // @TODO clean up once PHP 7 requirement is enforced ob_end_clean(); throw $ex; } if ($includeReturn === false && empty($this->__content)) { throw new Exception\UnexpectedValueException(sprintf( '%s: Unable to render template "%s"; file include failed', __METHOD__, $this->__file )); } } $this->setVars(array_pop($this->__varsCache)); if ($this->__filterChain instanceof FilterChain) {
// If EVENT_RENDERER or EVENT_RENDERER_POST changed the model, make sure // we use this new model instead of the current $model $model = $event->getModel(); // If we have children, render them first, but only if: // a) the renderer does not implement TreeRendererInterface, or // b) it does, but canRenderTrees() returns false if ($model->hasChildren() && (! $renderer instanceof TreeRendererInterface || ! $renderer->canRenderTrees()) ) { $this->renderChildren($model); } // Reset the model, in case it has changed, and set the renderer $event->setModel($model); $event->setRenderer($renderer); $rendered = $renderer->render($model); // If this is a child model, return the rendered content; do not // invoke the response strategy. $options = $model->getOptions(); if (array_key_exists('has_parent', $options) && $options['has_parent']) { return $rendered; } $event->setResult($rendered); $event->setName(ViewEvent::EVENT_RESPONSE); $events->triggerEvent($event); } /** * Loop through children, rendering each * * @param Model $model * @throws Exception\DomainException * @return void
if ($result instanceof Response) { return $result; } // Martial arguments $request = $e->getRequest(); $response = $e->getResponse(); $viewModel = $e->getViewModel(); if (! $viewModel instanceof ViewModel) { return; } $view = $this->view; $view->setRequest($request); $view->setResponse($response); $caughtException = null; try { $view->render($viewModel); } catch (\Throwable $ex) { $caughtException = $ex; } catch (\Exception $ex) { // @TODO clean up once PHP 7 requirement is enforced $caughtException = $ex; } if ($caughtException !== null) { if ($e->getName() === MvcEvent::EVENT_RENDER_ERROR) { throw $caughtException; } $application = $e->getApplication(); $events = $application->getEventManager(); $e->setError(Application::ERROR_EXCEPTION); $e->setParam('exception', $caughtException); $e->setName(MvcEvent::EVENT_RENDER_ERROR); $events->triggerEvent($e); }
} if ($this->sharedManager) { foreach ($this->sharedManager->getListeners($this->identifiers, $name) as $priority => $listeners) { $listOfListenersByPriority[$priority][] = $listeners; } } // Sort by priority in reverse order krsort($listOfListenersByPriority); // Initial value of stop propagation flag should be false $event->stopPropagation(false); // Execute listeners $responses = new ResponseCollection(); foreach ($listOfListenersByPriority as $listOfListeners) { foreach ($listOfListeners as $listeners) { foreach ($listeners as $listener) { $response = $listener($event); $responses->push($response); // If the event was asked to stop propagating, do so if ($event->propagationIsStopped()) { $responses->setStopped(true); return $responses; } // If the result causes our validation callback to return true, // stop propagation if ($callback && $callback($response)) { $responses->setStopped(true); return $responses; } } } } return $responses; }
$event = clone $this->eventPrototype; $event->setName($eventName); if ($target !== null) { $event->setTarget($target); } if ($argv) { $event->setParams($argv); } return $this->triggerListeners($event, $callback); } /** * @inheritDoc */ public function triggerEvent(EventInterface $event) { return $this->triggerListeners($event); } /** * @inheritDoc */ public function triggerEventUntil(callable $callback, EventInterface $event) { return $this->triggerListeners($event, $callback); } /** * @inheritDoc */ public function attach($eventName, callable $listener, $priority = 1) { if (! is_string($eventName)) { throw new Exception\InvalidArgumentException(sprintf( '%s expects a string for the event; received %s', __METHOD__, (is_object($eventName) ? get_class($eventName) : gettype($eventName))
return $this->completeRequest($event); } /** * Complete the request * * Triggers "render" and "finish" events, and returns response from * event object. * * @param MvcEvent $event * @return Application */ protected function completeRequest(MvcEvent $event) { $events = $this->events; $event->setTarget($this); $event->setName(MvcEvent::EVENT_RENDER); $event->stopPropagation(false); // Clear before triggering $events->triggerEvent($event); $event->setName(MvcEvent::EVENT_FINISH); $event->stopPropagation(false); // Clear before triggering $events->triggerEvent($event); return $this; } }
// Trigger dispatch event $event->setName(MvcEvent::EVENT_DISPATCH); $event->stopPropagation(false); // Clear before triggering $result = $events->triggerEventUntil($shortCircuit, $event); // Complete response $response = $result->last(); if ($response instanceof ResponseInterface) { $event->setName(MvcEvent::EVENT_FINISH); $event->setTarget($this); $event->setResponse($response); $event->stopPropagation(false); // Clear before triggering $events->triggerEvent($event); $this->response = $response; return $this; } $response = $this->response; $event->setResponse($response); return $this->completeRequest($event); } /** * Complete the request * * Triggers "render" and "finish" events, and returns response from * event object. * * @param MvcEvent $event * @return Application */ protected function completeRequest(MvcEvent $event) { $events = $this->events; $event->setTarget($this); $event->setName(MvcEvent::EVENT_RENDER); $event->stopPropagation(false); // Clear before triggering $events->triggerEvent($event);
// Ensure vendor/ is on include_path; some PEAR components may not load correctly // otherwise (i.e. File_MARC may cause a "Cannot redeclare class" error by pulling // from the shared PEAR directory instead of the local copy): $pathParts = []; $pathParts[] = APPLICATION_PATH . '/vendor'; $pathParts[] = get_include_path(); set_include_path(implode(PATH_SEPARATOR, $pathParts)); // Composer autoloading if (file_exists('vendor/autoload.php')) { $loader = include 'vendor/autoload.php'; } if (!class_exists('Zend\Loader\AutoloaderFactory')) { throw new RuntimeException('Unable to load Zend Framework autoloader.'); } // Run the application! Zend\Mvc\Application::init(require 'config/application.config.php')->run();
Key | Value |
filter | Array ( [0] => topic_facet:"Human rights" ) |
type | AllFields |
facet | topic_facet |
facetop | AND |
facetexclude | 0 |
Key | Value |
__ZF | Array ( [_REQUEST_ACCESS_TIME] => 1711645170,2445 [_VALID] => Array ( [Zend\Session\Validator\Id] => ukf7f52egtrjm0la0quv1hi5mi ) ) |
SessionState | Zend\Stdlib\ArrayObject Object ( [storage:protected] => Array ( [cookiePath] => / ) [flag:protected] => 2 [iteratorClass:protected] => ArrayIterator [protectedProperties:protected] => Array ( [0] => storage [1] => flag [2] => iteratorClass [3] => protectedProperties ) ) |
_IMMUTABLE | 1 |
Key | Value |
REDIRECT_SCRIPT_URL | /Search/FacetList |
REDIRECT_SCRIPT_URI | https://opac.elte.hu/Search/FacetList |
REDIRECT_VUFIND_ENV | development |
REDIRECT_VUFIND_LOCAL_DIR | /opt/vufind-instances/eles/local |
REDIRECT_VUFIND_CACHE_DIR | /opt/vufind-instances/eles/local/cache |
REDIRECT_VUFIND_APPLICATION_PATH | /opt/vufind-instances/eles |
REDIRECT_HTTPS | on |
REDIRECT_SSL_TLS_SNI | opac.elte.hu |
REDIRECT_STATUS | 200 |
SCRIPT_URL | /Search/FacetList |
SCRIPT_URI | https://opac.elte.hu/Search/FacetList |
VUFIND_ENV | development |
VUFIND_LOCAL_DIR | /opt/vufind-instances/eles/local |
VUFIND_CACHE_DIR | /opt/vufind-instances/eles/local/cache |
VUFIND_APPLICATION_PATH | /opt/vufind-instances/eles |
HTTPS | on |
SSL_TLS_SNI | opac.elte.hu |
HTTP_ACCEPT | */* |
HTTP_USER_AGENT | claudebot |
HTTP_HOST | opac.elte.hu |
PATH | /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin |
SERVER_SIGNATURE | <address>Apache/2.4.38 (Debian) Server at opac.elte.hu Port 443</address> |
SERVER_SOFTWARE | Apache/2.4.38 (Debian) |
SERVER_NAME | opac.elte.hu |
SERVER_ADDR | 157.181.151.97 |
SERVER_PORT | 443 |
REMOTE_ADDR | 18.209.63.120 |
DOCUMENT_ROOT | /opt/vufind-instances/eles/public |
REQUEST_SCHEME | https |
CONTEXT_PREFIX | / |
CONTEXT_DOCUMENT_ROOT | /opt/vufind-instances/eles/public/ |
SERVER_ADMIN | eltefind@lib.elte.hu |
SCRIPT_FILENAME | /opt/vufind-instances/eles/public/index.php |
REMOTE_PORT | 60258 |
REDIRECT_URL | /Search/FacetList |
REDIRECT_QUERY_STRING | filter%5B%5D=topic_facet%3A%22Human+rights%22&type=AllFields&facet=topic_facet&facetop=AND&facetexclude=0 |
GATEWAY_INTERFACE | CGI/1.1 |
SERVER_PROTOCOL | HTTP/1.1 |
REQUEST_METHOD | GET |
QUERY_STRING | filter%5B%5D=topic_facet%3A%22Human+rights%22&type=AllFields&facet=topic_facet&facetop=AND&facetexclude=0 |
REQUEST_URI | /Search/FacetList?filter%5B%5D=topic_facet%3A%22Human+rights%22&type=AllFields&facet=topic_facet&facetop=AND&facetexclude=0 |
SCRIPT_NAME | /index.php |
PHP_SELF | /index.php |
REQUEST_TIME_FLOAT | 1711645170,2125 |
REQUEST_TIME | 1711645170 |