mirror of
https://github.com/YunoHost-Apps/webtrees_ynh.git
synced 2024-09-03 18:26:37 +02:00
264 lines
10 KiB
PHP
264 lines
10 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;
|
|||
|
|
|||
|
use Fisharebest\Webtrees\Controller\PageController;
|
|||
|
use Fisharebest\Webtrees\Functions\FunctionsEdit;
|
|||
|
use Fisharebest\Webtrees\Module\AbstractModule;
|
|||
|
use Fisharebest\Webtrees\Module\ModuleBlockInterface;
|
|||
|
use Fisharebest\Webtrees\Module\ModuleChartInterface;
|
|||
|
use Fisharebest\Webtrees\Module\ModuleConfigInterface;
|
|||
|
use Fisharebest\Webtrees\Module\ModuleMenuInterface;
|
|||
|
use Fisharebest\Webtrees\Module\ModuleReportInterface;
|
|||
|
use Fisharebest\Webtrees\Module\ModuleSidebarInterface;
|
|||
|
use Fisharebest\Webtrees\Module\ModuleTabInterface;
|
|||
|
use Fisharebest\Webtrees\Module\ModuleThemeInterface;
|
|||
|
|
|||
|
define('WT_SCRIPT_NAME', 'admin_modules.php');
|
|||
|
require 'includes/session.php';
|
|||
|
|
|||
|
$controller = new PageController;
|
|||
|
$controller
|
|||
|
->restrictAccess(Auth::isAdmin())
|
|||
|
->setPageTitle(I18N::translate('Module administration'));
|
|||
|
|
|||
|
$modules = Module::getInstalledModules('disabled');
|
|||
|
$module_status = Database::prepare("SELECT module_name, status FROM `##module`")->fetchAssoc();
|
|||
|
|
|||
|
uasort($modules, function (AbstractModule $x, AbstractModule $y) {
|
|||
|
return I18N::strcasecmp($x->getTitle(), $y->getTitle());
|
|||
|
});
|
|||
|
|
|||
|
if (Filter::post('action') === 'update_mods' && Filter::checkCsrf()) {
|
|||
|
foreach ($modules as $module) {
|
|||
|
$new_status = Filter::post('status-' . $module->getName(), '[01]');
|
|||
|
if ($new_status !== null) {
|
|||
|
$new_status = $new_status ? 'enabled' : 'disabled';
|
|||
|
$old_status = $module_status[$module->getName()];
|
|||
|
if ($new_status !== $old_status) {
|
|||
|
Database::prepare("UPDATE `##module` SET status=? WHERE module_name=?")->execute(array($new_status, $module->getName()));
|
|||
|
if ($new_status === 'disabled') {
|
|||
|
FlashMessages::addMessage(I18N::translate('The module “%s” has been disabled.', $module->getTitle()), 'success');
|
|||
|
} else {
|
|||
|
FlashMessages::addMessage(I18N::translate('The module “%s” has been enabled.', $module->getTitle()), 'success');
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
header('Location: ' . WT_BASE_URL . 'admin_modules.php');
|
|||
|
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
if (Filter::post('action') === 'delete' && Filter::checkCsrf()) {
|
|||
|
$module_name = Filter::post('module_name');
|
|||
|
Database::prepare(
|
|||
|
"DELETE `##block_setting`" .
|
|||
|
" FROM `##block_setting`" .
|
|||
|
" JOIN `##block` USING (block_id)" .
|
|||
|
" JOIN `##module` USING (module_name)" .
|
|||
|
" WHERE module_name=?"
|
|||
|
)->execute(array($module_name));
|
|||
|
Database::prepare(
|
|||
|
"DELETE `##block`" .
|
|||
|
" FROM `##block`" .
|
|||
|
" JOIN `##module` USING (module_name)" .
|
|||
|
" WHERE module_name=?"
|
|||
|
)->execute(array($module_name));
|
|||
|
Database::prepare("DELETE FROM `##module_setting` WHERE module_name=?")->execute(array($module_name));
|
|||
|
Database::prepare("DELETE FROM `##module_privacy` WHERE module_name=?")->execute(array($module_name));
|
|||
|
Database::prepare("DELETE FROM `##module` WHERE module_name=?")->execute(array($module_name));
|
|||
|
|
|||
|
FlashMessages::addMessage(I18N::translate('The preferences for the module “%s” have been deleted.', $module_name), 'success');
|
|||
|
|
|||
|
header('Location: ' . WT_BASE_URL . 'admin_modules.php');
|
|||
|
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
// The module can’t be found on disk?
|
|||
|
// Don't delete it automatically. It may be temporarily missing, after a re-installation, etc.
|
|||
|
foreach ($module_status as $module_name => $status) {
|
|||
|
if (!array_key_exists($module_name, $modules)) {
|
|||
|
$html =
|
|||
|
I18N::translate('Preferences exist for the module “%s”, but this module no longer exists.', '<span dir="ltr">' . $module_name . '</span>') .
|
|||
|
'<form method="post" class="form-inline">' .
|
|||
|
Filter::getCsrf() .
|
|||
|
'<input type="hidden" name="action" value="delete">' .
|
|||
|
'<input type="hidden" name="module_name" value="' . $module_name . '">' .
|
|||
|
'<button type="submit" class="btn btn-link">' . I18N::translate('Delete the preferences for this module.') . '</button>' .
|
|||
|
'</form>';
|
|||
|
FlashMessages::addMessage($html, 'warning');
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
$controller
|
|||
|
->pageHeader()
|
|||
|
->addExternalJavascript(WT_JQUERY_DATATABLES_JS_URL)
|
|||
|
->addExternalJavascript(WT_DATATABLES_BOOTSTRAP_JS_URL)
|
|||
|
->addInlineJavascript('
|
|||
|
function reindexMods(id) {
|
|||
|
jQuery("#" + id + " input").each(
|
|||
|
function (index, value) {
|
|||
|
value.value = index+1;
|
|||
|
});
|
|||
|
}
|
|||
|
jQuery("#installed_table").dataTable( {
|
|||
|
paging: false,
|
|||
|
' . I18N::datatablesI18N() . ',
|
|||
|
sorting: [[ 1, "asc" ]],
|
|||
|
columns : [
|
|||
|
{ sortable: false, class: "center" },
|
|||
|
null,
|
|||
|
null,
|
|||
|
{ class: "center" },
|
|||
|
{ class: "center" },
|
|||
|
{ class: "center" },
|
|||
|
{ class: "center" },
|
|||
|
{ class: "center" },
|
|||
|
{ class: "center" },
|
|||
|
{ class: "center", visible: false } // The Module system does not yet include themes
|
|||
|
]
|
|||
|
});
|
|||
|
');
|
|||
|
|
|||
|
?>
|
|||
|
<ol class="breadcrumb small">
|
|||
|
<li><a href="admin.php"><?php echo I18N::translate('Control panel'); ?></a></li>
|
|||
|
<li class="active"><?php echo $controller->getPageTitle(); ?></li>
|
|||
|
</ol>
|
|||
|
|
|||
|
<h1><?php echo $controller->getPageTitle(); ?></h1>
|
|||
|
|
|||
|
<form method="post" action="<?php echo WT_SCRIPT_NAME; ?>">
|
|||
|
<input type="hidden" name="action" value="update_mods">
|
|||
|
<?php echo Filter::getCsrf(); ?>
|
|||
|
<table class="table table-bordered table-hover table-condensed table-module-administration">
|
|||
|
<caption class="sr-only">
|
|||
|
<?php echo I18N::translate('Module administration'); ?>
|
|||
|
</caption>
|
|||
|
<thead>
|
|||
|
<tr>
|
|||
|
<th><?php echo I18N::translate('Enabled'); ?></th>
|
|||
|
<th><?php echo I18N::translate('Module'); ?></th>
|
|||
|
<th><?php echo I18N::translate('Description'); ?></th>
|
|||
|
<th class="hidden-xs"><a href="admin_module_menus.php"><?php echo I18N::translate('Menus'); ?></a></th>
|
|||
|
<th class="hidden-xs"><a href="admin_module_tabs.php"><?php echo I18N::translate('Tabs'); ?></a></th>
|
|||
|
<th class="hidden-xs"><a href="admin_module_sidebar.php"><?php echo I18N::translate('Sidebars'); ?></a></th>
|
|||
|
<th class="hidden-xs"><a href="admin_module_blocks.php"><?php echo I18N::translate('Blocks'); ?></a></th>
|
|||
|
<th class="hidden-xs"><a href="admin_module_charts.php"><?php echo I18N::translate('Charts'); ?></a></th>
|
|||
|
<th class="hidden-xs"><a href="admin_module_reports.php"><?php echo I18N::translate('Reports'); ?></a></th>
|
|||
|
<th class="hidden"><?php echo I18N::translate('Themes'); ?></th>
|
|||
|
</tr>
|
|||
|
</thead>
|
|||
|
<tbody>
|
|||
|
<?php foreach ($modules as $module_name => $module): ?>
|
|||
|
<tr>
|
|||
|
<td class="text-center">
|
|||
|
<?php echo FunctionsEdit::twoStateCheckbox('status-' . $module->getName(), $module_status[$module_name] === 'enabled') ?>
|
|||
|
</td>
|
|||
|
<td>
|
|||
|
<?php if ($module instanceof ModuleConfigInterface): ?>
|
|||
|
<a href="<?php echo $module->getConfigLink() ?>">
|
|||
|
<?php echo $module->getTitle() ?> <i class="fa fa-cogs"></i>
|
|||
|
</a>
|
|||
|
<?php else: ?>
|
|||
|
<?php echo $module->getTitle() ?>
|
|||
|
<?php endif; ?>
|
|||
|
<?php if (!in_array($module->getName(), Module::getCoreModuleNames())): ?>
|
|||
|
<br>
|
|||
|
<?php endif; ?>
|
|||
|
</td>
|
|||
|
<td>
|
|||
|
<?php echo '', $module->getDescription() ?>
|
|||
|
<?php if (!in_array($module->getName(), Module::getCoreModuleNames())): ?>
|
|||
|
<br>
|
|||
|
<i class="fa fa-asterisk"></i>
|
|||
|
<?php echo I18N::translate('Custom module') ?>
|
|||
|
<?php if ($module::CUSTOM_VERSION): ?>
|
|||
|
- <?php echo I18N::translate('Version') ?> <?php echo $module::CUSTOM_VERSION ?>
|
|||
|
<?php endif; ?>
|
|||
|
<?php if ($module::CUSTOM_WEBSITE): ?>
|
|||
|
- <a href="<?php echo $module::CUSTOM_WEBSITE ?>">
|
|||
|
<?php echo $module::CUSTOM_WEBSITE ?>
|
|||
|
</a>
|
|||
|
<?php endif; ?>
|
|||
|
<?php endif; ?>
|
|||
|
</td>
|
|||
|
<td class="text-center text-muted hidden-xs">
|
|||
|
<?php if ($module instanceof ModuleMenuInterface): ?>
|
|||
|
<i class="fa fa-list-ul" title="<?php echo I18N::translate('Menu') ?>"></i>
|
|||
|
<?php else: ?>
|
|||
|
-
|
|||
|
<?php endif; ?>
|
|||
|
</td>
|
|||
|
<td class="text-center text-muted hidden-xs">
|
|||
|
<?php if ($module instanceof ModuleTabInterface): ?>
|
|||
|
<i class="fa fa-folder" title="<?php echo I18N::translate('Tab') ?>"></i>
|
|||
|
<?php else: ?>
|
|||
|
-
|
|||
|
<?php endif; ?>
|
|||
|
</td>
|
|||
|
<td class="text-center text-muted hidden-xs">
|
|||
|
<?php if ($module instanceof ModuleSidebarInterface): ?>
|
|||
|
<i class="fa fa-th-large" title="<?php echo I18N::translate('Sidebar') ?>"></i>
|
|||
|
<?php else: ?>
|
|||
|
-
|
|||
|
<?php endif; ?>
|
|||
|
</td>
|
|||
|
<td class="text-center text-muted hidden-xs">
|
|||
|
<?php if ($module instanceof ModuleBlockInterface): ?>
|
|||
|
<?php if ($module->isUserBlock()): ?>
|
|||
|
<i class="fa fa-user" title="<?php echo I18N::translate('My page') ?>"></i>
|
|||
|
<?php endif; ?>
|
|||
|
<?php if ($module->isUserBlock()): ?>
|
|||
|
<i class="fa fa-tree" title="<?php echo I18N::translate('Home page') ?>"></i>
|
|||
|
<?php endif; ?>
|
|||
|
<?php else: ?>
|
|||
|
-
|
|||
|
<?php endif; ?>
|
|||
|
</td>
|
|||
|
<td class="text-center text-muted hidden-xs">
|
|||
|
<?php if ($module instanceof ModuleChartInterface): ?>
|
|||
|
<i class="fa fa-share-alt" title="<?php echo I18N::translate('Chart') ?>"></i>
|
|||
|
<?php else: ?>
|
|||
|
-
|
|||
|
<?php endif; ?>
|
|||
|
</td>
|
|||
|
<td class="text-center text-muted hidden-xs">
|
|||
|
<?php if ($module instanceof ModuleReportInterface): ?>
|
|||
|
<i class="fa fa-file" title="<?php echo I18N::translate('Report') ?>"></i>
|
|||
|
<?php else: ?>
|
|||
|
-
|
|||
|
<?php endif; ?>
|
|||
|
</td>
|
|||
|
<td class="text-center text-muted hidden">
|
|||
|
<?php if ($module instanceof ModuleThemeInterface): ?>
|
|||
|
<i class="fa fa-check" title="<?php echo I18N::translate('Theme') ?>"></i>
|
|||
|
<?php else: ?>
|
|||
|
-
|
|||
|
<?php endif; ?>
|
|||
|
</td>
|
|||
|
</tr>
|
|||
|
<?php endforeach; ?>
|
|||
|
</tbody>
|
|||
|
</table>
|
|||
|
<button class="btn btn-primary" type="submit">
|
|||
|
<i class="fa fa-check"></i>
|
|||
|
<?php echo I18N::translate('save'); ?></button>
|
|||
|
</form>
|