Erreur 302 a la suprression de table

Bonjour,

Je développe actuellement un plugin de gestion d'arbre généalogique.

Je suis dans la phase création et destruction automatiques des tables utilisées
pas ce plugin.

J'ai donc créer un fichier base/genea_install.php où se trouve dedans le code
suivant :

function genea_efface_tables(){
  global $tables_genea;
  include_spip('base/genea_base');
  reset($tables_genea);
  $erreur="";
  while (list($key, $val) = each($tables_genea)) {
    spip_query("DROP TABLE IF EXISTS $val ");
    if (mysql_errno()) $erreur.= "<li>$val (" . mysql_errno() . ")</li>";
  }
  if ($erreur!='') {
    echo "<h3>"._T('genea:nom_plugin')."
:</h3><p>"._T('genea:desinstall_err')."<ul>".$erreur."</ul>"."</p>";
    die();
    return false;
  }else{
    echo "<h3>"._T('genea:nom_plugin')."
:</h3><p>"._T('genea:desinstall_ok')."</p>";
    effacer_meta('genea_version');
    ecrire_metas();
    return true;
  }
}

function genea_install($action){

  switch ($action) {

    // Test si les tables ont deja ete installees et elles sont de la bonne
version
    case 'test':
      return (isset($GLOBALS['meta']['genea_version']) AND
version_compare($GLOBALS['meta']['genea_version'],$GLOBALS['version_base_genea'],'='));
      break;

    // Si les tables necessaires n'existent pas, elles sont crees dans la base
    case 'install':
      return genea_upgrade_tables();
      break;

    // Permet la suppression propre des tables dans la base
    case 'uninstall' :
      return genea_efface_tables();
      break;
    default :
  }
}

/* rend disponible l'icone de désinstallation */
/* ca doit certainement permettre d'effacer les fichiers et autres */
function genea_uninstall(){
}

Le test se passe bien ainsi que la création des tables. J'ai un seul soucis,
lors de la suppression des tables, c'est qu'au de revenir à la page
d'administration des plugins j'ai une page affichant :

Genea-SPIP :
Désinstallation des tables SPIP-GENEA a réussie.

HTTP 302
Si votre navigateur n'est pas redirigé, cliquez ici pour continuer.

Il me faut cliquer sur la phrase "Si votre navigateur n'est pas redirigé,
cliquez ici pour continuer" pour revenir à la page d'administration des plugins.

Est-ce qu'une personne aurait une idée d'où j'aurais merdé ? Car là je ne
comprend plus grand chose.

Ma config est SPIP 1.9.2c [10268]. Je suis malheureusement en local pour les
tests et je ne peux donc pas vous donner de lien pour voir le soucis.

Je remercie par avance tout ceux qui tenteront de m'aider.

Cordialement,

Xavier BUROT
http://xebiaut.free.fr

Xavier BUROT wrote:

Bonjour,

Je développe actuellement un plugin de gestion d'arbre généalogique.

Je suis dans la phase création et destruction automatiques des tables utilisées
pas ce plugin.

J'ai donc créer un fichier base/genea_install.php où se trouve dedans le code
suivant :

function genea_efface_tables(){
  global $tables_genea;
  include_spip('base/genea_base');
  reset($tables_genea);
  $erreur="";
  while (list($key, $val) = each($tables_genea)) {
    spip_query("DROP TABLE IF EXISTS $val ");
    if (mysql_errno()) $erreur.= "<li>$val (" . mysql_errno() . ")</li>";
  }
  if ($erreur!='') {
    echo "<h3>"._T('genea:nom_plugin')."
:</h3><p>"._T('genea:desinstall_err')."<ul>".$erreur."</ul>"."</p>";
    die();
    return false;
  }else{
    echo "<h3>"._T('genea:nom_plugin')."
:</h3><p>"._T('genea:desinstall_ok')."</p>";
    effacer_meta('genea_version');
    ecrire_metas();
    return true;
  }
}

function genea_install($action){

  switch ($action) {

    // Test si les tables ont deja ete installees et elles sont de la bonne
version
    case 'test':
      return (isset($GLOBALS['meta']['genea_version']) AND
version_compare($GLOBALS['meta']['genea_version'],$GLOBALS['version_base_genea'],'='));
      break;

    // Si les tables necessaires n'existent pas, elles sont crees dans la base
    case 'install':
      return genea_upgrade_tables();
      break;

    // Permet la suppression propre des tables dans la base
    case 'uninstall' :
      return genea_efface_tables();
      break;
    default :
  }
}

/* rend disponible l'icone de désinstallation */
/* ca doit certainement permettre d'effacer les fichiers et autres */
function genea_uninstall(){
}

Le test se passe bien ainsi que la création des tables. J'ai un seul soucis,
lors de la suppression des tables, c'est qu'au de revenir à la page
d'administration des plugins j'ai une page affichant :

Genea-SPIP :
Désinstallation des tables SPIP-GENEA a réussie.

HTTP 302
Si votre navigateur n'est pas redirigé, cliquez ici pour continuer.

Il me faut cliquer sur la phrase "Si votre navigateur n'est pas redirigé,
cliquez ici pour continuer" pour revenir à la page d'administration des plugins.

Est-ce qu'une personne aurait une idée d'où j'aurais merdé ? Car là je ne
comprend plus grand chose.

Ma config est SPIP 1.9.2c [10268]. Je suis malheureusement en local pour les
tests et je ne peux donc pas vous donner de lien pour voir le soucis.

