1: <?php
2:
3:
4: namespace app\views\personview;
5:
6: 7: 8: 9: 10:
11:
12: use \mako\utility\HTML;
13: use app\views\search\HTMLWrapper;
14: use app\views\search\Format;
15: use app\views\search\Fylker;
16:
17:
18:
19:
20: require_once getcwd().'/app/views/common/ProjectUrl.php';
21:
22:
23: class PersonPage
24: {
25: private $person;
26: private $mergingCart;
27: private $wrapper;
28: private $message;
29: protected $url;
30:
31: protected $refWindowHeader = array("Title", "URL");
32:
33: protected $pikenavn = "pikenavn";
34: protected $names = array("fornavn"=>"Fornavn", "mellomnavn"=>"Mellomnavn", "patronymikon"=>"Patronymikon", "etternavn"=>"Etternavn", "pikenavn"=>"Pikenavn", "alternEtternavn"=>"Alternativt etternavn");
35:
36: protected $fieldsmapping = array("almen"=>"hendelser av allmenn interesse", "bryllup"=>"ekteskap", "dodsfall"=>"dødsannonser", "jubileer"=>"jubileer");
37: protected $hendelseMapping = array("almen"=>"hendelser av allmenn interesse", "bryllup"=>"ekteskap", "dodsfall"=>"dode", "jubileer"=>"jubileer");
38: protected $tableHeader = array("pfid"=>"PFID",
39:
40: "navn" =>"Navn",
41: "kjonn"=>"Kjønn", "rolle"=>"Rolle", "fodselsaar"=>"Fødselsår",
42: "fodested"=>"Fødested", "bosted"=>"Bosted", "stilling_stand"=>"Stilling og stand", "hendelsesdato"=>"Hendelsesdato",
43: "kildetype"=>"Kilde", "kildekategori"=>"Kildekategori");
44: protected $avisheader = array("pfid", "navn",
45:
46: "kjonn", "rolle", "year_birth", "fodested", "sted", "stilling", "dato", "avis_name", "hendelse");
47:
48: protected $html;
49:
50: private $tableFields = array("NR"=>"", "Dato"=>"dato", "Kilde"=>"kildeid", "PFID"=>"pfid", "Rolle"=>"rolle", "Navn"=>"navn", "Fødselsdato"=>"fodselsdato", "Fødested"=>"fodested", "Bosted"=>"bosted", "Fam. St."=>"familiestilling",
51: "Sivst"=>"sivilstand", "Yrke"=>"yrke", "Far/brudgom"=>"far", "Mor/brud"=>"mor", "Partner"=>"partner", "Barn/andre"=>"barn");
52:
53: protected $gender = array("mann"=>array("m",""), "kvinne"=>array("k",""));
54:
55: public function __construct()
56: {
57: $this->wrapper = new HTMLWrapper();
58: $this->html = new HTML();
59: $this->url = new ProjectUrl();
60: $this->fylker = new Fylker();
61: }
62:
63: 64: 65: 66: 67: 68: 69:
70: public function setPerson($p)
71: {
72: $this->person = $p;
73: }
74:
75: 76: 77: 78: 79: 80: 81:
82:
83: public function setCart($cart)
84: {
85: $this->mergingCart = $cart;
86: }
87:
88: 89: 90: 91: 92: 93: 94:
95:
96: public function setMessage($message)
97: {
98: $this->message = $message;
99: }
100:
101: 102: 103: 104: 105: 106: 107:
108:
109: private function getMessagePanel()
110: {
111:
112: $res = '';
113: if ($this->message != NULL & count($this->message) > 0)
114: {
115: $res .= '<div id="Messages" class="messages"> ';
116: foreach ($this->message as $m)
117: {
118: $res .= '<div id="Message" class="message"> ';
119: $res .= $m;
120: $res .= '</div>';
121: }
122: $res .= '</div>';
123: }
124: return $res;
125: }
126:
127: 128: 129: 130: 131: 132: 133:
134:
135: private function getDate($entry, $type)
136: {
137: $res = '';
138: if (array_key_exists($type.'dato', $entry) && !empty($entry[$type.'dato']))
139: $res .= $entry[$type.'dato'].".";
140: if (array_key_exists($type.'aar', $entry) && !empty($entry[$type.'aar']))
141: {
142: if (array_key_exists($type.'dato', $entry) && $entry[$type.'dato'] == $entry[$type.'aar'])
143: {
144: }
145: else
146: {
147: $res .= $entry[$type.'aar'];
148: }
149: }
150: $res = trim($res);
151: $res = trim($res, ".");
152: return $res;
153: }
154:
155: 156: 157: 158: 159: 160: 161: 162:
163:
164: private function getNamesBoxes($opplysning)
165: {
166:
167: $res = '';
168: foreach ($this->names as $field=>$title)
169: {
170:
171: if($field == $this->pikenavn && array_key_exists('kjonn',$opplysning) && $opplysning['kjonn'] == 'm')
172: continue;
173: $row = '';
174: $value = '';
175: if (array_key_exists($field,$opplysning))
176: {
177: $value = $opplysning[$field];
178: }
179: $row .= $this->wrapper->createLabelElement($title.': ', $field.'label');
180: $row .= $this->wrapper->createTextElement($field, $value, $field,30 );
181: $res .= $this->html->tag('li', [], $row);
182:
183: }
184: return $res;
185:
186: }
187:
188: 189: 190: 191: 192: 193: 194:
195:
196: private function getPersonDetailsPanel()
197: {
198: $edit = false;
199: $panel = '';
200: if ($this->person != NULL && array_key_exists("persondata", $this->person))
201: {
202: if (array_key_exists("edit", $this->person))
203: $edit = $this->person["edit"];
204: $details = new PersonDetails();
205: $details->setDetails($this->person["persondata"], $edit, $this->person["authenticated"]);
206: $panel = $details->getPersonDetailsPanel();
207: }
208: return $panel;
209:
210: }
211:
212: 213: 214: 215: 216: 217: 218:
219:
220:
221: private function getOtherField($pfid, $input)
222: {
223: $res = '';
224: $type = 'daid';
225:
226: $txt = '';
227: foreach ($input as $in)
228: {
229:
230: if ($pfid == $in["pfid"])
231: {
232: $txt = $in["navn"];
233: if (array_key_exists("type", $in))
234: $type = $in["type"];
235:
236: }
237: }
238:
239: $url = $this->url->projecturl."person/".$type."/".$pfid;
240: $res = '<a href="'.$url.'">'.$txt.'</a>';
241: return $res;
242: }
243:
244: 245: 246: 247: 248: 249: 250:
251:
252:
253: private function PFId($entry)
254: {
255: $res = '';
256: if (array_key_exists( 'pfid', $entry))
257: {
258: $res = $entry['pfid'];
259: if (array_key_exists( 'type', $entry))
260: {
261: switch($entry['type'])
262: {
263: case "daid":
264:
265: $res = '<a href="'.$this->url->daUrl.$res.'">'.$res.'</a>';
266: break;
267: case "avisid":
268:
269:
270: $res = '<a href="http://hbr2.nr.no/demo/avisproject/showannonser.php?startdate='.
271: $entry['hendelsedato'].'&stopdate=&avis='.$entry['avisid'].'&hendelse='.$this->hendelseMapping[$entry['hendelse']].'&date=Begrens+s%C3%B8ket">'.$res.'</a>';
272: break;
273: }
274: }
275: }
276: return $res;
277: }
278:
279: 280: 281: 282: 283: 284: 285:
286:
287: private function getKildeName($entry)
288: {
289: $name = "";
290: $start = "";
291: $stop = "";
292: if (property_exists($entry, "kildetype"))
293: {
294: $name .= $entry->kildetype;
295: }
296: if (property_exists($entry, "komm1947"))
297: {
298:
299: $name .= ", ".$this->fylker->getKommuneNavn($entry->{"komm1947"});
300: }
301: if (property_exists($entry, "startaar"))
302: {
303:
304: $start = $entry->startaar;
305: }
306: if (property_exists($entry, "sluttaar"))
307: {
308:
309: $stop = $entry->sluttaar;
310: }
311: if (!empty($start) && !empty($stop))
312: {
313: if ($start != $stop)
314: {
315: $name .= ", ".$start.'-'.$stop;
316: }
317: else {$name .= ", ".$start;}
318: }
319: else if (!empty($start))
320: {$name .= ", ".$start;}
321: else if (!empty($stop))
322: {$name .= ", ".$stop;}
323: return $name;
324: }
325:
326: private function getKilde($entry)
327: {
328: $res = '';
329: if (array_key_exists( 'type', $entry))
330: {
331: switch($entry['type'])
332: {
333: case "daid":
334: $name = '';
335: if (array_key_exists( 'kilde', $entry))
336: {
337: $name = $this->getKildeName($entry['kilde']);
338: }
339: $link = $this->url->daUrl.'/kilde/'.$entry['kildeid'];
340: $res = '<a href= "'.$link.'" target="_blank">'.$name.'</a>' ;
341: break;
342: case "avisid":
343:
344: if (array_key_exists( 'annonselenke', $entry) && array_key_exists('hendelse', $entry))
345: {
346: $res = '<a href= "http://'.urldecode($entry['annonselenke']).'">'.$entry['avis'].', '.$this->fieldsmapping[$entry['hendelse']].'</a>' ;
347: }
348:
349: break;
350: }
351: }
352: return $res;
353: }
354:
355: 356: 357: 358: 359: 360: 361:
362:
363:
364: private function getHendelseDate($entry)
365: {
366: $res = '';
367: if (array_key_exists( 'hendelsedato', $entry))
368: {
369: $res = $entry['hendelsedato'];
370: }
371: return $res;
372: }
373:
374: 375: 376: 377: 378: 379: 380:
381:
382:
383: private function getLivsLoepTable()
384: {
385: $livslop = '';
386: if ($this->person != NULL && array_key_exists("entries", $this->person))
387: {
388: $livslop .= '<div id="LivsLoepPanel" class="panel"> ';
389: $table = array();
390: $row = array();
391: foreach ($this->tableFields as $f=>$value)
392: {
393: $row[] = $f;
394: }
395: $table[] = $row;
396: $nr = 0;
397: foreach($this->person["entries"] as $input)
398: {
399: $nr = $nr +1;
400: $entry = $input["individual"];
401:
402: $entryrow = array();
403: foreach ($this->tableFields as $f=>$value)
404: {
405: if ($f == "NR")
406: {
407: $entryrow[] = $nr;
408: }
409: else if ($value == "far" || $value == "mor" || $value == "partner" || $value == "barn")
410: {
411: if (array_key_exists($value, $entry) && !empty($entry[$value]) && array_key_exists("other",$input))
412: $entryrow[] = $this->getOtherField($entry[$value], $input["other"]);
413: else
414: $entryrow[] = '';
415: }
416: else if ($value == "fodselsdato")
417: {
418: $entryrow[] = $this->getDate($entry, 'fodsels');
419: }
420: else if ($value == "dato")
421: {
422: $entryrow[] = $this->getHendelseDate($entry);
423: }
424: else if ($value == "kildeid")
425: {
426: $entryrow[] = $this->getKilde($entry);
427: }
428: else if ($value == "pfid")
429: {
430: $entryrow[] = $this->PFId($entry);
431: }
432: else
433: {
434: if (array_key_exists($value, $entry))
435: $entryrow[] = $entry[$value];
436: else
437: $entryrow[] = '';
438: }
439: }
440: $table[] = $entryrow;
441: }
442: $livslop .= '<p>'.$this->wrapper->formatTable($table).'</p>';
443: $livslop .= '</div> <br>';
444: }
445: return $livslop;
446: }
447:
448: private function getHeader()
449: {
450: $header = "";
451: return $header;
452: }
453:
454:
455:
456:
457:
458: private function getCelebrityExampleForm()
459: {
460: $html = new HTML();
461: $form = '';
462: $form.= '<div id="celebrity" class="celebrity"> ';
463: 464: 465:
466:
467: $button = $html->tag('button', array('type' => 'submit', 'name' => 'celebrity'), 'Kjent person som Fridtjof Nansen');
468: $button .= $html->tag('button', array('type' => 'submit', 'name' => 'example'), 'Eksempel på gjennomarbeidet personside');
469:
470: $form .= '<form action="">'.$button.'</form>';
471: $form .= '</div>';
472: return $form;
473: }
474:
475: private function getBioPanel()
476: {
477: $disable = 'disabled';
478: if ($this->person["authenticated"] === true)
479: $disable = '';
480: $html = new HTML();
481: $references = "";
482: $references.= '<div id="biografi" class="biografi"> ';
483:
484: $references .= '<h1> Merknader </h1>';
485: if ($this->person["authenticated"] === true)
486: {
487: $buttonEditBio = $html->tag('button', array('type' => 'submit', 'name' => 'editBio'), 'Lagre endringer i merknader');
488: $textBio = '';
489:
490: if ($this->person != NULL && array_key_exists("persondata",$this->person))
491: {
492: if(array_key_exists("remarks",$this->person["persondata"]))
493: $textBio = $this->person["persondata"]["remarks"];
494: }
495: $textarea = '<textarea name="biocontent" rows="10" cols="180">'.$textBio.'</textarea>';
496: $references .= '<form action="">'.$textarea.$buttonEditBio.'</form>';
497: }
498: else
499: {
500:
501: if(array_key_exists("remarks",$this->person["persondata"]))
502: {
503: $references .= $html->tag('p', [], $this->person["persondata"]["remarks"]);
504: }
505: }
506: $references .= '</div>';
507: return $references;
508: }
509:
510:
511: private function getShowReferencesWindow()
512: {
513:
514:
515: $base = array("title", "url");
516: $window = '';
517:
518: $reftable = array();
519:
520: $i = 0;
521: if ($this->person != NULL && array_key_exists("persondata",$this->person) && array_key_exists("references",$this->person["persondata"]) && !empty($this->person["persondata"]["references"]))
522: {
523:
524: 525: 526: 527:
528: foreach($this->person["persondata"]["references"] as $type=>$references)
529: {
530: foreach ($references as $reference)
531: {
532:
533: $reftable[] = $this->wrapper->makehref($reference[$base[1]], $reference[$base[0]]);
534: }
535: }
536: }
537:
538: $window .= $this->html->ul($reftable);
539: $window = '<div id="refwindow" class="refwindow"> '.$window.' </div>';
540: return $window;
541: }
542: private function getEditReferencesWindow()
543: {
544:
545: $prefix = array("exist", "new");
546: $base = array("title", "url");
547: $hiddentype = "id";
548: $window = '';
549:
550: $reftable = array();
551: $reftable[] = $this->refWindowHeader;
552: $i = 0;
553: if ($this->person != NULL && array_key_exists("persondata",$this->person) && array_key_exists("references",$this->person["persondata"]) && !empty($this->person["persondata"]["references"]))
554: {
555:
556: $i = 0;
557: foreach($this->person["persondata"]["references"] as $type=>$references)
558: {
559: $i = 0;
560: foreach ($references as $reference)
561: {
562: if (array_key_exists($hiddentype,$reference))
563: {
564: $hidden = '<input type="hidden" name="'.$type.$hiddentype.$i.'" value="'.$reference[$hiddentype].'">';
565: }
566: else
567: {
568: $hidden = '';
569: }
570:
571: $deletebutton = $this->wrapper->createButtonElement('deleteref'.$i, 'x', 'deleteref');
572: $reftable[]= array($hidden.$this->wrapper->createTextElement( $type.$base[0].$i,$reference[$base[0]],$type.$base[0].$i ,30 ), $this->wrapper->createTextElement($type.$base[1].$i,$reference[$base[1]],$type.$base[1].$i,30 ), $deletebutton);
573: $i++;
574: }
575: }
576: }
577: $reftable[] = array($this->wrapper->createTextElement( $prefix[1].$base[0].$i,'',$prefix[1].$base[0].$i ,30 ), $this->wrapper->createTextElement($prefix[1].$base[1].$i,'',$prefix[1].$base[1].$i,30 ));
578: $window .= $this->wrapper->formatTable($reftable, 'reftable', 'refrow');
579: $window = '<div id="refwindow" class="refwindow"> '.$window.' </div>';
580: return $window;
581: }
582:
583: private function getReferencePanel()
584: {
585: $disable = 'disabled';
586: if ($this->person["authenticated"] === true)
587: $disable = '';
588: $html = new HTML();
589: $references = "";
590: $tablearea = "";
591:
592: $references.= '<div id="references" class="references"> ';
593:
594:
595: $buttons = $html->tag('button', array('type' => 'submit', 'name' => 'editRef', $disable ), 'Rediger referanser');
596: $textRef = '';
597: if ($this->person != NULL && array_key_exists("editref", $this->person) && $this->person["editref"] === true)
598: {
599:
600:
601: $tablearea .= $this->getEditReferencesWindow();
602: $buttons = $html->tag('button', array('type' => 'submit', 'name' => 'closeRef', $disable ), 'Lukk');
603: $buttons .= $html->tag('button', array('type' => 'submit', 'name' => 'addRef', 'id' => 'addRef',$disable ), 'Legg til referanse');
604: $buttons .= $html->tag('button', array('type' => 'submit', 'name' => 'saveRef', $disable ), 'Lagre referanser');
605:
606:
607: }
608: else if ($this->person != NULL && array_key_exists("persondata",$this->person) && array_key_exists("references",$this->person["persondata"]))
609: {
610: $tablearea= $this->getShowReferencesWindow();
611:
612:
613: }
614: if ($this->person["authenticated"] === true)
615: {
616: $tablearea = $html->tag('fieldset',array('class' => 'someclass'), $tablearea);
617: $tablearea = '<legend>Referanser</legend>'.$tablearea;
618: $references .= '<form action="" method="get">'.$tablearea.$buttons.'</form>';
619: }
620: else
621: {
622: $references = '<h1> Referanser </h1>'.$tablearea;
623: }
624: $references .= '</div>';
625: return $references;
626: }
627:
628: private function getFamilyPanel()
629: {
630: $panel = "";
631: $nr = 0;
632: if ($this->person != NULL && array_key_exists("family", $this->person) && (count($this->person["family"])> 0))
633: {
634: $panel .= '<div id="FamilyPanel" class="panel"> ';
635: foreach($this->person["family"] as $type=>$families)
636: {
637:
638: if (count($families) < 2)
639: $nr = '';
640: else
641: $nr = 1;
642: foreach ($families as $family)
643: {
644: $panel .= '<h2> '.$type.' </h2>';
645:
646: foreach ($family as $member)
647: {
648: $url = $this->url->projecturl."person/".$member[1]['type']."/".$member[1]['pfid'];
649: $panel .= ucfirst($member[0]).': '.$this->wrapper->makehref($url, $member[1]['name']).'<br>';
650: }
651: }
652: }
653:
654: $panel .= '</div>';
655: }
656: return $panel;
657: }
658:
659: private function getSearchPanel()
660: {
661: $searchfields = array('fornavn','etternavn','fodselsaar', 'patronymikon');
662: $html = new HTML();
663: $panel = "";
664: $panel .= '<div id="SearchPanel" class="panel"> ';
665: $panel .= '<form action="../../search">';
666: foreach ($searchfields as $field)
667: {
668: if(array_key_exists("persondata", $this->person) && array_key_exists($field, $this->person["persondata"]))
669: {
670:
671: $panel .= ' <input type="hidden" name="'.$field.'" value="'.$this->person["persondata"][$field].'">';
672: }
673: }
674: $panel .= $html->tag('button', array('type' => 'submit', 'name' => 'initsearch'), 'Gå til søket');
675: $panel .= '</form>';
676: $panel .= '</div>';
677: return $panel;
678: }
679:
680: private function getMergingCart()
681: {
682: $cart = new MergingCart();
683: $cart->populateCart($this->mergingCart, $this->person["authenticated"]);
684: return $cart->getHTMLCart();
685: }
686:
687: public function getPage()
688: {
689: $output = "";
690: $output .= $this->getMessagePanel();
691: $output .= $this->getHeader();
692: $output .= $this->getMergingCart();
693: $output .= $this->getPersonDetailsPanel();
694: $output .= $this->getSearchPanel();
695: $output .= $this->getFamilyPanel();
696: $output .= $this->getLivsLoepTable();
697: $output .= $this->getBioPanel();
698: $output .= $this->getReferencePanel();
699: if ($this->person["authenticated"] === true)
700: {
701: $output .= $this->getCelebrityExampleForm();
702: }
703: return $output;
704: }
705: }
706: