diff options
Diffstat (limited to 'app/Module/TopSurnamesModule.php')
| -rw-r--r-- | app/Module/TopSurnamesModule.php | 333 |
1 files changed, 177 insertions, 156 deletions
diff --git a/app/Module/TopSurnamesModule.php b/app/Module/TopSurnamesModule.php index aee0ae0a20..ecf40210f7 100644 --- a/app/Module/TopSurnamesModule.php +++ b/app/Module/TopSurnamesModule.php @@ -26,181 +26,202 @@ use Fisharebest\Webtrees\Tree; /** * Class TopSurnamesModule */ -class TopSurnamesModule extends AbstractModule implements ModuleBlockInterface { - // Default values for new blocks. - const DEFAULT_NUMBER = 10; - const DEFAULT_STYLE = 'table'; +class TopSurnamesModule extends AbstractModule implements ModuleBlockInterface +{ + // Default values for new blocks. + const DEFAULT_NUMBER = 10; + const DEFAULT_STYLE = 'table'; - /** - * How should this module be labelled on tabs, menus, etc.? - * - * @return string - */ - public function getTitle() { - return /* I18N: Name of a module. Top=Most common */ I18N::translate('Top surnames'); - } + /** + * How should this module be labelled on tabs, menus, etc.? + * + * @return string + */ + public function getTitle() + { + return /* I18N: Name of a module. Top=Most common */ + I18N::translate('Top surnames'); + } - /** - * A sentence describing what this module does. - * - * @return string - */ - public function getDescription() { - return /* I18N: Description of the “Top surnames” module */ I18N::translate('A list of the most popular surnames.'); - } + /** + * A sentence describing what this module does. + * + * @return string + */ + public function getDescription() + { + return /* I18N: Description of the “Top surnames” module */ + I18N::translate('A list of the most popular surnames.'); + } - /** - * Generate the HTML content of this block. - * - * @param Tree $tree - * @param int $block_id - * @param bool $template - * @param string[] $cfg - * - * @return string - */ - public function getBlock(Tree $tree, int $block_id, bool $template = true, array $cfg = []): string { - global $ctype; + /** + * Generate the HTML content of this block. + * + * @param Tree $tree + * @param int $block_id + * @param bool $template + * @param string[] $cfg + * + * @return string + */ + public function getBlock(Tree $tree, int $block_id, bool $template = true, array $cfg = []): string + { + global $ctype; - $num = $this->getBlockSetting($block_id, 'num', self::DEFAULT_NUMBER); - $infoStyle = $this->getBlockSetting($block_id, 'infoStyle', self::DEFAULT_STYLE); + $num = $this->getBlockSetting($block_id, 'num', self::DEFAULT_NUMBER); + $infoStyle = $this->getBlockSetting($block_id, 'infoStyle', self::DEFAULT_STYLE); - extract($cfg, EXTR_OVERWRITE); + extract($cfg, EXTR_OVERWRITE); - // This next function is a bit out of date, and doesn't cope well with surname variants - $top_surnames = FunctionsDb::getTopSurnames($tree->getTreeId(), 0, $num); + // This next function is a bit out of date, and doesn't cope well with surname variants + $top_surnames = FunctionsDb::getTopSurnames($tree->getTreeId(), 0, $num); - $all_surnames = []; - $i = 0; - foreach (array_keys($top_surnames) as $top_surname) { - $all_surnames = array_merge($all_surnames, QueryName::surnames($tree, $top_surname, '', false, false)); - if (++$i == $num) { - break; - } - } - if ($i < $num) { - $num = $i; - } + $all_surnames = []; + $i = 0; + foreach (array_keys($top_surnames) as $top_surname) { + $all_surnames = array_merge($all_surnames, QueryName::surnames($tree, $top_surname, '', false, false)); + if (++$i == $num) { + break; + } + } + if ($i < $num) { + $num = $i; + } - switch ($infoStyle) { - case 'tagcloud': - uksort($all_surnames, '\Fisharebest\Webtrees\I18N::strcasecmp'); - $content = FunctionsPrintLists::surnameTagCloud($all_surnames, 'individual-list', true, $tree); - break; - case 'list': - uasort($all_surnames, '\Fisharebest\Webtrees\Module\TopSurnamesModule::surnameCountSort'); - $content = FunctionsPrintLists::surnameList($all_surnames, 1, true, 'individual-list', $tree); - break; - case 'array': - uasort($all_surnames, '\Fisharebest\Webtrees\Module\TopSurnamesModule::surnameCountSort'); - $content = FunctionsPrintLists::surnameList($all_surnames, 2, true, 'individual-list', $tree); - break; - case 'table': - default: - uasort($all_surnames, '\Fisharebest\Webtrees\Module\TopSurnamesModule::surnameCountSort'); - $content = view('lists/surnames-table', [ - 'surnames' => $all_surnames, - 'route' => 'individual-list', - 'tree' => $tree, - ]); - break; - } + switch ($infoStyle) { + case 'tagcloud': + uksort($all_surnames, '\Fisharebest\Webtrees\I18N::strcasecmp'); + $content = FunctionsPrintLists::surnameTagCloud($all_surnames, 'individual-list', true, $tree); + break; + case 'list': + uasort($all_surnames, '\Fisharebest\Webtrees\Module\TopSurnamesModule::surnameCountSort'); + $content = FunctionsPrintLists::surnameList($all_surnames, 1, true, 'individual-list', $tree); + break; + case 'array': + uasort($all_surnames, '\Fisharebest\Webtrees\Module\TopSurnamesModule::surnameCountSort'); + $content = FunctionsPrintLists::surnameList($all_surnames, 2, true, 'individual-list', $tree); + break; + case 'table': + default: + uasort($all_surnames, '\Fisharebest\Webtrees\Module\TopSurnamesModule::surnameCountSort'); + $content = view('lists/surnames-table', [ + 'surnames' => $all_surnames, + 'route' => 'individual-list', + 'tree' => $tree, + ]); + break; + } - if ($template) { - if ($num == 1) { - // I18N: i.e. most popular surname. - $title = I18N::translate('Top surname'); - } else { - // I18N: Title for a list of the most common surnames, %s is a number. Note that a separate translation exists when %s is 1 - $title = I18N::plural('Top %s surname', 'Top %s surnames', $num, I18N::number($num)); - } + if ($template) { + if ($num == 1) { + // I18N: i.e. most popular surname. + $title = I18N::translate('Top surname'); + } else { + // I18N: Title for a list of the most common surnames, %s is a number. Note that a separate translation exists when %s is 1 + $title = I18N::plural('Top %s surname', 'Top %s surnames', $num, I18N::number($num)); + } - if ($ctype === 'gedcom' && Auth::isManager($tree)) { - $config_url = route('tree-page-block-edit', ['block_id' => $block_id, 'ged' => $tree->getName()]); - } elseif ($ctype === 'user' && Auth::check()) { - $config_url = route('user-page-block-edit', ['block_id' => $block_id, 'ged' => $tree->getName()]); - } else { - $config_url = ''; - } + if ($ctype === 'gedcom' && Auth::isManager($tree)) { + $config_url = route('tree-page-block-edit', [ + 'block_id' => $block_id, + 'ged' => $tree->getName(), + ]); + } elseif ($ctype === 'user' && Auth::check()) { + $config_url = route('user-page-block-edit', [ + 'block_id' => $block_id, + 'ged' => $tree->getName(), + ]); + } else { + $config_url = ''; + } - return view('modules/block-template', [ - 'block' => str_replace('_', '-', $this->getName()), - 'id' => $block_id, - 'config_url' => $config_url, - 'title' => $title, - 'content' => $content, - ]); - } else { - return $content; - } - } + return view('modules/block-template', [ + 'block' => str_replace('_', '-', $this->getName()), + 'id' => $block_id, + 'config_url' => $config_url, + 'title' => $title, + 'content' => $content, + ]); + } else { + return $content; + } + } - /** {@inheritdoc} */ - public function loadAjax(): bool { - return false; - } + /** {@inheritdoc} */ + public function loadAjax(): bool + { + return false; + } - /** {@inheritdoc} */ - public function isUserBlock(): bool { - return true; - } + /** {@inheritdoc} */ + public function isUserBlock(): bool + { + return true; + } - /** {@inheritdoc} */ - public function isGedcomBlock(): bool { - return true; - } + /** {@inheritdoc} */ + public function isGedcomBlock(): bool + { + return true; + } - /** - * An HTML form to edit block settings - * - * @param Tree $tree - * @param int $block_id - * - * @return void - */ - public function configureBlock(Tree $tree, int $block_id) { - if ($_SERVER['REQUEST_METHOD'] === 'POST') { - $this->setBlockSetting($block_id, 'num', Filter::postInteger('num', 1, 10000, 10)); - $this->setBlockSetting($block_id, 'infoStyle', Filter::post('infoStyle', 'list|array|table|tagcloud', self::DEFAULT_STYLE)); + /** + * An HTML form to edit block settings + * + * @param Tree $tree + * @param int $block_id + * + * @return void + */ + public function configureBlock(Tree $tree, int $block_id) + { + if ($_SERVER['REQUEST_METHOD'] === 'POST') { + $this->setBlockSetting($block_id, 'num', Filter::postInteger('num', 1, 10000, 10)); + $this->setBlockSetting($block_id, 'infoStyle', Filter::post('infoStyle', 'list|array|table|tagcloud', self::DEFAULT_STYLE)); - return; - } + return; + } - $num = $this->getBlockSetting($block_id, 'num', self::DEFAULT_NUMBER); - $infoStyle = $this->getBlockSetting($block_id, 'infoStyle', self::DEFAULT_STYLE); + $num = $this->getBlockSetting($block_id, 'num', self::DEFAULT_NUMBER); + $infoStyle = $this->getBlockSetting($block_id, 'infoStyle', self::DEFAULT_STYLE); - $info_styles = [ - 'list' => /* I18N: An option in a list-box */ I18N::translate('bullet list'), - 'array' => /* I18N: An option in a list-box */ I18N::translate('compact list'), - 'table' => /* I18N: An option in a list-box */ I18N::translate('table'), - 'tagcloud' => /* I18N: An option in a list-box */ I18N::translate('tag cloud'), - ]; + $info_styles = [ + 'list' => /* I18N: An option in a list-box */ + I18N::translate('bullet list'), + 'array' => /* I18N: An option in a list-box */ + I18N::translate('compact list'), + 'table' => /* I18N: An option in a list-box */ + I18N::translate('table'), + 'tagcloud' => /* I18N: An option in a list-box */ + I18N::translate('tag cloud'), + ]; - echo view('modules/top10_surnames/config', [ - 'num' => $num, - 'infoStyle' => $infoStyle, - 'info_styles' => $info_styles, - ]); - } + echo view('modules/top10_surnames/config', [ + 'num' => $num, + 'infoStyle' => $infoStyle, + 'info_styles' => $info_styles, + ]); + } - /** - * Sort (lists of counts of similar) surname by total count. - * - * @param string[][] $a - * @param string[][] $b - * - * @return int - */ - private static function surnameCountSort($a, $b) { - $counta = 0; - foreach ($a as $x) { - $counta += count($x); - } - $countb = 0; - foreach ($b as $x) { - $countb += count($x); - } + /** + * Sort (lists of counts of similar) surname by total count. + * + * @param string[][] $a + * @param string[][] $b + * + * @return int + */ + private static function surnameCountSort($a, $b) + { + $counta = 0; + foreach ($a as $x) { + $counta += count($x); + } + $countb = 0; + foreach ($b as $x) { + $countb += count($x); + } - return $countb - $counta; - } + return $countb - $counta; + } } |
