Aller au contenu

Classe XoopsObjectHandler

La classe XoopsObjectHandler et son extension XoopsPersistableObjectHandler fournissent une interface standardisée pour effectuer les opérations CRUD (Créer, Lire, Mettre à jour, Supprimer) sur les instances XoopsObject. Cela implémente le modèle Data Mapper, séparant la logique de domaine de l’accès à la base de données.

namespace Xoops\Core;
abstract class XoopsObjectHandler
{
protected XoopsDatabase $db;
public function __construct(XoopsDatabase $db);
abstract public function create(bool $isNew = true);
abstract public function get(int $id);
abstract public function insert(XoopsObject $obj, bool $force = false): bool;
abstract public function delete(XoopsObject $obj, bool $force = false): bool;
}
XoopsObjectHandler (Base abstraite)
└── XoopsPersistableObjectHandler (Implémentation étendue)
├── XoopsUserHandler
├── XoopsGroupHandler
├── XoopsModuleHandler
├── XoopsBlockHandler
├── XoopsConfigHandler
└── [Gestionnaires de modules personnalisés]
public function __construct(XoopsDatabase $db)

Paramètres :

ParamètreTypeDescription
$dbXoopsDatabaseInstance de connexion base de données

Exemple :

$db = XoopsDatabaseFactory::getDatabaseConnection();
$handler = new MyObjectHandler($db);

Crée une nouvelle instance d’objet.

abstract public function create(bool $isNew = true): ?XoopsObject

Paramètres :

ParamètreTypeDescription
$isNewboolSi l’objet est nouveau (défaut : true)

Retour : XoopsObject|null - Nouvelle instance d’objet

Exemple :

$handler = xoops_getHandler('user');
$user = $handler->create();
$user->setVar('uname', 'newuser');

Récupère un objet par sa clé primaire.

abstract public function get(int $id): ?XoopsObject

Paramètres :

ParamètreTypeDescription
$idintValeur clé primaire

Retour : XoopsObject|null - Instance d’objet ou null si non trouvé

Exemple :

$handler = xoops_getHandler('user');
$user = $handler->get(1);
if ($user) {
echo $user->getVar('uname');
}

Enregistre un objet dans la base de données (insertion ou mise à jour).

abstract public function insert(
XoopsObject $obj,
bool $force = false
): bool

Paramètres :

ParamètreTypeDescription
$objXoopsObjectObjet à enregistrer
$forceboolForcer l’opération même si l’objet inchangé

Retour : bool - True en cas de succès

Exemple :

$handler = xoops_getHandler('user');
$user = $handler->create();
$user->setVar('uname', 'testuser');
$user->setVar('email', 'test@example.com');
if ($handler->insert($user)) {
echo "Utilisateur enregistré avec ID : " . $user->getVar('uid');
} else {
echo "Échec de l'enregistrement : " . implode(', ', $user->getErrors());
}

Supprime un objet de la base de données.

abstract public function delete(
XoopsObject $obj,
bool $force = false
): bool

Paramètres :

ParamètreTypeDescription
$objXoopsObjectObjet à supprimer
$forceboolForcer la suppression

Retour : bool - True en cas de succès

Exemple :

$handler = xoops_getHandler('user');
$user = $handler->get(5);
if ($user && $handler->delete($user)) {
echo "Utilisateur supprimé";
}

La classe XoopsPersistableObjectHandler étend XoopsObjectHandler avec des méthodes supplémentaires pour les requêtes et opérations en masse.

public function __construct(
XoopsDatabase $db,
string $table,
string $className,
string $keyName,
string $identifierName = ''
)

Paramètres :

ParamètreTypeDescription
$dbXoopsDatabaseConnexion base de données
$tablestringNom de la table (sans préfixe)
$classNamestringNom de classe complet de l’objet
$keyNamestringNom du champ clé primaire
$identifierNamestringChamp identifiant lisible

Exemple :

class ArticleHandler extends XoopsPersistableObjectHandler
{
public function __construct(XoopsDatabase $db)
{
parent::__construct(
$db,
'mymodule_articles', // Nom de table
'Article', // Nom de classe
'article_id', // Clé primaire
'title' // Champ identifiant
);
}
}

Récupère plusieurs objets correspondant aux critères.

public function getObjects(
CriteriaElement $criteria = null,
bool $idAsKey = false,
bool $asObject = true
): array

Paramètres :

ParamètreTypeDescription
$criteriaCriteriaElementCritères de requête (optionnel)
$idAsKeyboolUtiliser la clé primaire comme clé de tableau
$asObjectboolRetourner des objets (true) ou des tableaux (false)

Retour : array - Tableau d’objets ou de tableaux associatifs

Exemple :

$handler = xoops_getHandler('user');
// Obtenir tous les utilisateurs actifs
$criteria = new Criteria('level', 0, '>');
$users = $handler->getObjects($criteria);
// Obtenir les utilisateurs avec ID comme clé
$users = $handler->getObjects($criteria, true);
echo $users[1]->getVar('uname'); // Accès par ID
// Obtenir sous forme de tableaux au lieu d'objets
$usersArray = $handler->getObjects($criteria, false, false);
foreach ($usersArray as $userData) {
echo $userData['uname'];
}

Compte les objets correspondant aux critères.

public function getCount(CriteriaElement $criteria = null): int

Paramètres :

ParamètreTypeDescription
$criteriaCriteriaElementCritères de requête (optionnel)

Retour : int - Nombre d’objets correspondants

Exemple :

$handler = xoops_getHandler('user');
// Compter tous les utilisateurs
$totalUsers = $handler->getCount();
// Compter les utilisateurs actifs
$criteria = new Criteria('level', 0, '>');
$activeUsers = $handler->getCount($criteria);
echo "Total : $totalUsers, Actifs : $activeUsers";

Récupère tous les objets (alias pour getObjects sans critères).

public function getAll(
CriteriaElement $criteria = null,
array $fields = null,
bool $asObject = true,
bool $idAsKey = true
): array

Paramètres :

ParamètreTypeDescription
$criteriaCriteriaElementCritères de requête
$fieldsarrayChamps spécifiques à récupérer
$asObjectboolRetourner sous forme d’objets
$idAsKeyboolUtiliser l’ID comme clé de tableau

Exemple :

$handler = xoops_getHandler('module');
// Obtenir tous les modules
$modules = $handler->getAll();
// Obtenir seulement les champs spécifiques
$modules = $handler->getAll(null, ['mid', 'name', 'dirname'], false);

Récupère seulement les clés primaires des objets correspondants.

public function getIds(CriteriaElement $criteria = null): array

Paramètres :

ParamètreTypeDescription
$criteriaCriteriaElementCritères de requête

Retour : array - Tableau de valeurs clé primaire

Exemple :

$handler = xoops_getHandler('user');
$criteria = new Criteria('level', 1);
$adminIds = $handler->getIds($criteria);
// [1, 5, 12, ...] - Tableau des IDs d'utilisateurs administrateurs

Récupère une liste clé-valeur pour les listes déroulantes.

public function getList(CriteriaElement $criteria = null): array

Retour : array - Tableau associatif [id => identifiant]

Exemple :

$handler = xoops_getHandler('group');
$groups = $handler->getList();
// [1 => 'Administrateurs', 2 => 'Utilisateurs enregistrés', ...]
// Pour une liste déroulante select
$form->addElement(new XoopsFormSelect('Groupe', 'group_id', $default, 1, false));
$form->getElement('group_id')->addOptionArray($groups);

Supprime tous les objets correspondant aux critères.

public function deleteAll(
CriteriaElement $criteria = null,
bool $force = true,
bool $asObject = false
): bool

Paramètres :

ParamètreTypeDescription
$criteriaCriteriaElementCritères pour les objets à supprimer
$forceboolForcer la suppression
$asObjectboolCharger les objets avant suppression (déclenche les événements)

Retour : bool - True en cas de succès

Exemple :

