summaryrefslogtreecommitdiff
path: root/app/Http/Controllers/EditGedcomRecordController.php
diff options
context:
space:
mode:
Diffstat (limited to 'app/Http/Controllers/EditGedcomRecordController.php')
-rw-r--r--app/Http/Controllers/EditGedcomRecordController.php799
1 files changed, 414 insertions, 385 deletions
diff --git a/app/Http/Controllers/EditGedcomRecordController.php b/app/Http/Controllers/EditGedcomRecordController.php
index 30034f0296..64d92bb228 100644
--- a/app/Http/Controllers/EditGedcomRecordController.php
+++ b/app/Http/Controllers/EditGedcomRecordController.php
@@ -36,468 +36,497 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
/**
* Controller for edit forms and responses.
*/
-class EditGedcomRecordController extends AbstractEditController {
- const GEDCOM_FACT_REGEX = '^(1 .*(\n2 .*(\n3 .*(\n4 .*(\n5 .*(\n6 .*))))))?$';
+class EditGedcomRecordController extends AbstractEditController
+{
+ const GEDCOM_FACT_REGEX = '^(1 .*(\n2 .*(\n3 .*(\n4 .*(\n5 .*(\n6 .*))))))?$';
- /**
- * Copy a fact to the clipboard.
- *
- * @param Request $request
- *
- * @return Response
- */
- public function copyFact(Request $request): Response {
- /** @var Tree $tree */
- $tree = $request->attributes->get('tree');
+ /**
+ * Copy a fact to the clipboard.
+ *
+ * @param Request $request
+ *
+ * @return Response
+ */
+ public function copyFact(Request $request): Response
+ {
+ /** @var Tree $tree */
+ $tree = $request->attributes->get('tree');
- $xref = $request->get('xref', '');
- $fact_id = $request->get('fact_id');
+ $xref = $request->get('xref', '');
+ $fact_id = $request->get('fact_id');
- $record = GedcomRecord::getInstance($xref, $tree);
+ $record = GedcomRecord::getInstance($xref, $tree);
- $this->checkRecordAccess($record, true);
+ $this->checkRecordAccess($record, true);
- foreach ($record->getFacts() as $fact) {
- if ($fact->getFactId() == $fact_id) {
- switch ($fact->getTag()) {
- case 'NOTE':
- case 'SOUR':
- case 'OBJE':
- $type = 'all'; // paste this anywhere
- break;
- default:
- $type = $record::RECORD_TYPE; // paste only to the same record type
- break;
- }
- $clipboard = Session::get('clipboard');
- if (!is_array($clipboard)) {
- $clipboard = [];
- }
- $clipboard[$fact_id] = [
- 'type' => $type,
- 'factrec' => $fact->getGedcom(),
- 'fact' => $fact->getTag(),
- ];
+ foreach ($record->getFacts() as $fact) {
+ if ($fact->getFactId() == $fact_id) {
+ switch ($fact->getTag()) {
+ case 'NOTE':
+ case 'SOUR':
+ case 'OBJE':
+ $type = 'all'; // paste this anywhere
+ break;
+ default:
+ $type = $record::RECORD_TYPE; // paste only to the same record type
+ break;
+ }
+ $clipboard = Session::get('clipboard');
+ if (!is_array($clipboard)) {
+ $clipboard = [];
+ }
+ $clipboard[$fact_id] = [
+ 'type' => $type,
+ 'factrec' => $fact->getGedcom(),
+ 'fact' => $fact->getTag(),
+ ];
- // The clipboard only holds 10 facts
- $clipboard = array_slice($clipboard, -10);
+ // The clipboard only holds 10 facts
+ $clipboard = array_slice($clipboard, -10);
- Session::put('clipboard', $clipboard);
- FlashMessages::addMessage(I18N::translate('The record has been copied to the clipboard.'));
- break;
- }
- }
+ Session::put('clipboard', $clipboard);
+ FlashMessages::addMessage(I18N::translate('The record has been copied to the clipboard.'));
+ break;
+ }
+ }
- return new Response;
- }
+ return new Response;
+ }
- /**
- * Delete a fact.
- *
- * @param Request $request
- *
- * @return Response
- */
- public function deleteFact(Request $request): Response {
- /** @var Tree $tree */
- $tree = $request->attributes->get('tree');
+ /**
+ * Delete a fact.
+ *
+ * @param Request $request
+ *
+ * @return Response
+ */
+ public function deleteFact(Request $request): Response
+ {
+ /** @var Tree $tree */
+ $tree = $request->attributes->get('tree');
- $xref = $request->get('xref', '');
- $fact_id = $request->get('fact_id');
+ $xref = $request->get('xref', '');
+ $fact_id = $request->get('fact_id');
- $record = GedcomRecord::getInstance($xref, $tree);
+ $record = GedcomRecord::getInstance($xref, $tree);
- $this->checkRecordAccess($record, true);
+ $this->checkRecordAccess($record, true);
- foreach ($record->getFacts() as $fact) {
- if ($fact->getFactId() == $fact_id && $fact->canShow() && $fact->canEdit()) {
- $record->deleteFact($fact_id, true);
- break;
- }
- }
+ foreach ($record->getFacts() as $fact) {
+ if ($fact->getFactId() == $fact_id && $fact->canShow() && $fact->canEdit()) {
+ $record->deleteFact($fact_id, true);
+ break;
+ }
+ }
- return new Response;
- }
+ return new Response;
+ }
- /**
- * Delete a record.
- *
- * @param Request $request
- *
- * @return Response
- */
- public function deleteRecord(Request $request): Response {
- /** @var Tree $tree */
- $tree = $request->attributes->get('tree');
+ /**
+ * Delete a record.
+ *
+ * @param Request $request
+ *
+ * @return Response
+ */
+ public function deleteRecord(Request $request): Response
+ {
+ /** @var Tree $tree */
+ $tree = $request->attributes->get('tree');
- $xref = $request->get('xref', '');
+ $xref = $request->get('xref', '');
- $record = GedcomRecord::getInstance($xref, $tree);
+ $record = GedcomRecord::getInstance($xref, $tree);
- $this->checkRecordAccess($record, true);
+ $this->checkRecordAccess($record, true);
- if ($record && Auth::isEditor($record->getTree()) && $record->canShow() && $record->canEdit()) {
- // Delete links to this record
- foreach (FunctionsDb::fetchAllLinks($record->getXref(), $record->getTree()->getTreeId()) as $xref) {
- $linker = GedcomRecord::getInstance($xref, $tree);
- $old_gedcom = $linker->getGedcom();
- $new_gedcom = $this->removeLinks($old_gedcom, $record->getXref());
- // FunctionsDb::fetch_all_links() does not take account of pending changes. The links (or even the
- // record itself) may have already been deleted.
- if ($old_gedcom !== $new_gedcom) {
- // If we have removed a link from a family to an individual, and it has only one member
- if (preg_match('/^0 @' . WT_REGEX_XREF . '@ FAM/', $new_gedcom) && preg_match_all('/\n1 (HUSB|WIFE|CHIL) @(' . WT_REGEX_XREF . ')@/', $new_gedcom, $match) == 1) {
- // Delete the family
- $family = GedcomRecord::getInstance($xref, $tree);
- FlashMessages::addMessage(/* I18N: %s is the name of a family group, e.g. “Husband name + Wife name” */
- I18N::translate('The family “%s” has been deleted because it only has one member.', $family->getFullName()));
- $family->deleteRecord();
- // Delete any remaining link to this family
- if ($match) {
- $relict = GedcomRecord::getInstance($match[2][0], $tree);
- $new_gedcom = $relict->getGedcom();
- $new_gedcom = $this->removeLinks($new_gedcom, $linker->getXref());
- $relict->updateRecord($new_gedcom, false);
- FlashMessages::addMessage(/* I18N: %s are names of records, such as sources, repositories or individuals */
- I18N::translate('The link from “%1$s” to “%2$s” has been deleted.', $relict->getFullName(), $family->getFullName()));
- }
- } else {
- // Remove links from $linker to $record
- FlashMessages::addMessage(/* I18N: %s are names of records, such as sources, repositories or individuals */
- I18N::translate('The link from “%1$s” to “%2$s” has been deleted.', $linker->getFullName(), $record->getFullName()));
- $linker->updateRecord($new_gedcom, false);
- }
- }
- }
- // Delete the record itself
- $record->deleteRecord();
- }
+ if ($record && Auth::isEditor($record->getTree()) && $record->canShow() && $record->canEdit()) {
+ // Delete links to this record
+ foreach (FunctionsDb::fetchAllLinks($record->getXref(), $record->getTree()->getTreeId()) as $xref) {
+ $linker = GedcomRecord::getInstance($xref, $tree);
+ $old_gedcom = $linker->getGedcom();
+ $new_gedcom = $this->removeLinks($old_gedcom, $record->getXref());
+ // FunctionsDb::fetch_all_links() does not take account of pending changes. The links (or even the
+ // record itself) may have already been deleted.
+ if ($old_gedcom !== $new_gedcom) {
+ // If we have removed a link from a family to an individual, and it has only one member
+ if (preg_match('/^0 @' . WT_REGEX_XREF . '@ FAM/', $new_gedcom) && preg_match_all('/\n1 (HUSB|WIFE|CHIL) @(' . WT_REGEX_XREF . ')@/', $new_gedcom, $match) == 1) {
+ // Delete the family
+ $family = GedcomRecord::getInstance($xref, $tree);
+ FlashMessages::addMessage(/* I18N: %s is the name of a family group, e.g. “Husband name + Wife name” */
+ I18N::translate('The family “%s” has been deleted because it only has one member.', $family->getFullName()));
+ $family->deleteRecord();
+ // Delete any remaining link to this family
+ if ($match) {
+ $relict = GedcomRecord::getInstance($match[2][0], $tree);
+ $new_gedcom = $relict->getGedcom();
+ $new_gedcom = $this->removeLinks($new_gedcom, $linker->getXref());
+ $relict->updateRecord($new_gedcom, false);
+ FlashMessages::addMessage(/* I18N: %s are names of records, such as sources, repositories or individuals */
+ I18N::translate('The link from “%1$s” to “%2$s” has been deleted.', $relict->getFullName(), $family->getFullName()));
+ }
+ } else {
+ // Remove links from $linker to $record
+ FlashMessages::addMessage(/* I18N: %s are names of records, such as sources, repositories or individuals */
+ I18N::translate('The link from “%1$s” to “%2$s” has been deleted.', $linker->getFullName(), $record->getFullName()));
+ $linker->updateRecord($new_gedcom, false);
+ }
+ }
+ }
+ // Delete the record itself
+ $record->deleteRecord();
+ }
- return new Response;
- }
+ return new Response;
+ }
- /**
- * Paste a fact from the clipboard into a record.
- *
- * @param Request $request
- *
- * @return Response
- */
- public function pasteFact(Request $request): Response {
- /** @var Tree $tree */
- $tree = $request->attributes->get('tree');
+ /**
+ * Paste a fact from the clipboard into a record.
+ *
+ * @param Request $request
+ *
+ * @return Response
+ */
+ public function pasteFact(Request $request): Response
+ {
+ /** @var Tree $tree */
+ $tree = $request->attributes->get('tree');
- $xref = $request->get('xref', '');
- $fact_id = $request->get('fact_id');
+ $xref = $request->get('xref', '');
+ $fact_id = $request->get('fact_id');
- $record = GedcomRecord::getInstance($xref, $tree);
+ $record = GedcomRecord::getInstance($xref, $tree);
- $this->checkRecordAccess($record, true);
+ $this->checkRecordAccess($record, true);
- $clipboard = Session::get('clipboard');
+ $clipboard = Session::get('clipboard');
- if (isset($clipboard[$fact_id])) {
- $record->createFact($clipboard[$fact_id]['factrec'], true);
- }
+ if (isset($clipboard[$fact_id])) {
+ $record->createFact($clipboard[$fact_id]['factrec'], true);
+ }
- return new Response;
- }
+ return new Response;
+ }
- /**
- * @param Request $request
- *
- * @return Response
- */
- public function editRawFact(Request $request): Response {
- /** @var Tree $tree */
- $tree = $request->attributes->get('tree');
- $xref = $request->get('xref');
- $fact_id = $request->get('fact_id');
- $record = GedcomRecord::getInstance($xref, $tree);
+ /**
+ * @param Request $request
+ *
+ * @return Response
+ */
+ public function editRawFact(Request $request): Response
+ {
+ /** @var Tree $tree */
+ $tree = $request->attributes->get('tree');
+ $xref = $request->get('xref');
+ $fact_id = $request->get('fact_id');
+ $record = GedcomRecord::getInstance($xref, $tree);
- $this->checkRecordAccess($record, true);
+ $this->checkRecordAccess($record, true);
- $title = I18N::translate('Edit the raw GEDCOM') . ' - ' . $record->getFullName();
+ $title = I18N::translate('Edit the raw GEDCOM') . ' - ' . $record->getFullName();
- foreach ($record->getFacts() as $fact) {
- if (!$fact->isPendingDeletion() && $fact->getFactId() === $fact_id) {
- return $this->viewResponse('edit/raw-gedcom-fact', [
- 'pattern' => self::GEDCOM_FACT_REGEX,
- 'fact' => $fact,
- 'title' => $title,
- ]);
- }
- }
+ foreach ($record->getFacts() as $fact) {
+ if (!$fact->isPendingDeletion() && $fact->getFactId() === $fact_id) {
+ return $this->viewResponse('edit/raw-gedcom-fact', [
+ 'pattern' => self::GEDCOM_FACT_REGEX,
+ 'fact' => $fact,
+ 'title' => $title,
+ ]);
+ }
+ }
- return new RedirectResponse($record->url());
- }
+ return new RedirectResponse($record->url());
+ }
- /**
- * @param Request $request
- *
- * @return Response
- */
- public function editRawFactAction(Request $request): Response {
- /** @var Tree $tree */
- $tree = $request->attributes->get('tree');
- $xref = $request->get('xref');
- $fact_id = $request->get('fact_id');
- $gedcom = $request->get('gedcom');
+ /**
+ * @param Request $request
+ *
+ * @return Response
+ */
+ public function editRawFactAction(Request $request): Response
+ {
+ /** @var Tree $tree */
+ $tree = $request->attributes->get('tree');
+ $xref = $request->get('xref');
+ $fact_id = $request->get('fact_id');
+ $gedcom = $request->get('gedcom');
- $record = GedcomRecord::getInstance($xref, $tree);
+ $record = GedcomRecord::getInstance($xref, $tree);
- // Cleanup the client’s bad editing?
- $gedcom = preg_replace('/[\r\n]+/', "\n", $gedcom); // Empty lines
- $gedcom = trim($gedcom); // Leading/trailing spaces
+ // Cleanup the client’s bad editing?
+ $gedcom = preg_replace('/[\r\n]+/', "\n", $gedcom); // Empty lines
+ $gedcom = trim($gedcom); // Leading/trailing spaces
- $this->checkRecordAccess($record, true);
+ $this->checkRecordAccess($record, true);
- foreach ($record->getFacts() as $fact) {
- if (!$fact->isPendingDeletion() && $fact->getFactId() === $fact_id && $fact->canEdit()) {
- $record->updateFact($fact_id, $gedcom, false);
- break;
- }
- }
+ foreach ($record->getFacts() as $fact) {
+ if (!$fact->isPendingDeletion() && $fact->getFactId() === $fact_id && $fact->canEdit()) {
+ $record->updateFact($fact_id, $gedcom, false);
+ break;
+ }
+ }
- return new RedirectResponse($record->url());
- }
+ return new RedirectResponse($record->url());
+ }
- /**
- * @param Request $request
- *
- * @return Response
- */
- public function editRawRecord(Request $request): Response {
- /** @var Tree $tree */
- $tree = $request->attributes->get('tree');
- $xref = $request->get('xref');
- $record = GedcomRecord::getInstance($xref, $tree);
+ /**
+ * @param Request $request
+ *
+ * @return Response
+ */
+ public function editRawRecord(Request $request): Response
+ {
+ /** @var Tree $tree */
+ $tree = $request->attributes->get('tree');
+ $xref = $request->get('xref');
+ $record = GedcomRecord::getInstance($xref, $tree);
- $this->checkRecordAccess($record, true);
+ $this->checkRecordAccess($record, true);
- $title = I18N::translate('Edit the raw GEDCOM') . ' - ' . $record->getFullName();
+ $title = I18N::translate('Edit the raw GEDCOM') . ' - ' . $record->getFullName();
- return $this->viewResponse('edit/raw-gedcom-record', [
- 'pattern' => self::GEDCOM_FACT_REGEX,
- 'record' => $record,
- 'title' => $title,
- ]);
- }
+ return $this->viewResponse('edit/raw-gedcom-record', [
+ 'pattern' => self::GEDCOM_FACT_REGEX,
+ 'record' => $record,
+ 'title' => $title,
+ ]);
+ }
- /**
- * @param Request $request
- *
- * @return Response
- */
- public function editRawRecordAction(Request $request): Response {
- /** @var Tree $tree */
- $tree = $request->attributes->get('tree');
- $xref = $request->get('xref');
- $facts = (array) $request->get('fact');
- $fact_ids = (array) $request->get('fact_id');
- $record = GedcomRecord::getInstance($xref, $tree);
+ /**
+ * @param Request $request
+ *
+ * @return Response
+ */
+ public function editRawRecordAction(Request $request): Response
+ {
+ /** @var Tree $tree */
+ $tree = $request->attributes->get('tree');
+ $xref = $request->get('xref');
+ $facts = (array)$request->get('fact');
+ $fact_ids = (array)$request->get('fact_id');
+ $record = GedcomRecord::getInstance($xref, $tree);
- $this->checkRecordAccess($record, true);
+ $this->checkRecordAccess($record, true);
- $gedcom = '0 @' . $record->getXref() . '@ ' . $record::RECORD_TYPE;
+ $gedcom = '0 @' . $record->getXref() . '@ ' . $record::RECORD_TYPE;
- // Retain any private facts
- foreach ($record->getFacts(null, false, Auth::PRIV_HIDE) as $fact) {
- if (!in_array($fact->getFactId(), $fact_ids) && !$fact->isPendingDeletion()) {
- $gedcom .= "\n" . $fact->getGedcom();
- }
- }
- // Append the updated facts
- foreach ($facts as $fact) {
- $gedcom .= "\n" . $fact;
- }
+ // Retain any private facts
+ foreach ($record->getFacts(null, false, Auth::PRIV_HIDE) as $fact) {
+ if (!in_array($fact->getFactId(), $fact_ids) && !$fact->isPendingDeletion()) {
+ $gedcom .= "\n" . $fact->getGedcom();
+ }
+ }
+ // Append the updated facts
+ foreach ($facts as $fact) {
+ $gedcom .= "\n" . $fact;
+ }
- // Empty lines and MSDOS line endings.
- $gedcom = preg_replace('/[\r\n]+/', "\n", $gedcom);
- $gedcom = trim($gedcom);
+ // Empty lines and MSDOS line endings.
+ $gedcom = preg_replace('/[\r\n]+/', "\n", $gedcom);
+ $gedcom = trim($gedcom);
- $record->updateRecord($gedcom, false);
+ $record->updateRecord($gedcom, false);
- return new RedirectResponse($record->url());
- }
+ return new RedirectResponse($record->url());
+ }
- /**
- * @param Request $request
- *
- * @return Response
- */
- public function addFact(Request $request): Response {
- /** @var Tree $tree */
- $tree = $request->attributes->get('tree');
+ /**
+ * @param Request $request
+ *
+ * @return Response
+ */
+ public function addFact(Request $request): Response
+ {
+ /** @var Tree $tree */
+ $tree = $request->attributes->get('tree');
- $xref = $request->get('xref', '');
- $fact = $request->get('fact', '');
+ $xref = $request->get('xref', '');
+ $fact = $request->get('fact', '');
- $record = GedcomRecord::getInstance($xref, $tree);
- $this->checkRecordAccess($record, true);
+ $record = GedcomRecord::getInstance($xref, $tree);
+ $this->checkRecordAccess($record, true);
- $title = $record->getFullName() . ' - ' . GedcomTag::getLabel($fact, $record);
+ $title = $record->getFullName() . ' - ' . GedcomTag::getLabel($fact, $record);
- return $this->viewResponse('edit/add-fact', [
- 'fact' => $fact,
- 'record' => $record,
- 'title' => $title,
- 'tree' => $tree,
- ]);
- }
+ return $this->viewResponse('edit/add-fact', [
+ 'fact' => $fact,
+ 'record' => $record,
+ 'title' => $title,
+ 'tree' => $tree,
+ ]);
+ }
- /**
- * @param Request $request
- *
- * @return Response
- */
- public function editFact(Request $request): Response {
- /** @var Tree $tree */
- $tree = $request->attributes->get('tree');
+ /**
+ * @param Request $request
+ *
+ * @return Response
+ */
+ public function editFact(Request $request): Response
+ {
+ /** @var Tree $tree */
+ $tree = $request->attributes->get('tree');
- $xref = $request->get('xref', '');
- $fact_id = $request->get('fact_id', '');
+ $xref = $request->get('xref', '');
+ $fact_id = $request->get('fact_id', '');
- $record = GedcomRecord::getInstance($xref, $tree);
- $this->checkRecordAccess($record, true);
+ $record = GedcomRecord::getInstance($xref, $tree);
+ $this->checkRecordAccess($record, true);
- // Find the fact to edit
- $edit_fact = null;
- foreach ($record->getFacts() as $fact) {
- if ($fact->getFactId() === $fact_id && $fact->canEdit()) {
- $edit_fact = $fact;
- break;
- }
- }
- if ($edit_fact === null) {
- throw new NotFoundHttpException;
- }
+ // Find the fact to edit
+ $edit_fact = null;
+ foreach ($record->getFacts() as $fact) {
+ if ($fact->getFactId() === $fact_id && $fact->canEdit()) {
+ $edit_fact = $fact;
+ break;
+ }
+ }
+ if ($edit_fact === null) {
+ throw new NotFoundHttpException;
+ }
- $can_edit_raw = Auth::isAdmin() || $tree->getPreference('SHOW_GEDCOM_RECORD');
+ $can_edit_raw = Auth::isAdmin() || $tree->getPreference('SHOW_GEDCOM_RECORD');
- $title = $record->getFullName() . ' - ' . GedcomTag::getLabel($edit_fact->getTag());
+ $title = $record->getFullName() . ' - ' . GedcomTag::getLabel($edit_fact->getTag());
- return $this->viewResponse('edit/edit-fact', [
- 'can_edit_raw' => $can_edit_raw,
- 'edit_fact' => $edit_fact,
- 'record' => $record,
- 'title' => $title,
- 'tree' => $tree,
- ]);
- }
+ return $this->viewResponse('edit/edit-fact', [
+ 'can_edit_raw' => $can_edit_raw,
+ 'edit_fact' => $edit_fact,
+ 'record' => $record,
+ 'title' => $title,
+ 'tree' => $tree,
+ ]);
+ }
- /**
- * @param Request $request
- *
- * @return RedirectResponse
- */
- public function updateFact(Request $request): RedirectResponse {
- /** @var Tree $tree */
- $tree = $request->attributes->get('tree');
+ /**
+ * @param Request $request
+ *
+ * @return RedirectResponse
+ */
+ public function updateFact(Request $request): RedirectResponse
+ {
+ /** @var Tree $tree */
+ $tree = $request->attributes->get('tree');
- $xref = $request->get('xref', '');
- $fact_id = $request->get('fact_id', '');
+ $xref = $request->get('xref', '');
+ $fact_id = $request->get('fact_id', '');
- $record = GedcomRecord::getInstance($xref, $tree);
- $this->checkRecordAccess($record, true);
+ $record = GedcomRecord::getInstance($xref, $tree);
+ $this->checkRecordAccess($record, true);
- $keep_chan = (bool) $request->get('keep_chan');
+ $keep_chan = (bool)$request->get('keep_chan');
- $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', []);
- // If the fact has a DATE or PLAC, then delete any value of Y
- if ($this->text[0] === 'Y') {
- foreach ($this->tag as $n => $value) {
- if ($this->glevels[$n] == 2 && ($value === 'DATE' || $value === 'PLAC') && $this->text[$n] !== '') {
- $this->text[0] = '';
- break;
- }
- }
- }
+ // If the fact has a DATE or PLAC, then delete any value of Y
+ if ($this->text[0] === 'Y') {
+ foreach ($this->tag as $n => $value) {
+ if ($this->glevels[$n] == 2 && ($value === 'DATE' || $value === 'PLAC') && $this->text[$n] !== '') {
+ $this->text[0] = '';
+ break;
+ }
+ }
+ }
- $newged = '';
- if (!empty($_POST['NAME'])) {
- $newged .= "\n1 NAME " . $_POST['NAME'];
- $name_facts = ['TYPE', 'NPFX', 'GIVN', 'NICK', 'SPFX', 'SURN', 'NSFX'];
- foreach ($name_facts as $name_fact) {
- if (!empty($_POST[$name_fact])) {
- $newged .= "\n2 " . $name_fact . ' ' . $_POST[$name_fact];
- }
- }
- }
+ $newged = '';
+ if (!empty($_POST['NAME'])) {
+ $newged .= "\n1 NAME " . $_POST['NAME'];
+ $name_facts = [
+ 'TYPE',
+ 'NPFX',
+ 'GIVN',
+ 'NICK',
+ 'SPFX',
+ 'SURN',
+ 'NSFX',
+ ];
+ foreach ($name_facts as $name_fact) {
+ if (!empty($_POST[$name_fact])) {
+ $newged .= "\n2 " . $name_fact . ' ' . $_POST[$name_fact];
+ }
+ }
+ }
- // @TODO - is $NOTE used? The original code made it global, so need to check
- if (isset($_POST['NOTE'])) {
- $NOTE = $_POST['NOTE'];
- }
+ // @TODO - is $NOTE used? The original code made it global, so need to check
+ if (isset($_POST['NOTE'])) {
+ $NOTE = $_POST['NOTE'];
+ }
- // @TODO - is $title used? The original code made it global, so need to check
- if (!empty($NOTE)) {
- $tempnote = preg_split('/\r?\n/', trim($NOTE) . "\n"); // make sure only one line ending on the end
- $title[] = '0 @' . $xref . '@ NOTE ' . array_shift($tempnote);
- foreach ($tempnote as &$line) {
- $line = trim('1 CONT ' . $line, ' ');
- }
- }
+ // @TODO - is $title used? The original code made it global, so need to check
+ if (!empty($NOTE)) {
+ $tempnote = preg_split('/\r?\n/', trim($NOTE) . "\n"); // make sure only one line ending on the end
+ $title[] = '0 @' . $xref . '@ NOTE ' . array_shift($tempnote);
+ foreach ($tempnote as &$line) {
+ $line = trim('1 CONT ' . $line, ' ');
+ }
+ }
- $newged = $this->handleUpdates($newged);
+ $newged = $this->handleUpdates($newged);
- // Add new names after existing names
- if (!empty($_POST['NAME'])) {
- preg_match_all('/[_0-9A-Z]+/', $tree->getPreference('ADVANCED_NAME_FACTS'), $match);
- $name_facts = array_unique(array_merge(['_MARNM'], $match[0]));
- foreach ($name_facts as $name_fact) {
- // Ignore advanced facts that duplicate standard facts.
- if (!in_array($name_fact, ['TYPE', 'NPFX', 'GIVN', 'NICK', 'SPFX', 'SURN', 'NSFX']) && !empty($_POST[$name_fact])) {
- $newged .= "\n2 " . $name_fact . ' ' . $_POST[$name_fact];
- }
- }
- }
+ // Add new names after existing names
+ if (!empty($_POST['NAME'])) {
+ preg_match_all('/[_0-9A-Z]+/', $tree->getPreference('ADVANCED_NAME_FACTS'), $match);
+ $name_facts = array_unique(array_merge(['_MARNM'], $match[0]));
+ foreach ($name_facts as $name_fact) {
+ // Ignore advanced facts that duplicate standard facts.
+ if (!in_array($name_fact, [
+ 'TYPE',
+ 'NPFX',
+ 'GIVN',
+ 'NICK',
+ 'SPFX',
+ 'SURN',
+ 'NSFX',
+ ]) && !empty($_POST[$name_fact])) {
+ $newged .= "\n2 " . $name_fact . ' ' . $_POST[$name_fact];
+ }
+ }
+ }
- $newged = substr($newged, 1); // Remove leading newline
+ $newged = substr($newged, 1); // Remove leading newline
- /** @var CensusAssistantModule $census_assistant */
- $census_assistant = Module::getModuleByName('GEDFact_assistant');
- if ($census_assistant !== null && $record instanceof Individual) {
- $newged = $census_assistant->updateCensusAssistant($record, $fact_id, $newged, $keep_chan);
- }
+ /** @var CensusAssistantModule $census_assistant */
+ $census_assistant = Module::getModuleByName('GEDFact_assistant');
+ if ($census_assistant !== null && $record instanceof Individual) {
+ $newged = $census_assistant->updateCensusAssistant($record, $fact_id, $newged, $keep_chan);
+ }
- $record->updateFact($fact_id, $newged, !$keep_chan);
+ $record->updateFact($fact_id, $newged, !$keep_chan);
- // For the GEDFact_assistant module
- $pid_array = $request->get('pid_array', '');
- if ($pid_array) {
- foreach (explode(',', $pid_array) as $pid) {
- if ($pid !== $xref) {
- $indi = Individual::getInstance($pid, $tree);
- if ($indi && $indi->canEdit()) {
- $indi->updateFact($fact_id, $newged, !$keep_chan);
- }
- }
- }
- }
+ // For the GEDFact_assistant module
+ $pid_array = $request->get('pid_array', '');
+ if ($pid_array) {
+ foreach (explode(',', $pid_array) as $pid) {
+ if ($pid !== $xref) {
+ $indi = Individual::getInstance($pid, $tree);
+ if ($indi && $indi->canEdit()) {
+ $indi->updateFact($fact_id, $newged, !$keep_chan);
+ }
+ }
+ }
+ }
- return new RedirectResponse($record->url());
- }
+ return new RedirectResponse($record->url());
+ }
- /**
- * Remove all links from $gedrec to $xref, and any sub-tags.
- *
- * @param string $gedrec
- * @param string $xref
- *
- * @return string
- */
- private function removeLinks($gedrec, $xref) {
- $gedrec = preg_replace('/\n1 ' . WT_REGEX_TAG . ' @' . $xref . '@(\n[2-9].*)*/', '', $gedrec);
- $gedrec = preg_replace('/\n2 ' . WT_REGEX_TAG . ' @' . $xref . '@(\n[3-9].*)*/', '', $gedrec);
- $gedrec = preg_replace('/\n3 ' . WT_REGEX_TAG . ' @' . $xref . '@(\n[4-9].*)*/', '', $gedrec);
- $gedrec = preg_replace('/\n4 ' . WT_REGEX_TAG . ' @' . $xref . '@(\n[5-9].*)*/', '', $gedrec);
- $gedrec = preg_replace('/\n5 ' . WT_REGEX_TAG . ' @' . $xref . '@(\n[6-9].*)*/', '', $gedrec);
+ /**
+ * Remove all links from $gedrec to $xref, and any sub-tags.
+ *
+ * @param string $gedrec
+ * @param string $xref
+ *
+ * @return string
+ */
+ private function removeLinks($gedrec, $xref)
+ {
+ $gedrec = preg_replace('/\n1 ' . WT_REGEX_TAG . ' @' . $xref . '@(\n[2-9].*)*/', '', $gedrec);
+ $gedrec = preg_replace('/\n2 ' . WT_REGEX_TAG . ' @' . $xref . '@(\n[3-9].*)*/', '', $gedrec);
+ $gedrec = preg_replace('/\n3 ' . WT_REGEX_TAG . ' @' . $xref . '@(\n[4-9].*)*/', '', $gedrec);
+ $gedrec = preg_replace('/\n4 ' . WT_REGEX_TAG . ' @' . $xref . '@(\n[5-9].*)*/', '', $gedrec);
+ $gedrec = preg_replace('/\n5 ' . WT_REGEX_TAG . ' @' . $xref . '@(\n[6-9].*)*/', '', $gedrec);
- return $gedrec;
- }
+ return $gedrec;
+ }
}