/**
  * Handler for database and journal browse actions.
  *
  * @param string $type Browse type
  *
  * @return mixed
  */
 protected function browse($type)
 {
     $config = $this->getServiceLocator()->get('VuFind\\Config')->get('browse');
     if (!isset($config['General'][$type]) || !$config['General'][$type]) {
         throw new \Exception("Browse action {$type} is disabled");
     }
     if (!isset($config[$type])) {
         throw new \Exception("Missing configuration for browse action: {$type}");
     }
     // Preserve last result view
     $configLoader = $this->getServiceLocator()->get('VuFind\\Config');
     $options = new Options($configLoader);
     $lastView = $options->getLastView();
     try {
         $config = $config[$type];
         $query = $this->getRequest()->getQuery();
         $query->set('view', 'condensed');
         if (!$query->get('limit')) {
             $query->set('limit', $config['resultLimit'] ?: 100);
         }
         if (!$query->get('sort')) {
             $query->set('sort', $config['sort'] ?: 'title');
         }
         if (!$query->get('type')) {
             $query->set('type', $config['type'] ?: 'Title');
         }
         $queryType = $query->get('type');
         $query->set('hiddenFilters', $config['filter']->toArray() ?: []);
         $query->set('recommendOverride', ['side' => ["SideFacets:Browse{$type}:CheckboxFacets:facets-browse"]]);
         $view = $this->forwardTo('Search', 'Results');
         $view->overrideTitle = "browse_extended_{$type}";
         $type = strtolower($type);
         $view->browse = $type;
         $view->defaultBrowseHandler = $config['type'];
         $view->results->getParams()->setBrowseHandler($queryType);
         // Update last search URL
         $view->results->getParams()->getOptions()->setBrowseAction("browse-{$type}");
         $this->getSearchMemory()->forgetSearch();
         $this->rememberSearch($view->results);
         $view->results->getParams()->getQuery()->setHandler($queryType);
         // Restore last result view
         $view->results->getOptions()->rememberLastView($lastView);
         return $view;
     } catch (\Exception $e) {
         $options->rememberLastView($lastView);
     }
 }