Exemplo n.º 1
0
 public function hitsAction()
 {
     $total = $this->catalog->getTotal($this->query);
     // format it
     $total = Parser::number_format($total);
     // and tell the browser too
     $this->response->setVariable('hits', $total);
     // view template
     $this->response->setView('search/hits.xsl');
     return $this->response;
 }
Exemplo n.º 2
0
 public function hitsAction()
 {
     // create an identifier for this search
     $id = $this->helper->getQueryID();
     // see if one exists in session already
     $total = $this->request->getSessionData($id);
     // nope
     if ($total == null) {
         // so do a search (just the hit count)
         // and cache the hit total
         $total = $this->engine->getHits($this->query);
         $this->request->setSessionData($id, (string) $total);
     }
     // format it
     $total = Parser::number_format($total);
     // and tell the browser too
     $this->data["hits"] = $total;
     return $this->data;
 }
Exemplo n.º 3
0
 /**
  * Add a facet
  * 
  * @param Facet $facets
  */
 public function addFacet(Facet $facet)
 {
     $facet->count_display = Parser::number_format($facet->count);
     array_push($this->facets, $facet);
 }
Exemplo n.º 4
0
 /**
  * Parse facets out of the response
  *
  * @param DOMDocument $dom
  * @return Facets
  */
 protected function extractFacets(\DOMDocument $dom)
 {
     $facets = new Search\Facets();
     $xml = simplexml_import_dom($dom->documentElement);
     // for now just the database hit counts
     $databases = $xml->Statistics->Statistic;
     if (count($databases) > 1) {
         $databases_facet_name = $this->config->getConfig("DATABASES_FACET_NAME", false, "Databases");
         $group = new Search\FacetGroup("databases");
         $group->name = "databases";
         $group->public = $databases_facet_name;
         $databases_array = array();
         foreach ($databases as $database) {
             $database_id = (string) $database->Database;
             $database_hits = (int) $database->Hits;
             // nix the empty ones
             if ($database_hits == 0) {
                 continue;
             }
             $databases_array[$database_id] = $database_hits;
         }
         // get 'em in reverse order
         arsort($databases_array);
         foreach ($databases_array as $database_id => $database_hits) {
             $facet = new Search\Facet();
             $facet->name = $this->config->getDatabaseName($database_id);
             $facet->count = Parser::number_format($database_hits);
             $facet->key = $database_id;
             $group->addFacet($facet);
         }
         $facets->addGroup($group);
     }
     return $facets;
 }
Exemplo n.º 5
0
 /**
  * Add links to the query object limits
  * 
  * @param Query $query
  */
 public function addQueryLinks(Query $query)
 {
     // we have to pass in the query object here rather than take
     // the property above because adding the links doesn't seem
     // to reflect back in the main object, even though they should
     // be references, maybe because limit objects are in an array?
     // search option links
     $search = $this->registry->getConfig('search');
     if ($search instanceof \SimpleXMLElement) {
         $controller_map = $this->request->getControllerMap();
         foreach ($search->xpath("//option") as $option) {
             // format the number
             // is this the current tab?
             if ($controller_map->getControllerName() == (string) $option["id"] && ($this->request->getParam('source') == (string) $option["source"] || (string) $option["source"] == '')) {
                 $option->addAttribute('current', "1");
             }
             // url
             $params = $query->extractSearchParams();
             $params['controller'] = $controller_map->getUrlAlias((string) $option["id"]);
             $params['action'] = "results";
             $params['source'] = (string) $option["source"];
             $url = $this->request->url_for($params);
             $option->addAttribute('url', $url);
             // cached search hit count?
             foreach ($this->request->getAllSessionData() as $session_id => $session_value) {
                 // does this value in the cache have the save id as our tab?
                 $id = str_replace("_" . $query->getHash(), "", $session_id);
                 if ($id == (string) $option["id"]) {
                     // yup, so add it
                     $option->addAttribute('hits', Parser::number_format($session_value));
                 }
             }
         }
         $this->registry->setConfig('search', $search);
     }
     // links to remove facets
     foreach ($query->getLimits() as $limit) {
         $params = $this->currentParams();
         $params = Parser::removeFromArray($params, $limit->field, $limit->value);
         $limit->remove_url = $this->request->url_for($params);
     }
 }
