[Obm] Automate et mise à jour incrémentale, via PHP

Thomas Chemineau thomas.chemineau at gmail.com
Wed Nov 4 14:16:16 CET 2009


Bonjour,

Je développe actuellement sur la bibliothèque LemonLDAP d'OBM.

Récemment, pour permettre la synchronisation d'information depuis un
annuaire LDAP externe vers OBM puis annuaire OBM, j'ai ajouté une
quinzaine de lignes permettant d'appeler l'automate de mise à jour via
PHP. Seulement, n'arrivant pas à formater correctement les tableaux et
autres informations PHP attendus pour une mise à jour incrémentale,
j'ai délibérément forcé la mise à jour à 'global'. Ça marche très
bien, l'annuaire OBM est correctement mis à jour, inutile de valider
cette mise à jour via la GUI d'OBM.

Mais voilà, il s'agit d'une mise à jour globale. Certes, pour une
dizaine d'utilisateurs, ça passe, mais pour 5000, ça n'est plus
possible. Je me suis donc plongé dans les méandres d'OBM afin
d'essayer de comprendre comment les données de mises à jour
incrémentales étaient construites. J'avoue, je suis perdu. J'aurais
donc besoin d'un coup de main.

Pour le moment, j'utilise php/tools/tools_query.inc, comme ceci:

8<--------
$params['domain_id'] = $domain_id;
$params['update_type'] = 'incremental';
$params['realm'] = 'user';

store_update_data($params);
$res = exec_tools_update_update($params);
8<--------

Or, en mise à jour incrémentale, la fonction "store_update_data" a
besoin de la variable global "$entities". Et c'est là ou je coince, je
ne sais pas comment la construire. Après pas mal de coup de grep dans
le code (il s'avère que "$entities" semble n'être utilisé que dans
calendar), j'en suis arrivé à la fabriquer comme suit:

8<--------
$entities['user'][$user_id] = array(
    'name'  => $user_data[$this->_sqlMap['userobm_lastname']] . ' ' .
$user_data[$this->_sqlMap['userobm_firstname']],
    'class' => 'eventOwner',
    'type'  => 'user',
    'id'    => $user_id
  );
8<--------

Bon, ça ne s'invente pas. Mais je tilt tout de même sur "class", et
sur "name" (qui est fabriqué en dur). Malheureusement, même avec ce
tableau, OBM me jette avec cette erreur SQL :

8<--------
Database error: Invalid SQL: INSERT INTO Updated ( updated_domain_id,
updated_user_id, updated_delegation, updated_table, updated_entity_id,
updated_type ) SELECT 2, 23, '', '', , 'U' FROM as Current JOIN P_ as
Production ON WHERE () AND (1=1 AND (Current._userupdate = 23 OR
(Current._userupdate IS NULL AND Current._usercreate = 23)) AND
Current._domain_id = 2)
MySQL Error: 1064 (You have an error in your SQL syntax; check the
manual that corresponds to your MySQL server version for the right
syntax to use near ' 'U' FROM as Current JOIN P_ as Production ON
WHERE () ' at line 13)
Session halted.
8<--------

Qqun pourrait-il me filer des billes sur comment avancer sur ce sujet
? J'ai réellement besoin de coder l'appel à une mise à jour
incrémentale pour des utilisateurs et des groupes.

Merci et bon après midi,
Thomas.

PS: Désolé de poster sur cette liste, pour un sujet si technique. Mais
c'est le seul moyen que j'ai trouvé.

-- 
Thomas Chemineau
LSC Project  - http://lsc-project.org


More information about the Obm mailing list