diff --git a/dev/skeletons/modMyModule.class.php b/dev/skeletons/modMyModule.class.php index 2243243333409c88a10741cf9035b656370f7bfb..64890b9d9cfa80bd0238efce61789ecd42b16ebc 100644 --- a/dev/skeletons/modMyModule.class.php +++ b/dev/skeletons/modMyModule.class.php @@ -62,7 +62,7 @@ class modMyModule extends DolibarrModules $this->name = preg_replace('/^mod/i','',get_class($this)); // Module description, used if translation string 'ModuleXXXDesc' not found (where XXX is value of numeric property 'numero' of module) $this->description = "Description of module MyModule"; - $this->descriptionlong = "A very lon description. Can be a full HTML content"; + $this->descriptionlong = "A very long description. Can be a full HTML content"; $this->editor_name = 'Editor name'; $this->editor_url = 'http://www.dolibarr.org'; @@ -105,9 +105,9 @@ class modMyModule extends DolibarrModules // Dependencies $this->hidden = false; // A condition to hide module - $this->depends = array(); // List of modules id that must be enabled if this module is enabled - $this->requiredby = array(); // List of modules id to disable if this one is disabled - $this->conflictwith = array(); // List of modules id this module is in conflict with + $this->depends = array(); // List of module class names as string that must be enabled if this module is enabled + $this->requiredby = array(); // List of module ids to disable if this one is disabled + $this->conflictwith = array(); // List of module class names as string this module is in conflict with $this->phpmin = array(5,0); // Minimum version of PHP required by module $this->need_dolibarr_version = array(3,0); // Minimum version of Dolibarr required by module $this->langfiles = array("mylangfile@mymodule"); diff --git a/htdocs/contact/list.php b/htdocs/contact/list.php index 5504d43671cabda87f8d467623bdd449efd6637d..7d600750cff5898260189ffd09c14a2e6bb788cd 100644 --- a/htdocs/contact/list.php +++ b/htdocs/contact/list.php @@ -702,13 +702,12 @@ if ($result) print '<td>'; if ($obj->socid) { - print '<a href="'.DOL_URL_ROOT.'/comm/card.php?socid='.$obj->socid.'">'; - print img_object($langs->trans("ShowCompany"),"company").' '.dol_trunc($obj->name,20).'</a>'; + $objsoc = new Societe($db); + $objsoc->fetch($obj->socid); + print $objsoc->getNomUrl(1); } else - { print ' '; - } print '</td>'; } diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 0344f56aaab5fee34fb6eb3f1af4a316b222fb4a..8961cf57f5dfca2020677469a7a701ab5fcccd21 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -275,6 +275,9 @@ function GETPOST($paramname,$check='',$method=0,$filter=NULL,$options=NULL) if (empty($filter)) return 'BadFourthParameterForGETPOST'; $out=filter_var($out, $filter, $options); break; + case 'nohtml': + $out=dol_string_nohtmltag($out); + break; } } diff --git a/htdocs/core/modules/DolibarrModules.class.php b/htdocs/core/modules/DolibarrModules.class.php index d682aa2db97b2535c6c9108465c5b03e5fad5fa2..6d6856ff36be8c0113238f04162b3f4847907f50 100644 --- a/htdocs/core/modules/DolibarrModules.class.php +++ b/htdocs/core/modules/DolibarrModules.class.php @@ -41,36 +41,66 @@ class DolibarrModules // Can not be abstract, because we need to insta /** * @var int Module unique ID + * @see https://wiki.dolibarr.org/index.php/List_of_modules_id */ public $numero; /** - * @var string Publisher name + * @var string Publisher name + * @since 4.0.0 */ public $editor_name; /** - * @var string URL of module at publisher site + * @var string URL of module at publisher site + * @since 4.0.0 */ - public $editor_web; + public $editor_url; /** * @var string Family + * @see familyinfo + * + * Native values: 'crm', 'financial', 'hr', 'projects', 'products', 'ecm', 'technic', 'other'. + * Use familyinfo to declare a custom value. */ public $family; + + /** + * @var array Custom family informations + * @see family + * + * e.g.: + * array( + * 'myownfamily' => array( + * 'position' => '001', + * 'label' => $langs->trans("MyOwnFamily") + * ) + * ); + * + */ + public $familyinfo; /** - * @var int module_position + * @var int Module position + * @since 3.9.0 */ public $module_position=500; /** * @var string Module name + * + * Only used if Module[ID]Name translation string is not found. + * + * You can use the following code to automatically derive it from your module's class name: + * preg_replace('/^mod/i', '', get_class($this)) */ public $name; /** - * @var array Paths to create when module is activated + * @var string[] Paths to create when module is activated + * + * e.g.: array('/mymodule/temp') */ public $dirs = array(); @@ -110,27 +140,27 @@ class DolibarrModules // Can not be abstract, because we need to insta * // Set this to 1 if module has its own trigger directory (/mymodule/core/triggers) * 'triggers' => 0, * // Set this to 1 if module has its own login method directory (/mymodule/core/login) - * 'login' => 0, + * 'login' => 0, * // Set this to 1 if module has its own substitution function file (/mymodule/core/substitutions) - * 'substitutions' => 0, + * 'substitutions' => 0, * // Set this to 1 if module has its own menus handler directory (/mymodule/core/menus) - * 'menus' => 0, + * 'menus' => 0, * // Set this to 1 if module has its own theme directory (/mymodule/theme) - * 'theme' => 0, + * 'theme' => 0, * // Set this to 1 if module overwrite template dir (/mymodule/core/tpl) * 'tpl' => 0, * // Set this to 1 if module has its own barcode directory (/mymodule/core/modules/barcode) - * 'barcode' => 0, + * 'barcode' => 0, * // Set this to 1 if module has its own models directory (/mymodule/core/modules/xxx) - * 'models' => 0, + * 'models' => 0, * // Set this to relative path of css file if module has its own css file - * 'css' => '/mymodule/css/mymodule.css.php', + * 'css' => '/mymodule/css/mymodule.css.php', * // Set this to relative path of js file if module must load a js on all pages - * 'js' => '/mymodule/js/mymodule.js', + * 'js' => '/mymodule/js/mymodule.js', * // Set here all hooks context managed by module - * 'hooks' => array('hookcontext1','hookcontext2'), + * 'hooks' => array('hookcontext1','hookcontext2'), * // Set here all workflow context managed by module - * 'workflow' => array( + * 'workflow' => array( * 'WORKFLOW_MODULE1_YOURACTIONTYPE_MODULE2' = >array( * 'enabled' => '! empty($conf->module1->enabled) && ! empty($conf->module2->enabled)', * 'picto'=>'yourpicto@mymodule' @@ -159,16 +189,29 @@ class DolibarrModules // Can not be abstract, because we need to insta /** * @var string Module version + * @see http://semver.org + * + * The following keywords can also be used: + * 'development' + * 'experimental' + * 'dolibarr': only for core modules that share its version + * 'dolibarr_deprecated': only for deprecated core modules + * */ public $version; /** * @var string Module description (short text) + * + * Only used if Module[ID]Desc translation string is not found. */ public $description; /** * @var string Module description (long text) + * @since 4.0.0 + * + * HTML content supported. */ public $descriptionlong; @@ -219,8 +262,70 @@ class DolibarrModules // Can not be abstract, because we need to insta */ public $style_sheet = ''; - - + /** + * @var 0|1|2|3 Where to display the module in setup page + * @deprecated @since 4.0.0 + * @see family + * @see familyinfo + * + * 0: common + * 1: interface + * 2: others + * 3: very specific + */ + public $special; + + /** + * @var string Name of image file used for this module + * + * If file is in theme/yourtheme/img directory under name object_pictoname.png use 'pictoname' + * If file is in module/img directory under name object_pictoname.png use 'pictoname@module' + */ + public $picto; + + /** + * @var string[] List of config pages + * + * Name of php pages stored into module/admin directory, used to setup module. + * e.g.: "admin.php@module" + */ + public $config_page_url; + + /** + * @var string[] List of module class names that must be enabled if this module is enabled. + * + * e.g.: array('modAnotherModule', 'modYetAnotherModule') + */ + public $depends; + + /** + * @var int[] List of module ids to disable if this one is disabled. + */ + public $requiredby; + + /** + * @var string[] List of module class names as string this module is in conflict with. + * @see depends + */ + public $conflictwith; + + /** + * @var array() Minimum version of PHP required by module. + * e.g.: PHP ≥ 5.3 = array(5, 3) + */ + public $phpmin; + + /** + * @var array Minimum version of Dolibarr required by module. + * e.g.: Dolibarr ≥ 3.6 = array(3, 6) + */ + public $need_dolibarr_version; + + /** + * @var bool Whether to hide the module. + */ + public $hidden = false; + /** * Constructor. Define names, constants, directories, boxes, permissions * @@ -538,7 +643,7 @@ class DolibarrModules // Can not be abstract, because we need to insta { if ($this->version == 'dolibarr' || $this->version == 'dolibarr_deprecated') 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'; + if (! empty($this->editor_name) || ! empty($this->editor_url)) return 'external'; if ($this->numero >= 100000) return 'external'; return 'unknown'; }