Annonce

  •  » Plugins
  •  » lier les utilisateurs de piwigo et fluxbb

#1 2009-08-02 21:58:33

lily
Membre
2009-08-02
5

lier les utilisateurs de piwigo et fluxbb

bonsoir,
je reviens ici parce que j ai vraiment besoin d un coup de main,
j essaye desesperement de combiner piwigo et fluxbb pour que tout soit fluide pour les utilisateurs

sauf que mon niveau en php est tres médiocre...

voici ou j en suis :
piwigo installé, configuré, testé : tout est ok
phpbb idem,
register_fluxbb a synchronisé les tables, et tout va bien.

ce que je voudrais :
quand j arrive sur la page d accueil, que je puisse me connecter (login, passwd) a la fois a fluxbb et a piwigo
(qui sont dans 2 repertoires separés)

alors j ai trouvé ca : http://fr.piwigo.org/forum/viewtopic.php?id=15615
qui semblerait faire exactement ce que je cherche... sauf que j ai du mal a comprendre

P@t a écrit:

dans le header de la page de ton site, tu mettras:

<script type="text/javascript">
function pwglog()
{
  var xhr;
  try { xhr = new ActiveXObject('Msxml2.XMLHTTP'); }
  catch (e)
  {
    try { xhr = new ActiveXObject('Microsoft.XMLHTTP'); }
    catch (e2)
    {
      try { xhr = new XMLHttpRequest(); }
      catch (e3) { return; }
    }
  }

  data = document.getElementsByName('mylogin')[0].elements;
  xhr.open( "POST", "piwigo/ws.php",  false);
  xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  xhr.send("method=pwg.session.login&username=" + data.username.value + "&password=" + data.password.value);
}
</script>

... ou mylogin est le nom de ton formulaire, et piwigo/ws.php est le chemin relatif vers le webservice de piwigo.

Enssuite, dans ta page, tu auras un formulaire qui ressemble à ca:

<form method="post" name="mylogin" action="" >
  <input type="text" name="username" value="" >
  <input type="password" name="password" value="" >
  <input type="submit" value="submit" onClick="pwglog();">
</form>

la ok, je peux m identifier sur piwigo, mais pas sur fluxbb, donc je ne suis pas plus avancé...
comment envoyer la requête pour qu elle soit prise en compte aussi par fluxbb?

par contre quand p@t ajoute qu il faut aussi modifier config_local.inc.php, plus aucun login possible j ai toute une page de
[mysql error 1064] Erreur de syntaxe
mysql_fetch_array() expects parameter 1 to be resource
array_merge() [function.array-merge]: Argument #1 is not an array
Undefined index
etc etc...

a l aide !!

Hors ligne

#2 2009-08-02 22:08:32

YannCo
Membre
Douarnenez - 29
2009-07-12
112

Re: lier les utilisateurs de piwigo et fluxbb

Salut,

Je répond vite fait car c'est peut être pas la solution souhaitée.

J'avais aussi galeré avec ce type de bridge et d'autres scripts, pour m'en sortir, j'avais fais pointer les liens de connexions, déconnexions et d'inscriptions vers un seul script, ensuite la synchro entre ces 2 scripts fonctionnait à merveille.

Hors ligne

#3 2009-08-02 22:16:53

lily
Membre
2009-08-02
5

Re: lier les utilisateurs de piwigo et fluxbb

oh si ca peut tout a fait correspondre a ce que je cherche,
et je veux bien un apercu du type de script que tu as utilisé (si c est possible, ou sinon des pistes pour que j essaye par moi meme)!

Hors ligne

#4 2009-08-02 22:21:17

YannCo
Membre
Douarnenez - 29
2009-07-12
112

Re: lier les utilisateurs de piwigo et fluxbb

lily a écrit:

oh si ca peut tout a fait correspondre a ce que je cherche,
et je veux bien un apercu du type de script que tu as utilisé (si c est possible, ou sinon des pistes pour que j essaye par moi meme)!

Ce n'était pas avec piwigo, ni fluxbb :(

