diff --git a/ChangeLog b/ChangeLog index 2e1556ae3e6208bd85c9d80c87cdaca94b2624cb..5c5ad383d7aa4272a4e2b033d33a77d44cb9d188 100644 --- a/ChangeLog +++ b/ChangeLog @@ -39,13 +39,11 @@ For users: - New: [ task #165 ] Add import/export of multiprices. - New: Add Maghreb regions and departments. - New: A more responsive desgin for statistic box of home page. -- Qual: Implement same rule for return value of all command line scripts (0 when success, <>0 if error). - New: [ task #1005 ] Adapting to Spanish legislation bill numbering - New: [ task #1011 ] Now supplier order and invoice deal with payment terms and mode. - New: [ task #1014 ] Add option to recursivly add parent category. - New: [ task #1016 ] Can define a specific numbering for deposits. - New: [ task #918 ] Stock replenishment. -- Fix: [ bug #992 ] Proforma invoices don't have a separated numeric count. - New : Add pdf link into supplier invoice list and supplier order list. - New : Genrate auto the PDF for supplier invoice. - New : Add category into filter webservice thirdparty method getListOfThirdParties. @@ -60,12 +58,15 @@ For users: - New: Add hidden option MAIN_VAT_DEFAULT_IF_AUTODETECT_FAILS. - New: Can send an email from thirdparty card. - New: Can cancel holidays that were previously validated. -- Fix: [bug #1022] correct margin calculation for credit notes. - New: Can choose contact on event (action com) creation, and filtred by thirdparty. - New: Add hidden option MAIN_FORCE_DEFAULT_STATE_ID. - New: Add page to make mass stock movement. - New: Add field oustanding limit into thirdparty properties. - New: Can enter a vat payment of zero. +- New: Add path to installed dir of external modules + Name and web of module provider. +- Qual: Implement same rule for return value of all command line scripts (0 when success, <>0 if error). +- Fix: [ bug #992 ] Proforma invoices don't have a separated numeric count. +- Fix: [ bug #1022 ] correct margin calculation for credit notes. For translators: - Qual: Normalized sort order of all languages files with english reference files. @@ -86,7 +87,6 @@ For developers: MAIN_MOTD_SETUPPAGE, MAIN_MOTD_SETUPPAGE, MAIN_HOME now accept "|langfile" into translation key to use a specific language file. - New: Make some changes to allow usage of several alternative $dolibarr_main_url_root variables. - Fix also several bugs with old code. - Qual: All nowrap properties are now using CSS class nowrap. - Qual: Move hardcoded code of module mailmanspip into trigger. - New: Into POST forms, if you can add a parameter DOL_AUTOSET_COOKIE with a vlue that is list name, @@ -97,6 +97,7 @@ For developers: - New: A trigger can return an array of error strings instead of one error string. - New: Add method to use a dictionnary as a combo box. - New: Add update method for web service product. +- Fix also several bugs with old code. WARNING: Following change may create regression for some external modules, but was necessary to make Dolibarr better: diff --git a/htdocs/admin/modules.php b/htdocs/admin/modules.php index 4aca54817e816483c8530013fd6c5433d7ac2137..b4e6ff2f628e1459a5a626b25473e88d8744d36b 100644 --- a/htdocs/admin/modules.php +++ b/htdocs/admin/modules.php @@ -1,7 +1,7 @@ <?php /* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org> * Copyright (C) 2003 Jean-Louis Bergamo <jlb@j1b.org> - * Copyright (C) 2004-2012 Laurent Destailleur <eldy@users.sourceforge.net> + * Copyright (C) 2004-2013 Laurent Destailleur <eldy@users.sourceforge.net> * Copyright (C) 2004 Eric Seigne <eric.seigne@ryxeo.com> * Copyright (C) 2005-2012 Regis Houssin <regis.houssin@capnetworks.com> * Copyright (C) 2011 Juanjo Menent <jmenent@2byte.es> @@ -154,22 +154,21 @@ foreach ($modulesdir as $dir) $const_name = 'MAIN_MODULE_'.strtoupper(preg_replace('/^mod/i','',get_class($objMod))); if ($objMod->version == 'development' && (empty($conf->global->$const_name) && ($conf->global->MAIN_FEATURES_LEVEL < 2))) $modulequalified=0; if ($objMod->version == 'experimental' && (empty($conf->global->$const_name) && ($conf->global->MAIN_FEATURES_LEVEL < 1))) $modulequalified=0; - // We discard modules according to property disabled + // We discard modules according to property disabled if (isset($objMod->hidden) && $objMod->hidden) $modulequalified=false; - + // Define array $categ with categ with at least one qualified module if ($modulequalified) { $modules[$i] = $objMod; $filename[$i]= $modName; $orders[$i] = $objMod->family."_".$j; // Sort by family, then by module number - $special = isset($specialtostring[$objMod->special])?$specialtostring[$objMod->special]:'unknown'; + $dirmod[$i] = $dir; + // Set categ[$i] + $special = isset($specialtostring[$objMod->special])?$specialtostring[$objMod->special]:'unknown'; if ($objMod->version == 'development' || $objMod->version == 'experimental') $special='expdev'; - - //print "x".$modName." ".$orders[$i]." ".$special."\n<br>"; if (isset($categ[$special])) $categ[$special]++; // Array of all different modules categories else $categ[$special]=1; - $dirmod[$i] = $dir; $j++; $i++; } @@ -337,7 +336,7 @@ if ($mode != 'marketplace') // Print a separator if we change family //print "<tr><td>xx".$oldfamily."-".$family."-".$atleastoneforfamily."<br></td><tr>"; //if ($oldfamily && $family!=$oldfamily && $atleastoneforfamily) { - if ($family!=$oldfamily) + if ($family!=$oldfamily) { print '<tr class="liste_titre">'."\n"; print '<td colspan="5">'; @@ -391,7 +390,16 @@ if ($mode != 'marketplace') // Version print '<td align="center" valign="top" class="nowrap">'; - print $objMod->getVersion(); + $version=$objMod->getVersion(); + $dirofmodule=$dirmod[$key]; + if ($objMod->isCoreOrExternalModule() == 'external') + { + $text=$langs->trans("ExternalModule",$dirofmodule); + if (! empty($objMod->editor_name) && $objMod->editor_name != 'dolibarr') $text.=' - '.$objMod->editor_name; + if (! empty($objMod->editor_web) && $objMod->editor_web != 'www.dolibarr.org') $text.=' - '.$objMod->editor_web; + print $form->textwithpicto($version, $text, 1, 'help'); + } + else print $version; print "</td>\n"; // Activate/Disable and Setup (2 columns) @@ -401,7 +409,6 @@ if ($mode != 'marketplace') print '<td align="center" valign="middle">'; - // Module actif if (! empty($objMod->always_enabled) || ((! empty($conf->multicompany->enabled) && $objMod->core_enabled) && ($user->entity || $conf->entity!=1))) { print $langs->trans("Required"); @@ -459,7 +466,7 @@ if ($mode != 'marketplace') } else - { + { print '<td align="center" valign="middle">'; if (! empty($objMod->always_enabled)) diff --git a/htdocs/core/modules/DolibarrModules.class.php b/htdocs/core/modules/DolibarrModules.class.php index 12f739331b8d6ce7706fb4fee0aacf64ad5a8a27..79e515b05e5d70e37667acaafbce750d8a0a0dd1 100644 --- a/htdocs/core/modules/DolibarrModules.class.php +++ b/htdocs/core/modules/DolibarrModules.class.php @@ -262,7 +262,7 @@ abstract class DolibarrModules /** - * Retourne la version du module. + * Return module version. * Pour les modules a l'etat 'experimental', retourne la traduction de 'experimental' * Pour les modules 'dolibarr', retourne la version de Dolibarr * Pour les autres modules, retourne la version du module @@ -282,6 +282,20 @@ abstract class DolibarrModules } + /** + * Return if a module is a core or external module + * + * @return string 'core', 'external' or 'unknown' + */ + function isCoreOrExternalModule() + { + if ($this->version == 'dolibarr') return 'core'; + if (! empty($this->version) && ! in_array($this->version,array('experimental','development'))) return 'external'; + if (! empty($this->editor_name) || ! empty($this->editor_web)) return 'external'; + return 'unknown'; + } + + /** * Return list of lang files related to module * diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index c800925fa2f6bc296b348491d6d776f5988a5f44..e723501126317c7df2374a771d15d6735f5e9836 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -379,6 +379,7 @@ LinkToTest=Clickable link generated for user <strong>%s</strong> (click phone nu KeepEmptyToUseDefault=Keep empty to use default value DefaultLink=Default link ValueOverwrittenByUserSetup=Warning, this value may be overwritten by user specific setup (each user can set his own clicktodial url) +ExternalModule=External module - Installed into directory %s # Modules Module0Name=Users & groups diff --git a/htdocs/langs/fr_FR/admin.lang b/htdocs/langs/fr_FR/admin.lang index 70987dbc5ddb71b2f7b0c590128f17eceb035c1a..9984beaf50324ac81182de3c3f8465856ea7a33f 100644 --- a/htdocs/langs/fr_FR/admin.lang +++ b/htdocs/langs/fr_FR/admin.lang @@ -379,6 +379,7 @@ LinkToTest=Lien cliquable généré pour l'utilisateur <strong>%s</strong> (cliq KeepEmptyToUseDefault=Laisser ce champ vide pour utiliser la valeur par défaut DefaultLink=Lien par défaut ValueOverwrittenByUserSetup=Attention, cette valeur peut être écrasée par une valeur spécifique à la configuration de l'utilisateur (chaque utilisateur pouvant avoir sa propre URL « clicktodial ») +ExternalModule=Module externe - Installé dans le répertoire %s # Modules Module0Name=Utilisateurs & groupes