diff options
Diffstat (limited to 'app/Http/Controllers/EditFamilyController.php')
| -rw-r--r-- | app/Http/Controllers/EditFamilyController.php | 674 |
1 files changed, 342 insertions, 332 deletions
diff --git a/app/Http/Controllers/EditFamilyController.php b/app/Http/Controllers/EditFamilyController.php index 22db077a1c..bdf5dfbe5d 100644 --- a/app/Http/Controllers/EditFamilyController.php +++ b/app/Http/Controllers/EditFamilyController.php @@ -30,392 +30,402 @@ use Symfony\Component\HttpFoundation\Response; /** * Controller for edit forms and responses. */ -class EditFamilyController extends AbstractEditController { - /** - * @param Request $request - * - * @return Response - */ - public function reorderChildren(Request $request): Response { - /** @var Tree $tree */ - $tree = $request->attributes->get('tree'); - $xref = $request->get('xref'); - $family = Family::getInstance($xref, $tree); +class EditFamilyController extends AbstractEditController +{ + /** + * @param Request $request + * + * @return Response + */ + public function reorderChildren(Request $request): Response + { + /** @var Tree $tree */ + $tree = $request->attributes->get('tree'); + $xref = $request->get('xref'); + $family = Family::getInstance($xref, $tree); - $this->checkFamilyAccess($family, true); + $this->checkFamilyAccess($family, true); - $title = $family->getFullName() . ' — ' . I18N::translate('Re-order children'); + $title = $family->getFullName() . ' — ' . I18N::translate('Re-order children'); - return $this->viewResponse('edit/reorder-children', [ - 'title' => $title, - 'family' => $family, - ]); - } + return $this->viewResponse('edit/reorder-children', [ + 'title' => $title, + 'family' => $family, + ]); + } - /** - * @param Request $request - * - * @return Response - */ - public function reorderChildrenAction(Request $request): Response { - /** @var Tree $tree */ - $tree = $request->attributes->get('tree'); - $xref = $request->get('xref'); - $order = (array) $request->get('order', []); - $family = Family::getInstance($xref, $tree); + /** + * @param Request $request + * + * @return Response + */ + public function reorderChildrenAction(Request $request): Response + { + /** @var Tree $tree */ + $tree = $request->attributes->get('tree'); + $xref = $request->get('xref'); + $order = (array)$request->get('order', []); + $family = Family::getInstance($xref, $tree); - $this->checkFamilyAccess($family, true); + $this->checkFamilyAccess($family, true); - $dummy_facts = ['0 @' . $family->getXref() . '@ FAM']; - $sort_facts = []; - $keep_facts = []; + $dummy_facts = ['0 @' . $family->getXref() . '@ FAM']; + $sort_facts = []; + $keep_facts = []; - // Split facts into FAMS and other - foreach ($family->getFacts() as $fact) { - if ($fact->getTag() === 'CHIL') { - $sort_facts[$fact->getFactId()] = $fact->getGedcom(); - } else { - $keep_facts[] = $fact->getGedcom(); - } - } + // Split facts into FAMS and other + foreach ($family->getFacts() as $fact) { + if ($fact->getTag() === 'CHIL') { + $sort_facts[$fact->getFactId()] = $fact->getGedcom(); + } else { + $keep_facts[] = $fact->getGedcom(); + } + } - // Sort the facts - uksort($sort_facts, function ($x, $y) use ($order) { - return array_search($x, $order) - array_search($y, $order); - }); + // Sort the facts + uksort($sort_facts, function ($x, $y) use ($order) { + return array_search($x, $order) - array_search($y, $order); + }); - // Merge the facts - $gedcom = implode("\n", array_merge($dummy_facts, $sort_facts, $keep_facts)); + // Merge the facts + $gedcom = implode("\n", array_merge($dummy_facts, $sort_facts, $keep_facts)); - $family->updateRecord($gedcom, false); + $family->updateRecord($gedcom, false); - return new RedirectResponse($family->url()); - } + return new RedirectResponse($family->url()); + } - /** - * @param Request $request - * - * @return Response - */ - public function addChild(Request $request): Response { - /** @var Tree $tree */ - $tree = $request->attributes->get('tree'); + /** + * @param Request $request + * + * @return Response + */ + public function addChild(Request $request): Response + { + /** @var Tree $tree */ + $tree = $request->attributes->get('tree'); - $xref = $request->get('xref', ''); - $gender = $request->get('gender', 'U'); + $xref = $request->get('xref', ''); + $gender = $request->get('gender', 'U'); - $family = Family::getInstance($xref, $tree); + $family = Family::getInstance($xref, $tree); - $this->checkFamilyAccess($family, true); + $this->checkFamilyAccess($family, true); - $title = $family->getFullName() . ' - ' . I18N::translate('Add a child'); + $title = $family->getFullName() . ' - ' . I18N::translate('Add a child'); - return $this->viewResponse('edit/new-individual', [ - 'tree' => $tree, - 'title' => $title, - 'nextaction' => 'add_child_to_family_action', - 'individual' => null, - 'family' => $family, - 'name_fact' => null, - 'famtag' => 'CHIL', - 'gender' => $gender, - ]); - } + return $this->viewResponse('edit/new-individual', [ + 'tree' => $tree, + 'title' => $title, + 'nextaction' => 'add_child_to_family_action', + 'individual' => null, + 'family' => $family, + 'name_fact' => null, + 'famtag' => 'CHIL', + 'gender' => $gender, + ]); + } - /** - * @param Request $request - * - * @return RedirectResponse - */ - public function addChildAction(Request $request): RedirectResponse { - /** @var Tree $tree */ - $tree = $request->attributes->get('tree'); + /** + * @param Request $request + * + * @return RedirectResponse + */ + public function addChildAction(Request $request): RedirectResponse + { + /** @var Tree $tree */ + $tree = $request->attributes->get('tree'); - $xref = $request->get('xref', ''); + $xref = $request->get('xref', ''); - $family = Family::getInstance($xref, $tree); + $family = Family::getInstance($xref, $tree); - $this->checkFamilyAccess($family, true); + $this->checkFamilyAccess($family, true); - $PEDI = $request->get('PEDI', ''); - $keep_chan = (bool) $request->get('keep_chan'); + $PEDI = $request->get('PEDI', ''); + $keep_chan = (bool)$request->get('keep_chan'); - global $glevels, $tag, $text, $islink; - $glevels = $request->get('glevels', []); - $tag = $request->get('tag', []); - $text = $request->get('text', []); - $islink = $request->get('islink', []); + global $glevels, $tag, $text, $islink; + $glevels = $request->get('glevels', []); + $tag = $request->get('tag', []); + $text = $request->get('text', []); + $islink = $request->get('islink', []); - $this->splitSource(); - $gedrec = '0 @REF@ INDI'; - $gedrec .= $this->addNewName($tree); - $gedrec .= $this->addNewSex(); - if (preg_match_all('/([A-Z0-9_]+)/', $tree->getPreference('QUICK_REQUIRED_FACTS'), $matches)) { - foreach ($matches[1] as $match) { - $gedrec .= $this->addNewFact($tree, $match); - } - } - $gedrec .= "\n" . GedcomCodePedi::createNewFamcPedi($PEDI, $xref); - if ((bool) $request->get('SOUR_INDI')) { - $gedrec = $this->handleUpdates($gedrec); - } else { - $gedrec = $this->updateRest($gedrec); - } + $this->splitSource(); + $gedrec = '0 @REF@ INDI'; + $gedrec .= $this->addNewName($tree); + $gedrec .= $this->addNewSex(); + if (preg_match_all('/([A-Z0-9_]+)/', $tree->getPreference('QUICK_REQUIRED_FACTS'), $matches)) { + foreach ($matches[1] as $match) { + $gedrec .= $this->addNewFact($tree, $match); + } + } + $gedrec .= "\n" . GedcomCodePedi::createNewFamcPedi($PEDI, $xref); + if ((bool)$request->get('SOUR_INDI')) { + $gedrec = $this->handleUpdates($gedrec); + } else { + $gedrec = $this->updateRest($gedrec); + } - // Create the new child - $new_child = $family->getTree()->createRecord($gedrec); + // Create the new child + $new_child = $family->getTree()->createRecord($gedrec); - // Insert new child at the right place - $done = false; - foreach ($family->getFacts('CHIL') as $fact) { - $old_child = $fact->getTarget(); - if ($old_child && Date::compare($new_child->getEstimatedBirthDate(), $old_child->getEstimatedBirthDate()) < 0) { - // Insert before this child - $family->updateFact($fact->getFactId(), '1 CHIL @' . $new_child->getXref() . "@\n" . $fact->getGedcom(), !$keep_chan); - $done = true; - break; - } - } - if (!$done) { - // Append child at end - $family->createFact('1 CHIL @' . $new_child->getXref() . '@', !$keep_chan); - } + // Insert new child at the right place + $done = false; + foreach ($family->getFacts('CHIL') as $fact) { + $old_child = $fact->getTarget(); + if ($old_child && Date::compare($new_child->getEstimatedBirthDate(), $old_child->getEstimatedBirthDate()) < 0) { + // Insert before this child + $family->updateFact($fact->getFactId(), '1 CHIL @' . $new_child->getXref() . "@\n" . $fact->getGedcom(), !$keep_chan); + $done = true; + break; + } + } + if (!$done) { + // Append child at end + $family->createFact('1 CHIL @' . $new_child->getXref() . '@', !$keep_chan); + } - if ($request->get('goto') === 'new') { - return new RedirectResponse($new_child->url()); - } else { - return new RedirectResponse($family->url()); - } - } + if ($request->get('goto') === 'new') { + return new RedirectResponse($new_child->url()); + } else { + return new RedirectResponse($family->url()); + } + } - /** - * @param Request $request - * - * @return Response - */ - public function addSpouse(Request $request): Response { - /** @var Tree $tree */ - $tree = $request->attributes->get('tree'); + /** + * @param Request $request + * + * @return Response + */ + public function addSpouse(Request $request): Response + { + /** @var Tree $tree */ + $tree = $request->attributes->get('tree'); - $xref = $request->get('xref', ''); - $famtag = $request->get('famtag', ''); + $xref = $request->get('xref', ''); + $famtag = $request->get('famtag', ''); - $family = Family::getInstance($xref, $tree); + $family = Family::getInstance($xref, $tree); - $this->checkFamilyAccess($family, true); + $this->checkFamilyAccess($family, true); - if ($famtag === 'WIFE') { - $title = I18N::translate('Add a wife'); - $gender = 'F'; - } else { - $title = I18N::translate('Add a husband'); - $gender = 'M'; - } + if ($famtag === 'WIFE') { + $title = I18N::translate('Add a wife'); + $gender = 'F'; + } else { + $title = I18N::translate('Add a husband'); + $gender = 'M'; + } - return $this->viewResponse('edit/new-individual', [ - 'tree' => $tree, - 'title' => $title, - 'nextaction' => 'add_spouse_to_family_action', - 'individual' => null, - 'family' => $family, - 'name_fact' => null, - 'famtag' => $famtag, - 'gender' => $gender, - ]); - } + return $this->viewResponse('edit/new-individual', [ + 'tree' => $tree, + 'title' => $title, + 'nextaction' => 'add_spouse_to_family_action', + 'individual' => null, + 'family' => $family, + 'name_fact' => null, + 'famtag' => $famtag, + 'gender' => $gender, + ]); + } - /** - * @param Request $request - * - * @return RedirectResponse - */ - public function addSpouseAction(Request $request): RedirectResponse { - /** @var Tree $tree */ - $tree = $request->attributes->get('tree'); + /** + * @param Request $request + * + * @return RedirectResponse + */ + public function addSpouseAction(Request $request): RedirectResponse + { + /** @var Tree $tree */ + $tree = $request->attributes->get('tree'); - $xref = $request->get('xref', ''); + $xref = $request->get('xref', ''); - $family = Family::getInstance($xref, $tree); + $family = Family::getInstance($xref, $tree); - $this->checkFamilyAccess($family, true); + $this->checkFamilyAccess($family, true); - $this->glevels = $request->get('glevels', []); - $this->tag = $request->get('tag', []); - $this->text = $request->get('text', []); - $this->islink = $request->get('islink', []); + $this->glevels = $request->get('glevels', []); + $this->tag = $request->get('tag', []); + $this->text = $request->get('text', []); + $this->islink = $request->get('islink', []); - // Create the new spouse - $this->splitSource(); // separate SOUR record from the rest + // Create the new spouse + $this->splitSource(); // separate SOUR record from the rest - $gedrec = '0 @REF@ INDI'; - $gedrec .= $this->addNewName($tree); - $gedrec .= $this->addNewSex(); - if (preg_match_all('/([A-Z0-9_]+)/', $tree->getPreference('QUICK_REQUIRED_FACTS'), $matches)) { - foreach ($matches[1] as $match) { - $gedrec .= $this->addNewFact($tree, $match); - } - } + $gedrec = '0 @REF@ INDI'; + $gedrec .= $this->addNewName($tree); + $gedrec .= $this->addNewSex(); + if (preg_match_all('/([A-Z0-9_]+)/', $tree->getPreference('QUICK_REQUIRED_FACTS'), $matches)) { + foreach ($matches[1] as $match) { + $gedrec .= $this->addNewFact($tree, $match); + } + } - if ((bool) $request->get('SOUR_INDI')) { - $gedrec = $this->handleUpdates($gedrec); - } else { - $gedrec = $this->updateRest($gedrec); - } - $gedrec .= "\n1 FAMS @" . $family->getXref() . '@'; - $spouse = $tree->createRecord($gedrec); + if ((bool)$request->get('SOUR_INDI')) { + $gedrec = $this->handleUpdates($gedrec); + } else { + $gedrec = $this->updateRest($gedrec); + } + $gedrec .= "\n1 FAMS @" . $family->getXref() . '@'; + $spouse = $tree->createRecord($gedrec); - // Update the existing family - add marriage, etc - if ($family->getFirstFact('HUSB')) { - $family->createFact('1 WIFE @' . $spouse->getXref() . '@', true); - } else { - $family->createFact('1 HUSB @' . $spouse->getXref() . '@', true); - } - $famrec = ''; - if (preg_match_all('/([A-Z0-9_]+)/', $tree->getPreference('QUICK_REQUIRED_FAMFACTS'), $matches)) { - foreach ($matches[1] as $match) { - $famrec .= $this->addNewFact($tree, $match); - } - } - if ((bool) $request->get('SOUR_FAM')) { - $famrec = $this->handleUpdates($famrec); - } else { - $famrec = $this->updateRest($famrec); - } - $family->createFact(trim($famrec), true); // trim leading \n + // Update the existing family - add marriage, etc + if ($family->getFirstFact('HUSB')) { + $family->createFact('1 WIFE @' . $spouse->getXref() . '@', true); + } else { + $family->createFact('1 HUSB @' . $spouse->getXref() . '@', true); + } + $famrec = ''; + if (preg_match_all('/([A-Z0-9_]+)/', $tree->getPreference('QUICK_REQUIRED_FAMFACTS'), $matches)) { + foreach ($matches[1] as $match) { + $famrec .= $this->addNewFact($tree, $match); + } + } + if ((bool)$request->get('SOUR_FAM')) { + $famrec = $this->handleUpdates($famrec); + } else { + $famrec = $this->updateRest($famrec); + } + $family->createFact(trim($famrec), true); // trim leading \n - if ($request->get('goto') === 'new') { - return new RedirectResponse($spouse->url()); - } else { - return new RedirectResponse($family->url()); - } - } + if ($request->get('goto') === 'new') { + return new RedirectResponse($spouse->url()); + } else { + return new RedirectResponse($family->url()); + } + } - /** - * @param Request $request - * - * @return Response - */ - public function changeFamilyMembers(Request $request): Response { - /** @var Tree $tree */ - $tree = $request->attributes->get('tree'); + /** + * @param Request $request + * + * @return Response + */ + public function changeFamilyMembers(Request $request): Response + { + /** @var Tree $tree */ + $tree = $request->attributes->get('tree'); - $xref = $request->get('xref', ''); - $family = Family::getInstance($xref, $tree); - $this->checkFamilyAccess($family, true); + $xref = $request->get('xref', ''); + $family = Family::getInstance($xref, $tree); + $this->checkFamilyAccess($family, true); - $title = I18N::translate('Change family members') . ' – ' . $family->getFullName(); + $title = I18N::translate('Change family members') . ' – ' . $family->getFullName(); - return $this->viewResponse('edit/change-family-members', [ - 'tree' => $tree, - 'title' => $title, - 'family' => $family, - 'father' => $family->getHusband(), - 'mother' => $family->getWife(), - 'children' => $family->getChildren(), - ]); - } + return $this->viewResponse('edit/change-family-members', [ + 'tree' => $tree, + 'title' => $title, + 'family' => $family, + 'father' => $family->getHusband(), + 'mother' => $family->getWife(), + 'children' => $family->getChildren(), + ]); + } - /** - * @param Request $request - * - * @return RedirectResponse - */ - public function changeFamilyMembersAction(Request $request): RedirectResponse { - /** @var Tree $tree */ - $tree = $request->attributes->get('tree'); + /** + * @param Request $request + * + * @return RedirectResponse + */ + public function changeFamilyMembersAction(Request $request): RedirectResponse + { + /** @var Tree $tree */ + $tree = $request->attributes->get('tree'); - $xref = $request->get('xref', ''); - $family = Family::getInstance($xref, $tree); - $this->checkFamilyAccess($family, true); + $xref = $request->get('xref', ''); + $family = Family::getInstance($xref, $tree); + $this->checkFamilyAccess($family, true); - $HUSB = $request->get('HUSB', ''); - $WIFE = $request->get('WIFE', ''); - $CHIL = $request->get('CHIL', []); + $HUSB = $request->get('HUSB', ''); + $WIFE = $request->get('WIFE', ''); + $CHIL = $request->get('CHIL', []); - // Current family members - $old_father = $family->getHusband(); - $old_mother = $family->getWife(); - $old_children = $family->getChildren(); + // Current family members + $old_father = $family->getHusband(); + $old_mother = $family->getWife(); + $old_children = $family->getChildren(); - // New family members - $new_father = Individual::getInstance($HUSB, $tree); - $new_mother = Individual::getInstance($WIFE, $tree); - $new_children = []; - foreach ($CHIL as $child) { - $new_children[] = Individual::getInstance($child, $tree); - } + // New family members + $new_father = Individual::getInstance($HUSB, $tree); + $new_mother = Individual::getInstance($WIFE, $tree); + $new_children = []; + foreach ($CHIL as $child) { + $new_children[] = Individual::getInstance($child, $tree); + } - if ($old_father !== $new_father) { - if ($old_father) { - // Remove old FAMS link - foreach ($old_father->getFacts('FAMS') as $fact) { - if ($fact->getTarget() === $family) { - $old_father->deleteFact($fact->getFactId(), true); - } - } - // Remove old HUSB link - foreach ($family->getFacts('HUSB|WIFE') as $fact) { - if ($fact->getTarget() === $old_father) { - $family->deleteFact($fact->getFactId(), true); - } - } - } - if ($new_father) { - // Add new FAMS link - $new_father->createFact('1 FAMS @' . $family->getXref() . '@', true); - // Add new HUSB link - $family->createFact('1 HUSB @' . $new_father->getXref() . '@', true); - } - } + if ($old_father !== $new_father) { + if ($old_father) { + // Remove old FAMS link + foreach ($old_father->getFacts('FAMS') as $fact) { + if ($fact->getTarget() === $family) { + $old_father->deleteFact($fact->getFactId(), true); + } + } + // Remove old HUSB link + foreach ($family->getFacts('HUSB|WIFE') as $fact) { + if ($fact->getTarget() === $old_father) { + $family->deleteFact($fact->getFactId(), true); + } + } + } + if ($new_father) { + // Add new FAMS link + $new_father->createFact('1 FAMS @' . $family->getXref() . '@', true); + // Add new HUSB link + $family->createFact('1 HUSB @' . $new_father->getXref() . '@', true); + } + } - if ($old_mother !== $new_mother) { - if ($old_mother) { - // Remove old FAMS link - foreach ($old_mother->getFacts('FAMS') as $fact) { - if ($fact->getTarget() === $family) { - $old_mother->deleteFact($fact->getFactId(), true); - } - } - // Remove old WIFE link - foreach ($family->getFacts('HUSB|WIFE') as $fact) { - if ($fact->getTarget() === $old_mother) { - $family->deleteFact($fact->getFactId(), true); - } - } - } - if ($new_mother) { - // Add new FAMS link - $new_mother->createFact('1 FAMS @' . $family->getXref() . '@', true); - // Add new WIFE link - $family->createFact('1 WIFE @' . $new_mother->getXref() . '@', true); - } - } + if ($old_mother !== $new_mother) { + if ($old_mother) { + // Remove old FAMS link + foreach ($old_mother->getFacts('FAMS') as $fact) { + if ($fact->getTarget() === $family) { + $old_mother->deleteFact($fact->getFactId(), true); + } + } + // Remove old WIFE link + foreach ($family->getFacts('HUSB|WIFE') as $fact) { + if ($fact->getTarget() === $old_mother) { + $family->deleteFact($fact->getFactId(), true); + } + } + } + if ($new_mother) { + // Add new FAMS link + $new_mother->createFact('1 FAMS @' . $family->getXref() . '@', true); + // Add new WIFE link + $family->createFact('1 WIFE @' . $new_mother->getXref() . '@', true); + } + } - foreach ($old_children as $old_child) { - if ($old_child && !in_array($old_child, $new_children)) { - // Remove old FAMC link - foreach ($old_child->getFacts('FAMC') as $fact) { - if ($fact->getTarget() === $family) { - $old_child->deleteFact($fact->getFactId(), true); - } - } - // Remove old CHIL link - foreach ($family->getFacts('CHIL') as $fact) { - if ($fact->getTarget() === $old_child) { - $family->deleteFact($fact->getFactId(), true); - } - } - } - } + foreach ($old_children as $old_child) { + if ($old_child && !in_array($old_child, $new_children)) { + // Remove old FAMC link + foreach ($old_child->getFacts('FAMC') as $fact) { + if ($fact->getTarget() === $family) { + $old_child->deleteFact($fact->getFactId(), true); + } + } + // Remove old CHIL link + foreach ($family->getFacts('CHIL') as $fact) { + if ($fact->getTarget() === $old_child) { + $family->deleteFact($fact->getFactId(), true); + } + } + } + } - foreach ($new_children as $new_child) { - if ($new_child && !in_array($new_child, $old_children)) { - // Add new FAMC link - $new_child->createFact('1 FAMC @' . $family->getXref() . '@', true); - // Add new CHIL link - $family->createFact('1 CHIL @' . $new_child->getXref() . '@', true); - } - } - return new RedirectResponse($family->url()); - } + foreach ($new_children as $new_child) { + if ($new_child && !in_array($new_child, $old_children)) { + // Add new FAMC link + $new_child->createFact('1 FAMC @' . $family->getXref() . '@', true); + // Add new CHIL link + $family->createFact('1 CHIL @' . $new_child->getXref() . '@', true); + } + } + + return new RedirectResponse($family->url()); + } } |
