Je vais essayé de passer un peu de temps sur ton sujet ce we.
Si tu peux passer assez régulièrement pour répondre à mes éventuelles questions.
@+
Hors ligne
(Pas de problème pour l'instant - A suivre).
Hors ligne
Je crois que cela sera dispo sous la forme d'un plugin.
J'ai un peu d'habillage à réaliser, et je te l'envoi.
Je posterai ici uniquement la logique et les grandes lignes.
Hors ligne
[extension by Piwigo Team] LocalFiles Editor active
Onglet configuration, ajout à l'intérieur de:
$conf['external_connection_api'] = 'http://nomdusiteprincipal.fr/api.php?user=%s&pass=%s&type=echodata';
Bien entendu tu l'adapteras en fonction du nom du site.
Je n'ai pas encore testé une seule ligne de ce que j'ai écrit.
Je vais commencer les tests, quand ils me sembleront corrects, je t'enverrai le zip.
Finalement, c'était un peu plus "coton" que je ne le pensais.
Mais cela va fonctionner.
Hors ligne
J'ai été un peu optimiste.
Pour les spécialistes:
Je rencontre un problème dit de portée de variable (http://php.net/manual/fr/language.variables.scope.php).
Les fonctions anonymes (http://fr.php.net/manual/fr/function.cr … nction.php) ne peuvent pas atteindre les variables que la fonction qui les utilisent.
Plus précisément:
La fonction try_log_user renseigne un tableau $row.
J'ai besoin de modifier le mot de passe, l'id et le userid mais $row est hors d'atteinte.
A ton niveau: retiens seulement que les tests ne me donnent donc pas satisfaction.
Je continuerai à chercher dans les prochains jours.
Je vais trouver une solution.
Hors ligne
Si je comprend bien, tu veux modifier $conf['pass_convert'], mais je ne suis pas sur que ce soit vraiment la solution la plus simple!
Pourquoi ne pas utiliser le trigger login_failure?
Voila ce que je ferai en très gros (il faudra surement faire quelque chose d'un peu plus poussé pour l'enregistrement de l'utilisateur dans la base de piwigo, surtout si on veut garder le meme id que la table externe)
add_event_handler('login_failure', 'try_external_identification') function try_external_identification($username) { global $redirect_to, $remember_me; $fp = fopen('http://nom_de_mon_site/api.php?user='. $username.'&pass='. md5($_POST['password'])).'&type=echodata','r'); $d = fgets($fp); $g = split("//",$d); $userid = (int)($g[0]); fclose($fp); if ($userid > 0) { // Enregistrement simple de l'utilisateur (avec un nouvel id) // Prévoir un enregistrement avec le meme identifiant externe ($userid) $error = register_user($username, md5($_POST['password']), ''); if (empty($error)) { log_user(get_userid($username), $remember_me); redirect(empty($redirect_to) ? make_index_url() : $redirect_to); } } }
Hors ligne
Génial! notre ami P@t.
Alors que je tentais désespérement d'anticiper le résultat d'un test...
http://code.piwigo.org/repositories/ent … .php#L1045
Parce que le trigger 'login_failure' était suivi d'un return false.
Voilà qu'il me propose une démarche inverse, anticipant le log_user(get_userid($username), $remember_me);
Génial! Merci bien, P@t.
Comme j'ai déjà réglé la partie de code traitant le point:
// Enregistrement simple de l'utilisateur (avec un nouvel id)
// Prévoir un enregistrement avec le meme identifiant externe ($userid)
Je devrais, je pense ce soir, pouvoir livrer le code adhoc.
;-)
@Canta!
Laisse en place le:
$conf['external_connection_api'] = 'http://nomdusiteprincipal.fr/api.php?user=%s&pass=%s&type=echodata';
Je l'utiliserai dans la version finale.
;-)
Hors ligne
@Cata!
Est-ce que le"username" ou le "surnom" ou le "pseudo", bref le nom de l'utilisateur dans la base de l'école est unique ou non?
En clair:
Le pseudo va-t-il obligatoirement être différent?
ou
peut-il être repris au fil des ans (le pat (id=17423) de 1998 n'est pas le pat (20218) de 2003, ni le pat (23741) de 2009)?
Cela change totalement la logique pour moi (et pour la solution encore partielle de P@t).
Un premier zip envoyé!
----------------
[P@t, je saurai traiter les 2 cas (évidemment si ton hypothèse est bonne c'est simple)].
Hors ligne
Merci VDigital pour ton mail!
Je test se que tu m'as envoyé rapidement.
Concernant ta précédente question, voici la réponse que l'on m'a transmise:
"dans la db il y a un champ "pseudo" (utilisé) pour se logguer, qui est unique. L'autre champ "surnom" n'est pas unique (utilisé pour l'affichage)"
Hors ligne
Je pouvais encore faire plus simple.
Est-ce que ton installation utiliserait par hasard la même database que celle de l'école?
Piwigo ne gèrera pas le surnom et le pseudo sera affiché...
Bonjour cant128 !
au lieu de :
Bonjour Canta! !
Ton id dans la base de l'école? ( Webmaster id? qui viendra se substituer à l'id=1 de Piwigo)
L'id du guest ? (Utisateur bidon de la base de l'école, qui deviendra le guest (id=2) de Piwigo)
???
Hors ligne
J'ai reçu ton mail, je regarde ça ce soir.
Hors ligne
Après mes tests du zip que tu m'as envoyé, la connexion des utilisateurs fonctionne correctement ! Mais une seule fois...
La seconde fois que l'utilisateur souhaite se reconnecter, la connexion lui sera refusée. Motif: "Mot de passe invalide !"
Hors ligne
Je vais jeter un œil (et le récupérer immédiatement, je pourrai encore en avoir besoin).
;-)
Hors ligne