summaryrefslogtreecommitdiff
path: root/app/Module/TopSurnamesModule.php
diff options
context:
space:
mode:
Diffstat (limited to 'app/Module/TopSurnamesModule.php')
-rw-r--r--app/Module/TopSurnamesModule.php333
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;
+ }
}