diff --git a/htdocs/langs/en_US/modulebuilder.lang b/htdocs/langs/en_US/modulebuilder.lang
index 8e406d34c0f..845dd12624d 100644
--- a/htdocs/langs/en_US/modulebuilder.lang
+++ b/htdocs/langs/en_US/modulebuilder.lang
@@ -40,6 +40,7 @@ PageForCreateEditView=PHP page to create/edit/view a record
PageForAgendaTab=PHP page for event tab
PageForDocumentTab=PHP page for document tab
PageForNoteTab=PHP page for note tab
+PageForContactTab=PHP page for contact tab
PathToModulePackage=Path to zip of module/application package
PathToModuleDocumentation=Path to file of module/application documentation (%s)
SpaceOrSpecialCharAreNotAllowed=Spaces or special characters are not allowed.
@@ -139,4 +140,4 @@ TypeOfFieldsHelp=Type of fields:
varchar(99), double(24,8), real, text, html,
AsciiToHtmlConverter=Ascii to HTML converter
AsciiToPdfConverter=Ascii to PDF converter
TableNotEmptyDropCanceled=Table not empty. Drop has been canceled.
-ModuleBuilderNotAllowed=The module builder is enabled but not allowed to your user.
\ No newline at end of file
+ModuleBuilderNotAllowed=The module builder is available but not allowed to your user.
diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php
index 01e51e5e96f..5c3fd8ee46b 100644
--- a/htdocs/main.inc.php
+++ b/htdocs/main.inc.php
@@ -1125,20 +1125,20 @@ if (!function_exists("llxHeader"))
/**
* Show HTML header HTML + BODY + Top menu + left menu + DIV
*
- * @param string $head Optionnal head lines
- * @param string $title HTML title
- * @param string $help_url Url links to help page
- * Syntax is: For a wiki page: EN:EnglishPage|FR:FrenchPage|ES:SpanishPage
- * For other external page: http://server/url
- * @param string $target Target to use on links
- * @param int $disablejs More content into html header
- * @param int $disablehead More content into html header
- * @param array $arrayofjs Array of complementary js files
- * @param array $arrayofcss Array of complementary css files
- * @param string $morequerystring Query string to add to the link "print" to get same parameters (use only if autodetect fails)
- * @param string $morecssonbody More CSS on body tag.
- * @param string $replacemainareaby Replace call to main_area() by a print of this string
- * @param int $disablenofollow Disable the "nofollow" on page
+ * @param string $head Optionnal head lines
+ * @param string $title HTML title
+ * @param string $help_url Url links to help page
+ * Syntax is: For a wiki page: EN:EnglishPage|FR:FrenchPage|ES:SpanishPage
+ * For other external page: http://server/url
+ * @param string $target Target to use on links
+ * @param int $disablejs More content into html header
+ * @param int $disablehead More content into html header
+ * @param array|string $arrayofjs Array of complementary js files
+ * @param array|string $arrayofcss Array of complementary css files
+ * @param string $morequerystring Query string to add to the link "print" to get same parameters (use only if autodetect fails)
+ * @param string $morecssonbody More CSS on body tag. For example 'classforhorizontalscrolloftabs'.
+ * @param string $replacemainareaby Replace call to main_area() by a print of this string
+ * @param int $disablenofollow Disable the "nofollow" on page
* @return void
*/
function llxHeader($head = '', $title = '', $help_url = '', $target = '', $disablejs = 0, $disablehead = 0, $arrayofjs = '', $arrayofcss = '', $morequerystring = '', $morecssonbody = '', $replacemainareaby = '', $disablenofollow = 0)
diff --git a/htdocs/modulebuilder/index.php b/htdocs/modulebuilder/index.php
index ce5cadf9c35..f3922aa6342 100644
--- a/htdocs/modulebuilder/index.php
+++ b/htdocs/modulebuilder/index.php
@@ -226,12 +226,15 @@ if ($dirins && $action == 'initmodule' && $modulename)
// Delete dir and files that can be generated in sub tabs later if we need them (we want a minimal module first)
dol_delete_dir_recursive($destdir.'/build/doxygen');
dol_delete_dir_recursive($destdir.'/core/modules/mailings');
+ dol_delete_dir_recursive($destdir.'/core/modules/'.strtolower($modulename).'');
dol_delete_dir_recursive($destdir.'/core/tpl');
dol_delete_dir_recursive($destdir.'/core/triggers');
dol_delete_dir_recursive($destdir.'/doc');
dol_delete_dir_recursive($destdir.'/.tx');
dol_delete_dir_recursive($destdir.'/core/boxes');
+ dol_delete_file($destdir.'/admin/myobject_extrafields.php');
+
dol_delete_file($destdir.'/sql/data.sql');
dol_delete_file($destdir.'/sql/update_x.x.x-y.y.y.sql');
@@ -902,9 +905,11 @@ if ($dirins && $action == 'initobject' && $module && $objectname)
$filetogenerate = array(
'myobject_card.php'=>strtolower($objectname).'_card.php',
'myobject_note.php'=>strtolower($objectname).'_note.php',
+ 'myobject_contact.php'=>strtolower($objectname).'_contact.php',
'myobject_document.php'=>strtolower($objectname).'_document.php',
'myobject_agenda.php'=>strtolower($objectname).'_agenda.php',
'myobject_list.php'=>strtolower($objectname).'_list.php',
+ 'admin/myobject_extrafields.php'=>'admin/'.strtolower($objectname).'_extrafields.php',
'lib/mymodule_myobject.lib.php'=>'lib/'.strtolower($module).'_'.strtolower($objectname).'.lib.php',
//'test/phpunit/MyObjectTest.php'=>'test/phpunit/'.strtolower($objectname).'Test.php',
'sql/llx_mymodule_myobject.sql'=>'sql/llx_'.strtolower($module).'_'.strtolower($objectname).'.sql',
@@ -1332,9 +1337,11 @@ if ($dirins && $action == 'confirm_deleteobject' && $objectname)
$filetodelete = array(
'myobject_card.php'=>strtolower($objectname).'_card.php',
'myobject_note.php'=>strtolower($objectname).'_note.php',
+ 'myobject_contact.php'=>strtolower($objectname).'_contact.php',
'myobject_document.php'=>strtolower($objectname).'_document.php',
'myobject_agenda.php'=>strtolower($objectname).'_agenda.php',
'myobject_list.php'=>strtolower($objectname).'_list.php',
+ 'admin/myobject_extrafields.php'=>'admin/'.strtolower($objectname).'_extrafields.php',
'lib/mymodule_myobject.lib.php'=>'lib/'.strtolower($module).'_'.strtolower($objectname).'.lib.php',
'test/phpunit/MyObjectTest.php'=>'test/phpunit/'.strtolower($objectname).'Test.php',
'sql/llx_mymodule_myobject.sql'=>'sql/llx_'.strtolower($module).'_'.strtolower($objectname).'.sql',
@@ -1772,7 +1779,7 @@ if ($module == 'initmodule')
print $langs->trans("EnterNameOfModuleToDeleteDesc").'
';
print '';
- print '';
+ print '';
print '';
} elseif (!empty($module)) {
// Tabs for module
@@ -2309,7 +2316,7 @@ if ($module == 'initmodule')
print $langs->trans("EnterNameOfObjectToDeleteDesc").'
';
print '';
- print '';
+ print '';
print '';
} else {
// tabobj = module
@@ -2336,6 +2343,7 @@ if ($module == 'initmodule')
$pathtodocument = strtolower($module).'/'.strtolower($tabobj).'_document.php';
$pathtolist = strtolower($module).'/'.strtolower($tabobj).'_list.php';
$pathtonote = strtolower($module).'/'.strtolower($tabobj).'_note.php';
+ $pathtocontact = strtolower($module).'/'.strtolower($tabobj).'_contact.php';
$pathtophpunit = strtolower($module).'/test/phpunit/'.strtolower($tabobj).'Test.php';
$pathtosql = strtolower($module).'/sql/llx_'.strtolower($module).'_'.strtolower($tabobj).'.sql';
$pathtosqlextra = strtolower($module).'/sql/llx_'.strtolower($module).'_'.strtolower($tabobj).'_extrafields.sql';
@@ -2354,6 +2362,7 @@ if ($module == 'initmodule')
$realpathtodocument = $dirread.'/'.$pathtodocument;
$realpathtolist = $dirread.'/'.$pathtolist;
$realpathtonote = $dirread.'/'.$pathtonote;
+ $realpathtocontact = $dirread.'/'.$pathtocontact;
$realpathtophpunit = $dirread.'/'.$pathtophpunit;
$realpathtosql = $dirread.'/'.$pathtosql;
$realpathtosqlextra = $dirread.'/'.$pathtosqlextra;
@@ -2377,8 +2386,7 @@ if ($module == 'initmodule')
print ' '.img_picto($langs->trans("Edit"), 'edit').'';
print '
';
print ' '.$langs->trans("ApiClassFile").' : '.($realpathtoapi ? '' : '').$pathtoapi.($realpathtoapi ? '' : '').'';
- if ($realpathtoapi)
- {
+ if (dol_is_file($realpathtoapi)) {
print ' '.img_picto($langs->trans("Edit"), 'edit').'';
print ' ';
print ''.img_picto($langs->trans("Delete"), 'delete').'';
@@ -2391,20 +2399,18 @@ if ($module == 'initmodule')
}
} else {
//print ''.$langs->trans("FileNotYetGenerated").' ';
- print '';
+ print '';
}
// PHPUnit
print '
';
print ' '.$langs->trans("TestClassFile").' : '.($realpathtophpunit ? '' : '').$pathtophpunit.($realpathtophpunit ? '' : '').'';
-
- if ($realpathtophpunit)
- {
+ if (dol_is_file($realpathtophpunit)) {
print ' '.img_picto($langs->trans("Edit"), 'edit').'';
print ' ';
print ''.img_picto($langs->trans("Delete"), 'delete').'';
} else {
//print ''.$langs->trans("FileNotYetGenerated").' ';
- print '';
+ print '';
}
print '
';
@@ -2431,24 +2437,24 @@ if ($module == 'initmodule')
//print ' '.$langs->trans("RunSql").'';
print '
';
print ' '.$langs->trans("SqlFileExtraFields").' : '.($realpathtosqlextra ? '' : '').$pathtosqlextra.($realpathtosqlextra ? '' : '').'';
- if ($realpathtosqlextra)
- {
+ if (dol_is_file($realpathtosqlextra) && dol_is_file($realpathtosqlextrakey)) {
print ' '.img_picto($langs->trans("Edit"), 'edit').'';
print ' ';
print ''.img_picto($langs->trans("Delete"), 'delete').'';
print ' ';
print ''.$langs->trans("DropTableIfEmpty").'';
} else {
- print '';
+ print '';
}
//print ' '.$langs->trans("RunSql").'';
print '
';
print ' '.$langs->trans("SqlFileKeyExtraFields").' : '.($realpathtosqlextrakey ? '' : '').$pathtosqlextrakey.($realpathtosqlextrakey ? '' : '').'';
- if ($realpathtosqlextrakey)
- {
+ if (dol_is_file($realpathtosqlextra) && dol_is_file($realpathtosqlextrakey)) {
print ' '.img_picto($langs->trans("Edit"), 'edit').'';
print ' ';
print ''.img_picto($langs->trans("Delete"), 'delete').'';
+ } else {
+ print '';
}
//print ' '.$langs->trans("RunSql").'';
print '
';
@@ -2463,30 +2469,34 @@ if ($module == 'initmodule')
print ' '.$langs->trans("PageForCreateEditView").' : '.($realpathtocard ? '' : '').$pathtocard.($realpathtocard ? '' : '').'?action=create';
print ' '.img_picto($langs->trans("Edit"), 'edit').'';
print '
';
- print ' '.$langs->trans("PageForAgendaTab").' : '.($realpathtoagenda ? '' : '').$pathtoagenda.($realpathtoagenda ? '' : '').'';
- print ' '.img_picto($langs->trans("Edit"), 'edit').'';
- if ($realpathtoagenda)
- {
+ print ' '.$langs->trans("PageForContactTab").' : '.($realpathtocontact ? '' : '').$pathtocontact.($realpathtocontact ? '' : '').'';
+ print ' '.img_picto($langs->trans("Edit"), 'edit').'';
+ if (dol_is_file($realpathtocontact)) {
print ' ';
- print ''.img_picto($langs->trans("Delete"), 'delete').'';
+ print ''.img_picto($langs->trans("Delete"), 'delete').'';
}
print '
';
print ' '.$langs->trans("PageForDocumentTab").' : '.($realpathtodocument ? '' : '').$pathtodocument.($realpathtodocument ? '' : '').'';
print ' '.img_picto($langs->trans("Edit"), 'edit').'';
- if ($realpathtodocument)
- {
+ if (dol_is_file($realpathtodocument)) {
print ' ';
print ''.img_picto($langs->trans("Delete"), 'delete').'';
}
print '
';
print ' '.$langs->trans("PageForNoteTab").' : '.($realpathtonote ? '' : '').$pathtonote.($realpathtonote ? '' : '').'';
print ' '.img_picto($langs->trans("Edit"), 'edit').'';
- if ($realpathtonote)
- {
+ if (dol_is_file($realpathtonote)) {
print ' ';
print ''.img_picto($langs->trans("Delete"), 'delete').'';
}
print '
';
+ print ' '.$langs->trans("PageForAgendaTab").' : '.($realpathtoagenda ? '' : '').$pathtoagenda.($realpathtoagenda ? '' : '').'';
+ print ' '.img_picto($langs->trans("Edit"), 'edit').'';
+ if (dol_is_file($realpathtoagenda)) {
+ print ' ';
+ print ''.img_picto($langs->trans("Delete"), 'delete').'';
+ }
+ print '
';
/* This is already on Tab CLI
print '
';
@@ -2533,8 +2543,7 @@ if ($module == 'initmodule')
print '';
print '';
- print '';
- //print '';
+ print '';
print '
';
print load_fiche_titre($langs->trans("ObjectProperties"), '', '');
@@ -3073,7 +3082,7 @@ if ($module == 'initmodule')
print ''.img_picto($langs->trans("Delete"), 'delete').'';
} else {
print ''.$langs->trans("FileNotYetGenerated").'';
- print '';
+ print '';
print '