From 633bf3034f5678e67e554b9fb89142c198e84d9a Mon Sep 17 00:00:00 2001 From: BENKE Charlene Date: Thu, 5 Jul 2018 11:52:58 +0200 Subject: [PATCH 01/58] new add total price on dashboard --- htdocs/core/class/workboardresponse.class.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/htdocs/core/class/workboardresponse.class.php b/htdocs/core/class/workboardresponse.class.php index 13de74281ff..62d84e11186 100644 --- a/htdocs/core/class/workboardresponse.class.php +++ b/htdocs/core/class/workboardresponse.class.php @@ -1,6 +1,7 @@ + * Copyright (C) 2018 Charlene Benke * * 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 @@ -66,4 +67,10 @@ class WorkboardResponse */ public $nbtodolate = 0; -} \ No newline at end of file + /** + * total price of items + * @var int + */ + public $total = 0; + +} From c169ff4b973722dc992e1ca74e4a61063a919965 Mon Sep 17 00:00:00 2001 From: BENKE Charlene Date: Thu, 5 Jul 2018 12:01:48 +0200 Subject: [PATCH 02/58] Update facture.class.php --- htdocs/compta/facture/class/facture.class.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index c6e43206c78..e7ea8877d97 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -3712,7 +3712,7 @@ class Facture extends CommonInvoice $clause = " WHERE"; - $sql = "SELECT f.rowid, f.date_lim_reglement as datefin,f.fk_statut"; + $sql = "SELECT f.rowid, f.date_lim_reglement as datefin,f.fk_statut, f.total"; $sql.= " FROM ".MAIN_DB_PREFIX."facture as f"; if (!$user->rights->societe->client->voir && !$user->societe_id) { @@ -3745,6 +3745,7 @@ class Facture extends CommonInvoice $generic_facture->statut = $obj->fk_statut; $response->nbtodo++; + $response->total += $obj->total; if ($generic_facture->hasDelay()) { $response->nbtodolate++; From 9539adfffbedb4281f0a52d6a69c58e19aa3fb6c Mon Sep 17 00:00:00 2001 From: BENKE Charlene Date: Thu, 5 Jul 2018 12:02:38 +0200 Subject: [PATCH 03/58] Update index.php --- htdocs/index.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/htdocs/index.php b/htdocs/index.php index 2843289c557..6125823b4d3 100644 --- a/htdocs/index.php +++ b/htdocs/index.php @@ -565,6 +565,9 @@ if (! empty($valid_dashboardlines)) $sep=($conf->dol_use_jmobile?'
':' '); $boxwork .= ''.$board->img.' '.$board->label.'
'; $boxwork .= ''.$board->nbtodo.''; + if ($board->total > 0) { + $boxwork .= ' / '.price($board->total) .''; + } $boxwork .= ''; if ($board->nbtodolate > 0) { From 5a6cfd5efe7448cb4f0cf27738c964255893a5ff Mon Sep 17 00:00:00 2001 From: BENKE Charlene Date: Thu, 5 Jul 2018 12:08:59 +0200 Subject: [PATCH 04/58] Update commande.class.php --- htdocs/commande/class/commande.class.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php index 17e4387c4de..4ab9beaaf9e 100644 --- a/htdocs/commande/class/commande.class.php +++ b/htdocs/commande/class/commande.class.php @@ -3237,7 +3237,7 @@ class Commande extends CommonOrder $clause = " WHERE"; - $sql = "SELECT c.rowid, c.date_creation as datec, c.date_commande, c.date_livraison as delivery_date, c.fk_statut"; + $sql = "SELECT c.rowid, c.date_creation as datec, c.date_commande, c.date_livraison as delivery_date, c.fk_statut, c.total_ht"; $sql.= " FROM ".MAIN_DB_PREFIX."commande as c"; if (!$user->rights->societe->client->voir && !$user->societe_id) { @@ -3264,6 +3264,7 @@ class Commande extends CommonOrder while ($obj=$this->db->fetch_object($resql)) { $response->nbtodo++; + $response->total+= $obj->total_ht; $generic_commande->statut = $obj->fk_statut; $generic_commande->date_commande = $this->db->jdate($obj->date_commande); From bfe7cd0d9f3a8af843d7b59f233e8bf57a6a23b4 Mon Sep 17 00:00:00 2001 From: BENKE Charlene Date: Thu, 5 Jul 2018 12:11:20 +0200 Subject: [PATCH 05/58] Update propal.class.php --- htdocs/comm/propal/class/propal.class.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index 562032de9fa..99c5d1e747e 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -3137,7 +3137,7 @@ class Propal extends CommonObject $clause = " WHERE"; - $sql = "SELECT p.rowid, p.ref, p.datec as datec, p.fin_validite as datefin"; + $sql = "SELECT p.rowid, p.ref, p.datec as datec, p.fin_validite as datefin, p.total_ht"; $sql.= " FROM ".MAIN_DB_PREFIX."propal as p"; if (!$user->rights->societe->client->voir && !$user->societe_id) { @@ -3181,6 +3181,8 @@ class Propal extends CommonObject while ($obj=$this->db->fetch_object($resql)) { $response->nbtodo++; + $response->total+=$obj->total_ht; + if ($mode == 'opened') { $datelimit = $this->db->jdate($obj->datefin); From b87c3b80afc3bb45df0d132aa6a3df39de8bd68f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Wed, 25 Jul 2018 09:36:34 +0200 Subject: [PATCH 06/58] code cleaning --- htdocs/variants/admin/admin.php | 18 ++++++++---------- htdocs/variants/card.php | 19 ++++++++++--------- htdocs/variants/combinations.php | 21 +++++++++++---------- htdocs/variants/create.php | 9 +++++---- htdocs/variants/create_val.php | 7 ++++--- htdocs/variants/generator.php | 10 +++++----- 6 files changed, 43 insertions(+), 41 deletions(-) diff --git a/htdocs/variants/admin/admin.php b/htdocs/variants/admin/admin.php index dc039bf6d5f..4790961aba7 100644 --- a/htdocs/variants/admin/admin.php +++ b/htdocs/variants/admin/admin.php @@ -1,6 +1,6 @@ +/* Copyright (C) 2016 Marcos García + * Copyright (C) 2018 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 @@ -31,15 +31,15 @@ if ($_POST) { $value = GETPOST('PRODUIT_ATTRIBUTES_HIDECHILD'); if (dolibarr_set_const($db, 'PRODUIT_ATTRIBUTES_HIDECHILD', $value, 'chaine', 0, '', $conf->entity)) { - setEventMessage($langs->trans('RecordSaved')); + setEventMessages($langs->trans('RecordSaved'), null); } else { - setEventMessage($langs->trans('CoreErrorMessage'), 'errors'); + setEventMessages($langs->trans('CoreErrorMessage'), null, 'errors'); } if (dolibarr_set_const($db, 'PRODUIT_ATTRIBUTES_SEPARATOR', GETPOST('PRODUIT_ATTRIBUTES_SEPARATOR'), 'chaine', 0, '', $conf->entity)) { - setEventMessage($langs->trans('RecordSaved')); + setEventMessages($langs->trans('RecordSaved'), null); } else { - setEventMessage($langs->trans('CoreErrorMessage'), 'errors'); + setEventMessages($langs->trans('CoreErrorMessage'), null, 'errors'); } } @@ -62,9 +62,9 @@ print ''.$langs->trans('HideProductCombinations').' print $form->selectyesno("PRODUIT_ATTRIBUTES_HIDECHILD",$conf->global->PRODUIT_ATTRIBUTES_HIDECHILD,1).''; print ''.$langs->trans('CombinationsSeparator').''; if(isset($conf->global->PRODUIT_ATTRIBUTES_SEPARATOR)) { - $separator = $conf->global->PRODUIT_ATTRIBUTES_SEPARATOR; + $separator = $conf->global->PRODUIT_ATTRIBUTES_SEPARATOR; } else { - $separator = "_"; + $separator = "_"; } print ''; print ''; @@ -72,6 +72,4 @@ print '
id; @@ -712,6 +716,35 @@ class doc_generic_project_odt extends ModelePDFProjects $i = 0; $tasks = array(); $listlinestasktime = $listlines->__get('taskstimes'); + if (empty($num)) { + $row['rowid']=''; + $row['task_date']=''; + $row['task_duration']=''; + $row['$tasktime']=''; + $row['note']=''; + $row['fk_user']=''; + $row['name']=''; + $row['firstname']=''; + $row['fullcivname']=''; + $row['amountht']=''; + $row['amountttc']=''; + $row['thm']=''; + $tmparray=$this->get_substitutionarray_taskstime($row,$outputlangs); + foreach($tmparray as $key => $val) + { + try + { + $listlinestasktime->setVars($key, $val, true, 'UTF-8'); + } + catch(OdfException $e) + { + } + catch(SegmentException $e) + { + } + } + $listlinestasktime->merge(); + } while ($i < $num) { $row = $this->db->fetch_array($resql); @@ -723,6 +756,16 @@ class doc_generic_project_odt extends ModelePDFProjects $row['fullcivname']=''; } + if (!empty($row['thm'])) { + $row['amountht']=($row['task_duration'] / 3600) * $row['thm']; + $defaultvat = get_default_tva($mysoc, $mysoc); + $row['amountttc']=price2num($row['amountht'] * (1 + ($defaultvat / 100)),'MT');; + } else { + $row['amountht']=0; + $row['amountttc']=0; + $row['thm']=0; + } + $tmparray=$this->get_substitutionarray_taskstime($row,$outputlangs); foreach($tmparray as $key => $val) @@ -884,60 +927,114 @@ class doc_generic_project_odt extends ModelePDFProjects //List of referent - $listofreferent=array( - 'propal'=>array( - 'title'=>"ListProposalsAssociatedProject", - 'class'=>'Propal', - 'table'=>'propal', - 'test'=>$conf->propal->enabled && $user->rights->propale->lire), - 'order'=>array( - 'title'=>"ListOrdersAssociatedProject", - 'class'=>'Commande', - 'table'=>'commande', - 'test'=>$conf->commande->enabled && $user->rights->commande->lire), - 'invoice'=>array( - 'title'=>"ListInvoicesAssociatedProject", - 'class'=>'Facture', - 'table'=>'facture', - 'test'=>$conf->facture->enabled && $user->rights->facture->lire), - 'invoice_predefined'=>array( - 'title'=>"ListPredefinedInvoicesAssociatedProject", - 'class'=>'FactureRec', - 'table'=>'facture_rec', - 'test'=>$conf->facture->enabled && $user->rights->facture->lire), - 'order_supplier'=>array( - 'title'=>"ListSupplierOrdersAssociatedProject", - 'table'=>'commande_fournisseur', - 'class'=>'CommandeFournisseur', - 'test'=>$conf->fournisseur->enabled && $user->rights->fournisseur->commande->lire), - 'invoice_supplier'=>array( - 'title'=>"ListSupplierInvoicesAssociatedProject", - 'table'=>'facture_fourn', - 'class'=>'FactureFournisseur', - 'test'=>$conf->fournisseur->enabled && $user->rights->fournisseur->facture->lire), - 'contract'=>array( - 'title'=>"ListContractAssociatedProject", - 'class'=>'Contrat', - 'table'=>'contrat', - 'test'=>$conf->contrat->enabled && $user->rights->contrat->lire), - 'intervention'=>array( - 'title'=>"ListFichinterAssociatedProject", - 'class'=>'Fichinter', - 'table'=>'fichinter', - 'disableamount'=>1, - 'test'=>$conf->ficheinter->enabled && $user->rights->ficheinter->lire), - 'trip'=>array( - 'title'=>"ListTripAssociatedProject", - 'class'=>'Deplacement', - 'table'=>'deplacement', - 'disableamount'=>1, - 'test'=>$conf->deplacement->enabled && $user->rights->deplacement->lire), - 'agenda'=>array( - 'title'=>"ListActionsAssociatedProject", - 'class'=>'ActionComm', - 'table'=>'actioncomm', - 'disableamount'=>1, - 'test'=>$conf->agenda->enabled && $user->rights->agenda->allactions->lire) + $listofreferent = array( + 'propal' => array( + 'title' => "ListProposalsAssociatedProject", + 'class' => 'Propal', + 'table' => 'propal', + 'test' => $conf->propal->enabled && $user->rights->propale->lire + ), + 'order' => array( + 'title' => "ListOrdersAssociatedProject", + 'class' => 'Commande', + 'table' => 'commande', + 'test' => $conf->commande->enabled && $user->rights->commande->lire + ), + 'invoice' => array( + 'title' => "ListInvoicesAssociatedProject", + 'class' => 'Facture', + 'table' => 'facture', + 'test' => $conf->facture->enabled && $user->rights->facture->lire + ), + 'invoice_predefined' => array( + 'title' => "ListPredefinedInvoicesAssociatedProject", + 'class' => 'FactureRec', + 'table' => 'facture_rec', + 'test' => $conf->facture->enabled && $user->rights->facture->lire + ), + 'proposal_supplier' => array( + 'title' => "ListSupplierProposalsAssociatedProject", + 'class' => 'SupplierProposal', + 'table' => 'supplier_proposal', + 'test' => $conf->supplier_proposal->enabled && $user->rights->supplier_proposal->lire + ), + 'order_supplier' => array( + 'title' => "ListSupplierOrdersAssociatedProject", + 'table' => 'commande_fournisseur', + 'class' => 'CommandeFournisseur', + 'test' => $conf->fournisseur->enabled && $user->rights->fournisseur->commande->lire + ), + 'invoice_supplier' => array( + 'title' => "ListSupplierInvoicesAssociatedProject", + 'table' => 'facture_fourn', + 'class' => 'FactureFournisseur', + 'test' => $conf->fournisseur->enabled && $user->rights->fournisseur->facture->lire + ), + 'contract' => array( + 'title' => "ListContractAssociatedProject", + 'class' => 'Contrat', + 'table' => 'contrat', + 'test' => $conf->contrat->enabled && $user->rights->contrat->lire + ), + 'intervention' => array( + 'title' => "ListFichinterAssociatedProject", + 'class' => 'Fichinter', + 'table' => 'fichinter', + 'disableamount' => 1, + 'test' => $conf->ficheinter->enabled && $user->rights->ficheinter->lire + ), + 'shipping' => array( + 'title' => "ListShippingAssociatedProject", + 'class' => 'Expedition', + 'table' => 'expedition', + 'disableamount' => 1, + 'test' => $conf->expedition->enabled && $user->rights->expedition->lire + ), + 'trip' => array( + 'title' => "ListTripAssociatedProject", + 'class' => 'Deplacement', + 'table' => 'deplacement', + 'disableamount' => 1, + 'test' => $conf->deplacement->enabled && $user->rights->deplacement->lire + ), + 'expensereport' => array( + 'title' => "ListExpenseReportsAssociatedProject", + 'class' => 'ExpenseReportLine', + 'table' => 'expensereport_det', + 'test' => $conf->expensereport->enabled && $user->rights->expensereport->lire + ), + 'donation' => array( + 'title' => "ListDonationsAssociatedProject", + 'class' => 'Don', + 'table' => 'don', + 'test' => $conf->don->enabled && $user->rights->don->lire + ), + 'loan' => array( + 'title' => "ListLoanAssociatedProject", + 'class' => 'Loan', + 'table' => 'loan', + 'test' => $conf->loan->enabled && $user->rights->loan->read + ), + 'chargesociales' => array( + 'title' => "ListSocialContributionAssociatedProject", + 'class' => 'ChargeSociales', + 'table' => 'chargesociales', + 'urlnew' => DOL_URL_ROOT . '/compta/sociales/card.php?action=create&projectid=' . $id, + 'test' => $conf->tax->enabled && $user->rights->tax->charges->lire + ), + 'stock_mouvement' => array( + 'title' => "ListMouvementStockProject", + 'class' => 'MouvementStock', + 'table' => 'stock_mouvement', + 'test' => ($conf->stock->enabled && $user->rights->stock->mouvement->lire && ! empty($conf->global->STOCK_MOVEMENT_INTO_PROJECT_OVERVIEW)) + ), + 'agenda' => array( + 'title' => "ListActionsAssociatedProject", + 'class' => 'ActionComm', + 'table' => 'actioncomm', + 'disableamount' => 1, + 'test' => $conf->agenda->enabled && $user->rights->agenda->allactions->lire + ) ); //Insert reference diff --git a/htdocs/install/doctemplates/projects/template_project.odt b/htdocs/install/doctemplates/projects/template_project.odt index fca796a26ddcd9d7990b80782bed00a32db09aa8..b6fd0349ea43e1223bdb9ec01343dd1a3895963a 100644 GIT binary patch delta 21028 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 W?N|%a$Kvc+vDwaa6s!isBmV=yfD)Mi literal 29375 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 PHsq%O!d$mjcUS)hQNnij From 7bb781eea8fee6bb8d082b84ba09f60f5b0c91d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Wed, 15 Aug 2018 14:28:34 +0200 Subject: [PATCH 08/58] function declaration --- dev/setup/codesniffer/ruleset.xml | 3 +- .../class/accountancyexport.class.php | 48 ++++++++++----- .../accountancy/class/bookkeeping.class.php | 51 ++++++++++------ .../class/PSWebServiceLibrary.class.php | 3 +- htdocs/cashdesk/class/Facturation.class.php | 5 +- .../categories/class/api_categories.class.php | 6 +- .../mailing/class/advtargetemailing.class.php | 3 +- .../html.formadvtargetemailing.class.php | 23 ++++--- .../comm/propal/class/api_proposals.class.php | 45 +++++++------- htdocs/commande/class/api_orders.class.php | 60 +++++++++++-------- .../facture/class/api_invoices.class.php | 54 ++++++++++------- htdocs/contrat/class/api_contracts.class.php | 27 ++++++--- htdocs/contrat/class/contrat.class.php | 3 +- htdocs/core/class/commonobject.class.php | 3 +- htdocs/core/class/utils.class.php | 3 +- htdocs/opensurvey/fonctions.php | 3 +- htdocs/product/admin/price_rules.php | 8 +-- htdocs/product/class/api_products.class.php | 8 ++- .../product/class/html.formproduct.class.php | 3 +- htdocs/product/class/product.class.php | 3 +- .../class/productcustomerprice.class.php | 23 ++++--- .../class/propalmergepdfproduct.class.php | 7 ++- .../stock/class/api_stockmovements.class.php | 24 ++++---- .../stock/class/api_warehouses.class.php | 6 +- htdocs/product/stock/class/entrepot.class.php | 5 +- htdocs/projet/class/api_projects.class.php | 21 ++++--- htdocs/projet/class/api_tasks.class.php | 21 ++++--- htdocs/public/emailing/mailing-read.php | 8 ++- .../public/emailing/mailing-unsubscribe.php | 8 ++- htdocs/public/website/index.php | 9 ++- htdocs/public/website/styles.css.php | 9 ++- htdocs/societe/class/api_contacts.class.php | 25 +++++--- .../class/api_supplier_proposals.class.php | 38 ++++++------ .../class/supplier_proposal.class.php | 11 ++-- htdocs/user/class/api_users.class.php | 26 +++++--- htdocs/viewimage.php | 8 ++- test/phpunit/RestAPIUserTest.php | 3 +- 37 files changed, 383 insertions(+), 231 deletions(-) diff --git a/dev/setup/codesniffer/ruleset.xml b/dev/setup/codesniffer/ruleset.xml index c1136b668c5..476ae549df2 100644 --- a/dev/setup/codesniffer/ruleset.xml +++ b/dev/setup/codesniffer/ruleset.xml @@ -12,6 +12,7 @@ */nltechno* */htdocs/includes *.min.css + *.js @@ -157,7 +158,7 @@ - + diff --git a/htdocs/accountancy/class/accountancyexport.class.php b/htdocs/accountancy/class/accountancyexport.class.php index 52b5f1c411f..60e60537c57 100644 --- a/htdocs/accountancy/class/accountancyexport.class.php +++ b/htdocs/accountancy/class/accountancyexport.class.php @@ -78,7 +78,8 @@ class AccountancyExport * * @param DoliDb $db Database handler */ - public function __construct(DoliDB &$db) { + public function __construct(DoliDB &$db) + { global $conf; $this->db = &$db; @@ -91,7 +92,8 @@ class AccountancyExport * * @return array of type */ - public static function getType() { + public static function getType() + { global $langs; return array ( @@ -113,7 +115,8 @@ class AccountancyExport * * @return array of type */ - public static function getTypeConfig() { + public static function getTypeConfig() + { global $conf, $langs; return array ( @@ -175,7 +178,8 @@ class AccountancyExport * * @return void */ - public static function downloadFile() { + public static function downloadFile() + { global $conf; $filename = 'general_ledger'; include DOL_DOCUMENT_ROOT . '/accountancy/tpl/export_journal.tpl.php'; @@ -186,7 +190,8 @@ class AccountancyExport * * @param unknown $TData data */ - public function export(&$TData) { + public function export(&$TData) + { global $conf, $langs; self::downloadFile(); @@ -235,7 +240,8 @@ class AccountancyExport * * @return void */ - public function exportNormal($objectLines) { + public function exportNormal($objectLines) + { global $conf; foreach ( $objectLines as $line ) { @@ -259,7 +265,8 @@ class AccountancyExport * * @return void */ - public function exportCegid($objectLines) { + public function exportCegid($objectLines) + { foreach ( $objectLines as $line ) { $date = dol_print_date($line->doc_date, '%d%m%Y'); $separator = ";"; @@ -284,7 +291,8 @@ class AccountancyExport * * @return void */ - public function exportCogilog($objectLines) { + public function exportCogilog($objectLines) + { foreach ( $objectLines as $line ) { $date = dol_print_date($line->doc_date, '%d%m%Y'); $separator = ";"; @@ -317,7 +325,8 @@ class AccountancyExport * * @return void */ - public function exportCoala($objectLines) { + public function exportCoala($objectLines) + { // Coala export $separator = ";"; $end_line = "\n"; @@ -344,7 +353,8 @@ class AccountancyExport * * @return void */ - public function exportBob50($objectLines) { + public function exportBob50($objectLines) + { // Bob50 $separator = ";"; @@ -382,7 +392,8 @@ class AccountancyExport * * @return void */ - public function exportCiel(&$TData) { + public function exportCiel(&$TData) + { global $conf; $end_line ="\r\n"; @@ -422,7 +433,8 @@ class AccountancyExport * * @return void */ - public function exportQuadratus(&$TData) { + public function exportQuadratus(&$TData) + { global $conf; $end_line ="\r\n"; @@ -505,7 +517,8 @@ class AccountancyExport * * @return void */ - public function exportEbp($objectLines) { + public function exportEbp($objectLines) + { $separator = ','; $end_line = "\n"; @@ -537,7 +550,8 @@ class AccountancyExport * * @return void */ - public function exportAgiris($objectLines) { + public function exportAgiris($objectLines) + { $separator = ';'; $end_line = "\n"; @@ -574,7 +588,8 @@ class AccountancyExport * * @return void */ - public function exportConfigurable($objectLines) { + public function exportConfigurable($objectLines) + { global $conf; foreach ($objectLines as $line) { @@ -603,7 +618,8 @@ class AccountancyExport * @param unknown $str data * @param integer $size data */ - public static function trunc($str, $size) { + public static function trunc($str, $size) + { return dol_trunc($str, $size, 'right', 'UTF-8', 1); } } diff --git a/htdocs/accountancy/class/bookkeeping.class.php b/htdocs/accountancy/class/bookkeeping.class.php index f7fed2e2b5b..2d9e2fa4fdb 100644 --- a/htdocs/accountancy/class/bookkeeping.class.php +++ b/htdocs/accountancy/class/bookkeeping.class.php @@ -88,7 +88,8 @@ class BookKeeping extends CommonObject * * @param DoliDb $db Database handler */ - public function __construct(DoliDB $db) { + public function __construct(DoliDB $db) + { $this->db = $db; } @@ -99,7 +100,8 @@ class BookKeeping extends CommonObject * @param bool $notrigger false=launch triggers after, true=disable triggers * @return int <0 if KO, Id of created object if OK */ - public function create(User $user, $notrigger = false) { + public function create(User $user, $notrigger = false) + { global $conf, $langs; dol_syslog(__METHOD__, LOG_DEBUG); @@ -420,7 +422,8 @@ class BookKeeping extends CommonObject * @param string $mode Mode * @return int <0 if KO, Id of created object if OK */ - public function createStd(User $user, $notrigger = false, $mode='') { + public function createStd(User $user, $notrigger = false, $mode='') + { global $conf; dol_syslog(__METHOD__, LOG_DEBUG); @@ -590,7 +593,8 @@ class BookKeeping extends CommonObject * * @return int <0 if KO, 0 if not found, >0 if OK */ - public function fetch($id, $ref = null, $mode='') { + public function fetch($id, $ref = null, $mode='') + { global $conf; dol_syslog(__METHOD__, LOG_DEBUG); @@ -687,7 +691,8 @@ class BookKeeping extends CommonObject * * @return int <0 if KO, >=0 if OK */ - public function fetchAllByAccount($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND') { + public function fetchAllByAccount($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND') + { global $conf; dol_syslog(__METHOD__, LOG_DEBUG); @@ -811,7 +816,8 @@ class BookKeeping extends CommonObject * * @return int <0 if KO, >0 if OK */ - public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND') { + public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND') + { global $conf; dol_syslog(__METHOD__, LOG_DEBUG); @@ -1016,7 +1022,8 @@ class BookKeeping extends CommonObject * @param string $mode Mode * @return int <0 if KO, >0 if OK */ - public function update(User $user, $notrigger = false, $mode='') { + public function update(User $user, $notrigger = false, $mode='') + { $error = 0; dol_syslog(__METHOD__, LOG_DEBUG); @@ -1185,7 +1192,8 @@ class BookKeeping extends CommonObject * @param string $mode Mode * @return int <0 if KO, >0 if OK */ - public function delete(User $user, $notrigger = false, $mode='') { + public function delete(User $user, $notrigger = false, $mode='') + { dol_syslog(__METHOD__, LOG_DEBUG); $error = 0; @@ -1234,7 +1242,8 @@ class BookKeeping extends CommonObject * @param string $importkey Import key * @return int Result */ - function deleteByImportkey($importkey) { + function deleteByImportkey($importkey) + { $this->db->begin(); // first check if line not yet in bookkeeping @@ -1263,7 +1272,8 @@ class BookKeeping extends CommonObject * @param string $mode Mode * @return int <0 if KO, >0 if OK */ - function deleteByYearAndJournal($delyear='', $journal='', $mode='') { + function deleteByYearAndJournal($delyear='', $journal='', $mode='') + { global $conf; if (empty($delyear) && empty($journal)) @@ -1302,7 +1312,8 @@ class BookKeeping extends CommonObject * @param int $piecenum Piecenum to delete * @return int Result */ - function deleteMvtNum($piecenum) { + function deleteMvtNum($piecenum) + { global $conf; $this->db->begin(); @@ -1336,7 +1347,8 @@ class BookKeeping extends CommonObject * * @return int New id of clone */ - public function createFromClone($fromid) { + public function createFromClone($fromid) + { dol_syslog(__METHOD__, LOG_DEBUG); global $user; @@ -1381,7 +1393,8 @@ class BookKeeping extends CommonObject * * @return void */ - public function initAsSpecimen() { + public function initAsSpecimen() + { global $user; $now=dol_now(); @@ -1417,7 +1430,8 @@ class BookKeeping extends CommonObject * @param string $mode Mode * @return int <0 if KO, >0 if OK */ - public function fetchPerMvt($piecenum, $mode='') { + public function fetchPerMvt($piecenum, $mode='') + { global $conf; $sql = "SELECT piece_num,doc_date,code_journal,journal_label,doc_ref,doc_type,date_creation"; @@ -1481,7 +1495,8 @@ class BookKeeping extends CommonObject * @param string $mode Mode * @return int <0 if KO, >0 if OK */ - function fetchAllPerMvt($piecenum, $mode='') { + function fetchAllPerMvt($piecenum, $mode='') + { global $conf; $sql = "SELECT rowid, doc_date, doc_type,"; @@ -1539,7 +1554,8 @@ class BookKeeping extends CommonObject * @param string $model Model * @return int Result */ - function export_bookkeping($model = 'ebp') { + function export_bookkeping($model = 'ebp') + { global $conf; $sql = "SELECT rowid, doc_date, doc_type,"; @@ -1696,7 +1712,8 @@ class BookKeeping extends CommonObject * @param int $aabase Set accounting_account base class to display empty=all or from 1 to 8 will display only account beginning by this number * @return string String with HTML select */ - function select_account($selectid, $htmlname = 'account', $showempty = 0, $event = array(), $select_in = 0, $select_out = 0, $aabase = '') { + function select_account($selectid, $htmlname = 'account', $showempty = 0, $event = array(), $select_in = 0, $select_out = 0, $aabase = '') + { global $conf; require_once DOL_DOCUMENT_ROOT . '/core/lib/accounting.lib.php'; diff --git a/htdocs/admin/dolistore/class/PSWebServiceLibrary.class.php b/htdocs/admin/dolistore/class/PSWebServiceLibrary.class.php index c6e33023e4c..9dbbaa7916d 100644 --- a/htdocs/admin/dolistore/class/PSWebServiceLibrary.class.php +++ b/htdocs/admin/dolistore/class/PSWebServiceLibrary.class.php @@ -69,7 +69,8 @@ class PrestaShopWebservice * @param string $key Authentification key * @param mixed $debug Debug mode Activated (true) or deactivated (false) */ - function __construct($url, $key, $debug = true) { + function __construct($url, $key, $debug = true) + { if (!extension_loaded('curl')) throw new PrestaShopWebserviceException('Please activate the PHP extension \'curl\' to allow use of PrestaShop webservice library'); $this->url = $url; diff --git a/htdocs/cashdesk/class/Facturation.class.php b/htdocs/cashdesk/class/Facturation.class.php index a0e992e9da9..ac26a326962 100644 --- a/htdocs/cashdesk/class/Facturation.class.php +++ b/htdocs/cashdesk/class/Facturation.class.php @@ -310,7 +310,7 @@ class Facturation * @return string Ref */ public function ref($aRef=null) - { + { if (is_null($aRef)) { @@ -652,7 +652,7 @@ class Facturation { return $this->prix_total_ttc; } - else if ( $aTotalTtc == 'RESET' ) + elseif ( $aTotalTtc == 'RESET' ) { $this->prix_total_ttc = null; } @@ -663,4 +663,3 @@ class Facturation } } - diff --git a/htdocs/categories/class/api_categories.class.php b/htdocs/categories/class/api_categories.class.php index c559d760f0f..843e2fc0ee6 100644 --- a/htdocs/categories/class/api_categories.class.php +++ b/htdocs/categories/class/api_categories.class.php @@ -103,7 +103,8 @@ class Categories extends DolibarrApi * * @throws RestException */ - function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $type = '', $sqlfilters = '') { + function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $type = '', $sqlfilters = '') + { global $db, $conf; $obj_ret = array(); @@ -266,7 +267,8 @@ class Categories extends DolibarrApi * @param Categorie $object Object to clean * @return array Array of cleaned object properties */ - function _cleanObjectDatas($object) { + function _cleanObjectDatas($object) + { $object = parent::_cleanObjectDatas($object); diff --git a/htdocs/comm/mailing/class/advtargetemailing.class.php b/htdocs/comm/mailing/class/advtargetemailing.class.php index 50d9faf0637..2b65e6cc378 100644 --- a/htdocs/comm/mailing/class/advtargetemailing.class.php +++ b/htdocs/comm/mailing/class/advtargetemailing.class.php @@ -916,7 +916,8 @@ class AdvanceTargetingMailing extends CommonObject * For exemple jean;joe;jim%%;!jimo;!jima%> will target all jean, joe, start with jim but not jimo and not everythnig taht start by jima * @return string Sql to use for the where condition */ - public function transformToSQL($column_to_test,$criteria) { + public function transformToSQL($column_to_test,$criteria) + { $return_sql_criteria = '('; //This is a multiple value test diff --git a/htdocs/comm/mailing/class/html.formadvtargetemailing.class.php b/htdocs/comm/mailing/class/html.formadvtargetemailing.class.php index 7408bb27d37..61c306fe5bf 100644 --- a/htdocs/comm/mailing/class/html.formadvtargetemailing.class.php +++ b/htdocs/comm/mailing/class/html.formadvtargetemailing.class.php @@ -34,7 +34,8 @@ class FormAdvTargetEmailing extends Form * * @param DoliDB $db handler */ - function __construct($db) { + function __construct($db) + { global $langs; $this->db = $db; @@ -47,7 +48,8 @@ class FormAdvTargetEmailing extends Form * @param string $htmlname select field * @return string select field */ - function multiselectProspectionStatus($selected_array = array(), $htmlname = 'cust_prospect_status') { + function multiselectProspectionStatus($selected_array = array(), $htmlname = 'cust_prospect_status') + { global $conf, $langs; $options_array = array(); @@ -83,7 +85,8 @@ class FormAdvTargetEmailing extends Form * @param array $selected_array or Code or Label of preselected country * @return string HTML string with select */ - function multiselectCountry($htmlname = 'country_id', $selected_array=array()) { + function multiselectCountry($htmlname = 'country_id', $selected_array=array()) + { global $conf, $langs; $langs->load("dict"); @@ -143,7 +146,8 @@ class FormAdvTargetEmailing extends Form * @param User $user User action * @return string combo list code */ - function multiselectselectSalesRepresentatives($htmlname, $selected_array, $user) { + function multiselectselectSalesRepresentatives($htmlname, $selected_array, $user) + { global $conf; @@ -184,7 +188,8 @@ class FormAdvTargetEmailing extends Form * @param array $selected_array selected array * @return string combo list code */ - function multiselectselectLanguage($htmlname='', $selected_array=array()) { + function multiselectselectLanguage($htmlname='', $selected_array=array()) + { global $conf,$langs; @@ -330,7 +335,8 @@ class FormAdvTargetEmailing extends Form * @param int $showempty show empty * @return string HTML combo */ - function advMultiselectarray($htmlname, $options_array = array(), $selected_array = array(), $showempty = 0) { + function advMultiselectarray($htmlname, $options_array = array(), $selected_array = array(), $showempty = 0) + { global $conf, $langs; $form=new Form($this->db); @@ -417,7 +423,8 @@ class FormAdvTargetEmailing extends Form * @param string $type_element Type element. Example: 'mailing' * @return string HTML combo */ - public function selectAdvtargetemailingTemplate($htmlname='template_id', $selected=0, $showempty=0, $type_element='mailing') { + public function selectAdvtargetemailingTemplate($htmlname='template_id', $selected=0, $showempty=0, $type_element='mailing') + { global $conf, $user, $langs; $out = ''; @@ -460,4 +467,4 @@ class FormAdvTargetEmailing extends Form $this->db->free ( $resql ); return $out; } -} \ No newline at end of file +} diff --git a/htdocs/comm/propal/class/api_proposals.class.php b/htdocs/comm/propal/class/api_proposals.class.php index 39857d88365..0313add9cae 100644 --- a/htdocs/comm/propal/class/api_proposals.class.php +++ b/htdocs/comm/propal/class/api_proposals.class.php @@ -97,7 +97,8 @@ class Proposals extends DolibarrApi * @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.ref:like:'SO-%') and (t.datec:<:'20160101')" * @return array Array of order objects */ - function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids = '', $sqlfilters = '') { + function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids = '', $sqlfilters = '') + { global $db, $conf; $obj_ret = array(); @@ -215,7 +216,8 @@ class Proposals extends DolibarrApi * * @return int */ - function getLines($id) { + function getLines($id) + { if(! DolibarrApiAccess::$user->rights->propal->lire) { throw new RestException(401); } @@ -381,7 +383,8 @@ class Proposals extends DolibarrApi * @throws 401 * @throws 404 */ - function deleteLine($id, $lineid) { + function deleteLine($id, $lineid) + { if(! DolibarrApiAccess::$user->rights->propal->creer) { throw new RestException(401); } @@ -415,7 +418,8 @@ class Proposals extends DolibarrApi * * @return int */ - function put($id, $request_data = null) { + function put($id, $request_data = null) + { if(! DolibarrApiAccess::$user->rights->propal->creer) { throw new RestException(401); } @@ -703,23 +707,24 @@ class Proposals extends DolibarrApi } - /** - * Clean sensible object datas - * - * @param object $object Object to clean - * @return array Array of cleaned object properties - */ - function _cleanObjectDatas($object) { + /** + * Clean sensible object datas + * + * @param object $object Object to clean + * @return array Array of cleaned object properties + */ + function _cleanObjectDatas($object) + { - $object = parent::_cleanObjectDatas($object); + $object = parent::_cleanObjectDatas($object); - unset($object->note); - unset($object->name); - unset($object->lastname); - unset($object->firstname); - unset($object->civility_id); - unset($object->address); + unset($object->note); + unset($object->name); + unset($object->lastname); + unset($object->firstname); + unset($object->civility_id); + unset($object->address); - return $object; - } + return $object; + } } diff --git a/htdocs/commande/class/api_orders.class.php b/htdocs/commande/class/api_orders.class.php index d43325f9c58..c0266d76d70 100644 --- a/htdocs/commande/class/api_orders.class.php +++ b/htdocs/commande/class/api_orders.class.php @@ -97,9 +97,10 @@ class Orders extends DolibarrApi * @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.ref:like:'SO-%') and (t.date_creation:<:'20160101')" * @return array Array of order objects * - * @throws RestException + * @throws RestException */ - function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids = '', $sqlfilters = '') { + function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids = '', $sqlfilters = '') + { global $db, $conf; $obj_ret = array(); @@ -218,7 +219,8 @@ class Orders extends DolibarrApi * * @return int */ - function getLines($id) { + function getLines($id) + { if(! DolibarrApiAccess::$user->rights->commande->lire) { throw new RestException(401); } @@ -249,7 +251,8 @@ class Orders extends DolibarrApi * * @return int */ - function postLine($id, $request_data = null) { + function postLine($id, $request_data = null) + { if(! DolibarrApiAccess::$user->rights->commande->creer) { throw new RestException(401); } @@ -311,7 +314,8 @@ class Orders extends DolibarrApi * * @return object */ - function putLine($id, $lineid, $request_data = null) { + function putLine($id, $lineid, $request_data = null) + { if(! DolibarrApiAccess::$user->rights->commande->creer) { throw new RestException(401); } @@ -371,7 +375,8 @@ class Orders extends DolibarrApi * @throws 401 * @throws 404 */ - function deleteLine($id, $lineid) { + function deleteLine($id, $lineid) + { if(! DolibarrApiAccess::$user->rights->commande->creer) { throw new RestException(401); } @@ -403,7 +408,8 @@ class Orders extends DolibarrApi * * @return int */ - function put($id, $request_data = null) { + function put($id, $request_data = null) + { if (! DolibarrApiAccess::$user->rights->commande->creer) { throw new RestException(401); } @@ -544,7 +550,8 @@ class Orders extends DolibarrApi * @throws 404 * @throws 405 */ - function reopen($id) { + function reopen($id) + { if(! DolibarrApiAccess::$user->rights->commande->creer) { throw new RestException(401); @@ -581,7 +588,8 @@ class Orders extends DolibarrApi * @throws 404 * @throws 405 */ - function setinvoiced($id) { + function setinvoiced($id) + { if(! DolibarrApiAccess::$user->rights->commande->creer) { throw new RestException(401); @@ -706,21 +714,22 @@ class Orders extends DolibarrApi } - /** - * Create an order using an existing proposal. - * - * - * @param int $proposalid Id of the proposal - * - * @url POST /createfromproposal/{proposalid} - * - * @return int - * @throws 400 - * @throws 401 - * @throws 404 - * @throws 405 - */ - function createOrderFromProposal($proposalid) { + /** + * Create an order using an existing proposal. + * + * + * @param int $proposalid Id of the proposal + * + * @url POST /createfromproposal/{proposalid} + * + * @return int + * @throws 400 + * @throws 401 + * @throws 404 + * @throws 405 + */ + function createOrderFromProposal($proposalid) + { require_once DOL_DOCUMENT_ROOT . '/comm/propal/class/propal.class.php'; @@ -756,7 +765,8 @@ class Orders extends DolibarrApi * @param object $object Object to clean * @return array Array of cleaned object properties */ - function _cleanObjectDatas($object) { + function _cleanObjectDatas($object) + { $object = parent::_cleanObjectDatas($object); diff --git a/htdocs/compta/facture/class/api_invoices.class.php b/htdocs/compta/facture/class/api_invoices.class.php index 2b8ebd57d06..ab2903c95b4 100644 --- a/htdocs/compta/facture/class/api_invoices.class.php +++ b/htdocs/compta/facture/class/api_invoices.class.php @@ -32,7 +32,7 @@ class Invoices extends DolibarrApi * @var array $FIELDS Mandatory fields, checked when create and update object */ static $FIELDS = array( - 'socid' + 'socid', ); /** @@ -104,7 +104,8 @@ class Invoices extends DolibarrApi * * @throws RestException */ - function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids='', $status='', $sqlfilters = '') { + function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids='', $status='', $sqlfilters = '') + { global $db, $conf; $obj_ret = array(); @@ -245,7 +246,8 @@ class Invoices extends DolibarrApi * @throws 404 * @throws 405 */ - function createInvoiceFromOrder($orderid) { + function createInvoiceFromOrder($orderid) + { require_once DOL_DOCUMENT_ROOT . '/commande/class/commande.class.php'; @@ -282,7 +284,8 @@ class Invoices extends DolibarrApi * * @return int */ - function getLines($id) { + function getLines($id) + { if(! DolibarrApiAccess::$user->rights->facture->lire) { throw new RestException(401); } @@ -319,7 +322,8 @@ class Invoices extends DolibarrApi * @throws 401 * @throws 404 */ - function putLine($id, $lineid, $request_data = null) { + function putLine($id, $lineid, $request_data = null) + { if(! DolibarrApiAccess::$user->rights->facture->creer) { throw new RestException(401); } @@ -383,7 +387,8 @@ class Invoices extends DolibarrApi * @throws 404 * @throws 405 */ - function deleteLine($id, $lineid) { + function deleteLine($id, $lineid) + { if(! DolibarrApiAccess::$user->rights->facture->creer) { throw new RestException(401); @@ -511,7 +516,8 @@ class Invoices extends DolibarrApi * @throws 404 * @throws 400 */ - function postLine($id, $request_data = null) { + function postLine($id, $request_data = null) + { if(! DolibarrApiAccess::$user->rights->facture->creer) { throw new RestException(401); } @@ -849,7 +855,8 @@ class Invoices extends DolibarrApi * @throws 404 * @throws 405 */ - function useDiscount($id, $discountid) { + function useDiscount($id, $discountid) + { if(! DolibarrApiAccess::$user->rights->facture->creer) { throw new RestException(401); @@ -894,7 +901,8 @@ class Invoices extends DolibarrApi * @throws 404 * @throws 405 */ - function useCreditNote($id, $discountid) { + function useCreditNote($id, $discountid) + { require_once DOL_DOCUMENT_ROOT . '/core/class/discount.class.php'; @@ -938,7 +946,8 @@ class Invoices extends DolibarrApi * @throws 404 * @throws 405 */ - function getPayments($id) { + function getPayments($id) + { if(! DolibarrApiAccess::$user->rights->facture->lire) { throw new RestException(401); @@ -985,8 +994,9 @@ class Invoices extends DolibarrApi * @throws 401 * @throws 404 */ - function addPayment($id, $datepaye, $paiementid, $closepaidinvoices, $accountid, $num_paiement='', $comment='', $chqemetteur='', $chqbank='') { - global $conf; + function addPayment($id, $datepaye, $paiementid, $closepaidinvoices, $accountid, $num_paiement='', $comment='', $chqemetteur='', $chqbank='') + { + global $conf; require_once DOL_DOCUMENT_ROOT . '/compta/paiement/class/paiement.class.php'; @@ -1215,18 +1225,19 @@ class Invoices extends DolibarrApi * @param object $object Object to clean * @return array Array of cleaned object properties */ - function _cleanObjectDatas($object) { + function _cleanObjectDatas($object) + { - $object = parent::_cleanObjectDatas($object); + $object = parent::_cleanObjectDatas($object); unset($object->note); - unset($object->address); - unset($object->barcode_type); - unset($object->barcode_type_code); - unset($object->barcode_type_label); - unset($object->barcode_type_coder); + unset($object->address); + unset($object->barcode_type); + unset($object->barcode_type_code); + unset($object->barcode_type_label); + unset($object->barcode_type_coder); - return $object; + return $object; } /** @@ -1241,8 +1252,9 @@ class Invoices extends DolibarrApi { $invoice = array(); foreach (Invoices::$FIELDS as $field) { - if (!isset($data[$field])) + if (!isset($data[$field])) { throw new RestException(400, "$field field missing"); + } $invoice[$field] = $data[$field]; } return $invoice; diff --git a/htdocs/contrat/class/api_contracts.class.php b/htdocs/contrat/class/api_contracts.class.php index f5303074e63..8c206554ee1 100644 --- a/htdocs/contrat/class/api_contracts.class.php +++ b/htdocs/contrat/class/api_contracts.class.php @@ -100,7 +100,8 @@ class Contracts extends DolibarrApi * * @throws RestException */ - function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids = '', $sqlfilters = '') { + function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids = '', $sqlfilters = '') + { global $db, $conf; $obj_ret = array(); @@ -216,7 +217,8 @@ class Contracts extends DolibarrApi * * @return int */ - function getLines($id) { + function getLines($id) + { if(! DolibarrApiAccess::$user->rights->contrat->lire) { throw new RestException(401); } @@ -247,7 +249,8 @@ class Contracts extends DolibarrApi * * @return int */ - function postLine($id, $request_data = null) { + function postLine($id, $request_data = null) + { if(! DolibarrApiAccess::$user->rights->contrat->creer) { throw new RestException(401); } @@ -300,7 +303,8 @@ class Contracts extends DolibarrApi * * @return object */ - function putLine($id, $lineid, $request_data = null) { + function putLine($id, $lineid, $request_data = null) + { if(! DolibarrApiAccess::$user->rights->contrat->creer) { throw new RestException(401); } @@ -359,7 +363,8 @@ class Contracts extends DolibarrApi * * @return object */ - function activateLine($id, $lineid, $datestart, $dateend = null, $comment = null) { + function activateLine($id, $lineid, $datestart, $dateend = null, $comment = null) + { if(! DolibarrApiAccess::$user->rights->contrat->creer) { throw new RestException(401); } @@ -396,7 +401,8 @@ class Contracts extends DolibarrApi * * @return object */ - function unactivateLine($id, $lineid, $datestart, $comment = null) { + function unactivateLine($id, $lineid, $datestart, $comment = null) + { if(! DolibarrApiAccess::$user->rights->contrat->creer) { throw new RestException(401); } @@ -436,7 +442,8 @@ class Contracts extends DolibarrApi * @throws 401 * @throws 404 */ - function deleteLine($id, $lineid) { + function deleteLine($id, $lineid) + { if(! DolibarrApiAccess::$user->rights->contrat->creer) { throw new RestException(401); } @@ -470,7 +477,8 @@ class Contracts extends DolibarrApi * * @return int */ - function put($id, $request_data = null) { + function put($id, $request_data = null) + { if(! DolibarrApiAccess::$user->rights->contrat->creer) { throw new RestException(401); } @@ -632,7 +640,8 @@ class Contracts extends DolibarrApi * @param object $object Object to clean * @return array Array of cleaned object properties */ - function _cleanObjectDatas($object) { + function _cleanObjectDatas($object) + { $object = parent::_cleanObjectDatas($object); diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php index a867d8937c9..1fb2bb3afa6 100644 --- a/htdocs/contrat/class/contrat.class.php +++ b/htdocs/contrat/class/contrat.class.php @@ -2350,7 +2350,8 @@ class Contrat extends CommonObject * @param int $notrigger 1=Does not execute triggers, 0= execute triggers * @return int New id of clone */ - function createFromClone($socid = 0, $notrigger=0) { + function createFromClone($socid = 0, $notrigger=0) + { global $db, $user, $langs, $conf, $hookmanager; dol_include_once('/projet/class/project.class.php'); diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 72ef472229d..b2b1234acdc 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -6873,7 +6873,8 @@ abstract class CommonObject * @param array $fieldsentry Properties of field * @return string */ - protected function quote($value, $fieldsentry) { + protected function quote($value, $fieldsentry) + { if (is_null($value)) return 'NULL'; else if (preg_match('/^(int|double|real)/i', $fieldsentry['type'])) return $this->db->escape("$value"); else return "'".$this->db->escape($value)."'"; diff --git a/htdocs/core/class/utils.class.php b/htdocs/core/class/utils.class.php index 3a7a79122c9..b9a9ad6f4bf 100644 --- a/htdocs/core/class/utils.class.php +++ b/htdocs/core/class/utils.class.php @@ -677,7 +677,8 @@ class Utils * * @return int 0 if OK, < 0 if KO */ - function compressSyslogs() { + function compressSyslogs() + { global $conf; if(empty($conf->loghandlers['mod_syslog_file'])) { // File Syslog disabled diff --git a/htdocs/opensurvey/fonctions.php b/htdocs/opensurvey/fonctions.php index d2f401813a0..6cd05444445 100644 --- a/htdocs/opensurvey/fonctions.php +++ b/htdocs/opensurvey/fonctions.php @@ -29,7 +29,8 @@ * @param Opensurveysondage $object Current viewing poll * @return array Tabs for the opensurvey section */ -function opensurvey_prepare_head(Opensurveysondage $object) { +function opensurvey_prepare_head(Opensurveysondage $object) +{ global $langs, $conf; diff --git a/htdocs/product/admin/price_rules.php b/htdocs/product/admin/price_rules.php index 0049daeaa7d..53be8d0b12e 100644 --- a/htdocs/product/admin/price_rules.php +++ b/htdocs/product/admin/price_rules.php @@ -14,7 +14,7 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * + * * Page to set how to autocalculate price for each level when option * PRODUCT_MULTIPRICE is on. */ @@ -145,7 +145,7 @@ for ($i = 1; $i <= $conf->global->PRODUIT_MULTIPRICES_LIMIT; $i++) { $price_options[$i] = $langs->trans('SellingPrice').' '.$i; } -$genPriceOptions = function($level) use ($price_options) { +$genPriceOptions = function ($level) use ($price_options) { $return = array(); @@ -190,14 +190,14 @@ $genPriceOptions = function($level) use ($price_options) { -

'; - + print ''; llxFooter(); diff --git a/htdocs/product/class/api_products.class.php b/htdocs/product/class/api_products.class.php index 8ba4eaaecc8..ce6928c7331 100644 --- a/htdocs/product/class/api_products.class.php +++ b/htdocs/product/class/api_products.class.php @@ -102,7 +102,8 @@ class Products extends DolibarrApi * @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.tobuy:=:0) and (t.tosell:=:1)" * @return array Array of product objects */ - function index($sortfield = "t.ref", $sortorder = 'ASC', $limit = 100, $page = 0, $mode=0, $category=0, $sqlfilters = '') { + function index($sortfield = "t.ref", $sortorder = 'ASC', $limit = 100, $page = 0, $mode=0, $category=0, $sqlfilters = '') + { global $db, $conf; $obj_ret = array(); @@ -340,7 +341,7 @@ class Products extends DolibarrApi } if ($result < 0) { - throw new RestException(503, 'Error when retrieve category list : '.array_merge(array($categories->error), $categories->errors)); + throw new RestException(503, 'Error when retrieve category list : '.array_merge(array($categories->error), $categories->errors)); } return $result; @@ -467,7 +468,8 @@ class Products extends DolibarrApi * @param object $object Object to clean * @return array Array of cleaned object properties */ - function _cleanObjectDatas($object) { + function _cleanObjectDatas($object) + { $object = parent::_cleanObjectDatas($object); diff --git a/htdocs/product/class/html.formproduct.class.php b/htdocs/product/class/html.formproduct.class.php index 6ae31645a50..b34f4a88b2d 100644 --- a/htdocs/product/class/html.formproduct.class.php +++ b/htdocs/product/class/html.formproduct.class.php @@ -167,7 +167,8 @@ class FormProduct * @param String $final_label full label with all parents, separated by ' >> ' (completed on each call) * @return String full label with all parents, separated by ' >> ' */ - private function get_parent_path($tab, $final_label='') { + private function get_parent_path($tab, $final_label='') + { if(empty($final_label)) $final_label = $tab['label']; diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index d19f8f86732..0964bd0e2da 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -4505,7 +4505,8 @@ class Product extends CommonObject * * @param int[]|int $categories Category or categories IDs */ - public function setCategories($categories) { + public function setCategories($categories) + { // Handle single category if (! is_array($categories)) { $categories = array($categories); diff --git a/htdocs/product/class/productcustomerprice.class.php b/htdocs/product/class/productcustomerprice.class.php index fdff7b1fe6d..56b5004d31b 100644 --- a/htdocs/product/class/productcustomerprice.class.php +++ b/htdocs/product/class/productcustomerprice.class.php @@ -54,7 +54,8 @@ class Productcustomerprice extends CommonObject * * @param DoliDb $db handler */ - function __construct($db) { + function __construct($db) + { $this->db = $db; return 1; @@ -68,7 +69,8 @@ class Productcustomerprice extends CommonObject * @param int $forceupdateaffiliate update price on each soc child * @return int <0 if KO, Id of created object if OK */ - function create($user, $notrigger = 0, $forceupdateaffiliate = 0) { + function create($user, $notrigger = 0, $forceupdateaffiliate = 0) + { global $conf, $langs; $error = 0; @@ -342,7 +344,7 @@ class Productcustomerprice extends CommonObject $sql .= " AND prod.rowid=t.fk_product "; $sql .= " AND prod.entity IN (" . getEntity('product') . ")"; $sql .= " AND t.entity IN (" . getEntity('productprice') . ")"; - + // Manage filter if (count($filter) > 0) { foreach ( $filter as $key => $value ) { @@ -522,7 +524,8 @@ class Productcustomerprice extends CommonObject * @param int $forceupdateaffiliate update price on each soc child * @return int <0 if KO, >0 if OK */ - function update($user = 0, $notrigger = 0, $forceupdateaffiliate = 0) { + function update($user = 0, $notrigger = 0, $forceupdateaffiliate = 0) + { global $conf, $langs; $error = 0; @@ -719,7 +722,8 @@ class Productcustomerprice extends CommonObject * @param int $forceupdateaffiliate update price on each soc child * @return int <0 if KO, >0 if OK */ - function setPriceOnAffiliateThirdparty($user, $forceupdateaffiliate) { + function setPriceOnAffiliateThirdparty($user, $forceupdateaffiliate) + { $error = 0; @@ -811,7 +815,8 @@ class Productcustomerprice extends CommonObject * @param int $notrigger triggers after, 1=disable triggers * @return int <0 if KO, >0 if OK */ - function delete($user, $notrigger = 0) { + function delete($user, $notrigger = 0) + { global $conf, $langs; $error = 0; @@ -864,7 +869,8 @@ class Productcustomerprice extends CommonObject * @param int $fromid of object to clone * @return int id of clone */ - function createFromClone($fromid) { + function createFromClone($fromid) + { global $user, $langs; @@ -914,7 +920,8 @@ class Productcustomerprice extends CommonObject * * @return void */ - function initAsSpecimen() { + function initAsSpecimen() + { $this->id = 0; diff --git a/htdocs/product/class/propalmergepdfproduct.class.php b/htdocs/product/class/propalmergepdfproduct.class.php index 92c6ffadca4..641a8f155b7 100644 --- a/htdocs/product/class/propalmergepdfproduct.class.php +++ b/htdocs/product/class/propalmergepdfproduct.class.php @@ -647,7 +647,8 @@ class PropalmergepdfproductLine var $tms=''; var $import_key; - function __construct() { - return 1; - } + function __construct() + { + return 1; + } } diff --git a/htdocs/product/stock/class/api_stockmovements.class.php b/htdocs/product/stock/class/api_stockmovements.class.php index 16d21c02eb3..2dc45a262ab 100644 --- a/htdocs/product/stock/class/api_stockmovements.class.php +++ b/htdocs/product/stock/class/api_stockmovements.class.php @@ -93,7 +93,8 @@ class StockMovements extends DolibarrApi * * @throws RestException */ - function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $sqlfilters = '') { + function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $sqlfilters = '') + { global $db, $conf; $obj_ret = array(); @@ -153,15 +154,15 @@ class StockMovements extends DolibarrApi return $obj_ret; } -/* - * @param int $product_id Id product id {@min 1} - * @param int $warehouse_id Id warehouse {@min 1} - * @param float $qty Qty to add (Use negative value for a stock decrease) {@min 0} {@message qty must be higher than 0} - * @param string $lot Lot - * @param string $movementcode Movement code {@example INV123} - * @param string $movementlabel Movement label {@example Inventory number 123} - * @param string $price To update AWP (Average Weighted Price) when you make a stock increase (qty must be higher then 0). - */ + /* + * @param int $product_id Id product id {@min 1} + * @param int $warehouse_id Id warehouse {@min 1} + * @param float $qty Qty to add (Use negative value for a stock decrease) {@min 0} {@message qty must be higher than 0} + * @param string $lot Lot + * @param string $movementcode Movement code {@example INV123} + * @param string $movementlabel Movement label {@example Inventory number 123} + * @param string $price To update AWP (Average Weighted Price) when you make a stock increase (qty must be higher then 0). + */ /** @@ -279,7 +280,8 @@ class StockMovements extends DolibarrApi * @param MouvementStock $object Object to clean * @return array Array of cleaned object properties */ - function _cleanObjectDatas($object) { + function _cleanObjectDatas($object) + { $object = parent::_cleanObjectDatas($object); diff --git a/htdocs/product/stock/class/api_warehouses.class.php b/htdocs/product/stock/class/api_warehouses.class.php index 10b76d22a25..91ee105acb7 100644 --- a/htdocs/product/stock/class/api_warehouses.class.php +++ b/htdocs/product/stock/class/api_warehouses.class.php @@ -92,7 +92,8 @@ class Warehouses extends DolibarrApi * * @throws RestException */ - function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $sqlfilters = '') { + function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $sqlfilters = '') + { global $db, $conf; $obj_ret = array(); @@ -248,7 +249,8 @@ class Warehouses extends DolibarrApi * @param Entrepot $object Object to clean * @return array Array of cleaned object properties */ - function _cleanObjectDatas($object) { + function _cleanObjectDatas($object) + { $object = parent::_cleanObjectDatas($object); diff --git a/htdocs/product/stock/class/entrepot.class.php b/htdocs/product/stock/class/entrepot.class.php index 039918ea66c..bae42639d28 100644 --- a/htdocs/product/stock/class/entrepot.class.php +++ b/htdocs/product/stock/class/entrepot.class.php @@ -690,7 +690,8 @@ class Entrepot extends CommonObject * @param array() $TChildWarehouses array which will contain all children (param by reference) * @return array() $TChildWarehouses array which will contain all children */ - function get_children_warehouses($id, &$TChildWarehouses) { + function get_children_warehouses($id, &$TChildWarehouses) + { $sql = 'SELECT rowid FROM '.MAIN_DB_PREFIX.'entrepot @@ -707,7 +708,7 @@ class Entrepot extends CommonObject return $TChildWarehouses; } - + /** * Create object on disk * diff --git a/htdocs/projet/class/api_projects.class.php b/htdocs/projet/class/api_projects.class.php index ab157bf237c..e5a73590d75 100644 --- a/htdocs/projet/class/api_projects.class.php +++ b/htdocs/projet/class/api_projects.class.php @@ -98,7 +98,8 @@ class Projects extends DolibarrApi * @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.ref:like:'SO-%') and (t.date_creation:<:'20160101')" * @return array Array of project objects */ - function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids = '', $sqlfilters = '') { + function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids = '', $sqlfilters = '') + { global $db, $conf; $obj_ret = array(); @@ -214,7 +215,8 @@ class Projects extends DolibarrApi * * @url GET {id}/tasks */ - function getLines($id, $includetimespent=0) { + function getLines($id, $includetimespent=0) + { if(! DolibarrApiAccess::$user->rights->projet->lire) { throw new RestException(401); } @@ -256,7 +258,8 @@ class Projects extends DolibarrApi * * @return int */ - function getRoles($id, $userid=0) { + function getRoles($id, $userid=0) + { global $db; if(! DolibarrApiAccess::$user->rights->projet->lire) { @@ -300,7 +303,8 @@ class Projects extends DolibarrApi * @return int */ /* - function postLine($id, $request_data = null) { + function postLine($id, $request_data = null) + { if(! DolibarrApiAccess::$user->rights->projet->creer) { throw new RestException(401); } @@ -362,7 +366,8 @@ class Projects extends DolibarrApi * @return object */ /* - function putLine($id, $lineid, $request_data = null) { + function putLine($id, $lineid, $request_data = null) + { if(! DolibarrApiAccess::$user->rights->projet->creer) { throw new RestException(401); } @@ -418,7 +423,8 @@ class Projects extends DolibarrApi * * @return int */ - function put($id, $request_data = null) { + function put($id, $request_data = null) + { if(! DolibarrApiAccess::$user->rights->projet->creer) { throw new RestException(401); } @@ -535,7 +541,8 @@ class Projects extends DolibarrApi * @param object $object Object to clean * @return array Array of cleaned object properties */ - function _cleanObjectDatas($object) { + function _cleanObjectDatas($object) + { $object = parent::_cleanObjectDatas($object); diff --git a/htdocs/projet/class/api_tasks.class.php b/htdocs/projet/class/api_tasks.class.php index 3125546c10a..cd79a12cecc 100644 --- a/htdocs/projet/class/api_tasks.class.php +++ b/htdocs/projet/class/api_tasks.class.php @@ -106,7 +106,8 @@ class Tasks extends DolibarrApi * @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.ref:like:'SO-%') and (t.date_creation:<:'20160101')" * @return array Array of project objects */ - function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $sqlfilters = '') { + function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $sqlfilters = '') + { global $db, $conf; $obj_ret = array(); @@ -221,7 +222,8 @@ class Tasks extends DolibarrApi * @url GET {id}/tasks */ /* - function getLines($id, $includetimespent=0) { + function getLines($id, $includetimespent=0) + { if(! DolibarrApiAccess::$user->rights->projet->lire) { throw new RestException(401); } @@ -263,7 +265,8 @@ class Tasks extends DolibarrApi * * @return int */ - function getRoles($id, $userid=0) { + function getRoles($id, $userid=0) + { global $db; if(! DolibarrApiAccess::$user->rights->projet->lire) { @@ -305,7 +308,8 @@ class Tasks extends DolibarrApi * @return int */ /* - function postLine($id, $request_data = null) { + function postLine($id, $request_data = null) + { if(! DolibarrApiAccess::$user->rights->projet->creer) { throw new RestException(401); } @@ -367,7 +371,8 @@ class Tasks extends DolibarrApi * @return object */ /* - function putLine($id, $lineid, $request_data = null) { + function putLine($id, $lineid, $request_data = null) + { if(! DolibarrApiAccess::$user->rights->projet->creer) { throw new RestException(401); } @@ -422,7 +427,8 @@ class Tasks extends DolibarrApi * * @return int */ - function put($id, $request_data = null) { + function put($id, $request_data = null) + { if(! DolibarrApiAccess::$user->rights->projet->creer) { throw new RestException(401); } @@ -550,7 +556,8 @@ class Tasks extends DolibarrApi * @param object $object Object to clean * @return array Array of cleaned object properties */ - function _cleanObjectDatas($object) { + function _cleanObjectDatas($object) + { $object = parent::_cleanObjectDatas($object); diff --git a/htdocs/public/emailing/mailing-read.php b/htdocs/public/emailing/mailing-read.php index 4aa388ecf24..23511974137 100644 --- a/htdocs/public/emailing/mailing-read.php +++ b/htdocs/public/emailing/mailing-read.php @@ -36,13 +36,17 @@ if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU','1'); // If there is no * * @return void */ -function llxHeader() { } +function llxHeader() +{ +} /** * Footer empty * * @return void */ -function llxFooter() { } +function llxFooter() +{ +} require '../../main.inc.php'; diff --git a/htdocs/public/emailing/mailing-unsubscribe.php b/htdocs/public/emailing/mailing-unsubscribe.php index 61e8ccdb0d6..1dc1477e7b4 100644 --- a/htdocs/public/emailing/mailing-unsubscribe.php +++ b/htdocs/public/emailing/mailing-unsubscribe.php @@ -35,13 +35,17 @@ if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU','1'); // If there is no * * @return void */ -function llxHeader() { } +function llxHeader() +{ +} /** * Footer empty * * @return void */ -function llxFooter() { } +function llxFooter() +{ +} require '../../main.inc.php'; diff --git a/htdocs/public/website/index.php b/htdocs/public/website/index.php index 436e352819a..862d8ada71a 100644 --- a/htdocs/public/website/index.php +++ b/htdocs/public/website/index.php @@ -34,13 +34,17 @@ if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX','1'); * * @return void */ -function llxHeader() { } +function llxHeader() +{ +} /** * Footer empty * * @return void */ -function llxFooter() { } +function llxFooter() +{ +} require '../../master.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; @@ -204,4 +208,3 @@ print '