i18n::translate('Top 10 Surnames'),
'type'=>'both',
'descr'=>i18n::translate('This block shows a table of the 10 most frequently occurring surnames in the database. The actual number of surnames shown in this block is configurable. You can configure the GEDCOM to remove names from this list.'),
'canconfig'=>true,
'config'=>array(
'cache'=>7,
'num'=>10,
)
);
function top_surname_sort($a, $b) {
$counta=0;
foreach ($a as $x) {
$counta+=count($x);
}
$countb=0;
foreach ($b as $x) {
$countb+=count($x);
}
return $countb - $counta;
}
function print_block_name_top10($block=true, $config="", $side, $index) {
global $COMMON_NAMES_ADD, $COMMON_NAMES_REMOVE, $COMMON_NAMES_THRESHOLD, $WT_BLOCKS, $ctype, $WT_IMAGES, $WT_IMAGE_DIR, $SURNAME_LIST_STYLE;
if (empty($config)) {
$config=$WT_BLOCKS["print_block_name_top10"]["config"];
}
// This next function is a bit out of date, and doesn't cope well with surname variants
$top_surnames=get_top_surnames(WT_GED_ID, 1, $config["num"]);
$all_surnames=array();
foreach (array_keys($top_surnames) as $top_surname) {
$all_surnames=array_merge($all_surnames, get_indilist_surns($top_surname, '', false, false, WT_GED_ID));
}
// Insert from the "Add Names" list if not already in there
if ($COMMON_NAMES_ADD) {
foreach (preg_split('/[,; ]+/', $COMMON_NAMES_ADD) as $addname) {
$ADDNAME=utf8_strtoupper($addname);
if (isset($all_surnames[$ADDNAME])) {
$SURNAME=$ADDNAME;
foreach (array_keys($all_surnames[$ADDNAME]) as $surname) {
if ($SURNAME!=$surname && $SURNAME==utf8_strtoupper($surname)) {
$all_surnames[$ADDNAME][$SURNAME]=$all_surnames[$ADDNAME][$surname];
unset ($all_surnames[$ADDNAME][$surname]);
}
}
if (isset($all_surnames[$ADDNAME][$SURNAME])) {
$n=count($all_surnames[$ADDNAME][$SURNAME]);
$all_surnames[$ADDNAME][$SURNAME]=array_fill(0, max($n, $COMMON_NAMES_THRESHOLD), true);
} else {
$all_surnames[$ADDNAME][$SURNAME]=array_fill(0, $COMMON_NAMES_THRESHOLD, true);
}
} else {
$all_surnames[$ADDNAME][$ADDNAME]=array_fill(0, $COMMON_NAMES_THRESHOLD, true);
}
}
}
// Remove names found in the "Remove Names" list
if ($COMMON_NAMES_REMOVE) {
foreach (preg_split("/[,; ]+/", $COMMON_NAMES_REMOVE) as $delname) {
unset($all_surnames[utf8_strtoupper($delname)]);
}
}
$id="top10surnames";
$title='';
if ($WT_BLOCKS["print_block_name_top10"]["canconfig"]) {
if ($ctype=="gedcom" && WT_USER_GEDCOM_ADMIN || $ctype=="user" && WT_USER_ID) {
if ($ctype=="gedcom") {
$name = WT_GEDCOM;
} else {
$name = WT_USER_NAME;
}
$title .= "";
$title .= "";
}
}
// I18N: There are separate lists of male/female names, containing %d names each
$title .= i18n::plural('Top surname', 'Top %d surnames', $config['num'], $config['num']);
$title .= help_link('index_common_names');
switch ($SURNAME_LIST_STYLE) {
case 'style3':
uksort($all_surnames,'utf8_strcasecmp');
$content=format_surname_tagcloud($all_surnames, 'indilist', true);
break;
case 'style2':
default:
uasort($all_surnames, "top_surname_sort");
$content=format_surname_table($all_surnames, 'indilist');
break;
}
global $THEME_DIR;
if ($block) {
require $THEME_DIR.'templates/block_small_temp.php';
} else {
require $THEME_DIR.'templates/block_main_temp.php';
}
}
function print_block_name_top10_config($config) {
global $ctype, $WT_BLOCKS;
if (empty($config)) $config = $WT_BLOCKS["print_block_name_top10"]["config"];
if (!isset($config["cache"])) $config["cache"] = $WT_BLOCKS["print_block_name_top10"]["config"]["cache"];
?>