add report, change preference for setting, less functions args, less interface text
This commit is contained in:
parent
bb3966b189
commit
346b59b5bb
13 changed files with 994 additions and 418 deletions
10
CHANGELOG.md
10
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
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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');
|
||||
}
|
||||
//@}
|
||||
}
|
|
@ -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,
|
||||
|
|
|
@ -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
|
|||
'<p class="info">' . __('File will be overwritten if it exists') . '</p>' .
|
||||
'<p><label class="classic" for="dcstore_pattern">' .
|
||||
__('Predictable URL to zip file on the external repository') . '<br />' .
|
||||
form::field('dcstore_pattern', 160, 255, $this->getPreference('pattern')) . '</label>' .
|
||||
form::field('dcstore_pattern', 160, 255, $this->getSetting('pattern')) . '</label>' .
|
||||
'</p>' .
|
||||
'<p class="form-note">' .
|
||||
sprintf(__('You can use wildcards %s'), '%author%, %type%, %id%, %version%.') .
|
||||
|
@ -54,20 +54,17 @@ class ImproveActionDcstore extends ImproveAction
|
|||
</p>';
|
||||
}
|
||||
|
||||
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 = ['<modules xmlns:da="http://dotaddict.org/da/">'];
|
||||
|
||||
# id
|
||||
if (empty($module['id'])) {
|
||||
self::notice(__('unkow module id'));
|
||||
if (empty($this->module['id'])) {
|
||||
$this->setError(__('unkow module id'));
|
||||
}
|
||||
$xml[] = sprintf('<module id="%s">', html::escapeHTML($module['id']));
|
||||
$xml[] = sprintf('<module id="%s">', 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('<name>%s</name>', html::escapeHTML($module['name']));
|
||||
$xml[] = sprintf('<name>%s</name>', 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('<version>%s</version>', html::escapeHTML($module['version']));
|
||||
$xml[] = sprintf('<version>%s</version>', 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('<author>%s</author>', html::escapeHTML($module['author']));
|
||||
$xml[] = sprintf('<author>%s</author>', 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('<desc>%s</desc>', html::escapeHTML($module['desc']));
|
||||
$xml[] = sprintf('<desc>%s</desc>', 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('<file>%s</file>', 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('<da:dcmin>%s</da:dcmin>', html::escapeHTML($module['dc_min']));
|
||||
$xml[] = sprintf('<da:dcmin>%s</da:dcmin>', 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('<da:details>%s</da:details>', html::escapeHTML($module['details']));
|
||||
$xml[] = sprintf('<da:details>%s</da:details>', html::escapeHTML($this->module['details']));
|
||||
}
|
||||
|
||||
# da sshot
|
||||
//$xml[] = sprintf('<da:sshot>%s</da:sshot>', html::escapeHTML($module['sshot']));
|
||||
//$xml[] = sprintf('<da:sshot>%s</da:sshot>', html::escapeHTML($this->module['sshot']));
|
||||
|
||||
# da section
|
||||
//$xml[] = sprintf('<da:section>%s</da:section>', html::escapeHTML($module['section']));
|
||||
//$xml[] = sprintf('<da:section>%s</da:section>', 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('<da:support>%s</da:support>', html::escapeHTML($module['support']));
|
||||
$xml[] = sprintf('<da:support>%s</da:support>', html::escapeHTML($this->module['support']));
|
||||
}
|
||||
|
||||
# da tags
|
||||
//$xml[] = sprintf('<da:tags>%s</da:tags>', html::escapeHTML($module['tags']));
|
||||
//$xml[] = sprintf('<da:tags>%s</da:tags>', html::escapeHTML($this->module['tags']));
|
||||
|
||||
$xml[] = '</module>';
|
||||
$xml[] = '</modules>';
|
||||
|
@ -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')
|
||||
));
|
||||
}
|
||||
}
|
|
@ -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 '
|
||||
<p><label for="username">' . __('Your Github user name :') . '</label>' .
|
||||
form::field('username', 60, 100, $this->getPreference('username')) . '
|
||||
form::field('username', 60, 100, $this->getSetting('username')) . '
|
||||
</p><p class="form-note">' . __('Used in your Github URL: http://github.com/username/module_id.') . '<br />' .
|
||||
__('If you have badges not created by this tool in the README.md file you should remove them manually.') . '</p>
|
||||
|
||||
<p><label for="dotaddict">' .
|
||||
form::checkbox('dotaddict', 1, !empty($this->getPreference('dotaddict'))) . ' '.
|
||||
form::checkbox('dotaddict', 1, !empty($this->getSetting('dotaddict'))) . ' '.
|
||||
__('Include Dotaddict badge') . '</label>
|
||||
</p><p class="form-note">' . __('If your plugin or theme is on Dotaddict, you can add a badge to link to its details in Dotaddict.') . '</p>';
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
|
@ -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 '
|
||||
<p class="field"><label for="action_version">' . __('License version:') . '</label>' .
|
||||
form::combo('action_version', $this->action_version, $this->getPreference('action_version')) . '
|
||||
form::combo('action_version', $this->action_version, $this->getSetting('action_version')) . '
|
||||
</p>
|
||||
|
||||
<p class="field"><label for="action_full">' . __('Action on file:') . '</label>' .
|
||||
form::combo('action_full', $this->action_full, $this->getPreference('action_full')) .
|
||||
form::combo('action_full', $this->action_full, $this->getSetting('action_full')) .
|
||||
'</p>';
|
||||
}
|
||||
|
||||
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;
|
||||
|
|
|
@ -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
|
|||
'</p>';
|
||||
}
|
||||
|
||||
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
|
||||
'<p><label class="classic" for="endoffile_psr2">' .
|
||||
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') .
|
||||
'</label></p><p class="form-note">' .
|
||||
__('PSR2 must have a blank line, whereas PSR12 must not.') .
|
||||
'</p>';
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
|
|
@ -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 '
|
||||
<p><label for="bloc_action">' . __('Action:') . '</label>' .
|
||||
form::combo('bloc_action', $this->action_bloc, $this->getPreference('bloc_action')) . '
|
||||
form::combo('bloc_action', $this->action_bloc, $this->getSetting('bloc_action')) . '
|
||||
</p>
|
||||
|
||||
<p><label class="classic" for="remove_old">' .
|
||||
form::checkbox('remove_old', 1, $this->getPreference('remove_old')) . ' ' .
|
||||
form::checkbox('remove_old', 1, $this->getSetting('remove_old')) . ' ' .
|
||||
__('Remove old style bloc header (using #)') .
|
||||
'</label></p>
|
||||
|
||||
<p><label class="classic" for="exclude_locales">' .
|
||||
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') .
|
||||
'</label></p>
|
||||
|
||||
<p>' . __('Bloc content:') . '</p>
|
||||
<p class="area">' .
|
||||
form::textarea('bloc_content', 50, 10, html::escapeHTML($this->getPreference('bloc_content'))) . '
|
||||
form::textarea('bloc_content', 50, 10, html::escapeHTML($this->getSetting('bloc_content'))) . '
|
||||
</p><p class="form-note">' .
|
||||
sprintf(
|
||||
__('You can use wildcards %s') ,
|
||||
|
@ -105,49 +105,51 @@ class ImproveActionPhpheader extends ImproveAction
|
|||
'<div class="fieldset box"><h4>' . __('Exemple') .'</h4><pre class="code">' . self::$exemple . '</pre></div>';
|
||||
}
|
||||
|
||||
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]+)/',
|
||||
'<?php' . "\n/**\n * " . str_replace("\n", "\n * ", trim($this->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',
|
||||
"<?php\n",
|
||||
$content
|
||||
$content,
|
||||
-1,
|
||||
$count
|
||||
);
|
||||
if ($count) {
|
||||
$this->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;
|
||||
}
|
||||
}
|
|
@ -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
|
|||
<h4>' . __('Root') . '</h4>
|
||||
|
||||
<p><label for="pack_repository">' . __('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') .
|
||||
'</label></p>' .
|
||||
'<p class="form-note">' . 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
|
|||
<h4>' . __('Files') . '</h4>
|
||||
|
||||
<p><label for="pack_filename">' . __('Name of exported package:') . ' ' .
|
||||
form::field('pack_filename', 65, 255, $this->getPreference('pack_filename'), 'maximal') .
|
||||
'</label></p>
|
||||
<p class="form-note">' . sprintf(__('Preconization: %s'), '%type%-%id%-%version%') . '</p>
|
||||
|
||||
<p><label for="secondpack_filename">' . __('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') .
|
||||
'</label></p>
|
||||
<p class="form-note">' . sprintf(__('Preconization: %s'), '%type%-%id%') . '</p>
|
||||
|
||||
<p><label for="secondpack_filename">' . __('Name of second exported package:') . ' ' .
|
||||
form::field('secondpack_filename', 65, 255, $this->getSetting('secondpack_filename'), 'maximal') .
|
||||
'</label></p>
|
||||
<p class="form-note">' . sprintf(__('Preconization: %s'), '%type%-%id%-%version%') . '</p>
|
||||
|
||||
<p><label class="classic" for="pack_overwrite">'.
|
||||
form::checkbox('pack_overwrite', 1, !empty($this->getPreference('pack_overwrite'))) . ' ' .
|
||||
form::checkbox('pack_overwrite', 1, !empty($this->getSetting('pack_overwrite'))) . ' ' .
|
||||
__('Overwrite existing package') . '</label></p>
|
||||
|
||||
</div>
|
||||
|
@ -103,32 +103,34 @@ class ImproveActionZip extends ImproveAction
|
|||
<h4>' . __('Content') . '</h4>
|
||||
|
||||
<p><label for="pack_excludefiles">' . __('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') .
|
||||
'</label></p>
|
||||
<p class="form-note">' . sprintf(__('Preconization: %s'), '*.zip,*.tar,*.tar.gz') . '<br />' .
|
||||
sprintf(__('By default all these files are always removed from packages : %s'), implode(', ', self::$exclude)) . '</p>
|
||||
|
||||
<p><label class="classic" for="pack_nocomment">' .
|
||||
form::checkbox('pack_nocomment', 1, $this->getPreference('pack_nocomment')) . ' ' .
|
||||
form::checkbox('pack_nocomment', 1, $this->getSetting('pack_nocomment')) . ' ' .
|
||||
__('Remove comments from files') . '</label></p>
|
||||
|
||||
</div>';
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
63
index.php
63
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')]),
|
||||
'<span class="page-title">' . __('Configure module') . '</span>' => ''
|
||||
];
|
||||
} else {
|
||||
$breadcrumb = [
|
||||
'<span class="page-title">' . ($type == 'plugin' ? __('Plugins') : __('Themes')) . '</span>' => '',
|
||||
($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 '
|
||||
<h3>' . sprintf(__('Configure module "%s"'), $action->name) . '</h3>
|
||||
<p><a class="back" href="' . $back_url . '">' . __('Back') . '</a></p>
|
||||
<p>' . html::escapeHTML($action->desc) . '</p>
|
||||
<form action="' . $improve->getURL() . '" method="post" id="form-actions">' .
|
||||
<form action="' . $core->adminurl->get('admin.plugin.improve') . '" method="post" id="form-actions">' .
|
||||
(empty($res) ? '<p class="message">' . __('Nothing to configure'). '</p>' : $res) . '
|
||||
<p class="clear"><input type="submit" name="save" value="' . __('Save') . '" />' .
|
||||
form::hidden('type', $type) .
|
||||
|
@ -148,7 +151,7 @@ if (!empty($_REQUEST['config'])) {
|
|||
if (count($combo_modules) == 1) {
|
||||
echo '<p class="message">' . __('No module to manage') . '</p>';
|
||||
} else {
|
||||
echo '<form action="' . $improve->getURL() . '" method="post" id="form-actions">';
|
||||
echo '<form action="' . $core->adminurl->get('admin.plugin.improve') . '" method="post" id="form-actions">';
|
||||
foreach($improve->modules() as $action) {
|
||||
if (!in_array($type, $action->types)) {
|
||||
continue;
|
||||
|
@ -170,7 +173,7 @@ if (!empty($_REQUEST['config'])) {
|
|||
if (false !== $action->config) {
|
||||
echo
|
||||
' - <a class="module-config" href="' .
|
||||
(true === $action->config ? $improve->getURL(['type' => $type, 'config' => $action->id]) : $action->config) .
|
||||
(true === $action->config ? $core->adminurl->get('admin.plugin.improve', ['type' => $type, 'config' => $action->id]) : $action->config) .
|
||||
'" title="' . sprintf(__("Configure action '%s'"), $action->name) . '">' . __('Configure module') . '</a>';
|
||||
}
|
||||
echo '</p>';
|
||||
|
@ -192,6 +195,32 @@ if (!empty($_REQUEST['config'])) {
|
|||
</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>';
|
||||
foreach($logs as $path => $types) {
|
||||
echo '<h5>' . $path .'</h5>';
|
||||
foreach($types as $type => $tools) {
|
||||
echo '<div class="' . $type . '"><ul>';
|
||||
foreach($tools as $tool => $msgs) {
|
||||
echo '<li>' . $improve->module($tool)->name . '<ul>';
|
||||
foreach($msgs as $msg) {
|
||||
echo '<li>' . $msg . '</li>';
|
||||
}
|
||||
echo '</ul></li>';
|
||||
}
|
||||
echo '</ul></div>';
|
||||
}
|
||||
echo '';
|
||||
}
|
||||
echo '</div>';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,17 +1,25 @@
|
|||
<?php
|
||||
// Language: Français
|
||||
// Module: improve - 0.1.1
|
||||
// Date: 2021-09-12 21:00:21
|
||||
// Date: 2021-09-14 23:23:55
|
||||
// Translated with dcTranslater - 2021.09.02.1
|
||||
|
||||
#inc/class.improve.php:77
|
||||
#inc/class.improve.php:142
|
||||
#inc/class.improve.php:145
|
||||
$GLOBALS['__l10n']['Begin'] = 'Début';
|
||||
|
||||
#inc/class.improve.php:150
|
||||
$GLOBALS['__l10n']['Module path is not writable'] = 'Le chemin du module n\'est pas accessible en écriture';
|
||||
|
||||
#inc/class.improve.php:105
|
||||
#inc/class.improve.php:181
|
||||
$GLOBALS['__l10n']['File content has been removed: %s by %s'] = 'Le contenu du fichier a été supprimé : %s par %s';
|
||||
|
||||
#inc/class.improve.php:196
|
||||
#inc/class.improve.php:198
|
||||
$GLOBALS['__l10n']['End'] = 'Fin';
|
||||
|
||||
#inc/lib.improve.action.dcstore.php:20
|
||||
$GLOBALS['__l10n']['Fix dcstore.xml'] = 'Fixer dcstore.xml';
|
||||
$GLOBALS['__l10n']['Store file'] = 'Fichier de dépôt';
|
||||
|
||||
#inc/lib.improve.action.dcstore.php:21
|
||||
$GLOBALS['__l10n']['Re-create dcstore.xml file according to _define.php variables'] = 'Re-créer le fichier dcstore.xml suivant les variables du fichier _define.php';
|
||||
|
@ -32,41 +40,44 @@ $GLOBALS['__l10n']['For exemple on github https://github.com/MyGitName/%id%/rele
|
|||
#inc/lib.improve.action.dcstore.php:53
|
||||
$GLOBALS['__l10n']['Note on github, you must create a release and join to it the module zip file.'] = '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
|
||||
$GLOBALS['__l10n']['Write dcstore.xml file.'] = 'Ecrire le fichier dcstore.xml';
|
||||
|
||||
#inc/lib.improve.action.dcstore.php:67
|
||||
$GLOBALS['__l10n']['Failed to write dcstore.xml file'] = 'Impossible d\'écrire le fichier dcstore.xml';
|
||||
|
||||
#inc/lib.improve.action.dcstore.php:88
|
||||
#inc/lib.improve.action.dcstore.php:81
|
||||
$GLOBALS['__l10n']['unkow module id'] = 'Id du module inconu';
|
||||
|
||||
#inc/lib.improve.action.dcstore.php:94
|
||||
#inc/lib.improve.action.dcstore.php:87
|
||||
$GLOBALS['__l10n']['unknow module name'] = 'nom du module inconnu';
|
||||
|
||||
#inc/lib.improve.action.dcstore.php:100
|
||||
#inc/lib.improve.action.dcstore.php:93
|
||||
$GLOBALS['__l10n']['unknow module version'] = 'version du module inconnue';
|
||||
|
||||
#inc/lib.improve.action.dcstore.php:106
|
||||
#inc/lib.improve.action.dcstore.php:99
|
||||
$GLOBALS['__l10n']['unknow module author'] = 'auteur du module inconnu';
|
||||
|
||||
#inc/lib.improve.action.dcstore.php:113
|
||||
#inc/lib.improve.action.dcstore.php:106
|
||||
$GLOBALS['__l10n']['unknow module description'] = 'description du module inconnue';
|
||||
|
||||
#inc/lib.improve.action.dcstore.php:119
|
||||
#inc/lib.improve.action.dcstore.php:112
|
||||
$GLOBALS['__l10n']['no repository set in _define.php'] = '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
|
||||
$GLOBALS['__l10n']['no zip file pattern set in configuration'] = '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
|
||||
$GLOBALS['__l10n']['no minimum dotclear version'] = 'pas de version minimum de Dotclear';
|
||||
|
||||
#inc/lib.improve.action.dcstore.php:149
|
||||
#inc/lib.improve.action.dcstore.php:142
|
||||
$GLOBALS['__l10n']['no details URL'] = 'Lien de détail non défini';
|
||||
|
||||
#inc/lib.improve.action.dcstore.php:162
|
||||
#inc/lib.improve.action.dcstore.php:155
|
||||
$GLOBALS['__l10n']['no support URL'] = 'Lien de support non défini';
|
||||
|
||||
#inc/lib.improve.action.gitshields.php:34
|
||||
$GLOBALS['__l10n']['Fix shields badges'] = 'Fixer les badges shields.io';
|
||||
$GLOBALS['__l10n']['Shields badges'] = 'Badges Shields.io';
|
||||
|
||||
#inc/lib.improve.action.gitshields.php:35
|
||||
$GLOBALS['__l10n']['Add and maintain shields.io badges to the REDAME.md file'] = 'Ajoute et maintient à jour les badges shields.io du fichier README.md';
|
||||
|
@ -86,8 +97,17 @@ $GLOBALS['__l10n']['Include Dotaddict badge'] = 'Inclure le badge Dotaddict';
|
|||
#inc/lib.improve.action.gitshields.php:68
|
||||
$GLOBALS['__l10n']['If your plugin or theme is on Dotaddict, you can add a badge to link to its details in Dotaddict.'] = '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
|
||||
$GLOBALS['__l10n']['Prepare custom shield info'] = 'préparer les informations personnalisées';
|
||||
|
||||
#inc/lib.improve.action.gitshields.php:147
|
||||
$GLOBALS['__l10n']['Write new shield bloc'] = 'Ecrire le nouveau bloc Shield';
|
||||
|
||||
#inc/lib.improve.action.gitshields.php:162
|
||||
$GLOBALS['__l10n']['Delete old shield bloc'] = 'Effacer l\'ancine bloc Shield';
|
||||
|
||||
#inc/lib.improve.action.licensefile.php:29
|
||||
$GLOBALS['__l10n']['Fix license file'] = 'Fixer le fichier de licence';
|
||||
$GLOBALS['__l10n']['License file'] = 'Fichier de licence';
|
||||
|
||||
#inc/lib.improve.action.licensefile.php:30
|
||||
$GLOBALS['__l10n']['Add or remove full license file to module root'] = 'Ajoute ou supprime le fichier de licence';
|
||||
|
@ -117,53 +137,68 @@ $GLOBALS['__l10n']['License version:'] = 'Version de la licence :';
|
|||
#inc/lib.improve.action.licensefile.php:72
|
||||
$GLOBALS['__l10n']['Action on file:'] = 'Action sur le fichier :';
|
||||
|
||||
#inc/lib.improve.action.licensefile.php:87
|
||||
$GLOBALS['__l10n']['no full license type selected'] = 'Aucun type de licence sélectionné';
|
||||
#inc/lib.improve.action.licensefile.php:84
|
||||
$GLOBALS['__l10n']['No full license type selected'] = 'Pas de type de licence seletionné';
|
||||
|
||||
#inc/lib.improve.action.licensefile.php:100
|
||||
$GLOBALS['__l10n']['failed to load full license'] = 'Impossible de charger le fichier de licence';
|
||||
#inc/lib.improve.action.licensefile.php:97
|
||||
$GLOBALS['__l10n']['Failed to load license content'] = 'Impossible de charger le contenu de la licence';
|
||||
|
||||
#inc/lib.improve.action.licensefile.php:106
|
||||
$GLOBALS['__l10n']['failed to write full license'] = 'Impossible d\'écrire le fichier de license';
|
||||
#inc/lib.improve.action.licensefile.php:102
|
||||
$GLOBALS['__l10n']['Write new license file "LICENSE"'] = 'Écrire le nouveau fichier "LICENSE" de licence';
|
||||
|
||||
#inc/lib.improve.action.licensefile.php:104
|
||||
$GLOBALS['__l10n']['Failed to write new license file'] = 'Impossible d\'écrire le nouveau fichier de licence';
|
||||
|
||||
#inc/lib.improve.action.licensefile.php:118
|
||||
$GLOBALS['__l10n']['Old license file is not deletable (%s)'] = 'L\'ancien fichier de licence n\'est pas supprimable (%s)';
|
||||
|
||||
#inc/lib.improve.action.licensefile.php:120
|
||||
$GLOBALS['__l10n']['full license is not deletable (%s)'] = 'Le fichier de licence n\'est pas supprimable (%s)';
|
||||
$GLOBALS['__l10n']['Failed to delete old license file (%s)'] = 'Impossible de supprimer l\'ancien fichier de licence (%s)';
|
||||
|
||||
#inc/lib.improve.action.licensefile.php:123
|
||||
$GLOBALS['__l10n']['failed to delete full license (%s)'] = 'Impossible de supprimer le fichier de licence (%s)';
|
||||
#inc/lib.improve.action.licensefile.php:122
|
||||
$GLOBALS['__l10n']['Delete old license file "%s"'] = 'Effacer l\'ancien fichier de Licence "%s"';
|
||||
|
||||
#inc/lib.improve.action.php:20
|
||||
$GLOBALS['__l10n']['Fix tabulation'] = 'Fixer les tabulations';
|
||||
$GLOBALS['__l10n']['Tabulations'] = 'Tabulations';
|
||||
|
||||
#inc/lib.improve.action.php:21
|
||||
$GLOBALS['__l10n']['Replace tabulation by four space in php files'] = 'Remplace les tabulation par quatre espaces dans les fichiers php';
|
||||
|
||||
#inc/lib.improve.action.php:53
|
||||
$GLOBALS['__l10n']['Fix newline'] = 'Fixer les retours à la ligne';
|
||||
#inc/lib.improve.action.php:36
|
||||
$GLOBALS['__l10n']['Replace tabulation by spaces'] = 'Remplacer les tabulations';
|
||||
|
||||
#inc/lib.improve.action.php:54
|
||||
#inc/lib.improve.action.php:57
|
||||
$GLOBALS['__l10n']['Newlines'] = 'Retour à la ligne';
|
||||
|
||||
#inc/lib.improve.action.php:58
|
||||
$GLOBALS['__l10n']['Replace bad and repetitive and empty newline by single newline in files'] = '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
|
||||
$GLOBALS['__l10n']['List of files extension to work on:'] = 'Liste des extensions de fichier à corriger:';
|
||||
|
||||
#inc/lib.improve.action.php:94
|
||||
#inc/lib.improve.action.php:98
|
||||
$GLOBALS['__l10n']['Use comma separated list of extensions without dot, recommand "php,js,xml,txt,md".'] = '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
|
||||
$GLOBALS['__l10n']['Fix end of file'] = 'Fixer les fins de fichiers';
|
||||
#inc/lib.improve.action.php:122
|
||||
$GLOBALS['__l10n']['Replace bad new lines'] = 'Remplacer les retours à la ligne';
|
||||
|
||||
#inc/lib.improve.action.php:129
|
||||
$GLOBALS['__l10n']['Remove php tag and empty lines from end of files'] = 'Supprimer le tag PHP et els lignes vides de fin de fichiers';
|
||||
#inc/lib.improve.action.php:138
|
||||
$GLOBALS['__l10n']['End of files'] = 'Fin de fichiers';
|
||||
|
||||
#inc/lib.improve.action.php:153
|
||||
#inc/lib.improve.action.php:139
|
||||
$GLOBALS['__l10n']['Remove php tag and empty lines from end of files'] = 'Supprimer le tag PHP et les lignes vides de fin de fichiers';
|
||||
|
||||
#inc/lib.improve.action.php:163
|
||||
$GLOBALS['__l10n']['Add a blank line to the end of file'] = 'Ajouter une ligne vide en fin de fichier';
|
||||
|
||||
#inc/lib.improve.action.php:155
|
||||
#inc/lib.improve.action.php:165
|
||||
$GLOBALS['__l10n']['PSR2 must have a blank line, whereas PSR12 must not.'] = 'PSR2 doit avoir une ligne vide, alors que PSR12 non.';
|
||||
|
||||
#inc/lib.improve.action.php:180
|
||||
$GLOBALS['__l10n']['Replace end of file'] = 'Remplacer les fins de fichiers';
|
||||
|
||||
#inc/lib.improve.action.phpheader.php:47
|
||||
$GLOBALS['__l10n']['Fix PHP header'] = 'Fixer les enêtes php';
|
||||
$GLOBALS['__l10n']['PHP header'] = 'Entête de fichier PHP';
|
||||
|
||||
#inc/lib.improve.action.phpheader.php:48
|
||||
$GLOBALS['__l10n']['Add or remove phpdoc header bloc from php file'] = 'Ajouter ou supprimer les bloc d\'entête phpdoc des fichiers php';
|
||||
|
@ -195,11 +230,26 @@ $GLOBALS['__l10n']['Bloc content:'] = 'Contenu du bloc :';
|
|||
#inc/lib.improve.action.phpheader.php:104
|
||||
$GLOBALS['__l10n']['Do not put structural elements to the begining of lines.'] = '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
|
||||
$GLOBALS['__l10n']['Skip directory'] = 'Ignorer le répertoire';
|
||||
|
||||
#inc/lib.improve.action.phpheader.php:167
|
||||
$GLOBALS['__l10n']['bloc is empty'] = 'le bloc est vide';
|
||||
|
||||
#inc/lib.improve.action.phpheader.php:194
|
||||
$GLOBALS['__l10n']['failed to parse bloc'] = 'impossible de traiter le bloc';
|
||||
#inc/lib.improve.action.phpheader.php:195
|
||||
$GLOBALS['__l10n']['Prepare header info'] = 'Préparer les informations d\'entête';
|
||||
|
||||
#inc/lib.improve.action.phpheader.php:197
|
||||
$GLOBALS['__l10n']['Failed to parse bloc'] = 'Impossible de préparer le bloc';
|
||||
|
||||
#inc/lib.improve.action.phpheader.php:213
|
||||
$GLOBALS['__l10n']['Write new doc bloc content'] = 'Ecrire le nouveau contenu de bloc';
|
||||
|
||||
#inc/lib.improve.action.phpheader.php:228
|
||||
$GLOBALS['__l10n']['Delete old doc bloc content'] = 'Effacer l\'ancien contenu de type phpdoc';
|
||||
|
||||
#inc/lib.improve.action.phpheader.php:243
|
||||
$GLOBALS['__l10n']['Delete old style bloc content'] = 'Effacer l\'ancien contenu de type ancien';
|
||||
|
||||
#inc/lib.improve.action.zip.php:42
|
||||
$GLOBALS['__l10n']['Zip module'] = 'Zipper le module';
|
||||
|
@ -243,12 +293,21 @@ $GLOBALS['__l10n']['By default all these files are always removed from packages
|
|||
#inc/lib.improve.action.zip.php:113
|
||||
$GLOBALS['__l10n']['Remove comments from files'] = 'Retirer les commentaires des fichiers';
|
||||
|
||||
#inc/lib.improve.action.zip.php:155
|
||||
#inc/lib.improve.action.zip.php:124
|
||||
$GLOBALS['__l10n']['Prepare excluded files "%s"'] = 'Préparer les fichiers à exclure "%s"';
|
||||
|
||||
#inc/lib.improve.action.zip.php:127
|
||||
$GLOBALS['__l10n']['Prepare comment removal'] = 'Préparer le retrait des commentaires';
|
||||
|
||||
#inc/lib.improve.action.zip.php:157
|
||||
$GLOBALS['__l10n']['Destination filename already exists'] = 'Le fichier de destination existe déjà';
|
||||
|
||||
#inc/lib.improve.action.zip.php:160
|
||||
#inc/lib.improve.action.zip.php:162
|
||||
$GLOBALS['__l10n']['Destination path is not writable'] = 'Le répertoire de destination n\'est pas accessible en écriture';
|
||||
|
||||
#inc/lib.improve.action.zip.php:186
|
||||
$GLOBALS['__l10n']['Zip module into "%s"'] = 'Zipper le module vers "%s"';
|
||||
|
||||
#index.php:54
|
||||
$GLOBALS['__l10n']['Select a module'] = 'Sélectionner un module';
|
||||
|
||||
|
@ -258,40 +317,48 @@ $GLOBALS['__l10n']['No action selected'] = 'Aucune action sélectionné';
|
|||
#index.php:72
|
||||
$GLOBALS['__l10n']['No module selected'] = 'Aucun module sélectionné';
|
||||
|
||||
#index.php:87
|
||||
$GLOBALS['__l10n']['Fix of %s complete in %s secondes'] = 'Correction de %s complété en %s secondes';
|
||||
#index.php:85
|
||||
$GLOBALS['__l10n']['Fix of "%s" complete in %s secondes with errors'] = '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
|
||||
$GLOBALS['__l10n']['Fix of "%s" complete in %s secondes with warnings'] = 'Fixe de "%s" complété en %s secondes avec des avertissements';
|
||||
|
||||
#index.php:89
|
||||
$GLOBALS['__l10n']['Fix of "%s" complete in %s secondes'] = 'Fixe de "%s" complété en %s secondes';
|
||||
|
||||
#index.php:91
|
||||
$GLOBALS['__l10n']['Fix of "%s" complete in %s secondes without messages'] = 'Fixe de "%s" complété en %s secondes sans message';
|
||||
|
||||
#index.php:105
|
||||
#index.php:111
|
||||
#index.php:112
|
||||
#index.php:149
|
||||
$GLOBALS['__l10n']['Themes'] = 'Thèmes';
|
||||
|
||||
#index.php:104
|
||||
#index.php:174
|
||||
#index.php:107
|
||||
#index.php:177
|
||||
$GLOBALS['__l10n']['Configure module'] = 'Configurer le module';
|
||||
|
||||
#index.php:127
|
||||
#index.php:130
|
||||
$GLOBALS['__l10n']['Configure module "%s"'] = 'Configurer le module "%s"';
|
||||
|
||||
#index.php:131
|
||||
#index.php:134
|
||||
$GLOBALS['__l10n']['Nothing to configure'] = 'Rien à configurer';
|
||||
|
||||
#index.php:140
|
||||
#index.php:143
|
||||
$GLOBALS['__l10n']['Unknow module'] = 'Module inconnu';
|
||||
|
||||
#index.php:149
|
||||
#index.php:152
|
||||
$GLOBALS['__l10n']['No module to manage'] = 'Aucun module à gérer';
|
||||
|
||||
#index.php:174
|
||||
#index.php:177
|
||||
$GLOBALS['__l10n']['Configure action \'%s\''] = 'Configurer l\'action "%s"';
|
||||
|
||||
#index.php:184
|
||||
#index.php:187
|
||||
$GLOBALS['__l10n']['Save fields selection as preference'] = 'Enregistrer la sélection comme préférence';
|
||||
|
||||
#index.php:185
|
||||
#index.php:188
|
||||
$GLOBALS['__l10n']['Select a module:'] = 'Sélectionner un module :';
|
||||
|
||||
#index.php:188
|
||||
$GLOBALS['__l10n']['Fix it'] = 'Corriger';
|
||||
|
||||
#index.php:191
|
||||
$GLOBALS['__l10n']['Fix it'] = 'Corriger';
|
|
@ -1,6 +1,6 @@
|
|||
# Language: Français
|
||||
# Module: improve - 0.1.1
|
||||
# Date: 2021-09-12 21:00:21
|
||||
# Date: 2021-09-14 23:23:55
|
||||
# Translated with translater 2021.09.02.1
|
||||
|
||||
msgid ""
|
||||
|
@ -8,24 +8,34 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Project-Id-Version: improve 0.1.1\n"
|
||||
"POT-Creation-Date: \n"
|
||||
"PO-Revision-Date: 2021-09-12T21:00:21+00:00\n"
|
||||
"PO-Revision-Date: 2021-09-14T23:23:55+00:00\n"
|
||||
"Last-Translator: Jean-Christian Denis\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 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"
|
||||
|
||||
|
|
Loading…
Reference in a new issue