From 346b59b5bb23dd157425ebccc52c3e0612648694 Mon Sep 17 00:00:00 2001
From: Jean-Christian Denis
Date: Wed, 15 Sep 2021 23:48:58 +0200
Subject: [PATCH] add report, change preference for setting, less functions
args, less interface text
---
CHANGELOG.md | 10 +-
_define.php | 2 +-
inc/class.improve.action.php | 361 +++++++++++++++++++++----
inc/class.improve.php | 147 +++++++---
inc/lib.improve.action.dcstore.php | 109 ++++----
inc/lib.improve.action.gitshields.php | 66 +++--
inc/lib.improve.action.licensefile.php | 43 ++-
inc/lib.improve.action.php | 54 ++--
inc/lib.improve.action.phpheader.php | 74 +++--
inc/lib.improve.action.zip.php | 52 ++--
index.php | 63 +++--
locales/fr/main.lang.php | 191 ++++++++-----
locales/fr/main.po | 240 +++++++++++-----
13 files changed, 994 insertions(+), 418 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 94fa334..7b1a119 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,10 +1,16 @@
0.2 -dev
- [ ] add global config for file size limit
-- [ ] add function to summarize by action what was done
- [ ] add module to check depracated Dotclear function
- [ ] add module to check deprecated PHP function
- [ ] add module to check directory structure
-- [ ] add DA badge to module _gitshields_
+- [ ] write documentation of php class
+
+0.1.2
+- add logs / report systeme
+- add DA badge to module _gitshields_
+- change function args, less is better
+- change interface, lighter names
+- add function to summarize by action what was done
0.1.1
- fix php < 8.0
diff --git a/_define.php b/_define.php
index c7d0e31..0cacea7 100644
--- a/_define.php
+++ b/_define.php
@@ -19,7 +19,7 @@ $this->registerModule(
'improve',
'Tiny tools to fix things for module devs',
'Jean-Christian Denis and contributors',
- '0.1.1',
+ '0.1.2',
[
'requires' => [['core', '2.19']],
'permissions' => null,
diff --git a/inc/class.improve.action.php b/inc/class.improve.action.php
index 9edfa0c..b84e379 100644
--- a/inc/class.improve.action.php
+++ b/inc/class.improve.action.php
@@ -11,24 +11,33 @@
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
+
/**
- * This is the absract action class.
- *
+ * @brief Plugin improve action class
+ *
* Action class must extends class ImproveAction.
- * Call 'create' function with child class name through behavior,
- * If your class signature is myClass extends ImproveAction, do
- * $core->addBehavior('ImproveAddAction'), ['myClass', 'create']);
+ * If your class signature is myActionClass extends ImproveAction,
+ * do $core->addBehavior('ImproveAddAction'), ['myClass', 'create']);
+ * yoru action class is automatically created,
* then function init() of your class wil be called.
* One class must manage only one action.
+ *
+ * @package Plugin_improve
+ * @subpackage Action
+ *
+ * @copyright Jean-Christian Denis
+ * @copyright GPL-2.0-only
*/
abstract class ImproveAction
{
protected $core;
- protected $type = '';
protected $module = [];
+ protected $path_full = '';
+ protected $path_extension = '';
+ protected $path_is_dir = null;
- private static $notice = [];
- private $preferences = [];
+ private $logs = ['success' => [], 'warning' => [], 'error' => []];
+ private $settings = [];
private $properties = [
'id' => '',
'name' => '',
@@ -38,14 +47,17 @@ abstract class ImproveAction
'types' => ['plugin']
];
+ /**
+ * ImproveAction constructor inits properpties and settings of a child class.
+ *
+ * @param string $core dcCore instance
+ */
final public function __construct(dcCore $core)
{
$this->core = $core;
- self::$notice[get_called_class()] = ['error' => [], 'warning' => []];
-
- $pref = @unserialize($core->blog->settings->improve->get('preferences_' . get_called_class()));
- $this->preferences = is_array($pref) ? $pref : [];
+ $settings = @unserialize($core->blog->settings->improve->get('settings_' . get_called_class()));
+ $this->settings = is_array($settings) ? $settings : [];
$this->init();
@@ -55,33 +67,64 @@ abstract class ImproveAction
}
}
- final protected static function notice(string $message, bool $is_error = true)
+ /**
+ * Helper to create an instance of a ImproveAction child class.
+ *
+ * @param string $o ArrayObject of actions list
+ * @param string $core dcCore instance
+ */
+ public static function create(arrayObject $o, dcCore $core)
{
- if (!empty($message)) {
- self::$notice[get_called_class()][$is_error ? 'error' : 'warning'][] = $message;
- }
+ $c = get_called_class();
+ $o->append(new $c($core));
}
- final public static function hasNotice(bool $error = true): bool
- {
- return !empty(self::$notice[get_called_class()][$error ? 'error' : 'warning']);
- }
-
- final public static function getNotice(bool $error = true): array
- {
- return self::$notice[get_called_class()][$error ? 'error' : 'warning'];
- }
+ /**
+ * Action initialisation function.
+ *
+ * It's called when an instance of ImproveAction child class is created.
+ * Usefull to setup action class.
+ *
+ * @return bool True if initialisation is ok.
+ */
+ abstract protected function init(): bool;
+ /// @name Properties methods
+ //@{
+ /**
+ * @see getProperty();
+ */
final public function __get(string $property)
{
return $this->getProperty($property);
}
+ /**
+ * Get a definition property of action class
+ *
+ * @return mixed A property of action definition.
+ */
final public function getProperty(string $property)
{
return $this->properties[$property] ?? null;
}
+ /**
+ * Set a definition property of action class
+ *
+ * Property can be:
+ * - id : action id
+ * - name : action short name
+ * - desc : action short description,
+ * - priority : order of execution of this action
+ * - config : as configuration gui, false = none, true = internal, string = ext url
+ * - types : array of supported type of module, can : be plugins and/or themes
+ *
+ * @param mixed $property one or more definition
+ * @param dtring $value value for a single property
+ *
+ * @return mixed A property of action definition.
+ */
final protected function setProperties($property, $value = null): bool
{
$properties = is_array($property) ? $property : [$property => $value];
@@ -95,26 +138,51 @@ abstract class ImproveAction
}
return true;
}
+ //@}
- final protected function getPreference(string $preference)
+ /// @name Settings methods
+ //@{
+ /**
+ * Get a settings of action class
+ *
+ * @param string $setting a settings id
+ *
+ * @return mixed A setting of action.
+ */
+ final protected function getSetting(string $setting)
{
- return $this->preferences[$preference] ?? null;
+ return $this->settings[$setting] ?? null;
}
- final protected function setPreferences($preference, $value = null)
+ /**
+ * Set one or more setting of action class
+ *
+ * @param mixed $settings one or more settings
+ * @param string $value value for a single setting
+ *
+ * @return mixed A setting of action.
+ */
+ final protected function setSettings($settings, $value = null)
{
- $preferences = is_array($preference) ? $preference : [$preference => $value];
- foreach($preferences as $k => $v) {
- $this->preferences[$k] = $v;
+ $settings = is_array($settings) ? $settings : [$setting => $value];
+ foreach($settings as $k => $v) {
+ $this->settings[$k] = $v;
}
return true;
}
+ /**
+ * Redirection after settings update
+ *
+ * This save settings update before redirect.
+ *
+ * @param string $url redirect url after settings update
+ */
final protected function redirect(string $url)
{
$this->core->blog->settings->improve->put(
- 'preferences_' . get_called_class(),
- serialize($this->preferences),
+ 'settings_' . get_called_class(),
+ serialize($this->settings),
'string',
null,
true,
@@ -125,51 +193,240 @@ abstract class ImproveAction
http::redirect($url);
}
- abstract protected function init(): bool;
-
+ /**
+ * Check if action class is well configured
+ *
+ * @return boolean True if class action is well configured
+ */
abstract public function isConfigured(): bool;
- public static function create(arrayObject $o, dcCore $core)
+ /**
+ * Get configuraton gui
+ *
+ * If action class uses internal configuration,
+ * it must share here html form content of its settings.
+ * It must not use enclose bloc "form" nor button "save".
+ * This function is also called to redirect form
+ * after validation with $this->redirect($url);
+ *
+ * @param string $url post form redirect url
+ *
+ * @return mixed A setting of action.
+ */
+ public function configure(string $url): ?string
{
- $c = get_called_class();
- $o->append(new $c($core));
+ return null;
+ }
+ //@}
+
+ /**
+ * Set in class var current module definitions.
+ *
+ * @see Improve::sanitizeModule()
+ *
+ * @param array $module Full array of module definitons
+ */
+ final public function setModule(array $module)
+ {
+ $this->module = $module;
}
- public function configure(string $redirect_url): ?string
+ /**
+ * Set in class var current path definitons.
+ *
+ * @param string $path_full Full path
+ * @param string $path_extension Path extension (if it is a file)
+ * @param string $path_is_dir True if path is a directory
+ */
+ final public function setPath(string $path_full, string $path_extension, bool $path_is_dir)
+ {
+ $this->path_full = $path_full;
+ $this->path_extension = $path_extension;
+ $this->path_is_dir = $path_is_dir;
+ }
+
+ /// @name Fix methods
+ //@{
+ /**
+ * Called when starting to fix module.
+ */
+ public function openModule(): ?bool
{
return null;
}
- public function openModule(string $module_type, array $module_info): ?bool
- {
- $this->type = $module_type;
- $this->module = $module_info;
-
- return null;
- }
-
- public function openDirectory(string $path): ?bool
+ /**
+ * Called when open a directory to fix.
+ */
+ public function openDirectory(): ?bool
{
return null;
}
- public function openFile(string $path, string $extension): ?bool
+ /**
+ * Called when open a file to fix.
+ */
+ public function openFile(): ?bool
{
return null;
}
- public function readFile(string $path, string $extension, string &$content): ?bool
+ /**
+ * Called when read content of a file to fix.
+ *
+ * Content is shared from action to another.
+ * If an action erase content, fix is stopped.
+ * If you want to erase a content you must erase
+ * the file on action openDirectory.
+ *
+ * @param string $content File content
+ */
+ public function readFile(string &$content): ?bool
{
return null;
}
- public function closeFile(string $path, string $extension): ?bool
+ /**
+ * Called when close a file to fix.
+ */
+ public function closeFile(): ?bool
{
return null;
}
- public function closeModule(string $module_type, array $module_info): ?bool
+ /**
+ * Called when close a module to fix.
+ */
+ public function closeModule(): ?bool
{
return null;
}
+ //@}
+
+ /// @name Logs methods
+ //@{
+ /**
+ * Set an action log.
+ *
+ * Log must be use every time an action something happen.
+ *
+ * @param string $type type of message, can be error, warning, succes
+ * @param string $message message to log
+ *
+ * @return boolean True if message is logged.
+ */
+ final public function setLog(string $type, string $message): bool
+ {
+ if (empty($this->path_full) || !array_key_exists($type, $this->logs)) {
+ return false;
+ }
+ $this->logs[$type][$this->path_full][] = $message;
+ return true;
+ }
+
+ /**
+ * Check if action class has log of given type.
+ *
+ * @param string $type type of message, can be error, warning, succes
+ *
+ * @return boolean True if messages exist.
+ */
+ final public function hasLog(string $type): bool
+ {
+ return array_key_exists($type, $this->logs) && !empty($this->logs[$type]);
+ }
+
+ /**
+ * Get action logs.
+ *
+ * @param mixed $type type of message, can be error, warning, succes
+ *
+ * @return array Arry of given type of log or all if type is null
+ */
+ final public function getLogs($type = null): array
+ {
+ if (null === $type) {
+ return $this->logs;
+ }
+ if (empty($this->path_full)
+ || !array_key_exists($type, $this->logs)
+ || !array_key_exists($this->path_full, $this->logs[$type])
+ ) {
+ return [];
+ }
+ return $this->logs[$type][$this->path_full];
+ }
+
+ /**
+ * Set a log of type error.
+ */
+ final public function setError(string $message)
+ {
+ $this->setLog('error', $message);
+ }
+
+ /**
+ * Check logs of type error exists.
+ */
+ final public function hasError(): bool
+ {
+ return !empty($this->getLogs('error'));
+ }
+
+ /**
+ * Get logs of type error.
+ */
+ final public function getErrors(): array
+ {
+ return $this->getLogs('error');
+ }
+
+ /**
+ * Set a log of type warning.
+ */
+ final public function setWarning(string $message)
+ {
+ $this->setLog('warning', $message);
+ }
+
+ /**
+ * Check logs of type error warnings.
+ */
+ final public function hasWarning(): bool
+ {
+ return !empty($this->getLogs('warning'));
+ }
+
+ /**
+ * Get logs of type warning.
+ */
+ final public function getWarnings(): array
+ {
+ return $this->getLogs('warning');
+ }
+
+ /**
+ * Set a log of type success.
+ */
+ final public function setSuccess(string $message)
+ {
+ $this->setLog('success', $message);
+ }
+
+ /**
+ * Check logs of type error success.
+ */
+ final public function hasSuccess(): bool
+ {
+ return !empty($this->getLogs('success'));
+ }
+
+ /**
+ * Get logs of type success.
+ */
+ final public function getSuccess(): array
+ {
+ return $this->getLogs('success');
+ }
+ //@}
}
\ No newline at end of file
diff --git a/inc/class.improve.php b/inc/class.improve.php
index f6af4a1..76cb5f2 100644
--- a/inc/class.improve.php
+++ b/inc/class.improve.php
@@ -21,6 +21,8 @@ class Improve
];
private $core;
private $actions = [];
+ private $logs = [];
+ private $has_log = ['success' => false, 'warning' => false, 'error' => false];
public function __construct(dcCore $core)
{
@@ -42,6 +44,72 @@ class Improve
uasort($this->actions, [$this, 'sortModules']);
}
+ public function getLogs(): array
+ {
+ return $this->logs;
+ }
+
+ public function hasLog(string $type): bool
+ {
+ return array_key_exists($type, $this->has_log) && $this->has_log[$type];
+ }
+
+ public function writeLogs(): string
+ {
+ if (empty($this->logs)) {
+ return '';
+ }
+ $cur = $this->core->con->openCursor($this->core->prefix . 'log');
+ $cur->log_msg = serialize($this->logs);
+ $cur->log_table = 'improve';
+ $id = $this->core->log->addLog($cur);
+
+ return $id;
+ }
+
+ public function readLogs(int $id ): array
+ {
+ $rs = $this->core->log->getLogs(['log_table' => 'improve', 'log_id' => $id, 'limit' => 1]);
+ if ($rs->isEmpty()) {
+ return [];
+ }
+ $this->core->log->delLogs($rs->log_id);
+ return unserialize($rs->log_msg);
+ }
+
+ public function parselogs(int $id): array
+ {
+ $logs = $this->readLogs($id);
+ if (empty($logs)) {
+ return [];
+ }
+ $lines = [];
+ foreach($logs['improve'] as $path => $tools) {
+ $l_types = [];
+ foreach(['success', 'warning', 'error'] as $type) {
+ $l_tools = [];
+ foreach($tools as $tool) {
+ $l_msg = [];
+ if (!empty($logs[$tool][$type][$path])) {
+ foreach($logs[$tool][$type][$path] as $msg) {
+ $l_msg[] = $msg;
+ }
+ }
+ if (!empty($l_msg)) {
+ $l_tools[$tool] = $l_msg;
+ }
+ }
+ if (!empty($l_tools)) {
+ $l_types[$type] = $l_tools;
+ }
+ }
+ if (!empty($l_types)) {
+ $lines[$path] = $l_types;
+ }
+ }
+ return $lines;
+ }
+
public function module(string $id): ?ImproveAction
{
if (empty($id)) {
@@ -58,9 +126,10 @@ class Improve
return $this->actions[$id] ?? null;
}
- public function fix(string $type, string $id, array $module, array $actions): int
+ public function fixModule(string $type, string $id, array $properties, array $actions): float
{
- $module = ImproveDefinition::clean($id, $module);
+ $time_start = microtime(true);
+ $module = ImproveDefinition::clean($type, $id, $properties);
$workers = [];
foreach($actions as $action) {
@@ -69,9 +138,13 @@ class Improve
}
}
foreach($workers as $action) {
- // action:
- // open module
- $action->openModule($type, $module);
+ // trace all path and action in logs
+ $this->logs['improve'][__('Begin')][] = $action->id;
+ // info: set current module
+ $action->setModule($module);
+ $action->setPath(__('Begin'), '', true);
+ // action: open module
+ $action->openModule();
}
if (!isset($module['sroot']) || !$module['root_writable'] || !is_writable($module['sroot'])) {
throw new Exception(__('Module path is not writable'));
@@ -81,25 +154,28 @@ class Improve
if (!file_exists($file[0])) {
continue;
}
+ foreach($workers as $action) {
+ // trace all path and action in logs
+ $this->logs['improve'][$file[0]][] = $action->id;
+ // info: set current path
+ $action->setPath($file[0], $file[1], $file[2]);
+ }
if (!$file[2]) {
foreach($workers as $action) {
- // action:
- // open a directory. full path
- $action->openDirectory($file[0]);
+ // action: open a directory. full path
+ $action->openDirectory();
}
} else {
foreach($workers as $action) {
- // action:
- // before openning a file. full path, extension
- $action->openFile($file[0], $file[1]);
+ // action: before openning a file. full path, extension
+ $action->openFile();
}
if (in_array($file[1], self::$readfile_extensions)) {
if (false !== ($content = file_get_contents($file[0]))) {
$no_content = empty($content);
foreach($workers as $action) {
- // action:
- // read a file content. full path, extension, content
- $action->readFile($file[0], $file[1], $content);
+ // action: read a file content. full path, extension, content
+ $action->readFile($content);
if (empty($content) && !$no_content) {
throw new Exception(sprintf(
__('File content has been removed: %s by %s'), $file[0], $action->name
@@ -109,29 +185,31 @@ class Improve
files::putContent($file[0], $content);
}
foreach($workers as $action) {
- // action:
- // after closing a file. full path, extension
- $action->closeFile($file[0], $file[1]);
+ // action: after closing a file. full path, extension
+ $action->closeFile();
}
}
}
}
- // action:
- // close module
foreach($workers as $action) {
- $action->closeModule($type, $module);
+ // trace all path and action in logs
+ $this->logs['improve'][__('End')][] = $action->id;
+ // info: set current module
+ $action->setPath(__('End'), '', true);
+ // action: close module
+ $action->closeModule();
}
+ // info: get acions reports
foreach($workers as $action) {
- if ($action->hasNotice()) {
- dcPage::addErrorNotice($action->name . ' : ' . implode(', ', $action->getNotice()));
+ $this->logs[$action->id] = $action->getLogs();
+ foreach($this->has_log as $type => $v) {
+ if ($action->hasLog($type)) {
+ $this->has_log[$type] = true;
+ }
}
}
- foreach($workers as $action) {
- if ($action->hasNotice(false)) {
- dcPage::addWarningNotice($action->name . ' : ' . implode(', ', $action->getNotice(false)));
- }
- }
- return count($tree);
+
+ return substr(microtime(true) - $time_start, 0, 5);
}
private static function getModuleFiles(string $path, string $dir = '', array $res = []): array
@@ -164,7 +242,7 @@ class Improve
public function getURL(array $params = []): string
{
- return $this->core->adminurl->get('admin.plugin.improve', $params);
+ return $this->core->adminurl->get('admin.plugin.improve', $params, '&');
}
public static function cleanExtensions($in): array
@@ -197,11 +275,11 @@ class ImproveDefinition
{
private $properties = [];
- public function __construct(string $id, array $properties = [])
+ public function __construct(string $type, string $id, array $properties = [])
{
$this->loadDefine($id, $properties['root']);
- $this->properties = array_merge($this->properties, self::sanitizeModule($id, $properties));
+ $this->properties = array_merge($this->properties, self::sanitizeModule($type, $id, $properties));
}
public function get()
@@ -209,9 +287,9 @@ class ImproveDefinition
return $this->properties;
}
- public static function clean($id, $properties)
+ public static function clean(string $type, string $id, array $properties): array
{
- $p = new self($id, $properties);
+ $p = new self($type, $id, $properties);
return $p->get();
}
@@ -255,7 +333,7 @@ class ImproveDefinition
}
# adapt from lib.moduleslist.php
- public static function sanitizeModule(string $id, array $properties): array
+ public static function sanitizeModule(string $type, string $id, array $properties): array
{
$label = empty($properties['label']) ? $id : $properties['label'];
$name = __(empty($properties['name']) ? $label : $properties['name']);
@@ -292,6 +370,7 @@ class ImproveDefinition
[
'id' => $id,
'sid' => self::sanitizeString($id),
+ 'type' => $type,
'label' => $label,
'name' => $name,
'oname' => $oname,
diff --git a/inc/lib.improve.action.dcstore.php b/inc/lib.improve.action.dcstore.php
index c797052..b4d76b5 100644
--- a/inc/lib.improve.action.dcstore.php
+++ b/inc/lib.improve.action.dcstore.php
@@ -17,7 +17,7 @@ class ImproveActionDcstore extends ImproveAction
{
$this->setProperties([
'id' => 'dcstore',
- 'name' => __('Fix dcstore.xml'),
+ 'name' => __('Store file'),
'desc' => __('Re-create dcstore.xml file according to _define.php variables'),
'priority' => 420,
'config' => true,
@@ -29,13 +29,13 @@ class ImproveActionDcstore extends ImproveAction
public function isConfigured(): bool
{
- return !empty($this->getPreference('pattern'));
+ return !empty($this->getSetting('pattern'));
}
public function configure($url): ?string
{
if (!empty($_POST['save']) && !empty($_POST['dcstore_pattern'])) {
- $this->setPreferences('pattern', (string) $_POST['dcstore_pattern']);
+ $this->setSettings('pattern', (string) $_POST['dcstore_pattern']);
$this->redirect($url);
}
@@ -43,7 +43,7 @@ class ImproveActionDcstore extends ImproveAction
'' . __('File will be overwritten if it exists') . '
' .
'' .
__('Predictable URL to zip file on the external repository') . ' ' .
- form::field('dcstore_pattern', 160, 255, $this->getPreference('pattern')) . ' ' .
+ form::field('dcstore_pattern', 160, 255, $this->getSetting('pattern')) . '' .
'
' .
'' .
sprintf(__('You can use wildcards %s'), '%author%, %type%, %id%, %version%.') .
@@ -54,20 +54,17 @@ class ImproveActionDcstore extends ImproveAction
';
}
- public function openModule($module_type, $module_info): ?bool
+ public function openModule(): ?bool
{
- $this->type = $module_type;
- $this->module = $module_info;
-
- $content = self::generateXML($module_info['id'], $module_info, $this->getPreference('pattern'));
- if (self::hasNotice()) {
-
+ $content = $this->generateXML();
+ if ($this->hasError()) {
return false;
}
try {
- files::putContent($module_info['sroot'] . '/dcstore.xml', $content);
+ files::putContent($this->module['sroot'] . '/dcstore.xml', $content);
+ $this->setSuccess(__('Write dcstore.xml file.'));
} catch(Exception $e) {
- self::notice(__('Failed to write dcstore.xml file'));
+ $this->setError(__('Failed to write dcstore.xml file'));
return false;
}
@@ -75,97 +72,93 @@ class ImproveActionDcstore extends ImproveAction
return true;
}
- public static function generateXML($id, $module, $file_pattern)
+ public function generateXML()
{
- if (!is_array($module) || empty($module)) {
- return false;
- }
-
$xml = [''];
# id
- if (empty($module['id'])) {
- self::notice(__('unkow module id'));
+ if (empty($this->module['id'])) {
+ $this->setError(__('unkow module id'));
}
- $xml[] = sprintf('', html::escapeHTML($module['id']));
+ $xml[] = sprintf('', html::escapeHTML($this->module['id']));
# name
- if (empty($module['oname'])) {
- self::notice(__('unknow module name'));
+ if (empty($this->module['oname'])) {
+ $this->setError(__('unknow module name'));
}
- $xml[] = sprintf('%s ', html::escapeHTML($module['name']));
+ $xml[] = sprintf('%s ', html::escapeHTML($this->module['name']));
# version
- if (empty($module['version'])) {
- self::notice(__('unknow module version'));
+ if (empty($this->module['version'])) {
+ $this->setError(__('unknow module version'));
}
- $xml[] = sprintf('%s ', html::escapeHTML($module['version']));
+ $xml[] = sprintf('%s ', html::escapeHTML($this->module['version']));
# author
- if (empty($module['author'])) {
- self::notice(__('unknow module author'));
+ if (empty($this->module['author'])) {
+ $this->setError(__('unknow module author'));
}
- $xml[] = sprintf('%s ', html::escapeHTML($module['author']));
+ $xml[] = sprintf('%s ', html::escapeHTML($this->module['author']));
# desc
- if (empty($module['desc'])) {
- self::notice(__('unknow module description'));
+ if (empty($this->module['desc'])) {
+ $this->setError(__('unknow module description'));
}
- $xml[] = sprintf('%s ', html::escapeHTML($module['desc']));
+ $xml[] = sprintf('%s ', html::escapeHTML($this->module['desc']));
# repository
- if (empty($module['repository'])) {
- self::notice(__('no repository set in _define.php'));
+ if (empty($this->module['repository'])) {
+ $this->setError(__('no repository set in _define.php'));
}
# file
- $file_pattern = self::parseFilePattern($module, $file_pattern);
+ $file_pattern = $this->parseFilePattern();
if (empty($file_pattern)) {
- self::notice(__('no zip file pattern set in configuration'));
+ $this->setError(__('no zip file pattern set in configuration'));
}
$xml[] = sprintf('%s ', html::escapeHTML($file_pattern));
# da dc_min or requires core
- if (!empty($module['requires']) && is_array($module['requires'])) {
- foreach ($module['requires'] as $req) {
+ if (!empty($this->module['requires']) && is_array($this->module['requires'])) {
+ foreach ($this->module['requires'] as $req) {
if (!is_array($req)) {
$req = [$req];
}
if ($req[0] == 'core') {
- $module['dc_min'] = $req[1];
+ $this->module['dc_min'] = $req[1];
break;
}
}
}
- if (empty($module['dc_min'])) {
- self::notice(__('no minimum dotclear version'), false);
+ if (empty($this->module['dc_min'])) {
+ $this->setWarning(__('no minimum dotclear version'));
} else {
- $xml[] = sprintf('%s ', html::escapeHTML($module['dc_min']));
+ $xml[] = sprintf('%s ', html::escapeHTML($this->module['dc_min']));
}
# da details
- if (empty($module['details'])) {
- self::notice(__('no details URL'), false);
+ if (empty($this->module['details'])) {
+ $this->setWarning(__('no details URL'));
} else {
- $xml[] = sprintf('%s ', html::escapeHTML($module['details']));
+ $xml[] = sprintf('%s ', html::escapeHTML($this->module['details']));
}
# da sshot
- //$xml[] = sprintf('%s ', html::escapeHTML($module['sshot']));
+ //$xml[] = sprintf('%s ', html::escapeHTML($this->module['sshot']));
# da section
- //$xml[] = sprintf('%s ', html::escapeHTML($module['section']));
+ //$xml[] = sprintf('%s ', html::escapeHTML($this->module['section']));
# da support
- if (empty($module['support'])) {
- self::notice(__('no support URL'), false);
+ if (empty($this->module['support'])) {
+ $this->setWarning(__('no support URL'));
} else {
- $xml[] = sprintf('%s ', html::escapeHTML($module['support']));
+ $xml[] = sprintf('%s ', html::escapeHTML($this->module['support']));
}
# da tags
- //$xml[] = sprintf('%s ', html::escapeHTML($module['tags']));
+ //$xml[] = sprintf('%s ', html::escapeHTML($this->module['tags']));
$xml[] = ' ';
$xml[] = ' ';
@@ -173,7 +166,7 @@ class ImproveActionDcstore extends ImproveAction
return implode("\n", $xml);
}
- private static function parseFilePattern($module, $file_pattern)
+ private function parseFilePattern()
{
return text::tidyURL(str_replace(
[
@@ -183,12 +176,12 @@ class ImproveActionDcstore extends ImproveAction
'%author%'
],
[
- $module['type'],
- $module['id'],
- $module['version'],
- $module['author']
+ $this->module['type'],
+ $this->module['id'],
+ $this->module['version'],
+ $this->module['author']
],
- $file_pattern
+ $this->getSetting('pattern')
));
}
}
\ No newline at end of file
diff --git a/inc/lib.improve.action.gitshields.php b/inc/lib.improve.action.gitshields.php
index b5ed714..8b29507 100644
--- a/inc/lib.improve.action.gitshields.php
+++ b/inc/lib.improve.action.gitshields.php
@@ -31,7 +31,7 @@ class ImproveActionGitshields extends ImproveAction
{
$this->setProperties([
'id' => 'gitshields',
- 'name' => __('Fix shields badges'),
+ 'name' => __('Shields badges'),
'desc' => __('Add and maintain shields.io badges to the REDAME.md file'),
'priority' => 380,
'config' => true,
@@ -43,13 +43,13 @@ class ImproveActionGitshields extends ImproveAction
public function isConfigured(): bool
{
- return !empty($this->getPreference('username'));
+ return !empty($this->getSetting('username'));
}
public function configure($url): ?string
{
if (!empty($_POST['save']) && !empty($_POST['username'])) {
- $this->setPreferences([
+ $this->setSettings([
'username' => (string) $_POST['username'],
'dotaddict' => !empty($_POST['dotaddict'])
]);
@@ -58,28 +58,26 @@ class ImproveActionGitshields extends ImproveAction
return '
' . __('Your Github user name :') . ' ' .
- form::field('username', 60, 100, $this->getPreference('username')) . '
+ form::field('username', 60, 100, $this->getSetting('username')) . '
' . __('Used in your Github URL: http://github.com/username/module_id.') . ' ' .
__('If you have badges not created by this tool in the README.md file you should remove them manually.') . '
' .
- form::checkbox('dotaddict', 1, !empty($this->getPreference('dotaddict'))) . ' '.
+ form::checkbox('dotaddict', 1, !empty($this->getSetting('dotaddict'))) . ' '.
__('Include Dotaddict badge') . '
' . __('If your plugin or theme is on Dotaddict, you can add a badge to link to its details in Dotaddict.') . '
';
}
- public function openModule(string $module_type, array $module_info): ?bool
+ public function openModule(): ?bool
{
- $this->type = $module_type;
- $this->module = $module_info;
$this->replaceInfo();
return null;
}
- public function readFile($path, $extension, &$content): ?bool
+ public function readFile(&$content): ?bool
{
- if ($this->stop_scan || !preg_match('/(.*?)README\.md$/i', $path)) {
+ if ($this->stop_scan || !preg_match('/(.*?)README\.md$/i', $this->path_full)) {
return null;
}
@@ -92,31 +90,38 @@ class ImproveActionGitshields extends ImproveAction
private function replaceInfo()
{
- $username = $this->getPreference('username');
- $module = $this->module['id'];
- $type = $this->module['type'];
- $dotclear = $this->getDotclearVersion();
-
$bloc = [];
foreach($this->bloc_content as $k => $v) {
- if ($k == 'dotaddict' && empty($this->getPreference('dotaddict'))) {
+ if ($k == 'dotaddict' && empty($this->getSetting('dotaddict'))) {
continue;
}
$bloc[$k] = trim(str_replace(
- ['%username%', '%module%', '%dotclear%', '%type%', "\r\n", "\n"],
- [$username, $module, $dotclear, $type, '', ''],
+ [
+ '%username%',
+ '%module%',
+ '%dotclear%',
+ '%type%',
+ "\r\n", "\n"
+ ],
+ [
+ $this->getSetting('username'),
+ $this->module['id'],
+ $dotclear = $this->getDotclearVersion(),
+ $this->module['type'],
+ '', ''
+ ],
$v
));
}
$this->bloc = $bloc;
+ $this->setSuccess(__('Prepare custom shield info'));
}
private function getDotclearVersion()
{
$version = null;
- $module = $this->module;
- if (!empty($module['requires']) && is_array($module['requires'])) {
- foreach ($module['requires'] as $req) {
+ if (!empty($this->module['requires']) && is_array($this->module['requires'])) {
+ foreach ($this->module['requires'] as $req) {
if (!is_array($req)) {
$req = [$req];
}
@@ -131,20 +136,31 @@ class ImproveActionGitshields extends ImproveAction
private function writeShieldsBloc($content)
{
- return preg_replace(
+ $res = preg_replace(
$this->bloc_pattern['target'],
'$1' . "\n\n" . trim(implode("\n", $this->bloc)) . "\n\n",
$content,
- 1
+ 1,
+ $count
);
+ if ($count) {
+ $this->setSuccess(__('Write new shield bloc'));
+ }
+ return $res;
}
private function deleteShieldsBloc($content)
{
- return preg_replace(
+ $res = preg_replace(
$this->bloc_pattern['remove'],
"\n\n",
- $content
+ $content,
+ 1,
+ $count
);
+ if ($count) {
+ $this->setSuccess(__('Delete old shield bloc'));
+ }
+ return $res;
}
}
\ No newline at end of file
diff --git a/inc/lib.improve.action.licensefile.php b/inc/lib.improve.action.licensefile.php
index cf1e14b..01272c8 100644
--- a/inc/lib.improve.action.licensefile.php
+++ b/inc/lib.improve.action.licensefile.php
@@ -26,7 +26,7 @@ class ImproveActionLicensefile extends ImproveAction
{
$this->setProperties([
'id' => 'license',
- 'name' => __('Fix license file'),
+ 'name' => __('License file'),
'desc' => __('Add or remove full license file to module root'),
'priority' => 330,
'config' => true,
@@ -57,7 +57,7 @@ class ImproveActionLicensefile extends ImproveAction
public function configure($url): ?string
{
if (!empty($_POST['save'])) {
- $this->setPreferences([
+ $this->setSettings([
'action_version' => !empty($_POST['action_version']) ? $_POST['action_version'] : '',
'action_full' => !empty($_POST['action_full']) ? $_POST['action_full'] : ''
]);
@@ -66,25 +66,22 @@ class ImproveActionLicensefile extends ImproveAction
return '
' . __('License version:') . ' ' .
- form::combo('action_version', $this->action_version, $this->getPreference('action_version')) . '
+ form::combo('action_version', $this->action_version, $this->getSetting('action_version')) . '
' . __('Action on file:') . ' ' .
- form::combo('action_full', $this->action_full, $this->getPreference('action_full')) .
+ form::combo('action_full', $this->action_full, $this->getSetting('action_full')) .
'
';
}
- public function openModule(string $module_type, array $module_info): ?bool
+ public function openModule(): ?bool
{
- $this->type = $module_type;
- $this->module = $module_info;
-
- if (in_array($this->getPreference('action_full'), ['remove', 'full','overwrite'])) {
- $this->deleteFullLicense(($this->getPreference('action_full') == 'overwrite'));
+ if (in_array($this->getSetting('action_full'), ['remove', 'full','overwrite'])) {
+ $this->deleteFullLicense(($this->getSetting('action_full') == 'overwrite'));
}
- if (in_array($this->getPreference('action_full'), ['create', 'overwrite', 'full'])) {
- if (empty($this->getPreference('action_version'))) {
- self::notice(__('no full license type selected'), false);
+ if (in_array($this->getSetting('action_full'), ['create', 'overwrite', 'full'])) {
+ if (empty($this->getSetting('action_version'))) {
+ $this->setWarning(__('No full license type selected'));
} else {
$this->writeFullLicense();
}
@@ -95,15 +92,16 @@ class ImproveActionLicensefile extends ImproveAction
private function writeFullLicense()
{
try {
- $full = file_get_contents(dirname(__FILE__) . '/license/' . $this->getPreference('action_version') . '.full.txt');
+ $full = file_get_contents(dirname(__FILE__) . '/license/' . $this->getSetting('action_version') . '.full.txt');
if (empty($full)) {
- self::notice(__('failed to load full license'));
+ $this->setError(__('Failed to load license content'));
return null;
}
- files::putContent($this->module['root'] . '/LICENSE', str_replace("\r\n","\n",$full));
+ files::putContent($this->module['root'] . '/LICENSE', str_replace("\r\n", "\n", $full));
+ $this->setSuccess(__('Write new license file "LICENSE"'));
} catch (Exception $e) {
- self::notice(__('failed to write full license'));
+ $this->setError(__('Failed to write new license file'));
return null;
}
@@ -113,14 +111,15 @@ class ImproveActionLicensefile extends ImproveAction
private function deleteFullLicense($only_one = false)
{
foreach(self::fileExists($this->module['root']) as $file) {
- if ($only_one && $file != 'license') {
+ if ($only_one && $file != 'LICENSE') {
continue;
}
if (!files::isDeletable($this->module['root'] . '/' . $file)) {
- self::notice(sprintf(__('full license is not deletable (%s)'), $file), false);
- }
- if (!@unlink($this->module['root'] . '/' . $file)) {
- self::notice(sprintf(__('failed to delete full license (%s)'), $file), false);
+ $this->setWarning(sprintf(__('Old license file is not deletable (%s)'), $file));
+ } elseif (!@unlink($this->module['root'] . '/' . $file)) {
+ $this->setError(sprintf(__('Failed to delete old license file (%s)'), $file));
+ } else {
+ $this->setSuccess(sprintf(__('Delete old license file "%s"'), $file));
}
}
return true;
diff --git a/inc/lib.improve.action.php b/inc/lib.improve.action.php
index 85eec44..35f179c 100644
--- a/inc/lib.improve.action.php
+++ b/inc/lib.improve.action.php
@@ -17,7 +17,7 @@ class ImproveActionTab extends ImproveAction
{
$this->setProperties([
'id' => 'tab',
- 'name' => __('Fix tabulation'),
+ 'name' => __('Tabulations'),
'desc' => __('Replace tabulation by four space in php files'),
'priority' => 820,
'types' => ['plugin', 'theme']
@@ -26,12 +26,16 @@ class ImproveActionTab extends ImproveAction
return true;
}
- public function readFile($path, $extension, &$content): ?bool
+ public function readFile(&$content): ?bool
{
- if (!in_array($extension, ['php', 'md'])) {
+ if (!in_array($this->path_extension, ['php', 'md'])) {
return null;
}
- $content = preg_replace('/(\t)/', ' ', $content)."\n";
+ $clean = preg_replace('/(\t)/', ' ', $content);// . "\n";
+ if ($content != $clean) {
+ $this->setSuccess(__('Replace tabulation by spaces'));
+ $content = $clean;
+ }
return true;
}
@@ -50,7 +54,7 @@ class ImproveActionNewline extends ImproveAction
{
$this->setProperties([
'id' => 'newline',
- 'name' => __('Fix newline'),
+ 'name' => __('Newlines'),
'desc' => __('Replace bad and repetitive and empty newline by single newline in files'),
'priority' => 840,
'config' => true,
@@ -68,20 +72,20 @@ class ImproveActionNewline extends ImproveAction
public function isConfigured(): bool
{
- return !empty($this->getPreference('extensions'));
+ return !empty($this->getSetting('extensions'));
}
public function configure($url): ?string
{
if (!empty($_POST['save']) && !empty($_POST['newline_extensions'])) {
- $this->setPreferences(
+ $this->setSettings(
'extensions',
Improve::cleanExtensions($_POST['newline_extensions'])
);
$this->redirect($url);
}
- $ext = $this->getPreference('extensions');
+ $ext = $this->getSetting('extensions');
if (!is_array($ext)) {
$ext = [];
}
@@ -95,13 +99,13 @@ class ImproveActionNewline extends ImproveAction
'
';
}
- public function readFile($path, $extension, &$content): ?bool
+ public function readFile(&$content): ?bool
{
- $ext = $this->getPreference('extensions');
- if (!is_array($ext) || !in_array($extension, $ext)) {
+ $ext = $this->getSetting('extensions');
+ if (!is_array($ext) || !in_array($this->path_extension, $ext)) {
return null;
}
- $content = preg_replace(
+ $clean = preg_replace(
'/(\n\s+\n)/',
"\n\n",
preg_replace(
@@ -111,7 +115,13 @@ class ImproveActionNewline extends ImproveAction
["\r\n", "\r"],
"\n",
$content
- )));
+ )
+ )
+ );
+ if ($content != $clean) {
+ $this->setSuccess(__('Replace bad new lines'));
+ $content = $clean;
+ }
return true;
}
@@ -125,7 +135,7 @@ class ImproveActionEndoffile extends ImproveAction
{
$this->setProperties([
'id' => 'endoffile',
- 'name' => __('Fix end of file'),
+ 'name' => __('End of files'),
'desc' => __('Remove php tag and empty lines from end of files'),
'priority' => 860,
'config' => true,
@@ -143,29 +153,33 @@ class ImproveActionEndoffile extends ImproveAction
public function configure($url): ?string
{
if (!empty($_POST['save'])) {
- $this->setPreferences('psr2', !empty($_POST['endoffile_psr2']));
+ $this->setSettings('psr2', !empty($_POST['endoffile_psr2']));
$this->redirect($url);
}
return
'' .
- form::checkbox('endoffile_psr2', 255, $this->getPreference('psr2')) .
+ form::checkbox('endoffile_psr2', 255, $this->getSetting('psr2')) .
__('Add a blank line to the end of file') .
'
' .
__('PSR2 must have a blank line, whereas PSR12 must not.') .
'
';
}
- public function readFile($path, $extension, &$content): ?bool
+ public function readFile(&$content): ?bool
{
- if (!in_array($extension, ['php', 'md'])) {
+ if (!in_array($this->path_extension, ['php', 'md'])) {
return null;
}
- $content = preg_replace(
+ $clean = preg_replace(
['/(\s*)(\?>\s*)$/', '/\n+$/'],
'',
$content
- ) . ($this->getPreference('psr2') ? "\n" : '');
+ ) . ($this->getSetting('psr2') ? "\n" : '');
+ if ($content != $clean) {
+ $this->setSuccess(__('Replace end of file'));
+ $content = $clean;
+ }
return true;
}
diff --git a/inc/lib.improve.action.phpheader.php b/inc/lib.improve.action.phpheader.php
index 3d71254..519b096 100644
--- a/inc/lib.improve.action.phpheader.php
+++ b/inc/lib.improve.action.phpheader.php
@@ -44,7 +44,7 @@ class ImproveActionPhpheader extends ImproveAction
{
$this->setProperties([
'id' => 'phpheader',
- 'name' => __('Fix PHP header'),
+ 'name' => __('PHP header'),
'desc' => __('Add or remove phpdoc header bloc from php file'),
'priority' => 340,
'config' => true,
@@ -64,13 +64,13 @@ class ImproveActionPhpheader extends ImproveAction
public function isConfigured(): bool
{
- return !empty($this->getPreference('bloc_action')) || !empty($this->getPreference('remove_old'));
+ return !empty($this->getSetting('bloc_action')) || !empty($this->getSetting('remove_old'));
}
public function configure($url): ?string
{
if (!empty($_POST['save'])) {
- $this->setPreferences([
+ $this->setSettings([
'bloc_action' => !empty($_POST['bloc_action']) ? $_POST['bloc_action'] : '',
'bloc_content' => !empty($_POST['bloc_content']) ? $_POST['bloc_content'] : '',
'remove_old' => !empty($_POST['remove_old']),
@@ -81,22 +81,22 @@ class ImproveActionPhpheader extends ImproveAction
return '
' . __('Action:') . ' ' .
- form::combo('bloc_action', $this->action_bloc, $this->getPreference('bloc_action')) . '
+ form::combo('bloc_action', $this->action_bloc, $this->getSetting('bloc_action')) . '
' .
- form::checkbox('remove_old', 1, $this->getPreference('remove_old')) . ' ' .
+ form::checkbox('remove_old', 1, $this->getSetting('remove_old')) . ' ' .
__('Remove old style bloc header (using #)') .
'
' .
- form::checkbox('exclude_locales', 1, $this->getPreference('exclude_locales')) . ' ' .
+ form::checkbox('exclude_locales', 1, $this->getSetting('exclude_locales')) . ' ' .
__('Do not add bloc to files from "locales" and "libs" folder') .
'
' . __('Bloc content:') . '
' .
- form::textarea('bloc_content', 50, 10, html::escapeHTML($this->getPreference('bloc_content'))) . '
+ form::textarea('bloc_content', 50, 10, html::escapeHTML($this->getSetting('bloc_content'))) . '
' .
sprintf(
__('You can use wildcards %s') ,
@@ -105,49 +105,51 @@ class ImproveActionPhpheader extends ImproveAction
'
' . __('Exemple') .' ' . self::$exemple . ' ';
}
- public function openModule(string $module_type, array $module_info): ?bool
+ public function openModule(): ?bool
{
- $this->type = $module_type;
- $this->module = $module_info;
$this->replaceInfo();
return null;
}
- public function openDirectory(string $path): ?bool
+ public function openDirectory(): ?bool
{
+ $skipped = $this->stop_scan;
$this->stop_scan = false;
- if (!empty($this->getPreference('exclude_locales')) && preg_match('/\/(locales|libs)(\/.*?|)$/', $path)) {
+ if (!empty($this->getSetting('exclude_locales')) && preg_match('/\/(locales|libs)(\/.*?|)$/', $this->path_full)) {
+ if (!$skipped) {
+ $this->setWarning(__('Skip directory'));
+ }
$this->stop_scan = true;
}
return null;
}
- public function readFile($path, $extension, &$content): ?bool
+ public function readFile(&$content): ?bool
{
- if ($this->stop_scan || $extension !='php' || self::hasNotice()) {
+ if ($this->stop_scan || $this->path_extension !='php' || $this->hasError()) {
return null;
}
- if (!empty($this->getPreference('remove_old'))) {
+ if (!empty($this->getSetting('remove_old'))) {
$content = $this->deleteOldBloc($content);
}
- if (empty($this->getPreference('bloc_action'))) {
+ if (empty($this->getSetting('bloc_action'))) {
return null;
}
$clean = $this->deleteDocBloc($content);
- if ($this->getPreference('bloc_action') == 'remove') {
+ if ($this->getSetting('bloc_action') == 'remove') {
$content = $clean;
return null;
}
- if ($content != $clean && $this->getPreference('bloc_action') == 'create') {
+ if ($content != $clean && $this->getSetting('bloc_action') == 'create') {
return null;
}
- if ($content == $clean && $this->getPreference('bloc_action') == 'replace') {
+ if ($content == $clean && $this->getSetting('bloc_action') == 'replace') {
return null;
}
@@ -159,7 +161,7 @@ class ImproveActionPhpheader extends ImproveAction
private function replaceInfo()
{
- $bloc = trim($this->getPreference('bloc_content'));
+ $bloc = trim($this->getSetting('bloc_content'));
if (empty($bloc)) {
self::notice(__('bloc is empty'), false);
@@ -190,8 +192,9 @@ class ImproveActionPhpheader extends ImproveAction
$bloc
)
);
+ $this->setSuccess(__('Prepare header info'));
} catch (Exception $e) {
- self::notice(__('failed to parse bloc'));
+ $this->setError(__('Failed to parse bloc'));
return null;
}
@@ -199,29 +202,46 @@ class ImproveActionPhpheader extends ImproveAction
private function writeDocBloc($content)
{
- return preg_replace(
+ $res = preg_replace(
'/^(\<\?php[\n|\r\n]+)/',
'bloc)) . "\n */\n\n",
$content,
- 1
+ 1,
+ $count
);
+ if ($count) {
+ $this->setSuccess(__('Write new doc bloc content'));
+ }
+ return $res;
}
private function deleteDocBloc($content)
{
- return preg_replace(
+ $res = preg_replace(
'/^(\<\?php\s*[\n|\r\n]{0,1}\s*\/\*\*.*?\s*\*\/\s*[\n|\r\n]+)/msi',
"setSuccess(__('Delete old doc bloc content'));
+ }
+ return $res;
}
private function deleteOldBloc($content)
{
- return preg_replace(
+ $res = preg_replace(
'/((# -- BEGIN LICENSE BLOCK ([-]+))(.*?)(# -- END LICENSE BLOCK ([-]+))([\n|\r\n]{1,}))/msi',
"",
- $content
+ $content,
+ -1,
+ $count
);
+ if ($count) {
+ $this->setSuccess(__('Delete old style bloc content'));
+ }
+ return $res;
}
}
\ No newline at end of file
diff --git a/inc/lib.improve.action.zip.php b/inc/lib.improve.action.zip.php
index 7897b30..2cfe14d 100644
--- a/inc/lib.improve.action.zip.php
+++ b/inc/lib.improve.action.zip.php
@@ -51,13 +51,13 @@ class ImproveActionZip extends ImproveAction
public function isConfigured(): bool
{
- return !empty($this->getPreference('pack_repository')) && !empty($this->getPreference('pack_filename'));
+ return !empty($this->getSetting('pack_repository')) && !empty($this->getSetting('pack_filename'));
}
public function configure($url): ?string
{
if (!empty($_POST['save'])) {
- $this->setPreferences([
+ $this->setSettings([
'pack_repository' => !empty($_POST['pack_repository']) ? $_POST['pack_repository'] : '',
'pack_filename' => !empty($_POST['pack_filename']) ? $_POST['pack_filename'] : '',
'secondpack_filename' => !empty($_POST['secondpack_filename']) ? $_POST['secondpack_filename'] : '',
@@ -73,7 +73,7 @@ class ImproveActionZip extends ImproveAction
' . __('Root') . '
' . __('Path to repository:') . ' ' .
- form::field('pack_repository', 65, 255, $this->getPreference('pack_repository'), 'maximal') .
+ form::field('pack_repository', 65, 255, $this->getSetting('pack_repository'), 'maximal') .
'
' .
'' . sprintf(__('Preconization: %s'), $this->core->blog->public_path ?
path::real($this->core->blog->public_path) : __("Blog's public directory")
@@ -84,17 +84,17 @@ class ImproveActionZip extends ImproveAction
' . __('Files') . '
' . __('Name of exported package:') . ' ' .
- form::field('pack_filename', 65, 255, $this->getPreference('pack_filename'), 'maximal') .
- '
- ' . sprintf(__('Preconization: %s'), '%type%-%id%-%version%') . '
-
- ' . __('Name of second exported package:') . ' ' .
- form::field('secondpack_filename', 65, 255, $this->getPreference('secondpack_filename'), 'maximal') .
+ form::field('pack_filename', 65, 255, $this->getSetting('pack_filename'), 'maximal') .
'
' . sprintf(__('Preconization: %s'), '%type%-%id%') . '
+ ' . __('Name of second exported package:') . ' ' .
+ form::field('secondpack_filename', 65, 255, $this->getSetting('secondpack_filename'), 'maximal') .
+ '
+ ' . sprintf(__('Preconization: %s'), '%type%-%id%-%version%') . '
+
'.
- form::checkbox('pack_overwrite', 1, !empty($this->getPreference('pack_overwrite'))) . ' ' .
+ form::checkbox('pack_overwrite', 1, !empty($this->getSetting('pack_overwrite'))) . ' ' .
__('Overwrite existing package') . '
@@ -103,32 +103,34 @@ class ImproveActionZip extends ImproveAction
' . __('Content') . '
' . __('Extra files to exclude from package:') . ' ' .
- form::field('pack_excludefiles', 65, 255, $this->getPreference('pack_excludefiles'), 'maximal') .
+ form::field('pack_excludefiles', 65, 255, $this->getSetting('pack_excludefiles'), 'maximal') .
'
' . sprintf(__('Preconization: %s'), '*.zip,*.tar,*.tar.gz') . ' ' .
sprintf(__('By default all these files are always removed from packages : %s'), implode(', ', self::$exclude)) . '
' .
- form::checkbox('pack_nocomment', 1, $this->getPreference('pack_nocomment')) . ' ' .
+ form::checkbox('pack_nocomment', 1, $this->getSetting('pack_nocomment')) . ' ' .
__('Remove comments from files') . '
';
}
- public function closeModule(string $module_type, array $module_info): ?bool
+ public function closeModule(): ?bool
{
$exclude = array_merge(
self::$exclude,
- explode(',', $this->getPreference('pack_excludefiles'))
+ explode(',', $this->getSetting('pack_excludefiles'))
);
- if (!empty($this->getPreference('pack_nocomment'))) {
+ $this->setSuccess(sprintf(__('Prepare excluded files "%s"'), implode(', ', $exclude)));
+ if (!empty($this->getSetting('pack_nocomment'))) {
ImproveZipFileZip::$remove_comment = true;
+ $this->setSuccess(__('Prepare comment removal'));
}
- if (!empty($this->getPreference('pack_filename'))) {
- $this->zipModule($this->getPreference('pack_filename'), $exclude);
+ if (!empty($this->getSetting('pack_filename'))) {
+ $this->zipModule($this->getSetting('pack_filename'), $exclude);
}
- if (!empty($this->getPreference('secondpack_filename'))) {
- $this->zipModule($this->getPreference('secondpack_filename'), $exclude);
+ if (!empty($this->getSetting('secondpack_filename'))) {
+ $this->zipModule($this->getSetting('secondpack_filename'), $exclude);
}
return null;
}
@@ -150,14 +152,16 @@ class ImproveActionZip extends ImproveAction
foreach($parts as $i => $part) {
$parts[$i] = files::tidyFileName($part);
}
- $path = $this->getPreference('pack_repository') . '/' . implode('/', $parts) . '.zip';
- if (file_exists($path) && empty($this->getPreference('pack_overwrite'))) {
- self::notice(__('Destination filename already exists'), false);
+ $path = $this->getSetting('pack_repository') . '/' . implode('/', $parts) . '.zip';
+ if (file_exists($path) && empty($this->getSetting('pack_overwrite'))) {
+ $this->setWarning(__('Destination filename already exists'));
return null;
}
if (!is_dir(dirname($path)) || !is_writable(dirname($path))) {
- self::notice(__('Destination path is not writable'));
+ $this->setError(__('Destination path is not writable'));
+
+ return null;
}
@set_time_limit(300);
$fp = fopen($path, 'wb');
@@ -179,6 +183,8 @@ class ImproveActionZip extends ImproveAction
$zip->close();
unset($zip);
+ $this->setSuccess(sprintf(__('Zip module into "%s"'), $path));
+
return null;
}
}
diff --git a/index.php b/index.php
index ea11365..6ea67da 100644
--- a/index.php
+++ b/index.php
@@ -72,24 +72,27 @@ if (!empty($_POST['fix'])) {
dcPage::addWarningNotice(__('No module selected'));
} else {
try {
- $time_start = microtime(true);
- $improve->fix(
+ $time = $improve->fixModule(
$type,
$module,
$type == 'plugin' ? $core->plugins->getModules($module) : $core->themes->getModules($module),
$_POST['actions']
);
- $time_end = microtime(true);
-
+ $log_id = $improve->writeLogs();
$core->blog->triggerBlog();
- dcPage::addSuccessNotice(sprintf(
- __('Fix of %s complete in %s secondes'),
- $module,
- substr($time_end - $time_start, 0, 5)
- ));
+ 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));
- http::redirect($improve->getURL(['type' => $type]));
+ $core->adminurl->redirect('admin.plugin.improve', ['type' => $type, 'upd' => $log_id]);
} catch (Exception $e) {
$core->error->add($e->getMessage());
}
@@ -100,14 +103,14 @@ $breadcrumb = [];
if (!empty($_REQUEST['config'])) {
$breadcrumb = [
($type == 'plugin' ? __('Plugins') : __('Themes')) =>
- $improve->getURL(['type' => ($type == 'plugin' ? 'plugin' : 'theme')]),
+ $core->adminurl->get('admin.plugin.improve', ['type' => ($type == 'plugin' ? 'plugin' : 'theme')]),
'' . __('Configure module') . ' ' => ''
];
} else {
$breadcrumb = [
'' . ($type == 'plugin' ? __('Plugins') : __('Themes')) . ' ' => '',
($type == 'theme' ? __('Plugins') : __('Themes')) =>
- $improve->getURL(['type' => ($type == 'theme' ? 'plugin' : 'theme')])
+ $core->adminurl->get('admin.plugin.improve', ['type' => ($type == 'theme' ? 'plugin' : 'theme')])
];
}
@@ -117,17 +120,17 @@ dcPage::breadcrumb(array_merge([__('improve') => ''], $breadcrumb),['hl' => fals
dcPage::notices();
if (!empty($_REQUEST['config'])) {
- $back_url = $_REQUEST['redir'] ?? $improve->getURL(['type' => $type]);
+ $back_url = $_REQUEST['redir'] ?? $core->adminurl->get('admin.plugin.improve', ['type' => $type]);
if (null !== ($action = $improve->module($_REQUEST['config']))) {
- $redir = $_REQUEST['redir'] ?? $improve->getURL(['type' => $type, 'config' => $action->id]);
+ $redir = $_REQUEST['redir'] ?? $core->adminurl->get('admin.plugin.improve', ['type' => $type, 'config' => $action->id]);
$res = $action->configure($redir);
echo '
' . sprintf(__('Configure module "%s"'), $action->name) . '
' . __('Back') . '
' . html::escapeHTML($action->desc) . '
- ';
+
+ $logs = $lines = [];
+
+ if (!empty($_REQUEST['upd'])) {
+ $logs = $improve->parseLogs($_REQUEST['upd']);
+
+ if (!empty($logs)) {
+ echo '' . __('Details') . ' ';
+ foreach($logs as $path => $types) {
+ echo '
' . $path .' ';
+ foreach($types as $type => $tools) {
+ echo '
';
+ foreach($tools as $tool => $msgs) {
+ echo '' . $improve->module($tool)->name . '';
+ foreach($msgs as $msg) {
+ echo '' . $msg . ' ';
+ }
+ echo ' ';
+ }
+ echo ' ';
+ }
+ echo '';
+ }
+ echo '
';
+ }
+ }
}
}
diff --git a/locales/fr/main.lang.php b/locales/fr/main.lang.php
index c894a7e..7f06122 100644
--- a/locales/fr/main.lang.php
+++ b/locales/fr/main.lang.php
@@ -1,17 +1,25 @@
1);\n"
-#: inc/class.improve.php:77
+#: inc/class.improve.php:142
+#: inc/class.improve.php:145
+msgid "Begin"
+msgstr "Début"
+
+#: inc/class.improve.php:150
msgid "Module path is not writable"
msgstr "Le chemin du module n'est pas accessible en écriture"
-#: inc/class.improve.php:105
+#: inc/class.improve.php:181
msgid "File content has been removed: %s by %s"
msgstr "Le contenu du fichier a été supprimé : %s par %s"
+#: inc/class.improve.php:196
+#: inc/class.improve.php:198
+msgid "End"
+msgstr "Fin"
+
#: inc/lib.improve.action.dcstore.php:20
-msgid "Fix dcstore.xml"
-msgstr "Fixer dcstore.xml"
+msgid "Store file"
+msgstr "Fichier de dépôt"
#: inc/lib.improve.action.dcstore.php:21
msgid "Re-create dcstore.xml file according to _define.php variables"
@@ -52,53 +62,57 @@ msgstr "Par exemple sur github https://github.com/MyGitName/%id%/releases/downlo
msgid "Note on github, you must create a release and join to it the module zip file."
msgstr "Note sur Github, vous devez créer un release et y joindre le fichier zip du module."
-#: inc/lib.improve.action.dcstore.php:70
+#: inc/lib.improve.action.dcstore.php:65
+msgid "Write dcstore.xml file."
+msgstr "Ecrire le fichier dcstore.xml"
+
+#: inc/lib.improve.action.dcstore.php:67
msgid "Failed to write dcstore.xml file"
msgstr "Impossible d'écrire le fichier dcstore.xml"
-#: inc/lib.improve.action.dcstore.php:88
+#: inc/lib.improve.action.dcstore.php:81
msgid "unkow module id"
msgstr "Id du module inconu"
-#: inc/lib.improve.action.dcstore.php:94
+#: inc/lib.improve.action.dcstore.php:87
msgid "unknow module name"
msgstr "nom du module inconnu"
-#: inc/lib.improve.action.dcstore.php:100
+#: inc/lib.improve.action.dcstore.php:93
msgid "unknow module version"
msgstr "version du module inconnue"
-#: inc/lib.improve.action.dcstore.php:106
+#: inc/lib.improve.action.dcstore.php:99
msgid "unknow module author"
msgstr "auteur du module inconnu"
-#: inc/lib.improve.action.dcstore.php:113
+#: inc/lib.improve.action.dcstore.php:106
msgid "unknow module description"
msgstr "description du module inconnue"
-#: inc/lib.improve.action.dcstore.php:119
+#: inc/lib.improve.action.dcstore.php:112
msgid "no repository set in _define.php"
msgstr "Aucun dépôt défini dans le fichier _define.php"
-#: inc/lib.improve.action.dcstore.php:125
+#: inc/lib.improve.action.dcstore.php:118
msgid "no zip file pattern set in configuration"
msgstr "Pas de modèle de fichier zip présent dans la configuration"
-#: inc/lib.improve.action.dcstore.php:142
+#: inc/lib.improve.action.dcstore.php:135
msgid "no minimum dotclear version"
msgstr "pas de version minimum de Dotclear"
-#: inc/lib.improve.action.dcstore.php:149
+#: inc/lib.improve.action.dcstore.php:142
msgid "no details URL"
msgstr "Lien de détail non défini"
-#: inc/lib.improve.action.dcstore.php:162
+#: inc/lib.improve.action.dcstore.php:155
msgid "no support URL"
msgstr "Lien de support non défini"
#: inc/lib.improve.action.gitshields.php:34
-msgid "Fix shields badges"
-msgstr "Fixer les badges shields.io"
+msgid "Shields badges"
+msgstr "Badges Shields.io"
#: inc/lib.improve.action.gitshields.php:35
msgid "Add and maintain shields.io badges to the REDAME.md file"
@@ -124,9 +138,21 @@ msgstr "Inclure le badge Dotaddict"
msgid "If your plugin or theme is on Dotaddict, you can add a badge to link to its details in Dotaddict."
msgstr "Si votre plugin ou theme est sur Dotaddict, vous pouvez ajouter un badge lier à ses détails sur DA."
+#: inc/lib.improve.action.gitshields.php:117
+msgid "Prepare custom shield info"
+msgstr "préparer les informations personnalisées"
+
+#: inc/lib.improve.action.gitshields.php:147
+msgid "Write new shield bloc"
+msgstr "Ecrire le nouveau bloc Shield"
+
+#: inc/lib.improve.action.gitshields.php:162
+msgid "Delete old shield bloc"
+msgstr "Effacer l'ancine bloc Shield"
+
#: inc/lib.improve.action.licensefile.php:29
-msgid "Fix license file"
-msgstr "Fixer le fichier de licence"
+msgid "License file"
+msgstr "Fichier de licence"
#: inc/lib.improve.action.licensefile.php:30
msgid "Add or remove full license file to module root"
@@ -165,69 +191,89 @@ msgstr "Version de la licence :"
msgid "Action on file:"
msgstr "Action sur le fichier :"
-#: inc/lib.improve.action.licensefile.php:87
-msgid "no full license type selected"
-msgstr "Aucun type de licence sélectionné"
+#: inc/lib.improve.action.licensefile.php:84
+msgid "No full license type selected"
+msgstr "Pas de type de licence seletionné"
-#: inc/lib.improve.action.licensefile.php:100
-msgid "failed to load full license"
-msgstr "Impossible de charger le fichier de licence"
+#: inc/lib.improve.action.licensefile.php:97
+msgid "Failed to load license content"
+msgstr "Impossible de charger le contenu de la licence"
-#: inc/lib.improve.action.licensefile.php:106
-msgid "failed to write full license"
-msgstr "Impossible d'écrire le fichier de license"
+#: inc/lib.improve.action.licensefile.php:102
+msgid "Write new license file \"LICENSE\""
+msgstr "Écrire le nouveau fichier \"LICENSE\" de licence"
+
+#: inc/lib.improve.action.licensefile.php:104
+msgid "Failed to write new license file"
+msgstr "Impossible d'écrire le nouveau fichier de licence"
+
+#: inc/lib.improve.action.licensefile.php:118
+msgid "Old license file is not deletable (%s)"
+msgstr "L'ancien fichier de licence n'est pas supprimable (%s)"
#: inc/lib.improve.action.licensefile.php:120
-msgid "full license is not deletable (%s)"
-msgstr "Le fichier de licence n'est pas supprimable (%s)"
+msgid "Failed to delete old license file (%s)"
+msgstr "Impossible de supprimer l'ancien fichier de licence (%s)"
-#: inc/lib.improve.action.licensefile.php:123
-msgid "failed to delete full license (%s)"
-msgstr "Impossible de supprimer le fichier de licence (%s)"
+#: inc/lib.improve.action.licensefile.php:122
+msgid "Delete old license file \"%s\""
+msgstr "Effacer l'ancien fichier de Licence \"%s\""
#: inc/lib.improve.action.php:20
-msgid "Fix tabulation"
-msgstr "Fixer les tabulations"
+msgid "Tabulations"
+msgstr "Tabulations"
#: inc/lib.improve.action.php:21
msgid "Replace tabulation by four space in php files"
msgstr "Remplace les tabulation par quatre espaces dans les fichiers php"
-#: inc/lib.improve.action.php:53
-msgid "Fix newline"
-msgstr "Fixer les retours à la ligne"
+#: inc/lib.improve.action.php:36
+msgid "Replace tabulation by spaces"
+msgstr "Remplacer les tabulations"
-#: inc/lib.improve.action.php:54
+#: inc/lib.improve.action.php:57
+msgid "Newlines"
+msgstr "Retour à la ligne"
+
+#: inc/lib.improve.action.php:58
msgid "Replace bad and repetitive and empty newline by single newline in files"
msgstr "Remplace les mauvais ou répétitifs retour à la ligne par une seule nouvelle ligne"
-#: inc/lib.improve.action.php:91
+#: inc/lib.improve.action.php:95
msgid "List of files extension to work on:"
msgstr "Liste des extensions de fichier à corriger:"
-#: inc/lib.improve.action.php:94
+#: inc/lib.improve.action.php:98
msgid "Use comma separated list of extensions without dot, recommand \"php,js,xml,txt,md\"."
msgstr "Utiliser une liste d'extensions séparé par des virgules et sans le point, recommandation: \"php,js,xml,txt,md\"."
-#: inc/lib.improve.action.php:128
-msgid "Fix end of file"
-msgstr "Fixer les fins de fichiers"
+#: inc/lib.improve.action.php:122
+msgid "Replace bad new lines"
+msgstr "Remplacer les retours à la ligne"
-#: inc/lib.improve.action.php:129
+#: inc/lib.improve.action.php:138
+msgid "End of files"
+msgstr "Fin de fichiers"
+
+#: inc/lib.improve.action.php:139
msgid "Remove php tag and empty lines from end of files"
-msgstr "Supprimer le tag PHP et els lignes vides de fin de fichiers"
+msgstr "Supprimer le tag PHP et les lignes vides de fin de fichiers"
-#: inc/lib.improve.action.php:153
+#: inc/lib.improve.action.php:163
msgid "Add a blank line to the end of file"
msgstr "Ajouter une ligne vide en fin de fichier"
-#: inc/lib.improve.action.php:155
+#: inc/lib.improve.action.php:165
msgid "PSR2 must have a blank line, whereas PSR12 must not."
msgstr "PSR2 doit avoir une ligne vide, alors que PSR12 non."
+#: inc/lib.improve.action.php:180
+msgid "Replace end of file"
+msgstr "Remplacer les fins de fichiers"
+
#: inc/lib.improve.action.phpheader.php:47
-msgid "Fix PHP header"
-msgstr "Fixer les enêtes php"
+msgid "PHP header"
+msgstr "Entête de fichier PHP"
#: inc/lib.improve.action.phpheader.php:48
msgid "Add or remove phpdoc header bloc from php file"
@@ -269,13 +315,33 @@ msgstr "Contenu du bloc :"
msgid "Do not put structural elements to the begining of lines."
msgstr "Ne pas mettre d'élément de structure en début de ligne"
-#: inc/lib.improve.action.phpheader.php:165
+#: inc/lib.improve.action.phpheader.php:121
+msgid "Skip directory"
+msgstr "Ignorer le répertoire"
+
+#: inc/lib.improve.action.phpheader.php:167
msgid "bloc is empty"
msgstr "le bloc est vide"
-#: inc/lib.improve.action.phpheader.php:194
-msgid "failed to parse bloc"
-msgstr "impossible de traiter le bloc"
+#: inc/lib.improve.action.phpheader.php:195
+msgid "Prepare header info"
+msgstr "Préparer les informations d'entête"
+
+#: inc/lib.improve.action.phpheader.php:197
+msgid "Failed to parse bloc"
+msgstr "Impossible de préparer le bloc"
+
+#: inc/lib.improve.action.phpheader.php:213
+msgid "Write new doc bloc content"
+msgstr "Ecrire le nouveau contenu de bloc"
+
+#: inc/lib.improve.action.phpheader.php:228
+msgid "Delete old doc bloc content"
+msgstr "Effacer l'ancien contenu de type phpdoc"
+
+#: inc/lib.improve.action.phpheader.php:243
+msgid "Delete old style bloc content"
+msgstr "Effacer l'ancien contenu de type ancien"
#: inc/lib.improve.action.zip.php:42
msgid "Zip module"
@@ -332,14 +398,26 @@ msgstr "Pas défaut tous ces fichiers sont toujours exclu des paquetages : %s"
msgid "Remove comments from files"
msgstr "Retirer les commentaires des fichiers"
-#: inc/lib.improve.action.zip.php:155
+#: inc/lib.improve.action.zip.php:124
+msgid "Prepare excluded files \"%s\""
+msgstr "Préparer les fichiers à exclure \"%s\""
+
+#: inc/lib.improve.action.zip.php:127
+msgid "Prepare comment removal"
+msgstr "Préparer le retrait des commentaires"
+
+#: inc/lib.improve.action.zip.php:157
msgid "Destination filename already exists"
msgstr "Le fichier de destination existe déjà"
-#: inc/lib.improve.action.zip.php:160
+#: inc/lib.improve.action.zip.php:162
msgid "Destination path is not writable"
msgstr "Le répertoire de destination n'est pas accessible en écriture"
+#: inc/lib.improve.action.zip.php:186
+msgid "Zip module into \"%s\""
+msgstr "Zipper le module vers \"%s\""
+
#: index.php:54
msgid "Select a module"
msgstr "Sélectionner un module"
@@ -352,51 +430,63 @@ msgstr "Aucune action sélectionné"
msgid "No module selected"
msgstr "Aucun module sélectionné"
-#: index.php:87
-msgid "Fix of %s complete in %s secondes"
-msgstr "Correction de %s complété en %s secondes"
+#: index.php:85
+msgid "Fix of \"%s\" complete in %s secondes with errors"
+msgstr "Fixe de \"%s\" complété en %s secondes avec des erreurs"
-#: index.php:102
-#: index.php:108
-#: index.php:109
-#: index.php:146
+#: index.php:87
+msgid "Fix of \"%s\" complete in %s secondes with warnings"
+msgstr "Fixe de \"%s\" complété en %s secondes avec des avertissements"
+
+#: index.php:89
+msgid "Fix of \"%s\" complete in %s secondes"
+msgstr "Fixe de \"%s\" complété en %s secondes"
+
+#: index.php:91
+msgid "Fix of \"%s\" complete in %s secondes without messages"
+msgstr "Fixe de \"%s\" complété en %s secondes sans message"
+
+#: index.php:105
+#: index.php:111
+#: index.php:112
+#: index.php:149
msgid "Themes"
msgstr "Thèmes"
-#: index.php:104
-#: index.php:174
+#: index.php:107
+#: index.php:177
msgid "Configure module"
msgstr "Configurer le module"
-#: index.php:127
+#: index.php:130
msgid "Configure module \"%s\""
msgstr "Configurer le module \"%s\""
-#: index.php:131
+#: index.php:134
msgid "Nothing to configure"
msgstr "Rien à configurer"
-#: index.php:140
+#: index.php:143
msgid "Unknow module"
msgstr "Module inconnu"
-#: index.php:149
+#: index.php:152
msgid "No module to manage"
msgstr "Aucun module à gérer"
-#: index.php:174
+#: index.php:177
msgid "Configure action '%s'"
msgstr "Configurer l'action \"%s\""
-#: index.php:184
+#: index.php:187
msgid "Save fields selection as preference"
msgstr "Enregistrer la sélection comme préférence"
-#: index.php:185
+#: index.php:188
msgid "Select a module:"
msgstr "Sélectionner un module :"
-#: index.php:188
+#: index.php:191
msgid "Fix it"
msgstr "Corriger"