Example #1
0
 /**
  * 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>';
 }
Example #2
0
/**
 * 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}&amp;ged={$GEDCOM}\">" . PrintReady($name);
            //			if (!empty($addname)) print "<br />" . PrintReady($addname);
            if (!empty($addname)) {
                print " - " . PrintReady($addname);
            }
            if ($SHOW_ID_NUMBERS) {
                print "&nbsp;&nbsp;";
                if ($TEXT_DIRECTION == "rtl") {
                    print "&rlm;";
                }
                print "(" . $pid2 . ")";
                if ($TEXT_DIRECTION == "rtl") {
                    print "&rlm;";
                }
            }
            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}&amp;pid2={$pid2}&amp;followspouse=1&amp;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}&amp;pid2={$pid2}&amp;followspouse=1&amp;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}&amp;pid2={$pid2}&amp;followspouse=1&amp;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 " &lrm;";
                } else {
                    print " &rlm;";
                }
                print "[" . $pgv_lang["view_family"];
                if ($SHOW_ID_NUMBERS) {
                    print " &lrm;({$pid2})&lrm;";
                }
                if ($TEXT_DIRECTION == "ltr") {
                    print "&lrm;]</a>\n";
                } else {
                    print "&rlm;]</a>\n";
                }
            } else {
                print $pgv_lang["unknown"];
                if ($SHOW_ID_NUMBERS) {
                    print "&nbsp;&nbsp;";
                    if ($TEXT_DIRECTION == "rtl") {
                        print "&rlm;";
                    }
                    print "(" . $pid2 . ")";
                    if ($TEXT_DIRECTION == "rtl") {
                        print "&rlm;";
                    }
                }
            }
        }
        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&amp;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&amp;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>';
        }
    }
}
Example #4
0
/**
 * 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;
}
Example #5
0
 /**
  * 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 "&nbsp;&nbsp;&nbsp;";
     print_fact_sources($event->getGedComRecord(), 2);
     //-- find the notes
     print "&nbsp;&nbsp;&nbsp;";
     print_fact_notes($event->getGedComRecord(), 2);
     print "</td>";
 }
Example #6
0
         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>';