Beispiel #1
0
 /**
  * Accept any edit changes into the database
  * Also update the indirec we will use to generate the page
  */
 function acceptChanges()
 {
     global $GEDCOM;
     if (!PGV_USER_CAN_ACCEPT) {
         return;
     }
     if (accept_changes($this->nid . "_" . $GEDCOM)) {
         $this->show_changes = false;
         $this->accept_success = true;
         $indirec = find_other_record($this->nid);
         //-- check if we just deleted the record and redirect to index
         if (empty($indirec)) {
             header("Location: index.php?ctype=gedcom");
             exit;
         }
         $this->note = new Note($indirec);
     }
 }
function print_gedcom_stats($block = true, $config = '', $side, $index)
{
    global $PGV_BLOCKS, $pgv_lang, $ALLOW_CHANGE_GEDCOM, $ctype, $COMMON_NAMES_THRESHOLD, $PGV_IMAGE_DIR, $PGV_IMAGES, $MULTI_MEDIA;
    global $top10_block_present;
    if (empty($config)) {
        $config = $PGV_BLOCKS['print_gedcom_stats']['config'];
    }
    if (!isset($config['stat_indi'])) {
        $config = $PGV_BLOCKS['print_gedcom_stats']['config'];
    }
    if (!isset($config['stat_first_death'])) {
        $config['stat_first_death'] = $PGV_BLOCKS['print_gedcom_stats']['config']['stat_first_death'];
    }
    if (!isset($config['stat_last_death'])) {
        $config['stat_last_death'] = $PGV_BLOCKS['print_gedcom_stats']['config']['stat_last_death'];
    }
    if (!isset($config['stat_media'])) {
        $config['stat_media'] = $PGV_BLOCKS['print_gedcom_stats']['config']['stat_media'];
    }
    if (!isset($config['stat_link'])) {
        $config['stat_link'] = $PGV_BLOCKS['print_gedcom_stats']['config']['stat_link'];
    }
    $id = 'gedcom_stats';
    $title = print_help_link('index_stats_help', 'qm', '', false, true);
    if ($PGV_BLOCKS['print_gedcom_stats']['canconfig']) {
        if ($ctype == 'gedcom' && PGV_USER_GEDCOM_ADMIN || $ctype == 'user' && PGV_USER_ID) {
            if ($ctype == 'gedcom') {
                $name = PGV_GEDCOM;
            } else {
                $name = PGV_USER_NAME;
            }
            $title .= "<a href=\"javascript: configure block\" onclick=\"window.open('" . encode_url("index_edit.php?name={$name}&ctype={$ctype}&action=configure&side={$side}&index={$index}") . "', '_blank', 'top=50,left=50,width=700,height=400,scrollbars=1,resizable=1'); return false;\">";
            $title .= "<img class=\"adminicon\" src=\"{$PGV_IMAGE_DIR}/" . $PGV_IMAGES['admin']['small'] . "\" width=\"15\" height=\"15\" border=\"0\" alt=\"" . $pgv_lang['config_block'] . "\" /></a>";
        }
    }
    $title .= $pgv_lang['gedcom_stats'];
    $stats = new stats(PGV_GEDCOM);
    $content = "<b><a href=\"index.php?ctype=gedcom\">" . PrintReady(strip_tags(get_gedcom_setting(PGV_GED_ID, 'title'))) . "</a></b><br />";
    $head = find_other_record('HEAD', PGV_GED_ID);
    $ct = preg_match('/1 SOUR (.*)/', $head, $match);
    if ($ct > 0) {
        $softrec = get_sub_record(1, '1 SOUR', $head);
        $tt = preg_match('/2 NAME (.*)/', $softrec, $tmatch);
        if ($tt > 0) {
            $software = printReady(trim($tmatch[1]));
        } else {
            $software = trim($match[1]);
        }
        if (!empty($software)) {
            $text = str_replace(array('#SOFTWARE#', '#CREATED_SOFTWARE#'), $software, $pgv_lang['gedcom_created_using']);
            $tt = preg_match('/2 VERS (.*)/', $softrec, $tmatch);
            if ($tt > 0) {
                $version = printReady(trim($tmatch[1]));
            } else {
                $version = '';
            }
            $text = str_replace(array('#VERSION#', '#CREATED_VERSION#'), $version, $text);
            $content .= $text;
        }
    }
    if (preg_match('/1 DATE (.+)/', $head, $match)) {
        if (empty($software)) {
            $content .= str_replace(array('#DATE#', '#CREATED_DATE#'), $stats->gedcomDate(), $pgv_lang['gedcom_created_on']);
        } else {
            $content .= str_replace(array('#DATE#', '#CREATED_DATE#'), $stats->gedcomDate(), $pgv_lang['gedcom_created_on2']);
        }
    }
    $content .= '<br /><table><tr><td valign="top" class="width20"><table cellspacing="1" cellpadding="0">';
    if ($config['stat_indi'] == 'yes') {
        $content .= '<tr><td class="facts_label">' . $pgv_lang['stat_individuals'] . '</td><td class="facts_value"><div dir="rtl"><a href="' . encode_url("indilist.php?surname_sublist=no&ged=" . PGV_GEDCOM) . '">' . $stats->totalIndividuals() . '</a></div></td></tr>';
        $content .= '<tr><td class="facts_label">' . $pgv_lang['stat_males'] . '</td><td class="facts_value"><div dir="rtl">' . $stats->totalSexMales() . '<br />' . $stats->totalSexMalesPercentage() . '%</div></td></tr>';
        $content .= '<tr><td class="facts_label">' . $pgv_lang['stat_females'] . '</td><td class="facts_value"><div dir="rtl">' . $stats->totalSexFemales() . '<br />' . $stats->totalSexFemalesPercentage() . '%</div></td></tr>';
    }
    if ($config['stat_surname'] == 'yes') {
        $content .= '<tr><td class="facts_label">' . $pgv_lang['stat_surnames'] . '</td><td class="facts_value"><div dir="rtl"><a href="' . encode_url("indilist.php?show_all=yes&surname_sublist=yes&ged=" . PGV_GEDCOM) . '">' . $stats->totalSurnames() . '</a></div></td></tr>';
    }
    if ($config['stat_fam'] == 'yes') {
        $content .= '<tr><td class="facts_label">' . $pgv_lang['stat_families'] . '</td><td class="facts_value"><div dir="rtl"><a href="famlist.php">' . $stats->totalFamilies() . '</a></div></td></tr>';
    }
    if ($config['stat_sour'] == 'yes') {
        $content .= '<tr><td class="facts_label">' . $pgv_lang['stat_sources'] . '</td><td class="facts_value"><div dir="rtl"><a href="sourcelist.php">' . $stats->totalSources() . '</a></div></td></tr>';
    }
    if ($config['stat_media'] == 'yes' && $MULTI_MEDIA == true) {
        $content .= '<tr><td class="facts_label">' . $pgv_lang['stat_media'] . '</td><td class="facts_value"><div dir="rtl"><a href="medialist.php">' . $stats->totalMedia() . '</a></div></td></tr>';
    }
    if ($config['stat_other'] == 'yes') {
        $content .= '<tr><td class="facts_label">' . $pgv_lang['stat_other'] . '</td><td class="facts_value"><div dir="rtl">' . $stats->totalOtherRecords() . '</div></td></tr>';
    }
    if ($config['stat_events'] == 'yes') {
        $content .= '<tr><td class="facts_label">' . $pgv_lang['stat_events'] . '</td><td class="facts_value"><div dir="rtl">' . $stats->totalEvents() . '</div></td></tr>';
    }
    if ($config['stat_users'] == 'yes') {
        $content .= '<tr><td class="facts_label">' . $pgv_lang['stat_users'] . '</td><td class="facts_value"><div dir="rtl">';
        if (PGV_USER_GEDCOM_ADMIN) {
            $content .= '<a href="useradmin.php">' . $stats->totalUsers() . '</a>';
        } else {
            $content .= $stats->totalUsers();
        }
        $content .= '</div>
</td>
</tr>';
    }
    if (!$block) {
        $content .= '</table></td><td><br /></td><td valign="top"><table cellspacing="1" cellpadding="1" border="0">';
    }
    if ($config['stat_first_birth'] == 'yes') {
        $content .= '<tr><td class="facts_label">' . $pgv_lang['stat_earliest_birth'] . '</td><td class="facts_value"><div dir="rtl">' . $stats->firstBirthYear() . '</div></td>';
        if (!$block) {
            $content .= '<td class="facts_value">' . $stats->firstBirth() . '</td>';
        }
        $content .= '</tr>';
    }
    if ($config['stat_last_birth'] == 'yes') {
        $content .= '<tr><td class="facts_label">' . $pgv_lang['stat_latest_birth'] . '</td><td class="facts_value"><div dir="rtl">' . $stats->lastBirthYear() . '</div></td>';
        if (!$block) {
            $content .= '<td class="facts_value">' . $stats->lastBirth() . '</td>';
        }
        $content .= '</tr>';
    }
    if ($config['stat_first_death'] == 'yes') {
        $content .= '<tr><td class="facts_label">' . $pgv_lang['stat_earliest_death'] . '</td><td class="facts_value"><div dir="rtl">' . $stats->firstDeathYear() . '</div></td>';
        if (!$block) {
            $content .= '<td class="facts_value">' . $stats->firstDeath() . '</td>';
        }
        $content .= '</tr>';
    }
    if ($config['stat_last_death'] == 'yes') {
        $content .= '<tr><td class="facts_label">' . $pgv_lang['stat_latest_death'] . '</td><td class="facts_value"><div dir="rtl">' . $stats->lastDeathYear() . '</div>
</td>';
        if (!$block) {
            $content .= '<td class="facts_value">' . $stats->lastDeath() . '</td>';
        }
        $content .= '</tr>';
    }
    if ($config['stat_long_life'] == 'yes') {
        $content .= '<tr><td class="facts_label">' . $pgv_lang['stat_longest_life'] . '</td><td class="facts_value"><div dir="rtl">' . $stats->LongestLifeAge() . '</div></td>';
        if (!$block) {
            $content .= '<td class="facts_value">' . $stats->LongestLife() . '</td>';
        }
        $content .= '</tr>';
    }
    if ($config['stat_avg_life'] == 'yes') {
        $content .= '<tr><td class="facts_label">' . $pgv_lang['stat_avg_age_at_death'] . '</td><td class="facts_value"><div dir="rtl">' . $stats->averageLifespan() . '</div></td>';
        if (!$block) {
            $content .= '<td class="facts_value">' . $pgv_lang['stat_males'] . ':&nbsp;' . $stats->averageLifespanMale();
            $content .= '&nbsp;&nbsp;&nbsp;' . $pgv_lang['stat_females'] . ':&nbsp;' . $stats->averageLifespanFemale() . '</td>';
        }
        $content .= '</tr>';
    }
    if ($config['stat_most_chil'] == 'yes' && !$block) {
        $content .= '<tr><td class="facts_label">' . $pgv_lang['stat_most_children'] . '</td><td class="facts_value"><div dir="rtl">' . $stats->largestFamilySize() . '</div></td>';
        if (!$block) {
            $content .= '<td class="facts_value">' . $stats->largestFamily() . '</td>';
        }
        $content .= '</tr>';
    }
    if ($config['stat_avg_chil'] == 'yes') {
        $content .= '<tr><td class="facts_label">' . $pgv_lang['stat_average_children'] . '</td><td class="facts_value"><div dir="rtl">' . $stats->averageChildren() . '</div></td>';
        if (!$block) {
            $content .= '<td class="facts_value">&nbsp;</td>';
        }
        $content .= '</tr>';
    }
    $content .= '</table></td></tr></table>';
    if ($config['stat_link'] == 'yes') {
        $content .= '<a href="statistics.php"><b>' . $pgv_lang['stat_link'] . '</b></a><br />';
    }
    // NOTE: Print the most common surnames
    if ($config['show_common_surnames'] == 'yes') {
        $surnames = get_common_surnames($COMMON_NAMES_THRESHOLD);
        if (count($surnames) > 0) {
            $content .= '<br />';
            $content .= print_help_link('index_common_names_help', 'qm', '', false, true);
            $content .= '<b>' . $pgv_lang['common_surnames'] . '</b><br />';
            $i = 0;
            foreach ($surnames as $indexval => $surname) {
                if (stristr($surname['name'], '@N.N') === false) {
                    if ($i > 0) {
                        $content .= ', ';
                    }
                    $content .= '<a href="' . encode_url("indilist.php?ged=" . PGV_GEDCOM . "&surname=" . $surname['name']) . '">' . PrintReady($surname['name']) . '</a>';
                    $i++;
                }
            }
        }
    }
    global $THEME_DIR;
    if ($block) {
        require $THEME_DIR . 'templates/block_small_temp.php';
    } else {
        require $THEME_DIR . 'templates/block_main_temp.php';
    }
}
Beispiel #3
0
/**
 * get gedcom tag value
 *
 * returns the value of a gedcom tag from the given gedcom record
 * @param string $tag	The tag to find, use : to delineate subtags
 * @param int $level	The gedcom line level of the first tag to find, setting level to 0 will cause it to use 1+ the level of the incoming record
 * @param string $gedrec	The gedcom record to get the value from
 * @param int $truncate	Should the value be truncated to a certain number of characters
 * @param boolean $convert	Should data like dates be converted using the configuration settings
 * @return string
 */