$handler = xoops_getModuleHandler('comment', 'mymodule');
// Supprimer tous les commentaires pour un article spécifique
$criteria = new Criteria('article_id', $articleId);
$handler->deleteAll($criteria);
// Supprimer avec chargement d'objets (déclenche les événements de suppression)
$handler->deleteAll($criteria, true, true);

Met à jour une valeur de champ pour tous les objets correspondants.

public function updateAll(
string $fieldname,
mixed $fieldvalue,
CriteriaElement $criteria = null,
bool $force = false
): bool

Paramètres :

ParamètreTypeDescription
$fieldnamestringChamp à mettre à jour
$fieldvaluemixedNouvelle valeur
$criteriaCriteriaElementCritères pour les objets à mettre à jour
$forceboolForcer la mise à jour

Retour : bool - True en cas de succès

Exemple :

$handler = xoops_getModuleHandler('article', 'mymodule');
// Marquer tous les articles d'un auteur comme brouillon
$criteria = new Criteria('author_id', $authorId);
$handler->updateAll('published', 0, $criteria);
// Mettre à jour le compteur de vues
$criteria = new Criteria('article_id', $id);
$handler->updateAll('views', $views + 1, $criteria);

La méthode insert étendue avec fonctionnalités supplémentaires.

public function insert(
XoopsObject $obj,
bool $force = false
): bool

Comportement :

  • Si l’objet est nouveau (isNew() === true) : INSERT
  • Si l’objet existe (isNew() === false) : UPDATE
  • Appelle cleanVars() automatiquement
  • Définit l’ID d’auto-incrémentation sur les nouveaux objets

Exemple :

$handler = xoops_getModuleHandler('article', 'mymodule');
// Créer un nouvel article
$article = $handler->create();
$article->setVar('title', 'Nouvel article');
$article->setVar('content', 'Contenu ici');
$handler->insert($article);
echo "Créé avec ID : " . $article->getVar('article_id');
// Mettre à jour un article existant
$article = $handler->get(5);
$article->setVar('title', 'Titre mis à jour');
$handler->insert($article);

Fonction globale pour récupérer un gestionnaire principal.

function xoops_getHandler(string $name, bool $optional = false): ?XoopsObjectHandler

Paramètres :

ParamètreTypeDescription
$namestringNom du gestionnaire (user, module, group, etc.)
$optionalboolRetourner null au lieu de déclencher une erreur

Exemple :

$userHandler = xoops_getHandler('user');
$moduleHandler = xoops_getHandler('module');
$groupHandler = xoops_getHandler('group');
$blockHandler = xoops_getHandler('block');
$configHandler = xoops_getHandler('config');

Récupère un gestionnaire spécifique à un module.

function xoops_getModuleHandler(
string $name,
string $dirname = null,
bool $optional = false
): ?XoopsObjectHandler

Paramètres :

ParamètreTypeDescription
$namestringNom du gestionnaire
$dirnamestringNom du répertoire du module
$optionalboolRetourner null en cas d’échec

Exemple :

// Obtenir le gestionnaire du module actuel
$articleHandler = xoops_getModuleHandler('article');
// Obtenir le gestionnaire d'un module spécifique
$articleHandler = xoops_getModuleHandler('article', 'news');
$storyHandler = xoops_getModuleHandler('story', 'news');

  1. Utiliser Criteria pour les requêtes : Toujours utiliser les objets Criteria pour les requêtes de type sécurisé

  2. Étendre pour les méthodes personnalisées : Ajouter des méthodes de requête spécifiques au domaine aux gestionnaires

  3. Remplacer insert/delete : Ajouter des opérations en cascade et des horodatages dans les remplacements

  4. Utiliser les transactions si nécessaire : Envelopper les opérations complexes dans des transactions

  5. Utiliser getList : Utiliser getList() pour les listes déroulantes select pour réduire les requêtes

  6. Indexer les clés : S’assurer que les champs utilisés dans les critères sont indexés

  7. Limiter les résultats : Toujours utiliser setLimit() pour les résultats potentiellement volumineux

  • XoopsObject - Classe d’objet de base
  • ../Database/Criteria - Construction de critères de requête
  • ../Database/XoopsDatabase - Opérations base de données

Voir aussi : Code source XOOPS