Pages: 1
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()
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 :
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 ?
Hors ligne
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
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 ?
Hors ligne
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
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.
Hors ligne
As-tu mis
global $prefixeTable;
dans la fonction?
Tu peux aussi te créer un constants.php mais pour ton projet.
Appel par
include_once(dirname(__FILE__).'/'.'constants.php');
par exemple
Hors ligne
Je n'y avais pas pensé le coups de la global, c'est parfait ça marche, merci.
Hors ligne
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
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
Hors ligne
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
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.
<?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 :
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.
Hors ligne
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-)
Hors ligne
Pages: 1