diff --git a/.github/workflows/exakat.yml b/.github/workflows/exakat.yml index 861f6ccd4b0..3cfc4f8ba23 100644 --- a/.github/workflows/exakat.yml +++ b/.github/workflows/exakat.yml @@ -13,5 +13,5 @@ jobs: - name: Exakat uses: docker://exakat/exakat-ga with: - ignore_rules: 'Classes/UseInstanceof,Performances/PrePostIncrement,Functions/WrongNumberOfArguments,Variables/UndefinedVariable,Classes/DontUnsetProperties,Classes/NonPpp,Classes/StaticMethodsCalledFromObject,Classes/UseClassOperator,Functions/UsesDefaultArguments,Php/NoClassInGlobal,Php/ShouldUseCoalesce,Structures/MergeIfThen,Structures/ElseIfElseif,Structures/RepeatedPrint,Structures/UselessParenthesis,Structures/SwitchWithoutDefault,Structures/ShouldMakeTernary,Structures/UseConstant' - ignore_dirs: '/htdocs/includes,/htdocs/build,/htdocs/dev,/htdocs/doc,/htdocs/scripts,/htdocs/test' \ No newline at end of file + ignore_rules: 'Classes/UseInstanceof,Performances/PrePostIncrement,Functions/UndefinedFunctions,Functions/WrongNumberOfArguments,Functions/WrongTypeWithCall,Variables/UndefinedVariable,Classes/DontUnsetProperties,Classes/NonPpp,Classes/StaticMethodsCalledFromObject,Classes/UseClassOperator,Functions/UsesDefaultArguments,Php/NoClassInGlobal,Php/ShouldUseCoalesce,Php/WrongTypeForNativeFunction,Structures/MergeIfThen,Structures/ElseIfElseif,Structures/RepeatedPrint,Structures/SameConditions,Structures/SwitchWithoutDefault,Structures/ShouldMakeTernary,Structures/UselessParenthesis,Structures/UseConstant' + ignore_dirs: '/htdocs/includes,/build,/dev,/doc,/scripts,/test' \ No newline at end of file diff --git a/htdocs/admin/dolistore/class/PSWebServiceLibrary.class.php b/htdocs/admin/dolistore/class/PSWebServiceLibrary.class.php index 00e8672f6d5..201191d1262 100644 --- a/htdocs/admin/dolistore/class/PSWebServiceLibrary.class.php +++ b/htdocs/admin/dolistore/class/PSWebServiceLibrary.class.php @@ -221,7 +221,9 @@ class PrestaShopWebservice * Load XML from string. Can throw exception * * @param string $response String from a CURL response - * @return SimpleXMLElement status_code, response + * @return SimpleXMLElement|boolean status_code, response + * + * @throw PrestaShopWebserviceException */ protected function parseXML($response) { @@ -251,6 +253,8 @@ class PrestaShopWebservice * * @param array $options Options * @return SimpleXMLElement status_code, response + * + * @throw PrestaShopWebserviceException */ public function add($options) { @@ -268,10 +272,10 @@ class PrestaShopWebservice } else { throw new PrestaShopWebserviceException('Bad parameters given'); } - $request = self::executeRequest($url, array(CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_POSTFIELDS => $xml)); + $request = $this->executeRequest($url, array(CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_POSTFIELDS => $xml)); - self::checkStatusCode($request['status_code']); - return self::parseXML($request['response']); + $this->checkStatusCode($request['status_code']); + return $this->parseXML($request['response']); } /** @@ -300,7 +304,9 @@ class PrestaShopWebservice * ?> * * @param array $options Array representing resource to get. - * @return SimpleXMLElement status_code, response + * @return SimpleXMLElement|boolean status_code, response + * + * @throw PrestaShopWebserviceException */ public function get($options) { @@ -326,9 +332,9 @@ class PrestaShopWebservice throw new PrestaShopWebserviceException('Bad parameters given '); } - $request = self::executeRequest($url, array(CURLOPT_CUSTOMREQUEST => 'GET')); - self::checkStatusCode($request['status_code']); // check the response validity - return self::parseXML($request['response']); + $request = $this->executeRequest($url, array(CURLOPT_CUSTOMREQUEST => 'GET')); + $this->checkStatusCode($request['status_code']); // check the response validity + return $this->parseXML($request['response']); } /** @@ -336,6 +342,8 @@ class PrestaShopWebservice * * @param array $options Array representing resource for head request. * @return SimpleXMLElement status_code, response + * + * @throw PrestaShopWebserviceException */ public function head($options) { @@ -358,8 +366,8 @@ class PrestaShopWebservice } else { throw new PrestaShopWebserviceException('Bad parameters given'); } - $request = self::executeRequest($url, array(CURLOPT_CUSTOMREQUEST => 'HEAD', CURLOPT_NOBODY => true)); - self::checkStatusCode($request['status_code']); // check the response validity + $request = $this->executeRequest($url, array(CURLOPT_CUSTOMREQUEST => 'HEAD', CURLOPT_NOBODY => true)); + $this->checkStatusCode($request['status_code']); // check the response validity return $request['header']; } /** @@ -372,6 +380,8 @@ class PrestaShopWebservice * * @param array $options Array representing resource to edit. * @return SimpleXMLElement status_code, response + * + * @throw PrestaShopWebserviceException */ public function edit($options) { @@ -390,9 +400,9 @@ class PrestaShopWebservice throw new PrestaShopWebserviceException('Bad parameters given'); } - $request = self::executeRequest($url, array(CURLOPT_CUSTOMREQUEST => 'PUT', CURLOPT_POSTFIELDS => $xml)); - self::checkStatusCode($request['status_code']); // check the response validity - return self::parseXML($request['response']); + $request = $this->executeRequest($url, array(CURLOPT_CUSTOMREQUEST => 'PUT', CURLOPT_POSTFIELDS => $xml)); + $this->checkStatusCode($request['status_code']); // check the response validity + return $this->parseXML($request['response']); } } diff --git a/htdocs/admin/dolistore/class/index.html b/htdocs/admin/dolistore/class/index.html new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/htdocs/admin/dolistore/class/index.html @@ -0,0 +1 @@ + diff --git a/htdocs/admin/dolistore/index.html b/htdocs/admin/dolistore/index.html new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/htdocs/admin/dolistore/index.html @@ -0,0 +1 @@ + diff --git a/htdocs/admin/events.php b/htdocs/admin/events.php index b75606f739c..7af8d547a0c 100644 --- a/htdocs/admin/events.php +++ b/htdocs/admin/events.php @@ -118,7 +118,7 @@ foreach ($eventstolog as $key => $arr) print ''.$arr['id'].''; print ''; $key = 'MAIN_LOGEVENTS_'.$arr['id']; - $value = $conf->global->$key; + $value = empty($conf->global->$key) ? '' : $conf->global->$key; print ''; print ''."\n"; } diff --git a/htdocs/admin/system/security.php b/htdocs/admin/system/security.php index 2f0978ed266..f978c0dcd81 100644 --- a/htdocs/admin/system/security.php +++ b/htdocs/admin/system/security.php @@ -25,6 +25,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/memory.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/geturl.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/class/events.class.php'; // Load translation files required by the page $langs->loadLangs(array("install", "other", "admin")); @@ -52,7 +53,7 @@ print load_fiche_titre($langs->trans("Security"), '', 'title_setup'); print ''.$langs->trans("YouMayFindSecurityAdviceHere", 'hhttps://wiki.dolibarr.org/index.php/Security_information').' ('.$langs->trans("Reload").')
'; print '
'; -print load_fiche_titre($langs->trans("PHPSetup"), '', ''); +print load_fiche_titre($langs->trans("PHPSetup"), '', 'folder'); // Get version of PHP $phpversion = version_php(); @@ -77,7 +78,7 @@ else { print '
'; print '
'; -print load_fiche_titre($langs->trans("ConfigFile"), '', ''); +print load_fiche_titre($langs->trans("ConfigFile"), '', 'folder'); print ''.$langs->trans("dolibarr_main_prod").': '.$dolibarr_main_prod; if (empty($dolibarr_main_prod)) { @@ -94,7 +95,7 @@ print '
'; print '
'; print '
'; -print load_fiche_titre($langs->trans("Permissions"), '', ''); +print load_fiche_titre($langs->trans("Permissions"), '', 'folder'); print ''.$langs->trans("PermissionsOnFilesInWebRoot").': '; // TODO Check permission are read only except for custom dir @@ -109,7 +110,7 @@ print '
'; print '
'; print '
'; -print load_fiche_titre($langs->trans("DolibarrModules"), '', ''); +print load_fiche_titre($langs->trans("Modules"), '', 'folder'); // Module log print ''.$langs->trans("Syslog").': '; @@ -133,10 +134,12 @@ print '
'; print '
'; print '
'; -print load_fiche_titre($langs->trans("Menu").' '.$langs->trans("SecuritySetup"), '', ''); +print load_fiche_titre($langs->trans("Menu").' '.$langs->trans("SecuritySetup"), '', 'folder'); //print ''.$langs->trans("PasswordEncryption").': '; -print 'MAIN_SECURITY_HASH_ALGO = '.$conf->global->MAIN_SECURITY_HASH_ALGO."   (Recommanded value: 'password_hash')
"; +print 'MAIN_SECURITY_HASH_ALGO = '.(empty($conf->global->MAIN_SECURITY_HASH_ALGO) ? 'unset' : '')."   "; +print '   If unset: \'md5\' '; +print ' - Recommanded value: \'password_hash\'
'; print 'MAIN_SECURITY_SALT = '.$conf->global->MAIN_SECURITY_SALT.'
'; print '
'; // TODO @@ -153,10 +156,20 @@ print '
'; print '
'; -print ''.$langs->trans("SecurityAudit").': '; -// TODO Disabled or enabled ? -print '
'; +$securityevent = new Events($db); +$eventstolog = $securityevent->eventstolog; +print ''.$langs->trans("LogEvents").': '; +// Loop on each event type +foreach ($eventstolog as $key => $arr) +{ + if ($arr['id']) + { + $key = 'MAIN_LOGEVENTS_'.$arr['id']; + $value = empty($conf->global->$key) ? '' : $conf->global->$key; + if ($value) print $key.', '; + } +} diff --git a/htdocs/admin/user.php b/htdocs/admin/user.php index a96ea4e16aa..ea39cc1dce9 100644 --- a/htdocs/admin/user.php +++ b/htdocs/admin/user.php @@ -6,6 +6,7 @@ * Copyright (C) 2004 Benoit Mortier * Copyright (C) 2005-2011 Regis Houssin * Copyright (C) 2015 Juanjo Menent + * Copyright (C) 2020 Frédéric France * * 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 @@ -42,6 +43,8 @@ $action = GETPOST('action', 'aZ09'); $backtopage = GETPOST('backtopage', 'alpha'); $value = GETPOST('value', 'alpha'); +$label = GETPOST('label', 'alpha'); +$scandir = GETPOST('scandir', 'alpha'); $type = 'user'; diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 8518d232115..221c69b659a 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -6976,34 +6976,37 @@ abstract class CommonObject if (!empty($conf->use_javascript_ajax)) { $out .= ' '."\n"; } diff --git a/htdocs/core/class/html.formfile.class.php b/htdocs/core/class/html.formfile.class.php index 0381a031a7d..380b7a1ad17 100644 --- a/htdocs/core/class/html.formfile.class.php +++ b/htdocs/core/class/html.formfile.class.php @@ -1221,7 +1221,6 @@ class FormFile // Size $sizetoshow = dol_print_size($file['size'], 1, 1); $sizetoshowbytes = dol_print_size($file['size'], 0, 1); - print ''; if ($sizetoshow == $sizetoshowbytes) print $sizetoshow; else { @@ -1659,8 +1658,21 @@ class FormFile print $this->showPreview($file, $modulepart, $file['relativename']); print "\n"; - print ''.dol_print_size($file['size'], 1, 1).''; + + // Size + $sizetoshow = dol_print_size($file['size'], 1, 1); + $sizetoshowbytes = dol_print_size($file['size'], 0, 1); + print ''; + if ($sizetoshow == $sizetoshowbytes) print $sizetoshow; + else { + print $form->textwithpicto($sizetoshow, $sizetoshowbytes, -1); + } + print ''; + + // Date print ''.dol_print_date($file['date'], "dayhour").''; + + // Share link print ''; if ($file['share']) { // Define $urlwithroot diff --git a/htdocs/core/lib/usergroups.lib.php b/htdocs/core/lib/usergroups.lib.php index c464d36c5c1..9277ebbd81b 100644 --- a/htdocs/core/lib/usergroups.lib.php +++ b/htdocs/core/lib/usergroups.lib.php @@ -137,7 +137,7 @@ function user_prepare_head($object) if ((!empty($conf->salaries->enabled) && !empty($user->rights->salaries->read)) || (!empty($conf->hrm->enabled) && !empty($user->rights->hrm->employee->read)) || (!empty($conf->expensereport->enabled) && !empty($user->rights->expensereport->lire) && ($user->id == $object->id || $user->rights->expensereport->readall)) - || (!empty($conf->holiday->enabled) && !empty($user->rights->holiday->read) && ($user->id == $object->id || $user->rights->holiday->read_all)) + || (!empty($conf->holiday->enabled) && !empty($user->rights->holiday->read) && ($user->id == $object->id || $user->rights->holiday->readall)) ) { // Bank $head[$h][0] = DOL_URL_ROOT.'/user/bank.php?id='.$object->id; diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index 8f7501e3fce..ab6c072b1be 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -1800,7 +1800,7 @@ function print_left_eldy_menu($db, $menu_array_before, $menu_array_after, &$tabM $newmenu->add("/holiday/list.php?search_statut=5&mainmenu=hrm&leftmenu=hrm", $langs->trans("RefuseCP"), 2, $user->rights->holiday->read); } $newmenu->add("/holiday/define_holiday.php?mainmenu=hrm&action=request", $langs->trans("MenuConfCP"), 1, $user->rights->holiday->read); - $newmenu->add("/holiday/month_report.php?mainmenu=hrm&leftmenu=holiday", $langs->trans("MenuReportMonth"), 1, $user->rights->holiday->read_all); + $newmenu->add("/holiday/month_report.php?mainmenu=hrm&leftmenu=holiday", $langs->trans("MenuReportMonth"), 1, $user->rights->holiday->readall); $newmenu->add("/holiday/view_log.php?mainmenu=hrm&leftmenu=holiday&action=request", $langs->trans("MenuLogCP"), 1, $user->rights->holiday->define_holiday); } diff --git a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php index 51180681a25..8323400d16c 100644 --- a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php @@ -322,6 +322,7 @@ class pdf_crabe extends ModelePDFFactures $pdf->SetAutoPageBreak(1, 0); $heightforinfotot = 50 + (4 * $nbpayments); // Height reserved to output the info and total part and payment part + if ($heightforinfotot > 220) $heightforinfotot = 220; $heightforfreetext = (isset($conf->global->MAIN_PDF_FREETEXT_HEIGHT) ? $conf->global->MAIN_PDF_FREETEXT_HEIGHT : 5); // Height reserved to output the free text on last page $heightforfooter = $this->marge_basse + 8; // Height reserved to output the footer (value include bottom margin) if (!empty($conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS)) $heightforfooter += 6; diff --git a/htdocs/core/modules/modHoliday.class.php b/htdocs/core/modules/modHoliday.class.php index a146a855ccb..6c6eaba69e0 100644 --- a/htdocs/core/modules/modHoliday.class.php +++ b/htdocs/core/modules/modHoliday.class.php @@ -140,14 +140,14 @@ class modHoliday extends DolibarrModules $r = 0; $this->rights[$r][0] = 20001; // Permission id (must not be already used) - $this->rights[$r][1] = 'Read your own leave requests'; // Permission label + $this->rights[$r][1] = 'Read leave requests (yours and your subordinates)'; // Permission label $this->rights[$r][3] = 0; // Permission by default for new user (0/1) $this->rights[$r][4] = 'read'; // In php code, permission will be checked by test if ($user->rights->permkey->level1->level2) $this->rights[$r][5] = ''; // In php code, permission will be checked by test if ($user->rights->permkey->level1->level2) $r++; $this->rights[$r][0] = 20002; // Permission id (must not be already used) - $this->rights[$r][1] = 'Create/modify your own leave requests'; // Permission label + $this->rights[$r][1] = 'Create/modify leave requests'; // Permission label $this->rights[$r][3] = 0; // Permission by default for new user (0/1) $this->rights[$r][4] = 'write'; // In php code, permission will be checked by test if ($user->rights->permkey->level1->level2) $this->rights[$r][5] = ''; // In php code, permission will be checked by test if ($user->rights->permkey->level1->level2) @@ -170,7 +170,7 @@ class modHoliday extends DolibarrModules $this->rights[$r][0] = 20004; // Permission id (must not be already used) $this->rights[$r][1] = 'Read leave requests for everybody'; // Permission label $this->rights[$r][3] = 0; // Permission by default for new user (0/1) - $this->rights[$r][4] = 'read_all'; // In php code, permission will be checked by test if ($user->rights->permkey->level1->level2) + $this->rights[$r][4] = 'readall'; // In php code, permission will be checked by test if ($user->rights->permkey->level1->level2) $this->rights[$r][5] = ''; // In php code, permission will be checked by test if ($user->rights->permkey->level1->level2) $r++; @@ -201,7 +201,7 @@ class modHoliday extends DolibarrModules $this->export_code[$r] = 'leaverequest_'.$r; $this->export_label[$r] = 'ListeCP'; $this->export_icon[$r] = 'holiday'; - $this->export_permission[$r] = array(array("holiday", "read_all")); + $this->export_permission[$r] = array(array("holiday", "readall")); $this->export_fields_array[$r] = array( 'd.rowid'=>"LeaveId", 'd.fk_type'=>'TypeOfLeaveId', 't.code'=>'TypeOfLeaveCode', 't.label'=>'TypeOfLeaveLabel', 'd.fk_user'=>'UserID', 'u.lastname'=>'Lastname', 'u.firstname'=>'Firstname', 'u.login'=>"Login", 'd.date_debut'=>'DateStart', 'd.date_fin'=>'DateEnd', 'd.halfday'=>'HalfDay', 'none.num_open_days'=>'NbUseDaysCP', diff --git a/htdocs/core/modules/modResource.class.php b/htdocs/core/modules/modResource.class.php index 0e96b8d4c11..0d1353076ec 100644 --- a/htdocs/core/modules/modResource.class.php +++ b/htdocs/core/modules/modResource.class.php @@ -246,9 +246,9 @@ class modResource extends DolibarrModules $this->export_dependencies_array[$r] = array('resource'=>array('r.rowid')); // We must keep this until the aggregate_array is used. To add unique key if we ask a field of a child to avoid the DISTINCT to discard them. $this->export_sql_start[$r] = 'SELECT DISTINCT '; - $this->export_sql_end[$r] = ' FROM '.MAIN_DB_PREFIX.'resource as r '; + $this->export_sql_end[$r] = ' FROM '.MAIN_DB_PREFIX.'resource as r'; $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_type_resource as c ON c.rowid=r.fk_code_type_resource'; - $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'resource_extrafields as extra ON extra.fk_object = c.rowid'; + $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'resource_extrafields as extra ON extra.fk_object = r.rowid'; $this->export_sql_end[$r] .= ' AND r.entity IN ('.getEntity('resource').')'; diff --git a/htdocs/core/modules/modSalaries.class.php b/htdocs/core/modules/modSalaries.class.php index 7159ca634d5..23c892333d8 100644 --- a/htdocs/core/modules/modSalaries.class.php +++ b/htdocs/core/modules/modSalaries.class.php @@ -101,7 +101,7 @@ class modSalaries extends DolibarrModules $r++; $this->rights[$r][0] = 511; - $this->rights[$r][1] = 'Read payments of employee salaries'; + $this->rights[$r][1] = 'Read payments of employee salaries (yours and your subordinates)'; $this->rights[$r][2] = 'r'; $this->rights[$r][3] = 0; $this->rights[$r][4] = 'read'; @@ -125,6 +125,13 @@ class modSalaries extends DolibarrModules $r++; $this->rights[$r][0] = 517; + $this->rights[$r][1] = 'Read payments of salariests of every employee'; + $this->rights[$r][2] = 'r'; + $this->rights[$r][3] = 0; + $this->rights[$r][4] = 'readall'; + + $r++; + $this->rights[$r][0] = 519; $this->rights[$r][1] = 'Export payments of employee salaries'; $this->rights[$r][2] = 'r'; $this->rights[$r][3] = 0; @@ -132,6 +139,7 @@ class modSalaries extends DolibarrModules $this->rights[$r][5] = ''; + // Menus //------- $this->menu = 1; // This module add menu entries. They are coded into menu manager. diff --git a/htdocs/core/modules/modUser.class.php b/htdocs/core/modules/modUser.class.php index b45fdd1b48a..694c77b8881 100644 --- a/htdocs/core/modules/modUser.class.php +++ b/htdocs/core/modules/modUser.class.php @@ -255,13 +255,16 @@ class modUser extends DolibarrModules 'u.admin'=>"user", 'u.statut'=>'user', 'u.datelastlogin'=>'user', 'u.datepreviouslogin'=>'user', 'u.fk_socpeople'=>"contact", 'u.fk_soc'=>"company", 'u.fk_member'=>"member" ); + $keyforselect = 'user'; $keyforelement = 'user'; $keyforaliasextra = 'extra'; + include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php'; if (empty($conf->adherent->enabled)) - { - unset($this->export_fields_array[$r]['u.fk_member']); - unset($this->export_entities_array[$r]['u.fk_member']); - } + { + unset($this->export_fields_array[$r]['u.fk_member']); + unset($this->export_entities_array[$r]['u.fk_member']); + } $this->export_sql_start[$r] = 'SELECT DISTINCT '; $this->export_sql_end[$r] = ' FROM '.MAIN_DB_PREFIX.'user as u'; + $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'user_extrafields as extra ON u.rowid = extra.fk_object'; $this->export_sql_end[$r] .= ' WHERE u.entity IN ('.getEntity('user').')'; // Imports diff --git a/htdocs/core/tpl/contacts.tpl.php b/htdocs/core/tpl/contacts.tpl.php index 012c39c126d..98be97ac5bb 100644 --- a/htdocs/core/tpl/contacts.tpl.php +++ b/htdocs/core/tpl/contacts.tpl.php @@ -145,7 +145,7 @@ if ($permission) $newcardbutton = ''; if (!empty($object->socid) && $object->socid > 1 && $user->rights->societe->creer) { - $newcardbutton .= ''; + $newcardbutton .= ''; } print $newcardbutton; ?> diff --git a/htdocs/core/triggers/interface_50_modAgenda_ActionsAuto.class.php b/htdocs/core/triggers/interface_50_modAgenda_ActionsAuto.class.php index 25816cd591e..fd082884ce2 100644 --- a/htdocs/core/triggers/interface_50_modAgenda_ActionsAuto.class.php +++ b/htdocs/core/triggers/interface_50_modAgenda_ActionsAuto.class.php @@ -77,6 +77,11 @@ class InterfaceActionsAuto extends DolibarrTriggers { if (empty($conf->agenda->enabled)) return 0; // Module not active, we do nothing + // Do not log events when trigger is for creating event (infinite loop) + if (preg_match('/^ACTION_/', $action)) { + return 0; + } + $key = 'MAIN_AGENDA_ACTIONAUTO_'.$action; //var_dump($action.' - '.$conf->global->$key);exit; diff --git a/htdocs/holiday/card.php b/htdocs/holiday/card.php index 2f2c9145beb..53a22f83eee 100644 --- a/htdocs/holiday/card.php +++ b/htdocs/holiday/card.php @@ -73,7 +73,7 @@ if (($id > 0) || $ref) // Check current user can read this leave request $canread = 0; - if (!empty($user->rights->holiday->read_all)) $canread = 1; + if (!empty($user->rights->holiday->readall)) $canread = 1; if (!empty($user->rights->holiday->read) && in_array($object->fk_user, $childids)) $canread = 1; if (!$canread) { diff --git a/htdocs/holiday/class/holiday.class.php b/htdocs/holiday/class/holiday.class.php index 262185df4c5..0677cd2f601 100644 --- a/htdocs/holiday/class/holiday.class.php +++ b/htdocs/holiday/class/holiday.class.php @@ -2116,7 +2116,7 @@ class Holiday extends CommonObject $sql .= " FROM ".MAIN_DB_PREFIX."holiday as h"; $sql .= " WHERE h.statut > 1"; $sql .= " AND h.entity IN (".getEntity('holiday').")"; - if (empty($user->rights->expensereport->read_all)) + if (empty($user->rights->expensereport->readall)) { $userchildids = $user->getAllChildIds(1); $sql .= " AND (h.fk_user IN (".join(',', $userchildids).")"; diff --git a/htdocs/holiday/define_holiday.php b/htdocs/holiday/define_holiday.php index 47f6eeda550..585c80e3e6d 100644 --- a/htdocs/holiday/define_holiday.php +++ b/htdocs/holiday/define_holiday.php @@ -206,7 +206,7 @@ $filters = ''; // Filter on array of ids of all childs $userchilds = array(); -if (empty($user->rights->holiday->read_all)) +if (empty($user->rights->holiday->readall)) { $userchilds = $user->getAllChildIds(1); $filters .= ' AND u.rowid IN ('.join(', ', $userchilds).')'; @@ -293,7 +293,7 @@ if (count($typeleaves) == 0) foreach ($listUsers as $users) { // If user has not permission to edit/read all, we must see only subordinates - if (empty($user->rights->holiday->read_all)) + if (empty($user->rights->holiday->readall)) { if (($users['rowid'] != $user->id) && (!in_array($users['rowid'], $userchilds))) continue; // This user is not into hierarchy of current user, we hide it. } diff --git a/htdocs/holiday/list.php b/htdocs/holiday/list.php index 615ab6cfa44..bfdef939be3 100644 --- a/htdocs/holiday/list.php +++ b/htdocs/holiday/list.php @@ -70,7 +70,7 @@ if ($id > 0) { $canread = 0; if ($id == $user->id) $canread = 1; - if (!empty($user->rights->holiday->read_all)) $canread = 1; + if (!empty($user->rights->holiday->readall)) $canread = 1; if (!empty($user->rights->holiday->read) && in_array($id, $childids)) $canread = 1; if (!$canread) { @@ -318,7 +318,7 @@ if (!empty($search_status) && $search_status != -1) { $sql .= " AND cp.statut = '".$db->escape($search_status)."'\n"; } -if (empty($user->rights->holiday->read_all)) $sql .= ' AND cp.fk_user IN ('.join(',', $childids).')'; +if (empty($user->rights->holiday->readall)) $sql .= ' AND cp.fk_user IN ('.join(',', $childids).')'; if ($id > 0) $sql .= " AND cp.fk_user IN (".$id.")"; // Add where from extra fields @@ -469,7 +469,7 @@ if ($resql) $include = ''; - if (empty($user->rights->holiday->read_all)) $include = 'hierarchyme'; // Can see only its hierarchyl + if (empty($user->rights->holiday->readall)) $include = 'hierarchyme'; // Can see only its hierarchyl print '
'; print ''."\n"; @@ -507,7 +507,7 @@ if ($resql) // Approver if (!empty($arrayfields['cp.fk_validator']['checked'])) { - if ($user->rights->holiday->read_all) + if ($user->rights->holiday->readall) { print ''; $result = 0; diff --git a/htdocs/holiday/view_log.php b/htdocs/holiday/view_log.php index 669bb9aa32f..54049a201ea 100644 --- a/htdocs/holiday/view_log.php +++ b/htdocs/holiday/view_log.php @@ -69,7 +69,7 @@ if (!$sortfield) $sortfield = "cpl.rowid"; if (!$sortorder) $sortorder = "DESC"; // Si l'utilisateur n'a pas le droit de lire cette page -if (!$user->rights->holiday->read_all) accessforbidden(); +if (!$user->rights->holiday->readall) accessforbidden(); // Load translation files required by the page $langs->load('users'); diff --git a/htdocs/hrm/index.php b/htdocs/hrm/index.php index a713ec86100..3ec2a3b898f 100644 --- a/htdocs/hrm/index.php +++ b/htdocs/hrm/index.php @@ -180,7 +180,7 @@ if (!empty($conf->holiday->enabled) && $user->rights->holiday->read) $sql .= " FROM ".MAIN_DB_PREFIX."holiday as x, ".MAIN_DB_PREFIX."user as u"; $sql .= " WHERE u.rowid = x.fk_user"; $sql .= " AND x.entity = ".$conf->entity; - if (empty($user->rights->holiday->read_all)) $sql .= ' AND x.fk_user IN ('.join(',', $childids).')'; + if (empty($user->rights->holiday->readall)) $sql .= ' AND x.fk_user IN ('.join(',', $childids).')'; //if (!$user->rights->societe->client->voir && !$user->socid) $sql.= " AND x.fk_soc = s. rowid AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; //if (!empty($socid)) $sql.= " AND x.fk_soc = ".$socid; $sql .= $db->order("x.tms", "DESC"); diff --git a/htdocs/install/mysql/migration/12.0.0-13.0.0.sql b/htdocs/install/mysql/migration/12.0.0-13.0.0.sql index d52257c4157..b042fea292d 100644 --- a/htdocs/install/mysql/migration/12.0.0-13.0.0.sql +++ b/htdocs/install/mysql/migration/12.0.0-13.0.0.sql @@ -59,6 +59,10 @@ ALTER TABLE llx_mrp_mo_extrafields ADD INDEX idx_mrp_mo_fk_object(fk_object); -- For v13 +insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,note,active) values (111,11, '0','0','No Sales Tax',1); +insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,note,active) values (112,11, '4','0','Sales Tax 4%',1); +insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,note,active) values (113,11, '6','0','Sales Tax 6%',1); + ALTER TABLE llx_bom_bom ADD COLUMN bomtype integer DEFAULT 0; UPDATE llx_emailcollector_emailcollector SET ref = 'Collect_Ticket_Requests' WHERE ref = 'Collect_Ticket_Requets'; @@ -362,6 +366,8 @@ ALTER TABLE llx_facturedet ADD COLUMN ref_ext varchar(255) AFTER multicurrency_t ALTER TABLE llx_c_ticket_category ADD COLUMN fk_parent integer DEFAULT 0 NOT NULL; ALTER TABLE llx_c_ticket_category ADD COLUMN force_severity varchar(32) NULL; +ALTER TABLE llx_c_ticket_severity CHANGE color color VARCHAR(10) NULL; + ALTER TABLE llx_expensereport ADD COLUMN fk_user_creat integer NULL; ALTER TABLE llx_expensereport_ik ADD COLUMN ikoffset double DEFAULT 0 NOT NULL; @@ -406,6 +412,7 @@ ALTER TABLE llx_projet_task_time MODIFY COLUMN datec datetime; DELETE FROM llx_user_rights WHERE fk_id IN (SELECT id FROM llx_rights_def where module = 'holiday' and perms = 'lire_tous'); DELETE FROM llx_rights_def where module = 'holiday' and perms = 'lire_tous'; +UPDATE llx_rights_def set perms = 'readall' WHERE perms = 'read_all' and module = 'holiday'; CREATE TABLE llx_c_product_nature ( rowid integer AUTO_INCREMENT PRIMARY KEY, diff --git a/htdocs/install/mysql/tables/llx_c_ticket_severity.sql b/htdocs/install/mysql/tables/llx_c_ticket_severity.sql index bb8a75abaa9..b9f565c4395 100644 --- a/htdocs/install/mysql/tables/llx_c_ticket_severity.sql +++ b/htdocs/install/mysql/tables/llx_c_ticket_severity.sql @@ -22,7 +22,7 @@ create table llx_c_ticket_severity code varchar(32) NOT NULL, pos varchar(32) NOT NULL, label varchar(128) NOT NULL, - color varchar(10) NOT NULL, + color varchar(10) NULL, active integer DEFAULT 1, use_default integer DEFAULT 1, description varchar(255) diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 3da5c3aff62..9e715bd08d2 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -836,10 +836,11 @@ Permission402=Create/modify discounts Permission403=Validate discounts Permission404=Delete discounts Permission430=Use Debug Bar -Permission511=Read payments of salaries +Permission511=Read payments of salaries (yours and subordinates) Permission512=Create/modify payments of salaries Permission514=Delete payments of salaries -Permission517=Export salaries +Permission517=Read payments of salaries of everybody +Permission519=Export salaries Permission520=Read Loans Permission522=Create/modify loans Permission524=Delete loans diff --git a/htdocs/projet/tasks/time.php b/htdocs/projet/tasks/time.php index 28bb941c687..7329c18cdd8 100644 --- a/htdocs/projet/tasks/time.php +++ b/htdocs/projet/tasks/time.php @@ -1471,7 +1471,7 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0) print ''; print ' '; - print 'rowid.$param.((empty($id) || $tab == 'timespent') ? '&tab=timespent' : '').'">'; + print 'rowid.$param.((empty($id) || $tab == 'timespent') ? '&tab=timespent' : '').'">'; print img_delete('default', 'class="pictodelete paddingleft"'); print ''; diff --git a/htdocs/salaries/list.php b/htdocs/salaries/list.php index 8f6f636c4b2..3ef6531e6fd 100644 --- a/htdocs/salaries/list.php +++ b/htdocs/salaries/list.php @@ -31,11 +31,6 @@ if (!empty($conf->accounting->enabled)) require_once DOL_DOCUMENT_ROOT.'/account // Load translation files required by the page $langs->loadLangs(array("compta", "salaries", "bills", "hrm")); -// Security check -$socid = GETPOST("socid", "int"); -if ($user->socid) $socid = $user->socid; -$result = restrictedArea($user, 'salaries', '', '', ''); - $limit = GETPOST('limit', 'int') ?GETPOST('limit', 'int') : $conf->liste_limit; $search_ref = GETPOST('search_ref', 'int'); $search_user = GETPOST('search_user', 'alpha'); @@ -71,6 +66,13 @@ if (!GETPOST('typeid', 'int')) $typeid = GETPOST('typeid', 'int'); } +$childids = $user->getAllChildIds(1); + +// Security check +$socid = GETPOST("socid", "int"); +if ($user->socid) $socid = $user->socid; +$result = restrictedArea($user, 'salaries', '', '', ''); + /* @@ -112,6 +114,7 @@ $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."bank_account as ba ON b.fk_account = ba.ro $sql .= " ".MAIN_DB_PREFIX."user as u"; $sql .= " WHERE u.rowid = s.fk_user"; $sql .= " AND s.entity = ".$conf->entity; +if (empty($user->rights->salaries->readall)) $sql .= " AND s.fk_user IN (".join(',', $childids).")"; // Search criteria if ($search_ref) $sql .= " AND s.rowid=".$search_ref; diff --git a/htdocs/takepos/admin/terminal.php b/htdocs/takepos/admin/terminal.php index 8ae37c2b8f7..870feb71778 100644 --- a/htdocs/takepos/admin/terminal.php +++ b/htdocs/takepos/admin/terminal.php @@ -41,7 +41,7 @@ if (!empty($_REQUEST['CASHDESK_ID_THIRDPARTY'.$terminal.'_id'])) // Security check if (!$user->admin) accessforbidden(); -$langs->loadLangs(array("admin", "cashdesk", "printing")); +$langs->loadLangs(array("admin", "cashdesk", "printing", "receiptprinter")); global $db; @@ -255,7 +255,7 @@ if ($conf->global->TAKEPOS_PRINT_METHOD == "receiptprinter" || $conf->global->TA foreach ($printer->listprinterstemplates as $key => $value) { $templates[$value['rowid']] = $value['name']; } - print ''; + print ''; print ''; diff --git a/htdocs/takepos/invoice.php b/htdocs/takepos/invoice.php index fc1e690e263..9c4a5320c58 100644 --- a/htdocs/takepos/invoice.php +++ b/htdocs/takepos/invoice.php @@ -672,7 +672,7 @@ if ($action == "updatereduction") if ($action == "order" and $placeid != 0) { include_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; - if ($conf->global->TAKEPOS_PRINT_METHOD == "receiptprinter") { + if ($conf->global->TAKEPOS_PRINT_METHOD == "receiptprinter" || $conf->global->TAKEPOS_PRINT_METHOD == "takeposconnector") { require_once DOL_DOCUMENT_ROOT.'/core/class/dolreceiptprinter.class.php'; $printer = new dolReceiptPrinter($db); } @@ -703,10 +703,13 @@ if ($action == "order" and $placeid != 0) $order_receipt_printer1 .= ''; } } - if ($conf->global->TAKEPOS_PRINT_METHOD == "receiptprinter" && $linestoprint > 0) { + if (($conf->global->TAKEPOS_PRINT_METHOD == "receiptprinter" || $conf->global->TAKEPOS_PRINT_METHOD == "takeposconnector") && $linestoprint > 0) { $invoice->fetch($placeid); //Reload object before send to printer $printer->orderprinter = 1; + echo ""; } $sql = "UPDATE ".MAIN_DB_PREFIX."facturedet set special_code='4' where special_code='1' and fk_facture=".$invoice->id; // Set as printed $db->query($sql); @@ -731,10 +734,13 @@ if ($action == "order" and $placeid != 0) $order_receipt_printer2 .= ''; } } - if ($conf->global->TAKEPOS_PRINT_METHOD == "receiptprinter" && $linestoprint > 0) { + if (($conf->global->TAKEPOS_PRINT_METHOD == "receiptprinter" || $conf->global->TAKEPOS_PRINT_METHOD == "takeposconnector") && $linestoprint > 0) { $invoice->fetch($placeid); //Reload object before send to printer $printer->orderprinter = 2; + echo ""; } $sql = "UPDATE ".MAIN_DB_PREFIX."facturedet set special_code='4' where special_code='2' and fk_facture=".$invoice->id; // Set as printed $db->query($sql); @@ -759,10 +765,13 @@ if ($action == "order" and $placeid != 0) $order_receipt_printer3 .= ''; } } - if ($conf->global->TAKEPOS_PRINT_METHOD == "receiptprinter" && $linestoprint > 0) { + if (($conf->global->TAKEPOS_PRINT_METHOD == "receiptprinter" || $conf->global->TAKEPOS_PRINT_METHOD == "takeposconnector") && $linestoprint > 0) { $invoice->fetch($placeid); //Reload object before send to printer $printer->orderprinter = 3; + echo ""; } $sql = "UPDATE ".MAIN_DB_PREFIX."facturedet set special_code='4' where special_code='3' and fk_facture=".$invoice->id; // Set as printed $db->query($sql); @@ -841,25 +850,59 @@ $(document).ready(function() { - $.ajax({ - type: "POST", - url: 'http://global->TAKEPOS_PRINT_SERVER; ?>:8111/print', - data: '' - }); - global->TAKEPOS_PRINT_SERVER, FILTER_VALIDATE_URL) == true){ + ?> + $.ajax({ + type: "POST", + url: 'global->TAKEPOS_PRINT_SERVER; ?>/printer/index.php', + data: 'invoice='+orderprinter1esc + }); + + $.ajax({ + type: "POST", + url: 'http://global->TAKEPOS_PRINT_SERVER; ?>:8111/print', + data: '' + }); + - $.ajax({ - type: "POST", - url: 'http://global->TAKEPOS_PRINT_SERVER; ?>:8111/print2', - data: '' - }); - global->TAKEPOS_PRINT_SERVER, FILTER_VALIDATE_URL) == true){ + ?> + $.ajax({ + type: "POST", + url: 'global->TAKEPOS_PRINT_SERVER; ?>/printer/index.php?printer=2', + data: 'invoice='+orderprinter2esc + }); + + $.ajax({ + type: "POST", + url: 'http://global->TAKEPOS_PRINT_SERVER; ?>:8111/print2', + data: '' + }); + global->TAKEPOS_PRINT_SERVER, FILTER_VALIDATE_URL) == true){ + ?> + $.ajax({ + type: "POST", + url: 'global->TAKEPOS_PRINT_SERVER; ?>/printer/index.php?printer=3', + data: 'invoice='+orderprinter3esc + }); + free(); + $db->free($result); } else { print ''; } diff --git a/htdocs/user/bank.php b/htdocs/user/bank.php index b1f0b7d4785..8b177518d25 100644 --- a/htdocs/user/bank.php +++ b/htdocs/user/bank.php @@ -388,7 +388,7 @@ if ($action != 'edit' && $action != 'create') // If not bank account yet, $acco * Last holidays */ if (!empty($conf->holiday->enabled) && - ($user->rights->holiday->read_all || ($user->rights->holiday->read && $object->id == $user->id)) + ($user->rights->holiday->readall || ($user->rights->holiday->read && $object->id == $user->id)) ) { $holiday = new Holiday($db); @@ -396,7 +396,7 @@ if ($action != 'edit' && $action != 'create') // If not bank account yet, $acco $sql = "SELECT h.rowid, h.statut as status, h.fk_type, h.date_debut, h.date_fin, h.halfday"; $sql .= " FROM ".MAIN_DB_PREFIX."holiday as h"; $sql .= " WHERE h.fk_user = ".$object->id; - $sql .= " AND h.entity = ".$conf->entity; + $sql .= " AND h.entity IN (".getEntity('holiday').")"; $sql .= " ORDER BY h.date_debut DESC"; $resql = $db->query($sql);
'; $validator = new UserGroup($db); @@ -631,7 +631,7 @@ if ($resql) // If we ask a dedicated card and not allow to see it, we force on user. - if ($id && empty($user->rights->holiday->read_all) && !in_array($id, $childids)) { + if ($id && empty($user->rights->holiday->readall) && !in_array($id, $childids)) { $langs->load("errors"); print '
'.$langs->trans("NotEnoughPermissions").'
'.$langs->trans("MainTemplateToUse").'
'.$langs->trans("MainTemplateToUse").' ('.$langs->trans("SetupReceiptTemplate").')'; print $form->selectarray('TAKEPOS_TEMPLATE_TO_USE_FOR_INVOICES'.$terminal, $templates, (empty($conf->global->{'TAKEPOS_TEMPLATE_TO_USE_FOR_INVOICES'.$terminal}) ? '0' : $conf->global->{'TAKEPOS_TEMPLATE_TO_USE_FOR_INVOICES'.$terminal}), 1); print '
'.$langs->trans('NoUnreadTicketsFound').'