From 8097298c805e96dee8427bfc0299da2817e03d7f Mon Sep 17 00:00:00 2001 From: florian HENRY Date: Thu, 30 Jun 2016 16:55:59 +0200 Subject: [PATCH 01/34] FIX #4756 --- htdocs/install/pgsql/functions/functions.sql | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/htdocs/install/pgsql/functions/functions.sql b/htdocs/install/pgsql/functions/functions.sql index 768eb853ca2..d61976fbb36 100644 --- a/htdocs/install/pgsql/functions/functions.sql +++ b/htdocs/install/pgsql/functions/functions.sql @@ -63,7 +63,6 @@ CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_adherent FOR EACH RO CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_adherent_extrafields FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_adherent_type FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_adherent_type_extrafields FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); -CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_advtargetemailing FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_askpricesupplier FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_askpricesupplier_extrafields FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_askpricesupplierdet_extrafields FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); @@ -96,7 +95,7 @@ CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_cronjob FOR EACH ROW CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_deplacement FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_don FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_don_extrafields FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); -CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_ecm_documents FOR EACH ROW EXECUTE PROCEDURE update_modified_column_date_u(); +CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_ecm_directory FOR EACH ROW EXECUTE PROCEDURE update_modified_column_date_u(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_element_resources FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_entrepot FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_events FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); @@ -128,7 +127,6 @@ CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_payment_donation FOR CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_payment_expensereport FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_payment_loan FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_payment_salary FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); -CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_printer_ipp FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_printing FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_product FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_product_batch FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); @@ -155,8 +153,6 @@ CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_societe_rib FOR EACH CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_socpeople FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_socpeople_extrafields FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_stock_mouvement FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); -CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_time_basket FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); -CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_timebasket_counter FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_tva FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_user FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_user_extrafields FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); From 855550e2742525e65aa2944366f0c03946e68f15 Mon Sep 17 00:00:00 2001 From: florian HENRY Date: Thu, 30 Jun 2016 17:00:09 +0200 Subject: [PATCH 02/34] FIX 4926 --- htdocs/install/pgsql/functions/functions.sql | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/htdocs/install/pgsql/functions/functions.sql b/htdocs/install/pgsql/functions/functions.sql index e93769f1e2a..46bb9223222 100644 --- a/htdocs/install/pgsql/functions/functions.sql +++ b/htdocs/install/pgsql/functions/functions.sql @@ -63,10 +63,6 @@ CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_adherent FOR EACH RO CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_adherent_extrafields FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_adherent_type FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_adherent_type_extrafields FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); -CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_advtargetemailing FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); -CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_askpricesupplier FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); -CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_askpricesupplier_extrafields FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); -CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_askpricesupplierdet_extrafields FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_bank FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_bank_account FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_bank_account_extrafields FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); @@ -96,7 +92,7 @@ CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_cronjob FOR EACH ROW CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_deplacement FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_don FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_don_extrafields FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); -CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_ecm_documents FOR EACH ROW EXECUTE PROCEDURE update_modified_column_date_u(); +CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_ecm_directory FOR EACH ROW EXECUTE PROCEDURE update_modified_column_date_u(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_element_resources FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_entrepot FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_events FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); @@ -155,8 +151,6 @@ CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_societe_rib FOR EACH CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_socpeople FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_socpeople_extrafields FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_stock_mouvement FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); -CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_time_basket FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); -CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_timebasket_counter FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_tva FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_user FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_user_extrafields FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); From 08fbc21bb16cfb7e1f7e33dd8d3abe8844044fa2 Mon Sep 17 00:00:00 2001 From: florian HENRY Date: Fri, 1 Jul 2016 08:36:20 +0200 Subject: [PATCH 03/34] llx_ecm_directories --- htdocs/install/pgsql/functions/functions.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/install/pgsql/functions/functions.sql b/htdocs/install/pgsql/functions/functions.sql index d61976fbb36..3e976855bf0 100644 --- a/htdocs/install/pgsql/functions/functions.sql +++ b/htdocs/install/pgsql/functions/functions.sql @@ -95,7 +95,7 @@ CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_cronjob FOR EACH ROW CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_deplacement FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_don FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_don_extrafields FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); -CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_ecm_directory FOR EACH ROW EXECUTE PROCEDURE update_modified_column_date_u(); +CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_ecm_directories FOR EACH ROW EXECUTE PROCEDURE update_modified_column_date_u(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_element_resources FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_entrepot FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_events FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); From 2520ee921aa604f647e62321e9b9de3f7a8b96fa Mon Sep 17 00:00:00 2001 From: florian HENRY Date: Fri, 1 Jul 2016 08:37:24 +0200 Subject: [PATCH 04/34] llx_ecm_directories --- htdocs/install/pgsql/functions/functions.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/install/pgsql/functions/functions.sql b/htdocs/install/pgsql/functions/functions.sql index 46bb9223222..73961b04d0d 100644 --- a/htdocs/install/pgsql/functions/functions.sql +++ b/htdocs/install/pgsql/functions/functions.sql @@ -92,7 +92,7 @@ CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_cronjob FOR EACH ROW CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_deplacement FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_don FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_don_extrafields FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); -CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_ecm_directory FOR EACH ROW EXECUTE PROCEDURE update_modified_column_date_u(); +CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_ecm_directories FOR EACH ROW EXECUTE PROCEDURE update_modified_column_date_u(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_element_resources FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_entrepot FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_events FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); From 09b824d819233f504aa587cb14fecafa02d7f38c Mon Sep 17 00:00:00 2001 From: arnaud Date: Fri, 1 Jul 2016 16:44:05 +0200 Subject: [PATCH 05/34] FIX product stats all bloc module without enbaled test --- htdocs/product/stats/card.php | 55 +++++++++++++++++++++-------------- 1 file changed, 33 insertions(+), 22 deletions(-) diff --git a/htdocs/product/stats/card.php b/htdocs/product/stats/card.php index d98d8ed31c6..b23cac67d9f 100644 --- a/htdocs/product/stats/card.php +++ b/htdocs/product/stats/card.php @@ -206,28 +206,39 @@ if (! empty($id) || ! empty($ref) || GETPOST('id') == 'all') } } - $graphfiles=array( - 'propal' =>array('modulepart'=>'productstats_proposals', - 'file' => $object->id.'/propal12m'.((string) $type != '' ? '_type'.$type : '').'_'.$mode.'.png', - 'label' => ($mode=='byunit'?$langs->transnoentitiesnoconv("NumberOfUnitsProposals"):$langs->transnoentitiesnoconv("NumberOfProposals"))), - 'proposalssuppliers'=>array('modulepart'=>'productstats_proposalssuppliers', - 'file' => $object->id.'/proposalssuppliers12m'.((string) $type != '' ? '_type'.$type : '').'_'.$mode.'.png', - 'label' => ($mode=='byunit'?$langs->transnoentitiesnoconv("NumberOfUnitsSupplierProposals"):$langs->transnoentitiesnoconv("NumberOfSupplierProposals"))), - - 'orders' =>array('modulepart'=>'productstats_orders', - 'file' => $object->id.'/orders12m'.((string) $type != '' ? '_type'.$type : '').'_'.$mode.'.png', - 'label' => ($mode=='byunit'?$langs->transnoentitiesnoconv("NumberOfUnitsCustomerOrders"):$langs->transnoentitiesnoconv("NumberOfCustomerOrders"))), - 'orderssuppliers'=>array('modulepart'=>'productstats_orderssuppliers', - 'file' => $object->id.'/orderssuppliers12m'.((string) $type != '' ? '_type'.$type : '').'_'.$mode.'.png', - 'label' => ($mode=='byunit'?$langs->transnoentitiesnoconv("NumberOfUnitsSupplierOrders"):$langs->transnoentitiesnoconv("NumberOfSupplierOrders"))), - - 'invoices' =>array('modulepart'=>'productstats_invoices', - 'file' => $object->id.'/invoices12m'.((string) $type != '' ? '_type'.$type : '').'_'.$mode.'.png', - 'label' => ($mode=='byunit'?$langs->transnoentitiesnoconv("NumberOfUnitsCustomerInvoices"):$langs->transnoentitiesnoconv("NumberOfCustomerInvoices"))), - 'invoicessuppliers'=>array('modulepart'=>'productstats_invoicessuppliers', - 'file' => $object->id.'/invoicessuppliers12m'.((string) $type != '' ? '_type'.$type : '').'_'.$mode.'.png', - 'label' => ($mode=='byunit'?$langs->transnoentitiesnoconv("NumberOfUnitsSupplierInvoices"):$langs->transnoentitiesnoconv("NumberOfSupplierInvoices"))), - ); + if($conf->propal->enabled) { + $graphfiles['propal']=array('modulepart'=>'productstats_proposals', + 'file' => $object->id.'/propal12m'.((string) $type != '' ? '_type'.$type : '').'_'.$mode.'.png', + 'label' => ($mode=='byunit'?$langs->transnoentitiesnoconv("NumberOfUnitsProposals"):$langs->transnoentitiesnoconv("NumberOfProposals"))); + } + + if($conf->supplier_proposal->enabled) { + $graphfiles['proposalssuppliers']=array('modulepart'=>'productstats_proposalssuppliers', + 'file' => $object->id.'/proposalssuppliers12m'.((string) $type != '' ? '_type'.$type : '').'_'.$mode.'.png', + 'label' => ($mode=='byunit'?$langs->transnoentitiesnoconv("NumberOfUnitsSupplierProposals"):$langs->transnoentitiesnoconv("NumberOfSupplierProposals"))); + } + + if($conf->order->enabled) { + $graphfiles['orders']=array('modulepart'=>'productstats_orders', + 'file' => $object->id.'/orders12m'.((string) $type != '' ? '_type'.$type : '').'_'.$mode.'.png', + 'label' => ($mode=='byunit'?$langs->transnoentitiesnoconv("NumberOfUnitsCustomerOrders"):$langs->transnoentitiesnoconv("NumberOfCustomerOrders"))); + } + + if($conf->fournisseur->enabled) { + $graphfiles['orderssuppliers']=array('modulepart'=>'productstats_orderssuppliers', + 'file' => $object->id.'/orderssuppliers12m'.((string) $type != '' ? '_type'.$type : '').'_'.$mode.'.png', + 'label' => ($mode=='byunit'?$langs->transnoentitiesnoconv("NumberOfUnitsSupplierOrders"):$langs->transnoentitiesnoconv("NumberOfSupplierOrders"))); + } + + if($conf->facture->enabled) { + $graphfiles['invoices']=array('modulepart'=>'productstats_invoices', + 'file' => $object->id.'/invoices12m'.((string) $type != '' ? '_type'.$type : '').'_'.$mode.'.png', + 'label' => ($mode=='byunit'?$langs->transnoentitiesnoconv("NumberOfUnitsCustomerInvoices"):$langs->transnoentitiesnoconv("NumberOfCustomerInvoices"))); + + $graphfiles['invoicessuppliers']=array('modulepart'=>'productstats_invoicessuppliers', + 'file' => $object->id.'/invoicessuppliers12m'.((string) $type != '' ? '_type'.$type : '').'_'.$mode.'.png', + 'label' => ($mode=='byunit'?$langs->transnoentitiesnoconv("NumberOfUnitsSupplierInvoices"):$langs->transnoentitiesnoconv("NumberOfSupplierInvoices"))); + } $px = new DolGraph(); From cf5de9d0c878a3f35f9fd47ce6f4a0f28c15a5c2 Mon Sep 17 00:00:00 2001 From: arnaud Date: Fri, 1 Jul 2016 16:59:03 +0200 Subject: [PATCH 06/34] FIX form_confirm to delete payment on supplier invoice --- htdocs/fourn/facture/card.php | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/htdocs/fourn/facture/card.php b/htdocs/fourn/facture/card.php index 38dcdc87759..1a7d236307b 100644 --- a/htdocs/fourn/facture/card.php +++ b/htdocs/fourn/facture/card.php @@ -292,14 +292,17 @@ if (empty($reshook)) } // Delete payment - elseif ($action == 'deletepaiement' && $user->rights->fournisseur->facture->creer) + elseif ($action == 'confirm_delete_paiement' && $confirm == 'yes' && $user->rights->fournisseur->facture->creer) { - $object->fetch($id); + $object->fetch($id); if ($object->statut == FactureFournisseur::STATUS_VALIDATED && $object->paye == 0) { $paiementfourn = new PaiementFourn($db); $result=$paiementfourn->fetch(GETPOST('paiement_id')); - if ($result > 0) $result=$paiementfourn->delete(); // If fetch ok and found + if ($result > 0) { + $result=$paiementfourn->delete(); // If fetch ok and found + header("Location: ".$_SERVER['PHP_SELF']."?id=".$id); + } if ($result < 0) { setEventMessages($paiementfourn->error, $paiementfourn->errors, 'errors'); } @@ -1725,6 +1728,12 @@ else { $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('DeleteBill'), $langs->trans('ConfirmDeleteBill'), 'confirm_delete', '', 0, 1); + } + if ($action == 'deletepaiement') + { + $payment_id = GETPOST('paiement_id'); + $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id.'&paiement_id='.$payment_id, $langs->trans('DeletePayment'), $langs->trans('ConfirmDeletePayment'), 'confirm_delete_paiement', '', 0, 1); + } // Confirmation to delete line From c8c51dd96dd47ff24b98029369dfb337189e6643 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 1 Jul 2016 19:15:30 +0200 Subject: [PATCH 07/34] Fix clone of intervention was not cloning lines. --- htdocs/fichinter/class/fichinter.class.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/htdocs/fichinter/class/fichinter.class.php b/htdocs/fichinter/class/fichinter.class.php index 4f86be24205..54d5dc05c33 100644 --- a/htdocs/fichinter/class/fichinter.class.php +++ b/htdocs/fichinter/class/fichinter.class.php @@ -958,8 +958,8 @@ class Fichinter extends CommonObject if ($objsoc->fetch($socid)>0) { $this->socid = $objsoc->id; - $this->cond_reglement_id = (! empty($objsoc->cond_reglement_id) ? $objsoc->cond_reglement_id : 0); - $this->mode_reglement_id = (! empty($objsoc->mode_reglement_id) ? $objsoc->mode_reglement_id : 0); + //$this->cond_reglement_id = (! empty($objsoc->cond_reglement_id) ? $objsoc->cond_reglement_id : 0); + //$this->mode_reglement_id = (! empty($objsoc->mode_reglement_id) ? $objsoc->mode_reglement_id : 0); $this->fk_project = ''; $this->fk_delivery_address = ''; } @@ -987,8 +987,7 @@ class Fichinter extends CommonObject // Add lines because it is not included into create function foreach ($this->lines as $line) { - // TODO - + $this->addline($user, $this->id, $line->desc, $line->datei, $line->duration); } // Hook of thirdparty module @@ -1132,9 +1131,11 @@ class Fichinter extends CommonObject $line = new FichinterLigne($this->db); $line->id = $objp->rowid; $line->desc = $objp->description; + $line->duration = $objp->duree; //For invoicing we calculing hours $line->qty = round($objp->duree/3600,2); $line->date = $this->db->jdate($objp->date); + $line->datei = $this->db->jdate($objp->date); $line->rang = $objp->rang; $line->product_type = 1; From 0639bafa6bf354d786ecac7fc3b876db32b940cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sat, 2 Jul 2016 10:19:38 +0200 Subject: [PATCH 08/34] Update list.php --- htdocs/fourn/commande/list.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/fourn/commande/list.php b/htdocs/fourn/commande/list.php index 9f99df55add..89060d9f913 100644 --- a/htdocs/fourn/commande/list.php +++ b/htdocs/fourn/commande/list.php @@ -174,7 +174,7 @@ if (GETPOST('statut', 'alpha') !== '') $sql .= " AND cf.fk_statut IN (".GETPOST('statut', 'alpha').")"; } -if ($billed !== '') +if ($billed !== '' && $billed >= 0) { $sql .= " AND cf.billed = ".$billed; } @@ -215,7 +215,7 @@ if ($resql) if ($search_refsupp) $param.="&search_refsupp=".$search_refsupp; if ($socid) $param.="&socid=".$socid; if ($search_status >= 0) $param.="&search_status=".$search_status; - if ($billed != '') $param.="billed=".$billed; + if ($billed != '') $param.="&billed=".$billed; if ($optioncss != '') $param.='&optioncss='.$optioncss; print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num, $nbtotalofrecords); From 22f028d1017fb245964577c130d2c179bd0bb3fe Mon Sep 17 00:00:00 2001 From: florian HENRY Date: Tue, 5 Jul 2016 09:05:10 +0200 Subject: [PATCH 09/34] FIX hidden extrafield feature edit --- htdocs/core/tpl/admin_extrafields_edit.tpl.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/core/tpl/admin_extrafields_edit.tpl.php b/htdocs/core/tpl/admin_extrafields_edit.tpl.php index 64c78c43c2e..9f894095807 100644 --- a/htdocs/core/tpl/admin_extrafields_edit.tpl.php +++ b/htdocs/core/tpl/admin_extrafields_edit.tpl.php @@ -85,7 +85,9 @@ $alwayseditable=$extrafields->attribute_alwayseditable[$attrname]; $param=$extrafields->attribute_param[$attrname]; $perms=$extrafields->attribute_perms[$attrname]; $list=$extrafields->attribute_list[$attrname]; -//$ishidden=$extrafields->attribute_hidden[$attrname]; +if (! empty($conf->global->MAIN_CAN_HIDE_EXTRAFIELDS)) { + $ishidden=$extrafields->attribute_hidden[$attrname]; +} if((($type == 'select') || ($type == 'checkbox') || ($type == 'radio')) && is_array($param)) { From fc2e7fb1ad70f5d61c1c2a5a2133c17ef74bd11d Mon Sep 17 00:00:00 2001 From: florian HENRY Date: Tue, 5 Jul 2016 15:45:33 +0200 Subject: [PATCH 10/34] FIX #5446 --- htdocs/core/class/extrafields.class.php | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index 32f0790fd89..1a362d143dc 100644 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -794,11 +794,7 @@ class ExtraFields // 4 : where clause filter on column or table extrafield, syntax field='value' or extra.field=value $keyList=(empty($InfoFieldList[2])?'rowid':$InfoFieldList[2].' as rowid'); - if (count($InfoFieldList) > 3 && ! empty($InfoFieldList[3])) - { - list($parentName, $parentField) = explode('|', $InfoFieldList[3]); - $keyList.= ', '.$parentField; - } + if (count($InfoFieldList) > 4 && ! empty($InfoFieldList[4])) { if (strpos($InfoFieldList[4], 'extra.') !== false) @@ -808,6 +804,11 @@ class ExtraFields $keyList=$InfoFieldList[2].' as rowid'; } } + if (count($InfoFieldList) > 3 && ! empty($InfoFieldList[3])) + { + list($parentName, $parentField) = explode('|', $InfoFieldList[3]); + $keyList.= ', '.$parentField; + } $fields_label = explode('|',$InfoFieldList[1]); if (is_array($fields_label)) From d658e2cf31c86199df52b629771a16bc4701222a Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Tue, 5 Jul 2016 16:04:18 +0200 Subject: [PATCH 11/34] FIX task ODT company object not correctly retrieved --- .../modules/project/task/doc/doc_generic_task_odt.modules.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/core/modules/project/task/doc/doc_generic_task_odt.modules.php b/htdocs/core/modules/project/task/doc/doc_generic_task_odt.modules.php index 2b60695db51..039c3002bdf 100644 --- a/htdocs/core/modules/project/task/doc/doc_generic_task_odt.modules.php +++ b/htdocs/core/modules/project/task/doc/doc_generic_task_odt.modules.php @@ -415,6 +415,7 @@ class doc_generic_task_odt extends ModelePDFTask } $project= new Project($this->db); $project->fetch($object->fk_project); + $project->fetch_thirdparty(); $dir = $conf->projet->dir_output. "/" . $project->ref. "/"; $objectref = dol_sanitizeFileName($object->ref); @@ -449,7 +450,7 @@ class doc_generic_task_odt extends ModelePDFTask dol_mkdir($conf->projet->dir_temp); - $socobject=$object->thirdparty; + $socobject=$project->thirdparty; // Make substitution $substitutionarray=array( From b4c8822281adfaa9c3499160abdbce46381ccee1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 5 Jul 2016 16:27:14 +0200 Subject: [PATCH 12/34] Fix style of text after ref on invoices --- htdocs/compta/facture.php | 6 +++--- htdocs/core/class/html.form.class.php | 11 +++++++---- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/htdocs/compta/facture.php b/htdocs/compta/facture.php index 14f3ea7075f..9b2d39c4487 100644 --- a/htdocs/compta/facture.php +++ b/htdocs/compta/facture.php @@ -2930,16 +2930,16 @@ else if ($id > 0 || ! empty($ref)) // Ref print '' . $langs->trans('Ref') . ''; print ''; - $morehtmlref = ''; + $morehtmlright = ''; $discount = new DiscountAbsolute($db); $result = $discount->fetch(0, $object->id); if ($result > 0) { - $morehtmlref = ' (' . $langs->trans("CreditNoteConvertedIntoDiscount", $discount->getNomUrl(1, 'discount')) . ')'; + $morehtmlright = '  (' . $langs->trans("CreditNoteConvertedIntoDiscount", $discount->getNomUrl(1, 'discount')) . ')'; } if ($result < 0) { dol_print_error('', $discount->error); } - print $form->showrefnav($object, 'ref', $linkback, 1, 'facnumber', 'ref', $morehtmlref); + print $form->showrefnav($object, 'ref', $linkback, 1, 'facnumber', 'ref', '', '', 0, '', '', $morehtmlright); print ''; // Ref customer diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index d4267eccfb1..507f45a12f8 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -5582,10 +5582,11 @@ class Form * @param string $moreparam More param to add in nav link url. * @param int $nodbprefix Do not include DB prefix to forge table name * @param string $morehtmlleft More html code to show before ref - * @param string $morehtmlright More html code to show before navigation arrows + * @param string $morehtmlstatus More html code to show under navigation arrows (status place) + * @param string $morehtmlright More html code to show after ref * @return string Portion HTML avec ref + boutons nav */ - function showrefnav($object,$paramid,$morehtml='',$shownav=1,$fieldid='rowid',$fieldref='ref',$morehtmlref='',$moreparam='',$nodbprefix=0,$morehtmlleft='',$morehtmlright='') + function showrefnav($object,$paramid,$morehtml='',$shownav=1,$fieldid='rowid',$fieldref='ref',$morehtmlref='',$moreparam='',$nodbprefix=0,$morehtmlleft='',$morehtmlstatus='',$morehtmlright='') { global $langs,$conf; @@ -5604,7 +5605,7 @@ class Form //print "xx".$previous_ref."x".$next_ref; $ret.='
'; - $ret.='
'.$morehtmlleft.'
'; + if ($morehtmlleft) $ret.='
'.$morehtmlleft.'
'; $ret.='
'; @@ -5624,6 +5625,8 @@ class Form } $ret.='
'; + if ($morehtmlright) $ret.='
'.$morehtmlright.'
'; + if ($previous_ref || $next_ref || $morehtml) { $ret.=''; } - if ($morehtmlright) $ret.='
'.$morehtmlright.'
'; + if ($morehtmlstatus) $ret.='
'.$morehtmlstatus.'
'; $ret.='
'; return $ret; From 50c5efc374a6591ae10ca76c18b803a7b166e022 Mon Sep 17 00:00:00 2001 From: fmarcet Date: Tue, 5 Jul 2016 16:41:46 +0200 Subject: [PATCH 13/34] Fix: Don't load extrafields on orderstoinvoice --- htdocs/commande/orderstoinvoice.php | 14 ++++++++++++++ htdocs/fourn/commande/orderstoinvoice.php | 14 ++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/htdocs/commande/orderstoinvoice.php b/htdocs/commande/orderstoinvoice.php index 7a8814edd4d..3bef2f412c1 100644 --- a/htdocs/commande/orderstoinvoice.php +++ b/htdocs/commande/orderstoinvoice.php @@ -70,6 +70,11 @@ $date_end = dol_mktime(23,59,59,$_REQUEST["date_endmonth"],$_REQUEST["date_endda $date_starty = dol_mktime(0,0,0,$_REQUEST["date_start_delymonth"],$_REQUEST["date_start_delyday"],$_REQUEST["date_start_delyyear"]); // Date for local PHP server $date_endy = dol_mktime(23,59,59,$_REQUEST["date_end_delymonth"],$_REQUEST["date_end_delyday"],$_REQUEST["date_end_delyyear"]); +$extrafields = new ExtraFields($db); + +// fetch optionals attributes and labels +$extralabels=$extrafields->fetch_name_optionals_label('facture'); + if ($action == 'create') { if (is_array($selected) == false) @@ -174,6 +179,9 @@ if (($action == 'create' || $action == 'add') && !$error) $object->remise_absolue = $_POST['remise_absolue']; $object->remise_percent = $_POST['remise_percent']; + $ret = $extrafields->setOptionalsFromPost($extralabels,$object); + if ($ret < 0) $error++; + if ($_POST['origin'] && $_POST['originid']) { $object->origin = $_POST['origin']; @@ -464,6 +472,12 @@ if ($action == 'create' && !$error) $parameters=array('objectsrc' => $objectsrc, 'idsrc' => $listoforders, 'colspan' => ' colspan="3"'); $reshook=$hookmanager->executeHooks('formObjectOptions',$parameters,$object,$action); // Note that $action and $object may have been modified by hook + if (empty($reshook) && ! empty($extrafields->attribute_label)) + { + $object=new Facture($db); + print $object->showOptionals($extrafields,'edit'); + } + // Modele PDF print ''.$langs->trans('Model').''; print ''; diff --git a/htdocs/fourn/commande/orderstoinvoice.php b/htdocs/fourn/commande/orderstoinvoice.php index e11e70b12ef..2d89ad406c0 100644 --- a/htdocs/fourn/commande/orderstoinvoice.php +++ b/htdocs/fourn/commande/orderstoinvoice.php @@ -71,6 +71,11 @@ $date_end = dol_mktime(23, 59, 59, $_REQUEST["date_endmonth"], $_REQUEST["date_e $date_starty = dol_mktime(0, 0, 0, $_REQUEST["date_start_delymonth"], $_REQUEST["date_start_delyday"], $_REQUEST["date_start_delyyear"]); // Date for local PHP server $date_endy = dol_mktime(23, 59, 59, $_REQUEST["date_end_delymonth"], $_REQUEST["date_end_delyday"], $_REQUEST["date_end_delyyear"]); +$extrafields = new ExtraFields($db); + +// fetch optionals attributes and labels +$extralabels=$extrafields->fetch_name_optionals_label('facture_fourn'); + if ($action == 'create') { if (is_array($selected) == false) { $mesgs = array ( @@ -160,6 +165,9 @@ if (($action == 'create' || $action == 'add') && empty($mesgs)) { if (empty($object->date_echeance)) $object->date_echeance = $object->calculate_date_lim_reglement(); + $ret = $extrafields->setOptionalsFromPost($extralabels,$object); + if ($ret < 0) $error++; + if ($_POST['origin'] && $_POST['originid']) { $object->linked_objects = $orders_id; $id = $object->create($user); @@ -337,6 +345,12 @@ if ($action == 'create' && !$error) { ); $reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook + if (empty($reshook) && ! empty($extrafields->attribute_label)) + { + $object=new FactureFournisseur($db); + print $object->showOptionals($extrafields,'edit'); + } + // Modele PDF print '' . $langs->trans('Model') . ''; print ''; From 770da29de4e0382cdf3db74e17b023de6a7ec2e2 Mon Sep 17 00:00:00 2001 From: philippe grand Date: Tue, 5 Jul 2016 17:20:32 +0200 Subject: [PATCH 14/34] internationalization of code comment --- htdocs/categories/class/categorie.class.php | 28 ++++++++++----------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/htdocs/categories/class/categorie.class.php b/htdocs/categories/class/categorie.class.php index 8636232b405..60e132f3051 100644 --- a/htdocs/categories/class/categorie.class.php +++ b/htdocs/categories/class/categorie.class.php @@ -1008,13 +1008,13 @@ class Categorie extends CommonObject } /** - * Affiche contenu de $this->cats + * Display content of $this->cats * * @return void */ function debug_cats() { - // Affiche $this->cats + // Display $this->cats foreach($this->cats as $key => $val) { print 'id: '.$this->cats[$key]['id']; @@ -1029,11 +1029,11 @@ class Categorie extends CommonObject /** - * Retourne toutes les categories + * Returns all categories * * @param int $type Type of category * @param boolean $parent Just parent categories if true - * @return array Tableau d'objet Categorie + * @return array Table of Object Category */ function get_all_categories($type=null, $parent=false) { @@ -1064,9 +1064,9 @@ class Categorie extends CommonObject } /** - * Retourne le nombre total de categories + * Returns total number of categories * - * @return int Nombre de categories + * @return int Number of categories * @deprecated function not used ? */ function get_nb_categories() @@ -1133,7 +1133,7 @@ class Categorie extends CommonObject } /** - * Retourne les categories de premier niveau (qui ne sont pas filles) + * Returns the top level categories (which are not girls) * * @param int $type Type of category * @return array @@ -1144,8 +1144,8 @@ class Categorie extends CommonObject } /** - * Retourne les chemin de la categorie, avec les noms des categories - * separes par $sep (" >> " par defaut) + * Returns the path of the category, with the names of the categories + * separated by $sep (" >> " by default) * * @param string $sep Separator * @param string $url Url @@ -1205,7 +1205,7 @@ class Categorie extends CommonObject /** - * Retourne un tableau contenant la liste des categories meres + * Returns an array containing the list of parent categories * * @return int|array <0 KO, array OK */ @@ -1239,8 +1239,8 @@ class Categorie extends CommonObject } /** - * Retourne dans un tableau tous les chemins possibles pour arriver a la categorie - * en partant des categories principales, representes par des tableaux de categories + * Returns in a table all possible paths to get to the category + * starting with the major categories represented by Tables of categories * * @return array */ @@ -1324,8 +1324,8 @@ class Categorie extends CommonObject /** - * Retourne les categories dont l'id ou le nom correspond - * ajoute des wildcards au nom sauf si $exact = true + * Returns categories whose id or name match + * add wildcards in the name unless $exact = true * * @param int $id Id * @param string $nom Name From a669b61b69760e6a60b6e82d550a717f1c19f455 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 5 Jul 2016 18:33:13 +0200 Subject: [PATCH 15/34] Code comment --- htdocs/compta/facture/list.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/htdocs/compta/facture/list.php b/htdocs/compta/facture/list.php index 989aa6a6692..0e9c6874103 100644 --- a/htdocs/compta/facture/list.php +++ b/htdocs/compta/facture/list.php @@ -699,7 +699,13 @@ if ($search_company) $sql .= natural_search('s.nom', $search_company); if ($search_montant_ht != '') $sql.= natural_search('f.total', $search_montant_ht, 1); if ($search_montant_vat != '') $sql.= natural_search('f.total_vat', $search_montant_vat, 1); if ($search_montant_ttc != '') $sql.= natural_search('f.total_ttc', $search_montant_ttc, 1); -if ($search_status != '' && $search_status >= 0) $sql.= " AND f.fk_statut = ".$db->escape($search_status); +if ($search_status != '' && $search_status >= 0) +{ + if ($search_status == '0') $sql.=" AND f.fk_statut = 0"; // draft + if ($search_status == '1') $sql.=" AND f.fk_statut = 1"; // unpayed + if ($search_status == '2') $sql.=" AND f.fk_statut = 2"; // payed Not that some correupted data may contains f.fk_statut = 1 AND f.paye = 1 (it means payed too but should not happend. If yes, reopen and reclassify billed) + if ($search_status == '3') $sql.=" AND f.fk_statut = 3"; // abandonned +} if ($search_paymentmode > 0) $sql .= " AND f.fk_mode_reglement = ".$search_paymentmode.""; if ($month > 0) { From 6749e60079deb2dd6d5dddfc1d2d05727513b86a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 5 Jul 2016 18:36:10 +0200 Subject: [PATCH 16/34] Fix: Test to manage corrupted data --- htdocs/compta/facture.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/compta/facture.php b/htdocs/compta/facture.php index 9b2d39c4487..6535cee7c98 100644 --- a/htdocs/compta/facture.php +++ b/htdocs/compta/facture.php @@ -163,7 +163,7 @@ if (empty($reshook)) // Change status of invoice else if ($action == 'reopen' && $user->rights->facture->creer) { $result = $object->fetch($id); - if ($object->statut == 2 || ($object->statut == 3 && $object->close_code != 'replaced')) { + if ($object->statut == 2 || ($object->statut == 3 && $object->close_code != 'replaced') || ($object->statut == 1 && $object->paye == 1)) { // ($object->statut == 1 && $object->paye == 1) should not happened but can be found when data are corrupted $result = $object->set_unpaid($user); if ($result > 0) { header('Location: ' . $_SERVER["PHP_SELF"] . '?facid=' . $id); @@ -3905,8 +3905,8 @@ else if ($id > 0 || ! empty($ref)) if ((($object->type == Facture::TYPE_STANDARD || $object->type == Facture::TYPE_REPLACEMENT) || ($object->type == Facture::TYPE_CREDIT_NOTE && empty($discount->id)) || ($object->type == Facture::TYPE_DEPOSIT && empty($discount->id))) - && ($object->statut == 2 || $object->statut == 3) - && $user->rights->facture->creer) // A paid invoice (partially or completely) + && ($object->statut == 2 || $object->statut == 3 || ($object->statut == 1 && $object->paye == 1)) // Condition ($object->statut == 1 && $object->paye == 1) should not happened but can be found due to corrupted data + && $user->rights->facture->creer) // A paid invoice (partially or completely) { if (! $objectidnext && $object->close_code != 'replaced') // Not replaced by another invoice { From da5228aaa9419ecab6afbc1d4a18afc59484284a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 6 Jul 2016 10:28:34 +0200 Subject: [PATCH 17/34] Selection of fields ok for interventions --- htdocs/commande/list.php | 1 - htdocs/fichinter/list.php | 374 +++++++++++++++++++++++++++++++------- htdocs/user/index.php | 11 ++ 3 files changed, 318 insertions(+), 68 deletions(-) diff --git a/htdocs/commande/list.php b/htdocs/commande/list.php index f19a431ec10..47cee9903ef 100644 --- a/htdocs/commande/list.php +++ b/htdocs/commande/list.php @@ -1030,7 +1030,6 @@ if ($resql) else print ''; } print ''; - } $db->free($resql); diff --git a/htdocs/fichinter/list.php b/htdocs/fichinter/list.php index 81121f3b4bf..5d88dd78977 100644 --- a/htdocs/fichinter/list.php +++ b/htdocs/fichinter/list.php @@ -4,7 +4,7 @@ * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2011-2012 Juanjo Menent * Copyright (C) 2013 Cédric Salvador - * Copyright (C) 2015 Jean-François Ferry + * Copyright (C) 2015 Jean-François Ferry * * 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 @@ -64,13 +64,13 @@ $search_status=GETPOST('search_status'); $sall=GETPOST('sall'); $optioncss = GETPOST('optioncss','alpha'); -if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter.x") || GETPOST("button_removefilter")) // Both test are required to be compatible with all browsers -{ - $search_ref=""; - $search_company=""; - $search_desc=""; - $search_status=""; -} +// Initialize technical object to manage hooks of thirdparties. Note that conf->hooks_modules contains array array +$hookmanager->initHooks(array('interventionlist')); +$extrafields = new ExtraFields($db); + +// fetch optionals attributes and labels +$extralabels = $extrafields->fetch_name_optionals_label('fichinter'); +$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_'); // List of fields to search into when doing a "search in all" $fieldstosearchall = array( @@ -82,6 +82,52 @@ $fieldstosearchall = array( if (empty($user->socid)) $fieldstosearchall["f.note_private"]="NotePrivate"; if (! empty($conf->global->FICHINTER_DISABLE_DETAILS)) unset($fieldstosearchall['f.description']); +// Definition of fields for list +$arrayfields=array( + 'f.ref'=>array('label'=>$langs->trans("Ref"), 'checked'=>1), + 's.nom'=>array('label'=>$langs->trans("ThirdParty"), 'checked'=>1), + 'f.fk_project'=>array('label'=>$langs->trans("Project"), 'checked'=>1), + 'f.fk_contrat'=>array('label'=>$langs->trans("Contract"), 'checked'=>1), + 'f.description'=>array('label'=>$langs->trans("Description"), 'checked'=>1), + 'fd.description'=>array('label'=>"xx", 'checked'=>1, 'enabled'=>empty($conf->global->FICHINTER_DISABLE_DETAILS)?1:0), + 'fd.date'=>array('label'=>$langs->trans("Date"), 'checked'=>1, 'enabled'=>empty($conf->global->FICHINTER_DISABLE_DETAILS)?1:0), + 'fd.duree'=>array('label'=>$langs->trans("Duration"), 'checked'=>1, 'enabled'=>empty($conf->global->FICHINTER_DISABLE_DETAILS)?1:0), + 'f.datec'=>array('label'=>$langs->trans("DateCreation"), 'checked'=>0, 'position'=>500), + 'f.tms'=>array('label'=>$langs->trans("DateModificationShort"), 'checked'=>0, 'position'=>500), + 'f.fk_statut'=>array('label'=>$langs->trans("Status"), 'checked'=>1, 'position'=>1000), +); +// Extra fields +if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) +{ + foreach($extrafields->attribute_label as $key => $val) + { + $arrayfields["ef.".$key]=array('label'=>$extrafields->attribute_label[$key], 'checked'=>$extrafields->attribute_list[$key], 'position'=>$extrafields->attribute_pos[$key], 'enabled'=>$extrafields->attribute_perms[$key]); + } +} + + +/* + * Acions + */ + +$parameters=array(); +$reshook=$hookmanager->executeHooks('doActions',$parameters); // Note that $action and $object may have been modified by some hooks +if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); + +include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php'; + +if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter.x") || GETPOST("button_removefilter")) // Both test are required to be compatible with all browsers +{ + $search_ref=""; + $search_company=""; + $search_project=""; + $search_contract=""; + $search_desc=""; + $search_status=""; + $search_array_options=array(); +} + + /* * View @@ -94,13 +140,20 @@ llxHeader('', $langs->trans("Intervention")); $sql = "SELECT"; -$sql.= " f.ref, f.rowid as fichid, f.fk_statut, f.description,"; +$sql.= " f.ref, f.rowid as fichid, f.fk_statut, f.description, f.datec as date_creation, f.tms as date_update,"; if (empty($conf->global->FICHINTER_DISABLE_DETAILS)) $sql.= " fd.description as descriptiondetail, fd.date as dp, fd.duree,"; $sql.= " s.nom as name, s.rowid as socid, s.client"; -$sql.= " FROM (".MAIN_DB_PREFIX."societe as s"; -if (! $user->rights->societe->client->voir && empty($socid)) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; -$sql.= ", ".MAIN_DB_PREFIX."fichinter as f)"; +// Add fields from extrafields +foreach ($extrafields->attribute_label as $key => $val) $sql.=($extrafields->attribute_type[$key] != 'separate' ? ",ef.".$key.' as options_'.$key : ''); +// Add fields from hooks +$parameters=array(); +$reshook=$hookmanager->executeHooks('printFieldListSelect',$parameters); // Note that $action and $object may have been modified by hook +$sql.=$hookmanager->resPrint; +$sql.= " FROM ".MAIN_DB_PREFIX."fichinter as f"; +if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."fichinter_extrafields as ef on (f.rowid = ef.fk_object)"; if (empty($conf->global->FICHINTER_DISABLE_DETAILS)) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."fichinterdet as fd ON fd.fk_fichinter = f.rowid"; +if (! $user->rights->societe->client->voir && empty($socid)) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; +$sql.= ", ".MAIN_DB_PREFIX."societe as s"; $sql.= " WHERE f.fk_soc = s.rowid "; $sql.= " AND f.entity = ".$conf->entity; if ($search_ref) { @@ -123,6 +176,23 @@ if ($socid) if ($sall) { $sql .= natural_search(array_keys($fieldstosearchall), $sall); } +// Add where from extra fields +foreach ($search_array_options as $key => $val) +{ + $crit=$val; + $tmpkey=preg_replace('/search_options_/','',$key); + $typ=$extrafields->attribute_type[$tmpkey]; + $mode=0; + if (in_array($typ, array('int','double'))) $mode=1; // Search on a numeric + if ($val && ( ($crit != '' && ! in_array($typ, array('select'))) || ! empty($crit))) + { + $sql .= natural_search('ef.'.$tmpkey, $crit, $mode); + } +} +// Add where from hooks +$parameters=array(); +$reshook=$hookmanager->executeHooks('printFieldListWhere',$parameters); // Note that $action and $object may have been modified by hook +$sql.=$hookmanager->resPrint; $sql.= $db->order($sortfield,$sortorder); $totalnboflines=0; @@ -149,7 +219,14 @@ if ($result) if ($search_desc) $param.="&search_desc=".urlencode($search_desc); if ($search_status != '' && $search_status > -1) $param.="&search_status=".urlencode($search_status); if ($optioncss != '') $param.='&optioncss='.$optioncss; - + // Add $param from extra fields + foreach ($search_array_options as $key => $val) + { + $crit=$val; + $tmpkey=preg_replace('/search_options_/','',$key); + if ($val != '') $param.='&search_options_'.$tmpkey.'='.urlencode($val); + } + print '
'."\n"; if ($optioncss != '') print ''; print ''; @@ -165,42 +242,120 @@ if ($result) foreach($fieldstosearchall as $key => $val) $fieldstosearchall[$key]=$langs->trans($val); print $langs->trans("FilterOnInto", $sall) . join(', ',$fieldstosearchall); } - - print ''; + $moreforfilter=''; + + $varpage=empty($contextpage)?$_SERVER["PHP_SELF"]:$contextpage; + $selectedfields=$form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields + + print '
'; print ''; - print_liste_field_titre($langs->trans("Ref"),$_SERVER["PHP_SELF"],"f.ref","",$param,'width="15%"',$sortfield,$sortorder); - print_liste_field_titre($langs->trans("ThirdParty"),$_SERVER["PHP_SELF"],"s.nom","",$param,'',$sortfield,$sortorder); - print_liste_field_titre($langs->trans("Description"),$_SERVER["PHP_SELF"],"f.description","",$param,'',$sortfield,$sortorder); - if (empty($conf->global->FICHINTER_DISABLE_DETAILS)) + if (! empty($arrayfields['f.ref']['checked'])) print_liste_field_titre($langs->trans("Ref"),$_SERVER["PHP_SELF"],"f.ref","",$param,'width="15%"',$sortfield,$sortorder); + if (! empty($arrayfields['s.nom']['checked'])) print_liste_field_titre($langs->trans("ThirdParty"),$_SERVER["PHP_SELF"],"s.nom","",$param,'',$sortfield,$sortorder); + if (! empty($arrayfields['f.description']['checked'])) print_liste_field_titre($langs->trans("Description"),$_SERVER["PHP_SELF"],"f.description","",$param,'',$sortfield,$sortorder); + if (! empty($arrayfields['fd.description']['checked'])) print_liste_field_titre('',$_SERVER["PHP_SELF"],''); + if (! empty($arrayfields['fd.date']['checked'])) print_liste_field_titre($langs->trans("Date"),$_SERVER["PHP_SELF"],"fd.date","",$param,'align="center"',$sortfield,$sortorder); + if (! empty($arrayfields['fd.duree']['checked'])) print_liste_field_titre($langs->trans("Duration"),$_SERVER["PHP_SELF"],"fd.duree","",$param,'align="right"',$sortfield,$sortorder); + // Extra fields + if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) { - print_liste_field_titre('',$_SERVER["PHP_SELF"],''); - print_liste_field_titre($langs->trans("Date"),$_SERVER["PHP_SELF"],"fd.date","",$param,'align="center"',$sortfield,$sortorder); - print_liste_field_titre($langs->trans("Duration"),$_SERVER["PHP_SELF"],"fd.duree","",$param,'align="right"',$sortfield,$sortorder); + foreach($extrafields->attribute_label as $key => $val) + { + if (! empty($arrayfields["ef.".$key]['checked'])) + { + $align=$extrafields->getAlignFlag($key); + print_liste_field_titre($extralabels[$key],$_SERVER["PHP_SELF"],"ef.".$key,"",$param,($align?'align="'.$align.'"':''),$sortfield,$sortorder); + } + } } - print_liste_field_titre($langs->trans("Status"),$_SERVER["PHP_SELF"],"f.fk_statut","",$param,'align="right"',$sortfield,$sortorder); - print_liste_field_titre('',$_SERVER["PHP_SELF"],"",'','','',$sortfield,$sortorder,'maxwidthsearch '); + // Hook fields + $parameters=array('arrayfields'=>$arrayfields); + $reshook=$hookmanager->executeHooks('printFieldListTitle',$parameters); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + if (! empty($arrayfields['f.datec']['checked'])) print_liste_field_titre($langs->trans("DateCreationShort"),$_SERVER["PHP_SELF"],"f.datec","",$param,'align="center" class="nowrap"',$sortfield,$sortorder); + if (! empty($arrayfields['f.tms']['checked'])) print_liste_field_titre($langs->trans("DateModificationShort"),$_SERVER["PHP_SELF"],"f.tms","",$param,'align="center" class="nowrap"',$sortfield,$sortorder); + if (! empty($arrayfields['f.fk_statut']['checked'])) print_liste_field_titre($langs->trans("Status"),$_SERVER["PHP_SELF"],"f.fk_statut","",$param,'align="center"',$sortfield,$sortorder); + print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"],"",'','','align="right"',$sortfield,$sortorder,'maxwidthsearch '); print "\n"; print ''; - print ''; - if (empty($conf->global->FICHINTER_DISABLE_DETAILS)) - { - // Desc of line - print ''; - print ''; + if (! empty($arrayfields['f.ref']['checked'])) + { + print ''; + } + if (! empty($arrayfields['s.nom']['checked'])) + { + print ''; + } + if (! empty($arrayfields['f.description']['checked'])) + { + print ''; + } + if (! empty($arrayfields['fd.description']['checked'])) + { + // Desc of line print ''; + } + if (! empty($arrayfields['fd.date']['checked'])) + { + print ''; + } + if (! empty($arrayfields['fd.duree']['checked'])) + { + print ''; } - print ''; + // Extra fields + if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) + { + foreach($extrafields->attribute_label as $key => $val) + { + if (! empty($arrayfields["ef.".$key]['checked'])) + { + $align=$extrafields->getAlignFlag($key); + $typeofextrafield=$extrafields->attribute_type[$key]; + print ''; + } + } + } + // Fields from hook + $parameters=array('arrayfields'=>$arrayfields); + $reshook=$hookmanager->executeHooks('printFieldListOption',$parameters); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + if (! empty($arrayfields['f.datec']['checked'])) + { + // Date creation + print ''; + } + if (! empty($arrayfields['f.tms']['checked'])) + { + // Date modification + print ''; + } + if (! empty($arrayfields['f.fk_statut']['checked'])) + { + print ''; + } print '"; - print "\n"; - print ''; - print ''; - if (empty($conf->global->FICHINTER_DISABLE_DETAILS)) + if (! empty($arrayfields['f.ref']['checked'])) { - //print ''; - print ''; - print '\n"; - print ''; + print "\n"; + if (! $i) $totalarray['nbfield']++; + } + if (! empty($arrayfields['s.nom']['checked'])) + { + print ''; + if (! $i) $totalarray['nbfield']++; + } + if (! empty($arrayfields['f.description']['checked'])) + { + print ''; + if (! $i) $totalarray['nbfield']++; + } + if (! empty($arrayfields['fd.description']['checked'])) + { + //print ''; + print ''; + if (! $i) $totalarray['nbfield']++; + } + if (! empty($arrayfields['fd.date']['checked'])) + { + print '\n"; + if (! $i) $totalarray['nbfield']++; + } + if (! empty($arrayfields['fd.duree']['checked'])) + { + print ''; + if (! $i) $totalarray['nbfield']++; + if (! $i) $totalarray['totaldurationfield']=$totalarray['nbfield']; + $totalarray['totalduration']+=$obj->duree; } - print ''; - print ''; + // Extra fields + if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) + { + foreach($extrafields->attribute_label as $key => $val) + { + if (! empty($arrayfields["ef.".$key]['checked'])) + { + print 'getAlignFlag($key); + if ($align) print ' align="'.$align.'"'; + print '>'; + $tmpkey='options_'.$key; + print $extrafields->showOutputField($key, $obj->$tmpkey, '', 1); + print ''; + if (! $i) $totalarray['nbfield']++; + } + } + } + // Fields from hook + $parameters=array('arrayfields'=>$arrayfields, 'obj'=>$obj); + $reshook=$hookmanager->executeHooks('printFieldListValue',$parameters); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + // Date creation + if (! empty($arrayfields['f.datec']['checked'])) + { + print ''; + if (! $i) $totalarray['nbfield']++; + } + // Date modification + if (! empty($arrayfields['f.tms']['checked'])) + { + print ''; + if (! $i) $totalarray['nbfield']++; + } + // Status + if (! empty($arrayfields['f.fk_statut']['checked'])) + { + print ''; + if (! $i) $totalarray['nbfield']++; + } + // Action column + print ''; + if (! $i) $totalarray['nbfield']++; + print "\n"; - $total += $objp->duree; + $total += $obj->duree; $i++; } - $rowspan=3; - if (empty($conf->global->FICHINTER_DISABLE_DETAILS)) + + // Show total line + if (isset($totalarray['totalduration'])) { - print ''; - print ''; - print ''; + print ''; + $i=0; + while ($i < $totalarray['nbfield']) + { + $i++; + if ($i == 1) + { + if ($num < $limit) print ''; + else print ''; + } + elseif ($totalarray['totaldurationfield'] == $i) print ''; + else print ''; + } + print ''; } print '
'; - print ''; - print ''; - print ''; - print ''; - print ''; - print '  '; + print ''; + print ''; + print ''; + print ''; + print ''; + print '   '; - $liststatus=$interventionstatic->statuts_short; - print $form->selectarray('search_status', $liststatus, $search_status, 1, 0, 0, '', 1); - print ''; + if (in_array($typeofextrafield, array('varchar', 'int', 'double', 'select'))) + { + $crit=$val; + $tmpkey=preg_replace('/search_options_/','',$key); + $searchclass=''; + if (in_array($typeofextrafield, array('varchar', 'select'))) $searchclass='searchstring'; + if (in_array($typeofextrafield, array('int', 'double'))) $searchclass='searchnum'; + print ''; + } + print ''; + print ''; + print ''; + $liststatus=$interventionstatic->statuts_short; + print $form->selectarray('search_status', $liststatus, $search_status, 1, 0, 0, '', 1); + print ''; $searchpitco=$form->showFilterAndCheckAddButtons(0); print $searchpitco; @@ -212,44 +367,129 @@ if ($result) $var=True; $total = 0; $i = 0; + $totalarray=array(); while ($i < min($num, $limit)) { - $objp = $db->fetch_object($result); + $obj = $db->fetch_object($result); + + $interventionstatic->id=$obj->fichid; + $interventionstatic->ref=$obj->ref; + $interventionstatic->statut=$obj->fk_statut; + $var=!$var; print "
"; - $interventionstatic->id=$objp->fichid; - $interventionstatic->ref=$objp->ref; - print $interventionstatic->getNomUrl(1); - print "'; - $companystatic->name=$objp->name; - $companystatic->id=$objp->socid; - $companystatic->client=$objp->client; - print $companystatic->getNomUrl(1,'',44); - print ''.dol_trunc(dolGetFirstLineOfText($objp->description),48).''.dol_trunc(dol_escape_htmltag(dolGetFirstLineOfText($objp->descriptiondetail)),48).''.dolGetFirstLineOfText($objp->descriptiondetail).''.dol_print_date($db->jdate($objp->dp),'dayhour')."'.convertSecondToTime($objp->duree).'"; + print $interventionstatic->getNomUrl(1); + print "'; + $companystatic->name=$obj->name; + $companystatic->id=$obj->socid; + $companystatic->client=$obj->client; + print $companystatic->getNomUrl(1,'',44); + print ''.dol_trunc(dolGetFirstLineOfText($obj->description),48).''.dol_trunc(dol_escape_htmltag(dolGetFirstLineOfText($obj->descriptiondetail)),48).''.dolGetFirstLineOfText($obj->descriptiondetail).''.dol_print_date($db->jdate($obj->dp),'dayhour')."'.convertSecondToTime($obj->duree, 'allhourmin').''.$interventionstatic->LibStatut($objp->fk_statut,5).' '; + print dol_print_date($db->jdate($obj->date_creation), 'dayhour'); + print ''; + print dol_print_date($db->jdate($obj->date_update), 'dayhour'); + print ''.$interventionstatic->LibStatut($obj->fk_statut,5).'
'.$langs->trans("Total").''.convertSecondToTime($total).'  
'.$langs->trans("Total").''.$langs->trans("Totalforthispage").''.convertSecondToTime($totalarray['totalduration'], 'allhourmin').'
'; @@ -264,4 +504,4 @@ else llxFooter(); -$db->close(); \ No newline at end of file +$db->close(); diff --git a/htdocs/user/index.php b/htdocs/user/index.php index f7927cee665..5d8f02e1c32 100644 --- a/htdocs/user/index.php +++ b/htdocs/user/index.php @@ -229,6 +229,15 @@ $sql.=$hookmanager->resPrint; $sql.=$db->order($sortfield,$sortorder); //$sql.= $db->plimit($conf->liste_limit+1, $offset); +/*$totalnboflines=0; +$result=$db->query($sql); +if ($result) +{ + $totalnboflines = $db->num_rows($result); +} + +$sql.= $db->plimit($limit+1, $offset); +*/ $result = $db->query($sql); if ($result) { @@ -236,6 +245,8 @@ if ($result) $i = 0; $param=''; + if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.$contextpage; + if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit; if ($sall != '') $param.='&sall='.urlencode($sall); if ($search_user != '') $param.="&search_user=".$search_user; if ($search_login != '') $param.="&search_login=".$search_login; From 97eedb866bedf92be38af7e84974920776767f13 Mon Sep 17 00:00:00 2001 From: Alexis Algoud Date: Wed, 6 Jul 2016 10:36:58 +0200 Subject: [PATCH 18/34] FIX add POST key on print link (avoid action in case of) in order to keep filter on list and other case --- htdocs/main.inc.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 5e919498a9b..3f790907fc1 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -1480,7 +1480,12 @@ function top_menu($head, $title='', $target='', $disablejs=0, $disablehead=0, $a if (empty($conf->global->MAIN_PRINT_DISABLELINK) && empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER) && empty($conf->browser->phone)) { $qs=$_SERVER["QUERY_STRING"]; - $qs.=(($qs && $morequerystring)?'&':'').$morequerystring; + + foreach($_POST as $key=>$value) { + if($key!=='action')$qs.='&'.$key.'='.urlencode($value); + } + + $qs.=(($qs && $morequerystring)?'&':'').$morequerystring; $text =''; $text.= img_picto(":".$langs->trans("PrintContentArea"), 'printer_top.png', 'class="printer"'); $text.=''; From a2e26e6ba0015b43f815b0f283331aa1ee58b67c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 6 Jul 2016 10:49:19 +0200 Subject: [PATCH 19/34] Upgrade apache and php for DoliWamp but not Mysql --- build/exe/doliwamp/doliwamp.iss | 23 ++++++++----------- .../exe/doliwamp/install_services.bat.install | 4 ++-- build/exe/doliwamp/my.ini.install | 2 +- .../startdoliwamp_manual_donotuse.bat.install | 4 ++-- .../doliwamp/uninstall_services.bat.install | 4 ++-- 5 files changed, 17 insertions(+), 20 deletions(-) diff --git a/build/exe/doliwamp/doliwamp.iss b/build/exe/doliwamp/doliwamp.iss index cc5235b58c2..3c1b2f5bf93 100644 --- a/build/exe/doliwamp/doliwamp.iss +++ b/build/exe/doliwamp/doliwamp.iss @@ -99,13 +99,13 @@ Source: "build\exe\doliwamp\builddemosslfiles.bat.install"; DestDir: "{app}\"; F Source: "build\exe\doliwamp\UsedPort.exe"; DestDir: "{app}\"; Flags: ignoreversion; ; PhpMyAdmin, Apache, Php, Mysql ; Put here path of Wampserver applications -; Value OK: apache 2.2.6, php 5.2.5 (5.2.11, 5.3.0 and 5.3.1 fails if php_exif, php_pgsql, php_zip is on), mysql 5.0.45 or 5.1.36 -; Value OK: apache 2.2.11, php 5.3.0 (if no php_exif, php_pgsql, php_zip), mysql 5.0.45 or 5.1.36 -; Value ???: apache 2.4.19, php 5.5.12, mysql 5.6.17 (wampserver2.5-Apache-2.4.9-Mysql-5.6.17-php5.5.12-32b.exe) +; Value OK: apache 2.2.6, php 5.2.5 (5.2.11, 5.3.0 and 5.3.1 fails if php_exif, php_pgsql, php_zip is on), mysql 5.0.45 +; Value OK: apache 2.2.11, php 5.3.0 (if no php_exif, php_pgsql, php_zip), mysql 5.0.45 +; Value ???: apache 2.4.19, php 5.5.12, mysql 5.0.45 instead of 5.6.17 (wampserver2.5-Apache-2.4.9-Mysql-5.6.17-php5.5.12-32b.exe) Source: "C:\Program Files\Wamp\apps\phpmyadmin4.1.14\*.*"; DestDir: "{app}\apps\phpmyadmin4.1.14"; Flags: ignoreversion recursesubdirs; Excludes: "config.inc.php,wampserver.conf,*.log,*_log,darkblue_orange" Source: "C:\Program Files\Wamp\bin\apache\apache2.4.9\*.*"; DestDir: "{app}\bin\apache\apache2.4.9"; Flags: ignoreversion recursesubdirs; Excludes: "php.ini,httpd.conf,wampserver.conf,*.log,*_log" Source: "C:\Program Files\Wamp\bin\php\php5.5.12\*.*"; DestDir: "{app}\bin\php\php5.5.12"; Flags: ignoreversion recursesubdirs; Excludes: "php.ini,phpForApache.ini,wampserver.conf,*.log,*_log" -Source: "C:\Program Files\Wamp\bin\mysql\mysql5.6.17\*.*"; DestDir: "{app}\bin\mysql\mysql5.6.17"; Flags: ignoreversion recursesubdirs; Excludes: "my.ini,data\*,wampserver.conf,*.log,*_log,MySQLInstanceConfig.exe" +Source: "C:\Program Files\Wamp\bin\mysql\mysql5.0.45\*.*"; DestDir: "{app}\bin\mysql\mysql5.0.45"; Flags: ignoreversion recursesubdirs; Excludes: "my.ini,data\*,wampserver.conf,*.log,*_log,MySQLInstanceConfig.exe" ; Mysql data files (does not overwrite if exists) Source: "build\exe\doliwamp\mysql\*.*"; DestDir: "{app}\bin\mysql\data\mysql"; Flags: onlyifdoesntexist ignoreversion recursesubdirs; Excludes: ".gitignore,.project,CVS\*,Thumbs.db" ; Dolibarr @@ -119,7 +119,7 @@ Source: "build\exe\doliwamp\phpmyadmin.conf.install"; DestDir: "{app}\alias"; Fl Source: "build\exe\doliwamp\dolibarr.conf.install"; DestDir: "{app}\alias"; Flags: ignoreversion; Source: "build\exe\doliwamp\config.inc.php.install"; DestDir: "{app}\apps\phpmyadmin4.1.14"; Flags: ignoreversion; Source: "build\exe\doliwamp\httpd.conf.install"; DestDir: "{app}\bin\apache\apache2.4.9\conf"; Flags: ignoreversion; -Source: "build\exe\doliwamp\my.ini.install"; DestDir: "{app}\bin\mysql\mysql5.6.17"; Flags: ignoreversion; +Source: "build\exe\doliwamp\my.ini.install"; DestDir: "{app}\bin\mysql\mysql5.0.45"; Flags: ignoreversion; Source: "build\exe\doliwamp\php.ini.install"; DestDir: "{app}\bin\php\php5.5.12"; Flags: ignoreversion; Source: "build\exe\doliwamp\index.php.install"; DestDir: "{app}\www"; Flags: ignoreversion; Source: "build\exe\doliwamp\install.forced.php.install"; DestDir: "{app}\www\dolibarr\htdocs\install"; Flags: ignoreversion; @@ -198,7 +198,7 @@ begin //version des applis, a modifier pour chaque version de WampServer 2 apacheVersion := '2.4.9'; phpVersion := '5.5.12' ; - mysqlVersion := '5.6.17'; + mysqlVersion := '5.0.45'; phpmyadminVersion := '4.1.14'; smtpServer := 'localhost'; @@ -308,8 +308,6 @@ function NextButtonClick(CurPageID: Integer): Boolean; var myResult: Integer; var res: Boolean; var paramok: Boolean; -var datadirold: String; -var datadirnew: String; var exedirold: String; var exedirnew: String; var themessage: String; @@ -328,10 +326,9 @@ begin winPath := ExpandConstant('{win}'); pathWithSlashes := path; StringChange (pathWithSlashes, '\','/'); - datadirold := pathWithSlashes+'/bin/mysql/mysql5.6.17/data'; - datadirnew := pathWithSlashes+'/bin/mysql/data'; - exedirold := pathWithSlashes+'/bin/mysql/mysql5.6.17'; - exedirnew := pathWithSlashes+'/bin/mysql/mysql5.6.17'; + datadir := pathWithSlashes+'/bin/mysql/data'; + exedirold := pathWithSlashes+'/bin/mysql/mysql5.0.45'; + exedirnew := pathWithSlashes+'/bin/mysql/mysql5.0.45'; //---------------------------------------------- @@ -995,7 +992,7 @@ Filename: "{app}\rundoliwamp.bat"; Description: {cm:LaunchNow}; Flags: shellexec [UninstallDelete] Type: files; Name: "{app}\*.*" -Type: files; Name: "{app}\bin\mysql\mysql5.6.17\*.*" +Type: files; Name: "{app}\bin\mysql\mysql5.0.45\*.*" Type: filesandordirs; Name: "{app}\alias" Type: filesandordirs; Name: "{app}\apps" Type: filesandordirs; Name: "{app}\bin\apache" diff --git a/build/exe/doliwamp/install_services.bat.install b/build/exe/doliwamp/install_services.bat.install index 536a984e26d..5ad43827f86 100644 --- a/build/exe/doliwamp/install_services.bat.install +++ b/build/exe/doliwamp/install_services.bat.install @@ -16,9 +16,9 @@ REM reg add HKLM\SYSTEM\CurrentControlSet\Services\doliwampapache /V Start /t RE REM Mysql 5.0- REM .\bin\mysql\mysqlWAMPMYSQLVERSION\bin\mysqld-nt.exe --install-manual doliwampmysqld -REM .\bin\mysql\mysqlWAMPMYSQLVERSION\bin\mysqld-nt.exe --install doliwampmysqld +.\bin\mysql\mysqlWAMPMYSQLVERSION\bin\mysqld-nt.exe --install doliwampmysqld REM Mysql 5.1+ -.\bin\mysql\mysqlWAMPMYSQLVERSION\bin\mysqld.exe --install doliwampmysqld +REM .\bin\mysql\mysqlWAMPMYSQLVERSION\bin\mysqld.exe --install doliwampmysqld echo ---- End script >> doliwamp.log 2>>&1 diff --git a/build/exe/doliwamp/my.ini.install b/build/exe/doliwamp/my.ini.install index 885660f648b..e1a9495e20b 100644 --- a/build/exe/doliwamp/my.ini.install +++ b/build/exe/doliwamp/my.ini.install @@ -196,7 +196,7 @@ port=WAMPMYSQLPORT #Path to installation directory. All paths are usually resolved relative to this. -basedir=WAMPROOT/bin/mysql/mysql5.6.17 +basedir=WAMPROOT/bin/mysql/mysqlWAMPMYSQLVERSION #log file log-error=WAMPROOT/logs/mysql.log diff --git a/build/exe/doliwamp/startdoliwamp_manual_donotuse.bat.install b/build/exe/doliwamp/startdoliwamp_manual_donotuse.bat.install index 540f8bc9fbc..c8e33e4620b 100644 --- a/build/exe/doliwamp/startdoliwamp_manual_donotuse.bat.install +++ b/build/exe/doliwamp/startdoliwamp_manual_donotuse.bat.install @@ -12,7 +12,7 @@ start WAMPROOT\bin\apache\apacheWAMPAPACHEVERSION\bin\httpd.exe -f conf\httpd.co echo echo Running Mysql as user process (this process does not return so we use "start") -REM start WAMPROOT\bin\mysql\mysqlWAMPMYSQLVERSION\bin\mysqld-nt.exe --defaults-file=WAMPROOT\bin\mysql\mysqlWAMPMYSQLVERSION\my.ini --console -start WAMPROOT\bin\mysql\mysqlWAMPMYSQLVERSION\bin\mysqld.exe --defaults-file=WAMPROOT\bin\mysql\mysqlWAMPMYSQLVERSION\my.ini --console +start WAMPROOT\bin\mysql\mysqlWAMPMYSQLVERSION\bin\mysqld-nt.exe --defaults-file=WAMPROOT\bin\mysql\mysqlWAMPMYSQLVERSION\my.ini --console +REM start WAMPROOT\bin\mysql\mysqlWAMPMYSQLVERSION\bin\mysqld.exe --defaults-file=WAMPROOT\bin\mysql\mysqlWAMPMYSQLVERSION\my.ini --console pause \ No newline at end of file diff --git a/build/exe/doliwamp/uninstall_services.bat.install b/build/exe/doliwamp/uninstall_services.bat.install index b8aa5027b01..0f12a29b6e2 100644 --- a/build/exe/doliwamp/uninstall_services.bat.install +++ b/build/exe/doliwamp/uninstall_services.bat.install @@ -11,9 +11,9 @@ NET STOP doliwampapache NET STOP doliwampmysqld REM Mysql 5.0- -REM .\bin\mysql\mysqlWAMPMYSQLVERSION\bin\mysqld-nt.exe --remove doliwampmysqld +.\bin\mysql\mysqlWAMPMYSQLVERSION\bin\mysqld-nt.exe --remove doliwampmysqld REM Mysql 5.1+ -.\bin\mysql\mysqlWAMPMYSQLVERSION\bin\mysqld.exe --remove doliwampmysqld +REM .\bin\mysql\mysqlWAMPMYSQLVERSION\bin\mysqld.exe --remove doliwampmysqld REM wampmanager.exe -quit -id={doliwampserver} echo ---- End script >> doliwamp.log 2>>&1 From 9249a7c73630f2e0aa8aa52cf7caccbedc96acdc Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 6 Jul 2016 11:05:23 +0200 Subject: [PATCH 20/34] Add entry to run stop/start doliwamp as admin --- build/exe/doliwamp/doliwamp.iss | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/build/exe/doliwamp/doliwamp.iss b/build/exe/doliwamp/doliwamp.iss index 3c1b2f5bf93..f048d9ac36d 100644 --- a/build/exe/doliwamp/doliwamp.iss +++ b/build/exe/doliwamp/doliwamp.iss @@ -146,6 +146,11 @@ Name: "{userdesktop}\Dolibarr Help center"; Filename: "{app}\rundolihelp.bat"; W ;Name: "{userstartup}\DoliWamp server"; Filename: "{app}\startdoliwamp.bat"; WorkingDir: "{app}"; Flags: runminimized; IconFilename: {app}\www\dolibarr\doc\images\dolibarr.ico +[Registry] +Root: "HKLM"; Subkey: "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\"; ValueType: String; ValueName: "{app}\startdoliwamp.bat"; ValueData: "RUNASADMIN"; Flags: uninsdeletekeyifempty uninsdeletevalue; +Root: "HKLM"; Subkey: "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\"; ValueType: String; ValueName: "{app}\stopdoliwamp.bat"; ValueData: "RUNASADMIN"; Flags: uninsdeletekeyifempty uninsdeletevalue; + + [Code] //variables globales @@ -332,7 +337,7 @@ begin //---------------------------------------------- - // Test if VC11Redist has been installed + // Test if msvcr110 DLL has been installed //---------------------------------------------- if not FileExists ('c:/windows/system32/msvcr110.dll') and not FileExists ('c:/windows/sysWOW64/msvcr110.dll') and not FileExists ('c:/winnt/system32/msvcr110.dll') and not FileExists ('c:/winnt/sysWOW64/msvcr110.dll') then From 8e19b235f1b25520cfcd6e6c2ca8d104127b2f00 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 6 Jul 2016 11:06:49 +0200 Subject: [PATCH 21/34] Code comment --- build/exe/doliwamp/doliwamp.iss | 1 + 1 file changed, 1 insertion(+) diff --git a/build/exe/doliwamp/doliwamp.iss b/build/exe/doliwamp/doliwamp.iss index f048d9ac36d..8b368fa3b8f 100644 --- a/build/exe/doliwamp/doliwamp.iss +++ b/build/exe/doliwamp/doliwamp.iss @@ -147,6 +147,7 @@ Name: "{userdesktop}\Dolibarr Help center"; Filename: "{app}\rundolihelp.bat"; W [Registry] +; Add "run as admin" flag. Same than command line: reg add "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "" /t REG_SZ /d RUNASADMIN Root: "HKLM"; Subkey: "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\"; ValueType: String; ValueName: "{app}\startdoliwamp.bat"; ValueData: "RUNASADMIN"; Flags: uninsdeletekeyifempty uninsdeletevalue; Root: "HKLM"; Subkey: "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\"; ValueType: String; ValueName: "{app}\stopdoliwamp.bat"; ValueData: "RUNASADMIN"; Flags: uninsdeletekeyifempty uninsdeletevalue; From c360189d9472ec809554653dbf8ff29c2043336b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 6 Jul 2016 11:14:17 +0200 Subject: [PATCH 22/34] Code comment --- htdocs/core/class/hookmanager.class.php | 7 ++----- htdocs/societe/class/societe.class.php | 1 + 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/htdocs/core/class/hookmanager.class.php b/htdocs/core/class/hookmanager.class.php index 484b6518f77..f4f9a37fcf6 100644 --- a/htdocs/core/class/hookmanager.class.php +++ b/htdocs/core/class/hookmanager.class.php @@ -1,5 +1,5 @@ +/* Copyright (C) 2010-2016 Laurent Destailleur * Copyright (C) 2010-2014 Regis Houssin * Copyright (C) 2010-2011 Juanjo Menent * @@ -143,6 +143,7 @@ class HookManager 'formObjectOptions', 'formattachOptions', 'formBuilddocLineOptions', + 'getIdProfUrl', 'moveUploadedFile', 'pdf_build_address', 'pdf_writelinedesc', @@ -247,11 +248,7 @@ class HookManager } } - // TODO remove this. When there is something to print for an output hook, ->resPrint is filled. - //if ($hooktype == 'output') return $this->resPrint; - //if ($hooktype == 'returnvalue') return $result; return ($error?-1:$resaction); } } - diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index acc4dc75102..21bfed210fb 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -2732,6 +2732,7 @@ class Societe extends CommonObject global $conf,$langs,$hookmanager; $url=''; + $action = ''; $hookmanager->initHooks(array('idprofurl')); $parameters=array('idprof'=>$idprof, 'company'=>$thirdparty); From 8e9a7cb62940341b35f7d50f6338b36dc36cee35 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 6 Jul 2016 11:20:09 +0200 Subject: [PATCH 23/34] Fix var not always defined --- htdocs/adherents/class/cotisation.class.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/htdocs/adherents/class/cotisation.class.php b/htdocs/adherents/class/cotisation.class.php index 786ba79c7f3..9fe26727c25 100644 --- a/htdocs/adherents/class/cotisation.class.php +++ b/htdocs/adherents/class/cotisation.class.php @@ -190,11 +190,12 @@ class Cotisation extends CommonObject */ function delete($user) { + $accountline=new AccountLine($this->db); + // It subscription is linked to a bank transaction, we get it - if ($this->fk_bank) + if ($this->fk_bank > 0) { require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; - $accountline=new AccountLine($this->db); $result=$accountline->fetch($this->fk_bank); } From 0af555126cd1ee2f08729bfdc70bb0a800c0c1c2 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 6 Jul 2016 11:23:32 +0200 Subject: [PATCH 24/34] Fix PHPCS --- .../class/accountancyexport.class.php | 2 +- .../browser/default/browser.php | 28 +++++++++---------- .../browser/default/frmcreatefolder.php | 24 ++++++++-------- .../browser/default/frmupload.php | 20 ++++++------- .../connectors/php/commands.php | 6 ++-- htdocs/core/lib/functions2.lib.php | 4 +-- 6 files changed, 42 insertions(+), 42 deletions(-) diff --git a/htdocs/accountancy/class/accountancyexport.class.php b/htdocs/accountancy/class/accountancyexport.class.php index 04f66a47026..fd06a164962 100644 --- a/htdocs/accountancy/class/accountancyexport.class.php +++ b/htdocs/accountancy/class/accountancyexport.class.php @@ -142,7 +142,7 @@ class AccountancyExport case self::$EXPORT_TYPE_COGILOG : $this->exportCogilog($TData); break; - default : + default: $this->errors[] = $langs->trans('accountancy_error_modelnotfound'); break; } diff --git a/htdocs/core/filemanagerdol/browser/default/browser.php b/htdocs/core/filemanagerdol/browser/default/browser.php index 15e44621bcf..f8262998049 100644 --- a/htdocs/core/filemanagerdol/browser/default/browser.php +++ b/htdocs/core/filemanagerdol/browser/default/browser.php @@ -133,26 +133,26 @@ oConnector.CheckError = function( responseXml ) switch ( iErrorNumber ) { - case 0 : - break ; - case 1 : // Custom error. Message placed in the "text" attribute. + case 0: + break; + case 1: // Custom error. Message placed in the "text" attribute. alert( oErrorNode.attributes.getNamedItem('text').value ); - break ; - case 101 : + break; + case 101: alert( 'Folder already exists' ); - break ; - case 102 : + break; + case 102: alert( 'Invalid folder name' ); - break ; - case 103 : + break; + case 103: alert( 'You have no permissions to create the folder' ); - break ; - case 110 : + break; + case 110: alert( 'Unknown error creating folder' ); - break ; - default : + break; + default: alert( 'Error on your request. Error number: ' + iErrorNumber ); - break ; + break; } } return iErrorNumber ; diff --git a/htdocs/core/filemanagerdol/browser/default/frmcreatefolder.php b/htdocs/core/filemanagerdol/browser/default/frmcreatefolder.php index 44b00b2154c..6f90c0c36ad 100644 --- a/htdocs/core/filemanagerdol/browser/default/frmcreatefolder.php +++ b/htdocs/core/filemanagerdol/browser/default/frmcreatefolder.php @@ -91,24 +91,24 @@ function CreateFolderCallBack( fckXml ) switch ( iErrorNumber ) { - case 0 : + case 0: window.parent.frames['frmResourcesList'].Refresh(); - break ; - case 101 : + break; + case 101: alert( 'Folder already exists' ); - break ; - case 102 : + break; + case 102: alert( 'Invalid folder name' ); - break ; - case 103 : + break; + case 103: alert( 'You have no permissions to create the folder' ); - break ; - case 110 : + break; + case 110: alert( 'Unknown error creating folder' ); - break ; - default : + break; + default: alert( 'Error creating folder. Error number: ' + iErrorNumber ); - break ; + break; } */ } diff --git a/htdocs/core/filemanagerdol/browser/default/frmupload.php b/htdocs/core/filemanagerdol/browser/default/frmupload.php index dd58eded713..10575586cec 100644 --- a/htdocs/core/filemanagerdol/browser/default/frmupload.php +++ b/htdocs/core/filemanagerdol/browser/default/frmupload.php @@ -95,22 +95,22 @@ function OnUploadCompleted( errorNumber, data ) switch ( errorNumber ) { - case 0 : + case 0: window.parent.frames['frmResourcesList'].Refresh(); - break ; - case 1 : // Custom error. + break; + case 1: // Custom error. alert( data ); - break ; - case 201 : + break; + case 201: window.parent.frames['frmResourcesList'].Refresh(); alert( 'A file with the same name is already available. The uploaded file has been renamed to "' + data + '"' ); - break ; - case 202 : + break; + case 202: alert( 'Invalid file' ); - break ; - default : + break; + default: alert( 'Error on file upload. Error number: ' + errorNumber ); - break ; + break; } } diff --git a/htdocs/core/filemanagerdol/connectors/php/commands.php b/htdocs/core/filemanagerdol/connectors/php/commands.php index 3f02b9f39fb..5c8e76a9522 100644 --- a/htdocs/core/filemanagerdol/connectors/php/commands.php +++ b/htdocs/core/filemanagerdol/connectors/php/commands.php @@ -160,14 +160,14 @@ function CreateFolder( $resourceType, $currentFolder ) switch ( $sErrorMsg ) { - case '' : + case '': $sErrorNumber = '0' ; - break ; + break; case 'Invalid argument' : case 'No such file or directory' : $sErrorNumber = '102' ; // Path too long. break ; - default : + default: $sErrorNumber = '110' ; break ; } diff --git a/htdocs/core/lib/functions2.lib.php b/htdocs/core/lib/functions2.lib.php index 31289eaca3b..7ab1a53d230 100644 --- a/htdocs/core/lib/functions2.lib.php +++ b/htdocs/core/lib/functions2.lib.php @@ -606,8 +606,8 @@ function clean_url($url,$http=1) * Returns an email value with obfuscated parts. * * @param string $mail Email - * @param string $replace Replacement character (defaul : *) - * @param int $nbreplace Number of replacement character (default : 8) + * @param string $replace Replacement character (defaul: *) + * @param int $nbreplace Number of replacement character (default: 8) * @param int $nbdisplaymail Number of character unchanged (default: 4) * @param int $nbdisplaydomain Number of character unchanged of domain (default: 3) * @param bool $displaytld Display tld (default: true) From f39558ebb0d0ebb4f2d600986984678bd3c72be2 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 6 Jul 2016 11:24:51 +0200 Subject: [PATCH 25/34] =?UTF-8?q?Fix=20=C4=89onf=20not=20defined?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- htdocs/accountancy/class/accountancyexport.class.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/htdocs/accountancy/class/accountancyexport.class.php b/htdocs/accountancy/class/accountancyexport.class.php index fd06a164962..ddc80e00571 100644 --- a/htdocs/accountancy/class/accountancyexport.class.php +++ b/htdocs/accountancy/class/accountancyexport.class.php @@ -156,6 +156,8 @@ class AccountancyExport * @return void */ public function exportNormal($objectLines) { + global $conf; + foreach ( $objectLines as $line ) { // Std export $date = dol_print_date($line->doc_date, $conf->global->ACCOUNTING_EXPORT_DATE); From 8505c5db09e82447c12f788d19bea6db9ce151ea Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 6 Jul 2016 13:26:49 +0200 Subject: [PATCH 26/34] Code comment --- htdocs/core/class/translate.class.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/htdocs/core/class/translate.class.php b/htdocs/core/class/translate.class.php index 06bd6dc0c40..9ca6196b018 100644 --- a/htdocs/core/class/translate.class.php +++ b/htdocs/core/class/translate.class.php @@ -161,6 +161,7 @@ class Translate { global $conf,$db; + // Load $this->tab_translate[] from database if (count($this->tab_translate) == 0) $this->loadFromDatabase($db); // Nothing was loaded yet, so we load database. // Check parameters @@ -241,7 +242,7 @@ class Translate $tmparray=dol_getcache($usecachekey); if (is_array($tmparray) && count($tmparray)) { - $this->tab_translate+=$tmparray; // Faster than array_merge($tmparray,$this->tab_translate). Note: If a valuer already exists into tab_translate, value into tmparaay is not added. + $this->tab_translate+=$tmparray; // Faster than array_merge($tmparray,$this->tab_translate). Note: If a value already exists into tab_translate, value into tmparaay is not added. //print $newdomain."\n"; //var_dump($this->tab_translate); if ($alt == 2) $fileread=1; @@ -261,7 +262,8 @@ class Translate { $tab=explode('=',$line,2); $key=trim($tab[0]); - //print "Domain=$domain, found a string for $tab[0] with value $tab[1]
"; + //if ($domain == 'orders') print "Domain=$domain, found a string for $tab[0] with value $tab[1]. Currently in cache ".$this->tab_translate[$key]."
"; + //if ($key == 'Order') print "Domain=$domain, found a string for key=$key=$tab[0] with value $tab[1]. Currently in cache ".$this->tab_translate[$key]."
"; if (empty($this->tab_translate[$key]) && isset($tab[1])) // If translation was already found, we must not continue, even if MAIN_FORCELANGDIR is set (MAIN_FORCELANGDIR is to replace lang dir, not to overwrite entries) { $value=trim(preg_replace('/\\n/',"\n",$tab[1])); @@ -278,6 +280,7 @@ class Translate else { $this->tab_translate[$key]=$value; + //if ($domain == 'orders') print "$tab[0] value $value
"; if ($usecachekey) $tabtranslatedomain[$key]=$value; // To save lang content in cache } } From d22ef4f371caaa051464b4412ee66eb7c9a31c30 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 6 Jul 2016 22:28:13 +0200 Subject: [PATCH 27/34] Fix Do not show status --- htdocs/comm/mailing/card.php | 28 ++++++++++----------- htdocs/comm/mailing/cibles.php | 14 +++++------ htdocs/comm/mailing/class/mailing.class.php | 2 ++ htdocs/filefunc.inc.php | 2 +- 4 files changed, 24 insertions(+), 22 deletions(-) diff --git a/htdocs/comm/mailing/card.php b/htdocs/comm/mailing/card.php index 443b6144e5a..73717696dc7 100644 --- a/htdocs/comm/mailing/card.php +++ b/htdocs/comm/mailing/card.php @@ -673,9 +673,9 @@ if ($action == 'create') dol_fiche_head(); print ''; - print ''; - print ''; - print ''; + print ''; + print ''; + print ''; // Other attributes $parameters=array(); @@ -689,11 +689,11 @@ if ($action == 'create') print '

'; print '
'.$langs->trans("MailTitle").'
'.$langs->trans("MailFrom").'
'.$langs->trans("MailErrorsTo").'
'.$langs->trans("MailTitle").'
'.$langs->trans("MailFrom").'
'.$langs->trans("MailErrorsTo").'
'; - print ''; - print ''; + print ''; - print ''; + print ''; print ''; @@ -995,7 +995,7 @@ else print '
'.$langs->trans("MailTopic").'
'.$langs->trans("BackgroundColorByDefault").''; + print '
'.$langs->trans("MailTopic").'
'.$langs->trans("BackgroundColorByDefault").''; print $htmlother->selectColor($_POST['bgcolor'],'bgcolor','new_mailing',0); print '
'.$langs->trans("MailMessage").'
'; + print '
'.$langs->trans("MailMessage").'
'; print '
'.$langs->trans("CommonSubstitutions").':
'; foreach($object->substitutionarray as $key => $val) { @@ -792,7 +792,7 @@ else $linkback = ''.$langs->trans("BackToList").''; - print '
'.$langs->trans("Ref").'
'.$langs->trans("Ref").''; print $form->showrefnav($object,'id', $linkback); print '
'; // Subject - print ''; + print ''; // Joined files print '';*/ // Message - print ''; + print ''; print ''; @@ -1114,9 +1114,9 @@ else print '
'.$langs->trans("MailTopic").''.$object->sujet.'
'.$langs->trans("MailTopic").''.$object->sujet.'
'.$langs->trans("MailFile").''; @@ -1021,7 +1021,7 @@ else print '
'.$langs->trans("MailMessage").'
'; + print '
'.$langs->trans("MailMessage").'
'; print '
'.$langs->trans("CommonSubstitutions").':
'; foreach($object->substitutionarray as $key => $val) { @@ -1055,7 +1055,7 @@ else $linkback = ''.$langs->trans("BackToList").''; - print '
'.$langs->trans("Ref").'
'.$langs->trans("Ref").''; print $form->showrefnav($object,'id', $linkback); print '
'; // Subject - print ''; + print ''; - $trackid=''; // TODO To avoid conflicts with 2 mass emailing, we shoul set a trackid here, even if we use another one into email header. + $trackid=''; // TODO To avoid conflicts with 2 mass emailing, we should set a trackid here, even if we use another one into email header. dol_init_file_process($upload_dir, $trackid); // Joined files @@ -1156,12 +1156,12 @@ else print ''; // Background color - print ''; // Message - print ''; + print ''; print ''; - print ''; + print ''; - print ''; + print ''; // Errors to - print ''; // Status - print ''; // Nb of distinct emails - print ''; - print ''; + print ''; print ''; print ''."\n"; // Modules @@ -478,7 +478,7 @@ function llxHeaderVierge($title, $head = "") top_htmlhead($head,$title); - print ''."\n"; + print ''."\n"; } /** diff --git a/htdocs/theme/eldy/style.css.php b/htdocs/theme/eldy/style.css.php index 9e9cf97706c..ae8d0e98738 100644 --- a/htdocs/theme/eldy/style.css.php +++ b/htdocs/theme/eldy/style.css.php @@ -4292,7 +4292,9 @@ border-top-right-radius: 6px; /* For demo pages */ img.demothumb { - box-shadow: 2px 2px 8px #888; + box-shadow: 2px 2px 8px #BBB; + margin-right: 20px; + margin-left: 10px; } @@ -4329,6 +4331,12 @@ img.demothumb { width: px; } + img.demothumb { + box-shadow: 1px 1px 4px #BBB; + margin-right: 6px; + margin-left: 4px; + width: 80px; + } } /* nboftopmenuentries = , fontsize= */ From e55ae1476a08780b6db08618ed2eb857d145a7ab Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 6 Jul 2016 23:55:10 +0200 Subject: [PATCH 30/34] Fix innosetup install --- build/exe/doliwamp/Languages/MyFrench.isl | 8 ++++---- build/exe/doliwamp/doliwamp.iss | 2 ++ build/exe/doliwamp/doliwampsmall.bmp | Bin 12814 -> 3318 bytes 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/build/exe/doliwamp/Languages/MyFrench.isl b/build/exe/doliwamp/Languages/MyFrench.isl index 0fd71f96bfb..6c1b859a318 100644 --- a/build/exe/doliwamp/Languages/MyFrench.isl +++ b/build/exe/doliwamp/Languages/MyFrench.isl @@ -21,10 +21,10 @@ TechnicalParameters=Param IfFirstInstall=S'il s'agit de la première installation, merci de spécifier ces quelques paramètres techniques. Si vous ne les comprennez pas, êtes non sûr, ou procédez à une mise à jour, laissez les champs avec les valeurs proposées par défaut. -; WARNING !!! STRINGS FOR THIS 4 STRINGS MUST BE LOWER THAN 60 CHARACTERS -SMTPServer=Serveur SMTP (le votre ou celui de votre FAI, première installation uniquement) : -ApachePort=Port Apache (première installation uniquement, le choix standard est 80) : -MySqlPort=Port Mysql (première installation uniquement, le choix standard est 3306) : +; WARNING !!! STRINGS FOR THIS 4 STRINGS MUST BE LOWER THAN 70 CHARACTERS +SMTPServer=Serveur SMTP (le votre ou de votre FAI, première installation uniquement): +ApachePort=Port Apache (première installation uniquement, le choix standard est 80): +MySqlPort=Port Mysql (première installation uniquement, le choix standard est 3306): MySqlPassword=Mot de passe serveur+base MySql de root (première installation uniquement): FailedToDeleteLock=Echec de la suppression du fichier %1/www/dolibarr/install.lock. Vous pouvez ignorer l'avertissement mais il est possible que vous deviez le supprimer manuellement plus tard. Dans ce cas, cela vous sera signalé. Cliquez sur OK pour continuer... diff --git a/build/exe/doliwamp/doliwamp.iss b/build/exe/doliwamp/doliwamp.iss index c82b7b40c47..dfe7febf2db 100644 --- a/build/exe/doliwamp/doliwamp.iss +++ b/build/exe/doliwamp/doliwamp.iss @@ -268,6 +268,7 @@ begin if firstinstall then begin + // False means it's not a password edit Page.Add(CustomMessage('SMTPServer'), False); Page.Add(CustomMessage('ApachePort'), False); Page.Add(CustomMessage('MySqlPort'), False); @@ -275,6 +276,7 @@ begin end else begin + // False means it's not a password edit Page.Add(CustomMessage('SMTPServer'), False); Page.Add(CustomMessage('ApachePort'), False); Page.Add(CustomMessage('MySqlPort'), False); diff --git a/build/exe/doliwamp/doliwampsmall.bmp b/build/exe/doliwamp/doliwampsmall.bmp index f19e98fd19ae2423acaa635fa3fd23f4584fcbdf..f4d51aa02293ebcfa1b80cdda09298e736569d6d 100644 GIT binary patch literal 3318 zcmcJQ=~Gfs7>Dh9e}Ii8W}0b;kyb=DnSD&t3X4opmbNja)fUTb1SZ1`FsuyF$~3cG zjcLyfH?SE?jV4EucC%@bvBElXXXM-$Z2EHVJonD|z4txOIhVO}iHshb>ESq*qU!>5 z`k>PnoijW<(bdD_5xOs#O`MJbx*U%3qLic2b0{Sv#+y=($Iz%{z0Ywf$=Wa%kQwWJ zY@HX0m^qoTw2Uavqia1gqGq96D1uqj#azxjfLGAee{x0jhkRK2x-RA=lWUV{-1g(T zDm{neOETcLIKRBj{(z>sQlPT*cUMXHporqc#00upo_9*P0YEYpCEWRd=DJfr^}4_7 zl2ibSc(j_I0?AaAaszN=TLN0Hy7&i-)iNP2#K*)_G}ozeH~QczVtit2AfWY{8lR5F zuLq1ZG7%`cMpeoxph7V}AqdcV9r}j{y47isdQJAdO6jwfTVvlwk(}5zzKYrSP{#EK zHaU+DXuDB{&q8D5KbaVW=E}H!c^hf@34wRDIj&2fbtN1cuodv=fVLZ_f#3SVRG7qY zwj~AU$ImyowAt;yb%)l;6Bjx=dGx}hV1VJKtKV3}XOP?I3Q^dvaU1xR8p;mI6NB*1 zVm<@Ve(Ma}zu8nG2mx&;cRVPNrjRicb0Ao1$5pn2eaOq zO{Lqz@HQo%@$kG9v`yIUwGy66$izEO?Fa>Q)kDA4Y*GnBl!9QTfL@ZcK#{yqUzTqF z{mb$BaV~tXx0?kdQ&F472K4Cvz5mJoEaI^AHa8US)TFY2 z0gpQI3KDz54OfarhF^TL^ttk3u-Dqx{<5RdP%E!F7OkB$FV~5~Nd~g;{Jxcdial&y r8p}Q6aO1XS^4W;}A=hP+) literal 12814 zcmds+`CC*~9LDJ%=(p-AO;JHXHn9xR%+k_aK*bG#PyrE1OH{;^MV0|&7}g0ChD8%W z#oQh;;K?>kOrgwD5SLIkMcmB|eEXhD<1-@;_d8<#aOZj6xifRme9!wi?>Xnrg)wd~ z54DgU@6fXi$%Qn6^pb@oJzH4RI9ph#dUs0tfSy)O?ggdl3%A}-s#d$b3B}624^}Hw zYo_#pQWZX>FO;f?sePeXO|wLVLKR6|N>!9cKX9~mdVf~CuC*)?MdSBa9`srguiviq z_}`13F#sHeyZ1tAP81I9&LL%+)Zx9kD9w(9%F7Ogar04o>^q$Q^Dr*dRH6RVF`TaY z9#s{^DBl#1{0L7Z_&6fY)0R9~L5yFt5Yv-fyBMm&(dr4Wpy})ha2^eHzazwBgZVi;OI@l{-`t(NsF8q}XW`X5^~tG&Ka zL)~%g&@6_U#wBW6AC|A~yvNS621jcqzs6>}aOx;!@DAn1V|(=I5rp)Q6F==icBmVo zX~R!?ln0fJ3_PU?BY(U7n8VjYU&{SiBJ0ODp@u{=J>p_)Aq z97Vdlj)vOb46T@aEpkg);DWOJSd(oyCvIG6MsY#_v01Y`cH!_OHijbI&14H4j`Do- za?|q~=6AEL1-dYImd7VK;ynj}qbT<`%*gE+QUhI4UhwR>8S=F@)FIK=f#uVXC1K7W zaI|&`v7Khl$(mzGTPWD#^ie$1(U7mYq6o1wERo=4!}2Sb)_dEs6g{;U8qHu!4;q1r z9NS+o2Ku0)@~EX7RgjmA1&ZWk%Hj71|+mbVu7@7|I0;NBfPynh$% z?GN>qrK4dsMkkEkbY36MpZEoFl$|-gIeal5Z<@uHx#RF*>OCpKd}Qxant({+wVrBY3hy0ZR64p zvEGZ;GWqC~72;?0N8I$jbR2*p)m+pbDU&i4bvS$-l=+c;I;bc+j^`v_dvK(hVIEs{ z$cNPb;HTH7@mxR08fqU~94twf^5F6{(C z$`?1TGrLdQBevwZ_Ke#0NcD3@{a=+5 zirl)pfA==ZbP-6TwJhg5Wu7BAS~t7Dd2GwaQ(XsE?L<#2ocM7kYd;b9dp{K=K}~FO zzEkHrf}=!FK3n7IYUHgLPjwwwwbfqMwEtyyx%NG6PKsO)f2~E5_dwa&>Hb5&k$TPm zc5V_|=*LL&b7Ixjkk86JSrD1XJp^0j?o4QW1~FRjGk>tynkctTVUwT@7}|YpI`hrj3YJu=U5Wz*QK%}-MMKR|+@#-F z`aNH)F}Zan&Of|=4||h?Xsn!Ao;L&y14rp|ZP{#MFBkV(;=c5OUiy1ex`r8Y7`~PQ z?B=PJ=Hr(%7dU=Jn~jTj%AmQ_a!!6un&Y(_45L%}n)_%TWCc32J?8|wfFtd^!7Mf- zQ$2j6XA)&jAK8zr04J8$$2^}7M-D?;Kf4#oX2^A|^UVWFNure)38nM5?64P72xnf*o^XOI)~DfAm}Ks+{HYfhAeqY zMu4LY|2v!Ub>PCE2eDV}2VL+m^5@F(*oEUWVq<9I0!Lgr|NQ5qVNPN$-)w8bue&m^ zEpiI&8*j6`nev}cTpVo-d|qtE`RLc?)#h`=l#bmAJ}6lFF7g(;Api4`EN`a#7tr@P z$_{kGm5a4{D?L7nYkLdbGaWB0!2YygY>RNi=4GRa#g*lU<9QQ}5l8t;T<}AFIF9U0 zFw&Fd<4_nn7GEuYADcr)u{>~m8n*dr*(h+eIpkgP@qEPX zvuEwzBQ|Af%kt4sstQ+(hElb4#rsgKLWxbGDq8sgl&WH4Q>wOwje%0NebrbfRsRAt CM^dE# From b2d4fb94d6ca22c8b61fcdbe79d7ff8aa5527545 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 7 Jul 2016 00:34:59 +0200 Subject: [PATCH 31/34] Fix wrapping of left menu for menu titles --- htdocs/theme/eldy/style.css.php | 4 +++- htdocs/theme/md/style.css.php | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/htdocs/theme/eldy/style.css.php b/htdocs/theme/eldy/style.css.php index ae8d0e98738..ef75f3032cb 100644 --- a/htdocs/theme/eldy/style.css.php +++ b/htdocs/theme/eldy/style.css.php @@ -1058,6 +1058,8 @@ div.tmenucenter div.menu_titre { padding-top: 4px; padding-bottom: 4px; + overflow: hidden; + text-overflow: ellipsis; } .mainmenuaspan { @@ -1421,7 +1423,7 @@ div.vmenu, td.vmenu { .companylogo { } .searchform { padding-top: 4px; } -a.vmenu:link, a.vmenu:visited, a.vmenu:hover, a.vmenu:active { font-size:px; font-family: ; text-align: ; font-weight: bold; } +a.vmenu:link, a.vmenu:visited, a.vmenu:hover, a.vmenu:active { white-space: nowrap; font-size:px; font-family: ; text-align: ; font-weight: bold; } font.vmenudisabled { font-size:px; font-family: ; text-align: ; font-weight: bold; color: #aaa; margin-left: 4px; } a.vmenu:link, a.vmenu:visited { color: #; } diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index f4e7fe8342a..9e217efb30c 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -1087,6 +1087,8 @@ div.tmenucenter } div.menu_titre { padding-bottom: 2px; + overflow: hidden; + text-overflow: ellipsis; } .mainmenuaspan { @@ -1458,7 +1460,7 @@ div.vmenu, td.vmenu { .companylogo { padding-top: 4px; } .searchform { padding-top: 8px; } -a.vmenu:link, a.vmenu:visited, a.vmenu:hover, a.vmenu:active { font-size:px; font-family: ; text-align: ; font-weight: bold; } +a.vmenu:link, a.vmenu:visited, a.vmenu:hover, a.vmenu:active { white-space: nowrap; font-size:px; font-family: ; text-align: ; font-weight: bold; } font.vmenudisabled { font-size:px; font-family: ; text-align: ; font-weight: bold; color: #aaa; margin-left: 4px; } a.vmenu:link, a.vmenu:visited { color: #; } From f756f3db0e775d562d7159b90925b15d2031bff8 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 7 Jul 2016 01:23:20 +0200 Subject: [PATCH 32/34] Fix hook context 'all' --- dev/skeletons/modMyModule.class.php | 2 +- htdocs/core/class/hookmanager.class.php | 3 +-- htdocs/langs/fr_FR/admin.lang | 10 +++++----- htdocs/langs/fr_FR/bills.lang | 2 +- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/dev/skeletons/modMyModule.class.php b/dev/skeletons/modMyModule.class.php index 09c416a7fd2..22432433334 100644 --- a/dev/skeletons/modMyModule.class.php +++ b/dev/skeletons/modMyModule.class.php @@ -90,7 +90,7 @@ class modMyModule extends DolibarrModules // 'models' => 0, // Set this to 1 if module has its own models directory (core/modules/xxx) // 'css' => array('/mymodule/css/mymodule.css.php'), // Set this to relative path of css file if module has its own css file // 'js' => array('/mymodule/js/mymodule.js'), // Set this to relative path of js file if module must load a js on all pages - // 'hooks' => array('hookcontext1','hookcontext2') // Set here all hooks context managed by module + // 'hooks' => array('hookcontext1','hookcontext2',...) // Set here all hooks context managed by module. You can also set hook context 'all' // 'dir' => array('output' => 'othermodulename'), // To force the default directories names // 'workflow' => array('WORKFLOW_MODULE1_YOURACTIONTYPE_MODULE2'=>array('enabled'=>'! empty($conf->module1->enabled) && ! empty($conf->module2->enabled)', 'picto'=>'yourpicto@mymodule')) // Set here all workflow context managed by module // ); diff --git a/htdocs/core/class/hookmanager.class.php b/htdocs/core/class/hookmanager.class.php index f4f9a37fcf6..1a7425b0a55 100644 --- a/htdocs/core/class/hookmanager.class.php +++ b/htdocs/core/class/hookmanager.class.php @@ -87,8 +87,7 @@ class HookManager { if (is_array($hooks)) $arrayhooks=$hooks; // New system else $arrayhooks=explode(':',$hooks); // Old system (for backward compatibility) - - if (in_array($context,$arrayhooks)) // We instantiate action class only if hook is required + if (in_array($context,$arrayhooks) || in_array('all',$arrayhooks)) // We instantiate action class only if hook is required { $path = '/'.$module.'/class/'; $actionfile = 'actions_'.$module.'.class.php'; diff --git a/htdocs/langs/fr_FR/admin.lang b/htdocs/langs/fr_FR/admin.lang index 205c1e0eccb..767b138eb54 100644 --- a/htdocs/langs/fr_FR/admin.lang +++ b/htdocs/langs/fr_FR/admin.lang @@ -383,7 +383,7 @@ ShowDetailsInPDFPageFoot=Ajout de plus d'informations dans le pied de page de vo NoDetails=Pas plus de détails dans le pied-de-page DisplayCompanyInfo=Afficher l'adresse de la société DisplayCompanyInfoAndManagers=Afficher les noms des sociétés et des supérieurs hiérarchiques -EnableAndSetupModuleCron=If you want to have this recurring invoice beeing generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template with button *Create*. Note that even if you enabled automatic generation, you can still safely launch manual generation. Duplicates generation for same period are not possible. +EnableAndSetupModuleCron=Si vous voulez avoir cette facture récurrente générée automatiquement, le module *%s* doit être activé et correctement configuré. Dans le cas contraire, la génération des factures doit être effectuée manuellement à partir de ce modèle avec le bouton *Créer*. Notez que même si vous avez activé la génération automatique, vous pouvez toujours lancer en toute sécurité la génération manuelle. La génération en double sur une même période n'est pas possibles. # Modules Module0Name=Utilisateurs & groupes @@ -550,7 +550,7 @@ Permission32=Créer/modifier les produits Permission34=Supprimer les produits Permission36=Voir/gérer les produits cachés Permission38=Exporter les produits -Permission41=Lire les projets et les tâches (projets publiques et projets dont je suis contact). Peut également entrer le temps consommé sur les tâches assignées (feuille de temps) +Permission41=Consulter les projets et les tâches (projets publiques et projets dont je suis contact). Peut également entrer le temps consommé sur les tâches assignées (feuille de temps) Permission42=Créer/modifier les projets et tâches (partagés ou dont je suis contact) Permission44=Supprimer les projets et tâches (partagés ou dont je suis contact) Permission45=Exporter les projets @@ -593,7 +593,7 @@ Permission121=Consulter les tiers (sociétés) liés à l'utilisateur Permission122=Créer/modifier les tiers (sociétés) liés à l'utilisateur Permission125=Supprimer les tiers (sociétés) liés à l'utilisateur Permission126=Exporter les tiers (sociétés) -Permission141=Consulter les projets et tâches (y compris privés dont je ne suis pas contact) +Permission141=Consulter tous les projets et tâches (y compris privés dont je ne suis pas contact) Permission142=Créer/modifier tous les projets et tâches (y compris privés dont je ne suis pas contact) Permission144=Supprimer les projets et tâches (y compris privés dont je ne suis pas contact) Permission146=Consulter les fournisseurs @@ -1585,6 +1585,6 @@ AddOtherPagesOrServices=Ajout d'autres pages ou services AddModels=Ajout de modèles de document ou de numérotation AddSubstitutions=Ajout de valeurs de substitution DetectionNotPossible=Détection impossible -UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved on database user table and will be checked on each future access) +UrlToGetKeyToUseAPIs=Url pour obtenir le jeton pour utiliser l'API (une fois le jeton reçu, il est enregistré dans la table des utilisateurs de la base de données et sera vérifié à chaque accès) ListOfAvailableAPIs=Liste des APIs disponibles -activateModuleDependNotSatisfied=Module "%s" depends on module "%s" that is missing, so module "%1$s" may not work correclty. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise +activateModuleDependNotSatisfied=Le module "%s" dépend du module "%s" qui est manquant, aussi le module "%1$s" peut ne pas fonctionner correctement. Merci d'installer le module "%2$s" ou désactiver le module "%1$s" si vous ne souhaitez pas avoir de mauvaise surprise diff --git a/htdocs/langs/fr_FR/bills.lang b/htdocs/langs/fr_FR/bills.lang index 4aa648459d1..6ca57901e9e 100644 --- a/htdocs/langs/fr_FR/bills.lang +++ b/htdocs/langs/fr_FR/bills.lang @@ -467,7 +467,7 @@ InvoiceSituationLast=Dernière facture PDFCrevetteSituationNumber=Situation N°%s PDFCrevetteSituationInvoiceLineDecompte=Facture de situation - Déompte PDFCrevetteSituationInvoiceTitle=Facture de situation -PDFCrevetteSituationInvoiceLine=Situation N°%s : Inv. N°%s on %s +PDFCrevetteSituationInvoiceLine=Situation N°%s : Fact. N°%s sur %s TotalSituationInvoice=Total situation invoiceLineProgressError=L'avancement d'une ligne de facture ne peut pas être supérieure ou égale à la ligne de facture suivante. updatePriceNextInvoiceErrorUpdateline=Erreur: mise à jour du prix sur la ligne de facture : %s From 804159f3f3cc884cdff55e580d61198ec5cb9106 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 7 Jul 2016 04:11:27 +0200 Subject: [PATCH 33/34] Fix language files --- htdocs/langs/en_US/languages.lang | 1 - htdocs/langs/en_US/link.lang | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/languages.lang b/htdocs/langs/en_US/languages.lang index bda34ce2299..884f9048666 100644 --- a/htdocs/langs/en_US/languages.lang +++ b/htdocs/langs/en_US/languages.lang @@ -1,5 +1,4 @@ # Dolibarr language file - Source file is en_US - languages - Language_ar_AR=Arabic Language_ar_SA=Arabic Language_bn_BD=Bengali diff --git a/htdocs/langs/en_US/link.lang b/htdocs/langs/en_US/link.lang index 6880d4d86a0..77a1814f1ca 100644 --- a/htdocs/langs/en_US/link.lang +++ b/htdocs/langs/en_US/link.lang @@ -1,3 +1,4 @@ +# Dolibarr language file - Source file is en_US - languages LinkANewFile=Link a new file/document LinkedFiles=Linked files and documents NoLinkFound=No registered links From 63ad970a27c932b2b32c9b94dedc3aff16684e69 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 7 Jul 2016 04:26:22 +0200 Subject: [PATCH 34/34] Sync transifex --- .tx/config | 2 +- htdocs/langs/fr_FR/interventions.lang | 2 ++ htdocs/langs/fr_FR/languages.lang | 1 - htdocs/langs/fr_FR/loan.lang | 4 ++-- htdocs/langs/fr_FR/oauth.lang | 1 + 5 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.tx/config b/.tx/config index c4ec45cd3b2..010227f6e61 100644 --- a/.tx/config +++ b/.tx/config @@ -170,7 +170,7 @@ source_file = htdocs/langs/en_US/interventions.lang source_lang = en_US type = MOZILLAPROPERTIES -[dolibarr.languages] +[dolibarr.languages-not-res] file_filter = htdocs/langs//languages.lang source_file = htdocs/langs/en_US/languages.lang source_lang = en_US diff --git a/htdocs/langs/fr_FR/interventions.lang b/htdocs/langs/fr_FR/interventions.lang index a2803463899..d9c51beab73 100644 --- a/htdocs/langs/fr_FR/interventions.lang +++ b/htdocs/langs/fr_FR/interventions.lang @@ -14,10 +14,12 @@ DeleteIntervention=Supprimer intervention ValidateIntervention=Valider intervention ModifyIntervention=Modifier intervention DeleteInterventionLine=Supprimer ligne d'intervention +CloneIntervention=Clone intervention ConfirmDeleteIntervention=Êtes-vous sûr de vouloir effacer cette intervention ? ConfirmValidateIntervention=Êtes-vous sûr de vouloir valider cette intervention sous la référence %s ? ConfirmModifyIntervention=Êtes-vous sûr de vouloir modifier cette intervention ? ConfirmDeleteInterventionLine=Êtes-vous sûr de vouloir effacer cette ligne ? +ConfirmCloneIntervention=Are you sure you want to clone this intervention ? NameAndSignatureOfInternalContact=Nom et signature de l'intervenant : NameAndSignatureOfExternalContact=Nom et signature du client : DocumentModelStandard=Modèle de fiche d'intervention standard diff --git a/htdocs/langs/fr_FR/languages.lang b/htdocs/langs/fr_FR/languages.lang index dd730bd73a2..6c3f24877c7 100644 --- a/htdocs/langs/fr_FR/languages.lang +++ b/htdocs/langs/fr_FR/languages.lang @@ -1,5 +1,4 @@ # Dolibarr language file - Source file is en_US - languages - Language_ar_AR=Arabe Language_ar_SA=Arabe Language_bn_BD=Bengalais diff --git a/htdocs/langs/fr_FR/loan.lang b/htdocs/langs/fr_FR/loan.lang index 481c9ba7b18..6fb63229485 100644 --- a/htdocs/langs/fr_FR/loan.lang +++ b/htdocs/langs/fr_FR/loan.lang @@ -31,9 +31,9 @@ DownPaymentDesc=L'acompte = Le prix de la maison multiplié par le pource InterestRateDesc=Le taux d'intérêt = Le pourcentage annuel d'intérêt divisé par 100. MonthlyFactorDesc=The monthly factor = The result of the following formula MonthlyInterestRateDesc=Le taux d'intérêt mensuel = Le taux annuel d'intérêt divisé par 12 (pour les 12 mois de l'année) -MonthTermDesc=The month term of the loan in months = The number of years you've taken the loan out for times 12 +MonthTermDesc=Le terme en mois du prêt en mois = Le nombre d'années que vous avez pris pour le prêt multiplié par 12 MonthlyPaymentDesc=Le paiement mensuel est déterminé en utilisant la formule suivante -AmortizationPaymentDesc=The amortization breaks down how much of your monthly payment goes towards the bank's interest, and how much goes into paying off the principal of your loan. +AmortizationPaymentDesc=L' amortissement décompose votre paiement mensuel entre l'intérêt de la banque et le remboursement du principal de votre prêt. AmountFinanced=Montant financé AmortizationMonthlyPaymentOverYears=Amortissement pour paiement mensuel : %s sur %s ans Totalsforyear=Total pour l'année diff --git a/htdocs/langs/fr_FR/oauth.lang b/htdocs/langs/fr_FR/oauth.lang index c0cbb9a370c..24a654f21ac 100644 --- a/htdocs/langs/fr_FR/oauth.lang +++ b/htdocs/langs/fr_FR/oauth.lang @@ -12,3 +12,4 @@ ListOfSupportedOauthProviders=Saisissez ici le crédit fourni par votre fourniss OAUTH_GOOGLE_NAME=API Google OAUTH_GOOGLE_ID=ID API Google OAUTH_GOOGLE_SECRET=API Google Secrète +OAUTH_GOOGLE_DESC=Allez sur cette page puis Identitifaction pour créer des informations d'identification OAuth
'.$langs->trans("MailTopic").'
'.$langs->trans("MailTopic").'
'.$langs->trans("BackgroundColorByDefault").''; + print '
'.$langs->trans("BackgroundColorByDefault").''; print $htmlother->selectColor($object->bgcolor,'bgcolor','edit_mailing',0); print '
'.$langs->trans("MailMessage").'
'; + print '
'.$langs->trans("MailMessage").'
'; print '
'.$langs->trans("CommonSubstitutions").':
'; foreach($object->substitutionarray as $key => $val) { diff --git a/htdocs/comm/mailing/cibles.php b/htdocs/comm/mailing/cibles.php index d09be0897c3..cc5b16f1935 100644 --- a/htdocs/comm/mailing/cibles.php +++ b/htdocs/comm/mailing/cibles.php @@ -183,30 +183,30 @@ if ($object->fetch($id) >= 0) $linkback = ''.$langs->trans("BackToList").''; - print '
'.$langs->trans("Ref").'
'.$langs->trans("Ref").''; print $form->showrefnav($object,'id', $linkback); print '
'.$langs->trans("MailTitle").''.$object->titre.'
'.$langs->trans("MailTitle").''.$object->titre.'
'.$langs->trans("MailFrom").''.dol_print_email($object->email_from,0,0,0,0,1).'
'.$langs->trans("MailFrom").''.dol_print_email($object->email_from,0,0,0,0,1).'
'.$langs->trans("MailErrorsTo").''.dol_print_email($object->email_errorsto,0,0,0,0,1); + print '
'.$langs->trans("MailErrorsTo").''.dol_print_email($object->email_errorsto,0,0,0,0,1); print '
'.$langs->trans("Status").''.$object->getLibStatut(4); + print '
'.$langs->trans("Status").''.$object->getLibStatut(4); if ($object->statut == 2) print ' ('.$object->countNbOfTargets('alreadysent').'/'.$object->nbemail.')'; print '
'; + print '
'; print $langs->trans("TotalNbOfDistinctRecipients"); print ''; $nbemail = ($object->nbemail?$object->nbemail:'0'); - if (!empty($conf->global->MAILING_LIMIT_SENDBYWEB) && $conf->global->MAILING_LIMIT_SENDBYWEB < $nbemail) + if (!empty($conf->global->MAILING_LIMIT_SENDBYWEB) && ($conf->global->MAILING_LIMIT_SENDBYWEB < $nbemail) && ($object->statut == 1 || $object->statut == 2)) { $text=$langs->trans('LimitSendingEmailing',$conf->global->MAILING_LIMIT_SENDBYWEB); print $form->textwithpicto($nbemail,$text,1,'warning'); diff --git a/htdocs/comm/mailing/class/mailing.class.php b/htdocs/comm/mailing/class/mailing.class.php index d9cc6f31d23..298ceb886b9 100644 --- a/htdocs/comm/mailing/class/mailing.class.php +++ b/htdocs/comm/mailing/class/mailing.class.php @@ -41,6 +41,8 @@ class Mailing extends CommonObject var $bgcolor; var $bgimage; + var $statut; // Status 0=Draft, 1=Validated, 2=Sent partially, 3=Sent completely + var $email_from; var $email_replyto; var $email_errorsto; diff --git a/htdocs/filefunc.inc.php b/htdocs/filefunc.inc.php index 92a41209ba4..54053c26606 100644 --- a/htdocs/filefunc.inc.php +++ b/htdocs/filefunc.inc.php @@ -31,7 +31,7 @@ */ if (! defined('DOL_APPLICATION_TITLE')) define('DOL_APPLICATION_TITLE','Dolibarr'); -if (! defined('DOL_VERSION')) define('DOL_VERSION','4.0.0-beta'); +if (! defined('DOL_VERSION')) define('DOL_VERSION','4.0.0-rc'); if (! defined('EURO')) define('EURO',chr(128)); From 16e3a3d2945cc32705763d71bc13f3843c57b8a0 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 6 Jul 2016 22:49:08 +0200 Subject: [PATCH 28/34] Fix datadir not defined Fix can't use the cron script on cloud services since the admin user may have different values. --- build/exe/doliwamp/doliwamp.iss | 1 + scripts/cron/cron_run_jobs.php | 23 ++++++++++++++++++++--- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/build/exe/doliwamp/doliwamp.iss b/build/exe/doliwamp/doliwamp.iss index 8b368fa3b8f..c82b7b40c47 100644 --- a/build/exe/doliwamp/doliwamp.iss +++ b/build/exe/doliwamp/doliwamp.iss @@ -314,6 +314,7 @@ function NextButtonClick(CurPageID: Integer): Boolean; var myResult: Integer; var res: Boolean; var paramok: Boolean; +var datadir: String; var exedirold: String; var exedirnew: String; var themessage: String; diff --git a/scripts/cron/cron_run_jobs.php b/scripts/cron/cron_run_jobs.php index df755a50b64..38054c48c69 100755 --- a/scripts/cron/cron_run_jobs.php +++ b/scripts/cron/cron_run_jobs.php @@ -80,6 +80,23 @@ if ($key != $conf->global->CRON_KEY) exit(-1); } +// If param userlogin is reserved word 'firstadmin' +if ($userlogin == 'firstadmin') +{ + $sql='SELECT login from '.MAIN_DB_PREFIX.'user WHERE admin = 1 ORDER BY entity LIMIT 1'; + $resql=$db->query($sql); + if ($resql) + { + $obj=$db->fetch_object($resql); + if ($obj) + { + $userlogin = $obj->login; + echo "First admin user found is login '".$userlogin."'\n
"; + } + } + else dol_print_error($db); +} + // Check user login $user=new User($db); $result=$user->fetch('',$userlogin); @@ -93,8 +110,8 @@ else { if (empty($user->id)) { - echo " User user login: ".$userlogin." do not exists"; - dol_syslog(" User user login:".$userlogin." do not exists", LOG_ERR); + echo "User user login: ".$userlogin." does not exists"; + dol_syslog("User user login:".$userlogin." does not exists", LOG_ERR); exit(-1); } } @@ -178,7 +195,7 @@ function usage($path,$script_file) { global $conf; - print "Usage: ".$script_file." securitykey userlogin [cronjobid]\n"; + print "Usage: ".$script_file." securitykey userlogin|'firstadmin' [cronjobid]\n"; print "The script return 0 when everything worked successfully.\n"; print "\n"; print "On Linux system, you can have cron jobs ran automatically by adding an entry into cron.\n"; From d7bc30fc4e791ea65fa826f34ad45c097797c942 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 6 Jul 2016 23:18:01 +0200 Subject: [PATCH 29/34] Prepare DoliWamp 4.0 --- build/exe/doliwamp/doliwamp.bmp | Bin 52574 -> 52574 bytes htdocs/public/demo/index.php | 4 ++-- htdocs/theme/eldy/style.css.php | 10 +++++++++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/build/exe/doliwamp/doliwamp.bmp b/build/exe/doliwamp/doliwamp.bmp index 52b1320d1113e36e744c5ebb2f1aaa5b397e5b0f..3414e100306f6d2d2c1866ac9daa8ba1bc63dc18 100644 GIT binary patch literal 52574 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 literal 52574 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'."\n"; // Title print '
Demo '.$profilearray['label'].'Demo '.$profilearray['label'].''.$langs->trans($profilearray['label']).'