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 2019-05-28 11:49:07

kl3sk
Member
Registered: 2019-04-08
Posts: 10

Besion d'aide pour la création d'un plugin

Bonjour,

Je souhaite créer un plugin pour une utilisation précise. Pour le moment peu importe le but de celui-ci.

Je tente de suive la documention Mais je doit avouez qu'elle manque de clarté avec pas mal d'erreurs par-ci par là.

Example:

static function displayTabContentForItem(CommonGLPI $item, $tabnum=1, $withtemplate=0) {
   switch ($item::getType()) {
      case Computer::getType():
         //display form for computers
         $this->displayTabContentForComputer($item);
         break;
      case Phone::getType():
         $this->displayTabContentForPhone($item);
         break;
   }
   if ($item->getType() == 'ObjetDuCoeur') {
      $monplugin = new self();
      $ID = $item->getField('id');
     // j'affiche le formulaire
      $monplugin->nomDeLaFonctionQuiAfficheraLeContenuDeMonOnglet();
   }
   return true;
}

Un $this dans une fonction static ne peut pas exister.
Rien de bien méchant une faut d’inattention de présume.

Cepandant, j'aimerais dans un premier temps ajouter un onglet aux ticket (par example), ça c'est bon je l'ai il s'affiche bien mais je n'arrive pas a afficher un formulaire que je souhaiterais créer. J'ai bien déclarer la fonction showForm mais rien n'y fait cela ne s'affiche pas.


Un bout de code pour l'exemple:

plugins/times/inc/ticket.class.php

<?php

/**
 * Class PluginTimesTicket
 */
class PluginTimesTicket extends CommonDBTM
{
    /**
     * @param       $ID
     * @param array $options
     *
     * @return string
     */
    public function showForm($ID, $options = [])
    {
        global $CFG_GLPI;

        $this->initForm($ID, $options);
        $this->showFormHeader($options);

        if (!isset($options['display'])) {
            //display per default
            $options['display'] = true;
        }

        $params = $options;
        //do not display called elements per default; they'll be displayed or returned here
        $params['display'] = false;

        $out = '<tr>';
        $out .= '<th>' . __('Plugin gestion temps', 'times') . '</th>';

        $objectName = autoName(
            $this->fields["name"],
            "name",
            (isset($options['withtemplate']) && $options['withtemplate'] == 2),
            $this->getType(),
            $this->fields["entities_id"]
        );

        $out .= '<td>';
        $out .= Html::autocompletionTextField(
            $this,
            'name',
            [
                'value' => $objectName,
                'display' => false
            ]
        );
        $out .= '</td>';

        $out .= $this->showFormButtons($params);

        if ($options['display'] == true) {
            echo $out;
        } else {
            return $out;
        }
    }

    public function getTabNameForItem(CommonGLPI $item, $withtemplate = 0)
    {
        switch ($item::getType()) {
            case Ticket::getType():
                return __('Temps passé', 'times');
                break;
        }
        return '';
    }

    /**
     * @param CommonGLPI $item
     * @param int        $tabnum
     * @param int        $withtemplate
     *
     * @return bool
     */
    static function displayTabContentForItem(CommonGLPI $item, $tabnum = 1, $withtemplate = 0)
    {
        echo '<input type="text">';
        //echo '<pre style="text-align:left">';
        //var_dump($item);
        //echo '</pre>';
    }
}

Je doit certainement oublier des choses mais je tourne en rond, merci pour l'aide apportée.

Offline

#2 2019-05-28 16:25:01

kl3sk
Member
Registered: 2019-04-08
Posts: 10

Re: Besion d'aide pour la création d'un plugin

Il semblerait que j'arrive avoir des résultats. Pour le moment je ne sais pas si je suis sur le bon chemin mais j'ai des bouts de réponse.
Cependant d'autres questions arrivent.

J'ai créé un petit formulaire grâce au framework GLPI:

file: plugins/times/inc/ticket.class.php

static function displayTabContentForItem(CommonGLPI $item, $tabnum = 1, $withtemplate = 0)
    {
        global $CFG_GLPI;

        Html::ajaxForm('#form_test');
        echo '<form method="post" id="form_test" action="'. $CFG_GLPI['root_doc'] .'/plugins/times/front/ticket.form.php">';

        Dropdown::showNumber('testH', [
            'min' => 0,
            'max' => 23,
            'unit' => 'H'
        ]);
        Dropdown::showNumber('testM', [
            'min' => 0,
            'max' => 59,
            'unit' => 'min'
        ]);
        Contract::dropdown();
        if (defined('GLPI_USE_CSRF_CHECK') && GLPI_USE_CSRF_CHECK) {
            echo Html::hidden('_glpi_csrf_token', ['value' => Session::getNewCSRFToken()]);
        }
        echo Html::submit('send');

        echo '</form>';
}

1/ Est-ce que l'action du formulaire semble correct "In a GLPI way" ?
2/ La première soumission me répond correctement (HTTP 200 et réponse du fichier) mais si je re-soumet j'ai en réponse:

Attention

L'action que vous avez réalisée n'est pas autorisée.

J'ai l'impression de le CSRF est régénéré et n'est plus bon à la seconde soumission.


Merci pour vos lumières.

Last edited by kl3sk (2019-05-29 10:30:39)

Offline

Board footer

Powered by FluxBB