diff options
| -rw-r--r-- | admin_pgv_to_wt.php | 11 | ||||
| -rw-r--r-- | admin_trees_config.php | 124 | ||||
| -rw-r--r-- | app/Schema/Migration37.php | 67 | ||||
| -rw-r--r-- | app/Tree.php | 72 |
4 files changed, 33 insertions, 241 deletions
diff --git a/admin_pgv_to_wt.php b/admin_pgv_to_wt.php index cf42f42039..eed4d05e70 100644 --- a/admin_pgv_to_wt.php +++ b/admin_pgv_to_wt.php @@ -648,9 +648,7 @@ foreach ($GEDCOMS as $GEDCOM => $GED_DATA) { $FAM_FACTS_ADD = ''; $FAM_FACTS_QUICK = ''; $FAM_FACTS_UNIQUE = ''; - $FAM_ID_PREFIX = ''; $FULL_SOURCES = ''; - $GEDCOM_ID_PREFIX = ''; $GENERATE_UIDS = ''; $HIDE_GEDCOM_ERRORS = ''; $HIDE_LIVE_PEOPLE = ''; @@ -662,7 +660,6 @@ foreach ($GEDCOMS as $GEDCOM => $GED_DATA) { $MAX_DESCENDANCY_GENERATIONS = ''; $MAX_PEDIGREE_GENERATIONS = ''; $MAX_RELATION_PATH_LENGTH = ''; - $MEDIA_ID_PREFIX = ''; $META_DESCRIPTION = ''; $META_TITLE = ''; $MULTI_MEDIA = ''; @@ -679,7 +676,6 @@ foreach ($GEDCOMS as $GEDCOM => $GED_DATA) { $REPO_FACTS_ADD = ''; $REPO_FACTS_QUICK = ''; $REPO_FACTS_UNIQUE = ''; - $REPO_ID_PREFIX = ''; $REQUIRE_AUTHENTICATION = ''; $SHOW_AGE_DIFF = ''; $SHOW_COUNTER = ''; @@ -697,7 +693,6 @@ foreach ($GEDCOMS as $GEDCOM => $GED_DATA) { $SHOW_PEDIGREE_PLACES = ''; $SHOW_PRIVATE_RELATIONSHIPS = ''; $SHOW_RELATIVES_EVENTS = ''; - $SOURCE_ID_PREFIX = ''; $SOUR_FACTS_ADD = ''; $SOUR_FACTS_QUICK = ''; $SOUR_FACTS_UNIQUE = ''; @@ -774,9 +769,7 @@ foreach ($GEDCOMS as $GEDCOM => $GED_DATA) { $stmt_gedcom_setting->execute([$GED_DATA['id'], 'FAM_FACTS_ADD', $FAM_FACTS_ADD]); $stmt_gedcom_setting->execute([$GED_DATA['id'], 'FAM_FACTS_QUICK', $FAM_FACTS_QUICK]); $stmt_gedcom_setting->execute([$GED_DATA['id'], 'FAM_FACTS_UNIQUE', $FAM_FACTS_UNIQUE]); - $stmt_gedcom_setting->execute([$GED_DATA['id'], 'FAM_ID_PREFIX', $FAM_ID_PREFIX]); $stmt_gedcom_setting->execute([$GED_DATA['id'], 'FULL_SOURCES', $FULL_SOURCES]); - $stmt_gedcom_setting->execute([$GED_DATA['id'], 'GEDCOM_ID_PREFIX', $GEDCOM_ID_PREFIX]); $stmt_gedcom_setting->execute([$GED_DATA['id'], 'GENERATE_UIDS', $GENERATE_UIDS]); $stmt_gedcom_setting->execute([$GED_DATA['id'], 'HIDE_GEDCOM_ERRORS', $HIDE_GEDCOM_ERRORS]); $stmt_gedcom_setting->execute([$GED_DATA['id'], 'HIDE_LIVE_PEOPLE', $HIDE_LIVE_PEOPLE]); @@ -853,14 +846,12 @@ foreach ($GEDCOMS as $GEDCOM => $GED_DATA) { $stmt_gedcom_setting->execute([$GED_DATA['id'], 'MAX_PEDIGREE_GENERATIONS', $MAX_PEDIGREE_GENERATIONS]); $stmt_gedcom_setting->execute([$GED_DATA['id'], 'MAX_RELATION_PATH_LENGTH', $MAX_RELATION_PATH_LENGTH]); $stmt_gedcom_setting->execute([$GED_DATA['id'], 'MEDIA_DIRECTORY', 'media/']); - $stmt_gedcom_setting->execute([$GED_DATA['id'], 'MEDIA_ID_PREFIX', $MEDIA_ID_PREFIX]); $stmt_gedcom_setting->execute([$GED_DATA['id'], 'META_DESCRIPTION', $META_DESCRIPTION]); $stmt_gedcom_setting->execute([$GED_DATA['id'], 'META_TITLE', $META_TITLE]); $stmt_gedcom_setting->execute([$GED_DATA['id'], 'MEDIA_UPLOAD', $MULTI_MEDIA]); // see schema v12-13 $stmt_gedcom_setting->execute([$GED_DATA['id'], 'NOTE_FACTS_ADD', $NOTE_FACTS_ADD]); $stmt_gedcom_setting->execute([$GED_DATA['id'], 'NOTE_FACTS_QUICK', $NOTE_FACTS_QUICK]); $stmt_gedcom_setting->execute([$GED_DATA['id'], 'NOTE_FACTS_UNIQUE', $NOTE_FACTS_UNIQUE]); - $stmt_gedcom_setting->execute([$GED_DATA['id'], 'NOTE_ID_PREFIX', 'N']); $stmt_gedcom_setting->execute([$GED_DATA['id'], 'NO_UPDATE_CHAN', $NO_UPDATE_CHAN]); $stmt_gedcom_setting->execute([$GED_DATA['id'], 'PEDIGREE_LAYOUT', $PEDIGREE_LAYOUT]); $stmt_gedcom_setting->execute([$GED_DATA['id'], 'PEDIGREE_ROOT_ID', $PEDIGREE_ROOT_ID]); @@ -871,7 +862,6 @@ foreach ($GEDCOMS as $GEDCOM => $GED_DATA) { $stmt_gedcom_setting->execute([$GED_DATA['id'], 'REPO_FACTS_ADD', $REPO_FACTS_ADD]); $stmt_gedcom_setting->execute([$GED_DATA['id'], 'REPO_FACTS_QUICK', $REPO_FACTS_QUICK]); $stmt_gedcom_setting->execute([$GED_DATA['id'], 'REPO_FACTS_UNIQUE', $REPO_FACTS_UNIQUE]); - $stmt_gedcom_setting->execute([$GED_DATA['id'], 'REPO_ID_PREFIX', $REPO_ID_PREFIX]); $stmt_gedcom_setting->execute([$GED_DATA['id'], 'REQUIRE_AUTHENTICATION', $REQUIRE_AUTHENTICATION]); $stmt_gedcom_setting->execute([$GED_DATA['id'], 'SHOW_COUNTER', $SHOW_COUNTER]); $stmt_gedcom_setting->execute([$GED_DATA['id'], 'SHOW_DEAD_PEOPLE', $SHOW_DEAD_PEOPLE]); @@ -895,7 +885,6 @@ foreach ($GEDCOMS as $GEDCOM => $GED_DATA) { preg_match_all('/[_A-Z]+/', $SHOW_RELATIVES_EVENTS, $match); $stmt_gedcom_setting->execute([$GED_DATA['id'], 'SHOW_RELATIVES_EVENTS', implode(',', array_unique($match[0]))]); - $stmt_gedcom_setting->execute([$GED_DATA['id'], 'SOURCE_ID_PREFIX', $SOURCE_ID_PREFIX]); $stmt_gedcom_setting->execute([$GED_DATA['id'], 'SOUR_FACTS_ADD', $SOUR_FACTS_ADD]); $stmt_gedcom_setting->execute([$GED_DATA['id'], 'SOUR_FACTS_QUICK', $SOUR_FACTS_QUICK]); $stmt_gedcom_setting->execute([$GED_DATA['id'], 'SOUR_FACTS_UNIQUE', $SOUR_FACTS_UNIQUE]); diff --git a/admin_trees_config.php b/admin_trees_config.php index 5281799b71..cbf148984b 100644 --- a/admin_trees_config.php +++ b/admin_trees_config.php @@ -136,10 +136,8 @@ case 'general': $WT_TREE->setPreference('FAM_FACTS_ADD', implode(',', Filter::postArray('FAM_FACTS_ADD'))); $WT_TREE->setPreference('FAM_FACTS_QUICK', implode(',', Filter::postArray('FAM_FACTS_QUICK'))); $WT_TREE->setPreference('FAM_FACTS_UNIQUE', implode(',', Filter::postArray('FAM_FACTS_UNIQUE'))); - $WT_TREE->setPreference('FAM_ID_PREFIX', Filter::post('FAM_ID_PREFIX')); $WT_TREE->setPreference('FULL_SOURCES', Filter::postBool('FULL_SOURCES')); $WT_TREE->setPreference('FORMAT_TEXT', Filter::post('FORMAT_TEXT')); - $WT_TREE->setPreference('GEDCOM_ID_PREFIX', Filter::post('GEDCOM_ID_PREFIX')); $WT_TREE->setPreference('GEDCOM_MEDIA_PATH', Filter::post('GEDCOM_MEDIA_PATH')); $WT_TREE->setPreference('GENERATE_UIDS', Filter::postBool('GENERATE_UIDS')); $WT_TREE->setPreference('GEONAMES_ACCOUNT', Filter::post('GEONAMES_ACCOUNT')); @@ -150,11 +148,9 @@ case 'general': $WT_TREE->setPreference('LANGUAGE', Filter::post('LANGUAGE')); $WT_TREE->setPreference('MAX_DESCENDANCY_GENERATIONS', Filter::post('MAX_DESCENDANCY_GENERATIONS')); $WT_TREE->setPreference('MAX_PEDIGREE_GENERATIONS', Filter::post('MAX_PEDIGREE_GENERATIONS')); - $WT_TREE->setPreference('MEDIA_ID_PREFIX', Filter::post('MEDIA_ID_PREFIX')); $WT_TREE->setPreference('MEDIA_UPLOAD', Filter::post('MEDIA_UPLOAD')); $WT_TREE->setPreference('META_DESCRIPTION', Filter::post('META_DESCRIPTION')); $WT_TREE->setPreference('META_TITLE', Filter::post('META_TITLE')); - $WT_TREE->setPreference('NOTE_ID_PREFIX', Filter::post('NOTE_ID_PREFIX')); $WT_TREE->setPreference('NO_UPDATE_CHAN', Filter::postBool('NO_UPDATE_CHAN')); $WT_TREE->setPreference('PEDIGREE_LAYOUT', Filter::postBool('PEDIGREE_LAYOUT')); $WT_TREE->setPreference('PEDIGREE_ROOT_ID', Filter::post('PEDIGREE_ROOT_ID', WT_REGEX_XREF)); @@ -165,7 +161,6 @@ case 'general': $WT_TREE->setPreference('REPO_FACTS_ADD', implode(',', Filter::postArray('REPO_FACTS_ADD'))); $WT_TREE->setPreference('REPO_FACTS_QUICK', implode(',', Filter::postArray('REPO_FACTS_QUICK'))); $WT_TREE->setPreference('REPO_FACTS_UNIQUE', implode(',', Filter::postArray('REPO_FACTS_UNIQUE'))); - $WT_TREE->setPreference('REPO_ID_PREFIX', Filter::post('REPO_ID_PREFIX')); $WT_TREE->setPreference('SHOW_COUNTER', Filter::postBool('SHOW_COUNTER')); $WT_TREE->setPreference('SHOW_EST_LIST_DATES', Filter::postBool('SHOW_EST_LIST_DATES')); $WT_TREE->setPreference('SHOW_FACT_ICONS', Filter::postBool('SHOW_FACT_ICONS')); @@ -179,7 +174,6 @@ case 'general': $WT_TREE->setPreference('SHOW_PEDIGREE_PLACES', Filter::post('SHOW_PEDIGREE_PLACES')); $WT_TREE->setPreference('SHOW_PEDIGREE_PLACES_SUFFIX', Filter::postBool('SHOW_PEDIGREE_PLACES_SUFFIX')); $WT_TREE->setPreference('SHOW_RELATIVES_EVENTS', implode(',', Filter::postArray('SHOW_RELATIVES_EVENTS'))); - $WT_TREE->setPreference('SOURCE_ID_PREFIX', Filter::post('SOURCE_ID_PREFIX')); $WT_TREE->setPreference('SOUR_FACTS_ADD', implode(',', Filter::postArray('SOUR_FACTS_ADD'))); $WT_TREE->setPreference('SOUR_FACTS_QUICK', implode(',', Filter::postArray('SOUR_FACTS_QUICK'))); $WT_TREE->setPreference('SOUR_FACTS_UNIQUE', implode(',', Filter::postArray('SOUR_FACTS_UNIQUE'))); @@ -385,124 +379,6 @@ echo Bootstrap4::breadcrumbs([ </div> </fieldset> - <!-- XXXXX_ID_PREFIX --> - <fieldset class="form-group"> - <div class="row>" - <legend class="col-form-legend col-sm-3"> - <?= /* I18N: A configuration setting. The first letter(s) in a GEDCOM identifier. */ I18N::translate('XREF prefixes') ?> - </legend> - <div class="col-sm-9"> - <div class="row"> - <!-- GEDCOM_ID_PREFIX --> - <div class="col-sm-6 col-md-4"> - <div class="input-group"> - <label class="input-group-addon" for="GEDCOM_ID_PREFIX"> - <?= I18N::translate('Individual') ?> - </label> - <input - class="form-control" - dir="ltr" - id="GEDCOM_ID_PREFIX" - maxlength="10" - name="GEDCOM_ID_PREFIX" - type="text" - value="<?= $WT_TREE->getPreference('GEDCOM_ID_PREFIX') ?>" - > - </div> - </div> - <!-- FAM_ID_PREFIX --> - <div class="col-sm-6 col-md-4"> - <div class="input-group"> - <label class="input-group-addon" for="FAM_ID_PREFIX"> - <?= I18N::translate('Family') ?> - </label> - <input - class="form-control" - dir="ltr" - id="FAM_ID_PREFIX" - maxlength="10" - name="FAM_ID_PREFIX" - type="text" - value="<?= $WT_TREE->getPreference('FAM_ID_PREFIX') ?>" - > - </div> - </div> - <!-- SOURCE_ID_PREFIX --> - <div class="col-sm-6 col-md-4"> - <div class="input-group"> - <label class="input-group-addon" for="SOURCE_ID_PREFIX"> - <?= I18N::translate('Source') ?> - </label> - <input - class="form-control" - dir="ltr" - id="SOURCE_ID_PREFIX" - maxlength="10" - name="SOURCE_ID_PREFIX" - type="text" - value="<?= $WT_TREE->getPreference('SOURCE_ID_PREFIX') ?>" - > - </div> - </div> - <!-- REPO_ID_PREFIX --> - <div class="col-sm-6 col-md-4"> - <div class="input-group"> - <label class="input-group-addon" for="REPO_ID_PREFIX"> - <?= I18N::translate('Repository') ?> - </label> - <input - class="form-control" - dir="ltr" - id="REPO_ID_PREFIX" - maxlength="10" - name="REPO_ID_PREFIX" - type="text" - value="<?= $WT_TREE->getPreference('REPO_ID_PREFIX') ?>" - > - </div> - </div> - <!-- MEDIA_ID_PREFIX --> - <div class="col-sm-6 col-md-4"> - <div class="input-group"> - <label class="input-group-addon" for="MEDIA_ID_PREFIX"> - <?= I18N::translate('Media object') ?> - </label> - <input - class="form-control" - dir="ltr" - id="MEDIA_ID_PREFIX" - maxlength="10" - name="MEDIA_ID_PREFIX" - type="text" - value="<?= $WT_TREE->getPreference('MEDIA_ID_PREFIX') ?>" - > - </div> - </div> - <!-- NOTE_ID_PREFIX --> - <div class="col-sm-6 col-md-4"> - <div class="input-group"> - <label class="input-group-addon" for="NOTE_ID_PREFIX"> - <?= I18N::translate('Note') ?> - </label> - <input - class="form-control" - dir="ltr" - id="NOTE_ID_PREFIX" - maxlength="10" - name="NOTE_ID_PREFIX" - type="text" - value="<?= $WT_TREE->getPreference('NOTE_ID_PREFIX') ?>" - > - </div> - </div> - </div> - <p class="small text-muted"> - <?= I18N::translate('In a family tree, each record has an internal reference number (called an “XREF”) such as “F123” or “R14”.') ?> - <?= /* I18N: An XREF is the identification number used in GEDCOM files, such as F123 or R14. */ I18N::translate('You can choose the prefix that will be used whenever new XREFs are created.') ?> - </p> - </div> - </fieldset> - <h3><?= I18N::translate('Contact information') ?></h3> <!-- WEBTREES_EMAIL --> diff --git a/app/Schema/Migration37.php b/app/Schema/Migration37.php index 97c54e3f51..b64450eb8a 100644 --- a/app/Schema/Migration37.php +++ b/app/Schema/Migration37.php @@ -25,65 +25,18 @@ class Migration37 implements MigrationInterface { * Upgrade to to the next version */ public function upgrade() { - // Move repositories to their own table - Database::exec( - "CREATE TABLE IF NOT EXISTS `##repository` (" . - " repository_id INTEGER AUTO_INCREMENT NOT NULL," . - " gedcom_id INTEGER NOT NULL," . - " xref VARCHAR(20) NOT NULL," . - " gedcom LONGTEXT NOT NULL," . - " name VARCHAR(90) NOT NULL," . - " address VARCHAR(255) NOT NULL," . - " restriction ENUM('', 'confidential', 'privacy', 'none') NOT NULL," . - " uid VARCHAR(34) NOT NULL," . - " changed_at DATETIME NOT NULL," . - " PRIMARY KEY (repository_id)," . - " UNIQUE KEY `##repository_ix1` (gedcom_id, xref)," . - " UNIQUE KEY `##repository_ix2` (xref, gedcom_id)," . - " KEY `##repository_ix3` (name)," . - " KEY `##repository_ix4` (address)," . - " KEY `##repository_ix5` (restriction)," . - " KEY `##repository_ix6` (uid)," . - " KEY `##repository_ix7` (changed_at)," . - " CONSTRAINT `##repository_fk1` FOREIGN KEY (gedcom_id) REFERENCES `##gedcom` (gedcom_id)" . - ") COLLATE utf8_unicode_ci ENGINE=InnoDB" - ); - Database::exec("START TRANSACTION"); + Database::prepare( + "INSERT INTO `##site_setting` (setting_name, setting_value)" . + " SELECT 'next_xref', MAX(next_id) FROM `##next_id`" + )->execute(); - $repositories = Database::prepare("SELECT * FROM `##other` WHERE o_type = 'REPO'")->fetchAll(); + Database::prepare( + "DELETE FROM `##gedcom_setting` WHERE setting_name in ('FAM_ID_PREFIX', 'GEDCOM_ID_PREFIX', 'MEDIA_ID_PREFIX', 'NOTE_ID_PREFIX', 'REPO_ID_PREFIX', 'SOURCE_ID_PREFIX')" + )->execute(); - foreach ($repositories as $n => $repository) { - Database::prepare( - "INSERT INTO `##repository` (" . - " gedcom_id, xref, gedcom, name, address, restriction, uid, changed_at" . - ") VALUES (" . - " :gedcom_id, :xref, :gedcom, :name, :address, :restriction, :uid, :changed_at" . - ")" - )->execute([ - 'gedcom_id' => $repository->o_file, - 'xref' => $repository->o_id, - 'gedcom' => $repository->o_gedcom, - 'name' => '', - 'address' => '', - 'restriction' => '', - 'uid' => '', - 'changed_at' => '', - ]); - - Database::prepare( - "DELETE FROM `##other` WHERE o_file = :gedcom_id AND o_id = :xref" - )->execute([ - 'gedcom_id' => $repository->o_file, - 'xref' => $repository->o_id, - ]); - - if ($n % 500 === 499) { - Database::exec("COMMIT"); - Database::exec("START TRANSACTION"); - } - } - - Database::exec("COMMIT"); + Database::prepare( + "DROP TABLE IF EXISTS `##next_id`" + )->execute(); } } diff --git a/app/Tree.php b/app/Tree.php index fd56e3a3a4..6dbef21014 100644 --- a/app/Tree.php +++ b/app/Tree.php @@ -587,7 +587,7 @@ class Tree { ]); $buffer = FunctionsExport::reformatRecord(FunctionsExport::gedcomHeader($this)); - while ($row = $stmt->fetch()) { + while (($row = $stmt->fetch()) !== false) { $buffer .= FunctionsExport::reformatRecord($row->gedcom); if (strlen($buffer) > 65535) { fwrite($stream, $buffer); @@ -650,82 +650,56 @@ class Tree { /** * Generate a new XREF, unique across all family trees * - * @param string $type - * * @return string */ - public function getNewXref($type = 'INDI') { - /** @var string[] Which tree preference is used for which record type */ - static $type_to_preference = [ - 'INDI' => 'GEDCOM_ID_PREFIX', - 'FAM' => 'FAM_ID_PREFIX', - 'OBJE' => 'MEDIA_ID_PREFIX', - 'NOTE' => 'NOTE_ID_PREFIX', - 'SOUR' => 'SOURCE_ID_PREFIX', - 'REPO' => 'REPO_ID_PREFIX', - ]; - - if (array_key_exists($type, $type_to_preference)) { - $prefix = $this->getPreference($type_to_preference[$type]); - } else { - // Use the first non-underscore character - $prefix = substr(trim($type, '_'), 0, 1); - } + public function getNewXref() { + $prefix = 'X'; $increment = 1.0; do { // Use LAST_INSERT_ID(expr) to provide a transaction-safe sequence. See // http://dev.mysql.com/doc/refman/5.6/en/information-functions.html#function_last-insert-id $statement = Database::prepare( - "UPDATE `##next_id` SET next_id = LAST_INSERT_ID(next_id + :increment) WHERE record_type = :record_type AND gedcom_id = :tree_id" + "UPDATE `##site_setting` SET setting_value = LAST_INSERT_ID(setting_value + :increment) WHERE setting_name = 'next_xref'" ); $statement->execute([ 'increment' => (int) $increment, - 'record_type' => $type, - 'tree_id' => $this->tree_id, ]); if ($statement->rowCount() === 0) { // First time we've used this record type. - Database::prepare( - "INSERT INTO `##next_id` (gedcom_id, record_type, next_id) VALUES(:tree_id, :record_type, 1)" - )->execute([ - 'record_type' => $type, - 'tree_id' => $this->tree_id, - ]); + Site::setPreference('next_xref', '1'); $num = 1; } else { $num = Database::prepare("SELECT LAST_INSERT_ID()")->fetchOne(); } + $xref = $prefix . $num; + // Records may already exist with this sequence number. $already_used = Database::prepare( - "SELECT i_id FROM `##individuals` WHERE i_id = :i_id" . - " UNION ALL " . - "SELECT f_id FROM `##families` WHERE f_id = :f_id" . - " UNION ALL " . - "SELECT s_id FROM `##sources` WHERE s_id = :s_id" . - " UNION ALL " . - "SELECT m_id FROM `##media` WHERE m_id = :m_id" . - " UNION ALL " . - "SELECT o_id FROM `##other` WHERE o_id = :o_id" . - " UNION ALL " . - "SELECT xref FROM `##change` WHERE xref = :xref" + "SELECT" . + " EXISTS (SELECT 1 FROM `##individuals` WHERE i_id = :i_id) OR" . + " EXISTS (SELECT 1 FROM `##families` WHERE f_id = :f_id) OR" . + " EXISTS (SELECT 1 FROM `##sources` WHERE s_id = :s_id) OR" . + " EXISTS (SELECT 1 FROM `##media` WHERE m_id = :m_id) OR" . + " EXISTS (SELECT 1 FROM `##other` WHERE o_id = :o_id) OR" . + " EXISTS (SELECT 1 FROM `##change` WHERE xref = :xref)" )->execute([ - 'i_id' => $prefix . $num, - 'f_id' => $prefix . $num, - 's_id' => $prefix . $num, - 'm_id' => $prefix . $num, - 'o_id' => $prefix . $num, - 'xref' => $prefix . $num, + 'i_id' => $xref, + 'f_id' => $xref, + 's_id' => $xref, + 'm_id' => $xref, + 'o_id' => $xref, + 'xref' => $xref, ])->fetchOne(); // This exponential increment allows us to scan over large blocks of // existing data in a reasonable time. $increment *= 1.01; - } while ($already_used); + } while ($already_used !== '0'); - return $prefix . $num; + return $xref; } /** @@ -751,7 +725,7 @@ class Tree { // webtrees creates XREFs containing digits. Anything else (e.g. “new”) is just a placeholder. if (!preg_match('/\d/', $xref)) { - $xref = $this->getNewXref($type); + $xref = $this->getNewXref(); $gedcom = preg_replace('/^0 @(' . WT_REGEX_XREF . ')@/', '0 @' . $xref . '@', $gedcom); } |
