improve/index.php

242 lines
8.8 KiB
PHP
Raw Normal View History

2021-09-01 23:35:23 +00:00
<?php
/**
* @brief improve, a plugin for Dotclear 2
2021-11-01 21:17:44 +00:00
*
2021-09-01 23:35:23 +00:00
* @package Dotclear
2021-09-06 21:36:50 +00:00
* @subpackage Plugin
2021-11-01 21:17:44 +00:00
*
2021-09-01 23:35:23 +00:00
* @author Jean-Christian Denis and contributors
2021-11-01 21:17:44 +00:00
*
2021-09-01 23:35:23 +00:00
* @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
if (!defined('DC_CONTEXT_ADMIN')) {
return;
}
dcPage::checkSuper();
$improve = new Improve($core);
$show_filters = false;
2021-11-01 21:17:44 +00:00
$type = $_REQUEST['type'] ?? 'plugin';
2021-09-01 23:35:23 +00:00
$preferences = @unserialize($core->blog->settings->improve->preferences);
if (!is_array($preferences)) {
$preferences = [];
}
$preferences = array_merge(['plugin' => [], 'theme' => []], $preferences);
if (!empty($_POST['save_preferences'])) {
$preferences[$type] = [];
if (!empty($_POST['actions'])) {
2021-11-01 21:17:44 +00:00
foreach ($improve->modules() as $action) {
2021-09-01 23:35:23 +00:00
if (in_array($type, $action->types) && in_array($action->id, $_POST['actions'])) {
$preferences[$type][] = $action->id;
}
}
}
$core->blog->settings->improve->put('preferences', serialize($preferences), 'string', null, true, true);
2021-09-25 19:12:26 +00:00
dcPage::addSuccessNotice(__('Configuration successfully updated'));
2021-09-01 23:35:23 +00:00
}
2021-11-01 21:17:44 +00:00
$allow_distrib = (bool) $core->blog->settings->improve->allow_distrib;
$official = [
'plugin' => explode(',', DC_DISTRIB_PLUGINS),
'theme' => explode(',', DC_DISTRIB_THEMES)
2021-09-01 23:35:23 +00:00
];
if (!isset($core->themes)) {
$core->themes = new dcThemes($core);
$core->themes->loadModules($core->blog->themes_path, null);
}
2021-11-01 23:33:08 +00:00
$combo_modules = [];
2021-11-01 21:17:44 +00:00
$modules = $type == 'plugin' ? $core->plugins->getModules() : $core->themes->getModules();
foreach ($modules as $id => $m) {
2021-09-01 23:35:23 +00:00
if (!$m['root_writable'] || !$allow_distrib && in_array($id, $official[$type])) {
continue;
}
2021-11-01 23:33:08 +00:00
$combo_modules[__($m['name'])] = $id;
2021-09-01 23:35:23 +00:00
}
2021-11-01 23:33:08 +00:00
dcUtils::lexicalKeySort($combo_modules);
$combo_modules = array_merge([__('Select a module') => '-'], $combo_modules);
$module = $_REQUEST['module'] ?? '';
2021-09-01 23:35:23 +00:00
if (!in_array($module, $combo_modules)) {
$module = '-';
}
if (!empty($_POST['fix'])) {
if (empty($_POST['actions'])) {
dcPage::addWarningNotice(__('No action selected'));
} elseif ($module == '-') {
2021-09-01 23:35:23 +00:00
dcPage::addWarningNotice(__('No module selected'));
} else {
try {
$time = $improve->fixModule(
2021-11-01 21:17:44 +00:00
$type,
$module,
$type == 'plugin' ? $core->plugins->getModules($module) : $core->themes->getModules($module),
2021-09-01 23:35:23 +00:00
$_POST['actions']
);
$log_id = $improve->writeLogs();
2021-09-01 23:35:23 +00:00
$core->blog->triggerBlog();
if ($improve->hasLog('error')) {
$notice = ['type' => 'error', 'msg' => __('Fix of "%s" complete in %s secondes with errors')];
} elseif ($improve->hasLog('warning')) {
$notice = ['type' => 'warning', 'msg' => __('Fix of "%s" complete in %s secondes with warnings')];
} elseif ($improve->hasLog('success')) {
$notice = ['type' => 'success', 'msg' => __('Fix of "%s" complete in %s secondes')];
} else {
$notice = ['type' => 'success', 'msg' => __('Fix of "%s" complete in %s secondes without messages')];
}
dcPage::addNotice($notice['type'], sprintf($notice['msg'], $module, $time));
2021-09-01 23:35:23 +00:00
$core->adminurl->redirect('admin.plugin.improve', ['type' => $type, 'module' => $module, 'upd' => $log_id]);
2021-09-01 23:35:23 +00:00
} catch (Exception $e) {
$core->error->add($e->getMessage());
}
}
}
$action = null;
$header = '';
2021-09-01 23:35:23 +00:00
$breadcrumb = [];
if (!empty($_REQUEST['config'])) {
$breadcrumb = [
2021-11-01 22:35:13 +00:00
__('Configure module') => ''
2021-09-01 23:35:23 +00:00
];
if (null !== ($action = $improve->module($_REQUEST['config']))) {
$header = $action->header();
}
2021-09-01 23:35:23 +00:00
}
# display header
2021-11-01 22:35:13 +00:00
echo '<html><head><title>' . __('improve') . '</title>' .
dcPage::jsLoad(dcPage::getPF('improve/js/index.js')) .
$header .
2021-11-01 22:35:13 +00:00
'</head><body>' .
dcPage::breadcrumb(array_merge([
__('Plugins') => '',
__('improve') => ''
], $breadcrumb)) .
2021-09-01 23:35:23 +00:00
dcPage::notices();
2021-11-01 22:35:13 +00:00
# Menu list
if (empty($_REQUEST['config'])) {
echo
'<form method="get" action="' . $core->adminurl->get('admin.plugin.improve') . '" id="improve_menu">' .
'<p class="anchor-nav"><label for="type" class="classic">' . __('Goto:') . ' </label>' .
form::combo('type', [__('Plugins') => 'plugin', __('Themes') => 'theme'], $type) . ' ' .
'<input type="submit" value="' . __('Ok') . '" />' .
form::hidden('p', 'improve') . '</p>' .
'</form>';
}
2021-09-01 23:35:23 +00:00
if (!empty($_REQUEST['config'])) {
$back_url = $_REQUEST['redir'] ?? $core->adminurl->get('admin.plugin.improve', ['type' => $type]);
2021-09-01 23:35:23 +00:00
if (null !== $action) {
$redir = $_REQUEST['redir'] ?? $core->adminurl->get('admin.plugin.improve', ['type' => $type, 'config' => $action->id]);
2021-11-01 21:17:44 +00:00
$res = $action->configure($redir);
2021-09-01 23:35:23 +00:00
echo '
<h3>' . sprintf(__('Configure module "%s"'), $action->name) . '</h3>
<p><a class="back" href="' . $back_url . '">' . __('Back') . '</a></p>
2021-10-28 20:58:14 +00:00
<p class="info">' . html::escapeHTML($action->desc) . '</p>
<form action="' . $core->adminurl->get('admin.plugin.improve') . '" method="post" id="form-actions">' .
2021-11-01 21:17:44 +00:00
(empty($res) ? '<p class="message">' . __('Nothing to configure') . '</p>' : $res) . '
2021-09-01 23:35:23 +00:00
<p class="clear"><input type="submit" name="save" value="' . __('Save') . '" />' .
form::hidden('type', $type) .
form::hidden('config', $action->id) .
form::hidden('redir', $redir) .
$core->formNonce() . '</p>' .
'<form>';
} else {
echo '
<p class="warning">' . __('Unknow module') . '</p>
<p><a class="back" href="' . $back_url . '">' . __('Back') . '</a></p>';
}
} else {
echo '<h3>' . ($type == 'plugin' ? __('Plugins') : __('Themes')) . '</h3>';
if (count($combo_modules) == 1) {
echo '<p class="message">' . __('No module to manage') . '</p>';
} else {
echo '<form action="' . $core->adminurl->get('admin.plugin.improve') . '" method="post" id="form-actions">';
2021-11-01 21:17:44 +00:00
foreach ($improve->modules() as $action) {
2021-09-01 23:35:23 +00:00
if (!in_array($type, $action->types)) {
continue;
}
2021-11-01 21:17:44 +00:00
$p = DC_DEBUG ? '<span class="debug">' . $action->priority . '</span> ' : '';
echo
'<p class="modules">' . $p . '<label for="action_' . $action->id . '" class="classic">' .
2021-09-01 23:35:23 +00:00
form::checkbox(
2021-11-01 21:17:44 +00:00
['actions[]',
'action_' . $action->id],
$action->id,
in_array($action->id, $preferences[$type]) && $action->isConfigured(),
'',
'',
2021-09-01 23:35:23 +00:00
!$action->isConfigured()
) .
$action->name . '</label>';
if (false !== $action->config) {
2021-11-01 21:17:44 +00:00
echo
' - <a class="module-config" href="' .
(true === $action->config ? $core->adminurl->get('admin.plugin.improve', ['type' => $type, 'config' => $action->id]) : $action->config) .
2021-09-01 23:35:23 +00:00
'" title="' . sprintf(__("Configure action '%s'"), $action->name) . '">' . __('Configure module') . '</a>';
}
echo '</p>';
}
echo '
<div>
<hr />
<p><label for="save_preferences" class="classic">' .
form::checkbox('save_preferences', 1, !empty($_POST['save_preferences'])) .
2021-11-01 21:17:44 +00:00
__('Save fields selection as preference') . '</label></p>
<p class="field"><label for="module" class="classic">' . __('Select a module:') . '</label>' .
2021-09-01 23:35:23 +00:00
form::combo('module', $combo_modules, $module) . '
</p></p>
2021-11-01 21:17:44 +00:00
<input type="submit" name="fix" value="' . __('Fix it') . '" />' .
2021-09-01 23:35:23 +00:00
form::hidden(['type'], $type) .
$core->formNonce() . '
</p>
</div>
<br class="clear" />
</form>';
$logs = $lines = [];
if (!empty($_REQUEST['upd'])) {
$logs = $improve->parseLogs($_REQUEST['upd']);
if (!empty($logs)) {
echo '<div class="fieldset"><h4>' . __('Details') . '</h4>';
2021-11-01 21:17:44 +00:00
foreach ($logs as $path => $types) {
echo '<h5>' . $path . '</h5>';
foreach ($types as $type => $tools) {
echo '<div class="' . $type . '"><ul>';
2021-11-01 21:17:44 +00:00
foreach ($tools as $tool => $msgs) {
echo '<li>' . $improve->module($tool)->name . '<ul>';
2021-11-01 21:17:44 +00:00
foreach ($msgs as $msg) {
echo '<li>' . $msg . '</li>';
}
echo '</ul></li>';
}
echo '</ul></div>';
}
echo '';
}
echo '</div>';
}
}
2021-09-01 23:35:23 +00:00
}
}
2021-11-01 21:17:44 +00:00
echo '</body></html>';