Merge branch 'upstream/develop'
This commit is contained in:
commit
06b386443d
170
.scrutinizer.yml
170
.scrutinizer.yml
@ -13,36 +13,7 @@ filter:
|
||||
paths: { }
|
||||
|
||||
tools:
|
||||
# Similar code detection
|
||||
php_sim:
|
||||
enabled: true
|
||||
min_mass: 16
|
||||
filter:
|
||||
excluded_paths:
|
||||
- 'build/*'
|
||||
- 'dev/*'
|
||||
- 'doc/*'
|
||||
- 'test/*'
|
||||
- 'htdocs/includes/*'
|
||||
paths: { }
|
||||
|
||||
# php_depend
|
||||
php_pdepend:
|
||||
enabled: true
|
||||
configuration_file: null
|
||||
suffixes:
|
||||
- php
|
||||
excluded_dirs: { }
|
||||
filter:
|
||||
excluded_paths:
|
||||
- 'build/*'
|
||||
- 'dev/*'
|
||||
- 'doc/*'
|
||||
- 'test/*'
|
||||
- 'htdocs/includes/*'
|
||||
paths: { }
|
||||
|
||||
# php_analyzer
|
||||
# php_analyzer. Doc on https://scrutinizer-ci.com/docs/tools/php/php-analyzer/
|
||||
php_analyzer:
|
||||
enabled: true
|
||||
extensions:
|
||||
@ -56,11 +27,131 @@ tools:
|
||||
- 'test/*'
|
||||
- 'htdocs/includes/*'
|
||||
paths: { }
|
||||
path_configs: { }
|
||||
config:
|
||||
parameter_reference_check:
|
||||
enabled: true
|
||||
checkstyle:
|
||||
enabled: false
|
||||
no_trailing_whitespace: true
|
||||
naming:
|
||||
enabled: true
|
||||
local_variable: ^[a-z][a-zA-Z0-9]*$
|
||||
abstract_class_name: ^Abstract|Factory$
|
||||
utility_class_name: Utils?$
|
||||
constant_name: ^[A-Z][A-Z0-9]*(?:_[A-Z0-9]+)*$
|
||||
property_name: ^[a-z][a-zA-Z0-9]*$
|
||||
method_name: ^(?:[a-z]|__)[a-zA-Z0-9]*$
|
||||
parameter_name: ^[a-z][a-zA-Z0-9]*$
|
||||
interface_name: ^[A-Z][a-zA-Z0-9]*Interface$
|
||||
type_name: ^[A-Z][a-zA-Z0-9]*$
|
||||
exception_name: ^[A-Z][a-zA-Z0-9]*Exception$
|
||||
isser_method_name: ^(?:is|has|should|may|supports)
|
||||
unreachable_code:
|
||||
enabled: true
|
||||
check_access_control:
|
||||
enabled: true
|
||||
typo_checks:
|
||||
enabled: true
|
||||
check_variables:
|
||||
enabled: true
|
||||
check_calls:
|
||||
enabled: true
|
||||
too_many_arguments: true
|
||||
missing_argument: true
|
||||
argument_type_checks: lenient # Allowed Values: "disabled", "lenient", "strict"
|
||||
suspicious_code:
|
||||
enabled: true
|
||||
overriding_parameter: false
|
||||
overriding_closure_use: true
|
||||
parameter_closure_use_conflict: true
|
||||
parameter_multiple_times: true
|
||||
non_existent_class_in_instanceof_check: true
|
||||
non_existent_class_in_catch_clause: true
|
||||
assignment_of_null_return: true
|
||||
non_commented_switch_fallthrough: true
|
||||
non_commented_empty_catch_block: true
|
||||
overriding_private_members: true
|
||||
use_statement_alias_conflict: true
|
||||
precedence_in_condition_assignment: true
|
||||
dead_assignments:
|
||||
enabled: true
|
||||
verify_php_doc_comments:
|
||||
enabled: false
|
||||
parameters: true
|
||||
return: true
|
||||
suggest_more_specific_types: true
|
||||
ask_for_return_if_not_inferrable: true
|
||||
ask_for_param_type_annotation: true
|
||||
loops_must_use_braces:
|
||||
enabled: true
|
||||
check_usage_context:
|
||||
enabled: true
|
||||
simplify_boolean_return:
|
||||
enabled: false
|
||||
phpunit_checks:
|
||||
enabled: false
|
||||
reflection_checks:
|
||||
enabled: true
|
||||
|
||||
# Checks Common Precedence Mistakes
|
||||
precedence_checks:
|
||||
enabled: true
|
||||
assignment_in_condition: true
|
||||
comparison_of_bit_result: true
|
||||
basic_semantic_checks:
|
||||
enabled: true
|
||||
unused_code:
|
||||
enabled: true
|
||||
deprecation_checks:
|
||||
enabled: true
|
||||
useless_function_calls:
|
||||
enabled: true
|
||||
metrics_lack_of_cohesion_methods:
|
||||
enabled: true
|
||||
metrics_coupling:
|
||||
enabled: true
|
||||
stable_code:
|
||||
namespace_prefixes: []
|
||||
classes: []
|
||||
doctrine_parameter_binding:
|
||||
enabled: false
|
||||
doctrine_entity_manager_injection:
|
||||
enabled: false
|
||||
symfony_request_injection:
|
||||
enabled: false
|
||||
doc_comment_fixes:
|
||||
enabled: true
|
||||
reflection_fixes:
|
||||
enabled: false
|
||||
use_statement_fixes:
|
||||
enabled: true
|
||||
remove_unused: true
|
||||
# Whether you would like multiple imports in one USE statement to be preserved, e.g. ``use A, B;``.
|
||||
preserve_multiple: false
|
||||
# Whether you would like to preserve blank lines between use statements.
|
||||
preserve_blanklines: false
|
||||
order_alphabetically: false
|
||||
# To use specific config for a specific path, use path_configs: (see example on page https://scrutinizer-ci.com/docs/configuration/tool_config_structure)
|
||||
|
||||
# php_depend
|
||||
php_pdepend:
|
||||
enabled: false
|
||||
configuration_file: null
|
||||
suffixes:
|
||||
- php
|
||||
excluded_dirs: { }
|
||||
filter:
|
||||
excluded_paths:
|
||||
- 'build/*'
|
||||
- 'dev/*'
|
||||
- 'doc/*'
|
||||
- 'test/*'
|
||||
- 'htdocs/includes/*'
|
||||
paths: { }
|
||||
|
||||
# change tracking
|
||||
php_changetracking:
|
||||
enabled: true
|
||||
enabled: false
|
||||
bug_patterns:
|
||||
- '\bfix(?:es|ed)?\b'
|
||||
feature_patterns:
|
||||
@ -75,8 +166,21 @@ tools:
|
||||
- 'htdocs/includes/*'
|
||||
paths: { }
|
||||
|
||||
# Similar code detection
|
||||
php_sim:
|
||||
enabled: false
|
||||
min_mass: 30
|
||||
filter:
|
||||
excluded_paths:
|
||||
- 'build/*'
|
||||
- 'dev/*'
|
||||
- 'doc/*'
|
||||
- 'test/*'
|
||||
- 'htdocs/includes/*'
|
||||
paths: { }
|
||||
|
||||
# Coding-Style / Bug Detection
|
||||
js_hint: true
|
||||
js_hint: false
|
||||
|
||||
|
||||
before_commands: { }
|
||||
|
||||
@ -368,7 +368,7 @@ abstract class ActionsAdherentCardCommon
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/security2.lib.php';
|
||||
$login=dol_buildlogin($this->object->lastname, $this->object->firstname);
|
||||
|
||||
$generated_password=getRandomPassword('');
|
||||
$generated_password=getRandomPassword(false);
|
||||
$password=$generated_password;
|
||||
|
||||
// Create a form array
|
||||
|
||||
@ -825,7 +825,7 @@ class Adherent extends CommonObject
|
||||
if (! $password)
|
||||
{
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/security2.lib.php';
|
||||
$password=getRandomPassword('');
|
||||
$password=getRandomPassword(false);
|
||||
}
|
||||
|
||||
// Cryptage mot de passe
|
||||
@ -1242,15 +1242,15 @@ class Adherent extends CommonObject
|
||||
/**
|
||||
* Insert subscription into database and eventually add links to banks, mailman, etc...
|
||||
*
|
||||
* @param timestamp $date Date d'effet de la cotisation
|
||||
* @param amount $montant Montant cotisation (accepte 0 pour les adherents non soumis a cotisation)
|
||||
* @param int $accountid Id compte bancaire
|
||||
* @param string $operation Type operation (si Id compte bancaire fourni)
|
||||
* @param string $label Label operation (si Id compte bancaire fourni)
|
||||
* @param string $num_chq Numero cheque (si Id compte bancaire fourni)
|
||||
* @param string $emetteur_nom Nom emetteur cheque
|
||||
* @param string $emetteur_banque Nom banque emetteur cheque
|
||||
* @param timestamp $datesubend Date fin adhesion
|
||||
* @param timestamp $date Date of effect of subscription
|
||||
* @param double $montant Amount of subscription (0 accepted for some members)
|
||||
* @param int $accountid Id bank account
|
||||
* @param string $operation Type operation (if Id bank account provided)
|
||||
* @param string $label Label operation (if Id bank account provided)
|
||||
* @param string $num_chq Numero cheque (if Id bank account provided)
|
||||
* @param string $emetteur_nom Name of cheque writer
|
||||
* @param string $emetteur_banque Name of bank of cheque
|
||||
* @param timestamp $datesubend Date end subscription
|
||||
* @return int rowid of record added, <0 if KO
|
||||
*/
|
||||
function cotisation($date, $montant, $accountid=0, $operation='', $label='', $num_chq='', $emetteur_nom='', $emetteur_banque='', $datesubend=0)
|
||||
|
||||
@ -812,7 +812,7 @@ else
|
||||
if (empty($conf->global->ADHERENT_LOGIN_NOT_REQUIRED))
|
||||
{
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/security2.lib.php';
|
||||
$generated_password=getRandomPassword('');
|
||||
$generated_password=getRandomPassword(false);
|
||||
print '<tr><td><span class="fieldrequired">'.$langs->trans("Password").'</span></td><td>';
|
||||
print '<input size="30" maxsize="32" type="text" name="password" value="'.$generated_password.'">';
|
||||
print '</td></tr>';
|
||||
|
||||
@ -103,11 +103,11 @@ class Categorie extends CommonObject
|
||||
$this->visible = $res['visible'];
|
||||
$this->type = $res['type'];
|
||||
$this->entity = $res['entity'];
|
||||
|
||||
|
||||
$this->fetch_optionals($this->id,$extralabels);
|
||||
|
||||
$this->db->free($resql);
|
||||
|
||||
|
||||
// multilangs
|
||||
if (! empty($conf->global->MAIN_MULTILANGS)) $this->getMultiLangs();
|
||||
|
||||
@ -194,7 +194,7 @@ class Categorie extends CommonObject
|
||||
if ($id > 0)
|
||||
{
|
||||
$this->id = $id;
|
||||
|
||||
|
||||
// Actions on extra fields (by external module or standard code)
|
||||
// FIXME le hook fait double emploi avec le trigger !!
|
||||
$hookmanager->initHooks(array('HookModuleNamedao'));
|
||||
@ -281,7 +281,7 @@ class Categorie extends CommonObject
|
||||
dol_syslog(get_class($this)."::update sql=".$sql);
|
||||
if ($this->db->query($sql))
|
||||
{
|
||||
|
||||
|
||||
// Actions on extra fields (by external module or standard code)
|
||||
// FIXME le hook fait double emploi avec le trigger !!
|
||||
$hookmanager->initHooks(array('HookCategorydao'));
|
||||
@ -299,10 +299,10 @@ class Categorie extends CommonObject
|
||||
}
|
||||
}
|
||||
else if ($reshook < 0) $error++;
|
||||
|
||||
|
||||
$this->db->commit();
|
||||
|
||||
|
||||
|
||||
// Appel des triggers
|
||||
include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
|
||||
$interface=new Interfaces($this->db);
|
||||
@ -340,7 +340,7 @@ class Categorie extends CommonObject
|
||||
if (! $error)
|
||||
{
|
||||
$sql = "UPDATE ".MAIN_DB_PREFIX."categorie";
|
||||
$sql.= " SET fk_parent = ".$this->fk_parent;
|
||||
$sql.= " SET fk_parent = ".$this->fk_parent;
|
||||
$sql.= " WHERE fk_parent = ".$this->id;
|
||||
|
||||
if (!$this->db->query($sql))
|
||||
@ -771,7 +771,7 @@ class Categorie extends CommonObject
|
||||
function get_full_arbo($type,$markafterid=0)
|
||||
{
|
||||
global $langs;
|
||||
|
||||
|
||||
$this->cats = array();
|
||||
|
||||
// Init this->motherof that is array(id_son=>id_parent, ...)
|
||||
@ -780,7 +780,7 @@ class Categorie extends CommonObject
|
||||
|
||||
// Init $this->cats array
|
||||
$sql = "SELECT DISTINCT c.rowid, c.label, c.description, c.fk_parent"; // Distinct reduce pb with old tables with duplicates
|
||||
if (! empty($conf->global->MAIN_MULTILANGS))
|
||||
if (! empty($conf->global->MAIN_MULTILANGS))
|
||||
$sql.= ", t.label as label_trans, t.description as description_trans";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."categorie as c";
|
||||
if (! empty($conf->global->MAIN_MULTILANGS))
|
||||
@ -1055,63 +1055,6 @@ class Categorie extends CommonObject
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Affiche le chemin le plus court pour se rendre a un produit
|
||||
*
|
||||
* @param int $id Id of category
|
||||
* @param string $type Type of category
|
||||
* @return void
|
||||
* @deprecated function not used ?
|
||||
*/
|
||||
function get_primary_way($id, $type="")
|
||||
{
|
||||
$primary_way = array("taille" => -1, "chemin" => array());
|
||||
$meres = $this->containing($id,$type);
|
||||
foreach ($meres as $mere)
|
||||
{
|
||||
foreach ($mere->get_all_ways() as $way)
|
||||
{
|
||||
if(count($way) < $primary_way["taille"] || $primary_way["taille"] < 0)
|
||||
{
|
||||
$primary_way["taille"] = count($way);
|
||||
$primary_way["chemin"] = $way;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $primary_way["chemin"];
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Affiche le chemin le plus court pour se rendre a un produit
|
||||
*
|
||||
* @param int $id Id of category
|
||||
* @param string $sep Separator
|
||||
* @param string $url Url
|
||||
* @param string $type Type
|
||||
* @return void
|
||||
* @deprecated function not used ?
|
||||
*/
|
||||
function print_primary_way($id, $sep= " >> ", $url="", $type="")
|
||||
{
|
||||
$primary_way = array();
|
||||
$way = $this->get_primary_way($id,$type);
|
||||
$w = array();
|
||||
foreach ($way as $cat)
|
||||
{
|
||||
if ($url == '')
|
||||
{
|
||||
$w[] = "<a href='".DOL_URL_ROOT."/categories/viewcat.php?id=".$cat->id."'>".$cat->label."</a>";
|
||||
}
|
||||
else
|
||||
{
|
||||
$w[] = "<a href='".DOL_URL_ROOT."/".$url."?catid=".$cat->id."'>".$cat->label."</a>";
|
||||
}
|
||||
}
|
||||
|
||||
return implode($sep, $w);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retourne un tableau contenant la liste des categories meres
|
||||
*
|
||||
@ -1476,19 +1419,19 @@ class Categorie extends CommonObject
|
||||
function setMultiLangs()
|
||||
{
|
||||
global $langs;
|
||||
|
||||
|
||||
$langs_available = $langs->get_available_languages();
|
||||
$current_lang = $langs->getDefaultLang();
|
||||
|
||||
|
||||
foreach ($langs_available as $key => $value)
|
||||
{
|
||||
$sql = "SELECT rowid";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."categorie_lang";
|
||||
$sql.= " WHERE fk_category=".$this->id;
|
||||
$sql.= " AND lang='".$key."'";
|
||||
|
||||
|
||||
$result = $this->db->query($sql);
|
||||
|
||||
|
||||
if ($key == $current_lang)
|
||||
{
|
||||
if ($this->db->num_rows($result)) // si aucune ligne dans la base
|
||||
@ -1527,7 +1470,7 @@ class Categorie extends CommonObject
|
||||
$sql2.= " VALUES(".$this->id.",'".$key."','". $this->db->escape($this->multilangs["$key"]["label"]);
|
||||
$sql2.= "','".$this->db->escape($this->multilangs["$key"]["description"])."')";
|
||||
}
|
||||
|
||||
|
||||
// on ne sauvegarde pas des champs vides
|
||||
if ( $this->multilangs["$key"]["label"] || $this->multilangs["$key"]["description"] || $this->multilangs["$key"]["note"] )
|
||||
dol_syslog(get_class($this).'::setMultiLangs sql='.$sql2);
|
||||
@ -1541,7 +1484,7 @@ class Categorie extends CommonObject
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Load array this->multilangs
|
||||
*
|
||||
@ -1550,13 +1493,13 @@ class Categorie extends CommonObject
|
||||
function getMultiLangs()
|
||||
{
|
||||
global $langs;
|
||||
|
||||
|
||||
$current_lang = $langs->getDefaultLang();
|
||||
|
||||
|
||||
$sql = "SELECT lang, label, description";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."categorie_lang";
|
||||
$sql.= " WHERE fk_category=".$this->id;
|
||||
|
||||
|
||||
$result = $this->db->query($sql);
|
||||
if ($result)
|
||||
{
|
||||
@ -1567,7 +1510,7 @@ class Categorie extends CommonObject
|
||||
{
|
||||
$this->label = $obj->label;
|
||||
$this->description = $obj->description;
|
||||
|
||||
|
||||
}
|
||||
$this->multilangs["$obj->lang"]["label"] = $obj->label;
|
||||
$this->multilangs["$obj->lang"]["description"] = $obj->description;
|
||||
|
||||
@ -1803,10 +1803,13 @@ if ($action == 'create') {
|
||||
if ($action != 'editline') {
|
||||
$var = true;
|
||||
|
||||
if ($conf->global->MAIN_FEATURES_LEVEL > 1) {
|
||||
if ($conf->global->MAIN_FEATURES_LEVEL > 1)
|
||||
{
|
||||
// Add free or predefined products/services
|
||||
$object->formAddObjectLine(1, $mysoc, $soc);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
// Add free products/services
|
||||
$object->formAddFreeProduct(1, $mysoc, $soc);
|
||||
|
||||
|
||||
@ -2102,10 +2102,13 @@ if ($action == 'create' && $user->rights->commande->creer) {
|
||||
if ($action != 'editline') {
|
||||
$var = true;
|
||||
|
||||
if ($conf->global->MAIN_FEATURES_LEVEL > 1) {
|
||||
if ($conf->global->MAIN_FEATURES_LEVEL > 1)
|
||||
{
|
||||
// Add free or predefined products/services
|
||||
$object->formAddObjectLine(1, $mysoc, $soc);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
// Add free products/services
|
||||
$object->formAddFreeProduct(1, $mysoc, $soc);
|
||||
|
||||
|
||||
@ -3307,10 +3307,13 @@ if ($action == 'create')
|
||||
if ($object->statut == 0 && $user->rights->facture->creer && $action != 'valid' && $action != 'editline') {
|
||||
$var = true;
|
||||
|
||||
if ($conf->global->MAIN_FEATURES_LEVEL > 1) {
|
||||
if ($conf->global->MAIN_FEATURES_LEVEL > 1)
|
||||
{
|
||||
// Add free or predefined products/services
|
||||
$object->formAddObjectLine(1, $mysoc, $soc);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
// Add free products/services
|
||||
$object->formAddFreeProduct(1, $mysoc, $soc);
|
||||
|
||||
|
||||
@ -400,7 +400,7 @@ abstract class ActionsContactCardCommon
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/security2.lib.php';
|
||||
$login=dol_buildlogin($this->object->lastname, $this->object->firstname);
|
||||
|
||||
$generated_password=getRandomPassword('');
|
||||
$generated_password=getRandomPassword(false);
|
||||
$password=$generated_password;
|
||||
|
||||
// Create a form array
|
||||
|
||||
@ -749,7 +749,7 @@ else
|
||||
$doleditor = new DolEditor('note_public', $object->note_public, '', 80, 'dolibarr_notes', 'In', 0, false, true, ROWS_3, 70);
|
||||
print $doleditor->Create(1);
|
||||
print '</td></tr>';
|
||||
|
||||
|
||||
// Note Private
|
||||
print '<tr><td valign="top">'.$langs->trans("NotePrivate").'</td><td colspan="3">';
|
||||
$doleditor = new DolEditor('note_private', $object->note_private, '', 80, 'dolibarr_notes', 'In', 0, false, true, ROWS_3, 70);
|
||||
@ -843,7 +843,7 @@ else
|
||||
if (! $ldap_sid) // TODO ldap_sid ?
|
||||
{
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/security2.lib.php';
|
||||
$generated_password=getRandomPassword('');
|
||||
$generated_password=getRandomPassword(false);
|
||||
}
|
||||
$password=$generated_password;
|
||||
|
||||
@ -971,7 +971,7 @@ else
|
||||
print '<tr><td valign="top">'.$langs->trans("NotePublic").'</td><td colspan="3">';
|
||||
print nl2br($object->note_public);
|
||||
print '</td></tr>';
|
||||
|
||||
|
||||
// Note Private
|
||||
print '<tr><td valign="top">'.$langs->trans("NotePrivate").'</td><td colspan="3">';
|
||||
print nl2br($object->note_private);
|
||||
@ -1067,9 +1067,9 @@ else
|
||||
print '<a class="butActionDelete" href="'.$_SERVER['PHP_SELF'].'?action=disable&id='.$object->id.'">'.$langs->trans("DisableUser").'</a>';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
print "</div><br>";
|
||||
|
||||
|
||||
print load_fiche_titre($langs->trans("TasksHistoryForThisContact"),'','');
|
||||
|
||||
print show_actions_todo($conf,$langs,$db,$objsoc,$object);
|
||||
|
||||
@ -2693,13 +2693,12 @@ abstract class CommonObject
|
||||
/**
|
||||
* Show add free products/services form
|
||||
* TODO Edit templates to use global variables and include them directly in controller call
|
||||
* But for the moment we don't know if it'st possible as we keep a method available on overloaded objects.
|
||||
* But for the moment we don't know if it's possible as we keep a method available on overloaded objects.
|
||||
*
|
||||
* @param int $dateSelector 1=Show also date range input fields
|
||||
* @param int $dateSelector 1=Show also date range input fields (start and end date)
|
||||
* @param Societe $seller Object thirdparty who sell
|
||||
* @param Societe $buyer Object thirdparty who buy
|
||||
* @return void
|
||||
* @deprecated
|
||||
*/
|
||||
function formAddFreeProduct($dateSelector,$seller,$buyer)
|
||||
{
|
||||
|
||||
@ -1356,7 +1356,7 @@ class User extends CommonObject
|
||||
// If new password not provided, we generate one
|
||||
if (! $password)
|
||||
{
|
||||
$password=getRandomPassword('');
|
||||
$password=getRandomPassword(false);
|
||||
}
|
||||
|
||||
// Crypte avec md5
|
||||
|
||||
@ -748,7 +748,7 @@ if (($action == 'create') || ($action == 'adduserldap'))
|
||||
if (empty($ldap_sid)) // ldap_sid is for activedirectory
|
||||
{
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/security2.lib.php';
|
||||
$generated_password=getRandomPassword('');
|
||||
$generated_password=getRandomPassword(false);
|
||||
}
|
||||
$password=$generated_password;
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user