} else { if ($action == "merge") { $manual_save = true; print "<h2>" . $pgv_lang["merge_step3"] . "</h2>\n"; if ($GEDCOM == $ged2) { $success = delete_gedrec($gid2); if ($success) { print "<br />" . $pgv_lang["gedrec_deleted"] . "<br />\n"; } //-- replace all the records that linked to gid2 $ids = fetch_all_links($gid2, PGV_GED_ID); foreach ($ids as $id) { if (isset($pgv_changes[$id . "_" . $GEDCOM])) { $record = find_updated_record($id); } else { $record = fetch_gedcom_record($id, PGV_GED_ID); $record = $record['gedrec']; echo $pgv_lang["updating_linked"] . " {$id}<br />\n"; $newrec = str_replace("@{$gid2}@", "@{$gid1}@", $record); replace_gedrec($id, $newrec); } } } $newgedrec = "0 @{$gid1}@ {$type1}\n"; for ($i = 0; $i < count($facts1) || $i < count($facts2); $i++) { if (isset($facts1[$i])) { if (in_array($i, $keep1)) { $newgedrec .= $facts1[$i]["subrec"] . "\n"; print $pgv_lang["adding"] . " " . $facts1[$i]["fact"] . " " . $pgv_lang["from"] . " {$gid1}<br />\n"; } }
static function &getInstance($data, $simple = true) { global $gedcom_record_cache, $GEDCOM, $pgv_changes; if (is_array($data)) { $ged_id = $data['ged_id']; $pid = $data['xref']; } else { $ged_id = get_id_from_gedcom($GEDCOM); $pid = $data; } // Check the cache first if (isset($gedcom_record_cache[$pid][$ged_id])) { return $gedcom_record_cache[$pid][$ged_id]; } // Look for the record in the database if (!is_array($data)) { $data = fetch_gedcom_record($pid, $ged_id); // If we didn't find the record in the database, it may be remote if (!$data && strpos($pid, ':')) { list($servid, $remoteid) = explode(':', $pid); $service = ServiceClient::getInstance($servid); if ($service) { // TYPE will be replaced with the type from the remote record $data = $service->mergeGedcomRecord($remoteid, "0 @{$pid}@ TYPE\n1 RFN {$pid}", false); } } // If we didn't find the record in the database, it may be new/pending if (!$data && PGV_USER_CAN_EDIT && isset($pgv_changes[$pid . '_' . $GEDCOM])) { $data = find_updated_record($pid); $fromfile = true; } // If we still didn't find it, it doesn't exist if (!$data) { return null; } } // Create the object if (is_array($data)) { $type = $data['type']; } elseif (preg_match('/^0 @' . PGV_REGEX_XREF . '@ (' . PGV_REGEX_TAG . ')/', $data, $match)) { $type = $match[1]; } else { $type = ''; } switch ($type) { case 'INDI': $object = new Person($data, $simple); break; case 'FAM': $object = new Family($data, $simple); break; case 'SOUR': $object = new Source($data, $simple); break; //BH ================== //BH ================== case 'NOTE': $object = new Note($data, $simple); break; case 'REPO': $object = new Repository($data, $simple); break; case 'OBJE': $object = new Media($data, $simple); break; default: $object = new GedcomRecord($data, $simple); break; } // This is an object from the database, but we created it from raw gedcom // rather than a database row. Set the gedcom to indicate that it is not // a dynamically created record. $object->ged_id = $ged_id; if (!empty($fromfile)) { $object->setChanged(true); } // Store it in the cache $gedcom_record_cache[$object->xref][$object->ged_id] =& $object; //-- also store it using its reference id (sid:pid and local gedcom for remote links) $gedcom_record_cache[$pid][$ged_id] =& $object; return $object; }