Bonjour,

J’ai bien compris cette partie et je suis donc parvenue au fonctionnement de 
cette liaison simple.
J’ai toutefois une liaison plus compliquée à mettre en œuvre et je crois que je 
n’appréhende pas correctement le paramètre joinparams.

Le plugin sur lequel je travaille étend ticketstasks. Le plugin stocke les 
informations standard dans la table glpi_tickettasks et les informations 
spécifiques aux plugins dans sa table glpi_plugin_monplugin_tickettasks. Cette 
table dispose donc d’une liaison avec glpi_tickettasks qui se nomme 
tickettasks_id. Cette table contient aussi une liaison vers glpi_users avec un 
champ nommé user_arbitre.

Ce plugin doit ajouter des éléments de recherche dans les tickets, et par 
exemple, un champ « Arbitre » correspondant à la liaison entre glpi_users.id et 
glpi_plugin_monplugin_tickettasks.user_arbitre. Pour que cela fonctionne, je 
dois donc procéder à des liaisons multiples (ticket -> tickettasks -> 
monplugin_tickettasks), voici ce que j’ai tenté et qui ne fonctionne pas :

function plugin_monplugin_getAddSearchOptions($itemtype)
{
    $opt = array();
    if ($itemtype == 'Ticket')
    {
           $opt['arbitrage']           = 'Arbitrage';

           $opt[400]['table']          = 'glpi_users';
           $opt[400]['field']          = 'name';
           $opt[400]['name']           = 'Arbitre';
           $opt[400]['linkfield']      = 'user_arbitre';
           $opt[400]['datatype']       = 'itemlink';
           $opt[400]['right']          = 'own_ticket';
    $opt[400]['joinparams']     = array('beforejoin'
                            => array('table'  => 
'glpi_plugin_monplugin_tickettasks',
                            'joinparams' => array('beforejoin' => array('table' 
=> 'glpi_tickettasks','joinparams' => array('jointype'  => 'child')))));
    }
    return $opt;
}

Le champ apparait bien dans la liste des éléments de recherche, mais la 
jointure dans requête SQL renvoyée n’est pas correcte. Le debug m’informe que

Unknown column 'glpi_tickettasks.plugin_monplugin_tickettasks_id' in 'on clause'

Pour ce que je cherche à faire, la jointure est inversée. Elle devrait être du 
type glpi_tickettasks.id = glpi_plugin_monplugin_tickettasks.tickettasks_id

La requête generée est

