#1 2007-02-19 11:40:17

flipflip
Membre
Lyon
2005-03-19
2316

[1.7.0RC1]Gestionnaire de plugin-création de table à l'installation

Salut, je suis en train de maltraité le nouveau système de gestion de plugin, qui au passage je trouve super pratique, sauf que je rencontre un problème. Lors de l'installation d'un plugin je dois créer une table. Dans le fichier main.inc.php de mon plugin j'ai modifié la fonction load_config()

Code:

    function load_config()
    {
        $x = @file_get_contents( dirname(__FILE__).'/data.dat' );
        if ($x!==false)
        {
            $c = unserialize($x);
            // do some more tests here
            $this->my_config = $c;
        }

        if ( !isset($this->my_config)
            or empty($this->my_config['rep_pwg']) )
        {
            $this->my_config['rep_pwg'] = 'base_photos/dev/1.7/';
            $this->my_config['comment'] = '';
            $this->my_config['group_id'] = 1;
            $this->my_config['archive_size'] = 3145728;
            $this->my_config['prefix'] = 'photos_';
            $this->my_config['prefix_dir'] = 'hilaire';
            $this->my_config['active_msg'] = true;
            $this->my_config['install'] = false;
            $this->save_config();

            if($this->my_config['install'] == false)
            {
                $query = '
                    DROP TABLE IF EXISTS `'.$prefixeTable.'_download_multi`;
                    CREATE TABLE `'.$prefixeTable.'_download_multi` (
                        `id_image` mediumint(8) NOT NULL default \'0\',
                        `id_user` smallint(5) NOT NULL default \'0\',
                        `type` enum(\'t\',\'n\',\'h\') NOT NULL default \'t\',
                        `filesize` int(10) unsigned NOT NULL default \'0\',
                        UNIQUE KEY `Index_1` (`id_image`,`id_user`,`type`)
                    ) ENGINE=MyISAM COMMENT=\'Gestion des telechargement sur plusieurs pages\';';

                pwg_query($query);
            }
        }
    }

Malheureusement j'obtient l'erreur suivante :

Code:

DROP TABLE IF EXISTS `_download_multi`;
    CREATE TABLE `_download_multi` (
        `id_image` mediumint(8) NOT NULL default '0',
        `id_user` smallint(5) NOT NULL default '0',
        `type` enum('t','n','h') NOT NULL default 't',
        `filesize` int(10) unsigned NOT NULL default '0',
    UNIQUE KEY `Index_1` (`id_image`,`id_user`,`type`)
    ) ENGINE=MyISAM COMMENT='Gestion des telechargement sur plusieurs pages';
[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 ';
                    CREATE TABLE `_download_multi` (
                       ' at line 1

L'erreur est normal puisque la variable $prefixeTable n'est pas accessible à partir de cette endroit ou alors je ne sais pas comment la récupérer. Est-ce que vous avec une idée ?


Le cerveau à des capacités tellement étonnantes qu’aujourd’hui pratiquement tout le monde en à un

Mon site : http://www.blogoflip.fr

Hors ligne

#2 2007-02-19 12:51:43

rub
Former Piwigo Team
Lille
2005-08-26
5239

Re: [1.7.0RC1]Gestionnaire de plugin-création de table à l'installation

Sans vraiment t'aider sur sur ton problème, il faut savoir que si tu crées un fichier maintain.inc.php dans ton plugin, tu peux définir les fonctions plugin_install, plugin_activate, plugin_deactivate, plugin_uninstall qui sont appelés sur les actions des plugins correspondants.

Hors ligne

#3 2007-02-19 13:20:01

flipflip
Membre
Lyon
2005-03-19
2316

Re: [1.7.0RC1]Gestionnaire de plugin-création de table à l'installation

haha tu m'intéresse là. Je test.

P.S. : est-ce qu'il y a une documentation en cours de rédaction sur les plugs car je pourrais profité des ces tests pour en rédiger une ?


Le cerveau à des capacités tellement étonnantes qu’aujourd’hui pratiquement tout le monde en à un

Mon site : http://www.blogoflip.fr

Hors ligne

#4 2007-02-19 13:30:15

rub
Former Piwigo Team
Lille
2005-08-26
5239

Re: [1.7.0RC1]Gestionnaire de plugin-création de table à l'installation

flipflip a écrit:

P.S. : est-ce qu'il y a une documentation en cours de rédaction sur les plugs car je pourrais profité des ces tests pour en rédiger une ?

Ici mais, il n'y pas tout à qu'il me semble (a vérifier ou à confirmer)

Hors ligne

#5 2007-02-19 14:01:33

flipflip
Membre
Lyon
2005-03-19
2316

Re: [1.7.0RC1]Gestionnaire de plugin-création de table à l'installation

C'est parfait ça marche plugin_install et plugin_uninstall. Reste plus qu'a trouver une solution pour atteindre $prefixTable. Si on créé une constant dans le fichier include/constants.php ?

Dommage pour la doc qu'elle soit en anglais :( Mais je vais voir ce que je peux faire.


Le cerveau à des capacités tellement étonnantes qu’aujourd’hui pratiquement tout le monde en à un

Mon site : http://www.blogoflip.fr

Hors ligne

#6 2007-02-19 14:22:54

rub
Former Piwigo Team
Lille
2005-08-26
5239

Re: [1.7.0RC1]Gestionnaire de plugin-création de table à l'installation

As-tu mis

Code:

global $prefixeTable;

dans la fonction?

Tu peux aussi te créer un constants.php mais pour ton projet.
Appel par

Code:

include_once(dirname(__FILE__).'/'.'constants.php');

par exemple

Hors ligne

#7 2007-02-19 14:34:01

flipflip
Membre
Lyon
2005-03-19
2316

Re: [1.7.0RC1]Gestionnaire de plugin-création de table à l'installation

Je n'y avais pas pensé le coups de la global, c'est parfait ça marche, merci.


Le cerveau à des capacités tellement étonnantes qu’aujourd’hui pratiquement tout le monde en à un

Mon site : http://www.blogoflip.fr

Hors ligne

#8 2007-02-19 18:16:12

rub
Former Piwigo Team
Lille
2005-08-26
5239

Re: [1.7.0RC1]Gestionnaire de plugin-création de table à l'installation

flipflip a écrit:

Dommage pour la doc qu'elle soit en anglais :( Mais je vais voir ce que je peux faire.

C'est l'occasion de la transcrire en Français ;-)

Hors ligne

#9 2007-02-19 18:50:34

flipflip
Membre
Lyon
2005-03-19
2316

Re: [1.7.0RC1]Gestionnaire de plugin-création de table à l'installation

J'ai commencé sur mon wiki perso histoire de pas poluer l'officiel. Pour le moment je suis loin de maitriser les subtilités des plugins mais ca peut être une base : http://flipflip.ovh.org/wiki/doku.php?id=plugin


Le cerveau à des capacités tellement étonnantes qu’aujourd’hui pratiquement tout le monde en à un

Mon site : http://www.blogoflip.fr

Hors ligne

#10 2007-04-10 18:14:58

gbo
Membre
PACA
2006-11-01
1214

Re: [1.7.0RC1]Gestionnaire de plugin-création de table à l'installation

fliflip,
Sur ton wiki, tu as bien documenté la gestion du fichier de configuration, bravo et merci.
Pour continuer mon draft sur la gestion des news et pour que d’autres puissent faire de même, j'ai besoin de créer :
- Des variables de configuration. C’est OK avec ton exemple.
- De créer des tables à l'activation du plugin. As tu un exemple de fichier maintain.inc.php?
(Si possible avec la gestion des erreurs si on active 2 fois le plugin sans avoir supprimé les tables)

- D'ajouter des variables dans constant.php ou en spécifique au plugin (dans ce cas comment l'incorporer au reste du code).

Est ce qu’a la désinstallation du plugin, tu proposes de supprimer les tables qui ont été crées à l’activation?

Hors ligne

#11 2007-05-03 15:11:05

flipflip
Membre
Lyon
2005-03-19
2316

Re: [1.7.0RC1]Gestionnaire de plugin-création de table à l'installation

Salut, désolé pour le temps de réponse j'arrive un peu à sortir la tête de l'eau en ce moment au taff. Donc voila le fichier maintain.inc.php que j'utilise.

Code:

<?php
function plugin_install()
{
    global $prefixeTable;
    $query = '
        CREATE TABLE `'.$prefixeTable.'download_multi`(
            `id_image` mediumint(8) NOT NULL default \'0\',
            `id_user` smallint(5) NOT NULL default \'0\',
            `type` enum(\'t\',\'n\',\'h\') NOT NULL default \'t\',
            `filesize` int(10) unsigned NOT NULL default \'0\',
            UNIQUE KEY Index_1 (`id_image`,`id_user`,`type`)
        ) ENGINE=MyISAM COMMENT=\'Gestion des telechargement sur plusieurs pages\';
    ';
    pwg_query($query);
}

function plugin_uninstall()
{
    global $prefixeTable;
    $query = 'DROP TABLE IF EXISTS `'.$prefixeTable.'download_multi`;';
    pwg_query($query);
}
?>

Je pense que la fonction plugin_install() peut être modifier pour ajouter un contrôle avec MySQL dans le genre :

Code:

function plugin_install()
{
    global $prefixeTable;
    $query = '
        CREATE TABLE `'.$prefixeTable.'download_multi` IF NOT EXISTS (
            `id_image` mediumint(8) NOT NULL default \'0\',
            `id_user` smallint(5) NOT NULL default \'0\',
            `type` enum(\'t\',\'n\',\'h\') NOT NULL default \'t\',
            `filesize` int(10) unsigned NOT NULL default \'0\',
            UNIQUE KEY Index_1 (`id_image`,`id_user`,`type`)
        ) ENGINE=MyISAM COMMENT=\'Gestion des telechargement sur plusieurs pages\';
    ';
    pwg_query($query);
}

Bien sur la deuxième fonction est pour la désinstallation du plugin. D'ailleurs j'y pense, si le plugin est bien conçu il n'y a pas besoin de faire un contrôle sur l'existance d'une table puisqu'a la désinstallation elle a été supprimé par la fonction plugin_uninstall(), mais dans le doute...

- D'ajouter des variables dans constant.php ou en spécifique au plugin (dans ce cas comment l'incorporer au reste du code).

Ajouter une valeurs dans constant.php est un peu à l'opposer du nouveau système de plugin ou l'utilisateur final ne doit pas toucher au noyau de PhpWebGallery. Le mieux est je pense de créer un paramètre modifiable ou non dans l'administration du plugin.


Le cerveau à des capacités tellement étonnantes qu’aujourd’hui pratiquement tout le monde en à un

Mon site : http://www.blogoflip.fr

Hors ligne

#12 2007-05-03 15:30:21

VDigital
Former Piwigo Team
Montpellier (FR)
2005-05-04
15127

Re: [1.7.0RC1]Gestionnaire de plugin-création de table à l'installation

100% d'accord.

Juste une remarque:

flipflip a écrit:

D'ailleurs j'y pense, si le plugin est bien conçu il n'y a pas besoin de faire un contrôle sur l'existance d'une table puisqu'a la désinstallation elle a été supprimé par la fonction plugin_uninstall(), mais dans le doute...

Tu as en plus raison de douter. La technique de supprimer/renommer le répertoire de Plugin pour le déactiver, rend impossible l'appel de la procédure d'uninstall.
Plugin qui peut ultérieurement ré-installé. D'où les cas où les tables existent. D'où le "IF NOT EXISTS" qui est indispensable à mon sens.

(A confirmer par rvelices).

8-)


Vincent -« Plus vidéaste averti que photographe amateur... »
La galerie - Le blog   

Piwigo est une application libre de gestion de photos en ligne.

Hors ligne

Pied de page des forums

Propulsé par FluxBB

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