Je remercie par avance tout ceux qui tenteront de m'aider.

Cordialement,

Xavier BUROT
http://xebiaut.free.fr

La désinstallation fait un redirect automatique - avec header(redirect) - mais ce n'est pas possible si tu as déjà affiché quelque chose. Or lorsque tu appelles genea_efface_tables(), celle-ci ne doit rien afficher (donc pas de print ou echo) sinon tu aura automatiquement le message avec le code 302 (redirect).

Chryjs

PS: j'aime bien le commentaire sur la fonction uninstall :-))

Ok merci ca marche MAIS....

Comment fait-on pour transmettre un message à l'utilisateur pour lui confirmer
que tout s'est bien passé ?

Car c'est l'affichage de ce message qui provoquait l'erreur 302. Mais je tiens
un petit peu à celui-ci tout de même. Vous ne pensez pas qu'il est important
pour l'utilisateur de savoir que tout s'est bien déroulé ?

Xavier BUROT

Selon chryjs <chryjs@free.fr>:

Xavier BUROT wrote:
> Bonjour,
>
> Je développe actuellement un plugin de gestion d'arbre généalogique.
>
> Je suis dans la phase création et destruction automatiques des tables
utilisées
> pas ce plugin.
>
> J'ai donc créer un fichier base/genea_install.php où se trouve dedans le
code
> suivant :
> ===============
> function genea_efface_tables(){
> global $tables_genea;
> include_spip('base/genea_base');
> reset($tables_genea);
> $erreur="";
> while (list($key, $val) = each($tables_genea)) {
> spip_query("DROP TABLE IF EXISTS $val ");
> if (mysql_errno()) $erreur.= "<li>$val (" . mysql_errno() . ")</li>";
> }
> if ($erreur!='') {
> echo "<h3>"._T('genea:nom_plugin')."
> :</h3><p>"._T('genea:desinstall_err')."<ul>".$erreur."</ul>"."</p>";
> die();
> return false;
> }else{
> echo "<h3>"._T('genea:nom_plugin')."
> :</h3><p>"._T('genea:desinstall_ok')."</p>";
> effacer_meta('genea_version');
> ecrire_metas();
> return true;
> }
> }
>
> function genea_install($action){
>
> switch ($action) {
>
> // Test si les tables ont deja ete installees et elles sont de la bonne
> version
> case 'test':
> return (isset($GLOBALS['meta']['genea_version']) AND
>

version_compare($GLOBALS['meta']['genea_version'],$GLOBALS['version_base_genea'],'='));

> break;
>
> // Si les tables necessaires n'existent pas, elles sont crees dans la
base
> case 'install':
> return genea_upgrade_tables();
> break;
>
> // Permet la suppression propre des tables dans la base
> case 'uninstall' :
> return genea_efface_tables();
> break;
> default :
> }
> }
>
> /* rend disponible l'icone de désinstallation */
> /* ca doit certainement permettre d'effacer les fichiers et autres */
> function genea_uninstall(){
> }
> ===============
>
> Le test se passe bien ainsi que la création des tables. J'ai un seul
soucis,
> lors de la suppression des tables, c'est qu'au de revenir à la page
> d'administration des plugins j'ai une page affichant :
> ===============
> Genea-SPIP :
> Désinstallation des tables SPIP-GENEA a réussie.
>
> HTTP 302
> Si votre navigateur n'est pas redirigé, cliquez ici pour continuer.
> ===============
> Il me faut cliquer sur la phrase "Si votre navigateur n'est pas redirigé,
> cliquez ici pour continuer" pour revenir à la page d'administration des
plugins.
>
> Est-ce qu'une personne aurait une idée d'où j'aurais merdé ? Car là je ne
> comprend plus grand chose.
>
> Ma config est SPIP 1.9.2c [10268]. Je suis malheureusement en local pour
les
> tests et je ne peux donc pas vous donner de lien pour voir le soucis.
>
> Je remercie par avance tout ceux qui tenteront de m'aider.
>
> Cordialement,
>
> Xavier BUROT
> http://xebiaut.free.fr

La désinstallation fait un redirect automatique - avec header(redirect)
- mais ce n'est pas possible si tu as déjà affiché quelque chose. Or
lorsque tu appelles genea_efface_tables(), celle-ci ne doit rien
afficher (donc pas de print ou echo) sinon tu aura automatiquement le
message avec le code 302 (redirect).

Chryjs

PS: j'aime bien le commentaire sur la fonction uninstall :-))

_______________________________________________
liste spip
spip@rezo.net - désabonnement : spip-off@rezo.net
Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Documentation de SPIP : http://www.spip.net/
irc://irc.freenode.net/spip
FAQ : FAQ webmestre - SPIP

Xavier BUROT wrote:

Ok merci ca marche MAIS....

Comment fait-on pour transmettre un message à l'utilisateur pour lui confirmer
que tout s'est bien passé ?

Car c'est l'affichage de ce message qui provoquait l'erreur 302. Mais je tiens
un petit peu à celui-ci tout de même. Vous ne pensez pas qu'il est important
pour l'utilisateur de savoir que tout s'est bien déroulé ?

Xavier BUROT
http://xebiaut.free.fr

De mémoire, c'est dans le cas "test" (de ton genea_install) que tu peux faire cela : il me semble que test est visité après uninstall (à vérifier). Là tu peux faire une fonction qui vérifie ce que tu veux et en fonction du résultat tu affiches tes messages.

--Chryjs