1: <?php
2:
3:
4: namespace app\controllers;
5:
6: use \mako\http\routing\Controller;
7: use \mako\syringe\ContainerAwareTrait;
8: use \mako\auth\Gatekeeper;
9: use app\models\Celebrity;
10: use app\models\Example;
11:
12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
22:
23:
24: class PersonController extends Controller
25: {
26: use ContainerAwareTrait;
27: const DAURL = "http://digitalarkivet.arkivverket.no/api/person/";
28: const json = "/json";
29: protected $fields = array( "id"=>"pfid", "avispersonid"=>"pfid","pfid"=>"pfid", "fornavn"=>"fornavn", "forenamn"=>"fornavn", "etternavn"=>"etternavn", "etternamn"=>"etternavn", "slektsnavn"=>"etternavn", "patronymikon"=>"patronymikon", "kjonn"=>"kjonn",
30: "fodselsaar"=>"fodselsaar", "year_birth"=>"fodselsaar", "fodselsdato"=>"fodselsdato", "dodsdato"=>"dodsdato", "fodested"=>"fodested", "dodssted"=>"dodssted");
31:
32: protected $tableFields = array( "rolle"=>"rolle", "navn"=>"navn", "bosted"=>"bosted", "bustad"=>"bosted" , "familiestilling"=>"familiestilling", "sivilstand"=>"sivilstand", "yrke"=>"yrke",
33: "stilling_stand"=>"yrke", "kildeid"=> "kildeid", "far"=>"", "mor"=>"", "barn"=>"", "partner"=>""
34:
35: );
36:
37: protected $rollerMapping = array(
38: "far"=> array("barn"=>"far", "konfirmant"=>"far", "brudgom"=>"brudgommens far", "brur"=>"bruras far","trulovar"=> "brudgom"),
39: "mor"=> array("barn"=>"mor", "konfirmant"=>"mor", "trulovar"=> "brur"),
40: "barn"=> array("mor"=>"barn", "far"=>"barn", "mor"=>"konfirmant", "far"=>"konfirmant", "fadder"=>"barn", "bruras far"=> "brur", "brur far"=> "brur", "brudgommens far"=>"brudgom"),
41: "partner"=> array("mor"=>"far", "far"=>"mor", "brur"=>"brudgom", "brudgom"=>"brur")
42: );
43:
44: protected $familyMapping = array(
45: "far"=> array("barn"=>"far", "konfirmant"=>"far", "brudgom"=>"brudgommens far", "brur"=>"bruras far"),
46: "mor"=> array("barn"=>"mor", "konfirmant"=>"mor"),
47: "barn"=> array("mor"=>"barn", "far"=>"barn", "mor"=>"konfirmant", "far"=>"konfirmant", "bruras far"=> "brur", "brur far"=> "brur", "brudgommens far"=>"brudgom"),
48: "partner"=> array("mor"=>"far", "far"=>"mor", "brur"=>"brudgom", "brudgom"=>"brur")
49: );
50:
51: public $types = array('da'=>'daid', 'hbr'=>'hbrid','avis'=>'avisid');
52:
53:
54: protected $references = array("new"=>array("newurl", "newtitle"), "old"=>array("oldurl", "oldtitle"));
55:
56: private $testperson;
57: private $debug;
58:
59: private $facade;
60:
61: private function isAuthenticated()
62: {
63: return $this->gatekeeper->isLoggedIn();
64: }
65:
66: private function getUserId()
67: {
68: $user = $this->gatekeeper->getUser();
69: if ($user != NULL)
70: {
71: return $user->getId();
72: }
73: else
74: return NULL;
75: }
76:
77: private function getRefsFromRequest()
78: {
79:
80: $prefix = array("exist", "new");
81: $base = array("title", "url", "id");
82: $references = NULL;
83: foreach($prefix as $p)
84: {
85: for ($i = 0; $i < 100 ; $i++)
86: {
87: if ($this->request->has($p.$base[0].$i) && $this->request->has($p.$base[1].$i))
88: {
89: $title = $this->request->data($p.$base[0].$i);
90: $url = $this->request->data($p.$base[1].$i);
91: $id = $this->request->data($p.$base[2].$i);
92:
93: if ($references == NULL)
94: {
95: $references = array($prefix[0]=>array(), $prefix[1]=>array());
96: }
97: if ($id != NULL)
98: {
99: $references[$p][] = array($base[0]=>$title, $base[1]=>$url, $base[2]=>$id);
100: }
101: else
102: {
103: $references[$p][] = array($base[0]=>$title, $base[1]=>$url);
104:
105: }
106: }
107: else
108: {
109: continue;
110: }
111: }
112: }
113: return $references;
114: }
115:
116: private function getRefs($fromRequest)
117: {
118: $references = array();
119: if ($fromRequest === true)
120: {
121: $references = $this->getRefsFromRequest();
122: }
123: else
124: {
125: }
126: return $references;
127: }
128:
129: private function processSelebrity($celebrity, $current)
130: {
131: $article = $celebrity::where('pfid', '=', $current["id"])->first();
132: if (!empty($article))
133: {
134: if ($article->type != $current["type"])
135: {
136: $article->type = $current["type"];
137: $article->save();
138: }
139: }
140: else
141: {
142: $celebrity->pfid = $current["id"];
143: $celebrity->type = $current["type"];
144: $celebrity->save();
145: }
146: }
147:
148:
149: private function getReqRefs($request, $type)
150: {
151:
152: $newrefs = array();
153: $urls = array();
154: $titles = array();
155: $ids = array();
156: $lng = strlen ($type);
157: foreach ($request as $post=>$value)
158: {
159: if (strlen ($post) > $lng+3 && substr ($post, 0, $lng+3) == $type.'url')
160: {
161: $indx = substr ($post, $lng+3, (strlen ($post)-($lng+3)));
162: $urls[$indx] = $value;
163: }
164: else if (strlen ($post) > $lng+5 && substr ($post, 0, $lng+5) == $type.'title')
165: {
166: $indx = substr ($post, $lng+5, (strlen ($post)-($lng+5)));
167: $titles[$indx] = $value;
168: }
169: else if ($type == 'exist' && strlen ($post) > $lng+2 && substr ($post, 0, $lng+2) == $type.'id')
170: {
171: $indx = substr ($post, $lng+2, (strlen ($post)-($lng+2)));
172: $ids[$indx] = $value;
173: }
174:
175: }
176:
177: foreach ($urls as $indx=>$url)
178: {
179: if ( !empty($url) && array_key_exists($indx, $titles) && !empty($titles[$indx]))
180: {
181:
182: $ref = array('url'=>$url, 'title'=>$titles[$indx]);
183: if ($type == 'exist' && !empty($ids) && array_key_exists($indx, $ids) && !empty($ids[$indx]))
184: {
185:
186: $newrefs[$ids[$indx]] = $ref;
187: }
188: else
189: {
190: $newrefs[] = $ref;
191: }
192: }
193: }
194: return $newrefs;
195: }
196:
197: private function savePersonRef($request, $user)
198: {
199:
200: $this->debug = array();
201: $newrefs = $this->getReqRefs($request, 'new');
202:
203: $oldrefs = $this->getReqRefs($request, 'exist');
204: $this->debug["new"] = $newrefs;
205: $this->debug["old"] = $oldrefs;
206: $this->facade->updateRefs($oldrefs, $user);
207: $this->facade->saveRefs($newrefs, $user);
208:
209: }
210:
211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221:
222:
223: public function show($type, $id)
224: {
225: $this->facade = new PersonFacade($type, $id);
226: $this->session->put('lasturl', $this->urlBuilder->current());
227: $personcart = new PersonCart();
228: $personcart->setSession($this->session);
229: $cart = NULL;
230: $opencart = false;
231: $test = '';
232: $edit = false;
233: $editref = false;
234: $person = array();
235: $useautoid = false;
236: $currenttype = $type;
237: $currentid = $id;
238: $exist = NULL;
239: $data = NULL;
240: $references = NULL;
241: if ($_REQUEST != NULL)
242: {
243: if (array_key_exists('editBio', $_REQUEST) )
244: {
245: $field = 'biocontent';
246: $bio = array($this->request->data($field));
247:
248: $fields = array('remarks');
249:
250: $user = array("id"=>$this->getUserId(), "marker"=>"m");
251: if ($user["id"] != NULL)
252: {
253: $this->facade->updateField($fields, $bio, $user);
254: }
255: }
256: else if (array_key_exists('editRef', $_REQUEST))
257: {
258: $editref = true;
259: }
260: else if (array_key_exists('addRef', $_REQUEST))
261: {
262: $editref = true;
263: $references = array();
264: $references = $this->getRefs(true);
265: }
266: else if (array_key_exists('saveRef', $_REQUEST))
267: {
268:
269: $user = array("id"=>$this->getUserId(), "marker"=>"m");
270: if ($user["id"] != NULL)
271: {
272: $opp = $this->savePersonRef($_REQUEST, $user);
273: }
274: }
275: else if (array_key_exists('celebrity', $_REQUEST))
276: {
277: $current = $this->facade->getCurrent();
278: $celebrity = new Celebrity();
279: $this->processSelebrity($celebrity, $current);
280:
281: }
282: else if (array_key_exists('example', $_REQUEST))
283: {
284: $current = $this->facade->getCurrent();
285: $example = new Example();
286: $this->processSelebrity($example, $current);
287:
288:
289:
290: }
291: else if (array_key_exists('openeditpersondetails', $_REQUEST))
292: {
293: $edit = true;
294: }
295: else if (array_key_exists('savepersondata', $_REQUEST))
296: {
297: $pm = new PersonMappings();
298: $fields = array();
299: $values = array();
300: foreach ($pm->webDbMapping as $map=>$value)
301: {
302:
303: if (array_key_exists($map, $_REQUEST))
304: {
305: $fields[] = $value;
306: $values[] = $_REQUEST[$map];
307: }
308: }
309: $user = array("id"=>$this->getUserId(), "marker"=>"m");
310: if ($user["id"] != NULL)
311: {
312: $this->facade->updateField($fields, $values, $user);
313: }
314: }
315: else if (array_key_exists('addmerge', $_REQUEST))
316: {
317:
318: $cart = $personcart->addToCart($type, $id, "score");
319: }
320: else if (array_key_exists('open', $_REQUEST))
321: {
322:
323: $opencart = true;
324: }
325: else if (array_key_exists('close', $_REQUEST))
326: {
327:
328: $opencart = false;
329: }
330: else if (array_key_exists('remove', $_REQUEST))
331: {
332:
333: $personcart->removeFromCart($_REQUEST);
334: }
335: else if (array_key_exists('merge', $_REQUEST))
336: {
337:
338: $user = array("id"=>$this->getUserId(), "marker"=>"m");
339: if ($user["id"] != NULL)
340: {
341: $newperson = $personcart->merge($_REQUEST, $user);
342:
343: $this->facade = new PersonFacade($type, $id);
344: }
345:
346: }
347: else
348: {
349: }
350: }
351: $person = $this->facade->getPerson();
352: $cart = $personcart->getCart();
353: $message = $personcart->getMessage();
354: $person["authenticated"] = $this->isAuthenticated();
355: $person ["edit"] = $edit;
356: $person["editref"] = $editref;
357:
358: if ($references != NULL)
359: {
360: $person["persondata"]["references"] = $references;
361: }
362: return $this->view->render('personview.showperson', array('type'=>$type, 'id'=>$id, 'person'=>$person, 'cart'=>array('data'=>$cart, 'open'=>$opencart), 'message'=>$message));
363: }
364: }