1: <?php
2:
3: 4: 5: 6: 7:
8: namespace app\views\search;
9:
10: class Family {
11:
12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
30:
31: private $rawfamilydata;
32:
33: public function setRawData($rawdata)
34: {
35: $this->rawfamilydata =$rawdata;
36: }
37:
38: private $FAMILYRELATIONS = array(
39: "daap" => array("Far"=>array("far"), "Mor"=>array("mor"), "Barn"=>array("barn")),
40: "vielsebrur" => array("Far"=>array("far"), "Mor"=>array("mor"), "Barn"=>array("konfirmant")),
41: "vielse"=> array("bride"=>array("brur"), "groom"=>array("brudgom"), "bridefather"=>array("bruras far"),
42: "groomfather"=>array("brudgommens far"), "forlover"=>array("trulovar")),
43: "konfirmasjon" => array("Far"=>array("far"), "Mor"=>array("mor"), "Barn"=>array("konfirmant")),
44: );
45:
46:
47: private $HENDELSETYPE = array(
48: "daap" => "dp",
49: "vielse" => "vi",
50: "konfirmasjon" => "kf",
51: );
52:
53: private function getNameLine($person)
54: {
55: $fulNavn = '';
56: if ($person['forenamn'] != 'null' && $person['etternamn'] != 'null')
57: $fulNavn = $person['forenamn'].' '.$person['etternamn'];
58: else if ($person['forenamn'] != 'null')
59: $fulNavn = $person['forenamn'];
60: else if ($person['etternamn'] != 'null')
61: $fulNavn = $person['etternamn'];
62: else
63: $fulNavn = $emptyField;
64: return $fulNavn;
65: }
66:
67: private function isFamilyMember($person)
68: {
69: $res = 'false';
70: return $res;
71: }
72:
73: private function whichFamilyMember($person)
74: {
75: $res = '';
76:
77: foreach($this->FAMILYRELATIONS["vielse"] as $key=>$value)
78: {
79: foreach($value as $v)
80: {
81: if ($person['rolle']== $v)
82: return $key;
83: }
84: }
85: return $res;
86: }
87:
88: private function isFamilyRelation($hendelse, $relation, $value)
89: {
90: $res = "false";
91: foreach($this->FAMILYRELATIONS[$hendelse][$relation] as $v)
92: {
93: if($v == $value)
94: return "true";
95: }
96: return $res;
97: }
98:
99: private function processFamiliesforBridePar($familyset, $partner, $far)
100: {
101: $other = array();
102: $mainpersons = array("Partner 1", "Partner 2");
103: $partnerfamily = array();
104: $parentfamily = array();
105: foreach ($familyset as $member)
106: {
107: $m = array("name" => $this->getNameLine($member),"url" => $member['id'], "autoid" =>$member['autoid']);
108: if ($this->isFamilyRelation("vielse", $far ,$member['rolle'])== 'true')
109: {
110: $parentfamily["Far"] = $m;
111: }
112: else if ($this->isFamilyRelation("vielse", $partner, $member['rolle'])== 'true')
113: {
114: $partnerfamily["Partner"] = $m;
115: }
116: else if ($this->isFamilyRelation("vielse", "forlover",$member['rolle'])== 'true')
117: {
118: $other[] = $m;
119: }
120: }
121: $finalres = array();
122:
123: if (count($parentfamily) > 0)
124: {
125:
126: $res1 = array();
127: $res1["family"] = $parentfamily;
128: $res1["isFamilyMember"] = 'true';
129: $res1["hendelse"] = "Vielse";
130: $finalres[] = $res1;
131: }
132: if (count($partnerfamily) > 0)
133: {
134: $res2 = array();
135: $res2["family"] = $partnerfamily;
136: $res2["isFamilyMember"] = 'true';
137: $res2["hendelse"] = "Vielse";
138:
139: if (count($other) > 0)
140: {
141: $other["type"] = "Forlover";
142: $res2["other"] = $other;
143: }
144: $finalres[] = $res2;
145: }
146: return $finalres;
147: }
148:
149:
150: private function processFamiliesforParent($familyset, $child)
151: {
152: $family = array();
153: foreach ($familyset as $member)
154: {
155: $m = array("name" => $this->getNameLine($member),"url" => $member['id'], "autoid" =>$member['autoid']);
156: if ($this->isFamilyRelation("vielse", $child ,$member->rolle)== 'true')
157: {
158: $family["Barn"] = $m;
159: }
160: }
161: $finalres = array();
162:
163: if (count($family) > 0)
164: {
165:
166: $res = array();
167: $res["family"] = $family;
168: $res["isFamilyMember"] = 'true';
169: $res["hendelse"] = "Vielse";
170: $finalres[] = $res;
171: }
172: return $finalres;
173: }
174:
175:
176: private function processForlover($familyset)
177: {
178:
179: }
180:
181: private function processVielse($familyset, $person)
182: {
183: $families = NULL;
184:
185:
186:
187: $which = $this->whichFamilyMember($person);
188: switch ($which) {
189: case "bride":
190: $families = $this->processFamiliesforBridePar($familyset, "groom", "bridefather");
191: break;
192: case "groom":
193: $families = $this->processFamiliesforBridePar($familyset, "bride", "groomfather");
194: break;
195: case "bridefather":
196: $families = $this->processFamiliesforParent($familyset, "bride");
197: break;
198: case "groomfather":
199: $families = $this->processFamiliesforParent($familyset, "groom");
200: break;
201: default:
202: $families = $this->processForlover($familyset);
203: }
204:
205: return $families;
206: }
207:
208:
209: private function processDaap($family, $person)
210: {
211: $res = array();
212: $other = array();
213: $other["type"] = "Fadder";
214: $res["isFamilyMember"] = 'false';
215: $mainpersons = array();
216: $mainpersons[] = "Barn";
217: $res["hendelse"] = "Dåp";
218: $res["MainPersons"] = $mainpersons;
219: $fmily = array();
220: if (($person['rolle'] == 'far')|| ($person['rolle'] == 'mor') || ($person['rolle'] == 'barn'))
221: {
222: $res["isFamilyMember"] = 'true';
223: if ($person['rolle'] == 'barn')
224: $res["familyMember"] = 'Barn';
225: elseif ($person['rolle'] == 'mor')
226: $res["familyMember"] = 'Partner';
227: elseif ($person['rolle'] == 'far')
228: $res["familyMember"] = 'Partner';
229: }
230: else
231: {
232: $res["isFamilyMember"] = 'false';
233: $res["familyMember"] = NULL;
234: }
235: foreach ($family as $member)
236: {
237: $m = array("name" => $this->getNameLine($member),"url" => $member['id'], "autoid" =>$member['autoid']);
238:
239:
240: if ($member['rolle'] == 'far')
241: {
242: if ($res["familyMember"] == 'Barn')
243: $fmily["Far"] = $m;
244: else
245: $fmily["Partner"] = $m;
246: }
247: else if ($member['rolle'] == 'mor')
248: {
249: if ($res["familyMember"] == 'Barn')
250: $fmily["Mor"] = $m;
251: else
252: $fmily["Partner"] = $m;
253: }
254: else if ($member['rolle'] == 'barn')
255: $fmily["Barn"] = $m;
256: else
257: {
258: $other[] = $m;
259: }
260: }
261: $res["family"] = $fmily;
262: $res["other"] = $other;
263: $finalres = array();
264: $finalres[] = $res;
265: return $finalres;
266: }
267:
268: private function processKonfirmasjon($family, $person)
269: {
270: $res = array();
271:
272:
273: $res["isFamilyMember"] = 'false';
274:
275:
276: $res["hendelse"] = "Konfirmasjon";
277:
278: $fmily = array();
279: if (($person['rolle'] == 'far')|| ($person['rolle'] == 'mor') || ($person['rolle'] == 'konfirmant'))
280: {
281: $res["isFamilyMember"] = 'true';
282: if ($person['rolle'] == 'konfirmant')
283: $res["familyMember"] = 'Barn';
284: elseif ($person['rolle'] == 'mor')
285: $res["familyMember"] = 'Mor';
286: elseif ($person['rolle'] == 'far')
287: $res["familyMember"] = 'Far';
288: }
289: foreach ($family as $member)
290: {
291: $m = array("name" => $this->getNameLine($member),"url" => $member['id'], "autoid" =>$member['autoid']);
292:
293:
294: if ($member['rolle'] == 'far')
295: {
296: $fmily["Far"] = $m;
297: }
298: else if ($member['rolle'] == 'mor')
299: $fmily["Mor"] = $m;
300: else if ($member['rolle'] == 'konfirmant')
301: $fmily["Barn"] = $m;
302: 303: 304: 305:
306: }
307: $res["family"] = $fmily;
308:
309: $finalres = array();
310: $finalres[] = $res;
311: return $finalres;
312: }
313:
314: public function processFamily($family, $person)
315: {
316: $res = NULL;
317: if ($family != NULL && $person != NULL)
318: {
319: $hndls =$person['listetype'];
320: switch ($hndls) {
321: case $this->HENDELSETYPE["daap"]:
322: $res = $this->processDaap($family, $person);
323: break;
324: case $this->HENDELSETYPE["konfirmasjon"]:
325: $res = $this->processKonfirmasjon($family, $person);
326: break;
327: case $this->HENDELSETYPE["vielse"]:
328: $res = $this->processVielse($family, $person);
329: break;
330: }
331: }
332: $f = $this->checkMemberForMerged($res);
333: return $res;
334: }
335:
336: private function checkMemberForMerged($familier)
337: {
338:
339:
340:
341: $partnerfamilies = array();
342: $allfamilies = array();
343:
344: foreach ($familier as $f)
345: {
346: if (isset($f))
347: {
348: if (array_key_exists ( 'familyMember', $f ) && $f['familyMember'] == "Barn")
349: {
350:
351:
352: $fmly = $f['family'];
353:
354:
355: if (array_key_exists ("Far" ,$fmly ) && array_key_exists ( "Mor" ,$fmly ))
356: {
357:
358:
359:
360: }
361: }
362: else
363: {
364: 365: 366: 367: 368: 369: 370:
371:
372:
373:
374: }
375: }
376: }
377:
378:
379: return $familier;
380: }
381:
382: public function getFamiliesfromMergings($alldata)
383: {
384:
385: $res = array();
386: $this->rawfamilydata =$alldata;
387: if ($alldata != NULL)
388: {
389: foreach ($alldata as $data)
390: {
391: $person = $data['person'];
392: $family = $data['family'];
393: $hndls = $person['listetype'];
394: switch ($hndls) {
395: case $this->HENDELSETYPE["daap"]:
396: $res[] = $this->processDaap($family, $person);
397: break;
398: case $this->HENDELSETYPE["konfirmasjon"]:
399: $res[] = $this->processKonfirmasjon($family, $person);
400: break;
401: case $this->HENDELSETYPE["vielse"]:
402: $res[] = $this->processVielse($family, $person);
403: break;
404: }
405: }
406: }
407: if (count ($res) > 0)
408: {
409:
410: $this->checkMemberForMerged($res);
411:
412: return $res;
413: }
414: else
415: return $res;
416: }
417: }