diff --git a/.Jenkinsfile b/.Jenkinsfile new file mode 100644 index 0000000..53221aa --- /dev/null +++ b/.Jenkinsfile @@ -0,0 +1,23 @@ +pipeline { + agent none + stages { + stage('PHPStan (static analysis)') { + agent { + docker { + image 'php:8.2-cli' + } + } + steps { + script { + sh 'curl -fsSL https://github.com/phpstan/phpstan/releases/download/1.10.41/phpstan.phar -o phpstan.phar' + sh 'php ./phpstan.phar analyse --configuration=phpstan.neon --memory-limit=512M --error-format=junit > phpstan-results.junit.xml' + } + } + post { + always { + junit 'phpstan-results.junit.xml' + } + } + } + } +} diff --git a/evolibs/Form.php b/evolibs/Form.php index 74aea53..0a050ef 100644 --- a/evolibs/Form.php +++ b/evolibs/Form.php @@ -263,6 +263,8 @@ class FormField { protected $read_only = null; protected $disabled = null; private $storage = NULL; + protected $mandatory = null; + protected $hidden = null; protected function __construct($label) { $this->storage = & $_SESSION; @@ -638,7 +640,7 @@ class EmailInputFormField extends TextInputFormField { return FALSE; } - if(!empty($this->value) && !eregi('^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$',$this->value)){ + if(!empty($this->value) && !preg_match('/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/i', $this->value)){ if($set_error) $this->error = 'Adresse email invalide'; return FALSE; } @@ -794,7 +796,7 @@ class MultipleCheckBoxInputFormField extends FormField { protected $mandatory = NULL; protected $list = array(); - public function __construct($label, $mandatory=TRUE, $list) { + public function __construct($label, $list, $mandatory=TRUE) { parent::__construct($label); $this->mandatory = $mandatory; $this->list = $list; @@ -877,7 +879,7 @@ class SelectFormField extends FormField { protected $mandatory = NULL; protected $list = array(); - public function __construct($label, $mandatory=TRUE, $list) { + public function __construct($label, $list, $mandatory=TRUE) { parent::__construct($label); $this->mandatory = $mandatory; $this->list = $list; @@ -933,7 +935,7 @@ class RadioFormField extends FormField { protected $mandatory = NULL; protected $list = array(); - public function __construct($label, $mandatory=TRUE, $list, $default = null) { + public function __construct($label, $list, $mandatory=TRUE, $default = null) { parent::__construct($label); $this->mandatory = $mandatory; $this->list = $list; @@ -995,7 +997,7 @@ class ButtonInputFormField extends FormField { protected $event = NULL; protected $action = NULL; - public function __construct($label,$mandatory=FALSE, $event, $action) { + public function __construct($label, $event, $action, $mandatory=FALSE) { parent::__construct($label); $this->mandatory = $mandatory; $this->event = $event; diff --git a/inc/accounts.php b/inc/accounts.php index 95980ab..93a4cc3 100644 --- a/inc/accounts.php +++ b/inc/accounts.php @@ -74,8 +74,8 @@ function web_add($form, $admin_mail) { foreach ( $domain_alias as $domain ) { $exec_cmd = 'web-add.sh add-alias '.escapeshellarg($form->getField('username')->getValue()).' '; $domain = trim($domain); - $exec_cmd .= $domain.' '. $server_list; - sudoexec($exec_cmd, $exec_output, $exec_return); + $exec_cmd .= $domain; + sudoexec($exec_cmd, $exec_output2, $exec_return2); } $exec_return |= $exec_return2; // $exec_return == 0 if $exec_return == 0 && $exec_return2 == 0 array_push($exec_output, $exec_output2); @@ -254,19 +254,19 @@ $form->addField('username', new AlphaNumericalTextInputFormField("Nom d'utilisat $form->addField('domain', new DomainInputFormField("Nom de domaine", TRUE)); $form->addField('domain_alias', new DomainListInputFormField("Alias (séparés par une virgule, sans espaces)", FALSE)); $form->addField('password_random', - new CheckboxInputFormField("Mot de passe aléatoire ?", FALSE)); + new CheckBoxInputFormField("Mot de passe aléatoire ?", FALSE)); $form->getField('password_random')->setValue(TRUE); $form->addField('password', new PasswordInputFormField('Mot de passe', FALSE)); $form->getField('password')->setDisabled(); $form->addField('mysql_db', - new CheckboxInputFormField("Créer une base de données MySQL ?", + new CheckBoxInputFormField("Créer une base de données MySQL ?", FALSE)); $form->getField('mysql_db')->setValue(TRUE); $form->addField('mysql_dbname', new AlphaNumericalTextInputFormField("Nom de la base MySQL", FALSE, array(20,16))); $form->addField('mysql_password_random', - new CheckboxInputFormField("Mot de passe MySQL aléatoire ?", + new CheckBoxInputFormField("Mot de passe MySQL aléatoire ?", FALSE)); $form->getField('mysql_password_random')->setValue(TRUE); @@ -344,7 +344,7 @@ if ($conf['cluster']) { if ($conf['bindadmin']) { /* Quai13 specific: allow to switch between Gmail MX/Quai13 MX */ - $form->addField('use_gmail_mxs', new CheckboxInputFormField("Utilisation des serveurs Gmail en MX ?", FALSE)); + $form->addField('use_gmail_mxs', new CheckBoxInputFormField("Utilisation des serveurs Gmail en MX ?", FALSE)); } if (array_key_exists('php_versions', $conf) && is_array($conf['php_versions'])) { diff --git a/inc/auth.php b/inc/auth.php index c92dbc6..ad4b9fc 100644 --- a/inc/auth.php +++ b/inc/auth.php @@ -12,7 +12,7 @@ * @version 1.0 */ -if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST)) { +if ($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST)) { $input_username = $_POST['login']; $input_password = $_POST['passw']; diff --git a/inc/common.php b/inc/common.php index 129ae90..2cf493f 100644 --- a/inc/common.php +++ b/inc/common.php @@ -81,6 +81,7 @@ function is_mcluster_mode() { function load_config_cluster($cluster) { global $conf; $configfile = '../conf/config.'.$cluster.'.php'; + $clusterconf = array(); // Fix static analysis. It's fully defined by config file. test_exist($configfile); require_once($configfile); $conf = array_merge($conf, $clusterconf); diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon new file mode 100644 index 0000000..3c69015 --- /dev/null +++ b/phpstan-baseline.neon @@ -0,0 +1,6 @@ +parameters: + ignoreErrors: + - + message: "#^Undefined variable\\: \\$error$#" + count: 3 + path: lib/bdd.php diff --git a/phpstan.neon b/phpstan.neon new file mode 100644 index 0000000..834f2f1 --- /dev/null +++ b/phpstan.neon @@ -0,0 +1,13 @@ +includes: + - phpstan-baseline.neon + +parameters: + level: 0 + paths: + - htdocs + - lib + - evolibs + - inc + - tpl + - conf + - bin diff --git a/tpl/home.tpl.php b/tpl/home.tpl.php index 5d10005..7f4a0f9 100644 --- a/tpl/home.tpl.php +++ b/tpl/home.tpl.php @@ -30,6 +30,4 @@ puis utilisez le menu ci-dessus pour administrer votre compte.

'; else { echo '

Bienvenue, utilisez le menu ci-dessus pour administrer votre compte.

'; } -?> - - +?> \ No newline at end of file diff --git a/tpl/webadmin-edit.tpl.php b/tpl/webadmin-edit.tpl.php index 4c57bd3..fc1aa95 100644 --- a/tpl/webadmin-edit.tpl.php +++ b/tpl/webadmin-edit.tpl.php @@ -39,7 +39,7 @@ for ( $i=0; $i < count($alias_list); ++$i ) { print ''; printf('%s', - $alias_list[$i]['alias'], $alias_list[$i]['alias']); + $alias_list[$i]['alias']); if (is_superadmin()) printf('Supprimer', $domain, $alias_list[$i]['alias']); diff --git a/tpl/webadmin.tpl.php b/tpl/webadmin.tpl.php index 98b02c8..2c71040 100755 --- a/tpl/webadmin.tpl.php +++ b/tpl/webadmin.tpl.php @@ -62,7 +62,7 @@ printf('%s', $vhost_info['owner']); } printf('%s', - $vhost_info['server_name'], $vhost_info['server_name']); + $vhost_info['server_name']); if ($conf['cluster']) { if (empty($vhost_info['bdd']))