SELECT 'yannick.moli...@dixinfor.com' AS currentuser, `glpi_tickets`.`id` AS 
ITEM_0, `glpi_tickets`.`name` AS ITEM_1, `glpi_tickets`.`id` AS ITEM_1_2, 
`glpi_tickets`.`content` AS ITEM_1_3, `glpi_tickets`.`status` AS ITEM_1_4, 
`glpi_entities`.`completename` AS ITEM_2, `glpi_tickets`.`status` AS ITEM_3, 
`glpi_tickets`.`date_mod` AS ITEM_4, `glpi_tickets`.`date` AS ITEM_5, 
`glpi_tickets`.`priority` AS ITEM_6, GROUP_CONCAT(DISTINCT 
`glpi_users_647c2805c3795643b0f52f520e7cdb86`.`id` SEPARATOR '$$$$') AS ITEM_7, 
GROUP_CONCAT(DISTINCT 
CONCAT(`glpi_tickets_users_a900a61824c3906cc82f90407e525192`.`users_id`, ' ', 
`glpi_tickets_users_a900a61824c3906cc82f90407e525192`.`alternative_email`) 
SEPARATOR '$$$$') AS ITEM_7_2, GROUP_CONCAT(DISTINCT 
`glpi_users_c5e682856a6d6fe48b5aed8f8b238708`.`id` SEPARATOR '$$$$') AS ITEM_8, 
GROUP_CONCAT(DISTINCT 
CONCAT(`glpi_tickets_users_74690f2626744a37ace4c70dd87cea83`.`users_id`, ' ', 
`glpi_tickets_users_74690f2626744a37ace4c70dd87cea83`.`alternative_email`) 
SEPARATOR '$$$$') AS ITEM_8_2, `glpi_itilcategories`.`completename` AS ITEM_9, 
`glpi_tickets`.`due_date` AS ITEM_10, `glpi_tickets`.`status` AS ITEM_10_2, 
`glpi_users_user_arbitre_3bf0be72301038f232c35fde040b8a1b`.`name` AS ITEM_11, 
`glpi_users_user_arbitre_3bf0be72301038f232c35fde040b8a1b`.`realname` AS 
ITEM_11_2, `glpi_users_user_arbitre_3bf0be72301038f232c35fde040b8a1b`.`id` AS 
ITEM_11_3, 
`glpi_users_user_arbitre_3bf0be72301038f232c35fde040b8a1b`.`firstname` AS 
ITEM_11_4, `glpi_tickets`.`id` AS id
FROM `glpi_tickets`
LEFT JOIN `glpi_entities` ON (`glpi_tickets`.`entities_id` = 
`glpi_entities`.`id` )
LEFT JOIN `glpi_tickets_users` AS 
glpi_tickets_users_a900a61824c3906cc82f90407e525192 ON (`glpi_tickets`.`id` = 
`glpi_tickets_users_a900a61824c3906cc82f90407e525192`.`tickets_id` AND 
`glpi_tickets_users_a900a61824c3906cc82f90407e525192`.`type` = 1 )
LEFT JOIN `glpi_users` AS glpi_users_647c2805c3795643b0f52f520e7cdb86 ON 
(`glpi_tickets_users_a900a61824c3906cc82f90407e525192`.`users_id` = 
`glpi_users_647c2805c3795643b0f52f520e7cdb86`.`id` )
LEFT JOIN `glpi_tickets_users` AS 
glpi_tickets_users_74690f2626744a37ace4c70dd87cea83 ON (`glpi_tickets`.`id` = 
`glpi_tickets_users_74690f2626744a37ace4c70dd87cea83`.`tickets_id` AND 
`glpi_tickets_users_74690f2626744a37ace4c70dd87cea83`.`type` = 2 )
LEFT JOIN `glpi_users` AS glpi_users_c5e682856a6d6fe48b5aed8f8b238708 ON 
(`glpi_tickets_users_74690f2626744a37ace4c70dd87cea83`.`users_id` = 
`glpi_users_c5e682856a6d6fe48b5aed8f8b238708`.`id` )
LEFT JOIN `glpi_itilcategories` ON (`glpi_tickets`.`itilcategories_id` = 
`glpi_itilcategories`.`id` )
LEFT JOIN `glpi_tickettasks` ON (`glpi_tickets`.`id` = 
`glpi_tickettasks`.`tickets_id` )
LEFT JOIN `glpi_plugin_monplugin_tickettasks` AS 
glpi_plugin_monplugin_tickettasks_e5ca2f53018fdc28a31faf534186b3a2 ON 
(`glpi_tickettasks`.`plugin_monplugin_tickettasks_id` = 
`glpi_plugin_monplugin_tickettasks_e5ca2f53018fdc28a31faf534186b3a2`.`id` )
LEFT JOIN `glpi_users` AS 
glpi_users_user_arbitre_3bf0be72301038f232c35fde040b8a1b ON 
(`glpi_plugin_ridixinfor_tickettasks_e5ca2f53018fdc28a31faf534186b3a2`.`user_arbitre`
 = `glpi_users_user_arbitre_3bf0be72301038f232c35fde040b8a1b`.`id` )