function get_gedcom_value($tag, $level, $gedrec, $truncate = '', $convert = true)
{
    global $SHOW_PEDIGREE_PLACES, $pgv_lang;
    if (empty($gedrec)) {
        return "";
    }
    $tags = explode(':', $tag);
    $origlevel = $level;
    if ($level == 0) {
        $level = $gedrec[0] + 1;
    }
    $subrec = $gedrec;
    foreach ($tags as $indexval => $t) {
        $lastsubrec = $subrec;
        $subrec = get_sub_record($level, "{$level} {$t}", $subrec);
        if (empty($subrec) && $origlevel == 0) {
            $level--;
            $subrec = get_sub_record($level, "{$level} {$t}", $lastsubrec);
        }
        if (empty($subrec)) {
            if ($t == "TITL") {
                $subrec = get_sub_record($level, "{$level} ABBR", $lastsubrec);
                if (!empty($subrec)) {
                    $t = "ABBR";
                }
            }
            if (empty($subrec)) {
                if ($level > 0) {
                    $level--;
                }
                $subrec = get_sub_record($level, "@ {$t}", $gedrec);
                if (empty($subrec)) {
                    return;
                }
            }
        }
        $level++;
    }
    $level--;
    $ct = preg_match("/{$level} {$t}(.*)/", $subrec, $match);
    if ($ct == 0) {
        $ct = preg_match("/{$level} @.+@ (.+)/", $subrec, $match);
    }
    if ($ct == 0) {
        $ct = preg_match("/@ {$t} (.+)/", $subrec, $match);
    }
    if ($ct > 0) {
        $value = trim($match[1]);
        $ct = preg_match("/@(.*)@/", $value, $match);
        if ($ct > 0 && $t != "DATE") {
            $oldsub = $subrec;
            switch ($t) {
                case 'HUSB':
                case 'WIFE':
                case 'CHIL':
                    $subrec = find_person_record($match[1]);
                    break;
                case 'FAMC':
                case 'FAMS':
                    $subrec = find_family_record($match[1]);
                    break;
                case 'SOUR':
                    $subrec = find_source_record($match[1]);
                    break;
                case 'REPO':
                    $subrec = find_other_record($match[1]);
                    break;
                default:
                    $subrec = find_gedcom_record($match[1]);
                    break;
            }
            if ($subrec) {
                $value = $match[1];
                $ct = preg_match("/0 @{$match['1']}@ {$t} (.+)/", $subrec, $match);
                if ($ct > 0) {
                    $value = $match[1];
                    $level = 0;
                } else {
                    $subrec = $oldsub;
                }
            } else {
                //-- set the value to the id without the @
                $value = $match[1];
            }
        }
        if ($level != 0 || $t != "NOTE") {
            $value .= get_cont($level + 1, $subrec);
        }
        $value = preg_replace("'\n'", "", $value);
        $value = preg_replace("'<br />'", "\n", $value);
        $value = trim($value);
        //-- if it is a date value then convert the date
        if ($convert && $t == "DATE") {
            $g = new GedcomDate($value);
            $value = $g->Display();
            if (!empty($truncate)) {
                if (UTF8_strlen($value) > $truncate) {
                    $value = preg_replace("/\\(.+\\)/", "", $value);
                    //if (UTF8_strlen($value)>$truncate) {
                    //	$value = preg_replace_callback("/([a-zśź]+)/ui", create_function('$matches', 'return UTF8_substr($matches[1], 0, 3);'), $value);
                    //}
                }
            }
        } else {
            //-- if it is a place value then apply the pedigree place limit
            if ($convert && $t == "PLAC") {
                if ($SHOW_PEDIGREE_PLACES > 0) {
                    $plevels = explode(',', $value);
                    $value = "";
                    for ($plevel = 0; $plevel < $SHOW_PEDIGREE_PLACES; $plevel++) {
                        if (!empty($plevels[$plevel])) {
                            if ($plevel > 0) {
                                $value .= ", ";
                            }
                            $value .= trim($plevels[$plevel]);
                        }
                    }
                }
                if (!empty($truncate)) {
                    if (strlen($value) > $truncate) {
                        $plevels = explode(',', $value);
                        $value = "";
                        for ($plevel = 0; $plevel < count($plevels); $plevel++) {
                            if (!empty($plevels[$plevel])) {
                                if (strlen($plevels[$plevel]) + strlen($value) + 3 < $truncate) {
                                    if ($plevel > 0) {
                                        $value .= ", ";
                                    }
                                    $value .= trim($plevels[$plevel]);
                                } else {
                                    break;
                                }
                            }
                        }
                    }
                }
            } else {
                if ($convert && $t == "SEX") {
                    if ($value == "M") {
                        $value = get_first_letter($pgv_lang["male"]);
                    } elseif ($value == "F") {
                        $value = get_first_letter($pgv_lang["female"]);
                    } else {
                        $value = get_first_letter($pgv_lang["unknown"]);
                    }
                } else {
                    if (!empty($truncate)) {
                        if (strlen($value) > $truncate) {
                            $plevels = explode(' ', $value);
                            $value = "";
                            for ($plevel = 0; $plevel < count($plevels); $plevel++) {
                                if (!empty($plevels[$plevel])) {
                                    if (strlen($plevels[$plevel]) + strlen($value) + 3 < $truncate) {
                                        if ($plevel > 0) {
                                            $value .= " ";
                                        }
                                        $value .= trim($plevels[$plevel]);
                                    } else {
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        return $value;
    }
    return "";
}
Beispiel #4
0
 static function gedcomDate()
 {
     global $DATE_FORMAT;
     $head = find_other_record('HEAD');
     if (preg_match("/1 DATE (.+)/", $head, $match)) {
         $date = new GedcomDate($match[1]);
         return $date->Display(false, $DATE_FORMAT);
         // Override $PUBLIC_DATE_FORMAT
     }
     return '';
 }