# Classe SearchAccounts
La classe SearchAccounts
permet de réaliser facilement la recherche de comptes.
Le résultat de cette recherche peut retourner des utilisateurs, des groupes, ou des rôles.
# Constructeur
new SearchAccounts();
# Exemple
use Anakeen\Accounts\SearchAccounts;
$searchAccount = new SearchAccounts();
$searchAccount->addRoleFilter("writter");
$searchAccount->setObjectReturn($searchAccount::returnAccount);
$accountList = $searchAccount->search();
foreach ($accountList as $account) {
$login = $account->login;
print "$login\n";
}
# Liste des méthodes
# addFilter
void addFilter(string $filter, [string |int | double $args])
La recherche effectuée avec la classe SearchAccount porte sur la table users
. Les filtres ajoutés doivent donc porter
sur une ou plusieurs des colonnes de cette table, soit:
- login,
- firstname,
- lastname,
- mail,
- accounttype,
- status.
# Liste des paramètres
filter (string)
Partie filtre de la recherche, cette partie doit être soit une chaîne de caractères contenant du SQL, soit une chaîne formatée, celle-ci est alors complétée avec les valeurs passées dans les arguments suivants. Attention: le point suivant est à prendre en compte :
- injections SQL: le premier argument de la méthode addFilter est ajouté tel quel dans la requête SQL; il est donc possible qu'il puisse déclencher une injection SQL. Les données doivent être échappées (par exemple, à l'aide de pg_escape_string).
WARNING
Les filtres utilisés par la classe SearchElements
ne sont pas compatibles avec ceux de SearchAccounts
. Pour plus
d'information sur les filtres utilisés par SearchElements
, se référer à :
Les opérateurs de filtres SearchElements
value (string|int|double)
Valeurs qui sont insérées dans la partie
filter
à l'aide de la fonction sprintf. Note: Cet argument doit être répété autant de fois que nécessaire en fonction du format du filtre. Attention: Les valeurs des paramètres sont échappées à l'aide de la fonction pg_escape_string. Attention: Dans le cas de l'utilisation d'un opérateur à base d'expression régulière, il faut utiliser la fonction preg_quote sans quoi les valeurs peuvent rendre l'expression régulière invalide.
# Exemple
- Recherche sur les mails contenant
Jean
:
use Anakeen\Accounts\SearchAccounts;
$mailExpr = 'Jean';
$searchAccount = new SearchAccounts();
$searchAccount->addFilter("mail ~ '%s'", preg_quote($mailExpr)); // filtre les mail qui contiennent Jean
$accountList = $searchAccount->search();
foreach ($accountList as $account) {
printf("\t %s => %s\n", $account->login, $account->mail);
}
- Résultat :
jdup => Jean.Dupont@test.com
# addGroupFilter
void addGroupFilter( string $groupName)
La méthode permet d'ajouter un filtre à la recherche, le groupName est basé sur le login du groupe.
Note: Il est possible de rechercher sur plusieurs groupes en utilisant plusieurs fois la méthode.
Note: La recherche par groupe prend aussi en compte les sous-groupes du groupe recherché.
Note: Si cette méthode est combinée à la méthode SearchAccounts::addRoleFilter()
, cela filtre tous les comptes qui
appartiennent à un des groupes cités ou à un des rôles cités.
Avertissements
La recherche est basée sur l'objet account et non sur l'objet SmartElement associé au compte.
Par défaut, la recherche retourne des groupes et des utilisateurs, il est possible de filtrer le type d'élément
recherché à l'aide de SearchAccounts::setTypeFilter
.
# Liste des paramètres
groupName (string)
Nom de l'identifiant (colonne
login
) du groupe de référence.
# Erreurs / Exceptions
Si jamais le login de groupe demandé n'existe pas, alors une exception de type Anakeen\Accounts\Exception
est levée.
# Exemple
- Récupérer la liste des utilisateurs et des groupes contenus dans le groupe
all
:
use Anakeen\Accounts\SearchAccounts;
$searchAccount = new SearchAccounts();
$searchAccount->addGroupFilter("all");
$accountList = $searchAccount->search();
foreach ($accountList as $account) {
printf("%s (type : %s)\n", $account->login, $account->accounttype);
}
- Résultat:
admin (type : U)
care (type : G)
gadmin (type : G)
george.abitbol (type : U)
georges.de.hanovre (type : U)
georgette.agutte (type : U)
security (type : G)
zoo.cashone (type : U)
zoo.cashtwo (type : U)
zoo.garde (type : U)
zoo.veto (type : U)
Notes
Un rôle ne peut pas être contenu dans un groupe d'utilisateurs.
# addRoleFilter
void addRoleFilter( string $roleName )
La méthode permet d'ajouter un filtre à la recherche; l'argument roleName
est basé sur l'identifiant (colonne login
)
du rôle.
Note: Il est possible de rechercher sur plusieurs rôles en utilisant plusieurs fois la méthode.
Note: Le rôle étant protégé par les groupes, les membres du groupes ayant le rôle sont aussi retournés.
Note: Si cette méthode est combinée à la méthode SearchAccounts::addGroupFilter
, cela indique tous les comptes qui
appartiennent à un des groupes cités ou à un rôles cités.
# Liste des paramètres
roleName (string)
Nom de la référence (colonne
login
) du rôle de référence.
# Erreurs / Exceptions
Si jamais la référence du rôle demandé n'existe pas, alors une exception de type Anakeen\Accounts\Exception
est levée.
# Exemple
- Récupérer la liste des utilisateurs et des groupes ayant le rôle
hub-user-role
:
use Anakeen\Accounts\SearchAccounts;
$searchAccount = new SearchAccounts();
$searchAccount->addRoleFilter("hub-user-role");
$accountList = $searchAccount->search();
foreach ($accountList as $account) {
printf("%s (type: %s)\n", $account->login, $account->accounttype);
}
Notes
Seuls les comptes users
et groupe
peuvent être retournés avec ce filtre. Les rôles n'ont pas de rôle associé.
# getLoginFromDocName
string|bool getLoginFromDocNAme(string $name)
L'identifiant retourné correspond à la colonne login
de la table users
. La méthode est static
, et peut être
utilisée sans instancier d'objet SearchAccounts
.
# Liste des paramètres
name (string)
Nom logique du Smart Element contenant la référence vers l'account.
# Valeur de retour
string
: identifiant du compte (colonne login
).
# Erreurs / Exceptions
S'il n'existe pas de compte associé au nom logique, alors la méthode renvoie false.
# Exemple
use Anakeen\Accounts\SearchAccounts;
print "\nLe nom logique n'existe pas\n";
var_export(SearchAccounts::getLoginFromDocName("toto"));
print "\nLe nom logique existe mais le Smart Element associé n'est pas lié à un account \n";
var_export(SearchAccounts::getLoginFromDocName("TEST"));
print "\nLe nom logique existe et est associé à un Smart Element qui est associé à un account\n";
var_export(SearchAccounts::getLoginFromDocName("TST_DDUI_USER1"));
- Résultat:
Le nom logique n'existe pas
false
Le nom logique existe mais le SmartElement associé n'est pas lié à un account
false
Le nom logique existe et est associé à un SmartElement qui est associé à un account
'zoo.user1'
# search
ElementList|AccountList search()
Cette méthode exécute la recherche auprès de la base de données et retourne soit:
- une ElementList: un itérable sur les Smart Elements associés aux comptes trouvés,
- une AccountList: un itérable sur les objets account.
Note: C'est la méthodeSearchAccounts::setReturnType
qui définit le type de retour.
# Valeur de retour
ElementList|AccountList
: La méthode SearchAccounts::setReturnType
définit le type de retour. Par défaut, un objet de
type AccountList
est retourné.
# Erreurs / Exceptions
Retourne une exception Anakeen\Database\Exception
en cas de filtre incorrect.
# Exemple
- Récupérer la liste des utilisateurs et des groupes ayant le rôle
hub-user-role
:
use Anakeen\Accounts\SearchAccounts;
$searchAccount = new SearchAccounts();
$searchAccount->addRoleFilter("hub-user-role");
$accountList = $searchAccount->search();
foreach ($accountList as $account) {
printf("%s (type: %s)\n", $account->login, $account->accounttype);
}
- Résultat:
admin(type: U)
all(type: G)
gadmin(type: G)
gtstddui(type: G)
jdup(type: U)
officers(type: G)
ta(type: G)
testaddgroup(type: G)
tylan(type: U)
zoo.user1(type: U)
zoo.user2(type: U)
zoo.user3(type: U)
zoo.user4(type: U)
# setReturnType
void setReturnType( string $type )
Cette méthode définit le type de retour de la requête:
- un objet ElementList: un itérable sur les Smart Elements associés aux comptes trouvés,
- un objet AccountList: un itérable sur les objets account.
# Liste des paramètres
type (string)
Le type est une string qui est au choix entre deux constantes de classe; soit:
- SearchAccounts::returnAccount: le retour est alors un AccountList,
- SearchAccounts::returnDocument: le retour est alors un ElementList.
# Erreurs / Exceptions
Si le type n'est pas une des deux constantes de classe, alors une exception de type Anakeen\Accounts\Exception
est
levée.
# Exemple
use Anakeen\Accounts\SearchAccounts;
print "Return account \n";
$searchAccount = new SearchAccounts();
$searchAccount->setReturnType(SearchAccounts::returnAccount);
$accountList = $searchAccount->search();
foreach ($accountList as $account) {
printf("%s \n", get_class($account));
}
print "\n";
print "Return document \n";
$searchAccount = new SearchAccounts();
$searchAccount->setReturnType(SearchAccounts::returnDocument);
$documentList = $searchAccount->search();
foreach ($documentList as $currentDocument) {
printf("%s \n", get_class($currentDocument));
}
# setOrder
void setOrder( string $order )
Cette méthode permet de définir l'ordre de tri des résultats de la recherche.
# List des paramètres
order (string)
order doit être une des propriétés d'un objet account.
# Exemple
use Anakeen\Accounts\SearchAccounts;
print "Default order \n";
$searchAccount = new SearchAccounts();
$accountList = $searchAccount->search();
foreach ($accountList as $account) {
printf("%s (type: '%s')\n", $account->login, $account->accounttype);
}
print "Ordered by accounttype\n";
$searchAccount = new SearchAccounts();
$searchAccount->setOrder("accounttype");
$accountList = $searchAccount->search();
foreach ($accountList as $account) {
printf("%s (type: %s)\n", $account->login, $account->accounttype);
}
- Résultat:
Default order
accounts_manager_role(type: 'R')
admin(type: 'U')
all(type: 'G')
anonymous(type: 'U')
business_app_user_role(type: 'R')
functional_administrator(type: 'R')
gadmin(type: 'G')gtstddui(type: 'G')
hub-admin-role(type: 'R')
hub-user-role(type: 'R')
i18n_manager_role(type: 'R')
jdup(type: 'U')
officers(type: 'G')
parameters_manager_role(type: 'R')
rtstdduibigboss(type: 'R')
rtstdduiboss(type: 'R')
rtstdduiworker(type: 'R')
system_administrator(type: 'R')
ta(type: 'G')
te_administrator(type: 'R')
testaddgroup(type: 'G')
tokens_manager_role(type: 'R')
tylan(type: 'U')
vaults_manager_role(type: 'R')
zoo.user1(type: 'U')
zoo.user2(type: 'U')
zoo.user3(type: 'U')
zoo.user4(type: 'U')
Ordered by account type
testaddgroup(type: G)
officers(type: G)
ta(type: G)
gtstddui(type: G)
all(type: G)
gadmin(type: G)
rtstdduibigboss(type: R)
rtstdduiboss(type: R)
rtstdduiworker(type: R)
hub-user-role(type: R)
hub-admin-role(type: R)
i18n_manager_role(type: R)
functional_administrator(type: R)
accounts_manager_role(type: R)
parameters_manager_role(type: R)
tokens_manager_role(type: R)
vaults_manager_role(type: R)
te_administrator(type: R)
business_app_user_role(type: R)
system_administrator(type: R)
tylan(type: U)
anonymous(type: U)
zoo.user4(type: U)
zoo.user2(type: U)
jdup(type: U)
admin(type: U)
zoo.user3(type: U)
zoo.user1(type: U)
Notes
Par défaut, les résultats sont triés par login
.
# setSlice
void setSlice( string|int $slice )
Cette fonction permet de définir le nombre maximum d'éléments retournés. Sa valeur par défaut est all
ce qui
correspond à un retour de tous les éléments.
# Liste des paramètres
slice (string|int)
Le slice doit être une valeur numérique supérieure ou égale à 0 (si c'est un double, il est converti en entier) ou la chaîne de caractères
all
.
# Erreurs / Exceptions
Si le slice n'est pas valide alors une exception Anakeen\Accounts\Exception
est levée.
# Exemple
use Anakeen\Accounts\SearchAccounts;
print "Without slice \n";
$searchAccount = new SearchAccounts();
$accountList = $searchAccount->search();
printf("count : %d", count($accountList));
print "\n";
print "With a slice of 2 \n";
$searchAccount = new SearchAccounts();
$searchAccount->setSlice(2);
$accountList = $searchAccount->search();
printf("count :%d", count($accountList));
- Résultat
Without slice count: 29
With a slice of 2 count: 2
# setStart
void setStart( int $start )
Retourne les éléments de la requête après n résultats. Le n est défini par le paramètre de la fonction.
# Liste des paramètres
start (int)
Le start doit être une valeur numérique supérieure ou égale à 0 (si c'est un double, il est converti en entier).
# Erreurs / Exceptions
Si le start n'est pas valide alors une exception Anakeen\Accounts\Exception
est levée.
# Exemple
use Anakeen\Accounts\SearchAccounts;
print "Without start \n";
$searchAccount = new SearchAccounts();
$accountList = $searchAccount->search();
$i = 0;
foreach ($accountList as $account) {
printf("Login : %s \n", $account->login);
$i++;
if ($i == 3) {
break;
}
}
print "\n";
print "\n";
print "With a start of 2 (get the third element)\n";
$searchAccount = new SearchAccounts();
$searchAccount->setStart(2);
$accountList = $searchAccount->search();
foreach ($accountList as $account) {
printf("Login : %s", $account->login);
break;
}
Without start
Login: accounts_manager_role
Login: admin
Login: all
With a start of 2(getthethirdelement)
Login: all
Notes
Cette fonction peut être utilisée avec SearchAccount::setSlice()
pour faire un tourne page.
# setTypeFilter
void setTypeFilter( int $type )
Le type utilise la notion de masque binaire. On peut donc rechercher à la fois:
- les utilisateurs,
- les groupes,
- les rôles. Pour composer une recherche sur plusieurs types, on utilise l'opérateur PHP binaire
|
.
Avertissements
Par défaut, tous les types de comptes sont retournés.
# Liste des paramètres
type (int)
Le type est un ou une composition des constantes des classes:
- userType: les comptes de type utilisateur,
- groupType: les comptes de type groupe,
- roleType: les comptes de type rôle.
# Exemple
use Anakeen\Accounts\SearchAccounts;
printf("Without any type filter \n------------------\n");
$searchAccount = new SearchAccounts();
$accountList = $searchAccount->search();
foreach ($accountList as $account) {
printf("%s (type : %s)\n", $account->login, $account->accounttype);
}
print "\nOnly user \n-----------------------\n";
$searchAccount = new SearchAccounts();
$searchAccount->setTypeFilter(SearchAccounts::userType);
$accountList = $searchAccount->search();
foreach ($accountList as $account) {
printf("%s (type : %s)\n", $account->login, $account->accounttype);
}
print "\nGroup and role \n-----------------------\n";
$searchAccount = new SearchAccounts();
$searchAccount->setTypeFilter(SearchAccounts::groupType | SearchAccounts::roleType);
$accountList = $searchAccount->search();
foreach ($accountList as $account) {
printf("%s (type : %s)\n", $account->login, $account->accounttype);
}
- Résultat
Without any type filter
-----------------------
admin (type : U)
all (type : G)
anonymous (type : U)
care (type : G)
cash (type : R)
core_administrator (type : R)
gadmin (type : G)
security (type : G)
surveillant (type : R)
veto (type : R)
zoo.cashone (type : U)
zoo.cashtwo (type : U)
zoo.garde (type : U)
zoo.veto (type : U)
Only user
-----------------------
admin (type : U)
anonymous (type : U)
zoo.cashone (type : U)
zoo.cashtwo (type : U)
zoo.garde (type : U)
zoo.veto (type : U)
Group and role
-----------------------
all (type : G)
care (type : G)
cash (type : R)
core_administrator (type : R)
gadmin (type : G)
security (type : G)
surveillant (type : R)
veto (type : R)
# overrideViewControl
void overrideViewControl( bool $override )
Cette méthode permet d'indiquer s'il faut ajouter ou non une condition qui filtre les comptes que l'utilisateur courant
n'a pas le droit de voir. Un compte non visible est un compte dont le Smart Element associé n'a pas le droit view
.
Avertissements
Par défaut, tous les comptes sont retournés quelque soit le profil du Smart Element associé.
# Liste des paramètres
override (bool)
Si override est à
true
alors le droitview
du Smart Elmenet associé au compte n'est pas pris en compte et l'ensemble des comptes est retourné.
Par défaut, override est àtrue
.
# Exemple
use Anakeen\Accounts\SearchAccounts;
print "Without override \n-----------------------\n";
$searchAccount = new SearchAccounts();
$accountList = $searchAccount->search();
foreach ($accountList as $account) {
printf("%s (type : %s)\n", $account->login, $account->accounttype);
}
print "\nWith override \n-----------------------\n";
$searchAccount = new SearchAccounts();
$searchAccount->overrideViewControl();
$accountList = $searchAccount->search();
foreach ($accountList as $account) {
printf("%s (type : %s)\n", $account->login, $account->accounttype);
}
- Résultat:
Without override
-----------------------
care (type : G)
cash (type : R)
core_administrator (type : R)
gadmin (type : G)
security (type : G)
surveillant (type : R)
veto (type : R)
zoo.cashone (type : U)
zoo.cashtwo (type : U)
zoo.garde (type : U)
zoo.veto (type : U)
With override
-----------------------
admin (type : U)
all (type : G)
anonymous (type : U)
care (type : G)
cash (type : R)
core_administrator (type : R)
gadmin (type : G)
security (type : G)
surveillant (type : R)
veto (type : R)
zoo.cashone (type : U)
zoo.cashtwo (type : U)
zoo.garde (type : U)
zoo.veto (type : U)