Pages d'administration

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.

    sidebar - submenus.png

  • 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.

    safer - db.png
    L'ensemble des fichiers peuvent utiliser les bibliothèques disponibles (disponibilités : admin).

Settings

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ètres

index.php

Un 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;
})();

{{nom_de_la_section}}.php

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;
})();