<?php class SearchPage extends Page { private $terms = array(); public function __construct() { parent::__construct(); unset($_GET['page']); if(isset($_GET['q']) && !$_GET['q']) { unset($_GET['q']); } $this->terms = $_GET; } private function do_search() { $out = array(); if(!$this->terms) { return $out; } foreach(array('user', 'product') as $type) { $result = $this->search($type, $this->translate_keys($this->terms)); if($result) { $out[$type] = $result; } } return $out; } private function translate_keys($terms) { $translated = array(); foreach($terms as $key => $value) { $newkey = $key; switch($key) { case 'q': $newkey = 'fritext'; break; case 'tillverkare': case 'märke': $newkey = 'brand'; break; case 'namn': $newkey = 'name'; break; case 'faktura': case 'fakturanummer': $newkey = 'invoice'; break; case 'serienummer': $newkey = 'serial'; break; case 'tagg': $newkey = 'tag'; break; case 'status': $value = $this->translate_values($value); break; } if(!array_key_exists($newkey, $translated)) { $translated[$newkey] = $value; } else { $temp = $translated[$newkey]; $translated[$newkey] = array_merge((array)$temp, (array)$value); } } return $translated; } private function translate_values($value) { if(!is_array($value)) { $value = array($value); } $translated = array(); foreach($value as $item) { $newitem = $item; switch($item) { case 'ute': case 'utlånad': case 'utlånat': case 'lånad': case 'lånat': $newitem = 'on_loan'; break; case 'inne': case 'ledig': case 'ledigt': case 'tillgänglig': case 'tillgängligt': $newitem = 'available'; break; case 'sen': case 'sent': case 'försenad': case 'försenat': case 'överdraget': $newitem = 'overdue'; break; case 'skrotad': case 'skrotat': case 'slängd': case 'slängt': $newitem = 'discarded'; break; case 'lagning': case 'reparation': $newitem = 'service'; break; } $translated[] = $newitem; } return $translated; } private function search($type, $terms) { $items = get_items($type); $out = array(); foreach($items as $item) { if($item->matches($terms)) { $out[] = $item; } } return $out; } protected function render_body() { $terms = ''; foreach($this->terms as $key => $value) { if(!is_array($value)) { $terms .= replace(array('term' => ucfirst($key).": $value", 'key' => $key, 'value' => $value), $this->fragments['search_term']); } else { foreach($value as $item) { $terms .= replace(array('term' => ucfirst($key).": $item", 'key' => $key, 'value' => $item), $this->fragments['search_term']); } } } print(replace(array('terms' => $terms), $this->fragments['search_form'])); if($this->terms) { $hits = $this->do_search(); print(replace(array('title' => 'Sökresultat'), $this->fragments['title'])); $result = ''; if(isset($hits['user'])) { $result = replace(array('title' => 'Låntagare'), $this->fragments['subtitle']); $result .= $this->build_user_table($hits['user']); } if(isset($hits['product'])) { $result .= replace(array('title' => 'Artiklar'), $this->fragments['subtitle']); $result .= $this->build_product_table($hits['product']); } if(!$result) { $result = 'Inga träffar.'; } print($result); } } } ?>