. */ namespace Fisharebest\Webtrees\Module; use Fisharebest\Webtrees\Auth; use Fisharebest\Webtrees\Bootstrap4; use Fisharebest\Webtrees\Database; use Fisharebest\Webtrees\Filter; use Fisharebest\Webtrees\GedcomRecord; use Fisharebest\Webtrees\Html; use Fisharebest\Webtrees\I18N; /** * Class TopPageViewsModule */ class TopPageViewsModule extends AbstractModule implements ModuleBlockInterface { /** * How should this module be labelled on tabs, menus, etc.? * * @return string */ public function getTitle() { return /* I18N: Name of a module */ I18N::translate('Most viewed pages'); } /** * A sentence describing what this module does. * * @return string */ public function getDescription() { return /* I18N: Description of the “Most visited pages” module */ I18N::translate('A list of the pages that have been viewed the most number of times.'); } /** * Generate the HTML content of this block. * * @param int $block_id * @param bool $template * @param string[] $cfg * * @return string */ public function getBlock($block_id, $template = true, $cfg = []): string { global $ctype, $WT_TREE; $num = $this->getBlockSetting($block_id, 'num', '10'); $count_placement = $this->getBlockSetting($block_id, 'count_placement', 'before'); foreach (['count_placement', 'num'] as $name) { if (array_key_exists($name, $cfg)) { $$name = $cfg[$name]; } } // load the lines from the file $top10 = Database::prepare( "SELECT page_parameter, page_count" . " FROM `##hit_counter`" . " WHERE gedcom_id = :tree_id AND page_name IN ('individual.php','family.php','source.php','repo.php','note.php','mediaviewer.php')" . " ORDER BY page_count DESC LIMIT :limit" )->execute([ 'tree_id' => $WT_TREE->getTreeId(), 'limit' => (int) $num, ])->fetchAssoc(); $content = '
[' . $count . '] | '; } $content .= '' . $record->getFullName() . ' | '; if ($count_placement == 'after') { $content .= '[' . $count . '] | '; } $content .= '