1: <?php
2:
3:
4: namespace app\controllers;
5:
6: use \mako\http\routing\Controller;
7:
8:
9:
10:
11:
12:
13: 14: 15: 16: 17:
18: class DAQuery {
19:
20: const DAURL = "http://digitalarkivet.arkivverket.no/api/";
21: const person = "person";
22: const kilde = "kilde";
23: const json = "json";
24:
25: protected $fields = array("id" => "pfid", "avispersonid" => "pfid", "pfid" => "pfid", "fornavn" => "fornavn", "forenamn" => "fornavn", "etternavn" => "etternavn", "etternamn" => "etternavn", "slektsnavn" => "etternavn", "patronymikon" => "patronymikon", "kjonn" => "kjonn",
26: "fodselsaar" => "fodselsaar", "year_birth" => "fodselsaar", "fodselsdato" => "fodselsdato", "dodsdato" => "dodsdato", "fodested" => "fodested", "dodssted" => "dodssted");
27: protected $tableFields = array("rolle" => "rolle", "navn" => "navn", "bosted" => "bosted", "bustad" => "bosted", "familiestilling" => "familiestilling", "sivilstand" => "sivilstand", "yrke" => "yrke",
28: "stilling_stand" => "yrke", "kildeid" => "kildeid", "far" => "", "mor" => "", "barn" => "", "partner" => "", "kilde"=>"kilde"
29:
30: );
31: protected $rollerMapping = array(
32: "far" => array("barn" => "far", "konfirmant" => "far", "brudgom" => "brudgommens far", "brur" => "bruras far", "trulovar" => "brudgom"),
33: "mor" => array("barn" => "mor", "konfirmant" => "mor", "trulovar" => "brur"),
34: "barn" => array("mor" => "barn", "far" => "barn", "mor" => "konfirmant", "far" => "konfirmant", "fadder" => "barn", "bruras far" => "brur", "brur far" => "brur", "brudgommens far" => "brudgom"),
35: "partner" => array("mor" => "far", "far" => "mor", "brur" => "brudgom", "brudgom" => "brur")
36: );
37: protected $familyMapping = array(
38: "far" => array("barn" => "far", "konfirmant" => "far", "brudgom" => "brudgommens far", "brur" => "bruras far"),
39: "mor" => array("barn" => "mor", "konfirmant" => "mor"),
40:
41: "barn" => array("mor" => array("barn", "konfirmant"), "far" => array("barn", "konfirmant"), "bruras far" => "brur", "brur far" => "brur", "brudgommens far" => "brudgom"),
42: "partner" => array("mor" => "far", "far" => "mor", "brur" => "brudgom", "brudgom" => "brur")
43: );
44: public $types = array('da' => 'daid', 'hbr' => 'hbrid', 'avis' => 'avisid');
45:
46:
47:
48: private function getKilde($kildeid) {
49: $kilde = NULL;
50: $url = self::DAURL . self::kilde . "/" . $kildeid . "/" . self::json;
51: $kilde = json_decode(file_get_contents($url));
52: if (property_exists($kilde, "data")) {
53: return $kilde->data;
54: } else {
55: return NULL;
56: }
57: }
58:
59: public function getDAPerson($id) {
60: $person = NULL;
61:
62: $url = self::DAURL . self::person . "/" . $id . "/" . self::json;
63: $person = file_get_contents($url);
64: $person = json_decode($person);
65: if (property_exists($person->individual, "gen_auto_id")) {
66: $person->individual->autoid = $person->individual->gen_auto_id;
67: }
68: if (property_exists($person->individual, "kildeid")) {
69: $kilde = $this->getKilde($person->individual->kildeid);
70: $person->individual->kilde = $kilde;
71: } else {
72: $person->individual->kilde = NULL;
73: }
74: return $person;
75: }
76:
77: private function initPersonData() {
78: $person = array();
79: foreach ($this->fields as $field => $value) {
80: if (!array_key_exists($value, $person))
81: $person[$value] = "";
82: }
83: return $person;
84: }
85:
86: public function getPersonfromFK($entry) {
87: $person = $this->initPersonData();
88: foreach ($this->fields as $field => $value) {
89: if (property_exists($entry->individual, $field) && !empty($entry->individual->{$field})) {
90: if ($field == 'fodselsdato') {
91: $person[$value] = $this->processDate($entry->individual->{$field});
92: } else {
93: $person[$value] = $entry->individual->{$field};
94: }
95: }
96: }
97: return $person;
98: }
99:
100: private function packMember($pfid, $entry) {
101:
102: $res = array();
103:
104: foreach ($entry["other"] as $key => $member) {
105: if ($member["pfid"] == $pfid) {
106: $name = $member["navn"];
107: }
108: }
109: $res['pfid'] = $pfid;
110: $res['name'] = $name;
111: $res['type'] = 'daid';
112: return $res;
113: }
114:
115: private function getFamilyforFK($persondata, $oneentry) {
116: $families = array();
117: $partnerogbarn = array("partner", "barn");
118: $foreldre = array("mor", "far");
119:
120: foreach ($foreldre as $member) {
121: $m = $this->processField($member, $persondata, $this->familyMapping);
122: if (!empty($m)) {
123: if (!array_key_exists('Foreldre og søsken', $families)) {
124: $families['Foreldre og søsken'] = array();
125: $families['Foreldre og søsken'][] = array();
126: }
127: $families['Foreldre og søsken'][0][] = array($member, $this->packMember($m, $oneentry));
128: }
129: }
130: foreach ($partnerogbarn as $member) {
131: $m = $this->processField($member, $persondata, $this->familyMapping);
132: if (!empty($m)) {
133: if (!array_key_exists('Partner og barn', $families)) {
134: $families['Partner og barn'] = array();
135: $families['Partner og barn'][] = array();
136: }
137: $families['Partner og barn'][0][] = array($member, $this->packMember($m, $oneentry));
138: }
139: }
140:
141: return $families;
142: }
143:
144:
145: private function processField($field, $persondata, $mapping) {
146:
147: $map = $mapping[$field];
148: if (property_exists($persondata->individual, "rolle")) {
149: $rolle = $persondata->individual->rolle;
150: if (array_key_exists($rolle, $map)) {
151: $search = $map[$rolle];
152: if (property_exists($persondata, "individuals")) {
153: foreach ($persondata->individuals as $individ) {
154: if (is_array($search)) {
155: if (in_array($individ->rolle, $search))
156: return $individ->id;
157: }
158: else {
159: if ($individ->rolle == $search)
160: return $individ->id;
161: }
162: }
163: }
164: }
165: }
166: else {
167: return '';
168: }
169: return '';
170: }
171:
172: private function processDate($date) {
173:
174: $res = trim($date);
175: if (strlen($res) == 5) {
176: $parts = explode("-", $res);
177: if (count($parts) == 2) {
178: $res = $parts[1] . "." . $parts[0];
179: return $res;
180: }
181: }
182: return $res;
183: }
184:
185: private function getEntry($individual, $persondata) {
186: $entry = array();
187: $entry["type"] = $this->types["da"];
188: foreach ($this->fields as $field => $value) {
189: if (property_exists($individual, $field) && !empty($individual->{$field})) {
190: if ($field == 'fodselsdato') {
191: $entry[$value] = $this->processDate($individual->{$field});
192: } else {
193: $entry[$value] = $individual->{$field};
194: }
195: }
196: }
197: foreach ($this->tableFields as $field => $value) {
198: if (property_exists($individual, $field) && !empty($individual->{$field}))
199: $entry[$value] = $individual->{$field};
200: else {
201: if ($field == "navn") {
202: $entry["navn"] = '';
203: if (array_key_exists("fornavn", $entry))
204: $entry["navn"] .= $entry["fornavn"];
205: if (array_key_exists("patronymikon", $entry))
206: $entry["navn"] .= ' ' . $entry["patronymikon"];
207: if (array_key_exists("etternavn", $entry))
208: $entry["navn"] .= ' ' . $entry["etternavn"];
209: }
210: else if ($persondata != NULL && ($field == "mor" || $field == "far" || $field == "barn" || $field == "partner")) {
211: $entry[$field] = $this->processField($field, $persondata, $this->rollerMapping);
212: }
213: }
214: }
215: return $entry;
216: }
217:
218: private function processDAEntry($persondata) {
219:
220: $entry = array();
221: $id = '';
222: if (property_exists($persondata, "individual")) {
223: $entry["individual"] = $this->getEntry($persondata->individual, $persondata);
224: if (property_exists($persondata->individual, "autoid")) {
225: $id = $persondata->individual->autoid;
226: } else if (property_exists($persondata->individual, "gen_auto_id")) {
227: $id = $persondata->individual->gen_auto_id;
228: $persondata->individual->autoid = $persondata->individual->gen_auto_id;
229: }
230: }
231: if (property_exists($persondata, "individuals")) {
232: $entry["other"] = array();
233: foreach ($persondata->individuals as $individ) {
234: if (property_exists($individ, "autoid") && $individ->autoid != $id) {
235: if (property_exists($individ, "rolle") && !empty($individ->rolle)) {
236:
237: $entry["other"][$individ->rolle] = $this->getEntry($individ, NULL);
238: } else {
239:
240: $entry["other"]["undef"] = $this->getEntry($individ, NULL);
241: }
242: }
243: }
244: }
245: return $entry;
246: }
247:
248: public function personExists($pfid) {
249: $pson = new Person();
250: $ids = $pson->getPersonForPFID($pfid);
251: if ($ids != NULL)
252: return $ids["pid"];
253: else
254: return NULL;
255: }
256:
257: private function processFamilies($families) {
258: $processed = array();
259: $processed['Partner og barn'] = array();
260: $processed['Foreldre og søsken'] = array();
261: foreach ($families as $f) {
262: if (array_key_exists('Foreldre og søsken', $f)) {
263: foreach ($f['Foreldre og søsken'] as $family)
264: $processed['Foreldre og søsken'][] = $family;
265: }
266: if (array_key_exists('Partner og barn', $f)) {
267: foreach ($f['Partner og barn'] as $family)
268: $processed['Partner og barn'][] = $family;
269: }
270: }
271: return $processed;
272: }
273:
274: private function wrappDate($date) {
275: if (strlen($date) == 1)
276: return '0' . $date;
277: else
278: return $date;
279: }
280:
281: public function getEntries($id) {
282: $entries = $this->getDAPerson($id);
283: if (!empty($entries)) {
284:
285: $oneentry = $this->processDAEntry($entries);
286: $family = $this->getFamilyforFK($entries, $oneentry);
287: return array("family" => $family, "entry" => $oneentry);
288: } else
289: return NULL;
290: }
291:
292: public function getData($id) {
293: $entries = $this->getDAPerson($id);
294:
295: return $entries;
296: }
297:
298: public function getPersonData($id) {
299: $entries = $this->getDAPerson($id);
300: $persondata = $this->getPersonfromFK($entries);
301: $oneentry = $this->processDAEntry($entries);
302: $family = $this->getFamilyforFK($entries, $oneentry);
303: $person['family'] = $family;
304: $person['persondata'] = $persondata;
305: $allentries = array();
306: $allentries[] = $oneentry;
307: $person['entries'] = $allentries;
308: return $person;
309: }
310:
311: }
312: