Développement module: Difference between revisions

Jump to navigation Jump to search
m
no edit summary
mNo edit summary
Line 45: Line 45:
Créer un sous-répertoire '''sql''' dans le repertoire de votre module (par exemple '''htdocs/monmodule/sql''') afin d'y placer les scripts sql que vous aller créer.
Créer un sous-répertoire '''sql''' dans le repertoire de votre module (par exemple '''htdocs/monmodule/sql''') afin d'y placer les scripts sql que vous aller créer.
Ensuite, dans la fonction load_tables de votre fichier descripteur de module, modifier la ligne
Ensuite, dans la fonction load_tables de votre fichier descripteur de module, modifier la ligne
<pre>$dir = DOL_DOCUMENT_ROOT.'/mymodule/sql/';</pre>
<source lang="php">$dir = DOL_DOCUMENT_ROOT.'/mymodule/sql/';</source>
par
par
<pre>$dir = DOL_DOCUMENT_ROOT.'/monmodule/sql/';</pre>
<source lang="php">$dir = DOL_DOCUMENT_ROOT.'/monmodule/sql/';</source>


''Règles à respecter:''
''Règles à respecter:''
Line 68: Line 68:


Une fois votre ou vos tables créées en base, aller dans le répertoire '''dev/skeletons''' et lancez le script
Une fois votre ou vos tables créées en base, aller dans le répertoire '''dev/skeletons''' et lancez le script
<pre>php build_class_from_table.php nomtable</pre>
<source lang="bash">php build_class_from_table.php nomtable</source>
Remarque: Si la commande ne fonctionne pas, essayer d'utiliser php-cli plutot que php.
Remarque: Si la commande ne fonctionne pas, essayer d'utiliser php-cli plutot que php.


Line 81: Line 81:


Pour cela, aller dans le fichier descripteur de module précédemment créé et modifier le tableau $this->tabs:
Pour cela, aller dans le fichier descripteur de module précédemment créé et modifier le tableau $this->tabs:
<pre>
<source lang="php">
// Array to add new pages in new tabs
// Array to add new pages in new tabs
$this->tabs = array('product:ComposedProducts:@composition:/composition/show_composition.php?id=__ID__');
$this->tabs = array('product:ComposedProducts:@composition:/composition/show_composition.php?id=__ID__');
Line 94: Line 94:
// 'propal'          to add a tab in propal view
// 'propal'          to add a tab in propal view
// 'member'          to add a tab in fundation member view
// 'member'          to add a tab in fundation member view
</pre>
</source>


Le tableau doit contenir une liste de chaine, chaque chaine représentant un nouvel onglet.
Le tableau doit contenir une liste de chaine, chaque chaine représentant un nouvel onglet.
Line 124: Line 124:
Y recopier le fichier '''skeletons_page.php''' qui va servir de point de départ à votre page ainsi que le fichier '''pre.inc.php'''.
Y recopier le fichier '''skeletons_page.php''' qui va servir de point de départ à votre page ainsi que le fichier '''pre.inc.php'''.
Modifier le fichier '''pre.inc.php''' afin que le chemin relatif du
Modifier le fichier '''pre.inc.php''' afin que le chemin relatif du
<pre>
<source lang="php">
include("../../main.inc.php)";
include("../../main.inc.php)";
</pre>
</source>
soit correct, en fonction de la profondeur de répertoire dans laquelle se trouve le fichier '''pre.inc.php''' (Enlever ou supprimer des "../").
soit correct, en fonction de la profondeur de répertoire dans laquelle se trouve le fichier '''pre.inc.php''' (Enlever ou supprimer des "../").
C'est dans le main qu'est chargé l'environnement technique ainsi que les habilitations. Les variables objets suivantes sont alors positionnées:
C'est dans le main qu'est chargé l'environnement technique ainsi que les habilitations. Les variables objets suivantes sont alors positionnées:
Line 140: Line 140:
=== Compléter votre descripteur de module ===
=== Compléter votre descripteur de module ===
Dans votre descripteur de module, compléter la déclaration du tableau this->const afin d'ajouter la constante MAIN_MODULE_monmodule_NEEDSMARTY.
Dans votre descripteur de module, compléter la déclaration du tableau this->const afin d'ajouter la constante MAIN_MODULE_monmodule_NEEDSMARTY.
<pre>
<source lang="php">
$this->const=array(1=>array('MAIN_MODULE_MONMODULE_NEEDSMARTY','chaine',1,'Need smarty',0));
$this->const=array(1=>array('MAIN_MODULE_MONMODULE_NEEDSMARTY','chaine',1,'Need smarty',0));
</pre>
</source>


Ceci aura pour effet, lors de l'initialisation de l'objet $conf, de remplir le tableau $conf->need_smarty des modules qui ont besoin de smarty et si au moins un module est requis, le code dans main.inc.php chargera systématiquement les librairies de Smarty.
Ceci aura pour effet, lors de l'initialisation de l'objet $conf, de remplir le tableau $conf->need_smarty des modules qui ont besoin de smarty et si au moins un module est requis, le code dans main.inc.php chargera systématiquement les librairies de Smarty.
Line 156: Line 156:
Pour un insert, update ou delete:
Pour un insert, update ou delete:


<pre>
<source lang="php">
$db->begin();  // Debut transaction
$db->begin();  // Debut transaction
$db->query("Ma requete insert, update ou delete");
$db->query("Ma requete insert, update ou delete");
$db->commit();      // Valide
$db->commit();      // Valide
ou $db->rollback()  // Annule
ou $db->rollback()  // Annule
</pre>
</source>


Pour une lecture:
Pour une lecture:


<pre>
<source lang="php">
$resql=$db->query("Ma requete select");
$resql=$db->query("Ma requete select");
if ($resql)
if ($resql)
Line 186: Line 186:
}
}
}
}
</pre>
</source>


== Définition du style ==
== Définition du style ==
Line 202: Line 202:


Si vous le désirez, vous pouvez profiter du sélecteur de date dans des écrans Dolibarr. Pour cela, utilisez la ligne suivante:
Si vous le désirez, vous pouvez profiter du sélecteur de date dans des écrans Dolibarr. Pour cela, utilisez la ligne suivante:
<pre>
<source lang="php">
$form=new Form($db);
$form=new Form($db);
$form->select_date('','mykey',0,0,0,"myform");
$form->select_date('','mykey',0,0,0,"myform");
</pre>
</source>
La chaine mykey identifie la zone date. Il faut y mettre une valeur différente s'il y a plusieurs zones.
La chaine mykey identifie la zone date. Il faut y mettre une valeur différente s'il y a plusieurs zones.
La chaine myform est le nom de la zone FORM (dans form name="myform" de la page HTML).
La chaine myform est le nom de la zone FORM (dans form name="myform" de la page HTML).
Line 211: Line 211:


Pour récupérer la valeur, à l'issu du POST, la commande est:
Pour récupérer la valeur, à l'issu du POST, la commande est:
<pre>
<source lang="php">
$mydate = dol_mktime(12, 0 , 0, $_POST['mykeymonth'], $_POST['mykeyday'], $_POST['mykeyyear']);
$mydate = dol_mktime(12, 0 , 0, $_POST['mykeymonth'], $_POST['mykeyday'], $_POST['mykeyyear']);
print strftime('%A %d %B %Y', $mydate);
print strftime('%A %d %B %Y', $mydate);
</pre>
</source>


= [[File:Art.png]] Définir votre page de configuration (optionnel)  =
= [[File:Art.png]] Définir votre page de configuration (optionnel)  =
Line 225: Line 225:
Placer cette page de configuration dans le répertoire '''/admin''' également.
Placer cette page de configuration dans le répertoire '''/admin''' également.
Ensuite dans le descripteur de module, modifier la variable pour indiquer le nom de cette page PHP (sans le chemin qui n'est pas nécessaire, la page étant forcément dans le rep admin).
Ensuite dans le descripteur de module, modifier la variable pour indiquer le nom de cette page PHP (sans le chemin qui n'est pas nécessaire, la page étant forcément dans le rep admin).
<pre>
<source lang="php">
$this->config_page_url = array("monmodule_setupapage.php");
$this->config_page_url = array("monmodule_setupapage.php");
</pre>
</source>


== Tester votre page ==
== Tester votre page ==
Line 241: Line 241:


Voici un exemple de déclaration d'entrées de menu dans le fichier descripteur:
Voici un exemple de déclaration d'entrées de menu dans le fichier descripteur:
<pre>
<source lang="php">
// Main menu entries
// Main menu entries
$this->menu = array(); // List of menus to add
$this->menu = array(); // List of menus to add
Line 275: Line 275:
'user'=>2); // 0=Menu for internal users,1=external users, 2=both
'user'=>2); // 0=Menu for internal users,1=external users, 2=both
$r++;
$r++;
</pre>
</source>


Pour conditionner l'accès au menu selon des permission, modifier la propriété '''perms''' du tableau. Voir le chapitre sur le permission un peu plus loin pour savoir comment ajouter des permissions.
Pour conditionner l'accès au menu selon des permission, modifier la propriété '''perms''' du tableau. Voir le chapitre sur le permission un peu plus loin pour savoir comment ajouter des permissions.
Line 287: Line 287:
La définition des permissions que gèrera votre module se fait dans le fichier descripteur créé dans la première étape.
La définition des permissions que gèrera votre module se fait dans le fichier descripteur créé dans la première étape.
Modifier la ligne $this->rights_class = 'facture' par
Modifier la ligne $this->rights_class = 'facture' par
<pre>
<source lang="php">
$this->rights_class = 'monmodule'
$this->rights_class = 'monmodule'
</pre>
</source>


Ensuite remplissez le tableau $this->rights avec autant d'entrée que de permissions différentes à gérer.
Ensuite remplissez le tableau $this->rights avec autant d'entrée que de permissions différentes à gérer.


<pre>
<source lang="php">
$this->rights[$r][0] = 10001;
$this->rights[$r][0] = 10001;
$this->rights[$r][1] = 'Libelle par défaut de ma permission';
$this->rights[$r][1] = 'Libelle par défaut de ma permission';
Line 300: Line 300:
$this->rights[$r][5] = 'sousaction';
$this->rights[$r][5] = 'sousaction';
$r++;
$r++;
</pre>
</source>


Dans $this->rights[$r][0], mettre un id de permission non déjà pris (Voir dans le menu '''Infos Système''' sur une installation de Dolibarr opérationnelle pour connaitre les id déjà utilisés.
Dans $this->rights[$r][0], mettre un id de permission non déjà pris (Voir dans le menu '''Infos Système''' sur une installation de Dolibarr opérationnelle pour connaitre les id déjà utilisés.
Line 307: Line 307:
Dans $this->rights[$r][4] et $this->rights[$r][5], mettre une chaine action et sousaction sans espaces. Vous pourrez alors tester dans le code PHP si un utilisateurs a bien les droits par la séquence suivante:
Dans $this->rights[$r][4] et $this->rights[$r][5], mettre une chaine action et sousaction sans espaces. Vous pourrez alors tester dans le code PHP si un utilisateurs a bien les droits par la séquence suivante:


<pre>
<source lang="php">
if ($user->rights->monmodule->action->sousaction) ...
if ($user->rights->monmodule->action->sousaction) ...
</pre>
</source>


= [[File:Art.png]] Définir vos propres box (optionnel) =
= [[File:Art.png]] Définir vos propres box (optionnel) =
Line 319: Line 319:


''Exemple:''
''Exemple:''
<pre>
<source lang="php">
this->boxes[0][1]='mabox0.php'
this->boxes[0][1]='mabox0.php'
this->boxes[1][1]='mabox1.php'
this->boxes[1][1]='mabox1.php'
Line 325: Line 325:
...
...
this->boxes[n][1]='maboxn.php'
this->boxes[n][1]='maboxn.php'
</pre>
</source>


Ensuite creer les fichiers mabox0.php, mabox1.php... en prenant exemple sur des box existantes (dans le répertoire htdocs/include/boxes
Ensuite creer les fichiers mabox0.php, mabox1.php... en prenant exemple sur des box existantes (dans le répertoire htdocs/include/boxes
Line 381: Line 381:


* Lancer le script via Perl (besoin de la version Perl 5.0 ou +):
* Lancer le script via Perl (besoin de la version Perl 5.0 ou +):
<pre>
<source lang="bash">
perl makepack-dolibarrmodule.pl
perl makepack-dolibarrmodule.pl
</pre>
</source>
Le script vous demande le nom de votre module, sa version majeure et mineure.
Le script vous demande le nom de votre module, sa version majeure et mineure.
Un fichier '''monmodule.tgz''' va alors être fabriqué contenant votre module prêt pour être déployé.
Un fichier '''monmodule.tgz''' va alors être fabriqué contenant votre module prêt pour être déployé.


* La personne qui reçoit votre module doit alors placer le fichier dans son répertoire racine d'installation de Dolibarr et réaliser la commande:
* La personne qui reçoit votre module doit alors placer le fichier dans son répertoire racine d'installation de Dolibarr et réaliser la commande:
<pre>
<source lang="bash">
tar -xvf monmodule.tgz
tar -xvf monmodule.tgz
</pre>
</source>


* Si vous désirez que votre module profite à tous, vous pouvez le soumettre (le fichier tgz) sur le site web de Dolibarr dans la section téléchargements: http://www.dolibarr.org -> downloads -> contrib -> submit a file (vous devez avoir créer un compte auparavant et être loggué pour que le lien apparaisse).
* Si vous désirez que votre module profite à tous, vous pouvez le soumettre (le fichier tgz) sur le site web de Dolibarr dans la section téléchargements: http://www.dolibarr.org -> downloads -> contrib -> submit a file (vous devez avoir créer un compte auparavant et être loggué pour que le lien apparaisse).

Navigation menu