Faut trouver lequel des 2 tu préfères utiliser, celui qui marche le mieux, qui offre le plus d'options .... et sur l'autre, trouver le fichier où sont les liens de connexions, inscriptions etc et tout simplement les remplacer par les liens de l'autre ! j'avais ça assez bourrin, lien en dur dans un menu !

Hors ligne

#5 2009-08-03 18:15:43

P@t
Ex Equipe Piwigo
Nice
2007-06-13
5695

Re: lier les utilisateurs de piwigo et fluxbb

Ma solution peut très bien fonctionner avec FluxxBB, il suffit de l'adapter légèrement.

Quel est le code html du formulaire d'identification de fluxbb?


P@t

Hors ligne

#6 2009-08-04 01:39:52

lily
Membre
2009-08-02
5

Re: lier les utilisateurs de piwigo et fluxbb

j ai passé ma journée a essayer de connecter sur fluxbb et piwigo en meme temps, sans succès

(enfin si, pendant 5 minutes, tout a fonctionné, malheureusement je n ai jamais pu retrouver comment!)

le formulaire d identification de fluxbb, en version allégé ressemble à ca :

<?php
define('PUN_ROOT', './forum/');
require PUN_ROOT.'include/common.php';
require PUN_ROOT.'lang/'.$pun_user['language'].'/login.php';

$action = isset($_GET['action']) ? $_GET['action'] : null;

if (isset($_POST['form_sent']) && $action == 'in')
{

    $form_username = trim($_POST['req_username']);
    $form_password = trim($_POST['req_password']);
    $username_sql = ($db_type == 'mysql' || $db_type == 'mysqli') ? 'username=\''.$db->escape($form_username).'\'' : 'LOWER(username)=LOWER(\''.$db->escape($form_username).'\')';
    $result = $db->query('SELECT id, group_id, password, save_pass FROM '.$db->prefix.'users WHERE '.$username_sql) or error('Unable to fetch user info', __FILE__, __LINE__, $db->error());
    list($user_id, $group_id, $db_password_hash, $save_pass) = $db->fetch_row($result);

    $authorized = false;

    if (!empty($db_password_hash))
    {
        $sha1_in_db = (strlen($db_password_hash) == 40) ? true : false;
        $sha1_available = (function_exists('sha1') || function_exists('mhash')) ? true : false;

        $form_password_hash = pun_hash($form_password);   

        if ($sha1_in_db && $sha1_available && $db_password_hash == $form_password_hash)
            $authorized = true;
        else if (!$sha1_in_db && $db_password_hash == md5($form_password))
        {
            $authorized = true;

            if ($sha1_available)   
                $db->query('UPDATE '.$db->prefix.'users SET password=\''.$form_password_hash.'\' WHERE id='.$user_id) or error('Unable to update user password', __FILE__, __LINE__, $db->error());
        }
    }

    if (!$authorized)
        message($lang_login['Wrong user/pass']);

    if ($group_id == PUN_UNVERIFIED)
        $db->query('UPDATE '.$db->prefix.'users SET group_id='.$pun_config['o_default_user_group'].' WHERE id='.$user_id) or error('Unable to update user status', __FILE__, __LINE__, $db->error());

    $db->query('DELETE FROM '.$db->prefix.'online WHERE ident=\''.$db->escape(get_remote_address()).'\'') or error('Unable to delete from online list', __FILE__, __LINE__, $db->error());

    $expire = ($save_pass == '1') ? time() + 31536000 : 0;
    pun_setcookie($user_id, $form_password_hash, $expire);
}

if (!$pun_user['is_guest'])

$page_title = pun_htmlspecialchars($pun_config['o_board_title']).' / '.$lang_common['Login'];
$required_fields = array('req_username' => $lang_common['Username'], 'req_password' => $lang_common['Password']);
$focus_element = array('login', 'req_username');