Exemplo n.º 6
0
 /**
  * Add links to the query object limits
  * 
  * @param Query $query
  */
 public function addQueryLinks(Query $query)
 {
     // we have to pass in the query object here rather than take
     // the property above because adding the links doesn't seem
     // to reflect back in the main object, even though they should
     // be references, maybe because limit objects are in an array?
     // search option links
     $search = $this->registry->getConfig('search');
     if ($search instanceof \SimpleXMLElement) {
         $controller_map = $this->request->getControllerMap();
         foreach ($search->xpath("//option") as $option) {
             $id = (string) $option["id"];
             if ((string) $option["source"] != '') {
                 $id .= '_' . (string) $option["source"];
             }
             $id .= '_' . $this->query->getHash();
             // is this the current tab?
             if ($controller_map->getControllerName() == (string) $option["id"] && ($this->request->getParam('source') == (string) $option["source"] || (string) $option["source"] == '')) {
                 // mark as current
                 $option->addAttribute('current', "1");
                 // keep the current url, too, minus the start #
                 $params = $this->request->getParams();
                 $params['start'] = null;
                 $this->request->setSessionData("url-{$id}", $this->request->url_for($params));
             }
             // url
             $url = $this->request->getSessionData("url-{$id}");
             // already cached, so use it
             if ($url == null) {
                 $params = $query->extractSearchParams();
                 $params['controller'] = $controller_map->getUrlAlias((string) $option["id"]);
                 $params['action'] = "results";
                 $params['source'] = (string) $option["source"];
                 $params['sort'] = $this->request->getParam('sort');
                 $url = $this->request->url_for($params);
             }
             $option->addAttribute('url', $url);
             // cached search hit count?
             $session_hits = $this->request->getSessionData($id);
             if ($session_hits != null) {
                 $option->addAttribute('hits', Parser::number_format($session_hits));
             }
         }
         $this->registry->setConfig('search', $search);
     }
     // links to remove facets
     foreach ($query->getLimits() as $limit) {
         $params = $this->currentParams();
         // urlencode here necessary to support the urlencode above on 'key' urls
         $params = Parser::removeFromArray($params, urlencode($limit->field), $limit->value);
         $limit->remove_url = $this->request->url_for($params);
     }
 }
Exemplo n.º 7
0
 /**
  * Add links to the query object limits
  * 
  * @param Query $query
  */
 public function addQueryLinks(Query $query)
 {
     // we have to pass in the query object here rather than take
     // the property above because adding the links doesn't seem
     // to reflect back in the main object, even though they should
     // be references, maybe because limit objects are in an array?
     // add current query to query object itself
     $params = $query->extractSearchParams();
     $params['controller'] = $this->request->getParam('controller');
     $params['action'] = 'search';
     $params['source'] = $this->request->getParam('source');
     $params['sort'] = $this->request->getParam('sort');
     // url
     $query->url = $this->request->url_for($params);
     // query only
     $query->url_query = Parser::removeLeft($query->url, '?');
     // advanced search
     $params['action'] = 'advanced';
     $query->url_advanced = $this->request->url_for($params);
     // search option links
     $search = $this->registry->getConfig('search');
     if ($search instanceof \SimpleXMLElement) {
         $controller_map = $this->request->getControllerMap();
         // combined results
         $combined = $controller_map->getUrlAlias('combined');
         $combined_id = $combined . '_' . $query->getHash();
         if ($this->request->getSessionData($combined_id) != null) {
             $params = $query->extractSearchParams();
             $params['controller'] = $combined;
             $params['action'] = "results";
             $search->combined_url = $this->request->url_for($params);
         }
         // individual search options
         foreach ($search->xpath("//option") as $option) {
             $id = (string) $option["id"];
             if ((string) $option["source"] != '') {
                 $id .= '_' . (string) $option["source"];
             }
             $id .= '_' . $this->query->getHash();
             // format the number
             // is this the current tab?
             if ($this->request->getControllerName() == (string) $option["id"] && ($this->request->getParam('source') == (string) $option["source"] || (string) $option["source"] == '')) {
                 // mark as current
                 $option->addAttribute('current', "1");
             }
             // create url based on the search terms only!
             $params = $query->extractSearchParams();
             $params['controller'] = $controller_map->getUrlAlias((string) $option["id"]);
             $params['action'] = "results";
             $params['source'] = (string) $option["source"];
             $params['sort'] = $this->request->getParam('sort');
             // results url
             $url = $this->request->url_for($params);
             $option->addAttribute('url', $url);
             // hits url
             $params['action'] = 'hits';
             $url = $this->request->url_for($params);
             $option->addAttribute('url_hits', $url);
             // cached search hit count?
             foreach ($this->request->getAllSessionData() as $session_id => $session_value) {
                 // does this value in the cache have the save id as our tab?
                 $id = str_replace("_" . $query->getHash(), "", $session_id);
                 if ($id == (string) $option["id"]) {
                     // yup, so add it
                     $option->addAttribute('hits', Parser::number_format($session_value));
                 }
             }
         }
         // header('Content-type: text/xml'); echo $search->asXML(); exit;
         $this->registry->setConfig('search', $search);
     }
     // links to remove facets
     foreach ($query->getLimits() as $limit) {
         $params = $this->currentParams();
         $value = $limit->value;
         if ($limit->display != "") {
             $value = $limit->display;
         }
         // urlencode here necessary to support the urlencode above on 'key' urls
         $params = Parser::removeFromArray($params, urlencode($limit->param), $value);
         $limit->remove_url = $this->request->url_for($params);
     }
 }