title: Pages d'administration
icon: shield
Table des matières
Le dossier de personnalisation des pages d'administration se divise en deux sous-dossiers :
menus
: contient les fichiers décrivant les menus de l'administration.
Par exemple : le menu Paramètres de la base de données
est un menu personnalisé qui a été ajouté à l'interface d'administration.
settings
: contient les fichiers décrivant les paramètres personnalisés.
Par exemple : les paramètres de connexion à la base de données (1 à 6) sont des paramètres personnalisés qui ont été ajoutés à l'interface d'administration par un fichier nommée connection.php
.
L'ensemble des fichiers peuvent utiliser les bibliothèques disponibles (disponibilités : admin).
Le dossier settings
doit contenir des sous-dossiers nommés contenant les fichiers de paramètres :
index.php
: fichier principal contenant le groupe de paramètres.{{nom_de_la_section}}.php
: fichier contenant les sections de paramètresUn fichier de paramètres doit retourner une instance de la classe SaferSettingGroup.
Exemple :
<?php
require_once SAFER_PLUGIN_PATH . 'src/class-setting-group.php';
return (function (): SaferSettingGroup {
$group = new SaferSettingGroup('safer_database', __DIR__);
return $group;
})();
Un fichier de section doit retourner une instance de la classe SaferSettingSection. Cette classe utilise également la classe SaferSettingField pour décrire les champs de paramètres.
Exemple :
<?php
require_once SAFER_PLUGIN_PATH . 'src/class-setting-section.php';
return (function (): SaferSettingSection {
$section = new SaferSettingSection('s2pr', 'safer_database');
$section->setTitle('Conseiller(ère)s fonciers');
$section->setPosition(1);
$field = new SaferSettingField('list', $section);
$field->setTitle('Liste des conseiller(ère)s fonciers');
$field->setDescription('Sélectionner les conseiller(ère)s fonciers à définir comme S2PR');
$field->setContentCallback(function ($field) {
$value = $field->getValue();
$name = $field->getFullName();
$sanitizedName = preg_replace('/(?=\[|\])/', '\\', $name);
try {
$database = Database::getInstance();
} catch (Exception $e) {
$database = null;
}
if (!$database || !$database->isConnected()) {
// Afficher un message d'erreur
return;
}
$query = new QuerySelect();
$query->setColumns([
'ARRAY_TO_STRING(ARRAY_AGG(p.id), \';\')' => 'IDs',
'p.prenom || \' \' || p.nom_usage' => 'Nom',
])
->setFrom('bng.personne', 'p')
->setJoins([
[
'table' => 'bng.fonction',
'alias' => 'f',
'on' => 'p.id = f.id_personne'
],
[
'table' => 'bng.tr_type_fonction',
'alias' => 'tf',
'on' => 'tf.id = f.id_type_fonction'
]
])
->setWhere('tf.code IN (\'CFONC\', \'CADRE\', \'DD\')')
->setGroupBy(['"Nom"'])
->setOrderBy('"Nom"');
$results = $query->fetchAll();
foreach ($results as $key => $props)
$results[$key] = [
'value' => $props['IDs'],
'text' => $props['Nom'] . ' [' . implode(
', ', explode(';', $props['IDs'])) . ']'
];
// Afficher le champ de sélection
});
return $section;
})();
Un fichier de menu doit retourner une instance de la classe SaferAdminSubmenu.
Exemple :
<?php
require_once SAFER_PLUGIN_PATH . 'src/class-admin-submenu.php';
require_once SAFER_PLUGIN_PATH . 'src/class-setting-group.php';
return (function (): SaferAdminSubmenu {
$submenu = new SaferAdminSubmenu(SaferSettingGroup::get('safer_database'));
$submenu->setTitle('Paramètres de la base de données');
$submenu->setPageTitle('Paramètres de la base de données');
$submenu->setCapability('manage_options');
return $submenu;
})();