WHERE `glpi_tickets`.`is_deleted` = '0' AND ( `glpi_tickets`.`entities_id` IN 
('0', '38', '80', '40', '9', '86', '81', '41', '32', '10', '42', '34', '55', 
'11', '53', '43', '76', '12', '89', '13', '63', '44', '45', '88', '48', '49', 
'87', '71', '3', '14', '36', '46', '93', '47', '15', '104', '77', '1', '82', 
'83', '90', '108', '74', '75', '16', '17', '26', '29', '67', '79', '50', '51', 
'27', '119', '25', '52', '54', '101', '117', '5', '56', '57', '70', '58', '59', 
'60', '19', '106', '102', '37', '61', '20', '78', '73', '91', '18', '62', '65', 
'64', '33', '103', '98', '35', '113', '84', '85', '95', '66', '2', '28', '30', 
'99', '21', '118', '72', '39', '115', '96', '105', '31', '22', '107', '92', 
'4', '100', '24', '68', '23', '69', '97', '116', '114', '94', '6', '7', '8', 
'109', '110', '111', '112') ) AND ( 
(`glpi_users_user_arbitre_3bf0be72301038f232c35fde040b8a1b`.`id` = '6') ) GROUP 
BY `glpi_tickets`.`id`
ORDER BY ITEM_4 DESC

Je n’ai pas trouvé, dans la classe ticket ou dans la classe computer, d’exemple 
dont je pourrais m’inspirer pour m’aider à résoudre ce problème, qui je pense 
viens d’un problème de compréhension du paramètre joinparams. La documentation 
en ligne à ce sujet est assez pauvre pour comprendre le fonctionnement.

Pourriez-vous m’expliquer ou je fais erreur ou m’indiquer éventuellement un 
exemple dont je pourrais m’inspirer ?

Merci,
Yannick


De : Glpi-dev [mailto:glpi-dev-boun...@gna.org] De la part de Julien Dombre
Envoyé : mardi 13 mai 2014 22:23
À : glpi-dev@gna.org
Objet : Re: [Glpi-dev] Jointure dans les recherches

Bonsoir,

Votre questionnement manque vraiment de précision pour vous apportez une 
réponse vraiment précise.
Avoir plusieurs colonnes utilisateurs (ou autre d'ailleurs) n'a rien de 
bloquant. Vous avez le même cas dans la table glpi_tickets par exemple ou même 
glpi_computers. La définition des éléments est alors assez simple en suivant 
les coding standards de GLPI.

Pour les computers par exemple la définition dans SearchOptions donne :
      $tab[24]['table']          = 'glpi_users';
      $tab[24]['field']          = 'name';
      $tab[24]['linkfield']      = 'users_id_tech';
      $tab[24]['name']           = __('Technician in charge of the hardware');
      $tab[24]['datatype']       = 'dropdown';
      $tab[24]['right']          = 'own_ticket';

      $tab[70]['table']          = 'glpi_users';
      $tab[70]['field']          = 'name';
      $tab[70]['name']           = __('User');
      $tab[70]['datatype']       = 'dropdown';
      $tab[70]['right']          = 'all';

Tout est dans le linkfield qui est spécifié pour l'élément 24. Par défaut ce 
champ de liaison (ce que vous appelé colonne) est calculé automatiquement à 
partir du nom de la table (glpi_users -> users_id). Pour l'élément 24 on le 
force à users_id_tech qui est le 2eme champ de liaison vers glpi_users.

Ceci est vrai pour une liaison simple. Pour une liaison plus complexe il faut 
utilisé un autre parmètre "joinparam" pour spécifier la jointure plus complexe 
à utiliser.

Cordialement,

Julien Dombre


Le 13/05/2014 22:11, Yannick MOLINET a écrit :
Bonsoir,

J’ai un problème avec le fonctionnement des jointures pour les commandes Search.
La table de mon plugin contient plusieurs colonnes contenant des id 
utilisateurs et je ne peux donc pas utiliser les jointures par défaut pour 
effectuer les liaisons avec la table glpi_users.
Je voudrais donc savoir comment je peux spécifier le nom de la colonne source 
dans la table de mon plugin ?

Merci,
Yannick




_______________________________________________

Glpi-dev mailing list

Glpi-dev@gna.org<mailto:Glpi-dev@gna.org>

https://mail.gna.org/listinfo/glpi-dev

_______________________________________________
Glpi-dev mailing list
Glpi-dev@gna.org
https://mail.gna.org/listinfo/glpi-dev

Reply via email to