1: <?php
2:
3:
4: namespace app\controllers;
5: use \mako\http\routing\Controller;
6: use \mako\syringe\ContainerAwareTrait;
7: use \mako\auth\Gatekeeper;
8:
9:
10:
11:
12:
13:
14: 15: 16: 17: 18:
19:
20: class SearchController extends Controller
21: {
22: use ContainerAwareTrait;
23: const DAURL = "http://digitalarkivet.arkivverket.no/api/sok_avansert/json";
24:
25: protected $privateFieldsMapping = array(
26: "name" => "fornavn",
27: "surname" => "etternavn",
28: "kjonn" =>"kjonn",
29: "birthyear" =>"fodselsaar",
30: "birthdate" =>"fodselsdato",
31: "birthplace" =>"fodested",
32: "place" =>"bosted",
33: "job" =>"jobb"
34: );
35:
36:
37: private function parseSearchRequest($request)
38: {
39: if ($request != NULL)
40: {
41: $searchparam = array();
42: $kommuner = array();
43: $roller = array();
44: $hendelser = array();
45: $avishendelser = array();
46: $allchecked = false;
47: foreach ($request as $key=>$value)
48: {
49: if ( strlen($key) == 5 && substr ($key, 0, 1)== 'k' && $key !='kjonn')
50: {
51: $kommuner[] = substr ($key, 1, 4);
52: }
53: if ($key == 'rolle')
54: {
55: foreach ($request['rolle'] as $rolle)
56: {
57: $roller[] = trim($rolle);
58: }
59: }
60: switch ($key) {
61: case "kjonn":
62: $searchparam["kjonn"] = trim($request["kjonn"]);
63: break;
64: case "birthyear":
65: $searchparam["birthyear"] = trim($request["birthyear"]);
66: break;
67: case "birthdate":
68: $searchparam["birthdate"] = trim($request["birthdate"]);
69: break;
70: case "birthplace":
71: $searchparam["birthplace"] = trim($request["birthplace"]);
72: break;
73: case "place":
74: $searchparam["place"] = trim($request["place"]);
75: break;
76: case "job":
77: $searchparam["job"] = trim($request["job"]);
78: break;
79: case "all":
80: $allchecked = true;
81: $searchparam['allchecked'] = true;
82: break;
83: case "dp":
84: $hendelser[] = "dp";
85: break;
86: case "vi":
87: $hendelser[] = "vi";
88: break;
89: case "bg":
90: $hendelser[] = "bg";
91: break;
92: case "ft":
93: $hendelser[] = "ft";
94: break;
95: case "em":
96: $hendelser[] = "em";
97: break;
98: case "kf":
99: $hendelser[] = "kf";
100: break;
101: case "avdo":
102: $avishendelser[] = $key;
103: break;
104: case "avju":
105: $avishendelser[] = $key;
106: break;
107: case "avekt":
108: $avishendelser[] = $key;
109: break;
110: case "avalmen":
111: $avishendelser[] = $key;
112: break;
113: }
114: }
115: if (count($kommuner) > 0)
116: $searchparam['kommuner'] = $kommuner;
117: if (count($roller) > 0)
118: $searchparam['roller'] = $roller;
119: if (count($hendelser) > 0)
120: $searchparam['hendelser'] = $hendelser;
121: if (count($avishendelser) > 0)
122: $searchparam['avishendelser'] = $avishendelser;
123:
124: if (array_key_exists ("name" , $request ) && !empty($request['name']))
125: $searchparam['name'] =trim($request['name']);
126: else
127: $searchparam['name'] = '';
128: if (array_key_exists ("surname" , $request ))
129: $searchparam['surname'] = trim($request['surname']);
130: else
131: $searchparam['surname'] = '';
132: if (array_key_exists ("fra" , $request ))
133: $searchparam['fra'] = trim($request['fra']);
134: else
135: $searchparam['fra'] = '';
136: if (array_key_exists ("til" , $request ))
137: $searchparam['til'] = trim($request['til']);
138: else
139: $searchparam['til'] = '';
140: }
141: else
142: {
143: $searchparam = NULL;
144: }
145: return $searchparam;
146: }
147:
148: private function makeSearchSubstringForArrays($params, $arraykey, $key)
149: {
150: $res = '';
151: if (array_key_exists ($arraykey,$params) && count($params[$arraykey] > 0))
152: {
153: foreach ($params[$arraykey] as $p)
154: {
155:
156: $res .= '&'.$key.'[]='.$p;
157: }
158: }
159: return $res;
160: }
161:
162:
163:
164: private function makeSearchSubstringForHendelser($params)
165: {
166: $res = '';
167: if (array_key_exists ('hendelser',$params) && !array_key_exists ('allchecked', $params))
168: {
169: foreach ($params['hendelser'] as $p)
170: {
171:
172:
173:
174:
175: switch ($p) {
176: case "dp":
177: $res .= '&kt[]=MINI&kt[]=KLOK&kt[]=FREG&kt[]=DÅPB&kt[]=DIVR<[]=dp';
178: break;
179: case "vi":
180: $res .= '&kt[]=MINI&kt[]=KLOK&kt[]=VIGB&kt[]=VIBO&kt[]=VIRE&kt[]=DIVR<[]=vi';
181: break;
182: case "em":
183: $res .= '&ka[]=3&kt[]=EMIP&kt[]=UTVA&kt[]=PASS&kt[]=PALI';
184: break;
185: case "bg":
186: $res .= '&kt[]=MINI&kt[]=KLOK&kt[]=DIVR<[]=gr<[]=df';
187: break;
188: case "ft":
189: $res .= '&kt[]=FOLK&kt[]=KFOT';
190: break;
191: case "kf":
192: $res .= '&kt[]=MINI&kt[]=KLOK&kt[]=DIVR<[]=kf';
193: break;
194: }
195: }
196: }
197: return $res;
198: }
199:
200: private function getPrivateFieldsSubstring($params)
201: {
202: $res = '';
203: foreach($this->privateFieldsMapping as $key=>$value)
204: {
205:
206: if (array_key_exists ($key,$params))
207: {
208: $res .= "&".$value."=".$params[$key];
209: }
210: }
211: return $res;
212: }
213:
214: private function getSearchResults($params)
215: {
216: $url = self::DAURL."?fra=".$params['fra']."&til=".$params['til'].$this->getPrivateFieldsSubstring($params);
217: if (array_key_exists ('hendelser',$params) && count($params['hendelser']) == 1 && $params['hendelser'][0]!= "ft" && $params['hendelser'][0]!= "em")
218: {
219: $url .= $this->makeSearchSubstringForArrays($params, 'roller', 'rolle');
220: }
221: $url .= $this->makeSearchSubstringForArrays($params, 'kommuner', 'k').$this->makeSearchSubstringForHendelser($params).
222: "&hendelsesdato=&connection=overid";
223: $results = file_get_contents($url);
224: return $results;
225: }
226:
227: private function searchAvis($searchparams)
228: {
229: $search = new SearchAvisData();
230: $avisparams = array('navn'=>$searchparams['name'], 'etternavn'=>$searchparams['surname']);
231: $res = $search->SearchPersons($searchparams);
232: return $res;
233: }
234:
235: private function existAndNotEmpty($array, $key)
236: {
237: if (array_key_exists ($key,$array) && ! empty($array[$key]))
238: return true;
239: else
240: return false;
241: }
242:
243: public function search()
244: {
245: $this->session->put('lasturl', $this->urlBuilder->current());
246: if($_REQUEST != NULL && array_key_exists ("search" , $_REQUEST))
247: {
248: $searchparams = $this->parseSearchRequest($_REQUEST);
249: $avissearch = $this->searchAvis($searchparams);
250: $results = array();
251:
252: if($this->existAndNotEmpty($searchparams,'hendelser') ||
253: (!$this->existAndNotEmpty($searchparams,'hendelser') && !$this->existAndNotEmpty($searchparams,'avishendelser')))
254: {
255: $results =json_decode($this->getSearchResults($searchparams));
256: $results = $results->results;
257: }
258: return $this->view->render('search.searchresults', array('input'=>$results, 'post'=>$_REQUEST, 'avis'=>$avissearch, 'test'=>$this->urlBuilder->current()));
259: }
260: else if ($_REQUEST != NULL && array_key_exists ("initsearch" , $_REQUEST))
261: {
262: $searchfields = array('fornavn','etternavn','fodselsaar', 'patronymikon');
263: $initsearch = array();
264: foreach ($searchfields as $field)
265: {
266: if( array_key_exists($field, $_REQUEST))
267: {
268: $initsearch[$field] = $_REQUEST[$field];
269: }
270: }
271: return $this->view->render('search.searchpage', array('init'=>$initsearch));
272: }
273: else
274: {
275: return $this->view->render('search.searchpage', array('init'=>NULL));
276: }
277: }
278:
279: }