/** * print information for a name record * * @param WT_Fact $event the event object */ function print_name_record(WT_Fact $event) { global $WT_TREE; $factrec = $event->getGedcom(); // Create a dummy record, so we can extract the formatted NAME value from the event. $dummy = new WT_Individual('xref', "0 @xref@ INDI\n1 DEAT Y\n" . $factrec, null, WT_GED_ID); $all_names = $dummy->getAllNames(); $primary_name = $all_names[0]; $this->name_count++; if ($this->name_count > 1) { echo '<h3 class="name_two">', $dummy->getFullName(), '</h3>'; } //Other names accordion element echo '<div class="indi_name_details'; if ($event->isOld()) { echo ' old'; } if ($event->isNew()) { echo ' new'; } echo '">'; echo '<div class="name1">'; echo '<dl><dt class="label">', WT_I18N::translate('Name'), '</dt>'; $dummy->setPrimaryName(0); echo '<dd class="field">', $dummy->getFullName(); if ($this->name_count == 1) { if (Auth::isAdmin()) { $user = User::findByGenealogyRecord($WT_TREE, $this->record); if ($user) { echo '<span> - <a class="warning" href="admin_users.php?filter=' . WT_Filter::escapeHtml($user->getUserName()) . '">' . WT_Filter::escapeHtml($user->getUserName()) . '</a></span>'; } } } if ($this->record->canEdit() && !$event->isOld()) { echo "<div class=\"deletelink\"><a class=\"deleteicon\" href=\"#\" onclick=\"return delete_fact('" . WT_I18N::translate('Are you sure you want to delete this fact?') . "', '" . $this->record->getXref() . "', '" . $event->getFactId() . "');\" title=\"" . WT_I18N::translate('Delete this name') . "\"><span class=\"link_text\">" . WT_I18N::translate('Delete this name') . "</span></a></div>"; echo "<div class=\"editlink\"><a href=\"#\" class=\"editicon\" onclick=\"edit_name('" . $this->record->getXref() . "', '" . $event->getFactId() . "'); return false;\" title=\"" . WT_I18N::translate('Edit name') . "\"><span class=\"link_text\">" . WT_I18N::translate('Edit name') . "</span></a></div>"; } echo '</dd>'; echo '</dl>'; echo '</div>'; $ct = preg_match_all('/\\n2 (\\w+) (.*)/', $factrec, $nmatch, PREG_SET_ORDER); for ($i = 0; $i < $ct; $i++) { echo '<div>'; $fact = $nmatch[$i][1]; if ($fact != 'SOUR' && $fact != 'NOTE' && $fact != 'SPFX') { echo '<dl><dt class="label">', WT_Gedcom_Tag::getLabel($fact, $this->record), '</dt>'; echo '<dd class="field">'; // Before using dir="auto" on this field, note that Gecko treats this as an inline element but WebKit treats it as a block element if (isset($nmatch[$i][2])) { $name = WT_Filter::escapeHtml($nmatch[$i][2]); $name = str_replace('/', '', $name); $name = preg_replace('/(\\S*)\\*/', '<span class="starredname">\\1</span>', $name); switch ($fact) { case 'TYPE': echo WT_Gedcom_Code_Name::getValue($name, $this->record); break; case 'SURN': // The SURN field is not necessarily the surname. // Where it is not a substring of the real surname, show it after the real surname. $surname = WT_Filter::escapeHtml($primary_name['surname']); if (strpos($primary_name['surname'], str_replace(',', ' ', $nmatch[$i][2])) !== false) { echo $surname; } else { echo WT_I18N::translate('%1$s (%2$s)', $surname, $name); } break; default: echo $name; break; } } echo '</dd>'; echo '</dl>'; } echo '</div>'; } if (preg_match("/\n2 SOUR/", $factrec)) { echo '<div id="indi_sour" class="clearfloat">', print_fact_sources($factrec, 2), '</div>'; } if (preg_match("/\n2 NOTE/", $factrec)) { echo '<div id="indi_note" class="clearfloat">', print_fact_notes($factrec, 2), '</div>'; } echo '</div>'; }
/** * print ASSO RELA information * * Ex1: * <code>1 ASSO @I1@ * 2 RELA Twin</code> * * Ex2: * <code>1 CHR * 2 ASSO @I1@ * 3 RELA Godfather * 2 ASSO @I2@ * 3 RELA Godmother</code> * * @param string $pid person or family ID * @param string $factrec the raw gedcom record to print * @param string $linebr optional linebreak */ function print_asso_rela_record($pid, $factrec, $linebr = false) { global $GEDCOM, $SHOW_ID_NUMBERS, $TEXT_DIRECTION, $pgv_lang, $factarray, $PGV_IMAGE_DIR, $PGV_IMAGES, $view; // get ASSOciate(s) ID(s) $ct = preg_match_all("/\\d ASSO @(.*)@/", $factrec, $match, PREG_SET_ORDER); for ($i = 0; $i < $ct; $i++) { $level = substr($match[$i][0], 0, 1); $pid2 = $match[$i][1]; // get RELAtionship field $assorec = get_sub_record($level, "{$level} ASSO ", $factrec, $i + 1); // if (substr($_SERVER["SCRIPT_NAME"],1) == "pedigree.php") { $rct = preg_match("/\\d RELA (.*)/", $assorec, $rmatch); if ($rct > 0) { // RELAtionship name in user language $key = strtolower(trim($rmatch[1])); $cr = preg_match_all("/sosa_(.*)/", $key, $relamatch, PREG_SET_ORDER); if ($cr > 0) { $rela = get_sosa_name($relamatch[0][1]); } else { if (isset($pgv_lang["{$key}"])) { $rela = $pgv_lang[$key]; } else { $rela = $rmatch[1]; } } $p = strpos($rela, "(="); if ($p > 0) { $rela = trim(substr($rela, 0, $p)); } if ($pid2 == $pid) { print "<span class=\"details_label\">"; } print $rela . ": "; if ($pid2 == $pid) { print "</span>"; } } else { $rela = $factarray["RELA"]; } // default // } // ASSOciate ID link $gedrec = find_gedcom_record($pid2); if (strstr($gedrec, "@ INDI") !== false or strstr($gedrec, "@ SUBM") !== false) { // ID name if (DisplayDetailsByID($pid2) || showLivingNameByID($pid2)) { $name = get_person_name($pid2); $addname = get_add_person_name($pid2); } else { $name = $pgv_lang["private"]; $addname = ""; } print "<a href=\"individual.php?pid={$pid2}&ged={$GEDCOM}\">" . PrintReady($name); // if (!empty($addname)) print "<br />" . PrintReady($addname); if (!empty($addname)) { print " - " . PrintReady($addname); } if ($SHOW_ID_NUMBERS) { print " "; if ($TEXT_DIRECTION == "rtl") { print "‏"; } print "(" . $pid2 . ")"; if ($TEXT_DIRECTION == "rtl") { print "‏"; } } print "</a>"; // ID age if (!strstr($factrec, "_BIRT_")) { $dct = preg_match("/2 DATE (.*)/", $factrec, $dmatch); if ($dct > 0) { print " <span class=\"age\">" . get_age($gedrec, $dmatch[1]) . "</span>"; } } // RELAtionship calculation : for a family print relationship to both spouses if ($view != "preview") { $famrec = find_family_record($pid); if ($famrec) { $parents = find_parents_in_record($famrec); $pid1 = $parents["HUSB"]; if ($pid1 and $pid1 != $pid2) { print " - <a href=\"relationship.php?pid1={$pid1}&pid2={$pid2}&followspouse=1&ged={$GEDCOM}\">[" . $pgv_lang["relationship_chart"] . "<img src=\"{$PGV_IMAGE_DIR}/" . $PGV_IMAGES["sex"]["small"] . "\" title=\"" . $pgv_lang["husband"] . "\" alt=\"" . $pgv_lang["husband"] . "\" class=\"sex_image\" />]</a>"; } $pid1 = $parents["WIFE"]; if ($pid1 and $pid1 != $pid2) { print " - <a href=\"relationship.php?pid1={$pid1}&pid2={$pid2}&followspouse=1&ged={$GEDCOM}\">[" . $pgv_lang["relationship_chart"] . "<img src=\"{$PGV_IMAGE_DIR}/" . $PGV_IMAGES["sexf"]["small"] . "\" title=\"" . $pgv_lang["wife"] . "\" alt=\"" . $pgv_lang["wife"] . "\" class=\"sex_image\" />]</a>"; } } else { if ($pid != $pid2) { print " - <a href=\"relationship.php?pid1={$pid}&pid2={$pid2}&followspouse=1&ged={$GEDCOM}\">[" . $pgv_lang["relationship_chart"] . "]</a>"; } } } } else { if (strstr($gedrec, "@ FAM") !== false) { print "<a href=\"family.php?famid={$pid2}\">"; if ($TEXT_DIRECTION == "ltr") { print " ‎"; } else { print " ‏"; } print "[" . $pgv_lang["view_family"]; if ($SHOW_ID_NUMBERS) { print " ‎({$pid2})‎"; } if ($TEXT_DIRECTION == "ltr") { print "‎]</a>\n"; } else { print "‏]</a>\n"; } } else { print $pgv_lang["unknown"]; if ($SHOW_ID_NUMBERS) { print " "; if ($TEXT_DIRECTION == "rtl") { print "‏"; } print "(" . $pid2 . ")"; if ($TEXT_DIRECTION == "rtl") { print "‏"; } } } } if ($linebr) { print "<br />\n"; } print_fact_notes($assorec, $level + 1); if (substr($_SERVER["SCRIPT_NAME"], 1) == "pedigree.php") { print "<br />"; if (function_exists('print_fact_sources')) { print_fact_sources($assorec, $level + 1); } } } }
function print_main_media(WT_Fact $fact, $level) { $factrec = $fact->getGedcom(); $parent = $fact->getParent(); if ($fact->isNew()) { $styleadd = 'new'; $can_edit = $level == 1 && $fact->canEdit(); } elseif ($fact->isOld()) { $styleadd = 'old'; $can_edit = false; } else { $styleadd = ''; $can_edit = $level == 1 && $fact->canEdit(); } // -- find source for each fact preg_match_all('/(?:^|\\n)' . $level . ' OBJE @(.*)@/', $factrec, $matches); foreach ($matches[1] as $xref) { $media = WT_Media::getInstance($xref); // Allow access to "1 OBJE @non_existent_source@", so it can be corrected/deleted if (!$media || $media->canShow()) { if ($level > 1) { echo '<tr class="row_obje2">'; } else { echo '<tr>'; } echo '<td class="descriptionbox'; if ($level > 1) { echo ' rela'; } echo ' ', $styleadd, ' width20">'; preg_match("/^\\d (\\w*)/", $factrec, $factname); $factlines = explode("\n", $factrec); // 1 BIRT Y\n2 SOUR ... $factwords = explode(" ", $factlines[0]); // 1 BIRT Y $factname = $factwords[1]; // BIRT if ($factname == 'EVEN' || $factname == 'FACT') { // Add ' EVEN' to provide sensible output for an event with an empty TYPE record $ct = preg_match("/2 TYPE (.*)/", $factrec, $ematch); if ($ct > 0) { $factname = $ematch[1]; echo $factname; } else { echo WT_Gedcom_Tag::getLabel($factname, $parent); } } else { if ($can_edit) { echo '<a onclick="window.open(\'addmedia.php?action=editmedia&pid=', $media->getXref(), '\', \'_blank\', edit_window_specs); return false;" href="#" title="', WT_I18N::translate('Edit'), '">'; echo WT_Gedcom_Tag::getLabel($factname, $parent), '</a>'; echo '<div class="editfacts">'; echo '<div class="editlink"><a class="editicon" onclick="window.open(\'addmedia.php?action=editmedia&pid=', $media->getXref(), '\', \'_blank\', edit_window_specs); return false;" href="#" title="', WT_I18N::translate('Edit'), '"><span class="link_text">', WT_I18N::translate('Edit'), '</span></a></div>'; echo '<div class="copylink"><a class="copyicon" href="#" onclick="jQuery.post(\'action.php\',{action:\'copy-fact\', type:\'\', factgedcom:\'' . rawurlencode($factrec) . '\'},function(){location.reload();})" title="' . WT_I18N::translate('Copy') . '"><span class="link_text">' . WT_I18N::translate('Copy') . '</span></a></div>'; echo '<div class="deletelink"><a class="deleteicon" onclick="return delete_fact(\'', WT_I18N::translate('Are you sure you want to delete this fact?'), '\', \'', $parent->getXref(), '\', \'', $fact->getFactId(), '\');" href="#" title="', WT_I18N::translate('Delete'), '"><span class="link_text">', WT_I18N::translate('Delete'), '</span></a></div>'; echo '</div>'; } else { echo WT_Gedcom_Tag::getLabel($factname, $parent); } } echo '</td>'; echo '<td class="optionbox ', $styleadd, ' wrap">'; if ($media) { echo '<span class="field">'; echo $media->displayImage(); if (empty($SEARCH_SPIDER)) { echo '<a href="' . $media->getHtmlUrl() . '">'; } echo '<em>'; foreach ($media->getAllNames() as $name) { if ($name['type'] != 'TITL') { echo '<br>'; } echo $name['full']; } echo '</em>'; if (empty($SEARCH_SPIDER)) { echo '</a>'; } echo '</span>'; echo WT_Gedcom_Tag::getLabelValue('FORM', $media->mimeType()); $imgsize = $media->getImageAttributes('main'); if (!empty($imgsize['WxH'])) { echo WT_Gedcom_Tag::getLabelValue('__IMAGE_SIZE__', $imgsize['WxH']); } if ($media->getFilesizeraw() > 0) { echo WT_Gedcom_Tag::getLabelValue('__FILE_SIZE__', $media->getFilesize()); } $mediatype = $media->getMediaType(); if ($mediatype) { echo WT_Gedcom_Tag::getLabelValue('TYPE', WT_Gedcom_Tag::getFileFormTypeValue($mediatype)); } switch ($media->isPrimary()) { case 'Y': echo WT_Gedcom_Tag::getLabelValue('_PRIM', WT_I18N::translate('yes')); break; case 'N': echo WT_Gedcom_Tag::getLabelValue('_PRIM', WT_I18N::translate('no')); break; } echo print_fact_notes($media->getGedcom(), 1); echo print_fact_sources($media->getGedcom(), 1); } else { echo $xref; } echo '</td></tr>'; } } }
/** * Print all of the notes in this fact record * * @param string $factrec the factrecord to print the notes from * @param int $level The level of the factrecord * @param bool $textOnly Don't print the "Note: " introduction * * @return string HTML */ function print_fact_notes($factrec, $level, $textOnly = false) { $data = ""; $previous_spos = 0; $nlevel = $level + 1; $ct = preg_match_all("/{$level} NOTE (.*)/", $factrec, $match, PREG_SET_ORDER); for ($j = 0; $j < $ct; $j++) { $spos1 = strpos($factrec, $match[$j][0], $previous_spos); $spos2 = strpos($factrec . "\n{$level}", "\n{$level}", $spos1 + 1); if (!$spos2) { $spos2 = strlen($factrec); } $previous_spos = $spos2; $nrec = substr($factrec, $spos1, $spos2 - $spos1); if (!isset($match[$j][1])) { $match[$j][1] = ""; } if (!preg_match("/@(.*)@/", $match[$j][1], $nmatch)) { $data .= print_note_record($match[$j][1], $nlevel, $nrec, $textOnly); } else { $note = WT_Note::getInstance($nmatch[1]); if ($note) { if ($note->canShow()) { $noterec = $note->getGedcom(); $nt = preg_match("/0 @{$nmatch['1']}@ NOTE (.*)/", $noterec, $n1match); $data .= print_note_record($nt > 0 ? $n1match[1] : "", 1, $noterec, $textOnly); if (!$textOnly) { if (strpos($noterec, "1 SOUR") !== false) { require_once WT_ROOT . 'includes/functions/functions_print_facts.php'; $data .= print_fact_sources($noterec, 1); } } } } else { $data = '<div class="fact_NOTE"><span class="label">' . WT_I18N::translate('Note') . '</span>: <span class="field error">' . $nmatch[1] . '</span></div>'; } } if (!$textOnly) { if (strpos($factrec, "{$nlevel} SOUR") !== false) { $data .= "<div class=\"indent\">"; $data .= print_fact_sources($nrec, $nlevel); $data .= "</div>"; } } } return $data; }
/** * print information for a sex record * * Called from the individual information page * @see individual.php * @param Event $event the Event object */ function print_sex_record(&$event) { global $pgv_lang, $sex; if (!$event->canShowDetails()) { return false; } $sex = $event->getDetail(); if (empty($sex)) { $sex = "U"; } print "<td valign=\"top\"><span class=\"label\">" . $pgv_lang["sex"] . ": </span><span class=\"field\">" . $this->sexarray[$sex]; if ($sex == 'M') { echo Person::sexImage('M', 'small', '', $pgv_lang['male']); } elseif ($sex == 'F') { echo Person::sexImage('F', 'small', '', $pgv_lang['female']); } else { echo Person::sexImage('U', 'small', '', $pgv_lang['unknown']); } if ($this->SEX_COUNT > 1) { if (!$this->isPrintPreview() && $this->userCanEdit() && preg_match("/PGV_OLD/", $event->getGedComRecord()) == 0) { if ($event->getLineNumber() == "new") { print "<br /><a class=\"font9\" href=\"javascript:;\" onclick=\"add_new_record('" . $this->pid . "', 'SEX'); return false;\">" . $pgv_lang["edit"] . "</a>"; } else { print "<br /><a class=\"font9\" href=\"javascript:;\" onclick=\"edit_record('" . $this->pid . "', " . $event->getLineNumber() . "); return false;\">" . $pgv_lang["edit"] . "</a> | "; print "<a class=\"font9\" href=\"javascript:;\" onclick=\"delete_record('" . $this->pid . "', " . $event->getLineNumber() . "); return false;\">" . $pgv_lang["delete"] . "</a>\n"; } } } print "<br /></span>"; // -- find sources print " "; print_fact_sources($event->getGedComRecord(), 2); //-- find the notes print " "; print_fact_notes($event->getGedComRecord(), 2); print "</td>"; }
if (WT_USER_CAN_EDIT || WT_USER_CAN_ACCEPT) { echo WT_Gedcom_Tag::getLabelValue('FILE', $mediaobject->getFilename()); } echo WT_Gedcom_Tag::getLabelValue('FORM', $mediaobject->mimeType()); echo WT_Gedcom_Tag::getLabelValue('__FILE_SIZE__', $mediaobject->getFilesize()); $imgsize = $mediaobject->getImageAttributes(); if ($imgsize['WxH']) { echo WT_Gedcom_Tag::getLabelValue('__IMAGE_SIZE__', $imgsize['WxH']); } } else { echo '<p class="ui-state-error">', WT_I18N::translate('The file “%s” does not exist.', $mediaobject->getFilename()), '</p>'; } } echo '<br>'; echo '<div style="white-space: normal; width: 95%;">'; echo print_fact_sources($mediaobject->getGedcom(), 1); echo print_fact_notes($mediaobject->getGedcom(), 1); echo '</div>'; foreach ($mediaobject->linkedIndividuals('OBJE') as $individual) { echo '<a href="' . $individual->getHtmlUrl() . '">' . WT_I18N::translate('View person') . ' — ' . $individual->getFullname() . '</a><br>'; } foreach ($mediaobject->linkedFamilies('OBJE') as $family) { echo '<a href="' . $family->getHtmlUrl() . '">' . WT_I18N::translate('View family') . ' — ' . $family->getFullname() . '</a><br>'; } foreach ($mediaobject->linkedSources('OBJE') as $source) { echo '<a href="' . $source->getHtmlUrl() . '">' . WT_I18N::translate('View source') . ' — ' . $source->getFullname() . '</a><br>'; } echo '</td></tr></table>'; echo '</td>'; if (++$n % $columns == 0 && $n < $count) { echo '</tr><tr>';