# 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'
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éthode SearchAccounts::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 droit view 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)