You are not logged in.

Announcement

 Téléchargez la dernière version stable de GLPI      -     Et vous, que pouvez vous faire pour le projet GLPI ? :  Contribuer
 Download last stable version of GLPI                      -     What can you do for GLPI ? :  Contribute

#1 2022-06-02 14:21:07

virgin21800
Member
Registered: 2020-11-16
Posts: 4

Question sur fonctionnement searchOptions() avec datatype 'specific'

Bonjour,
Je suis en train de réaliser un plugin pour inventorier les éléments d'une installation de téléphonie.
J'ai un objet 'Carte', un objet 'PBX' et un objet 'Alveole'. Une classe 'Carte_Item' me permet d'intégrer ma carte soit dans un PBX, soit dans une alvéole. Tout fonctionne nickel, sauf que je n'arrive pas à afficher correctement une colonne 'Elément associé' dans la fonction rawSearchOptions() de ma classe 'Carte' pour afficher soit l'alvéole soit le PBX correspondant.

function rawSearchOptions(){
        $tab = parent::rawSearchOptions();

        [...]

        $tab[] = [
            'id'                => '90001',
            'table'             => PluginArchiCarte_Item::getTable(),
            'field'             => 'items_id',
            'name'              => _n('Associated item', 'Associated items', Session::getPluralNumber()),
            'datatype'          => 'specific',
            'additionalfields'  => ['itemtype'],
            'joinparams'         => [
                'jointype'           => 'child',
            ]
        ];

        $tab[] = [
            'id'                => '90002',
            'table'             => PluginArchiCarte_Item::getTable(),
            'field'             => 'itemtype',
            'name'              => _n('Associated item type', 'Associated item types', Session::getPluralNumber()),
            'datatype'          => 'itemtypename',
            'joinparams'         => [
                'jointype'           => 'child',
            ],
            'itemtype_list'      => 'carte_types',
        ];

        return $tab;
    }

J'ai ajouté comme la doc l'indique :

    static function getSpecificValueToDisplay($field, $values, array $options = []){

        if (!is_array($values)) {
            $values = [$field => $values];
        }
        switch ($field) {
            case 'items_id':
                if (isset($values['itemtype'])) {
                    return Dropdown::getDropdownName(
                        getTableForItemType($values['itemtype']),
                        $values[$field]
                    );
                }
                break;
        }
        return parent::getSpecificValueToDisplay($field, $values, $options);
    }

    static function getSpecificValueToSelect($field, $name = '', $values = '', array $options = [])
    {

        if (!is_array($values)) {
            $values = [$field => $values];
        }
        $options['display'] = false;
        switch ($field) {
            case 'items_id':
                if (isset($values['itemtype']) && !empty($values['itemtype'])) {
                    $options['name']  = $name;
                    $options['value'] = $values[$field];
                    return Dropdown::show($values['itemtype'], $options);
                }
                break;
        }
        return parent::getSpecificValueToSelect($field, $name, $values, $options);
    }

Pour résultat, j'obtiens l'items_id (qui correspond bien à l'ID de mon alvéole ou de mon PBX) mais je souhaite afficher le nom de l'élément. Je pense que rien ne passe dans le case de ma fonction getSpecificValueToDisplay($field, $values, array $options = []). Pouvez-vous m'éclairer svp je suis toute seule sur le projet et cela fait des jours que je cherche ?

Last edited by virgin21800 (2022-06-02 14:22:01)

Offline

#2 2022-06-02 18:10:38

virgin21800
Member
Registered: 2020-11-16
Posts: 4

Re: Question sur fonctionnement searchOptions() avec datatype 'specific'

Je me réponds à moi-même pour ceux qui cherchent : faire un hook giveItem() pour éviter l'erreur sur le plugin.

Last edited by virgin21800 (2022-06-14 10:43:57)

Offline

Board footer

Powered by FluxBB