?>
<div class="blockform">
    <h2><span><?php echo $lang_common['Login'] ?></span></h2>
    <div class="box">
        <form id="login" method="post" action="../login3.php?action=in" onsubmit="return process_form(this)">
            <div class="inform">
                <fieldset>
                    <legend><?php echo $lang_login['Login legend'] ?></legend>
                        <div class="infldset">
                            <input type="hidden" name="form_sent" value="1" />
                            <input type="hidden" name="redirect_url" value="<?php echo $redirect_url ?>" />
                            <label class="conl"><strong><?php echo $lang_common['Username'] ?></strong><br /><input type="text" name="req_username" size="25" maxlength="25" tabindex="1" /><br /></label>
                            <label class="conl"><strong><?php echo $lang_common['Password'] ?></strong><br /><input type="password" name="req_password" size="16" maxlength="16" tabindex="2" /><br /></label>
                            <p class="clearb"><?php echo $lang_login['Login info'] ?></p>
                            <p><a href="register.php" tabindex="4"><?php echo $lang_login['Not registered'] ?></a>&nbsp;&nbsp;
                            <a href="login3.php?action=forget" tabindex="5"><?php echo $lang_login['Forgotten pass'] ?></a></p>
                        </div>
                </fieldset>
            </div>
            <p><input type="submit" name="login" value="<?php echo $lang_common['Login'] ?>" tabindex="3" /></p>
        </form>
    </div>
</div>

dans les dernieres solutions qui n ont pas marché, j ai repris exactement ce script là, mais en modifiant certaines variables en esperant que ca passe pour piwigo (vu qu  il n y a que la table qui change)

donc en lieu et place des lignes visant a se connecter a la db, j avais mis :

$db_prefix_pwg = ('gal_');
$db_pwg = new DBLayer($db_host, $db_username, $db_password, $db_name, $db_prefix_pwg, $p_connect);
        $form_username = trim($_POST['req_username']);
    $form_password = trim($_POST['req_password']);
        $username_sql_pwg = ($db_type == 'mysql' || $db_type == 'mysqli') ? 'username=\''.$db_pwg->escape($form_username).'\'' : 'LOWER(username)=LOWER(\''.$db_pwg->escape($form_username).'\')';

    $result_pwg = $db_pwg->query('SELECT id, group_id, password, save_pass FROM '.$db_pwg->$db_prefix_pwg.'users WHERE '.$username_sql) or error('Unable to fetch user info_pwg', __FILE__, __LINE__, $db_pwg->error());

    list($user_id_pwg, $group_id_pwg, $db_password_hash_pwg, $save_pass_pwg) = $db_pwg->fetch_row($result_pwg);

j ai un soucis egalement si je cherche a utiliser qu une seule table, avec piwigo guest a l´id 2, et avec fluxbb il a l id 1
mais si je modifie  config_default.inc.php j obtiens des erreurs des que je change les id dans la conf (et le prefixe de la table, et les champs...)


bref je galere, et pourtant j essaye sincerement de comprendre comment tout cela s embrique, mais j ai hate de pouvoir utiliser mon site et de voir le resultat ! ca en vaut la peine !

Dernière modification par lily (2009-08-04 01:50:00)

Hors ligne

#7 2009-08-04 14:03:29

P@t
Ex Equipe Piwigo
Nice
2007-06-13
5695

Re: lier les utilisateurs de piwigo et fluxbb

Je pense que tu veux aller trop vite, et faire trop compliqué...

Si le plugin Register Fluxbb fonctionne correctement, ton forum doit logiquement utiliser la table d'utilisateurs de piwigo (c'est en tout cas ce qui est écrit dans la description du plugin). Pas besoin de modifier le config_local.inc.php.
Pour commencer, tu dois donc vérifier que tout est ok à ce niveau la.

Petite remarque: il est écrit un peu partout sur le forum qu'ON NE MODIFIE PAS le fichier config_default.inc.php.
Il faut utiliser le plugin LocalFiles Editor, et modifier le fichier config_local.inc.php.
C'est pour ca que tu n'arrives plus à savoir ce qui a été modifié ou non.
Merci de bien vouloir relivrer le fichier include/config_default.inc.php d'origine.

Une fois que les tables sont bien synchronisées et que tout focntionne, voici le code à rentrer DANS LE HEADER de ton forum fluxbb:

