1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/webtrees_ynh.git synced 2024-09-03 18:26:37 +02:00
webtrees_ynh/sources/app/Theme/AdministrationTheme.php

306 lines
8.9 KiB
PHP

<?php
/**
* webtrees: online genealogy
* Copyright (C) 2016 webtrees development team
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
namespace Fisharebest\Webtrees\Theme;
use Fisharebest\Webtrees\Auth;
use Fisharebest\Webtrees\I18N;
use Fisharebest\Webtrees\Menu;
use Fisharebest\Webtrees\Tree;
/**
* The theme for the control panel.
*/
class AdministrationTheme extends AbstractTheme implements ThemeInterface {
/**
* A list of CSS files to include for this page.
*
* @return string[]
*/
protected function stylesheets() {
$stylesheets = parent::stylesheets();
$stylesheets[] = WT_DATATABLES_BOOTSTRAP_CSS_URL;
$stylesheets[] = WT_BOOTSTRAP_DATETIMEPICKER_CSS_URL;
$stylesheets[] = $this->assetUrl() . 'style.css';
return $stylesheets;
}
/**
* Where are our CSS, JS and other assets?
*
* @return string A relative path, such as "themes/foo/"
*/
public function assetUrl() {
return 'themes/_administration/css-1.7.5/';
}
/**
* HTML link to a "favorites icon".
*
* @return string
*/
protected function favicon() {
return '<link rel="icon" href="favicon.ico" type="image/x-icon">';
}
/**
* Create the contents of the <footer> tag.
*
* @return string
*/
protected function footerContent() {
return '';
}
/**
* Create the contents of the <header> tag.
*
* @return string
*/
protected function headerContent() {
return
$this->accessibilityLinks() .
$this->secondaryMenuContainer($this->secondaryMenu());
}
/**
* Allow themes to add extra scripts to the page footer.
*
* @return string
*/
public function hookFooterExtraJavascript() {
return
'<script src="' . WT_BOOTSTRAP_JS_URL . '"></script>';
}
/**
* Site administration functions.
*
* @return Menu
*/
protected function menuAdminSite() {
return new Menu(/* I18N: Menu entry*/ I18N::translate('Website'), '#', '', array(), array(
new Menu(/* I18N: Menu entry */ I18N::translate('Website preferences'), 'admin_site_config.php?action=site'),
new Menu(/* I18N: Menu entry */ I18N::translate('Sending email'), 'admin_site_config.php?action=email'),
new Menu(/* I18N: Menu entry */ I18N::translate('Sign-in and registration'), 'admin_site_config.php?action=login'),
new Menu(/* I18N: Menu entry */ I18N::translate('Languages'), 'admin_site_config.php?action=languages'),
new Menu(/* I18N: Menu entry */ I18N::translate('Tracking and analytics'), 'admin_site_config.php?action=tracking'),
new Menu(/* I18N: Menu entry */ I18N::translate('Website logs'), 'admin_site_logs.php'),
new Menu(/* I18N: Menu entry */ I18N::translate('Website access rules'), 'admin_site_access.php'),
new Menu(/* I18N: Menu entry */ I18N::translate('Clean up data folder'), 'admin_site_clean.php'),
new Menu(/* I18N: Menu entry */ I18N::translate('Server information'), 'admin_site_info.php'),
new Menu(/* I18N: Menu entry */ I18N::translate('README documentation'), 'admin_site_readme.php'),
));
}
/**
* Tree administration menu.
*
* @return Menu
*/
protected function menuAdminTrees() {
return new Menu(/* I18N: Menu entry */ I18N::translate('Family trees'), '#', '', array(), array_filter(array(
$this->menuAdminTreesManage(),
$this->menuAdminTreesSetDefault(),
$this->menuAdminTreesMerge(),
)));
}
/**
* Manage trees menu.
*
* @return Menu
*/
protected function menuAdminTreesManage() {
return new Menu(/* I18N: Menu entry */ I18N::translate('Manage family trees'), 'admin_trees_manage.php');
}
/**
* Merge trees menu.
*
* @return Menu|null
*/
protected function menuAdminTreesMerge() {
if (Auth::isAdmin() && count(Tree::getAll()) > 1) {
return new Menu(/* I18N: Menu entry */ I18N::translate('Merge family trees'), 'admin_trees_merge.php');
} else {
return null;
}
}
/**
* Set default blocks menu.
*
* @return Menu|null
*/
protected function menuAdminTreesSetDefault() {
if (Auth::isAdmin() && count(Tree::getAll()) > 1) {
return new Menu(/* I18N: Menu entry */ I18N::translate('Set the default blocks for new family trees'), 'index_edit.php?gedcom_id=-1');
} else {
return null;
}
}
/**
* User administration menu.
*
* @return Menu
*/
protected function menuAdminUsers() {
return new Menu(/* I18N: Menu entry */ I18N::translate('Users'), '#', '', array(), array(
new Menu(/* I18N: Menu entry */ I18N::translate('User administration'), 'admin_users.php'),
new Menu(/* I18N: Menu entry */ I18N::translate('Add a user'), 'admin_users.php?action=edit'),
new Menu(/* I18N: Menu entry */ I18N::translate('Send broadcast messages'), 'admin_users_bulk.php'),
new Menu(/* I18N: Menu entry */ I18N::translate('Delete inactive users'), 'admin_users.php?action=cleanup'),
new Menu(/* I18N: Menu entry */ I18N::translate('Set the default blocks for new users'), 'index_edit.php?user_id=-1'),
));
}
/**
* Media administration menu.
*
* @return Menu
*/
protected function menuAdminMedia() {
return new Menu(/* I18N: Menu entry */ I18N::translate('Media'), '#', '', array(), array(
new Menu(/* I18N: Menu entry */ I18N::translate('Manage media'), 'admin_media.php'),
new Menu(/* I18N: Menu entry */ I18N::translate('Upload media files'), 'admin_media_upload.php'),
));
}
/**
* Module administration menu.
*
* @return Menu
*/
protected function menuAdminModules() {
return new Menu(/* I18N: Menu entry */ I18N::translate('Modules'), '#', '', array(), array(
new Menu(/* I18N: Menu entry */ I18N::translate('Module administration'), 'admin_modules.php'),
new Menu(/* I18N: Menu entry */ I18N::translate('Menus'), 'admin_module_menus.php'),
new Menu(/* I18N: Menu entry */ I18N::translate('Tabs'), 'admin_module_tabs.php'),
new Menu(/* I18N: Menu entry */ I18N::translate('Blocks'), 'admin_module_blocks.php'),
new Menu(/* I18N: Menu entry */ I18N::translate('Sidebars'), 'admin_module_sidebar.php'),
new Menu(/* I18N: Menu entry */ I18N::translate('Charts'), 'admin_module_charts.php'),
new Menu(/* I18N: Menu entry */ I18N::translate('Reports'), 'admin_module_reports.php'),
));
}
/**
* Generate a list of items for the main menu.
*
* @return Menu[]
*/
protected function primaryMenu() {
if (Auth::isAdmin()) {
return array(
$this->menuAdminSite(),
$this->menuAdminTrees(),
$this->menuAdminUsers(),
$this->menuAdminMedia(),
$this->menuAdminModules(),
);
} else {
return array(
$this->menuAdminTrees(),
);
}
}
/**
* Add markup to the primary menu.
*
* @param Menu[] $menus
*
* @return string
*/
protected function primaryMenuContainer(array $menus) {
$html = '';
foreach ($menus as $menu) {
$html .= $menu->bootstrap();
}
return
'<nav class="navbar navbar-default">' .
'<div class="navbar-header">' .
'<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#primary-navbar-collapse">' .
'<span class="sr-only">Toggle navigation</span>' .
'<span class="icon-bar"></span>' .
'<span class="icon-bar"></span>' .
'<span class="icon-bar"></span>' .
'</button>' .
'<a class="navbar-brand" href="admin.php">' . I18N::translate('Control panel') . '</a>' .
'</div>' .
'<div class="collapse navbar-collapse" id="primary-navbar-collapse">' .
'<ul class="nav navbar-nav">' .
$html .
'</ul>' .
'</div>' .
'</nav>';
}
/**
* Generate a list of items for the user menu.
*
* @return Menu[]
*/
protected function secondaryMenu() {
return array_filter(array(
$this->menuPendingChanges(),
$this->menuMyPage(),
$this->menuLanguages(),
$this->menuLogout(),
));
}
/**
* Add markup to the secondary menu.
*
* @param Menu[] $menus
*
* @return string
*/
protected function secondaryMenuContainer(array $menus) {
return '<div class="clearfix"><ul class="nav nav-pills small pull-right flip" role="menu">' . $this->secondaryMenuContent($menus) . '</ul></div>';
}
/**
* Format the secondary menu.
*
* @param Menu[] $menus
*
* @return string
*/
protected function secondaryMenuContent(array $menus) {
return implode('', array_map(function (Menu $menu) { return $menu->bootstrap(); }, $menus));
}
/**
* A fixed string to identify this theme, in settings, etc.
*
* @return string
*/
public function themeId() {
return '_administration';
}
/**
* What is this theme called?
*
* @return string
*/
public function themeName() {
return 'administration';
}
}