diff --git a/htdocs/comm/propal/card.php b/htdocs/comm/propal/card.php index 7285b13316d..a6e89c93989 100644 --- a/htdocs/comm/propal/card.php +++ b/htdocs/comm/propal/card.php @@ -3047,6 +3047,7 @@ if ($action == 'create') { */ if ($action != 'presend') { + $numlines = count($object->lines); print '
'; $parameters = array(); @@ -3086,45 +3087,65 @@ if ($action == 'create') { } } + $arrayforbutaction = array(); + // Create a sale order - if (isModEnabled('order') && $object->statut == Propal::STATUS_SIGNED) { + $arrayforbutaction[] = array('lang' => 'orders', 'enabled' => (isModEnabled('order') && $object->statut == Propal::STATUS_SIGNED), 'perm' => $usercancreateorder, 'label' => 'AddOrder', 'url' => '/commande/card.php?action=create&origin='.urlencode($object->element).'&originid='.((int) $object->id).'&socid='.((int) $object->socid)); + /*if (isModEnabled('order') && $object->statut == Propal::STATUS_SIGNED) { if ($usercancreateorder) { print ''.$langs->trans("AddOrder").''; } - } + }*/ // Create a purchase order if (getDolGlobalString('WORKFLOW_CAN_CREATE_PURCHASE_ORDER_FROM_PROPOSAL')) { - if ($object->statut == Propal::STATUS_SIGNED && isModEnabled("supplier_order")) { + $arrayforbutaction[] = array('lang' => 'orders', 'enabled' => ($object->statut == Propal::STATUS_SIGNED && isModEnabled("supplier_order")), 'perm' => $usercancreatepurchaseorder, 'label' => 'AddPurchaseOrder', 'url' => '/fourn/commande/card.php?action=create&origin='.urlencode($object->element).'&originid='.((int) $object->id).'&socid='.((int) $object->socid)); + /*if ($object->statut == Propal::STATUS_SIGNED && isModEnabled("supplier_order")) { if ($usercancreatepurchaseorder) { print ''.$langs->trans("AddPurchaseOrder").''; } - } + }*/ } // Create an intervention - if (isModEnabled("service") && isModEnabled('intervention') && $object->statut == Propal::STATUS_SIGNED) { + $arrayforbutaction[] = array('lang' => 'interventions', 'enabled' => (isModEnabled("service") && isModEnabled('intervention') && $object->statut == Propal::STATUS_SIGNED), 'perm' => $usercancreateintervention, 'label' => 'AddIntervention', 'url' => '/fichinter/card.php?action=create&origin='.urlencode($object->element).'&originid='.((int) $object->id).'&socid='.((int) $object->socid)); + /*if (isModEnabled("service") && isModEnabled('intervention') && $object->statut == Propal::STATUS_SIGNED) { if ($usercancreateintervention) { $langs->load("interventions"); print ''.$langs->trans("AddIntervention").''; } - } + }*/ // Create contract - if (isModEnabled('contract') && $object->statut == Propal::STATUS_SIGNED) { + $arrayforbutaction[] = array('lang' => 'contracts', 'enabled' => (isModEnabled('contract') && $object->statut == Propal::STATUS_SIGNED), 'perm' => $usercancreatecontract, 'label' => 'AddContract', 'url' => '/contrat/card.php?action=create&origin='.urlencode($object->element).'&originid='.((int) $object->id).'&socid='.((int) $object->socid)); + /*if (isModEnabled('contract') && $object->statut == Propal::STATUS_SIGNED) { $langs->load("contracts"); if ($usercancreatecontract) { print ''.$langs->trans('AddContract').''; } - } + }*/ // Create an invoice and classify billed if ($object->statut == Propal::STATUS_SIGNED && !getDolGlobalString('PROPOSAL_ARE_NOT_BILLABLE')) { - if (isModEnabled('invoice') && $usercancreateinvoice) { + $arrayforbutaction[] = array('lang' => 'invoice', 'enabled' => isModEnabled('invoice'), 'perm' => $usercancreateinvoice, 'label' => 'CreateBill', 'url' => '/compta/facture/card.php?action=create&origin='.urlencode($object->element).'&originid='.((int) $object->id).'&socid='.((int) $object->socid)); + /*if (isModEnabled('invoice') && $usercancreateinvoice) { print ''.$langs->trans("CreateBill").''; - } + }*/ + } + $actionButtonsParameters = [ + "areDropdownButtons" => !getDolGlobalInt("MAIN_REMOVE_DROPDOWN_CREATE_BUTTONS_ON_ORDER"), + "backtopage" => $_SERVER["PHP_SELF"]."?id=".((int) $id) + ]; + + if ($numlines > 0) { + print dolGetButtonAction('', $langs->trans("Create"), 'default', $arrayforbutaction, $object->id, 1, $actionButtonsParameters); + } else { + print dolGetButtonAction($langs->trans("ErrorObjectMustHaveLinesToBeValidated", $object->ref), $langs->trans("Create"), 'default', $arrayforbutaction, $object->id, 0, $actionButtonsParameters); + } + + if ($object->statut == Propal::STATUS_SIGNED && !getDolGlobalString('PROPOSAL_ARE_NOT_BILLABLE')) { $arrayofinvoiceforpropal = $object->getInvoiceArrayList(); if ((is_array($arrayofinvoiceforpropal) && count($arrayofinvoiceforpropal) > 0) || !getDolGlobalString('WORKFLOW_PROPAL_NEED_INVOICE_TO_BE_CLASSIFIED_BILLED')) { if ($usercanclose) { diff --git a/htdocs/core/modules/modWebsite.class.php b/htdocs/core/modules/modWebsite.class.php index fe01b0e7814..6fa992c9f6f 100644 --- a/htdocs/core/modules/modWebsite.class.php +++ b/htdocs/core/modules/modWebsite.class.php @@ -1,5 +1,6 @@ + * Copyright (C) 2024 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 @@ -180,7 +181,7 @@ class modWebsite extends DolibarrModules if (is_dir($src)) { require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; dol_mkdir($dest); - $result = dolCopyDir($src, $dest, 0, 0); + $result = dolCopyDir($src, $dest, '0', 0); if ($result < 0) { $langs->load("errors"); $this->error = $langs->trans('ErrorFailToCopyDir', $src, $dest); diff --git a/htdocs/fichinter/class/fichinterrec.class.php b/htdocs/fichinter/class/fichinterrec.class.php index a636c7901e3..6d8a56c4bf0 100644 --- a/htdocs/fichinter/class/fichinterrec.class.php +++ b/htdocs/fichinter/class/fichinterrec.class.php @@ -60,16 +60,10 @@ class FichinterRec extends Fichinter */ public $picto = 'intervention'; - /** * @var string title */ public $title; - public $number; - public $date; - public $amount; - public $tva; - public $total; /** * @var int @@ -81,6 +75,9 @@ class FichinterRec extends Fichinter */ public $frequency; + /** + * @var int + */ public $id_origin; /** @@ -93,7 +90,14 @@ class FichinterRec extends Fichinter */ public $propalid; + /** + * @var int|string + */ public $date_last_gen; + + /** + * @var datetime|string + */ public $date_when; /** @@ -107,7 +111,7 @@ class FichinterRec extends Fichinter public $nb_gen_max; /** - * int rank + * @var int rank */ public $rang; @@ -116,6 +120,9 @@ class FichinterRec extends Fichinter */ public $special_code; + /** + * @var int + */ public $usenewprice = 0; /** diff --git a/htdocs/install/step1.php b/htdocs/install/step1.php index 046e6779c95..adf2d2f4839 100644 --- a/htdocs/install/step1.php +++ b/htdocs/install/step1.php @@ -6,6 +6,7 @@ * Copyright (C) 2005-2011 Regis Houssin * Copyright (C) 2015-2016 Raphaël Doursenaud * Copyright (C) 2024 MDW + * Copyright (C) 2024 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 @@ -472,7 +473,7 @@ if (!$error && $db->connected && $action == "set") { // Test on permission not r // Copy directory medias $srcroot = $main_dir.'/install/medias'; $destroot = $main_data_dir.'/medias'; - dolCopyDir($srcroot, $destroot, 0, 0); + dolCopyDir($srcroot, $destroot, '0', 0); if ($error) { print "".$langs->trans("ErrorDirDoesNotExists", $main_data_dir); diff --git a/htdocs/install/upgrade2.php b/htdocs/install/upgrade2.php index 54485f45da0..1f49eca5d4f 100644 --- a/htdocs/install/upgrade2.php +++ b/htdocs/install/upgrade2.php @@ -646,7 +646,7 @@ if (!GETPOST('action', 'aZ09') || preg_match('/upgrade/i', GETPOST('action', 'aZ // Copy directory medias $srcroot = DOL_DOCUMENT_ROOT.'/install/medias'; $destroot = DOL_DATA_ROOT.'/medias'; - dolCopyDir($srcroot, $destroot, 0, 0); + dolCopyDir($srcroot, $destroot, '0', 0); // Actions for all versions (no database change but delete some files and directories) diff --git a/htdocs/modulebuilder/index.php b/htdocs/modulebuilder/index.php index cc77c47cbd7..f3bfde2456f 100644 --- a/htdocs/modulebuilder/index.php +++ b/htdocs/modulebuilder/index.php @@ -275,7 +275,7 @@ if ($dirins && $action == 'initmodule' && $modulename && $user->hasRight("module 'mymodule' => strtolower($modulename), 'MyModule' => $modulename ); - $result = dolCopyDir($srcdir, $destdir, 0, 0, $arrayreplacement); + $result = dolCopyDir($srcdir, $destdir, '0', 0, $arrayreplacement); //dol_mkdir($destfile); if ($result <= 0) { if ($result < 0) { @@ -980,7 +980,7 @@ if ($dirins && $action == 'addlanguage' && !empty($module) && $user->hasRight("m $srcdir = DOL_DOCUMENT_ROOT.'/modulebuilder/template/langs/en_US'; $arrayofreplacement = array('mymodule' => $modulelowercase); } - $result = dolCopyDir($srcdir, $destdir, 0, 0, $arrayofreplacement); + $result = dolCopyDir($srcdir, $destdir, '0', 0, $arrayofreplacement); } } else { setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Language")), null, 'errors'); diff --git a/htdocs/user/class/usergroup.class.php b/htdocs/user/class/usergroup.class.php index 2206ec95cbc..d9341fcf4e2 100644 --- a/htdocs/user/class/usergroup.class.php +++ b/htdocs/user/class/usergroup.class.php @@ -577,7 +577,7 @@ class UserGroup extends CommonObject */ public function getrights($moduletag = '') { - $this->loadRights($moduletag); + return $this->loadRights($moduletag); } /** diff --git a/htdocs/website/class/website.class.php b/htdocs/website/class/website.class.php index ca9632c50cc..ad3449cf761 100644 --- a/htdocs/website/class/website.class.php +++ b/htdocs/website/class/website.class.php @@ -1023,7 +1023,7 @@ class Website extends CommonObject $destdir = $conf->website->dir_temp.'/'.$website->ref.'/containers'; dol_syslog("Copy pages from ".$srcdir." into ".$destdir); - dolCopyDir($srcdir, $destdir, 0, 1, $arrayreplacementinfilename, 2, array('old', 'back'), 1); + dolCopyDir($srcdir, $destdir, '0', 1, $arrayreplacementinfilename, 2, array('old', 'back'), 1); // Copy file README.md and LICENSE from directory containers into directory root if (dol_is_file($conf->website->dir_temp.'/'.$website->ref.'/containers/README.md')) { @@ -1038,14 +1038,14 @@ class Website extends CommonObject $destdir = $conf->website->dir_temp.'/'.$website->ref.'/medias/image/websitekey'; dol_syslog("Copy content from ".$srcdir." into ".$destdir); - dolCopyDir($srcdir, $destdir, 0, 1, $arrayreplacementinfilename); + dolCopyDir($srcdir, $destdir, '0', 1, $arrayreplacementinfilename); // Copy files into medias/js $srcdir = DOL_DATA_ROOT.'/medias/js/'.$website->ref; $destdir = $conf->website->dir_temp.'/'.$website->ref.'/medias/js/websitekey'; dol_syslog("Copy content from ".$srcdir." into ".$destdir); - dolCopyDir($srcdir, $destdir, 0, 1, $arrayreplacementinfilename); + dolCopyDir($srcdir, $destdir, '0', 1, $arrayreplacementinfilename); // Make some replacement into some files $cssindestdir = $conf->website->dir_temp.'/'.$website->ref.'/containers/styles.css.php'; @@ -1264,7 +1264,7 @@ class Website extends CommonObject // Copy containers directory - dolCopyDir($conf->website->dir_temp.'/'.$object->ref.'/containers', $conf->website->dir_output.'/'.$object->ref, 0, 1); // Overwrite if exists + dolCopyDir($conf->website->dir_temp.'/'.$object->ref.'/containers', $conf->website->dir_output.'/'.$object->ref, '0', 1); // Overwrite if exists // Make replacement into css and htmlheader file $cssindestdir = $conf->website->dir_output.'/'.$object->ref.'/styles.css.php'; @@ -1283,7 +1283,7 @@ class Website extends CommonObject // Copy dir medias/image/websitekey if (dol_is_dir($conf->website->dir_temp.'/'.$object->ref.'/medias/image/websitekey')) { - $result = dolCopyDir($conf->website->dir_temp.'/'.$object->ref.'/medias/image/websitekey', $conf->website->dir_output.'/'.$object->ref.'/medias/image/'.$object->ref, 0, 1); + $result = dolCopyDir($conf->website->dir_temp.'/'.$object->ref.'/medias/image/websitekey', $conf->website->dir_output.'/'.$object->ref.'/medias/image/'.$object->ref, '0', 1); if ($result < 0) { $this->error = 'Failed to copy files into '.$conf->website->dir_output.'/'.$object->ref.'/medias/image/'.$object->ref.'.'; dol_syslog($this->error, LOG_WARNING); @@ -1294,7 +1294,7 @@ class Website extends CommonObject // Copy dir medias/js/websitekey if (dol_is_dir($conf->website->dir_temp.'/'.$object->ref.'/medias/js/websitekey')) { - $result = dolCopyDir($conf->website->dir_temp.'/'.$object->ref.'/medias/js/websitekey', $conf->website->dir_output.'/'.$object->ref.'/medias/js/'.$object->ref, 0, 1); + $result = dolCopyDir($conf->website->dir_temp.'/'.$object->ref.'/medias/js/websitekey', $conf->website->dir_output.'/'.$object->ref.'/medias/js/'.$object->ref, '0', 1); if ($result < 0) { $this->error = 'Failed to copy files into '.$conf->website->dir_output.'/'.$object->ref.'/medias/js/'.$object->ref.'.'; dol_syslog($this->error, LOG_WARNING); diff --git a/phpstan.neon.dist b/phpstan.neon.dist index fdbe4201093..d299568fb84 100644 --- a/phpstan.neon.dist +++ b/phpstan.neon.dist @@ -78,7 +78,6 @@ parameters: - '#\(\) expects int, string#' - '#run_sql expects int, string#' - '#on array{url: mixed} in empty\(\) does not exist.#' - - '#dolCopyDir expects string, int given#' - '#dol_copy expects string, int given#' - '#dol_getIdFromCode expects string, int given#' - '#dol_strlen expects string, int given#'