<script type="text/javascript">
function pwglog()
{
  var xhr;
  try { xhr = new ActiveXObject('Msxml2.XMLHTTP'); }
  catch (e)
  {
    try { xhr = new ActiveXObject('Microsoft.XMLHTTP'); }
    catch (e2)
    {
      try { xhr = new XMLHttpRequest(); }
      catch (e3) { return; }
    }
  }

  data = document.getElementById('login').elements;
  xhr.open( "POST", "../piwigo/ws.php",  false);
  xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  xhr.send("method=pwg.session.login&username=" + data.req_username.value + "&password=" + data.req_password.value);
}
</script>

En gras, c'est le chemin relatif du fichier ws.php de piwigo. Je ne sais pas ou est installé piwigo par rapport à ton installation de fluxbb.

Il n'y a rien d'autre à toucher dans l'installation de fluxbb. Si tu as modifié des fichiers pour faire des tests, merci de remettre les fichiers d'origine en place.

Dernière modification par P@t (2009-08-04 14:20:54)


P@t

Hors ligne

#8 2009-08-04 14:07:34

P@t
Ex Equipe Piwigo
Nice
2007-06-13
5695

Re: lier les utilisateurs de piwigo et fluxbb

Petit oubli de ma part... dans le login de fluxbb, il faudra quand meme modifier quelque chose (vers la fin du code que tu m'as donné):

<p><input type="submit" name="login" value="<?php echo $lang_common['Login'] ?>" tabindex="3"  onClick="pwglog();" /></p>

Dernière modification par P@t (2009-08-04 14:08:22)


P@t

Hors ligne

#9 2009-08-04 14:21:41

P@t
Ex Equipe Piwigo
Nice
2007-06-13
5695

Re: lier les utilisateurs de piwigo et fluxbb

J'avais laissé une boulette dans mon code javascript... je viens de le corriger.
Il fonctionne, je viens de le tester à l'instant ;-)


P@t

Hors ligne

#10 2009-08-11 09:51:37

lily
Membre
2009-08-02
5

Re: lier les utilisateurs de piwigo et fluxbb

super !!!

je sais pas ce que je traficotais, a force de chercher je m enlisais de plus en plus alors un grand merci pour l aide !!
je peux m enregistrer sur les 2 en meme temps !

et franchement ca change la vie :)

mais je ne peux pas me deconnecter...

alors j ai essayé de reprendre la fonction de logout_user dans le code de piwigo pour l inserer sur mon index, evidemment ca marche pas (detail : je peux pas inserer les fichiers include piwigo car ya trop de nom de variables et de fonctions qui sont similaires)

donc ca donne le message d erreur suivant :
Warning: session_destroy() [function.session-destroy]: Trying to destroy uninitialized session in C:\Programme\EasyPHP3.1\www\login.php on line 13

copié collé du fichier login.php appelé par index.html :


<?php
define('PUN_ROOT', './forum/');
require_once PUN_ROOT.'include/common.php';
require_once PUN_ROOT.'lang/'.$pun_user['language'].'/login.php';
require_once 'piwigo/include/functions_cookie.inc.php';
$action = isset($_GET['action']) ? $_GET['action'] : null;

function log_out_user()
{
  global $conf;
  $_SESSION = array();
  session_unset();
  session_destroy();
  setcookie(session_name(),'',0,
      ini_get('session.cookie_path'),
      ini_get('session.cookie_domain')
    );
  setcookie($conf['remember_me_name'], '', 0, cookie_path(),ini_get('session.cookie_domain'));
}

