2015-10-09 06:16:43 +02:00
< ? php
2021-10-31 06:26:41 +01:00
/* Copyright ( C ) 2015 - 2021 Alexandre Spangaro < aspangaro @ open - dsi . fr >
2024-03-13 00:31:03 +01:00
* Copyright ( C ) 2024 MDW < mdeweerd @ users . noreply . github . com >
2015-10-09 06:16:43 +02:00
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 3 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
2019-09-23 21:55:30 +02:00
* along with this program . If not , see < https :// www . gnu . org / licenses />.
2021-10-31 06:26:41 +01:00
* or see https :// www . gnu . org /
2015-10-09 06:16:43 +02:00
*/
/**
2023-07-25 23:15:53 +02:00
* \defgroup HRM Module hrm
* \brief Module for Human Resource Management ( HRM )
*
* \file htdocs / core / modules / modHRM . class . php
* \ingroup HRM
* \brief Description and activation file for the module HRM
2015-10-09 06:16:43 +02:00
*/
2020-04-10 10:59:32 +02:00
include_once DOL_DOCUMENT_ROOT . " /core/modules/DolibarrModules.class.php " ;
2015-10-09 06:16:43 +02:00
2021-10-31 06:26:41 +01:00
2015-10-09 06:16:43 +02:00
/**
2021-10-31 06:26:41 +01:00
* Description and activation class for module HRM
2015-10-09 06:16:43 +02:00
*/
2015-10-10 06:00:55 +02:00
class modHRM extends DolibarrModules
2015-10-09 06:16:43 +02:00
{
/**
2021-10-31 06:26:41 +01:00
* Constructor . Define names , constants , directories , boxes , permissions
2015-10-09 06:16:43 +02:00
*
2021-10-31 06:26:41 +01:00
* @ param DoliDB $db Database handler
2015-10-09 06:16:43 +02:00
*/
public function __construct ( $db )
{
2024-09-09 11:51:35 +02:00
global $conf ;
2018-02-25 10:55:02 +01:00
2015-10-09 06:16:43 +02:00
$this -> db = $db ;
2021-10-31 06:26:41 +01:00
// Id for module (must be unique).
// Use here a free id (See in Home -> System information -> Dolibarr for list of used modules id).
2015-10-09 06:16:43 +02:00
$this -> numero = 4000 ;
2021-10-31 06:26:41 +01:00
// Key text used to identify module (for permissions, menus, etc...)
2015-10-09 06:16:43 +02:00
$this -> rights_class = 'hrm' ;
2018-02-25 10:55:02 +01:00
2021-10-31 06:26:41 +01:00
// Family can be 'crm','financial','hr','projects','products','ecm','technic','other'
// It is used to group modules in module setup page
2015-10-09 06:16:43 +02:00
$this -> family = " hr " ;
2020-08-22 14:37:09 +02:00
$this -> module_position = '50' ;
2015-10-09 06:16:43 +02:00
// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
2019-02-10 10:45:49 +01:00
$this -> name = preg_replace ( '/^mod/i' , '' , get_class ( $this ));
2021-10-31 06:26:41 +01:00
// Module description, used if translation string 'ModuleXXXDesc' not found (where XXX is value of numeric property 'numero' of module)
$this -> description = " HRM " ;
// Possible values for version are: 'development', 'experimental', 'dolibarr' or version
2022-11-28 10:20:08 +01:00
$this -> version = 'dolibarr' ;
2021-10-31 06:26:41 +01:00
// Key used in llx_const table to save module status enabled/disabled (where MYMODULE is value of property name of module in uppercase)
2020-04-10 10:59:32 +02:00
$this -> const_name = 'MAIN_MODULE_' . strtoupper ( $this -> name );
2020-03-23 15:54:02 +01:00
// Name of image file used for this module.
2017-03-30 15:54:48 +02:00
// If file is in theme/yourtheme/img directory under name object_pictovalue.png, use this->picto='pictovalue'
// If file is in module/img directory under name object_pictovalue.png, use this->picto='pictovalue@module'
2020-04-10 10:59:32 +02:00
$this -> picto = 'hrm' ;
2018-02-25 10:55:02 +01:00
2021-09-27 11:20:38 +02:00
// Define some features supported by module (triggers, login, substitutions, menus, css, etc...)
$this -> module_parts = array (
// Set this to 1 if module has its own trigger directory (core/triggers)
'triggers' => 0 ,
// Set this to 1 if module has its own login method file (core/login)
'login' => 0 ,
// Set this to 1 if module has its own substitution function file (core/substitutions)
'substitutions' => 0 ,
// Set this to 1 if module has its own menus handler directory (core/menus)
'menus' => 0 ,
// Set this to 1 if module overwrite template dir (core/tpl)
2021-10-05 15:43:57 +02:00
'tpl' => 0 ,
2021-09-27 11:20:38 +02:00
// Set this to 1 if module has its own barcode directory (core/modules/barcode)
'barcode' => 0 ,
// Set this to 1 if module has its own models directory (core/modules/xxx)
'models' => 1 ,
// Set this to 1 if module has its own printing directory (core/modules/printing)
'printing' => 0 ,
// Set this to 1 if module has its own theme directory (theme)
'theme' => 0 ,
// Set this to relative path of css file if module has its own css file
2021-12-13 09:35:27 +01:00
'css' => array (),
2021-09-27 11:20:38 +02:00
// Set this to relative path of js file if module must load a js on all pages
2021-12-13 09:35:27 +01:00
'js' => array (),
2021-09-27 11:20:38 +02:00
// Set this to 1 if features of module are opened to external users
'moduleforexternal' => 0 ,
);
2018-02-25 10:55:02 +01:00
2021-09-27 11:20:38 +02:00
// Data directories to create when module is enabled.
// Example: this->dirs = array("/hrm/temp","/hrm/subdir");
$this -> dirs = array ( " /hrm/temp " );
2018-02-25 10:55:02 +01:00
2021-09-27 11:20:38 +02:00
// Config pages. Put here list of php page, stored into hrm/admin directory, to use to setup module.
$this -> config_page_url = array ( " hrm.php " );
2018-02-25 10:55:02 +01:00
2015-10-09 06:16:43 +02:00
// Dependencies
2021-10-31 06:26:41 +01:00
$this -> hidden = false ; // A condition to hide module
$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
2022-09-27 20:48:47 +02:00
$this -> phpmin = array ( 7 , 0 ); // Minimum version of PHP required by module
2021-10-31 06:26:41 +01:00
$this -> need_dolibarr_version = array ( 11 , 0 ); // Minimum version of Dolibarr required by module
$this -> langfiles = array ( " hrm " );
2021-09-27 11:20:38 +02:00
// Constants
2021-10-31 06:26:41 +01:00
// Example: $this->const=array(0=>array('MYMODULE_MYNEWCONST1','chaine','myvalue','This is a constant to add',0),
// 1=>array('MYMODULE_MYNEWCONST2','chaine','myvalue','This is another constant to add',0) );
$this -> const = array (); // List of particular constants to add when module is enabled (key, 'chaine', value, desc, visible, 0 or 'allentities')
$r = 0 ;
2021-09-27 11:20:38 +02:00
if ( ! isset ( $conf -> hrm ) || ! isset ( $conf -> hrm -> enabled )) {
$conf -> hrm = new stdClass ();
$conf -> hrm -> enabled = 0 ;
}
// Array to add new pages in new tabs
$this -> tabs = array ();
2024-03-13 00:31:03 +01:00
$this -> tabs [] = array ( 'data' => 'user:+skill_tab:Skills:hrm:1:/hrm/skill_tab.php?id=__ID__&objecttype=user' ); // To add a new tab identified by code tabname1
2021-09-27 11:20:38 +02:00
//$this->tabs[] = array('data'=>'job:+tabname1:Poste:mylangfile@hrm:1:/hrm/poste_list.php?fk_job=__ID__'); // To add a new tab identified by code tabname1
// Example:
// $this->tabs[] = array('data'=>'objecttype:+tabname1:Title1:mylangfile@hrm:$user->rights->hrm->read:/hrm/mynewtab1.php?id=__ID__'); // To add a new tab identified by code tabname1
// $this->tabs[] = array('data'=>'objecttype:+tabname2:SUBSTITUTION_Title2:mylangfile@hrm:$user->rights->othermodule->read:/hrm/mynewtab2.php?id=__ID__', // To add another new tab identified by code tabname2. Label will be result of calling all substitution functions on 'Title2' key.
// $this->tabs[] = array('data'=>'objecttype:-tabname:NU:conditiontoremove'); // To remove an existing tab identified by code tabname
//
// Where objecttype can be
// 'categories_x' to add a tab in category view (replace 'x' by type of category (0=product, 1=supplier, 2=customer, 3=member)
// 'contact' to add a tab in contact view
// 'contract' to add a tab in contract view
// 'group' to add a tab in group view
// 'intervention' to add a tab in intervention view
// 'invoice' to add a tab in customer invoice view
// 'invoice_supplier' to add a tab in supplier invoice view
2024-01-13 19:48:20 +01:00
// 'member' to add a tab in foundation member view
2021-09-27 11:20:38 +02:00
// 'opensurveypoll' to add a tab in opensurvey poll view
2022-10-12 15:29:30 +02:00
// 'order' to add a tab in sales order view
2021-09-27 11:20:38 +02:00
// 'order_supplier' to add a tab in supplier order view
// 'payment' to add a tab in payment view
// 'payment_supplier' to add a tab in supplier payment view
// 'product' to add a tab in product view
// 'propal' to add a tab in propal view
// 'project' to add a tab in project view
// 'stock' to add a tab in stock view
// 'thirdparty' to add a tab in third party view
// 'user' to add a tab in user view
2018-07-09 14:06:59 +02:00
// Dictionaries
2020-04-10 10:59:32 +02:00
$this -> dictionaries = array ();
2015-10-09 06:16:43 +02:00
2021-09-27 11:20:38 +02:00
// Boxes/Widgets
// Add here list of php file(s) stored in hrm/core/boxes that contains a class to show a widget.
$this -> boxes = array (
// 0 => array(
// 'file' => 'hrmwidget1.php@hrm',
// 'note' => 'Widget provided by HrmTest',
// 'enabledbydefaulton' => 'Home',
// ),
// ...
);
2015-10-09 06:16:43 +02:00
2021-09-27 11:20:38 +02:00
// Cronjobs (List of cron jobs entries to add when module is enabled)
// unit_frequency must be 60 for minute, 3600 for hour, 86400 for day, 604800 for week
$this -> cronjobs = array (
// 0 => array(
// 'label' => 'MyJob label',
// 'jobtype' => 'method',
// 'class' => '/hrm/class/poste.class.php',
// 'objectname' => 'Poste',
// 'method' => 'doScheduledJob',
// 'parameters' => '',
// 'comment' => 'Comment',
// 'frequency' => 2,
// 'unitfrequency' => 3600,
// 'status' => 0,
// 'test' => '$conf->hrm->enabled',
// 'priority' => 50,
// ),
);
2018-02-25 10:55:02 +01:00
2021-10-31 06:26:41 +01:00
// Permissions
$this -> rights = array (); // Permission array used by this module
2024-05-30 13:37:17 +02:00
$r = 0 ;
2015-10-09 06:16:43 +02:00
2021-09-27 11:20:38 +02:00
// Skill / Job / Position
2021-11-10 21:34:41 +01:00
$this -> rights [ $r ][ 0 ] = 4001 ; // Permission id (must not be already used)
2021-10-31 07:23:34 +01:00
$this -> rights [ $r ][ 1 ] = 'Read skill/job/position' ; // Permission label
2021-10-31 06:26:41 +01:00
$this -> rights [ $r ][ 3 ] = 0 ; // Permission by default for new user (0/1)
2021-09-27 11:20:38 +02:00
$this -> rights [ $r ][ 4 ] = 'all' ;
2021-10-31 13:42:08 +01:00
$this -> rights [ $r ][ 5 ] = 'read' ; // In php code, permission will be checked by test if ($user->rights->hrm->all->read)
2020-04-10 10:59:32 +02:00
$r ++ ;
2021-10-31 06:26:41 +01:00
2021-11-10 21:34:41 +01:00
$this -> rights [ $r ][ 0 ] = 4002 ; // Permission id (must not be already used)
2021-10-31 07:23:34 +01:00
$this -> rights [ $r ][ 1 ] = 'Create/modify skill/job/position' ; // Permission label
2021-10-31 06:26:41 +01:00
$this -> rights [ $r ][ 3 ] = 0 ; // Permission by default for new user (0/1)
2021-09-27 11:20:38 +02:00
$this -> rights [ $r ][ 4 ] = 'all' ;
2021-10-31 13:42:08 +01:00
$this -> rights [ $r ][ 5 ] = 'write' ; // In php code, permission will be checked by test if ($user->rights->hrm->all->write)
2020-04-10 10:59:32 +02:00
$r ++ ;
2021-10-31 06:26:41 +01:00
2021-11-10 21:34:41 +01:00
$this -> rights [ $r ][ 0 ] = 4003 ; // Permission id (must not be already used)
2021-10-31 07:23:34 +01:00
$this -> rights [ $r ][ 1 ] = 'Delete skill/job/position' ; // Permission label
2021-10-31 06:26:41 +01:00
$this -> rights [ $r ][ 3 ] = 0 ; // Permission by default for new user (0/1)
2021-09-27 11:20:38 +02:00
$this -> rights [ $r ][ 4 ] = 'all' ;
2021-10-31 13:42:08 +01:00
$this -> rights [ $r ][ 5 ] = 'delete' ; // In php code, permission will be checked by test if ($user->rights->hrm->all->delete)
2020-04-10 10:59:32 +02:00
$r ++ ;
2018-02-25 10:55:02 +01:00
2021-10-31 07:23:34 +01:00
// Evaluation
2022-03-30 15:19:57 +02:00
$this -> rights [ $r ][ 0 ] = 4021 ; // Permission id (must not be already used)
2021-10-31 13:42:08 +01:00
$this -> rights [ $r ][ 1 ] = 'Read evaluations' ; // Permission label
2021-10-31 06:26:41 +01:00
$this -> rights [ $r ][ 3 ] = 0 ; // Permission by default for new user (0/1)
2021-09-27 11:20:38 +02:00
$this -> rights [ $r ][ 4 ] = 'evaluation' ;
2021-10-31 13:42:08 +01:00
$this -> rights [ $r ][ 5 ] = 'read' ; // In php code, permission will be checked by test if ($user->rights->hrm->evaluation->read)
2021-09-27 11:20:38 +02:00
$r ++ ;
2021-10-31 06:26:41 +01:00
2022-03-30 15:19:57 +02:00
$this -> rights [ $r ][ 0 ] = 4022 ; // Permission id (must not be already used)
2021-11-10 21:34:41 +01:00
$this -> rights [ $r ][ 1 ] = 'Create/modify your evaluation' ; // Permission label
2021-10-31 06:26:41 +01:00
$this -> rights [ $r ][ 3 ] = 0 ; // Permission by default for new user (0/1)
2021-09-27 11:20:38 +02:00
$this -> rights [ $r ][ 4 ] = 'evaluation' ;
2021-10-31 13:42:08 +01:00
$this -> rights [ $r ][ 5 ] = 'write' ; // In php code, permission will be checked by test if ($user->rights->hrm->evaluation->write)
2021-09-27 11:20:38 +02:00
$r ++ ;
2021-10-31 06:26:41 +01:00
2022-03-30 15:19:57 +02:00
$this -> rights [ $r ][ 0 ] = 4023 ; // Permission id (must not be already used)
2021-10-31 07:23:34 +01:00
$this -> rights [ $r ][ 1 ] = 'Validate evaluation' ; // Permission label
2021-10-31 06:26:41 +01:00
$this -> rights [ $r ][ 3 ] = 0 ; // Permission by default for new user (0/1)
2021-10-31 13:42:08 +01:00
$this -> rights [ $r ][ 4 ] = 'evaluation_advance' ;
$this -> rights [ $r ][ 5 ] = 'validate' ; // In php code, permission will be checked by test if ($user->rights->hrm->evaluation->validate)
2021-09-27 11:20:38 +02:00
$r ++ ;
2021-10-31 06:26:41 +01:00
2022-03-30 15:19:57 +02:00
$this -> rights [ $r ][ 0 ] = 4025 ; // Permission id (must not be already used)
2021-11-10 21:34:41 +01:00
$this -> rights [ $r ][ 1 ] = 'Delete evaluations' ; // Permission label
2021-10-31 06:26:41 +01:00
$this -> rights [ $r ][ 3 ] = 0 ; // Permission by default for new user (0/1)
2021-09-27 11:20:38 +02:00
$this -> rights [ $r ][ 4 ] = 'evaluation' ;
2021-10-31 13:42:08 +01:00
$this -> rights [ $r ][ 5 ] = 'delete' ; // In php code, permission will be checked by test if ($user->rights->hrm->evaluation->delete)
2020-04-10 10:59:32 +02:00
$r ++ ;
2018-02-25 10:55:02 +01:00
2021-09-27 11:20:38 +02:00
// Comparison
2022-03-30 15:19:57 +02:00
$this -> rights [ $r ][ 0 ] = 4028 ; // Permission id (must not be already used)
2021-10-31 07:23:34 +01:00
$this -> rights [ $r ][ 1 ] = 'See comparison menu' ; // Permission label
2021-10-31 06:26:41 +01:00
$this -> rights [ $r ][ 3 ] = 0 ; // Permission by default for new user (0/1)
2021-10-31 13:42:08 +01:00
$this -> rights [ $r ][ 4 ] = 'compare_advance' ;
$this -> rights [ $r ][ 5 ] = 'read' ; // In php code, permission will be checked by test if ($user->rights->hrm->compare_advance->read)
2020-04-10 10:59:32 +02:00
$r ++ ;
2022-03-14 16:50:43 +01:00
2023-01-31 00:42:23 +01:00
// Evaluation
$this -> rights [ $r ][ 0 ] = 4029 ; // Permission id (must not be already used)
$this -> rights [ $r ][ 1 ] = 'Read all evaluations' ; // Permission label
$this -> rights [ $r ][ 3 ] = 0 ; // Permission by default for new user (0/1)
$this -> rights [ $r ][ 4 ] = 'evaluation' ;
$this -> rights [ $r ][ 5 ] = 'readall' ; // In php code, permission will be checked by test if ($user->rights->hrm->evaluation->read)
$r ++ ;
2022-03-14 16:50:43 +01:00
// Read employee
$this -> rights [ $r ][ 0 ] = 4031 ; // Permission id (must not be already used)
2023-01-31 00:42:23 +01:00
$this -> rights [ $r ][ 1 ] = 'Read personal/HR information' ; // Permission label
2022-03-14 16:50:43 +01:00
$this -> rights [ $r ][ 3 ] = 0 ; // Permission by default for new user (0/1)
2022-03-30 12:10:06 +02:00
$this -> rights [ $r ][ 4 ] = 'read_personal_information' ;
$this -> rights [ $r ][ 5 ] = 'read' ; // In php code, permission will be checked by test if ($user->rights->hrm->read_personal_information->read)
2022-03-14 16:50:43 +01:00
$r ++ ;
// Write employee
$this -> rights [ $r ][ 0 ] = 4032 ; // Permission id (must not be already used)
2023-01-31 00:42:23 +01:00
$this -> rights [ $r ][ 1 ] = 'Write personal/HR information' ; // Permission label
2022-03-14 16:50:43 +01:00
$this -> rights [ $r ][ 3 ] = 0 ; // Permission by default for new user (0/1)
2022-03-30 12:10:06 +02:00
$this -> rights [ $r ][ 4 ] = 'write_personal_information' ;
$this -> rights [ $r ][ 5 ] = 'write' ; // In php code, permission will be checked by test if ($user->rights->hrm->write_personal_information->write)
2022-03-14 16:50:43 +01:00
$r ++ ;
2015-10-09 06:16:43 +02:00
}
2018-02-25 10:55:02 +01:00
2015-10-09 06:16:43 +02:00
/**
2021-10-31 06:26:41 +01:00
* Function called when module is enabled .
* The init function add constants , boxes , permissions and menus ( defined in constructor ) into Dolibarr database .
* It also creates data directories
2015-10-09 06:16:43 +02:00
*
2021-10-31 06:26:41 +01:00
* @ param string $options Options when enabling module ( '' , 'newboxdefonly' , 'noboxes' )
* @ return int 1 if OK , 0 if KO
2015-10-09 06:16:43 +02:00
*/
2019-02-26 21:13:07 +01:00
public function init ( $options = '' )
2015-10-09 06:16:43 +02:00
{
2023-11-26 15:51:00 +01:00
global $conf ;
2015-10-10 08:34:15 +02:00
// Permissions
$this -> remove ( $options );
2022-05-08 15:18:34 +02:00
$result = $this -> _load_tables ( '/install/mysql/' , 'hrm' );
2021-09-27 11:20:38 +02:00
if ( $result < 0 ) {
return - 1 ; // Do not activate module if error 'not allowed' returned when loading module SQL queries (the _load_table run sql with run_sql with the error allowed parameter set to 'default')
2021-12-07 14:14:13 +01:00
}
2021-09-27 11:20:38 +02:00
2023-11-26 15:51:00 +01:00
$sql = array (
2024-10-28 18:19:53 +01:00
" DELETE FROM " . MAIN_DB_PREFIX . " document_model WHERE nom = 'standard_evaluation' AND type='evaluation' AND entity = " . (( int ) $conf -> entity ),
" INSERT INTO " . MAIN_DB_PREFIX . " document_model (nom, type, entity) VALUES('standard_evaluation','evaluation', " . (( int ) $conf -> entity ) . " ) "
2023-11-26 15:51:00 +01:00
);
2015-10-10 08:34:15 +02:00
2019-01-27 11:55:16 +01:00
return $this -> _init ( $sql , $options );
2015-10-09 06:16:43 +02:00
}
}