if ((!$pun_user['is_guest']) || (isset($_POST['form_sent']) && $action == 'in') || $action == 'out')
{

    if (isset($_POST['form_sent']) && $action == 'in')
    {
    $form_username = trim($_POST['req_username']);
    $form_password = trim($_POST['req_password']);
    $username_sql = ($db_type == 'mysql' || $db_type == 'mysqli') ? 'username=\''.$db->escape($form_username).'\'' : 'LOWER(username)=LOWER(\''.$db->escape($form_username).'\')';
    $result = $db->query('SELECT id, group_id, password, save_pass FROM '.$db->prefix.'users WHERE '.$username_sql) or error('Unable to fetch user info', __FILE__, __LINE__, $db->error());
    list($user_id, $group_id, $db_password_hash, $save_pass) = $db->fetch_row($result);
    $authorized = false;
        if (!empty($db_password_hash))
        {
            $sha1_in_db = (strlen($db_password_hash) == 40) ? true : false;
            $sha1_available = (function_exists('sha1') || function_exists('mhash')) ? true : false;
            $form_password_hash = pun_hash($form_password);   
                if ($sha1_in_db && $sha1_available && $db_password_hash == $form_password_hash)
                    $authorized = true;
                else if (!$sha1_in_db && $db_password_hash == md5($form_password))
                {
                    $authorized = true;

                    if ($sha1_available)   
                        $db->query('UPDATE '.$db->prefix.'users SET password=\''.$form_password_hash.'\' WHERE id='.$user_id) or error('Unable to update user password', __FILE__, __LINE__, $db->error());
                }
        }
        if (!$authorized)
            echo($lang_login['Wrong user/pass']);
        if ($group_id == PUN_UNVERIFIED)
            $db->query('UPDATE '.$db->prefix.'users SET group_id='.$pun_config['o_default_user_group'].' WHERE id='.$user_id) or error('Unable to update user status', __FILE__, __LINE__, $db->error());
    $db->query('DELETE FROM '.$db->prefix.'online WHERE ident=\''.$db->escape(get_remote_address()).'\'') or error('Unable to delete from online list', __FILE__, __LINE__, $db->error());
    $expire = ($save_pass == '1') ? time() + 31536000 : 0;
    pun_setcookie($user_id, $form_password_hash, $expire);
   
    $tpl_temp = '<div id="brdwelcome" class="inbox">'."\n\t\t\t".'<ul class="conl">'."\n\t\t\t\t".'<li><strong>Connexion r&eacute;ussie !</strong></li>';
}
    elseif ($action == 'out')
    {
        log_out_user();
        //if ($pun_user['is_guest'] || !isset($_GET['id']) || $_GET['id'] != $pun_user['id'] || !isset($_GET['csrf_token']) || $_GET['csrf_token'] != pun_hash($pun_user['id'].pun_hash(get_remote_address())))
        //{
        //    header('Location: index.php');
        //    exit;
        //}
    // Remove user from "users online" list.
        $db->query('DELETE FROM '.$db->prefix.'online WHERE user_id='.$pun_user['id']) or error('Unable to delete from online list', __FILE__, __LINE__, $db->error());
    // Update last_visit (make sure there's something to update it with)
        if (isset($pun_user['logged']))
            $db->query('UPDATE '.$db->prefix.'users SET last_visit='.$pun_user['logged'].' WHERE id='.$pun_user['id']) or error('Unable to update user visit data', __FILE__, __LINE__, $db->error());
        pun_setcookie(1, md5(uniqid(rand(), true)), time() + 31536000);
//    redirect('index.php', $lang_login['Logout redirect']);
        $tpl_temp = '<div id="brdwelcome" class="inbox">'."\n\t\t\t".'<ul class="conl">'."\n\t\t\t\t".include('log.tpl');

    }
    if ($pun_user['g_id'] < PUN_GUEST)
    {
        $result_header = $db->query('SELECT COUNT(id) FROM '.$db->prefix.'reports WHERE zapped IS NULL') or error('Unable to fetch reports info', __FILE__, __LINE__, $db->error());
        if ($db->result($result_header))
            $tpl_temp .= "\n\t\t\t\t".'<li class="reportlink"><strong><a href="admin_reports.php">There are new reports</a></strong></li>';
        if ($pun_config['o_maintenance'] == '1')
            $tpl_temp .= "\n\t\t\t\t".'<li class="maintenancelink"><strong><a href="admin_options.php#maintenance">Maintenance mode is enabled!</a></strong></li>';
    }
    $num_new_mp = 0;
    if (!$pun_user['is_guest'] && $pun_user['g_pm'] == 1 && $pun_user['use_pm'] == 1 && $pun_config['o_pms_enabled'] == '1')
    {
        // Boxes status
        $mp_boxes_full = ($pun_user['total_pm'] >= $pun_user['g_pm_limit']) ? true : false;
        $mp_boxes_empty = ($pun_user['total_pm'] <= 0) ? true : false;
        if ($pun_user['g_pm_limit'] != 0 && $pun_user['g_id'] > PUN_GUEST)
        {   
            if ($mp_boxes_empty)
                $tpl_temp .= "\n\t\t\t\t".'<li>'.$lang_pms['Empty boxes'].'</li>';
            elseif ($mp_boxes_full)
                $tpl_temp .= "\n\t\t\t\t".'<li><a href="pms_list.php"><strong>'.$lang_pms['Full boxes'].'</strong></a></li>';
            else
            {
                $per_cent_box = ceil($pun_user['total_pm'] / $pun_user['g_pm_limit'] * 100);
                $tpl_temp .= "\n\t\t\t\t".'<li>'.sprintf($lang_pms['Full to'],$per_cent_box.'%').'</li>';
            }
        }
        // Check for new messages
        $result_messages = $db->query('SELECT COUNT(id) FROM '.$db->prefix.'messages WHERE showed=0 AND owner='.$pun_user['id']) or error('Impossible de vérifier la présence de nouveaux messages', __FILE__, __LINE__, $db->error());
        $num_new_mp = $db->result($result_messages);
            if ($num_new_mp > 0)
            $tpl_temp .= "\n\t\t\t\t".'<li class="pmlink"><a href="pms_list.php"><strong>'.($num_new_mp == 1 ? $lang_pms['New message'] : sprintf($lang_pms['New messages'],$num_new_mp)).'</strong></a></li>';       
    }
    echo("<a href=\"?action=out\">Se d&eacute;connecter</a>");
}
else
{
$tpl_temp = '<div id="brdwelcome" class="inbox">'."\n\t\t\t".'<ul class="conl">'.include('log.tpl');
$page_title = pun_htmlspecialchars($pun_config['o_board_title']).' / '.$lang_common['Login'];
$required_fields = array('req_username' => $lang_common['Username'], 'req_password' => $lang_common['Password']);
$focus_element = array('login', 'req_username');
}
printf($tpl_temp);
?>
</div></ul></ul>

Dernière modification par lily (2009-08-11 11:44:11)

Hors ligne

#11 2009-08-11 22:47:52

lily
Membre
2009-08-02
5

Re: lier les utilisateurs de piwigo et fluxbb

repiquer la fonction logout_user de piwigo et la coller dans mon index tout plein de code de fluxbb, je sais bien que ca ne peut pas marcher mais je suis bien incapable de trouver une solution.

est ce qu il y a un quelconque moyen d extraire la variable du cookie ?

ou est ce que sur les pages piwigo il est pas possible de mettre un fonction qui verifie si on est bien connecté en meme temps sur fluxbb, et dans le cas contraire deconnexion automatique de piwigo ? (du coup mon lien pour se deconnecter n agirait que sur fluxbb et la deco de piwigo se ferait ulterieurement, lorsqu on appelerait a nouveau une page de la galerie)

ou.... je sais pas je manque d idee !

quoique j essaye j ai toujours cette erreur
Warning: session_destroy() [function.session-destroy]: Trying to destroy uninitialized session

Dernière modification par lily (2009-08-11 22:53:49)

Hors ligne

#12 2009-08-13 14:58:14

P@t
Ex Equipe Piwigo
Nice
2007-06-13
5695

Re: lier les utilisateurs de piwigo et fluxbb

Pour déconnecter piwigo, il suffit de faire appel au webservice, comme pour le login (mais en plus simple, puisqu'il suffit d'une requete GET)

Il faudra donc simplement appeler l'URL suivante (avec une petite fonction javascript) lors de la déconnection:

http://monsite/piwigo/ws.php?method=pwg.session.logout

Dernière modification par P@t (2009-08-13 15:00:22)


P@t

Hors ligne

#13 2009-08-31 09:47:16

gegemac
Invité

Re: lier les utilisateurs de piwigo et fluxbb

Je poursuis cette discussion:
Comment on fait pour la fonction "rester connecté" marche pour les deux outils (piwigo et fluxbb) ?

  •  » Plugins
  •  » lier les utilisateurs de piwigo et fluxbb

Pied de page des forums

Propulsé par FluxBB

github twitter newsletter Faire un don Piwigo.org © 2002-2024 · Contact